diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 8c24e6af52..c270d78354 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,6 +1,6 @@
---
name: Feature request
-about: Suggest an idea for this project
+about: Do not make a new issue for feature requests! Instead, post it on FeatHub, see the README.
---
diff --git a/.github/Mindustry-CodeStyle-IJ.xml b/.github/Mindustry-CodeStyle-IJ.xml
index 6a48acd1dd..94486ff95b 100644
--- a/.github/Mindustry-CodeStyle-IJ.xml
+++ b/.github/Mindustry-CodeStyle-IJ.xml
@@ -12,7 +12,7 @@
diff --git a/.gitignore b/.gitignore
index c362483e39..10fca2d7f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,8 +32,8 @@ steam_appid.txt
/core/assets/gifexport/
/core/assets/version.properties
/core/assets/locales
-/ios/src/io/anuke/mindustry/gen/
-/core/src/io/anuke/mindustry/gen/
+/ios/src/mindustry/gen/
+/core/src/mindustry/gen/
ios/robovm.properties
packr-out/
config/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e8870a2f23..199aa17bf6 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -31,7 +31,7 @@ Import [this style file](.github/Mindustry-CodeStyle-IJ.xml) into IntelliJ to ge
#### Do not use incompatible Java features (java.util.function, java.awt).
Android [does not support](https://developer.android.com/studio/write/java8-support#supported_features) many of Java 8's features, such as the packages `java.util.function`, `java.util.stream` or `forEach` in collections. Do not use these in your code.
-If you need to use functional interfaces, use the ones in `io.anuke.arc.func`, which are more or less the same with different naming schemes.
+If you need to use functional interfaces, use the ones in `arc.func`, which are more or less the same with different naming schemes.
The same applies to any class *outside* of the standard `java.[n]io` / `java.net` / `java.util` packages: Most of them are not supported.
`java.awt` is one of these packages: do not use it, ever. It is not supported on any platform, even desktop - the entire package is removed during JRE minimization.
@@ -39,7 +39,7 @@ In general, if you are using IntelliJ, you should be warned about platform incom
#### Use `arc` collections and classes when possible.
-Instead of using `java.util.List`, `java.util.HashMap`, and other standard Java collections, use `Array`, `ObjectMap` and other equivalents from `io.anuke.arc.collection`.
+Instead of using `java.util.List`, `java.util.HashMap`, and other standard Java collections, use `Array`, `ObjectMap` and other equivalents from `arc.struct`.
Why? Because that's what the rest of the codebase uses, and the standard collections have a lot of cruft and usability issues associated with them.
In the rare case that concurrency is required, you may use the standard Java classes for that purpose (e.g. `CopyOnWriteArrayList`).
@@ -47,7 +47,7 @@ What you'll usually need to change:
- `HashSet` -> `ObjectSet`
- `HashMap` -> `ObjectMap`
- `List` / `ArrayList` / `Stack` -> `Array`
-- `java.util.Queue` -> `io.anuke.arc.collection.Queue`
+- `java.util.Queue` -> `arc.struct.Queue`
- *Many others*
diff --git a/README.md b/README.md
index 555f3b3e09..2f0cab8ff3 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ See [CONTRIBUTING](CONTRIBUTING.md).
Bleeding-edge live builds are generated automatically for every commit. You can see them [here](https://github.com/Anuken/MindustryBuilds/releases). Old builds might still be on [jenkins](https://jenkins.hellomouse.net/job/mindustry/).
If you'd rather compile on your own, follow these instructions.
-First, make sure you have [Java 8](https://www.java.com/en/download/) and [JDK 8](https://adoptopenjdk.net/) installed. Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands:
+First, make sure you have [JDK 8](https://adoptopenjdk.net/) installed. Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands:
#### Windows
@@ -49,11 +49,6 @@ If the terminal returns `Permission denied` or `Command not found` on Mac/Linux,
Gradle may take up to several minutes to download files. Be patient.
After building, the output .JAR file should be in `/desktop/build/libs/Mindustry.jar` for desktop builds, and in `/server/build/libs/server-release.jar` for server builds.
-### Feature Requests
-
-[](https://feathub.com/Anuken/Mindustry)
-
-
### Downloads
[
](https://f-droid.org/packages/io.anuke.mindustry/)
+
+### Feature Requests
+
+[](https://feathub.com/Anuken/Mindustry)
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index a29bcea7c3..b096e11a41 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -19,7 +19,7 @@
android:theme="@style/GdxTheme" android:fullBackupContent="@xml/backup_rules">
diff --git a/android/build.gradle b/android/build.gradle
index 5795f34340..015656f543 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -161,5 +161,5 @@ task run(type: Exec){
}
def adb = path + "/platform-tools/adb"
- commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/io.anuke.mindustry.AndroidLauncher'
+ commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/mindustry.android.AndroidLauncher'
}
\ No newline at end of file
diff --git a/android/proguard-project.txt b/android/proguard-project.txt
index 1f34b8cae8..5576552446 100644
--- a/android/proguard-project.txt
+++ b/android/proguard-project.txt
@@ -22,8 +22,8 @@
-verbose
-verbose
-ignorewarnings
--keep class io.anuke.mindustry.game.Rules
--keep class io.anuke.mindustry.desktop.DesktopLauncher
+-keep class mindustry.game.Rules
+-keep class mindustry.desktop.DesktopLauncher
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/mindustry/android/AndroidLauncher.java
similarity index 95%
rename from android/src/io/anuke/mindustry/AndroidLauncher.java
rename to android/src/mindustry/android/AndroidLauncher.java
index 25119c3572..438d133707 100644
--- a/android/src/io/anuke/mindustry/AndroidLauncher.java
+++ b/android/src/mindustry/android/AndroidLauncher.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry;
+package mindustry.android;
import android.*;
import android.app.*;
@@ -9,22 +9,24 @@ import android.os.Build.*;
import android.os.*;
import android.provider.Settings.*;
import android.telephony.*;
-import io.anuke.arc.*;
-import io.anuke.arc.backends.android.surfaceview.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.serialization.*;
-import io.anuke.mindustry.game.Saves.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.ui.dialogs.*;
+import arc.*;
+import arc.backend.android.*;
+import arc.files.*;
+import arc.func.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.serialization.*;
+import mindustry.*;
+import mindustry.game.Saves.*;
+import mindustry.io.*;
+import mindustry.ui.dialogs.*;
import java.io.*;
import java.lang.System;
import java.util.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
+
public class AndroidLauncher extends AndroidApplication{
public static final int PERMISSION_REQUEST_CODE = 1;
diff --git a/android/src/io/anuke/mindustry/AndroidRhinoContext.java b/android/src/mindustry/android/AndroidRhinoContext.java
similarity index 98%
rename from android/src/io/anuke/mindustry/AndroidRhinoContext.java
rename to android/src/mindustry/android/AndroidRhinoContext.java
index 4960941d88..bd6c144478 100644
--- a/android/src/io/anuke/mindustry/AndroidRhinoContext.java
+++ b/android/src/mindustry/android/AndroidRhinoContext.java
@@ -1,8 +1,10 @@
-package io.anuke.mindustry;
+package mindustry.android;
import android.annotation.*;
import android.os.*;
import android.os.Build.*;
+import arc.*;
+import arc.backend.android.*;
import com.android.dex.*;
import com.android.dx.cf.direct.*;
import com.android.dx.command.dexer.*;
@@ -11,8 +13,6 @@ import com.android.dx.dex.cf.*;
import com.android.dx.dex.file.DexFile;
import com.android.dx.merge.*;
import dalvik.system.*;
-import io.anuke.arc.*;
-import io.anuke.arc.backends.android.surfaceview.*;
import org.mozilla.javascript.*;
import java.io.*;
@@ -178,7 +178,7 @@ public class AndroidRhinoContext{
}catch(IOException e){
e.printStackTrace();
}
- android.content.Context context = ((AndroidApplication)Core.app).getContext();
+ android.content.Context context = ((AndroidApplication) Core.app).getContext();
return new DexClassLoader(dexFile.getPath(), VERSION.SDK_INT >= 21 ? context.getCodeCacheDir().getPath() : context.getCacheDir().getAbsolutePath(), null, getParent()).loadClass(name);
}
diff --git a/annotations/src/main/java/io/anuke/annotations/Annotations.java b/annotations/src/main/java/mindustry/annotations/Annotations.java
similarity index 99%
rename from annotations/src/main/java/io/anuke/annotations/Annotations.java
rename to annotations/src/main/java/mindustry/annotations/Annotations.java
index 6ee59964e9..8124930825 100644
--- a/annotations/src/main/java/io/anuke/annotations/Annotations.java
+++ b/annotations/src/main/java/mindustry/annotations/Annotations.java
@@ -1,4 +1,4 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import java.lang.annotation.*;
diff --git a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/AssetsAnnotationProcessor.java
similarity index 82%
rename from annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java
rename to annotations/src/main/java/mindustry/annotations/AssetsAnnotationProcessor.java
index 3c28c83cea..3ccb3d0729 100644
--- a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java
+++ b/annotations/src/main/java/mindustry/annotations/AssetsAnnotationProcessor.java
@@ -1,7 +1,7 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.squareup.javapoet.*;
-import io.anuke.annotations.Annotations.*;
+import mindustry.annotations.Annotations.*;
import javax.annotation.processing.*;
import javax.lang.model.*;
@@ -12,10 +12,10 @@ import java.nio.file.*;
import java.util.*;
@SupportedSourceVersion(SourceVersion.RELEASE_8)
-@SupportedAnnotationTypes("io.anuke.annotations.Annotations.StyleDefaults")
+@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 = "io.anuke.mindustry.gen";
+ private static final String packageName = "mindustry.gen";
private String path;
private int round;
@@ -39,8 +39,8 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
.getParent().getParent().getParent().getParent().getParent().getParent().toString();
path = path.replace("%20", " ");
- processSounds("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound");
- processSounds("Musics", path + "/assets/music", "io.anuke.arc.audio.Music");
+ processSounds("Sounds", path + "/assets/sounds", "arc.audio.Sound");
+ processSounds("Musics", path + "/assets/music", "arc.audio.Music");
processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class));
return true;
@@ -75,7 +75,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
suffix = suffix.isEmpty() ? "" : "-" + suffix;
String sfilen = filename + suffix;
- String dtype = p.getFileName().toString().endsWith(".9.png") ? "io.anuke.arc.scene.style.NinePatchDrawable" : "io.anuke.arc.scene.style.TextureRegionDrawable";
+ String dtype = p.getFileName().toString().endsWith(".9.png") ? "arc.scene.style.NinePatchDrawable" : "arc.scene.style.TextureRegionDrawable";
String varname = capitalize(sfilen);
TypeSpec.Builder ttype = type;
@@ -91,7 +91,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
if(SourceVersion.isKeyword(varname)) varname += "s";
ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC);
- tload.addStatement(varname + " = ("+dtype+")io.anuke.arc.Core.atlas.drawable($S)", sfilen);
+ tload.addStatement(varname + " = ("+dtype+")arc.Core.atlas.drawable($S)", sfilen);
}
});
@@ -100,7 +100,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> {
String fname = field.getSimpleName().toString();
if(fname.startsWith("default")){
- loadStyles.addStatement("io.anuke.arc.Core.scene.addStyle(" + field.asType().toString() + ".class, io.anuke.mindustry.ui.Styles." + fname + ")");
+ loadStyles.addStatement("arc.Core.scene.addStyle(" + field.asType().toString() + ".class, mindustry.ui.Styles." + fname + ")");
}
});
}
@@ -136,17 +136,17 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
- String filename = "io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\"";
+ String filename = "arc.Core.app.getType() != arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\"";
- loadBegin.addStatement("io.anuke.arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3"));
+ loadBegin.addStatement("arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3"));
- dispose.addStatement("io.anuke.arc.Core.assets.unload(" + filename + ")");
+ dispose.addStatement("arc.Core.assets.unload(" + filename + ")");
dispose.addStatement(name + " = null");
- type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
+ type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
});
if(classname.equals("Sounds")){
- type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
+ type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
}
type.addMethod(loadBegin.build());
diff --git a/annotations/src/main/java/io/anuke/annotations/CallSuperAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/CallSuperAnnotationProcessor.java
similarity index 96%
rename from annotations/src/main/java/io/anuke/annotations/CallSuperAnnotationProcessor.java
rename to annotations/src/main/java/mindustry/annotations/CallSuperAnnotationProcessor.java
index 1a0102a793..01a3fdb0e1 100644
--- a/annotations/src/main/java/io/anuke/annotations/CallSuperAnnotationProcessor.java
+++ b/annotations/src/main/java/mindustry/annotations/CallSuperAnnotationProcessor.java
@@ -1,9 +1,9 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.sun.source.util.*;
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.tree.JCTree.*;
-import io.anuke.annotations.Annotations.*;
+import mindustry.annotations.Annotations.*;
import javax.annotation.processing.*;
import javax.lang.model.*;
diff --git a/annotations/src/main/java/io/anuke/annotations/ClassEntry.java b/annotations/src/main/java/mindustry/annotations/ClassEntry.java
similarity index 92%
rename from annotations/src/main/java/io/anuke/annotations/ClassEntry.java
rename to annotations/src/main/java/mindustry/annotations/ClassEntry.java
index a9be2ec134..002dcac88c 100644
--- a/annotations/src/main/java/io/anuke/annotations/ClassEntry.java
+++ b/annotations/src/main/java/mindustry/annotations/ClassEntry.java
@@ -1,4 +1,4 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import java.util.ArrayList;
diff --git a/annotations/src/main/java/io/anuke/annotations/CodeAnalyzerTreeScanner.java b/annotations/src/main/java/mindustry/annotations/CodeAnalyzerTreeScanner.java
similarity index 97%
rename from annotations/src/main/java/io/anuke/annotations/CodeAnalyzerTreeScanner.java
rename to annotations/src/main/java/mindustry/annotations/CodeAnalyzerTreeScanner.java
index 8655efe155..13059b38b8 100644
--- a/annotations/src/main/java/io/anuke/annotations/CodeAnalyzerTreeScanner.java
+++ b/annotations/src/main/java/mindustry/annotations/CodeAnalyzerTreeScanner.java
@@ -1,4 +1,4 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.sun.source.tree.*;
import com.sun.source.util.TreePathScanner;
@@ -9,7 +9,7 @@ import com.sun.tools.javac.code.Symbol.MethodSymbol;
import com.sun.tools.javac.code.Type.ClassType;
import com.sun.tools.javac.tree.JCTree.JCIdent;
import com.sun.tools.javac.tree.JCTree.JCTypeApply;
-import io.anuke.annotations.Annotations.CallSuper;
+import mindustry.annotations.Annotations.CallSuper;
import java.lang.annotation.Annotation;
diff --git a/annotations/src/main/java/io/anuke/annotations/IOFinder.java b/annotations/src/main/java/mindustry/annotations/IOFinder.java
similarity index 92%
rename from annotations/src/main/java/io/anuke/annotations/IOFinder.java
rename to annotations/src/main/java/mindustry/annotations/IOFinder.java
index 9276b9b887..e586cbd4a8 100644
--- a/annotations/src/main/java/io/anuke/annotations/IOFinder.java
+++ b/annotations/src/main/java/mindustry/annotations/IOFinder.java
@@ -1,7 +1,7 @@
-package io.anuke.annotations;
+package mindustry.annotations;
-import io.anuke.annotations.Annotations.ReadClass;
-import io.anuke.annotations.Annotations.WriteClass;
+import mindustry.annotations.Annotations.ReadClass;
+import mindustry.annotations.Annotations.WriteClass;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
@@ -11,8 +11,8 @@ import java.util.HashMap;
import java.util.Set;
/**
- * This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass}
- * and {@link io.anuke.annotations.Annotations.ReadClass} annotations.
+ * This class finds reader and writer methods annotated by the {@link Annotations.WriteClass}
+ * and {@link Annotations.ReadClass} annotations.
*/
public class IOFinder{
diff --git a/annotations/src/main/java/io/anuke/annotations/MethodEntry.java b/annotations/src/main/java/mindustry/annotations/MethodEntry.java
similarity index 96%
rename from annotations/src/main/java/io/anuke/annotations/MethodEntry.java
rename to annotations/src/main/java/mindustry/annotations/MethodEntry.java
index d642671641..0010d4b4d4 100644
--- a/annotations/src/main/java/io/anuke/annotations/MethodEntry.java
+++ b/annotations/src/main/java/mindustry/annotations/MethodEntry.java
@@ -1,6 +1,6 @@
-package io.anuke.annotations;
+package mindustry.annotations;
-import io.anuke.annotations.Annotations.*;
+import mindustry.annotations.Annotations.*;
import javax.lang.model.element.ExecutableElement;
diff --git a/annotations/src/main/java/io/anuke/annotations/RemoteMethodAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/RemoteMethodAnnotationProcessor.java
similarity index 94%
rename from annotations/src/main/java/io/anuke/annotations/RemoteMethodAnnotationProcessor.java
rename to annotations/src/main/java/mindustry/annotations/RemoteMethodAnnotationProcessor.java
index b9fbba57a8..2da9ddb35c 100644
--- a/annotations/src/main/java/io/anuke/annotations/RemoteMethodAnnotationProcessor.java
+++ b/annotations/src/main/java/mindustry/annotations/RemoteMethodAnnotationProcessor.java
@@ -1,9 +1,9 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.squareup.javapoet.*;
-import io.anuke.annotations.Annotations.Loc;
-import io.anuke.annotations.Annotations.Remote;
-import io.anuke.annotations.IOFinder.ClassSerializer;
+import mindustry.annotations.Annotations.Loc;
+import mindustry.annotations.Annotations.Remote;
+import mindustry.annotations.IOFinder.ClassSerializer;
import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
@@ -16,9 +16,9 @@ import java.util.stream.Collectors;
/** The annotation processor for generating remote method call code. */
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({
-"io.anuke.annotations.Annotations.Remote",
-"io.anuke.annotations.Annotations.WriteClass",
-"io.anuke.annotations.Annotations.ReadClass",
+"mindustry.annotations.Annotations.Remote",
+"mindustry.annotations.Annotations.WriteClass",
+"mindustry.annotations.Annotations.ReadClass",
})
public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
/** Maximum size of each event packet. */
@@ -26,7 +26,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
/** Warning on top of each autogenerated file. */
public static final String autogenWarning = "Autogenerated file. Do not modify!\n";
/** Name of the base package to put all the generated classes. */
- private static final String packageName = "io.anuke.mindustry.gen";
+ private static final String packageName = "mindustry.gen";
/** Name of class that handles reading and invoking packets on the server. */
private static final String readServerName = "RemoteReadServer";
diff --git a/annotations/src/main/java/io/anuke/annotations/RemoteReadGenerator.java b/annotations/src/main/java/mindustry/annotations/RemoteReadGenerator.java
similarity index 97%
rename from annotations/src/main/java/io/anuke/annotations/RemoteReadGenerator.java
rename to annotations/src/main/java/mindustry/annotations/RemoteReadGenerator.java
index 6bbc34ed0d..166c7c5ce5 100644
--- a/annotations/src/main/java/io/anuke/annotations/RemoteReadGenerator.java
+++ b/annotations/src/main/java/mindustry/annotations/RemoteReadGenerator.java
@@ -1,7 +1,7 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.squareup.javapoet.*;
-import io.anuke.annotations.IOFinder.ClassSerializer;
+import mindustry.annotations.IOFinder.ClassSerializer;
import javax.lang.model.element.*;
import javax.tools.Diagnostic.Kind;
@@ -47,7 +47,7 @@ public class RemoteReadGenerator{
Constructor cons = TypeName.class.getDeclaredConstructor(String.class);
cons.setAccessible(true);
- TypeName playerType = cons.newInstance("io.anuke.mindustry.entities.type.Player");
+ TypeName playerType = cons.newInstance("mindustry.entities.type.Player");
//add player parameter
readMethod.addParameter(playerType, "player");
}
diff --git a/annotations/src/main/java/io/anuke/annotations/RemoteWriteGenerator.java b/annotations/src/main/java/mindustry/annotations/RemoteWriteGenerator.java
similarity index 86%
rename from annotations/src/main/java/io/anuke/annotations/RemoteWriteGenerator.java
rename to annotations/src/main/java/mindustry/annotations/RemoteWriteGenerator.java
index d28ff02a2d..dfe3f1fa00 100644
--- a/annotations/src/main/java/io/anuke/annotations/RemoteWriteGenerator.java
+++ b/annotations/src/main/java/mindustry/annotations/RemoteWriteGenerator.java
@@ -1,8 +1,8 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.squareup.javapoet.*;
-import io.anuke.annotations.Annotations.Loc;
-import io.anuke.annotations.IOFinder.ClassSerializer;
+import mindustry.annotations.Annotations.Loc;
+import mindustry.annotations.IOFinder.ClassSerializer;
import javax.lang.model.element.*;
import javax.tools.Diagnostic.Kind;
@@ -77,7 +77,7 @@ public class RemoteWriteGenerator{
return;
}
- if(!elem.getParameters().get(0).asType().toString().equals("io.anuke.mindustry.entities.type.Player")){
+ if(!elem.getParameters().get(0).asType().toString().equals("mindustry.entities.type.Player")){
Utils.messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", elem);
return;
}
@@ -85,19 +85,19 @@ public class RemoteWriteGenerator{
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
if(!toAll){
- method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "playerConnection");
+ method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "playerConnection");
}
//add sender to ignore
if(forwarded){
- method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "exceptConnection");
+ method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "exceptConnection");
}
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
if(!forwarded && methodEntry.local != Loc.none){
//add in local checks
if(methodEntry.local != Loc.both){
- method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.Vars.net.active())");
+ method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !mindustry.Vars.net.active())");
}
//concatenate parameters
@@ -106,7 +106,7 @@ public class RemoteWriteGenerator{
for(VariableElement var : elem.getParameters()){
//special case: calling local-only methods uses the local player
if(index == 0 && methodEntry.where == Loc.client){
- results.append("io.anuke.mindustry.Vars.player");
+ results.append("mindustry.Vars.player");
}else{
results.append(var.getSimpleName());
}
@@ -127,7 +127,7 @@ public class RemoteWriteGenerator{
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
//add statement to create packet from pool
- method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.arc.util.pooling.Pools");
+ method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "mindustry.net.Packets.InvokePacket", "arc.util.pooling.Pools");
//assign buffer
method.addStatement("packet.writeBuffer = TEMP_BUFFER");
//assign priority
@@ -159,7 +159,7 @@ public class RemoteWriteGenerator{
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check
- method.beginControlFlow("if(io.anuke.mindustry.Vars.net.server())");
+ method.beginControlFlow("if(mindustry.Vars.net.server())");
}
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
@@ -194,19 +194,19 @@ public class RemoteWriteGenerator{
if(forwarded){ //forward packet
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
- sendString = "io.anuke.mindustry.Vars.net.send(";
+ sendString = "mindustry.Vars.net.send(";
}else{
- sendString = "io.anuke.mindustry.Vars.net.sendExcept(exceptConnection, ";
+ sendString = "mindustry.Vars.net.sendExcept(exceptConnection, ";
}
}else if(toAll){ //send to all players / to server
- sendString = "io.anuke.mindustry.Vars.net.send(";
+ sendString = "mindustry.Vars.net.send(";
}else{ //send to specific client from server
sendString = "playerConnection.send(";
}
//send the actual packet
method.addStatement(sendString + "packet, " +
- (methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
+ (methodEntry.unreliable ? "mindustry.net.Net.SendMode.udp" : "mindustry.net.Net.SendMode.tcp") + ")");
//end check for server/client
@@ -217,8 +217,8 @@ public class RemoteWriteGenerator{
}
private String getCheckString(Loc loc){
- return loc.isClient && loc.isServer ? "io.anuke.mindustry.Vars.net.server() || io.anuke.mindustry.Vars.net.client()" :
- loc.isClient ? "io.anuke.mindustry.Vars.net.client()" :
- loc.isServer ? "io.anuke.mindustry.Vars.net.server()" : "false";
+ return loc.isClient && loc.isServer ? "mindustry.Vars.net.server() || mindustry.Vars.net.client()" :
+ loc.isClient ? "mindustry.Vars.net.client()" :
+ loc.isServer ? "mindustry.Vars.net.server()" : "false";
}
}
diff --git a/annotations/src/main/java/io/anuke/annotations/SerializeAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/SerializeAnnotationProcessor.java
similarity index 86%
rename from annotations/src/main/java/io/anuke/annotations/SerializeAnnotationProcessor.java
rename to annotations/src/main/java/mindustry/annotations/SerializeAnnotationProcessor.java
index c3c4c32e00..e173a14b48 100644
--- a/annotations/src/main/java/io/anuke/annotations/SerializeAnnotationProcessor.java
+++ b/annotations/src/main/java/mindustry/annotations/SerializeAnnotationProcessor.java
@@ -1,25 +1,26 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.squareup.javapoet.*;
-import io.anuke.annotations.Annotations.*;
+import mindustry.annotations.Annotations.*;
import javax.annotation.processing.*;
import javax.lang.model.*;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.*;
import javax.lang.model.util.*;
+import javax.tools.Diagnostic.*;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import java.util.zip.*;
@SupportedSourceVersion(SourceVersion.RELEASE_8)
-@SupportedAnnotationTypes("io.anuke.annotations.Annotations.Serialize")
+@SupportedAnnotationTypes("mindustry.annotations.Annotations.Serialize")
public class SerializeAnnotationProcessor extends AbstractProcessor{
/** 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 = "io.anuke.mindustry.gen";
+ private static final String packageName = "mindustry.gen";
private int round;
@@ -31,7 +32,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
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(getClass().getResourceAsStream(new String(Base64.getDecoder().decode("L0RTX1N0b3Jl"))))).readUTF()));
+ classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(getClass().getResourceAsStream(new String(Base64.getDecoder().decode("L0RTX1N0b3Jl"))))).readUTF().replace("omXS128", "").replace("io.anuke.", "")));
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
@@ -43,7 +44,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
.addSuperinterface(ParameterizedTypeName.get(
- ClassName.bestGuess("io.anuke.arc.Settings.TypeSerializer"), type));
+ ClassName.bestGuess("arc.Settings.TypeSerializer"), type));
MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write")
.returns(void.class)
@@ -73,8 +74,8 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
}else{
- writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")");
- readMethod.addStatement("object." + name + " = (" + typeName + ")io.anuke.arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)");
+ 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)");
}
}
@@ -83,7 +84,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
serializer.addMethod(writeMethod.build());
serializer.addMethod(readMethod.build());
- method.addStatement("io.anuke.arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.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);
diff --git a/annotations/src/main/java/io/anuke/annotations/StructAnnotationProcessor.java b/annotations/src/main/java/mindustry/annotations/StructAnnotationProcessor.java
similarity index 97%
rename from annotations/src/main/java/io/anuke/annotations/StructAnnotationProcessor.java
rename to annotations/src/main/java/mindustry/annotations/StructAnnotationProcessor.java
index fa89b6e132..632e14a91a 100644
--- a/annotations/src/main/java/io/anuke/annotations/StructAnnotationProcessor.java
+++ b/annotations/src/main/java/mindustry/annotations/StructAnnotationProcessor.java
@@ -1,8 +1,8 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import com.squareup.javapoet.*;
-import io.anuke.annotations.Annotations.Struct;
-import io.anuke.annotations.Annotations.StructField;
+import mindustry.annotations.Annotations.Struct;
+import mindustry.annotations.Annotations.StructField;
import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
@@ -19,11 +19,11 @@ import java.util.Set;
*/
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({
-"io.anuke.annotations.Annotations.Struct"
+"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 = "io.anuke.mindustry.gen";
+ private static final String packageName = "mindustry.gen";
private int round;
@Override
diff --git a/annotations/src/main/java/io/anuke/annotations/Utils.java b/annotations/src/main/java/mindustry/annotations/Utils.java
similarity index 96%
rename from annotations/src/main/java/io/anuke/annotations/Utils.java
rename to annotations/src/main/java/mindustry/annotations/Utils.java
index fa54f4c12d..773d6561d2 100644
--- a/annotations/src/main/java/io/anuke/annotations/Utils.java
+++ b/annotations/src/main/java/mindustry/annotations/Utils.java
@@ -1,4 +1,4 @@
-package io.anuke.annotations;
+package mindustry.annotations;
import javax.annotation.processing.Filer;
import javax.annotation.processing.Messager;
diff --git a/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor
index 0094bb0b52..0888df74ee 100644
--- a/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor
+++ b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor
@@ -1,5 +1,5 @@
-io.anuke.annotations.RemoteMethodAnnotationProcessor
-io.anuke.annotations.SerializeAnnotationProcessor
-io.anuke.annotations.StructAnnotationProcessor
-io.anuke.annotations.CallSuperAnnotationProcessor
-io.anuke.annotations.AssetsAnnotationProcessor
\ No newline at end of file
+mindustry.annotations.RemoteMethodAnnotationProcessor
+mindustry.annotations.SerializeAnnotationProcessor
+mindustry.annotations.StructAnnotationProcessor
+mindustry.annotations.CallSuperAnnotationProcessor
+mindustry.annotations.AssetsAnnotationProcessor
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 7bb0e486b0..fba440efbe 100644
--- a/build.gradle
+++ b/build.gradle
@@ -166,14 +166,13 @@ project(":ios"){
task incrementConfig{
def vfile = file('robovm.properties')
-
def props = new Properties()
if(vfile.exists()){
props.load(new FileInputStream(vfile))
}else{
props['app.id'] = 'io.anuke.mindustry'
props['app.version'] = '5.0'
- props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher'
+ props['app.mainclass'] = 'mindustry.IOSLauncher'
props['app.executable'] = 'IOSLauncher'
props['app.name'] = 'Mindustry'
}
@@ -230,7 +229,7 @@ project(":core"){
task cleanGen{
doFirst{
delete{
- delete "../core/src/io/anuke/mindustry/gen/"
+ delete "../core/src/mindustry/gen/"
}
}
}
@@ -238,11 +237,11 @@ project(":core"){
task copyGen{
doLast{
copy{
- from("../core/build/generated/sources/annotationProcessor/java/main/io/anuke/mindustry/gen"){
+ from("../core/build/generated/sources/annotationProcessor/java/main/mindustry/gen"){
include "**/*.java"
}
- into "../core/src/io/anuke/mindustry/gen"
+ into "../core/src/mindustry/gen"
}
}
}
diff --git a/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png b/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png
index d9d4eb609a..2fbc844b4f 100644
Binary files a/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png and b/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png differ
diff --git a/core/assets-raw/sprites/blocks/production/liquid-void.png b/core/assets-raw/sprites/blocks/production/liquid-void.png
new file mode 100644
index 0000000000..cd81df317d
Binary files /dev/null and b/core/assets-raw/sprites/blocks/production/liquid-void.png differ
diff --git a/core/assets-raw/sprites/ui/icons/icon-feathub.png b/core/assets-raw/sprites/ui/icons/icon-feathub.png
new file mode 100644
index 0000000000..ae1d06bf00
Binary files /dev/null and b/core/assets-raw/sprites/ui/icons/icon-feathub.png differ
diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties
index 07fd48f9fc..87afbb9801 100644
--- a/core/assets/bundles/bundle.properties
+++ b/core/assets/bundles/bundle.properties
@@ -12,6 +12,7 @@ link.itch.io.description = itch.io page with PC downloads
link.google-play.description = Google Play store listing
link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Official Mindustry wiki
+link.feathub.description = Suggest new features
linkfail = Failed to open link!\nThe URL has been copied to your clipboard.
screenshot = Screenshot saved to {0}
screenshot.invalid = Map too large, potentially not enough memory for screenshot.
@@ -28,6 +29,13 @@ load.system = System
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
+
schematic = Schematic
schematic.add = Save Schematic...
schematics = Schematics
@@ -147,6 +155,7 @@ server.kicked.nameEmpty = Your chosen name is invalid.
server.kicked.idInUse = You are already on this server! Connecting with two accounts is not permitted.
server.kicked.customClient = This server does not support custom builds. Download an official version.
server.kicked.gameover = Game over!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Your version:[accent] {0}[]\nServer version:[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.
@@ -634,6 +643,7 @@ setting.screenshake.name = Screen Shake
setting.effects.name = Display Effects
setting.destroyedblocks.name = Display Destroyed Blocks
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
@@ -657,6 +667,7 @@ setting.savecreate.name = Auto-Create Saves
setting.publichost.name = Public Game Visibility
setting.chatopacity.name = Chat Opacity
setting.lasersopacity.name = Power Laser Opacity
+setting.bridgeopacity.name = Bridge Opacity
setting.playerchat.name = Display Player Bubble Chat
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.
@@ -745,6 +756,7 @@ rules.enemyCheat = Infinite AI (Red Team) Resources
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Player Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.unitdamagemultiplier = Unit Damage Multiplier
@@ -967,6 +979,7 @@ block.mechanical-pump.name = Mechanical Pump
block.item-source.name = Item Source
block.item-void.name = Item Void
block.liquid-source.name = Liquid Source
+block.liquid-void.name = Liquid Void
block.power-void.name = Power Void
block.power-source.name = Power Infinite
block.unloader.name = Unloader
@@ -1072,7 +1085,7 @@ tutorial.launch = Once you reach a specific wave, you are able to[accent] launch
item.copper.description = The most basic structural material. Used extensively in all types of blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
-item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation.
+item.graphite.description = Mineralized carbon, used for ammunition and electrical components.
item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux.
item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production.
item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft.
@@ -1130,6 +1143,7 @@ block.power-source.description = Infinitely outputs power. Sandbox only.
block.item-source.description = Infinitely outputs items. Sandbox only.
block.item-void.description = Destroys any items. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles.
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties
index 2160901318..2c09d6393d 100644
--- a/core/assets/bundles/bundle_cs.properties
+++ b/core/assets/bundles/bundle_cs.properties
@@ -1,534 +1,569 @@
credits.text = Vytvořil [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
-credits = Kredity
-contributors = Překladatelé a Sponzoři
-discord = Připoj se k Mindustry na Discordu!
-link.discord.description = Oficiální Mindustry chatroom na Discordu!
-link.reddit.description = The Mindustry subreddit
+credits = Titulky
+contributors = Překladatelé a sponzoři
+discord = Připoj se k Mindustry\nna Discord serveru!
+link.discord.description = Oficiální kanál Mindustry na serveru Discord
+link.reddit.description = Mindustry na Redditu
link.github.description = Zdrojový kód hry
link.changelog.description = Seznam úprav
-link.dev-builds.description = Nestabilní verze vývoje hry
-link.trello.description = Oficiální Trello board pro plánované funkce
-link.itch.io.description = itch.io stránka pro stažení PC nebo webové verze
-link.google-play.description = Google Play store
-link.wiki.description = Oficiální Mindustry wiki
-linkfail = Nepodařilo se otevřít odkaz!\nURL byla zkopírována do schránky.
+link.dev-builds.description = Nestabilní vývojová verze hry
+link.trello.description = Oficiální Trello nástěnka s plánovanými novinkami
+link.itch.io.description = Stránka na itch.io s odkazy na stažení hry
+link.google-play.description = Obchod Google Play
+link.f-droid.description = Katalog F-Droid
+link.wiki.description = Oficiální Wiki Mindustry
+link.feathub.description = Navrhni něco nového do hry!
+linkfail = Nepodařilo se otevřít odkaz!\nAdresa URL byla zkopírována do schránky.
screenshot = Snímek obrazovky uložen {0}
-screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro snímek obrazovky.
+screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro získání snímku obrazovky.
gameover = Konec hry
-gameover.pvp = [accent] {0}[] Tým Vyhrál!
+gameover.pvp = Vyhrál tým [accent]{0}[]!
highscore = [accent]Nový rekord!
-copied = Copied.
+copied = Zkopírováno.
+
load.sound = Zvuky
load.map = Mapy
load.image = Obrázky
load.content = Obsah
-load.system = System
-load.mod = Módy
-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
+load.system = Systém
+load.mod = Modifikace
+load.scripts = Skripty
+
+be.update = Je dostupná zbrusu nová vývojářská verze:
+be.update.confirm = Chceš ji stáhnout a restartovat hru?
+be.updating = Aktualizuji...
+be.ignore = Přeskočit verzi
+be.noupdates = Aktualizace nebyla nalezena.
+be.check = Zkontrolovat aktualizace
+
+schematic = Šablona
+schematic.add = Ukládám š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.copy = Zkopírovat do schránky
+schematic.copy.import = Importovat ze schránky
+schematic.shareworkshop = Sdílet skrze Steam Workshop
+schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Převrátit šablonu
+schematic.saved = Šablona byla uložena.
+schematic.delete.confirm = Šablona bude kompletně vyhlazena.
+schematic.rename = Přejmenovat šablonu
+schematic.info = {0}x{1}, {2} bloků
+
stat.wave = Vln poraženo:[accent] {0}
stat.enemiesDestroyed = Nepřátel zničeno:[accent] {0}
stat.built = Budov postaveno:[accent] {0}
stat.destroyed = Budov zničeno:[accent] {0}
stat.deconstructed = Budov rozebráno:[accent] {0}
-stat.delivered = Materiálu odesláno:
-stat.rank = Závěrečné hodnocení: [accent]{0}
-launcheditems = [accent]Odeslané předměty
-launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
-map.delete = Jsi si jistý že chceš smazat mapu "[accent]{0}[]"?
-level.highscore = Nejvyšší skóre: [accent]{0}
-level.select = Výběr levelu
+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.
+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:
-showagain = Znovu neukazovat !
+showagain = Znovu neukazovat
coreattack = < Jádro je pod útokem! >
-nearpoint = [[ [scarlet]IHNED OPUSŤTE PROSTOR VÝSADKŮ[] ]\nNebezpečí okamžité smrti
-database = Databáze objektů
+nearpoint = [ [scarlet]IHNED OPUSŤTE PROSTOR VÝSADKU[] ]\nNebezpečí okamžité smrti!
+database = Databáze objektů ve hře
savegame = Uložit hru
loadgame = Načíst hru
joingame = Připojit se ke hře
customgame = Vlastní hra
newgame = Nová hra
none = <žádný>
-minimap = Minimapa
-position = Position
+minimap = Mapička
+position = Pozice
close = Zavřít
-website = Web. stránky
+website = Webové stránky
quit = Ukončit
save.quit = Uložit a ukončit
maps = Mapy
maps.browse = Procházet mapy
continue = Pokračovat
-maps.none = [LIGHT_GRAY]Žádné mapy nebyly nalezeny!
+maps.none = [lightgray]Mapy nebyly nalezeny.[]
invalid = Neplatné
-preparingconfig = Připravuji Config
-preparingcontent = Připravuji obsah
-uploadingcontent = Nahrávám obsah
-uploadingpreviewfile = Nahrávám prohlížecí soubor
+pickcolor = Vyber barvu
+preparingconfig = Připravuji konfiguraci
+preparingcontent = Připravuji obsah hry
+uploadingcontent = Nahrávám obsah hry
+uploadingpreviewfile = Nahrávám soubor s náhledem
committingchanges = Provádím změny
done = Hotovo
-feature.unsupported = Your device does not support this feature.
-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.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.missingdependencies = [scarlet]Missing dependencies: {0}
-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.import.github = Import GitHub Mod
-mod.remove.confirm = This mod will be deleted.
-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.
+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.guide = Průvodce modifikacemi
+mods.report = Nahlásit závadu
+mods.openfolder = Otevřít složku s modifikacemi
+mod.enabled = [lightgray]Povoleno[]
+mod.disabled = [scarlet]Zakázáno[]
+mod.disable = Zakázat
+mod.delete.error = Nebylo možnost smazat modifikaci. Soubor může být používán.
+mod.requiresversion = [scarlet]Minimální požadovaná verze hry: [accent]{0}[]
+mod.missingdependencies = [scarlet]Chybějící závislosti: {0}[]
+mod.erroredcontent = [scarlet]V obsahu jsou chyby[]
+mod.errors = Při načítání obsahu hry se vyskytly problémy.
+mod.noerrorplay = [scarlet]Máš modifikace s chybami.[] Buď zakaž dotčené modifikace, nebo oprav chyby před tím, než začneš hrát.
+mod.nowdisabled = [scarlet]Modifikaci '{0}' chybí tyto závislosti: [accent]{1}\n[lightgray]Tyto modifikace je třeba nejprve stáhnout.\nTato modifikace bude nyní automaticky zakázána.
+mod.enable = Povolit
+mod.requiresrestart = Hra bude ukončena, aby bylo možné nasadit modifikace.
+mod.reloadrequired = [scarlet]Je vyžadováno znovuspuštění hry.
+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.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.scripts.unsupported = Tvoje zařízení nepodporuje skripty. Některé modifikace nemusí správně fungovat.
+
about.button = O hře
name = Jméno:
-noname = Nejdřív si vyber[accent] herní jméno[].
-filename = Jméno složky:
-unlocked = Nový blok odemčen!
-completed = [accent]Dokončeno
+noname = Nejdřív si vyber [accent]jméno ve hře[].
+filename = Název souboru:
+unlocked = Byl odemmknut nový blok!
+completed = [accent]Dokončeno[]
techtree = Technologie
-research.list = [LIGHT_GRAY]Výzkum:
+research.list = [lightgray]Výzkum:[]
research = Výzkum
-researched = [LIGHT_GRAY]{0} vyzkoumán(o).
-players = {0} hráčů online
-players.single = {0} hráč online
-server.closing = [accent]Zavírám server...
+researched = Dokončen výzkum technologie: [lightgray]{0}[].
+players = Hráčů: {0}
+players.single = Hráč: {0}
+server.closing = [accent]Ukončuji server...[]
server.kicked.kick = Byl jsi vykopnut ze serveru!
-server.kicked.whitelist = Na server ti nebyl udělen přístup.
-server.kicked.serverClose = Server je zavřený.
-server.kicked.vote = Byl jsi odhlasován a vykopnut. Sbohem.
-server.kicked.clientOutdated = Zastaralý klient hry! Aktualizuj si hru!
-server.kicked.serverOutdated = Zastaralý server! Řekni hostiteli o aktualizaci!
-server.kicked.banned = Jsi zabanován na tomto serveru.
-server.kicked.typeMismatch = Tento server není kompatibilní s verzí tvého klienta
-server.kicked.playerLimit = Tento server je plný, vyčkej na volné místo.
-server.kicked.recentKick = Před nedávnem jsi byl vykopnut.\nPočkej než se znovu připojíš.
-server.kicked.nameInUse = Někdo se stejným jménem\nje aktuálně na serveru.
-server.kicked.nameEmpty = Tvé jméno je neplatné.
-server.kicked.idInUse = Již jsi na tomhle serveru připojen! Připojování se dvěma účty není povoleno.
-server.kicked.customClient = Tento server nepodporuje vlastní verze hry. Stáhni si oficiální verzi.
+server.kicked.whitelist = Na server Ti nebyl udělen přístup.
+server.kicked.serverClose = Server není otevřený.
+server.kicked.vote = Bylo odhlasováno, že budeš vykopnut ze serveru. Tak čau.
+server.kicked.clientOutdated = Byl detekována zastaralá verze klienta hry. Aktualizuj si hru!
+server.kicked.serverOutdated = Byl detekována zastaralá verze serveru. Požádej hostitele o aktualizaci!
+server.kicked.banned = Byl Ti zakázán přístup na tento server.
+server.kicked.typeMismatch = Tento server není kompatibilní s verzí Tvého klienta.
+server.kicked.playerLimit = Tento server je plný, vyčkej prosím, až se uvolní místo.
+server.kicked.recentKick = Před nedávnem jsi byl vykopnut z tohoto serveru.\nPočkej proto chvíli, než se zkusíš znovu připojit.
+server.kicked.nameInUse = Někdo se stejným jménem jako Ty\nje aktuálně přihlášen na serveru.
+server.kicked.nameEmpty = Tvé jméno není platné. Možná je prostě jen není nastaveno?
+server.kicked.idInUse = Na tomhle serveru jsi již připojen. Připojování se pod dvěma účty není dovoleno!
+server.kicked.customClient = Tento server nepodporuje upravené verze hry. Stáhni si, prosím. oficiální verzi.
server.kicked.gameover = Konec hry!
-server.versions = Verze klienta:[accent] {0}[]\nVerze serveru:[accent] {1}[]
-host.info = [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [LIGHT_GRAY]wifi nebo místní síti[] by měl vidět server ve svém listu serverů.\n\nJestli chcete aby se uživatelé připojovali odkudkoliv pomocí IP, [accent]přesměrování portů[] je nutné.\n\n[LIGHT_GRAY]Poznámka: Jestli někdo má problém s připojením ke své LAN hře, ujistěte se že má Mindustry povolený přístup k místní síti v nastavení Firewallu.
-join.info = Tady můžeš vložit [accent]IP serveru[] ke kterému se chceš připojit, nebo objevit [accent]Servery Místní sítě[] ke kterým se chceš připojit.\nLAN i Multiplayer jsou podporovány.\n\n[LIGHT_GRAY]Poznámka: Není žádný globální seznam serverů; Pokud se budeš chtít připojit k někomu pomocí IP, budeš jí muset znát od hostitele.
-hostserver = Hostovat hru
+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.
+hostserver = Hostovat hru více hráčů
invitefriends = Pozvat přátele
-hostserver.mobile = Hostovat\nHru
+hostserver.mobile = Hostovat\nhru
host = Hostitel
-hosting = [accent]Otevírám server...
+hosting = [accent]Otevírám server...[]
hosts.refresh = Obnovit
-hosts.discovering = Hledám hry LAN
+hosts.discovering = Hledám hry v místní síti (LAN)
hosts.discovering.any = Hledám hry
-server.refreshing = Obnovuji servery
-hosts.none = [lightgray]Žádné místní hry nebyly nalezeny!
-host.invalid = [scarlet]Nejde se připojit k hostiteli.
+server.refreshing = Aktualizuji stav serverů
+hosts.none = [lightgray]Žádné místní hry nebyly nalezeny![]
+host.invalid = [scarlet]Nejde se připojit k hostiteli.[]
trace = Vystopovat hráče
-trace.playername = Jméno hráče: [accent]{0}
-trace.ip = IP: [accent]{0}
-trace.id = Unikátní ID: [accent]{0}
-trace.mobile = Mobilní klient: [accent]{0}
-trace.modclient = Vlastní Klient: [accent]{0}
-invalidid = Neplatná IP klienta! Poslat zprávu o chybě.
-server.bans = Bany.
-server.bans.none = Žádní hráči s banem nebyli nalezeni.
-server.admins = Admini
-server.admins.none = Žádní admini nebyli nalezeni.
+trace.playername = Jméno hráče: [accent]{0}[]
+trace.ip = Adresa IP: [accent]{0}[]
+trace.id = Unikátní ID: [accent]{0}[]
+trace.mobile = Mobilní klient hry: [accent]{0}[]
+trace.modclient = Upravený klient hry: [accent]{0}[]
+invalidid = Neplatná adresa IP klienta! Zašli prosím zprávu o chybě.
+server.bans = Zákazy
+server.bans.none = Žádní hráči se zákazem nebyli nalezeni.
+server.admins = Správci
+server.admins.none = Žádní správci nebyli nalezeni.
server.add = Přidat server
-server.delete = Jsi si jistý že chceš smazat tento server?
+server.delete = Jsi si jistý, že chceš smazat tento server?
server.edit = Upravit server
-server.outdated = [crimson]Zastaralý server![]
-server.outdated.client = [crimson]Zastaralý klient![]
-server.version = [lightgray]Verze: {0} {1}
-server.custombuild = [yellow]Vlastní verze
-confirmban = Jsi si jistý že chceš zabanovat tohoto hráče?
-confirmkick = Jsi si jistý že chceš vykopnout tohoto hráče?
-confirmvotekick = Jsi si jistý že chceš hlasovat pro vykopnutí tohoto hráče?
-confirmunban = Jsi si jistý že chceš odbanovat tohoto hráče
-confirmadmin = Jsi si jistý že chceš tohoto hráče pasovat na admina?
-confirmunadmin = Jsi si jistý že chceš odebrat práva tomuto hráči?
+server.outdated = [crimson]Zastaralá verze serveru![]
+server.outdated.client = [crimson]Zastaralá verze klienta![]
+server.version = [gray]Verze: {0} {1}[]
+server.custombuild = [yellow]Upravená verze hry[]
+confirmban = Jsi si jistý, že chceš zakázat tohoto hráče?
+confirmkick = Jsi si jistý, že chceš vykopnout tohoto hráče?
+confirmvotekick = Jsi si jistý, že chceš hlasovat pro vykopnutí tohoto hráče?
+confirmunban = Jsi si jistý, že chceš zrušit zákaz pro tohoto hráče?
+confirmadmin = Jsi si jistý, že chceš tohoto hráče povýšit na admina?
+confirmunadmin = Jsi si jistý, že chceš odebrat správcovská práva tomuto hráči?
joingame.title = Připojit se ke hře
-joingame.ip = Adresa:
-disconnect = Odpojen.
+joingame.ip = Adresa IP:
+disconnect = Odpojeno.
disconnect.error = Chyba připojení.
disconnect.closed = Připojení bylo uzavřeno.
disconnect.timeout = Vypršel čas pro připojení.
-disconnect.data = Chyba načtení dat světa!
-cantconnect = Není možno připojit se ke hře ([accent]{0}[]).
-connecting = [accent]Připojuji se...
-connecting.data = [accent]Načítám data světa...
+disconnect.data = Chyba načtení dat ze serveru!
+cantconnect = Není možno se připojit ke hře ([accent]{0}[]).
+connecting = [accent]Připojuji se...[]
+connecting.data = [accent]Načítám data ze serveru...[]
server.port = Port:
server.addressinuse = Adresu již někdo používá!
server.invalidport = Neplatné číslo portu!
-server.error = [crimson]Chyba při hostování serveru: [accent]{0}
-save.new = Nové uložení
-save.overwrite = Jsi si jistý že chceš přepsat\ntento ukládaci slot?
+server.error = [crimson]Chyba při hostování serveru.[]
+save.new = Nové uložení hry
+save.overwrite = Jsi si jistý, že chceš přepsat\ntuto pozici pro uložení hry?
overwrite = Přepsat
-save.none = Žádné uložené pozice nebyly nalezeny
-saveload = [accent]Ukládám...
+save.none = Žádné uložené pozice nebyly nalezeny.
+saveload = Ukládám...
savefail = Nepodařilo se uložit hru!
-save.delete.confirm = Jsi si jistý že chceš smazat toto uložení?
+save.delete.confirm = Jsi si jistý, že chceš smazat toto uložení hry?
save.delete = Smazat
-save.export = Exportovat uložení
-save.import.invalid = [accent]Toto uložení je neplatné!
-save.import.fail = [crimson]Nepodařilo se importovat uložení: [accent]{0}
-save.export.fail = [crimson]Nepodařilo se exportovat uložení: [accent]{0}
-save.import = Importovat uložení
+save.export = Exportovat uložení hry
+save.import.invalid = [accent]Toto uložení není v pořádku![]
+save.import.fail = [crimson]Nepodařilo se importovat uložení hry: [accent]{0}[]
+save.export.fail = [crimson]Nepodařilo se exportovat uložení hry: [accent]{0}[]
+save.import = Importovat uložení hry
save.newslot = Uložit hru:
save.rename = Přejmenovat
save.rename.text = Nové jméno:
-selectslot = Vyber uložení.
-slot = [accent]Slot {0}
+selectslot = Vyber pozici pro uložení hry.
+slot = [accent]Pozice {0}[]
editmessage = Upravit zprávu
-save.corrupted = [accent]Uložení je poškozené nebo neplatné\nPokud jsi právě aktualizoval svou hru, je to možná změnou formátu pro ukládání a [scarlet]NE[] chyba hry.
+save.corrupted = Uložení je poškozené nebo neplatné.
empty =
on = On
off = Off
save.autosave = Automatické uložení: {0}
save.map = Mapa: {0}
-save.wave = Vlna {0}
+save.wave = Vlna: {0}
save.mode = Herní mod: {0}
save.date = Naposledy uloženo: {0}
save.playtime = Herní čas: {0}
warning = Varování.
confirm = Potvrdit
delete = Smazat
-view.workshop = Prohlédnout ve workshopu
-workshop.listing = Edit Workshop Listing
+view.workshop = Prohlédnout v dílně
+workshop.listing = Upravit popis v dílně
ok = OK
open = Otevřít
-customize = Přizpůsobit
+customize = Přizpůsobit pravidla
cancel = Zrušit
-openlink = Otevřít Odkaz
-copylink = Zkopírovat Odkaz
+openlink = Otevřít odkaz
+copylink = Zkopírovat odkaz
back = Zpět
-data.export = Exportuj Data
-data.import = Importuj Data
-data.exported = Data exportována.
-data.invalid = Neplatná herní data.
-data.import.confirm = Import externích dat smaže[scarlet] všechna[] vaše současná herní data.\n[accent]To nelze vrátit zpět![]\n\nPo importu data se hra ukončí.
-classic.export = Exportovat klasická data
-classic.export.text = [accent]Mindustry[] právě mělo významně velkou aktualizaci.\nKlasické (v3.5 build 40) uložení nebo mapa byly detekovány. Chtěl by jsi exportovat toto uložení do domácího adresáře tvého zařízení , pro pozdější použití v klasické verzi Mindustry ?
-quit.confirm = Jsi si jistý že chceš ukončit ?
-quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[]
+data.export = Exportovat data
+data.import = Importovat data
+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[].
loading = [accent]Načítám...
-reloading = [accent]načítám módy ...
+reloading = [accent]Načítám modifikace...
saving = [accent]Ukládám...
-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]Vlna {0}
-wave.waiting = [LIGHT_GRAY]Vlna za {0}
-wave.waveInProgress = [LIGHT_GRAY]Vlna v pohybu
-waiting = [LIGHT_GRAY]Čekám...
+cancelbuilding = [accent][[{0}][] vyčistí plán šablony
+selectschematic = [accent][[{0}][] provede výběr a zkopírování
+pausebuilding = [accent][[{0}][] zastaví stavění
+resumebuilding = [scarlet][[{0}][] bude pokračovat ve stavění
+wave = [accent]Vlna číslo {0}[]
+wave.waiting = [lightgray]Vlna za {0} vteřin[]
+wave.waveInProgress = [lightgray]Vlna přichází![]
+waiting = [lightgray]Čekám...[]
waiting.players = Čekání na hráče...
-wave.enemies = [LIGHT_GRAY]{0} Nepřátel zbývá
-wave.enemy = [LIGHT_GRAY]{0} Nepřítel zbývá
+wave.enemies = [lightgray]{0} zbývajících nepřátel
+wave.enemy = [lightgray]{0} zbývající nepřítel
loadimage = Nahrát obrázek
saveimage = Uložit obrázek
unknown = Neznámý
-custom = Vlastní
-builtin = Zabudovaný
-map.delete.confirm = Jsi si jistý žechceš tuto mapu smazat? tato akce je nevratná!
-map.random = [accent]Náhodná mapa
-map.nospawn = Tato mapa nemá žádné jádro pro hráče ke spawnutí! Přidej v editoru do této mapy[ROYAL] modré[] jádro.
-map.nospawn.pvp = Tato mapa nemá žádné nepřátelské jádro pro druhého hráče! Přidej v editoru do této mapy[SCARLET] červené[] jádro.
-map.nospawn.attack = Tato mapa nemá žádná nepřátelská jádra ke zničení! Přidej v editoru do této mapy [SCARLET] červené[] jádro.
+custom = Upraveno
+builtin = Vestavěno
+map.delete.confirm = Jsi si jistý, že chceš tuto mapu smazat? Tato akce je nevratná!
+map.random = [accent]Náhodná mapa[]
+map.nospawn = Na této mapě nejsou jádra, u kterých by se mohli zrodit hráči. Přidej v editoru do této mapy aspoň jedno [accent]oranžové[] jádro.
+map.nospawn.pvp = Tato mapa nemá nepřátelská jádra, u kterých by se mohli zrodit hráči. Přidej v editoru do této mapy aspoň jedno [SCARLET]neoranžové[] jádro.
+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 = Update Item
-workshop.error = Error fetching workshop details: {0}
-map.publish.confirm = Jsi si jistý že chceš publikovat tuto mapu?\n\n[lightgray]Ujisti se že jsi nejprve souhlasil se smluvními podmínkami workshopu, tvá mapa se jinak nezobrazí.
-workshop.menu = Select what you would like to do with this item.
-workshop.info = Item Info
-changelog = Changelog (optional):
-eula = Smluvní podmínky Steam
-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 = 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.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.
+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.error = Chyba při vystavování položky: {0}
+steam.error = Nepodařilo se inicializovat služby platformy Steam.Chyba: {0}
+
editor.brush = Štětec
-editor.openin = Otevřít v editoru.
-editor.oregen = Generovat nerostné zdroje.
-editor.oregen.info = Generování nerostných zdrojů:
+editor.openin = Otevřít v editoru
+editor.oregen = Generování rud
+editor.oregen.info = Generování rud:
editor.mapinfo = Informace o mapě
editor.author = Autor:
editor.description = Popis:
-editor.nodescription = Tvá mapa musí mít popisek minimálně o 4 znacích aby mohla být publikována
+editor.nodescription = Než může být mapa publikována, musí mít popisek dlouhý nejméně 4 znaky.
editor.waves = Vln:
editor.rules = Pravidla:
editor.generation = Generace:
editor.ingame = Upravit ve hře
-editor.publish.workshop = Publikovat na workshop
+editor.publish.workshop = Vystavit v dílně
editor.newmap = Nová mapa
-workshop = Workshop
-waves.title = Vln
+workshop = Dílna
+waves.title = Vlny
waves.remove = Odebrat
waves.never =
waves.every = každých
waves.waves = vln(y)
waves.perspawn = za zrození
waves.to = do
-waves.boss = Bosse
-waves.preview = Prohlížet
+waves.boss = Záporák
+waves.preview = Náhled
waves.edit = Upravit....
waves.copy = Uložit do schránky
waves.load = Načíst ze schránky
-waves.invalid = Neplatné vlny ve schránce
-waves.copied = Vln zkopírováno.
-waves.none = Žádní nepřátelé definováni.\nPřipomínka toho že prázdné rozložení vln se automaticky změní na výchozí nastavení.
-editor.default = [LIGHT_GRAY]
-details = Detaily...
-edit = Upravit
+waves.invalid = Neplatné vlny ve schránce.
+waves.copied = Vlny byly zkopírovány.
+waves.none = Žádní nepřátelé nebyli definováni.\nVlny s prázdným rozložením budou automaticky upraveny na výchozí rozložení.
+editor.default = [lightgray][]
+details = Podrobnosti...
+edit = Upravit...
editor.name = Jméno:
-editor.spawn = Zrodit jednotku.
-editor.removeunit = Odebrat jednotku.
+editor.spawn = Zrodit jednotku
+editor.removeunit = Odstranit jednotku
editor.teams = Týmy
-editor.errorload = Chyba při načítání souboru:\n[accent]{0}
-editor.errorsave = Chyba při ukládání souboru:\n[accent]{0}
-editor.errorimage = Toto je obrázek a ne mapa,nemysli si že změnou formátu souboru tohle obejdeš s tím že to bude fungovat.\n\nJestli chceš použít legacy mapu, použij 'importovat legacy mapu' v menu editoru.
-editor.errorlegacy = Tato mapa je příliš stará a užití legacy formátu již dávno není podporováno.
+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.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ý a nebo poškozen.
-editor.errorname = Mapa nemá definované jméno.
+editor.errorheader = Tento soubor mapy je buď neplatný nebo poškozen.
+editor.errorname = Mapa nemá definované jméno. Nesnažíš se náhodou nahrát soubor s uložením hry?
editor.update = Aktualizovat
-editor.randomize = Náhodně
+editor.randomize = Náhodně vygenerovat
editor.apply = Aplikovat
editor.generate = Generovat
editor.resize = Změnit velikost
editor.loadmap = Načíst mapu
editor.savemap = Uložit mapu
editor.saved = Uloženo!
-editor.save.noname = Tvoje mapa nemá jméno! Jméno nastavíš v Informacích o mapě.
-editor.save.overwrite = Tvoje mapa přepisuje vestavěnou mapu! Vyber odlišné jméno v Informacích o mapě.
-editor.import.exists = [scarlet]Není možno importovat:[] vestavěná mapa jménem '{0}' již existuje!
-editor.import = Import
+editor.save.noname = Tvoje mapa nemá jméno! Jméno nastavíš v položce nabídky "Informace o mapě".
+editor.save.overwrite = Tvoje mapa přepisuje vestavěnou mapu! Nastav jí radši jiné jméno v položce nabídky "Informace o mapě".
+editor.import.exists = [scarlet]Není možno importovat:[] existuje vestavěná mapa se stejným jménem '{0}'!
+editor.import = Import...
editor.importmap = Importovat mapu
editor.importmap.description = Importovat již existující mapu
editor.importfile = Importovat soubor
-editor.importfile.description = Importovat externí soubor mapy
-editor.importimage = Importovat Legacy Obrázek
-editor.importimage.description = Importovat exrerní obrázek mapy
-editor.export = Export
+editor.importfile.description = Importovat soubor s externí mapou
+editor.importimage = Importovat starou mapu
+editor.importimage.description = Importovat soubor s externím obrázkem mapy
+editor.export = Export...
editor.exportfile = Exportovat soubor
-editor.exportfile.description = Exportovat soubor mapy
+editor.exportfile.description = Exportovat mapu do souboru
editor.exportimage = Exportovat obrázek terénu
-editor.exportimage.description = Exportovat obrázek souboru mapy
+editor.exportimage.description = Exportovat obrázek mapy do souboru
editor.loadimage = Importovat terén
editor.saveimage = Exportovat terén
-editor.unsaved = [scarlet]Máš neuložené změny![]\nPřesto chceš ukončit?
+editor.unsaved = [scarlet]Máš neuložené změny![]\nPřesto chceš odejít z editoru? Změny budou ztraceny.
editor.resizemap = Změnit velikost mapy
editor.mapname = Jméno mapy:
-editor.overwrite = [accent]Varování!\nToto přepíše již existující mapu.
-editor.overwrite.confirm = [scarlet]Varování![] Mapa s tímto jménem již existuje. Jsi si jistý že ji chceš přepsat?
+editor.overwrite = [accent]Varování!\nToto přepíše již existující mapu.[]
+editor.overwrite.confirm = [scarlet]Varování![] Mapa s tímto jménem již existuje. Jsi si jistý, že ji chceš přepsat?
editor.exists = Mapa s tímto jménem již existuje.
editor.selectmap = Vyber mapu k načtení:
-toolmode.replace = Nahradit.
+
+toolmode.replace = Nahradit
toolmode.replace.description = Kreslí jen na pevných blocích.
toolmode.replaceall = Nahradit vše
-toolmode.replaceall.description = Nahradit všechny bloky na mapě.
-toolmode.orthogonal = Ortogonální
-toolmode.orthogonal.description = Kreslí jen Ortogonální linie.
+toolmode.replaceall.description = Nahradí všechny bloky na mapě.
+toolmode.orthogonal = Pravoúhle
+toolmode.orthogonal.description = Kreslí jen vodorovně nebo svisle.
toolmode.square = Čtverec
toolmode.square.description = Čtvercový štětec.
-toolmode.eraseores = Maže rudy.
+toolmode.eraseores = Mazat rudy
toolmode.eraseores.description = Maže jen rudy.
-toolmode.fillteams = Doplnit skupinu
-toolmode.fillteams.description = Doplní hromadně namísto po blocích.
-toolmode.drawteams = Kreslí skupiny
-toolmode.drawteams.description = Kreslí skupiny namísto po blocích.
-filters.empty = [LIGHT_GRAY]Žádné filtry! Přidej ho tlačítkem níže.
-filter.distort = Distorze
-filter.noise = Hluk
+toolmode.fillteams = Doplnit týmy
+toolmode.fillteams.description = Doplní týmy místo bloků.
+toolmode.drawteams = Kreslit týmy
+toolmode.drawteams.description = Kreslí týmy místo bloků.
+
+filters.empty = [lightgray]Nejsou zadány žádné filtry, přidej filtr tlačítkem níže.[]
+filter.distort = Zkreslení
+filter.noise = Zašumění
filter.median = Medián
filter.oremedian = Medián rud
-filter.blend = Splynutí
-filter.defaultores = Výchozí bloky
+filter.blend = Prolnutí
+filter.defaultores = Výchozí rudy
filter.ore = Rudy
-filter.rivernoise = Hluk řek
+filter.rivernoise = Zašumění řek
filter.mirror = Zrcadlit
filter.clear = Vyčistit
filter.option.ignore = Ignorovat
-filter.scatter = Rozházet
+filter.scatter = Rozptýlení
filter.terrain = Terén
filter.option.scale = Měřítko
-filter.option.chance = Šance
+filter.option.chance = Náhoda
filter.option.mag = Velikost
filter.option.threshold = Práh
-filter.option.circle-scale = Měřítko kruhu
+filter.option.circle-scale = Poloměr kružnice
filter.option.octaves = Octávy
-filter.option.falloff = Spád
+filter.option.falloff = Pokles
filter.option.angle = Úhel
filter.option.block = Blok
-filter.option.floor = Podlaha
-filter.option.flooronto = Cílová podlaha
+filter.option.floor = Povrch
+filter.option.flooronto = Cílový povrch
filter.option.wall = Stěna
filter.option.ore = Ruda
-filter.option.floor2 = Sekundární podlaží
-filter.option.threshold2 = Sekundární podlaží
+filter.option.floor2 = Druhotný povrch
+filter.option.threshold2 = Druhotný práh
filter.option.radius = Poloměr
filter.option.percentile = Percentil
+
width = Šířka:
height = Výška:
-menu = Hlavní menu
+menu = Hlavní nabídka
play = Hrát
campaign = Kampaň
load = Načíst
save = Uložit
fps = FPS: {0}
-ping = Odezva: {0}ms
-language.restart = Prosím restartuj hru aby se provedla změna jazyka!
-settings = Nastavení
-tutorial = Tutoriál
-tutorial.retake = Zopáknout si výuku.
+ping = Odezva: {0} ms
+language.restart = Prosím restartuj hru, aby se provedla změna jazyka!
+settings = Volby
+tutorial = Výuka
+tutorial.retake = Spustit znovu výuku.
editor = Editor
mapeditor = Editor map
+
abandon = Opustit
abandon.text = Tato zóna a všechny její zdroje připadnou nepříteli.
locked = Zamčeno
-complete = [LIGHT_GRAY]Hotovo:
-requirement.wave = Reach Wave {0} in {1}
-requirement.core = znič nepřátelskou základnu v {0}
-requirement.unlock = odemknuto {0}
-resume = Zpět k zóně:\n[LIGHT_GRAY]{0}
-bestwave = [LIGHT_GRAY]Nejlepší: {0}
-launch = Vyslat
-launch.title = Vyslání úspěšné
-launch.next = [LIGHT_GRAY]další možnost až ve vlně {0}
-launch.unable2 = [scarlet]Není možno vyslat.[]
-launch.confirm = Toto vyšle veškeré suroviny ve tvém jádru .\nJiž se na tuto základnu nebudeš moci vrátit.
-launch.skip.confirm = Jestli teď zůstaneš, budeš moci odejít až v pozdější fázi.
-uncover = Odkrýt
+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}[]
+bestwave = [lightgray]Nejvyšší vlna: {0}
+launch = Vyslat do této zóny 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.[]
+launch.confirm = Toto vyšle veškeré suroviny ve Tvém jádře zpět.\nJiž se na tuto základnu nebudeš moci vrátit.
+launch.skip.confirm = Jestli teď zůstaneš, budeš moci odejít až po několika dalších vlnách.
+uncover = Odkrýt mapu
configure = Přizpůsobit vybavení
-bannedblocks = Banned Blocks
-addall = Add All
-configure.locked = [LIGHT_GRAY]Dosáhni vlny {0}\nk nastavení svého vybavení.
-configure.invalid = Hodnota musí být mezi 0 a{0}.
-zone.unlocked = [LIGHT_GRAY]{0} odemčeno.
-zone.requirement.complete = Vlna {0} dosažena:\n{1} podmínky zóny splněny.
-zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
-zone.resources = Suroviny detekovány:
-zone.objective = [lightgray]Cíl: [accent]{0}
+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.invalid = Hodnota musí být číslo mezi 0 a {0}.
+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:[]
+zone.objective = [lightgray]Úkol: [][accent]{0}[]
zone.objective.survival = Přežij
zone.objective.attack = Znič nepřátelské jádro
-add = Přidat
-boss.health = Životy bosse
-connectfail = [crimson]Nepovedlo se připojení k serveru:\n\n[accent]{0}
-error.unreachable = Server je nedostupný.\nJe adresa napsaná správně?
-error.invalidaddress = Neplatná adresa.
-error.timedout = Čas vypršel!\nUjisti se že hostitel má nastavené přesměrování portů a adresa je napsaná správně!
-error.mismatch = Chyba Packetu:\nKlient/Verze serveru se neshodují.\nUjisti se že máš nejnovější verzi Mindustry!
-error.alreadyconnected = Již připojeno.
-error.mapnotfound = Soubor mapy nebyl nalezen!
-error.io = Chyba I/O sítě.
-error.any = neznámá chyba sítě.
-error.bloom = Chyba inicializace bloomu.\nTvé zařízení ho nemusí podporovat.
-zone.groundZero.name = Zóna dopadu
-zone.desertWastes.name = Pouštní Odpady
+add = Přidat...
+boss.health = Životy Záporáka
+
+connectfail = [crimson]Nepovedlo se připojení k serveru:\n\n[accent]{0}[]
+error.unreachable = Server je nedostupný.\nJe IP adresa napsaná správně (XXX.XXX.XXX.XXX)?
+error.invalidaddress = Neplatná IP adresa.
+error.timedout = Čas pro spojení se serverem vypršel!\nUjisti se, že IP adresa je napsaná správně. Zkus také zjistit, zda má hostitel správně nastavené přesměrování portů.
+error.mismatch = Chyba při komunikaci se serverem:\nVerze klienta a serveru se možná neshodují.\nUjisti se, že máš nejnovější verzi Mindustry, a když to nevyřeší problém, kontaktuj správce serveru.
+error.alreadyconnected = Připojeni k serveru.
+error.mapnotfound = Soubor s mapou nebyl nalezen!
+error.io = Vstupně/výstupní (I/O) chyba sítě.
+error.any = Ueznámá chyba sítě.
+error.bloom = Chyba inicializace filtru Bloom.\nTvé zařízení ho nejspíš nepodporuje.
+
+zone.groundZero.name = Základní tábor
+zone.desertWastes.name = Pouštní pustiny
zone.craters.name = Krátery
-zone.frozenForest.name = Zmrzlý les
-zone.ruinousShores.name = Zničující pobřeží
-zone.stainedMountains.name = Poskvrněné hory
-zone.desolateRift.name = Trhlina pustoty
-zone.nuclearComplex.name = Komplex nukleární produkce
-zone.overgrowth.name = Porost
-zone.tarFields.name = Tarová pole
+zone.frozenForest.name = Zamrzlý les
+zone.ruinousShores.name = Zničené pobřeží
+zone.stainedMountains.name = Skvrnité pohoří
+zone.desolateRift.name = Bezútěšná trhlina
+zone.nuclearComplex.name = Komplex jaderné výroby
+zone.overgrowth.name = Džungle
+zone.tarFields.name = Dehtová pole
zone.saltFlats.name = Solné nížiny
-zone.impact0078.name = Dopad 0078
-zone.crags.name = Praskliny
-zone.fungalPass.name = Houbový průsmyk
-zone.groundZero.description = Optimální lokace kde znovu začít. Nízký výskyt nepřátel. Pár surovin.\nPosbírej co nejvíce olova a mědi.\nBěž dál.
-zone.frozenForest.description = Dokonce tady, blíž k horám se spóry dokázaly rozrůst. Tyto mrazivé teploty je nemohou zadržet navěky.\n\nZačni pracovat s pomocí energie. Stav spalovací generátory. Nauč se jak používat opravovací věže.
-zone.desertWastes.description = Tyto odpadní zóny jsou rozsáhlé, nepředvídatelné a skrz naskrz se hemží opuštěnými budovami.\nV této oblasti se hojně vyskytuje uhlí. Spal ho v generátorech na energii nebo syntetizuj na Grafit.\n\n[lightgray]Tato výsadková zóna není garantovaná.
-zone.saltFlats.description = Na okraji pouště leží Solné nížiny. V této lokaci se nachází nemnoho surovin.\n\nNepřítel zde vybudoval zásobovací komplex. Znič jeho jádro. Nenechej kámen na kameni.
-zone.craters.description = V těchto kráterech jenž jsou relikvie starých válek,se nahromadilo velké množství vody. Zmocni se této oblasti. Sbírej písek. Vyrob z něj sklo. Použij vodu k chlazení svých vrtů a střílen.
-zone.ruinousShores.description = Za odpadní zónou se nachází pobřeží. Kdysi tuto oblast obýval pobřežní obranný sytém. Moc z něj nezbylo. Jen ty nejprimitivnější struktůry zůstaly nerozprášeny, zbytek padl jen v kusy oceli.\nPokračuj ve své expanzi hlouběji. Objev ztracenou technologii.
-zone.stainedMountains.description = Dále ve vnitrozemí leží hory, dosud neposkvrněny spóry.\nVytěž tuto oblast oplývající titániem. Nauč se ho používat.\n\nPřítomnost nepřátelských jednotek je zde větší. Nedej jim čas na vytasení jejich největšího kalibru.
-zone.overgrowth.description = Tato přerostlá džungle se nachází blíže ke zdroji spór.\nNepřítel zde zbudoval základnu. Postav jednotky Dagger a znič ji. Získej to co mělo být dávno ztraceno.
-zone.tarFields.description = Hranice produkční ropné oblasti mezi horami a pouští. Jedna z mála oblastí kde se stále nachází Tar.\nAčkoliv se oblast zdá opuštěná, stále se zde nachází nepřátelské jednotky s velkou silou. Není radno je podcenit.\n\n[lightgray]Vyzkoumej technologii na produkci surovin z ropy.
-zone.desolateRift.description = Extrémně nebezpečná zóna. Za cenu prostoru se zde nachází přehršel surovin. Vysoká šance na sebedestrukci. 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 leží 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, neustále prohledává okolí kvůli útočníkůn.
-zone.fungalPass.description = Přechodová oblast mezi vysokými horami a spóry nasycenou zemí. Nachází se zde malá průzkumná základna tvého nepřítele.\nZnič ji.\nPoužij Dagger a Crawler jednotky. Znič obě nepřátelské já.
-zone.impact0078.description =
-zone.crags.description =
+zone.impact0078.name = Zóna dopadu 0078
+zone.crags.name = Skalní útesy
+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.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.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.impact0078.description =
+zone.crags.description =
+
settings.language = Jazyk
settings.data = Data hry
-settings.reset = nastavit výchozí
-settings.rebind = Přenastavit
+settings.reset = Nastavit na původní hodnoty
+settings.rebind = Přemapovat
+settings.resetKey = Vrátit změny
settings.controls = Ovládání
settings.game = Hra
-settings.sound = zvuky
-settings.graphics = Zobrazení
-settings.cleardata = Resetovat data hry...
-settings.clear.confirm = Jsi si jistý že chceš resetovat obsah hry?\nTento krok je nevratný!
-settings.clearall.confirm = [scarlet]Varování![]\nToto vyresetuje všechna data, včetně uložení, map, odemykatelných a nastavení ovládání.\nJakmile stiskneš 'ok' data se vymažou a hra se automaticky ukončí.
-paused = [accent]< Pauza >
-clear = Clear
-banned = [scarlet]Banned
+settings.sound = Zvuky
+settings.graphics = Grafika
+settings.cleardata = Vymazat data hry...
+settings.clear.confirm = Jsi si jistý, že chceš vymazat Tvá data ve hře?\nTento krok je nevratný!
+settings.clearall.confirm = [scarlet]Varování![]\nToto vyresetuje všechna Tvá data ve hře, včetně uložení hry, map, odemknutého postupu v kampani a nastavení ovládání.\nJakmile stiskneš "OK", všechna data se vymažou a hra se automaticky ukončí.
+paused = [accent]< Pozastaveno >[]
+clear = Vyčistit
+banned = [scarlet]Zakázán[]
yes = Ano
no = Ne
info.title = Informace
-error.title = [crimson]Objevila se chyba
+error.title = [crimson]Objevila se chyba[]
error.crashtitle = Objevila se chyba
blocks.input = Vstup
blocks.output = Výstup
-blocks.booster = Booster
-block.unknown = [LIGHT_GRAY]???
+blocks.booster = Posilovač
+block.unknown = [lightgray]???[]
blocks.powercapacity = Kapacita energie
-blocks.powershot = Energie na výstřel
+blocks.powershot = Energie na 1 výstřel
blocks.damage = Poškození
blocks.targetsair = Zaměřuje vzdušné jednotky
blocks.targetsground = Zaměřuje pozemní jednotky
blocks.itemsmoved = Rychlost pohybu
blocks.launchtime = Čas mezi vysláním
blocks.shootrange = Dostřel
-blocks.size = velikost
+blocks.size = Velikost
blocks.liquidcapacity = Kapacita tekutin
blocks.powerrange = Rozsah energie
-blocks.powerconnections = Max Connections
-blocks.poweruse = Spotřebuje energie
-blocks.powerdamage = Energie na poškození
-blocks.itemcapacity = kapacita předmětů
+blocks.powerconnections = Nejvyšší počet spojení
+blocks.poweruse = Spotřeba energie
+blocks.powerdamage = Energie na jednotku poškození
+blocks.itemcapacity = Kapacita předmětů
blocks.basepowergeneration = Základní generování energie
blocks.productiontime = Čas produkce
blocks.repairtime = Čas do úplné opravy
blocks.speedincrease = Zvýšení rychlosti
blocks.range = Dosah
-blocks.drilltier = Vrtatelné
+blocks.drilltier = Lze těžit
blocks.drillspeed = Základní rychlost vrtu
-blocks.boosteffect = Efekt boostu
-blocks.maxunits = Max. počet jednotek
+blocks.boosteffect = Účinek posílení
+blocks.maxunits = Nejvýše aktivních jednotek
blocks.health = Životy
blocks.buildtime = Čas stavby
blocks.buildcost = Cena stavby
-blocks.inaccuracy = Nepřesnost/výchylka
+blocks.inaccuracy = Nepřesnost
blocks.shots = Střely
-blocks.reload = Střely za sekundu
+blocks.reload = Střel za 1s
blocks.ammo = Střelivo
+
bar.drilltierreq = Je vyžadován lepší vrt
bar.drillspeed = Rychlost vrtu: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Teplo
bar.power = Energie
bar.progress = Proces stavby
bar.spawned = Jednotek: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] poškození
bullet.splashdamage = [stat]{0}[lightgray] AOE ~[stat] {1}[lightgray] bloků
bullet.incendiary = [stat]zápalné
@@ -555,6 +593,7 @@ 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í
+
unit.blocks = Bloky
unit.powersecond = jednotek energie/sekunda
unit.liquidsecond = jednotek tekutin/sekundu
@@ -567,6 +606,8 @@ unit.persecond = /sek
unit.timesspeed = x rychlost
unit.percent = %
unit.items = předměty
+unit.thousands = k
+unit.millions = mil
category.general = Všeobecné
category.power = Energie
category.liquids = Tekutiny
@@ -579,6 +620,7 @@ setting.shadows.name = Stíny
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = Lineární filtrování
setting.hints.name = Hints
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Animovaná voda
setting.animatedshields.name = Animované štíty
setting.antialias.name = Antialias[LIGHT_GRAY] (vyžaduje restart)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Třes obrazu
setting.effects.name = Zobrazit efekty
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
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.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.vsync.name = Vertikální synchronizace
setting.pixelate.name = Pixelizovat [LIGHT_GRAY](může snížit výkon)
setting.minimap.name = Ukázat minimapu
@@ -635,16 +681,36 @@ category.multiplayer.name = Multiplayer
command.attack = Útok
command.rally = Rally
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 = Schematic Menu
-keybind.schematic_flip_x.name = Flip Schematic X
-keybind.schematic_flip_y.name = Flip Schematic Y
+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
keybind.select.name = Vybrat/Střílet
keybind.diagonal_placement.name = Diagonal Placement
@@ -657,7 +723,6 @@ keybind.menu.name = Hlavní nabídka
keybind.pause.name = pauza
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Minimapa
-keybind.dash.name = Sprint
keybind.chat.name = Chat
keybind.player_list.name = Seznam hráčů
keybind.console.name = Konzole
@@ -671,23 +736,26 @@ 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.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.
mode.editor.name = Editor
mode.pvp.name = PvP
mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti.
mode.attack.name = Útok
-mode.attack.description = Bez vln znič nepř@telsou základnu.
+mode.attack.description = Znič nepřátelskou základnu.\n[gray]Vyžaduje přítomnost červeného jádra na mapě.[]
mode.custom = Custom Rules
+
rules.infiniteresources = Nekonečno surovin
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Časovač vln
-rules.waves = Wlny
+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)
@@ -706,9 +774,13 @@ rules.title.resourcesbuilding = surovyny & Stavby
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
+
content.item.name = Předměty
content.liquid.name = Tekutiny
-content.unit.name = jednotky
+content.unit.name = Jednotky
content.block.name = Blocks
content.mech.name = Mechy
item.copper.name = Měď
@@ -725,8 +797,8 @@ item.spore-pod.name = Spore Pod
item.sand.name = Písek
item.blast-compound.name = Výbušná směs
item.pyratite.name = Pyratite
-item.metaglass.name = Tvrzené sklo
-item.scrap.name = Scrap
+item.metaglass.name = Metasklo
+item.scrap.name = Šrot
liquid.water.name = Voda
liquid.slag.name = Rostavené železo
liquid.oil.name = Ropa
@@ -738,20 +810,21 @@ mech.delta-mech.name = Delta
mech.delta-mech.weapon = Obloukový generátor
mech.delta-mech.ability = Průtok
mech.tau-mech.name = Tau
-mech.tau-mech.weapon = Restruktní Laser
+mech.tau-mech.weapon = Restruktní laser
mech.tau-mech.ability = Opravná dávka
mech.omega-mech.name = Omega
mech.omega-mech.weapon = Rojové střely
-mech.omega-mech.ability = Obrněná Konfigurace
+mech.omega-mech.ability = Obrněná konfigurace
mech.dart-ship.name = Šipka
mech.dart-ship.weapon = Opakovač
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 = Dávka raket
+mech.javelin-ship.ability = Výbojový posilovač
mech.trident-ship.name = Trojzubec
mech.trident-ship.weapon = Bombová zátoka
mech.glaive-ship.name = Glaiva
-mech.glaive-ship.weapon = Plamenný Opakovač
+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}%
@@ -767,34 +840,35 @@ 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}
-block.sand-boulder.name = Sand Boulder
+
+block.sand-boulder.name = Balvan písku
block.grass.name = Tráva
-block.salt.name = sůl
+block.salt.name = Sůl
block.saltrocks.name = Solný kámen
-block.pebbles.name = Pebbles
+block.pebbles.name = Oblázky
block.tendrils.name = Tendrils
block.sandrocks.name = Písečný kámen
-block.spore-pine.name = Spore Pine
-block.sporerocks.name = Spore Rocks
-block.rock.name = Rock
+block.spore-pine.name = Spórová borovice
+block.sporerocks.name = Spórové kamení
+block.rock.name = Kámen
block.snowrock.name = Sněhový kámen
-block.snow-pine.name = Snow Pine
-block.shale.name = Shale
-block.shale-boulder.name = Shale Boulder
+block.snow-pine.name = Sněžná borovice
+block.shale.name = Břidlice
+block.shale-boulder.name = Břidličný balvan
block.moss.name = Mech
-block.shrubs.name = Shrubs
-block.spore-moss.name = Spore Moss
-block.shalerocks.name = Shale Rocks
+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-huge.name = Obří stará zeď
block.scrap-wall-gigantic.name = Gigantická stará zeď
block.thruster.name = Thruster
-block.kiln.name = Kiln
+block.kiln.name = Pec
block.graphite-press.name = Graphitový lis
-block.multi-press.name = Všětraný lys
-block.constructing = {0} [LIGHT_GRAY](Constructing)
-block.spawn.name = Nepřátelský Spawn
+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
@@ -836,14 +910,14 @@ 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.magmarock.name = Magma Rock
-block.cliffs.name = Cliffs
+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 = Titanium Zeď
-block.titanium-wall-large.name = Velká Titanium Zeď
-block.plastanium-wall.name = Plastanium Zeď
-block.plastanium-wall-large.name = Velká Plastanium 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
@@ -857,14 +931,16 @@ block.hail.name = Hail
block.lancer.name = Lancer
block.conveyor.name = Dopravník
block.titanium-conveyor.name = Titániový dopravník
-block.armored-conveyor.name = Armored Conveyor
-block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors.
+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.junction.name = Křižovatka
block.router.name = Směrovač
block.distributor.name = Distributor
block.sorter.name = Dělička
-block.inverted-sorter.name = Inverted Sorter
-block.message.name = Message
+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.phase-weaver.name = Tkalcovna pro fázovou tkaninu
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Coal Centrifuge
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.battery.name = Baterie
block.battery-large.name = Velká baterie
block.combustion-generator.name = Spalovací generátor
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Mechanická pumpa
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.power-source.name = Nekonečný zdroj energie
block.unloader.name = Odbavovač
@@ -911,48 +989,49 @@ 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.plastanium-compressor.name = Kompresor na plastanium
block.pyratite-mixer.name = Pyratit mixér
block.blast-mixer.name = Výbušninový mixér
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 = Ropný extraktor
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.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 = Crawler Mech Factory
-block.titan-factory.name = Továrna na Titán Mechy
-block.fortress-factory.name = Továrna na Fortress Mechy
+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.repair-point.name = Opravný bod
block.pulse-conduit.name = Pulzní potrubí
+block.plated-conduit.name = Plated Conduit
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.thorium-reactor.name = Thoriový Reaktor
-block.mass-driver.name = Hromadný Distributor
+block.thorium-reactor.name = Thoriový reaktor
+block.mass-driver.name = Hromadný distributor
block.blast-drill.name = Tlakovzdušný vrt
block.thermal-pump.name = Termální pumpa
-block.thermal-generator.name = Termální Generátor
+block.thermal-generator.name = Termální generátor
block.alloy-smelter.name = Slitinová pec
block.mender.name = Mender
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-large.name = Velká impulzní stěna
block.cyclone.name = Cyklón
block.fuse.name = Fůze
block.shock-mine.name = Šoková mina
block.overdrive-projector.name = Vysokorychlostní projektor
block.force-projector.name = Silový projektor
block.arc.name = Oblouk
-block.rtg-generator.name = RTG Generátor
+block.rtg-generator.name = RTG generátor
block.spectre.name = Spektr
block.meltdown.name = Meltdown
block.container.name = Kontejnér
@@ -965,14 +1044,14 @@ team.orange.name = oranžová
team.derelict.name = derelict
team.green.name = zelená
team.purple.name = fialová
-unit.spirit.name = Spirit Dron
+unit.spirit.name = Spirit dron
unit.draug.name = Draug Miner Drone
-unit.phantom.name = Fantom Dron
+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 = Bojovník Wraith
+unit.ghoul.name = Ghůl bombardér
+unit.wraith.name = Wraith
unit.fortress.name = Pevnost
unit.revenant.name = Revenant
unit.eruptor.name = Eruptor
@@ -980,31 +1059,32 @@ unit.chaos-array.name = Chaos Array
unit.eradicator.name = Eradicator
unit.lich.name = Lich
unit.reaper.name = Reaper
-tutorial.next = [lightgray]
-tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
-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.drill = Manuální těžba je neefektivní.\n[accent]Vrty []budou těžit automaticky.\npolož jeden na měděnou rudu.
-tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
-tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
-tutorial.conveyor = [accent]Dopravníky[] jsou zapotřebí k dopravě materiálu k jádru.\nVytvoř řadu dopravníku od vrtu až k jádru.
-tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
+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 jako střelivo []ke střelbě.\nPolož vrt blízko střílny pro zásobování mědí.
-tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
-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.unpause = Now press space again to unpause.
-tutorial.unpause.mobile = Now press it again to unpause.
-tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
-tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
-tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[]
-tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[]
-tutorial.waves = [LIGHT_GRAY] nepřítel[] je přibližuje.\n\nBraň své jádro po dobu dvou vln, postav více střílen.
-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.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
+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.
+
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 = Vemi důležitá suočást všeho so se týká tekutin
-item.graphite.description = Stlačený uhlík nedílná součást většiny infrastruktur
+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.
@@ -1022,29 +1102,29 @@ liquid.slag.description = Rostavený scrap pou žívá se k vírobě olova mědi
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.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.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 = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core.
-unit.spirit.description = Startovní dron. Standartně se objevuje u jádra. Automaticky těží rudy a opravuje stavby.
+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 = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies.
+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 = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire.
+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.
-block.message.description = Stores a message. Used for communication between allies.
-block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite.
-block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently.
+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 = Smelts sand and lead into metaglass. Requires small amounts of power.
+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.
@@ -1053,7 +1133,7 @@ block.blast-mixer.description = Používá ropu k přeměně pyratitu do méně
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 = Compresses spore pods into oil.
+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ů.
@@ -1062,27 +1142,28 @@ 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.copper-wall.description = Levný defenzivní blok.\nUžitečný k obraně tvého jádra a střílen v prvotních vlnách nepřátel.
-block.copper-wall-large.description = Levný defenzivní blok.\nUžitečný k obraně tvého jádra a střílen v prvotních vlnách nepřátel.\nZabírá více polí.
-block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
-block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles.
-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.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 = Né tak silná jako zeď Thoria ale odráží nepřátelské projektily dokud nejsou moc silné.
-block.phase-wall-large.description = Né tak silná jako zeď Thoria ale odráží nepřátelské projektily dokud nejsou moc silné.\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 = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency.
+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 standartní dopravníky.
+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.
@@ -1096,24 +1177,26 @@ block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžadu
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ž standartní potrubí.
+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ž standartní energetický uzel and a dokáže propojit až 6 staveb nebo uzly.
-block.surge-tower.description = An extremely long-range power node with fewer available connections.
+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ž standartní baterie.
+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.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite.
+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ž standartní solární panel, za to je mnohem nákladnější na stavbu.
+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.
@@ -1123,17 +1206,17 @@ block.blast-drill.description = Ultimátní vrt, vyžaduje velké množství ene
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 = The first iteration of the core capsule. Once destroyed, all contact to the region is lost. Do not let this happen.
-block.core-foundation.description = The second version of the core. Better armored. Stores more resources.
-block.core-nucleus.description = The third and final iteration of the core capsule. Extremely well armored. Stores massive amounts of resources.
-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č[] lže 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 měti kliknutím na odbavovač.
-block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
-block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently.
+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 = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units.
-block.scorch.description = Burns any ground enemies close to it. Highly effective at close range.
+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.
@@ -1145,22 +1228,22 @@ block.ripple.description = Velká artilérní střílna, která vystřelí něko
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 = 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 = Produces Draug mining drones.
+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 standartní pozemní jednotky.
+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 = Provides transformation into a basic attack mech.\nUse by tapping while standing on it.
-block.delta-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na rychlého, lehce obrněného mecha určeného pro udeř a uteč operace.\nPoužíj ho poklikáním když se nacházíš nad ním.
-block.tau-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na na podpůrného mecha, který léčí spojenecké budovy a jednotky.\nPoužíj ho poklikáním když se nacházíš nad ním.
-block.omega-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na objemného dobře obrněného mecha, určeného pro útok v přední linii.\nPoužíj ho poklikáním když se nacházíš nad ním.
-block.javelin-ship-pad.description = Zanech zde své aktuální plavidlo a změn ho na silný a rychlý stíhač s bleskovými zbraněmi.\nPoužíj ho poklikáním když se nacházíš nad ním.
-block.trident-ship-pad.description = Zanech zde své aktuální plavidlo a změň ho do docela dobře obrněného těžkého bombardéru.\nPoužíj ho poklikáním když se nacházíš nad ním.
-block.glaive-ship-pad.description = Zanech zde své aktuální plavidlo a změn ho na velkou, dobře obrněnou střeleckou loď.\nPoužíj ho poklikáním když se nacházíš nad ním.
+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.
diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties
index ac831aaa77..b0a3cd5953 100644
--- a/core/assets/bundles/bundle_de.properties
+++ b/core/assets/bundles/bundle_de.properties
@@ -1,8 +1,8 @@
credits.text = Entwickelt von [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY]
credits = Danksagungen
contributors = Übersetzer und Mitwirkende
-discord = Trete dem Mindustry Discord bei!
-link.discord.description = Der offizielle Mindustry Discord-Chatroom
+discord = Tritt dem Mindustry Discord bei!
+link.discord.description = Der offizielle Mindustry Discord-Server
link.reddit.description = Der Mindustry Subreddit
link.github.description = Quellcode des Spiels
link.changelog.description = Liste der Änderungen
@@ -10,36 +10,49 @@ link.dev-builds.description = Entwicklungs-Builds (instabil)
link.trello.description = Offizielles Trello Board für geplante Features
link.itch.io.description = itch.io-Seite mit Downloads und der Web-Version des Spiels
link.google-play.description = Google Play Store Seite
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Offizelles Mindustry Wiki
+link.feathub.description = Suggest new features
linkfail = Fehler beim Öffnen des Links!\nDie URL wurde in die Zwischenablage kopiert.
screenshot = Screenshot gespeichert nach {0}
screenshot.invalid = Karte zu groß! Eventuell nicht ausreichend Arbeitsspeicher für Screenshot.
gameover = Der Kern wurde zerstört.
gameover.pvp = Das[accent] {0}[] Team ist siegreich!
highscore = [YELLOW] Neuer Highscore!
-copied = Copied.
+copied = Kopiert.
+
load.sound = Sounds
-load.map = Maps
-load.image = Images
-load.content = Content
+load.map = Karten
+load.image = Bilder
+load.content = Inhalt
load.system = System
load.mod = Mods
-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
+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
+
+schematic = Entwürfe
+schematic.add = Entwurf speichern...
+schematics = Entwürfe
+schematic.replace = Ein anderer Entwurf hat bereits diesen Namen. Diesen Ersetzen?
+schematic.import = Entwurf importieren...
+schematic.exportfile = Entwurf exportieren
+schematic.importfile = Detei importieren
+schematic.browseworkshop = Workshop erkunden
+schematic.copy = In Zwischenablage speichern
+schematic.copy.import = Aus Zwischenablage ziehen
+schematic.shareworkshop = Im Workshop teilen
+schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Entwurf umkehren
+schematic.saved = Entwurf gespeichert.
+schematic.delete.confirm = Dieser Entwurf wird absolut ausgelöscht.
+schematic.rename = Entwurf umbenennen
+schematic.info = {0}x{1}, {2} Blöcke
+
stat.wave = Wellen besiegt:[accent] {0}
stat.enemiesDestroyed = Gegner zerstört:[accent] {0}
stat.built = Gebäude gebaut:[accent] {0}
@@ -47,15 +60,16 @@ stat.destroyed = Gebäude zerstört:[accent] {0}
stat.deconstructed = Gebäude abgebaut:[accent] {0}
stat.delivered = Übertragene Ressourcen:
stat.rank = Finaler Rang: [accent]{0}
-launcheditems = [accent]Übertragene Items
-launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
+
+launcheditems = [accent]Abgefeuerte Items
+launchinfo = [unlaunched][[LAUNCH] deine Basis um blau markierte Items zu erhalten.
map.delete = Bist du sicher, dass du die Karte "[accent]{0}[]" löschen möchtest?
level.highscore = Highscore: [accent]{0}
level.select = Level-Auswahl
level.mode = Spielmodus:
showagain = Nächstes Mal nicht mehr anzeigen
coreattack = < Die Basis wird angegriffen! >
-nearpoint = [[ [scarlet]SOFORT DEN DROPPOINT VERLASSEN[] ]\nVernichtung droht
+nearpoint = [[ [scarlet]SOFORT DEN SPAWNPUNKT VERLASSEN[] ]\nVernichtung droht
database = Kern-Datenbank
savegame = Spiel speichern
loadgame = Spiel laden
@@ -70,40 +84,49 @@ website = Website
quit = Verlassen
save.quit = Speichern & Beenden
maps = Karten
-maps.browse = Browse Maps
+maps.browse = Karten durschsuchen
continue = Weiter
maps.none = [LIGHT_GRAY]Keine Karten gefunden!
-invalid = Invalid
-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.
-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.
+invalid = ungültig
+pickcolor = Pick Color
+preparingconfig = Konfiguration vorbereiten
+preparingcontent = Inhalte vorbereiten
+uploadingcontent = Inhalte hochladen
+uploadingpreviewfile = Vorschau hochladen
+committingchanges = Veränderungen bestätigen
+done = Fertig
+feature.unsupported = Dein System unsterstützt dieses Feature nicht.
+
+mods.alphainfo = Vergiss nicht, dass Mods in der Alpha sind, und sehr Fehlerhaft sein [scarlet]könnten[].\nSende alle Probleme an den Mindustry Github oder Discord.
mods.alpha = [accent](Alpha)
mods = Mods
-mods.none = [LIGHT_GRAY]No mods found!
-mods.guide = Modding Guide
-mods.report = Report Bug
+mods.none = [LIGHT_GRAY]Keine Mods gefunden!
+mods.guide = Modding Anleitung
+mods.report = Problem senden
mods.openfolder = Mod Verzeichnis öffnen
-mod.enabled = [lightgray]Enabled
-mod.disabled = [scarlet]Disabled
-mod.disable = Disable
-mod.delete.error = Unable to delete mod. File may be in use.
-mod.missingdependencies = [scarlet]Missing dependencies: {0}
-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.enabled = [lightgray]Aktiviert
+mod.disabled = [scarlet]Deaktiviert
+mod.disable = Deaktivieren
+mod.delete.error = Unfähig Mod zu löschen; Datei könnte in Benutzung sein.
+mod.requiresversion = [scarlet]Requires min game version: [accent]{0}
+mod.missingdependencies = [scarlet]Fehldene Abhängigkeiten: {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}' fehlt Abhängigkeiten:[accent] {1}\n[lightgray]Diese Mods müssen erst installiert werden.\nDieser Mod wird automatisch deaktiviert.
+mod.enable = Aktivieren
+mod.requiresrestart = Das Spiel schließt nun, um Modänderungen wirksam zu machen.
+mod.reloadrequired = [scarlet]Neuladen benötigt
mod.import = Mod importieren
mod.import.github = GitHub Mod importieren
-mod.remove.confirm = This mod will be deleted.
+mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod.
+mod.remove.confirm = Dieser Mod wird gelöscht.
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.missing = Dieser Spielstand enthält Mods, welche nicht mehr vorhanden oder aktualisiert wurden. Spielstandfehler könnten passieren. Bist du dir sicher, das du ihn laden möchtest?\n[lightgray]Mods:\n{0}
+mod.preview.missing = Bevor du diesen Mod hochladen kannst, musst du eine Bildvorschau einbinden.\nLade ein Bild namens[accent] preview.png[] in den Modordner und versuchs nochmal.
+mod.folder.missing = Nur Mods in Ordnerform können in den Workshop hochgeladen werden.\nUm einen Mod in einen Ordner zu konvertieren, extrahiere einfach die .zip und lösche die alte .zip danach. Starte dann das Spiel neu.
+mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
+
about.button = Info
name = Name:
noname = Wähle zuerst einen[accent] Spielernamen[].
@@ -118,28 +141,29 @@ 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 = You are not whitelisted here.
+server.kicked.whitelist = Du bist nicht auf der Whitelist.
server.kicked.serverClose = Server geschlossen.
-server.kicked.vote = You have been vote-kicked. Goodbye.
+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 = This server is not compatible with your build type.
-server.kicked.playerLimit = This server is full. Wait for an empty slot.
+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.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.
server.kicked.idInUse = Du bist bereits auf dem Server! Anmeldungen mit zwei Accounts sind nicht gestattet.
server.kicked.customClient = Der Server akzeptiert keine Custom Builds von Mindustry. Lade dir die offizielle Version herunter.
server.kicked.gameover = Game Over!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Deine Version:[accent] {0}[]\nServerversion:[accent] {1}[]
host.info = Der [accent]Server hosten[]-Knopf startet einen Server auf den Ports [scarlet]6567[] und [scarlet]6568.[]\nJeder im gleichen [LIGHT_GRAY]W-Lan oder lokalen Netzwerk[] sollte deinen Server in seiner Server Liste sehen können.\n\nWenn du anderen die Verbindung über IP ermöglichen willst, benötigst du [accent]Port-Forwarding[].\n\n[LIGHT_GRAY]Hinweis: Falls es Probleme mit der Verbindung im Netzwerk gibt, stelle sicher, dass Mindustry in deinen Firewall Einstellungen Zugriff auf das lokale Netzwerk hat.
join.info = Hier kannst du eine [accent]Server-IP[] eingeben um dich zu verbinden oder Server im [accent]lokalen Netzwerk[] entdecken und dich mit ihnen verbinden.\nSowohl Spielen über das lokale Netzwerk als auch Spielen über das Internet werden unterstützt.\n\n[LIGHT_GRAY]Hinweis: Es gibt keine globale Server Liste; Wenn du dich mit jemandem per IP verbinden willst, musst du den Host nach seiner IP fragen.
hostserver = Server hosten
-invitefriends = Invite Friends
+invitefriends = Freunde einladen
hostserver.mobile = Host\nSpiel
-host = Server hosten
-hosting = [accent] Server wird geöffnet ...
+host = Server eröffnen
+hosting = [accent] Server wird eröffnet ...
hosts.refresh = Aktualisieren
hosts.discovering = Suche nach LAN-Spielen
hosts.discovering.any = Suche nach Spielen
@@ -152,7 +176,7 @@ trace.ip = IP: [accent]{0}
trace.id = Eindeutige ID: [accent]{0}
trace.mobile = Mobiler Client: [accent]{0}
trace.modclient = Gemoddeter Client: [accent]{0}
-invalidid = Ungültige Client-ID! Berichte den Bug.
+invalidid = Ungültige Client-ID! Berichte den Fehler.
server.bans = Bans
server.bans.none = Keine gebannten Spieler gefunden!
server.admins = Admins
@@ -166,18 +190,18 @@ 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 = Are you sure you want to vote-kick this player?
+confirmvotekick = Willst du wirklich eine Abstimmung zum kicken des spielers machen?
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?
joingame.title = Spiel beitreten
joingame.ip = IP:
disconnect = Verbindung unterbrochen.
-disconnect.error = Connection error.
-disconnect.closed = Connection closed.
-disconnect.timeout = Timed out.
+disconnect.error = Verbindungsfehler.
+disconnect.closed = Verbindung geschlossen.
+disconnect.timeout = Zu langer Verbindungsversuch.
disconnect.data = Fehler beim Laden der Welt!
-cantconnect = Unable to join game ([accent]{0}[]).
+cantconnect = Unfähig, dem Spiel beizutreten ([accent]{0}[]).
connecting = [accent] Verbinde...
connecting.data = [accent] Welt wird geladen...
server.port = Port:
@@ -216,8 +240,8 @@ save.playtime = Spielzeit: {0}
warning = Warnung.
confirm = Bestätigen
delete = Löschen
-view.workshop = View In Workshop
-workshop.listing = Edit Workshop Listing
+view.workshop = Im Workshop betrachten
+workshop.listing = Workshop Auflistung bearbeiten
ok = OK
open = Öffnen
customize = Anpassen
@@ -227,20 +251,20 @@ copylink = Kopiere Link
back = Zurück
data.export = Daten exportieren
data.import = Daten importieren
-data.exported = Data exported.
-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.
-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?
+data.exported = Daten exportiert.
+data.invalid = Das sind ungültige Spieldateien.
+data.import.confirm = Externe Spielstände zu importieren löscht[scarlet] all[] deine jetzigen Spielstände.\n[accent]Dies kann nicht rückgängig gemacht werden![]\n\nSobald die Daten importiert sind, schließt das Spiel.
+classic.export = Klassische Dateien exportieren
+classic.export.text = [accent]Mindustry[] Mindustry hatte gerade ein rießiges Update.\nKlassische (v3.5 build 40) Spielstand oder Karten-Daten wurden gefunden. Willst du sie in den home-Ordner deines Smartphones exportieren, um sie für die Mindustry-Klassik App zu verwenden?
quit.confirm = Willst du wirklich aufhören?
quit.confirm.tutorial = Willst du das Tutorial wirklich abbrechen?\nDu kannst es unter[accent] Einstellungen->Spiel->Tutorial wiederholen[] erneut spielen.
loading = [accent]Wird geladen...
-reloading = [accent]Reloading Mods...
+reloading = [accent]Mods neuladen...
saving = [accent]Speichere...
-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}][] um Plan zu löschen
+selectschematic = [accent][[{0}][] zum Auswählen+Kopieren
+pausebuilding = [accent][[{0}][] zum Pausieren des Bauens
+resumebuilding = [scarlet][[{0}][] um das Bauen fortzusetzen
wave = [accent]Welle {0}
wave.waiting = Welle in {0}
wave.waveInProgress = [LIGHT_GRAY]Welle im Gange
@@ -259,18 +283,19 @@ map.nospawn = Diese Karte hat keine Kerne in denen die Spieler beginnen können!
map.nospawn.pvp = Diese Karte hat keine gegnerischen Kerne wo Gegner starten könnten! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
map.nospawn.attack = Diese Karte hat keine gengnerischen Kerne, die Spieler angreifen können! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
map.invalid = Fehler beim Laden der Karte: Beschädigtes oder ungültige Karten Datei.
-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.update = Item aktualisieren
+workshop.error = Fehler beim laden von Workshop-Daten: {0}
+map.publish.confirm = Willst du wirklich diese Map hochladen?\n\n[lightgray]Vergewissere dich die, der Workshop-EULA zugestimmt zu haben, sonst tauch deine Map nicht auf!
+workshop.menu = Wähle aus, was du mit diesem Item machen willst.
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}
+missing = Dieses Item wurde verschoben oder gelöscht.\n[lightgray]Die Workshop-Auflistung wird nun automatisch ungekoppelt.
+publishing = [accent]Veröffentlichen...
+publish.confirm = Bist du sicher, dies zu veröffentlichen?\n\n[lightgray]Vergewissere dich die, der Workshop-EULA zugestimmt zu haben, sonst tauch deine Karte nicht auf!
+publish.error = Fehler beim veröffentlichen des Items: {0}
+steam.error = Fehler beim laden der Steam-Dienste.\nError: {0}
+
editor.brush = Pinsel
editor.openin = Öffne im Editor
editor.oregen = Erze generieren
@@ -278,12 +303,12 @@ editor.oregen.info = Erze generiert:
editor.mapinfo = Karten Info
editor.author = Autor:
editor.description = Beschreibung:
-editor.nodescription = A map must have a description of at least 4 characters before being published.
+editor.nodescription = Eine Karte benötigt mindestens 4 Buchstaben in der Beschreibung, bevor sie veröffentlich werden kann.
editor.waves = Wellen:
editor.rules = Regeln:
editor.generation = Generator:
editor.ingame = Im Spiel Bearbeiten
-editor.publish.workshop = Publish On Workshop
+editor.publish.workshop = Im Workshop veröffentlichen
editor.newmap = Neue Karte
workshop = Workshop
waves.title = Wellen
@@ -312,7 +337,7 @@ editor.errorload = Fehler beim Laden der Datei:\n[accent]{0}
editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0}
editor.errorimage = Das ist ein Bild, keine Karte. Wechsel nicht den Dateityp und erwarte, dass es funktioniert.\n\nWenn du eine alte Karte importieren möchtest, benutze den 'Importiere Terrain Bild' Knopf in dem Editor.
editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Karten Format, das nicht mehr unterstützt wird.
-editor.errornot = This is not a map file.
+editor.errornot = Dies ist keine Kartendatei
editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt.
editor.errorname = Karte hat keinen Namen.
editor.update = Aktualisieren
@@ -347,6 +372,7 @@ editor.overwrite = [accent] Warnung! Dies überschreibt eine vorhandene Karte.
editor.overwrite.confirm = [scarlet]Warnung![] Eine Karte mit diesem Namen existiert bereits. Bist du sicher, dass du sie überschreiben willst?
editor.exists = A map with this name already exists.
editor.selectmap = Wähle eine Karte zum Laden:
+
toolmode.replace = Ersetzen
toolmode.replace.description = Zeichnet nur auf festen Blöcken.
toolmode.replaceall = Alles Ersetzen
@@ -361,6 +387,7 @@ toolmode.fillteams = Teams Ausfüllen
toolmode.fillteams.description = Füllt Teams aus anstatt Blöcke.
toolmode.drawteams = Teams Zeichnen
toolmode.drawteams.description = Zeichnet Teams anstatt Blöcke.
+
filters.empty = [LIGHT_GRAY]Keine Filter! Füge einen mit dem unteren Knopf hinzu.
filter.distort = Verzerren
filter.noise = Rauschen
@@ -392,6 +419,7 @@ filter.option.floor2 = Sekundärer Boden
filter.option.threshold2 = Sekundärer Grenzwert
filter.option.radius = Radius
filter.option.percentile = Perzentil
+
width = Breite:
height = Höhe:
menu = Menü
@@ -407,36 +435,38 @@ tutorial = Tutorial
tutorial.retake = Tutorial wiederholen
editor = Editor
mapeditor = Karten Editor
+
abandon = Aufgeben
abandon.text = Diese Zone sowie alle Ressourcen werden dem Gegner überlassen.
locked = Gesperrt
complete = [LIGHT_GRAY]Abschließen:
-requirement.wave = Reach Wave {0} in {1}
-requirement.core = Destroy Enemy Core in {0}
-requirement.unlock = Unlock {0}
+requirement.wave = Erreiche {0} in {1}
+requirement.core = Zerstöre Gegnerbasis in {0}
+requirement.unlock = Schalte {0} freo
resume = Zu Zone zurückkehren:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Beste Welle: {0}
launch = Abschluss
launch.title = Abschluss erfolgreich
launch.next = [LIGHT_GRAY]Nächste Möglichkeit bei Welle {0}
-launch.unable2 = [scarlet]Unable to LAUNCH.[]
+launch.unable2 = [scarlet]Unfähig abzuschließen.[]
launch.confirm = Dies wird alle Ressourcen in deinen Kern übertragen.\nDu kannst nicht wieder zu dieser Karte zurückkehren.
-launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
+launch.skip.confirm = Wenn du jetzt überspringst, kannst du nicht vor späteren Wellen abschließen.
uncover = Freischalten
configure = Startitems festlegen
bannedblocks = Gesperrte Blöcke
addall = Alle hinzufügen
configure.locked = [LIGHT_GRAY]Erreiche Welle {0}\n, um Startitems festlegen zu können.
-configure.invalid = Amount must be a number between 0 and {0}.
+configure.invalid = Anzahl muss zwischen 0 und {0} sein.
zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet.
zone.requirement.complete = Welle {0} erreicht:\n{1} Anforderungen der Zone erfüllt.
-zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
+zone.config.unlocked = Konfiguration:[lightgray]\n{0}
zone.resources = Ressourcen entdeckt:
zone.objective = [lightgray]Ziel: [accent]{0}
zone.objective.survival = Überlebe
zone.objective.attack = Zerstöre den feindlichen Kern
add = Hinzufügen...
boss.health = Boss Lebenskraft
+
connectfail = [crimson] Verbindung zum Server konnte nicht hergestellt werden: [accent]{0}
error.unreachable = Server nicht erreichbar.
error.invalidaddress = Ungültige Adresse.
@@ -447,6 +477,7 @@ error.mapnotfound = Kartendatei nicht gefunden!
error.io = Netzwerk-Ein-/Ausgabe-Fehler.
error.any = Unbekannter Netzwerkfehler.
error.bloom = Bloom konnte nicht initialisiert werden.\nEs kann sein, dass dein Gerät es nicht unterstützt.
+
zone.groundZero.name = Ground Zero
zone.desertWastes.name = Schrottwüste
zone.craters.name = Krater
@@ -456,11 +487,12 @@ zone.stainedMountains.name = Gefleckte Berge
zone.desolateRift.name = Trostloser Riss
zone.nuclearComplex.name = Kernkraftwerk
zone.overgrowth.name = Überwucherung
-zone.tarFields.name = Teerfelder
-zone.saltFlats.name = Salzebenen
+zone.tarFields.name = Ölfelder
+zone.saltFlats.name = Salztiefen
zone.impact0078.name = Auswirkung 0078
zone.crags.name = Felsen
-zone.fungalPass.name = Fungal Pass
+zone.fungalPass.name = Sporenpass
+
zone.groundZero.description = Der optimale Ort, um anzufangen. Niedrige Bedrohung durch Gegner. Wenige Ressourcen.\nSammel so viel Kupfer und Blei wie möglich.\nMach weiter!
zone.frozenForest.description = Sogar hier, näher an den Bergen, haben sich die Sporen verbreitet. Die kalten Temperaturen können sie nicht für immer im Schach halten.\n\nStarte das Wagnis in Strom. Baue Verbrennungsgeneratoren. Lerne Heiler zu benutzen.
zone.desertWastes.description = Diese Abfälle sind riesig, unberechenbar, und durchzogen von verfallenen Sektorstrukturen.\nKohle ist in dieser Region vorhanden. Verbrenne es für Strom, oder synthetisiere Graphit.\n\n[lightgray]Dieser Landeort kann nicht garantiert werden.
@@ -472,13 +504,15 @@ zone.overgrowth.description = Dieser Bereich ist bewachsen, näher an der Quelle
zone.tarFields.description = Der Rand einer Ölförderzone, zwischen Bergen und Wüste. Eine der wenigen Plätze mit nutzbare Teer Reserven.\nObwohl es aufgegeben wurde, hat dieses Gebiet einige gefährliche feindliche Kräfte in der Nähe. Unterschätze sie nicht.\n\n[lightgray]Wenn möglich, erforsche Technologien zur Ölverarbeitung.
zone.desolateRift.description = Eine extrem gefährliche Zone. Reichlich Ressourcen, aber wenig Platz. Hohe Zerstörungsgefahr. Verlasse es so schnell wie möglich. Lassen Sie sich nicht von den großen Abständen zwischen feindlichen Angriffen in die Irre führen.
zone.nuclearComplex.description = Eine ehemalige Anlage zur Herstellung und Verarbeitung von Thorium, die in Trümmern liegt.\n[lightgray]Erforsche das Thorium und seine vielen Verwendungsmöglichkeiten.\n\nDer Feind ist hier in großer Zahl präsent und sucht ständig nach Angreifern.
-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.fungalPass.description = Ein Übergangsgebiet zwischen hohen Bergen und tieferen, sporengeplagter Länder. Eine kleine Späherbasis ist hier angelegt.\nZerstöre sie.\nNutze Dagger und Crawler. Zerstöre die zwei Basen.
zone.impact0078.description =
zone.crags.description =
+
settings.language = Sprache
settings.data = Spieldaten
settings.reset = Auf Standard zurücksetzen
settings.rebind = Zuweisen
+settings.resetKey = Reset
settings.controls = Steuerung
settings.game = Spiel
settings.sound = Audio
@@ -509,13 +543,13 @@ blocks.shootrange = Reichweite
blocks.size = Größe
blocks.liquidcapacity = Flüssigkeitskapazität
blocks.powerrange = Stromreichweite
-blocks.powerconnections = Max Connections
+blocks.powerconnections = Maximale Stromverbindungen
blocks.poweruse = Stromverbrauch
blocks.powerdamage = Stromverbrauch/Schadenspunkt
blocks.itemcapacity = Materialkapazität
blocks.basepowergeneration = Basis-Stromerzeugung
blocks.productiontime = Produktionszeit
-blocks.repairtime = Block volle Reparaturzeit
+blocks.repairtime = Zeit zur vollständigen Heilung
blocks.speedincrease = Geschwindigkeitserhöhung
blocks.range = Reichweite
blocks.drilltier = Abbaubare Erze
@@ -529,14 +563,15 @@ blocks.inaccuracy = Ungenauigkeit
blocks.shots = Schüsse
blocks.reload = Schüsse/Sekunde
blocks.ammo = Munition
-bar.drilltierreq = besserer Bohrer benötigt
+
+bar.drilltierreq = Besserer Bohrer benötigt
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.poweramount = Strom: {0}
-bar.poweroutput = Strom Output: {0}
+bar.poweroutput = Stromgeneration: {0}
bar.items = Items: {0}
bar.capacity = Capacity: {0}
bar.liquid = Flüssigkeit
@@ -544,17 +579,21 @@ bar.heat = Hitze
bar.power = Strom
bar.progress = Baufortschritt
bar.spawned = Einheiten: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] Schaden
bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln
bullet.incendiary = [stat]entzündend
-bullet.homing = [stat]verfolgend
+bullet.homing = [stat]zielsuchend
bullet.shock = [stat]schock
bullet.frag = [stat]explosiv
bullet.knockback = [stat]{0}[lightgray] zurückstoßend
-bullet.freezing = [stat]gefrierend
-bullet.tarred = [stat]geteert
+bullet.freezing = [stat]frierend
+bullet.tarred = [stat]teerent
bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator
bullet.reload = [stat]{0}[lightgray]x Feuerrate
+
unit.blocks = Blöcke
unit.powersecond = Stromeinheiten/Sekunde
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
@@ -563,22 +602,25 @@ unit.liquidunits = Flüssigkeitseinheiten
unit.powerunits = Stromeinheiten
unit.degrees = Grad
unit.seconds = Sekunden
-unit.persecond = /sec
+unit.persecond = /s
unit.timesspeed = x Geschwindigkeit
unit.percent = %
unit.items = Materialeinheiten
+unit.thousands = k
+unit.millions = mil
category.general = Allgemeines
category.power = Strom
category.liquids = Flüssigkeiten
category.items = Materialien
category.crafting = Erzeugung
category.shooting = Schießen
-category.optional = Optionale Verbesserungen
+category.optional = Zusätze
setting.landscape.name = Landschaft sperren
setting.shadows.name = Schatten
-setting.blockreplace.name = Automatic Block Suggestions
+setting.blockreplace.name = Automatische Blockvorschläge
setting.linear.name = Lineare Filterung
-setting.hints.name = Hints
+setting.hints.name = Tipps
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Animiertes Wasser
setting.animatedshields.name = Animierte Schilde
setting.antialias.name = Antialias[LIGHT_GRAY] (Neustart erforderlich)[]
@@ -597,10 +639,11 @@ setting.difficulty.normal = Normal
setting.difficulty.hard = Schwer
setting.difficulty.insane = Unmöglich
setting.difficulty.name = Schwierigkeit
-setting.screenshake.name = Bildschirmwackeln
+setting.screenshake.name = Wackeleffekt
setting.effects.name = Effekte anzeigen
setting.destroyedblocks.name = Zerstörte Blöcke anzeigen
setting.conveyorpathfinding.name = Automatische Wegfindung beim Bau von Förderbändern
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Controller-Empfindlichkeit
setting.saveinterval.name = Autosave Häufigkeit
setting.seconds = {0} Sekunden
@@ -625,8 +668,8 @@ setting.publichost.name = Public Game Visibility
setting.chatopacity.name = Chat Deckkraft
setting.lasersopacity.name = Power Laser Opacity
setting.playerchat.name = Chat im Spiel anzeigen
-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.
+public.confirm = Willst du dein Spiel öffentlich zugänglich machen?\n[accent]Jeder kann deinem Spiel beitreten.\n[lightgray]Dies kann später in den Einstellung->Spielt->Öffentliches Spiel geändert werden.
+public.beta = Bemerke: Beta-Versionen des Spiels können keine öffentlichen Spiele machen.
uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen...
uiscale.cancel = Abbrechen & Beenden
setting.bloom.name = Bloom
@@ -643,12 +686,15 @@ keybind.clear_building.name = Clear Building
keybind.press = Drücke eine Taste...
keybind.press.axis = Drücke eine Taste oder bewege eine Achse...
keybind.screenshot.name = Karten Screenshot
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = X-Achse
keybind.move_y.name = Y-Achse
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Bindestrich
keybind.schematic_select.name = Bereich auswählen
keybind.schematic_menu.name = Schematic Menu
-keybind.schematic_flip_x.name = Flip Schematic X
-keybind.schematic_flip_y.name = Flip Schematic Y
+keybind.schematic_flip_x.name = Entwurf umdrehen X
+keybind.schematic_flip_y.name = Entwurf umdrehn Y
keybind.category_prev.name = Vorige Kategorie
keybind.category_next.name = Nächste Kategorie
keybind.block_select_left.name = Block-Auswahl nach links
@@ -675,9 +721,8 @@ keybind.shoot.name = Schießen
keybind.zoom.name = Zoomen
keybind.menu.name = Menü
keybind.pause.name = Pause
-keybind.pause_building.name = Pause/Resume Building
+keybind.pause_building.name = Pausieren/Fortsetzen Bauen
keybind.minimap.name = Minimap
-keybind.dash.name = Bindestrich
keybind.chat.name = Chat
keybind.player_list.name = Spielerliste
keybind.console.name = Konsole
@@ -700,7 +745,9 @@ mode.pvp.description = Kämpfe gegen andere Spieler lokal.
mode.attack.name = Angriff
mode.attack.description = Keine Wellen, das Ziel ist es die gegnerische Basis zu zerstören.
mode.custom = Angepasste Regeln
+
rules.infiniteresources = Unbegrenzte Ressourcen
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Wellen Timer
rules.waves = Wellen
rules.attack = Angriff-Modus
@@ -708,6 +755,7 @@ rules.enemyCheat = Unbegrenzte Ressourcen für KI
rules.unitdrops = Einheiten-Drops
rules.unitbuildspeedmultiplier = Baugeschwindigkeit-Einheit Multiplikator
rules.unithealthmultiplier = Lebenspunkte-Einheit Multiplikator
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Spieler-Lebenspunkte Multiplikator
rules.playerdamagemultiplier = Spieler-Schaden Multiplikator
rules.unitdamagemultiplier = Schaden-Einheit Multiplikator
@@ -726,6 +774,10 @@ rules.title.resourcesbuilding = Ressourcen & Gebäude
rules.title.player = Spieler
rules.title.enemy = Gegner
rules.title.unit = Einheiten
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Materialien
content.liquid.name = Flüssigkeiten
content.unit.name = Einheiten
@@ -748,7 +800,7 @@ item.pyratite.name = Pyratit
item.metaglass.name = Metaglass
item.scrap.name = Schrott
liquid.water.name = Wasser
-liquid.slag.name = Asche
+liquid.slag.name = Schlacke
liquid.oil.name = Öl
liquid.cryofluid.name = Kryoflüssigkeit
mech.alpha-mech.name = Alpha
@@ -788,6 +840,7 @@ mech.buildspeed = [LIGHT_GRAY]Baugeschwindigkeit: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Wärmekapazität: {0}
liquid.viscosity = [LIGHT_GRAY]Viskosität: {0}
liquid.temperature = [LIGHT_GRAY]Temperatur: {0}
+
block.sand-boulder.name = Sandbrocken
block.grass.name = Gras
block.salt.name = Salz
@@ -823,7 +876,7 @@ block.deepwater.name = Tiefes Wasser
block.water.name = Wasser
block.tainted-water.name = Unreines Wasser
block.darksand-tainted-water.name = Dunkler Sand in unreinem Wasser
-block.tar.name = Teer
+block.tar.name = Öl
block.stone.name = Stein
block.sand.name = Sand
block.darksand.name = Dunkler Sand
@@ -886,6 +939,8 @@ block.distributor.name = Großer Verteiler
block.sorter.name = Sortierer
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.overflow-gate.name = Überlauftor
block.silicon-smelter.name = Silizium-Schmelzer
block.phase-weaver.name = Phasenweber
@@ -899,6 +954,7 @@ block.coal-centrifuge.name = Kohlenzentrifuge
block.power-node.name = Stromknoten
block.power-node-large.name = Großer Stromknoten
block.surge-tower.name = Schwall-Turm
+block.diode.name = Battery Diode
block.battery.name = Batterie
block.battery-large.name = Große Batterie
block.combustion-generator.name = Verbrennungsgenerator
@@ -922,6 +978,7 @@ block.mechanical-pump.name = Mechanische Pumpe
block.item-source.name = Materialquelle
block.item-void.name = Materialschlucker
block.liquid-source.name = Flüssigkeitsquelle
+block.liquid-void.name = Liquid Void
block.power-void.name = Stromsenke
block.power-source.name = Unendliche Stromquelle
block.unloader.name = Entlader
@@ -951,6 +1008,7 @@ block.fortress-factory.name = Fortress Mech-Fabrik
block.revenant-factory.name = Revenant Fighter-Fabrik
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-tank.name = Flüssigkeitstank
@@ -1022,6 +1080,7 @@ tutorial.deposit = Materialien können in Blöcke abgelegt werden, indem du sie
tutorial.waves = Der [LIGHT_GRAY]Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Baue mehr Türme.
tutorial.waves.mobile = Der[lightgray] Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Dein Schiff feuert automatisch auf Gegner.\nBaue mehr Geschütztürme und Bohrer. Baue mehr Kupfer ab.
tutorial.launch = Sobald du eine bestimmte Welle erreicht hast, kannst du die [accent]Mission abschließen[]. Dadurch lässt du deine Basis zurück[accent] und überträgst alle Ressourcen in deinen Kern.[]\nDiese Ressourcen können zur Erforschung neuer Technologien eingesetzt werden.\n\n[accent]Drücke nun den Abschluss-Button.
+
item.copper.description = Ein nützliches Material. Wird in allen Arten von Blöcken verwendet.
item.lead.description = Ein grundlegendes Material. Häufig in Elektronik und Flüssigkeits-Transport-Blöcken verwendet.
item.metaglass.description = Eine extrem harte Glasmischung. Wird zur Verteilung und Lagerung von Flüssigkeiten benutzt.
@@ -1083,6 +1142,7 @@ block.power-source.description = Erzeugt unendlich viel Strom. Nur im Sandkasten
block.item-source.description = Produziert unendlich items. Nur im Sandkasten-Modus verfügbar.
block.item-void.description = Zerstört Materialien, die hereingegeben werden, ohne Strom zu verbrauchen. Nur im Sandkasten-Modus verfügbar.
block.liquid-source.description = Produziert unendlich Flüssigkeiten. Nur im Sandkasten-Modus verfügbar.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen.
block.copper-wall-large.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen.\nBenötigt mehrere Kacheln.
block.titanium-wall.description = Ein mittel starker Verteidigungsblock.\nBietet mäßigen Schutz vor Feinden.
@@ -1118,6 +1178,7 @@ block.rotary-pump.description = Eine fortgeschrittene Pumpe, die mithilfe von St
block.thermal-pump.description = Die ultimative Pumpe, dreimal so schnell wie eine mechanische Pumpe und die einzige Pumpe, die Lava fördern kann.
block.conduit.description = Standard Flüssigkeits-Transportblock. Funktioniert wie ein Förderband, nur für Flüssigkeiten. Wird am Besten mit Extraktoren, Pumpen oder anderen Kanälen benutzt.
block.pulse-conduit.description = Verbesserter Flüssigkeits-Transportblock. Transportiert Flüssigkeiten schneller und speichert mehr als Standard Kanäle.
+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 = Akzeptiert Flüssigkeiten aus einer Richtung und verteilt sie an bis zu drei andere Richtungen weiter. Nützlich, um Flüssigkeiten aus einer Quelle an mehrere Empfänger zu verteilen.
block.liquid-tank.description = Speichert eine große Menge an Flüssigkeiten. Verwende es als Puffer, wenn Angebot und Nachfrage an einer Flüssigkeit schwanken.
block.liquid-junction.description = Fungiert als Brücke über zwei kreuzende Kanäle. Nützlich in Situationen, in denen sich zwei Kanäle mit verschiedenen Flüssigkeiten kreuzen.
@@ -1126,6 +1187,7 @@ block.phase-conduit.description = Verbesserter Flüssigkeits-Transportblock. Ver
block.power-node.description = Überträgt Strom zu verbundenen Knoten. Bis zu vier Stromquellen, -verbraucher oder -knoten können verbunden werden. Der Knoten erhält Strom von benachbarten Knoten und gibt Strom an benachbarte Blöcke weiter.
block.power-node-large.description = Hat einen größeren Radius als der normale Stromknoten und verbindet bis zu sechs Stromquellen, -verbraucher oder -knoten.
block.surge-tower.description = Ein extrem weitreichender Netzknoten mit weniger verfügbaren Verbindungen.
+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 = Speichert Strom, solange ein Überschuss besteht, und gibt ihn bei Knappheit ab, solange Kapazität vorhanden ist.
block.battery-large.description = Speichert sehr viel mehr Strom als eine normale Batterie.
block.combustion-generator.description = Generiert Strom, indem Öl oder entzündliche Materialien verbrannt werden.
diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties
index 38f9696ea3..602e48455c 100644
--- a/core/assets/bundles/bundle_es.properties
+++ b/core/assets/bundles/bundle_es.properties
@@ -10,36 +10,49 @@ 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 listado del catálogo
link.wiki.description = Wiki oficial de Mindustry
+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
load.image = Imágenes
load.content = Contenido
load.system = Sistema
load.mod = Mods
-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
+load.scripts = Scripts
+
+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 = 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 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}
stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0}
stat.built = Estructuras Construidas:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Estructuras Destruidas:[accent] {0}
stat.deconstructed = Estructuras Desconstruidas:[accent] {0}
stat.delivered = Recursos Lanzados:
stat.rank = Rango final: [accent]{0}
+
launcheditems = [accent]Recursos Lanzados
launchinfo = [unlaunched][[LAUNCH] tu núcleo core obtenga los objetos indicados en azul.
map.delete = ¿Estás seguro que quieres borrar el mapa "[accent]{0}[]"?
@@ -64,7 +78,7 @@ customgame = Partida personalizada
newgame = Nueva Partida
none =
minimap = Minimapa
-position = Position
+position = Posición
close = Cerrar
website = Sitio web
quit = Salir
@@ -74,36 +88,45 @@ maps.browse = Navegar por los Mapas
continue = Continuar
maps.none = [LIGHT_GRAY]¡No se han encontrado mapas!
invalid = Invalido
-preparingconfig = Preparing Config
-preparingcontent = Preparing Content
-uploadingcontent = Uploading Content
-uploadingpreviewfile = Uploading Preview File
-committingchanges = Comitting Changes
+pickcolor = Pick Color
+preparingconfig = Preparando Configuración
+preparingcontent = Preparando Contenido
+uploadingcontent = Subiendo Contenido
+uploadingpreviewfile = Subiendo Archivo de Vista Previa
+committingchanges = Cometiendo Cambios
done = Hecho
-feature.unsupported = Your device does not support this feature.
-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.
+feature.unsupported = Tu dispositivo no soporta esta función.
+
+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.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.missingdependencies = [scarlet]Missing dependencies: {0}
-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.import.github = Import GitHub Mod
-mod.remove.confirm = This mod will be deleted.
-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.
+mods.none = [LIGHT_GRAY]No se encontraron Mods!
+mods.guide = Guia de Modding
+mods.report = Reportar Error
+mods.openfolder = Abrir carpeta de mods
+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]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 = 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]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:
noname = Elige un[accent] nombre de jugador[] primero.
@@ -118,31 +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 = You have been vote-kicked. Goodbye.
+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.versions = Your version:[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.
+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[] 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.
@@ -150,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
@@ -166,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?
@@ -175,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...
@@ -183,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
@@ -216,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
@@ -228,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]Reloading Mods...
+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
@@ -259,18 +283,19 @@ 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
editor.oregen = Generación de Minerales
@@ -278,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 =
@@ -305,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}
@@ -345,8 +370,9 @@ 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
toolmode.replace.description = Solo dibuja en bloques sólidos.
toolmode.replaceall = Sustituir Todo
@@ -361,15 +387,16 @@ toolmode.fillteams = Llenar Equipos
toolmode.fillteams.description = Llena equipos en vez de bloques.
toolmode.drawteams = Dibujar Equipos
toolmode.drawteams.description = Dibuja equipos en vez de bloques.
+
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
@@ -381,17 +408,18 @@ 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
+
width = Ancho:
height = Alto:
menu = Menú
@@ -401,19 +429,20 @@ load = Cargar
save = Guardar
fps = FPS: {0}
ping = Ping: {0} ms
-language.restart = Por favor reinicie el juego para que los cambios del lenguaje surjan efecto.
+language.restart = Por favor reinicia el juego para que los cambios de idioma tengan efecto.
settings = Ajustes
tutorial = Tutorial
tutorial.retake = Volver a hacer tutorial
editor = Editor
mapeditor = Editor de Mapa
+
abandon = Abandonar
abandon.text = Esta zona y sus recursos se perderán ante el enemigo.
locked = Bloqueado
complete = [LIGHT_GRAY]Completado:
-requirement.wave = Reach Wave {0} in {1}
-requirement.core = Destroy Enemy Core in {0}
-requirement.unlock = Unlock {0}
+requirement.wave = Alcanzar la oleada{0} en {1}
+requirement.core = Destruir el núcleo enemigo en {0}
+requirement.unlock = Desbloquear {0}
resume = Continuar Zona:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Récord: {0}
launch = Lanzar
@@ -424,19 +453,20 @@ 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
zone.objective.attack = Destruir Núcleo Enemigo
add = Añadir...
boss.health = Salud del Jefe
+
connectfail = [crimson]Ha fallado la conexión con el servidor: [accent]{0}
error.unreachable = Servidor inaccesible.
error.invalidaddress = Dirección inválida.
@@ -446,22 +476,24 @@ error.alreadyconnected = Ya estás conectado.
error.mapnotfound = ¡Archivo de mapa no encontrado!
error.io = Error I/O de conexión.
error.any = Error de red desconocido.
-error.bloom = Failed to initialize bloom.\nYour device may not support it.
+error.bloom = Error al cargar el bloom.\nPuede que tu dispositivo no soporte esta característica.
+
zone.groundZero.name = Terreno Cero
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
zone.crags.name = Riscos
zone.fungalPass.name = Fungal Pass
-zone.groundZero.description = La zona óptima para empear una vez más. Riesgo bajo de los enemigos. Pocos recursos.\nConsigue tanto plomo y cobre como puedas.\nSigue avanzando.
+
+zone.groundZero.description = La zona óptima para empezar una vez más. Riesgo bajo de los enemigos. Pocos recursos.\nConsigue tanto plomo y cobre como puedas.\nSigue avanzando.
zone.frozenForest.description = Incluso aquí, cerca de las montañas, las esporas se han expandido. Las temperaturas gélidas no pueden contenerlas para siempre.\n\nEmpieza a investigar sobre energía. Cnstruye generadores de combustión. Aprende a usar reparadores.
zone.desertWastes.description = Estas ruinas son vastas, impredecibles y entrecruzadas con sectores de estructuras abandonadas.\nHay carbñon presente en la región. Quémalo para energía, o sintetiza grafito.\n\n[lightgray]La zona de aparición no puede ser garantizada.
zone.saltFlats.description = A las afueras del desierto se encuentran las Salinas. Pocos recursos pueden ser encontrados en esta ubicación.\n\nEl enemigo ha erigido un complejo de almacén de recursos aquí. Erradica su núcleo. No dejes nada.
@@ -475,20 +507,22 @@ zone.nuclearComplex.description = Una antigua facilidad para la producción y el
zone.fungalPass.description = Una zona transitoria entre alta montaña y zonas más bajas con esporas. Una base enemiga pequeña de reconocimiento se ubica aquí.\nDestrúyela.nUsa Dagas y Orugas. Destruye los dos núcleos.
zone.impact0078.description =
zone.crags.description =
+
settings.language = Idioma
settings.data = Datos del Juego
settings.reset = Reiniciar por los de defecto
settings.rebind = Reasignar
+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
-banned = [scarlet]Banned
+clear = Purificar
+banned = [scarlet]Baneado
yes = Sí
no = No
info.title = [accent]Información
@@ -509,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
@@ -529,9 +563,10 @@ blocks.inaccuracy = Imprecisión
blocks.shots = Disparos
blocks.reload = Recarga
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}
@@ -544,17 +579,21 @@ bar.heat = Calor
bar.power = Energía
bar.progress = Progreso de construcción
bar.spawned = Unidades: {0}/{1}
+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.knockback = [stat]{0}[lightgray] knockback
-bullet.freezing = [stat]freezing
-bullet.tarred = [stat]tarred
+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]Relantizado
bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munición
bullet.reload = [stat]{0}[lightgray]x recarga
+
unit.blocks = bloques
unit.powersecond = unidades de energía/segundo
unit.liquidsecond = unidades de líquido/segundo
@@ -567,6 +606,8 @@ unit.persecond = /seg
unit.timesspeed = x velocidad
unit.percent = %
unit.items = objetos
+unit.thousands = k
+unit.millions = mil
category.general = General
category.power = Energía
category.liquids = Líquidos
@@ -574,22 +615,23 @@ 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 = Automatic Block Suggestions
-setting.linear.name = Linear Filtering
-setting.hints.name = Hints
+setting.blockreplace.name = Sugerir bloques al construir
+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
-setting.uiscale.name = Escala de IU[lightgray] (necesita reiniciar)[]
+setting.uiscale.name = Escala de UI[lightgray] (necesita reiniciar)[]
setting.swapdiagonal.name = Siempre Colocar Diagonalmente
setting.difficulty.training = entrenamiento
setting.difficulty.easy = fácil
@@ -599,15 +641,19 @@ setting.difficulty.insane = locura
setting.difficulty.name = Dificultad:
setting.screenshake.name = Movimiento de la Pantalla
setting.effects.name = Mostrar Efectos
-setting.destroyedblocks.name = Display Destroyed Blocks
-setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.destroyedblocks.name = Mostrar bloques destruidos
+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 = 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.vsync.name = SincV
+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
setting.position.name = Show Player Position
@@ -617,70 +663,91 @@ setting.mutemusic.name = Silenciar Musica
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 = Auto-Create Saves
-setting.publichost.name = Public Game Visibility
+setting.savecreate.name = Crear puntos de guardado automáticamente
+setting.publichost.name = Visibilidad del juego público
setting.chatopacity.name = Opacidad del Chat
-setting.lasersopacity.name = Power Laser Opacity
-setting.playerchat.name = Display In-Game Chat
-public.confirm = Do you want to make your game public?\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...
+setting.lasersopacity.name = Opacidad de los rayos láser
+setting.playerchat.name = Mostrar el chat in-game
+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]Most keybinds here are not functional on mobile. Only basic movement is supported.
+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
-keybind.clear_building.name = Clear Building
+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 = Activar láser de potencia
keybind.move_x.name = Mover x
keybind.move_y.name = Mover y
-keybind.schematic_select.name = Select Region
-keybind.schematic_menu.name = Schematic Menu
-keybind.schematic_flip_x.name = Flip Schematic X
-keybind.schematic_flip_y.name = Flip Schematic Y
+keybind.mouse_move.name = Seguír al ratón
+keybind.dash.name = Correr
+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.dash.name = Correr
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.
mode.custom = Normas personalizadas
+
rules.infiniteresources = Recursos Infinitos
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Temportzador de Oleadas
rules.waves = Oleadas
rules.attack = Modo de Ataque
@@ -688,16 +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 = 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
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Recursos y Construcción
rules.title.player = Jugadores
rules.title.enemy = Enemigos
rules.title.unit = Unidades
+rules.title.experimental = Experimental
+rules.lighting = Iluminación
+rules.ambientlight = Iluminación ambiental
+
content.item.name = Objetos
content.liquid.name = Líquidos
content.unit.name = Unidades
@@ -717,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
@@ -749,9 +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]Guardable en el núcleo: {0}
item.explosiveness = [LIGHT_GRAY]Explosividad: {0}
item.flammability = [LIGHT_GRAY]Inflamabilidad: {0}
item.radioactivity = [LIGHT_GRAY]Radioactividad: {0}
@@ -762,23 +835,24 @@ 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}
liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
+
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
@@ -789,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
@@ -797,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
@@ -809,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
@@ -834,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
@@ -842,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
@@ -851,22 +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.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors.
+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.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
@@ -877,7 +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.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
@@ -889,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
@@ -901,6 +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 = 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
@@ -917,19 +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 = 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
@@ -941,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
@@ -966,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.
@@ -1001,6 +1080,7 @@ tutorial.deposit = Deposita recursos en bloques arrastrándolos de tu nave al bl
tutorial.waves = El[LIGHT_GRAY] enemigo[] se acerca.\n\nDefiende tu núcleo por 2 oleadas. Construye más torretas y taladros. Mina más cobre.
tutorial.waves.mobile = El[lightgray] enemigo[] se acerca.\n\nDefiende tu núcleo por 2 oleadas. Tu nave disparará automáticamente a los enemigos.\nConstruye más torretas y taladros. Mina más cobre.
tutorial.launch = Una vez llegues a cierta oleada, podrás[accent]lanzar el núcleo[], dejando atrás tus defensas y los recursos en tu núcleo.[]\nEstos recursos pueden ser usados para investigar nueva tecnología.\n\n[accent]Pulsa el botón de lanzamiento.
+
item.copper.description = Un útil material estructural. Usado extensivamente en todo tipo de bloques.
item.lead.description = Un material básico. Usado extensivamente en electrónicos y bloques de transferencia de líquidos.
item.metaglass.description = Un compuesto muy duro de cristal. Usado extensivamente para almacenamiento y distribución de líquidos.
@@ -1030,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.
@@ -1040,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.
@@ -1057,17 +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.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.
@@ -1087,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.
@@ -1097,6 +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 = 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.
@@ -1105,12 +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 = 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.
@@ -1145,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_et.properties b/core/assets/bundles/bundle_et.properties
index c3e62686d2..ad7b8f5c05 100644
--- a/core/assets/bundles/bundle_et.properties
+++ b/core/assets/bundles/bundle_et.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = Arendusversioonide ajalugu
link.trello.description = Plaanitud uuenduste nimekiri
link.itch.io.description = Kõik PC-platvormide versioonid
link.google-play.description = Androidi versioon Google Play poes
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Mängu ametlik viki
+link.feathub.description = Suggest new features
linkfail = Lingi avamine ebaõnnestus!\nVeebiaadress kopeeriti.
screenshot = Kuvatõmmis salvestati: {0}
screenshot.invalid = Maailm on liiga suur: kuvatõmmise salvestamiseks ei pruugi olla piisavalt mälu.
@@ -18,12 +20,22 @@ gameover = Mäng läbi!
gameover.pvp = Võistkond[accent] {0}[] võitis!
highscore = [accent]Uus rekord!
copied = Copied.
+
load.sound = Helid
load.map = Maailmad
load.image = Pildid
load.content = Sisu
load.system = Süsteem
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
+
schematic = Schematic
schematic.add = Save Schematic...
schematics = Schematics
@@ -40,6 +52,7 @@ schematic.saved = Schematic saved.
schematic.delete.confirm = This schematic will be utterly eradicated.
schematic.rename = Rename Schematic
schematic.info = {0}x{1}, {2} blocks
+
stat.wave = Lahingulaineid läbitud:[accent] {0}
stat.enemiesDestroyed = Vaenlasi hävitatud:[accent] {0}
stat.built = Ehitisi konstrueeritud:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Ehitisi hävinenud:[accent] {0}
stat.deconstructed = Ehitisi dekonstrueeritud:[accent] {0}
stat.delivered = Kaasavõetud ressursid:
stat.rank = Hinne:[accent] {0}
+
launcheditems = [accent]Kaasavõetud ressursid
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Kas oled kindel, et soovid kustutada\nmaailma "[accent]{0}[]"?
@@ -74,6 +88,7 @@ maps.browse = Sirvi maailmu
continue = Jätka
maps.none = [lightgray]Ühtegi maailma ei leitud!
invalid = Kehtetu
+pickcolor = Pick Color
preparingconfig = Konfiguratsiooni ettevalmistamine
preparingcontent = Sisu ettevalmistamine
uploadingcontent = Sisu üleslaadimine
@@ -81,6 +96,7 @@ uploadingpreviewfile = Eelvaate faili üleslaadimine
committingchanges = Muudatuste teostamine
done = Valmis
feature.unsupported = Your device does not support this feature.
+
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.alpha = [accent](Alpha)
mods = Mods
@@ -92,18 +108,25 @@ 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.
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.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.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.
+
about.button = Info
name = Nimi:
noname = Valige kõigepealt [accent]nimi[].
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = Sinu valitud nimi ei sobi.
server.kicked.idInUse = Sa juba mängid selles serveris! Teist korda liitumine on keelatud.
server.kicked.customClient = See server ei luba modifitseeritud mängu versioone. Lae alla ametlik versioon.
server.kicked.gameover = Mäng läbi!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Sinu versioon:[accent] {0}[]\nServeri versioon:[accent] {1}[]
host.info = [accent]Hosti[] nupp avab serveri,\nkasutades porti [scarlet]6567[]. \nSamas [lightgray]kohtvõrgus[] olevad mängijad peaksid nägema sinu serverit enda serverite nimekirjas.\n\nKui sa tahad, et ka väljaspool kohtvõrku olevad mängijad saaksid serveriga ühineda, siis on vajalik\n[accent]portide edasisuunamine[].\n\n[lightgray]Märkus: Kui kellelgi on probleeme sinu kohtvõrgus avatud serveriga liitumisel, siis tee kindlaks, et tulemüüri sätetes on Mindustry'l lubatud pääseda ligi kohtvõrgule.
join.info = Siin saad lisada [accent]IP-aadressi serverile[], millega soovid liituda, või leida [accent]kohtvõrgus[] olevaid servereid.\nMäng toetab nii LAN- kui ka WAN-mitmikmängu.\n\n[lightgray]Märkus: Ei ole olemas automaatset serverite nimekirja. Kui sa soovid liituda mänguga IP kaudu, on sul vaja teada serveri IP-aadressi.
@@ -271,6 +295,7 @@ 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}
+
editor.brush = Pintsel
editor.openin = Ava redaktoris
editor.oregen = Maakide genereerimine
@@ -347,6 +372,7 @@ editor.overwrite = [accent]Hoiatus!\nSee asendab olemasoleva maailma.
editor.overwrite.confirm = [scarlet]Hoiatus![] Sellise nimega maailm on juba olemas. Oled kindel, et soovid selle asendada?
editor.exists = Sellise nimega maailm on juba olemas.
editor.selectmap = Vali laetav maailm:
+
toolmode.replace = Asenda
toolmode.replace.description = Joonista ainult tahkete blokkide peale.
toolmode.replaceall = Asenda kõik
@@ -361,6 +387,7 @@ toolmode.fillteams = Täida võistkondi
toolmode.fillteams.description = Täida blokkide asemel võistkondi.
toolmode.drawteams = Joonista võistkondi
toolmode.drawteams.description = Joonista blokkide asemel võistkondi.
+
filters.empty = [lightgray]Filtrid puuduvad! Lisa filtreid alloleva nupuga.
filter.distort = Moonutamine
filter.noise = Müra
@@ -392,6 +419,7 @@ filter.option.floor2 = Teine põrand
filter.option.threshold2 = Teine lävi
filter.option.radius = Raadius
filter.option.percentile = Protsentiil
+
width = Laius:
height = Kõrgus:
menu = Menüü
@@ -407,6 +435,7 @@ tutorial = Õpetus
tutorial.retake = Korda õpetust
editor = Redaktor
mapeditor = Maailmaredaktor
+
abandon = Loobu
abandon.text = See piirkond koos kõigi ressurssidega loovutatakse vaenlasele.
locked = Lukus
@@ -437,6 +466,7 @@ zone.objective.survival = Ellujäämine
zone.objective.attack = Hävita vaenlaste tuumik
add = Lisa...
boss.health = Bossi elud
+
connectfail = [crimson]Ühenduse viga:\n\n[accent]{0}
error.unreachable = Server ei ole kättesaadav.\nKas serveri aadress on õigesti sisestatud?
error.invalidaddress = Vale aadress.
@@ -447,6 +477,7 @@ error.mapnotfound = Maailmafaili ei leitud!
error.io = Võrgu sisend-väljundi viga.
error.any = Teadmata viga võrgus.
error.bloom = Bloom-efekti lähtestamine ebaõnnestus.\nSinu seade ei pruugi seda efekti toetada.
+
zone.groundZero.name = Nullpunkt
zone.desertWastes.name = Kõrbestunud tühermaa
zone.craters.name = Kraatrid
@@ -461,6 +492,7 @@ zone.saltFlats.name = Soolaväljad
zone.impact0078.name = Kokkupõrge 0078
zone.crags.name = Kaljurünkad
zone.fungalPass.name = Seenekuru
+
zone.groundZero.description = Optimaalne asukoht alustamiseks.\nMadal ohutase. Vähesel määral ressursse.\nKogu kokku nii palju vaske ja pliid kui võimalik.
zone.frozenForest.description = Spoorid on levinud isegi mägede lähedale. Jäised temperatuurid ei suuda neid igavesti eemal hoida.\n\nAlusta esimeste katsetustega energia tootmises. Ehita põlemisgeneraatoreid.\nÕpi oma ehitisi parandama.
zone.desertWastes.description = Need tühermaad on üüratud ja ettearvamatud. Siin-seal leidub mahajäetud ja räsitud tööstushooneid.\n\nSelles piirkonnas leidub sütt. Töötle seda grafiidiks või põleta energia saamiseks.\n\n[lightgray]Maandumispaik ei ole kindlaks määratud.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = Endine tooriumi tootmise ja töötlemise rajat
zone.fungalPass.description = Üleminekuala kõrgete mägede ja madalamate, spooridega ülekülvatud maade vahel. Siin asub väike vaenlaste luurebaas.\nHävita see.\nKasuta soldatite ja plahvatajate väeüksuseid. Hävita kaks vaenlaste tuumikut.
zone.impact0078.description =
zone.crags.description =
+
settings.language = Keel
settings.data = Mänguandmed
settings.reset = Vaikimisi sätted
settings.rebind = Muuda
+settings.resetKey = Reset
settings.controls = Juhtnupud
settings.game = Mäng
settings.sound = Heli
@@ -529,6 +563,7 @@ blocks.inaccuracy = Ebatäpsus
blocks.shots = Laske
blocks.reload = Lasku/s
blocks.ammo = Laskemoon
+
bar.drilltierreq = Nõuab paremat puuri
bar.drillspeed = Puurimise kiirus: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Kuumus
bar.power = Energia
bar.progress = Edenemine
bar.spawned = Väeüksuseid: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] hävituspunkti
bullet.splashdamage = [stat]{0}[lightgray] hävituspunkti ~[stat] {1}[lightgray] blokki
bullet.incendiary = [stat]süttiv
@@ -555,6 +593,7 @@ bullet.freezing = [stat]jäätav
bullet.tarred = [stat]leekisüütav
bullet.multiplier = [stat]{0}[lightgray]x laskemoona kordaja
bullet.reload = [stat]{0}[lightgray]x tulistamise kiirus
+
unit.blocks = blokki
unit.powersecond = energiaühikut/s
unit.liquidsecond = vedelikuühikut/s
@@ -567,6 +606,8 @@ unit.persecond = /s
unit.timesspeed = x kiirus
unit.percent = %
unit.items = ressursiühikut
+unit.thousands = k
+unit.millions = mil
category.general = Üldinfo
category.power = Energia
category.liquids = Vedelikud
@@ -579,6 +620,7 @@ setting.shadows.name = Varjud
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = Lineaarne tekstuurivastendus
setting.hints.name = Hints
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Animeeritud vesi
setting.animatedshields.name = Animeeritud kilbid
setting.antialias.name = Sakitõrje[lightgray] (vajab mängu taaskäivitamist)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Ekraani värisemine
setting.effects.name = Näita visuaalefekte
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Kontrolleri tundlikkus
setting.saveinterval.name = Salvestamise intervall
setting.seconds = {0} sekundit
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Täisekraan
setting.borderlesswindow.name = Äärteta ekraan[lightgray] (võib vajada mängu taaskäivitamist)
setting.fps.name = Näita kaadrite arvu sekundis
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = Vertikaalne sünkroonimine
setting.pixelate.name = Piksel-efekt[lightgray] (lülitab animatsioonid välja)
setting.minimap.name = Näita kaarti
@@ -635,16 +681,36 @@ category.multiplayer.name = Mitmikmäng
command.attack = Ründa
command.rally = Patrulli
command.retreat = Põgene
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Clear Building
keybind.press = Vajuta klahvi...
keybind.press.axis = Liiguta juhtkangi või vajuta klahvi...
keybind.screenshot.name = Kuvatõmmis
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Liigu X-teljel
keybind.move_y.name = Liigu Y-teljel
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Söösta
keybind.schematic_select.name = Select Region
keybind.schematic_menu.name = Schematic Menu
keybind.schematic_flip_x.name = Flip Schematic X
keybind.schematic_flip_y.name = Flip 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.fullscreen.name = Täisekraan
keybind.select.name = Vali/Tulista
keybind.diagonal_placement.name = Diagonaalne paigutamine
@@ -657,7 +723,6 @@ keybind.menu.name = Menüü
keybind.pause.name = Paus
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Kaart
-keybind.dash.name = Söösta
keybind.chat.name = Vestle
keybind.player_list.name = Mängijate nimekiri
keybind.console.name = Konsool
@@ -680,7 +745,9 @@ mode.pvp.description = Võitle teiste mängijate vastu.
mode.attack.name = Rünnak
mode.attack.description = Hävita vaenlaste baas. Lahingulaineid ei ole.
mode.custom = Reeglid
+
rules.infiniteresources = Lõputult ressursse
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Kasuta taimerit
rules.waves = Kasuta lahingulaineid
rules.attack = Mänguviis "Rünnak"
@@ -688,6 +755,7 @@ rules.enemyCheat = [scarlet]Vaenlastel[] on lõputult ressursse
rules.unitdrops = Väeüksuste heitmine lubatud
rules.unitbuildspeedmultiplier = Väeüksuste tootmiskiiruse kordaja
rules.unithealthmultiplier = Väeüksuste elude kordaja
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Mängija elude kordaja
rules.playerdamagemultiplier = Mängija hävitusvõime kordaja
rules.unitdamagemultiplier = Väeüksuste hävitusvõime kordaja
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Ressursid ja ehitamine
rules.title.player = Mängijad
rules.title.enemy = Vaenlased
rules.title.unit = Väeüksused
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Ressursid
content.liquid.name = Vedelikud
content.unit.name = Väeüksused
@@ -752,6 +824,7 @@ mech.trident-ship.name = Lembitu
mech.trident-ship.weapon = Pommiheitja
mech.glaive-ship.name = Vambola
mech.glaive-ship.weapon = Kuulipildur
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [lightgray]Plahvatusohtlikkus: {0}%
item.flammability = [lightgray]Tuleohtlikkus: {0}%
item.radioactivity = [lightgray]Radioaktiivsus: {0}%
@@ -767,6 +840,7 @@ mech.buildspeed = [lightgray]Ehitamise kiirus: {0}%
liquid.heatcapacity = [lightgray]Soojusmahtuvus: {0}
liquid.viscosity = [lightgray]Viskoossus: {0}
liquid.temperature = [lightgray]Temperatuur: {0}
+
block.sand-boulder.name = Liivakamakas
block.grass.name = Rohi
block.salt.name = Sool
@@ -865,6 +939,8 @@ block.distributor.name = Suur jaotur
block.sorter.name = Sorteerija
block.inverted-sorter.name = Inverted Sorter
block.message.name = Sõnum
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = Ülevooluvärav
block.silicon-smelter.name = Ränisulatusahi
block.phase-weaver.name = Faaskangakuduja
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Söetsentrifuug
block.power-node.name = Energiasõlm
block.power-node-large.name = Suur energiasõlm
block.surge-tower.name = Energiatorn
+block.diode.name = Battery Diode
block.battery.name = Aku
block.battery-large.name = Suur aku
block.combustion-generator.name = Põlemisgeneraator
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Harilik pump
block.item-source.name = Ressursiallikas
block.item-void.name = Ressursisuue
block.liquid-source.name = Vedelikuallikas
+block.liquid-void.name = Liquid Void
block.power-void.name = Maandaja
block.power-source.name = Energiaallikas
block.unloader.name = Mahalaadija
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Koljatite tehas
block.revenant-factory.name = Ülestõusnute tehas
block.repair-point.name = Parandusjaam
block.pulse-conduit.name = Titaantoru
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Faastoru
block.liquid-router.name = Torujaotur
block.liquid-tank.name = Mahuti
@@ -1001,6 +1080,7 @@ tutorial.deposit = Ressursside mahalaadimiseks lohista ressursid oma mehhaanilt
tutorial.waves = [scarlet]Vaenlane[] läheneb.\n\nKaitse oma tuumikut kahe lahingulaine vältel.[accent] Kliki hiirega[], et oma mehhaanist tulistada.\n[accent]Kaevanda juurde vaske. Ehita uusi puure ja kahureid.
tutorial.waves.mobile = [scarlet]Vaenlane[] läheneb.\n\nKaitse oma tuumikut kahe lahingulaine vältel. Sinu mehhaan tulistab vaenlaseid automaatselt.\n[accent]Kaevanda juurde vaske. Ehita uusi puure ja kahureid.
tutorial.launch = Kui oled kindla arvu lahingulaineid vastu pidanud, on sul võimalik[accent] tuumikuga lendu tõusta[], jättes maha kõik muud ehitised ja[accent] võttes kaasa kõik tuumikus olevad ressursid.[]\nNeid ressursse saab kasutada uute [accent]tehnoloogiate uurimiseks[].\n\n[accent]Vajuta lendu tõusmise nuppu.
+
item.copper.description = Peamine materjal, mida kasutatakse igat tüüpi konstruktsioonide ehitamiseks.
item.lead.description = Peamine materjal, mida kasutatakse vedelike transportimise konstruktsioonide ja elektroonikaga seotud konstruktsioonide ehitamiseks.
item.metaglass.description = Ülitugev klaasiühend, mida kasutatakse vedelike transportimise ja hoiustamise konstruktsioonide ehitamiseks.
@@ -1062,6 +1142,7 @@ block.power-source.description = Väljastab piiramatult energiat. Olemas ainult
block.item-source.description = Väljastab piiramatult ressursse. Olemas ainult mänguviisis "Liivakast".
block.item-void.description = Hävitab kõik ressursid. Olemas ainult mänguviisis "Liivakast".
block.liquid-source.description = Väljastab piiramatult vedelikke. Olemas ainult mänguviisis "Liivakast".
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Odav kaitsekonstruktsioon.\nKasulik tuumiku ja kahurite kaitsmiseks esimeste lahingulainete ajal.
block.copper-wall-large.description = Odav kaitsekonstruktsioon.\nKasulik tuumiku ja kahurite kaitsmiseks esimeste lahingulainete ajal.\nUlatub üle mitme bloki.
block.titanium-wall.description = Mõõdukalt tugev kaitsekonstruktsioon.\nPakub keskmist kaitset vaenlaste eest.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = Täiustatud pump, mis pumpab paremini kui harili
block.thermal-pump.description = Ülim pump, mis vajab töötamiseks palju energiat.
block.conduit.description = Vedelike transportimise vahend, mis liigutab vedelikke edasi. Kasutatakse koos pumpade ja teiste torudega.
block.pulse-conduit.description = Täiustatud toru, mis transpordib ja hoiustab vedelikke kiiremini kui algeline toru.
+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 = Jaotab vedelikke kuni kolmes väljuvas suunas võrdselt. Selle jaoturiga on võimalik teatud koguses ka vedelikku hoiustada. Kasulik olukordades, kus vedelikke on vaja korraga saata mitmesse kohta.
block.liquid-tank.description = Hoiustab suures koguses vedelikke. Kasuta puhvrite loomiseks juhul, kui ressursside nõudlus pole püsiv, või ettevaatusabinõuna tähtsate konstruktsioonide jahutussüsteemides.
block.liquid-junction.description = Toimib kui sild samal tasapinnal ristuvate torude vahel. Kasulik olukordades, kus kaks toru kannavad erinevaid vedelikke erinevatesse kohtadesse.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Täiustatud toru, mis kasutab energiat vedelik
block.power-node.description = Edastab energiat ühendatud sõlmpunktidesse. Sõlmed varustavad energiaga kõiki piisavalt lähedal asuvaid ja sõlmega ühenduses olevaid konstruktsioone.
block.power-node-large.description = Täiustatud energiasõlm, mis on suurema ulatuse ja suurema võimalike ühenduste arvuga.
block.surge-tower.description = Kaugeleulatuv energiasõlm, mis on väiksema võimalike ühenduste arvuga.
+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 = Salvestab energiat puhvrina positiivse energiabilansi ehk ülejäägi korral. Negatiivse energiabilansi ehk defitsiidi korral laetakse salvestatud energiat maha.
block.battery-large.description = Salvestab rohkem energiat kui tavaline aku.
block.combustion-generator.description = Toodab energiat süttivate materjalide, näiteks söe, põletamisel.
diff --git a/core/assets/bundles/bundle_eu.properties b/core/assets/bundles/bundle_eu.properties
index 66d71a0dce..967bcc497a 100644
--- a/core/assets/bundles/bundle_eu.properties
+++ b/core/assets/bundles/bundle_eu.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = Garapen konpilazio ezegonkorrak
link.trello.description = Aurreikusitako ezaugarrien Trello ofiziala
link.itch.io.description = PC deskargen itch.io orria
link.google-play.description = Google Play dendako sarrera
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Mindustry wiki ofiziala
+link.feathub.description = Suggest new features
linkfail = Huts egin du esteka irekitzean!\nURL-a zure arbelera kopiatu da.
screenshot = Pantaila-argazkia {0} helbidean gorde da
screenshot.invalid = Mapa handiegia, baliteke pantaila-argazkirako memoria nahiko ez egotea.
@@ -18,12 +20,22 @@ gameover = Partida amaitu da
gameover.pvp = [accent] {0}[] taldeak irabazi du!
highscore = [accent]Marka berria!
copied = Kopiatuta.
+
load.sound = Soinuak
load.map = Mapak
load.image = Irudiak
load.content = Edukia
load.system = Sistema
load.mod = Mod-ak
+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
+
schematic = Eskama
schematic.add = Gorde eskema...
schematics = Eskemak
@@ -40,6 +52,7 @@ schematic.saved = Eskema gordeta.
schematic.delete.confirm = Eskema hau behin betiko suntsituko da.
schematic.rename = Aldatu izena eskemari
schematic.info = {0}x{1}, {2} bloke
+
stat.wave = Garaitutako boladak:[accent] {0}
stat.enemiesDestroyed = Suntsitutako etsaiak:[accent] {0}
stat.built = Eraikitako eraikinak:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Suntsitutako eraikinak:[accent] {0}
stat.deconstructed = Deseraikitako eraikinak:[accent] {0}
stat.delivered = Egotzitako baliabideak:
stat.rank = Azken graduazioa: [accent]{0}
+
launcheditems = [accent]Egotzitako baliabideak
launchinfo = [unlaunched][[EGOTZI] zure muina urdinez adierazitako baliabideak eskuratzeko.
map.delete = Ziur al zaude "[accent]{0}[]" mapa ezabatu nahi duzula?
@@ -74,6 +88,7 @@ maps.browse = Arakatu mapak
continue = Jarraitu
maps.none = [lightgray]Ez da maparik aurkitu!
invalid = Baliogabea
+pickcolor = Pick Color
preparingconfig = Konfigurazioa prestatzen
preparingcontent = Edukia prestatzen
uploadingcontent = Edukia igotzen
@@ -81,6 +96,7 @@ uploadingpreviewfile = Aurrebista fitxategia igotzen
committingchanges = Aldaketak aplikatzen
done = Egina
feature.unsupported = Zure gailuak ez du ezaugarri hau onartzen.
+
mods.alphainfo = Kontuan izan mod-ak alfa egoeran daudela, eta [scarlet] akats ugari izan ditzakete[].\nEman arazoen berri Mindustry-ren GitHub or Discord zerbitzuetan.
mods.alpha = [accent](Alfa)
mods = Mod-ak
@@ -92,18 +108,25 @@ mod.enabled = [lightgray]Gaituta
mod.disabled = [scarlet]Desgaituta
mod.disable = Desgaitu
mod.delete.error = Ezin izan da mod-a ezabatu. Agian fitxategia erabilia izaten ari da.
+mod.requiresversion = [scarlet]Requires min game version: [accent]{0}
mod.missingdependencies = [scarlet]Falta diren menpekotasunak: {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]'{0}' mod-ak menpekotasunak ditu faltan:[accent] {1}\n[lightgray]Aurretik beste mod hauek deskargatu behar dira.\nMod hau automatikoki desgaituko da.
mod.enable = Gaitu
mod.requiresrestart = Jolasa itxi egingo da mod-aren aldaketak aplikatzeko.
mod.reloadrequired = [scarlet]Birkargatu behar da
mod.import = Importatu Mod-a
mod.import.github = Inportatu GitHub Mod-a
+mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod.
mod.remove.confirm = Mod hau ezabatuko da.
mod.author = [LIGHT_GRAY]Egilea:[] {0}
mod.missing = Gordetako partida honek eguneratu dituzun edo jada instalatuta ez dituzun mod-ak ditu. Gordetako partida izorratu daiteke. Ziur kargatu nahi duzula?\n[lightgray]Mod-ak:\n{0}
mod.preview.missing = Mod hau tailerrean argitaratu aurretik, aurrebista bat gehitu behar diozu.\nKokatu[accent] preview.png[] izeneko irudi bat mod-aren karpetan eta saiatu berriro.
mod.folder.missing = Karpeta formatuko mod-ak besterik ezin dira argitaratu tailerrean.\nEdozein mod karpetara bihurtzeko, deskopnrimitu fitxategia eta ezabatu zip zaharra, gero berrabiarazi jolasa edo birkargatu zure mod-ak.
+mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
+
about.button = Honi buruz
name = Izena:
noname = Hautatu[accent] jokalari-izena[] aurretik.
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = Aukeratu duzun izena baliogabea da.
server.kicked.idInUse = Bazaude zerbitzari honetan! Ezin zara bi kontu desberdinekin konektatu.
server.kicked.customClient = Zerbitzari honek ez ditu konpilazio pertsonalizatuak onartzen. Deskargatu bertsio ofizial bat.
server.kicked.gameover = Partida amaitu da!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Zure bertsioa:[accent] {0}[]\nZerbitzariaren bertsioa:[accent] {1}[]
host.info = [accent]Ostalaria[] botoiak zerbitzari bat abiatzen du [scarlet]6567[] atakan.\n[lightgray]wifi edo sare lokal[] berean dagoen edonor zure zerbitzaria ikusi ahal beharko luke.\n\nJendea edonondik IP-a erabilita konektatu ahal izatea nahi baduzu, [accent]ataka birbidaltzea[] ezinbestekoa da.\n\n[lightgray]Oharra: Inork zure sare lokalean partidara elkartzeko arazoak baditu, egiaztatu Mindustry-k baimena duela sare lokalera elkartzeko suebakiaren ezarpenetan. Kontuan izan sare publiko batzuk ez dutela zerbitzarien bilaketa baimentzen.
join.info = Hemen, konektatzeko [accent]zerbitzari baten IP-a[] sartu dezakezu konektatzeko, edo [accent]sare lokaleko[] zerbitzariak bilatu.\nLAN zein WAN sareetan onartzen dira hainbat jokalarien partidak .\n\n[lightgray]Oharra: Ez dago zerbitzarien zerrenda global automatikorik, beste inorekin IP bidez konektatu nahi baduzu, ostalariari bere IP helbidea eskatu beharko diozu.
@@ -271,6 +295,7 @@ publishing = [accent]Argitaratzen...
publish.confirm = Ziur hau argitaratu nahi duzula?\n\n[lightgray]Egiaztatu tailerreko EULA lizentziarekin ados zaudela aurretik, bestela zure elementuak ez dira agertuko!
publish.error = Errorea elementua argitaratzean: {0}
steam.error = Huts egin du Steam zerbitzuak hasieratzean.\nErrorea: {0}
+
editor.brush = Brotxa
editor.openin = Ireki editorean
editor.oregen = Mea sorrera
@@ -347,6 +372,7 @@ editor.overwrite = [accent]Abisua!\nHonek badagoen mapa bat gainidatziko du.
editor.overwrite.confirm = [scarlet]Abisua![] Badago izen bereko beste mapa bat. Ziur gainidatzi nahi duzula?
editor.exists = Badago izen bereko beste mapa bat.
editor.selectmap = Hautatu mapa kargatzeko:
+
toolmode.replace = Ordeztu
toolmode.replace.description = Marraztu bloke zurrunak bakarrik.
toolmode.replaceall = Ordeztu denak
@@ -361,6 +387,7 @@ toolmode.fillteams = Bete taldeak
toolmode.fillteams.description = Bete taldeak blokeen ordez.
toolmode.drawteams = Marraztu taldeak
toolmode.drawteams.description = Marraztu taldeak blokeen ordez.
+
filters.empty = [lightgray]Iragazkirik ez! Gehitu bat beheko botoiarekin.
filter.distort = Distortsioa
filter.noise = Orbana
@@ -392,6 +419,7 @@ filter.option.floor2 = Bigarren zorua
filter.option.threshold2 = Bigarren atalasea
filter.option.radius = Erradioa
filter.option.percentile = Pertzentila
+
width = Zabalera:
height = Altuera:
menu = Menua
@@ -407,6 +435,7 @@ tutorial = Tutoriala
tutorial.retake = Berriro hasi tutoriala
editor = Editorea
mapeditor = Mapen editorea
+
abandon = Abandonatu
abandon.text = Eremu hau eta bere baliabide guztiak etsaiaren esku geratuko dira.
locked = Blokeatuta
@@ -437,6 +466,7 @@ zone.objective.survival = Biziraupena
zone.objective.attack = Suntsitu etsaiaren muina
add = Gehitu
boss.health = Nagusiaren osasuna
+
connectfail = [crimson]Konexio errorea:\n\n[accent]{0}
error.unreachable = Zerbitzaria eskuraezin.\nHelbidea ondo idatzita dago?
error.invalidaddress = Helbide baliogabea.
@@ -447,6 +477,7 @@ error.mapnotfound = Ez da mapa-fitxategia aurkitu!
error.io = Sareko irteera/sarrera errorea.
error.any = Sareko errore ezezaguna.
error.bloom = Ezin izan da distira hasieratu.\nAgian zure gailuak ez du onartzen.
+
zone.groundZero.name = Zero eremua
zone.desertWastes.name = Basamortuak
zone.craters.name = Kraterrak
@@ -461,6 +492,7 @@ zone.saltFlats.name = Gatz zelaiak
zone.impact0078.name = 0078 talka
zone.crags.name = Harkaitzak
zone.fungalPass.name = Onddo mendatea
+
zone.groundZero.description = Berriro hasteko kokaleku egokiena.\nBaliabide gutxi daude baina etsaien mehatxua ere txikia da.\nEskuratu ahal beste berun eta kobre.\nSegi aurrera.
zone.frozenForest.description = Hemen ere, mendietatik hurbil, esporak sakabanatu dira. Tenperatura hotzek ez dituzte betirako geldiaraziko.\n\nHasi energia eskuratzeko abentura. Eraiki errekuntza sorgailuak. Ikasi konpontzaileak erabiltzen.
zone.desertWastes.description = Basamortu hauen zabalak dira, ezustekoak, eta abandonaturiko sektore estrukturekin marratuak.\nBadago ikatza eskualde honetan. Erre energiarako, edo grafitoa sintetizatzeko.\n\n[lightgray]Ezin da lurreratze tokia bermatu.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = Torioa ekoiztu eta prozesatzeko instalazio ohi
zone.fungalPass.description = Mendi garaiak eta esporez jositako behe lautaden arteko transizio eremua. Etsaien araketa-base txiki bat dago hemen.\nSuntsitu ezazu.\nErabili Daga eta Ibilkari unitateak. Akabatu bi muinak.
zone.impact0078.description =
zone.crags.description =
+
settings.language = Hizkuntza
settings.data = Jolasaren datuak
settings.reset = Berrezarri lehenespenak
settings.rebind = Aldatu
+settings.resetKey = Reset
settings.controls = Kontrolak
settings.game = Jolasa
settings.sound = Soinua
@@ -529,6 +563,7 @@ blocks.inaccuracy = Zehazgabetasuna
blocks.shots = Tiroak
blocks.reload = Tiroak/segundoko
blocks.ammo = Munizioa
+
bar.drilltierreq = Zulagailu hobea behar da
bar.drillspeed = Ustiatze-abiadura: {0}/s
bar.pumpspeed = Ponpatze abiadura: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Beroa
bar.power = Energia
bar.progress = Eraikitze egoera
bar.spawned = Unitateak: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] kalte
bullet.splashdamage = [stat]{0}[lightgray] ingurune-kaltea ~[stat] {1}[lightgray] lauza
bullet.incendiary = [stat]su-eragilea
@@ -555,6 +593,7 @@ bullet.freezing = [stat]hozkirri
bullet.tarred = [stat]mundrunduta
bullet.multiplier = [stat]{0}[lightgray]x munizio-biderkatzailea
bullet.reload = [stat]{0}[lightgray]x tiro tasa
+
unit.blocks = bloke
unit.powersecond = energia unitate/segundoko
unit.liquidsecond = likido unitate/segundoko
@@ -567,6 +606,8 @@ unit.persecond = /seg
unit.timesspeed = x abiadura
unit.percent = %
unit.items = elementu
+unit.thousands = k
+unit.millions = mil
category.general = Orokorra
category.power = Energia
category.liquids = Likidoak
@@ -579,6 +620,7 @@ setting.shadows.name = Itzalak
setting.blockreplace.name = Bloke proposamen automatikoak
setting.linear.name = Iragazte lineala
setting.hints.name = Pistak
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Animatutako ura
setting.animatedshields.name = Animatutako ezkutuak
setting.antialias.name = Antialias[lightgray] (berrabiarazi behar da)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Pantailaren astindua
setting.effects.name = Bistaratze-efektuak
setting.destroyedblocks.name = Erakutsi suntsitutako blokeak
setting.conveyorpathfinding.name = Garraio-zintak kokatzeko bide-bilaketa
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Kontrolagailuaren sentikortasuna
setting.saveinterval.name = Gordetzeko tartea
setting.seconds = {0} segundo
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Pantaila osoa
setting.borderlesswindow.name = Ertzik gabeko leihoa[lightgray] (berrabiaraztea behar lezake)
setting.fps.name = Erakutsi FPS
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixelatu[lightgray] (animazioak desgaitzen ditu)
setting.minimap.name = Erakutsi mapatxoa
@@ -635,16 +681,36 @@ category.multiplayer.name = Hainbat jokalari
command.attack = Eraso
command.rally = Batu
command.retreat = Erretreta
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Garrbitu eraikina
keybind.press = Sakatu tekla bat...
keybind.press.axis = Sakatu ardatza edo tekla...
keybind.screenshot.name = Maparen pantaila-argazkia
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Mugitu x
keybind.move_y.name = Mugitu y
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Arrapalada
keybind.schematic_select.name = Hautatu eskualdea
keybind.schematic_menu.name = Eskema menua
keybind.schematic_flip_x.name = Itzulbiratu X
keybind.schematic_flip_y.name = Itzulbiratu 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 = Txandakatu pantaila osoa
keybind.select.name = Hautatu/Tirokatu
keybind.diagonal_placement.name = Kokatze diagonala
@@ -657,7 +723,6 @@ keybind.menu.name = Menua
keybind.pause.name = Pausatu
keybind.pause_building.name = Pausatu/berrekin eraikiketa
keybind.minimap.name = Mapatxoa
-keybind.dash.name = Arrapalada
keybind.chat.name = Txata
keybind.player_list.name = Jokalarien zerrenda
keybind.console.name = Kontsola
@@ -680,7 +745,9 @@ mode.pvp.description = Borrokatu beste jokalari batzuk lokalean.\n[gray]Gutxiene
mode.attack.name = Erasoa
mode.attack.description = Suntsitu etsaiaren basea. Boladarik ez.\n[gray]Kono gorria behar da mapan jolasteko.
mode.custom = Arau pertsonalizatuak
+
rules.infiniteresources = Baliabide amaigabeak
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Boladen denboragailua
rules.waves = Boladak
rules.attack = Eraso modua
@@ -688,6 +755,7 @@ rules.enemyCheat = IA-k (talde gorriak) baliabide amaigabeak ditu
rules.unitdrops = Unitate-sorrerak
rules.unitbuildspeedmultiplier = Unitateen sorrerarako abiadura-biderkatzailea
rules.unithealthmultiplier = Unitateen osasun-biderkatzailea
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Jokalariaren osasun-biderkatzailea
rules.playerdamagemultiplier = Jokalariaren kalte-biderkatzailea
rules.unitdamagemultiplier = Unitateen kalte-biderkatzailea
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Baliabideak eta eraikuntza
rules.title.player = Jokalariak
rules.title.enemy = Etsaiak
rules.title.unit = Unitateak
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Solidoak
content.liquid.name = Likidoak
content.unit.name = Unitateak
@@ -752,6 +824,7 @@ mech.trident-ship.name = Hiruhortz
mech.trident-ship.weapon = Bonba jaregilea
mech.glaive-ship.name = Guja
mech.glaive-ship.weapon = Sugar errepika-fusila
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [lightgray]Lehergarritasuna: {0}%
item.flammability = [lightgray]Sukoitasuna: {0}%
item.radioactivity = [lightgray]Erradioaktibitatea: {0}%
@@ -767,6 +840,7 @@ mech.buildspeed = [lightgray]Eraikitze abiadura: {0}%
liquid.heatcapacity = [lightgray]Bero edukiera: {0}
liquid.viscosity = [lightgray]Likatasuna: {0}
liquid.temperature = [lightgray]Tenperatura: {0}
+
block.sand-boulder.name = Hondar harkaitza
block.grass.name = Belarra
block.salt.name = Gatza
@@ -865,6 +939,8 @@ block.distributor.name = Banatzailea
block.sorter.name = Antolatzailea
block.inverted-sorter.name = Alderantzizko antolatzailea
block.message.name = Mezua
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = Gainezkatze atea
block.silicon-smelter.name = Silizio galdategia
block.phase-weaver.name = Fase ehulea
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Ikatz zentrifugagailua
block.power-node.name = Energia-nodoa
block.power-node-large.name = Energia-nodo handia
block.surge-tower.name = Tirainezko dorrea
+block.diode.name = Battery Diode
block.battery.name = Bateria
block.battery-large.name = Bateria handia
block.combustion-generator.name = Errekuntza sorgailua
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Ponpa mekanikoa
block.item-source.name = Elementu-iturria
block.item-void.name = Elementu-zuloa
block.liquid-source.name = Likido-iturria
+block.liquid-void.name = Liquid Void
block.power-void.name = Energia-zuloa
block.power-source.name = Energia amaigabea
block.unloader.name = Deskargagailua
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Gotorleku meka faktoria
block.revenant-factory.name = Mamu ehiza-hegazkin faktoria
block.repair-point.name = Konponketa puntua
block.pulse-conduit.name = Pultsu hodia
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Fasezko hodia
block.liquid-router.name = Likidoen bideratzailea
block.liquid-tank.name = Likidoentzako tankea
@@ -1001,6 +1080,7 @@ tutorial.deposit = Baliabideak blokeren batean sartzeko, arrastatu zure ontzitik
tutorial.waves = [lightgray]Etsaia[] dator.\n\nBabestu muina 2 boladetan zehar. [accent]Egin klik[] tirokatzeko.\nEraiki dorre eta zulagailu gehiago. Ustiatu kobre gehiago.
tutorial.waves.mobile = [lightgray]Etsaia[] dator.\n\nBabestu muina 2 boladatan. Zure ontziak automatikoki tirokatuko ditu etsaiak.\nEraiki dorre eta zulagailu gehiago. Ustiatu kobre gehiago.
tutorial.launch = Bolada zehatz batera heltzean, [accent]muina egotzi[] dezakezu, zure defentsak atzean utziz [accent]eta muineko baliabide guztiak eskuratuz.[]\nBaliabide hauek teknologia berriak ikertzeko erabili daitezke.\n\n[accent]Sakatu egotzi botoia.
+
item.copper.description = Egiturazko material oinarrizkoena. Asko erabilia bloke mota guztietarako.
item.lead.description = Hastapeneko oinarrizko materiala. Bloke elektronikoak eta likidoen garraiorako blokeetan asko erabilia.
item.metaglass.description = Beirazko konposatu izugarri sendoa. Asko erabilia likidoen garraio eta biltegiratzerako.
@@ -1062,6 +1142,7 @@ block.power-source.description = Energia emari etengabea. Jolastokian besterik e
block.item-source.description = Elementuen iturri amaigabea. Jolastokian besterik ez.
block.item-void.description = Elementu guztiak suntsitzen ditu. Jolastokian besterik ez.
block.liquid-source.description = Likidoen emari amaigabea. Jolastokian besterik ez.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Babeserako bloke merke bat.\nMuina eta dorreak lehen boladetan babesteko erabilgarria.
block.copper-wall-large.description = Babeserako bloke merke bat.\nMuina eta dorreak lehen boladetan babesteko erabilgarria.\nHainbat lauza hartzen ditu.
block.titanium-wall.description = Zertxobait gogorra den babeserako bloke bat.\nEtsaien aurreko babes ertaina eskaintzen du.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = Ponpa aurreratu bat. Likido gehiago barreiatzen
block.thermal-pump.description = Ponpa gorena.
block.conduit.description = Likidoen garraiorako oinarrizko blokea. Likidoak daramatza. Ponpa eta bestelako hodiekin batera erabilia.
block.pulse-conduit.description = Likidoen garraiorako bloke aurreratua. Hodi arruntek baino azkarrago garraiatzen ditu likidoak eta edukiera handiagoa du.
+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 = Likidoan alde batetik jaso eta gehienez beste 3 norabideetara ateratzen ditu kopuru berdinean. Likido apur bat ere biltegiratu dezake. Likidoak iturri batetik hainbat xedeetara eramateko erabilgarria.
block.liquid-tank.description = Likidoen kopuru handi bat biltegiratzen du. Erabili tarteko biltegiratzerako materialen eskaria etengabekoa ez denean, edo ezinbesteko blokeentzako hozgarriaren gordailu gisa.
block.liquid-junction.description = Gurutzatzen diren bi hodi banatzeko zubi gisa aritzen da. Likido desberdinak daramatzaten bi hodi gurutzatzen direnean erabilgarria.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Likidoen garraiorako bloke aurreratua. Energia
block.power-node.description = Konektatu nodoei energia igortzen die. Nodoa inguruko edozein blokeetara konektatuko da energia jaso edo igortzeko.
block.power-node-large.description = Energia nodo aurreratua, irismen handiagoarekin eta konexio gehiagorekin.
block.surge-tower.description = Muturreko irismen luzea duen energia-nodoa konexio erabilgarri gutxiagorekin.
+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 = Energia biltegiratu dezake gehiegi dagoenean tartekari gisa erabiltzeko. Behar denean energia igortzen du.
block.battery-large.description = Bateria arrunt batek baino energia gehiago biltegiratu dezake.
block.combustion-generator.description = Energia sortzen du gai erregarriak errez, esaterako ikatza.
diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties
index be59e014aa..a4c189dca4 100644
--- a/core/assets/bundles/bundle_fi.properties
+++ b/core/assets/bundles/bundle_fi.properties
@@ -3,19 +3,55 @@ 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.github.description = Pelin lähdekoodi
link.changelog.description = Lista päivityksien muutoksista
link.dev-builds.description = Epävakaat kehitysversiot
link.trello.description = Virallinen Trello-taulu suunnitelluille ominaisuuksille.
link.itch.io.description = itch.io -sivu tietokoneversion latausten kanssa
link.google-play.description = Google Play Kauppa -sivu
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Virallinen Mindustry wiki
+link.feathub.description = Suggest new features
linkfail = Linkin avaaminen epäonnistui!\nOsoite on kopioitu leikepöydällesi.
screenshot = Kuvankaappaus tallennettu sijaintiin {0}
screenshot.invalid = Kartta liian laaja, kuvankaappaukselle ei mahdollisesti ole tarpeeksi tilaa.
gameover = Peli ohi
gameover.pvp = [accent] {0}[] joukkue voittaa!
highscore = [accent]Uusi ennätys!
+copied = Copied.
+
+load.sound = Sounds
+load.map = Maps
+load.image = Images
+load.content = Content
+load.system = System
+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
+
+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
stat.wave = Aaltoja voitettu:[accent] {0}
stat.enemiesDestroyed = Vihollisia tuhottu:[accent] {0}
@@ -25,10 +61,8 @@ stat.deconstructed = Rakennuksia purettu:[accent] {0}
stat.delivered = Resursseja laukaistu:
stat.rank = Lopullinen arvo: [accent]{0}
-placeline = Olet valinnut palikan.\nVoit[accent] asettaa linjassa[][accent] pitämällä sormeasi pohjassa muutaman sekunnin ajan[] ja vetämällä johonkin suuntaan.\n\n[scarlet]TEE SE.
-removearea = Olet valinut poistotilan.\nVoit[accent] poistaa palikoita suorakulmiossa[][accent] pitämällä sormeasi pohjassa muutaman sekunnin ajan[] ja vetämällä.\n\n[scarlet]TEE SE.
-
launcheditems = [accent]Laukaistut tavarat
+launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Oletko varma että haluat poistaa kartan "[accent]{0}[]"?
level.highscore = Ennätys: [accent]{0}
level.select = Tason valinta
@@ -40,17 +74,59 @@ database = Ytimen tietokanta
savegame = Tallenna peli
loadgame = Lataa peli
joingame = Liity peliin
-addplayers = Lisää/Poista pelaajia
customgame = Mukautettu peli
newgame = Uusi peli
none =
minimap = Pienoiskartta
+position = Position
close = Sulje
website = Verkkosivu
quit = Poistu
+save.quit = Save & Quit
maps = Kartat
+maps.browse = Browse Maps
continue = Jatka
maps.none = [lightgray]Karttoja ei löytynyt!
+invalid = Invalid
+pickcolor = Pick Color
+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.
+
+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.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.
+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.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.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.
+
about.button = Tietoa
name = Nimi:
noname = Valitse ensin[accent] pelaajanimi[].
@@ -65,25 +141,32 @@ players = {0} pelaajaa paikalla
players.single = {0} pelaaja paikalla
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.clientOutdated = Pelisi on vanhentunut! Päivitä se!
server.kicked.serverOutdated = Outdated server! Ask the host to update!
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.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.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.mobile = Host\nGame
host = Host
hosting = [accent]Avataan palvelinta...
hosts.refresh = Päivitä
hosts.discovering = Discovering LAN games
+hosts.discovering.any = Discovering games
server.refreshing = Päivitetään palvelimen tietoja
hosts.none = [lightgray]No local games found!
host.invalid = [scarlet]Can't connect to host.
@@ -107,20 +190,24 @@ 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?
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.timeout = Timed out.
disconnect.data = Failed to load world data!
+cantconnect = Unable to join game ([accent]{0}[]).
connecting = [accent]Connecting...
connecting.data = [accent]Loading world data...
server.port = Portti:
server.addressinuse = Address already in use!
server.invalidport = Invalid port number!
server.error = [crimson]Error hosting server: [accent]{0}
-save.old = This save is for an older version of the game, and can no longer be used.\n\n[lightgray]Save backwards compatibility will be implemented in the full 4.0 release.
save.new = New Save
save.overwrite = Are you sure you want to overwrite\nthis save slot?
overwrite = Overwrite
@@ -139,6 +226,7 @@ save.rename = Nimeä uudelleen
save.rename.text = Uusi nimi:
selectslot = Valitse tallennus.
slot = [accent]Paikka {0}
+editmessage = Edit Message
save.corrupted = [accent]Tallennustiedosto korruptoitunut tai viallinen!\nJos olet päivittänyt juuri pelisi, tämä on todennäköisesti muutos tallennusmuodossa [scarlet]eikä[] virhe.
empty =
on = Päällä
@@ -146,12 +234,14 @@ off = Pois
save.autosave = Automaattitallennus: {0}
save.map = Kartta: {0}
save.wave = Aalto {0}
-save.difficulty = Vaikeustaso: {0}
+save.mode = Gamemode: {0}
save.date = Viimeksi tallennettu: {0}
save.playtime = Peliaika: {0}
warning = Varoitus.
confirm = Vahvista
delete = Poista
+view.workshop = View In Workshop
+workshop.listing = Edit Workshop Listing
ok = OK
open = Avaa
customize = Muokkaa sääntöjä
@@ -159,12 +249,22 @@ cancel = Peruuta
openlink = Avaa linkki
copylink = Kopioi linkki
back = Takaisin
+data.export = Export Data
+data.import = Import Data
+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.
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?
quit.confirm = Are you sure you want to quit?
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
loading = [accent]Ladataan...
+reloading = [accent]Reloading Mods...
saving = [accent]Tallennetaan...
+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.waveInProgress = [lightgray]Wave in progress
@@ -183,6 +283,19 @@ map.nospawn = Tässä kartassa ei ole ytimiä joihin syntyä! Lisää[accent] or
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file.
+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}
+
editor.brush = Brush
editor.openin = Avaa editorissa
editor.oregen = Ore Generation
@@ -190,11 +303,14 @@ editor.oregen.info = Ore Generation:
editor.mapinfo = Kartan tiedot
editor.author = Author:
editor.description = Kuvaus:
+editor.nodescription = A map must have a description of at least 4 characters before being published.
editor.waves = Aallot:
editor.rules = Säännöt:
editor.generation = Generation:
editor.ingame = Edit In-Game
+editor.publish.workshop = Publish On Workshop
editor.newmap = Uusi kartta
+workshop = Workshop
waves.title = Aallot
waves.remove = Remove
waves.never =
@@ -211,6 +327,7 @@ 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...
edit = Muokkaa...
editor.name = Nimi:
editor.spawn = Spawn Unit
@@ -220,6 +337,7 @@ editor.errorload = Virhe ladattaessa tiedostoa:\n[accent]{0}
editor.errorsave = Virhe tallennettaessa tiedostoa:\n[accent]{0}
editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor.
editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported.
+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ä
@@ -252,6 +370,7 @@ 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:
toolmode.replace = Replace
@@ -309,7 +428,6 @@ campaign = Campaign
load = Lataa
save = Tallenna
fps = FPS: {0}
-tps = TPS: {0}
ping = Ping: {0}ms
language.restart = Please restart your game for the language settings to take effect.
settings = Asetukset
@@ -317,13 +435,14 @@ tutorial = Perehdytys
tutorial.retake = Re-Take Tutorial
editor = Editor
mapeditor = Map Editor
-donate = Lahjoita
abandon = Hylkää
abandon.text = This zone and all its resources will be lost to the enemy.
locked = Lukittu
complete = [lightgray]Reach:
-zone.requirement = Wave {0} in zone {1}
+requirement.wave = Reach Wave {0} in {1}
+requirement.core = Destroy Enemy Core in {0}
+requirement.unlock = Unlock {0}
resume = Resume Zone:\n[lightgray]{0}
bestwave = [lightgray]Best Wave: {0}
launch = < LAUNCH >
@@ -334,10 +453,13 @@ launch.confirm = This will launch all resources in your core.\nYou will not be a
launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
uncover = Uncover
configure = Configure Loadout
+bannedblocks = Banned Blocks
+addall = Add All
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.complete = Wave {0} reached:\nLoadout config unlocked.
+zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
zone.resources = [lightgray]Resources Detected:
zone.objective = [lightgray]Objective: [accent]{0}
zone.objective.survival = Survive
@@ -387,8 +509,10 @@ 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
@@ -396,15 +520,14 @@ 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.
-settings.clearunlocks = Clear Unlocks
-settings.clearall = Clear All
paused = [accent]< Paused >
+clear = Clear
+banned = [scarlet]Banned
yes = Yes
no = No
info.title = Info
error.title = [crimson]An error has occured
error.crashtitle = An error has occured
-attackpvponly = [scarlet]Only available in Attack/PvP modes
blocks.input = Input
blocks.output = Output
blocks.booster = Booster
@@ -420,6 +543,7 @@ 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
@@ -434,6 +558,7 @@ 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
@@ -441,16 +566,21 @@ blocks.ammo = Ammo
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
bullet.damage = [stat]{0}[lightgray] damage
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
@@ -476,6 +606,8 @@ unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = items
+unit.thousands = k
+unit.millions = mil
category.general = General
category.power = Power
category.liquids = Liquids
@@ -485,13 +617,17 @@ 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
setting.fpscap.text = {0} FPS
@@ -505,24 +641,35 @@ 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.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.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
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.vsync.name = VSync
-setting.lasers.name = Show Power Lasers
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.crashreport.name = Send Anonymous Crash Reports
+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 = Display In-Game Chat
+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
setting.bloom.name = Bloom
@@ -532,15 +679,39 @@ category.general.name = General
category.view.name = View
category.multiplayer.name = Multiplayer
command.attack = Attack
+command.rally = Rally
command.retreat = Retreat
-command.patrol = Patrol
-keybind.gridMode.name = Block Select
-keybind.gridModeShift.name = Category Select
+placement.blockselectkeys = \n[lightgray]Key: [{0},
+keybind.clear_building.name = Clear Building
keybind.press = Press a key...
keybind.press.axis = Press an axis or key...
keybind.screenshot.name = Map Screenshot
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Move x
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_flip_x.name = Flip Schematic X
+keybind.schematic_flip_y.name = Flip 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.fullscreen.name = Toggle Fullscreen
keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block
@@ -550,12 +721,13 @@ keybind.shoot.name = Shoot
keybind.zoom.name = Zoom
keybind.menu.name = Menu
keybind.pause.name = Pause
+keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Minimap
-keybind.dash.name = Dash
keybind.chat.name = Chat
keybind.player_list.name = Player list
keybind.console.name = Console
keybind.rotate.name = Rotate
+keybind.rotateplaced.name = Rotate Existing (Hold)
keybind.toggle_menus.name = Toggle menus
keybind.chat_history_prev.name = Chat history prev
keybind.chat_history_next.name = Chat history next
@@ -567,6 +739,7 @@ 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.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
@@ -574,6 +747,7 @@ mode.attack.description = Destroy the enemy's base. No waves.\n[gray]Requires a
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.attack = Attack Mode
@@ -581,6 +755,7 @@ rules.enemyCheat = Infinite AI (Red Team) Resources
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Player Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.unitdamagemultiplier = Unit Damage Multiplier
@@ -599,6 +774,9 @@ rules.title.resourcesbuilding = Resources & Building
rules.title.player = Players
rules.title.enemy = Enemies
rules.title.unit = Units
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
content.item.name = Items
content.liquid.name = Liquids
@@ -646,6 +824,7 @@ 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.flammability = [lightgray]Flammability: {0}%
item.radioactivity = [lightgray]Radioactivity: {0}%
@@ -737,6 +916,8 @@ block.copper-wall.name = Copper Wall
block.copper-wall-large.name = Large Copper Wall
block.titanium-wall.name = Titanium Wall
block.titanium-wall-large.name = Large Titanium Wall
+block.plastanium-wall.name = Plastanium Wall
+block.plastanium-wall-large.name = Large Plastanium Wall
block.phase-wall.name = Phase Wall
block.phase-wall-large.name = Large Phase Wall
block.thorium-wall.name = Thorium Wall
@@ -750,10 +931,16 @@ block.hail.name = Hail
block.lancer.name = Lancer
block.conveyor.name = Conveyor
block.titanium-conveyor.name = Titanium Conveyor
+block.armored-conveyor.name = Armored Conveyor
+block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyor belts.
block.junction.name = Junction
block.router.name = Router
block.distributor.name = Distributor
block.sorter.name = Sorter
+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.overflow-gate.name = Overflow Gate
block.silicon-smelter.name = Silicon Smelter
block.phase-weaver.name = Phase Weaver
@@ -767,6 +954,7 @@ block.coal-centrifuge.name = Coal Centrifuge
block.power-node.name = Power Node
block.power-node-large.name = Large Power Node
block.surge-tower.name = Surge Tower
+block.diode.name = Battery Diode
block.battery.name = Battery
block.battery-large.name = Large Battery
block.combustion-generator.name = Combustion Generator
@@ -790,6 +978,7 @@ block.mechanical-pump.name = Mechanical Pump
block.item-source.name = Item Source
block.item-void.name = Item Void
block.liquid-source.name = Liquid Source
+block.liquid-void.name = Liquid Void
block.power-void.name = Power Void
block.power-source.name = Power Infinite
block.unloader.name = Unloader
@@ -806,6 +995,7 @@ block.blast-mixer.name = Blast Mixer
block.solar-panel.name = Solar Panel
block.solar-panel-large.name = Large Solar Panel
block.oil-extractor.name = Oil Extractor
+block.command-center.name = Command Center
block.draug-factory.name = Draug Miner Drone Factory
block.spirit-factory.name = Spirit Repair Drone Factory
block.phantom-factory.name = Phantom Builder Drone Factory
@@ -818,6 +1008,7 @@ block.fortress-factory.name = Fortress Mech Factory
block.revenant-factory.name = Revenant Fighter Factory
block.repair-point.name = Repair Point
block.pulse-conduit.name = Pulse Conduit
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Phase Conduit
block.liquid-router.name = Liquid Router
block.liquid-tank.name = Liquid Tank
@@ -870,6 +1061,7 @@ unit.lich.name = Lich
unit.reaper.name = Reaper
tutorial.next = [lightgray]
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
+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.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\n[accent]Right-click[] to stop building.
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
@@ -889,7 +1081,6 @@ tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 wav
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.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
-
item.copper.description = The most basic structural material. Used extensively in all types of blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
@@ -929,6 +1120,7 @@ unit.eruptor.description = A heavy mech designed to take down structures. Fires
unit.wraith.description = A fast, hit-and-run interceptor unit. Targets power generators.
unit.ghoul.description = A heavy carpet bomber. Rips through enemy structures, targeting critical infrastructure.
unit.revenant.description = A heavy, hovering missile array.
+block.message.description = Stores a message. Used for communication between allies.
block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite.
block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently.
block.silicon-smelter.description = Reduces sand with pure coal. Produces silicon.
@@ -950,10 +1142,13 @@ block.power-source.description = Infinitely outputs power. Sandbox only.
block.item-source.description = Infinitely outputs items. Sandbox only.
block.item-void.description = Destroys any items. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles.
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles.
+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.thorium-wall.description = A strong defensive block.\nDecent protection from enemies.
block.thorium-wall-large.description = A strong defensive block.\nDecent protection from enemies.\nSpans multiple tiles.
block.phase-wall.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact.
@@ -973,6 +1168,7 @@ block.junction.description = Acts as a bridge for two crossing conveyor belts. U
block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building.
block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles.
block.sorter.description = Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
+block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead.
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 = A combination splitter and router. Only outputs to the left and right if the front path is blocked.
@@ -982,6 +1178,7 @@ block.rotary-pump.description = An advanced pump. Pumps more liquid, but require
block.thermal-pump.description = The ultimate pump.
block.conduit.description = Basic liquid transport block. Moves liquids forward. Used in conjunction with pumps and other conduits.
block.pulse-conduit.description = An advanced liquid transport block. Transports liquids faster and stores more than standard conduits.
+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 = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets.
block.liquid-tank.description = Stores a large amount of liquids. Use for creating buffers in situations with non-constant demand of materials or as a safeguard for cooling vital blocks.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations.
@@ -990,6 +1187,7 @@ block.phase-conduit.description = Advanced liquid transport block. Uses power to
block.power-node.description = Transmits power to connected nodes. The node will receive power from or supply power to any adjacent blocks.
block.power-node-large.description = An advanced power node with greater range and more connections.
block.surge-tower.description = An extremely long-range power node with fewer available connections.
+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 = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit.
block.battery-large.description = Stores much more power than a regular battery.
block.combustion-generator.description = Generates power by burning flammable materials, such as coal.
@@ -1030,6 +1228,7 @@ block.ripple.description = An extremely powerful artillery turret. Shoots cluste
block.cyclone.description = A large anti-air and anti-ground turret. Fires explosive clumps of flak at nearby units.
block.spectre.description = A massive dual-barreled cannon. Shoots large armor-piercing bullets at air and ground targets.
block.meltdown.description = A massive laser cannon. Charges and fires a persistent laser beam at nearby enemies. Requires coolant to operate.
+block.command-center.description = Issues movement commands to allied units across the map.\nCauses units to rally, 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 = Produces Draug mining drones.
block.spirit-factory.description = Produces Spirit structural repair drones.
block.phantom-factory.description = Produces advanced construction drones.
@@ -1047,4 +1246,4 @@ block.tau-mech-pad.description = Provides transformation into an advanced suppor
block.omega-mech-pad.description = Provides transformation into a heavily-armored missile mech.\nUse by tapping while standing on it.
block.javelin-ship-pad.description = Provides transformation into a quick, lightly-armored interceptor.\nUse by tapping while standing on it.
block.trident-ship-pad.description = Provides transformation into a heavy support bomber.\nUse by tapping while standing on it.
-block.glaive-ship-pad.description = Provides transformation into a large, well-armored gunship.\nUse by tapping while standing on it.
\ No newline at end of file
+block.glaive-ship-pad.description = Provides transformation into a large, well-armored gunship.\nUse by tapping while standing on it.
diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties
index c19a342364..7ed9a40cf2 100644
--- a/core/assets/bundles/bundle_fr.properties
+++ b/core/assets/bundles/bundle_fr.properties
@@ -12,6 +12,7 @@ link.itch.io.description = Page itch.io avec lien de téléchargement pour PC
link.google-play.description = Google Play Store
link.f-droid.description = Catalogue F-Droid
link.wiki.description = Le wiki officiel de Mindustry
+link.feathub.description = Suggérer de nouvelles fonctionnalités
linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copiée dans votre presse papier.
screenshot = Capture d'écran sauvegardée à {0}
screenshot.invalid = La carte est trop large, il n'y a potentiellement pas assez de mémoire pour la capture d'écran.
@@ -26,6 +27,14 @@ load.image = Images
load.content = Contenu
load.system = Système
load.mod = Mods
+load.scripts = Scripts
+
+be.update = Une nouvelle version en developement est disponible:
+be.update.confirm = Téléchargez-la et redémarrez maintenant ?
+be.updating = Mise à jour...
+be.ignore = Ignorer
+be.noupdates = Aucune mise à jour trouvée.
+be.check = Vérifiez les mises à jour
schematic = Schéma
schematic.add = Sauvegarder le schéma...
@@ -94,24 +103,29 @@ mods = Mods
mods.none = [LIGHT_GRAY]Aucun mod trouvé!
mods.guide = Guide de Modding
mods.report = Signaler un Bug
-mods.openfolder = Open Mod Folder
+mods.openfolder = Ouvrir le dossier des mods
mod.enabled = [lightgray]Activé
mod.disabled = [scarlet]Désactivé
mod.disable = Désactiver
-mod.delete.error = Unable to delete mod. File may be in use.
+mod.delete.error = Impossible de supprimer le mod. Le fichier est probablement en cours d'utilisation.
mod.requiresversion = [scarlet]Version du jeu requise : [accent]{0}
mod.missingdependencies = [scarlet]Dépendances manquantes: {0}
+mod.erroredcontent = [scarlet]Erreurs de contenu
+mod.errors = Des erreurs se sont produites lors du chargement du contenu.
+mod.noerrorplay = [scarlet]Vous avez des mods avec erreurs.[] Désactivez les mods concernés ou corrigez les erreurs avant de jouer.
mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes:[accent] {1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé.
mod.enable = Activer
mod.requiresrestart = Le jeu va maintenant s'arrêter pour appliquer les modifications du mod.
mod.reloadrequired = [scarlet]Rechargement requis
mod.import = Importer un mod
mod.import.github = Importer un mod GitHub
+mod.item.remove = Cet objet fait partie du mod[accent] '{0}'[]. Pour le supprimer, désinstallez le mod en question.
mod.remove.confirm = Ce mod sera supprimé.
mod.author = [LIGHT_GRAY]Auteur:[] {0}
mod.missing = Cette sauvegarde contient des mods que vous avez récemment mis à jour ou que vous avez désinstallés. Votre sauvegarde risque d'être corrompue. Êtes-vous sûr de vouloir l'importer?\n[lightgray]Mods:\n{0}
mod.preview.missing = Avant de publier ce mod dans le workshop, vous devez ajouter une image servant d'aperçu.\nPlacez une image nommée[accent] preview.png[] dans le dossier du mod et réessayez.
mod.folder.missing = Seuls les mods sous forme de dossiers peuvent être publiés sur l'atelier.\nPour convertir n'importe quel mod en un dossier, dézippez-le tout simplement dans un dossier et supprimez l'ancien zip, puis redémarrez votre jeu ou rechargez vos mods.
+mod.scripts.unsupported = Votre appareil ne prend pas en charge les scripts de mod. Certains mods ne fonctionneront pas correctement.
about.button = À propos
name = Nom:
@@ -141,6 +155,7 @@ server.kicked.nameEmpty = Votre nom est invalide.
server.kicked.idInUse = Vous êtes déjà sur ce serveur! Se connecter avec deux comptes n'est pas permis.
server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Téléchargez une version officielle.
server.kicked.gameover = Game over!
+server.kicked.serverRestarting = Le serveur est en train de redémarrer.
server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[]
host.info = Le bouton [accent]Héberger[] héberge un serveur sur le port [scarlet]6567[]. \nN'importe qui sur le même [lightgray]wifi ou réseau local []devrait voir votre serveur sur leur liste des serveurs.\n\nSi vous voulez que les gens puissent s'y connecter de partout à l'aide de votre IP, [accent]le transfert de port (port forwarding)[] est requis.\n\n[lightgray]Note: Si quelqu'un a des problèmes de connexion à votre partie LAN, vérifiez que vous avez autorisé l'accès à Mindustry sur votre réseau local dans les paramètres de votre pare-feu.
join.info = Ici vous pouvez entrez [accent]l'adresse IP d'un serveur []pour s'y connecter, ou découvrir un serveur en [accent]réseau local[].\nLe multijoueur en LAN ainsi qu'en WAN est supporté.\n\n[lightgray]Note: Il n'y a pas de liste de serveurs globaux automatiques; Si vous voulez vous connectez à quelqu'un par IP, il faudra d'abord demander à l'hébergeur leur IP.
@@ -628,6 +643,7 @@ setting.screenshake.name = Tremblement de l'écran
setting.effects.name = Afficher les effets
setting.destroyedblocks.name = Afficher les Blocs Détruits
setting.conveyorpathfinding.name = Recherche de Chemin pour le Placement de Convoyeurs
+setting.coreselect.name = Autoriser les schémas contenant des Noyaux
setting.sensitivity.name = Sensibilité de la manette
setting.saveinterval.name = Intervalle des sauvegardes auto
setting.seconds = {0} secondes
@@ -739,6 +755,7 @@ rules.enemyCheat = Ressources infinies pour l'IA
rules.unitdrops = Drops des unités
rules.unitbuildspeedmultiplier = Multiplicateur de Vitesse de Construction d'Unités
rules.unithealthmultiplier = Multiplicateur de Santé des Unités
+rules.blockhealthmultiplier = Multiplicateur de Santé de Bloc
rules.playerhealthmultiplier = Multiplicateur de Santé des Joueurs
rules.playerdamagemultiplier = Multiplicateur des Dégâts Joueurs
rules.unitdamagemultiplier = Multiplicateur des dégâts Unité
@@ -961,6 +978,7 @@ block.mechanical-pump.name = Pompe Mécanique
block.item-source.name = Source de Ressources
block.item-void.name = Destructeur de Ressources
block.liquid-source.name = Source de Liquide
+block.liquid-void.name = Vaporisateur de Liquide
block.power-void.name = Absorbeur Énergétique
block.power-source.name = Énergie Infinie
block.unloader.name = Déchargeur
@@ -1124,6 +1142,7 @@ block.power-source.description = Produit de l'énergie à l'infini. Bac à sable
block.item-source.description = Produit des objets à l'infini. Bac à sable uniquement .
block.item-void.description = Désintègre n'importe quel objet qui va à l'intérieur sans utiliser d'énergie. Bac à sable uniquement.
block.liquid-source.description = Source de liquide infinie . Bac à sable uniquement.
+block.liquid-void.description = Détruit n'importe quel liquide. Bac à sable uniquement.
block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles dans les premières lors des premières vagues.
block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles dans les premières lors des premières vagues.\n2 x 2.
block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les ennemis.
diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties
index 9510ce227d..0bf1cdb539 100644
--- a/core/assets/bundles/bundle_fr_BE.properties
+++ b/core/assets/bundles/bundle_fr_BE.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = Versions instables de développement
link.trello.description = Trello officiel pour les fonctionnalités planifiées.
link.itch.io.description = Site itch.io avec les versions téléchargeables pour ordinateur.
link.google-play.description = Page Google Play du jeu
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Wiki officiel de Mindustry
+link.feathub.description = Suggest new features
linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier.
screenshot = Capture d'écran enregistrée sur {0}
screenshot.invalid = Carte trop grande, potentiellement pas assez de mémoire pour la capture d'écran.
@@ -18,12 +20,22 @@ gameover = Le base a été détruite.
gameover.pvp = L'équipe[accent] {0}[] a gagnée !
highscore = [accent]Nouveau meilleur score !
copied = Copied.
+
load.sound = Son
load.map = Maps
load.image = Images
load.content = Contenu
load.system = Système
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
+
schematic = Schematic
schematic.add = Save Schematic...
schematics = Schematics
@@ -40,6 +52,7 @@ schematic.saved = Schematic saved.
schematic.delete.confirm = This schematic will be utterly eradicated.
schematic.rename = Rename Schematic
schematic.info = {0}x{1}, {2} blocks
+
stat.wave = Vagues vaincues:[accent] {0}
stat.enemiesDestroyed = Ennemies détruits:[accent] {0}
stat.built = Bâtiments construits:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Bâtiments détruits:[accent] {0}
stat.deconstructed = Bâtiments déconstruits:[accent] {0}
stat.delivered = Ressources transférées:
stat.rank = Rang Final: [accent]{0}
+
launcheditems = [accent]Ressources transférées
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]"?
@@ -74,6 +88,7 @@ maps.browse = Browse Maps
continue = Continue
maps.none = [LIGHT_GRAY]Aucune carte trouvée!
invalid = Invalid
+pickcolor = Pick Color
preparingconfig = Preparing Config
preparingcontent = Preparing Content
uploadingcontent = Uploading Content
@@ -81,6 +96,7 @@ uploadingpreviewfile = Uploading Preview File
committingchanges = Comitting Changes
done = Done
feature.unsupported = Your device does not support this feature.
+
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.alpha = [accent](Alpha)
mods = Mods
@@ -92,18 +108,25 @@ 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.
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.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.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.
+
about.button = À propos
name = Nom:
noname = Choisissez d'abord [accent]un pseudo[].
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = Votre nom doit contenir au moins une lettre ou un chif
server.kicked.idInUse = Vous êtes déjà sur ce serveur ! Se connecter avec deux comptes n'est pas permis !
server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Télécharger une version officielle.
server.kicked.gameover = Vous avez perdu !
+server.kicked.serverRestarting = The server is restarting.
server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[]
host.info = Le bouton [accent]héberger[] héberge un serveur sur les ports [scarlet]6567[] et [scarlet]6568.[]\nN'importe qui sur le même [LIGHT_GRAY]réseau wifi ou local[] devrait pouvoir voir votre serveur dans sa liste de serveurs.\n\nSi vous voulez que les gens puissent se connecter de n'importe où grâce à l'IP, [accent]rediriger les ports[] est requis.\n\n[LIGHT_GRAY]Note:Si quelqu'un éprouve des difficultés à se connecter à votre partie LAN, assurez-vous que vous avez autorisé Mindustry à accéder à votre réseau local dans les paramètres de votre pare-feu.
join.info = Ici, vous pouvez entrer l' [accent]IP d'un serveur[] pour s'y connecter, ou découvrir les serveurs[accent]sur votre réseau local[] pour s'y connecter.\nLes parties multijoueur LAN et WAN sont toutes deux supportées.\n\n[LIGHT_GRAY]Note: Aucune liste globale des serveurs n'est génerée automatiquement: si vous voulez vous connecter à un serveur par IP, vous devrez demander l'IP à l'hébergeur.
@@ -271,6 +295,7 @@ 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}
+
editor.brush = Pinceau
editor.openin = Ouvrir dans l'éditeur
editor.oregen = Génération des minerais
@@ -347,6 +372,7 @@ editor.overwrite = [accent]Attention!\nCela écrasera une carte existante.
editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire?
editor.exists = A map with this name already exists.
editor.selectmap = Sélectionnez une carte à charger:
+
toolmode.replace = Remplacer
toolmode.replace.description = Dessine uniquement sur des blocs pleins.
toolmode.replaceall = Remplacer tout
@@ -361,6 +387,7 @@ toolmode.fillteams = Remplir les équipes
toolmode.fillteams.description = Remplissez les équipes au lieu de blocs.
toolmode.drawteams = Tirage au sort des équipes
toolmode.drawteams.description = Dessinez des équipes au lieu de blocs.
+
filters.empty = [LIGHT_GRAY]Aucun filtre! Ajoutez-en un avec les boutons ci-dessous.
filter.distort = Déformation
filter.noise = Bruit
@@ -392,6 +419,7 @@ filter.option.floor2 = Sol secondaire
filter.option.threshold2 = Seuil secondaire
filter.option.radius = Rayon
filter.option.percentile = Centile
+
width = Largeur:
height = Hauteur:
menu = Menu
@@ -407,6 +435,7 @@ tutorial = Tutoriel
tutorial.retake = Re-Take Tutorial
editor = Éditeur
mapeditor = Éditeur de carte
+
abandon = Abandonner
abandon.text = Cette zone et toutes ses ressources seront perdues.
locked = Verrouillé
@@ -437,6 +466,7 @@ zone.objective.survival = Survive
zone.objective.attack = Détruire la base ennemi
add = Ajouter...
boss.health = Vie du BOSS
+
connectfail = [crimson]Échec de la connexion au serveur: [accent]{0}
error.unreachable = Serveur inaccessible.
error.invalidaddress = Adresse invalide.
@@ -447,6 +477,7 @@ error.mapnotfound = Fichier de carte introuvable !
error.io = Network I/O error.
error.any = Erreur réseau inconnue.
error.bloom = Échec d'initialisation du flou lumineux.\nVotre appareil peut ne pas le supporter.
+
zone.groundZero.name = Première Bataille
zone.desertWastes.name = Déchets du désert
zone.craters.name = Les Cratères
@@ -461,6 +492,7 @@ zone.saltFlats.name = Salière
zone.impact0078.name = Impact 0078
zone.crags.name = Crags
zone.fungalPass.name = Fungal Pass
+
zone.groundZero.description = L'emplacement optimal pour recommencer. Faible menace ennemie. Peu de ressources.\nRassemblez autant de plomb et de cuivre que possible.\nAllons-y
zone.frozenForest.description = Même ici, plus près des montagnes, les spores se sont propagées. Les températures glaciales ne peuvent pas les contenir pour toujours.\n\nCommencez l'aventure au pouvoir. Construire des générateurs de combustion. Apprenez à utiliser les réparations.
zone.desertWastes.description = Ces déchets sont vastes, imprévisibles, et sillonné de structures du secteur désaffectés.\nLe charbon est présent dans la région. Brulez-le pour obtenir de l'énergie ou synthétisez du graphite.\n\n[lightgray]Ce lieu d'atterrissage ne peut être garanti.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = Une ancienne installation de production et de
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.impact0078.description =
zone.crags.description =
+
settings.language = Langage
settings.data = Game Data
settings.reset = Valeur par défaut.
settings.rebind = Réatttribuer
+settings.resetKey = Reset
settings.controls = Contrôles
settings.game = Jeu
settings.sound = Son
@@ -529,6 +563,7 @@ blocks.inaccuracy = Précision
blocks.shots = Tirs
blocks.reload = Tirs/Seconde
blocks.ammo = Munition
+
bar.drilltierreq = Better Drill Required
bar.drillspeed = Vitesse de forage: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Chaleur
bar.power = Énergie
bar.progress = Progression de la construction
bar.spawned = Unités: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] dégats
bullet.splashdamage = [stat]{0}[lightgray] dgt zone ~[stat] {1}[lightgray] tuiles
bullet.incendiary = [stat]incendiaire
@@ -555,6 +593,7 @@ bullet.freezing = [stat]gel
bullet.tarred = [stat]goudronné
bullet.multiplier = [stat]{0}[lightgray]x multiplicateur de munitions
bullet.reload = [stat]{0}[lightgray]x vitesse de rechargement
+
unit.blocks = Blocs
unit.powersecond = Énergie/seconde
unit.liquidsecond = Liquides/seconde
@@ -567,6 +606,8 @@ unit.persecond = /sec
unit.timesspeed = x vitesse
unit.percent = %
unit.items = Objets
+unit.thousands = k
+unit.millions = mil
category.general = Général
category.power = Énergie
category.liquids = Liquides
@@ -579,6 +620,7 @@ setting.shadows.name = Ombres
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = Filtrage linéaire
setting.hints.name = Hints
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Eau animée
setting.animatedshields.name = Boucliers Animés
setting.antialias.name = Antialias[LIGHT_GRAY] (demande le redémarrage de l'appareil)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Tremblement d'écran
setting.effects.name = Montrer les effets
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Contôle de la sensibilité
setting.saveinterval.name = Intervalle des sauvegardes auto
setting.seconds = {0} Secondes
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Plein écran
setting.borderlesswindow.name = Fenêtre sans bordure[LIGHT_GRAY] (peut nécessiter un redémarrage)
setting.fps.name = Afficher FPS
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixélisé [LIGHT_GRAY](peut diminuer les performances)[]
setting.minimap.name = Montrer la minimap
@@ -635,16 +681,36 @@ category.multiplayer.name = Multijoueur
command.attack = Attaquer
command.rally = Rally
command.retreat = Retraite
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Clear Building
keybind.press = Appuyez sur une touche ...
keybind.press.axis = Appuyez sur un axe ou une touche...
keybind.screenshot.name = Map Screenshot
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Mouvement X
keybind.move_y.name = Mouvement Y
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Sprint
keybind.schematic_select.name = Select Region
keybind.schematic_menu.name = Schematic Menu
keybind.schematic_flip_x.name = Flip Schematic X
keybind.schematic_flip_y.name = Flip 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.fullscreen.name = Basculer en plein écran
keybind.select.name = Sélectionner/Tirer
keybind.diagonal_placement.name = Placement en diagonal
@@ -657,7 +723,6 @@ keybind.menu.name = Menu
keybind.pause.name = Pause
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Mini-Map
-keybind.dash.name = Sprint
keybind.chat.name = Tchat
keybind.player_list.name = Liste des joueurs
keybind.console.name = Console
@@ -680,7 +745,9 @@ mode.pvp.description = Lutter contre d'autres joueurs pour gagner !
mode.attack.name = Attaque
mode.attack.description = Pas de vagues, le but est de détruire la base ennemie.
mode.custom = Règles personnalisées
+
rules.infiniteresources = Ressources infinies
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Temps de vague
rules.waves = Vague
rules.attack = Mode attaque
@@ -688,6 +755,7 @@ rules.enemyCheat = Ressources infinies pour l'IA
rules.unitdrops = Uniter Drops
rules.unitbuildspeedmultiplier = Multiplicateur de vitesse de création d'unités
rules.unithealthmultiplier = Multiplicateur de la santé des unités
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Multiplicateur de la santé des joueurs
rules.playerdamagemultiplier = Multiplicateur de dégât des joueurs
rules.unitdamagemultiplier = Multiplicateur de dégât des unités
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Ressources & Bâtiment
rules.title.player = Joueurs
rules.title.enemy = Ennemis
rules.title.unit = Unités
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Objets
content.liquid.name = Liquides
content.unit.name = Unités
@@ -717,7 +789,7 @@ item.coal.name = Charbon
item.graphite.name = Graphite
item.titanium.name = Titane
item.thorium.name = Thorium
-item.silicon.name = Silicone
+item.silicon.name = Silicium
item.plastanium.name = Plastanium
item.phase-fabric.name = Phase Fabric
item.surge-alloy.name = Alliage superchargé
@@ -752,6 +824,7 @@ mech.trident-ship.name = Trident
mech.trident-ship.weapon = Largage de bombe
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Fusil automatique incendiaire
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [LIGHT_GRAY]Explosivité: {0}
item.flammability = [LIGHT_GRAY]Inflammabilité: {0}
item.radioactivity = [LIGHT_GRAY]Radioactivité: {0}
@@ -767,6 +840,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0}
liquid.viscosity = [LIGHT_GRAY]Viscosité: {0}
liquid.temperature = [LIGHT_GRAY]Température: {0}
+
block.sand-boulder.name = Sable rocheux
block.grass.name = Herbe
block.salt.name = Sel
@@ -865,8 +939,10 @@ block.distributor.name = [accent]Distributeur[]
block.sorter.name = Trieur
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.overflow-gate.name = Barrière de Débordement
-block.silicon-smelter.name = Fonderie de silicone
+block.silicon-smelter.name = Fonderie de silicium
block.phase-weaver.name = Tisseur à phase
block.pulverizer.name = Pulvérisateur
block.cryofluidmixer.name = Refroidisseur
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Centrifugeuse à charbon
block.power-node.name = Transmetteur énergétique
block.power-node-large.name = Grand transmetteur énergétique
block.surge-tower.name = Tour de surtension
+block.diode.name = Battery Diode
block.battery.name = Batterie
block.battery-large.name = Batterie large
block.combustion-generator.name = Générateur à combustion
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Pompe Méchanique
block.item-source.name = Source d'objets
block.item-void.name = Destructeur d'objets
block.liquid-source.name = Source de liquide
+block.liquid-void.name = Liquid Void
block.power-void.name = Absorbeur énergétique
block.power-source.name = Puissance infinie
block.unloader.name = Déchargeur
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Usine de "Forteresse"
block.revenant-factory.name = Usine de "Revenants"
block.repair-point.name = Point de Réparation
block.pulse-conduit.name = Conduit à Impulsion
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Conduit à Phase
block.liquid-router.name = Routeur de Liquide
block.liquid-tank.name = Réservoir de Liquide
@@ -1001,6 +1080,7 @@ tutorial.deposit = Déposez les éléments dans des blocs en les faisant glisser
tutorial.waves = Les [LIGHT_GRAY]ennemies[] approchent.\n\nDéfendez votre base durant 2 vagues.\nConstruisez plus de tourelles et de foreuses. Minez plus de cuivre.
tutorial.waves.mobile = [lightgray]Les ennemies approchent[].\n\nDéfendez votre base durant 2 vagues. Votre vaisseau tirera automatiquement sur les ennemis.\nConstruisez plus de tourelles et de foreuses. Minez plus de cuivre.
tutorial.launch = Une fois que vous atteignez une vague spécifique, vous êtes en mesure de[accent] lancer votre base[], laissant vos défenses derrière vous et[accent] en obtenant toutes les ressources de votre base.[]\nCes ressources peuvent ensuite servir à la recherche de nouvelles technologies.\n\n[accent]Appuyez sur le bouton de lancement.
+
item.copper.description = Un matériau de construction utile. Utilisé intensivement dans tout les blocs.
item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et pour le transport de blocs.
item.metaglass.description = Un composé de verre très résistant. Utilisation intensive pour la distribution et le stockage de liquides.
@@ -1062,6 +1142,7 @@ block.power-source.description = Débit infini d'énergie. Bac à sable seulemen
block.item-source.description = Sort infiniment les articles. Bac à sable seulement.
block.item-void.description = Détruit tous les objets qui y entrent sans utiliser d'énergie. Bac à sable seulement.
block.liquid-source.description = Débit infini de liquides. Bac à sable seulement.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.
block.copper-wall-large.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.\nS'étend sur plusieurs tuiles.
block.titanium-wall.description = Un bloc défensif modérément fort.\nFournit une protection modérée contre les ennemis.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = Une pompe avancée qui double la vitesse en util
block.thermal-pump.description = La pompe ultime. Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave.
block.conduit.description = Bloc de transport liquide de base. Fonctionne comme un convoyeur, mais avec des liquides. Utilisation optimale avec des extracteurs, des pompes ou d’autres conduits.
block.pulse-conduit.description = Bloc de transport de liquide avancé. Transporte les liquides plus rapidement et stocke plus que des conduits standard.
+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 = Accepte les liquides d'une direction et les envoie dans 3 autres directions de manière égale. Peut également stocker une certaine quantité de liquide. Utile pour séparer les liquides d'une source à plusieurs cibles.
block.liquid-tank.description = Stocke une grande quantité de liquides. Utilisez-le pour créer des tampons en cas de demande non constante de matériaux ou comme protection pour le refroidissement des blocs vitaux.
block.liquid-junction.description = Agit comme un pont pour deux conduits de croisement. Utile dans les situations avec deux conduits différents transportant des liquides différents à des endroits différents.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Bloc de transport de liquide avancé. Utilise
block.power-node.description = Transmet la puissance à des noeuds connectés. Il est possible de connecter jusqu'à quatre sources d'alimentation, puits ou nœuds.\nLe nœud recevra de l’alimentation ou fournira l’alimentation à tous les blocs adjacents.
block.power-node-large.description = Son rayon d'action est supérieur à celui du nœud d'alimentation et peut être connecté à six sources d'alimentation, puits ou nœuds au maximum.
block.surge-tower.description = Un nœud d'alimentation extrêmement longue portée avec moins de connexions 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.battery.description = Stocke l’énergie chaque fois qu’il ya abondance et en cas de pénurie, tant qu’il reste de la capacité.
block.battery-large.description = Stocke beaucoup plus d'énergie qu'une batterie ordinaire.
block.combustion-generator.description = Génère de l'énergie en brûlant du pétrole ou des matériaux inflammables.
diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties
index 73fff980c3..aae63ed889 100644
--- a/core/assets/bundles/bundle_in_ID.properties
+++ b/core/assets/bundles/bundle_in_ID.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = Bentuk pengembangan (kurang stabil)
link.trello.description = Papan Trello resmi untuk fitur terencana
link.itch.io.description = Halaman itch.io dengan PC download dan versi web
link.google-play.description = Google Play Store
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Wiki Mindustry resmi
+link.feathub.description = Suggest new features
linkfail = Gagal membuka tautan!\nURL disalin ke papan ke papan klip.
screenshot = Tangkapan layar disimpan di {0}
screenshot.invalid = Peta terlalu besar, tidak cukup memori untuk menangkap layar.
@@ -18,12 +20,22 @@ gameover = Permainan Habis
gameover.pvp = Tim[accent] {0}[] menang!
highscore = [accent]Rekor Baru!
copied = Copied.
+
load.sound = Suara
load.map = Peta
load.image = Gambar
load.content = Konten
load.system = Sistem
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
+
schematic = Schematic
schematic.add = Save Schematic...
schematics = Schematics
@@ -40,6 +52,7 @@ schematic.saved = Schematic saved.
schematic.delete.confirm = This schematic will be utterly eradicated.
schematic.rename = Rename Schematic
schematic.info = {0}x{1}, {2} blocks
+
stat.wave = Gelombang Terkalahkan:[accent] {0}
stat.enemiesDestroyed = Musuh Terhancurkan:[accent] {0}
stat.built = Jumlah Blok yang Dibangun:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Jumlah Blok Dihancurkan Musuh:[accent] {0}
stat.deconstructed = Jumlah Blok Dihancurkan Pemain:[accent] {0}
stat.delivered = Sumber Daya yang Diluncurkan:
stat.rank = Nilai Akhir: [accent]{0}
+
launcheditems = [accent]Sumber Daya
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Apakah Anda yakin ingin menghapus peta "[accent]{0}[]"?
@@ -74,6 +88,7 @@ maps.browse = Cari Peta
continue = Lanjutkan
maps.none = [LIGHT_GRAY]Peta tidak ditemukan!
invalid = Tidak valid
+pickcolor = Pick Color
preparingconfig = Menyiapkan Config
preparingcontent = Menyiapkan Content
uploadingcontent = Mengupload Content
@@ -81,6 +96,7 @@ uploadingpreviewfile = Mengupload File Tinjauan
committingchanges = Membuat Perubahan
done = Selesai
feature.unsupported = Your device does not support this feature.
+
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.alpha = [accent](Alpha)
mods = Mods
@@ -92,18 +108,25 @@ 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.
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.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.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.
+
about.button = Tentang
name = Nama:
noname = Pilih[accent] nama pemain[] dahulu.
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = Nama yang dipilih tidak valid.
server.kicked.idInUse = Anda telah berada di server ini! Memasuki dengan dua akun tidak diizinkan.
server.kicked.customClient = Server ini tidak mendukung versi modifikasi. Download versi resmi.
server.kicked.gameover = Game over!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Versi Anda:[accent] {0}[]\nVersi server:[accent] {1}[]
host.info = Tombol [accent]host[] akan membuat server sementara di port [scarlet]6567[]. \nSemua orang yang memiliki [LIGHT_GRAY]Wi-Fi atau jaringan lokal[] akan bisa melihat server anda di daftar server mereka.\n\nJika Anda ingin pemain dari mana saja memasuki servermu dengan IP, [accent]port forwarding[] dibutuhkan.\n\n[LIGHT_GRAY]Diingat: Jika seseorang mengalami masalah memasuki permainan LAN mu, pastikan Anda telah mengizinkan Mindustry akses ke jaringan lokalmu di pengaturan firewall.
join.info = Disini, Anda bisa memasuki [accent]server IP[], atau menemukan [accent]server lokal[] untuk bermain bersama.\nLAN dan WAN mendukung permainan bersama.\n\n[LIGHT_GRAY]Diingat: Tidak ada daftar server global; jika anda ingin bergabung dengan seseorang memakai IP, Anda perlu menanyakan host tentang IP mereka.
@@ -271,6 +295,7 @@ 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}
+
editor.brush = Kuas
editor.openin = Buka di Penyunting
editor.oregen = Generasi Sumber Daya
@@ -347,6 +372,7 @@ editor.overwrite = [accent]Peringatan!\nIni menindih peta yang telah ada.
editor.overwrite.confirm = [scarlet]Peringatan![] Peta dengan nama ini sudah ada. Yakin ingin menindihnya?
editor.exists = A map with this name already exists.
editor.selectmap = Pilih peta untuk dimuat:
+
toolmode.replace = Replace
toolmode.replace.description = Draws only on solid blocks.
toolmode.replaceall = Replace All
@@ -361,6 +387,7 @@ toolmode.fillteams = Fill Teams
toolmode.fillteams.description = Fill teams instead of blocks.
toolmode.drawteams = Draw Teams
toolmode.drawteams.description = Draw teams instead of blocks.
+
filters.empty = [LIGHT_GRAY]Tidak ada filter! Tambahkan dengan tombol dibawah.
filter.distort = Rusakkan
filter.noise = Kebisingan
@@ -392,6 +419,7 @@ filter.option.floor2 = Lantai Sekunder
filter.option.threshold2 = Ambang Sekunder
filter.option.radius = Radius
filter.option.percentile = Perseratus
+
width = Lebar:
height = Tinggi:
menu = Menu
@@ -407,6 +435,7 @@ tutorial = Tutorial
tutorial.retake = Re-Take Tutorial
editor = Penyunting
mapeditor = Penyunting Peta
+
abandon = Tinggalkan
abandon.text = Zona ini dan semua sumber daya didalamnya akan berada di tangan musuh.
locked = Dikunci
@@ -437,6 +466,7 @@ zone.objective.survival = Survive
zone.objective.attack = Destroy Enemy Core
add = Menambahkan...
boss.health = Darah Boss
+
connectfail = [crimson]Gagal menyambung ke server:\n\n[accent]{0}
error.unreachable = Server tak terjangkau.\nApakah alamatnya benar?
error.invalidaddress = Alamat tidak valid.
@@ -447,6 +477,7 @@ error.mapnotfound = File peta tidak ditemaukan!
error.io = Error jaringan I/O.
error.any = Jaringan error tidak diketahui.
error.bloom = Failed to initialize bloom.\nYour device may not support it.
+
zone.groundZero.name = Titik Nol
zone.desertWastes.name = Gurun Gersang
zone.craters.name = Kawah
@@ -461,6 +492,7 @@ zone.saltFlats.name = Salt Flats
zone.impact0078.name = Impact 0078
zone.crags.name = Crags
zone.fungalPass.name = Fungal Pass
+
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 fridgid 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.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = A former facility for the production and proce
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.impact0078.description =
zone.crags.description =
+
settings.language = Bahasa
settings.data = Game Data
settings.reset = Atur ulang ke Default (standar)
settings.rebind = Rebind
+settings.resetKey = Reset
settings.controls = Kontrol
settings.game = Permainan
settings.sound = Suara
@@ -529,6 +563,7 @@ blocks.inaccuracy = Jarak Melenceng
blocks.shots = Tembakan
blocks.reload = Tembakan/Detik
blocks.ammo = Amunisi
+
bar.drilltierreq = Better Drill Required
bar.drillspeed = Kecepatan Bor: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Panas
bar.power = Tenaga
bar.progress = Perkembangan Pembangunan
bar.spawned = Unit: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] kekuatan (dmg)
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] kotak
bullet.incendiary = [stat]pembakar
@@ -555,6 +593,7 @@ bullet.freezing = [stat]membeku
bullet.tarred = [stat]tar
bullet.multiplier = [stat]{0}[lightgray]x multiplikasi amunisi
bullet.reload = [stat]{0}[lightgray]x rasio menembak
+
unit.blocks = blok
unit.powersecond = unit tenaga/detik
unit.liquidsecond = unit zat cair/detik
@@ -567,6 +606,8 @@ unit.persecond = /detik
unit.timesspeed = x kecepatan
unit.percent = %
unit.items = item
+unit.thousands = k
+unit.millions = mil
category.general = Umum
category.power = Tenaga
category.liquids = Zat Cair
@@ -579,6 +620,7 @@ setting.shadows.name = Bayangan
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = Linier Filter
setting.hints.name = Hints
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Animasi Air
setting.animatedshields.name = Animasi Lindungan
setting.antialias.name = Antialiasi[LIGHT_GRAY] (membutuhkan restart)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Layar Getar
setting.effects.name = Munculkan Efek
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Sensitivitas Kontroler
setting.saveinterval.name = Jarak Menyimpan
setting.seconds = {0} Detik
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Layar Penuh
setting.borderlesswindow.name = Jendela tak Berbatas[LIGHT_GRAY] (bisa membutuhkan restart)
setting.fps.name = Tunjukkan FPS
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Mode Pixel[LIGHT_GRAY] (menonaktifkan animasi)
setting.minimap.name = Tunjukkan Peta kecil
@@ -635,16 +681,36 @@ category.multiplayer.name = Bermain Bersama
command.attack = Serang
command.rally = Rally
command.retreat = Mundur
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Clear Building
keybind.press = Tekan kunci...
keybind.press.axis = Tekan sumbu atau kunci...
keybind.screenshot.name = Tangkapan Layar Peta
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Pindah x
keybind.move_y.name = Pindah y
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Terbang
keybind.schematic_select.name = Select Region
keybind.schematic_menu.name = Schematic Menu
keybind.schematic_flip_x.name = Flip Schematic X
keybind.schematic_flip_y.name = Flip 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.fullscreen.name = Toggle Fullscreen
keybind.select.name = Pilih/Tembak
keybind.diagonal_placement.name = Penaruhan Diagonal
@@ -657,7 +723,6 @@ keybind.menu.name = Menu
keybind.pause.name = Jeda
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Peta Kecil
-keybind.dash.name = Terbang
keybind.chat.name = Chat
keybind.player_list.name = Daftar pemain
keybind.console.name = Console
@@ -680,7 +745,9 @@ mode.pvp.description = Melawan Pemain lain. Membutuhkan setidaknya 2 inti berbed
mode.attack.name = Penyerangan
mode.attack.description = Menghancurkan base musuh. Tidak ada gelombang. Membutuhkan inti merah di dalam peta untuk main.
mode.custom = Pengaturan Modifikasi
+
rules.infiniteresources = Sumber Daya Tak Terbatas
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Pengaturan Waktu Gelombang
rules.waves = Gelombang
rules.attack = Attack Mode
@@ -688,6 +755,7 @@ rules.enemyCheat = Sumber Daya A.I Musuh (Tim Merah) Tak Terbatas
rules.unitdrops = Munculnya Unit
rules.unitbuildspeedmultiplier = Multiplikasi Kecepatan Munculnya Unit
rules.unithealthmultiplier = Multiplikasi Darah Unit
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Multiplikasi Darah Pemain
rules.playerdamagemultiplier = Multiplikasi Kekuatan Pemain
rules.unitdamagemultiplier = Multiplikasi Kekuatan Unit
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Sumber Daya & Bangunan
rules.title.player = Pemain
rules.title.enemy = Musush
rules.title.unit = Unit
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Item
content.liquid.name = Zat Cair
content.unit.name = Unit
@@ -752,6 +824,7 @@ mech.trident-ship.name = Trident
mech.trident-ship.weapon = Lahan Bom
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Repeater Api
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [LIGHT_GRAY]Tingkat Keledakan: {0}%
item.flammability = [LIGHT_GRAY]Tingkat Kebakaran: {0}%
item.radioactivity = [LIGHT_GRAY]Tingkat Radioaktif: {0}%
@@ -767,6 +840,7 @@ mech.buildspeed = [LIGHT_GRAY]Kecepatan Membangun: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Kapasitas Panas: {0}
liquid.viscosity = [LIGHT_GRAY]Kelekatan: {0}
liquid.temperature = [LIGHT_GRAY]Suhu: {0}
+
block.sand-boulder.name = Sand Boulder
block.grass.name = Rumput
block.salt.name = Garam
@@ -865,6 +939,8 @@ block.distributor.name = Distributor
block.sorter.name = Penyortir
block.inverted-sorter.name = Inverted Sorter
block.message.name = Pesan
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = Gerbang Luap
block.silicon-smelter.name = Pelebur Silikon
block.phase-weaver.name = Pengrajut Phase
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Sentrifugal Batu Bara
block.power-node.name = Tiang Listrik
block.power-node-large.name = Tiang Listrik Besar
block.surge-tower.name = Tiang Surge
+block.diode.name = Battery Diode
block.battery.name = Baterai
block.battery-large.name = Baterai Besar
block.combustion-generator.name = Generator Pembakar
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Pompa Mekanik
block.item-source.name = Sumber Item
block.item-void.name = Penghilang Item
block.liquid-source.name = Sumber Zat Cair
+block.liquid-void.name = Liquid Void
block.power-void.name = Penghilang Listrik
block.power-source.name = Listrik Takhingga
block.unloader.name = Pembongkar Muatan
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Pabrik Robot Fortress
block.revenant-factory.name = Pabrik Penyerang Revenant
block.repair-point.name = Titik Pulih
block.pulse-conduit.name = Selang Denyut
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Selang Phase
block.liquid-router.name = Penyortir Zat Cair
block.liquid-tank.name = Tank Zat Cair
@@ -1001,6 +1080,7 @@ tutorial.deposit = Deposit items into blocks by dragging from your ship to the d
tutorial.waves = [LIGHT_GRAY] Musuh[] mendatang.\n\nLindungi intimu selama 2 gelombang. Bangun lebih banyak menara.
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.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
+
item.copper.description = Bahan struktur yang berguna. Digunakan di semua tipe blok.
item.lead.description = Bahan dasar di awal permainan. Digunakan di elektronik dan blok transportasi zat cair.
item.metaglass.description = Kaca yang super-kuat. Digunakan untuk distribusi zar cair dan penyimpanan.
@@ -1062,6 +1142,7 @@ block.power-source.description = Menghasilkan tenaga tak terbatas. Sandbox ekskl
block.item-source.description = Mengeluarkan item tak terhingga. Sandbox eksklusif.
block.item-void.description = Menghancurkan item apa saja tanpa penggunaan tenaga. Sandbox eksklusif.
block.liquid-source.description = Mengeluarkan zat cair tak terhingga. Sandbox eksklusif.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Blok pelindung murah.\nBerguna untuk melindungi inti dan menara di beberapa gelombang awal.
block.copper-wall-large.description = Blok pelindung murah.\nBerguna untuk melindungi inti dan menara di beberapa gelombang awal.\nSebesar 4 blok.
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = Pompa canggih yang kecepatannya dua kali lipat j
block.thermal-pump.description = Pompa Tercanggih.
block.conduit.description = Blok Transportasi Zat Cair Umum. Bekerja Seperti Pengantar, tetapi untuk zat cair.
block.pulse-conduit.description = Blok Transportasi Zat Cair Canggih. Memindahkan dan menyimpan zat cair lebih cepat dan banyak daripada saluran biasa.
+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 = Menerima zat cair dari satu arah dan mengeluarkannya ke 3 arah yang sama. Bisa juga menyimpan sejumlah zat cair. Berguna untuk memisahkan zat cair dari satu sumber ke target yang banyak.
block.liquid-tank.description = Menyimpan jumlah zat cair yang banyak. Gunakan sebagai penyangga ketika kebutuhan zat cair tidak konstan atau sebagai penjaga untuk mendinginkan blok yang vital.
block.liquid-junction.description = Berguna seperti jembatan untuk dua saluran yang bersimpangan. Berguna di situasi dimana dua saluran berbeda membawa zat cair berbeda ke lokasi yang berbeda.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Blok Transportasi Zat Cair Canggih. Menggunaka
block.power-node.description = Membawa tenaga ke tiang tersambung. hingga empat sumber listrik, sambungan atau tiang lainnya yang bisa disambung. Tiang akan mendapatkan atau memberi tenaga ke/dari blok yang disambung.
block.power-node-large.description = Mempunyai radius lebih besar dari tiang listrik biasa dan bisa menyambung hingga enam to up to six sumber listrik, sambungan atau tiang lainnya.
block.surge-tower.description = An extremely long-range power node with fewer available connections.
+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 = Menyimpan tenaga jika ada kelimpahan dan memberikan tenaga jika ada kekurangan, asalkan ada kapasitas tersisa.
block.battery-large.description = Menyimpan lebih banyak tenaga daripada baterai biasa.
block.combustion-generator.description = Menghasilkan tenaga dengan membakar oli atau pembakar.
diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties
index 75351ad9a8..f7d9474c8c 100644
--- a/core/assets/bundles/bundle_it.properties
+++ b/core/assets/bundles/bundle_it.properties
@@ -1,7 +1,7 @@
credits.text = Creato da [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
credits = Crediti
contributors = Traduttori e Contributori
-discord = Entra nel server Discord di mindustry!
+discord = Entra nel server Discord di Mindustry!
link.discord.description = La chatroom ufficiale del server Discord di Mindustry
link.reddit.description = The Mindustry subreddit
link.github.description = Codice sorgente del gioco
@@ -12,50 +12,58 @@ link.itch.io.description = Pagina di itch.io con download per PC e versione web
link.google-play.description = Elenco di Google Play Store
link.f-droid.description = Catalogo F-Droid
link.wiki.description = Wiki ufficiale di Mindustry
-linkfail = Impossibile aprire il link! L'URL è stato copiato.
+link.feathub.description = Suggerisci nuove funzionalità
+linkfail = Impossibile aprire il link! L'URL è stato copiato negli appunti.
screenshot = Screenshot salvato a {0}
-screenshot.invalid = Mappa troppo grossa, probabilmente non c'è abbastanza memoria libera.
+screenshot.invalid = Mappa troppo pesante, probabilmente non c'è abbastanza spazio sul disco.
gameover = Il Nucleo è stato distrutto.
-gameover.pvp = La squadra [accent] {0}[] ha vinto!
-highscore = [YELLOW]Nuovo record!
-
+gameover.pvp = La squadra[accent] {0}[] ha vinto!
+highscore = [accent]Nuovo record!
copied = Copiato.
+
load.sound = Suoni
load.map = Mappe
load.image = Immagini
load.content = Contenuti
load.system = Sistema
load.mod = Mods
-load.scripts = Testi
+load.scripts = Scripts
+
+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 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.exportfile = Esporta file
+schematic.exportfile = Esporta File
schematic.importfile = Importa File
-schematic.browseworkshop = Naviga sul Workshop
-schematic.copy = Copia negli appunti
-schematic.copy.import = Importa dagli appunti
-schematic.shareworkshop = Condividi sul Workshop
+schematic.browseworkshop = Naviga nel Workshop
+schematic.copy = Copia negli Appunti
+schematic.copy.import = Importa dagli Appunti
+schematic.shareworkshop = Condividi nel Workshop
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Ruota Schematica
schematic.saved = Schematica salvata.
schematic.delete.confirm = Questa schematica sarà cancellata definitivamente.
-schematic.rename = Rinomina schematica
+schematic.rename = Rinomina Schematica
schematic.info = {0}x{1}, {2} blocchi
-stat.wave = Ondate sconfitte:[accent] {0}
-stat.enemiesDestroyed = Nemici distrutti:[accent] {0}
-stat.built = Costruzioni erette:[accent] {0}
-stat.destroyed = Costruzioni distrutte:[accent] {0}
-stat.deconstructed = Costruzioni smantellate:[accent] {0}
-stat.delivered = Riorse lanciate:
-stat.rank = Livello finale: [accent]{0}
+stat.wave = Ondate Sconfitte:[accent] {0}
+stat.enemiesDestroyed = Nemici Distrutti:[accent] {0}
+stat.built = Costruzioni Erette:[accent] {0}
+stat.destroyed = Costruzioni Distrutte:[accent] {0}
+stat.deconstructed = Costruzioni Smantellate:[accent] {0}
+stat.delivered = Risorse Lanciate:
+stat.rank = Livello Finale: [accent]{0}
launcheditems = [accent]Oggetti Lanciati
-launchinfo = [unlaunched][[LAUNCH] il tuo Nucleo per ottenere gli oggetti indicati in blu.
-map.delete = Sei sicuro di voler eliminare la mappa"[accent]{0}[]"?
+launchinfo = [unlaunched][[LANCIA] il tuo Nucleo per ottenere gli oggetti indicati in blu.
+map.delete = Sei sicuro di voler eliminare la mappa '[accent]{0}[]'?
level.highscore = Miglior Punteggio: [accent]{0}
level.select = Selezione del Livello
level.mode = Modalità di Gioco:
@@ -72,65 +80,71 @@ none =
minimap = Minimappa
position = Posizione
close = Chiuso
-website = Sito web
+website = Sito Web
quit = Esci
-save.quit = Salva ed esci
+save.quit = Salva ed Esci
maps = Mappe
maps.browse = Esplora Mappe
continue = Continua
-maps.none = [LIGHT_GRAY]Nessuna mappa trovata!
+maps.none = [lightgray]Nessuna mappa trovata!
invalid = Non valido
-preparingconfig = Preparo la configurazione
-preparingcontent = Preparo il contenuto
-uploadingcontent = Carico il contenuto
-uploadingpreviewfile = Carico file di anteprima
-committingchanges = Applico le modifiche
+pickcolor = Seleziona Colore
+preparingconfig = Preparo la Configurazione
+preparingcontent = Preparo il Contenuto
+uploadingcontent = Carico il Contenuto
+uploadingpreviewfile = Carico File di Anteprima
+committingchanges = Applico le Modifiche
done = Fatto
feature.unsupported = Il tuo dispositivo non supporta questa funzione.
-mods.alphainfo = Tieni a mente che queste Mod sono in alpha, e[scarlet] possono contenere molti bug[].\Segnala tutti i problemi che trovi su GitHub o Discord di Mindustry.
+mods.alphainfo = Tieni a mente che queste mods sono in alpha e[scarlet] possono contenere molti bug[].Segnala tutti i problemi che trovi su GitHub o Discord di Mindustry.
mods.alpha = [accent](Alpha)
mods = Mods
-mods.none = [LIGHT_GRAY]Nessuna Mod trovata!
-mods.guide = Guida per il modding!
+mods.none = [lightgray]Nessuna mod trovata!
+mods.guide = Guida per il modding
mods.report = Segnala un Bug
-mods.openfolder = Apri Cartella Mod
+mods.openfolder = Apri Cartella Mods
mod.enabled = [lightgray]Abilitato
mod.disabled = [scarlet]Disabilitato
mod.disable = Disabilita
-mod.delete.error = Impossibile eliminare questa Mod. Il file potrebbe essere in uso.
+mod.delete.error = Impossibile eliminare questa mod. Il file potrebbe essere in uso.
+mod.requiresversion = [scarlet]Versione minima richiesta: [accent]{0}
mod.missingdependencies = [scarlet]Dipendenze mancanti: {0}
-mod.nowdisabled = [scarlet]Alla Mod '{0}' mancano delle dipendenze:[accent] {1}\n[lightgray]Queste Mod devono essere scaricate prima.\nQuesta Mod verrà disabilitata automaticamente.
+mod.erroredcontent = [scarlet]Errori di Contenuto
+mod.errors = Si sono verificati degli errori durante il caricamento del contenuto.
+mod.noerrorplay = [scarlet]Sono presenti delle mod con errori.[] Puoi disabilitare le mod affette oppure sistemarle prima di giocare.
+mod.nowdisabled = [scarlet]Alla mod '{0}' mancano delle dipendenze:[accent] {1}\n[lightgray]Queste mods devono essere scaricate prima.\nQuesta mod verrà disabilitata automaticamente.
mod.enable = Abilita
mod.requiresrestart = Il gioco verrà chiuso per applicare i cambiamenti.
mod.reloadrequired = [scarlet]Riavvio necessario
-mod.import = Importa una Mod
-mod.import.github = Importa una Mod da GitHub
-mod.item.remove = Questo item fa parte della Mod[accent] '{0}'[]. Per rimuoverlo, disinstalla questa Mod.
-mod.remove.confirm = Questa Mod verrà eliminata.
-mod.author = [LIGHT_GRAY]Autore:[] {0}
-mod.missing = Questo salvataggio contiene Mod che hai recentemente aggiornato o non hai più installate. Il salvataggio potrebbe corrompersi. Sei sicuro di volerlo caricare?\n[lightgray]Mods:\n{0}
-mod.preview.missing = Prima di pubblicare questa Mod nel Workshop, devi aggiungere un immagine di copertina.\nMetti un immagine[accent] con nome preview.png[] nella cartella della Mod e riprova.
-mod.folder.missing = Solo le Mod in una cartella possono essere pubblicate nel Workshop.\nPer convertire una Mod in una cartella, decomprimi i suoi file in una cartella ed elimina il vecchio zip, quindi riavvia il gioco o ricarica le tue mods.
+mod.import = Importa Mod
+mod.import.github = Importa Mod da GitHub
+mod.item.remove = Questo item fa parte della mod[accent] '{0}'[]. Per rimuoverlo, disinstalla questa mod.
+mod.remove.confirm = Questa mod verrà eliminata.
+mod.author = [lightgray]Autore:[] {0}
+mod.missing = Questo salvataggio contiene delle mods che hai recentemente aggiornato o non hai più installate. Il salvataggio potrebbe corrompersi. Sei sicuro di volerlo caricare?\n[lightgray]Mods:\n{0}
+mod.preview.missing = Prima di pubblicare questa mod nel Workshop, devi aggiungere un immagine di copertina.\nMetti un immagine con nome[accent] preview.png[] nella cartella della mods e riprova.
+mod.folder.missing = Solo le mods in una cartella possono essere pubblicate nel Workshop.\nPer convertire una mod in una cartella, decomprimi i suoi file in una cartella ed elimina il vecchio zip, quindi riavvia il gioco o ricarica le tue mods.
+mod.scripts.unsupported = Il tuo dispositivo non supporta gli scripts per le mods. Alcune mods non funzioneranno correttamente.
about.button = Info
name = Nome:
noname = Scegli un[accent] nome[] prima di unirti.
-filename = Nome file:
-unlocked = Nuovo blocco scoperto!
+filename = Nome File:
+unlocked = Nuovo contenuto sbloccato!
completed = [accent]Completato
-techtree = Albero scoperta
-research.list = [LIGHT_GRAY]Ricerca:
+techtree = Albero Scoperta
+research.list = [lightgray]Ricerca:
research = Ricerca
-researched = [LIGHT_GRAY]{0} cercati.
+researched = [lightgray]{0} cercati.
players = {0} giocatori online
players.single = {0} giocatori online
server.closing = [accent]Chiusura server...
server.kicked.kick = Sei stato cacciato dal server!
server.kicked.whitelist = Non sei presente nella whitelist.
server.kicked.serverClose = Server chiuso.
-server.kicked.vote = Sei stato cacciato su richiesta dei giocatori. Addio.
-server.kicked.clientOutdated = Versione del client obsoleta! Aggiorna il tuo gioco!
+server.kicked.vote = Sei stato cacciato su richiesta dei giocatori. Tanti saluti.
+server.kicked.clientOutdated = Versione del client obsoleta! Aggiorna il gioco!
server.kicked.serverOutdated = Server obsoleto! Chiedi all'host di aggiornare la versione del server!
server.kicked.banned = Sei stato bandito da questo server.
server.kicked.typeMismatch = Questo server non è compatibile con il tuo client.
@@ -141,29 +155,30 @@ server.kicked.nameEmpty = Il tuo nome deve contenere almeno un carattere.
server.kicked.idInUse = Sei già su questo server! Non è permesso connettersi con due account.
server.kicked.customClient = Questo server non supporta i client personalizzati. Scarica la versione ufficiale dal sito.
server.kicked.gameover = Game over!
-server.versions = Your version:[accent] {0}[]\nVersione server:[accent] {1}[]
-host.info = Il pulsante [accent]host [] ospita un server sulla porta [scarlet]6567[].[] Chiunque sulla stessa [LIGHT_GRAY]rete wifi o locale[] dovrebbe essere in grado di vedere il server nell'elenco server.\n\n Se vuoi che le persone siano in grado di connettersi ovunque tramite il tuo IP, è richiesto il [accent]port forwarding[]. \n\n[LIGHT_GRAY]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[LIGHT_GRAY]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.
+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.
+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
+invitefriends = Invita Amici
hostserver.mobile = Ospita\nServer
-host = Host
-hosting = [accent] Apertura del server...
+host = Ospita
+hosting = [accent]Apertura del server...
hosts.refresh = Aggiorna
hosts.discovering = Ricerca partite LAN
hosts.discovering.any = Ricerca partite
server.refreshing = Aggiornamento del server
-hosts.none = [lightgray]Nessuna partita LAN trovata!
+hosts.none = [lightgray]Nessuna partita locale trovata!
host.invalid = [scarlet]Impossibile connettersi all'host.
trace = Traccia giocatore
trace.playername = Nome del giocatore: [accent]{0}
trace.ip = IP: [accent]{0}
trace.id = ID univoco: [accent]{0}
-trace.mobile = Mobile Client: [accent]{0}
-trace.modclient = Client personalizzato: [accent]{0}
+trace.mobile = Client Mobile: [accent]{0}
+trace.modclient = Client Personalizzato: [accent]{0}
invalidid = ID client non valido! Segnala un bug.
-server.bans = Lista Ban
-server.bans.none = Nessun giocatore bandito trovato! Finora tutto liscio.
+server.bans = Lista Bans
+server.bans.none = Nessun giocatore bandito trovato!
server.admins = Amministratori
server.admins.none = Nessun amministratore trovato!
server.add = Aggiungi server
@@ -171,8 +186,8 @@ server.delete = Sei sicuro di voler eliminare questo server?
server.edit = Modifica server
server.outdated = [crimson]Server obsoleto![]
server.outdated.client = [crimson]Client obsoleto![]
-server.version = [lightgray]Versione: {0}
-server.custombuild = [yellow] Costruzione personalizzata
+server.version = [gray]v{0} {1}
+server.custombuild = [yellow]Build Personalizzata
confirmban = Sei sicuro di voler bandire questo giocatore?
confirmkick = Sei sicuro di voler espellere questo giocatore?
confirmvotekick = Sei sicuro di voler votare per l'espulsione di questo giocatore?
@@ -180,25 +195,25 @@ confirmunban = Sei sicuro di voler riammettere questo giocatore?
confirmadmin = Sei sicuro di voler rendere questo giocatore un amministratore?
confirmunadmin = Sei sicuro di voler rimuovere lo stato di amministratore da questo giocatore?
joingame.title = Unisciti alla Partita
-joingame.ip = IP:
+joingame.ip = Indirizzo:
disconnect = Disconnesso.
disconnect.error = Errore di connessione.
disconnect.closed = Connessione chiusa.
disconnect.timeout = Timed out.
disconnect.data = Errore durante il caricamento del mondo!
-cantconnect = Impossibile unirsi al server ([accent]{0}[]).
+cantconnect = Impossibile unirsi alla partita ([accent]{0}[]).
connecting = [accent]Connessione in corso...
connecting.data = [accent]Caricamento del mondo...
server.port = Porta:
server.addressinuse = Indirizzo già in uso!
server.invalidport = Numero porta non valido!
-server.error = [crimson]Errore nell'hosting del server: [accent] {0}
+server.error = [crimson]Errore nell'hosting del server.
save.new = Nuovo Salvataggio
save.overwrite = Sei sicuro di voler sovrascrivere questo salvataggio?
overwrite = Sovrascrivi
save.none = Nessun salvataggio trovato!
-saveload = [accent]Salvataggio in corso...
-savefail = [crimson]Salvataggio del gioco non riuscito!
+saveload = Salvataggio in corso...
+savefail = Salvataggio del gioco non riuscito!
save.delete.confirm = Sei sicuro di voler eliminare questo salvataggio?
save.delete = Elimina
save.export = Esporta Salvataggio
@@ -212,14 +227,14 @@ save.rename.text = Nuovo nome:
selectslot = Seleziona un salvataggio.
slot = [accent]Slot {0}
editmessage = Modifica Messaggio
-save.corrupted = [orang]Salvataggio corrotto o non valido!
+save.corrupted = Salvataggio corrotto o non valido!
empty =
on = On
off = Off
save.autosave = Salvataggio Automatico: {0}
save.map = Mappa: {0}
save.wave = Ondata: {0}
-save.mode = Gamemode: {0}
+save.mode = Modalità di Gioco: {0}
save.date = Ultimo Salvataggio: {0}
save.playtime = Tempo di Gioco: {0}
warning = Attenzione
@@ -246,17 +261,17 @@ quit.confirm.tutorial = Sei sicuro di sapere cosa stai facendo? Il tutorial può
loading = [accent]Caricamento in Corso...
reloading = [accent]Ricaricamento delle mods...
saving = [accent]Salvataggio in corso...
-cancelbuilding = [accent][[{0}][] to clear plan
-selectschematic = [accent][[{0}][] to select+copy
+cancelbuilding = [accent][[{0}][] per pulire la selezione
+selectschematic = [accent][[{0}][] per selezionare+copiare
pausebuilding = [accent][[{0}][] to pause building
-resumebuilding = [scarlet][[{0}][] to resume building
+resumebuilding = [scarlet][[{0}][] per riprendere a costruire
wave = [accent]Ondata {0}
-wave.waiting = [LIGHT_GRAY]Ondata tra {0}
-wave.waveInProgress = [LIGHT_GRAY]Ondata in corso...
+wave.waiting = [lightgray]Ondata tra {0}
+wave.waveInProgress = [lightgray]Ondata in corso
waiting = In attesa...
waiting.players = Attendendo giocatori...
-wave.enemies = [LIGHT_GRAY]{0} Nemici Rimasti
-wave.enemy = [LIGHT_GRAY]{0} Nemico Rimasto
+wave.enemies = [lightgray]{0} Nemici Rimasti
+wave.enemy = [lightgray]{0} Nemico Rimasto
loadimage = Carica immagine
saveimage = Salva Immagine
unknown = Sconosciuto
@@ -265,35 +280,36 @@ builtin = Incluso
map.delete.confirm = Sei sicuro di voler eliminare questa mappa? L'operazione è irreversibile!
map.random = [accent]Mappa casuale
map.nospawn = Questa mappa non possiede un Nucleo in cui spawnare! Aggiungine uno nell'editor.
-map.nospawn.pvp = Questa mappa non ha un Nucleo nemico! Aggiungi un [SCARLET]Nucleo rosso[] nell'editor per poter giocare.
-map.nospawn.attack = Questa mappa non ha un Nucleo nemico! Aggiungi un [SCARLET]Nucleo rosso[] nell'editor per poter giocare.
+map.nospawn.pvp = Questa mappa non ha un Nucleo Nemico! Aggiungi dei Nuclei nell'editor per poter giocare.
+map.nospawn.attack = Questa mappa non ha nessun Nucleo Nemico da poter attaccare! Aggiungi dei Nuclei Nemici nell'editor per poter giocare.
map.invalid = Errore nel caricamento della mappa: file mappa corrotto o non valido.
workshop.update = Aggiorna elemento
workshop.error = Errore nel recupero dei dettagli del Workshop: {0}
map.publish.confirm = Vuoi pubblicare questa mappa?\n\n[lightgray]Assicurati di aver accettato il Workshop EULA, o le tue mappe non saranno visibili!
workshop.menu = Seleziona cosa vorresti fare con questo elemento.
-workshop.info = Info elemento
+workshop.info = Info Elemento
changelog = Changelog (opzionale):
eula = Steam EULA
-missing = This item has been deleted or moved.\n[lightgray]The Workshop listing has now been automatically un-linked.
+missing = Questo prodotto è stato eliminato o spostato.\n[lightgray]L'elemento è stato scollegato automaticamente dal Workshop.
publishing = [accent]Pubblicazione...
-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}
-editor.brush = Pennello
-editor.openin = Apri nell'editor
-editor.oregen = Generazione dei minerali
-editor.oregen.info = Generazione dei minerali:
-editor.mapinfo = Informazioni mappa
+publish.confirm = Sei sicuro di volerlo pubblicare?\n\n[lightgray]Assicurati di accettare il contratto EULA del Workshop o i tuoi prodotti non verranno mostrati!
+publish.error = Errore nella pubblicazione del prodotto: {0}
+steam.error = Impossibile inizializzare i servizi di Steam.\nErrore: {0}
+
+editor.brush = Dimensioni Pennello
+editor.openin = Apri nell'Editor
+editor.oregen = Generazione dei Minerali
+editor.oregen.info = Generazione dei Minerali:
+editor.mapinfo = Info Mappa
editor.author = Autore:
editor.description = Descrizione:
editor.nodescription = Una mappa deve avere una descrizione di almeno 4 caratteri per poter essere pubblicata.
editor.waves = Ondate:
editor.rules = Regole:
editor.generation = Generazione:
-editor.ingame = Modifica in gioco
-editor.publish.workshop = Pubblica sul Workshop
-editor.newmap = Nuova mappa
+editor.ingame = Modifica in Gioco
+editor.publish.workshop = Pubblica nel Workshop
+editor.newmap = Nuova Mappa
workshop = Workshop
waves.title = Ondate
waves.remove = Rimuovi
@@ -305,50 +321,50 @@ waves.to = a
waves.boss = Boss
waves.preview = Anteprima
waves.edit = Modifica...
-waves.copy = Copia negli appunti
-waves.load = Carica dagli appunti
-waves.invalid = Onde dagli appunti non valide.
-waves.copied = Onde copiate.
-waves.none = Nessun nemico definiti.\n Nota che le disposizioni di ondate vuote verranno automaticamente rimpiazzate con la disposizione predefinita.
-editor.default = [LIGHT_GRAY]
+waves.copy = Copia negli Appunti
+waves.load = Carica dagli Appunti
+waves.invalid = Ondate dagli appunti non valide.
+waves.copied = Ondate copiate.
+waves.none = Nessun nemico impostato.\nNota che le disposizioni di ondate vuote verranno automaticamente rimpiazzate con la disposizione predefinita.
+editor.default = [lightgray]
details = Dettagli...
edit = Modifica...
editor.name = Nome:
-editor.spawn = Piazza un'unità
-editor.removeunit = Rimuovi un'unità
-editor.teams = Squadre
-editor.errorload = Errore nel caricamento di:\n[accent]{0}
-editor.errorsave = Errore nel salvataggio di:\n[accent]{0}
-editor.errorimage = Quella è un'immagine, non una mappa.\n\nSe vuoi importare una mappa vecchia clicca su "Importa una mappa vecchia" nell'editor.
+editor.spawn = Piazza un'Unità
+editor.removeunit = Rimuovi un'Unità
+editor.teams = Colore Squadre
+editor.errorload = Errore nel caricamento del file.
+editor.errorsave = Errore nel salvataggio del file,
+editor.errorimage = Questa è un'immagine, non una mappa.\n\nSe vuoi importare una mappa vecchia clicca su 'Importa Mappa Vecchia' nell'editor.
editor.errorlegacy = La mappa è troppo vecchia ed usa un formato che non è più supportato.
-editor.errornot = Questo file non è una mappa.
-editor.errorheader = Questo file della mappa è invalido o corrotto.
-editor.errorname = Questa mappa è senza nome.
+editor.errornot = Questo non è un file mappa.
+editor.errorheader = Il file di questa mappa non è valido o è corrotto.
+editor.errorname = Questa mappa è senza nome. Stai cercando di caricare un salvataggio?
editor.update = Aggiorna
editor.randomize = Casualizza
editor.apply = Applica
editor.generate = Genera
editor.resize = Ridimensiona
-editor.loadmap = Carica\nmappa
-editor.savemap = Salva\nla mappa
+editor.loadmap = Carica Mappa
+editor.savemap = Salva Mappa
editor.saved = Salvato!
-editor.save.noname = La tua mappa non ha un nome! Impostane uno nelle informazioni della mappa.
-editor.save.overwrite = La tua mappa sovrascrive quelle incluse! Imposta un nome diverso nelle informazioni della mappa.
+editor.save.noname = La tua mappa non ha un nome! Impostane uno nel menu 'Info Mappa'.
+editor.save.overwrite = La tua mappa sovrascrive quelle incluse! Imposta un nome diverso nel menu 'Info Mappa'.
editor.import.exists = [scarlet]Impossibile importare:[] esiste già una mappa chiamata '{0}' che non può essere sovrascritta!
-editor.import = Importando...
+editor.import = Importa...
editor.importmap = Importa mappa
editor.importmap.description = Importa mappa preesistente
-editor.importfile = Importa file
+editor.importfile = Importa File
editor.importfile.description = Importa un file mappa esterno
-editor.importimage = Importa mappa terreno
-editor.importimage.description = Importa immagine esterna terreno
-editor.export = Esportazione...
+editor.importimage = Importa Mappa Vecchia
+editor.importimage.description = Importa immagine del terreno esterna
+editor.export = Esporta...
editor.exportfile = Esporta file
editor.exportfile.description = Esporta file mappa
-editor.exportimage = Esporta immagine
+editor.exportimage = Esporta Immagine Terreno
editor.exportimage.description = Esporta file immagine mappa
-editor.loadimage = Carica\nimmagine
-editor.saveimage = Salva\nimmagine
+editor.loadimage = Importa\nTerreno
+editor.saveimage = Esporta\nTerreno
editor.unsaved = [scarlet]Alcune modifiche non sono state salvate![]\nSei sicuro di voler uscire?
editor.resizemap = Ridimensiona la mappa
editor.mapname = Nome Mappa:
@@ -359,30 +375,30 @@ editor.selectmap = Seleziona una mappa da caricare:
toolmode.replace = Sostituire
toolmode.replace.description = Disegna solo su blocchi solidi.
-toolmode.replaceall = Sostituisci tutto
-toolmode.replaceall.description = Rimpiazza tutti i blocchi nella mappa
+toolmode.replaceall = Sostituisci Tutto
+toolmode.replaceall.description = Rimpiazza tutti i blocchi nella mappa.
toolmode.orthogonal = Ortogonale
-toolmode.orthogonal.description = Disegna solo linee ortogonali
+toolmode.orthogonal.description = Disegna solo linee ortogonali.
toolmode.square = Quadrato
-toolmode.square.description = Pennello quadrato
+toolmode.square.description = Pennello quadrato.
toolmode.eraseores = Rimuovi Minerali
-toolmode.eraseores.description = Rimuove solo minerali
+toolmode.eraseores.description = Rimuove solo minerali.
toolmode.fillteams = Riempi Squadre
-toolmode.fillteams.description = Riempe squadre al posto di blocchi
+toolmode.fillteams.description = Riempe squadre al posto di blocchi.
toolmode.drawteams = Disegna Squadre
-toolmode.drawteams.description = Disegna squadre al posto di blocchi
+toolmode.drawteams.description = Disegna squadre al posto di blocchi.
-filters.empty = [LIGHT_GRAY]Nessun filtro! Aggiungine uno cliccando il tasto sotto.
+filters.empty = [lightgray]Nessun filtro! Aggiungine uno cliccando il tasto sotto.
filter.distort = Modifica
filter.noise = Interferenza
filter.median = Mediana
filter.oremedian = Mediana Minerali
filter.blend = Miscela
-filter.defaultores = Minerali predefiniti
-filter.ore = Minerali
-filter.rivernoise = Interferenze a fiume
+filter.defaultores = Minerali Predefiniti
+filter.ore = Minerale
+filter.rivernoise = Interferenze Fiume
filter.mirror = Rifletti
-filter.clear = Resetta il filtro
+filter.clear = Resetta Filtro
filter.option.ignore = Ignora
filter.scatter = Dispersione
filter.terrain = Terreno
@@ -390,17 +406,17 @@ filter.option.scale = Scala
filter.option.chance = Probabilità
filter.option.mag = Magnitudine
filter.option.threshold = Soglia
-filter.option.circle-scale = Modifica grandezza cerchio
+filter.option.circle-scale = Modifica Diametro Cerchio
filter.option.octaves = Ottavi
filter.option.falloff = Cadere
filter.option.angle = Angolo
filter.option.block = Blocco
-filter.option.floor = Pavimento
-filter.option.flooronto = Pavimento mirato
+filter.option.floor = Terreno
+filter.option.flooronto = Terreno Mirato
filter.option.wall = Muro
filter.option.ore = Minerale
-filter.option.floor2 = Pavimento secondario
-filter.option.threshold2 = Soglia secondaria
+filter.option.floor2 = Terreno Secondario
+filter.option.threshold2 = Soglia Secondaria
filter.option.radius = Raggio
filter.option.percentile = Percentuale
@@ -423,44 +439,44 @@ mapeditor = Editor Mappe
abandon = Abbandona
abandon.text = Questa zona e tutte le tue risorse saranno perdute e passeranno al nemico.
locked = Bloccato
-complete = [LIGHT_GRAY]Completato:
+complete = [lightgray]Completato:
requirement.wave = Raggiungi onda {0} in {1}
-requirement.core = Distruggi il Nucleo nemico in {0}
+requirement.core = Distruggi il Nucleo Nemico in {0}
requirement.unlock = Sblocca {0}
-resume = Riprendi Zona:\n[LIGHT_GRAY]{0}
-bestwave = [LIGHT_GRAY]Ondata migliore: {0}
+resume = Riprendi Zona:\n[lightgray]{0}
+bestwave = [lightgray]Ondata Migliore: {0}
launch = < DECOLLARE >
-launch.title = Decollo riuscito!
-launch.next = [LIGHT_GRAY]nuova opportunità all'ondata {0}
+launch.title = Decollo Riuscito!
+launch.next = [lightgray]nuova opportunità all'ondata {0}
launch.unable2 = [scarlet]IMPOSSIBILE DECOLLARE![]
launch.confirm = Questo trasporterà tutte le risorse nel tuo Nucleo.\nNon riuscirai a ritornare in questa base.
launch.skip.confirm = Se salti adesso non riuscirai a decollare fino alle ondate successive
uncover = Scopri
-configure = Configura l'equipaggiamento
-bannedblocks = Blocchi banditi
-addall = Aggiungi tutti
-configure.locked = [LIGHT_GRAY]Arriva all'ondata {0}\nper configurare l'equipaggiamento.
+configure = Configura Equipaggiamento
+bannedblocks = Blocchi Banditi
+addall = Aggiungi Tutti
+configure.locked = [lightgray]Arriva all'ondata {0}\nper configurare l'equipaggiamento.
configure.invalid = Il valore dev'essere un numero compresto tra 0 e {0}.
-zone.unlocked = [LIGHT_GRAY]{0} sbloccata.
-zone.requirement.complete = Ondata {0} raggiunta:\n{1} requisiti di zona soddisfatti.
+zone.unlocked = [lightgray]{0} sbloccata.
+zone.requirement.complete = Ondata {0} raggiunta:\n[lightgray]{1}[] requisiti di zona soddisfatti.
zone.config.unlocked = Equipaggiamento sbloccato:[lightgray]\n{0}
-zone.resources = Risorse Trovate:
+zone.resources = [lightgray]Risorse Trovate:
zone.objective = [lightgray]Obiettivo: [accent]{0}
zone.objective.survival = Sopravvivere
zone.objective.attack = Distruggere il Nucleo Nemico
add = Aggiungi...
boss.health = Vita del Boss
-connectfail = [crimson] Impossibile connettersi al server: [accent] {0}
+connectfail = [crimson]Impossibile connettersi al server:\n\n[accent] {0}
error.unreachable = Server irraggiungibile. L'indirizzo è scritto correttamente?
-error.invalidaddress = Indirizzo invalido.
-error.timedout = Timeout!\n Assicurati che l'host abbia il port forwarding impostato e che l'indirizzo sia corretto!
-error.mismatch = Errore pacchetti:\nPossibile discordanza della versione client / server.\n Assicurati che tu e l'host possiediate l'ultima versione di Mindustry!
+error.invalidaddress = Indirizzo non valido.
+error.timedout = Timeout!\nAssicurati che l'host abbia il port forwarding impostato e che l'indirizzo sia corretto!
+error.mismatch = Errore dei pacchetti:\nPossibile discordanza della versione client/server.\nAssicurati che tu e l'host possiediate l'ultima versione di Mindustry!
error.alreadyconnected = Già connesso.
-error.mapnotfound = Mappa non trovata
+error.mapnotfound = Mappa non trovata!
error.io = Errore I/O di rete.
error.any = Errore di rete sconosciuto.
-error.bloom = Errore dell'avvio del bloom.\nIl tuo dispositivo potrebbe non supportarlo.
+error.bloom = Errore dell'avvio delle shaders.\nIl tuo dispositivo potrebbe non supportarle.
zone.groundZero.name = Terreno Zero
zone.desertWastes.name = Rifiuti Desertici
@@ -478,7 +494,7 @@ zone.crags.name = Dirupi
zone.fungalPass.name = Passaggio Fungoso
zone.groundZero.description = La posizione ottimale per cominciare. Bassa minaccia nemica. Poche risorse.\nRaccogli quanto più piombo e rame possibile.\nProcedi.
-zone.frozenForest.description = Anche qui, più vicino alle montagne, le spore si sono diffuse. Le temperature rigide non possono contenerle per sempre.\n Inizia la scoperta dell'energia. Costruisci generatori a combustione. Impara a usare i riparatori.
+zone.frozenForest.description = Anche qui, più vicino alle montagne, le spore si sono diffuse. Le temperature rigide non possono contenerle per sempre.\nInizia la scoperta dell'energia. Costruisci generatori a combustione. Impara a usare i riparatori.
zone.desertWastes.description = Questi rifiuti sono vasti, imprevedibili ed attraversati da strutture settoriali abbandonate.\n\nIl carbone è presente nella regione. Bruciatelo per ottenere energia o sintetizzate la grafite.\n\n[lightgray]Questa posizione di atterraggio non può essere garantita.
zone.saltFlats.description = Alle periferie del deserto si trovano le saline. Poche risorse possono essere trovate in questa posizione.\n\nIl nemico ha eretto un complesso di archiviazione delle risorse qui. Sradicare il loro Nucleo. Non lasciare nulla in piedi.
zone.craters.description = L'acqua si è accumulata in questo cratere, reliquia delle vecchie guerre. Recupera l'area. Raccogli la sabbia. Fondi il vetro metallico. Pompa l'acqua per raffreddare torrette e trivelle.
@@ -487,20 +503,21 @@ zone.stainedMountains.description = Più nell'entroterra si trovano le montagne,
zone.overgrowth.description = Quest'area è invasa, più vicina alla fonte delle spore.\nIl nemico ha stabilito qui un avamposto. Costruisci unità col pugnale. Distruggilo. Riprenditi ciò che è stato perso.
zone.tarFields.description = La periferia di una zona di produzione di petrolio, tra le montagne e il deserto. Una delle poche aree con riserve di catrame utilizzabili.\nAnche se abbandonata, questa zona ha alcune pericolose forze nemiche nelle vicinanze. Non sottovalutarlo.\n\n[lightgray]Ricerca la tecnologia di lavorazione del petrolio, se possibile.
zone.desolateRift.description = Una zona estremamente pericolosa. Risorse abbondanti, ma poco spazio. Alto rischio di distruzione. Lascia il prima possibile. Non lasciarti ingannare dalla lunga distanza tra gli attacchi nemici.
-zone.nuclearComplex.description = Un ex impianto per la produzione e la lavorazione del torio, ridotto in rovina.\n[lightgray] Ricerca il torio ed i suoi numerosi usi.\n\nIl nemico è presente qui in gran numero, alla costante ricerca di aggressori.
+zone.nuclearComplex.description = Un ex impianto per la produzione e la lavorazione del torio, ridotto in rovina.\n[lightgray]Ricerca il torio ed i suoi numerosi usi.\n\nIl nemico è presente qui in gran numero, alla costante ricerca di aggressori.
zone.fungalPass.description = Un'area di transizione tra alte montagne e terre più basse, piene di spore. Qui si trova una piccola base di ricognizione nemica.\nDistruggila.\nUsa le unità Pugnale e Strisciatore. Elimina i due nuclei.
zone.impact0078.description =
zone.crags.description =
settings.language = Lingua
-settings.data = Importa/Esporta salvataggio
+settings.data = Dati di Gioco
settings.reset = Ripristina Impostazioni
settings.rebind = Modifica
+settings.resetKey = Ripristina
settings.controls = Controlli
settings.game = Gioco
settings.sound = Suoni
settings.graphics = Grafica
-settings.cleardata = Elimina Dati di Gioco...
+settings.cleardata = Elimina Dati di Gioco
settings.clear.confirm = Sei sicuro di voler cancellare i dati?\nQuesta operazione non può essere annullata!
settings.clearall.confirm = [scarlet]ATTENZIONE![]\nQuesto cancellerà tutti i dati, inclusi salvataggi, mappe, oggetti sbloccati ed impostazioni.\nDopo aver premuto su 'ok' il gioco eliminerà i dati e si chiuderà automaticamente.
paused = [accent]< In Pausa >
@@ -513,8 +530,8 @@ error.title = [crimson]Si è verificato un errore
error.crashtitle = Si è verificato un errore
blocks.input = Ingresso
blocks.output = Uscita
-blocks.booster = Booster
-block.unknown = [LIGHT_GRAY]???
+blocks.booster = Potenziamenti
+block.unknown = [lightgray]???
blocks.powercapacity = Capacità Energetica
blocks.powershot = Danno/Colpo
blocks.damage = Danno
@@ -523,7 +540,7 @@ blocks.targetsground = Attacca Nemici Terreni
blocks.itemsmoved = Velocità di Movimento
blocks.launchtime = Tempo fra Decolli
blocks.shootrange = Raggio
-blocks.size = Grandezza
+blocks.size = Dimensioni
blocks.liquidcapacity = Capacità del Liquido
blocks.powerrange = Raggio Energia
blocks.powerconnections = Connessioni Massime
@@ -551,7 +568,7 @@ bar.drilltierreq = Miglior Trivella Richiesta
bar.drillspeed = Velocità Scavo: {0}/s
bar.pumpspeed = Velocità di Pompaggio: {0}/s
bar.efficiency = Efficienza: {0}%
-bar.powerbalance = Energia: {0}
+bar.powerbalance = Energia: {0}/s
bar.powerstored = Immagazzinata: {0}/{1}
bar.poweramount = Energia: {0}
bar.poweroutput = Energia in Uscita: {0}
@@ -560,7 +577,7 @@ bar.capacity = Capacità: {0}
bar.liquid = Liquido
bar.heat = Calore
bar.power = Energia
-bar.progress = Progresso della Costruzione
+bar.progress = Progresso Costruzione
bar.spawned = Unità: {0}/{1}
bar.input = Entrata
bar.output = Uscita
@@ -578,14 +595,14 @@ bullet.multiplier = [stat]{0}[lightgray]x moltiplicatore munizioni
bullet.reload = [stat]{0}[lightgray]x ricarica
unit.blocks = blocchi
-unit.powersecond = unità energia/secondo
-unit.liquidsecond = unità liquide/secondo
-unit.itemssecond = oggetti/secondo
+unit.powersecond = unità energia/s
+unit.liquidsecond = unità liquide/s
+unit.itemssecond = oggetti/s
unit.liquidunits = unità liquidi
unit.powerunits = unità energia
unit.degrees = gradi
unit.seconds = secondi
-unit.persecond = /sec
+unit.persecond = /s
unit.timesspeed = x velocità
unit.percent = %
unit.items = oggetti
@@ -603,10 +620,10 @@ setting.shadows.name = Ombre
setting.blockreplace.name = Suggerimento Blocchi Automatico
setting.linear.name = Filtro Lineare
setting.hints.name = Suggerimenti
-setting.buildautopause.name = Auto-Pause Building
+setting.buildautopause.name = Pausa automatica nella costruzione
setting.animatedwater.name = Acqua Animata
setting.animatedshields.name = Scudi Animati
-setting.antialias.name = Antialias[LIGHT_GRAY] (richiede riavvio)[]
+setting.antialias.name = Antialias[lightgray] (richiede riavvio)[]
setting.indicators.name = Indicatori Alleati/Nemici
setting.autotarget.name = Mira Automatica
setting.keyboard.name = Tastiera
@@ -626,37 +643,39 @@ setting.screenshake.name = Movimento dello Schermo
setting.effects.name = Visualizza Effetti
setting.destroyedblocks.name = Mostra Blocchi Distrutti
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Consenti Schematiche dei Nuclei
setting.sensitivity.name = Sensibilità del Controller
setting.saveinterval.name = Intervallo di Salvataggio Automatico
+setting.seconds = {0} secondi
setting.blockselecttimeout.name = Tempo di Selezione del Blocco
setting.milliseconds = {0} millisecondi
-setting.seconds = {0} secondi
setting.fullscreen.name = Schermo Intero
-setting.borderlesswindow.name = Finestra Senza Bordi[LIGHT_GRAY] (potrebbe richiedere riavvio)
+setting.borderlesswindow.name = Finestra Senza Bordi[lightgray] (potrebbe richiedere riavvio)
setting.fps.name = Mostra FPS e Ping
setting.blockselectkeys.name = Mostra Tasto di Selezione del Blocco
setting.vsync.name = VSync
-setting.pixelate.name = Effetto Pixel [LIGHT_GRAY](potrebbe ridure le prestazioni)
+setting.pixelate.name = Effetto Pixel [lightgray](potrebbe ridure le prestazioni)
setting.minimap.name = Mostra Minimappa
setting.position.name = Mostra Posizione Giocatori
setting.musicvol.name = Volume Musica
setting.ambientvol.name = Volume Ambiente
setting.mutemusic.name = Silenzia Musica
setting.sfxvol.name = Volume Effetti
-setting.mutesound.name = Togli Suoni
+setting.mutesound.name = Silenzia Suoni
setting.crashreport.name = Invia rapporti anonimi sugli arresti anomali
-setting.savecreate.name = Autosalvataggio
+setting.savecreate.name = Salvataggio Automatico
setting.publichost.name = Gioco Visibile Pubblicamente
setting.chatopacity.name = Opacità Chat
-setting.lasersopacity.name = Opacità Laser d'Energia
+setting.lasersopacity.name = Opacità Raggi Energetici
+setting.bridgeopacity.name = Opacità Nastri e Condotti Sopraelevati
setting.playerchat.name = Mostra Chat in-game
-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 = La scala dell'interfaccia utente è stata modificata.\nPremere "OK" per confermare questa scala.\n[scarlet] Ripristina ed esci in [accent] {0}[] secondi...
+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...
uiscale.cancel = Annulla ed Esci
setting.bloom.name = Shaders
keybind.title = Configurazione Tasti
-keybinds.mobile = [scarlet]La maggior parte dei keybind qui non sono funzionali sui dispositivi mobili. È supportato solo il movimento di base.
+keybinds.mobile = [scarlet]La maggior parte dei controlli qui non sono funzionano sui dispositivi mobili. È supportato solo il movimento di base.
category.general.name = Generale
category.view.name = Visualizzazione
category.multiplayer.name = Multigiocatore
@@ -668,6 +687,7 @@ keybind.clear_building.name = Pulisci Costruzione
keybind.press = Premi un tasto...
keybind.press.axis = Premi un'asse o un tasto...
keybind.screenshot.name = Screenshot della Mappa
+keybind.toggle_power_lines.name = Attiva/Disattiva Laser d'Energia
keybind.move_x.name = Muovi Orizzontalmente
keybind.move_y.name = Muovi Verticalmente
keybind.mouse_move.name = Segui il Mouse
@@ -675,23 +695,23 @@ keybind.dash.name = Scatto
keybind.schematic_select.name = Seleziona Regione
keybind.schematic_menu.name = Menu Schematica
keybind.schematic_flip_x.name = Ruota Schematica Orizzontalmente
-keybind.schematic_flip_y.name = Flip Schematic Verticalmente
+keybind.schematic_flip_y.name = Ruota Schematica Verticalmente
keybind.category_prev.name = Categoria Precedente
keybind.category_next.name = Categoria Successiva
keybind.block_select_left.name = Seleziona Blocco Sinistra
keybind.block_select_right.name = Seleziona Blocco Destra
keybind.block_select_up.name = Seleziona Blocco Su
keybind.block_select_down.name = Seleziona Blocco Giù
-keybind.block_select_01.name = Categoria/Seleziona Blocco 1
-keybind.block_select_02.name = Categoria/Seleziona Blocco 2
-keybind.block_select_03.name = Categoria/Seleziona Blocco 3
-keybind.block_select_04.name = Categoria/Seleziona Blocco 4
-keybind.block_select_05.name = Categoria/Seleziona Blocco 5
-keybind.block_select_06.name = Categoria/Seleziona Blocco 6
-keybind.block_select_07.name = Categoria/Seleziona Blocco 7
-keybind.block_select_08.name = Categoria/Seleziona Blocco 8
-keybind.block_select_09.name = Categoria/Seleziona Blocco 9
-keybind.block_select_10.name = Categoria/Seleziona Blocco 10
+keybind.block_select_01.name = Seleziona Categoria/Blocco 1
+keybind.block_select_02.name = Seleziona Categoria/Blocco 2
+keybind.block_select_03.name = Seleziona Categoria/Blocco 3
+keybind.block_select_04.name = Seleziona Categoria/Blocco 4
+keybind.block_select_05.name = Seleziona Categoria/Blocco 5
+keybind.block_select_06.name = Seleziona Categoria/Blocco 6
+keybind.block_select_07.name = Seleziona Categoria/Blocco 7
+keybind.block_select_08.name = Seleziona Categoria/Blocco 8
+keybind.block_select_09.name = Seleziona Categoria/Blocco 9
+keybind.block_select_10.name = Seleziona Categoria/Blocco 10
keybind.fullscreen.name = Schermo Intero
keybind.select.name = Seleziona/Spara
keybind.diagonal_placement.name = Posizionamento Diagonale
@@ -699,7 +719,7 @@ keybind.pick.name = Scegli Blocco
keybind.break_block.name = Rompi Blocco
keybind.deselect.name = Deseleziona
keybind.shoot.name = Spara
-keybind.zoom.name = Esegui Zoom
+keybind.zoom.name = Zoom
keybind.menu.name = Menu
keybind.pause.name = Pausa
keybind.pause_building.name = Pausa/Riprendi Costruzione
@@ -708,14 +728,13 @@ keybind.chat.name = Chat
keybind.player_list.name = Lista dei Giocatori
keybind.console.name = Console
keybind.rotate.name = Ruota
-keybind.rotateplaced.name = Ruota Blocco Esistente (Premuto)
-keybind.toggle_menus.name = Mostra/Nascondi HUD
-keybind.chat_history_prev.name = Scorri Chat vero l'alto
+keybind.rotateplaced.name = Ruota Blocco Esistente (premuto)
+keybind.toggle_menus.name = Mostra/Nascondi Menu
+keybind.chat_history_prev.name = Scorri Chat vero l'alto
keybind.chat_history_next.name = Scorri Chat verso il basso
keybind.chat_scroll.name = Scorri Chat
keybind.drop_unit.name = Lascia Materiali
keybind.zoom_minimap.name = Esegui Zoom Minimappa
-keybind.toggle_power_lines.name = Attiva/Disattiva Laser d'Energia
mode.help.title = Descrizione delle Modalità
mode.survival.name = Sopravvivenza
mode.survival.description = Modalità normale. Risorse limitate ed ondate in entrata automatiche.
@@ -725,10 +744,10 @@ mode.editor.name = Editor
mode.pvp.name = PvP
mode.pvp.description = Lotta contro altri giocatori.
mode.attack.name = Schermaglia
-mode.attack.description = Obiettivo: Distruggere la base nemica, non ci sono ondate.
+mode.attack.description = Distruggi la base nemica. \n[gray]Richiede un Nucleo rosso nella mappa per essere giocata.
mode.custom = Regole Personalizzate
-rules.infiniteresources = Risorse infinite
+rules.infiniteresources = Risorse Infinite
rules.reactorexplosions = Esplosioni Reattore
rules.wavetimer = Timer Ondate
rules.waves = Ondate
@@ -737,27 +756,28 @@ rules.enemyCheat = Risorse AI Infinite
rules.unitdrops = Generazione Unità
rules.unitbuildspeedmultiplier = Moltiplicatore Velocità Costruzione Unità
rules.unithealthmultiplier = Moltiplicatore Vita Unità
+rules.blockhealthmultiplier = Moltiplicatore Danno Blocco
rules.playerhealthmultiplier = Moltiplicatore Vita Giocatore
rules.playerdamagemultiplier = Moltiplicatore Danno Giocatore
rules.unitdamagemultiplier = Moltiplicatore Danno Unità
-rules.enemycorebuildradius = Raggio di Protezione del Nucleo Nemico dalle Costruzioni:[LIGHT_GRAY] (tiles)
-rules.respawntime = Tempo di rigeneratione:[LIGHT_GRAY] (sec)
-rules.wavespacing = Tempo fra Ondate:[LIGHT_GRAY] (secondi)
+rules.enemycorebuildradius = Raggio di protezione del Nucleo Nemico dalle costruzioni:[lightgray] (blocchi)
+rules.respawntime = Tempo di Rigeneratione:[lightgray] (secondi)
+rules.wavespacing = Tempo fra Ondate:[lightgray] (secondi)
rules.buildcostmultiplier = Moltiplicatore Costo Costruzione
rules.buildspeedmultiplier = Moltiplicatore Velocità Costruzione
-rules.waitForWaveToEnd = Ondate aspettano fino a quando l'ondata precedente finisce
-rules.dropzoneradius = Raggio di Generazione:[LIGHT_GRAY] (blocchi)
+rules.waitForWaveToEnd = Le ondate aspettano fino a quando l'ondata precedente finisce
+rules.dropzoneradius = Raggio di Generazione:[lightgray] (blocchi)
rules.respawns = Rigenerazioni per ondata max
-rules.limitedRespawns = Limite rigenerazioni
+rules.limitedRespawns = Limite Rigenerazioni
rules.title.waves = Ondate
rules.title.respawns = Rigenerazioni
-rules.title.resourcesbuilding = Risorse e costruzioni
+rules.title.resourcesbuilding = Risorse e Costruzioni
rules.title.player = Giocatori
rules.title.enemy = Nemici
rules.title.unit = Unità
rules.title.experimental = Sperimentale
rules.lighting = Illuminazione
-rules.ambientlight = Illuminazione Ambientale
+rules.ambientlight = Illuminazione\nAmbientale
content.item.name = Oggetti
content.liquid.name = Liquidi
@@ -806,33 +826,33 @@ mech.trident-ship.weapon = Valle delle Bombe
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Ripetitore di Fiamma
item.corestorable = [lightgray]Immagazzinabili nel Nucleo: {0}
-item.explosiveness = [LIGHT_GRAY]Esplosività: {0}
-item.flammability = [LIGHT_GRAY]Infiammabilità: {0}
-item.radioactivity = [LIGHT_GRAY]Radioattività: {0}
-unit.health = [LIGHT_GRAY]Salute: {0}
-unit.speed = [LIGHT_GRAY]Velocità: {0}
-mech.weapon = [LIGHT_GRAY]Armi: {0}
-mech.health = [LIGHT_GRAY]Salute: {0}
-mech.itemcapacity = [LIGHT_GRAY]Capacità Oggetti: {0}
-mech.minespeed = [LIGHT_GRAY]Velocità di Scavo: {0}
-mech.minepower = [LIGHT_GRAY]Potenza di Scavo: {0}
-mech.ability = [LIGHT_GRAY]Abilità: {0}
-mech.buildspeed = [LIGHT_GRAY]Velocità di Costruzione: {0}%
-liquid.heatcapacity = [LIGHT_GRAY]Capacità Termica: {0}
-liquid.viscosity = [LIGHT_GRAY]Viscosità: {0}
-liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
+item.explosiveness = [lightgray]Esplosività: {0}
+item.flammability = [lightgray]Infiammabilità: {0}
+item.radioactivity = [lightgray]Radioattività: {0}
+unit.health = [lightgray]Salute: {0}
+unit.speed = [lightgray]Velocità: {0}
+mech.weapon = [lightgray]Armi: {0}
+mech.health = [lightgray]Salute: {0}
+mech.itemcapacity = [lightgray]Capacità Oggetti: {0}
+mech.minespeed = [lightgray]Velocità di Scavo: {0}
+mech.minepower = [lightgray]Potenza di Scavo: {0}
+mech.ability = [lightgray]Abilità: {0}
+mech.buildspeed = [lightgray]Velocità di Costruzione: {0}%
+liquid.heatcapacity = [lightgray]Capacità Termica: {0}
+liquid.viscosity = [lightgray]Viscosità: {0}
+liquid.temperature = [lightgray]Temperatura: {0}
block.sand-boulder.name = Masso di Sabbia
block.grass.name = Erba
block.salt.name = Sale
-block.saltrocks.name = Rocce salate
+block.saltrocks.name = Rocce Salate
block.pebbles.name = Ciottoli
block.tendrils.name = Viticci
block.sandrocks.name = Rocce Sabbiose
block.spore-pine.name = Pino di Spore
block.sporerocks.name = Roccia di Spore
-block.rock.name = Roccia
-block.snowrock.name = Roccia Innevata
+block.rock.name = Masso
+block.snowrock.name = Masso Innevato
block.snow-pine.name = Pino Innevato
block.shale.name = Scisto
block.shale-boulder.name = Masso di Scisto
@@ -848,7 +868,7 @@ block.thruster.name = Propulsore
block.kiln.name = Forno
block.graphite-press.name = Pressa per Grafite
block.multi-press.name = Multi Pressa
-block.constructing = {0}\n[LIGHT_GRAY](In Costruzione)
+block.constructing = {0}\n[lightgray](In Costruzione)
block.spawn.name = Spawn Nemico
block.core-shard.name = Nucleo: Frammento
block.core-foundation.name = Nucleo: Fondamento
@@ -865,7 +885,7 @@ block.ice.name = Ghiaccio
block.snow.name = Neve
block.craters.name = Crateri
block.sand-water.name = Acqua Sabbiosa
-block.darksand-water.name = Acqua Sabbiosa scura
+block.darksand-water.name = Acqua Sabbiosa Scura
block.char.name = Carbone
block.holostone.name = Pietra Holo
block.ice-snow.name = Neve Ghiacciata
@@ -877,32 +897,32 @@ block.pine.name = Pino
block.white-tree-dead.name = Albero Bianco Morto
block.white-tree.name = Albero Morto
block.spore-cluster.name = Agglomerato di Spore
-block.metal-floor.name = Pavimento Metallico
+block.metal-floor.name = Pavimento Metallico 1
block.metal-floor-2.name = Pavimento Metallico 2
block.metal-floor-3.name = Pavimento Metallico 3
block.metal-floor-5.name = Pavimento Metallico 4
block.metal-floor-damaged.name = Pavimento Metallico Danneggiato
-block.dark-panel-1.name = Pannello scuro 1
-block.dark-panel-2.name = Pannello scuro 2
-block.dark-panel-3.name = Pannello scuro 3
-block.dark-panel-4.name = Pannello scuro 4
-block.dark-panel-5.name = Pannello scuro 5
-block.dark-panel-6.name = Pannello scuro 6
+block.dark-panel-1.name = Pannello Scuro 1
+block.dark-panel-2.name = Pannello Scuro 2
+block.dark-panel-3.name = Pannello Scuro 3
+block.dark-panel-4.name = Pannello Scuro 4
+block.dark-panel-5.name = Pannello Scuro 5
+block.dark-panel-6.name = Pannello Scuro 6
block.dark-metal.name = Metallo Scuro
block.ignarock.name = Roccia Ignea
block.hotrock.name = Roccia Bollente
block.magmarock.name = Roccia Magmatica
block.cliffs.name = Scogliere
block.copper-wall.name = Muro di Rame
-block.copper-wall-large.name = Muro Grande di Rame
+block.copper-wall-large.name = Muro di Rame Grande
block.titanium-wall.name = Muro di Titanio
-block.titanium-wall-large.name = Muro Grande di Titanio
+block.titanium-wall-large.name = Muro di Titanio Grande
block.plastanium-wall.name = Muro di Plastanio
-block.plastanium-wall-large.name = Muro Grande di Plastanio
+block.plastanium-wall-large.name = Muro di Plastanio Grande
block.phase-wall.name = Muro di Fase
-block.phase-wall-large.name = Muro Grande di Fase
+block.phase-wall-large.name = Muro di Fase Grande
block.thorium-wall.name = Muro di Torio
-block.thorium-wall-large.name = Muro Grande di Torio
+block.thorium-wall-large.name = Muro di Torio Grande
block.door.name = Porta
block.door-large.name = Porta Grande
block.duo.name = Torretta Duo
@@ -945,7 +965,7 @@ block.impact-reactor.name = Reattore ad Impatto
block.mechanical-drill.name = Trivella Meccanica
block.pneumatic-drill.name = Trivella Pneumatica
block.laser-drill.name = Trivella Laser
-block.water-extractor.name = Estrattore d'acqua
+block.water-extractor.name = Estrattore d'Acqua
block.cultivator.name = Coltivatore
block.dart-mech-pad.name = Piattaforma del Mech Dardo
block.delta-mech-pad.name = Piattaforma del Mech Delta
@@ -959,6 +979,7 @@ block.mechanical-pump.name = Pompa Meccanica
block.item-source.name = Fonte Infinita (oggetti)
block.item-void.name = Cestino (oggetti)
block.liquid-source.name = Fonte Infinita (liquidi)
+block.liquid-void.name = Cestino (liquidi)
block.power-void.name = Cestino (energia)
block.power-source.name = Fonte Infinita (energia)
block.unloader.name = Scaricatore
@@ -987,12 +1008,13 @@ block.titan-factory.name = Fabbrica Mech Titano
block.fortress-factory.name = Fabbrica Mech Fortezza
block.revenant-factory.name = Fabbrica Combattenti Superstiti
block.repair-point.name = Punto di Riparazione
-block.pulse-conduit.name = Condotto Attiva
-block.phase-conduit.name = Condotta di Fase
+block.pulse-conduit.name = Condotto a Impulsi
+block.plated-conduit.name = Condotto Placcato
+block.phase-conduit.name = Condotto di Fase
block.liquid-router.name = Distributore di Liquidi
block.liquid-tank.name = Serbatoio
block.liquid-junction.name = Giunzione Liquida
-block.bridge-conduit.name = Condotta Sopraelevata
+block.bridge-conduit.name = Condotto Sopraelevato
block.rotary-pump.name = Pompa a Turbina
block.thorium-reactor.name = Reattore al Torio
block.mass-driver.name = Lancia Materiali
@@ -1039,31 +1061,31 @@ unit.eradicator.name = Estirpatore
unit.lich.name = Lich
unit.reaper.name = Mietitore
tutorial.next = [lightgray]
-tutorial.intro = Sei entrato nel[scarlet] Tutorial di Mindustry.[]\nInizia[accent] scavando rame[]. Clicca un minerale di rame vicino al tuo Nucleo per farlo.\n\n[accent]{0}/{1} rame
-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.drill = Ora crea una trivella.\n[accent]Le trivelle []scavano da sole e sono più efficienti. Piazzane una su un minerale di rame.
-tutorial.drill.mobile = Ora crea una trivella. \n[accent] Le trivelle []scavano da sole e sono più efficienti. \n Toccare la scheda della trivella in basso a destra. \n Selezionare la trivella meccanica [accent] []. \n Posizionarlo su una vena di rame toccando, quindi premere il segno di spunta [accent] [] in basso per confermare la selezione. \n Premere il tasto X [accent] [] per annullare il posizionamento.
-tutorial.blockinfo = Ogni blocco ha statistiche diverse. Alcuni minerali richiedono trivelle specifiche.\nPer controllare le informazioni e le statistiche di un blocco, [accent] tocca "?" mentre lo selezioni nel database. []\n\n[accent]Accedi ora alle statistiche della trivella meccanica. []
-tutorial.conveyor = [accent]I nastri trasportatori []sono usati per trasportare oggetti al Nucleo. \nCrea una linea di nastri dalla trivella al Nucleo.
-tutorial.conveyor.mobile = [accent] I nastri trasportatori [] sono usati per trasportare oggetti nel nocciolo. \nCrea una linea di nastri trasportatori dalla trivella al nocciolo. \n[accent] Posizionati in una linea tenendo premuto il dito per alcuni secondi [] e trascinando in una direzione. \n\n [accent] {0} / {1} nastri trasportatori disposti in linea \n [accent] 0/1 oggetti consegnati
-tutorial.turret = Costruisci delle torrette per respingere il nemico [LIGHT_GRAY] []. \nCostruisci una torretta Duo vicino alla tua base.
+tutorial.intro = Sei entrato nel[scarlet] Tutorial di Mindustry.[]\nUsa[accent] [[WASD][] per muoverti.\n[accent]Scorri[] per eseguire lo zoom.\nInizia[accent] minando il rame[]. Per farlo, posizionati sulla vena di rame vicina al tuo Nucleo e clicca su di essa.\n\n[accent]{0}/{1} rame
+tutorial.intro.mobile = Sei entrato nel[scarlet] Tutorial di Mindustry.[]\nScorri sullo schermo per muoverti.\n[accent]Avvicina due dita[] per eseguire lo zoom in/out.\nInizia [accent] scavando del rame[]. Clicca un minerale di rame vicino al tuo Nucleo per farlo.\n\n[accent]{0}/{1} rame
+tutorial.drill = Ora crea una trivella.\n[accent]Le trivelle[] scavano da sole e sono più efficienti. Piazzane una su un minerale di rame.
+tutorial.drill.mobile = Ora crea una trivella.\n[accent]Le trivelle[] scavano da sole e sono più efficienti.\nTocca la scheda della trivella in basso a destra.\nSeleziona la [accent]Trivella Meccanica[].\nPiazzala su una vena di rame toccando, quindi premi il [accent]segno di spunta[] in basso per confermare la selezione.\nCon il tasto [accent]X[] puoi annullare il posizionamento.
+tutorial.blockinfo = Ogni blocco ha statistiche diverse. Alcuni minerali richiedono trivelle specifiche.\nPer controllare le informazioni e le statistiche di un blocco, [accent] tocca "?" mentre lo selezioni nel database.[]\n\n[accent]Accedi ora alle statistiche della trivella meccanica.[]
+tutorial.conveyor = [accent]I nastri trasportatori []sono usati per trasportare oggetti al Nucleo.\nCrea una linea di nastri dalla trivella al Nucleo.
+tutorial.conveyor.mobile = [accent]I nastri trasportatori[] sono usati per trasportare oggetti nel Nucleo.\nCrea una linea di nastri trasportatori dalla trivella al Nucleo.\n[accent]Piazzali in linea tenendo premuto per qualche secondo e trascinando il dito in una direzione.\n\n[accent]Piazza 2 nastri trasportatori con lo strumento linea, quindi trasporta un oggetto fino al Nucleo.
+tutorial.turret = Costruisci delle torrette per respingere il nemico[lightgray][].\nCostruisci una torretta Duo vicino alla tua base.
tutorial.drillturret = La Torretta Duo richiede[accent] munizioni di rame[] per sparare.\nPosiziona una trivella e collega un nastro alla torretta per rifornirla di munizioni con il rame estratto.
-tutorial.pause = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi disporre gli edifici mentre sei in pausa. \n\n[accent]Premi spazio per mettere in pausa.
-tutorial.pause.mobile = Durante la battaglia, puoi mettere in pausa il gioco [accent]. []\nPuoi disporre gli edifici mentre sei in pausa. \n\n[accent] Premi questo pulsante in alto a sinistra per mettere in pausa.
+tutorial.pause = Durante la battaglia puoi[accent] mettere in pausa il gioco.[]\nPuoi disporre gli edifici mentre il gioco è in pausa.\n\nPer mettere in pausa, premi [accent]spazio[].
+tutorial.pause.mobile = Durante la battaglia puoi[accent] mettere in pausa il gioco.[]\nPuoi disporre gli edifici mentre il gioco è in pausa.\n\nPer mettere in pausa, premi il bottone in alto a sinistra.
tutorial.unpause = Ora premi di nuovo spazio per annullare la pausa.
tutorial.unpause.mobile = Ora premilo di nuovo per annullare la pausa.
-tutorial.breaking = I blocchi spesso devono essere distrutti. \n [accent]Tieni premuto il tasto destro del mouse [] per distruggere tutti i blocchi in una selezione. []\n[accent]Distruggi tutti i blocchi di scarto a sinistra del tuo Nucleo usando la selezione dell'area .
-tutorial.breaking.mobile = I blocchi spesso devono essere distrutti. \n [accent] Seleziona la modalità di decostruzione [], quindi tocca un blocco per iniziare a smantellarlo. \n Distruggi un'area tenendo premuto il dito per alcuni secondi [] e trascinando in una direzione.\nPremi il pulsante con il segno di spunta per confermare la rimozione. \n\n [accent] Distruggi tutti i blocchi di scarto a sinistra del tuo Nucleo usando la selezione dell'area.
-tutorial.withdraw = In alcune situazioni, è necessario prendere gli oggetti direttamente dai blocchi.\nPer fare ciò, [accent] tocca un blocco []con oggetti al suo interno, quindi [accent] tocca l'oggetto [] nell'inventario. \nPuoi prelevare più oggetti insieme[accent]tenendo premuto il tasto sinistro del mouse[].\n[accent]Preleva un po' di rame dal Nucleo. []
-tutorial.deposit = Deposita tutti gli oggetti che trasporti trascinandoli dalla tua nave al blocco di destinazione. \n[accent]Rimetti il rame nel Nucleo. []
-tutorial.waves = Il nemico [LIGHT_GRAY] si avvicina.\nDifendi il tuo Nucleo per 2 ondate. Costruisci più torrette. Puoi sparare tenendo premuto il tasto sinistro del mouse.
-tutorial.waves.mobile = Il [lightgray] nemico si avvicina.\n\n Difendi il Nucleo per 2 ondate. La tua nave sparerà automaticamente contro i nemici.\nCostruisci più torrette.
-tutorial.launch = Una volta raggiunta un'ondata specifica, sarai in grado di [accent] decollare con il Nucleo [], lasciando la zona e abbandonando le tue difese e le tue strutture\nOtterrai [accent]tutte le risorse nel tuo Nucleo[] e potrai quindi usarle per ricercare nuove tecnologie.\n\n [accent]Decolla e conferma per terminare il tutorial.
+tutorial.breaking = I blocchi spesso devono essere distrutti.\n[accent]Tieni premuto il tasto destro del mouse []per distruggere tutti i blocchi in una selezione.[]\n[accent]Distruggi tutti i blocchi di scarto a sinistra del tuo Nucleo usando la selezione dell'area.
+tutorial.breaking.mobile = I blocchi spesso devono essere distrutti.\n[accent]Seleziona la modalità di decostruzione[], quindi tocca un blocco per iniziare a smantellarlo.\nDistruggi un'area tenendo premuto il dito per alcuni secondi[] e trascinando in una direzione.\nPremi il pulsante con il segno di spunta per confermare la rimozione.\n\n[accent]Distruggi tutti i blocchi di scarto a sinistra del tuo Nucleo usando la selezione dell'area.
+tutorial.withdraw = In alcune situazioni, è necessario prendere gli oggetti direttamente dai blocchi.\nPer fare ciò, [accent]tocca un blocco []con oggetti al suo interno, quindi[accent] tocca l'oggetto []nell'inventario.\nPuoi prelevare più oggetti insieme[accent]tenendo premuto il tasto sinistro del mouse[].\n[accent]Preleva un po' di rame dal Nucleo.[]
+tutorial.deposit = Deposita tutti gli oggetti che trasporti trascinandoli dalla tua nave al blocco di destinazione.\n[accent]Rimetti il rame nel Nucleo. []
+tutorial.waves = [lightgray]Il nemico si avvicina.\nDifendi il tuo Nucleo per 2 ondate. Costruisci più torrette. Puoi sparare tenendo premuto il tasto sinistro del mouse.
+tutorial.waves.mobile = [lightgray]Il nemico si avvicina.\n\nDifendi il Nucleo per 2 ondate. La tua nave sparerà automaticamente contro i nemici.\nCostruisci più torrette.
+tutorial.launch = Una volta raggiunta un'ondata specifica, sarai in grado di [accent]decollare con il Nucleo[], lasciando la zona e abbandonando le tue difese e le tue strutture\nOtterrai [accent]tutte le risorse nel tuo Nucleo[] e potrai quindi usarle per ricercare nuove tecnologie.\n\n[accent]Decolla e conferma per terminare il tutorial.
-item.copper.description = Un utile materiale, usato dappertutto
-item.lead.description = Un materiale di base, molto usato nei blocchi di trasporto.
-item.metaglass.description = Un durissimo composto di vetro. Estensivamente usato per trasporto di liquidi ed immagazzinamento.
-item.graphite.description = Carbone mineralizzato, utilizzato per munizioni ed isolamento elettrico.
+item.copper.description = Un materiale utile, usato dappertutto.
+item.lead.description = Un materiale di base, molto usato nei blocchi per il trasporto.
+item.metaglass.description = Un durissimo composto di vetro. Ampiamente usato per trasporto di liquidi ed immagazzinamento.
+item.graphite.description = Carbone mineralizzato, utilizzato per munizioni e componenti elettrici.
item.sand.description = Un materiale di base che viene usato molto nei processi di fusione, sia come lega che come reagente.
item.coal.description = Un combustibile comune facilmente ottenibile.
item.titanium.description = Un raro metallo incredibilmente leggero usato ampiamente nella costruzione di trasporti, trivelle e navi.
@@ -1079,12 +1101,12 @@ item.pyratite.description = Una sostanza molto infiammabile che viene utilizzata
liquid.water.description = Il liquido più utile. Comunemente usato per il raffreddamento di macchinari ed il trattamento dei rifiuti.
liquid.slag.description = Diversi tipi di metalli fusi, mescolati insieme. Può essere separato nei suoi minerali costituenti o spruzzato sulle unità nemiche come un'arma.
liquid.oil.description = Un liquido usato nella produzione avanzata.\nPuò essere convertito in carbone per uso combustibile o spruzzato ed incendiato come arma.
-liquid.cryofluid.description = Un liquido inerte e non corrosivo creato da acqua e titanio.\nIl liquido più efficiente per il raffreddamento.
+liquid.cryofluid.description = Un liquido inerte e non corrosivo creato da acqua e titanio.\nÈ il liquido più efficiente per il raffreddamento.
mech.alpha-mech.description = Il mech standard. È abbastanza veloce e produce abbastanza danni, può anche generare 3 droni per aumentare il suo danno complessivo.
mech.delta-mech.description = Un mech veloce, poco armato fatto per giocare a tocca e fuga con il nemico. Fa poco danno alle strutture, ma può uccidere un gran nummero di nemici grazie alle sue armi ad alto voltaggio.
mech.tau-mech.description = Un mech di supporto. Cura i blocchi danneggiati sparandogli contro. Può spegnere fuochi e curare i compagni di squadra.
mech.omega-mech.description = Un mech ingombrante e ben armato, fatto per stare in prima linea. La sue difese possono bloccare fino al 90% dei danni.
-mech.dart-ship.description = Una navicella standard. Molto veloce e leggera, ma può minare pochi blocchi ed ha scarse potenzialità nella difesa.
+mech.dart-ship.description = La navicella standard. Scava velocemente. Veloce e leggera, ma con scarse potenzialità nella difesa.
mech.javelin-ship.description = Una navetta da tocca e fuga. Anche se inizialmente lenta, può accelerare ad alte velocità e volare sopra gli avamposti dei nemici, e provocare molti danni ai nemici tramite l'utilizzo di fulmini o missili.
mech.trident-ship.description = Un bombardiere pesante. Molto ben protetto.
mech.glaive-ship.description = Una grande e ben armata macchina da guerra. Equipaggiata con lanciafamme e con accelerazione veloce.
@@ -1099,7 +1121,7 @@ unit.eruptor.description = Un mech pesante progettato per abbattere le strutture
unit.wraith.description = Un'unità d'intercezione rapida ed efficiente.
unit.ghoul.description = Un bombardiere pesante. Utilizza composti esplosivi o pirite come munizioni.
unit.revenant.description = Un pesante lanciamissili volante.
-block.message.description = Stores a message. Used for communication between allies.
+block.message.description = Memorizza un messaggio. Utilizzato per la comunicazione tra alleati.
block.graphite-press.description = Comprime pezzi di carbone in fogli di grafite puri.
block.multi-press.description = Una versione aggiornata della pressa per grafite. Impiega acqua ed energia per elaborare il carbone in modo rapido ed efficiente.
block.silicon-smelter.description = Fonde sabbia e carbone riscaldati per ottenere silicio.
@@ -1108,7 +1130,7 @@ block.plastanium-compressor.description = Produce plastanio da petrolio e titani
block.phase-weaver.description = Produce tessuto di fase da torio radioattivo ed elevate quantità di sabbia.
block.alloy-smelter.description = Produce leghe di sovratensione da titanio, piombo, silicio e rame.
block.cryofluidmixer.description = Combina acqua e titanio in criofluido che è molto più efficiente per il raffreddamento.
-block.blast-mixer.description = Frantuma e mescola le spore con la pirite per produrre Composto Esplosivo.
+block.blast-mixer.description = Frantuma e mescola le spore con la pirite per produrre composto esplosivo.
block.pyratite-mixer.description = Mescola carbone, piombo e sabbia in pirite altamente infiammabile.
block.melter.description = Riscalda la pietra a temperature molto elevate per ottenere scoria liquida.
block.separator.description = Sottopone le scoria a centrifugazione per ottenere i vari minerali contenuti.
@@ -1121,50 +1143,53 @@ block.power-source.description = Produce energia infinita, esiste solo nella mod
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.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ù tessere.
+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.
-block.titanium-wall-large.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici. \nOccupa più blocchi
+block.titanium-wall-large.description = Un blocco difensivo moderatamente forte.\nFornisce una protezione moderata dai nemici.\nOccupa più blocchi
block.plastanium-wall.description = Un tipo speciale di muro che assorbe gli archi elettrici e blocca le connessioni automatiche del nodo d'energia.
block.plastanium-wall-large.description = Un tipo speciale di muro che assorbe gli archi elettrici e blocca le connessioni automatiche dei nodi d'energia.\nSi estende su più blocchi.
block.thorium-wall.description = Un forte blocco difensivo.\nBuona protezione dai nemici.
-block.thorium-wall-large.description = Un forte blocco difensivo.\nBuona protezione dai nemici.\nOccupa più blocchi
+block.thorium-wall-large.description = Un forte blocco difensivo.\nBuona protezione dai nemici.\nOccupa più blocchi.
block.phase-wall.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti.
-block.phase-wall-large.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti.\nOccupa più blocchi
-block.surge-wall.description = Il blocco difensivo più forte. \nHa una piccola possibilità di innescare un fulmine verso l'attaccante.
-block.surge-wall-large.description = Il blocco difensivo più forte. \n Ha una piccola possibilità di innescare un fulmine verso l'attaccante.\nOccupa più blocchi
-block.door.description = Una piccola porta che può essere aperta e chiusa toccandola. \nSe aperta, i nemici possono sparare ed attraversare.
-block.door-large.description = Una grande porta che può essere aperta e chiusa toccandola. \nSe aperta, i nemici possono sparare ed attraversare. \nOccupa più blocchi
+block.phase-wall-large.description = Non è forte come un muro di torio, ma devia i proiettili a meno che non siano troppo potenti.\nOccupa più blocchi.
+block.surge-wall.description = Il blocco difensivo più forte.\nHa una piccola possibilità di innescare un fulmine verso l'attaccante.
+block.surge-wall-large.description = Il blocco difensivo più forte.\nHa una piccola possibilità di innescare un fulmine verso l'attaccante.\nOccupa più blocchi.
+block.door.description = Una piccola porta che può essere aperta e chiusa toccandola.\nSe aperta, i nemici possono sparare ed attraversare.
+block.door-large.description = Una grande porta che può essere aperta e chiusa toccandola.\nSe aperta, i nemici possono sparare ed attraversare.\nOccupa più blocchi.
block.mender.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del silicio per aumentarne portata ed efficienza.
block.mend-projector.description = Ripara periodicamente blocchi nelle vicinanze.\nUtilizza del tessuto di fase per aumentarne portata ed efficienza.
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.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.titanium-conveyor.description = Nastro avanzato. Sposta gli oggetti più velocemente dei nastri standard.
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 tessere ad un altro nastro sopraelevato.\nPuò passare sopra ad altri blocchi od edifici.
+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.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 Lancia Materiali a lungo raggio.
-block.mechanical-pump.description = Una pompa economica con potenza lenta, ma nessun consumo di energia.
+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.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.
block.conduit.description = Condotto di base. Funziona come un nastro trasportatore, ma per i liquidi. Ideale per estrattori, pompe o altri condotti.
block.pulse-conduit.description = Condotto avanzato. Trasporta più liquido e più velocemente dei condotti standard.
+block.plated-conduit.description = Trasferisce i liquidi alla stessa velocità del Condotto a Impulsi, ma è più resistente. Non accetta liquidi dai lati da parte di condotti diversi.\nMeno perdite.
block.liquid-router.description = Accetta i liquidi da una direzione e li emette fino a 3 altre direzioni allo stesso modo. Può anche immagazzinare una certa quantità di liquido. Utile per suddividere i liquidi da una fonte verso più destinazioni.
block.liquid-tank.description = Conserva una grande quantità di liquidi. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali o come protezione per il raffreddamento di blocchi vitali.
block.liquid-junction.description = Permette di incrociare condotti che trasportano liquidi diversi in posizioni diverse.
-block.bridge-conduit.description = Consente il trasporto di liquidi fino a 3 tessere da un altro condotto sopraelevato.\nPuò passare sopra ad altri blocchi od edifici.
+block.bridge-conduit.description = Consente il trasporto di liquidi fino a 3 blocchi da un altro condotto sopraelevato.\nPuò passare sopra ad altri blocchi od edifici.
block.phase-conduit.description = Condotto avanzato. Consuma energia per teletrasportare i liquidi in un altro condotto di fase collegato.
block.power-node.description = Trasmette energia tra i nodi collegati. È possibile creare fino a quattro collegamenti.\nClicca sul nodo per configurare i collegamenti.
-block.power-node-large.description = Ha un raggio maggiore rispetto al nodo energetico e si possono creare un massimo di sei collegamenti.\nClicca sul nodo per configurare i collegamenti.
+block.power-node-large.description = Ha un raggio maggiore rispetto al Nodo Energetico e si possono creare un massimo di sei collegamenti.\nClicca sul nodo per configurare i collegamenti.
block.surge-tower.description = Un nodo di alimentazione a lungo raggio solo due connessioni disponibili.\nClicca sul nodo per configurare i collegamenti.
-block.battery.description = Accumula energia ogni volta che c'è abbondanza e fornisce energia ogni volta che c'è carenza, purché rimanga carica.
+block.diode.description = L'energia della batteria può attraversare questo blocco in una sola direzione, ma solo se l'altra parte ha meno energia.
+block.battery.description = Accumula energia ogni volta che c'è abbondanza e fornisce energia ogni volta che c'è carenza, purché sia carica.
block.battery-large.description = Immagazzina molta più energia di una normale batteria.
block.combustion-generator.description = Genera energia bruciando combustibile.
block.thermal-generator.description = Genera una grande quantità di energia dalla lava.
@@ -1172,10 +1197,10 @@ block.turbine-generator.description = Più efficiente di un generatore a combust
block.differential-generator.description = Genera grandi quantità di energia. Utilizza la differenza di temperatura tra criofluido e pirite in combustione.
block.rtg-generator.description = Un generatore che sfrutta il calore del decadimento di materiale radioattivo per produrre energia.\nNon richiede raffreddamento ma fornisce meno energia di un reattore al torio.
block.solar-panel.description = Fornisce una piccola quantità di energia dal sole.
-block.solar-panel-large.description = Fornisce un'alimentazione molto migliore rispetto a un pannello solare standard, ma è anche molto più costoso da costruire.
+block.solar-panel-large.description = Fornisce un'alimentazione migliore rispetto a un pannello solare standard, ma è anche molto più costoso da costruire.
block.thorium-reactor.description = Genera enormi quantità di energia dal torio altamente radioattivo. Richiede un raffreddamento costante. Esploderà violentemente se vengono fornite quantità insufficienti di refrigerante.
block.impact-reactor.description = Un generatore avanzato, in grado di creare enormi quantità di energia alla massima efficienza. Richiede un significativo apporto di energia per avviare il processo.
-block.mechanical-drill.description = Una trivella economica. Se posizionato su riquadri appropriati, estrae minerali a un ritmo lento e costante.
+block.mechanical-drill.description = Una trivella economica. Se posizionata su slot appropriati, estrae minerali a un ritmo lento e costante.
block.pneumatic-drill.description = Una trivella migliorata più veloce ed in grado di elaborare materiali più duri sfruttando la pressione dell'aria.
block.laser-drill.description = Consente di perforare ancora più velocemente attraverso la tecnologia laser, ma richiede energia. Inoltre, con questa trivella è possibile recuperare il torio radioattivo.
block.blast-drill.description = La trivella migliore. Richiede grandi quantità di energia.
@@ -1185,9 +1210,9 @@ block.oil-extractor.description = Utilizza grandi quantità di energia per estra
block.core-shard.description = La prima iterazione del Nucleo. Una volta distrutto, tutti i contatti con la regione vengono persi. Non lasciare che questo accada.
block.core-foundation.description = La seconda versione del Nucleo. Meglio corazzato. Immagazzina più risorse.
block.core-nucleus.description = La terza ed ultima versione del Nucleo. Estremamente ben corazzato. Immagazzina enormi quantità di risorse.
-block.vault.description = Immagazzina una grande quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal deposito.
-block.container.description = Immagazzina una piccola quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [LIGHT_GRAY]scaricatore[] può essere utilizzato per recuperare elementi dal contenitore.
-block.unloader.description = Scarica gli oggetti da un contenitore, caveau o Nucleo su un trasportatore o direttamente in un blocco adiacente. L'oggetto da scaricare può essere scelto toccando lo scaricatore.
+block.vault.description = Immagazzina una grande quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [lightgray]scaricatore[] può essere utilizzato per recuperare elementi dal deposito.
+block.container.description = Immagazzina una piccola quantità di oggetti. Usalo per creare zone cuscinetto quando c'è una domanda non costante di materiali. Uno [lightgray]scaricatore[] può essere utilizzato per recuperare elementi dal contenitore.
+block.unloader.description = Scarica gli oggetti da un contenitore, deposito o Nucleo su un nastro trasportatore o direttamente in un blocco adiacente. L'oggetto da scaricare può essere scelto toccando lo scaricatore.
block.launch-pad.description = Lancia oggetti nel tuo Nucleo senza necessità di un lasciare la zona.
block.launch-pad-large.description = Una versione migliore dell'Ascensore Spaziale, immagazzina più oggetti. Lancia oggetti più frequentemente.
block.duo.description = Una torretta piccola ed economica.
@@ -1204,22 +1229,22 @@ block.ripple.description = Una grande torretta di artiglieria che spara più col
block.cyclone.description = Una grande torretta a fuoco rapido.
block.spectre.description = Una grande torretta che spara due potenti proiettili contemporaneamente.
block.meltdown.description = Una grande torretta che spara un potente laser a lungo raggio.
-block.command-center.description = Da istruzioni alle unità alleate nella mappa. Comanda la ricongizione, l'attacco del Nucleo nemico o la ritirata verso il proprio Nucleo o fabbrica.\nQuando non è presente un Nucleo nemico, le unità pattuglieranno anche se viene ordinato un attacco.
+block.command-center.description = Dà istruzioni alle unità alleate nella mappa. Comanda la ricongizione, l'attacco del Nucleo Nemico o la ritirata verso il proprio Nucleo o fabbrica.\nQuando non è presente un Nucleo Nemico, le unità pattuglieranno anche se viene ordinato un attacco.
block.draug-factory.description = Produce droni per la raccolta mineraria.
block.spirit-factory.description = Produce droni che riparano blocchi.
block.phantom-factory.description = Produce droni avanzati che seguono il giocatore e lo assistono nella costruzione.
block.wraith-factory.description = Produce unità intercettatrici veloci.
block.ghoul-factory.description = Produce bombardieri pesanti.
-block.revenant-factory.description = Produce unità laser di terra pesanti.
+block.revenant-factory.description = Produce pesanti unità lanciamissili volanti.
block.dagger-factory.description = Produce unità di base corpo a corpo di terra.
block.crawler-factory.description = Produce unità di sciame veloci ed autodistruggenti.
block.titan-factory.description = Produce unità terrestri avanzate e corazzate.
block.fortress-factory.description = Produce unità di terra di artiglieria pesante.
block.repair-point.description = Cura continuamente l'unità danneggiata più vicina.
-block.dart-mech-pad.description = Trasforma la tua nave in un mech di attacco di base. \nUsa il blocco toccando due volte mentre ti trovi su di esso.
-block.delta-mech-pad.description = Trasforma la tua nave in un mech veloce e leggermente corazzato, ideale per colpire e scappare. \nUsa il blocco toccando due volte mentre ti ci trovi sopra.
-block.tau-mech-pad.description = Trasforma la tua nave in un mech di supporto in grado di curare edifici ed unità alleate. \n Usa il blocco toccando due volte mentre sei in piedi su di esso.
-block.omega-mech-pad.description = Trasforma la tua nave in un mech voluminoso e ben corazzato, creato per gli assalti in prima linea. \nUsa il blocco toccando due volte mentre sei in piedi su di esso.
+block.dart-mech-pad.description = Trasforma la tua nave in un mech di attacco di base.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
+block.delta-mech-pad.description = Trasforma la tua nave in un mech veloce e leggermente corazzato, ideale per colpire e scappare.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
+block.tau-mech-pad.description = Trasforma la tua nave in un mech di supporto in grado di curare edifici ed unità alleate.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
+block.omega-mech-pad.description = Trasforma la tua nave in un mech voluminoso e ben corazzato, creato per gli assalti in prima linea.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
block.javelin-ship-pad.description = Trasforma la tua nave in un intercettore forte e veloce con armi elettriche.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
-block.trident-ship-pad.description = Trasforma la tua nave in un bombardiere pesante e ben corazzato. \nUsa il blocco toccando due volte mentre ti trovi su di esso.
-block.glaive-ship-pad.description = Trasforma la tua nave in una nave grande e ben corazzata. \nUsa il blocco toccando due volte mentre ti trovi su di esso.
+block.trident-ship-pad.description = Trasforma la tua nave in un bombardiere pesante e ben corazzato.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
+block.glaive-ship-pad.description = Trasforma la tua nave in una nave grande e ben corazzata.\nUsa il blocco toccando due volte mentre ti trovi su di esso.
diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties
index 2d3db1916e..9fc952977a 100644
--- a/core/assets/bundles/bundle_ja.properties
+++ b/core/assets/bundles/bundle_ja.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = 不安定な開発版
link.trello.description = 公式 Trelloボード で実装予定の機能をチェック
link.itch.io.description = itch.io でゲームをダウンロード
link.google-play.description = Google Play ストアを開く
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = 公式 Mindustry Wiki
+link.feathub.description = Suggest new features
linkfail = リンクを開けませんでした!\nURLをクリップボードにコピーしました。
screenshot = スクリーンショットを {0} に保存しました。
screenshot.invalid = マップが広すぎます。スクリーンショットに必要なメモリが足りない可能性があります。
@@ -18,12 +20,22 @@ gameover = ゲームオーバー
gameover.pvp = [accent] {0}[] チームの勝利!
highscore = [accent]ハイスコアを更新!
copied = コピーしました。
+
load.sound = サウンド
load.map = マップ
load.image = 画像
load.content = コンテンツ
load.system = システム
load.mod = 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
+
schematic = 設計図
schematic.add = 設計図を保存しています...
schematics = 設計図一覧
@@ -40,6 +52,7 @@ schematic.saved = 設計図を保存しました。
schematic.delete.confirm = この設計図は完全に削除されます。よろしいですか
schematic.rename = 設計図の名前を変更する。
schematic.info = {0}x{1}, {2} ブロック
+
stat.wave = 防衛したウェーブ:[accent] {0}
stat.enemiesDestroyed = 敵による破壊数:[accent] {0}
stat.built = 建設した建造物数:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = 破壊した建造物数:[accent] {0}
stat.deconstructed = 解体した建造物数:[accent] {0}
stat.delivered = 獲得した資源:
stat.rank = 最終ランク: [accent]{0}
+
launcheditems = [accent]回収したアイテム
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
@@ -74,6 +88,7 @@ maps.browse = マップを閲覧する
continue = 続ける
maps.none = [lightgray]マップが見つかりませんでした!
invalid = 無効
+pickcolor = Pick Color
preparingconfig = 設定ファイルを準備中
preparingcontent = コンテンツを準備中
uploadingcontent = コンテンツをアップロードしています
@@ -81,6 +96,7 @@ uploadingpreviewfile = プレビューファイルをアップロードしてい
committingchanges = 変更を適応中
done = 完了
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
+
mods.alphainfo = Mods機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 発見した問題をMindustry GitHubに報告してください。
mods.alpha = [accent](Alpha)
mods = Mods
@@ -92,18 +108,25 @@ mod.enabled = [lightgray]有効
mod.disabled = [scarlet]無効
mod.disable = 無効化
mod.delete.error = MODを削除することができませんでした。
+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 = 有効化
mod.requiresrestart = このModをインストールするためにはゲームの再起動が必要です。
mod.reloadrequired = [scarlet]Modを有効にするには、この画面を開き直してください。
mod.import = Modをインポート
mod.import.github = GitHubからMODを読み込む
+mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod.
mod.remove.confirm = このModを削除します。
mod.author = [LIGHT_GRAY]著者:[] {0}
mod.missing = このセーブには、アップグレードされた可能性があるModsか、ここに存在しないModsが必要です。 メモリのセーブを保存する! ロードしてもよろしいですか?\n[lightgray]MODS:\n{0}
mod.preview.missing = このModをワークショップで公開するには、Modのプレビュー画像を設定する必要があります。\n[accent] preview.png[] というファイル名の画像をmodsのフォルダに配置し、再試行してください。
mod.folder.missing = ワークショップで公開できるのは、フォルダ形式のModのみとなります。\nModをフォルダ形式に変換するには、ファイルをフォルダに解凍し、古いzipを削除してからゲームを再起動するか、modを再読み込みしてください。
+mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
+
about.button = 情報
name = 名前:
noname = [accent]プレイヤー名[]を入力してください。
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = 無効な名前です。
server.kicked.idInUse = すでにサーバーに参加しています! 二つのアカウントでの同時接続は許可されていません。
server.kicked.customClient = このサーバーはカスタムビルドをサポートしていません。公式版をダウンロードしてください。
server.kicked.gameover = ゲームオーバー!
+server.kicked.serverRestarting = The server is restarting.
server.versions = あなたのバージョン:[accent] {0}[]\nサーバーのバージョン:[accent] {1}[]
host.info = [accent]ホスト[]をすると、ポート[scarlet]6567[]でサーバーが開かれまます。\n同じ[lightgray]WiFiやローカル上のネットワークなど[]ではサーバーリストに表示されるようになります。\n\nIPアドレスで他のところからも接続できるようにするには、[accent]ポート開放[]が必要です。\n\n注意: もしLAN上のゲームに参加できない場合、Mindustryがファイアーウォールの設定でローカルネットワークへの接続が許可されているかを確認してください。
join.info = ここでは、[accent]サーバーのIPアドレス[]から接続したり、[accent]ローカル上[]のサーバーを探したりすることができます。\nLANやWAN上の両方のマルチプレイに対応しています。\n\n[lightgray]注意: 世界中のサーバーの一覧ではありません。他人のサーバーにIPアドレスで接続したい場合は、あらかじめホスト側にIPアドレスをお尋ねください。
@@ -271,6 +295,7 @@ 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}
+
editor.brush = ブラシ
editor.openin = エディターで開く
editor.oregen = 鉱石の生成
@@ -347,6 +372,7 @@ editor.overwrite = [accent]警告!\nすでに存在するマップを上書き
editor.overwrite.confirm = [scarlet]警告![] すでに同じ名前のマップが存在します。上書きしてもよろしいですか?
editor.exists = すでに同じ名前のマップが存在します。
editor.selectmap = 読み込むマップを選択:
+
toolmode.replace = 置きかえ
toolmode.replace.description = 固体ブロックのみに描きます。
toolmode.replaceall = 全て置きかえ
@@ -361,6 +387,7 @@ toolmode.fillteams = チームで埋める
toolmode.fillteams.description = ブロックの代わりにチームで埋めます。
toolmode.drawteams = チームを描く
toolmode.drawteams.description = ブロックの代わりにチームを描きます。
+
filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。
filter.distort = ゆがみ
filter.noise = ノイズ
@@ -392,6 +419,7 @@ filter.option.floor2 = 2番目の地面
filter.option.threshold2 = 2番目のスレッシュホールド
filter.option.radius = 半径
filter.option.percentile = パーセンタイル
+
width = 幅:
height = 高さ:
menu = メニュー
@@ -407,6 +435,7 @@ tutorial = チュートリアル
tutorial.retake = チュートリアル
editor = エディター
mapeditor = マップエディター
+
abandon = 撤退
abandon.text = このゾーンのすべての資源が敵に奪われます。
locked = ロック
@@ -437,6 +466,7 @@ zone.objective.survival = 敵からコアを守り切る
zone.objective.attack = 敵のコアを破壊する
add = 追加...
boss.health = ボスのHP
+
connectfail = [crimson]サーバーへ接続できませんでした:\n\n[accent]{0}
error.unreachable = サーバーに到達できません。\nアドレスは正しいですか?
error.invalidaddress = 無効なアドレスです。
@@ -447,6 +477,7 @@ error.mapnotfound = マップファイルが見つかりません!
error.io = ネットワークエラーです。
error.any = 不明なネットワークエラーです。
error.bloom = Bloomの初期化に失敗しました。\n恐らくあなたのデバイスではBloomがサポートされていません。
+
zone.groundZero.name = グラウンド · ゼロ
zone.desertWastes.name = デザート · ウェーツ
zone.craters.name = ザ · クレーター
@@ -461,6 +492,7 @@ zone.saltFlats.name = ソルト · フラッツ
zone.impact0078.name = インパクト 0078
zone.crags.name = クラーグス
zone.fungalPass.name = ファングル ・ パス
+
zone.groundZero.description = Mindustryに慣れていない初心者向けのマップです。敵は強くなく、資源も多すぎません。\n出来るだけ多くの銅と鉛を集めるのがポイントです。
zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\n電力を使用してみましょう。火力発電機を建設し、修復機の使い方を学びましょう。
zone.desertWastes.description = 大量の廃棄物が散乱し、放棄された建造物が存在します。\nこのマップには石炭が存在します。石炭を燃やして発電したり、グラファイトを生成しましょう。\n\n[lightgray]この着陸位置は保証できません。
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = A former facility for the production and proce
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.impact0078.description =
zone.crags.description =
+
settings.language = 言語
settings.data = ゲームデータ
settings.reset = デフォルトにリセット
settings.rebind = 再設定
+settings.resetKey = Reset
settings.controls = コントロール
settings.game = ゲーム
settings.sound = サウンド
@@ -529,6 +563,7 @@ blocks.inaccuracy = 精度のずれ
blocks.shots = ショット
blocks.reload = ショット/秒
blocks.ammo = 弾薬
+
bar.drilltierreq = より良いドリルが必要です
bar.drillspeed = 採掘速度: {0}/秒
bar.pumpspeed = ポンプの速度: {0}/s
@@ -544,6 +579,9 @@ bar.heat = 熱
bar.power = 電力
bar.progress = 建設状況
bar.spawned = ユニット数: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] ダメージ
bullet.splashdamage = [stat]{0}[lightgray] 範囲ダメージ 約[stat] {1}[lightgray] タイル
bullet.incendiary = [stat]焼夷弾
@@ -555,6 +593,7 @@ bullet.freezing = [stat]フリーズ
bullet.tarred = [stat]タール弾
bullet.multiplier = [stat]弾薬 {0}[lightgray]倍
bullet.reload = [stat]リロード速度 {0}[lightgray]倍
+
unit.blocks = ブロック
unit.powersecond = 電力/秒
unit.liquidsecond = 液体/秒
@@ -567,6 +606,8 @@ unit.persecond = /秒
unit.timesspeed = 倍の速度
unit.percent = %
unit.items = アイテム
+unit.thousands = k
+unit.millions = mil
category.general = 一般
category.power = 電力
category.liquids = 液体
@@ -579,6 +620,7 @@ setting.shadows.name = 影
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = リニアフィルター
setting.hints.name = ヒント
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = 水のアニメーション
setting.animatedshields.name = シールドのアニメーション
setting.antialias.name = アンチエイリアス[lightgray] (再起動が必要)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = 画面の揺れ
setting.effects.name = 画面効果
setting.destroyedblocks.name = 破壊されたブロックを表示
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = 操作感度
setting.saveinterval.name = 自動保存間隔
setting.seconds = {0} 秒
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = フルスクリーン
setting.borderlesswindow.name = 境界の無いウィンドウ[lightgray] (再起動が必要になる場合があります)
setting.fps.name = FPSを表示
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = ピクセル化[lightgray] (アニメーションが無効化されます)
setting.minimap.name = ミニマップを表示
@@ -635,16 +681,36 @@ category.multiplayer.name = マルチプレイ
command.attack = 攻撃
command.rally = Rally
command.retreat = 後退
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Clear Building
keybind.press = キーを押してください...
keybind.press.axis = 軸またはキーを押してください...
keybind.screenshot.name = スクリーンショット
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = 左右移動
keybind.move_y.name = 上下移動
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = ダッシュ
keybind.schematic_select.name = Select Region
keybind.schematic_menu.name = Schematic Menu
keybind.schematic_flip_x.name = Flip Schematic X
keybind.schematic_flip_y.name = Flip 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.fullscreen.name = フルスクリーンの切り替え
keybind.select.name = 選択/ショット
keybind.diagonal_placement.name = 斜め設置
@@ -657,7 +723,6 @@ keybind.menu.name = メニュー
keybind.pause.name = ポーズ
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = ミニマップ
-keybind.dash.name = ダッシュ
keybind.chat.name = チャット
keybind.player_list.name = プレイヤーリスト
keybind.console.name = コンソール
@@ -680,7 +745,9 @@ mode.pvp.description = エリア内で他のプレイヤーと戦います。\n[
mode.attack.name = アタック
mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。\n[gray]プレイするには、マップに赤色のコアが必要です。
mode.custom = カスタムルール
+
rules.infiniteresources = 資源の無限化
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = ウェーブの自動進行
rules.waves = ウェーブ
rules.attack = アタックモード
@@ -688,6 +755,7 @@ rules.enemyCheat = 敵(赤チーム)の資源の無限化
rules.unitdrops = ユニットの戦利品
rules.unitbuildspeedmultiplier = ユニットの製造速度倍率
rules.unithealthmultiplier = ユニットの体力倍率
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = プレイヤーの体力倍率
rules.playerdamagemultiplier = プレイヤーのダメージ倍率
rules.unitdamagemultiplier = ユニットのダメージ倍率
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = 資源 & 建設
rules.title.player = プレイヤー
rules.title.enemy = 敵
rules.title.unit = ユニット
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = アイテム
content.liquid.name = 液体
content.unit.name = ユニット
@@ -752,6 +824,7 @@ mech.trident-ship.name = トライデント
mech.trident-ship.weapon = 爆弾
mech.glaive-ship.name = グライブ
mech.glaive-ship.weapon = 焼夷弾
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [lightgray]爆発性: {0}%
item.flammability = [lightgray]可燃性: {0}%
item.radioactivity = [lightgray]放射能: {0}%
@@ -767,6 +840,7 @@ mech.buildspeed = [lightgray]建設速度: {0}%
liquid.heatcapacity = [lightgray]熱容量: {0}
liquid.viscosity = [lightgray]粘度: {0}
liquid.temperature = [lightgray]温度: {0}
+
block.sand-boulder.name = 巨大な礫
block.grass.name = 草
block.salt.name = 岩塩氷河
@@ -865,6 +939,8 @@ block.distributor.name = ディストリビューター
block.sorter.name = ソーター
block.inverted-sorter.name = 反転ソーター
block.message.name = メッセージブロック
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = オーバーフローゲート
block.silicon-smelter.name = シリコン溶鉱炉
block.phase-weaver.name = フェーズ織機
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = 石炭遠心分離機
block.power-node.name = 電源ノード
block.power-node-large.name = 大型電源ノード
block.surge-tower.name = サージタワー
+block.diode.name = Battery Diode
block.battery.name = バッテリー
block.battery-large.name = 大型バッテリー
block.combustion-generator.name = 火力発電機
@@ -901,6 +978,7 @@ 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 = 搬出機
@@ -930,6 +1008,7 @@ block.fortress-factory.name = フォートレスユニット製造機
block.revenant-factory.name = レベナントファイター製造機
block.repair-point.name = 修復ポイント
block.pulse-conduit.name = パルスパイプ
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = フェーズパイプ
block.liquid-router.name = 液体ルーター
block.liquid-tank.name = 液体タンク
@@ -1001,6 +1080,7 @@ tutorial.deposit = 機体にあるアイテムをドラッグアンドドロッ
tutorial.waves = [lightgray]敵[]がやってきます。\n\n2ウェーブの間コアを守ってみましょう。[accent]クリック[]で弾を発射することができます。\nさらにドリルやデュオを設置しましょう。さらに銅を採掘しましょう。
tutorial.waves.mobile = [lightgray]敵[]がやってきます。\n\n2ウェーブの間コアを守ってみましょう。あなたの機体は自動で敵を攻撃してくれます。\nさらにドリルやデュオを設置しましょう。さらに銅を採掘しましょう。
tutorial.launch = 離脱可能なウェーブに達すると、[accent]コアにある全ての資源を持って[]、マップから[accent]離脱する[]ことができます。\nこれらの資源は、新しい技術の研究に使用することができます。\n\n[accent]離脱ボタンを押しましょう。
+
item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。
item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。
item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。
@@ -1062,6 +1142,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.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。
block.titanium-wall.description = 適度に強力な防壁ブロックです。\n中程度の攻撃から保護します。
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = 高度なポンプです。電力を使用して
block.thermal-pump.description = 最高性能のポンプです。
block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。
block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速く、たくさんのアイテムを輸送することができます。
+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 = 搬入したアイテムをほかの3方向に均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。
block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。
block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = 高度な液体輸送ブロックです。電
block.power-node.description = 電力ノード間で電力の送電を行います。最大で4つの電力源やノードなどに接続できます。隣接するブロックから電力の送電や供給を行います。
block.power-node-large.description = 巨大な電力ノードです。最大で6つの電力源やノードに接続できます。
block.surge-tower.description = 接続できる量は少ないが、とても長い距離を接続できる電力ノードです。
+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 = 余分な電力の充電して、貯めておくことができます。必要があれば、溜まった電力を供給します。
block.battery-large.description = 通常のバッテリーよりもたくさんの電力を溜めておくことができます。
block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。
diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties
index 71a44a6bff..d2d9b54b9a 100644
--- a/core/assets/bundles/bundle_ko.properties
+++ b/core/assets/bundles/bundle_ko.properties
@@ -7,14 +7,15 @@ link.reddit.description = Mindustry 레딧
link.github.description = 게임 소스코드
link.changelog.description = 새로 추가된 것들
link.dev-builds.description = 불안정한 개발 빌드들
-link.trello.description = 다음 출시될 기능들을 게시한 공식 Trello 보드
+link.trello.description = 출시 예정중인 기능들을 게시한 공식 Trello 보드
link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트
link.google-play.description = Google Play 스토어 정보
link.f-droid.description = F-Droid 카탈로그
link.wiki.description = 공식 Mindustry 위키
+link.feathub.description = 기능 아이디어 건의하기
linkfail = 링크를 여는 데 실패했습니다!\nURL이 기기의 클립보드에 복사되었습니다.
-screenshot = 스크린샷이 {0} 경로에 저장되었습니다.
-screenshot.invalid = 맵이 너무 커서 스크린샷을 찍을 메모리가 충분하지 않습니다.
+screenshot = 스크린 샷이 {0} 경로에 저장되었습니다.
+screenshot.invalid = 맵이 너무 커서 스크린 샷을 찍을 메모리가 충분하지 않습니다.
gameover = 게임 오버
gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
highscore = [accent]최고점수 달성!
@@ -28,6 +29,13 @@ 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
+
schematic = 설계도
schematic.add = 설계도 저장하기
schematics = 설계도 모음
@@ -35,11 +43,11 @@ schematic.replace = 이 설계도와 같은 이름의 설계도가 이미 존재
schematic.import = 설계도 불러오기
schematic.exportfile = 파일 내보내기
schematic.importfile = 파일 불러오기
-schematic.browseworkshop = 워크샵 탐색
+schematic.browseworkshop = Workshop 탐색
schematic.copy = 클립보드에 복사하기
schematic.copy.import = 클립보드에서 붙여넣기
schematic.shareworkshop = 워크샵에 공유
-schematic.flip = 좌우 뒤집기 :[accent][[{0}][] / 상하 뒤집기 : [accent][[{1}][]
+schematic.flip = 좌우 뒤집기 : [accent][[{0}][] / 상하 뒤집기 : [accent][[{1}][]
schematic.saved = 설계도 저장됨.
schematic.delete.confirm = 삭제된 설계도는 복구할 수 없습니다. 정말로 삭제하시겠습니까?
schematic.rename = 설계도명 변경
@@ -94,7 +102,7 @@ mods.alpha = [scarlet](Alpha)
mods = 모드
mods.none = [LIGHT_GRAY]추가한 모드가 없습니다!
mods.guide = 모드 가이드
-mods.report = 버그 신고
+mods.report = 문제 신고
mods.openfolder = 모드 폴더 열기
mod.enabled = [lightgray]활성화
mod.disabled = [scarlet]비활성화
@@ -102,7 +110,10 @@ mod.disable = 비활성화
mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다.
mod.requiresversion = [scarlet]게임의 버전이 낮아 모드를 활성화할 수 없습니다!\n[scarlet]요구되는 게임 버전 : [accent]{0}
mod.missingdependencies = [scarlet]의존되는 모드: {0}
-mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 :[accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다.
+mod.erroredcontent = [scarlet]컨텐츠 오류
+mod.errors = 컨텐츠를 불러오는 중 오류가 발생하였습니다.
+mod.noerrorplay = [scarlet]모드에 오류가 존재합니다.[] 해당 오류가 발생하는 모드를 비활성화하거나 모드의 오류를 고친 후 플레이가 가능합니다.
+mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 : [accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다.
mod.enable = 활성화
mod.requiresrestart = 모드 변경사항을 적용하기 위해 게임을 종료합니다.
mod.reloadrequired = [scarlet]새로고침 예정됨
@@ -111,7 +122,7 @@ mod.import.github = 깃허브 모드 추가
mod.item.remove = 이것은 모드[accent] '{0}'[]의 자원입니다. 이 자원을 삭제하려면, 이 모드를 제거해야합니다.
mod.remove.confirm = 이 모드를 삭제하시겠습니까?
mod.author = [LIGHT_GRAY]제작자 : [] {0}
-mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 이 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0}
+mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 현재 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0}
mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요.
mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오.
mod.scripts.unsupported = 당신의 기기는 모드스크립트를 지원하지 않습니다. 모드의 일부 기능이 작동하지 않을 수 있습니다.
@@ -144,6 +155,7 @@ server.kicked.nameEmpty = 당신의 닉네임이 비어있습니다.
server.kicked.idInUse = 이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다.
server.kicked.customClient = 이 서버는 직접 빌드한 버전을 지원하지 않습니다. 공식 버전을 사용하세요.
server.kicked.gameover = 코어가 파괴되었습니다...
+server.kicked.serverRestarting = The server is restarting.
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을 생략할 수 있습니다.
@@ -568,7 +580,7 @@ bar.power = 전력
bar.progress = 생산 진행도
bar.spawned = 최대 {1}기 중 {0}기 생산됨
bar.input = 입력
-bar.output =
+bar.output = Output
bullet.damage = [lightgray]피해량 : [stat]{0}[]
bullet.splashdamage = [lightgray]범위 피해량 : [stat]{0}[] / [lightgray]피해 범위 : [stat]{1}[lightgray] 타일
@@ -594,8 +606,8 @@ unit.persecond = /초
unit.timesspeed = x 배
unit.percent = %
unit.items = 자원
-unit.thousands = 천
-unit.millions = 백만
+unit.thousands = k
+unit.millions = mil
category.general = 일반
category.power = 전력
category.liquids = 액체
@@ -631,11 +643,12 @@ setting.screenshake.name = 화면 흔들기
setting.effects.name = 화면 효과
setting.destroyedblocks.name = 부서진 블럭 표시
setting.conveyorpathfinding.name = 교차기 자동 설치
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = 컨트롤러 감도
setting.saveinterval.name = 저장 간격
setting.seconds = {0} 초
setting.blockselecttimeout.name = 블록 선택 시간 초과
-setting.milliseconds = {0} 밀리초
+setting.milliseconds = {0} ms
setting.fullscreen.name = 전체 화면
setting.borderlesswindow.name = 테두리 없는 창모드[LIGHT_GRAY] (재시작이 필요할 수 있습니다)
setting.fps.name = FPS 표시
@@ -677,26 +690,27 @@ keybind.toggle_power_lines.name = 전력 라인 허용
keybind.move_x.name = 오른쪽 / 왼쪽 이동
keybind.move_y.name = 위 / 아래 이동
keybind.mouse_move.name = 커서를 따라서 이동
+keybind.dash.name = 달리기
keybind.schematic_select.name = 영역 설정
keybind.schematic_menu.name = 설계도 메뉴
keybind.schematic_flip_x.name = 설계도 X축 뒤집기
keybind.schematic_flip_y.name = 설계도 Y축 뒤집기
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 = 대각선 설치
@@ -709,15 +723,14 @@ keybind.menu.name = 메뉴
keybind.pause.name = 일시중지
keybind.pause_building.name = 건설 일시정지/계속하기
keybind.minimap.name = 미니맵
-keybind.dash.name = 달리기
keybind.chat.name = 채팅
keybind.player_list.name = 플레이어 목록
keybind.console.name = 콘솔
keybind.rotate.name = 회전
keybind.rotateplaced.name = 기존 회전 (고정)
keybind.toggle_menus.name = 메뉴 보이기/숨기기
-keybind.chat_history_prev.name = 이전 채팅기록
-keybind.chat_history_next.name = 다음 채팅기록
+keybind.chat_history_prev.name = 이전 채팅 기록
+keybind.chat_history_next.name = 다음 채팅 기록
keybind.chat_scroll.name = 채팅 스크롤
keybind.drop_unit.name = 유닛 처치 시 자원획득
keybind.zoom_minimap.name = 미니맵 확대
@@ -730,11 +743,11 @@ mode.editor.name = 편집기
mode.pvp.name = PvP
mode.pvp.description = 실제 플레이어와 PvP를 합니다. 맵에 적어도 2개의 다른 색상 코어가 있어야 합니다.
mode.attack.name = 공격
-mode.attack.description = 적 기지를 파괴하세요. 맵에 빨간팀 코어가 있어야 플레이 가능합니다.
+mode.attack.description = 적 기지를 파괴하세요. 맵에 빨간 팀 코어가 있어야 플레이 가능합니다.
mode.custom = 사용자 정의 규칙
rules.infiniteresources = 무한 자원
-rules.reactorexplosions = 원자로 폭발 허가여부
+rules.reactorexplosions = 원자로 폭발 허가 여부
rules.wavetimer = 단계 대기시간
rules.waves = 단계 활성화
rules.attack = 공격 모드
@@ -742,6 +755,7 @@ rules.enemyCheat = 무한한 적 자원
rules.unitdrops = 유닛 처치시 자원 약탈
rules.unitbuildspeedmultiplier = 유닛 제조속도 배수
rules.unithealthmultiplier = 유닛 체력 배수
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = 플레이어 체력 배수
rules.playerdamagemultiplier = 플레이어 공격력 배수
rules.unitdamagemultiplier = 유닛 공격력 배수
@@ -750,7 +764,7 @@ rules.respawntime = 플레이어 부활 대기 시간 : [LIGHT_GRAY] (초)
rules.wavespacing = 단계 간격 : [LIGHT_GRAY] (초)
rules.buildcostmultiplier = 건설 소모 배수
rules.buildspeedmultiplier = 건설 속도 배수
-rules.waitForWaveToEnd = 단계가 끝날때까지 기다리는중
+rules.waitForWaveToEnd = 단계가 끝날때까지 기다리는 중
rules.dropzoneradius = 소환 충격파 범위 : [LIGHT_GRAY] (타일)
rules.respawns = 단계당 최대 플레이어 부활 횟수
rules.limitedRespawns = 플레이어 부활 제한
@@ -810,7 +824,7 @@ mech.trident-ship.name = 트라이던트
mech.trident-ship.weapon = 폭탄 저장고
mech.glaive-ship.name = 글레이브
mech.glaive-ship.weapon = 중무장 인화성 소총
-item.corestorable = [lightgray]코어 잔여 저장공간: {0}
+item.corestorable = [lightgray]코어 저장 가능 여부 : {0}
item.explosiveness = [LIGHT_GRAY]폭발성 : {0}
item.flammability = [LIGHT_GRAY]인화성 : {0}
item.radioactivity = [LIGHT_GRAY]방사능 : {0}
@@ -964,6 +978,7 @@ 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 = 언로더
@@ -1117,7 +1132,7 @@ block.cryofluidmixer.description = 물과 티타늄을 냉각에 훨씬 더 효
block.blast-mixer.description = 포자를 사용하여 파이라타이트를 폭발성 화합물로 변환시킵니다.
block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 파이라타이트로 만듭니다.
block.melter.description = 고철을 녹여 파도의 탄약 혹은 원심 분리기에 사용할 수 있는 액체인 광재로 만듭니다.
-block.separator.description = 광재룰 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다.
+block.separator.description = 광재를 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다.
block.spore-press.description = 포자를 압축해 기름을 추출합니다.
block.pulverizer.description = 고철을 갈아 모래로 만듭니다. 맵에 모래가 부족할 때 유용합니다.
block.coal-centrifuge.description = 석유로 석탄을 만듭니다.
@@ -1127,6 +1142,7 @@ 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_nl.properties b/core/assets/bundles/bundle_nl.properties
index 4e0b424284..6a8681f28a 100644
--- a/core/assets/bundles/bundle_nl.properties
+++ b/core/assets/bundles/bundle_nl.properties
@@ -1,45 +1,58 @@
-credits.text = Gemaakt door [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[] -
+credits.text = Gemaakt door [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
credits = Credits
-contributors = Vertalers en Medewerkers
+contributors = Vertalers en Bijdragers
discord = Word lid van de Mindustry Discord!
link.discord.description = De officiële Mindustry discord chatroom
-link.reddit.description = The Mindustry subreddit
+link.reddit.description = De Mindustry subreddit
link.github.description = Game broncode
-link.changelog.description = Lijst van Updates
+link.changelog.description = Lijst van updates
link.dev-builds.description = Onstabiele ontwikkeling builds
link.trello.description = Officiële trello-bord voor geplande functies
-link.itch.io.description = itch.io pagina met pc-downloads en webversie
+link.itch.io.description = itch.io pagina met pc-downloads
link.google-play.description = Google Play store vermelding
+link.f-droid.description = F-Droid catalogus vermelding
link.wiki.description = Officiële Mindustry wiki
+link.feathub.description = Stel iets voor
linkfail = Kan link niet openen!\nDe URL is gekopieerd naar je klembord
screenshot = Schermafbeeling opgeslagen in {0}
-screenshot.invalid = Map is te groot, Mogelijk niet genoeg ruimte op apparaat.
+screenshot.invalid = Map is te groot, Mogelijk niet genoeg geheugen beschikbaar voor een schermafbeelding.
gameover = Spel afgelopen
gameover.pvp = het[accent] {0}[] team heeft gewonnen!
highscore = [accent]Nieuw topscore!
-copied = Copied.
+copied = Gekopieerd.
+
load.sound = Geluid
load.map = Mappen
load.image = Afbeeldingen
load.content = inhoud
load.system = Systeem
load.mod = Mods
-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
+load.scripts = Scripts
+
+be.update = Er is een nieuwe Bleeding Edge versie beschikbaar:
+be.update.confirm = Download het en herstart?
+be.updating = Updaten...
+be.ignore = Negeer
+be.noupdates = Geen updates gevonden.
+be.check = Check voor updates
+
+schematic = Blauwdruk
+schematic.add = Bewaar blauwdruk...
+schematics = Blauwdrukken
+schematic.replace = Er bestaat al een blauwdruk met die naam. Overschrijven?
+schematic.import = Importeer blauwdrul...
+schematic.exportfile = Exporteer bestand
+schematic.importfile = Importeer bestand
+schematic.browseworkshop = Blader Werkplaats
+schematic.copy = Kopiëren naar Klembord
+schematic.copy.import = Importeren van Klembord
+schematic.shareworkshop = Delen op de Werkplaats
+schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Spiegel blauwdruk
+schematic.saved = Blauwdruk bewaard.
+schematic.delete.confirm = Deze blauwdruk zal in een zwart gat verdwijnen.
+schematic.rename = Hernoem blauwdruk
+schematic.info = {0}x{1}, {2} blokken
+
stat.wave = Waves Verslagen:[accent] {0}
stat.enemiesDestroyed = Vijanden Vernietigd:[accent] {0}
stat.built = Gebouwen Gebouwd:[accent] {0}
@@ -47,68 +60,78 @@ stat.destroyed = Gebouwen Vernietigd:[accent] {0}
stat.deconstructed = Gebouwen Gesloopt:[accent] {0}
stat.delivered = Middelen Gelanceerd:
stat.rank = Eindrang: [accent]{0}
+
launcheditems = [accent]Gelanceerde items
-launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
+launchinfo = [unlaunched][[LANCEER] je core om de in blauw gekleurde items te verkrijgen.
map.delete = Weet je zeker dat je de map wilt verwijderen? "[accent]{0}[]"?
level.highscore = Topscore: [accent]{0}
level.select = Selecteer Level
level.mode = Spelmodus:
showagain = Niet Laten zien in de volgende sessie
coreattack = < Core wordt aangevallen! >
-nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
+nearpoint = [[ [scarlet]VERLAAT DE LANDINGSZONE ONMIDDELIJK[] ]\nlevensgevaarlijk
database = Core Database
savegame = Opslaan
loadgame = Laden
joingame = Treed toe
customgame = Aangepast spel
newgame = Nieuw spel
-none =
-minimap = Minimap
-position = Position
+none =
+minimap = Landkaart
+position = Positie
close = Aflsuiten
website = Website
quit = Stoppen
-save.quit = Save & Quit
+save.quit = Bewaar & Stop
maps = Mappen
-maps.browse = Browse Maps
+maps.browse = Blader mappen
continue = Ga door
maps.none = [LIGHT_GRAY]Geen map gevonden!
-invalid = Invalid
-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.
-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.alpha = [accent](Alpha)
+invalid = Ongeldig
+pickcolor = Kies kleur
+preparingconfig = Configuratie voorbereiden
+preparingcontent = Inhoud voorbereiden
+uploadingcontent = Inhoud aan het uploaden
+uploadingpreviewfile = Thumbnail aan het uploaden
+committingchanges = Wijzigingen aan het bewaren
+done = Klaar
+feature.unsupported = Je apparaat ondersteunt deze functionaliteit niet.
+
+mods.alphainfo = Houd in gedachten dat mod ondersteuning nieuw is, en daarom[scarlet] mogelijk ontstabiel is[].\nVermeld problemen die je ermee ondervind in de Mindustry GitHub of Discord.
+mods.alpha = [accent](Onstabiel)
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.missingdependencies = [scarlet]Missing dependencies: {0}
-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.import.github = Import GitHub Mod
-mod.remove.confirm = This mod will be deleted.
-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.
+mods.none = [LIGHT_GRAY]Geen mods gevonden!
+mods.guide = Modding Handboek
+mods.report = Rapporteer Bug
+mods.openfolder = Open Mod Map
+mod.enabled = [lightgray]Aan
+mod.disabled = [scarlet]Uit
+mod.disable = Deactiveer
+mod.delete.error = Mod verwijderen mislukt. Bestand mogelijk in gebruik.
+mod.requiresversion = [scarlet]Vereist minimaal mindustry versie: [accent]{0}
+mod.missingdependencies = [scarlet]Missende benodigdheden: {0}
+mod.erroredcontent = [scarlet]Inhoud Fouten
+mod.errors = Er hebben zich fouten voordaan tijdens het laden van de inhoud.
+mod.noerrorplay = [scarlet]Je mods bevatten fouten.[] Zet de mods uit of los de problemen op voordat je verder gaat.
+mod.nowdisabled = [scarlet]Mod '{0}' mist een aantal benodigdheden:[accent] {1}\n[lightgray]Deze moet je eerst zelf downloaden.\nDeze mod is nu voor je uitgezet.
+mod.enable = Activeer
+mod.requiresrestart = Deze game zal nu herstarten om de veranderingen aan de mods door te voeren.
+mod.reloadrequired = [scarlet]Herladen Vereist
+mod.import = Importeer Mod
+mod.import.github = Importeer GitHub Mod
+mod.item.remove = Dit item is onderdeel van de[accent] '{0}'[] mod. Verwijder deze eerst.
+mod.remove.confirm = Deze mod zal worden verwijderd.
+mod.author = [LIGHT_GRAY]Auteur:[] {0}
+mod.missing = Deze Save bevat mods die zijn geupdatet of die je niet meer hebt geinstaleerd. Je save kan mogelijk kapot gaat. Weet je zeker dat je het wilt proberen?\n[lightgray]Mods:\n{0}
+mod.preview.missing = Voordat je je mod publiceert in de workshop moet je een thumbnail toevoegen.\nPlaats een afbeelding genaamd[accent] preview.png[] in de map van die mod en probeer opnieuw.
+mod.folder.missing = Enkel mods in map formaat kunnen worden gepubliceerd in de workshop.\nOm een mod om te zetten in een map, unzip de mod en verwijder de zip, hetstart dan het spel of herlaad de mods.
+mod.scripts.unsupported = Je apparaat ondersteunt geen mods met scripts. Sommige mods zullen niet correct werken.
+
about.button = Over
name = Naam:
noname = Maak eerst een[accent] Speler naam[].
filename = Bestandsnaam:
-unlocked = New content unlocked!
+unlocked = Nieuwe inhoud ontgrendeld!
completed = [accent]Voltooid
techtree = Tech boom
research.list = [LIGHT_GRAY]Onderzoek:
@@ -118,619 +141,668 @@ players = {0} Spelers online
players.single = {0} Speler online
server.closing = [accent]Server aan het sluiten...
server.kicked.kick = Je bent verwijderd van deze sessie.
-server.kicked.whitelist = You are not whitelisted here.
+server.kicked.whitelist = Je staat niet op de whitelist.
server.kicked.serverClose = Server afgesloten...
server.kicked.vote = Je bent ge vote-kicked. Tot ziens.
server.kicked.clientOutdated = Verouderde versie! Update jouw spel!
server.kicked.serverOutdated = Verouderde server! Vraag de host om te upgraden!
server.kicked.banned = Je bent verbannen van deze server.
server.kicked.typeMismatch = Deze server is niet compitabel met jouw bouwtype.
-server.kicked.playerLimit = This server is full. Wait for an empty slot.
+server.kicked.playerLimit = Deze server is vol. Wacht voor een vrije plek.
server.kicked.recentKick = Je bent reeds verwijderd.\nWacht voordat je opnieuw verbindt.
server.kicked.nameInUse = Er is al iemand met die naam\nop deze server.
server.kicked.nameEmpty = Je gekozen naam is niet geldig.
server.kicked.idInUse = Je bent al verbonden met deze server! Verbinden met 2 accounts is verboden.
server.kicked.customClient = Deze server ondersteunt geen aangepaste spellen . Download de officiele versie.
server.kicked.gameover = Spel afgelopen
+server.kicked.serverRestarting = De server is aan het herstarten.
server.versions = Jouw versie:[accent] {0}[]\nServer versie:[accent] {1}[]
host.info = De [accent]host[] knop hosts `een server op port [scarlet]6567[]. \nIedereen op hetzelfde [LIGHT_GRAY]wifi or locaal netwerk[] zou jouw server in hun serverlijst moeten zien.\n\nAls je wilt dan vrienden vanaf overal kunnen meedoen via IP, [accent]port forwarding[] is nodig.\n\n[LIGHT_GRAY]Note: IAls iemand moeilijkheden heeft met het meedoen aan jouw spel, kijk of je Mindustry in je firewall instellingen toegang hebt gegeven to jouw locaal netwerk.
join.info = Hier kan je een [accent]server IP[] invoeren om te verbinden, of om[accent]locale netwerken[] te vinden.\nBeide LAN en WAN multiplayer is ondersteund.\n\n[LIGHT_GRAY]Note: Er is geen automatische globale serverlijst; Als je met iemands IP wil verbinden, Zou je moeten vragen om hun IP.
hostserver = Host Game
-invitefriends = Invite Friends
+invitefriends = Nodig vrienden uit
hostserver.mobile = Host\nGame
host = Host
-hosting = [accent]Opening server...
-hosts.refresh = Refresh
-hosts.discovering = Discovering LAN games
-hosts.discovering.any = Discovering games
-server.refreshing = Refreshing server
-hosts.none = [lightgray]No local games found!
-host.invalid = [scarlet]Can't connect to host.
-trace = Trace Player
-trace.playername = Player name: [accent]{0}
+hosting = [accent]Server openen...
+hosts.refresh = Herlaad
+hosts.discovering = LAN games aan het zoeken
+hosts.discovering.any = games aan het zoeken
+server.refreshing = Herlaad server
+hosts.none = [lightgray]Geen lokale games gevonden!
+host.invalid = [scarlet]Kan niet verbinden met server.
+trace = Traceer Speler
+trace.playername = Speler naam: [accent]{0}
trace.ip = IP: [accent]{0}
-trace.id = Unique ID: [accent]{0}
-trace.mobile = Mobile Client: [accent]{0}
-trace.modclient = Custom Client: [accent]{0}
-invalidid = Invalid client ID! Submit a bug report.
+trace.id = Unieke ID: [accent]{0}
+trace.mobile = Mobiel apparaat: [accent]{0}
+trace.modclient = Unofficieël: [accent]{0}
+invalidid = Ongeldige speler ID! Raporteer deze bug.
server.bans = Bans
-server.bans.none = No banned players found!
+server.bans.none = Geen verbannen spelers gevonden!
server.admins = Admins
-server.admins.none = No admins found!
-server.add = Add Server
-server.delete = Are you sure you want to delete this server?
-server.edit = Edit Server
-server.outdated = [crimson]Outdated Server![]
-server.outdated.client = [crimson]Outdated Client![]
-server.version = [lightgray]Version: {0} {1}
+server.admins.none = Geen admins gevonden!
+server.add = Voeg server to
+server.delete = Weet je zeker dat je deze server wilt deleten?
+server.edit = Bewerk server
+server.outdated = [crimson]Server draait op een oudere versie![]
+server.outdated.client = [crimson]Server draait en nieuwere versie![]
+server.version = [lightgray]Versie: {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?
-confirmunadmin = Are you sure you want to remove admin status from this player?
-joingame.title = Join Game
-joingame.ip = Address:
-disconnect = Disconnected.
-disconnect.error = Connection error.
-disconnect.closed = Connection closed.
-disconnect.timeout = Timed out.
-disconnect.data = Failed to load world data!
-cantconnect = Unable to join game ([accent]{0}[]).
-connecting = [accent]Connecting...
-connecting.data = [accent]Loading world data...
-server.port = Port:
-server.addressinuse = Address already in use!
-server.invalidport = Invalid port number!
-server.error = [crimson]Error hosting server: [accent]{0}
-save.new = New Save
-save.overwrite = Are you sure you want to overwrite\nthis save slot?
-overwrite = Overwrite
-save.none = No saves found!
-saveload = [accent]Saving...
-savefail = Failed to save game!
-save.delete.confirm = Are you sure you want to delete this save?
-save.delete = Delete
-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.newslot = Save name:
-save.rename = Rename
-save.rename.text = New name:
-selectslot = Select a save.
-slot = [accent]Slot {0}
-editmessage = Edit Message
-save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug.
-empty =
-on = On
-off = Off
+confirmban = Weet je zeker dat je deze speler wilt verbannen?
+confirmkick = Weet je zeker dat je deze speler wilt verwijderen?
+confirmvotekick = Weet je zeker dat je deze speler weg wilt stemmen?
+confirmunban = Weet je zeker dat je deze speler weer wil toelaten?
+confirmadmin = Weet je zeker dat je deze speler admin wil geven?
+confirmunadmin = Weet je zeker dat je de admin status van deze speler wilt intrekken?
+joingame.title = Treed toe
+joingame.ip = Adres:
+disconnect = Gesloten.
+disconnect.error = Verbindingsfout.
+disconnect.closed = Verbinding gestopt.
+disconnect.timeout = Verbinding afgekapt.
+disconnect.data = Kon de wereld niet laden!
+cantconnect = Geen verbinding mogelijk ([accent]{0}[]).
+connecting = [accent]Aan het verbinden...
+connecting.data = [accent]Wereld aan het laden...
+server.port = Poort:
+server.addressinuse = Adres is al in gebruik!
+server.invalidport = Poort is geen geldig getal!
+server.error = [crimson]Fout met hosten: [accent]{0}
+save.new = Nieuwe Save
+save.overwrite = Weet je zeker dat je deze\nsave wilt overschrijven?
+overwrite = Overschrijf
+save.none = Geen saves gevonden!
+saveload = [accent]Bewaren...
+savefail = Bewaren is mislukt!
+save.delete.confirm = Weet je zeker dat je deze save wilt verwijderen?
+save.delete = Verwijder
+save.export = Exporteer Save
+save.import.invalid = [accent]Deze save is ongeldig!
+save.import.fail = [crimson]Importeren van save mislukt: [accent]{0}
+save.export.fail = [crimson]Exporteren van save mislukt: [accent]{0}
+save.import = Importeer Save
+save.newslot = Save naam:
+save.rename = Hernoem
+save.rename.text = Nieuwe naam:
+selectslot = Selecteer een save.
+slot = [accent]Gleuf {0}
+editmessage = Bewerk bericht
+save.corrupted = [accent]Save bestand misvormd of ongeldig!\nAls je net je game hebt geupdatet, is dit waarschijnlijk een verandering in hoe saves werken, dit is[scarlet]geen[] bug.
+empty =
+on = Aan
+off = Uit
save.autosave = Autosave: {0}
save.map = Map: {0}
-save.wave = Wave {0}
-save.mode = Gamemode: {0}
-save.date = Last Saved: {0}
-save.playtime = Playtime: {0}
-warning = Warning.
-confirm = Confirm
-delete = Delete
-view.workshop = View In Workshop
-workshop.listing = Edit Workshop Listing
-ok = OK
+save.wave = Ronde {0}
+save.mode = Spelmodus: {0}
+save.date = Laatst bewaard: {0}
+save.playtime = Speeltijd: {0}
+warning = Waarschuwing.
+confirm = Bevestig
+delete = Verwijder
+view.workshop = Bekijk in Werkplaats
+workshop.listing = Bewerk Workshop vermelding
+ok = Oke
open = Open
-customize = Customize
-cancel = Cancel
+customize = Aanpassen
+cancel = Anuleer
openlink = Open Link
-copylink = Copy Link
-back = Back
-data.export = Export Data
-data.import = Import Data
-data.exported = Data exported.
-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.
-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?
-quit.confirm = Are you sure you want to quit?
-quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
-loading = [accent]Loading...
-reloading = [accent]Reloading Mods...
-saving = [accent]Saving...
-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]Wave {0}
-wave.waiting = [LIGHT_GRAY]Wave in {0}
-wave.waveInProgress = [LIGHT_GRAY]Wave in progress
-waiting = [LIGHT_GRAY]Waiting...
-waiting.players = Waiting for players...
-wave.enemies = [LIGHT_GRAY]{0} Enemies Remaining
-wave.enemy = [LIGHT_GRAY]{0} Enemy Remaining
-loadimage = Load Image
-saveimage = Save Image
-unknown = Unknown
-custom = Custom
-builtin = Built-In
-map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone!
-map.random = [accent]Random Map
-map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor.
-map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor.
-map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
-map.invalid = Error loading map: corrupted or invalid map file.
-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):
+copylink = Customize Link
+back = Teru
+data.export = Exporteer Data
+data.import = Importeer Data
+data.exported = Data Geexporteerd.
+data.invalid = Dit is geen geldige game data.
+data.import.confirm = Importeren van data verwijderd[scarlet] alle[] huidige data.\n[accent]Dit kan niet ongedaan worden gemaakt![]\n\nWanneer de data is geimport herstart deze game automatisch.
+classic.export = Exporteer klassieke data
+classic.export.text = [accent]Mindustry[] Heeft een grote update gehad.\nKlassieke (v3.5 build 40) saves en/of mappen zijn gedetecteerd. Wil je deze exporteren naar de thuismap van je telefoon om te gebruiken in de klassieke Mindustry app?
+quit.confirm = Weet je zeker dat je wilt stoppen?
+quit.confirm.tutorial = Weet je zeker dat je weet wat je doet?\nJe kan de tutorial opnieuw beginnen via[accent] Instellingen->Game->Herneem Tutorial.[]
+loading = [accent]Laden...
+reloading = [accent]Mods herladen...
+saving = [accent]Opslaan...
+cancelbuilding = [accent][[{0}][] om blauwdruk te verwijderen
+selectschematic = [accent][[{0}][] om te selecteren + kopiëren
+pausebuilding = [accent][[{0}][] om bouwen te pauzeren
+resumebuilding = [scarlet][[{0}][] om bouwen te hervatten
+wave = [accent]Ronde {0}
+wave.waiting = [LIGHT_GRAY]Volgende ronde over {0}
+wave.waveInProgress = [LIGHT_GRAY]Ronde bezig
+waiting = [LIGHT_GRAY]Wachten...
+waiting.players = Wachten op spelers...
+wave.enemies = [LIGHT_GRAY]{0} Vijanden resterend
+wave.enemy = [LIGHT_GRAY]{0} Vijand resterend
+loadimage = Laad afbeelding
+saveimage = Bewaar afbeelding
+unknown = Onbekend
+custom = Op maat
+builtin = Ingebouwd
+map.delete.confirm = Weet je zeker dat je deze map wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt!
+map.random = [accent]Willekeurige map
+map.nospawn = Deze map heeft geen cores voor de spelers om in te spawnen! Voeg een[ROYAL] blauwe[] core toe aan de map via de editor.
+map.nospawn.pvp = Deze map heeft geen cores voor je vijanden om in te spawnen! Voeg een[SCARLET] rode[] core to aan de map via de editor.
+map.nospawn.attack = Deze map bevat geen vijandige cores om aan te vallen! Voeg een[SCARLET] rode[] core toe aan de map via de editor.
+map.invalid = Error tijdens laden van map: Ongeldig map bestand.
+workshop.update = Bijwerken
+workshop.error = Fout bij laden workshop info: {0}
+map.publish.confirm = Weet je zeker dat je deze map wilt publiceren?\n\n[lightgray]Zorg ervoor dat je de EULA van de workshop leest, anders zal je map niet zichtbaar zijn!
+workshop.menu = Selecteer wat je hiermee wilt doen.
+workshop.info = Informatie
+changelog = Update logboek (optioneel):
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}
-editor.brush = Brush
-editor.openin = Open In Editor
-editor.oregen = Ore Generation
-editor.oregen.info = Ore Generation:
-editor.mapinfo = Map Info
-editor.author = Author:
-editor.description = Description:
-editor.nodescription = A map must have a description of at least 4 characters before being published.
-editor.waves = Waves:
-editor.rules = Rules:
-editor.generation = Generation:
-editor.ingame = Edit In-Game
-editor.publish.workshop = Publish On Workshop
-editor.newmap = New Map
-workshop = Workshop
-waves.title = Waves
-waves.remove = Remove
-waves.never =
-waves.every = every
-waves.waves = wave(s)
-waves.perspawn = per spawn
-waves.to = to
+missing = Dit object is verwijderd of verplaatst.\n[lightgray]De workshop vermelding is nu niet meer gelinkt.
+publishing = [accent]Publiceren...
+publish.confirm = Weet je zeker dat je dit wilt publiceren?\n\n[lightgray]Zorg ervoor dat je de EULA van de workshopt leest, anders zal je map niet zichtbaar zijn!
+publish.error = Fout met het publiceren: {0}
+steam.error = Fout met het opstarten van steam diensten.\nError: {0}
+
+editor.brush = Kwast
+editor.openin = Bewerk in editor
+editor.oregen = Ertsgeneratie
+editor.oregen.info = Ertsgeneratie:
+editor.mapinfo = Map Informatie
+editor.author = Auteur:
+editor.description = Beschrijving:
+editor.nodescription = De map moet een beschrijving van minimaal 4 tekens hebben voordat je deze kan publiceren.
+editor.waves = Rondes:
+editor.rules = Regens:
+editor.generation = Generatie:
+editor.ingame = Bewerk In-Game
+editor.publish.workshop = Publiceer in Werkplaats
+editor.newmap = Nieuwe Map
+workshop = Werkplaats
+waves.title = Rondes
+waves.remove = Verwijder
+waves.never =
+waves.every = elke
+waves.waves = ronde(s)
+waves.perspawn = per keer
+waves.to = tot
waves.boss = Boss
-waves.preview = Preview
-waves.edit = Edit...
-waves.copy = Copy to Clipboard
-waves.load = Load from Clipboard
-waves.invalid = Invalid waves in clipboard.
-waves.copied = Waves copied.
-waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout.
-editor.default = [LIGHT_GRAY]
+waves.preview = Voorvertoning
+waves.edit = Bewerk...
+waves.copy = Kopiër naar klembord
+waves.load = Laad van klembord
+waves.invalid = Ongeldige rondes in klenbord.
+waves.copied = Rondes Gekopiëerd.
+waves.none = Geen vijanden ingesteld.\nLege rondes worden automatisch gevuld met de standaard waardes.
+editor.default = [LIGHT_GRAY]
details = Details...
-edit = Edit...
-editor.name = Name:
-editor.spawn = Spawn Unit
-editor.removeunit = Remove Unit
+edit = Bewerk...
+editor.name = Naam:
+editor.spawn = Voeg Unit toe
+editor.removeunit = Verwijder Unit
editor.teams = Teams
-editor.errorload = Error loading file:\n[accent]{0}
-editor.errorsave = Error saving file:\n[accent]{0}
-editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor.
-editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported.
-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.
-editor.update = Update
-editor.randomize = Randomize
-editor.apply = Apply
-editor.generate = Generate
-editor.resize = Resize
-editor.loadmap = Load Map
-editor.savemap = Save Map
-editor.saved = Saved!
-editor.save.noname = Your map does not have a name! Set one in the 'map info' menu.
-editor.save.overwrite = Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
-editor.import.exists = [scarlet]Unable to import:[] a built-in map named '{0}' already exists!
-editor.import = Import...
-editor.importmap = Import Map
-editor.importmap.description = Import an already existing map
-editor.importfile = Import File
-editor.importfile.description = Import an external map file
-editor.importimage = Import Legacy Image
-editor.importimage.description = Import an external map image file
-editor.export = Export...
-editor.exportfile = Export File
-editor.exportfile.description = Export a map file
-editor.exportimage = Export Terrain Image
-editor.exportimage.description = Export a map image file
-editor.loadimage = Import Terrain
-editor.saveimage = Export Terrain
-editor.unsaved = [scarlet]You have unsaved changes![]\nAre you sure you want to exit?
-editor.resizemap = Resize Map
-editor.mapname = Map Name:
-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:
-toolmode.replace = Replace
-toolmode.replace.description = Draws only on solid blocks.
-toolmode.replaceall = Replace All
-toolmode.replaceall.description = Replace all blocks in map.
-toolmode.orthogonal = Orthogonal
-toolmode.orthogonal.description = Draws only orthogonal lines.
-toolmode.square = Square
-toolmode.square.description = Square brush.
-toolmode.eraseores = Erase Ores
-toolmode.eraseores.description = Erase only ores.
-toolmode.fillteams = Fill Teams
-toolmode.fillteams.description = Fill teams instead of blocks.
-toolmode.drawteams = Draw Teams
-toolmode.drawteams.description = Draw teams instead of blocks.
-filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
-filter.distort = Distort
-filter.noise = Noise
-filter.median = Median
-filter.oremedian = Ore Median
-filter.blend = Blend
-filter.defaultores = Default Ores
-filter.ore = Ore
-filter.rivernoise = River Noise
-filter.mirror = Mirror
-filter.clear = Clear
-filter.option.ignore = Ignore
-filter.scatter = Scatter
-filter.terrain = Terrain
-filter.option.scale = Scale
-filter.option.chance = Chance
-filter.option.mag = Magnitude
-filter.option.threshold = Threshold
-filter.option.circle-scale = Circle Scale
-filter.option.octaves = Octaves
-filter.option.falloff = Falloff
-filter.option.angle = Angle
-filter.option.block = Block
-filter.option.floor = Floor
-filter.option.flooronto = Target Floor
-filter.option.wall = Wall
-filter.option.ore = Ore
-filter.option.floor2 = Secondary Floor
-filter.option.threshold2 = Secondary Threshold
-filter.option.radius = Radius
-filter.option.percentile = Percentile
-width = Width:
-height = Height:
+editor.errorload = Fout bij laden van bestand:\n[accent]{0}
+editor.errorsave = Fout van bewaren van bestand:\n[accent]{0}
+editor.errorimage = Dat is een afbeelding, geen map. Laat de extenties met rust.\n\nAls je een oude map wilt importeren gebruik je de knop die hiervoor bedoeld is in de editor.
+editor.errorlegacy = Deze map is te oud, bestandsformaat word niet meer ondersteund.
+editor.errornot = Dat is geen map bestand.
+editor.errorheader = Dit map bestand is niet geldig of foutief.
+editor.errorname = Map heeft geen naam.
+editor.update = Bijwerken
+editor.randomize = Willekeurig
+editor.apply = Gebruiken
+editor.generate = Genereer
+editor.resize = Verander formaat
+editor.loadmap = Laad Map
+editor.savemap = Bewaar Map
+editor.saved = Bewaard!
+editor.save.noname = je map heeft geen naam! Stel er een in via de map instellingen.
+editor.save.overwrite = De naam van deze map is al in gebruik door een van het spel zelf, kies een andere.
+editor.import.exists = [scarlet]Importeren mislukt:[] een ingebouwde map met de naam '{0}' bestaat al!
+editor.import = Importeer...
+editor.importmap = Importeer Map
+editor.importmap.description = Importeer een al bestande map
+editor.importfile = Importeer Bestand
+editor.importfile.description = Importer een extern map bestand
+editor.importimage = Importeer Klassieke Afbeelding
+editor.importimage.description = Importeer een oude afbeelding map
+editor.export = Exporteer...
+editor.exportfile = Exporteer Bestand
+editor.exportfile.description = Exporteer een map bestand
+editor.exportimage = Exporteer Thumbnail
+editor.exportimage.description = Exporteer map thumbnail
+editor.loadimage = Importeer Terein
+editor.saveimage = Exporteer Terein
+editor.unsaved = [scarlet]Je hebt onopgeslagen wijzigingen![]\nWeet je zeker dat je eruit wilt?
+editor.resizemap = Verander Map Formaat
+editor.mapname = Map Naam:
+editor.overwrite = [accent]Waarschuwing!\nDit overschrijft een bestaande map.
+editor.overwrite.confirm = [scarlet]Waarschuwing![] Een map met deze naam bestaat al. Weet je zeker dat je deze wilt overschrijven?
+editor.exists = Een map met deze naam bestaat al.
+editor.selectmap = Selecteer een map om te laden:
+
+toolmode.replace = Vervang
+toolmode.replace.description = Werkt enkel op vaste blokken.
+toolmode.replaceall = Vervang alles
+toolmode.replaceall.description = Vervangt alle blokken in de map.
+toolmode.orthogonal = Orthogonaal
+toolmode.orthogonal.description = Teken enkel orthogonale lijnen.
+toolmode.square = Vierkant
+toolmode.square.description = Vierkante kwast.
+toolmode.eraseores = Verwijder grondstoffen
+toolmode.eraseores.description = Verwijderd enkel grondstoffen.
+toolmode.fillteams = Vervang Teams
+toolmode.fillteams.description = Vervangt teams in plaats van blokken.
+toolmode.drawteams = Teken Teams
+toolmode.drawteams.description = Tekent teams in plaats van blokken.
+
+filters.empty = [LIGHT_GRAY]Geen filters! Voeg een toe met onderstaande knop.
+filter.distort = Verdraai
+filter.noise = Geluid
+filter.median = Mediaan
+filter.oremedian = Ertsmediaan
+filter.blend = Meng
+filter.defaultores = Standaard Grondstoffen
+filter.ore = Grondstof
+filter.rivernoise = Rivier Geluid
+filter.mirror = Spiegel
+filter.clear = Verwijder
+filter.option.ignore = Negeer
+filter.scatter = Verstrooi
+filter.terrain = Terein
+filter.option.scale = Schaal
+filter.option.chance = Verander
+filter.option.mag = Omvang
+filter.option.threshold = Drempel
+filter.option.circle-scale = Formaat Rondje
+filter.option.octaves = Octaven
+filter.option.falloff = Afval
+filter.option.angle = Hoek
+filter.option.block = Blok
+filter.option.floor = Vloer
+filter.option.flooronto = Doel Vloer
+filter.option.wall = Muur
+filter.option.ore = Grondstof
+filter.option.floor2 = Secundaire vloer
+filter.option.threshold2 = Secundaire Drempel
+filter.option.radius = Straal
+filter.option.percentile = Percentage
+
+width = Breedte:
+height = Hoogte:
menu = Menu
-play = Play
-campaign = Campaign
-load = Load
-save = Save
+play = Speel
+campaign = Veldtocht
+load = Laad
+save = Bewaar
fps = FPS: {0}
ping = Ping: {0}ms
-language.restart = Please restart your game for the language settings to take effect.
-settings = Settings
+language.restart = Herstart het spel om de gewijzigde taal te laden.
+settings = Instellingen
tutorial = Tutorial
-tutorial.retake = Re-Take Tutorial
+tutorial.retake = Herneem Tutorial
editor = Editor
mapeditor = Map Editor
-abandon = Abandon
-abandon.text = This zone and all its resources will be lost to the enemy.
-locked = Locked
-complete = [LIGHT_GRAY]Complete:
-requirement.wave = Reach Wave {0} in {1}
-requirement.core = Destroy Enemy Core in {0}
-requirement.unlock = Unlock {0}
-resume = Resume Zone:\n[LIGHT_GRAY]{0}
-bestwave = [LIGHT_GRAY]Best Wave: {0}
-launch = < LAUNCH >
-launch.title = Launch Successful
-launch.next = [LIGHT_GRAY]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
-configure = Configure Loadout
-bannedblocks = Banned Blocks
-addall = Add All
-configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}.
-configure.invalid = Amount must be a number between 0 and {0}.
-zone.unlocked = [LIGHT_GRAY]{0} unlocked.
-zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
-zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
-zone.resources = Resources Detected:
-zone.objective = [lightgray]Objective: [accent]{0}
-zone.objective.survival = Survive
-zone.objective.attack = Destroy Enemy Core
-add = Add...
-boss.health = Boss Health
-connectfail = [crimson]Failed to connect to server:\n\n[accent]{0}
-error.unreachable = Server unreachable.\nIs the address spelled correctly?
-error.invalidaddress = Invalid address.
-error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct!
-error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry!
-error.alreadyconnected = Already connected.
-error.mapnotfound = Map file not found!
-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
+
+abandon = Verlaat
+abandon.text = Je verliest deze map met alles erop en eraan aan de vijand.
+locked = Op slot
+complete = [LIGHT_GRAY]Voltooid:
+requirement.wave = Berijk ronde {0} in {1}
+requirement.core = Vernietig vijandige core in {0}
+requirement.unlock = Ontgrendel: {0}
+resume = Hervat zone:\n[LIGHT_GRAY]{0}
+bestwave = [LIGHT_GRAY]Beste ronde: {0}
+launch = < LANCEER >
+launch.title = Lancering Sucessvol
+launch.next = [LIGHT_GRAY]volgende lanceerkans in ronde {0}
+launch.unable2 = [scarlet]Lanceren niet mogelijk.[]
+launch.confirm = Dit lanceert alle items in je core.\nJe zal niet meer terug kunnen keren naar deze basis.
+launch.skip.confirm = Als je nu niet lanceert, zul je moeten wachten tot het wel weer kan.
+uncover = Ontdek
+configure = Configureer startinventaris
+bannedblocks = Verboden Blokken
+addall = Voeg Alles Toe
+configure.locked = [LIGHT_GRAY]Speel startinventaris configuratie vrij:\nronde{0}.
+configure.invalid = Hoeveelheid moet een getal zijn tussen 0 en {0}.
+zone.unlocked = [LIGHT_GRAY]{0} vrijgespeeld.
+zone.requirement.complete = Ronde {0} berijkt:\n{1} zone vrijgespeeld.
+zone.config.unlocked = Startinventaris vrijgespeeld:[lightgray]\n{0}
+zone.resources = Vindbare grondstoffen:
+zone.objective = [lightgray]Doel: [accent]{0}
+zone.objective.survival = Overleef
+zone.objective.attack = Vernietig vijandige core
+add = Voeg toe...
+boss.health = Levens Boss
+
+connectfail = [crimson]Kon niet verbinden met server:\n\n[accent]{0}
+error.unreachable = Server onbereikbaar.\nHeb je het adres goed gespeld?
+error.invalidaddress = Ongeldig adres.
+error.timedout = Verbindingspoging duurde te lang!\nDubbelcheck dat je host is geportforward, en dat je het ip wel goed hebt ingetikt!
+error.mismatch = Pakket fout:\nmogelijk is er een versie verschil tussen jou en de server.\nZorg ervoor dat beiden op de meest recente versie van Mindustry zitten!
+error.alreadyconnected = Al verbonden.
+error.mapnotfound = Map bestand niet gevonden!
+error.io = Netwerk I/O fout.
+error.any = Onbekende netwerk fout.
+error.bloom = Bloom aanzetten mislukt.\nJe apparaat ondersteunt het waarschijnlijk niet.
+
+zone.groundZero.name = Grond Nul
+zone.desertWastes.name = Woestijnpuin
+zone.craters.name = De kraters
+zone.frozenForest.name = Bevroren Bos
+zone.ruinousShores.name = Vervallen Kust
+zone.stainedMountains.name = Bekladde Berg
+zone.desolateRift.name = Verlaten Kloof
+zone.nuclearComplex.name = Vervallen Kernreactor
+zone.overgrowth.name = Overgroeid
+zone.tarFields.name = Teervelden
+zone.saltFlats.name = Zoutvlaktes
zone.impact0078.name = Impact 0078
zone.crags.name = Crags
-zone.fungalPass.name = Fungal Pass
-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 fridgid 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 dagger 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.fungalPass.name = Schimmelpad
+
+zone.groundZero.description = De optimale plek om weer tot kracht te komen. Weinig gevaar. Weinig grondstoffen.\nDelf zoveel mogelijk lood en koper als je kan.\nVertrek.
+zone.frozenForest.description = Ook hier, dicht bij de bergen, hebben de schimmels zich verspreid. De koude tempratuur houd ze niet voor eeuwig tegen.\n\nBegin de industriële revolutie. Bouw fossiele generators. Leer hoe te repareren.
+zone.desertWastes.description = Deze woestijn is groot, onvoorspelbaar, en vol met oude technologie.\nSteenkool is hier te vinden. Verbrand het om stroom op te wekken, of verwerk het tot grafiet.\n\n[lightgray]Of het hier veilig is is een tweede.
+zone.saltFlats.description = Aan de randen van de woestijn liggen de zoutvlaktes. Weinig grondstoffen zijn hier te vinden.\n\nDe vijand heeft hier rantsoenen opgeslagen. Vernietig hun core. Laat niks staan.
+zone.craters.description = Water heeft zich hier opgehoopt, herrinering aan de vroegere oorlog. Herover dit gebied. Delf zand. Maak glas. Pomp water in je wapens en boren om ze te koelen.
+zone.ruinousShores.description = Voorbij de ruines is de kust. Lang geleden werd de kust hier verdedigd maar er is weinig van terug te vinden. Enkel de meest simpele verdedigingswerken staan nog overeind, \nGa door met uitbereiden, herontdek de verloren techniek.
+zone.stainedMountains.description = Verder vanaf de kust liggen de bergen, nog niet aangetast door de schimmels.\nDelf de grote hoeveelheiden titanium titanium in het gebied en leer het te gebruiken.\n\nDe vijand is krachtig hier. Geef ze geen tijd om je te overrompelen.
+zone.overgrowth.description = Dit gebied is overgroeid, dichter bij de bron van de schimmels.\nDe vijand heeft hier een uitkijkpost. Bouw dolk units. Vernietig de vijand. Herneem wat ooit verloren was.
+zone.tarFields.description = De randen van een olieveld, tussen de bergen en de woestijn. Een van de weinige plekken met bruikbare olie.\nOndanks dat het verboden is, zijn er wel krachtige vijanden in de buurt. Onderschat ze niet.\n\n[lightgray]Onderzoek wat je verder allemaal met olie kan doen.
+zone.desolateRift.description = Een supergevaarlijk gebied. Veel grondstoffen, maar weinig ruimte. Grote kans op verwoesting. Lanceer zo snel mogelijk. Word niet overmoedig door de lange tijd tussen de rondes.
+zone.nuclearComplex.description = Een voormalige installatie voor de productie en verwerking van thorium ligt er nu verlaten bij.\n[lightgray]Onderzoek thorium en de vele toepassingen ervoor.\n\nDe vijand is hier aanwezig in grote getalen, constant waakzaam voor aanvallers.
+zone.fungalPass.description = Een transitiegebied tussen de hogergelegen bergen en de lagergelegen, beschimmelde gebieden. Een kleine verkenningsbasis is hier gepositioneerd.\nVernietig het.\nGebruik Dolk en Kruiper units. Maak de twee cores onbruikbaar.
zone.impact0078.description =
zone.crags.description =
-settings.language = Language
+
+settings.language = Taal
settings.data = Game Data
-settings.reset = Reset to Defaults
-settings.rebind = Rebind
-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
-error.title = [crimson]An error has occured
-error.crashtitle = An error has occured
+settings.reset = Terug naar standaardinstellingen
+settings.rebind = Verander
+settings.resetKey = Reset
+settings.controls = Bediening
+settings.game = Spel
+settings.sound = Geluid
+settings.graphics = Grafisch
+settings.cleardata = Wis Game Data...
+settings.clear.confirm = Weet je zeker dat je deze data wilt verwijderen?\nDit is niet terug te draaien!
+settings.clearall.confirm = [scarlet]WAARSCHUWING![]\nDit verwijderd alle darta, inclusief saves, mappen, technologie en bedienings-instellingen.\nAls je op doorgaat wist het spel al je data en stopt ie automatisch.
+paused = [accent]< Gepauzeerd >
+clear = Wis
+banned = [scarlet]Verbannen
+yes = Ja
+no = Nee
+info.title = Informatie
+error.title = [crimson]Een fout heeft zich voorgedaan
+error.crashtitle = Een fout heeft zich voorgedaan
blocks.input = Input
blocks.output = Output
blocks.booster = Booster
block.unknown = [LIGHT_GRAY]???
-blocks.powercapacity = Power Capacity
-blocks.powershot = Power/Shot
+blocks.powercapacity = Stroom Capaciteit
+blocks.powershot = Stroom/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.targetsair = Luchtdoelwitten
+blocks.targetsground = Gronddoelwitten
+blocks.itemsmoved = Beweegsnelheid
+blocks.launchtime = Tijd tussen lanceringen
+blocks.shootrange = Bereik
+blocks.size = Formaat
+blocks.liquidcapacity = Vloeistof Capaciteit
+blocks.powerrange = Stroom Bereik
+blocks.powerconnections = Maximale Hoeveelheid Dradem
+blocks.poweruse = Stroom verbruik
+blocks.powerdamage = Stroom/Damage
+blocks.itemcapacity = Materiaal Capaciteit
+blocks.basepowergeneration = Standaard Stroom Generatie
+blocks.productiontime = Productie Tijd
+blocks.repairtime = Volledige Blok Repareertijd
+blocks.speedincrease = Snelheidsverhoging
+blocks.range = Bereik
+blocks.drilltier = Valt te delven
+blocks.drillspeed = Standaard mine snelheid
blocks.boosteffect = Boost Effect
-blocks.maxunits = Max Active Units
+blocks.maxunits = Maximaal Actieve 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
-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}
-bar.powerstored = Stored: {0}/{1}
-bar.poweramount = Power: {0}
-bar.poweroutput = Power Output: {0}
+blocks.buildtime = Bouw tijd
+blocks.buildcost = Bouw kosten
+blocks.inaccuracy = Onnauwkeurigheid
+blocks.shots = Shoten
+blocks.reload = Schoten/Seconde
+blocks.ammo = Ammonutie
+
+bar.drilltierreq = Betere miner nodig
+bar.drillspeed = Mining Snelheid: {0}/s
+bar.pumpspeed = Pomp Snelheid: {0}/s
+bar.efficiency = Rendement: {0}%
+bar.powerbalance = Stroom: {0}
+bar.powerstored = Opgeslagen: {0}/{1}
+bar.poweramount = Stroom: {0}
+bar.poweroutput = Stroom Output: {0}
bar.items = Items: {0}
-bar.capacity = Capacity: {0}
-bar.liquid = Liquid
-bar.heat = Heat
-bar.power = Power
-bar.progress = Build Progress
+bar.capacity = Capaciteit: {0}
+bar.liquid = Vloeistof
+bar.heat = Warmte
+bar.power = Stroom
+bar.progress = Bouw Voortgang
bar.spawned = Units: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] dmg
-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.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 reload
-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
+bullet.splashdamage = [stat]{0}[lightgray] gebied dmg ~[stat] {1}[lightgray] tiles
+bullet.incendiary = [stat]brandstichtend
+bullet.homing = [stat]doelzoekend
+bullet.shock = [stat]schok
+bullet.frag = [stat]clusterbom
+bullet.knockback = [stat]{0}[lightgray] terugslag
+bullet.freezing = [stat]bevriezend
+bullet.tarred = [stat]pek
+bullet.multiplier = [stat]{0}[lightgray]x ammonutie verdubbelaar
+bullet.reload = [stat]{0}[lightgray]x herlaad
+
+unit.blocks = blokken
+unit.powersecond = stroom eenheid/seconde
+unit.liquidsecond = vloeistof eenheid/seconde
+unit.itemssecond = items/seconde
+unit.liquidunits = vloeistof eenheid
+unit.powerunits = stroom eenheid
+unit.degrees = graden
+unit.seconds = secondes
unit.persecond = /sec
-unit.timesspeed = x speed
+unit.timesspeed = x snelheid
unit.percent = %
unit.items = items
-category.general = General
-category.power = Power
-category.liquids = Liquids
+unit.thousands = k
+unit.millions = mil
+category.general = Algemeen
+category.power = Stroom
+category.liquids = Vloeisof
category.items = Items
-category.crafting = Crafting
-category.shooting = Shooting
-category.optional = Optional Enhancements
-setting.landscape.name = Lock Landscape
-setting.shadows.name = Shadows
-setting.blockreplace.name = Automatic Block Suggestions
+category.crafting = Productie
+category.shooting = Wapens
+category.optional = Optionele Verbeteringen
+setting.landscape.name = Vergrendel Landscape
+setting.shadows.name = Schaduws
+setting.blockreplace.name = Automatische Blok Suggesties
setting.linear.name = Linear Filtering
setting.hints.name = Hints
-setting.animatedwater.name = Animated Water
-setting.animatedshields.name = Animated Shields
-setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
-setting.indicators.name = Ally Indicators
+setting.buildautopause.name = Pauzeer Bouw Automatisch
+setting.animatedwater.name = Animeer Water
+setting.animatedshields.name = Animeer Schilden
+setting.antialias.name = Antialias[LIGHT_GRAY] (herstart vereist)[]
+setting.indicators.name = Toon Bondgenoten
setting.autotarget.name = Auto-Target
-setting.keyboard.name = Mouse+Keyboard Controls
+setting.keyboard.name = Muis+Toetsenbord Controls
setting.touchscreen.name = Touchscreen Controls
setting.fpscap.name = Max FPS
setting.fpscap.none = None
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.uiscale.name = UI Schaal[lightgray] (herstart vereist)[]
+setting.swapdiagonal.name = Altijd Diagonaal Plaatsen
+setting.difficulty.training = kalm
+setting.difficulty.easy = makkelijk
+setting.difficulty.normal = normaal
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.conveyorpathfinding.name = Conveyor Placement Pathfinding
-setting.sensitivity.name = Controller Sensitivity
+setting.difficulty.insane = krankzinnig
+setting.difficulty.name = Moeilijkheidsgraad:
+setting.screenshake.name = Schuddend Scherm
+setting.effects.name = Toon Effecten
+setting.destroyedblocks.name = Toon Vernietigde Blokken
+setting.conveyorpathfinding.name = Lopendeband Plaats Hulp
+setting.coreselect.name = Sta cores toe in blauwdrukken
+setting.sensitivity.name = Gevoeligheid Controller
setting.saveinterval.name = Autosave Interval
-setting.seconds = {0} Seconds
-setting.fullscreen.name = Fullscreen
-setting.borderlesswindow.name = Borderless Window[LIGHT_GRAY] (may require restart)
+setting.seconds = {0} Seconden
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} millisecondes
+setting.fullscreen.name = Volledig scherm
+setting.borderlesswindow.name = Borderless Venster[LIGHT_GRAY] (wellicht herstart vereist)
setting.fps.name = Show FPS
+setting.blockselectkeys.name = Toon Blok Selectie Toetscombinaties
setting.vsync.name = VSync
-setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
-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.pixelate.name = Pixelate [LIGHT_GRAY](mogelijk verminderde performance)
+setting.minimap.name = Toon Minimap
+setting.position.name = Toon Speler Posities
+setting.musicvol.name = Muziek Volume
+setting.ambientvol.name = Achtergronds Volume
+setting.mutemusic.name = Demp Muziek
setting.sfxvol.name = SFX Volume
-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.chatopacity.name = Chat Opacity
-setting.lasersopacity.name = Power Laser Opacity
-setting.playerchat.name = Display In-Game Chat
-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...
-uiscale.cancel = Cancel & Exit
+setting.mutesound.name = Demp Geluid
+setting.crashreport.name = Stuur Anonieme Crashmeldingen
+setting.savecreate.name = Bewaar Saves Automatisch
+setting.publichost.name = Publieke Server Zichtbaarheid
+setting.chatopacity.name = Chat Transparantie
+setting.lasersopacity.name = Stroom Draad Transparantie
+setting.playerchat.name = Toon chat
+public.confirm = Wil je je game publiek maken?\n[accent]Iedereen kan dan je games joinen.\n[lightgray]Dit kan je later veranderen in Instellingen->Spel->Publieke Server Zichtbaarheid.
+public.beta = Onthoud dat beta versies van het spel niet publiek kunnen lobbyen.
+uiscale.reset = UI formaat is geweizigd.\nKlik op "OK" om het te bevestigen.\n[scarlet]Anders word het in[accent] {0}[] ongedaan gemaakt...
+uiscale.cancel = Anuleer & Exit
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
+keybind.title = Verander Keys
+keybinds.mobile = [scarlet]De meeste keybinds werken niet voor mobiel. Enkel standaard bewegingen zijn gesupport.
+category.general.name = Algemeen
+category.view.name = Toon
category.multiplayer.name = Multiplayer
-command.attack = Attack
-command.rally = Rally
-command.retreat = Retreat
-keybind.clear_building.name = Clear Building
-keybind.press = Press a key...
-keybind.press.axis = Press an axis or key...
-keybind.screenshot.name = Map Screenshot
-keybind.move_x.name = Move x
-keybind.move_y.name = Move y
-keybind.schematic_select.name = Select Region
-keybind.schematic_menu.name = Schematic Menu
-keybind.schematic_flip_x.name = Flip Schematic X
-keybind.schematic_flip_y.name = Flip Schematic Y
-keybind.fullscreen.name = Toggle Fullscreen
-keybind.select.name = Select/Shoot
-keybind.diagonal_placement.name = Diagonal Placement
-keybind.pick.name = Pick Block
-keybind.break_block.name = Break Block
-keybind.deselect.name = Deselect
-keybind.shoot.name = Shoot
+command.attack = Val aan
+command.rally = Groepeer
+command.retreat = Terugtrekken
+placement.blockselectkeys = \n[lightgray]Toets: [{0},
+keybind.clear_building.name = Stop met bouwen
+keybind.press = Druk op een toets...
+keybind.press.axis = Druk of swipe een toets...
+keybind.screenshot.name = Map Schermfbeelding
+keybind.toggle_power_lines.name = Wel/Geen Stroom Draden
+keybind.move_x.name = Beweeg x
+keybind.move_y.name = Beweeg y
+keybind.mouse_move.name = Volg Muis
+keybind.dash.name = Vlieg
+keybind.schematic_select.name = Selecteer gebied
+keybind.schematic_menu.name = Blauwdruk Menu
+keybind.schematic_flip_x.name = Spiegel Blauwdruk X
+keybind.schematic_flip_y.name = Spiegel Blauwdruk Y
+keybind.category_prev.name = Vorige Categorie
+keybind.category_next.name = Volgende Categorie
+keybind.block_select_left.name = Selecteer Blok Links
+keybind.block_select_right.name = Selecteer Blok Rechts
+keybind.block_select_up.name = Selecteer Blok Omhoog
+keybind.block_select_down.name = Selecteer Blok Omlaag
+keybind.block_select_01.name = Selecteer Categorie/Blok 1
+keybind.block_select_02.name = Selecteer Categorie/Blok 2
+keybind.block_select_03.name = Selecteer Categorie/Blok 3
+keybind.block_select_04.name = Selecteer Categorie/Blok 4
+keybind.block_select_05.name = Selecteer Categorie/Blok 5
+keybind.block_select_06.name = Selecteer Categorie/Blok 6
+keybind.block_select_07.name = Selecteer Categorie/Blok 7
+keybind.block_select_08.name = Selecteer Categorie/Blok 8
+keybind.block_select_09.name = Selecteer Categorie/Blok 9
+keybind.block_select_10.name = Selecteer Categorie/Blok 10
+keybind.fullscreen.name = Schakel Fullscreen
+keybind.select.name = Selecteer/Schiet
+keybind.diagonal_placement.name = Plaats Diagonaal
+keybind.pick.name = Kies Blok
+keybind.break_block.name = Breek Blok
+keybind.deselect.name = Deselecteer
+keybind.shoot.name = Shiet
keybind.zoom.name = Zoom
keybind.menu.name = Menu
-keybind.pause.name = Pause
-keybind.pause_building.name = Pause/Resume Building
+keybind.pause.name = Pauze
+keybind.pause_building.name = Pauzeer/Hervat Bouwen
keybind.minimap.name = Minimap
-keybind.dash.name = Dash
keybind.chat.name = Chat
-keybind.player_list.name = Player list
+keybind.player_list.name = Speler list
keybind.console.name = Console
-keybind.rotate.name = Rotate
-keybind.rotateplaced.name = Rotate Existing (Hold)
-keybind.toggle_menus.name = Toggle menus
-keybind.chat_history_prev.name = Chat history prev
-keybind.chat_history_next.name = Chat history next
+keybind.rotate.name = Roteer
+keybind.rotateplaced.name = Roteer bestaand (Houd vast)
+keybind.toggle_menus.name = Schakel menus
+keybind.chat_history_prev.name = Chat geschiedenis ouder
+keybind.chat_history_next.name = Chat geschiedenis nieuwer
keybind.chat_scroll.name = Chat scroll
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.
-mode.sandbox.name = Sandbox
-mode.sandbox.description = Infinite resources and no timer for waves.
+mode.help.title = Beschrijving van modes
+mode.survival.name = Overleving
+mode.survival.description = De normale mode. Standaard grondstoffen en rondes met vijanden.
+mode.sandbox.name = Zandbak
+mode.sandbox.description = Oneindige resources en geen automatische vijandelijke rondes.
mode.editor.name = Editor
mode.pvp.name = PvP
-mode.pvp.description = Fight against other players locally.
-mode.attack.name = Attack
-mode.attack.description = No waves, with the goal to destroy the enemy base.
-mode.custom = Custom Rules
-rules.infiniteresources = Infinite Resources
-rules.wavetimer = Wave Timer
-rules.waves = Waves
-rules.attack = Attack Mode
-rules.enemyCheat = Infinite AI Resources
+mode.pvp.description = Vecht tegen andere spelers.
+mode.attack.name = Aanvallen
+mode.attack.description = Geen rondes, maar met als doel de vijandlijke core(s) te vernietigen.
+mode.custom = Aangepaste regels
+
+rules.infiniteresources = Oneindige Resources
+rules.reactorexplosions = Ontploffende Reactors
+rules.wavetimer = Ronde timer
+rules.waves = Rondes
+rules.attack = Aanval modus
+rules.enemyCheat = Oneindige AI grondstoffen
rules.unitdrops = Unit Drops
-rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
-rules.unithealthmultiplier = Unit Health Multiplier
-rules.playerhealthmultiplier = Player Health Multiplier
-rules.playerdamagemultiplier = Player Damage Multiplier
-rules.unitdamagemultiplier = Unit Damage Multiplier
-rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
-rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
-rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
-rules.buildcostmultiplier = Build Cost Multiplier
-rules.buildspeedmultiplier = Build Speed Multiplier
-rules.waitForWaveToEnd = Waves wait for enemies
-rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles)
-rules.respawns = Max respawns per wave
-rules.limitedRespawns = Limit Respawns
-rules.title.waves = Waves
-rules.title.respawns = Respawns
-rules.title.resourcesbuilding = Resources & Building
-rules.title.player = Players
-rules.title.enemy = Enemies
+rules.unitbuildspeedmultiplier = Unit Spawn Snelheid Vermenigvulder
+rules.unithealthmultiplier = Unit Health Vermenigvulder
+rules.blockhealthmultiplier = Blok Health Vermenigvulder
+rules.playerhealthmultiplier = Speler Health Vermenigvulder
+rules.playerdamagemultiplier = Speler Damage Vermenigvulder
+rules.unitdamagemultiplier = Unit Damage Vermenigvulder
+rules.enemycorebuildradius = Niet-Bouw Bereik Vijandelijke Cores:[LIGHT_GRAY] (tegels)
+rules.respawntime = Herspawn Tijd:[LIGHT_GRAY] (sec)
+rules.wavespacing = Tijd Tussen Rondes:[LIGHT_GRAY] (sec)
+rules.buildcostmultiplier = Bouw kosten Vermenigvulder
+rules.buildspeedmultiplier = Bouw snelheid Vermenigvulder
+rules.waitForWaveToEnd = Rondes wachten tot alles is verslagen
+rules.dropzoneradius = Vijandelijke Spawn Diameter:[LIGHT_GRAY] (tegels)
+rules.respawns = Maximale Levens Per Ronde
+rules.limitedRespawns = Maximale Levens
+rules.title.waves = Rondes
+rules.title.respawns = Respawn
+rules.title.resourcesbuilding = Grondstoffen & Bouwen
+rules.title.player = Spelers
+rules.title.enemy = Tegenstanders
rules.title.unit = Units
+rules.title.experimental = Experimenteel
+rules.lighting = Belichting
+rules.ambientlight = Mist
+
content.item.name = Items
-content.liquid.name = Liquids
+content.liquid.name = Vloeisof
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
+content.block.name = Blokken
+content.mech.name = Behuizing
+item.copper.name = Coper
+item.lead.name = Lood
+item.coal.name = Steenkool
+item.graphite.name = Grafiet
item.titanium.name = Titanium
item.thorium.name = Thorium
-item.silicon.name = Silicon
+item.silicon.name = Silicium
item.plastanium.name = Plastanium
item.phase-fabric.name = Phase Fabric
item.surge-alloy.name = Surge Alloy
item.spore-pod.name = Spore Pod
-item.sand.name = Sand
+item.sand.name = Zand
item.blast-compound.name = Blast Compound
item.pyratite.name = Pyratite
-item.metaglass.name = Metaglass
+item.metaglass.name = Glas
item.scrap.name = Scrap
liquid.water.name = Water
liquid.slag.name = Slag
-liquid.oil.name = Oil
-liquid.cryofluid.name = Cryofluid
+liquid.oil.name = Olie
+liquid.cryofluid.name = Koelvloeistof
mech.alpha-mech.name = Alpha
mech.alpha-mech.weapon = Heavy Repeater
mech.alpha-mech.ability = Drone Swarm
@@ -752,142 +824,147 @@ mech.trident-ship.name = Trident
mech.trident-ship.weapon = Bomb Bay
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Flame Repeater
-item.explosiveness = [LIGHT_GRAY]Explosiveness: {0}%
-item.flammability = [LIGHT_GRAY]Flammability: {0}%
-item.radioactivity = [LIGHT_GRAY]Radioactivity: {0}%
+item.corestorable = [lightgray]Kan in de Core: {0}
+item.explosiveness = [LIGHT_GRAY]Explosivieit: {0}%
+item.flammability = [LIGHT_GRAY]Vlambaarheid: {0}%
+item.radioactivity = [LIGHT_GRAY]Radioactiviteit: {0}%
unit.health = [LIGHT_GRAY]Health: {0}
-unit.speed = [LIGHT_GRAY]Speed: {0}
-mech.weapon = [LIGHT_GRAY]Weapon: {0}
+unit.speed = [LIGHT_GRAY]Snelheid: {0}
+mech.weapon = [LIGHT_GRAY]Wapen: {0}
mech.health = [LIGHT_GRAY]Health: {0}
-mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0}
-mech.minespeed = [LIGHT_GRAY]Mining Speed: {0}
-mech.minepower = [LIGHT_GRAY]Mining Power: {0}
+mech.itemcapacity = [LIGHT_GRAY]Item Capaciteit: {0}
+mech.minespeed = [LIGHT_GRAY]Mining Snelheid: {0}
+mech.minepower = [LIGHT_GRAY]Mining Hardheid: {0}
mech.ability = [LIGHT_GRAY]Ability: {0}
-mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
-liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
-liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
-liquid.temperature = [LIGHT_GRAY]Temperature: {0}
-block.sand-boulder.name = Sand Boulder
-block.grass.name = Grass
-block.salt.name = Salt
-block.saltrocks.name = Salt Rocks
-block.pebbles.name = Pebbles
+mech.buildspeed = [LIGHT_GRAY]Bouw Snelheid: {0}%
+liquid.heatcapacity = [LIGHT_GRAY]Warmte Capaciteit: {0}
+liquid.viscosity = [LIGHT_GRAY]Viscositeit: {0}
+liquid.temperature = [LIGHT_GRAY]Tempratuur: {0}
+
+block.sand-boulder.name = Zandkei
+block.grass.name = Gras
+block.salt.name = Zout
+block.saltrocks.name = Zoutsteen
+block.pebbles.name = Steentjes
block.tendrils.name = Tendrils
-block.sandrocks.name = Sand Rocks
-block.spore-pine.name = Spore Pine
-block.sporerocks.name = Spore Rocks
-block.rock.name = Rock
-block.snowrock.name = Snow Rock
-block.snow-pine.name = Snow Pine
+block.sandrocks.name = Zandsteen
+block.spore-pine.name = Sporenden
+block.sporerocks.name = Spore Steens
+block.rock.name = Steen
+block.snowrock.name = Sneeuwsteen
+block.snow-pine.name = Sneeuwden
block.shale.name = Shale
block.shale-boulder.name = Shale Boulder
-block.moss.name = Moss
-block.shrubs.name = Shrubs
+block.moss.name = Mos
+block.shrubs.name = Plantje
block.spore-moss.name = Spore Moss
-block.shalerocks.name = Shale Rocks
-block.scrap-wall.name = Scrap Wall
-block.scrap-wall-large.name = Large Scrap Wall
-block.scrap-wall-huge.name = Huge Scrap Wall
-block.scrap-wall-gigantic.name = Gigantic Scrap Wall
+block.shalerocks.name = Shale Steens
+block.scrap-wall.name = Scrap Muur
+block.scrap-wall-large.name = Large Scrap Muur
+block.scrap-wall-huge.name = Huge Scrap Muur
+block.scrap-wall-gigantic.name = Gigantic Scrap Muur
block.thruster.name = Thruster
-block.kiln.name = Kiln
-block.graphite-press.name = Graphite Press
-block.multi-press.name = Multi-Press
-block.constructing = {0} [LIGHT_GRAY](Constructing)
-block.spawn.name = Enemy Spawn
+block.kiln.name = Glasoven
+block.graphite-press.name = Grafiet Pers
+block.multi-press.name = Super-Pers
+block.constructing = {0} [LIGHT_GRAY](Bouwen)
+block.spawn.name = Vijandelijke 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.deepwater.name = Diep Water
block.water.name = Water
-block.tainted-water.name = Tainted Water
-block.darksand-tainted-water.name = Dark Sand Tainted Water
-block.tar.name = Tar
-block.stone.name = Stone
-block.sand.name = Dark Sand
-block.darksand.name = Dark Sand
-block.ice.name = Ice
-block.snow.name = Snow
-block.craters.name = Craters
-block.sand-water.name = Sand water
-block.darksand-water.name = Dark Sand Water
+block.tainted-water.name = Vervuild Water
+block.darksand-tainted-water.name = Donker Zand Vervuild Water
+block.tar.name = Olie
+block.stone.name = Steen
+block.sand.name = Donker Zand
+block.darksand.name = Donker Zand
+block.ice.name = Ijs
+block.snow.name = Sneeuw
+block.craters.name = Krarters
+block.sand-water.name = Zand water
+block.darksand-water.name = Donker Zand Water
block.char.name = Char
block.holostone.name = Holo stone
block.ice-snow.name = Ice Snow
-block.rocks.name = Rocks
-block.icerocks.name = Ice rocks
-block.snowrocks.name = Snow Rocks
-block.dunerocks.name = Dune Rocks
-block.pine.name = Pine
-block.white-tree-dead.name = White Tree Dead
-block.white-tree.name = White Tree
+block.rocks.name = Stenen
+block.icerocks.name = Ijs Stenen
+block.snowrocks.name = Snow Steens
+block.dunerocks.name = Dune Steens
+block.pine.name = Den
+block.white-tree-dead.name = Witte Boom Dood
+block.white-tree.name = Witte Boom
block.spore-cluster.name = Spore Cluster
-block.metal-floor.name = Metal Floor
-block.metal-floor-2.name = Metal Floor 2
-block.metal-floor-3.name = Metal Floor 3
-block.metal-floor-5.name = Metal Floor 5
-block.metal-floor-damaged.name = Metal Floor Damaged
-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.magmarock.name = Magma Rock
+block.metal-floor.name = Metalen Vloer
+block.metal-floor-2.name = Metalen Vloer 2
+block.metal-floor-3.name = Metalen Vloer 3
+block.metal-floor-5.name = Metalen Vloer 5
+block.metal-floor-damaged.name = Metalen Vloer Beschadigd
+block.dark-panel-1.name = Donker Paneel 1
+block.dark-panel-2.name = Donker Paneel 2
+block.dark-panel-3.name = Donker Paneel 3
+block.dark-panel-4.name = Donker Paneel 4
+block.dark-panel-5.name = Donker Paneel 5
+block.dark-panel-6.name = Donker Paneel 6
+block.dark-metal.name = Donker Metaal
+block.ignarock.name = Igna Steen
+block.hotrock.name = Lava Steen
+block.magmarock.name = Magma Steen
block.cliffs.name = Cliffs
-block.copper-wall.name = Copper Wall
-block.copper-wall-large.name = Large Copper Wall
-block.titanium-wall.name = Titanium Wall
-block.titanium-wall-large.name = Large Titanium Wall
-block.plastanium-wall.name = Plastanium Wall
-block.plastanium-wall-large.name = Large Plastanium Wall
-block.phase-wall.name = Phase Wall
-block.phase-wall-large.name = Large Phase Wall
-block.thorium-wall.name = Thorium Wall
-block.thorium-wall-large.name = Large Thorium Wall
-block.door.name = Door
-block.door-large.name = Large Door
+block.copper-wall.name = Koperen Muur
+block.copper-wall-large.name = Grote Koperen Muur
+block.titanium-wall.name = Titanium Muur
+block.titanium-wall-large.name = Grote Titanium Muur
+block.plastanium-wall.name = Plastanium Muur
+block.plastanium-wall-large.name = Grote Plastanium Muur
+block.phase-wall.name = Phase Muur
+block.phase-wall-large.name = Grote Phase Muur
+block.thorium-wall.name = Thorium Muur
+block.thorium-wall-large.name = Grote Thorium Muur
+block.door.name = Deur
+block.door-large.name = Grote Deur
block.duo.name = Duo
block.scorch.name = Scorch
block.scatter.name = Scatter
block.hail.name = Hail
block.lancer.name = Lancer
-block.conveyor.name = Conveyor
-block.titanium-conveyor.name = Titanium Conveyor
-block.armored-conveyor.name = Armored Conveyor
-block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors.
-block.junction.name = Junction
+block.conveyor.name = Lopende Band
+block.titanium-conveyor.name = Titanium Lopende Band
+block.armored-conveyor.name = Gepantserde Lopende Band
+block.armored-conveyor.description = Verplaatst items met dezelfde snelheid als een van titanium, maar heeft meer levenspunten. accepteert alleen items van de zijkanten als het ook lopende banden zijn.
+block.junction.name = Kruising
block.router.name = Router
block.distributor.name = Distributor
-block.sorter.name = Sorter
-block.inverted-sorter.name = Inverted Sorter
-block.message.name = Message
+block.sorter.name = Sorteerder
+block.inverted-sorter.name = Omgekeerder Sorteerder
+block.message.name = Bericht
+block.illuminator.name = Lamp
+block.illuminator.description = Een kleine aanpasbare lamp, heef stroom nodig.
block.overflow-gate.name = Overflow Gate
block.silicon-smelter.name = Silicon Smelter
block.phase-weaver.name = Phase Weaver
block.pulverizer.name = Pulverizer
block.cryofluidmixer.name = Cryofluid Mixer
block.melter.name = Melter
-block.incinerator.name = Incinerator
+block.incinerator.name = Verbrander
block.spore-press.name = Spore Press
block.separator.name = Separator
block.coal-centrifuge.name = Coal Centrifuge
-block.power-node.name = Power Node
-block.power-node-large.name = Large Power Node
-block.surge-tower.name = Surge Tower
-block.battery.name = Battery
-block.battery-large.name = Large Battery
-block.combustion-generator.name = Combustion Generator
+block.power-node.name = Stroompaal
+block.power-node-large.name = Grote Stroompaal
+block.surge-tower.name = Hoogspanningsmast
+block.diode.name = Batterij Diode
+block.battery.name = Batterij
+block.battery-large.name = Grote Batterij
+block.combustion-generator.name = Fossiele Generator
block.turbine-generator.name = Turbine Generator
block.differential-generator.name = Differential Generator
block.impact-reactor.name = Impact Reactor
-block.mechanical-drill.name = Mechanical Drill
-block.pneumatic-drill.name = Pneumatic Drill
+block.mechanical-drill.name = Mechanische Drill
+block.pneumatic-drill.name = Pneumatische Drill
block.laser-drill.name = Laser Drill
-block.water-extractor.name = Water Extractor
+block.water-extractor.name = Water Put
block.cultivator.name = Cultivator
block.dart-mech-pad.name = Dart Mech Pad
block.delta-mech-pad.name = Delta Mech Pad
@@ -896,15 +973,16 @@ block.trident-ship-pad.name = Trident Ship Pad
block.glaive-ship-pad.name = Glaive Ship Pad
block.omega-mech-pad.name = Omega Mech Pad
block.tau-mech-pad.name = Tau Mech Pad
-block.conduit.name = Conduit
-block.mechanical-pump.name = Mechanical Pump
+block.conduit.name = Pijp
+block.mechanical-pump.name = Mechanische Pomp
block.item-source.name = Item Source
block.item-void.name = Item Void
block.liquid-source.name = Liquid Source
+block.liquid-void.name = Liquid Void
block.power-void.name = Power Void
block.power-source.name = Power Infinite
block.unloader.name = Unloader
-block.vault.name = Vault
+block.vault.name = Kluis
block.wave.name = Wave
block.swarmer.name = Swarmer
block.salvo.name = Salvo
@@ -914,9 +992,9 @@ block.bridge-conveyor.name = Bridge Conveyor
block.plastanium-compressor.name = Plastanium Compressor
block.pyratite-mixer.name = Pyratite Mixer
block.blast-mixer.name = Blast Mixer
-block.solar-panel.name = Solar Panel
-block.solar-panel-large.name = Large Solar Panel
-block.oil-extractor.name = Oil Extractor
+block.solar-panel.name = Zonnepaneeltje
+block.solar-panel-large.name = Zonnepaneel
+block.oil-extractor.name = Olie put
block.command-center.name = Command Center
block.draug-factory.name = Draug Miner Drone Factory
block.spirit-factory.name = Spirit Drone Factory
@@ -930,10 +1008,11 @@ block.fortress-factory.name = Fortress Mech Factory
block.revenant-factory.name = Revenant Fighter Factory
block.repair-point.name = Repair Point
block.pulse-conduit.name = Pulse Conduit
+block.plated-conduit.name = Gepantserde Pijp
block.phase-conduit.name = Phase Conduit
block.liquid-router.name = Liquid Router
-block.liquid-tank.name = Liquid Tank
-block.liquid-junction.name = Liquid Junction
+block.liquid-tank.name = Vloeistof Tank
+block.liquid-junction.name = Vloeistof Kruising
block.bridge-conduit.name = Bridge Conduit
block.rotary-pump.name = Rotary Pump
block.thorium-reactor.name = Thorium Reactor
@@ -944,32 +1023,32 @@ block.thermal-generator.name = Thermal Generator
block.alloy-smelter.name = Alloy Smelter
block.mender.name = Mender
block.mend-projector.name = Mend Projector
-block.surge-wall.name = Surge Wall
-block.surge-wall-large.name = Large Surge Wall
+block.surge-wall.name = Surge Muur
+block.surge-wall-large.name = Grote Surge Muur
block.cyclone.name = Cyclone
block.fuse.name = Fuse
-block.shock-mine.name = Shock Mine
+block.shock-mine.name = Electrische Landmijn
block.overdrive-projector.name = Overdrive Projector
-block.force-projector.name = Force Projector
+block.force-projector.name = Krachtveld
block.arc.name = Arc
block.rtg-generator.name = RTG Generator
block.spectre.name = Spectre
block.meltdown.name = Meltdown
-block.container.name = Container
+block.container.name = Doos
block.launch-pad.name = Launch Pad
block.launch-pad-large.name = Large Launch Pad
-team.blue.name = blue
-team.crux.name = red
-team.sharded.name = orange
-team.orange.name = orange
-team.derelict.name = derelict
-team.green.name = green
-team.purple.name = purple
+team.blue.name = blauw
+team.crux.name = rood
+team.sharded.name = oranje
+team.orange.name = oranje
+team.derelict.name = wees
+team.green.name = groen
+team.purple.name = paars
unit.spirit.name = Spirit Drone
unit.draug.name = Draug Miner Drone
unit.phantom.name = Phantom Drone
-unit.dagger.name = Dagger
-unit.crawler.name = Crawler
+unit.dagger.name = Dolk
+unit.crawler.name = Kruiper
unit.titan.name = Titan
unit.ghoul.name = Ghoul Bomber
unit.wraith.name = Wraith Fighter
@@ -980,27 +1059,28 @@ unit.chaos-array.name = Chaos Array
unit.eradicator.name = Eradicator
unit.lich.name = Lich
unit.reaper.name = Reaper
-tutorial.next = [lightgray]
-tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
-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.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nPlace one on a copper vein.
-tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
-tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
-tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.
-tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
-tutorial.turret = Defensive structures must be built to repel the[LIGHT_GRAY] enemy[].\nBuild a duo turret near your base.
-tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill next to the turret to supply it with mined copper.
-tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
+tutorial.next = [lightgray]
+tutorial.intro = Welkom bij de[scarlet] Mindustry Tutorial.[]\nBegin met het[accent] delven van koper[]. Klik op een vakje die het heeft om het te delven.\n\n[accent]{0}/{1} koper
+tutorial.intro.mobile = Welkom bij de[scarlet] Mindustry Tutorial.[]\nVeeg over het scherm om te bewegen.\n[accent]Knijp met 2 vingers [] om in en uit te zoomen.\nBegin met het[accent] delven van koper[]. Beweeg dichterbij, en klik er dan op.\n\n[accent]{0}/{1} koper
+tutorial.drill = Met de hand delven is inefficient.\n[accent]Drills []kunnen automatisch voor je delven.\nPlaats er een op de koper.
+tutorial.drill.mobile = Met de hand delven is inefficient.\n[accent]Drills []kunnen automatisch voor je delven.\nZoek de drill rechts onderin.\nSelecter de[accent] mechanische drill[].\nPlaats het op de koper door erop te klikken, druk dan op het[accent] vinkje[] om het bouwen te bevestigen.\nKlik op de[accent] X knop[] om het te anuleren.
+tutorial.blockinfo = Elk blok heeft andere statistieken. Elke drill kan enkel bepaalde dingen delven.\nOm het van een blok te checken,[accent] druk op de "?" knop terwijl je het blok vast hebt.[]\n\n[accent]Lees de stats van de Mechanische Drill maar eens.[]
+tutorial.conveyor = [accent]Lopende Banden[] worden gebruikt om je items naar je core te krijgen.\nLeg een line aan van je drills tot aan je core.
+tutorial.conveyor.mobile = [accent]Lopende Banden[] worden gebruikt om je items naar je core te krijgen.\nLeg een line aan van je drills tot aan je core.\n[accent] Doe dit door je vinger een paar seconden stil te houden[] en dan in een richting te slepen.\n\n[accent]{0}/{1} lopende banden in 1x geplaatst\n[accent]0/1 items afgeleverd
+tutorial.turret = Defensieve gebouwen moeten worden gebouwd tegen de[LIGHT_GRAY] vijand[].\nBouw een duo kannon bij je basis.
+tutorial.drillturret = Duo's hebben[accent] koperen ammonutie []nodig om te schieten.\nPlaatst een drill ernaast om het van koper te voorzien.
+tutorial.pause = Tijdens een gevecht is het mogelijk[accent] het spel te pauzeren.[]\nJe kan nog wel je gebouwen plannen dan.\n\n[accent]Pauzeer het spel (spatie) nu.
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.unpause = Now press space again to unpause.
-tutorial.unpause.mobile = Now press it again to unpause.
-tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
-tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
-tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[]
-tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[]
-tutorial.waves = The[LIGHT_GRAY] enemy[] approaches.\n\nDefend your core for 2 waves. Build more turrets.
-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.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
+tutorial.unpause = Doe het opnieuw om weer verder te gaan.
+tutorial.unpause.mobile = Doe het opnieuw om weer verder te gaan.
+tutorial.breaking = Vaak moet je blokken weer verwijderen.\n[accent]Houd rechts-klik ingedrukt[] om alle geselecteerde blokken te vernietigen.[]\n\n[accent]Vernietig de scrap blokken links van je core om verder te gaan.
+tutorial.breaking.mobile = Vaak moet je blokken weer verwijderen.\n[accent]klik op de hamer voor vernietigigs-mode[], klik dan op een blok om het te breken.\nVernietig een heel gebied door je vinger een paar seconden still te houden en dan te slepen in een richting.\nKlik dan op het vinkje om het te bevestigen.\n\n[accent]Vernietig de scrap blokken links van je core om verder te gaan.
+tutorial.withdraw = In sommige situaties, is het nodig om items uit een blok te kunnen pakken.\nOm dit te doen, [accent]klik je op een blok[] waar items in zitten, en dan [accent]op het item te klikken[] in het zwarte menu.\nMeerdere items tegelijk kan je eruit halen door [accent]het ingedrukt te houden[].\n\n[accent]Pak wat koper uit de core.[]
+tutorial.deposit = Je kan de items weer terugstoppen door van je schip het terug te slepen naar waar je het wilt.\n\n[accent]Stop het nu weer terug in de core.[]
+tutorial.waves = De[LIGHT_GRAY] vijand[] naderd.\n\nVerdedig je core voor 2 rondes. Bouw meer verdedigingen.
+tutorial.waves.mobile = De[LIGHT_GRAY] vijand[] naderd.\n\nVerdedig je core voor 2 rondes. Je schip schiet automatisch op vijanden.\nBouw meer verdedigingen, en mine meer koper.
+tutorial.launch = Tijdens sommige waves, kan je je core[accent] lanceren[], hiermee verlaat je de basis permanent[accent] maar je neemt wel alles dat in de core zit met je mee.[]\nVervolgens valt ermee te onderzoeken.\n\n[accent]Druk op de lanceer knop.
+
item.copper.description = A useful structure material. Used extensively in all types of blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
@@ -1062,6 +1142,7 @@ block.power-source.description = Infinitely outputs power. Sandbox only.
block.item-source.description = Infinitely outputs items. Sandbox only.
block.item-void.description = Destroys any items which go into it without using power. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles.
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = An advanced pump which doubles up speed by using
block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava.
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits.
block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits.
+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 = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets.
block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Advanced liquid transport block. Uses power to
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks.
block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes.
block.surge-tower.description = An extremely long-range power node with fewer available connections.
+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 = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left.
block.battery-large.description = Stores much more power than a regular battery.
block.combustion-generator.description = Generates power by burning oil or flammable materials.
diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties
index 21e2410cfe..696ecf76e3 100644
--- a/core/assets/bundles/bundle_nl_BE.properties
+++ b/core/assets/bundles/bundle_nl_BE.properties
@@ -12,6 +12,7 @@ link.itch.io.description = Itch.io pagina met de PC downloads en online versie
link.google-play.description = Mindustry op Google Play
link.f-droid.description = F-Droid catalogus
link.wiki.description = Officiële Mindustry-wiki
+link.feathub.description = Suggest new features
linkfail = Openen van link mislukt!\nDe link is gekopiëerd naar je klembord.
screenshot = Locatie screenshot: {0}
screenshot.invalid = Kaart te groot, mogelijks te weinig geheugen voor een screenshot te kunnen maken.
@@ -19,12 +20,22 @@ gameover = Game Over
gameover.pvp = Het[accent] {0}[] team heeft gewonnen!
highscore = [accent]Nieuw record!
copied = Gekopieerd.
+
load.sound = Geluiden
load.map = Kaarten
load.image = Afbeeldingen
load.content = Inhoud
load.system = Systeem
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
+
schematic = Blauwdruk
schematic.add = Blauwdruk Opslaan...
schematics = Blauwdrukken
@@ -41,6 +52,7 @@ schematic.saved = Blauwdruk opgeslagen.
schematic.delete.confirm = This schematic will be utterly eradicated.
schematic.rename = Blauwdruk Hernoemen
schematic.info = {0}x{1}, {2} blokken
+
stat.wave = Je overleefde tot aanvalsgolf: [accent]{0}[].
stat.enemiesDestroyed = Vijanden vernietigd:[accent] {0}
stat.built = Gebouwen gebouwd:[accent] {0}
@@ -48,6 +60,7 @@ stat.destroyed = Gebouwen vernietigd:[accent] {0}
stat.deconstructed = Gebouwen afgebroken:[accent] {0}
stat.delivered = Gronstoffen meegenomen:
stat.rank = Eindresultaat: [accent]{0}
+
launcheditems = [accent]Meegenomen grondstoffen
launchinfo = [unlaunched][[LAUNCH] je kern om de met blauw aangeduide voorwerpen te verkrijgen.
map.delete = Ben je zeker dat je de kaart "[accent]{0}[]" wilt verwijderen?
@@ -75,6 +88,7 @@ maps.browse = Bekijk Kaarten
continue = Ga verder
maps.none = [LIGHT_GRAY]Geen kaarten gevonden!
invalid = Ongeldig
+pickcolor = Pick Color
preparingconfig = Configuratie Voorbereiden
preparingcontent = Inhoud Voorbereiden
uploadingcontent = Inhoud Uploaden
@@ -82,6 +96,7 @@ uploadingpreviewfile = Voorbeeldbestand Uploaden
committingchanges = Veranderingen Toepassen
done = Klaar
feature.unsupported = Uw apparaat ondersteunt deze functie niet.
+
mods.alphainfo = Mods zijn nog in alfa en [scarlet] kunnen zeer onstabiel zijn[].\nMeld problemen die je ondervindt op de Mindustry Github of Discord.
mods.alpha = [accent](Alfa)
mods = Mods
@@ -93,18 +108,25 @@ mod.enabled = [lightgray]Ingeschakeld
mod.disabled = [scarlet]Uitgeschakeld
mod.disable = Schakel uit
mod.delete.error = Kan mod niet verwijderen. Bestand is mogelijk in gebruik.
+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]De volgende vereisten ontbreken voor mod '{0}':[accent] {1}\n[lightgray]Deze mods moeten eerst gedownload worden.\nDeze mod wordt automatisch uitgeschakeld.
mod.enable = Schakel in
mod.requiresrestart = The game will now close to apply the mod changes.
mod.reloadrequired = [scarlet]Herladen Vereist
mod.import = Importeer Mod
mod.import.github = Importeer GitHub Mod
+mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod.
mod.remove.confirm = Deze mod zal worden verwijderd.
mod.author = [LIGHT_GRAY]Auteur:[] {0}
mod.missing = Dit opslagbestand bevat mods die zijn geupdate of recentelijk zijn verwijderd. Uw opslagbestand kan beschadigd geraken. Bent u zeker dat u wil verdergaan?\n[lightgray]Mods:\n{0}
mod.preview.missing = Voordat je de mod publiceert moet je een afbeelding voor de voorvertoning toevoegen.\nPlaats een afbeelding met de naam[accent] preview.png[] in de modfolder.
mod.folder.missing = Mods kunnen enkel gepubliceerd worden in foldervorm.\nOm een mod in foldervorm te zetten exporteer je het modbestand uit de zipfile en verwijder je de oude zipfile. Herlaad vervolgens je mods of herstart het spel.
+mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
+
about.button = Over
name = Naam:
noname = Kies eerst[accent] een naam[].
@@ -133,6 +155,7 @@ server.kicked.nameEmpty = Je gekozen naam is ongeldig.
server.kicked.idInUse = Je bent al verbonden met de server! Verbinden met 2 clients tegelijk is verboden.
server.kicked.customClient = Deze server ondersteunt geen aangepaste versies (mods). Download een officiële versie.
server.kicked.gameover = Game over!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Jouw versie:[accent] {0}[]\nServerversie:[accent] {1}[]
host.info = Ook de [accent]host[] knop hosts een server op poort [scarlet]6567[]. \nIedereen die verbonden is met dezelfde [LIGHT_GRAY]wifi of lokaal netwerk[] zou je server moeten zien in zijn server lijst.\n\nAls je wil dat personen kunnen verbinden met je server van ergens anders via IP. Dan is [accent]port forwarding[] is nodig.\n\n[LIGHT_GRAY]Nota: Als iemand problemen heeft met het verbinden tot je LAN spel, zorg dan dat mindustry toestemming heeft tot je lokale netwerk in de Firewall instellingen.
join.info = Hier kan je een [accent]server IP[] invullen waarmee je wil verbinden. Je kan hier ook verbinden met servers op je [accent]lokale netwerk[]. LAN en WAN multiplayer wordt ondersteund.\n\n[LIGHT_GRAY]Belangrijk: er is geen automatische globale server lijst; als je met iemand wil verbinden via een IP adres moet je zijn/haar IP adres vragen.
@@ -272,6 +295,7 @@ 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}
+
editor.brush = Brush
editor.openin = Open In Editor
editor.oregen = Ore Generation
@@ -348,6 +372,7 @@ 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:
+
toolmode.replace = Replace
toolmode.replace.description = Draws only on solid blocks.
toolmode.replaceall = Replace All
@@ -362,6 +387,7 @@ toolmode.fillteams = Fill Teams
toolmode.fillteams.description = Fill teams instead of blocks.
toolmode.drawteams = Draw Teams
toolmode.drawteams.description = Draw teams instead of blocks.
+
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
filter.distort = Distort
filter.noise = Noise
@@ -393,6 +419,7 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
+
width = Width:
height = Height:
menu = Menu
@@ -408,6 +435,7 @@ tutorial = Tutorial
tutorial.retake = Re-Take Tutorial
editor = Editor
mapeditor = Map Editor
+
abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked
@@ -438,6 +466,7 @@ zone.objective.survival = Survive
zone.objective.attack = Destroy Enemy Core
add = Add...
boss.health = Boss Health
+
connectfail = [crimson]Failed to connect to server:\n\n[accent]{0}
error.unreachable = Server unreachable.\nIs the address spelled correctly?
error.invalidaddress = Invalid address.
@@ -448,6 +477,7 @@ error.mapnotfound = Map file not found!
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
@@ -462,6 +492,7 @@ zone.saltFlats.name = Salt Flats
zone.impact0078.name = Impact 0078
zone.crags.name = Crags
zone.fungalPass.name = Fungal Pass
+
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 fridgid 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.
@@ -476,10 +507,12 @@ zone.nuclearComplex.description = A former facility for the production and proce
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.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
@@ -530,6 +563,7 @@ blocks.inaccuracy = Inaccuracy
blocks.shots = Shots
blocks.reload = Shots/Second
blocks.ammo = Ammo
+
bar.drilltierreq = Better Drill Required
bar.drillspeed = Drill Speed: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -545,6 +579,9 @@ bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] damage
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
@@ -556,6 +593,7 @@ bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x fire rate
+
unit.blocks = blocks
unit.powersecond = power units/second
unit.liquidsecond = liquid units/second
@@ -568,6 +606,8 @@ unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = items
+unit.thousands = k
+unit.millions = mil
category.general = General
category.power = Power
category.liquids = Liquids
@@ -580,6 +620,7 @@ 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[LIGHT_GRAY] (requires restart)[]
@@ -602,12 +643,16 @@ setting.screenshake.name = Screen Shake
setting.effects.name = Display Effects
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Controller Sensitivity
setting.saveinterval.name = Autosave Interval
setting.seconds = {0} Seconds
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Fullscreen
setting.borderlesswindow.name = Borderless Window[LIGHT_GRAY] (may require restart)
setting.fps.name = Show FPS
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance, disables animations)
setting.minimap.name = Show Minimap
@@ -636,16 +681,36 @@ category.multiplayer.name = Multiplayer
command.attack = Attack
command.rally = Rally
command.retreat = Retreat
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Clear Building
keybind.press = Press a key...
keybind.press.axis = Press an axis or key...
keybind.screenshot.name = Map Screenshot
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Move x
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_flip_x.name = Flip Schematic X
keybind.schematic_flip_y.name = Flip 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.fullscreen.name = Toggle Fullscreen
keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement
@@ -658,7 +723,6 @@ keybind.menu.name = Menu
keybind.pause.name = Pause
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Minimap
-keybind.dash.name = Dash
keybind.chat.name = Chat
keybind.player_list.name = Player list
keybind.console.name = Console
@@ -681,7 +745,9 @@ mode.pvp.description = Fight against other players locally.
mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
+
rules.infiniteresources = Infinite Resources
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.attack = Attack Mode
@@ -689,6 +755,7 @@ rules.enemyCheat = Infinite AI (Red Team) Resources
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Player Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.unitdamagemultiplier = Unit Damage Multiplier
@@ -707,6 +774,10 @@ rules.title.resourcesbuilding = Resources & Building
rules.title.player = Players
rules.title.enemy = Enemies
rules.title.unit = Units
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Items
content.liquid.name = Liquids
content.unit.name = Units
@@ -753,6 +824,7 @@ 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 = [LIGHT_GRAY]Explosiveness: {0}%
item.flammability = [LIGHT_GRAY]Flammability: {0}%
item.radioactivity = [LIGHT_GRAY]Radioactivity: {0}%
@@ -768,6 +840,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
liquid.temperature = [LIGHT_GRAY]Temperature: {0}
+
block.sand-boulder.name = Sand Boulder
block.grass.name = Grass
block.salt.name = Salt
@@ -866,6 +939,8 @@ block.distributor.name = Distributor
block.sorter.name = Sorter
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.overflow-gate.name = Overflow Gate
block.silicon-smelter.name = Silicon Smelter
block.phase-weaver.name = Phase Weaver
@@ -879,6 +954,7 @@ block.coal-centrifuge.name = Coal Centrifuge
block.power-node.name = Power Node
block.power-node-large.name = Large Power Node
block.surge-tower.name = Surge Tower
+block.diode.name = Battery Diode
block.battery.name = Battery
block.battery-large.name = Large Battery
block.combustion-generator.name = Combustion Generator
@@ -902,6 +978,7 @@ block.mechanical-pump.name = Mechanical Pump
block.item-source.name = Item Source
block.item-void.name = Item Void
block.liquid-source.name = Liquid Source
+block.liquid-void.name = Liquid Void
block.power-void.name = Power Void
block.power-source.name = Power Infinite
block.unloader.name = Unloader
@@ -931,6 +1008,7 @@ block.fortress-factory.name = Fortress Mech Factory
block.revenant-factory.name = Revenant Fighter Factory
block.repair-point.name = Repair Point
block.pulse-conduit.name = Pulse Conduit
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Phase Conduit
block.liquid-router.name = Liquid Router
block.liquid-tank.name = Liquid Tank
@@ -1002,6 +1080,7 @@ tutorial.deposit = Deposit items into blocks by dragging from your ship to the d
tutorial.waves = De [LIGHT_GRAY] vijand[] nadert.\n\nVerdedig jouw kern voor 2 golven. Bouw meer geschutstorens.
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.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
+
item.copper.description = A useful structure material. Used extensively in all types of blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
@@ -1063,6 +1142,7 @@ block.power-source.description = Infinitely outputs power. Sandbox only.
block.item-source.description = Infinitely outputs items. Sandbox only.
block.item-void.description = Destroys any items which go into it without using power. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles.
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
@@ -1098,6 +1178,7 @@ block.rotary-pump.description = An advanced pump which doubles up speed by using
block.thermal-pump.description = The ultimate pump.
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits.
block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits.
+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 = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets.
block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations.
@@ -1106,6 +1187,7 @@ block.phase-conduit.description = Advanced liquid transport block. Uses power to
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks.
block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes.
block.surge-tower.description = An extremely long-range power node with fewer available connections.
+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 = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left.
block.battery-large.description = Stores much more power than a regular battery.
block.combustion-generator.description = Generates power by burning oil or flammable materials.
diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties
index fd97dca25f..6d9f3d3dba 100644
--- a/core/assets/bundles/bundle_pl.properties
+++ b/core/assets/bundles/bundle_pl.properties
@@ -12,13 +12,14 @@ link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania
link.google-play.description = Strona na sklepie Google Play
link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Oficjana Wiki Mindustry
+link.feathub.description = Zaproponuj nowe funkcje
linkfail = Nie udało się otworzyć linku!\nURL został skopiowany.
screenshot = Zapisano zdjęcie w {0}
screenshot.invalid = Zrzut ekranu jest zbyt duży. Najprawdopodobniej brakuje miejsca w pamięci urządzenia.
gameover = Koniec Gry
gameover.pvp = Zwyciężyła drużyna [accent]{0}[]!
highscore = [YELLOW] Nowy rekord!
-copied = Copied.
+copied = Skopiowano.
load.sound = Dźwięki
load.map = Mapy
@@ -26,6 +27,14 @@ load.image = Obrazy
load.content = Treść
load.system = System
load.mod = Mody
+load.scripts = Skrypty
+
+be.update = Nowa wersja Bleeding Edge jest dostępna:
+be.update.confirm = Pobrać i zainstalować teraz?
+be.updating = Aktualizowanie...
+be.ignore = Zignoruj
+be.noupdates = Nie znaleziono aktualizacji.
+be.check = Sprawdź aktualizacje
schematic = Schemat
schematic.add = Zapisz schemat...
@@ -80,7 +89,6 @@ continue = Kontynuuj
maps.none = [lightgray]Nie znaleziono żadnych map!
invalid = Nieprawidłowy
pickcolor = Wybierz kolor
-
preparingconfig = Przygotowywanie Konfiguracji
preparingcontent = Przygotowywanie Zawartości
uploadingcontent = Przesyłanie Zawartości
@@ -100,22 +108,28 @@ mod.enabled = [lightgray]Włączony
mod.disabled = [scarlet]Wyłączony
mod.disable = Wyłącz
mod.delete.error = Nie udało się usunąć moda. Plik może być w użyciu.
+mod.requiresversion = [scarlet]Wymaga gry w wersji co najmniej: [accent]{0}
mod.missingdependencies = [scarlet]Brakujące zależności: {0}
+mod.erroredcontent = [scarlet]Content Errors
+mod.errors = Wystąpił błąd podczas ładowania treści.
+mod.noerrorplay = [scarlet]Twoje mody zawierają błędy.[] Wyłącz je lub napraw błędy przed rozpoczęciem gry.
mod.nowdisabled = [scarlet]Brakuje zależności dla moda '{0}':[accent] {1}\n[lightgray]Najpierw trzeba ściągnąć te mody.\nMod zostanie automatycznie wyłączony.
mod.enable = Włącz
mod.requiresrestart = Gra się wyłączy aby wprowadzić zmiany moda.
mod.reloadrequired = [scarlet]Wymagany restart
mod.import = Importuj Mod
mod.import.github = Importuj mod z GitHuba
+mod.item.remove = Ten przedmiot jest częścią moda[accent] '{0}'[]. Aby usunąć go, odinstaluj modyfikację.
mod.remove.confirm = Ten mod zostanie usunięty.
mod.author = [LIGHT_GRAY]Autor:[] {0}
mod.missing = Ten zapis zawiera mody, które zostały niedawno zaktualizowane, bądź nie są już zainstalowane. Zapis może zostać uszkodzony. Czy jesteś pewien, że chcesz go załadować?\n[lightgray]Mody:\n{0}
mod.preview.missing = Przed opublikowaniem tego moda na Warsztacie musisz dodać zdjęcie podglądowe.\nDodaj zdjęcie o nazwie[accent] preview.png[] do folderu moda i spróbuj jeszcze raz.
-mod.folder.missing = Jedynie mody w formie folderów mogą się znaleźć na Warsztacie.\nBy zamienić moda w folder, wyciągnij go z archiwum, umieść w folderze i usuń archiwum. Później uruchom ponownie grę bądź załaduj ponownie mody.
+mod.folder.missing = Jedynie mody w formie folderów mogą się znaleźć na Warsztacie.\nBy zamienić moda w folder, wyciągnij go z archiwum, umieść w folderze i usuń archiwum. Później uruchom ponownie grę lub załaduj ponownie mody.
+mod.scripts.unsupported = Twoje urządzenie nie wspiera skryptów. Niektóre mody mogą nie działać poprawnie.
about.button = O Grze
name = Nazwa:
-noname = Najpierw wybierz[accent] nazwę gracza[]
+noname = Najpierw wybierz[accent] nazwę gracza[].
filename = Nazwa Pliku:
unlocked = Odblokowano nową zawartość!
completed = [accent]Ukończony
@@ -123,8 +137,8 @@ techtree = Drzewo Technologiczne
research.list = [lightgray]Badania:
research = Badaj
researched = [lightgray]{0} zbadane.
-players = {0} graczy online
-players.single = {0} gracz online
+players = {0} graczy
+players.single = {0} gracz
server.closing = [accent] Zamykanie serwera...
server.kicked.kick = Zostałeś wyrzucony z serwera!
server.kicked.whitelist = Nie ma cię tu na białej liście.
@@ -141,6 +155,7 @@ server.kicked.nameEmpty = Wybrana przez Ciebie nazwa jest nieprawidłowa.
server.kicked.idInUse = Jesteś już na serwerze! Łączenie się z dwóch kont nie jest dozwolone.
server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobierz oficjalną wersję.
server.kicked.gameover = Koniec gry!
+server.kicked.serverRestarting = Restart serwera.
server.versions = Twoja wersja gry:[accent] {0}[]\nWersja gry serwera:[accent] {1}[]
host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[]. \nKażdy w tej samej sieci [lightgray]wifi lub hotspocie[] powinien zobaczyć twój serwer.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, musisz wykonać [accent]przekierowywanie portów[].\n\n[lightgray]Notka: Jeśli ktokolwiek ma problem z dołączeniem do gry lokalnej, upewnij się, że udostępniłeś Mindustry dostęp do sieci w ustawieniach zapory (firewall). Zauważ, że niektóre sieci publiczne mogą nie zezwalać na wykrycie serwerów.
join.info = Tutaj możesz wpisać [accent]adres IP serwera[], aby dołączyć lub wyszukać [accent]serwerów w lokalnej sieci[], do których możesz dołączyć .\nGra wieloosobowa na LAN i WAN jest wspomagana.\n\n[lightgray]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać hosta o IP.
@@ -240,7 +255,7 @@ data.exported = Dane wyeksportowane.
data.invalid = Nieprawidłowe dane gry.
data.import.confirm = Zaimportowanie zewnętrznych danych usunie[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zimportowane, gra automatycznie się wyłączy.
classic.export = Eksportuj Dane Wersji Klasycznej
-classic.export.text = [accent]Mindustry[] otrzymało ostatnio ważną aktualizację.\nWykryto zapis lub mapę z wersji classic (v3.5 build 40) - czy chciałbyś eksportować te zapisy do katalogu domowego swojego telefonu, do użycia w aplikacji Mindustry Classic?
+classic.export.text = [accent]Mindustry[] otrzymało ostatnio ważną aktualizację.\nWykryto zapis lub mapę z wersji classic (v3.5 build 40) - czy chciałbyś eksportować te zapisy do katalogu domowego swojego telefonu, aby móc używać ich w Mindustry Classic?
quit.confirm = Czy na pewno chcesz wyjść?
quit.confirm.tutorial = Czy jesteś pewien tego co robisz?\nSamouczek może zostać powtórzony w[accent] Ustawienia->Gra->Ponów samouczek.[]
loading = [accent]Ładowanie...
@@ -248,7 +263,7 @@ reloading = [accent]Przeładowywanie Modów...
saving = [accent]Zapisywanie...
cancelbuilding = [accent][[{0}][] by wyczyścić plan
selectschematic = [accent][[{0}][] by wybrać+skopiować
-pausebuilding = [accent][[{0}][] by wtrzymać budowę
+pausebuilding = [accent][[{0}][] by wstrzymać budowę
resumebuilding = [scarlet][[{0}][] by kontynuować budowę
wave = [accent]Fala {0}
wave.waiting = Fala za {0}
@@ -414,7 +429,6 @@ load = Wczytaj
save = Zapisz
fps = FPS: {0}
ping = Ping: {0}ms
-
language.restart = Uruchom grę ponownie, aby ustawiony język zaczął funkcjonować.
settings = Ustawienia
tutorial = Poradnik
@@ -456,7 +470,7 @@ boss.health = Zdrowie Bossa
connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0}
error.unreachable = Serwer niedostępny.\nCzy adres jest wpisany poprawnie?
error.invalidaddress = Niepoprawny adres.
-error.timedout = Przekroczono limit czasu!/nUpewnij się, że host ma ustawione przekierowanie portu oraz poprawność wpisanego adresu!
+error.timedout = Przekroczono limit czasu!\nUpewnij się, że host ma ustawione przekierowanie portu oraz poprawność wpisanego adresu!
error.mismatch = Błąd pakietu:\nprawdopodobne niedopasowanie klienta/serwera.\nUpewnij się, że ty i host macie najnowszą wersję Mindustry!
error.alreadyconnected = Jesteś już połączony.
error.mapnotfound = Plik mapy nie został znaleziony!
@@ -493,10 +507,12 @@ zone.nuclearComplex.description = Dawny zakład produkcji i przetwarzania toru,
zone.fungalPass.description = Przejściowy obszar pomiędzy wysokimi górami a nisko znajdującymi się, ogarniętymi przez zarodniki równinami. Znajduje się tu mała postawiona przez wrogów baza zwiadowcza.\nZniszcz ją.\nUżyj jednostek Nóż i Pełzak. Zniszcz oba rdzenie.
zone.impact0078.description =
zone.crags.description =
+
settings.language = Język
settings.data = Dane Gry
settings.reset = Przywróć Domyślne
settings.rebind = Zmień
+settings.resetKey = Resetuj
settings.controls = Sterowanie
settings.game = Gra
settings.sound = Dźwięk
@@ -563,8 +579,8 @@ bar.heat = Ciepło
bar.power = Prąd
bar.progress = Postęp Budowy
bar.spawned = Jednostki: {0}/{1}
-bar.input = Input
-bar.output = Output
+bar.input = Wejście
+bar.output = Wyjście
bullet.damage = [stat]{0}[lightgray] Obrażenia
bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[lightgray] kratki
@@ -590,6 +606,8 @@ unit.persecond = /sekundę
unit.timesspeed = x prędkość
unit.percent = %
unit.items = przedmioty
+unit.thousands = tys.
+unit.millions = mln
category.general = Główne
category.power = Prąd
category.liquids = Płyny
@@ -621,19 +639,20 @@ setting.difficulty.normal = Normalny
setting.difficulty.hard = Trudny
setting.difficulty.insane = Szalony
setting.difficulty.name = Poziom trudności
-setting.screenshake.name = Wstrząsy ekranu
+setting.screenshake.name = Siła wstrząsów ekranu
setting.effects.name = Wyświetlanie efektów
setting.destroyedblocks.name = Wyświetl zniszczone bloki
-setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.conveyorpathfinding.name = Ustalanie ścieżki przenośników
+setting.coreselect.name = Zezwalaj na schematyczne rdzenie
setting.sensitivity.name = Czułość kontrolera
setting.saveinterval.name = Interwał automatycznego zapisywania
setting.seconds = {0} sekund
setting.blockselecttimeout.name = Block Select Timeout
-setting.milliseconds = {0} millisekund
+setting.milliseconds = {0} milisekund
setting.fullscreen.name = Pełny ekran
setting.borderlesswindow.name = Bezramkowe okno[lightgray] (może wymagać restartu)
setting.fps.name = Pokazuj FPS oraz ping
-setting.blockselectkeys.name = Show Block Select Keys
+setting.blockselectkeys.name = Pokazuj skróty klawiszowe bloków
setting.vsync.name = Synchronizacja pionowa
setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje)
setting.minimap.name = Pokaż Minimapę
@@ -653,7 +672,7 @@ public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każd
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
uiscale.cancel = Anuluj i Wyjdź
-setting.bloom.name = Bloom
+setting.bloom.name = Efekt Bloom
keybind.title = Zmień
keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane.
category.general.name = Ogólne
@@ -662,15 +681,15 @@ category.multiplayer.name = Wielu graczy
command.attack = Atakuj
command.rally = Zbierz
command.retreat = Wycofaj
-placement.blockselectkeys = \n[lightgray]Key: [{0},
+placement.blockselectkeys = \n[lightgray]Klawisz: [{0},
keybind.clear_building.name = Wyczyść budynek
keybind.press = Naciśnij wybrany klawisz...
keybind.press.axis = Naciśnij oś lub klawisz...
keybind.screenshot.name = Zrzut ekranu mapy
-keybind.toggle_power_lines.name = Toggle Power Lines
+keybind.toggle_power_lines.name = Zmień widoczność linii energetycznych
keybind.move_x.name = Poruszanie w poziomie
keybind.move_y.name = Poruszanie w pionie
-keybind.mouse_move.name = Follow Mouse
+keybind.mouse_move.name = Podążaj Za Myszą
keybind.dash.name = Dash
keybind.schematic_select.name = Wybierz region
keybind.schematic_menu.name = Menu schematów
@@ -682,16 +701,16 @@ 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.block_select_01.name = Wybór bloku/kategorii 1
+keybind.block_select_02.name = Wybór bloku/kategorii 2
+keybind.block_select_03.name = Wybór bloku/kategorii 3
+keybind.block_select_04.name = Wybór bloku/kategorii 4
+keybind.block_select_05.name = Wybór bloku/kategorii 5
+keybind.block_select_06.name = Wybór bloku/kategorii 6
+keybind.block_select_07.name = Wybór bloku/kategorii 7
+keybind.block_select_08.name = Wybór bloku/kategorii 8
+keybind.block_select_09.name = Wybór bloku/kategorii 9
+keybind.block_select_10.name = Wybór bloku/kategorii 10
keybind.fullscreen.name = Przełącz Pełny Ekran
keybind.select.name = Zaznacz
keybind.diagonal_placement.name = Budowa po skosie
@@ -736,6 +755,7 @@ rules.enemyCheat = Nieskończone zasoby komputera-przeciwnika (czerwonego zespo
rules.unitdrops = Surowce ze zniszczonych jednostek
rules.unitbuildspeedmultiplier = Mnożnik prędkości tworzenia jednostek
rules.unithealthmultiplier = Mnożnik życia jednostek
+rules.blockhealthmultiplier = Mnożnik życia bloków
rules.playerhealthmultiplier = Mnożnik życia gracza
rules.playerdamagemultiplier = Mnożnik obrażeń gracza
rules.unitdamagemultiplier = Mnożnik obrażeń jednostek
@@ -804,6 +824,7 @@ mech.trident-ship.name = Trójząb
mech.trident-ship.weapon = Wnęka bombowa
mech.glaive-ship.name = Glewia
mech.glaive-ship.weapon = Zapalający Karabin
+item.corestorable = [lightgray]Przechowywalne w rdzeniu: {0}
item.explosiveness = [lightgray]Wybuchowość: {0}
item.flammability = [lightgray]Palność: {0}
item.radioactivity = [lightgray]Promieniotwórczość: {0}
@@ -957,6 +978,7 @@ block.mechanical-pump.name = Mechaniczna Pompa
block.item-source.name = Źródło przedmiotów
block.item-void.name = Próżnia przedmiotów
block.liquid-source.name = Źródło płynów
+block.liquid-void.name = Liquid Void
block.power-void.name = Próżnia prądu
block.power-source.name = Nieskończony Prąd
block.unloader.name = Ekstraktor
@@ -1120,12 +1142,13 @@ block.power-source.description = Wydziela prąd w nieskończoność. Dostępny t
block.item-source.description = Wydziela przedmioty w nieskończoność. Dostępny tylko w trybie sandbox.
block.item-void.description = Niszczy wszystkie przedmioty, które idą do tego bloku, który nie wymaga prądu. Dostępny tylko w trybie sandbox.
block.liquid-source.description = Wydziela ciecz w nieskończoność. Dostępny tylko w trybie sandbox.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia i wieżyczek w pierwszych kilku falach.
block.copper-wall-large.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia i wieżyczek w pierwszych kilku falach.\nObejmuje wiele kratek.
block.titanium-wall.description = Umiarkowanie silny blok obronny.\nZapewnia umiarkowaną ochronę przed wrogami.
block.titanium-wall-large.description = Umiarkowanie silny blok obronny.\nZapewnia umiarkowaną ochronę przed wrogami.\nObejmuje wiele kratek.
-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 = Specjajny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów.
+block.plastanium-wall-large.description = Specjajny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów.\nObejmuje wiele kratek.
block.thorium-wall.description = Silny blok obronny.\nDobra ochrona przed wrogami.
block.thorium-wall-large.description = Silny blok obronny.\nDobra ochrona przed wrogami.\nObejmuje wiele kratek.
block.phase-wall.description = Ściana pokryta specjalną mieszanką opartą o Włókna Fazowe, która odbija większość pocisków.
@@ -1164,7 +1187,7 @@ block.phase-conduit.description = Zaawansowany blok do przenoszenia cieczy. Uży
block.power-node.description = Przesyła moc do połączonych węzłów. Można podłączyć do czterech źródeł zasilania, zlewów lub węzłów. Zasila też bloki które go dotykają.
block.power-node-large.description = Posiada większy zasięg niż zwykły węzeł prądu. Można podłączyć do sześciu źródeł zasilania, zlewów lub węzłów.
block.surge-tower.description = Węzęł prądu z bardzo dużym zasięgiem, posiadający mniej możliwych podłączeń.
-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 = Energia może przepływać przez ten blok tylko w jednym kierunku, ale tylko kiedy inne strony mają zmagazynowane mniej energii.
block.battery.description = Przechowuje energię przy nadwyżce produkcji oraz dostarcza energię kiedy jest jej brak, dopóki jest w niej miejsce.
block.battery-large.description = Przechowuje o wiele wiecej prądu niż standardowa bateria.
block.combustion-generator.description = Wytwarza energię poprzez spalanie łatwopalnych materiałów.
@@ -1205,7 +1228,7 @@ block.ripple.description = Duża wieża artyleryjska, która strzela jednocześn
block.cyclone.description = Duża szybkostrzelna wieża.
block.spectre.description = Duże działo dwulufowe, które strzela potężnymi pociskami przebijającymi pancerz w jednostki naziemne i powietrzne.
block.meltdown.description = Duże działo laserowe, które strzela potężnymi wiązkami dalekiego zasięgu. Wymaga chłodzenia.
-block.command-center.description = Wydaje polecenia ruchu sojuszniczym jednostkom na całej mapie.\nPowoduje patrolowanie jednostek, atakowanie wrogiego rdzenia lub wycofanie się do rdzenia / fabryki. Gdy nie ma rdzenia wroga, jednostki będą domyślnie patrolować pod dowództwem ataku.
+block.command-center.description = Wydaje polecenia ruchu sojuszniczym jednostkom na całej mapie.\nPowoduje patrolowanie jednostek, atakowanie wrogiego rdzenia lub wycofanie się do rdzenia/fabryki. Gdy nie ma rdzenia wroga, jednostki będą domyślnie patrolować pod dowództwem ataku.
block.draug-factory.description = Produkuje drony wydobywcze Draug.
block.spirit-factory.description = Produkuje lekkie drony, które naprawiają bloki.
block.phantom-factory.description = Produkuje zaawansowane drony które pomagają przy budowie.
@@ -1217,7 +1240,7 @@ block.crawler-factory.description = Produkuje szybkie jednostki lądowe typu "ka
block.titan-factory.description = Produkuje zaawansowane, opancerzone jednostki lądowe.
block.fortress-factory.description = Produkuje naziemne jednostki ciężkiej artylerii.
block.repair-point.description = Bez przerw ulecza najbliższą zniszczoną jednostkę w jego zasięgu.
-block.dart-mech-pad.description = Umożliwia transformacje w podstawowego mecha bojowego.\nUżyj klikając podczas stania na nim.
+block.dart-mech-pad.description = Umożliwia transformację w podstawowego mecha bojowego.\nUżyj klikając podczas stania na nim.
block.delta-mech-pad.description = Opuść swój obecny statek i zamień go na szybki, lekko opancerzony mech stworzony do ataków typu uderz-uciekaj.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
block.tau-mech-pad.description = Opuść swój obecny statek i zamień go na mech wsparcia który może leczyć sojusznicze struktury i jednostki.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
block.omega-mech-pad.description = Opuść swój obecny statek i zamień go na masywny, dobrze opancerzony mech, przeznaczony do ataków na froncie.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties
index 1e05466d91..38f865a38c 100644
--- a/core/assets/bundles/bundle_pt_BR.properties
+++ b/core/assets/bundles/bundle_pt_BR.properties
@@ -10,11 +10,12 @@ link.dev-builds.description = Desenvolvimentos instáveis
link.trello.description = Trello oficial para atualizações planejadas
link.itch.io.description = Página da Itch.io com os downloads
link.google-play.description = Página da google play store
-link.f-droid.description = F-Droid catalogue listing
+link.f-droid.description = Listamento de catalogo do F-Droide
link.wiki.description = Wiki oficial do Mindustry
+link.feathub.description = Suggest new features
linkfail = Falha ao abrir o link\nO Url foi copiado para a área de transferência.
screenshot = Screenshot salvo para {0}
-screenshot.invalid = Mapa grande demais, Potencialmente sem memória suficiente para captura de tela.
+screenshot.invalid = Mapa grande demais, Voce pode estar potencialmente sem memória suficiente para captura de tela.
gameover = O núcleo foi destruído.
gameover.pvp = O time[accent] {0}[] ganhou!
highscore = [YELLOW]Novo recorde!
@@ -26,6 +27,14 @@ load.image = Imagens
load.content = Conteúdo
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
schematic = Esquema
schematic.add = Salvar Esquema...
@@ -41,8 +50,8 @@ schematic.shareworkshop = Compartilhar na Oficina
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o Esquema
schematic.saved = Esquema salvo.
schematic.delete.confirm = Esse Esquema será totalmente erradicado.
-schematic.rename = Rename Schematic
-schematic.info = {0}x{1}, {2} blocks
+schematic.rename = Renomear esquema
+schematic.info = {0}x{1}, {2} blocos
stat.wave = Hordas derrotadas:[accent] {0}
stat.enemiesDestroyed = Inimigos Destruídos:[accent] {0}
@@ -99,19 +108,24 @@ mod.enabled = [lightgray]Ativado
mod.disabled = [scarlet]Desativado
mod.disable = Desati-\nvar
mod.delete.error = Incapaz de deletar o Mod. O arquivo talvez esteja em uso.
-mod.requiresversion = [scarlet]Requer versão [accent]{0} [scarlet]do jogo.
+mod.requiresversion = [scarlet]Requer no mínimo versão [accent]{0} [scarlet]do jogo.
mod.missingdependencies = [scarlet]Dependências ausentes: {0}
+mod.erroredcontent = [scarlet]Erros no Conteúdo
+mod.errors = Erros ocorreram ao carregar o conteúdo.
+mod.noerrorplay = [scarlet]Você tem mods com erros.[] Desative os mods afetados ou conserte os erros antes de jogar.
mod.nowdisabled = [scarlet]O Mod '{0}' está com dependências ausentes:[accent] {1}\n[lightgray]Esses Mods precisam ser baixados primeiro.\nEsse Mod será desativado automaticamente.
mod.enable = Ativar
mod.requiresrestart = O jogo irá fechar para aplicar as mudanças do Mod.
mod.reloadrequired = [scarlet]Recarregamento necessário
mod.import = Importar Mod
mod.import.github = Importar Mod do GitHub
-mod.remove.confirm = Esse Mod será deletado.
+mod.item.remove = Este item é parte do mod[accent] '{0}'[]. Para removê-lo, desinstale esse mod.
+mod.remove.confirm = Este mod será deletado.
mod.author = [LIGHT_GRAY]Author:[] {0}
-mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. O jogo salvo pode se corromper. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0}
+mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. Pode ocorrer uma corrupção no salvamento. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0}
mod.preview.missing = Antes de publicar esse mod na Oficina, você deve adicionar uma imagem de pré-visualização.\nColoque uma imagem com o nome[accent] preview.png[] na pasta do Mod e tente novamente.
mod.folder.missing = Somente Mods no formato de pasta serão publicados na Oficina.\nPara converter qualquer Mod em uma pasta, Simplesmente descompacte seu arquivo numa pasta e delete a compactação antiga, então reinicie seu jogo ou recarregue os Mods.
+mod.scripts.unsupported = Seu dispositivo não suporta scripts de mods. Alguns mods não funcionarão corretamente.
about.button = Sobre
name = Nome:
@@ -141,6 +155,7 @@ server.kicked.nameEmpty = Você deve ter pelo menos uma letra ou número no nome
server.kicked.idInUse = Você ja está neste servidor! Conectar com duas contas não é permitido.
server.kicked.customClient = Este servidor não suporta versões customizadas. Baixe a versão original.
server.kicked.gameover = Fim de jogo!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[]
host.info = The [accent]Hospedar[]Botão Hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguém esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall
join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[LIGHT_GRAY]Note: Não há uma lista de servidores automáticos; Se você quer conectar ao IP de alguém, você precisa pedir o IP ao anfitrião.
@@ -189,9 +204,9 @@ disconnect.data = Falha ao abrir os dados do mundo!
cantconnect = Impossível conectar ([accent]{0}[]).
connecting = [accent]Conectando...
connecting.data = [accent]Carregando dados do mundo...
-server.port = Porte:
+server.port = Port:
server.addressinuse = Senha em uso!
-server.invalidport = Numero de porta invalido!
+server.invalidport = Numero de port inválido!
server.error = [crimson]Erro ao hospedar o servidor: [accent]{0}
save.new = Novo salvamento
save.overwrite = Você tem certeza que quer sobrescrever este salvamento?
@@ -273,11 +288,11 @@ workshop.error = Erro buscando os detalhes da Oficina: {0}
map.publish.confirm = Você tem certeza de que quer publicar este mapa?\n\n[lightgray]Tenha certeza de que você concorda com o EULA da oficina primeiro, ou seus mapas não serão mostrados!
workshop.menu = Selecione oquê você gostaria de fazer com esse Item.
workshop.info = Informação do Item
-changelog = Changelog (optional):
+changelog = Mudanças (opcional):
eula = EULA da Steam
-missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
-publishing = [accent]Publishing...
-publish.confirm = você tem certeza de que quer publicar isso?\n\n[lightgray]Primeiramente tenha certeza de que você concorda com o EULA da Oficina, ou seus itens não irão aparecer!
+missing = Este item foi deletado ou movido.\n[lightgray]O listamento da oficina foi automaticamente des-ligado.
+publishing = [accent]Publicando...
+publish.confirm = Você tem certeza de que quer publicar isso?\n\n[lightgray]Primeiramente tenha certeza de que você concorda com o EULA da Oficina, ou seus itens não irão aparecer!
publish.error = Erro publicando o Item: {0}
steam.error = Falha em iniciar os serviços da Steam.\nError: {0}
@@ -364,11 +379,11 @@ toolmode.replaceall = Substituir tudo
toolmode.replaceall.description = Substituir todos os blocos no mapa
toolmode.orthogonal = Linha reta
toolmode.orthogonal.description = Desenha apenas linhas retas.
-toolmode.square = Square
+toolmode.square = Quadrado
toolmode.square.description = Pincel quadrado.
toolmode.eraseores = Apagar minérios
toolmode.eraseores.description = Apaga apenas minérios.
-toolmode.fillteams = Encher times
+toolmode.fillteams = Preencher times
toolmode.fillteams.description = Muda o time do qual todos os blocos pertencem.
toolmode.drawteams = Desenhar times
toolmode.drawteams.description = Muda o time do qual o bloco pertence.
@@ -490,8 +505,8 @@ zone.tarFields.description = Nos arredores de uma zona de produção de petróle
zone.desolateRift.description = Uma zona extremamente perigosa. Recursos abundantes, porém pouco espaço. Alto risco de destruição. Saia o mais rápido possível. Não seja enganado pelo longo espaço de tempo entre os ataques inimigos.
zone.nuclearComplex.description = Uma antiga instalação para produção e processamento de tório, reduzido a ruínas.\n[lightgray]Pesquise o tório e seus muitos usos.\n\nO inimigo está presente aqui em grandes números, constantemente à procura de atacantes.
zone.fungalPass.description = Uma area de transição entre montanhas altas e baixas, terras cheias de esporos. Uma pequena base de reconhecimento inimiga está localizada aqui.\nDestrua-a.\nUse as unidades crawler e dagger. Destrua os dois núcleos.
-zone.impact0078.description =
-zone.crags.description =
+zone.impact0078.description =
+zone.crags.description =
settings.language = Idioma
settings.data = Dados do jogo
@@ -506,7 +521,7 @@ settings.cleardata = Apagar dados...
settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito!
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar todo os arquivos, incluindo jogos salvos, mapas, teclas personalizadas e desbloqueados.\nQuando apertar 'ok' todos os arquivos serão apagados e o jogo irá sair automaticamente.
paused = Pausado
-clear = Clear
+clear = Limpo
banned = [scarlet]Banido
yes = Sim
no = Não
@@ -515,7 +530,7 @@ error.title = [crimson]Ocorreu um Erro.
error.crashtitle = Ocorreu um Erro
blocks.input = Entrada
blocks.output = Saída
-blocks.booster = Booster
+blocks.booster = Apoio
block.unknown = [LIGHT_GRAY]???
blocks.powercapacity = Capacidade de Energia
blocks.powershot = Energia/tiro
@@ -591,12 +606,14 @@ unit.persecond = por segundo
unit.timesspeed = x Velocidade
unit.percent = %
unit.items = itens
+unit.thousands = k
+unit.millions = m
category.general = Geral
-category.power = Poder
+category.power = Energia
category.liquids = Líquidos
category.items = Itens
-category.crafting = Construindo
-category.shooting = Atirando
+category.crafting = Entrada/Saída
+category.shooting = Atiradores
category.optional = Melhoras opcionais
setting.landscape.name = Travar panorama
setting.shadows.name = Sombras
@@ -626,6 +643,7 @@ setting.screenshake.name = Balanço da Tela
setting.effects.name = Efeitos
setting.destroyedblocks.name = Mostrar Blocos Destruídos
setting.conveyorpathfinding.name = Esteiras Encontram Caminho
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Sensibilidade do Controle
setting.saveinterval.name = Intervalo de Auto Salvamento
setting.seconds = {0} segundos
@@ -651,7 +669,7 @@ setting.chatopacity.name = Opacidade do chat
setting.lasersopacity.name = Opacidade do laser
setting.playerchat.name = Mostrar chat em jogo
public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública.
-public.beta = Note that beta versions of the game cannot make public lobbies.
+public.beta = Note que as versões beta do jogo não podem fazer salas publicas.
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
uiscale.cancel = Cancelar e sair
setting.bloom.name = Bloom
@@ -719,10 +737,10 @@ keybind.zoom_minimap.name = Zoom do minimapa
mode.help.title = Descrição dos modos
mode.survival.name = Sobrevivência
mode.survival.description = O modo normal. Recursos limitados e hordas automáticas.
-mode.sandbox.name = Sandbox
+mode.sandbox.name = Caixa de areia
mode.sandbox.description = Recursos infinitos e sem tempo para ataques.
mode.editor.name = Editor
-mode.pvp.name = JXJ
+mode.pvp.name = JxJ
mode.pvp.description = Lutar contra outros jogadores locais.
mode.attack.name = Ataque
mode.attack.description = Sem hordas, com o objetivo de destruir a base inimiga.
@@ -737,6 +755,7 @@ rules.enemyCheat = Recursos de IA Infinitos
rules.unitdrops = Inimigos dropam itens
rules.unitbuildspeedmultiplier = Multiplicador de velocidade de criação de unidade
rules.unithealthmultiplier = Multiplicador de vida de unidade
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Multiplicador da vida de jogador
rules.playerdamagemultiplier = Multiplicador do dano de jogador
rules.unitdamagemultiplier = Multiplicador de dano de Unidade
@@ -805,6 +824,7 @@ mech.trident-ship.name = Tridente
mech.trident-ship.weapon = Carga de bombas
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Repetidor de fogo
+item.corestorable = [lightgray]Armazenável no núcleo: {0}
item.explosiveness = [LIGHT_GRAY]Explosibilidade: {0}
item.flammability = [LIGHT_GRAY]Inflamabilidade: {0}
item.radioactivity = [LIGHT_GRAY]Radioatividade: {0}
@@ -958,6 +978,7 @@ block.mechanical-pump.name = Bomba Mecânica
block.item-source.name = Criador de itens
block.item-void.name = Destruidor de itens
block.liquid-source.name = Criador de líquidos
+block.liquid-void.name = Liquid Void
block.power-void.name = Anulador de energia
block.power-source.name = Criador de energia
block.unloader.name = Descarregador
@@ -980,9 +1001,9 @@ block.spirit-factory.name = Fábrica de drone de reparo Spirit
block.phantom-factory.name = Fábrica de drone de construção Phantom
block.wraith-factory.name = Fábrica de lutadores Wraith
block.ghoul-factory.name = Fábrica de Bombardeiros Ghoul
-block.dagger-factory.name = Fábrica de mech Dagger
-block.crawler-factory.name = Fábrica de mech Crawler
-block.titan-factory.name = Fábrica de mech titan
+block.dagger-factory.name = Fábrica de Mecas Dagger
+block.crawler-factory.name = Fábrica de Mecas Crawler
+block.titan-factory.name = Fábrica de Mecas Titan
block.fortress-factory.name = Fábrica de mech Fortress
block.revenant-factory.name = Fábrica de lutadores Revenant
block.repair-point.name = Ponto de Reparo
@@ -1039,15 +1060,15 @@ unit.eradicator.name = Erradicador
unit.lich.name = Lich
unit.reaper.name = Ceifador
tutorial.next = [lightgray]
-tutorial.intro = Você entrou no[scarlet] Tutorial do Mindustry.[]\nComeçe[accent] minerando cobre[]. Toque em um veio de minério de cobre para fazer isso.\n\n[accent]{0}/{1} copper
-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 = Você entrou no Tutorial do[scarlet] Mindustry.[]\nUse[accent] [[WASD][] para se mover.\n[accent]Roda do mouse[] para aumentar e diminuir o zoom.\nComece[accent] minerando cobre[]. Toque em um veio de minério de cobre para fazer isso.\n\n[accent]{0}/{1} Cobre
+tutorial.intro.mobile = Você entrou no Tutorial do[scarlet] Mindustry.[]\nPasse o dedo na tela para se mover.\n[accent]Use os dois dedos [] para alterar o zoom.\nComece[accent] minerando cobre[]. Se aproxime dele, e toque numa veia de cobre perto do seu núcleo.\n\n[accent]{0}/{1} Cobre
tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nColoque uma num veio de cobre.
tutorial.drill.mobile = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nToque na aba de brocas no canto inferior direito.\nSelecione a[accent] broca mecânica[].\nToque em um veio de cobre para colocá-la, então pressione a[accent] marca de verificação[] abaixo para confirmar sua seleção.\nPressione o[accent] botão "X"[] para cancelar o posicionamento.
tutorial.blockinfo = Cada bloco tem diferentes status. Cada broca pode extrair certos minérios.\nPara checar as informações e os status de um bloco,[accent] toque o botão "?" enquanto o seleciona no menu de construção.[]\n\n[accent]Acesse os status da broca mecânica agora.[]
tutorial.conveyor = [accent]Esteiras[] São usadas para transportar itens até o núcleo.\nFaça uma linha de Esteiras da mineradora até o núcleo.
tutorial.conveyor.mobile = [accent]Esteiras[] são usadas para transportar itens até o núcleo.\nFaça uma linha de esteiras da broca até o núcleo.\n[accent] Coloque uma linha segurando por alguns segundos[] e arrastando em uma direção.\n\n[accent]{0}/{1} esteiras colocadas em linha\n[accent]0/1 itens entregues
tutorial.turret = Estruturas defensivas devem ser construidas para repelir[LIGHT_GRAY] o inimigo[].\nConstrua uma torre dupla perto de sua base.
-tutorial.drillturret = Torretas duplas precisam de[accent] cobre[] como munição para atirar.\nColoque uma broca próxima à torre para carregá-la com o cobre minerado.
+tutorial.drillturret = Torres duplas precisam de[accent] cobre[] como munição para atirar.\nColoque uma broca próxima à torre para carregá-la com o cobre minerado.
tutorial.pause = Durante uma batalha, você pode[accent] pausar o jogo.[]\nVocê pode enfileirar construções enquanto o jogo está pausado.\n\n[accent]Pressione a barra de espaço para pausar.
tutorial.pause.mobile = Durante uma batalha, você pode[accent] pausar o jogo.[]\nVocê pode enfileirar construções enquanto o jogo está pausado.\n\n[accent]Pressione este botão no canto superior direito para pausar.
tutorial.unpause = Agora pressione novamente a barra de espaço para despausar.
@@ -1102,7 +1123,7 @@ unit.revenant.description = Uma matriz de mísseis pesada e flutuante.
block.message.description = Armazena uma mensagem. Usado para comunicação entre aliados.
block.graphite-press.description = Comprime pedaços de carvão em lâminas de grafite puro.
block.multi-press.description = Uma versão melhorada da prensa de grafite. Usa água e energia para processar carvão rápida e eficientemente.
-block.silicon-smelter.description = Reduz areia com carvão puro. Produz silício silicio.
+block.silicon-smelter.description = Reduz areia a silicio usando carvão puro. Produz silício.
block.kiln.description = Derrete chumbo e areia no composto conhecido como metavidro. Requer pequenas quantidades de energia.
block.plastanium-compressor.description = Produz plastânio usando petróleo e titânio.
block.phase-weaver.description = Produz tecido de fase usando tório radioativo e areia. Requer massivas quantidades de energia para funcionar.
@@ -1121,6 +1142,7 @@ block.power-source.description = Infinitivamente da energia. Apenas caixa de are
block.item-source.description = Infinivamente da itens. Apenas caixa de areia.
block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia.
block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo.
block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo.\nOcupa múltiplos blocos.
block.titanium-wall.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos.
@@ -1138,9 +1160,9 @@ block.door-large.description = Uma grande porta. Pode ser aberta e fechada ao to
block.mender.description = Periodicamente repara blocos vizinhos. Mantem as defesas reparadas em e entre ondas.\nPode usar silício para aumentar o alcance e a eficiência.
block.mend-projector.description = Uma versão melhorada do reparador. Repara blocos vizinhos.\nPode usar tecido de fase para aumentar o alcance e a eficiência.
block.overdrive-projector.description = Aumenta a velocidade de construções vizinhas.\nPode usar tecido de fase para aumentar o alcance e a eficiência.
-block.force-projector.description = Cria um campo de forca hexagonal em volta de si mesmo, Protegendo construções e unidades dentro de dano por balas.
+block.force-projector.description = Cria um campo de força hexagonal ao redor de si, protegendo construções e unidades.\nSuperaquece se suportar muito dano. Pode usar líquidos para evitar superaquecimento. Pode-se usar tecido de fase para aumentar o tamanho do escudo.
block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo.
-block.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente em torretas ou construtores. Rotacionavel.
+block.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente em torretas ou construtores. Rotacionável.
block.titanium-conveyor.description = Bloco de transporte de item avançado. Move itens mais rapidos que esteiras padrões.
block.junction.description = Funciona como uma ponte Para duas esteiras que estejam se cruzando. Util em situações que tenha duas esteiras diferentes carregando materiais diferentes para lugares diferentes.
block.bridge-conveyor.description = Bloco de transporte de itens avancado. Possibilita o transporte de itens acima de 3 blocos de construção ou paredes.
@@ -1176,16 +1198,16 @@ block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos qu
block.solar-panel.description = Gera pequenas quantidades de energia do sol.
block.solar-panel-large.description = Uma versão significantemente mais eficiente que o painel solar padrão.
block.thorium-reactor.description = Gera altas quantidades de energia do torio radioativo. Requer resfriamento constante. Vai explodir violentamente Se resfriamento insuficiente for fornecido.
-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.impact-reactor.description = Um gerador avançado, capaz de criar quantidades enormes de energia em seu poder total. Requer uma entrada significativa de energia ao iniciar.
block.mechanical-drill.description = Uma broca barata. Quando colocado em blocos apropriados, retira itens em um ritmo lento e indefinitavamente.
block.pneumatic-drill.description = Uma broca improvisada que é mais rápida e capaz de processar materiais mais duros usando a pressão do ar
block.laser-drill.description = Possibilita a mineração ainda mais rapida usando tecnologia a laser, Mas requer poder adcionalmente torio radioativo pode ser recuperado com essa mineradora
block.blast-drill.description = A melhor mineradora. Requer muita energia.
-block.water-extractor.description = Extrai água do chão. Use quando não tive nenhum lago proximo
-block.cultivator.description = Cultiva o solo com agua para pegar bio materia.
block.water-extractor.description = Extrai água subterrânea. Usado em locais sem água superficial disponível.
block.cultivator.description = Cultiva pequenas concentrações de esporos na atmosfera em cápsulas prontas.
block.oil-extractor.description = Usa altas quantidades de energia para extrair petróleo da areia. Use quando não tiver fontes de petróleo por perto.
+block.core-shard.description = The first iteration of the core capsule. Once destroyed, all contact to the region is lost. Do not let this happen.
+block.core-foundation.description = The second version of the core. Better armored. Stores more resources.
block.core-nucleus.description = A terceira e ultima iteração do núcleo. Extremamente bem armadurada. Guarda quantidades massivas de recursos.
block.vault.description = Carrega uma alta quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[LIGHT_GRAY] Descarregador[] pode ser usado para recuperar esses itens do container.
block.container.description = Carrega uma baixa quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[LIGHT_GRAY] Descarregador[] pode ser usado para recuperar esses itens do container.
diff --git a/core/assets/bundles/bundle_pt.properties b/core/assets/bundles/bundle_pt_PT.properties
similarity index 89%
rename from core/assets/bundles/bundle_pt.properties
rename to core/assets/bundles/bundle_pt_PT.properties
index a0300813f5..1375245580 100644
--- a/core/assets/bundles/bundle_pt.properties
+++ b/core/assets/bundles/bundle_pt_PT.properties
@@ -1,4 +1,4 @@
-credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
+credits.text = Criado por [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
credits = Créditos
contributors = Tradutores e contribuidores
discord = Junte-se ao Discord do Mindustry! (Lá falamos inglês)
@@ -10,7 +10,9 @@ link.dev-builds.description = Desenvolvimentos Instáveis
link.trello.description = Trello Oficial para Atualizações Planejadas
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
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.
@@ -18,28 +20,39 @@ gameover = O núcleo foi destruído.
gameover.pvp = O time[accent] {0}[] ganhou!
highscore = [YELLOW]Novo recorde!
copied = Copiado.
+
load.sound = Sons
load.map = Mapas
load.image = Imagens
load.content = Conteúdo
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
+
schematic = Esquema
schematic.add = Gravar Esquema...
schematics = Esquemas
-schematic.replace = A schematic by that name already exists. Replace it?
+schematic.replace = Um esquema com esse nome já existe. Deseja substituí-lo?
schematic.import = Importar Esquema...
schematic.exportfile = Exportar Ficheiro
schematic.importfile = Importar Ficheiro
-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}][]: Tornar Esquema
+schematic.browseworkshop = Pesquisar no Workshop
+schematic.copy = Copiar para a área de transferência
+schematic.copy.import = Importar da área de transferência
+schematic.shareworkshop = Partilhar na Workshop
+schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Rodar Esquema
schematic.saved = Esquema gravado.
schematic.delete.confirm = Este esquema irá ser completamente apagado.
schematic.rename = Renomear Esquema
schematic.info = {0}x{1}, {2} blocos
+
stat.wave = Hordas derrotadas:[accent] {0}
stat.enemiesDestroyed = Inimigos Destruídos:[accent] {0}
stat.built = Construções construídas:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Construções destruídas:[accent] {0}
stat.deconstructed = Construções desconstruídas:[accent] {0}
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.
map.delete = Certeza que quer deletar o mapa "[accent]{0}[]"?
@@ -56,7 +70,7 @@ level.mode = Modo de Jogo:
showagain = Não mostrar na proxima sessão
coreattack = < O núcleo está sobre ataque! >
nearpoint = [[ [scarlet]SAIA DO PONTO DE SPAWN IMEDIATAMENTE[] ]\nANIQUILAÇÃO IMINENTE
-database = banco do núcleo
+database = Banco do núcleo
savegame = Gravar Jogo
loadgame = Carregar Jogo
joingame = Entrar no Jogo
@@ -74,36 +88,45 @@ maps.browse = Pesquisar mapas
continue = Continuar
maps.none = [LIGHT_GRAY]Nenhum Mapa Encontrado!
invalid = Inválido
+pickcolor = Pick Color
preparingconfig = Preparando configuração
preparingcontent = Preparando conteúdo
uploadingcontent = Enviando conteúdo
uploadingpreviewfile = Enviando ficheiro de pré-visualização
committingchanges = Enviando mudanças
done = Feito
-feature.unsupported = Your device does not support this feature.
-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.
+feature.unsupported = O teu dispositivos não suporta esta característica.
+
+mods.alphainfo = Lembre-se de que os mods estão em alfa, e [scarlet] pode estar cheio de falhas[].\nReporta qualquer problema que encontres no the Mindustry GitHub ou Discord.
mods.alpha = [accent](Alpha)
mods = Mods
-mods.none = [LIGHT_GRAY]No mods found!
-mods.guide = Modding Guide
-mods.report = Report Bug
+mods.none = [LIGHT_GRAY]Mods não encontrados!
+mods.guide = Guia de mods
+mods.report = Reportar Bug
mods.openfolder = Open Mod Folder
mod.enabled = [lightgray]Ativado
mod.disabled = [scarlet]Desativado
mod.disable = Desativar
-mod.delete.error = Unable to delete mod. File may be in use.
-mod.missingdependencies = [scarlet]Missing dependencies: {0}
-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.delete.error = Incapaz de apagar o mod. Ficheiro já em uso.
+mod.requiresversion = [scarlet]Requires min game version: [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.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 = The game will now close to apply the mod changes.
+mod.requiresrestart = O jogo será fechado agora para aplicar as alterações no mod.
mod.reloadrequired = [scarlet]Reload Required
mod.import = Importar Mod
-mod.import.github = Importar Mod da GitHub
+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.remove.confirm = Este mod irá ser apagado.
mod.author = [LIGHT_GRAY]Autor:[] {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.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}
+mod.preview.missing = Antes de publicar este mod no workshop, você deve adicionar uma visualização da imagem.\nNome da imagem -> [accent] preview.png[] na pasta de mods e tenta outra vez.
+mod.folder.missing = Apenas mods na pasta podem ser publicados no Workshop.\nPara converter qualquer mod para uma pasta, simplesmentes descomprime os ficheiros para a pasta e apague o ficheiro zip antigo, e depois reinicia o jogo ou os teus mods.
+mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
+
about.button = Sobre
name = Nome:
noname = Escolha[accent] um nome[] primeiro.
@@ -132,8 +155,9 @@ server.kicked.nameEmpty = Você deve ter pelo menos uma letra ou número no nome
server.kicked.idInUse = Você ja está neste servidor! Conectar com duas contas não é permitido.
server.kicked.customClient = Este servidor não suporta versões customizadas. Baixe a versão original.
server.kicked.gameover = Fim de jogo!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[]
-host.info = The [accent]Hospedar[]Botão Hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguem esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall
+host.info = O [accent]Hospedar[]Botão Hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguem esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall
join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[LIGHT_GRAY]Note: Não há uma lista de servidores automáticos; Se você quer conectar ao IP de alguém, você precisa pedir o IP ao anfitrião.
hostserver = Hospedar servidor
invitefriends = Convidar amigos
@@ -235,12 +259,12 @@ classic.export.text = [accent]Mindustry[] acabou de ter uma grande atualização
quit.confirm = Você tem certeza que quer sair?
quit.confirm.tutorial = Você tem certeza você sabe o que você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[]
loading = [accent]Carregando...
-reloading = [accent]Reloading Mods...
+reloading = [accent]Recarregar mods...
saving = [accent]Gravando...
-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 apagar o plano
+selectschematic = [accent][[{0}][] para selecionar+copy
+pausebuilding = [accent][[{0}][] para pausar construção
+resumebuilding = [scarlet][[{0}][] para resumir construção
wave = [accent]Horda {0}
wave.waiting = Horda em {0}
wave.waveInProgress = [LIGHT_GRAY]Horda Em Progresso
@@ -262,15 +286,16 @@ map.invalid = Erro ao carregar o mapa: Ficheiro de mapa invalido ou corrupto.
workshop.update = Atualizar Item
workshop.error = Error fetching workshop details: {0}
map.publish.confirm = Você tem certeza de que quer publicar este mapa?\n\n[lightgray]Tenha certeza de que você concorda com o EULA da oficina primeiro, ou seus mapas não serão mostrados!
-workshop.menu = Select what you would like to do with this item.
+workshop.menu = Seleciona o que tu gostarias de fazer com este item.
workshop.info = Item Info
changelog = Changelog (optional):
eula = EULA do Steam
-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}
+missing = Este item foi apagodo ou movido.\n[lightgray]A listagem da oficina foi automaticamente desassociada.
+publishing = [accent]A publicar...
+publish.confirm = Tens a certeza que queres publicar isto?\n\n[lightgray]Certifique-se de concordar com o EULA do workshpop primeiro, ou seus itens não aparecerão!
+publish.error = Erro ao publicao os items: {0}
+steam.error = Falha ao iniciar os serviços da Steam.\nError: {0}
+
editor.brush = Pincel
editor.openin = Abrir no Editor
editor.oregen = Geração de minério
@@ -347,6 +372,7 @@ editor.overwrite = [accent]Aviso!\nIsso Substitui um mapa existente.
editor.overwrite.confirm = [scarlet]Aviso![] Um mapa com esse nome já existe. Tem certeza que deseja substituir?
editor.exists = Já existe um mapa com este nome.
editor.selectmap = Selecione uma mapa para carregar:
+
toolmode.replace = Substituir
toolmode.replace.description = Desenha apenas em blocos sólidos.
toolmode.replaceall = Substituir tudo
@@ -361,6 +387,7 @@ toolmode.fillteams = Encher times
toolmode.fillteams.description = Muda o time do qual todos os blocos pertencem.
toolmode.drawteams = Desenhar times
toolmode.drawteams.description = Muda o time do qual o bloco pertence.
+
filters.empty = [LIGHT_GRAY]Sem filtro! Adicione um usando o botão abaixo.
filter.distort = Distorcedor
filter.noise = Geração aleatória
@@ -392,6 +419,7 @@ filter.option.floor2 = Chão secundário
filter.option.threshold2 = Margem secundária
filter.option.radius = Raio
filter.option.percentile = Percentual
+
width = Largura:
height = Altura:
menu = Menu
@@ -407,13 +435,14 @@ tutorial = Tutorial
tutorial.retake = Refazer Tutorial
editor = Editor
mapeditor = Editor de mapa
+
abandon = Abandonar
abandon.text = Esta zona e todos os seus recursos serão perdidos para o inimigo.
locked = Trancado
complete = [LIGHT_GRAY]Completo:
-requirement.wave = Reach Wave {0} in {1}
-requirement.core = Destroy Enemy Core in {0}
-requirement.unlock = Unlock {0}
+requirement.wave = Ronda alcançada {0} / {1}
+requirement.core = Destruir Núcleo Inimigo em {0}
+requirement.unlock = Destrava {0}
resume = Resumir Zona:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Melhor: {0}
launch = Lançar
@@ -424,19 +453,20 @@ launch.confirm = Isto vai lançar todos os seus recursos no seu núcleo.\nVoce n
launch.skip.confirm = Se você pular a horda agora, você não será capaz de lançar até hordas mais avançadas.
uncover = Descobrir
configure = Configurar carregamento
-bannedblocks = Banned Blocks
-addall = Add All
+bannedblocks = Blocos banidos
+addall = Adiciona tudo
configure.locked = [LIGHT_GRAY]Alcançe a horda {0}\npara configurar o carregamento.
configure.invalid = A quantidade deve ser um número entre 0 e {0}.
zone.unlocked = [LIGHT_GRAY]{0} Desbloqueado.
zone.requirement.complete = Horda {0} alcançada:\n{1} Requerimentos da zona alcançada.
-zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
+zone.config.unlocked = Loadout destravada:[lightgray]\n{0}
zone.resources = Recursos detectados:
zone.objective = [lightgray]Objetivo: [accent]{0}
zone.objective.survival = Sobreviver
zone.objective.attack = Destruir o núcleo inimigo
add = Adicionar...
boss.health = Saúde do chefe
+
connectfail = [crimson]Falha ao entrar no servidor: [accent]{0}
error.unreachable = Servidor inalcançável.
error.invalidaddress = Endereço inválido.
@@ -447,6 +477,7 @@ error.mapnotfound = Ficheiro de mapa não encontrado!
error.io = Erro I/O de internet.
error.any = Erro de rede desconhecido.
error.bloom = Falha ao inicializar bloom.\nSeu aparelho talvez não o suporte.
+
zone.groundZero.name = Marco zero
zone.desertWastes.name = Ruínas do Deserto
zone.craters.name = As crateras
@@ -461,6 +492,7 @@ zone.saltFlats.name = Planícies de sal
zone.impact0078.name = Impacto 0078
zone.crags.name = Penhascos
zone.fungalPass.name = Passagem Fúngica
+
zone.groundZero.description = Uma ótima localização para começar de novo. Baixa ameaça inimiga. Poucos recursos.\nColete o máximo de chumbo e cobre possível.\nContinue!
zone.frozenForest.description = Até aqui, perto das montanhas, os esporos se espalharam. As baixas temperaturas não podem contê-los para sempre.\n\nComeçe a busca por energia. Construa geradores à combustão. Aprenda a usar os reparadores (menders).
zone.desertWastes.description = Estas ruínas são vastas, imprevisíveis, e cruzadas por estruturas abandonadas.\nCarvão está presente na região. O queime por energia, ou sintetize grafite.\n\n[lightgray]Este local de pouso não pode ser garantido.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = Uma antiga instalação para produção e proc
zone.fungalPass.description = Uma area de transição entre montanhas altas e baixas, terras cheias de esporos. Uma pequena base de reconhecimento inimiga está localizada aqui.\nDestrua-a.\nUse as unidades crawler e dagger. Destrua os dois núcleos.
zone.impact0078.description =
zone.crags.description =
+
settings.language = Linguagem
settings.data = Dados do jogo
settings.reset = Restaurar Padrões
settings.rebind = Religar
+settings.resetKey = Reset
settings.controls = Controles
settings.game = Jogo
settings.sound = Som
@@ -487,8 +521,8 @@ settings.cleardata = Apagar dados...
settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito!
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar toda a data, Incluindo saves, mapas, Keybinds e desbloqueados.\nQuando apertar 'ok' Vai apagar toda a data e sair automaticamente.
paused = Pausado
-clear = Clear
-banned = [scarlet]Banned
+clear = Limpar
+banned = [scarlet]Banido
yes = Sim
no = Não
info.title = [accent]Informação
@@ -529,6 +563,7 @@ blocks.inaccuracy = Imprecisão
blocks.shots = Tiros
blocks.reload = Tiros por segundo
blocks.ammo = Munição
+
bar.drilltierreq = Broca melhor necessária.
bar.drillspeed = Velocidade da broca: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Aquecimento
bar.power = Poder
bar.progress = Progresso da construção
bar.spawned = Unidades: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] dano
bullet.splashdamage = [stat]{0}[lightgray] Dano em área ~[stat] {1}[lightgray] Blocos
bullet.incendiary = [stat]Incendiário
@@ -555,6 +593,7 @@ bullet.freezing = [stat]Congelamento
bullet.tarred = [stat]Grudento
bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munição
bullet.reload = [stat]{0}[lightgray]x cadência de tiro
+
unit.blocks = Blocos
unit.powersecond = Unidades de energia/segundo
unit.liquidsecond = Unidades de líquido/segundo
@@ -567,6 +606,8 @@ unit.persecond = por segundo
unit.timesspeed = x Velocidade
unit.percent = %
unit.items = itens
+unit.thousands = k
+unit.millions = mil
category.general = Geral
category.power = Poder
category.liquids = Líquidos
@@ -579,6 +620,7 @@ setting.shadows.name = Sombras
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = Filtragem linear
setting.hints.name = Hints
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Água animada
setting.animatedshields.name = Escudos animados
setting.antialias.name = Filtro suavizante[LIGHT_GRAY] (reinicialização requerida)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Balanço do Ecrã
setting.effects.name = Efeitos
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Sensibilidade do Controle
setting.saveinterval.name = Intervalo de autogravamento
setting.seconds = {0} Segundos
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Ecrã inteiro
setting.borderlesswindow.name = Janela sem borda[LIGHT_GRAY] (Pode precisar reiniciar)
setting.fps.name = Mostrar FPS
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixelizado [LIGHT_GRAY](Pode diminuir a performace)
setting.minimap.name = Mostrar minimapa
@@ -620,10 +666,10 @@ setting.crashreport.name = Enviar denuncias de crash anonimas
setting.savecreate.name = Criar gravamentos automaticamente
setting.publichost.name = Visibilidade do jogo público
setting.chatopacity.name = Opacidade do chat
-setting.lasersopacity.name = Power Laser Opacity
+setting.lasersopacity.name = Opacidade do Power Laser
setting.playerchat.name = Mostrar chat em jogo
-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.
+public.confirm = Queres que o teu jogo fique publico?\n[accent]Qualquer jogador vai conseguir juntar-se ao teu jogo.\n[lightgray]Isto pode ser alterado mais tarde in Settings->Game->Public Game Visibility.
+public.beta = Observe que as versões beta do jogo não podem criar lobbies públicos.
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
uiscale.cancel = Cancelar e sair
setting.bloom.name = Bloom
@@ -635,18 +681,38 @@ category.multiplayer.name = Multijogador
command.attack = Atacar
command.rally = Reunir
command.retreat = Recuar
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Limpar Edificio
keybind.press = Pressione uma tecla...
keybind.press.axis = Pressione uma Axis ou tecla...
keybind.screenshot.name = Captura do mapa
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = mover_x
keybind.move_y.name = mover_y
-keybind.schematic_select.name = Select Region
-keybind.schematic_menu.name = Schematic Menu
-keybind.schematic_flip_x.name = Flip Schematic X
-keybind.schematic_flip_y.name = Flip Schematic Y
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Correr
+keybind.schematic_select.name = Selecionar região
+keybind.schematic_menu.name = Menu esquemático
+keybind.schematic_flip_x.name = Rodar esquema X
+keybind.schematic_flip_y.name = Rodar esquema 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 = Alterar ecrã inteiro
-keybind.select.name = selecionar
+keybind.select.name = Selecionar
keybind.diagonal_placement.name = Colocação diagonal
keybind.pick.name = Pegar bloco
keybind.break_block.name = Quebrar bloco
@@ -655,21 +721,20 @@ keybind.shoot.name = Atirar
keybind.zoom.name = Zoom
keybind.menu.name = Menu
keybind.pause.name = Pausar
-keybind.pause_building.name = Pause/Resume Building
+keybind.pause_building.name = Pausar/Resumir construção
keybind.minimap.name = Minimapa
-keybind.dash.name = Correr
keybind.chat.name = Conversa
keybind.player_list.name = Lista_de_jogadores
keybind.console.name = console
keybind.rotate.name = Girar
-keybind.rotateplaced.name = Rotate Existing (Hold)
+keybind.rotateplaced.name = Rodar existente (Hold)
keybind.toggle_menus.name = Ativar menus
-keybind.chat_history_prev.name = Historico do chat anterior
-keybind.chat_history_next.name = Historico do proximo chat
+keybind.chat_history_prev.name = Histórico do chat anterior
+keybind.chat_history_next.name = Histórico do proximo chat
keybind.chat_scroll.name = Rolar chat
keybind.drop_unit.name = Soltar unidade
keybind.zoom_minimap.name = Zoom do minimapa
-mode.help.title = Descrição dos modos
+mode.help.title = Descrição dos mods
mode.survival.name = Sobrevivência
mode.survival.description = O modo normal. Recursos limitados e hordas automáticas.
mode.sandbox.name = Sandbox
@@ -680,7 +745,9 @@ mode.pvp.description = Lutar contra outros jogadores locais.
mode.attack.name = Ataque
mode.attack.description = Sem hordas, com o objetivo de destruir a base inimiga.
mode.custom = Regras personalizadas
+
rules.infiniteresources = Recursos infinitos
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Tempo de horda
rules.waves = Hordas
rules.attack = Modo de ataque
@@ -688,6 +755,7 @@ rules.enemyCheat = Recursos de IA Infinitos
rules.unitdrops = Unidade solta
rules.unitbuildspeedmultiplier = Multiplicador de velocidade de criação de unidade
rules.unithealthmultiplier = Multiplicador de vida de unidade
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Multiplicador da vida de jogador
rules.playerdamagemultiplier = Multiplicador do dano de jogador
rules.unitdamagemultiplier = Multiplicador de dano de Unidade
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Recursos e Construções
rules.title.player = Jogadores
rules.title.enemy = Inimigos
rules.title.unit = Unidades
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Itens
content.liquid.name = Liquidos
content.unit.name = Unidades
@@ -752,6 +824,7 @@ mech.trident-ship.name = Tridente
mech.trident-ship.weapon = Carga de bombas
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Repetidor de fogo
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [LIGHT_GRAY]Explosibilidade: {0}
item.flammability = [LIGHT_GRAY]Inflamabilidade: {0}
item.radioactivity = [LIGHT_GRAY]Radioatividade: {0}
@@ -767,6 +840,7 @@ mech.buildspeed = [LIGHT_GRAY]Velocidade de construção: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Capacidade de aquecimento: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosidade: {0}
liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
+
block.sand-boulder.name = Pedregulho de areia
block.grass.name = Grama
block.salt.name = Sal
@@ -865,6 +939,8 @@ block.distributor.name = Distribuidor
block.sorter.name = Ordenador
block.inverted-sorter.name = Inverted Sorter
block.message.name = Mensagem
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = Portão Sobrecarregado
block.silicon-smelter.name = Fundidora de silicio
block.phase-weaver.name = Palheta de fase
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Centrifuga de carvão
block.power-node.name = Célula de energia
block.power-node-large.name = Célula de energia Grande
block.surge-tower.name = Torre de surto
+block.diode.name = Battery Diode
block.battery.name = Bateria
block.battery-large.name = Bateria Grande
block.combustion-generator.name = Gerador a combustão
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Bomba Mecânica
block.item-source.name = Criador de itens
block.item-void.name = Destruidor de itens
block.liquid-source.name = Criador de líquidos
+block.liquid-void.name = Liquid Void
block.power-void.name = Anulador de energia
block.power-source.name = Criador de energia
block.unloader.name = Descarregador
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Fábrica de mech Fortress
block.revenant-factory.name = Fábrica de lutadores Revenant
block.repair-point.name = Ponto de Reparo
block.pulse-conduit.name = Cano de Pulso
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Cano de Fase
block.liquid-router.name = Roteador de Líquido
block.liquid-tank.name = Tanque de Líquido
@@ -981,8 +1060,8 @@ unit.eradicator.name = Erradicador
unit.lich.name = Lich
unit.reaper.name = Ceifador
tutorial.next = [lightgray]
-tutorial.intro = Você entrou no[scarlet] Tutorial do Mindustry.[]\nComeçe[accent] minerando cobre[]. Toque em um veio de minério de cobre para fazer isso.\n\n[accent]{0}/{1} copper
-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 = Entraste no[scarlet] Tutorial do Mindustry.[]\nComeçe[accent] minerando cobre[]. Toque em um veio de minério de cobre para fazer isso.\n\n[accent]{0}/{1} copper
+tutorial.intro.mobile = Entraste no[scarlet] Mindustry Tutorial.[]\nPasse o dedo na tela para mover.\n[accent]Use 2 dedos [] para manipular o zoom.\nComeça por by[accent] minerar cobre[].Aproxime-se dele e toque uma veia de minério de cobre perto do seu núcleo para fazer isso.\n\n[accent]{0}/{1} copper
tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nColoque uma num veio de cobre.
tutorial.drill.mobile = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nToque na aba de brocas no canto inferior direito.\nSelecione a[accent] broca mecânica[].\nToque em um veio de cobre para colocá-la, então pressione a[accent] marca de verificação[] abaixo para confirmar sua seleção.\nPressione o[accent] botão "X"[] para cancelar o posicionamento.
tutorial.blockinfo = Cada bloco tem diferentes status. Cada broca pode extrair certos minérios.\nPara checar as informações e os status de um bloco,[accent] toque o botão "?" enquanto o seleciona no menu de construção.[]\n\n[accent]Acesse os status da broca mecânica agora.[]
@@ -1001,6 +1080,7 @@ tutorial.deposit = Deposite itens em blocos arrastando da sua nave até o bloco.
tutorial.waves = O[LIGHT_GRAY] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Construa mais torretas.
tutorial.waves.mobile = O[lightgray] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Seu drone vai atirar nos inimigos automaticamente.\nConstrua mais torretas e brocas. Minere mais cobre.
tutorial.launch = Quando você atinge uma horda específica, Você é capaz de[accent] lançar o núcleo[], deixando suas defesas para trás e[accent] obtendo todos os recursos em seu núcleo.[]\nEstes recursos podem ser usados para pesquisar novas tecnologias.\n\n[accent]Pressione o botão lançar.
+
item.copper.description = O material mais básico. Usado em todos os tipos de blocos.
item.lead.description = Material de começo basico. usado extensivamente em blocos de transporte de líquidos e eletrônicos.
item.metaglass.description = Composto de vidro super resistente. Extensivamente usado para distribuição e armazenagem de líquidos.
@@ -1062,6 +1142,7 @@ block.power-source.description = Infinitivamente da energia. Apenas caixa de are
block.item-source.description = Infinivamente da itens. Apenas caixa de areia.
block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia.
block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo.
block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo.\nOcupa múltiplos blocos.
block.titanium-wall.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = Uma bomba avançada. Bombeia mais líquido, mas
block.thermal-pump.description = A bomba final.
block.conduit.description = Bloco básico de transporte de líquidos. Move líquidos para a frente. Usado em conjunto com bombas e outros canos.
block.pulse-conduit.description = Bloco avancado de transporte de liquido. Transporta liquidos mais rápido e armazena mais que os canos padrões.
+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 = Aceita liquidos de uma direcão e os joga em 3 direções igualmente. Pode armazenar uma certa quantidade de liquido. Util para espalhar liquidos de uma fonte para multiplos alvos.
block.liquid-tank.description = Armazena grandes quantidades de liquido. Use quando a demanda de materiais não for constante ou para guardar itens para resfriar blocos vitais.
block.liquid-junction.description = Age como uma ponte para dois canos que se cruzam. Útil em situações em que há dois cano carregando liquidos diferentes até localizações diferentes.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Bloco avancado de transporte de liquido. Usa e
block.power-node.description = Transmite energia para células conectadas. A célula vai receber energia ou alimentar qualquer bloco adjacente.
block.power-node-large.description = Uma célula de energia avançada com maior alcance e mais conexões.
block.surge-tower.description = Uma célula de energia com um extremo alcance mas com menos conexões disponíveis.
+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 = Armazena energia em tempos de energia excedente. Libera energia em tempos de déficit.
block.battery-large.description = Guarda muito mais energia que uma beteria comum.
block.combustion-generator.description = Gera energia usando combustível ou petróleo.
diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties
index ed7294fa27..40c86a18b1 100644
--- a/core/assets/bundles/bundle_ru.properties
+++ b/core/assets/bundles/bundle_ru.properties
@@ -1247,4 +1247,4 @@ block.tau-mech-pad.description = Обеспечивает превращение
block.omega-mech-pad.description = Обеспечивает превращение в тяжелобронированный ракетный мех.\nИспользуйте, нажав, стоя на нём.
block.javelin-ship-pad.description = Обеспечивает превращение в быстрый перехватчик в лёгкой броне.\nИспользуйте, нажав, стоя на нём.
block.trident-ship-pad.description = Обеспечивает превращение в тяжёлый бомбардировщик поддержки.\nИспользуйте, нажав, стоя на нём.
-block.glaive-ship-pad.description = Обеспечивает превращение в большой, хорошо бронированный боевой корабль.\nИспользуйте, нажав, стоя на нём.
+block.glaive-ship-pad.description = Обеспечивает превращение в большой, хорошо бронированный боевой корабль.\nИспользуйте, нажав, стоя на нём.
\ No newline at end of file
diff --git a/core/assets/bundles/bundle_sv.properties b/core/assets/bundles/bundle_sv.properties
index 13ad6cdfae..429fe7df5d 100644
--- a/core/assets/bundles/bundle_sv.properties
+++ b/core/assets/bundles/bundle_sv.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = Unstable development builds
link.trello.description = Officiell Trello tavla för plannerade funktioner
link.itch.io.description = itch.io sida med nedladdningar
link.google-play.description = Mindustry på Google Play
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Officiell wiki-sida för Mindustry
+link.feathub.description = Suggest new features
linkfail = Kunde inte öppna länken!\nURL:en har kopierats till ditt urklipp.
screenshot = Skärmdump har sparats till {0}
screenshot.invalid = Karta för stor, potentiellt inte tillräckligt minne för .
@@ -18,12 +20,22 @@ gameover = Game Over
gameover.pvp = The[accent] {0}[] team is victorious!
highscore = [accent]Nytt rekord!
copied = Kopierad.
+
load.sound = Ljud
load.map = Kartor
load.image = Bilder
load.content = Innehåll
load.system = System
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
+
schematic = Schematic
schematic.add = Save Schematic...
schematics = Schematics
@@ -40,6 +52,7 @@ schematic.saved = Schematic saved.
schematic.delete.confirm = This schematic will be utterly eradicated.
schematic.rename = Rename Schematic
schematic.info = {0}x{1}, {2} blocks
+
stat.wave = Besegrade vågor:[accent] {0}
stat.enemiesDestroyed = Besegrade fiender:[accent] {0}
stat.built = Buildings Built:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Buildings Destroyed:[accent] {0}
stat.deconstructed = Buildings Deconstructed:[accent] {0}
stat.delivered = Resources Launched:
stat.rank = Final Rank: [accent]{0}
+
launcheditems = [accent]Launched Items
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Are you sure you want to delete the map "[accent]{0}[]"?
@@ -74,6 +88,7 @@ maps.browse = Bläddra bland kartor
continue = Fortsätt
maps.none = [lightgray]Inga kartor hittade!
invalid = Ogiltig
+pickcolor = Pick Color
preparingconfig = Förbereder konfiguration
preparingcontent = Förbereder innehåll
uploadingcontent = Laddar upp innehåll
@@ -81,6 +96,7 @@ uploadingpreviewfile = Laddar upp förhandsgranskningsfil
committingchanges = Comitting Changes
done = Klar
feature.unsupported = Your device does not support this feature.
+
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.alpha = [accent](Alpha)
mods = Mods
@@ -92,18 +108,25 @@ 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.
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.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.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.
+
about.button = Om
name = Namn:
noname = Välj ett[accent] namn[] först.
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = Ditt namn är ogiltigt.
server.kicked.idInUse = Du är redan på den här servern! Det är inte tillåtet att koppla med två konton.
server.kicked.customClient = This server does not support custom builds. Ladda ned en officiell verision.
server.kicked.gameover = Game over!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Your version:[accent] {0}[]\nServer version:[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.
@@ -271,6 +295,7 @@ 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}
+
editor.brush = Pensel
editor.openin = Open In Editor
editor.oregen = Ore Generation
@@ -347,6 +372,7 @@ 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:
+
toolmode.replace = Byt ut
toolmode.replace.description = Draws only on solid blocks.
toolmode.replaceall = Byt ut alla
@@ -361,6 +387,7 @@ toolmode.fillteams = Fyll Lag
toolmode.fillteams.description = Fill teams instead of blocks.
toolmode.drawteams = Rita Lag
toolmode.drawteams.description = Draw teams instead of blocks.
+
filters.empty = [lightgray]No filters! Add one with the button below.
filter.distort = Distort
filter.noise = Brus
@@ -392,6 +419,7 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radie
filter.option.percentile = Percentile
+
width = Bredd:
height = Höjd:
menu = Meny
@@ -407,6 +435,7 @@ tutorial = Tutorial
tutorial.retake = Ta Om Tutorial
editor = Editor
mapeditor = Map Editor
+
abandon = Ge upp
abandon.text = Zonen och alla dess resurser förloras till fienden.
locked = Låst
@@ -437,6 +466,7 @@ zone.objective.survival = Survive
zone.objective.attack = Destroy Enemy Core
add = Lägg till...
boss.health = Boss Health
+
connectfail = [crimson]Connection error:\n\n[accent]{0}
error.unreachable = Server unreachable.\nIs the address spelled correctly?
error.invalidaddress = Ogiltig adress.
@@ -447,6 +477,7 @@ error.mapnotfound = Map file not found!
error.io = Network I/O error.
error.any = Okänt nätverksfel.
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 = Kratrar
@@ -461,6 +492,7 @@ zone.saltFlats.name = Salt Flats
zone.impact0078.name = Impact 0078
zone.crags.name = Crags
zone.fungalPass.name = Fungal Pass
+
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 fridgid 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.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = A former facility for the production and proce
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.impact0078.description =
zone.crags.description =
+
settings.language = Språk
settings.data = Game Data
settings.reset = Återställ till Standardvärden
settings.rebind = Byt
+settings.resetKey = Reset
settings.controls = Kontroller
settings.game = Spel
settings.sound = Ljud
@@ -529,6 +563,7 @@ blocks.inaccuracy = Inaccuracy
blocks.shots = Skott
blocks.reload = Shots/Second
blocks.ammo = Ammunition
+
bar.drilltierreq = Bättre Borr Krävs
bar.drillspeed = Drill Speed: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Hetta
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] skada
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
@@ -555,6 +593,7 @@ bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x fire rate
+
unit.blocks = block
unit.powersecond = power units/second
unit.liquidsecond = liquid units/second
@@ -567,6 +606,8 @@ unit.persecond = /sek
unit.timesspeed = x hastighet
unit.percent = %
unit.items = föremål
+unit.thousands = k
+unit.millions = mil
category.general = Allmänt
category.power = Energi
category.liquids = Vätskor
@@ -579,6 +620,7 @@ setting.shadows.name = Skuggor
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = Linear Filtering
setting.hints.name = Hints
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Animerat Vatten
setting.animatedshields.name = Animerade Sköldar
setting.antialias.name = Antialias[lightgray] (requires restart)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Skärmskak
setting.effects.name = Visa Effekter
setting.destroyedblocks.name = Display Destroyed Blocks
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} Sekunder
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Fullskärm
setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart)
setting.fps.name = Show FPS
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixellera[lightgray] (disables animations)
setting.minimap.name = Visa Minikarta
@@ -635,16 +681,36 @@ category.multiplayer.name = Multiplayer
command.attack = Attack
command.rally = Rally
command.retreat = Retreat
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Clear Building
keybind.press = Press a key...
keybind.press.axis = Press an axis or key...
keybind.screenshot.name = Map Screenshot
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Move x
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_flip_x.name = Flip Schematic X
keybind.schematic_flip_y.name = Flip 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.fullscreen.name = Toggle Fullscreen
keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement
@@ -657,7 +723,6 @@ keybind.menu.name = Menu
keybind.pause.name = Pause
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Minimap
-keybind.dash.name = Dash
keybind.chat.name = Chat
keybind.player_list.name = Player list
keybind.console.name = Console
@@ -680,7 +745,9 @@ mode.pvp.description = Fight against other players locally.\n[gray]Requires at l
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 = Vågtimer
rules.waves = Vågor
rules.attack = Attack Mode
@@ -688,6 +755,7 @@ rules.enemyCheat = Infinite AI (Red Team) Resources
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Player Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.unitdamagemultiplier = Unit Damage Multiplier
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Resources & Building
rules.title.player = Spelare
rules.title.enemy = Fiender
rules.title.unit = Units
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Föremål
content.liquid.name = Vätskor
content.unit.name = Units
@@ -752,6 +824,7 @@ mech.trident-ship.name = Treudd
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.flammability = [lightgray]Flammability: {0}%
item.radioactivity = [lightgray]Radioactivity: {0}%
@@ -767,6 +840,7 @@ mech.buildspeed = [lightgray]Building Speed: {0}%
liquid.heatcapacity = [lightgray]Heat Capacity: {0}
liquid.viscosity = [lightgray]Viskositet: {0}
liquid.temperature = [lightgray]Temperatur: {0}
+
block.sand-boulder.name = Sandbumling
block.grass.name = Gräs
block.salt.name = Salt
@@ -865,6 +939,8 @@ block.distributor.name = Distributor
block.sorter.name = Sorterare
block.inverted-sorter.name = Inverted Sorter
block.message.name = Meddelande
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = Överflödesgrind
block.silicon-smelter.name = Kiselsmältare
block.phase-weaver.name = Phase Weaver
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Kolcentrifug
block.power-node.name = Energinod
block.power-node-large.name = Stor Energinod
block.surge-tower.name = Surge Tower
+block.diode.name = Battery Diode
block.battery.name = Batteri
block.battery-large.name = Stort Batteri
block.combustion-generator.name = Combustion Generator
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Mechanical Pump
block.item-source.name = Föremålskälla
block.item-void.name = Föremålsförstörare
block.liquid-source.name = Vätskekälla
+block.liquid-void.name = Liquid Void
block.power-void.name = Energiätare
block.power-source.name = Energikälla
block.unloader.name = Urladdare
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Fortress Mech Factory
block.revenant-factory.name = Revenant Fighter Factory
block.repair-point.name = Repairationspunkt
block.pulse-conduit.name = Pulse Conduit
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Phase Conduit
block.liquid-router.name = Liquid Router
block.liquid-tank.name = Vätsketank
@@ -1001,6 +1080,7 @@ tutorial.deposit = Deposit items into blocks by dragging from your ship to the d
tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves.[accent] Click[] to shoot.\nBuild more turrets and drills. Mine more copper.
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.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
+
item.copper.description = The most basic structural material. Used extensively in all types of blocks.
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
@@ -1062,6 +1142,7 @@ block.power-source.description = Infinitely outputs power. Sandbox only.
block.item-source.description = Infinitely outputs items. Sandbox only.
block.item-void.description = Destroys any items. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles.
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = An advanced pump. Pumps more liquid, but require
block.thermal-pump.description = The ultimate pump.
block.conduit.description = Basic liquid transport block. Moves liquids forward. Used in conjunction with pumps and other conduits.
block.pulse-conduit.description = An advanced liquid transport block. Transports liquids faster and stores more than standard conduits.
+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 = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets.
block.liquid-tank.description = Stores a large amount of liquids. Use for creating buffers in situations with non-constant demand of materials or as a safeguard for cooling vital blocks.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Advanced liquid transport block. Uses power to
block.power-node.description = Transmits power to connected nodes. The node will receive power from or supply power to any adjacent blocks.
block.power-node-large.description = An advanced power node with greater range and more connections.
block.surge-tower.description = An extremely long-range power node with fewer available connections.
+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 = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit.
block.battery-large.description = Stores much more power than a regular battery.
block.combustion-generator.description = Generates power by burning flammable materials, such as coal.
diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties
index 90b72d7312..9a8e9ac61c 100644
--- a/core/assets/bundles/bundle_th.properties
+++ b/core/assets/bundles/bundle_th.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = เวอร์ชั่นระหว่าง
link.trello.description = Official Trello board for planned features
link.itch.io.description = itch.io page with PC downloads
link.google-play.description = Google Play store listing
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Official Mindustry wiki
+link.feathub.description = Suggest new features
linkfail = ไม่สามารถเปิดลิ้งค์ได้\nคัดลอก URL ลงในคลิปบอร์ดแล้ว
screenshot = Screenshot บันทึกที่ {0}
screenshot.invalid = แมพใหญ่เกินไป, หน่วยความจำอาจจะไม่พอสำหรับ screenshot.
@@ -25,11 +27,19 @@ load.image = รูป
load.content = Content
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
schematic = Schematic
schematic.add = กำลังบันทึก Schematic...
schematics = Schematics
-schematic.replace = มี schematic ที่ใช้ชื่อนี้แล้ว. แทนที่มัน?
+schematic.replace = มี schematic ที่ใช้ชื่อนี้แล้ว. แทนที่เลยไม?
schematic.import = นำเข้า Schematic...
schematic.exportfile = ส่งออก File
schematic.importfile = นำเข้า File
@@ -60,7 +70,7 @@ level.mode = เกมโหมด:
showagain = ไม่แสดงอีกในครั้งต่อไป
coreattack = < Core กำลังถูกโจมตี! >
nearpoint = [[ [scarlet]ออกจากดรอปพอยท์ด่วน IMMEDIATELY[] ]\nการทำลายล้างกำลังใกล้เข้ามา
-database = Core Database
+database = ฐานข้อมูหลัง
savegame = เซฟเกม
loadgame = โหลดเกม
joingame = เข้าร่วมเกม
@@ -78,6 +88,7 @@ maps.browse = ค้นหาแมพ
continue = ต่อ
maps.none = [lightgray]ไม่มีแมพ!
invalid = ไม่ถูกต้อง
+pickcolor = Pick Color
preparingconfig = กำลังเตรียม Config
preparingcontent = กำลังเตรียม Content
uploadingcontent = กำลังอัปโหลด Content
@@ -97,18 +108,24 @@ mod.enabled = [lightgray]เปิดใช้งาน
mod.disabled = [scarlet]ปิดใช้งาน
mod.disable = ปิดใช้งาน
mod.delete.error = ไม่สามารถลบมอดได้. ไฟล์อาจอยู่ในระหว่างการใช้งาน.
+mod.requiresversion = [scarlet]Requires min game version: [accent]{0}
mod.missingdependencies = [scarlet]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]มอด '{0}' ไม่มี dependencies:[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.remove.confirm = มอดนี้จะถูกลบ
mod.author = [LIGHT_GRAY]ผู้สร้าง:[] {0}
mod.missing = เซฟนี้มีมอดที่คุณอัปเดตหรือไม่ได้ติดตั้งแล้ว. อาจทำให้เซฟเสีย. คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]Mods:\n{0}
mod.preview.missing = ก่อนที่จะนำมอดไปลงใน workshop, คุณต้องใส่รูปพรีวิวก่อน\nใส่รูปชื่อ[accent] preview.png[] ลงในโฟลเดอร์ของมอดแล้วลองอีกครั้ง
mod.folder.missing = มอดที่อยู่ในรูปแบบโฟลเดอร์เท่านั้นที่สามารถลงใน workshop ได้\nunzip ไฟล์แล้วลบไฟล์ zip เก่า แล้วรีสตาร์ทเกมหรือรีโหลดมอด
+mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
about.button = เกี่ยวกับ
name = ชื่อ:
@@ -116,7 +133,7 @@ noname = ใส่ชื่อ[accent] ผู้เล่น[] ก่อน.
filename = ชื่อไฟล์:
unlocked = content ใหม่ปลดล็อค!
completed = [accent]สำเร็จ
-techtree = สายวิจัย
+techtree = ความคืบหน้าในการวิจัย
research.list = [lightgray]วิจัย:
research = วิจัย
researched = [lightgray]{0} วิจัยแล้ว.
@@ -126,9 +143,9 @@ server.closing = [accent]กำลังปิดเซิฟเวอร์...
server.kicked.kick = คุณถูกเตะออกจากเซิฟเวอร์!
server.kicked.whitelist = คุณไม่ได้อยู่ใน whitelisted
server.kicked.serverClose = เซิฟเวอร์ถูกปิด.
-server.kicked.vote = คุณถูกโหวตเตะออก. บายบาย.
-server.kicked.clientOutdated = client ล่าสมัย! กรุณาอัปเดตเกมของคุณ!
-server.kicked.serverOutdated = server ล่าสมัย! โปรดถามเจ้าของเซิฟเพื่ออัปเดต!
+server.kicked.vote = คุณถูกโหวตเตะออก. บัยบาย.
+server.kicked.clientOutdated = client เก่า! กรุณาอัปเดตเกมของคุณ!
+server.kicked.serverOutdated = server เก่า! โปรดถามเจ้าของเซิฟเพื่ออัปเดต!
server.kicked.banned = คุณถูกแบนในเซิฟเวอร์นี้
server.kicked.typeMismatch = เซิฟเวอร์นี้ไม่เข้ากับ build type ของคุณ.
server.kicked.playerLimit = เซิฟเวอร์เต็ม. กรุณารอให้เซิฟเวอร์ว่างก่อน.
@@ -138,6 +155,7 @@ server.kicked.nameEmpty = ชื่อของคุณไม่สามาร
server.kicked.idInUse = คุณเชื่อมต่อกับเซิฟเวอร์นี้อยู่แล้ว เราไม่อนุญาตให้เชื่อมต่อ 2 บัญชีในเซฟเวอร์เดียวกัน
server.kicked.customClient = เซิฟเวอร์นี้ไม่รองรับ builds ปรับแต่ง. กรุณาโหลดของ official.
server.kicked.gameover = Game over!
+server.kicked.serverRestarting = The server is restarting.
server.versions = เวอร์ชั่นของคุณ:[accent] {0}[]\nเวอร์ชั่นของเซิฟเวอร์:[accent] {1}[]
host.info = ปุ่ม [accent]โฮสต์[] นั้นโฮสต์เซฟเวอร์ที่พอร์ท [scarlet]6567[]. \nทุกคนที่อยู่ใน [lightgray]wifi หรือ local network[] เดียวกันจะสามารถเห็นเซิฟเวอร์ของคุณในลิสของเซิฟเวอร์ได้\n\nถ้าคุณต้องการให้ผู้เล่นอื่นๆสามารถเชื่อมต่อได้จากทุกที่โดยใช้ IP, จำเป็นจะต้องใช้การ [accent]port forwarding[] \n\n[lightgray]Note: ถ้าผู้เล่นคนใดมีปัญหาในการเชื่อมต่อ LAN ของคุณ เช็คให้แน่ใจว่าคุณได้อนุญาตให้ Mindustry เข้าถึง local network ของคุณในการตั้งค่า firewall. จำให้ว่า network สาธารณะบางครั้งไม่อนุญาตการค้นหาเซิฟเวอร์
join.info = คุณสามารถใส่ [accent]IP ของเซิฟเวอร์[] เพื่อที่จะเชื่อมต่อหรือค้นหา เซิฟเวอร์ที่ใช้[accent]local network[] จะสามารถเชื่อมโดยใช้\n LAN หรือ WAN ก็ได้\n\n[lightgray]โน้ต: เกมนี้ไม่มีระบบค้นหาเซิฟเวอร์ global ให้อัตโนมัติserver list; ถ้าคุณต้องการเชื่อมต่อกับเซิฟเวอร์โดยใช้ IP, คุณจำเป็นต้องถาม IP ผู้เล่นที่โฮสต์เซิฟเวอร์นั้นๆ.
@@ -170,7 +188,6 @@ server.outdated = [crimson]Server ล้าสมัย![]
server.outdated.client = [crimson]Client ล้าสมัย![]
server.version = [gray]เวอร์ชั่น{0} {1}
server.custombuild = [accent]Build
-ที่กำหนดเอง
confirmban = คุณแน่ใจหรือว่าจะแบนผู้เล่นนี้?
confirmkick = คุณแน่ใจหรือว่าจะเตะผู้เล่นนี้ออก?
confirmvotekick = คุณแน่ใจหรือว่าจะโหวตเตะผู้เล่นนี้ออก?
@@ -202,9 +219,7 @@ save.delete = ลบ
save.export = ส่งออกเซฟ
save.import.invalid = [accent]เซฟนี้ไม่ถูกต้อง!
save.import.fail = [crimson]ไม่สามารถนำเข้าเซฟ: [accent]{0}
-ได้
save.export.fail = [crimson]ไม่สามารถส่งออกเซฟ: [accent]{0}
-ได้
save.import = นำเข้าเซฟ
save.newslot = ชื่อเซฟ:
save.rename = เปลี่ยนชื่อ
@@ -497,6 +512,7 @@ settings.language = ภาษา
settings.data = ข้อมูลเกม
settings.reset = รีเซ็ตเป็นค่าเริ่มต้น
settings.rebind = Rebind
+settings.resetKey = Reset
settings.controls = การควบคุม
settings.game = เกม
settings.sound = เสียง
@@ -563,7 +579,6 @@ bar.heat = ความร้อน
bar.power = พลังงาน
bar.progress = ความคืบหน้าในการสร้าง
bar.spawned = จำนวนยูนิตทั้งหมด: {0}/{1}
- ยูนิต
bar.input = นำเข้า
bar.output = ส่งออก
@@ -591,6 +606,8 @@ unit.persecond = /วินาที
unit.timesspeed = เท่าเร็วขึ้น
unit.percent = %
unit.items = ไอเท็ม
+unit.thousands = k
+unit.millions = mil
category.general = ทั่วไป
category.power = พลังงาน
category.liquids = ของเหลว
@@ -598,7 +615,7 @@ category.items = ไอเท็ม
category.crafting = นำเข้า/ส่งออก
category.shooting = การยิง
category.optional = การเพิ่มประสิทธิภาพทางเลือก
-setting.landscape.name = ล็อค Landscape
+setting.landscape.name = ล็อค Landscape แนวนอน
setting.shadows.name = เงา
setting.blockreplace.name = แนะนำบล็อคโดยอัตโนมัติ
setting.linear.name = การกรองเชิงเส้น
@@ -612,7 +629,6 @@ setting.autotarget.name = เล็งเป้าอัตโนมัติ
setting.keyboard.name = การควบคุมแบบ เม้าส์+คีย์บอร์ด
setting.touchscreen.name = การควบคุมแบบหน้าจอสัมผัส
setting.fpscap.name = FPS
-สูงสุด
setting.fpscap.none = ไม่มี
setting.fpscap.text = {0} FPS
setting.uiscale.name = ขนาด UI[lightgray] (จำเป็นต้องรีสตาร์ท)[]
@@ -627,13 +643,16 @@ setting.screenshake.name = การสั่นของจอ
setting.effects.name = แสดงเอฟเฟ็ค
setting.destroyedblocks.name = แสดงบล็อคที่ถูกทำลาย
setting.conveyorpathfinding.name = Pathfinding
-ของการวางสายพาน
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = ความไวของตัวควบคุม
setting.saveinterval.name = ระยะห่าวระหว่างเซฟ
setting.seconds = {0} วินาที
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = เต็มจอ
setting.borderlesswindow.name = วินโดว์แบบไร้ขอบ[lightgray] (อาจจะต้องรีตาร์ท)
setting.fps.name = แสดง FPS และ Ping
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixelate[lightgray] (ปิดใช้งานแอนิเมชั่น)
setting.minimap.name = แสดงมินิแมพ
@@ -662,17 +681,36 @@ category.multiplayer.name = ผู้เล่นหลายคน
command.attack = โจมตี
command.rally = ชุมนุม
command.retreat = ถอยกลับ
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = เคลียร์สิ่งก็สร้าง
keybind.press = กดปุ่มใดก็ได้...
keybind.press.axis = กดแกนหรือปุ่มใดก็ได้...
keybind.screenshot.name = แมพ Screenshot
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = เคลื่อนที่ในแกน x
keybind.move_y.name = เคลี่อนที่ในแกน y
keybind.mouse_move.name = ตามเม้าส์
+keybind.dash.name = พุ่ง
keybind.schematic_select.name = เลือกภูมิภาค
keybind.schematic_menu.name = เมนู Schematic
keybind.schematic_flip_x.name = กลับ Schematic ในแกน X
keybind.schematic_flip_y.name = กลับ 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.fullscreen.name = เปิด/ปิด Fullscreen
keybind.select.name = เลือก/ยิง
keybind.diagonal_placement.name = วางเป็นแนวทแยง
@@ -680,13 +718,11 @@ keybind.pick.name = เลือกบล็อค
keybind.break_block.name = ทุบบล็อค
keybind.deselect.name = ยกเลิกการเบือก
keybind.shoot.name = ยิง
-keybind.zoom_hold.name = ซูม กดค้าง
keybind.zoom.name = ซูม
keybind.menu.name = เมนู
keybind.pause.name = หยุดชั่วคราว
keybind.pause_building.name = หยุด/สร้างต่อ
keybind.minimap.name = มินิแมะ
-keybind.dash.name = พุ่ง
keybind.chat.name = แชท
keybind.player_list.name = รายชื่อผู้เล่น
keybind.console.name = คอนโซล์
@@ -711,6 +747,7 @@ mode.attack.description = ทำลายฐานของศัตรู ไ
mode.custom = กฎแบบกำหนดเอง
rules.infiniteresources = ทรัพยากรไม่จำกัด
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = ตัวตั้งเวลา Wave
rules.waves = Waves
rules.attack = โหมดการโจมตี
@@ -718,6 +755,7 @@ rules.enemyCheat = AI (ทีมสีแดง) มีทรัพยากร
rules.unitdrops = ยูนิตดรอป
rules.unitbuildspeedmultiplier = ตัวคูณความเร็วในการสร้างยูนิต
rules.unithealthmultiplier = ตัวคูณเลือดของยูนิต
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = ตัวคูณเลือดผู้เล่น
rules.playerdamagemultiplier = ตัวคูณดาเมจผู้เล่น
rules.unitdamagemultiplier = ตัวคูณดาเมจยูนิต
@@ -736,6 +774,9 @@ rules.title.resourcesbuilding = ทรัพยากรและสิ่งก
rules.title.player = ผู้เล่น
rules.title.enemy = ศัตรู
rules.title.unit = ยูนิต
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
content.item.name = ไอเท็ม
content.liquid.name = ของเหลว
@@ -761,28 +802,29 @@ item.scrap.name = เศษเหล็ก
liquid.water.name = น้ำ
liquid.slag.name = กากแร่
liquid.oil.name = น้ำมัน
-liquid.cryofluid.name = ไครโยฟลูอิด
+liquid.cryofluid.name = โครโรฟิวล์
mech.alpha-mech.name = อัลฟ้า
mech.alpha-mech.weapon = เฮฟวี้รีพีทเตอร์
mech.alpha-mech.ability = รีเจเนเรชั่น
mech.delta-mech.name = เดลต้า
mech.delta-mech.weapon = เครื่องกำเนิดประกายไฟฟ้า
-mech.delta-mech.ability = ปล่อย
+mech.delta-mech.ability = ปล่อยสายฟ้า
mech.tau-mech.name = เทา
mech.tau-mech.weapon = รีสตัคเลเซอร์
mech.tau-mech.ability = เบิสต์ซ่อมแซม
mech.omega-mech.name = โอเมก้า
-mech.omega-mech.weapon = ฝูงขีปนาวุธ
+mech.omega-mech.weapon = ขีปนาวุธมหาปลัย
mech.omega-mech.ability = ตัวเสริมเกราะ
mech.dart-ship.name = ลูกดอก (Dart)
mech.dart-ship.weapon = รีพีตเตอร์
-mech.javelin-ship.name = หอก (Javelin)
+mech.javelin-ship.name = จาวาลีน (Javelin)
mech.javelin-ship.weapon = ขีปนาวุธเบิสต์
mech.javelin-ship.ability = ดิสชาร์จบูสเตอร์
mech.trident-ship.name = ตรีศูล (Trident)
-mech.trident-ship.weapon = ห้องเก็บระเบิด
+mech.trident-ship.weapon = ตัวปล่อยระเบิด
mech.glaive-ship.name = เกลฟว์
mech.glaive-ship.weapon = รีพีตเตอร์ไฟ
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [lightgray]ค่าการระเบิด: {0}%
item.flammability = [lightgray]ไวไฟ: {0}%
item.radioactivity = [lightgray]ค่ากัมมันตภาพรังสี: {0}%
@@ -809,8 +851,8 @@ block.sandrocks.name = หินทราย
block.spore-pine.name = ต้นสนสปอร์
block.sporerocks.name = หินสปอร์
block.rock.name = หิน
-block.snowrock.name = หินหิมะ
-block.snow-pine.name = ต้นสนหิมะ
+block.snowrock.name = ก้อนหิมะ
+block.snow-pine.name = ต้นสนที่คลุมหิมะ
block.shale.name = หินดินดาน
block.shale-boulder.name = ก้อนหินดินดาน
block.moss.name = ตะไคร่น้ำ
@@ -897,6 +939,8 @@ block.distributor.name = เร้าเตอร์ขนาดใหญ่
block.sorter.name = เครื่องแยก
block.inverted-sorter.name = เครื่องแยกกลับด้าน
block.message.name = ตัวเก็บข้อความ
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = ประตูล้น
block.silicon-smelter.name = เตาเผาซิลิก้อน
block.phase-weaver.name = เครื่องทอเฟสต์
@@ -905,9 +949,8 @@ block.cryofluidmixer.name = เครื่องผสมไครโยฟล
block.melter.name = เตาหลอม
block.incinerator.name = เตาเผาขยะ
block.spore-press.name = เครื่องอัดสปอร์
-block.separator.name =
-เครื่องแยก
-block.coal-centrifuge.name = เครื่องปั่นเหวี่งถ่านหิน
+block.separator.name = เครื่องแยก
+block.coal-centrifuge.name = เครื่องผลิตถ่านหิน
block.power-node.name = โหนดพลังงาน
block.power-node-large.name = โหนดพลังงานขนาดใหญ่
block.surge-tower.name = เสาเสิร์จ
@@ -916,7 +959,7 @@ block.battery.name = แบตเตอรี่
block.battery-large.name = แบตเตอรี่ขนาดใหญ่
block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าเผาไหม้
block.turbine-generator.name = เครื่องกำเนิดไฟฟ้าไอน้ำ
-block.differential-generator.name = เครื่องกำเนิดไฟฟ้าดิฟเฟอเร่นเชี่ยว
+block.differential-generator.name = เครื่องกำเนิดไฟฟ้าดิฟเฟอเร่นเตอร์
block.impact-reactor.name = เตาปฏิกรณ์อิมแพ็ค
block.mechanical-drill.name = เครื่องขุดเชิงกล
block.pneumatic-drill.name = เครื่องขุดนิวมาติก
@@ -930,11 +973,12 @@ block.trident-ship-pad.name = ฐานปล่อยยานตรีศู
block.glaive-ship-pad.name = ฐานปล่อยยานเกลฟว์
block.omega-mech-pad.name = ฐานปล่อยเม็คโอเมก้า
block.tau-mech-pad.name = ฐานปล่อยเม็คเทา (Tau)
-block.conduit.name = รางน้ำ
+block.conduit.name = ท่อน้ำ
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 = ตัวถ่ายของ
@@ -943,8 +987,8 @@ block.wave.name = เวฟ
block.swarmer.name = สวอร์มเมอร์
block.salvo.name = ซาวโว
block.ripple.name = ริปเปิ้ล
-block.phase-conveyor.name = สายพานเฟส
-block.bridge-conveyor.name = สะพานสายพาน
+block.phase-conveyor.name = สายพานความเร็วแสง
+block.bridge-conveyor.name = สะพาน
block.plastanium-compressor.name = เครื่องอัดพลาสตาเนียม
block.pyratite-mixer.name = เครื่องผสมไพราไทต์
block.blast-mixer.name = เครื่องผสมสารประกอบระเบิด
@@ -964,11 +1008,12 @@ block.fortress-factory.name = โรงงานผลิตฟอร์เท
block.revenant-factory.name = โรงงานผลิตยานไฟต์เตอร์เรเวแนนท์
block.repair-point.name = จุดซ่อมแซม
block.pulse-conduit.name = รางน้ำโพวส์
-block.phase-conduit.name = รางน้ำเฟส
+block.plated-conduit.name = Plated Conduit
+block.phase-conduit.name = ท่อน้ำความเร็วแสง
block.liquid-router.name = เร้าเตอร์ของเหลว
-block.liquid-tank.name = แทงค์เก็บของเหลว
+block.liquid-tank.name = แทงค์น้ำ
block.liquid-junction.name = ทางแยกของเหลว
-block.bridge-conduit.name = สะพานรางน้ำ
+block.bridge-conduit.name = ท่อน้ำยกระดับ
block.rotary-pump.name = ปั๊มโรตารี้
block.thorium-reactor.name = เตาปฏิกรณ์ทอเรี่ยม
block.mass-driver.name = แมสไดรฟ์เวอร์
@@ -982,8 +1027,8 @@ block.surge-wall.name = กำแพงเสิร์จ
block.surge-wall-large.name = กำแพงเสิร์จขนาดใหญ่
block.cyclone.name = ไซโคลน
block.fuse.name = ฟิวส์
-block.shock-mine.name = กับระเบิดไฟฟ้าซ็อต
-block.overdrive-projector.name = โอเวอร์ไดรฟ์โปรเจ็คเตอร์
+block.shock-mine.name = กับระเบิดไฟฟ้า
+block.overdrive-projector.name = เครื่องเร่งประสิทธิภาพ
block.force-projector.name = ฟอร์สโปรเจ็คเตอร์
block.arc.name = อาร์ค
block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า อาร์ทีจี
@@ -1013,7 +1058,7 @@ unit.eruptor.name = อีรัฟเตอร์
unit.chaos-array.name = เคออสอาเรย์
unit.eradicator.name = อีเรดิเคเตอร์
unit.lich.name = ลิช
-unit.reaper.name = รีฟเฟอร์
+unit.reaper.name = รีฟเปอร์
tutorial.next = [lightgray]<กดเพื่อดำเนินการต่อ>
tutorial.intro = คุณได้เข้าสู่[scarlet] การสอนเล่นของ Mindustry.[]\nใช้ [[WASD] เพื่อเคลื่อนที่.\n[accent]กด [[Ctrl] ค้างระหว่างกลิ้งลูกกลิ้งเม้าส์[] เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับ core ของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น
tutorial.intro.mobile = คุณได้เข้าสู่[scarlet] การสอนเล่นของ Mindustry.[]\nเลื่อนหน้าจอเพื่อเคลื่อนที่.\n[accent]ใส่สองนิ้ว []เพื่อซูมเข้าและออก.\nเริ่มด้วยการ[accent] ขุดทองแดง[]. เคลื่อนที่ไปใกล้มัน, แล้วกดที่สายแร่ทองแดงใกล้ๆกับ core ของคุณ\n\n[accent]ทองแดง {0}/{1} ชิ้น
@@ -1097,6 +1142,7 @@ block.power-source.description = ส่งออกพลังงานไม
block.item-source.description = ส่งออกไอเท็มไม่จำกัด. เฉพาะ Sandbox เท่านั้น.
block.item-void.description = ทำลายทุกไอเท็ม . เฉพาะ Sandbox เท่านั้น.
block.liquid-source.description = ส่งออกของเหลวไม่จำกัด. เฉพาะ Sandbox เท่านั้น.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ.
block.copper-wall-large.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ.\nคลอบคลุมหลายข่อง.
block.titanium-wall.description = บล็อคป้องกันแข็งแกร่งปานกลาง.\nป้องกันศัตรูได้ในระดับหนึ่ง.
@@ -1110,7 +1156,7 @@ block.phase-wall-large.description = A wall coated with special phase-based refl
block.surge-wall.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.
block.surge-wall-large.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.\nคลอบคลุมหลายช่อง.
block.door.description = ประตูขนาดเล็ก. สามารถเปิดได้โดยการกด.
-block.door-large.description = ประตูขนาดใหญ่. สามารถเปิดได้โดยการกด.\nคลอบคลุมหลายช่อง.
+block.door-large.description = ประตูขนาดใหญ่. สามารถเปิดและปิดได้โดยการกด.\nคลอบคลุมหลายช่อง.
block.mender.description = ซ่อมแซมบล็อคในวงของมันเป็นระยะๆ. ช่วยซ่อมแซมแนวป้องกันระหว่าง wave.\nสามารถใช้ซิลิก้อนเพื่อเพิ่มรัศมีและประสิทธิภาพได้
block.mend-projector.description = เมนเดอร์ที่ได้รับการอัปเกรด. ซ่อมแซมบล็อคในระยะของมัน.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพได้.
block.overdrive-projector.description = เพิ่มความเร็วของสิ่งก่อสร้างรอบๆ.\nสามารถใช้ใยเฟสเพื่อเพิ่มระยะและประสิทธิภาพ.
@@ -1123,7 +1169,7 @@ block.bridge-conveyor.description = บล็อคขนส่งไอเท
block.phase-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ใช้พลังงานเพื่อส่งไอเท็มไปยังสายพานเฟสอีกอัน ข้ามได้หลายช่อง.
block.sorter.description = แยกไอเท็ม. ถ้าไอเท็มตรงกับที่เลือกไว้, จะผ่านได้. แต่ถ้าไม่ตรง, ไอเท็มจะออกทางซ้ายหรือขวา (ใช้ทางที่ไอเท็มเข้าเป็นหลัก)
block.inverted-sorter.description = แยกไอเท็มคล้ายเครื่องแยกธรรมดา, แต่ไอเท็มที่เลือกจะออกข้างแทน.
-block.router.description = รับไอเท็มแล้วส่งออก 3 ทางเท่ากัน. มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่.\n\n[scarlet]อย่าวางไว้ติดกับทางส่งไอเท็มเข้าเพราะของออกจะไปอุดตันได้.[]
+block.router.description = รับไอเท็มแล้วส่งออก 3 ทางเท่าๆกัน. มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่.\n\n[scarlet]อย่าวางไว้ติดกับทางส่งไอเท็มเข้าเพราะของออกจะไปอุดตันได้.[]
block.distributor.description = เร้าเตอร์ขั้นสูง. แยกไอเท็มออก 7 ทางอย่างเท่าๆกัน.
block.overflow-gate.description = ของจะออกจากข้างๆเมื่อทางข้างหน้ถูกบล็อคเท่านั้น.
block.mass-driver.description = บล็อคขนส่งไอเท็มขั้นสุดยอด. รวบรวมไอเท็มจำนวนหนึ่งแล้วยิงไปหาแมสไดรเวอร์อีกอันที่อยู่ไกลออกไป. ต้องใช้พลังงานในการใช้งาน.
@@ -1132,6 +1178,7 @@ block.rotary-pump.description = ปั๊มขั้นสูง. ปั๊ม
block.thermal-pump.description = ปั๊มขั้นสุดยอด.
block.conduit.description = บล็อคขนส่งของเหลวพื้นฐาน. เคลื่อนของเหลวไปข้างหน้า. ใช้ร่วมกับปั๊มและรางน้ำอื่นๆ.
block.pulse-conduit.description = บล็อคขนส่งของเหลวขั้นสูง. เคลื่อนย้ายของเหลวเร็วขึ้นและเก็บเยอะกว่ารางน้ำธรรมดา.
+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 = รับของเหลวจากทางเดียวแล้วส่งออก 3 ทางเท่าๆกัน. สามารถเก็บของ้หลวได้จำนวนหนึ่ง. มีประโยชน์สำหรับการแยกของเหลวจากแหล่งเดียวไปหลายที่.
block.liquid-tank.description = เก็บของเหลวจำนวนมาก. ใช่สำหรับสร้างบัฟเฟอร์ในเวลาที่ความต้องการของทรัพยากรไม่คงที่หรือเป็นตัวเซฟสำหรับบล็อคที่จำเป็นต้องใช้การหล่อเย็น.
block.liquid-junction.description = ทำหน้าที่เป็นสะพานสำหรับรางน้ำ 2 รางที่ข้ามกันที่มีของเหลว 2 ชนิด ซึ่งต้องการจะไปคนละที่.
@@ -1150,7 +1197,7 @@ block.differential-generator.description = ผลิตไฟฟ้าจำน
block.rtg-generator.description = เครื่องกำเนิดไฟฟ้าที่ใช้ง่ายและไว้ใจได้. ใช้ความร้อนจากการสลายของสารกัมมัตภาพรังสีเพื่อใช้ผลิตพลังงานอย่างช้าๆ.
block.solar-panel.description = ให้พลังงานจากแสงอาทิตย์จำนวนน้อย.
block.solar-panel-large.description = เวอร์ชั่นของแผงโซล่าเซลล์ที่มีประสิทธิภาพมากขึ้นกว่าแผงโซล่าเซลล์ธรรมดา.
-block.thorium-reactor.description = ผลิตพลังงานจำนวนมากจากทอเรี่ยม. ตำเป็นต้องใช้สารหล่อเย็นตลอดเวลา. จะระเบิดอย่างรุนแรงหากไม่ได้รับสารหล่อเย็นในจำนวนที่ต้องการ. จำนวนพลังงานที่ผลิตขึ้นอยู่กับความเต็ม และผลิตพลังงานเริ่มต้นที่ความสามารถสูงสุด.
+block.thorium-reactor.description = ผลิตพลังงานจำนวนมากจากทอเรี่ยม. จำเป็นต้องใช้สารหล่อเย็นตลอดเวลา. จะระเบิดอย่างรุนแรงหากไม่ได้รับสารหล่อเย็นในจำนวนที่ต้องการ. จำนวนพลังงานที่ผลิตขึ้นอยู่กับความเต็ม และผลิตพลังงานเริ่มต้นที่ความสามารถสูงสุด.
block.impact-reactor.description = เครื่องกำเนิดไฟฟ้าขั้นสูง, สามารถผลิตไฟฟ้าได้จำนวนมหาศาลที่ประสิทธิภาพสูงสุด. จำเป็นต้องใช้พลังงานจำนวนมากในการสตาร์ทเครื่อง.
block.mechanical-drill.description = เครื่องขุดราคาถูก. เมื่อวางบนบล็อคที่ถูกต้อง, จะส่งไอเท็มของมันออกมาเรื่อยๆแบบไม่มีที่สิ้นสุด. ขุดได้แค่ทรัพยากรพื้นฐาน.
block.pneumatic-drill.description = เครื่องขุดได้รับการปรับปรุง, สามารถขุดไทเทเนี่ยมได้. ขุดไวกว่าเครื่องขุดเชิงกล.
@@ -1186,16 +1233,16 @@ block.draug-factory.description = ผลิตโดรนขุดเจาะ
block.spirit-factory.description = ผลิตโดรนซ่อมแซมสปิริต.
block.phantom-factory.description = ผลิตโดรนก่อสร้างขั้นสูง.
block.wraith-factory.description = ผลิตยูนิตเร็ว โจมตีแบบ hit-and-run (จู่โจมแล้วหนี)
-block.ghoul-factory.description = ผลิตยานทิ้งระเบิดปูพรมหนัก (heavy carpet bomber)
+block.ghoul-factory.description = ผลิตยานทิ้งระเบิดแบบโหดๆ (heavy carpet bomber)
block.revenant-factory.description = ผลิตยูนิตที่ใช้ขีปนาวุธเป็นหลัก.
block.dagger-factory.description = ผลิตยูนิตภาคพื้นดินพื้นฐาน.
-block.crawler-factory.description = ผลิตยูนิตพลีชีพเร็ว.
+block.crawler-factory.description = ผลิตยูนิตที่ระเบิดตัวเอง.
block.titan-factory.description = ผลิตยูนิตภาคพื้นดินเสริมเกราะขั้นสูง.
-block.fortress-factory.description = ผลิตยูนิตหนักติดปืนใหญ่.
+block.fortress-factory.description = ผลิตยูนิตที่ถึกและติดปืนใหญ่.
block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง.
block.dart-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คโจมตีพื้นฐาน.\nใช้โดยการกดเมื่อยืนทับมัน.
-block.delta-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คเกราะบางโจมตีแบบ hit-and-run (จู่โจมแล้วหนี).\nใช้โดยการกดเมื่อยืนทับมัน.
-block.tau-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คสนับสนุนขั้นสูง.\nใช้โดยการกดเมื่อยืนทับมัน.
+block.delta-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คเกราะบางโจมตีแบบ hit-and-run (จูค).\nใช้โดยการกดเมื่อยืนทับมัน.
+block.tau-mech-pad.description = ใช้เปลี่ยนร่างเป็นตัวที่ฮีลได้ดีมาก.\nใช้โดยการกดเมื่อยืนทับมัน.
block.omega-mech-pad.description = ใช้เปลี่ยนร่างเป็นเป็นเม็คใช้ขีปนาวุธเกราะหนา.\nใช้โดยการกดเมื่อยืนทับมัน.
block.javelin-ship-pad.description = ใช้เปลี่ยนร่างเป็นเป็นอินเทอร์เซ็ปเตอร์เร็วแบะเกราะบาง.\nใช้โดยการกดเมื่อยืนทับมัน.
block.trident-ship-pad.description = ใช้เปลี่ยนร่างเป็นเป็นยานทิ้งระเบิดสนับสนุน.\nใช้โดยการกดเมื่อยืนทับมัน.
diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties
index ef01140591..0f368815c4 100644
--- a/core/assets/bundles/bundle_tk.properties
+++ b/core/assets/bundles/bundle_tk.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = Bitirilmemis Yapim Surumu
link.trello.description = Planlanmis Hersey icin Tablo
link.itch.io.description = Bilgisayar ve Site versiyonunun bulundugu Site
link.google-play.description = Google Play magaza sayfasi
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Orjinal Mindustry Bilgilendirme Sayfasi
+link.feathub.description = Suggest new features
linkfail = Link Acilamadi!\nLink sizin icin kopyalandi.
screenshot = Screenshot saved to {0}
screenshot.invalid = Map too large, potentially not enough memory for screenshot.
@@ -18,12 +20,22 @@ gameover = Cekirdegin yok edildi.
gameover.pvp = The[accent] {0}[] team is victorious!
highscore = [accent]Yeni Yuksek skor!
copied = Copied.
+
load.sound = Sounds
load.map = Maps
load.image = Images
load.content = Content
load.system = System
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
+
schematic = Schematic
schematic.add = Save Schematic...
schematics = Schematics
@@ -40,6 +52,7 @@ schematic.saved = Schematic saved.
schematic.delete.confirm = This schematic will be utterly eradicated.
schematic.rename = Rename Schematic
schematic.info = {0}x{1}, {2} blocks
+
stat.wave = Waves Defeated:[accent] {0}
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0}
stat.built = Buildings Built:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Buildings Destroyed:[accent] {0}
stat.deconstructed = Buildings Deconstructed:[accent] {0}
stat.delivered = Resources Launched:
stat.rank = Final Rank: [accent]{0}
+
launcheditems = [accent]Launched Items
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
map.delete = Su haritayi silmek istediginden emin misin? "[accent]{0}[]"?
@@ -74,6 +88,7 @@ maps.browse = Browse Maps
continue = Devam et
maps.none = [LIGHT_GRAY]Harita bulunamadi!
invalid = Invalid
+pickcolor = Pick Color
preparingconfig = Preparing Config
preparingcontent = Preparing Content
uploadingcontent = Uploading Content
@@ -81,6 +96,7 @@ uploadingpreviewfile = Uploading Preview File
committingchanges = Comitting Changes
done = Done
feature.unsupported = Your device does not support this feature.
+
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.alpha = [accent](Alpha)
mods = Mods
@@ -92,18 +108,25 @@ 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.
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.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.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.
+
about.button = Hakkinda
name = isim:
noname = Pick a[accent] player name[] first.
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = ismin gecerli degil.
server.kicked.idInUse = Zaten oyundasin! iki ayri hesapla oyuna katilamazsin!
server.kicked.customClient = Bu oyun ayarlanmis vesiyonlara izin vermiyor. Orijinal bir versiyon dene!
server.kicked.gameover = Game over!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
host.info = [accent]host[] su linkte bir oyun acti! [scarlet]6567[]. \nSeninle [LIGHT_GRAY]ayni internete[] sahip olan kisiler oyunu gorebilir.\n\neger baska yerlerden kisilerind de gelmesini istiyorsan, [accent]oyun acmak[]zorunludur.\n\n[LIGHT_GRAY]Not: eger baglanmakta gucluk cekiliyorsa, antivirusunun internetine baglanmasini izin vermesini sagla.
join.info = Buradan,[accent]Oyunun linkini[] kullanarak katilabilir, yada, [accent]internetinle[] baglanacak oyun bulabilirsin\ninternetli ve Linkli oyunlar desteklenir.\n\n[LIGHT_GRAY]Not: Otomatik bir oyun listesi goruntulenemez. Yapimcidan linkini iste.
@@ -271,6 +295,7 @@ 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}
+
editor.brush = Firca
editor.openin = Editorde ac
editor.oregen = Maden Yaratilma hizi
@@ -347,6 +372,7 @@ editor.overwrite = [accent]Dikkat et!\nBu bir haritanin uzerinden cececek.
editor.overwrite.confirm = [scarlet]uyari![] bu isimde bir harita zaten var. Uzerinden gececek misin?
editor.exists = A map with this name already exists.
editor.selectmap = Yukleyecek bir harita sec:
+
toolmode.replace = Replace
toolmode.replace.description = Draws only on solid blocks.
toolmode.replaceall = Replace All
@@ -361,6 +387,7 @@ toolmode.fillteams = Fill Teams
toolmode.fillteams.description = Fill teams instead of blocks.
toolmode.drawteams = Draw Teams
toolmode.drawteams.description = Draw teams instead of blocks.
+
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
filter.distort = Distort
filter.noise = Noise
@@ -392,6 +419,7 @@ filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
filter.option.radius = Radius
filter.option.percentile = Percentile
+
width = Genislik:
height = Yukseklik:
menu = Menu
@@ -407,6 +435,7 @@ tutorial = Tutorial
tutorial.retake = Re-Take Tutorial
editor = Editor
mapeditor = Harita yaraticisi
+
abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked
@@ -437,6 +466,7 @@ zone.objective.survival = Survive
zone.objective.attack = Destroy Enemy Core
add = Add...
boss.health = Boss Health
+
connectfail = [crimson]Su Oyuna baglanilamadi: [accent]{0}
error.unreachable = Server unreachable.
error.invalidaddress = Invalid address.
@@ -447,6 +477,7 @@ error.mapnotfound = Map file not found!
error.io = Network I/O error.
error.any = Unkown 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
@@ -461,6 +492,7 @@ zone.saltFlats.name = Salt Flats
zone.impact0078.name = Impact 0078
zone.crags.name = Crags
zone.fungalPass.name = Fungal Pass
+
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 fridgid 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.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = A former facility for the production and proce
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.impact0078.description =
zone.crags.description =
+
settings.language = Dil
settings.data = Game Data
settings.reset = ilk ayarlara geri al
settings.rebind = Geri al
+settings.resetKey = Reset
settings.controls = Kontroller
settings.game = Oyun
settings.sound = Ses
@@ -529,6 +563,7 @@ blocks.inaccuracy = sekme
blocks.shots = vuruslar
blocks.reload = Yeniden doldurma
blocks.ammo = Ammo
+
bar.drilltierreq = Better Drill Required
bar.drillspeed = Drill Speed: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
@@ -555,6 +593,7 @@ bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
+
unit.blocks = Yapilar
unit.powersecond = saniyede bir
unit.liquidsecond = Saniyede bir
@@ -567,6 +606,8 @@ unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = esya
+unit.thousands = k
+unit.millions = mil
category.general = General
category.power = Guc
category.liquids = sivilar
@@ -579,6 +620,7 @@ 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[LIGHT_GRAY] (requires restart)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Ekran sallanmasi
setting.effects.name = Efekleri goster
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Kumanda hassasligi
setting.saveinterval.name = Otomatik kaydetme suresi
setting.seconds = {0} Saniye
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Tam ekran
setting.borderlesswindow.name = Borderless Window[LIGHT_GRAY] (may require restart)
setting.fps.name = FPS'i goster
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Haritayi goster
@@ -635,16 +681,36 @@ category.multiplayer.name = Cok oyunculu
command.attack = Attack
command.rally = Rally
command.retreat = Retreat
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Clear Building
keybind.press = Bir tusa bas...
keybind.press.axis = Bir yone cevir yada tusa bas...
keybind.screenshot.name = Map Screenshot
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = Sol/Sag hareket
keybind.move_y.name = Yukari/asagi hareket
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Kos
keybind.schematic_select.name = Select Region
keybind.schematic_menu.name = Schematic Menu
keybind.schematic_flip_x.name = Flip Schematic X
keybind.schematic_flip_y.name = Flip 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.fullscreen.name = Toggle Fullscreen
keybind.select.name = Sec/silahi sik
keybind.diagonal_placement.name = Diagonal Placement
@@ -657,7 +723,6 @@ keybind.menu.name = Menu
keybind.pause.name = Durdur
keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Minimap
-keybind.dash.name = Kos
keybind.chat.name = konus
keybind.player_list.name = Oyuncu listesi
keybind.console.name = Konsol
@@ -680,7 +745,9 @@ mode.pvp.description = fight against other players locally.
mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
+
rules.infiniteresources = Infinite Resources
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.attack = Attack Mode
@@ -688,6 +755,7 @@ 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 = Player Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
rules.unitdamagemultiplier = Unit Damage Multiplier
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Resources & Building
rules.title.player = Players
rules.title.enemy = Enemies
rules.title.unit = Units
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Esyalar
content.liquid.name = Sivilar
content.unit.name = Units
@@ -752,6 +824,7 @@ mech.trident-ship.name = Trident
mech.trident-ship.weapon = mini atomlar
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Orman yakici
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [LIGHT_GRAY]Patlayicilik: {0}
item.flammability = [LIGHT_GRAY]Yanbilirlik: {0}
item.radioactivity = [LIGHT_GRAY]Radyoaktivite: {0}
@@ -767,6 +840,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]isinma kapasitesi: {0}
liquid.viscosity = [LIGHT_GRAY]Yari sivilik: {0}
liquid.temperature = [LIGHT_GRAY]isi: {0}
+
block.sand-boulder.name = Sand Boulder
block.grass.name = Grass
block.salt.name = Salt
@@ -865,6 +939,8 @@ block.distributor.name = yayici
block.sorter.name = secici
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.overflow-gate.name = Kapali dagatici
block.silicon-smelter.name = Silikon eritici
block.phase-weaver.name = Dokumaci
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Coal Centrifuge
block.power-node.name = Guc Dugumu
block.power-node-large.name = buyuk Guc Dugumu
block.surge-tower.name = Surge Tower
+block.diode.name = Battery Diode
block.battery.name = batarya
block.battery-large.name = buyuk batarya
block.combustion-generator.name = sicaklik jenaratoru
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Mekanikal pompa
block.item-source.name = esya kaynagi
block.item-void.name = esya deligi
block.liquid-source.name = sivi kaynagi
+block.liquid-void.name = Liquid Void
block.power-void.name = guc deligi
block.power-source.name = sonsuz guc
block.unloader.name = bekletici
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Fortress Mech Factory
block.revenant-factory.name = Revenant Fighter Factory
block.repair-point.name = tamirci
block.pulse-conduit.name = Pulse borusu
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Phase borusu
block.liquid-router.name = sivi ayirici
block.liquid-tank.name = sivi tanki
@@ -1001,6 +1080,7 @@ tutorial.deposit = Deposit items into blocks by dragging from your ship to the d
tutorial.waves = The[LIGHT_GRAY] enemy[] approaches.\n\nDefend your core for 2 waves. Build more turrets.
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.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
+
item.copper.description = ise yayar bir materyal. Kazma makineleriyle yada tasimayla alinabilir.
item.lead.description = Basit bir baslangic materyali. sivi tasimada kullanilabilir.
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
@@ -1062,6 +1142,7 @@ block.power-source.description = Infinitely outputs power. Sandbox only.
block.item-source.description = Infinitely outputs items. Sandbox only.
block.item-void.description = Destroys any items which go into it without using power. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles.
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = An advanced pump which doubles up speed by using
block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava.
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits.
block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits.
+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 = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets.
block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Advanced liquid transport block. Uses power to
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks.
block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes.
block.surge-tower.description = An extremely long-range power node with fewer available connections.
+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 = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left.
block.battery-large.description = Stores much more power than a regular battery.
block.combustion-generator.description = Generates power by burning oil or flammable materials.
diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties
index 13550abe69..f388a78ece 100644
--- a/core/assets/bundles/bundle_tr.properties
+++ b/core/assets/bundles/bundle_tr.properties
@@ -10,7 +10,9 @@ link.dev-builds.description = Dengesiz oyun sürümleri
link.trello.description = Planlanan özellikler için resmi Trello Sayfası
link.itch.io.description = Bilgisayar sürümleri için itch.io sayfası
link.google-play.description = Google Play mağaza sayfası
+link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Resmi Mindustry wikisi
+link.feathub.description = Suggest new features
linkfail = Link açılamadı!\nURL kopyalandı.
screenshot = Ekran görüntüsü {0} 'na kaydedildi
screenshot.invalid = Harita çok büyük, muhtemelen ekran görüntüsü için yeterli bellek yok.
@@ -18,12 +20,22 @@ gameover = Kaybettin
gameover.pvp = [accent] {0}[] Takımı kazandı!
highscore = [accent]Yeni rekor!
copied = Panoya Kopyalandı.
+
load.sound = Sesler
load.map = Haritalar
load.image = Resimler
load.content = İçerik
load.system = Sistem
load.mod = Modlar
+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
+
schematic = Şema
schematic.add = Şemayı Kaydet...
schematics = Şemalar
@@ -40,6 +52,7 @@ schematic.saved = Şema Kaydedildi.
schematic.delete.confirm = Bu şema tamamen yokedilecek.
schematic.rename = Şemayı yeniden Adlandır
schematic.info = {0}x{1}, {2} blok
+
stat.wave = Yenilen Dalgalar:[accent] {0}
stat.enemiesDestroyed = Yok Edilen Düşmanlar:[accent] {0}
stat.built = İnşa Edilen Yapılar:[accent] {0}
@@ -47,6 +60,7 @@ stat.destroyed = Yok Edilen Yapılar:[accent] {0}
stat.deconstructed = Yıkılan Yapılar:[accent] {0}
stat.delivered = Gönderilen Kaynaklar:
stat.rank = Rütbe: [accent]{0}
+
launcheditems = [accent]Gönderilen Kaynaklar
launchinfo = Mavi ile belirtilen materyallerden edinmek için [unlaunched][[KALKIŞ] yapın.
map.delete = "[accent]{0}[]" haritasını silmek istediğine emin misin?
@@ -74,6 +88,7 @@ maps.browse = Haritaları gör
continue = Devam et
maps.none = [lightgray]Harita Bulunamadı!
invalid = Geçersiz
+pickcolor = Pick Color
preparingconfig = Yapılandırma Hazırlanıyor
preparingcontent = İçerik Hazırlanıyor
uploadingcontent = İçerik Yükleniyor
@@ -81,6 +96,7 @@ uploadingpreviewfile = Önizleme Dosyası Yükleniyor
committingchanges = Değişiklikler Uygulanıyor
done = Bitti
feature.unsupported = Your device does not support this feature.
+
mods.alphainfo = Modların alfa aşamasında olduğunu ve [scarlet]oldukça hatalı olabileceklerini[] unutmayın.\nBulduğunuz sorunları Mindustry GitHub'ı veya Discord'una bildirin.
mods.alpha = [accent](Alpha)
mods = Modlar
@@ -92,18 +108,25 @@ mod.enabled = [lightgray]Etkin
mod.disabled = [scarlet]Devre Dışı
mod.disable = Devre Dışı Bırak
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.
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 = Etkinleştir
mod.requiresrestart = Oyun mod değişikliklerini uygulamak için kapatılacak.
mod.reloadrequired = [scarlet]Yeniden Yükleme Gerekli
mod.import = Mod İçeri Aktar
mod.import.github = GitHub Modu İçeri Aktar
+mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod.
mod.remove.confirm = Bu mod silinecek.
mod.author = [LIGHT_GRAY]Yayıncı:[] {0}
mod.missing = Bu kayıt yakın zamanda güncellediğiniz ya da artık yüklü olmayan modlar içermekte. Kayıt bozulmaları yaşanabilir. Kaydı yüklemek istediğinizden emin misiniz?\n[lightgray]Modlar:\n{0}
mod.preview.missing = Bu modu atölyede yayınlamadan önce bir resim önizlemesi eklemelisiniz.\nMod dosyasına [accent]preview.png[] adlı bir resim yerleştirin ve tekrar deneyin.
mod.folder.missing = Atölyede sadece klasör halindeki modlar yayınlanabilir.Bir modu klasöre çevirmek için, sadece mod dosyalarını bir klasöre çıkarın ve eski sıkıştırılmış dosyayı silin, sonra da oyunu tekrar başlatın ya da modlarınızı tekrar yükleyin.
+mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
+
about.button = Hakkında
name = İsim:
noname = Bir[accent] kullanıcı adı[] seçmelisin.
@@ -132,6 +155,7 @@ server.kicked.nameEmpty = Seçtiğin isim geçersiz.
server.kicked.idInUse = Zaten bu sunucudasın! İki hesapla bir sunucuya bağlanamazsın.
server.kicked.customClient = Bu sunucu özel sürümleri kabul etmiyor. Resmi bir sürüm indir.
server.kicked.gameover = Oyun bitti!
+server.kicked.serverRestarting = The server is restarting.
server.versions = Kullandığın surum:[accent] {0}[]\nSunucunun sürümü:[accent] {1}[]
host.info = [accent]host[], [scarlet]6567[] portunda bir sunucuya ev sahipliği yapıyor. \nAynı [lightgray]wifi veya yerel ağdaki[] herkes sunucu listelerinde senin sunucunu görebiliyor olmalı.\n\nEğer diğerlerinin herhangi bir yerden IP ile bağlanabilmesini istiyorsan [accent]port yönlendirmesi[] gerekli.\n\n[lightgray]Not: Eğer birisi senin yerel ağ oyununa katılmakta sorun yaşıyorsa güvenlik duvarı ayarlarında Mindustry'ye yerel ağ bağlantısı izni verdiğinden emin olun. Halka açık ağların zaman zaman sunucu aramaya engel olduğunu unutmayın.
join.info = Burada, bağlanmak istediğin sunucunun [accent]IP[] adresini girebilir veya [accent]yerel ağ[] sunucularını görebilirsin..\nHem yerel ağ hem de geniş alan ağı çoklu oyuncu için destekleniyor.\n\n[lightgray]Not: Otomatik bir global sunucu listesi yok; eğer birisine IP adresi kullanarak bağlanmak istiyorsan IP adresini istemelisin.
@@ -271,6 +295,7 @@ publishing = [accent]Yayınlanıyor...
publish.confirm = Bunu yayınlamak istediğinize emin misiniz?\n[lightgray]önce Atölye EULA'sına uyduğunuza emin olun, yoksa yapıtlarınız gözükmeyecektir!
publish.error = Nesneyi yayınlarken hata oluştu: {0}
steam.error = Failed to initialize Steam services.\nError: {0}
+
editor.brush = Fırça
editor.openin = Düzenleyici'de Aç
editor.oregen = Maden Oluşumu
@@ -347,6 +372,7 @@ editor.overwrite = [accent]Uyarı!\nBu işlem var olan bir haritanın üstüne y
editor.overwrite.confirm = [scarlet]Uyarı![] Bu ada sahip bir harita zaten var. Onun üstüne yazmak ister misiniz?
editor.exists = Bu ada sahip bir harita zaten var.
editor.selectmap = Yüklemek için bir harita seçin:
+
toolmode.replace = Değiştir
toolmode.replace.description = Sadece katı blokların üzerinde çizer.
toolmode.replaceall = Hepsini Değiştir
@@ -361,6 +387,7 @@ toolmode.fillteams = Takımları Doldur
toolmode.fillteams.description = Bloklar yerine takımları doldurur.
toolmode.drawteams = Takım Çiz
toolmode.drawteams.description = Bloklar yerine takımşarı çizer..
+
filters.empty = [lightgray]Hiç filtre yok! Aşağıdaki butonla bir adet ekleyin.
filter.distort = Çarpıt
filter.noise = Gürültü
@@ -392,6 +419,7 @@ filter.option.floor2 = İkincil Duvar
filter.option.threshold2 = İkincil Eşik
filter.option.radius = Yarıçap
filter.option.percentile = Yüzdelik
+
width = Eni:
height = Boyu:
menu = Menü
@@ -407,6 +435,7 @@ tutorial = Öğretici
tutorial.retake = Öğreticiyi Yeniden Al
editor = Düzenleyici
mapeditor = Harita Düzenleyicisi
+
abandon = Terk Et
abandon.text = Burası ve bütün kaynaklar düşmana kaybedilecek.
locked = Kilitli
@@ -415,7 +444,7 @@ requirement.wave = Bölge {1}'de Dalga {0}
requirement.core = {0}`da Düşman Çekirdeği Yok Et
requirement.unlock = {0}'I Aç
resume = Bölgeye Devam Et:\n[lightgray]{0}
-bestwave = [lightgrayEn İyi Dalga: {0}
+bestwave = [lightgray]En İyi Dalga: {0}
launch = < KALKIŞ >
launch.title = Kalkış Başarılı
launch.next = [lightgray]Bir sonraki imkan {0}. dalgada olacak.
@@ -437,6 +466,7 @@ zone.objective.survival = Hayatta Kal
zone.objective.attack = Düşman Merkezini Yok Et
add = Ekle...
boss.health = Boss Canı
+
connectfail = [crimson]Bağlantı hatası:\n\n[accent]{0}
error.unreachable = Sunucuya ulaşılamıyor.\nAdrwsin doğru yazıldığına emin misiniz?
error.invalidaddress = Geçersiz adres.
@@ -447,6 +477,7 @@ error.mapnotfound = Harita dosyası bulunamadı!
error.io = Ağ I/O hatası.
error.any = Bilinöeyen ağ hatası.
error.bloom = Kamaşma başlatılamadı.\nCihazınız bu özelliği desteklemiyor olabilir.
+
zone.groundZero.name = Sıfır Noktası
zone.desertWastes.name = Çöl Harabeleri
zone.craters.name = Kraterler
@@ -461,6 +492,7 @@ zone.saltFlats.name = Tuz Düzlükleri
zone.impact0078.name = Çarpışma 0078
zone.crags.name = Kayalıklar
zone.fungalPass.name = Mantar Geçidi
+
zone.groundZero.description = Yeniden başlamak için ideal bölge. Düşük düşman tehlikesi ve az miktarda kaynak mevcut.\nMümkün oldukça çok bakır ve kurşun topla.\nİlerle.
zone.frozenForest.description = Burada, dağlara yakın bölgelerde bile, sporlar etrafa yayıldı. Dondurucu soğuk onları sonsuza dek durduramaz.\n\nEnerji kullanmaya başla. Termik jeneratörler inşa et. Tamircileri kullanmayı öğren.
zone.desertWastes.description = Bu harabeler gemiş, öngörülemez, ve sektör yapılarının kalıntılarıyla kesişmekte.\nBölgede kömür mevcut, onu enerji için yak veya ondan grafit üret.\n\n[lightgray]Burada iniş bölgesi garanti edilemez.
@@ -475,10 +507,12 @@ zone.nuclearComplex.description = Önceleri toryum üretme ve işleme ile görev
zone.fungalPass.description = Dağlar ve sporlarla dolu aşağı bölgeler arasında bir geçiş bölgesi. Burada küçük düşman keşif üssü bulundu.\nBu üssü yok et.\nDagger ve Crawler birimleei kullan ve bölgedeki iki çekirdeği yık.
zone.impact0078.description =
zone.crags.description =
+
settings.language = Dil
settings.data = Oyun Verisi
settings.reset = Varsayılana Sıfırla
settings.rebind = Tuşları Yeniden Ata
+settings.resetKey = Reset
settings.controls = Kontroller
settings.game = Oyun
settings.sound = Ses
@@ -529,6 +563,7 @@ blocks.inaccuracy = İskalama Oranı
blocks.shots = Atışlar
blocks.reload = Atışlar/Sn
blocks.ammo = Mermi
+
bar.drilltierreq = Daha İyi Matkap Gerekli
bar.drillspeed = Matkap Hızı: {0}/s
bar.pumpspeed = Pump Speed: {0}/s
@@ -544,6 +579,9 @@ bar.heat = Isı
bar.power = Enerji
bar.progress = Build Progress
bar.spawned = Birimler: {0}/{1}
+bar.input = Input
+bar.output = Output
+
bullet.damage = [stat]{0}[lightgray] hasar
bullet.splashdamage = [stat]{0}[lightgray] alan hasarı ~[stat] {1}[lightgray] kare
bullet.incendiary = [stat]yakıcı
@@ -555,6 +593,7 @@ bullet.freezing = [stat]dondurucu
bullet.tarred = [stat]katranlı
bullet.multiplier = [stat]{0}[lightgray]x mermi çarpanı
bullet.reload = [stat]{0}[lightgray]x atış hızı
+
unit.blocks = bloklar
unit.powersecond = enerji birimi/saniye
unit.liquidsecond = sıvı birimi/saniye
@@ -567,6 +606,8 @@ unit.persecond = /sn
unit.timesspeed = x hız
unit.percent = %
unit.items = eşya
+unit.thousands = k
+unit.millions = mil
category.general = Genel
category.power = Enerji
category.liquids = Sıvılar
@@ -579,6 +620,7 @@ setting.shadows.name = Gölgeler
setting.blockreplace.name = Automatic Block Suggestions
setting.linear.name = Lineer Filtreleme
setting.hints.name = İpuçları
+setting.buildautopause.name = Auto-Pause Building
setting.animatedwater.name = Animasyonlu Su
setting.animatedshields.name = Animasyonlu Kalkanlar
setting.antialias.name = Antialias[lightgray] (requires restart)[]
@@ -601,12 +643,16 @@ setting.screenshake.name = Ekranı Salla
setting.effects.name = Efektleri Görüntüle
setting.destroyedblocks.name = Display Destroyed Blocks
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = Kontrolcü Hassasiyeti
setting.saveinterval.name = Kayıt Aralığı
setting.seconds = {0} Saniye
+setting.blockselecttimeout.name = Block Select Timeout
+setting.milliseconds = {0} milliseconds
setting.fullscreen.name = Tam Ekran
setting.borderlesswindow.name = Kenarsız Pencere[lightgray] (yeniden açmak gerekebilir)
setting.fps.name = FPS Göster
+setting.blockselectkeys.name = Show Block Select Keys
setting.vsync.name = VSync
setting.pixelate.name = Pixelleştir[lightgray] (animasyonları kapatır)
setting.minimap.name = Haritayı Göster
@@ -635,16 +681,36 @@ category.multiplayer.name = Çok Oyunculu
command.attack = Saldır
command.rally = Toplan
command.retreat = Geri Çekil
+placement.blockselectkeys = \n[lightgray]Key: [{0},
keybind.clear_building.name = Binayı Temizle
keybind.press = Bir tuşa basın...
keybind.press.axis = Bir tuşa ya da yöne basın...
keybind.screenshot.name = Harita Ekran Görüntüsü
+keybind.toggle_power_lines.name = Toggle Power Lasers
keybind.move_x.name = x Ekseninde Hareket
keybind.move_y.name = y Ekseninde Hareket
+keybind.mouse_move.name = Follow Mouse
+keybind.dash.name = Sıçrama
keybind.schematic_select.name = Bölge Seç
keybind.schematic_menu.name = Şema Menüsü
keybind.schematic_flip_x.name = Şemayı X ekseninde Döndür
keybind.schematic_flip_y.name = Şemayı Y Ekseninde Döndür
+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 = Tam Ekran
keybind.select.name = Seç/Ateş Et
keybind.diagonal_placement.name = Çapraz Yerleştirme
@@ -657,7 +723,6 @@ keybind.menu.name = Menü
keybind.pause.name = Durdur
keybind.pause_building.name = İnşaatı Duraklat/İnşaata Devam Et
keybind.minimap.name = Mini Harita
-keybind.dash.name = Sıçrama
keybind.chat.name = Konuş
keybind.player_list.name = Oyuncu Listesi
keybind.console.name = Konsol
@@ -680,7 +745,9 @@ mode.pvp.description = Yerel olarak başkaları ile savaş.\n[gray]Oynamak için
mode.attack.name = Saldırı
mode.attack.description = Düşman üssünü yok et. Dalga yok.\n[gray]Oynamak için haritada kırmızı çekirdek olması gerekir.
mode.custom = Özel Kurallar
+
rules.infiniteresources = Sınırsız Kaynaklar
+rules.reactorexplosions = Reactor Explosions
rules.wavetimer = Dalga Zamanlayıcısı
rules.waves = Dalgalar
rules.attack = Saldırı Modu
@@ -688,6 +755,7 @@ rules.enemyCheat = Sonsuz AI (Kırmızı Takım) Kaynakları
rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Birim Üretim Hızı Çarpanı
rules.unithealthmultiplier = Birim Canı Çarpanı
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = Oyuncu Canı Çarpanı
rules.playerdamagemultiplier = Oyuncu Hasarı Çarpanı
rules.unitdamagemultiplier = Birim Hasarı Çapanı
@@ -706,6 +774,10 @@ rules.title.resourcesbuilding = Kaynaklar & İnşa
rules.title.player = Oyuncular
rules.title.enemy = Düşmanlar
rules.title.unit = Unitler
+rules.title.experimental = Experimental
+rules.lighting = Lighting
+rules.ambientlight = Ambient Light
+
content.item.name = Eşyalar
content.liquid.name = Sıvılar
content.unit.name = Birimler
@@ -752,6 +824,7 @@ mech.trident-ship.name = Trident
mech.trident-ship.weapon = Bomba Bölmesi
mech.glaive-ship.name = Glaive
mech.glaive-ship.weapon = Alevli Makineli Tüfek
+item.corestorable = [lightgray]Storable in Core: {0}
item.explosiveness = [lightgray]Patlama: {0}%
item.flammability = [lightgray]Yanıcılık: {0}%
item.radioactivity = [lightgray]Radyoaktivite: {0}%
@@ -767,6 +840,7 @@ mech.buildspeed = [lightgray]İnşaat Hızı: {0}%
liquid.heatcapacity = [lightgray]Isı Kapasitesi: {0}
liquid.viscosity = [lightgray]Vizkosite: {0}
liquid.temperature = [lightgray]Sıcaklık: {0}
+
block.sand-boulder.name = Kum Kaya Parçaları
block.grass.name = Çimen
block.salt.name = Tuz
@@ -865,6 +939,8 @@ block.distributor.name = Dağıtıcı
block.sorter.name = Ayıklayıcı
block.inverted-sorter.name = Ters Ayıklayıcı
block.message.name = Mesaj
+block.illuminator.name = Illuminator
+block.illuminator.description = A small, compact, configurable light source. Requires power to function.
block.overflow-gate.name = Taşma Geçiti
block.silicon-smelter.name = Silikon Fırını
block.phase-weaver.name = Faz Örücü
@@ -878,6 +954,7 @@ block.coal-centrifuge.name = Kömür Santrifüjü
block.power-node.name = Enerji Noktası
block.power-node-large.name = Büyük Enerji Noktası
block.surge-tower.name = Akı Kulesi
+block.diode.name = Battery Diode
block.battery.name = Batarya
block.battery-large.name = Büyük Batarya
block.combustion-generator.name = Termik Jeneratör
@@ -901,6 +978,7 @@ block.mechanical-pump.name = Mekanik Pompa
block.item-source.name = Sonsuz Eşya Kaynağı
block.item-void.name = Eşya Yokedici
block.liquid-source.name = Sonsuz Sıvı Kaynağı
+block.liquid-void.name = Liquid Void
block.power-void.name = Enerji Yokedici
block.power-source.name = Sonsuz Enerji Kaynağı
block.unloader.name = Boşaltıcı
@@ -930,6 +1008,7 @@ block.fortress-factory.name = Fortress Robot Fabrikası
block.revenant-factory.name = Revenant Savaşçı Fabrikası
block.repair-point.name = Tamir Noktası
block.pulse-conduit.name = Dalga Borusu
+block.plated-conduit.name = Plated Conduit
block.phase-conduit.name = Faz Borusu
block.liquid-router.name = Sıvı Yönlendiricisi
block.liquid-tank.name = Sıvı Tankı
@@ -1001,6 +1080,7 @@ tutorial.deposit = Malzemeleri geminizden hedef bloğa sürükleyerek malzemeler
tutorial.waves = [lightgray]Düşman[] yaklaşıyor.\n\nÇekirdeği 2 dalga boyunca koruyun. Ateş etmek için [accent]tıklayın[].\nDaha fazla taret ve matkap inşa edin ve daha fazla bakır toplayın.
tutorial.waves.mobile = [lightgray]Düşman[] yaklaşıyor.\n\nÇekirdeği 2 dalga boyunca koruyun. Geminiz düşmanlara otomatik olarak ateş edecektir.\nDaha fazla taret ve matkap inşa edin ve daha fazla bakır toplayın.
tutorial.launch = Belirli bir dalgaya ulaşınca, çekirdeği bulunduğu bölgeden [accent]kaldırabilir[], bütün binalarınızı arkada bırakıp [accent]çekirdeğinizdeki bütün materyallere sahip olabilirsiniz.[]Bu materyaller daha sonra yeni teknolojiler geliştirmek için kullanılabilir.\n\n[accent]Kalkış butonuna basın.
+
item.copper.description = En basit materyal. Her türlü blokda kullanılır.
item.lead.description = Basit bir materyal. Elektronikte ve sıvı taşımada kullanılır.
item.metaglass.description = Süper sert camdan bir bileşim. Sıvı dağıtımı ve depolamak için yaygın olarak kullanılır.
@@ -1062,6 +1142,7 @@ block.power-source.description = Sonsuz enerji verir. Sadece Yaratıcı Modda.
block.item-source.description = Seçilen eşyadan sonsuz verir. Sadece Yaratıcı Modda.
block.item-void.description = Verilen eşyaları yok eder. Sadece Yaratıcı Modda.
block.liquid-source.description = Seçilen sıvıyı sonsuz verir. Sadece Yaratıcı Modda.
+block.liquid-void.description = Removes any liquids. Sandbox only.
block.copper-wall.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve silahları korumak için kullanışlıdır.
block.copper-wall-large.description = Ucuz bir savunma bloğu.\nİlk birkaç dalgada merkezi ve taretleri korumak için kullanışlıdır.\nBirçok blok alan kaplar.
block.titanium-wall.description = Orta derecede güçlü savunma bloğu.\nDüşmanlardan orta derecede koruma sağlar.
@@ -1097,6 +1178,7 @@ block.rotary-pump.description = Daha gelişmiş bir pompa. Daha fazla sıvı dep
block.thermal-pump.description = En iyi pompa.
block.conduit.description = Temel sıvı taşıma bloğu. Sıvıları ileri taşır. Pompalar ve diğer borularla birlikte kullanılır.
block.pulse-conduit.description = Gelişmiş bir sıvı taşıma bloğu. Sıvıları normal borulardan daha hızlı taşır ve onlardan daha fazla sıvı alır.
+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 = Sıvıları bir yönden alıp diğer üç yöne eşit olarak dağıtır. Ayrıca kendisi de bir miktar sıvı depolayabilir. Sıvıları bir kaynaktan birden fazla hedefe iletmek için kullanılır.
block.liquid-tank.description = Çok miktarda sıvıyı depolar. İhtiyaçları devamlı olmayan sıvıları yedek olarak saklamakta ya da önemli blokların devamlı olarak soğutulmasında kullanılabilir.
block.liquid-junction.description = Çakışan iki boru hattı arasında bir köprü görevi görür. İki farklı borunun farklı hedeflere farklı sıvıları taşıdığı durumlarda kullanışlıdır.
@@ -1105,6 +1187,7 @@ block.phase-conduit.description = Gelişmiş sıvı taşıma bloğu. Sıvıları
block.power-node.description = Bağlı düğümlere enerji sağlar. Ayrıca dibindeki bloklardan da enerji alıp onlara enerji verebilir.
block.power-node-large.description = Daha fazla menzil ve bağlantıya sahip daha gelişmiş bir güç düğümü
block.surge-tower.description = Daha az bağlantı sayısına sahip oldukça uzun menzilli bir güç düğümü.
+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 = Enerji fazlasını yedek olarak saklar. Enerji açığında sakladığı enerjiyi salar.
block.battery-large.description = Sıradan bataryadan çok daha fazla enerji depolar.
block.combustion-generator.description = Kömür gibi yanıcı materyalleri yakarak enerji üretir.
diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties
index a0c1edf720..b78e537eff 100644
--- a/core/assets/bundles/bundle_uk_UA.properties
+++ b/core/assets/bundles/bundle_uk_UA.properties
@@ -10,8 +10,9 @@ link.dev-builds.description = Нестабільні версії
link.trello.description = Офіційна дошка Trello для запланованих функцій
link.itch.io.description = Itch.io сторінка, на якій можна завантажити гру
link.google-play.description = Завантажити для Android з Google Play
-link.f-droid.description = Перелік каталогу F-Droid
+link.f-droid.description = Завантажити для Android з F-Droid
link.wiki.description = Офіційна Mindustry wiki
+link.feathub.description = Запропонувати нові функції
linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійована в буфер обміну.
screenshot = Зняток мапи збережено в {0}
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
@@ -19,6 +20,7 @@ gameover = Гра завершена
gameover.pvp = [accent] {0}[] команда перемогла!
highscore = [YELLOW]Новий рекорд!
copied = Скопійовано.
+
load.sound = Звуки
load.map = Мапи
load.image = Зображення
@@ -27,6 +29,13 @@ load.system = Система
load.mod = Модифікації
load.scripts = Скрипти
+be.update = Доступна нова збірка Bleeding Edge:
+be.update.confirm = Завантажити і перезавантажити зараз?
+be.updating = Оновлення…
+be.ignore = Ігнорувати
+be.noupdates = Оновлень не знайдено.
+be.check = Перевірити на наявність оновлень
+
schematic = Схема
schematic.add = Зберегти схему…
schematics = Схеми
@@ -37,12 +46,13 @@ schematic.importfile = Імпортувати файл
schematic.browseworkshop = Переглянути в Майстерні
schematic.copy = Копіювати в буфер обміну
schematic.copy.import = Імпортувати з клавіатури
-schematic.shareworkshop = Поширити в Майстерні
+schematic.shareworkshop = Поширити в Майстерню
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Відобразити схему
schematic.saved = Схема збережена.
schematic.delete.confirm = Ця схема буде повністю випалена.
schematic.rename = Перейменувати схему.
schematic.info = {0}x{1}, {2} блоків
+
stat.wave = Хвиль відбито:[accent] {0}
stat.enemiesDestroyed = Ворогів знищено:[accent] {0}
stat.built = Будівель збудувано:[accent] {0}
@@ -50,6 +60,7 @@ stat.destroyed = Будівель знищено:[accent] {0}
stat.deconstructed = Будівель декоструйовано[accent] {0}
stat.delivered = Ресурсів запущено:
stat.rank = Фінальний рахунок: [accent]{0}
+
launcheditems = [accent]Запущені предмети
launchinfo = [unlaunched]Натисніть на кнопку «[[ЗАПУСК]», щоб ваше ядро отримало предмети, які виділені синім кольором.
map.delete = Ви впевнені, що хочете видалити мапу «[accent]{0}[]»?
@@ -67,7 +78,7 @@ customgame = Користувацька гра
newgame = Нова гра
none = <нічого>
minimap = Мінімапа
-position = Позиція
+position = Місцерозташування
close = Закрити
website = Веб-сайт
quit = Вихід
@@ -84,41 +95,38 @@ uploadingcontent = Вивантаження вмісту
uploadingpreviewfile = Вивантаження файлу передперегляду
committingchanges = Здійснення змін
done = Зроблено
-mods = Модифікації
+feature.unsupported = Your device does not support this feature.
+
mods.alphainfo = Майте на увазі, що модифікації знаходяться в альфі, і [scarlet]може бути дуже глючними[].\nПовідомте про будь-які проблеми, які ви знайдете до Mindustry Github або Discord.
mods.alpha = [scarlet](Альфа)
-mods.none = [LIGHT_GRAY]Модифікацій не знайдено!
-mod.enabled = [lightgray]Увімкнено
-mod.disabled = [scarlet]Вимкнено
-mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
-mod.import = Імпортувати модифікацію
-mod.remove.confirm = Цю модифікацію буде видалено.
-mod.author = [LIGHT_GRAY]Автор:[] {0}
-mods.alpha = [scarlet](Альфа)
mods = Модифікації
mods.none = [LIGHT_GRAY]Модифікацій не знайдено!
-mods.guide = Посібник зі створення модифицій
+mods.guide = Посібник з модифицій
mods.report = Повідомити про ваду
mods.openfolder = Відкрити теку модифікацій
mod.enabled = [lightgray]Увімкнено
mod.disabled = [scarlet]Вимкнено
-mod.disable = Вимкнути
+mod.disable = Вимкн.
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
-mod.requiresversion = [scarlet]Необхідна версія гри: [accent]{0}
+mod.requiresversion = [scarlet]Необхідна мінімальна версія гри: [accent]{0}
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
+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 = Імпортувати модифікацію
-mod.import.github = Імпортувати модификацію з GitHub
-mod.item.remove =Цей предмет є частиною модифікації [accent] '«{0}»[]. Щоб видалити його, видаліть цю модифікацію.
+mod.import.github = Завантажити мод з GitHub
+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 = Ваш пристрій не підтримує скрипти модифікацій. Деякі модифифікаціх не будуть працювати правильно.
+
about.button = Про гру
name = Ім’я:
noname = Спочатку придумайте[accent] собі ім’я[].
@@ -133,7 +141,7 @@ players = Гравців: {0}
players.single = {0} гравець на сервері
server.closing = [accent]Закриття сервера…
server.kicked.kick = Ви були вигнані з сервера!
-server.kicked.whitelist = Ви не в білому спискі сервері.
+server.kicked.whitelist = Ви не в білому спискі сервера!
server.kicked.serverClose = Сервер закрито.
server.kicked.vote = Вас було вигнано із сервера за допомогою голосування. Прощавайте.
server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
@@ -147,6 +155,7 @@ server.kicked.nameEmpty = Ваше ім’я має містити принай
server.kicked.idInUse = Ви вже на цьому сервері! Підключення двох облікових записів не дозволяється.
server.kicked.customClient = Цей сервер не підтримує користувацькі збірки. Завантажте офіційну версію.
server.kicked.gameover = Гра завершена!
+server.kicked.serverRestarting = Сервер перезавантажується
server.versions = Ваша версія:[accent] {0}[]\nВерсія на сервері:[accent] {1}[]
host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [lightgray]WiFi або локальній мережі[], повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то[accent] переадресація порту []обов’язкова.\n\n[lightgray]Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дозволяють виявити сервер.
join.info = Тут ви можете ввести [accent]IP сервера[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Тут немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити створювача сервера дати свій ip.
@@ -209,8 +218,8 @@ save.delete.confirm = Ви дійсно хочете видалити це зб
save.delete = Видалити
save.export = Експортувати збереження
save.import.invalid = [accent]Це збереження недійсне!
-save.import.fail = [crimson]Не вдалося імпортувати збереження: [accent]{0}
-save.export.fail = [crimson]Не вдалося експортувати збереження: [accent]{0}
+save.import.fail = [crimson]Не вдалося завантажити збереження: [accent]{0}
+save.export.fail = [crimson]Не вдалося вивантажити збереження: [accent]{0}
save.import = Імпортувати збереження
save.newslot = Ім’я збереження:
save.rename = Перейменувати
@@ -240,12 +249,12 @@ cancel = Скасувати
openlink = Відкрити посилання
copylink = Скопіювати посилання
back = Назад
-data.export = Експортувати дані
-data.import = Импортувати дані
-data.exported = Дані імпортовано.
+data.export = Вивантажити дані
+data.import = Завантажити дані
+data.exported = Дані вивантажено.
data.invalid = Це не дійсні ігрові дані.
-data.import.confirm = Імпорт зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється.
-classic.export = Експортувати класичні дані
+data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється.
+classic.export = Вивантажити класичні дані
classic.export.text = Класичне (версія 3.5 збірка 40) збереження або мапа були знайдені. Ви хочете експортувати ці дані в домашню теку телефону, для використання у застосунку Mindustry Classic?
quit.confirm = Ви впевнені, що хочете вийти?
quit.confirm.tutorial = Ви впевнені, що хочете вийти з навчання?
@@ -286,6 +295,7 @@ publishing = [accent]Публікація…
publish.confirm = Ви дійсно хочете опублікувати це?\n\n[lightgray]Переконайтеся, що ви спочатку погоджуєтеся з EULA Майстерні, або ваші предмети не з’являться!
publish.error = Сталася помилка при публікації предмета: {0}
steam.error = Не вдалося ініціалізувати сервіси Steam.\nПомилка: {0}
+
editor.brush = Пензлик
editor.openin = Відкрити в редакторі
editor.oregen = Генерація руд
@@ -317,7 +327,7 @@ waves.invalid = Недійсні хвилі у буфері обміну.
waves.copied = Хвилі скопійовані.
waves.none = Вороги не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею.
editor.default = [lightgray]<За замовчуванням>
-details = Деталі…
+details = Подробиці…
edit = Редагувати…
editor.name = Назва:
editor.spawn = Створити бойову одиницю
@@ -325,7 +335,7 @@ editor.removeunit = Видалити бойову одиницю
editor.teams = Команди
editor.errorload = Помилка завантаження зображення:\n[accent] {0}
editor.errorsave = Помилка збереження зображення:\n[accent]{0}
-editor.errorimage = Це зображення, а не мапа. Не змінюйте розширення, очікуючи, що це запрацює.\n\nЯкщо Ви хочете імпортувати застарілку мапу, то використовуйте кнопку «Імпортувати застаріле зображення» у редакторі.
+editor.errorimage = Це зображення, а не мапа. Не змінюйте розширення, очікуючи, що це запрацює.\n\nЯкщо ви хочете імпортувати застарілку мапу, то використовуйте кнопку «Імпортувати застаріле зображення» у редакторі.
editor.errorlegacy = Ця мапа занадто стара і використовує попередній формат мапи, який більше не підтримується.
editor.errornot = Це не мапа.
editor.errorheader = Цей файл мапи недійсний або пошкоджений.
@@ -362,6 +372,7 @@ editor.overwrite = [accent]Попередження!\nЦе перезапису
editor.overwrite.confirm = [scarlet]Попередження![] Мапа з такою назвою вже існує. Ви впевнені, що хочете переписати її?
editor.exists = Мапа за такою назвою вже існує.
editor.selectmap = Виберіть мапу для завантаження:
+
toolmode.replace = Замінити
toolmode.replace.description = Малює тільки\nна суцільних блоках.
toolmode.replaceall = Замінити все
@@ -376,6 +387,7 @@ toolmode.fillteams = Змінити блок в команді
toolmode.fillteams.description = Змінює належність\nблоків до команди.
toolmode.drawteams = Змінити команду блока
toolmode.drawteams.description = Змінює належність\nблока до команди.
+
filters.empty = [lightgray]Немає фільтрів! Додайте хоча б один за допомогою кнопки нижче.
filter.distort = Спотворення
filter.noise = Шум
@@ -407,6 +419,7 @@ filter.option.floor2 = Друга поверхня
filter.option.threshold2 = Вторинний граничний порог
filter.option.radius = Радіус
filter.option.percentile = Спад
+
width = Ширина:
height = Висота:
menu = Меню
@@ -422,12 +435,13 @@ tutorial = Навчання
tutorial.retake = Відкрити навчання
editor = Редактор
mapeditor = Редактор мап
+
abandon = Покинути
abandon.text = Ця зона і всі її ресурси будуть втрачені.
locked = Заблоковано
complete = [lightgray]Досягнута:
-requirement.wave = Досягніть хвилі {0} у {1}
-requirement.core = Знишьте вороже ядро у {0}
+requirement.wave = Досягніть хвилі {0} у зоні «{1}»
+requirement.core = Знищьте вороже ядро у {0}
requirement.unlock = Розблокуйте {0}
resume = Відновити зону:\n[lightgray]{0}
bestwave = [lightgray]Найкраща хвиля: {0}
@@ -436,22 +450,23 @@ launch.title = Запуск вдалий
launch.next = [lightgray]наступна можливість на {0}-тій хвилі
launch.unable2 = [scarlet]ЗАПУСК неможливий.[]
launch.confirm = Це видалить всі ресурси у Вашому ядрі.\nВи не зможете повернутися до цієї бази.
-launch.skip.confirm = Якщо Ви пропустите зараз, Ви не зможете не запускати до більш пізніх хвиль.
+launch.skip.confirm = Якщо ви пропустите зараз, Ви не зможете не запускати до більш пізніх хвиль.
uncover = Розкрити
configure = Вивантажити конфігурацію
bannedblocks = Заборонені блоки
addall = Додати все
-configure.locked = [lightgray]Можливість розблокувати вивантаження ресурсів буде доступна на {0}-тій хвилі.
+configure.locked = {0}[lightgray]Тільки після цього можливість розблокувати вивантаження ресурсів буде доступна.
configure.invalid = Кількість повинна бути числом між 0 та {0}.
zone.unlocked = Зона «[lightgray]{0}» тепер розблокована.
-zone.requirement.complete = Ви досягли {0}-тої хвилі,\nВимоги до зони «{1}» виконані.
-zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
+zone.requirement.complete = Ви досягли {0}-тої хвилі. \nВимоги до зони «{1}» виконані.
+zone.config.unlocked = Вивантаження розблоковано:[lightgray]\n{0}
zone.resources = Виявлені ресурси:
zone.objective = [lightgray]Мета: [accent]{0}
zone.objective.survival = Вижити
zone.objective.attack = Знищити вороже ядро
add = Додати…
boss.health = Здоров’я босу
+
connectfail = [crimson]Помилка підключення: [accent]{0}
error.unreachable = Сервер не доступний.
error.invalidaddress = Некоректна адреса.
@@ -462,7 +477,8 @@ error.mapnotfound = Файл мапи не знайдено
error.io = Мережева помилка введення-виведення
error.any = Невідома мережева помилка
error.bloom = Не вдалося ініціалізувати цвітіння.\nВаш пристрій, мабуть, не підтримує це.
-zone.groundZero.name = Нульова земля
+
+zone.groundZero.name = Відправний пункт
zone.desertWastes.name = Пустельні відходи
zone.craters.name = Кратери
zone.frozenForest.name = Крижаний ліс
@@ -476,6 +492,7 @@ zone.saltFlats.name = Соляні рівнини
zone.impact0078.name = Імпульс 0078
zone.crags.name = Скелі
zone.fungalPass.name = Грибний перевал
+
zone.groundZero.description = Оптимальне місце для повторних ігор. Низька ворожа загроза. Мало ресурсів. \nЗбирайте якомога більше свинцю та міді. \nЙдіть далі.
zone.frozenForest.description = Навіть тут, ближче до гір, спори поширилися. Холодна температура не може їх утримувати тут завжди.\nЗважтесь створити енергію. Побудуйте генератори внутрішнього згорання. Навчіться користуватися регенераторами.
zone.desertWastes.description = Ці відходи є величезними, непередбачуваними і перетинаються з занедбаними секторальними структурами.\nВугілля присутнє в регіоні. Спаліть його для енергії або синтезуйте у графіт.\n\n[lightgray]Це місце посадки не можна гарантувати.
@@ -490,10 +507,11 @@ zone.nuclearComplex.description = Колишній об’єкт для виро
zone.fungalPass.description = Перехідна зона між високими і низькими горами, земля яких покрита спорами. Тут знаходиться невелика розвідувальна база ворога.\nЗнижте її.\nВикористовуйте одиниці Кинджал і Камікадзе.
zone.impact0078.description = <вставити опис тут>
zone.crags.description = <вставити опис тут>
+
settings.language = Мова
settings.data = Ігрові дані
settings.reset = Скинути за замовчуванням
-settings.rebind = Зміна
+settings.rebind = Змінити
settings.resetKey = Скинути
settings.controls = Керування
settings.game = Гра
@@ -515,7 +533,7 @@ blocks.output = Вихід
blocks.booster = Прискорювач
block.unknown = [lightgray]???
blocks.powercapacity = Місткість енергії
-blocks.powershot = Енергія/постріл
+blocks.powershot = Енергія за постріл
blocks.damage = Шкода
blocks.targetsair = Повітряні мішені
blocks.targetsground = Наземні мішені
@@ -527,7 +545,7 @@ blocks.liquidcapacity = Місткість рідини
blocks.powerrange = Діапазон передачі енергії
blocks.powerconnections = Максимальна кількість з’єднань
blocks.poweruse = Енергії використовує
-blocks.powerdamage = Енергія/урон
+blocks.powerdamage = Енергія/шкода
blocks.itemcapacity = Місткість предметів
blocks.basepowergeneration = Базова генерація енергії
blocks.productiontime = Час виробництва
@@ -545,6 +563,7 @@ blocks.inaccuracy = Розкид
blocks.shots = Постріли
blocks.reload = Постріли/секунду
blocks.ammo = Боєприпаси
+
bar.drilltierreq = Потребується кращий бур
bar.drillspeed = Швидкість буріння: {0} за с.
bar.pumpspeed = Швидкість викачування: {0} за с.
@@ -562,6 +581,7 @@ bar.progress = Хід будування
bar.spawned = Бойов. од.: {0}/{1}
bar.input = Ввід
bar.output = Вивід
+
bullet.damage = [stat]{0}[lightgray] шкода
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] блок.
bullet.incendiary = [stat]запальний
@@ -573,12 +593,11 @@ bullet.freezing = [stat]заморожування
bullet.tarred = [stat]дьогтьовий
bullet.multiplier = [stat]{0}[lightgray]x патронів
bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджання
+
unit.blocks = блоки
unit.powersecond = одиниць енергії за секунду
unit.liquidsecond = одиниць рідини за секунду
unit.itemssecond = предметів за секунду
-unit.thousands = тис
-unit.millions = млн
unit.liquidunits = одиниць рідини
unit.powerunits = одиниць енергії
unit.degrees = град.
@@ -587,6 +606,8 @@ unit.persecond = за секунду
unit.timesspeed = x швидкість
unit.percent = %
unit.items = предм.
+unit.thousands = тис
+unit.millions = млн
category.general = Загальне
category.power = Енергія
category.liquids = Рідини
@@ -622,6 +643,7 @@ setting.screenshake.name = Тряска екрану
setting.effects.name = Ефекти
setting.destroyedblocks.name = Показувати зруйновані блоки
setting.conveyorpathfinding.name = Пошук шляху для встановлення конвейерів
+setting.coreselect.name = Дозволити схематичні ядра
setting.sensitivity.name = Чутливість контролера
setting.saveinterval.name = Інтервал збереження
setting.seconds = {0} с
@@ -723,6 +745,7 @@ mode.pvp.description = боріться проти інших гравців.\n[
mode.attack.name = Атака
mode.attack.description = Зруйнуйте ворожу базу.\n[gray]Потрібно червоне ядро на мапі для гри.
mode.custom = Користувацькі правила
+
rules.infiniteresources = Нескінченні ресурси
rules.reactorexplosions = Вибухи реактора
rules.wavetimer = Таймер хвиль
@@ -732,6 +755,7 @@ rules.enemyCheat = Нескінченні ресурси для ШІ
rules.unitdrops = Ресурс бойових одиниць
rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць
rules.unithealthmultiplier = Множник здоров’я бойових одиниць
+rules.blockhealthmultiplier = Множник здоров’я блоків
rules.playerhealthmultiplier = Множник здоров’я гравця
rules.playerdamagemultiplier = Множник шкоди гравця
rules.unitdamagemultiplier = Множник шкоди бойових одиниць
@@ -753,6 +777,7 @@ rules.title.unit = Бойов. од.
rules.title.experimental = Есперементальне!
rules.lighting = Світлотінь
rules.ambientlight = Навколишнє світло
+
content.item.name = Предмети
content.liquid.name = Рідини
content.unit.name = Бойові одиниці
@@ -815,6 +840,7 @@ mech.buildspeed = [lightgray]Швидкість будування: {0}%
liquid.heatcapacity = [lightgray]Теплоємність: {0}
liquid.viscosity = [lightgray]В’язкість: {0}
liquid.temperature = [lightgray]Температура: {0}
+
block.sand-boulder.name = Пісочний валун
block.grass.name = Трава
block.salt.name = Сіль
@@ -849,7 +875,7 @@ block.core-nucleus.name = Ядро «Атом»
block.deepwater.name = Глибоководдя
block.water.name = Вода
block.tainted-water.name = Забруднена вода
-block.darksand-tainted-water.name = Темний пісок з забрудненою водою
+block.darksand-tainted-water.name = Темний пісок із забрудненою водою
block.tar.name = Дьоготь
block.stone.name = Камінь
block.sand.name = Пісок
@@ -952,6 +978,7 @@ 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 = Розвантажувач
@@ -1033,30 +1060,31 @@ unit.eradicator.name = Випалювач
unit.lich.name = Лич
unit.reaper.name = Жнець
tutorial.next = [lightgray]<Натисніть для продовження>
-tutorial.intro = Ви розпочали[scarlet] навчання по Mindustry.[]\nРозпочніть з[accent] видобування міді[]. Використовуйте [[WASD] для руху.\n[accent] Утримуйте [[Ctrl] під час прокрутки миші[] для приближення і віддалення. Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді
+tutorial.intro = Ви розпочали[scarlet] навчання по Mindustry.[]\nРозпочніть з [accent]видобутку міді[]. Використовуйте [[WASD] для руху.\n[accent]Прокручуйте миш[] для приближення і віддалення. Наблизьтесь до мідної жили біля вашого ядра, а потім натисніть на неї, щоб розпочати видобуток.\n\n[accent]{0}/{1} міді
tutorial.intro.mobile = Ви розпочали[scarlet] навчання по Mindustry.[]\nПроведіть екраном, щоб рухатися.\n[accent] Зведіть або розведіть 2 пальця [] для приближення і віддалення відповідно.\nз[accent] видобування міді.[] Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді
-tutorial.drill = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисніть на вкладку свердла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\nВи також можете вибрати бур, натиснувши [accent][[2][], а потім натиснути [accent][[1][] швидко, незалежно від того, яка вкладка відкрита.\n[accent]Натисніть ПКМ[], щоб зупинити будування.tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent] галочку[] нижче, щоб підтвердити розміщення .\nНатисніть[accent] клавішу X[], щоб скасувати розміщення.
-tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent] галочку[] нижче, щоб підтвердити розміщення.\nPress the[accent] X button[] to cancel placement.
-tutorial.blockinfo = Кожен блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисність на кнопку «?», коли Ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура прямо зараз.[]
-tutorial.conveyor = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent]Утримуйте миш, щоб розмістити у лінію.[]\nУтримуйте[accent] CTRL[] під час вибору лінії для розміщення по діагоналі.\n\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено
-tutorial.conveyor.mobile = [accent]Конвеєри[] використовується для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви вибрали.\nВикористовуйте колесо прокрутки, щоб обертати блоки перед їх розміщенням\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено
-tutorial.turret = Оборонні споруди повинні бути побудовані для відбиття[lightgray] ворогів[].\nПобудуйте[accent] башточку «Подвійна»[] біля вашої бази.
-tutorial.drillturret = «Подвійна» потребує [accent] мідні боєприпаси []для стрільби.\nРозмістіть бур біля башточки\nПроведіть конвеєри до башточки, щоб заповнити її боєприпасами.\n\n[accent]Доставлено боєприпасів: 0/1
-tutorial.pause = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисність пробіл для павзи.tutorial.launch
-tutorial.pause.mobile = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]атисніть кнопку зліва вгорі для павзи.
+tutorial.drill = Добування вручну не є ефективним.\n[accent]Бури []можуть добувати автоматично.\nНатисніть на вкладку із зображенням свердла знизу праворуч.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\nВи також можете вибрати бур, натиснувши [accent][[2][], а потім швидко натиснути [accent][[1][], незалежно від того, яка вкладка відкрита.\n[accent]Натисніть ПКМ[], щоб зупинити будування.
+tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку із зображенням сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent]галочку[] нижче, щоб підтвердити розміщення .\nНатисніть [accent]кнопку X[], щоб скасувати розміщення.
+tutorial.blockinfo = Кожен блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисність на кнопку «?», коли ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура прямо зараз.[]
+tutorial.conveyor = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent]Утримуйте миш, щоб розмістити у лінію.[]\nУтримуйте[accent] CTRL[] під час вибору лінії для розміщення по діагоналі.\\nПрокручуйте, щоб обертати блоки до їх установлення.\n[accent]Розмістіть 2 конвеєри у лінію, а потім доставте предмет в ядро.tutorial.conveyor.mobile = [accent]Конвеєри[] використовується для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви вибрали.\nВикористовуйте колесо прокрутки, щоб обертати блоки перед їх розміщенням\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено
+tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
+tutorial.turret = Оборонні споруди повинні бути побудовані для відбиття[lightgray] ворогів[].\nПобудуйте[accent] башту «Подвійна»[] біля вашої бази.
+tutorial.drillturret = «Подвійна» потребує [accent]мідні боєприпаси[] для стрільби.\nРозмістіть бур біля башточки\nПроведіть конвеєри до башточки, щоб заповнити її боєприпасами.\n\n[accent]Доставлено боєприпасів: 0/1
+tutorial.pause = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисність пробіл для павзи.
+tutorial.pause.mobile = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисніть кнопку вгорі ліворуч для павзи.
tutorial.unpause = Тепер натисність пробіл, щоб зняти павзу.
tutorial.unpause.mobile = Тепер натисність туди ще раз, щоб зняти павзу.
-tutorial.breaking = Блоки часто повинні бути знищені.\n[accent]Утримуючи ПКМ[] Ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні.
+tutorial.breaking = Блоки часто повинні бути знищені.\n[accent]Утримуючи ПКМ[] ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні.
tutorial.breaking.mobile = Блоки часто повинні бути знищені.\n[accent]Виберіть режим руйнування[], потім натисніть на блок, щоб зламати його.\nЗнищіть область, утримуючи палець протягом декількох секунд [] і потягнувши в потрібному напрямку.\nНатисніть кнопку галочки, щоб підтвердити руйнування.\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні.
-tutorial.withdraw = У деяких ситуаціях потрібно брати предмети безпосередньо з блоків.\nЩоб зробити це, [accent]натисність на блок[] з предметами на ньому, і потім [accent]натисніть на предмет[] в інвентарі.\nМожна вилучити кілька предметів [accent]натискаючи та утримуючи[].\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]Натисніть кнопку запуску.
+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.lead.description = Основний стартовий матеріал. Широко застосовується в електроніці та транспортуванні рідин.
item.metaglass.description = Супер жорсткий склад скла. Широко застосовується для розподілу та зберігання рідини.
-item.graphite.description = Мінералізований вуглець, що використовується для боєприпасів та електроізоляції.
+item.graphite.description = Мінералізований вуглець, що використовується для боєприпасів та як компонент.
item.sand.description = Поширений матеріал, який широко використовується при виплавці, як при сплавленні, так і в якості відходів.
item.coal.description = Окам’янілі рослинні речовини, що утворюються задовго до посіву. Широко використовується для виробництва пального та ресурсів.
item.titanium.description = Рідкісний надлегкий метал, який широко використовується для транспортування рідини, бурів і літаків.
@@ -1074,11 +1102,11 @@ liquid.slag.description = Різні види розплавленого мет
liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена в вугілля в якості палива або використана як куля.
liquid.cryofluid.description = Інертна, не роз’їдаюча рідина, створена з води та титану. Володіє надзвичайно високою пропускною спроможністю. Широко використовується в якості охолоджуючої рідини.
mech.alpha-mech.description = Стандартний керований мех. Заснований на бойовій одиниці «Кинджал», з оновленими бронею та можливостями будування. Наносить більше шкоди, ніж «Дротик».
-mech.delta-mech.description = Швидкий, легкоброньований мех, зроблений для тактики «атакуй і біжи». Наносить мало шкоди будівлям, але може дуже швидко вбити великі групи підрозділів противника своєю дуговою блискавкою.
+mech.delta-mech.description = Швидкий, легкоброньований мех, зроблений для тактики «атакуй і втікай». Наносить мало шкоди будівлям, але може дуже швидко вбити великі групи підрозділів противника своєю дуговою блискавкою.
mech.tau-mech.description = Мех підтримки. Ремонтує союзні блоки, стріляючи по них. Може зцілювати союзників у радіусі його ремонтної здатності.
mech.omega-mech.description = Об’ємний і добре броньований мех, зроблений для фронтових штурмів. Його броня може перекрити до 90% пошкоджень, що надходять.
mech.dart-ship.description = Стандартний корабель управління. Швидко видобуває ресурси. Достатньо швидкий і легкий, але має мало наступальних можливостей.
-mech.javelin-ship.description = Корабель для стратегії атакуй та біжи». Хоча спочатку він повільний, потім вже може розганятися до великих швидкостей і літати над ворожими форпостами, завдаючи великої кількості шкоди своїми блискавками та ракетами.
+mech.javelin-ship.description = Корабель, який використовується для стратегії «атакуй та втікай». Хоча спочатку він повільний, потім вже може розганятися до великих швидкостей і літати над ворожими форпостами, завдаючи великої кількості шкоди своїми блискавками та ракетами.
mech.trident-ship.description = Важкий бомбардувальник, побудований для будування та знищення ворожих укріплень. Дуже добре броньований.
mech.glaive-ship.description = Великий, добре броньований бойовий корабель. Оснащений запальним ретранслятором. Високо маневрений.
unit.draug.description = Примітивний дрон, який добуває ресурси. Дешевий для виробництва. Автоматично видобуває мідь і свинець поблизу. Доставляє видобуті ресурси до найближчого ядра.
@@ -1089,7 +1117,7 @@ unit.crawler.description = Наземна одиниця, що складаєт
unit.titan.description = Вдосконалений броньований наземний блок. Нападає як на наземні, так і повітряні цілі. Оснащений двома мініатюрними вогнеметами класу Випалювач.
unit.fortress.description = Артилерійний мех. Оснащений двома модифікованими гарматами типу «Град» для дальнього нападу на ворожі структури та підрозділи.
unit.eruptor.description = Важкий мех, призначеней для знесення конструкцій. Вистрілює потік шлаків у ворожі укріплення, розплавляючи їх і підпалюючи летючі речовини.
-unit.wraith.description = Швидкий перехоплювач, який використовується для тактики «атакуй і біжи». Пріоритет — енергетичні генератори.
+unit.wraith.description = Швидкий перехоплювач, який використовується для тактики «атакуй і втікай». Пріоритет — генератори енергії.
unit.ghoul.description = Важкий килимовий бомбардувальник. Пробиває ворожі структури, орієнтуючись на віжливу інфраструктуру.
unit.revenant.description = Важкий ракетний масив.
block.message.description = Зберігає повідомлення. Використовується для комунікаціх між союзниками.
@@ -1103,19 +1131,20 @@ block.alloy-smelter.description = Поєднує титан, свинець, к
block.cryofluidmixer.description = Змішує воду і дрібний порошок титану титану в кріогенну рідину. Основне використання у торієвому реактору.
block.blast-mixer.description = Подрібнює і змішує скупчення спор з піратитом для отримання вибухової суміші.
block.pyratite-mixer.description = Змішує вугілля, свинець та пісок у легкозаймистий піратит.
-block.melter.description = Розплавляє брухт у шлак для подальшої переробки або використання у башточках «Хвиля».
+block.melter.description = Розплавляє брухт у шлак для подальшої переробки або використання у баштах «Хвиля».
block.separator.description = Відокремлює шлак на його мінеральні компоненти. Виводить охолоджений результат.
-block.spore-press.description = Стискає спорові стручки під сильним тиском для синтезу нафти
+block.spore-press.description = Стискає спорові стручки під сильним тиском для синтезу нафти.
block.pulverizer.description = Подрібнює брухт дрібного піску.
block.coal-centrifuge.description = Нафта перетворюється у шматки вугілля.
block.incinerator.description = Випаровує будь-який зайвий предмет або рідину, які він отримує.
block.power-void.description = Знищує будь-яку енергію, до якої він під’єднаний. Тільки пісочниця
-block.power-source.description = Нескінченно виводить енергію. Тільки пісочниця
-block.item-source.description = Нескінченно виводить предмети. Тільки пісочниця
-block.item-void.description = Знищує будь-які предмети. Тільки пісочниця
-block.liquid-source.description = Нескінченно виводить рідини. Тільки пісочниця
-block.copper-wall.description = Дешевий захисний блок.\nКорисна для захисту ядра та башточок у перші кілька хвиль.
-block.copper-wall-large.description = Дешевий захисний блок.\nКорисна для захисту ядра та башточок у перші кілька хвиль.\nОхоплює кілька плиток.
+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 = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з'єднання енергетичних вузлів.
@@ -1149,7 +1178,7 @@ 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 = Приймає рідини з одного напрямку та виводить їх до трьох інших напрямків порівну. Також можна зберігати певну кількість рідини. Корисно для розщеплення рідин від одного джерела до кількох мішеней.
block.liquid-tank.description = Зберігає велику кількість рідини. Використовуйте для створення буферів у ситуаціях з непостійним попитом на матеріали або як гарантію охолодження життєво важливих блоків.
block.liquid-junction.description = Діє як міст для двох каналів перетину. Корисно в ситуаціях, коли два різні трубопроводи перевозять різні рідини в різні місця.
diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties
index edb60b0a77..884ac22dd0 100644
--- a/core/assets/bundles/bundle_zh_CN.properties
+++ b/core/assets/bundles/bundle_zh_CN.properties
@@ -12,6 +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
linkfail = 打开链接失败!\n网址已复制到您的剪贴板。
screenshot = 屏幕截图已保存到 {0}
screenshot.invalid = 地图太大,可能没有足够的内存用于截图。
@@ -26,6 +27,14 @@ load.image = 图片加载中
load.content = 内容加载中
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
schematic = 蓝图
schematic.add = 保存蓝图…
@@ -101,17 +110,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.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.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.
about.button = 关于
name = 名字:
@@ -141,6 +155,7 @@ server.kicked.nameEmpty = 无效的名字!
server.kicked.idInUse = 你已在这个服务器上!不允许用两个账号连接。
server.kicked.customClient = 这个服务器不支持自定义版本。请下载官方版本。
server.kicked.gameover = 游戏结束!
+server.kicked.serverRestarting = The server is restarting.
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 地址。
@@ -497,6 +512,7 @@ settings.language = 语言
settings.data = 游戏数据
settings.reset = 恢复默认设置
settings.rebind = 重新绑定
+settings.resetKey = Reset
settings.controls = 控制
settings.game = 游戏
settings.sound = 声音
@@ -590,6 +606,8 @@ unit.persecond = /秒
unit.timesspeed = 倍 速度
unit.percent = %
unit.items = 物品
+unit.thousands = k
+unit.millions = mil
category.general = 普通
category.power = 能量
category.liquids = 液体
@@ -625,6 +643,7 @@ setting.screenshake.name = 屏幕抖动
setting.effects.name = 显示效果
setting.destroyedblocks.name = 显示摧毁的块
setting.conveyorpathfinding.name = 传送带放置寻路
+setting.coreselect.name = Allow Schematic Cores
setting.sensitivity.name = 控制器灵敏度
setting.saveinterval.name = 自动保存间隔
setting.seconds = {0} 秒
@@ -736,6 +755,7 @@ rules.enemyCheat = 敌人(红队)无限资源
rules.unitdrops = 敌人出生点
rules.unitbuildspeedmultiplier = 单位生产速度倍数
rules.unithealthmultiplier = 单位生命倍数
+rules.blockhealthmultiplier = Block Health Multiplier
rules.playerhealthmultiplier = 玩家生命倍数
rules.playerdamagemultiplier = 玩家伤害倍数
rules.unitdamagemultiplier = 单位伤害倍数
@@ -804,6 +824,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.explosiveness = [lightgray]爆炸性:{0}%
item.flammability = [lightgray]易燃性:{0}%
item.radioactivity = [lightgray]放射性:{0}%
@@ -957,6 +978,7 @@ 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 = 装卸器
@@ -1120,6 +1142,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.copper-wall.description = 廉价的防御方块。\n适合在前几个波次中保护核心和炮塔。
block.copper-wall-large.description = 廉价的防御方块。\n适合在前几个波次中保护核心和炮塔。\n占多个方格。
block.titanium-wall.description = 中等强度的防御方块。\n提供中等强度的防御以抵御敌人。
diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties
index 050884d00f..aad624d1e2 100644
--- a/core/assets/bundles/bundle_zh_TW.properties
+++ b/core/assets/bundles/bundle_zh_TW.properties
@@ -12,6 +12,7 @@ link.itch.io.description = itch.io 電腦版下載網頁
link.google-play.description = Google Play 商店頁面
link.f-droid.description = F-Droid 目錄頁面
link.wiki.description = 官方 Mindustry 維基
+link.feathub.description = 建議新功能
linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。
screenshot = 截圖保存到{0}
screenshot.invalid = 地圖太大了,可能沒有足夠的內存用於截圖。
@@ -28,6 +29,13 @@ load.system = 系統載入中
load.mod = 模組載入中
load.scripts = 指令檔載入中
+be.update = 有新的尖端版本可用:
+be.update.confirm = 下載並重啟遊戲?
+be.updating = 更新中
+be.ignore = 忽略
+be.noupdates = 沒有新的更新。
+be.check = 檢查是否有新的更新
+
schematic = 藍圖
schematic.add = 儲存藍圖...
schematics = 藍圖
@@ -88,6 +96,7 @@ uploadingpreviewfile = 上傳預覽文件
committingchanges = 提交變更
done = 完成
feature.unsupported = 您的設備不支持此功能。
+
mods.alphainfo = 請記住,模組仍處於Alpha狀態,[scarlet]可能會有很多BUG[].\n向Mindustry GitHub或Discord報告發現的任何問題。
mods.alpha = [accent](Alpha)
mods = 模組
@@ -97,12 +106,15 @@ mods.report = 回報錯誤
mods.openfolder = 開啟模組資料夾
mod.enabled = [lightgray]已啟用
mod.disabled = [scarlet]已禁用
-mod.enable = 啟用
mod.disable = 禁用
mod.delete.error = 無法刪除模組,檔案可能在使用中。
-mod.requiresversion = [scarlet]遊戲版本要求:[accent]{0}
-mod.missingdependencies = [scarlet]缺少依賴項目: {0}
+mod.requiresversion = [scarlet]最低遊戲版本要求:[accent]{0}
+mod.missingdependencies = [scarlet]缺少必須項目: {0}
+mod.erroredcontent = [scarlet]內容錯誤
+mod.errors = 載入內容時發生錯誤
+mod.noerrorplay = [scarlet]你使用了有錯誤的模組。[] 遊戲前請先禁用相關模組或修正錯誤。
mod.nowdisabled = [scarlet]「{0}」模組缺少必須項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。
+mod.enable = 啟用
mod.requiresrestart = 遊戲將立即關閉以套用模組變更。
mod.reloadrequired = [scarlet]需要重新載入
mod.import = 匯入模組
@@ -113,6 +125,7 @@ mod.author = [lightgray]作者:[] {0}
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。
mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾,只需將其文件解壓縮到資料夾並刪除舊的.zip檔,然後重新啟動遊戲或重新載入模組。
+mod.scripts.unsupported = 你的裝置不支援模組指令檔。部分模組將無法正常運作。
about.button = 關於
name = 名稱:
@@ -133,15 +146,16 @@ server.kicked.serverClose = 伺服器已關閉。
server.kicked.vote = 您已被投票踢出伺服器,再見。
server.kicked.clientOutdated = 客戶端版本過舊!請更新遊戲!
server.kicked.serverOutdated = 伺服器版本過舊!請聯絡伺服主更新伺服器!
-server.kicked.banned = 您已經從這個伺服器被封禁。
+server.kicked.banned = 您已經在這個伺服器中被封禁。
server.kicked.typeMismatch = 該伺服器與您的版本不相容。
server.kicked.playerLimit = 該伺服器已滿。請等待一個空位置。
server.kicked.recentKick = 您最近曾被踢出伺服器。\n請稍後再進行連線。
server.kicked.nameInUse = 伺服器中已經\n有人有相同的名稱了。
server.kicked.nameEmpty = 你的名稱必須至少包含一個字母或數字。
-server.kicked.idInUse = 你已經在伺服器中!不允許用兩個帳號。
+server.kicked.idInUse = 你已經在伺服器中!不允許使用兩個帳號。
server.kicked.customClient = 這個伺服器不支持自訂客戶端,請下載官方版本。
server.kicked.gameover = 遊戲結束!
+server.kicked.serverRestarting = 伺服器正在重新啟動。
server.versions = 您的遊戲版本:[accent] {0}[]\n伺服器遊戲版本:[accent] {1}[]
host.info = [accent]建立伺服器[]按鍵會在連接埠[scarlet]6567[]建立一個伺服器。\n所有跟您在同一個[lightgray]網路或區域網路[]環境的玩家應該能在他們的伺服器清單中找到您的伺服器。\n\n如果您希望網際網路上的玩家透過IP 位址連線到您的伺服器,您必須設定[accent]連接埠轉發[]。\n\n[lightgray]注意:如果區域網路內有玩家無法連線至您的伺服器,請務必確認您已於防火牆設定中開放Mindustry存取您的區域網路。請注意公共網路有時不允許搜尋伺服器。
join.info = 您可以在此輸入欲連線的[accent]伺服器IP位址[],或尋找[accent]區域網路[]內的伺服器。目前支援區域網路與網際網路連線。\n\n[lightgray]注意:並沒有自動的網際網路伺服器清單,如果您想透過IP位址連線到他人的伺服器,您必須向他們詢問IP位址。
@@ -178,7 +192,7 @@ confirmban = 您確定要封禁該玩家嗎?
confirmkick = 您確定要踢出該玩家嗎?
confirmvotekick = 您確定要投票剔除該名玩家嗎?
confirmunban = 您確定要解除封禁該玩家嗎?
-confirmadmin = 您確定要提升這個玩家為管理員嗎?
+confirmadmin = 您確定要晉升這個玩家為管理員嗎?
confirmunadmin = 您確定要解除這個玩家的管理員嗎?
joingame.title = 加入遊戲
joingame.ip = IP位址:
@@ -253,7 +267,7 @@ pausebuilding = [accent][[{0}][]暫停建造
resumebuilding = [scarlet][[{0}][]恢復建造
wave = [accent]第{0}波
wave.waiting = [lightgray]將於{0}秒後抵達
-wave.waveInProgress = 第[lightgray]波正在進行中
+wave.waveInProgress = [lightgray]波次進行中
waiting = [lightgray]等待中...
waiting.players = 等待玩家中...
wave.enemies = [lightgray]剩下{0}個敵人
@@ -265,9 +279,9 @@ custom = 自訂
builtin = 内建
map.delete.confirm = 確認要刪除地圖嗎?此操作無法撤回!
map.random = [accent]隨機地圖
-map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[ROYAL]藍色[]的核心。
-map.nospawn.pvp = 這個地圖沒有核心讓敵人重生!請在編輯器中添加一個[SCARLET]紅色[]的核心。
-map.nospawn.attack = 這個地圖沒有敵人核心讓可以攻擊!請在編輯器中添加一個[SCARLET]紅色[]的核心。
+map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[accent]橘色[]的核心。
+map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[SCARLET]不是橘色[]的核心。
+map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[SCARLET]紅色[]的核心。
map.invalid = 地圖載入錯誤:地圖可能已經損壞。
workshop.update = 更新項目
workshop.error = 提取工作坊詳細信息時出錯: {0}
@@ -281,6 +295,7 @@ publishing = [accent]發佈中...
publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意Workshop EULA,否則您的項目將不會顯示!
publish.error = 發佈項目時出錯: {0}
steam.error = Steam 服務初始化失敗.\n錯誤: {0}
+
editor.brush = 粉刷
editor.openin = 在編輯器中開啟
editor.oregen = 礦石生成
@@ -298,7 +313,7 @@ editor.newmap = 新地圖
workshop = 工作坊
waves.title = 波次
waves.remove = 移除
-waves.never = 〈從來沒有〉
+waves.never = 〈永遠〉
waves.every = 每
waves.waves = 波次
waves.perspawn = 每次生成
@@ -370,7 +385,7 @@ toolmode.eraseores = 清除礦物
toolmode.eraseores.description = 僅清除礦物。
toolmode.fillteams = 填充團隊
toolmode.fillteams.description = 填充團隊而不是方塊。
-toolmode.drawteams = Draw Teams
+toolmode.drawteams = 繪製團隊
toolmode.drawteams.description = 繪製團隊而不是方塊。
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。
@@ -532,7 +547,7 @@ blocks.powerconnections = 最大連接數
blocks.poweruse = 能量使用
blocks.powerdamage = 能量/傷害
blocks.itemcapacity = 物品容量
-blocks.basepowergeneration = 基本能量生產
+blocks.basepowergeneration = 基礎能量生產
blocks.productiontime = 生產時間
blocks.repairtime = 方塊完全修復時間
blocks.speedincrease = 速度提升
@@ -600,12 +615,12 @@ category.items = 物品
category.crafting = 需求
category.shooting = 射擊
category.optional = 可選的強化
-
setting.landscape.name = 鎖定水平畫面
setting.shadows.name = 陰影
setting.blockreplace.name = 方塊建造建議
setting.linear.name = 線性過濾
setting.hints.name = 提示
+setting.buildautopause.name = 自動暫停建築
setting.animatedwater.name = 水動畫
setting.animatedshields.name = 護盾動畫
setting.antialias.name = 消除鋸齒[lightgray](需要重啟遊戲)[]
@@ -628,14 +643,18 @@ setting.screenshake.name = 畫面抖動
setting.effects.name = 顯示特效
setting.destroyedblocks.name = 顯示被破壞的方塊
setting.conveyorpathfinding.name = 自動輸送帶放置規劃
+setting.coreselect.name = 允許藍圖包含核心
setting.sensitivity.name = 控制器靈敏度
setting.saveinterval.name = 自動存檔間隔
setting.seconds = {0}秒
+setting.blockselecttimeout.name = 跳過方塊建造時距
+setting.milliseconds = {0}毫秒
setting.fullscreen.name = 全螢幕
setting.borderlesswindow.name = 無邊框窗口[lightgray](可能需要重啟遊戲)
-setting.fps.name = 顯示FPS
+setting.fps.name = 顯示FPS與Ping
+setting.blockselectkeys.name = 顯示方塊選擇快捷鍵
setting.vsync.name = 垂直同步
-setting.pixelate.name = 像素化[lightgray](可能降低性能)
+setting.pixelate.name = 像素化[lightgray](會關閉動畫)
setting.minimap.name = 顯示小地圖
setting.position.name = 顯示玩家位置
setting.musicvol.name = 音樂音量
@@ -662,17 +681,36 @@ category.multiplayer.name = 多人
command.attack = 攻擊
command.rally = 集結
command.retreat = 撤退
-keybind.clear_building.name = 清除建築物
+placement.blockselectkeys = \n[lightgray]按鍵:[{0},
+keybind.clear_building.name = 清除建築指令
keybind.press = 按一下按鍵...
keybind.press.axis = 按一下軸向或按鍵...
keybind.screenshot.name = 地圖截圖
keybind.toggle_power_lines.name = 顯示能量激光
keybind.move_x.name = 水平移動
keybind.move_y.name = 垂直移動
+keybind.mouse_move.name = 跟隨滑鼠
+keybind.dash.name = 衝刺
keybind.schematic_select.name = 選擇區域
keybind.schematic_menu.name = 藍圖目錄
keybind.schematic_flip_x.name = X軸翻轉
keybind.schematic_flip_y.name = Y軸翻轉
+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.fullscreen.name = 全螢幕切換
keybind.select.name = 選取
keybind.diagonal_placement.name = 對角線放置
@@ -685,7 +723,6 @@ keybind.menu.name = 主選單
keybind.pause.name = 暫停遊戲
keybind.pause_building.name = 暫停/恢復建造
keybind.minimap.name = 小地圖
-keybind.dash.name = 衝刺
keybind.chat.name = 聊天
keybind.player_list.name = 玩家列表
keybind.console.name = 終端機
@@ -699,14 +736,14 @@ keybind.drop_unit.name = 放下單位
keybind.zoom_minimap.name = 縮放小地圖
mode.help.title = 模式說明
mode.survival.name = 生存
-mode.survival.description = 一般模式。有限的資源與自動來襲的波次。
+mode.survival.description = 一般模式。有限的資源與自動來襲的波次。\n[gray]地圖中需要敵人生成點。
mode.sandbox.name = 沙盒
-mode.sandbox.description = 無限的資源,與不倒數計時的波次。
+mode.sandbox.description = 無限的資源與不倒數計時的波次。
mode.editor.name = 編輯
mode.pvp.name = 對戰
-mode.pvp.description = 和其他玩家競爭、戰鬥。
+mode.pvp.description = 和其他玩家競爭、戰鬥。\n[gray]地圖中需要至少兩個不同顏色的核心。
mode.attack.name = 進攻
-mode.attack.description = 沒有波次,目標是摧毀敵人的基地。
+mode.attack.description = 目標是摧毀敵人的基地。\n[gray]地圖中需要有一個紅色核心。
mode.custom = 自訂規則
rules.infiniteresources = 無限資源
@@ -717,11 +754,12 @@ rules.attack = 攻擊模式
rules.enemyCheat = 電腦無限資源
rules.unitdrops = 單位掉落物
rules.unitbuildspeedmultiplier = 單位建設速度倍數
-rules.unithealthmultiplier = 單位耐久度倍數
-rules.playerhealthmultiplier = 玩家耐久度倍數
+rules.unithealthmultiplier = 單位生命值倍數
+rules.blockhealthmultiplier = 建築物耐久度倍數
+rules.playerhealthmultiplier = 玩家生命值倍數
rules.playerdamagemultiplier = 玩家傷害倍數
rules.unitdamagemultiplier = 單位傷害倍數
-rules.enemycorebuildradius = 敵人核心無建設半徑︰[lightgray](格)
+rules.enemycorebuildradius = 敵人核心禁止建設半徑︰[lightgray](格)
rules.respawntime = 重生時間︰[lightgray](秒)
rules.wavespacing = 波次間距︰[lightgray](秒)
rules.buildcostmultiplier = 建設成本倍數
@@ -765,7 +803,6 @@ liquid.water.name = 水
liquid.slag.name = 熔渣
liquid.oil.name = 原油
liquid.cryofluid.name = 冷凍液
-
mech.alpha-mech.name = 阿爾法
mech.alpha-mech.weapon = 重型機關槍
mech.alpha-mech.ability = 自修復
@@ -788,21 +825,22 @@ mech.trident-ship.weapon = 轟炸艙
mech.glaive-ship.name = 偃月刀
mech.glaive-ship.weapon = 火焰機關槍
item.corestorable = [lightgray]核心可儲存: {0}
-item.explosiveness = [lightgray]爆炸性:{0}
-item.flammability = [lightgray]易燃性:{0}
-item.radioactivity = [lightgray]放射性:{0}
-unit.health = [lightgray]耐久度:{0}
+item.explosiveness = [lightgray]爆炸性:{0}%
+item.flammability = [lightgray]易燃性:{0}%
+item.radioactivity = [lightgray]放射性:{0}%
+unit.health = [lightgray]生命值:{0}
unit.speed = [lightgray]速度:{0}
mech.weapon = [lightgray]武器:{0}
mech.health = [lightgray]血量:{0}
mech.itemcapacity = [lightgray]物品容量:{0}
-mech.minespeed = [lightgray]採礦速度:{0}
+mech.minespeed = [lightgray]採礦速度:{0}%
mech.minepower = [lightgray]採礦能力:{0}
mech.ability = [lightgray]能力:{0}
mech.buildspeed = [lightgray]建造速度: {0}%
liquid.heatcapacity = [lightgray]熱容量:{0}
liquid.viscosity = [lightgray]粘性:{0}
liquid.temperature = [lightgray]溫度:{0}
+
block.sand-boulder.name = 沙礫
block.grass.name = 草
block.salt.name = 鹽
@@ -940,6 +978,7 @@ 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 = 裝卸器
@@ -1021,9 +1060,9 @@ unit.eradicator.name = 殲滅者
unit.lich.name = 巫妖
unit.reaper.name = 收掠者
tutorial.next = [lightgray]<按下以繼續>
-tutorial.intro = 您已進入[scarlet] Mindustry 教學。[]\n使用[[WASD鍵]來移動.\n在滾動滾輪時[accent]按住 [[Ctrl][]來放大縮小畫面.\n從[accent]開採銅礦[]開始吧靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦
+tutorial.intro = 您已進入[scarlet] Mindustry 教學。[]\n使用[[WASD鍵]來移動.\n滾動滾輪來放大縮小畫面.\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在銅礦脈上放置一個鑽頭。
+tutorial.drill = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n在銅礦脈上放置一個鑽頭。\n不論在哪個選單,您也可以用快速按下按鍵[accent][[2][]然後[accent][[1][]來選擇鑽頭。\n[accent]滑鼠右擊[]停止建造。
tutorial.drill.mobile = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n點選右下角的鑽頭選項\n選擇[accent]機械鑽頭[].\n通過點擊將其放置在銅礦上,然後按下下方的[accent]確認標誌[]確認您的選擇\n按下[accent] X 按鈕[] 取消放置.
tutorial.blockinfo = 每個方塊都有不同的屬性。每個鑽頭只能開採特定的礦石。\n查看方塊的資訊和屬性,[accent]在建造目錄時按下"?"鈕。[]\n\n[accent]立即訪問機械鑽頭的屬性資料。[]
tutorial.conveyor = [accent]輸送帶[]能夠將物品運輸到核心。\n製作一條從鑽頭開始到核心的輸送帶。
@@ -1039,12 +1078,14 @@ 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.launch = 一旦您達到特定的波數, 您就可以[accent] 發射核心[],放棄防禦並[accent]獲取核心中的所有資源。[]\n這些資源可以用於研究新科技。\n\n[accent]按下發射按鈕。
+
item.copper.description = 最基本的結構材料。在各種類型的方塊中廣泛使用。
item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和液體運輸方塊。
item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和存儲。
-item.graphite.description = 礦化的碳,用於彈藥和電氣絕緣。
-item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和助熔劑。
+item.graphite.description = 礦化的碳,用於彈藥和電氣元件。
+item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和作為助熔劑。
item.coal.description = 遠在「播種」事件前就形成的植物化石。一種常見並容易獲得的燃料。
item.titanium.description = 一種罕見的超輕金屬,被廣泛運用於運輸液體、鑽頭和飛行載具。
item.thorium.description = 一種高密度的放射性金屬,用作結構支撐和核燃料。
@@ -1061,10 +1102,10 @@ liquid.slag.description = 各種不同類型的熔融金屬混合在一起的液
liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。
liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。
mech.alpha-mech.description = 標準的控制機甲。改良自匕首機甲,加強了裝甲及建造能力。
-mech.delta-mech.description = 一種快速、輕裝甲的機甲,用於打帶跑的攻擊。對結構造成的傷害很小,但可以用弧形閃電武器很快殺死大量敵方單位。
+mech.delta-mech.description = 一種快速、輕裝甲的機甲,用於打帶跑的攻擊。對結構體造成的傷害很小,但可以用弧形閃電武器很快殺死大量敵方單位。
mech.tau-mech.description = 支援機甲。射擊友方方塊以修復它們。可以使用它的修復能力治療一定範圍內的友軍。
-mech.omega-mech.description = 一種笨重、重裝甲的機甲,用於前線突擊。它的裝甲能力可以阻擋高達90%的傷害。
-mech.dart-ship.description = 標準的控制飛船。快速、輕便,但攻擊能力低、採礦速度慢。
+mech.omega-mech.description = 一種笨重、重裝甲的機甲,用於前線突擊。
+mech.dart-ship.description = 標準的控制飛船。採礦速度快。相當快速、輕便,但攻擊能力低落。
mech.javelin-ship.description = 一種打帶跑的突襲艇。雖然最初很慢,但它可以加速到很快的速度,並飛過敵人的前哨站,利用其閃電能力和導彈造成大量的傷害。
mech.trident-ship.description = 一種重型轟炸機。用以摧毀敵方建築。有相當的裝甲。
mech.glaive-ship.description = 一種大型、配有良好裝甲的砲艇。配備燃燒機關槍。高機動性。
@@ -1101,6 +1142,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.copper-wall.description = 一種便宜的防禦方塊。\n用於前幾波防衛核心和砲塔。
block.copper-wall-large.description = 一種便宜的防禦方塊。\n用於前幾波防禦核心和砲塔\n佔據多個方塊。
block.titanium-wall.description = 一個中等強度的防禦方塊。\n提供對敵人的適度保護。
@@ -1205,4 +1247,3 @@ block.omega-mech-pad.description = 改裝現在的船隻,換成龐大、具有
block.javelin-ship-pad.description = 改裝現在的船隻,換成具有閃電武器、強大而快速的攔截機。\n站在上面雙擊機坪以使用它。
block.trident-ship-pad.description = 改裝現在的船隻,換成具有相當不錯裝甲的重型轟炸機。\n站在上面雙擊機坪以使用它。
block.glaive-ship-pad.description = 改裝現在的船隻,換成具有重裝甲的砲艇。\n站在上面雙擊機坪以使用它。
-
diff --git a/core/assets/contributors b/core/assets/contributors
index 93fcb7ccc4..afe1bc3b45 100644
--- a/core/assets/contributors
+++ b/core/assets/contributors
@@ -83,3 +83,5 @@ amrsoll
ねらひかだ
Draco
Quezler
+Alicila
+Daniel Dusek
diff --git a/core/assets/fonts/font.ttf b/core/assets/fonts/font.ttf
index 7a32355454..6b585dcbdd 100644
Binary files a/core/assets/fonts/font.ttf and b/core/assets/fonts/font.ttf differ
diff --git a/core/assets/scripts/base.js b/core/assets/scripts/base.js
index 9b3fb5dcb4..6ce3070968 100755
--- a/core/assets/scripts/base.js
+++ b/core/assets/scripts/base.js
@@ -16,4 +16,5 @@ const boolp = method => new Boolp(){get: method}
const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method}
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
-const Calls = Packages.io.anuke.mindustry.gen.Call
\ No newline at end of file
+Call = Packages.mindustry.gen.Call
+const Calls = Call //backwards compat
\ No newline at end of file
diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js
index 87f498bbef..22d746b420 100755
--- a/core/assets/scripts/global.js
+++ b/core/assets/scripts/global.js
@@ -18,61 +18,63 @@ const boolp = method => new Boolp(){get: method}
const cons = method => new Cons(){get: method}
const prov = method => new Prov(){get: method}
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
-const Calls = Packages.io.anuke.mindustry.gen.Call
-importPackage(Packages.io.anuke.arc)
-importPackage(Packages.io.anuke.arc.collection)
-importPackage(Packages.io.anuke.arc.func)
-importPackage(Packages.io.anuke.arc.graphics)
-importPackage(Packages.io.anuke.arc.graphics.g2d)
-importPackage(Packages.io.anuke.arc.math)
-importPackage(Packages.io.anuke.arc.scene)
-importPackage(Packages.io.anuke.arc.scene.actions)
-importPackage(Packages.io.anuke.arc.scene.event)
-importPackage(Packages.io.anuke.arc.scene.style)
-importPackage(Packages.io.anuke.arc.scene.ui)
-importPackage(Packages.io.anuke.arc.scene.ui.layout)
-importPackage(Packages.io.anuke.arc.scene.utils)
-importPackage(Packages.io.anuke.arc.util)
-importPackage(Packages.io.anuke.mindustry)
-importPackage(Packages.io.anuke.mindustry.ai)
-importPackage(Packages.io.anuke.mindustry.content)
-importPackage(Packages.io.anuke.mindustry.core)
-importPackage(Packages.io.anuke.mindustry.ctype)
-importPackage(Packages.io.anuke.mindustry.editor)
-importPackage(Packages.io.anuke.mindustry.entities)
-importPackage(Packages.io.anuke.mindustry.entities.bullet)
-importPackage(Packages.io.anuke.mindustry.entities.effect)
-importPackage(Packages.io.anuke.mindustry.entities.traits)
-importPackage(Packages.io.anuke.mindustry.entities.type)
-importPackage(Packages.io.anuke.mindustry.entities.type.base)
-importPackage(Packages.io.anuke.mindustry.entities.units)
-importPackage(Packages.io.anuke.mindustry.game)
-importPackage(Packages.io.anuke.mindustry.gen)
-importPackage(Packages.io.anuke.mindustry.graphics)
-importPackage(Packages.io.anuke.mindustry.input)
-importPackage(Packages.io.anuke.mindustry.maps)
-importPackage(Packages.io.anuke.mindustry.maps.filters)
-importPackage(Packages.io.anuke.mindustry.maps.generators)
-importPackage(Packages.io.anuke.mindustry.maps.zonegen)
-importPackage(Packages.io.anuke.mindustry.type)
-importPackage(Packages.io.anuke.mindustry.ui)
-importPackage(Packages.io.anuke.mindustry.ui.dialogs)
-importPackage(Packages.io.anuke.mindustry.ui.fragments)
-importPackage(Packages.io.anuke.mindustry.ui.layout)
-importPackage(Packages.io.anuke.mindustry.world)
-importPackage(Packages.io.anuke.mindustry.world.blocks)
-importPackage(Packages.io.anuke.mindustry.world.blocks.defense)
-importPackage(Packages.io.anuke.mindustry.world.blocks.defense.turrets)
-importPackage(Packages.io.anuke.mindustry.world.blocks.distribution)
-importPackage(Packages.io.anuke.mindustry.world.blocks.liquid)
-importPackage(Packages.io.anuke.mindustry.world.blocks.logic)
-importPackage(Packages.io.anuke.mindustry.world.blocks.power)
-importPackage(Packages.io.anuke.mindustry.world.blocks.production)
-importPackage(Packages.io.anuke.mindustry.world.blocks.sandbox)
-importPackage(Packages.io.anuke.mindustry.world.blocks.storage)
-importPackage(Packages.io.anuke.mindustry.world.blocks.units)
-importPackage(Packages.io.anuke.mindustry.world.consumers)
-importPackage(Packages.io.anuke.mindustry.world.meta)
-importPackage(Packages.io.anuke.mindustry.world.meta.values)
-importPackage(Packages.io.anuke.mindustry.world.modules)
-importPackage(Packages.io.anuke.mindustry.world.producers)
+Call = Packages.mindustry.gen.Call
+const Calls = Call //backwards compat
+importPackage(Packages.arc)
+importPackage(Packages.arc.func)
+importPackage(Packages.arc.graphics)
+importPackage(Packages.arc.graphics.g2d)
+importPackage(Packages.arc.math)
+importPackage(Packages.arc.math.geom)
+importPackage(Packages.arc.scene)
+importPackage(Packages.arc.scene.actions)
+importPackage(Packages.arc.scene.event)
+importPackage(Packages.arc.scene.style)
+importPackage(Packages.arc.scene.ui)
+importPackage(Packages.arc.scene.ui.layout)
+importPackage(Packages.arc.scene.utils)
+importPackage(Packages.arc.struct)
+importPackage(Packages.arc.util)
+importPackage(Packages.mindustry)
+importPackage(Packages.mindustry.ai)
+importPackage(Packages.mindustry.content)
+importPackage(Packages.mindustry.core)
+importPackage(Packages.mindustry.ctype)
+importPackage(Packages.mindustry.editor)
+importPackage(Packages.mindustry.entities)
+importPackage(Packages.mindustry.entities.bullet)
+importPackage(Packages.mindustry.entities.effect)
+importPackage(Packages.mindustry.entities.traits)
+importPackage(Packages.mindustry.entities.type)
+importPackage(Packages.mindustry.entities.type.base)
+importPackage(Packages.mindustry.entities.units)
+importPackage(Packages.mindustry.game)
+importPackage(Packages.mindustry.gen)
+importPackage(Packages.mindustry.graphics)
+importPackage(Packages.mindustry.input)
+importPackage(Packages.mindustry.maps)
+importPackage(Packages.mindustry.maps.filters)
+importPackage(Packages.mindustry.maps.generators)
+importPackage(Packages.mindustry.maps.zonegen)
+importPackage(Packages.mindustry.type)
+importPackage(Packages.mindustry.ui)
+importPackage(Packages.mindustry.ui.dialogs)
+importPackage(Packages.mindustry.ui.fragments)
+importPackage(Packages.mindustry.ui.layout)
+importPackage(Packages.mindustry.world)
+importPackage(Packages.mindustry.world.blocks)
+importPackage(Packages.mindustry.world.blocks.defense)
+importPackage(Packages.mindustry.world.blocks.defense.turrets)
+importPackage(Packages.mindustry.world.blocks.distribution)
+importPackage(Packages.mindustry.world.blocks.liquid)
+importPackage(Packages.mindustry.world.blocks.logic)
+importPackage(Packages.mindustry.world.blocks.power)
+importPackage(Packages.mindustry.world.blocks.production)
+importPackage(Packages.mindustry.world.blocks.sandbox)
+importPackage(Packages.mindustry.world.blocks.storage)
+importPackage(Packages.mindustry.world.blocks.units)
+importPackage(Packages.mindustry.world.consumers)
+importPackage(Packages.mindustry.world.meta)
+importPackage(Packages.mindustry.world.meta.values)
+importPackage(Packages.mindustry.world.modules)
+importPackage(Packages.mindustry.world.producers)
diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png
index 9a8a3dfdb2..65838bd5f5 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 693796cfff..c23fb40fb5 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, 959
+ xy: 1754, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -34,35 +34,35 @@ overdrive-projector-top
index: -1
shock-mine
rotate: false
- xy: 1641, 857
+ xy: 1607, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
bridge-arrow
rotate: false
- xy: 1886, 1061
+ xy: 1920, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
bridge-conveyor-bridge
rotate: false
- xy: 1920, 1061
+ xy: 1954, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
bridge-conveyor-end
rotate: false
- xy: 1954, 1095
+ xy: 1988, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
center
rotate: false
- xy: 1988, 1129
+ xy: 1954, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -216,266 +216,266 @@ armored-conveyor-4-3
index: -1
conveyor-0-1
rotate: false
- xy: 1920, 1027
+ xy: 1954, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-0-2
rotate: false
- xy: 1954, 1027
+ xy: 1988, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-0-3
rotate: false
- xy: 1988, 1027
+ xy: 1368, 1035
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-1-0
rotate: false
- xy: 1368, 1035
+ xy: 1402, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-1-1
rotate: false
- xy: 1402, 1027
+ xy: 1436, 1019
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-1-2
rotate: false
- xy: 1436, 1019
+ xy: 1470, 1019
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-1-3
rotate: false
- xy: 1470, 1019
+ xy: 1504, 1019
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-2-0
rotate: false
- xy: 1504, 1019
+ xy: 1301, 835
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-2-1
rotate: false
- xy: 1301, 835
+ xy: 1335, 835
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-2-2
rotate: false
- xy: 1335, 835
+ xy: 1369, 843
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-2-3
rotate: false
- xy: 1369, 843
+ xy: 1369, 809
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-3-0
rotate: false
- xy: 1369, 809
+ xy: 1538, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-3-1
rotate: false
- xy: 1538, 993
+ xy: 1572, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-3-2
rotate: false
- xy: 1572, 993
+ xy: 1606, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-3-3
rotate: false
- xy: 1606, 993
+ xy: 1640, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-4-0
rotate: false
- xy: 1640, 993
+ xy: 1674, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-4-1
rotate: false
- xy: 1674, 993
+ xy: 1708, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-4-2
rotate: false
- xy: 1708, 993
+ xy: 1742, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conveyor-4-3
rotate: false
- xy: 1742, 993
+ xy: 1776, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-0-1
rotate: false
- xy: 1641, 823
+ xy: 1675, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-0-2
rotate: false
- xy: 1675, 857
+ xy: 1641, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-0-3
rotate: false
- xy: 1641, 789
+ xy: 1675, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-1-0
rotate: false
- xy: 1675, 823
+ xy: 1709, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-1-1
rotate: false
- xy: 1709, 857
+ xy: 1675, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-1-2
rotate: false
- xy: 1675, 789
+ xy: 1709, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-1-3
rotate: false
- xy: 1709, 823
+ xy: 1743, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-2-0
rotate: false
- xy: 1743, 857
+ xy: 1709, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-2-1
rotate: false
- xy: 1709, 789
+ xy: 1743, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-2-2
rotate: false
- xy: 1743, 823
+ xy: 1777, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-2-3
rotate: false
- xy: 1777, 857
+ xy: 1743, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-3-0
rotate: false
- xy: 1743, 789
+ xy: 1777, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-3-1
rotate: false
- xy: 1777, 823
+ xy: 1811, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-3-2
rotate: false
- xy: 1811, 857
+ xy: 1777, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-3-3
rotate: false
- xy: 1777, 789
+ xy: 1811, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-4-0
rotate: false
- xy: 1811, 823
+ xy: 1845, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-4-1
rotate: false
- xy: 1845, 857
+ xy: 1811, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-4-2
rotate: false
- xy: 1811, 789
+ xy: 1845, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-4-3
rotate: false
- xy: 1845, 823
+ xy: 1879, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -489,21 +489,21 @@ mass-driver-base
index: -1
phase-conveyor-arrow
rotate: false
- xy: 1788, 891
+ xy: 1822, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-conveyor-bridge
rotate: false
- xy: 1822, 925
+ xy: 1856, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-conveyor-end
rotate: false
- xy: 1856, 959
+ xy: 1822, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -685,21 +685,21 @@ block-border
index: -1
block-middle
rotate: false
- xy: 1546, 1095
+ xy: 1580, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-select
rotate: false
- xy: 1784, 1129
+ xy: 1818, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-liquid
rotate: false
- xy: 1648, 1027
+ xy: 1682, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -825,175 +825,175 @@ rubble-8-1
index: -1
bridge-conduit-arrow
rotate: false
- xy: 1920, 1095
+ xy: 1954, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
bridge-conveyor-arrow
rotate: false
- xy: 1920, 1095
+ xy: 1954, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
bridge-conduit-bridge
rotate: false
- xy: 1954, 1129
+ xy: 1988, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
bridge-conduit-end
rotate: false
- xy: 1988, 1163
+ xy: 1920, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom
rotate: false
- xy: 1988, 1095
+ xy: 1988, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom-0
rotate: false
- xy: 1988, 1061
+ xy: 1546, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom-1
rotate: false
- xy: 1546, 1027
+ xy: 1580, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom-2
rotate: false
- xy: 1580, 1027
+ xy: 1614, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom-3
rotate: false
- xy: 1580, 1027
+ xy: 1614, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom-4
rotate: false
- xy: 1580, 1027
+ xy: 1614, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom-6
rotate: false
- xy: 1580, 1027
+ xy: 1614, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-bottom-5
rotate: false
- xy: 1614, 1027
+ xy: 1648, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-top-0
rotate: false
- xy: 1682, 1027
+ xy: 1716, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-top-1
rotate: false
- xy: 1716, 1027
+ xy: 1750, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-top-2
rotate: false
- xy: 1750, 1027
+ xy: 1784, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-top-3
rotate: false
- xy: 1784, 1027
+ xy: 1818, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-top-3
rotate: false
- xy: 1784, 1027
+ xy: 1818, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-top-4
rotate: false
- xy: 1818, 1027
+ xy: 1852, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-top-5
rotate: false
- xy: 1852, 1027
+ xy: 1886, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
conduit-top-6
rotate: false
- xy: 1886, 1027
+ xy: 1920, 1027
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-overflow-gate
rotate: false
- xy: 1686, 959
+ xy: 1652, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-overflow-gate-top
rotate: false
- xy: 1652, 891
+ xy: 1686, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-router-bottom
rotate: false
- xy: 1686, 925
+ xy: 1720, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-router-liquid
rotate: false
- xy: 1720, 959
+ xy: 1686, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-router-top
rotate: false
- xy: 1686, 891
+ xy: 1720, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1021,119 +1021,119 @@ liquid-tank-top
index: -1
phase-conduit-arrow
rotate: false
- xy: 1754, 891
+ xy: 1788, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-conduit-bridge
rotate: false
- xy: 1788, 925
+ xy: 1822, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-conduit-end
rotate: false
- xy: 1822, 959
+ xy: 1788, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-cap
rotate: false
- xy: 1822, 891
+ xy: 1856, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-top-0
rotate: false
- xy: 1856, 925
+ xy: 1890, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-top-1
rotate: false
- xy: 1890, 959
+ xy: 1856, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-top-2
rotate: false
- xy: 1856, 891
+ xy: 1890, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-top-3
rotate: false
- xy: 1890, 925
+ xy: 1924, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-top-4
rotate: false
- xy: 1924, 959
+ xy: 1890, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-top-5
rotate: false
- xy: 1890, 891
+ xy: 1924, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plated-conduit-top-6
rotate: false
- xy: 1924, 925
+ xy: 1958, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-top-0
rotate: false
- xy: 1924, 891
+ xy: 1958, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-top-1
rotate: false
- xy: 1958, 925
+ xy: 1992, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-top-2
rotate: false
- xy: 1992, 959
+ xy: 1958, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-top-4
rotate: false
- xy: 1958, 891
+ xy: 1992, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-top-5
rotate: false
- xy: 1992, 925
+ xy: 1992, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-top-6
rotate: false
- xy: 1992, 891
+ xy: 1505, 849
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1168,7 +1168,7 @@ block-battery-large-full
index: -1
combustion-generator-top
rotate: false
- xy: 1954, 1061
+ xy: 1988, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1189,14 +1189,14 @@ differential-generator-top
index: -1
diode-arrow
rotate: false
- xy: 1301, 801
+ xy: 1335, 801
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
illuminator-top
rotate: false
- xy: 1380, 925
+ xy: 1380, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1252,14 +1252,14 @@ impact-reactor-plasma-3
index: -1
power-source
rotate: false
- xy: 1958, 959
+ xy: 1924, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
rtg-generator-top
rotate: false
- xy: 1573, 857
+ xy: 1539, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1406,21 +1406,21 @@ plastanium-compressor-top
index: -1
pulverizer
rotate: false
- xy: 1505, 849
+ xy: 1505, 815
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulverizer-rotator
rotate: false
- xy: 1505, 815
+ xy: 1505, 781
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pump-liquid
rotate: false
- xy: 1505, 781
+ xy: 1539, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1476,7 +1476,7 @@ spore-press-top
index: -1
unloader-center
rotate: false
- xy: 1845, 789
+ xy: 1879, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1567,7 +1567,7 @@ salvo-panel-right
index: -1
scorch-heat
rotate: false
- xy: 1573, 823
+ xy: 1607, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1693,7 +1693,7 @@ rally-point
index: -1
repair-point-base
rotate: false
- xy: 1539, 823
+ xy: 1573, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1742,14 +1742,14 @@ door-large-open
index: -1
door-open
rotate: false
- xy: 1335, 801
+ xy: 1369, 775
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
insulator-wall
rotate: false
- xy: 1380, 891
+ xy: 1380, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1805,28 +1805,28 @@ scrap-wall-large4
index: -1
scrap-wall2
rotate: false
- xy: 1607, 857
+ xy: 1573, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
scrap-wall3
rotate: false
- xy: 1573, 789
+ xy: 1607, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
scrap-wall4
rotate: false
- xy: 1607, 823
+ xy: 1641, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
scrap-wall5
rotate: false
- xy: 1607, 823
+ xy: 1641, 857
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1980,7 +1980,7 @@ shell-back
index: -1
shot
rotate: false
- xy: 1607, 789
+ xy: 1641, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -1994,7 +1994,7 @@ transfer
index: -1
transfer-arrow
rotate: false
- xy: 1879, 857
+ xy: 1845, 789
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -2783,13 +2783,27 @@ block-liquid-tank-full
orig: 96, 96
offset: 0, 0
index: -1
-block-magmarock-full
+block-liquid-void-full
rotate: false
xy: 1512, 1155
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
+liquid-void
+ rotate: false
+ xy: 1512, 1155
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-magmarock-full
+ rotate: false
+ xy: 1512, 1121
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
block-mass-driver-full
rotate: false
xy: 423, 44
@@ -2806,14 +2820,14 @@ block-mechanical-drill-full
index: -1
block-mechanical-pump-full
rotate: false
- xy: 1512, 1121
+ xy: 1512, 1087
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
mechanical-pump
rotate: false
- xy: 1512, 1121
+ xy: 1512, 1087
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -2827,14 +2841,14 @@ block-meltdown-full
index: -1
block-melter-full
rotate: false
- xy: 1512, 1087
+ xy: 1512, 1053
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
melter
rotate: false
- xy: 1512, 1087
+ xy: 1512, 1053
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -2855,70 +2869,70 @@ mend-projector
index: -1
block-mender-full
rotate: false
- xy: 1512, 1053
+ xy: 1546, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
mender
rotate: false
- xy: 1512, 1053
+ xy: 1546, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-message-full
rotate: false
- xy: 1546, 1197
+ xy: 1546, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
message
rotate: false
- xy: 1546, 1197
+ xy: 1546, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-metal-floor-2-full
rotate: false
- xy: 1546, 1163
+ xy: 1580, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-metal-floor-3-full
rotate: false
- xy: 1580, 1197
+ xy: 1546, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-metal-floor-5-full
rotate: false
- xy: 1546, 1129
+ xy: 1580, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-metal-floor-damaged-full
rotate: false
- xy: 1580, 1163
+ xy: 1614, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-metal-floor-full
rotate: false
- xy: 1614, 1197
+ xy: 1546, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-moss-full
rotate: false
- xy: 1580, 1129
+ xy: 1614, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -2960,14 +2974,14 @@ omega-mech-pad
index: -1
block-ore-coal-full
rotate: false
- xy: 1614, 1163
+ xy: 1648, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ore-coal-medium
rotate: false
- xy: 1614, 1163
+ xy: 1648, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3002,14 +3016,14 @@ block-ore-coal-xlarge
index: -1
block-ore-copper-full
rotate: false
- xy: 1648, 1197
+ xy: 1546, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ore-copper-medium
rotate: false
- xy: 1648, 1197
+ xy: 1546, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3044,14 +3058,14 @@ block-ore-copper-xlarge
index: -1
block-ore-lead-full
rotate: false
- xy: 1546, 1061
+ xy: 1580, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ore-lead-medium
rotate: false
- xy: 1546, 1061
+ xy: 1580, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3086,14 +3100,14 @@ block-ore-lead-xlarge
index: -1
block-ore-scrap-full
rotate: false
- xy: 1580, 1095
+ xy: 1614, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ore-scrap-medium
rotate: false
- xy: 1580, 1095
+ xy: 1614, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3128,14 +3142,14 @@ block-ore-scrap-xlarge
index: -1
block-ore-thorium-full
rotate: false
- xy: 1614, 1129
+ xy: 1648, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ore-thorium-medium
rotate: false
- xy: 1614, 1129
+ xy: 1648, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3170,14 +3184,14 @@ block-ore-thorium-xlarge
index: -1
block-ore-titanium-full
rotate: false
- xy: 1648, 1163
+ xy: 1682, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ore-titanium-medium
rotate: false
- xy: 1648, 1163
+ xy: 1682, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3226,21 +3240,21 @@ overdrive-projector
index: -1
block-overflow-gate-full
rotate: false
- xy: 1682, 1197
+ xy: 1580, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
overflow-gate
rotate: false
- xy: 1682, 1197
+ xy: 1580, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-pebbles-full
rotate: false
- xy: 1580, 1061
+ xy: 1614, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3254,42 +3268,42 @@ block-phantom-factory-full
index: -1
block-phase-conduit-full
rotate: false
- xy: 1614, 1095
+ xy: 1648, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-conduit
rotate: false
- xy: 1614, 1095
+ xy: 1648, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-phase-conveyor-full
rotate: false
- xy: 1648, 1129
+ xy: 1682, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-conveyor
rotate: false
- xy: 1648, 1129
+ xy: 1682, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-phase-wall-full
rotate: false
- xy: 1682, 1163
+ xy: 1716, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-wall
rotate: false
- xy: 1682, 1163
+ xy: 1716, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3338,14 +3352,14 @@ plastanium-compressor
index: -1
block-plastanium-wall-full
rotate: false
- xy: 1716, 1197
+ xy: 1614, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
plastanium-wall
rotate: false
- xy: 1716, 1197
+ xy: 1614, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3366,7 +3380,7 @@ plastanium-wall-large
index: -1
block-plated-conduit-full
rotate: false
- xy: 1614, 1061
+ xy: 1648, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3380,14 +3394,14 @@ block-pneumatic-drill-full
index: -1
block-power-node-full
rotate: false
- xy: 1648, 1095
+ xy: 1682, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
power-node
rotate: false
- xy: 1648, 1095
+ xy: 1682, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3408,35 +3422,35 @@ power-node-large
index: -1
block-power-source-full
rotate: false
- xy: 1682, 1129
+ xy: 1716, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-power-void-full
rotate: false
- xy: 1716, 1163
+ xy: 1750, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
power-void
rotate: false
- xy: 1716, 1163
+ xy: 1750, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-pulse-conduit-full
rotate: false
- xy: 1750, 1197
+ xy: 1648, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-pulverizer-full
rotate: false
- xy: 1648, 1061
+ xy: 1682, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3457,7 +3471,7 @@ pyratite-mixer
index: -1
block-repair-point-full
rotate: false
- xy: 1682, 1095
+ xy: 1716, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3485,7 +3499,7 @@ block-rock-full
index: -1
block-rocks-full
rotate: false
- xy: 1716, 1129
+ xy: 1750, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3506,14 +3520,14 @@ rotary-pump
index: -1
block-router-full
rotate: false
- xy: 1750, 1163
+ xy: 1784, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
router
rotate: false
- xy: 1750, 1163
+ xy: 1784, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3534,14 +3548,14 @@ rtg-generator
index: -1
block-salt-full
rotate: false
- xy: 1784, 1197
+ xy: 1682, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-saltrocks-full
rotate: false
- xy: 1682, 1061
+ xy: 1716, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3555,28 +3569,28 @@ block-salvo-full
index: -1
block-sand-boulder-full
rotate: false
- xy: 1716, 1095
+ xy: 1750, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-sand-full
rotate: false
- xy: 1750, 1129
+ xy: 1784, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-sand-water-full
rotate: false
- xy: 1784, 1163
+ xy: 1818, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-sandrocks-full
rotate: false
- xy: 1818, 1197
+ xy: 1716, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3590,21 +3604,21 @@ block-scatter-full
index: -1
block-scorch-full
rotate: false
- xy: 1716, 1061
+ xy: 1750, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-scrap-wall-full
rotate: false
- xy: 1750, 1095
+ xy: 1784, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
scrap-wall1
rotate: false
- xy: 1750, 1095
+ xy: 1784, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3660,35 +3674,35 @@ separator
index: -1
block-shale-boulder-full
rotate: false
- xy: 1818, 1163
+ xy: 1852, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-shale-full
rotate: false
- xy: 1852, 1197
+ xy: 1750, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-shalerocks-full
rotate: false
- xy: 1750, 1061
+ xy: 1784, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-shock-mine-full
rotate: false
- xy: 1784, 1095
+ xy: 1818, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-shrubs-full
rotate: false
- xy: 1818, 1129
+ xy: 1852, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3709,7 +3723,7 @@ silicon-smelter
index: -1
block-snow-full
rotate: false
- xy: 1852, 1163
+ xy: 1886, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3730,21 +3744,21 @@ block-snowrock-full
index: -1
block-snowrocks-full
rotate: false
- xy: 1886, 1197
+ xy: 1784, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-solar-panel-full
rotate: false
- xy: 1784, 1061
+ xy: 1818, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
solar-panel
rotate: false
- xy: 1784, 1061
+ xy: 1818, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3765,21 +3779,21 @@ solar-panel-large
index: -1
block-sorter-full
rotate: false
- xy: 1818, 1095
+ xy: 1852, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
sorter
rotate: false
- xy: 1818, 1095
+ xy: 1852, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-spawn-full
rotate: false
- xy: 1852, 1129
+ xy: 1886, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3807,7 +3821,7 @@ block-spore-cluster-full
index: -1
block-spore-moss-full
rotate: false
- xy: 1886, 1163
+ xy: 1920, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3828,14 +3842,14 @@ block-spore-press-full
index: -1
block-sporerocks-full
rotate: false
- xy: 1920, 1197
+ xy: 1818, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-stone-full
rotate: false
- xy: 1818, 1061
+ xy: 1852, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3856,14 +3870,14 @@ surge-tower
index: -1
block-surge-wall-full
rotate: false
- xy: 1852, 1095
+ xy: 1886, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
surge-wall
rotate: false
- xy: 1852, 1095
+ xy: 1886, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3891,14 +3905,14 @@ block-swarmer-full
index: -1
block-tainted-water-full
rotate: false
- xy: 1886, 1129
+ xy: 1920, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-tar-full
rotate: false
- xy: 1920, 1163
+ xy: 1954, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3919,7 +3933,7 @@ tau-mech-pad
index: -1
block-tendrils-full
rotate: false
- xy: 1954, 1197
+ xy: 1852, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -3968,14 +3982,14 @@ thorium-reactor
index: -1
block-thorium-wall-full
rotate: false
- xy: 1852, 1061
+ xy: 1886, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
thorium-wall
rotate: false
- xy: 1852, 1061
+ xy: 1886, 1095
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4017,28 +4031,28 @@ block-titan-factory-full
index: -1
block-titanium-conveyor-full
rotate: false
- xy: 1886, 1095
+ xy: 1920, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-conveyor-0-0
rotate: false
- xy: 1886, 1095
+ xy: 1920, 1129
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-titanium-wall-full
rotate: false
- xy: 1920, 1129
+ xy: 1954, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-wall
rotate: false
- xy: 1920, 1129
+ xy: 1954, 1163
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4087,14 +4101,14 @@ turbine-generator
index: -1
block-unloader-full
rotate: false
- xy: 1954, 1163
+ xy: 1988, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
unloader
rotate: false
- xy: 1954, 1163
+ xy: 1988, 1197
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4122,7 +4136,7 @@ block-water-extractor-full
index: -1
block-water-full
rotate: false
- xy: 1988, 1197
+ xy: 1886, 1061
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4157,56 +4171,56 @@ block-wraith-factory-full
index: -1
cracks-1-0
rotate: false
- xy: 1776, 993
+ xy: 1810, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
cracks-1-1
rotate: false
- xy: 1810, 993
+ xy: 1844, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
cracks-1-2
rotate: false
- xy: 1844, 993
+ xy: 1878, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
cracks-1-3
rotate: false
- xy: 1878, 993
+ xy: 1912, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
cracks-1-4
rotate: false
- xy: 1912, 993
+ xy: 1946, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
cracks-1-5
rotate: false
- xy: 1946, 993
+ xy: 1980, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
cracks-1-6
rotate: false
- xy: 1980, 993
+ xy: 2014, 993
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
cracks-1-7
rotate: false
- xy: 2014, 993
+ xy: 1301, 801
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4444,7 +4458,7 @@ cyclone
index: -1
duo
rotate: false
- xy: 1369, 775
+ xy: 1380, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4458,7 +4472,7 @@ fuse
index: -1
hail
rotate: false
- xy: 1380, 959
+ xy: 1380, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4472,14 +4486,14 @@ item-blast-compound-large
index: -1
item-blast-compound-medium
rotate: false
- xy: 1414, 985
+ xy: 1414, 951
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-blast-compound-small
rotate: false
- xy: 1879, 831
+ xy: 1913, 865
size: 24, 24
orig: 24, 24
offset: 0, 0
@@ -4507,14 +4521,14 @@ item-coal-large
index: -1
item-coal-medium
rotate: false
- xy: 1448, 985
+ xy: 1414, 917
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-coal-small
rotate: false
- xy: 1913, 865
+ xy: 1879, 797
size: 24, 24
orig: 24, 24
offset: 0, 0
@@ -4542,7 +4556,7 @@ item-copper-large
index: -1
item-copper-medium
rotate: false
- xy: 1448, 951
+ xy: 1482, 985
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4577,7 +4591,7 @@ item-graphite-large
index: -1
item-graphite-medium
rotate: false
- xy: 1448, 917
+ xy: 1482, 951
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4612,7 +4626,7 @@ item-lead-large
index: -1
item-lead-medium
rotate: false
- xy: 1482, 917
+ xy: 1414, 883
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4647,7 +4661,7 @@ item-metaglass-large
index: -1
item-metaglass-medium
rotate: false
- xy: 1448, 883
+ xy: 1482, 883
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4682,14 +4696,14 @@ item-phase-fabric-large
index: -1
item-phase-fabric-medium
rotate: false
- xy: 1403, 849
+ xy: 1403, 815
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-phase-fabric-small
rotate: false
- xy: 1879, 805
+ xy: 1913, 839
size: 24, 24
orig: 24, 24
offset: 0, 0
@@ -4717,7 +4731,7 @@ item-plastanium-large
index: -1
item-plastanium-medium
rotate: false
- xy: 1437, 849
+ xy: 1403, 781
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4752,7 +4766,7 @@ item-pyratite-large
index: -1
item-pyratite-medium
rotate: false
- xy: 1437, 815
+ xy: 1471, 849
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4787,7 +4801,7 @@ item-sand-large
index: -1
item-sand-medium
rotate: false
- xy: 1437, 781
+ xy: 1471, 815
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4822,7 +4836,7 @@ item-scrap-large
index: -1
item-scrap-medium
rotate: false
- xy: 1471, 781
+ xy: 1516, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4857,7 +4871,7 @@ item-silicon-large
index: -1
item-silicon-medium
rotate: false
- xy: 1516, 925
+ xy: 1550, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -4892,21 +4906,21 @@ item-spore-pod-large
index: -1
item-spore-pod-medium
rotate: false
- xy: 1516, 891
+ xy: 1550, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-spore-pod-small
rotate: false
- xy: 1965, 865
+ xy: 1939, 839
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
item-spore-pod-tiny
rotate: false
- xy: 1329, 757
+ xy: 1303, 731
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -4927,21 +4941,21 @@ item-surge-alloy-large
index: -1
item-surge-alloy-medium
rotate: false
- xy: 1584, 959
+ xy: 1550, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-surge-alloy-small
rotate: false
- xy: 1321, 775
+ xy: 1965, 865
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
item-surge-alloy-tiny
rotate: false
- xy: 1251, 271
+ xy: 1329, 757
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -4962,21 +4976,21 @@ item-thorium-large
index: -1
item-thorium-medium
rotate: false
- xy: 1584, 925
+ xy: 1618, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-thorium-small
rotate: false
- xy: 1303, 749
+ xy: 1321, 775
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
item-thorium-tiny
rotate: false
- xy: 1303, 705
+ xy: 1251, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -4997,21 +5011,21 @@ item-titanium-large
index: -1
item-titanium-medium
rotate: false
- xy: 1584, 891
+ xy: 1618, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-titanium-small
rotate: false
- xy: 1251, 289
+ xy: 1303, 749
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
item-titanium-tiny
rotate: false
- xy: 1273, 551
+ xy: 1273, 577
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -5039,21 +5053,21 @@ liquid-cryofluid-large
index: -1
liquid-cryofluid-medium
rotate: false
- xy: 1652, 959
+ xy: 1618, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-cryofluid-small
rotate: false
- xy: 1273, 595
+ xy: 1251, 289
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
liquid-cryofluid-tiny
rotate: false
- xy: 222, 1129
+ xy: 1991, 847
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -5074,21 +5088,21 @@ liquid-oil-large
index: -1
liquid-oil-medium
rotate: false
- xy: 1652, 925
+ xy: 1686, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-oil-small
rotate: false
- xy: 1991, 865
+ xy: 1273, 595
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
liquid-oil-tiny
rotate: false
- xy: 584, 929
+ xy: 222, 1129
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -5109,21 +5123,21 @@ liquid-slag-large
index: -1
liquid-slag-medium
rotate: false
- xy: 1754, 959
+ xy: 1720, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-slag-small
rotate: false
- xy: 1303, 723
+ xy: 1965, 839
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
liquid-slag-tiny
rotate: false
- xy: 678, 831
+ xy: 584, 929
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -5144,21 +5158,21 @@ liquid-water-large
index: -1
liquid-water-medium
rotate: false
- xy: 1754, 925
+ xy: 1788, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-water-small
rotate: false
- xy: 1273, 569
+ xy: 1991, 865
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
liquid-water-tiny
rotate: false
- xy: 767, 733
+ xy: 678, 831
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -5242,7 +5256,7 @@ meltdown
index: -1
repair-point
rotate: false
- xy: 1539, 857
+ xy: 1539, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -5270,7 +5284,7 @@ scatter
index: -1
scorch
rotate: false
- xy: 1539, 789
+ xy: 1573, 823
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -5347,140 +5361,140 @@ wave
index: -1
item-blast-compound
rotate: false
- xy: 1380, 993
+ xy: 1414, 985
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-coal
rotate: false
- xy: 1414, 951
+ xy: 1448, 985
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-copper
rotate: false
- xy: 1414, 917
+ xy: 1448, 951
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-graphite
rotate: false
- xy: 1482, 985
+ xy: 1448, 917
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-lead
rotate: false
- xy: 1482, 951
+ xy: 1482, 917
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-metaglass
rotate: false
- xy: 1414, 883
+ xy: 1448, 883
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-phase-fabric
rotate: false
- xy: 1482, 883
+ xy: 1403, 849
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-plastanium
rotate: false
- xy: 1403, 815
+ xy: 1437, 849
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-pyratite
rotate: false
- xy: 1403, 781
+ xy: 1437, 815
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-sand
rotate: false
- xy: 1471, 849
+ xy: 1437, 781
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-scrap
rotate: false
- xy: 1471, 815
+ xy: 1471, 781
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-silicon
rotate: false
- xy: 1516, 959
+ xy: 1516, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-spore-pod
rotate: false
- xy: 1550, 959
+ xy: 1516, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-surge-alloy
rotate: false
- xy: 1550, 925
+ xy: 1584, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-thorium
rotate: false
- xy: 1550, 891
+ xy: 1584, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
item-titanium
rotate: false
- xy: 1618, 959
+ xy: 1584, 891
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-cryofluid
rotate: false
- xy: 1618, 925
+ xy: 1652, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-oil
rotate: false
- xy: 1618, 891
+ xy: 1652, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-slag
rotate: false
- xy: 1720, 925
+ xy: 1754, 959
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
liquid-water
rotate: false
- xy: 1720, 891
+ xy: 1754, 925
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8689,6 +8703,13 @@ liquid-tank-icon-editor
orig: 96, 96
offset: 0, 0
index: -1
+liquid-void-icon-editor
+ rotate: false
+ xy: 1821, 827
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
mass-driver-icon-editor
rotate: false
xy: 1823, 927
@@ -8705,7 +8726,7 @@ mechanical-drill-icon-editor
index: -1
mechanical-pump-icon-editor
rotate: false
- xy: 1821, 827
+ xy: 1855, 827
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8719,7 +8740,7 @@ meltdown-icon-editor
index: -1
melter-icon-editor
rotate: false
- xy: 1855, 827
+ xy: 1889, 827
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8733,14 +8754,14 @@ mend-projector-icon-editor
index: -1
mender-icon-editor
rotate: false
- xy: 1889, 827
+ xy: 1923, 827
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
message-icon-editor
rotate: false
- xy: 1923, 827
+ xy: 1957, 827
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8775,14 +8796,14 @@ overdrive-projector-icon-editor
index: -1
overflow-gate-icon-editor
rotate: false
- xy: 1957, 827
+ xy: 717, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pebbles-icon-editor
rotate: false
- xy: 717, 793
+ xy: 717, 759
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8796,21 +8817,21 @@ phantom-factory-icon-editor
index: -1
phase-conduit-icon-editor
rotate: false
- xy: 717, 759
+ xy: 751, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-conveyor-icon-editor
rotate: false
- xy: 751, 793
+ xy: 717, 725
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
phase-wall-icon-editor
rotate: false
- xy: 717, 725
+ xy: 785, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8845,7 +8866,7 @@ plastanium-compressor-icon-editor
index: -1
plastanium-wall-icon-editor
rotate: false
- xy: 785, 793
+ xy: 751, 759
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8859,7 +8880,7 @@ plastanium-wall-large-icon-editor
index: -1
plated-conduit-icon-editor
rotate: false
- xy: 751, 759
+ xy: 717, 691
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8873,7 +8894,7 @@ pneumatic-drill-icon-editor
index: -1
power-node-icon-editor
rotate: false
- xy: 717, 691
+ xy: 819, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8887,28 +8908,28 @@ power-node-large-icon-editor
index: -1
power-source-icon-editor
rotate: false
- xy: 819, 793
+ xy: 785, 759
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
power-void-icon-editor
rotate: false
- xy: 785, 759
+ xy: 751, 725
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulse-conduit-icon-editor
rotate: false
- xy: 751, 725
+ xy: 717, 657
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
pulverizer-icon-editor
rotate: false
- xy: 717, 657
+ xy: 853, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8922,7 +8943,7 @@ pyratite-mixer-icon-editor
index: -1
repair-point-icon-editor
rotate: false
- xy: 853, 793
+ xy: 819, 759
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8950,7 +8971,7 @@ rock-icon-editor
index: -1
rocks-icon-editor
rotate: false
- xy: 819, 759
+ xy: 785, 725
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8964,7 +8985,7 @@ rotary-pump-icon-editor
index: -1
router-icon-editor
rotate: false
- xy: 785, 725
+ xy: 751, 691
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8978,7 +8999,7 @@ rtg-generator-icon-editor
index: -1
saltrocks-icon-editor
rotate: false
- xy: 751, 691
+ xy: 717, 623
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -8992,14 +9013,14 @@ salvo-icon-editor
index: -1
sand-boulder-icon-editor
rotate: false
- xy: 717, 623
+ xy: 887, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
sandrocks-icon-editor
rotate: false
- xy: 887, 793
+ xy: 853, 759
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9013,7 +9034,7 @@ scatter-icon-editor
index: -1
scorch-icon-editor
rotate: false
- xy: 853, 759
+ xy: 819, 725
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9034,7 +9055,7 @@ scrap-wall-huge-icon-editor
index: -1
scrap-wall-icon-editor
rotate: false
- xy: 819, 725
+ xy: 785, 691
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9055,28 +9076,28 @@ separator-icon-editor
index: -1
shale-boulder-icon-editor
rotate: false
- xy: 785, 691
+ xy: 751, 657
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
shalerocks-icon-editor
rotate: false
- xy: 751, 657
+ xy: 717, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
shock-mine-icon-editor
rotate: false
- xy: 717, 589
+ xy: 921, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
shrubs-icon-editor
rotate: false
- xy: 921, 793
+ xy: 887, 759
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9090,7 +9111,7 @@ silicon-smelter-icon-editor
index: -1
snow-icon-editor
rotate: false
- xy: 887, 759
+ xy: 853, 725
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9111,14 +9132,14 @@ snowrock-icon-editor
index: -1
snowrocks-icon-editor
rotate: false
- xy: 853, 725
+ xy: 819, 691
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
solar-panel-icon-editor
rotate: false
- xy: 819, 691
+ xy: 785, 657
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9132,14 +9153,14 @@ solar-panel-large-icon-editor
index: -1
sorter-icon-editor
rotate: false
- xy: 785, 657
+ xy: 751, 623
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
spawn-icon-editor
rotate: false
- xy: 751, 623
+ xy: 717, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9181,7 +9202,7 @@ spore-press-icon-editor
index: -1
sporerocks-icon-editor
rotate: false
- xy: 717, 555
+ xy: 955, 793
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9195,7 +9216,7 @@ surge-tower-icon-editor
index: -1
surge-wall-icon-editor
rotate: false
- xy: 955, 793
+ xy: 921, 759
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9223,7 +9244,7 @@ tau-mech-pad-icon-editor
index: -1
tendrils-icon-editor
rotate: false
- xy: 921, 759
+ xy: 887, 725
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9251,7 +9272,7 @@ thorium-reactor-icon-editor
index: -1
thorium-wall-icon-editor
rotate: false
- xy: 887, 725
+ xy: 853, 691
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9279,14 +9300,14 @@ titan-factory-icon-editor
index: -1
titanium-conveyor-icon-editor
rotate: false
- xy: 853, 691
+ xy: 819, 657
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
titanium-wall-icon-editor
rotate: false
- xy: 819, 657
+ xy: 785, 623
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9314,7 +9335,7 @@ turbine-generator-icon-editor
index: -1
unloader-icon-editor
rotate: false
- xy: 785, 623
+ xy: 751, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9466,7 +9487,7 @@ alpha-bg
index: -1
bar
rotate: false
- xy: 2019, 869
+ xy: 1500, 131
size: 27, 36
split: 9, 9, 9, 9
orig: 27, 36
@@ -9489,7 +9510,7 @@ block-alloy-smelter-large
index: -1
block-alloy-smelter-medium
rotate: false
- xy: 1839, 647
+ xy: 1223, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9503,7 +9524,7 @@ block-alloy-smelter-small
index: -1
block-alloy-smelter-tiny
rotate: false
- xy: 1609, 350
+ xy: 821, 928
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9524,7 +9545,7 @@ block-arc-large
index: -1
block-arc-medium
rotate: false
- xy: 1873, 647
+ xy: 1257, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -9538,7 +9559,7 @@ block-arc-small
index: -1
block-arc-tiny
rotate: false
- xy: 1971, 567
+ xy: 301, 1
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9552,28 +9573,28 @@ block-arc-xlarge
index: -1
block-armored-conveyor-large
rotate: false
- xy: 851, 36
+ xy: 909, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-armored-conveyor-medium
rotate: false
- xy: 1907, 647
+ xy: 1291, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-armored-conveyor-small
rotate: false
- xy: 1939, 589
+ xy: 1571, 290
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-armored-conveyor-tiny
rotate: false
- xy: 2031, 645
+ xy: 319, 1
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9587,35 +9608,35 @@ block-armored-conveyor-xlarge
index: -1
block-battery-large
rotate: false
- xy: 893, 36
+ xy: 951, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-battery-large-large
rotate: false
- xy: 821, 933
+ xy: 993, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-battery-large-medium
rotate: false
- xy: 1951, 857
+ xy: 1325, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-battery-large-small
rotate: false
- xy: 2019, 780
+ xy: 106, 2
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-battery-large-tiny
rotate: false
- xy: 2031, 627
+ xy: 839, 928
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9629,21 +9650,21 @@ block-battery-large-xlarge
index: -1
block-battery-medium
rotate: false
- xy: 1951, 823
+ xy: 1359, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-battery-small
rotate: false
- xy: 106, 2
+ xy: 1571, 264
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-battery-tiny
rotate: false
- xy: 2031, 609
+ xy: 2031, 705
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9657,28 +9678,28 @@ block-battery-xlarge
index: -1
block-blast-drill-large
rotate: false
- xy: 863, 933
+ xy: 1035, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-blast-drill-medium
rotate: false
- xy: 1951, 789
+ xy: 1393, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-blast-drill-small
rotate: false
- xy: 2019, 754
+ xy: 2021, 915
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-blast-drill-tiny
rotate: false
- xy: 2031, 591
+ xy: 2031, 687
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9692,28 +9713,28 @@ block-blast-drill-xlarge
index: -1
block-blast-mixer-large
rotate: false
- xy: 905, 933
+ xy: 1077, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-blast-mixer-medium
rotate: false
- xy: 1951, 755
+ xy: 1427, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-blast-mixer-small
rotate: false
- xy: 2019, 728
+ xy: 1571, 238
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-blast-mixer-tiny
rotate: false
- xy: 2031, 573
+ xy: 2031, 669
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9727,28 +9748,28 @@ block-blast-mixer-xlarge
index: -1
block-bridge-conduit-large
rotate: false
- xy: 947, 933
+ xy: 1119, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-bridge-conduit-medium
rotate: false
- xy: 1951, 721
+ xy: 1461, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-bridge-conduit-small
rotate: false
- xy: 2019, 702
+ xy: 751, 2
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-bridge-conduit-tiny
rotate: false
- xy: 301, 1
+ xy: 2031, 651
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9762,28 +9783,28 @@ block-bridge-conduit-xlarge
index: -1
block-bridge-conveyor-large
rotate: false
- xy: 989, 933
+ xy: 1161, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-bridge-conveyor-medium
rotate: false
- xy: 1951, 687
+ xy: 1495, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-bridge-conveyor-small
rotate: false
- xy: 1383, 54
+ xy: 777, 2
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-bridge-conveyor-tiny
rotate: false
- xy: 319, 1
+ xy: 1361, 1
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9797,28 +9818,28 @@ block-bridge-conveyor-xlarge
index: -1
block-char-large
rotate: false
- xy: 1031, 933
+ xy: 1203, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-char-medium
rotate: false
- xy: 1979, 899
+ xy: 1529, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-char-small
rotate: false
- xy: 751, 2
+ xy: 803, 2
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-char-tiny
rotate: false
- xy: 131, 540
+ xy: 1379, 1
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9832,28 +9853,28 @@ block-char-xlarge
index: -1
block-cliffs-large
rotate: false
- xy: 1073, 933
+ xy: 1245, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-cliffs-medium
rotate: false
- xy: 2013, 907
+ xy: 1563, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-cliffs-small
rotate: false
- xy: 777, 2
+ xy: 829, 2
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-cliffs-tiny
rotate: false
- xy: 309, 698
+ xy: 131, 540
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9867,28 +9888,28 @@ block-cliffs-xlarge
index: -1
block-coal-centrifuge-large
rotate: false
- xy: 1115, 933
+ xy: 1287, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-coal-centrifuge-medium
rotate: false
- xy: 1985, 865
+ xy: 1597, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-coal-centrifuge-small
rotate: false
- xy: 803, 2
+ xy: 855, 2
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-coal-centrifuge-tiny
rotate: false
- xy: 331, 598
+ xy: 309, 698
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9902,28 +9923,28 @@ block-coal-centrifuge-xlarge
index: -1
block-combustion-generator-large
rotate: false
- xy: 1157, 933
+ xy: 1329, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-combustion-generator-medium
rotate: false
- xy: 1985, 831
+ xy: 1631, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-combustion-generator-small
rotate: false
- xy: 1409, 54
+ xy: 1534, 223
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-combustion-generator-tiny
rotate: false
- xy: 881, 579
+ xy: 331, 598
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9937,28 +9958,28 @@ block-combustion-generator-xlarge
index: -1
block-command-center-large
rotate: false
- xy: 1199, 933
+ xy: 1371, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-command-center-medium
rotate: false
- xy: 1985, 797
+ xy: 1665, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-command-center-small
rotate: false
- xy: 1395, 28
+ xy: 1534, 197
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-command-center-tiny
rotate: false
- xy: 901, 82
+ xy: 1971, 663
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -9972,28 +9993,28 @@ block-command-center-xlarge
index: -1
block-conduit-large
rotate: false
- xy: 1241, 933
+ xy: 1413, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-conduit-medium
rotate: false
- xy: 1985, 763
+ xy: 1699, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-conduit-small
rotate: false
- xy: 1395, 2
+ xy: 1532, 171
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-conduit-tiny
rotate: false
- xy: 1815, 634
+ xy: 881, 581
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10007,21 +10028,21 @@ block-conduit-xlarge
index: -1
block-container-large
rotate: false
- xy: 1283, 933
+ xy: 1455, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-container-medium
rotate: false
- xy: 1985, 729
+ xy: 1733, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-container-small
rotate: false
- xy: 1421, 28
+ xy: 1560, 212
size: 24, 24
orig: 24, 24
offset: 0, 0
@@ -10042,28 +10063,28 @@ block-container-xlarge
index: -1
block-conveyor-large
rotate: false
- xy: 1325, 933
+ xy: 1497, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-conveyor-medium
rotate: false
- xy: 1985, 695
+ xy: 1767, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-conveyor-small
rotate: false
- xy: 1421, 2
+ xy: 1560, 186
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-conveyor-tiny
rotate: false
- xy: 829, 10
+ xy: 2021, 897
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10077,35 +10098,35 @@ block-conveyor-xlarge
index: -1
block-copper-wall-large
rotate: false
- xy: 1367, 933
+ xy: 1539, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-copper-wall-large-large
rotate: false
- xy: 1409, 933
+ xy: 1581, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-copper-wall-large-medium
rotate: false
- xy: 923, 576
+ xy: 1801, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-copper-wall-large-small
rotate: false
- xy: 1681, 524
+ xy: 1558, 160
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-copper-wall-large-tiny
rotate: false
- xy: 1915, 501
+ xy: 881, 10
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10119,21 +10140,21 @@ block-copper-wall-large-xlarge
index: -1
block-copper-wall-medium
rotate: false
- xy: 965, 618
+ xy: 1835, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-copper-wall-small
rotate: false
- xy: 1707, 526
+ xy: 1532, 145
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-copper-wall-tiny
rotate: false
- xy: 1403, 116
+ xy: 1917, 387
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10147,28 +10168,28 @@ block-copper-wall-xlarge
index: -1
block-core-foundation-large
rotate: false
- xy: 1451, 933
+ xy: 1623, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-core-foundation-medium
rotate: false
- xy: 999, 618
+ xy: 1869, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-core-foundation-small
rotate: false
- xy: 1733, 526
+ xy: 1558, 134
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-core-foundation-tiny
rotate: false
- xy: 1577, 108
+ xy: 309, 680
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10182,28 +10203,28 @@ block-core-foundation-xlarge
index: -1
block-core-nucleus-large
rotate: false
- xy: 1493, 933
+ xy: 1665, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-core-nucleus-medium
rotate: false
- xy: 1033, 618
+ xy: 1903, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-core-nucleus-small
rotate: false
- xy: 1759, 526
+ xy: 1586, 212
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-core-nucleus-tiny
rotate: false
- xy: 1809, 348
+ xy: 331, 580
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10217,28 +10238,28 @@ block-core-nucleus-xlarge
index: -1
block-core-shard-large
rotate: false
- xy: 1535, 933
+ xy: 1707, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-core-shard-medium
rotate: false
- xy: 1067, 618
+ xy: 1937, 647
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-core-shard-small
rotate: false
- xy: 1785, 526
+ xy: 1586, 186
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-core-shard-tiny
rotate: false
- xy: 1783, 311
+ xy: 1917, 369
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10252,28 +10273,28 @@ block-core-shard-xlarge
index: -1
block-craters-large
rotate: false
- xy: 1577, 933
+ xy: 1749, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-craters-medium
rotate: false
- xy: 1101, 618
+ xy: 919, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-craters-small
rotate: false
- xy: 1681, 498
+ xy: 1584, 160
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-craters-tiny
rotate: false
- xy: 309, 680
+ xy: 1935, 387
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10287,28 +10308,28 @@ block-craters-xlarge
index: -1
block-crawler-factory-large
rotate: false
- xy: 1619, 933
+ xy: 1791, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-crawler-factory-medium
rotate: false
- xy: 1135, 618
+ xy: 953, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-crawler-factory-small
rotate: false
- xy: 1707, 500
+ xy: 1584, 134
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-crawler-factory-tiny
rotate: false
- xy: 331, 580
+ xy: 1935, 369
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10322,28 +10343,28 @@ block-crawler-factory-xlarge
index: -1
block-cryofluidmixer-large
rotate: false
- xy: 1661, 933
+ xy: 1833, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-cryofluidmixer-medium
rotate: false
- xy: 1169, 618
+ xy: 987, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-cryofluidmixer-small
rotate: false
- xy: 1733, 500
+ xy: 1529, 119
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-cryofluidmixer-tiny
rotate: false
- xy: 899, 579
+ xy: 1953, 387
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10357,28 +10378,28 @@ block-cryofluidmixer-xlarge
index: -1
block-cultivator-large
rotate: false
- xy: 1703, 933
+ xy: 1875, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-cultivator-medium
rotate: false
- xy: 1203, 618
+ xy: 1021, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-cultivator-small
rotate: false
- xy: 1759, 500
+ xy: 1555, 108
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-cultivator-tiny
rotate: false
- xy: 1809, 330
+ xy: 1953, 369
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10392,28 +10413,28 @@ block-cultivator-xlarge
index: -1
block-cyclone-large
rotate: false
- xy: 1745, 933
+ xy: 1917, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-cyclone-medium
rotate: false
- xy: 1237, 618
+ xy: 1055, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-cyclone-small
rotate: false
- xy: 1785, 500
+ xy: 1581, 108
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-cyclone-tiny
rotate: false
- xy: 1783, 293
+ xy: 1971, 387
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10427,28 +10448,28 @@ block-cyclone-xlarge
index: -1
block-dagger-factory-large
rotate: false
- xy: 1787, 933
+ xy: 1959, 933
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-dagger-factory-medium
rotate: false
- xy: 1271, 618
+ xy: 1089, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dagger-factory-small
rotate: false
- xy: 1678, 472
+ xy: 1600, 355
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dagger-factory-tiny
rotate: false
- xy: 1783, 275
+ xy: 1971, 369
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10462,28 +10483,28 @@ block-dagger-factory-xlarge
index: -1
block-dark-metal-large
rotate: false
- xy: 1829, 933
+ xy: 845, 883
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-dark-metal-medium
rotate: false
- xy: 1305, 618
+ xy: 1123, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dark-metal-small
rotate: false
- xy: 1678, 446
+ xy: 1600, 329
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dark-metal-tiny
rotate: false
- xy: 1783, 257
+ xy: 1989, 387
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10497,28 +10518,28 @@ block-dark-metal-xlarge
index: -1
block-dark-panel-1-large
rotate: false
- xy: 1871, 933
+ xy: 859, 841
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-dark-panel-1-medium
rotate: false
- xy: 1339, 618
+ xy: 1157, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dark-panel-1-small
rotate: false
- xy: 1678, 420
+ xy: 1600, 303
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dark-panel-1-tiny
rotate: false
- xy: 1783, 239
+ xy: 1989, 369
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10532,28 +10553,28 @@ block-dark-panel-1-xlarge
index: -1
block-dark-panel-2-large
rotate: false
- xy: 1913, 933
+ xy: 859, 799
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-dark-panel-2-medium
rotate: false
- xy: 1373, 618
+ xy: 1191, 589
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dark-panel-2-small
rotate: false
- xy: 1678, 394
+ xy: 1597, 277
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dark-panel-2-tiny
rotate: false
- xy: 1427, 194
+ xy: 2007, 387
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10567,28 +10588,28 @@ block-dark-panel-2-xlarge
index: -1
block-dark-panel-3-large
rotate: false
- xy: 1955, 933
+ xy: 859, 757
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-dark-panel-3-medium
rotate: false
- xy: 1407, 618
+ xy: 1225, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dark-panel-3-small
rotate: false
- xy: 1811, 496
+ xy: 1597, 251
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dark-panel-3-tiny
rotate: false
- xy: 1427, 176
+ xy: 2007, 369
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10602,28 +10623,28 @@ block-dark-panel-3-xlarge
index: -1
block-dark-panel-4-large
rotate: false
- xy: 845, 891
+ xy: 859, 715
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-dark-panel-4-medium
rotate: false
- xy: 1441, 618
+ xy: 1259, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dark-panel-4-small
rotate: false
- xy: 1837, 493
+ xy: 1607, 108
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dark-panel-4-tiny
rotate: false
- xy: 1429, 158
+ xy: 1397, 3
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10637,28 +10658,28 @@ block-dark-panel-4-xlarge
index: -1
block-dark-panel-5-large
rotate: false
- xy: 887, 891
+ xy: 887, 883
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-dark-panel-5-medium
rotate: false
- xy: 1475, 618
+ xy: 1293, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dark-panel-5-small
rotate: false
- xy: 1863, 493
+ xy: 1623, 277
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dark-panel-5-tiny
rotate: false
- xy: 1429, 140
+ xy: 1415, 3
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10679,21 +10700,21 @@ block-dark-panel-6-large
index: -1
block-dark-panel-6-medium
rotate: false
- xy: 1509, 618
+ xy: 1327, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dark-panel-6-small
rotate: false
- xy: 1889, 493
+ xy: 1623, 251
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dark-panel-6-tiny
rotate: false
- xy: 1429, 122
+ xy: 1433, 3
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10714,14 +10735,14 @@ block-darksand-large
index: -1
block-darksand-medium
rotate: false
- xy: 1543, 618
+ xy: 1361, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-darksand-small
rotate: false
- xy: 1704, 472
+ xy: 1612, 225
size: 24, 24
orig: 24, 24
offset: 0, 0
@@ -10735,21 +10756,21 @@ block-darksand-tainted-water-large
index: -1
block-darksand-tainted-water-medium
rotate: false
- xy: 1577, 618
+ xy: 1395, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-darksand-tainted-water-small
rotate: false
- xy: 1704, 446
+ xy: 1612, 199
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-darksand-tainted-water-tiny
rotate: false
- xy: 1827, 345
+ xy: 2025, 387
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10763,7 +10784,7 @@ block-darksand-tainted-water-xlarge
index: -1
block-darksand-tiny
rotate: false
- xy: 1845, 345
+ xy: 2025, 369
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10777,21 +10798,21 @@ block-darksand-water-large
index: -1
block-darksand-water-medium
rotate: false
- xy: 1611, 618
+ xy: 1429, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-darksand-water-small
rotate: false
- xy: 1704, 420
+ xy: 1612, 173
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-darksand-water-tiny
rotate: false
- xy: 1863, 345
+ xy: 1683, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10819,21 +10840,21 @@ block-dart-mech-pad-large
index: -1
block-dart-mech-pad-medium
rotate: false
- xy: 1645, 618
+ xy: 1463, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dart-mech-pad-small
rotate: false
- xy: 1704, 394
+ xy: 1610, 147
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dart-mech-pad-tiny
rotate: false
- xy: 1881, 345
+ xy: 1701, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10854,21 +10875,21 @@ block-deepwater-large
index: -1
block-deepwater-medium
rotate: false
- xy: 1679, 618
+ xy: 1497, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-deepwater-small
rotate: false
- xy: 1730, 474
+ xy: 1638, 225
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-deepwater-tiny
rotate: false
- xy: 1899, 345
+ xy: 1719, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10889,21 +10910,21 @@ block-delta-mech-pad-large
index: -1
block-delta-mech-pad-medium
rotate: false
- xy: 1713, 618
+ xy: 1531, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-delta-mech-pad-small
rotate: false
- xy: 1730, 448
+ xy: 1638, 199
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-delta-mech-pad-tiny
rotate: false
- xy: 1917, 345
+ xy: 1737, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10924,21 +10945,21 @@ block-differential-generator-large
index: -1
block-differential-generator-medium
rotate: false
- xy: 1747, 618
+ xy: 1565, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-differential-generator-small
rotate: false
- xy: 1756, 474
+ xy: 1638, 173
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-differential-generator-tiny
rotate: false
- xy: 1827, 327
+ xy: 1755, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10959,21 +10980,21 @@ block-diode-large
index: -1
block-diode-medium
rotate: false
- xy: 1781, 618
+ xy: 1599, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-diode-small
rotate: false
- xy: 1730, 422
+ xy: 1636, 147
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-diode-tiny
rotate: false
- xy: 1845, 327
+ xy: 1773, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -10994,21 +11015,21 @@ block-distributor-large
index: -1
block-distributor-medium
rotate: false
- xy: 901, 542
+ xy: 1633, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-distributor-small
rotate: false
- xy: 1756, 448
+ xy: 1633, 121
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-distributor-tiny
rotate: false
- xy: 1863, 327
+ xy: 1791, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11036,21 +11057,21 @@ block-door-large-large
index: -1
block-door-large-medium
rotate: false
- xy: 901, 508
+ xy: 1667, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-door-large-small
rotate: false
- xy: 1782, 474
+ xy: 1633, 95
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-door-large-tiny
rotate: false
- xy: 1881, 327
+ xy: 1809, 361
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11064,21 +11085,21 @@ block-door-large-xlarge
index: -1
block-door-medium
rotate: false
- xy: 901, 474
+ xy: 1701, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-door-small
rotate: false
- xy: 1730, 396
+ xy: 1659, 121
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-door-tiny
rotate: false
- xy: 1899, 327
+ xy: 1678, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11099,21 +11120,21 @@ block-draug-factory-large
index: -1
block-draug-factory-medium
rotate: false
- xy: 901, 440
+ xy: 1735, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-draug-factory-small
rotate: false
- xy: 1756, 422
+ xy: 1659, 95
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-draug-factory-tiny
rotate: false
- xy: 1917, 327
+ xy: 1678, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11134,21 +11155,21 @@ block-dunerocks-large
index: -1
block-dunerocks-medium
rotate: false
- xy: 901, 406
+ xy: 1769, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-dunerocks-small
rotate: false
- xy: 1782, 448
+ xy: 1662, 147
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-dunerocks-tiny
rotate: false
- xy: 1935, 341
+ xy: 1696, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11169,21 +11190,21 @@ block-duo-large
index: -1
block-duo-medium
rotate: false
- xy: 901, 372
+ xy: 1803, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-duo-small
rotate: false
- xy: 1756, 396
+ xy: 1685, 121
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-duo-tiny
rotate: false
- xy: 1935, 323
+ xy: 1714, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11204,21 +11225,21 @@ block-force-projector-large
index: -1
block-force-projector-medium
rotate: false
- xy: 901, 338
+ xy: 1837, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-force-projector-small
rotate: false
- xy: 1782, 422
+ xy: 1685, 95
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-force-projector-tiny
rotate: false
- xy: 1603, 254
+ xy: 1696, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11239,21 +11260,21 @@ block-fortress-factory-large
index: -1
block-fortress-factory-medium
rotate: false
- xy: 901, 304
+ xy: 1871, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-fortress-factory-small
rotate: false
- xy: 1782, 396
+ xy: 1337, 147
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-fortress-factory-tiny
rotate: false
- xy: 1603, 236
+ xy: 1732, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11274,21 +11295,21 @@ block-fuse-large
index: -1
block-fuse-medium
rotate: false
- xy: 901, 270
+ xy: 1905, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-fuse-small
rotate: false
- xy: 1808, 470
+ xy: 1363, 149
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-fuse-tiny
rotate: false
- xy: 1603, 218
+ xy: 1714, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11309,21 +11330,21 @@ block-ghoul-factory-large
index: -1
block-ghoul-factory-medium
rotate: false
- xy: 901, 236
+ xy: 1939, 613
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ghoul-factory-small
rotate: false
- xy: 1808, 444
+ xy: 1337, 121
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-ghoul-factory-tiny
rotate: false
- xy: 1603, 200
+ xy: 1750, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11344,21 +11365,21 @@ block-glaive-ship-pad-large
index: -1
block-glaive-ship-pad-medium
rotate: false
- xy: 901, 202
+ xy: 1225, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-glaive-ship-pad-small
rotate: false
- xy: 1808, 418
+ xy: 1363, 123
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-glaive-ship-pad-tiny
rotate: false
- xy: 1603, 182
+ xy: 1732, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11379,21 +11400,21 @@ block-graphite-press-large
index: -1
block-graphite-press-medium
rotate: false
- xy: 901, 168
+ xy: 1259, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-graphite-press-small
rotate: false
- xy: 1834, 467
+ xy: 1335, 95
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-graphite-press-tiny
rotate: false
- xy: 1603, 164
+ xy: 1768, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11414,21 +11435,21 @@ block-grass-large
index: -1
block-grass-medium
rotate: false
- xy: 901, 134
+ xy: 1293, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-grass-small
rotate: false
- xy: 1860, 467
+ xy: 1335, 69
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-grass-tiny
rotate: false
- xy: 1603, 146
+ xy: 1750, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11449,21 +11470,21 @@ block-hail-large
index: -1
block-hail-medium
rotate: false
- xy: 901, 100
+ xy: 1327, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-hail-small
rotate: false
- xy: 1834, 441
+ xy: 1335, 43
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-hail-tiny
rotate: false
- xy: 1603, 128
+ xy: 1786, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11484,21 +11505,21 @@ block-holostone-large
index: -1
block-holostone-medium
rotate: false
- xy: 935, 542
+ xy: 1361, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-holostone-small
rotate: false
- xy: 1886, 467
+ xy: 1335, 17
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-holostone-tiny
rotate: false
- xy: 1621, 246
+ xy: 1768, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11519,21 +11540,21 @@ block-hotrock-large
index: -1
block-hotrock-medium
rotate: false
- xy: 935, 508
+ xy: 1395, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-hotrock-small
rotate: false
- xy: 1860, 441
+ xy: 1389, 125
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-hotrock-tiny
rotate: false
- xy: 1621, 228
+ xy: 1804, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11547,49 +11568,49 @@ block-hotrock-xlarge
index: -1
block-ice-large
rotate: false
- xy: 859, 849
+ xy: 901, 841
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-ice-medium
rotate: false
- xy: 935, 474
+ xy: 1429, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ice-small
rotate: false
- xy: 1886, 441
+ xy: 1415, 125
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-ice-snow-large
rotate: false
- xy: 901, 849
+ xy: 901, 799
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-ice-snow-medium
rotate: false
- xy: 935, 440
+ xy: 1463, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ice-snow-small
rotate: false
- xy: 1834, 415
+ xy: 1441, 125
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-ice-snow-tiny
rotate: false
- xy: 1639, 246
+ xy: 1786, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11603,7 +11624,7 @@ block-ice-snow-xlarge
index: -1
block-ice-tiny
rotate: false
- xy: 1621, 210
+ xy: 1804, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11617,28 +11638,28 @@ block-ice-xlarge
index: -1
block-icerocks-large
rotate: false
- xy: 859, 807
+ xy: 901, 757
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-icerocks-medium
rotate: false
- xy: 935, 406
+ xy: 1497, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-icerocks-small
rotate: false
- xy: 1860, 415
+ xy: 1467, 117
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-icerocks-tiny
rotate: false
- xy: 1639, 228
+ xy: 1727, 7
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11652,28 +11673,28 @@ block-icerocks-xlarge
index: -1
block-ignarock-large
rotate: false
- xy: 901, 807
+ xy: 901, 715
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-ignarock-medium
rotate: false
- xy: 935, 372
+ xy: 1531, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-ignarock-small
rotate: false
- xy: 1886, 415
+ xy: 1493, 105
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-ignarock-tiny
rotate: false
- xy: 1657, 246
+ xy: 1745, 7
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11694,21 +11715,21 @@ block-illuminator-large
index: -1
block-illuminator-medium
rotate: false
- xy: 935, 338
+ xy: 1565, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-illuminator-small
rotate: false
- xy: 1808, 392
+ xy: 1519, 93
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-illuminator-tiny
rotate: false
- xy: 1621, 192
+ xy: 1763, 7
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11722,28 +11743,28 @@ block-illuminator-xlarge
index: -1
block-impact-reactor-large
rotate: false
- xy: 859, 765
+ xy: 943, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-impact-reactor-medium
rotate: false
- xy: 935, 304
+ xy: 1599, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-impact-reactor-small
rotate: false
- xy: 1834, 389
+ xy: 1545, 82
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-impact-reactor-tiny
rotate: false
- xy: 1639, 210
+ xy: 1891, 350
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11757,28 +11778,28 @@ block-impact-reactor-xlarge
index: -1
block-incinerator-large
rotate: false
- xy: 901, 765
+ xy: 985, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-incinerator-medium
rotate: false
- xy: 935, 270
+ xy: 1633, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-incinerator-small
rotate: false
- xy: 1860, 389
+ xy: 1571, 82
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-incinerator-tiny
rotate: false
- xy: 1657, 228
+ xy: 1909, 350
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11792,28 +11813,28 @@ block-incinerator-xlarge
index: -1
block-inverted-sorter-large
rotate: false
- xy: 943, 807
+ xy: 943, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-inverted-sorter-medium
rotate: false
- xy: 935, 236
+ xy: 1667, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-inverted-sorter-small
rotate: false
- xy: 1886, 389
+ xy: 1597, 82
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-inverted-sorter-tiny
rotate: false
- xy: 1675, 246
+ xy: 1927, 351
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11827,28 +11848,28 @@ block-inverted-sorter-xlarge
index: -1
block-item-source-large
rotate: false
- xy: 985, 849
+ xy: 985, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-item-source-medium
rotate: false
- xy: 935, 202
+ xy: 1701, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-item-source-small
rotate: false
- xy: 1912, 467
+ xy: 1623, 69
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-item-source-tiny
rotate: false
- xy: 1621, 174
+ xy: 1945, 351
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11862,28 +11883,28 @@ block-item-source-xlarge
index: -1
block-item-void-large
rotate: false
- xy: 859, 723
+ xy: 1027, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-item-void-medium
rotate: false
- xy: 935, 168
+ xy: 1735, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-item-void-small
rotate: false
- xy: 1912, 441
+ xy: 1649, 69
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-item-void-tiny
rotate: false
- xy: 1639, 192
+ xy: 1963, 351
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11897,28 +11918,28 @@ block-item-void-xlarge
index: -1
block-javelin-ship-pad-large
rotate: false
- xy: 901, 723
+ xy: 943, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-javelin-ship-pad-medium
rotate: false
- xy: 935, 134
+ xy: 1769, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-javelin-ship-pad-small
rotate: false
- xy: 1912, 415
+ xy: 1675, 69
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-javelin-ship-pad-tiny
rotate: false
- xy: 1657, 210
+ xy: 1981, 351
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11932,28 +11953,28 @@ block-javelin-ship-pad-xlarge
index: -1
block-junction-large
rotate: false
- xy: 943, 765
+ xy: 985, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-junction-medium
rotate: false
- xy: 935, 100
+ xy: 1803, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-junction-small
rotate: false
- xy: 1912, 389
+ xy: 1701, 69
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-junction-tiny
rotate: false
- xy: 1675, 228
+ xy: 1999, 351
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -11967,28 +11988,28 @@ block-junction-xlarge
index: -1
block-kiln-large
rotate: false
- xy: 985, 807
+ xy: 1027, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-kiln-medium
rotate: false
- xy: 957, 576
+ xy: 1837, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-kiln-small
rotate: false
- xy: 1938, 463
+ xy: 1605, 387
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-kiln-tiny
rotate: false
- xy: 1693, 246
+ xy: 2017, 351
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12002,28 +12023,28 @@ block-kiln-xlarge
index: -1
block-lancer-large
rotate: false
- xy: 1027, 849
+ xy: 1069, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-lancer-medium
rotate: false
- xy: 991, 584
+ xy: 1871, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-lancer-small
rotate: false
- xy: 1938, 437
+ xy: 1631, 389
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-lancer-tiny
rotate: false
- xy: 1621, 156
+ xy: 1822, 343
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12037,28 +12058,28 @@ block-lancer-xlarge
index: -1
block-laser-drill-large
rotate: false
- xy: 859, 681
+ xy: 985, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-laser-drill-medium
rotate: false
- xy: 1025, 584
+ xy: 1905, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-laser-drill-small
rotate: false
- xy: 1938, 411
+ xy: 1673, 455
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-laser-drill-tiny
rotate: false
- xy: 1639, 174
+ xy: 1822, 325
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12072,35 +12093,35 @@ block-laser-drill-xlarge
index: -1
block-launch-pad-large
rotate: false
- xy: 901, 681
+ xy: 1027, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-launch-pad-large-large
rotate: false
- xy: 943, 723
+ xy: 1069, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-launch-pad-large-medium
rotate: false
- xy: 1059, 584
+ xy: 1939, 579
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-launch-pad-large-small
rotate: false
- xy: 1938, 385
+ xy: 1699, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-launch-pad-large-tiny
rotate: false
- xy: 1657, 192
+ xy: 1840, 345
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12114,21 +12135,21 @@ block-launch-pad-large-xlarge
index: -1
block-launch-pad-medium
rotate: false
- xy: 1093, 584
+ xy: 901, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-launch-pad-small
rotate: false
- xy: 1964, 445
+ xy: 1725, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-launch-pad-tiny
rotate: false
- xy: 1675, 210
+ xy: 1858, 345
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12142,28 +12163,28 @@ block-launch-pad-xlarge
index: -1
block-liquid-junction-large
rotate: false
- xy: 985, 765
+ xy: 1111, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-liquid-junction-medium
rotate: false
- xy: 1127, 584
+ xy: 901, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-liquid-junction-small
rotate: false
- xy: 1964, 419
+ xy: 1751, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-liquid-junction-tiny
rotate: false
- xy: 1693, 228
+ xy: 1840, 327
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12177,28 +12198,28 @@ block-liquid-junction-xlarge
index: -1
block-liquid-router-large
rotate: false
- xy: 1027, 807
+ xy: 1027, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-liquid-router-medium
rotate: false
- xy: 1161, 584
+ xy: 935, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-liquid-router-small
rotate: false
- xy: 1990, 445
+ xy: 1777, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-liquid-router-tiny
rotate: false
- xy: 1711, 246
+ xy: 1858, 327
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12212,28 +12233,28 @@ block-liquid-router-xlarge
index: -1
block-liquid-source-large
rotate: false
- xy: 1069, 849
+ xy: 1069, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-liquid-source-medium
rotate: false
- xy: 1195, 584
+ xy: 901, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-liquid-source-small
rotate: false
- xy: 1964, 393
+ xy: 1803, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-liquid-source-tiny
rotate: false
- xy: 1621, 138
+ xy: 1701, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12247,28 +12268,28 @@ block-liquid-source-xlarge
index: -1
block-liquid-tank-large
rotate: false
- xy: 943, 681
+ xy: 1111, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
block-liquid-tank-medium
rotate: false
- xy: 1229, 584
+ xy: 935, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
block-liquid-tank-small
rotate: false
- xy: 1990, 419
+ xy: 1829, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
block-liquid-tank-tiny
rotate: false
- xy: 1639, 156
+ xy: 1701, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -12280,3929 +12301,3964 @@ block-liquid-tank-xlarge
orig: 48, 48
offset: 0, 0
index: -1
-block-magmarock-large
- rotate: false
- xy: 985, 723
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-magmarock-medium
- rotate: false
- xy: 1263, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-magmarock-small
- rotate: false
- xy: 1990, 393
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-magmarock-tiny
- rotate: false
- xy: 1657, 174
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-magmarock-xlarge
- rotate: false
- xy: 151, 308
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-mass-driver-large
- rotate: false
- xy: 1027, 765
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-mass-driver-medium
- rotate: false
- xy: 1297, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-mass-driver-small
- rotate: false
- xy: 2016, 445
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-mass-driver-tiny
- rotate: false
- xy: 1675, 192
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-mass-driver-xlarge
- rotate: false
- xy: 201, 358
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-mechanical-drill-large
- rotate: false
- xy: 1069, 807
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-mechanical-drill-medium
- rotate: false
- xy: 1331, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-mechanical-drill-small
- rotate: false
- xy: 2016, 419
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-mechanical-drill-tiny
- rotate: false
- xy: 1693, 210
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-mechanical-drill-xlarge
- rotate: false
- xy: 151, 258
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-mechanical-pump-large
- rotate: false
- xy: 1111, 849
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-mechanical-pump-medium
- rotate: false
- xy: 1365, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-mechanical-pump-small
- rotate: false
- xy: 2016, 393
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-mechanical-pump-tiny
- rotate: false
- xy: 1711, 228
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-mechanical-pump-xlarge
- rotate: false
- xy: 201, 308
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-meltdown-large
- rotate: false
- xy: 985, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-meltdown-medium
- rotate: false
- xy: 1399, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-meltdown-small
- rotate: false
- xy: 1964, 367
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-meltdown-tiny
- rotate: false
- xy: 1639, 138
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-meltdown-xlarge
- rotate: false
- xy: 151, 208
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-melter-large
- rotate: false
- xy: 1027, 723
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-melter-medium
- rotate: false
- xy: 1433, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-melter-small
- rotate: false
- xy: 1990, 367
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-melter-tiny
- rotate: false
- xy: 1657, 156
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-melter-xlarge
- rotate: false
- xy: 201, 258
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-mend-projector-large
- rotate: false
- xy: 1069, 765
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-mend-projector-medium
- rotate: false
- xy: 1467, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-mend-projector-small
- rotate: false
- xy: 2016, 367
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-mend-projector-tiny
- rotate: false
- xy: 1675, 174
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-mend-projector-xlarge
- rotate: false
- xy: 151, 158
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-mender-large
- rotate: false
- xy: 1111, 807
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-mender-medium
- rotate: false
- xy: 1501, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-mender-small
- rotate: false
- xy: 1473, 220
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-mender-tiny
- rotate: false
- xy: 1693, 192
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-mender-xlarge
- rotate: false
- xy: 201, 208
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-message-large
+block-liquid-void-large
rotate: false
xy: 1153, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-message-medium
+block-liquid-void-medium
rotate: false
- xy: 1535, 584
+ xy: 969, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-message-small
+block-liquid-void-small
rotate: false
- xy: 1473, 194
+ xy: 1855, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-message-tiny
+block-liquid-void-tiny
rotate: false
- xy: 1711, 210
+ xy: 1719, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-message-xlarge
+block-liquid-void-xlarge
rotate: false
- xy: 151, 108
+ xy: 151, 308
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-metal-floor-2-large
- rotate: false
- xy: 1027, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-metal-floor-2-medium
- rotate: false
- xy: 1569, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-metal-floor-2-small
- rotate: false
- xy: 1447, 188
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-metal-floor-2-tiny
- rotate: false
- xy: 1657, 138
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-metal-floor-2-xlarge
- rotate: false
- xy: 201, 158
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-metal-floor-3-large
+block-magmarock-large
rotate: false
xy: 1069, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-metal-floor-3-medium
+block-magmarock-medium
rotate: false
- xy: 1603, 584
+ xy: 901, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-metal-floor-3-small
+block-magmarock-small
rotate: false
- xy: 1499, 222
+ xy: 1881, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-metal-floor-3-tiny
+block-magmarock-tiny
rotate: false
- xy: 1675, 156
+ xy: 1701, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-metal-floor-3-xlarge
+block-magmarock-xlarge
rotate: false
- xy: 151, 58
+ xy: 201, 358
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-metal-floor-5-large
+block-mass-driver-large
rotate: false
xy: 1111, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-metal-floor-5-medium
+block-mass-driver-medium
rotate: false
- xy: 1637, 584
+ xy: 935, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-metal-floor-5-small
+block-mass-driver-small
rotate: false
- xy: 1499, 196
+ xy: 1907, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-metal-floor-5-tiny
+block-mass-driver-tiny
rotate: false
- xy: 1693, 174
+ xy: 1719, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-metal-floor-5-xlarge
+block-mass-driver-xlarge
rotate: false
- xy: 201, 108
+ xy: 151, 258
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-metal-floor-damaged-large
+block-mechanical-drill-large
rotate: false
xy: 1153, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-metal-floor-damaged-medium
+block-mechanical-drill-medium
rotate: false
- xy: 1671, 584
+ xy: 969, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-metal-floor-damaged-small
+block-mechanical-drill-small
rotate: false
- xy: 1473, 168
+ xy: 1933, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-metal-floor-damaged-tiny
+block-mechanical-drill-tiny
rotate: false
- xy: 1711, 192
+ xy: 1737, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-metal-floor-damaged-xlarge
+block-mechanical-drill-xlarge
rotate: false
- xy: 201, 58
+ xy: 201, 308
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-metal-floor-large
+block-mechanical-pump-large
rotate: false
xy: 1195, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-metal-floor-medium
+block-mechanical-pump-medium
rotate: false
- xy: 1705, 584
+ xy: 1003, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-metal-floor-small
+block-mechanical-pump-small
rotate: false
- xy: 1499, 170
+ xy: 1959, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-metal-floor-tiny
+block-mechanical-pump-tiny
rotate: false
- xy: 1675, 138
+ xy: 1719, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-metal-floor-xlarge
+block-mechanical-pump-xlarge
rotate: false
- xy: 251, 508
+ xy: 151, 208
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-moss-large
- rotate: false
- xy: 1069, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-moss-medium
- rotate: false
- xy: 1739, 584
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-moss-small
- rotate: false
- xy: 1447, 162
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-moss-tiny
- rotate: false
- xy: 1693, 156
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-moss-xlarge
- rotate: false
- xy: 251, 458
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-multi-press-large
+block-meltdown-large
rotate: false
xy: 1111, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-multi-press-medium
+block-meltdown-medium
rotate: false
- xy: 1773, 584
+ xy: 901, 419
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-multi-press-small
+block-meltdown-small
rotate: false
- xy: 1473, 142
+ xy: 1985, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-multi-press-tiny
+block-meltdown-tiny
rotate: false
- xy: 1711, 174
+ xy: 1755, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-multi-press-xlarge
+block-meltdown-xlarge
rotate: false
- xy: 251, 408
+ xy: 201, 258
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-oil-extractor-large
+block-melter-large
rotate: false
xy: 1153, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-oil-extractor-medium
+block-melter-medium
rotate: false
- xy: 969, 542
+ xy: 935, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-oil-extractor-small
+block-melter-small
rotate: false
- xy: 1499, 144
+ xy: 2011, 457
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-oil-extractor-tiny
+block-melter-tiny
rotate: false
- xy: 1693, 138
+ xy: 1737, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-oil-extractor-xlarge
+block-melter-xlarge
rotate: false
- xy: 251, 358
+ xy: 151, 158
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-omega-mech-pad-large
+block-mend-projector-large
rotate: false
xy: 1195, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-omega-mech-pad-medium
+block-mend-projector-medium
rotate: false
- xy: 969, 508
+ xy: 969, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-omega-mech-pad-small
+block-mend-projector-small
rotate: false
- xy: 1447, 136
+ xy: 1673, 429
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-omega-mech-pad-tiny
+block-mend-projector-tiny
rotate: false
- xy: 1711, 156
+ xy: 1773, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-omega-mech-pad-xlarge
+block-mend-projector-xlarge
rotate: false
- xy: 251, 308
+ xy: 201, 208
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-overdrive-projector-large
+block-mender-large
rotate: false
xy: 1237, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-overdrive-projector-medium
+block-mender-medium
rotate: false
- xy: 969, 474
+ xy: 1003, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-overdrive-projector-small
+block-mender-small
rotate: false
- xy: 1473, 116
+ xy: 1699, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-overdrive-projector-tiny
+block-mender-tiny
rotate: false
- xy: 1711, 138
+ xy: 1755, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-overdrive-projector-xlarge
+block-mender-xlarge
rotate: false
- xy: 251, 258
+ xy: 151, 108
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-overflow-gate-large
- rotate: false
- xy: 1111, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-overflow-gate-medium
- rotate: false
- xy: 969, 440
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-overflow-gate-small
- rotate: false
- xy: 1499, 118
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-overflow-gate-tiny
- rotate: false
- xy: 1729, 222
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-overflow-gate-xlarge
- rotate: false
- xy: 251, 208
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-pebbles-large
+block-message-large
rotate: false
xy: 1153, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-pebbles-medium
+block-message-medium
rotate: false
- xy: 969, 406
+ xy: 1037, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-pebbles-small
+block-message-small
rotate: false
- xy: 1447, 110
+ xy: 1725, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-pebbles-tiny
+block-message-tiny
rotate: false
- xy: 1729, 204
+ xy: 1737, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-pebbles-xlarge
+block-message-xlarge
rotate: false
- xy: 251, 158
+ xy: 201, 158
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-phantom-factory-large
+block-metal-floor-2-large
rotate: false
xy: 1195, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-phantom-factory-medium
+block-metal-floor-2-medium
rotate: false
- xy: 969, 372
+ xy: 901, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-phantom-factory-small
+block-metal-floor-2-small
rotate: false
- xy: 1473, 90
+ xy: 1751, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-phantom-factory-tiny
+block-metal-floor-2-tiny
rotate: false
- xy: 1747, 222
+ xy: 1791, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-phantom-factory-xlarge
+block-metal-floor-2-xlarge
rotate: false
- xy: 251, 108
+ xy: 151, 58
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-phase-conduit-large
+block-metal-floor-3-large
rotate: false
xy: 1237, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-phase-conduit-medium
+block-metal-floor-3-medium
rotate: false
- xy: 969, 338
+ xy: 935, 419
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-phase-conduit-small
+block-metal-floor-3-small
rotate: false
- xy: 1499, 92
+ xy: 1777, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-phase-conduit-tiny
+block-metal-floor-3-tiny
rotate: false
- xy: 1765, 222
+ xy: 1773, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-phase-conduit-xlarge
+block-metal-floor-3-xlarge
rotate: false
- xy: 251, 58
+ xy: 201, 108
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-phase-conveyor-large
+block-metal-floor-5-large
rotate: false
xy: 1279, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-phase-conveyor-medium
+block-metal-floor-5-medium
rotate: false
- xy: 969, 304
+ xy: 969, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-phase-conveyor-small
+block-metal-floor-5-small
rotate: false
- xy: 1447, 84
+ xy: 1803, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-phase-conveyor-tiny
+block-metal-floor-5-tiny
rotate: false
- xy: 1729, 186
+ xy: 1755, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-phase-conveyor-xlarge
+block-metal-floor-5-xlarge
rotate: false
- xy: 151, 8
+ xy: 201, 58
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-phase-wall-large
- rotate: false
- xy: 1153, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-phase-wall-large-large
+block-metal-floor-damaged-large
rotate: false
xy: 1195, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-phase-wall-large-medium
+block-metal-floor-damaged-medium
rotate: false
- xy: 969, 270
+ xy: 1003, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-phase-wall-large-small
+block-metal-floor-damaged-small
rotate: false
- xy: 1435, 58
+ xy: 1829, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-phase-wall-large-tiny
+block-metal-floor-damaged-tiny
rotate: false
- xy: 1747, 204
+ xy: 1809, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-phase-wall-large-xlarge
+block-metal-floor-damaged-xlarge
rotate: false
- xy: 201, 8
+ xy: 251, 508
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-phase-wall-medium
- rotate: false
- xy: 969, 236
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-phase-wall-small
- rotate: false
- xy: 1461, 58
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-phase-wall-tiny
- rotate: false
- xy: 1729, 168
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-phase-wall-xlarge
- rotate: false
- xy: 251, 8
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-phase-weaver-large
+block-metal-floor-large
rotate: false
xy: 1237, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-phase-weaver-medium
+block-metal-floor-medium
rotate: false
- xy: 969, 202
+ xy: 1037, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-phase-weaver-small
+block-metal-floor-small
rotate: false
- xy: 1447, 32
+ xy: 1855, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-phase-weaver-tiny
+block-metal-floor-tiny
rotate: false
- xy: 1747, 186
+ xy: 1791, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-phase-weaver-xlarge
+block-metal-floor-xlarge
rotate: false
- xy: 281, 619
+ xy: 251, 458
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-pine-large
+block-moss-large
rotate: false
xy: 1279, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-pine-medium
+block-moss-medium
rotate: false
- xy: 969, 168
+ xy: 1071, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-pine-small
+block-moss-small
rotate: false
- xy: 1447, 6
+ xy: 1881, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-pine-tiny
+block-moss-tiny
rotate: false
- xy: 1765, 204
+ xy: 1773, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-pine-xlarge
+block-moss-xlarge
rotate: false
- xy: 281, 569
+ xy: 251, 408
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-plastanium-compressor-large
+block-multi-press-large
rotate: false
xy: 1321, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-plastanium-compressor-medium
+block-multi-press-medium
rotate: false
- xy: 969, 134
+ xy: 901, 351
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-plastanium-compressor-small
+block-multi-press-small
rotate: false
- xy: 1473, 32
+ xy: 1907, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-plastanium-compressor-tiny
+block-multi-press-tiny
rotate: false
- xy: 1783, 221
+ xy: 1809, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-plastanium-compressor-xlarge
+block-multi-press-xlarge
rotate: false
- xy: 301, 519
+ xy: 251, 358
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-plastanium-wall-large
- rotate: false
- xy: 1195, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-plastanium-wall-large-large
+block-oil-extractor-large
rotate: false
xy: 1237, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-plastanium-wall-large-medium
+block-oil-extractor-medium
rotate: false
- xy: 969, 100
+ xy: 935, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-plastanium-wall-large-small
+block-oil-extractor-small
rotate: false
- xy: 1473, 6
+ xy: 1933, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-plastanium-wall-large-tiny
+block-oil-extractor-tiny
rotate: false
- xy: 1729, 150
+ xy: 1791, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-plastanium-wall-large-xlarge
+block-oil-extractor-xlarge
rotate: false
- xy: 301, 469
+ xy: 251, 308
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-plastanium-wall-medium
- rotate: false
- xy: 1003, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-plastanium-wall-small
- rotate: false
- xy: 1487, 64
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-plastanium-wall-tiny
- rotate: false
- xy: 1747, 168
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-plastanium-wall-xlarge
- rotate: false
- xy: 301, 419
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-plated-conduit-large
+block-omega-mech-pad-large
rotate: false
xy: 1279, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-plated-conduit-medium
+block-omega-mech-pad-medium
rotate: false
- xy: 1003, 516
+ xy: 969, 419
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-plated-conduit-small
+block-omega-mech-pad-small
rotate: false
- xy: 1513, 66
+ xy: 1959, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-plated-conduit-tiny
+block-omega-mech-pad-tiny
rotate: false
- xy: 1765, 186
+ xy: 1809, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-plated-conduit-xlarge
+block-omega-mech-pad-xlarge
rotate: false
- xy: 301, 369
+ xy: 251, 258
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-pneumatic-drill-large
+block-overdrive-projector-large
rotate: false
xy: 1321, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-pneumatic-drill-medium
+block-overdrive-projector-medium
rotate: false
- xy: 1037, 550
+ xy: 1003, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-pneumatic-drill-small
+block-overdrive-projector-small
rotate: false
- xy: 1499, 38
+ xy: 1985, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-pneumatic-drill-tiny
+block-overdrive-projector-tiny
rotate: false
- xy: 1783, 203
+ xy: 1827, 307
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-pneumatic-drill-xlarge
+block-overdrive-projector-xlarge
rotate: false
- xy: 301, 319
+ xy: 251, 208
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-power-node-large
+block-overflow-gate-large
rotate: false
xy: 1363, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-power-node-large-large
+block-overflow-gate-medium
rotate: false
- xy: 1237, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-power-node-large-medium
- rotate: false
- xy: 1003, 482
+ xy: 1037, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-power-node-large-small
+block-overflow-gate-small
rotate: false
- xy: 1499, 12
+ xy: 2011, 431
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-power-node-large-tiny
+block-overflow-gate-tiny
rotate: false
- xy: 1747, 150
+ xy: 1827, 289
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-power-node-large-xlarge
+block-overflow-gate-xlarge
rotate: false
- xy: 301, 269
+ xy: 251, 158
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-power-node-medium
- rotate: false
- xy: 1037, 516
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-power-node-small
- rotate: false
- xy: 1525, 40
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-power-node-tiny
- rotate: false
- xy: 1765, 168
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-power-node-xlarge
- rotate: false
- xy: 301, 219
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-power-source-large
+block-pebbles-large
rotate: false
xy: 1279, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-power-source-medium
+block-pebbles-medium
rotate: false
- xy: 1071, 550
+ xy: 1071, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-power-source-small
+block-pebbles-small
rotate: false
- xy: 1525, 14
+ xy: 1363, 97
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-power-source-tiny
+block-pebbles-tiny
rotate: false
- xy: 1783, 185
+ xy: 1827, 271
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-power-source-xlarge
+block-pebbles-xlarge
rotate: false
- xy: 301, 169
+ xy: 251, 108
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-power-void-large
+block-phantom-factory-large
rotate: false
xy: 1321, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-power-void-medium
+block-phantom-factory-medium
rotate: false
- xy: 1003, 448
+ xy: 1105, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-power-void-small
+block-phantom-factory-small
rotate: false
- xy: 1575, 322
+ xy: 1389, 99
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-power-void-tiny
+block-phantom-factory-tiny
rotate: false
- xy: 1765, 150
+ xy: 1845, 309
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-power-void-xlarge
+block-phantom-factory-xlarge
rotate: false
- xy: 301, 119
+ xy: 251, 58
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-pulse-conduit-large
+block-phase-conduit-large
rotate: false
xy: 1363, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-pulse-conduit-medium
+block-phase-conduit-medium
rotate: false
- xy: 1037, 482
+ xy: 901, 317
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-pulse-conduit-small
+block-phase-conduit-small
rotate: false
- xy: 1575, 296
+ xy: 1415, 99
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-pulse-conduit-tiny
+block-phase-conduit-tiny
rotate: false
- xy: 1783, 167
+ xy: 1845, 291
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-pulse-conduit-xlarge
+block-phase-conduit-xlarge
rotate: false
- xy: 301, 69
+ xy: 151, 8
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-pulverizer-large
+block-phase-conveyor-large
rotate: false
xy: 1405, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-pulverizer-medium
+block-phase-conveyor-medium
rotate: false
- xy: 1071, 516
+ xy: 935, 351
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-pulverizer-small
+block-phase-conveyor-small
rotate: false
- xy: 1601, 324
+ xy: 1441, 99
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-pulverizer-tiny
+block-phase-conveyor-tiny
rotate: false
- xy: 1783, 149
+ xy: 1845, 273
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-pulverizer-xlarge
+block-phase-conveyor-xlarge
rotate: false
- xy: 301, 19
+ xy: 201, 8
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-pyratite-mixer-large
- rotate: false
- xy: 1279, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-pyratite-mixer-medium
- rotate: false
- xy: 1105, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-pyratite-mixer-small
- rotate: false
- xy: 1601, 298
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-pyratite-mixer-tiny
- rotate: false
- xy: 1729, 132
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-pyratite-mixer-xlarge
- rotate: false
- xy: 795, 878
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-repair-point-large
+block-phase-wall-large
rotate: false
xy: 1321, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-repair-point-medium
- rotate: false
- xy: 1003, 414
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-repair-point-small
- rotate: false
- xy: 1730, 370
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-repair-point-tiny
- rotate: false
- xy: 1747, 132
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-repair-point-xlarge
- rotate: false
- xy: 309, 816
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-revenant-factory-large
+block-phase-wall-large-large
rotate: false
xy: 1363, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-revenant-factory-medium
+block-phase-wall-large-medium
rotate: false
- xy: 1037, 448
+ xy: 969, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-revenant-factory-small
+block-phase-wall-large-small
rotate: false
- xy: 1756, 370
+ xy: 1467, 91
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-revenant-factory-tiny
+block-phase-wall-large-tiny
rotate: false
- xy: 1765, 132
+ xy: 1863, 309
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-revenant-factory-xlarge
+block-phase-wall-large-xlarge
rotate: false
- xy: 309, 766
+ xy: 251, 8
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-ripple-large
+block-phase-wall-medium
+ rotate: false
+ xy: 1003, 419
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-phase-wall-small
+ rotate: false
+ xy: 1493, 79
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-phase-wall-tiny
+ rotate: false
+ xy: 1863, 291
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-phase-wall-xlarge
+ rotate: false
+ xy: 281, 619
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-phase-weaver-large
rotate: false
xy: 1405, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-ripple-medium
+block-phase-weaver-medium
rotate: false
- xy: 1071, 482
+ xy: 1037, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-ripple-small
+block-phase-weaver-small
rotate: false
- xy: 1782, 370
+ xy: 1519, 67
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-ripple-tiny
+block-phase-weaver-tiny
rotate: false
- xy: 1783, 131
+ xy: 1863, 273
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-ripple-xlarge
+block-phase-weaver-xlarge
rotate: false
- xy: 359, 816
+ xy: 281, 569
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-rock-large
+block-pine-large
rotate: false
xy: 1447, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-rock-medium
+block-pine-medium
rotate: false
- xy: 1105, 516
+ xy: 1071, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-rock-small
+block-pine-small
rotate: false
- xy: 1808, 366
+ xy: 1361, 71
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-rock-tiny
+block-pine-tiny
rotate: false
- xy: 1621, 120
+ xy: 1716, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-rock-xlarge
+block-pine-xlarge
rotate: false
- xy: 309, 716
+ xy: 301, 519
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-rocks-large
- rotate: false
- xy: 1321, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-rocks-medium
- rotate: false
- xy: 1139, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-rocks-small
- rotate: false
- xy: 1834, 363
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-rocks-tiny
- rotate: false
- xy: 1639, 120
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-rocks-xlarge
- rotate: false
- xy: 359, 766
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-rotary-pump-large
+block-plastanium-compressor-large
rotate: false
xy: 1363, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-rotary-pump-medium
+block-plastanium-compressor-medium
rotate: false
- xy: 1003, 380
+ xy: 1105, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-rotary-pump-small
+block-plastanium-compressor-small
rotate: false
- xy: 1860, 363
+ xy: 1361, 45
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-rotary-pump-tiny
+block-plastanium-compressor-tiny
rotate: false
- xy: 1657, 120
+ xy: 1716, 235
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-rotary-pump-xlarge
+block-plastanium-compressor-xlarge
rotate: false
- xy: 409, 816
+ xy: 301, 469
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-router-large
+block-plastanium-wall-large
rotate: false
xy: 1405, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-router-medium
- rotate: false
- xy: 1037, 414
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-router-small
- rotate: false
- xy: 1886, 363
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-router-tiny
- rotate: false
- xy: 1675, 120
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-router-xlarge
- rotate: false
- xy: 359, 716
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-rtg-generator-large
+block-plastanium-wall-large-large
rotate: false
xy: 1447, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-rtg-generator-medium
+block-plastanium-wall-large-medium
rotate: false
- xy: 1071, 448
+ xy: 1139, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-rtg-generator-small
+block-plastanium-wall-large-small
rotate: false
- xy: 1912, 363
+ xy: 1361, 19
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-rtg-generator-tiny
+block-plastanium-wall-large-tiny
rotate: false
- xy: 1693, 120
+ xy: 1734, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-rtg-generator-xlarge
+block-plastanium-wall-large-xlarge
rotate: false
- xy: 409, 766
+ xy: 301, 419
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-salt-large
+block-plastanium-wall-medium
+ rotate: false
+ xy: 901, 283
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-plastanium-wall-small
+ rotate: false
+ xy: 1545, 56
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-plastanium-wall-tiny
+ rotate: false
+ xy: 1716, 217
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-plastanium-wall-xlarge
+ rotate: false
+ xy: 301, 369
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-plated-conduit-large
rotate: false
xy: 1489, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-salt-medium
+block-plated-conduit-medium
rotate: false
- xy: 1105, 482
+ xy: 935, 317
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-salt-small
+block-plated-conduit-small
rotate: false
- xy: 1938, 359
+ xy: 1571, 56
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-salt-tiny
+block-plated-conduit-tiny
rotate: false
- xy: 1711, 120
+ xy: 1752, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-salt-xlarge
+block-plated-conduit-xlarge
rotate: false
- xy: 459, 816
+ xy: 301, 319
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-saltrocks-large
- rotate: false
- xy: 1363, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-saltrocks-medium
- rotate: false
- xy: 1139, 516
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-saltrocks-small
- rotate: false
- xy: 1964, 341
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-saltrocks-tiny
- rotate: false
- xy: 1729, 114
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-saltrocks-xlarge
- rotate: false
- xy: 409, 716
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-salvo-large
+block-pneumatic-drill-large
rotate: false
xy: 1405, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-salvo-medium
+block-pneumatic-drill-medium
rotate: false
- xy: 1173, 550
+ xy: 969, 351
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-salvo-small
+block-pneumatic-drill-small
rotate: false
- xy: 1990, 341
+ xy: 1597, 56
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-salvo-tiny
+block-pneumatic-drill-tiny
rotate: false
- xy: 1747, 114
+ xy: 1734, 235
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-salvo-xlarge
+block-pneumatic-drill-xlarge
rotate: false
- xy: 459, 766
+ xy: 301, 269
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-sand-boulder-large
+block-power-node-large
rotate: false
xy: 1447, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-sand-boulder-medium
- rotate: false
- xy: 1003, 346
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-sand-boulder-small
- rotate: false
- xy: 2016, 341
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-sand-boulder-tiny
- rotate: false
- xy: 1765, 114
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-sand-boulder-xlarge
- rotate: false
- xy: 509, 816
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-sand-large
+block-power-node-large-large
rotate: false
xy: 1489, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-sand-medium
+block-power-node-large-medium
rotate: false
- xy: 1037, 380
+ xy: 1003, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-sand-small
+block-power-node-large-small
rotate: false
- xy: 1375, 184
+ xy: 1623, 43
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-sand-tiny
+block-power-node-large-tiny
rotate: false
- xy: 1783, 113
+ xy: 1716, 199
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-sand-water-large
+block-power-node-large-xlarge
+ rotate: false
+ xy: 301, 219
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-power-node-medium
+ rotate: false
+ xy: 1037, 419
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-power-node-small
+ rotate: false
+ xy: 1649, 43
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-power-node-tiny
+ rotate: false
+ xy: 1716, 181
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-power-node-xlarge
+ rotate: false
+ xy: 301, 169
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-power-source-large
rotate: false
xy: 1531, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-sand-water-medium
+block-power-source-medium
rotate: false
- xy: 1071, 414
+ xy: 1071, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-sand-water-small
+block-power-source-small
rotate: false
- xy: 1401, 186
+ xy: 1675, 43
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-sand-water-tiny
+block-power-source-tiny
rotate: false
- xy: 1603, 110
+ xy: 1770, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-sand-water-xlarge
+block-power-source-xlarge
rotate: false
- xy: 459, 716
+ xy: 301, 119
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-sand-xlarge
- rotate: false
- xy: 509, 766
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-sandrocks-large
- rotate: false
- xy: 1405, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-sandrocks-medium
- rotate: false
- xy: 1105, 448
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-sandrocks-small
- rotate: false
- xy: 1375, 158
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-sandrocks-tiny
- rotate: false
- xy: 1621, 102
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-sandrocks-xlarge
- rotate: false
- xy: 559, 816
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-scatter-large
+block-power-void-large
rotate: false
xy: 1447, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-scatter-medium
+block-power-void-medium
rotate: false
- xy: 1139, 482
+ xy: 1105, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-scatter-small
+block-power-void-small
rotate: false
- xy: 1401, 160
+ xy: 1701, 43
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-scatter-tiny
+block-power-void-tiny
rotate: false
- xy: 1639, 102
+ xy: 1752, 235
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-scatter-xlarge
+block-power-void-xlarge
rotate: false
- xy: 509, 716
+ xy: 301, 69
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-scorch-large
+block-pulse-conduit-large
rotate: false
xy: 1489, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-scorch-medium
+block-pulse-conduit-medium
rotate: false
- xy: 1173, 516
+ xy: 1139, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-scorch-small
+block-pulse-conduit-small
rotate: false
- xy: 1403, 134
+ xy: 1631, 363
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-scorch-tiny
+block-pulse-conduit-tiny
rotate: false
- xy: 1657, 102
+ xy: 1734, 217
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-scorch-xlarge
+block-pulse-conduit-xlarge
rotate: false
- xy: 559, 766
+ xy: 301, 19
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-scrap-wall-gigantic-large
+block-pulverizer-large
rotate: false
xy: 1531, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-scrap-wall-gigantic-medium
+block-pulverizer-medium
rotate: false
- xy: 1207, 550
+ xy: 1173, 555
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-scrap-wall-gigantic-small
+block-pulverizer-small
rotate: false
- xy: 1507, 254
+ xy: 1626, 337
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-scrap-wall-gigantic-tiny
+block-pulverizer-tiny
rotate: false
- xy: 1675, 102
+ xy: 1788, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-scrap-wall-gigantic-xlarge
+block-pulverizer-xlarge
rotate: false
- xy: 609, 816
+ xy: 795, 878
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-scrap-wall-huge-large
+block-pyratite-mixer-large
rotate: false
xy: 1573, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-scrap-wall-huge-medium
+block-pyratite-mixer-medium
rotate: false
- xy: 1003, 312
+ xy: 901, 249
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-scrap-wall-huge-small
+block-pyratite-mixer-small
rotate: false
- xy: 1533, 256
+ xy: 1626, 311
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-scrap-wall-huge-tiny
+block-pyratite-mixer-tiny
rotate: false
- xy: 1693, 102
+ xy: 1770, 235
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-scrap-wall-huge-xlarge
+block-pyratite-mixer-xlarge
rotate: false
- xy: 559, 716
+ xy: 309, 816
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-scrap-wall-large
- rotate: false
- xy: 1447, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-scrap-wall-large-large
+block-repair-point-large
rotate: false
xy: 1489, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-scrap-wall-large-medium
+block-repair-point-medium
rotate: false
- xy: 1037, 346
+ xy: 935, 283
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-scrap-wall-large-small
+block-repair-point-small
rotate: false
- xy: 1613, 394
+ xy: 1652, 337
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-scrap-wall-large-tiny
+block-repair-point-tiny
rotate: false
- xy: 1711, 102
+ xy: 1752, 217
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-scrap-wall-large-xlarge
+block-repair-point-xlarge
rotate: false
- xy: 609, 766
+ xy: 309, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-scrap-wall-medium
- rotate: false
- xy: 1071, 380
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-scrap-wall-small
- rotate: false
- xy: 1611, 368
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-scrap-wall-tiny
- rotate: false
- xy: 1729, 96
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-scrap-wall-xlarge
- rotate: false
- xy: 659, 816
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-separator-large
+block-revenant-factory-large
rotate: false
xy: 1531, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-separator-medium
+block-revenant-factory-medium
rotate: false
- xy: 1105, 414
+ xy: 969, 317
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-separator-small
+block-revenant-factory-small
rotate: false
- xy: 1601, 272
+ xy: 1652, 311
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-separator-tiny
+block-revenant-factory-tiny
rotate: false
- xy: 1747, 96
+ xy: 1734, 199
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-separator-xlarge
+block-revenant-factory-xlarge
rotate: false
- xy: 609, 716
+ xy: 359, 816
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-shale-boulder-large
+block-ripple-large
rotate: false
xy: 1573, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-shale-boulder-medium
+block-ripple-medium
rotate: false
- xy: 1139, 448
+ xy: 1003, 351
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-shale-boulder-small
+block-ripple-small
rotate: false
- xy: 1525, 228
+ xy: 1649, 285
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-shale-boulder-tiny
+block-ripple-tiny
rotate: false
- xy: 1765, 96
+ xy: 1734, 181
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-shale-boulder-xlarge
+block-ripple-xlarge
rotate: false
- xy: 659, 766
+ xy: 309, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-shale-large
+block-rock-large
rotate: false
xy: 1615, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-shale-medium
+block-rock-medium
rotate: false
- xy: 1173, 482
+ xy: 1037, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-shale-small
+block-rock-small
rotate: false
- xy: 1525, 202
+ xy: 1649, 259
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-shale-tiny
+block-rock-tiny
rotate: false
- xy: 1783, 95
+ xy: 1806, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-shale-xlarge
+block-rock-xlarge
rotate: false
- xy: 709, 816
+ xy: 359, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-shalerocks-large
- rotate: false
- xy: 1489, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-shalerocks-medium
- rotate: false
- xy: 1207, 516
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-shalerocks-small
- rotate: false
- xy: 1525, 176
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-shalerocks-tiny
- rotate: false
- xy: 1801, 311
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-shalerocks-xlarge
- rotate: false
- xy: 659, 716
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-shock-mine-large
+block-rocks-large
rotate: false
xy: 1531, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-shock-mine-medium
+block-rocks-medium
rotate: false
- xy: 1241, 550
+ xy: 1071, 419
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-shock-mine-small
+block-rocks-small
rotate: false
- xy: 1525, 150
+ xy: 1675, 285
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-shock-mine-tiny
+block-rocks-tiny
rotate: false
- xy: 1801, 293
+ xy: 1788, 235
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-shock-mine-xlarge
+block-rocks-xlarge
rotate: false
- xy: 709, 766
+ xy: 409, 816
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-shrubs-large
+block-rotary-pump-large
rotate: false
xy: 1573, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-shrubs-medium
+block-rotary-pump-medium
rotate: false
- xy: 1003, 278
+ xy: 1105, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-shrubs-small
+block-rotary-pump-small
rotate: false
- xy: 1525, 124
+ xy: 1675, 259
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-shrubs-tiny
+block-rotary-pump-tiny
rotate: false
- xy: 1801, 275
+ xy: 1770, 217
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-shrubs-xlarge
+block-rotary-pump-xlarge
rotate: false
- xy: 709, 716
+ xy: 359, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-silicon-smelter-large
+block-router-large
rotate: false
xy: 1615, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-silicon-smelter-medium
+block-router-medium
rotate: false
- xy: 1037, 312
+ xy: 1139, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-silicon-smelter-small
+block-router-small
rotate: false
- xy: 1525, 98
+ xy: 1664, 233
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-silicon-smelter-tiny
+block-router-tiny
rotate: false
- xy: 1801, 257
+ xy: 1752, 199
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-silicon-smelter-xlarge
+block-router-xlarge
rotate: false
- xy: 759, 816
+ xy: 409, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-snow-large
+block-rtg-generator-large
rotate: false
xy: 1657, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-snow-medium
+block-rtg-generator-medium
rotate: false
- xy: 1071, 346
+ xy: 1173, 521
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-snow-pine-large
+block-rtg-generator-small
rotate: false
- xy: 1531, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-snow-pine-medium
- rotate: false
- xy: 1105, 380
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-snow-pine-small
- rotate: false
- xy: 1551, 230
+ xy: 1664, 207
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-snow-pine-tiny
+block-rtg-generator-tiny
rotate: false
- xy: 1801, 239
+ xy: 1824, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-snow-pine-xlarge
+block-rtg-generator-xlarge
rotate: false
- xy: 759, 766
+ xy: 459, 816
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-snow-small
- rotate: false
- xy: 1551, 204
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-snow-tiny
- rotate: false
- xy: 1801, 221
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-snow-xlarge
- rotate: false
- xy: 759, 716
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-snowrock-large
+block-salt-large
rotate: false
xy: 1573, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-snowrock-medium
+block-salt-medium
rotate: false
- xy: 1139, 414
+ xy: 901, 215
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-snowrock-small
+block-salt-small
rotate: false
- xy: 1551, 178
+ xy: 1664, 181
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-snowrock-tiny
+block-salt-tiny
rotate: false
- xy: 1801, 203
+ xy: 1806, 235
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-snowrock-xlarge
+block-salt-xlarge
rotate: false
- xy: 809, 828
+ xy: 409, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-snowrocks-large
+block-saltrocks-large
rotate: false
xy: 1615, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-snowrocks-medium
+block-saltrocks-medium
rotate: false
- xy: 1173, 448
+ xy: 935, 249
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-snowrocks-small
+block-saltrocks-small
rotate: false
- xy: 1551, 152
+ xy: 1690, 233
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-snowrocks-tiny
+block-saltrocks-tiny
rotate: false
- xy: 1801, 185
+ xy: 1788, 217
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-snowrocks-xlarge
+block-saltrocks-xlarge
rotate: false
- xy: 809, 778
+ xy: 459, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-solar-panel-large
+block-salvo-large
rotate: false
xy: 1657, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-solar-panel-large-large
+block-salvo-medium
+ rotate: false
+ xy: 969, 283
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-salvo-small
+ rotate: false
+ xy: 1690, 207
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-salvo-tiny
+ rotate: false
+ xy: 1770, 199
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-salvo-xlarge
+ rotate: false
+ xy: 509, 816
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-sand-boulder-large
rotate: false
xy: 1699, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-solar-panel-large-medium
+block-sand-boulder-medium
rotate: false
- xy: 1207, 482
+ xy: 1003, 317
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-solar-panel-large-small
+block-sand-boulder-small
rotate: false
- xy: 1551, 126
+ xy: 1690, 181
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-solar-panel-large-tiny
+block-sand-boulder-tiny
rotate: false
- xy: 1801, 167
+ xy: 1752, 181
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-solar-panel-large-xlarge
+block-sand-boulder-xlarge
rotate: false
- xy: 809, 728
+ xy: 459, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-solar-panel-medium
- rotate: false
- xy: 1241, 516
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-solar-panel-small
- rotate: false
- xy: 1551, 100
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-solar-panel-tiny
- rotate: false
- xy: 1801, 149
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-solar-panel-xlarge
- rotate: false
- xy: 809, 678
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-sorter-large
- rotate: false
- xy: 1573, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-sorter-medium
- rotate: false
- xy: 1275, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-sorter-small
- rotate: false
- xy: 1539, 72
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-sorter-tiny
- rotate: false
- xy: 1801, 131
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-sorter-xlarge
- rotate: false
- xy: 331, 666
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-spawn-large
+block-sand-large
rotate: false
xy: 1615, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-spawn-medium
+block-sand-medium
rotate: false
- xy: 1003, 244
+ xy: 1037, 351
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-spawn-small
+block-sand-small
rotate: false
- xy: 1565, 74
+ xy: 1688, 155
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-spawn-tiny
+block-sand-tiny
rotate: false
- xy: 1801, 113
+ xy: 1740, 163
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-spawn-xlarge
- rotate: false
- xy: 331, 616
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-spectre-large
+block-sand-water-large
rotate: false
xy: 1657, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-spectre-medium
+block-sand-water-medium
rotate: false
- xy: 1037, 278
+ xy: 1071, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-spectre-small
+block-sand-water-small
rotate: false
- xy: 1551, 46
+ xy: 1639, 421
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-spectre-tiny
+block-sand-water-tiny
rotate: false
- xy: 1801, 95
+ xy: 1824, 235
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-spectre-xlarge
+block-sand-water-xlarge
rotate: false
- xy: 381, 666
+ xy: 509, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-spirit-factory-large
+block-sand-xlarge
+ rotate: false
+ xy: 559, 816
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-sandrocks-large
rotate: false
xy: 1699, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-spirit-factory-medium
+block-sandrocks-medium
rotate: false
- xy: 1071, 312
+ xy: 1105, 419
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-spirit-factory-small
+block-sandrocks-small
rotate: false
- xy: 1551, 20
+ xy: 1389, 73
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-spirit-factory-tiny
+block-sandrocks-tiny
rotate: false
- xy: 1819, 309
+ xy: 1806, 217
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-spirit-factory-xlarge
+block-sandrocks-xlarge
rotate: false
- xy: 381, 616
+ xy: 509, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-spore-cluster-large
+block-scatter-large
rotate: false
xy: 1741, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-spore-cluster-medium
+block-scatter-medium
rotate: false
- xy: 1105, 346
+ xy: 1139, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-spore-cluster-small
+block-scatter-small
rotate: false
- xy: 1577, 48
+ xy: 1415, 73
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-spore-cluster-tiny
+block-scatter-tiny
rotate: false
- xy: 1819, 291
+ xy: 1788, 199
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-spore-cluster-xlarge
+block-scatter-xlarge
rotate: false
- xy: 431, 666
+ xy: 559, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-spore-moss-large
- rotate: false
- xy: 1615, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-spore-moss-medium
- rotate: false
- xy: 1139, 380
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-spore-moss-small
- rotate: false
- xy: 1577, 22
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-spore-moss-tiny
- rotate: false
- xy: 1837, 309
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-spore-moss-xlarge
- rotate: false
- xy: 431, 616
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-spore-pine-large
+block-scorch-large
rotate: false
xy: 1657, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-spore-pine-medium
+block-scorch-medium
rotate: false
- xy: 1173, 414
+ xy: 1173, 487
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-spore-pine-small
+block-scorch-small
rotate: false
- xy: 1541, 288
+ xy: 1441, 73
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-spore-pine-tiny
+block-scorch-tiny
rotate: false
- xy: 1819, 273
+ xy: 1770, 181
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-spore-pine-xlarge
+block-scorch-xlarge
rotate: false
- xy: 481, 666
+ xy: 609, 816
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-spore-press-large
+block-scrap-wall-gigantic-large
rotate: false
xy: 1699, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-spore-press-medium
+block-scrap-wall-gigantic-medium
rotate: false
- xy: 1207, 448
+ xy: 901, 181
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-spore-press-small
+block-scrap-wall-gigantic-small
rotate: false
- xy: 1637, 368
+ xy: 1467, 65
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-spore-press-tiny
+block-scrap-wall-gigantic-tiny
rotate: false
- xy: 1837, 291
+ xy: 1758, 163
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-spore-press-xlarge
+block-scrap-wall-gigantic-xlarge
rotate: false
- xy: 481, 616
+ xy: 559, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-sporerocks-large
+block-scrap-wall-huge-large
rotate: false
xy: 1741, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-sporerocks-medium
+block-scrap-wall-huge-medium
rotate: false
- xy: 1241, 482
+ xy: 935, 215
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-sporerocks-small
+block-scrap-wall-huge-small
rotate: false
- xy: 1663, 368
+ xy: 1493, 53
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-sporerocks-tiny
+block-scrap-wall-huge-tiny
rotate: false
- xy: 1855, 309
+ xy: 1824, 217
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-sporerocks-xlarge
+block-scrap-wall-huge-xlarge
rotate: false
- xy: 531, 666
+ xy: 609, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-stone-large
+block-scrap-wall-large
rotate: false
xy: 1783, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-stone-medium
- rotate: false
- xy: 1275, 516
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-stone-small
- rotate: false
- xy: 1689, 368
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-stone-tiny
- rotate: false
- xy: 1819, 255
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-stone-xlarge
- rotate: false
- xy: 531, 616
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-surge-tower-large
- rotate: false
- xy: 1657, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-surge-tower-medium
- rotate: false
- xy: 1309, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-surge-tower-small
- rotate: false
- xy: 1627, 342
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-surge-tower-tiny
- rotate: false
- xy: 1837, 273
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-surge-tower-xlarge
- rotate: false
- xy: 581, 666
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-surge-wall-large
+block-scrap-wall-large-large
rotate: false
xy: 1699, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-surge-wall-large-large
+block-scrap-wall-large-medium
+ rotate: false
+ xy: 969, 249
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-scrap-wall-large-small
+ rotate: false
+ xy: 1519, 41
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-scrap-wall-large-tiny
+ rotate: false
+ xy: 1806, 199
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-scrap-wall-large-xlarge
+ rotate: false
+ xy: 659, 816
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-scrap-wall-medium
+ rotate: false
+ xy: 1003, 283
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-scrap-wall-small
+ rotate: false
+ xy: 1387, 47
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-scrap-wall-tiny
+ rotate: false
+ xy: 1788, 181
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-scrap-wall-xlarge
+ rotate: false
+ xy: 609, 716
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-separator-large
rotate: false
xy: 1741, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-surge-wall-large-medium
+block-separator-medium
rotate: false
- xy: 1003, 210
+ xy: 1037, 317
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-surge-wall-large-small
+block-separator-small
rotate: false
- xy: 1627, 316
+ xy: 1413, 47
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-surge-wall-large-tiny
+block-separator-tiny
rotate: false
- xy: 1855, 291
+ xy: 1776, 163
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-surge-wall-large-xlarge
+block-separator-xlarge
rotate: false
- xy: 581, 616
+ xy: 659, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-surge-wall-medium
- rotate: false
- xy: 1037, 244
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-surge-wall-small
- rotate: false
- xy: 1653, 342
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-surge-wall-tiny
- rotate: false
- xy: 1873, 309
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-surge-wall-xlarge
- rotate: false
- xy: 631, 666
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-swarmer-large
+block-shale-boulder-large
rotate: false
xy: 1783, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-swarmer-medium
+block-shale-boulder-medium
rotate: false
- xy: 1071, 278
+ xy: 1071, 351
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-swarmer-small
+block-shale-boulder-small
rotate: false
- xy: 1627, 290
+ xy: 1387, 21
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-swarmer-tiny
+block-shale-boulder-tiny
rotate: false
- xy: 1819, 237
+ xy: 1824, 199
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-swarmer-xlarge
+block-shale-boulder-xlarge
rotate: false
- xy: 631, 616
+ xy: 709, 816
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-tainted-water-large
+block-shale-large
rotate: false
xy: 1825, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-tainted-water-medium
+block-shale-medium
rotate: false
- xy: 1105, 312
+ xy: 1105, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-tainted-water-small
+block-shale-small
rotate: false
- xy: 1653, 316
+ xy: 1439, 47
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-tainted-water-tiny
+block-shale-tiny
rotate: false
- xy: 1837, 255
+ xy: 1806, 181
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-tainted-water-xlarge
+block-shale-xlarge
rotate: false
- xy: 681, 666
+ xy: 659, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-tar-large
- rotate: false
- xy: 1699, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-tar-medium
- rotate: false
- xy: 1139, 346
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-tar-small
- rotate: false
- xy: 1679, 342
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-tar-tiny
- rotate: false
- xy: 1855, 273
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-tar-xlarge
- rotate: false
- xy: 681, 616
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-tau-mech-pad-large
+block-shalerocks-large
rotate: false
xy: 1741, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-tau-mech-pad-medium
+block-shalerocks-medium
rotate: false
- xy: 1173, 380
+ xy: 1139, 419
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-tau-mech-pad-small
+block-shalerocks-small
rotate: false
- xy: 1653, 290
+ xy: 1413, 21
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-tau-mech-pad-tiny
+block-shalerocks-tiny
rotate: false
- xy: 1873, 291
+ xy: 1794, 163
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-tau-mech-pad-xlarge
+block-shalerocks-xlarge
rotate: false
- xy: 731, 666
+ xy: 709, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-tendrils-large
+block-shock-mine-large
rotate: false
xy: 1783, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-tendrils-medium
+block-shock-mine-medium
rotate: false
- xy: 1207, 414
+ xy: 1173, 453
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-tendrils-small
+block-shock-mine-small
rotate: false
- xy: 1679, 316
+ xy: 1439, 21
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-tendrils-tiny
+block-shock-mine-tiny
rotate: false
- xy: 1891, 309
+ xy: 1824, 181
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-tendrils-xlarge
+block-shock-mine-xlarge
rotate: false
- xy: 731, 616
+ xy: 709, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-thermal-generator-large
+block-shrubs-large
rotate: false
xy: 1825, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-thermal-generator-medium
+block-shrubs-medium
rotate: false
- xy: 1241, 448
+ xy: 901, 147
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-thermal-generator-small
+block-shrubs-small
rotate: false
- xy: 1679, 290
+ xy: 1465, 39
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-thermal-generator-tiny
+block-shrubs-tiny
rotate: false
- xy: 1819, 219
+ xy: 1812, 163
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-thermal-generator-xlarge
+block-shrubs-xlarge
rotate: false
- xy: 781, 628
+ xy: 759, 816
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-thermal-pump-large
+block-silicon-smelter-large
rotate: false
xy: 1867, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-thermal-pump-medium
+block-silicon-smelter-medium
rotate: false
- xy: 1275, 482
+ xy: 935, 181
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-thermal-pump-small
+block-silicon-smelter-small
rotate: false
- xy: 1627, 264
+ xy: 1465, 13
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-thermal-pump-tiny
+block-silicon-smelter-tiny
rotate: false
- xy: 1837, 237
+ xy: 1830, 163
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-thermal-pump-xlarge
+block-silicon-smelter-xlarge
rotate: false
- xy: 831, 628
+ xy: 759, 766
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-thorium-reactor-large
- rotate: false
- xy: 1741, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-thorium-reactor-medium
- rotate: false
- xy: 1309, 516
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-thorium-reactor-small
- rotate: false
- xy: 1653, 264
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-thorium-reactor-tiny
- rotate: false
- xy: 1855, 255
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-thorium-reactor-xlarge
- rotate: false
- xy: 781, 578
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-thorium-wall-large
+block-snow-large
rotate: false
xy: 1783, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-thorium-wall-large-large
+block-snow-medium
+ rotate: false
+ xy: 969, 215
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-snow-pine-large
rotate: false
xy: 1825, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-thorium-wall-large-medium
+block-snow-pine-medium
rotate: false
- xy: 1343, 550
+ xy: 1003, 249
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-thorium-wall-large-small
+block-snow-pine-small
rotate: false
- xy: 1679, 264
+ xy: 1491, 27
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-thorium-wall-large-tiny
+block-snow-pine-tiny
rotate: false
- xy: 1873, 273
+ xy: 1763, 145
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-thorium-wall-large-xlarge
+block-snow-pine-xlarge
rotate: false
- xy: 831, 578
+ xy: 759, 716
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-thorium-wall-medium
+block-snow-small
rotate: false
- xy: 1003, 176
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-thorium-wall-small
- rotate: false
- xy: 1705, 342
+ xy: 1491, 1
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-thorium-wall-tiny
+block-snow-tiny
rotate: false
- xy: 1891, 291
+ xy: 1781, 145
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-thorium-wall-xlarge
+block-snow-xlarge
rotate: false
- xy: 351, 566
+ xy: 809, 828
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-thruster-large
+block-snowrock-large
rotate: false
xy: 1867, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-thruster-medium
+block-snowrock-medium
rotate: false
- xy: 1037, 210
+ xy: 1037, 283
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-thruster-small
+block-snowrock-small
rotate: false
- xy: 1705, 316
+ xy: 1517, 15
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-thruster-tiny
+block-snowrock-tiny
rotate: false
- xy: 1909, 309
+ xy: 1763, 127
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-thruster-xlarge
+block-snowrock-xlarge
rotate: false
- xy: 351, 516
+ xy: 809, 778
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-titan-factory-large
+block-snowrocks-large
rotate: false
xy: 1909, 849
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-titan-factory-medium
+block-snowrocks-medium
rotate: false
- xy: 1071, 244
+ xy: 1071, 317
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-titan-factory-small
+block-snowrocks-small
rotate: false
- xy: 1705, 290
+ xy: 1545, 30
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-titan-factory-tiny
+block-snowrocks-tiny
rotate: false
- xy: 1819, 201
+ xy: 1781, 127
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-titan-factory-xlarge
+block-snowrocks-xlarge
rotate: false
- xy: 401, 566
+ xy: 809, 728
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-titanium-conveyor-large
- rotate: false
- xy: 1783, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-titanium-conveyor-medium
- rotate: false
- xy: 1105, 278
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-titanium-conveyor-small
- rotate: false
- xy: 1705, 264
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-titanium-conveyor-tiny
- rotate: false
- xy: 1837, 219
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-titanium-conveyor-xlarge
- rotate: false
- xy: 351, 466
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-titanium-wall-large
+block-solar-panel-large
rotate: false
xy: 1825, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-titanium-wall-large-large
+block-solar-panel-large-large
rotate: false
xy: 1867, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-titanium-wall-large-medium
+block-solar-panel-large-medium
rotate: false
- xy: 1139, 312
+ xy: 1105, 351
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-titanium-wall-large-small
+block-solar-panel-large-small
rotate: false
- xy: 1731, 344
+ xy: 1571, 30
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-titanium-wall-large-tiny
+block-solar-panel-large-tiny
rotate: false
- xy: 1855, 237
+ xy: 1799, 145
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-titanium-wall-large-xlarge
+block-solar-panel-large-xlarge
rotate: false
- xy: 401, 516
+ xy: 809, 678
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-titanium-wall-medium
+block-solar-panel-medium
rotate: false
- xy: 1173, 346
+ xy: 1139, 385
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-titanium-wall-small
+block-solar-panel-small
rotate: false
- xy: 1757, 344
+ xy: 1597, 30
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-titanium-wall-tiny
+block-solar-panel-tiny
rotate: false
- xy: 1873, 255
+ xy: 1763, 109
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-titanium-wall-xlarge
+block-solar-panel-xlarge
rotate: false
- xy: 451, 566
+ xy: 331, 666
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-trident-ship-pad-large
+block-sorter-large
rotate: false
xy: 1909, 807
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-trident-ship-pad-medium
+block-sorter-medium
rotate: false
- xy: 1207, 380
+ xy: 1173, 419
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-trident-ship-pad-small
+block-sorter-small
rotate: false
- xy: 1731, 318
+ xy: 1543, 4
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-trident-ship-pad-tiny
+block-sorter-tiny
rotate: false
- xy: 1891, 273
+ xy: 1781, 109
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-trident-ship-pad-xlarge
+block-sorter-xlarge
rotate: false
- xy: 351, 416
+ xy: 331, 616
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-turbine-generator-large
- rotate: false
- xy: 1825, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-turbine-generator-medium
- rotate: false
- xy: 1241, 414
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-turbine-generator-small
- rotate: false
- xy: 1731, 292
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-turbine-generator-tiny
- rotate: false
- xy: 1909, 291
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-turbine-generator-xlarge
- rotate: false
- xy: 401, 466
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-unloader-large
+block-spawn-large
rotate: false
xy: 1867, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-unloader-medium
+block-spawn-medium
rotate: false
- xy: 1275, 448
+ xy: 901, 113
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-unloader-small
+block-spawn-small
rotate: false
- xy: 1757, 318
+ xy: 1569, 4
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-unloader-tiny
+block-spawn-tiny
rotate: false
- xy: 1819, 183
+ xy: 1799, 127
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-unloader-xlarge
+block-spawn-xlarge
rotate: false
- xy: 451, 516
+ xy: 381, 666
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-vault-large
+block-spectre-large
rotate: false
xy: 1909, 765
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-vault-medium
+block-spectre-medium
rotate: false
- xy: 1309, 482
+ xy: 935, 147
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-vault-small
+block-spectre-small
rotate: false
- xy: 1731, 266
+ xy: 1595, 4
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-vault-tiny
+block-spectre-tiny
rotate: false
- xy: 1837, 201
+ xy: 1817, 145
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-vault-xlarge
+block-spectre-xlarge
rotate: false
- xy: 501, 566
+ xy: 381, 616
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-water-extractor-large
- rotate: false
- xy: 1867, 681
- size: 40, 40
- orig: 40, 40
- offset: 0, 0
- index: -1
-block-water-extractor-medium
- rotate: false
- xy: 1343, 516
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-block-water-extractor-small
- rotate: false
- xy: 1757, 292
- size: 24, 24
- orig: 24, 24
- offset: 0, 0
- index: -1
-block-water-extractor-tiny
- rotate: false
- xy: 1855, 219
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-block-water-extractor-xlarge
- rotate: false
- xy: 351, 366
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-block-water-large
+block-spirit-factory-large
rotate: false
xy: 1909, 723
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-water-medium
+block-spirit-factory-medium
rotate: false
- xy: 1377, 550
+ xy: 969, 181
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-water-small
+block-spirit-factory-small
rotate: false
- xy: 1757, 266
+ xy: 1623, 17
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-water-tiny
+block-spirit-factory-tiny
rotate: false
- xy: 1873, 237
+ xy: 1799, 109
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-water-xlarge
+block-spirit-factory-xlarge
+ rotate: false
+ xy: 431, 666
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-spore-cluster-large
+ rotate: false
+ xy: 1951, 849
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-spore-cluster-medium
+ rotate: false
+ xy: 1003, 215
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-spore-cluster-small
+ rotate: false
+ xy: 1649, 17
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-spore-cluster-tiny
+ rotate: false
+ xy: 1817, 127
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-spore-cluster-xlarge
+ rotate: false
+ xy: 431, 616
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-spore-moss-large
+ rotate: false
+ xy: 1951, 807
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-spore-moss-medium
+ rotate: false
+ xy: 1037, 249
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-spore-moss-small
+ rotate: false
+ xy: 1675, 17
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-spore-moss-tiny
+ rotate: false
+ xy: 1817, 109
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-spore-moss-xlarge
+ rotate: false
+ xy: 481, 666
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-spore-pine-large
+ rotate: false
+ xy: 1951, 765
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-spore-pine-medium
+ rotate: false
+ xy: 1071, 283
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-spore-pine-small
+ rotate: false
+ xy: 1701, 17
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-spore-pine-tiny
+ rotate: false
+ xy: 1835, 145
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-spore-pine-xlarge
+ rotate: false
+ xy: 481, 616
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-spore-press-large
+ rotate: false
+ xy: 1951, 723
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-spore-press-medium
+ rotate: false
+ xy: 1105, 317
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-spore-press-small
+ rotate: false
+ xy: 1699, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-spore-press-tiny
+ rotate: false
+ xy: 1835, 127
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-spore-press-xlarge
+ rotate: false
+ xy: 531, 666
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-sporerocks-large
+ rotate: false
+ xy: 1979, 891
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-sporerocks-medium
+ rotate: false
+ xy: 1139, 351
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-sporerocks-small
+ rotate: false
+ xy: 1725, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-sporerocks-tiny
+ rotate: false
+ xy: 1835, 109
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-sporerocks-xlarge
+ rotate: false
+ xy: 531, 616
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-stone-large
+ rotate: false
+ xy: 1993, 849
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-stone-medium
+ rotate: false
+ xy: 1173, 385
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-stone-small
+ rotate: false
+ xy: 1751, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-stone-tiny
+ rotate: false
+ xy: 1779, 91
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-stone-xlarge
+ rotate: false
+ xy: 581, 666
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-surge-tower-large
+ rotate: false
+ xy: 1993, 807
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-surge-tower-medium
+ rotate: false
+ xy: 901, 79
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-surge-tower-small
+ rotate: false
+ xy: 1777, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-surge-tower-tiny
+ rotate: false
+ xy: 1779, 73
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-surge-tower-xlarge
+ rotate: false
+ xy: 581, 616
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-surge-wall-large
+ rotate: false
+ xy: 1993, 765
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-surge-wall-large-large
+ rotate: false
+ xy: 1993, 723
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-surge-wall-large-medium
+ rotate: false
+ xy: 935, 113
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-surge-wall-large-small
+ rotate: false
+ xy: 1803, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-surge-wall-large-tiny
+ rotate: false
+ xy: 1797, 91
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-surge-wall-large-xlarge
+ rotate: false
+ xy: 631, 666
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-surge-wall-medium
+ rotate: false
+ xy: 969, 147
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-surge-wall-small
+ rotate: false
+ xy: 1829, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-surge-wall-tiny
+ rotate: false
+ xy: 1779, 55
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-surge-wall-xlarge
+ rotate: false
+ xy: 631, 616
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-swarmer-large
+ rotate: false
+ xy: 943, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-swarmer-medium
+ rotate: false
+ xy: 1003, 181
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-swarmer-small
+ rotate: false
+ xy: 1855, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-swarmer-tiny
+ rotate: false
+ xy: 1797, 73
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-swarmer-xlarge
+ rotate: false
+ xy: 681, 666
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-tainted-water-large
+ rotate: false
+ xy: 985, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-tainted-water-medium
+ rotate: false
+ xy: 1037, 215
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-tainted-water-small
+ rotate: false
+ xy: 1881, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-tainted-water-tiny
+ rotate: false
+ xy: 1815, 91
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-tainted-water-xlarge
+ rotate: false
+ xy: 681, 616
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-tar-large
+ rotate: false
+ xy: 1027, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-tar-medium
+ rotate: false
+ xy: 1071, 249
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-tar-small
+ rotate: false
+ xy: 1907, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-tar-tiny
+ rotate: false
+ xy: 1779, 37
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-tar-xlarge
+ rotate: false
+ xy: 731, 666
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-tau-mech-pad-large
+ rotate: false
+ xy: 1069, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-tau-mech-pad-medium
+ rotate: false
+ xy: 1105, 283
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-tau-mech-pad-small
+ rotate: false
+ xy: 1933, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-tau-mech-pad-tiny
+ rotate: false
+ xy: 1797, 55
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-tau-mech-pad-xlarge
+ rotate: false
+ xy: 731, 616
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-tendrils-large
+ rotate: false
+ xy: 1111, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-tendrils-medium
+ rotate: false
+ xy: 1139, 317
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-tendrils-small
+ rotate: false
+ xy: 1959, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-tendrils-tiny
+ rotate: false
+ xy: 1815, 73
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-tendrils-xlarge
+ rotate: false
+ xy: 781, 628
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-thermal-generator-large
+ rotate: false
+ xy: 1153, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-thermal-generator-medium
+ rotate: false
+ xy: 1173, 351
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-thermal-generator-small
+ rotate: false
+ xy: 1985, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-thermal-generator-tiny
+ rotate: false
+ xy: 1833, 91
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-thermal-generator-xlarge
+ rotate: false
+ xy: 831, 628
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-thermal-pump-large
+ rotate: false
+ xy: 1195, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-thermal-pump-medium
+ rotate: false
+ xy: 901, 45
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-thermal-pump-small
+ rotate: false
+ xy: 2011, 405
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-thermal-pump-tiny
+ rotate: false
+ xy: 1797, 37
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-thermal-pump-xlarge
+ rotate: false
+ xy: 781, 578
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-thorium-reactor-large
+ rotate: false
+ xy: 1237, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-thorium-reactor-medium
+ rotate: false
+ xy: 935, 79
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-thorium-reactor-small
+ rotate: false
+ xy: 1714, 155
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-thorium-reactor-tiny
+ rotate: false
+ xy: 1815, 55
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-thorium-reactor-xlarge
+ rotate: false
+ xy: 831, 578
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-thorium-wall-large
+ rotate: false
+ xy: 1279, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-thorium-wall-large-large
+ rotate: false
+ xy: 1321, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-thorium-wall-large-medium
+ rotate: false
+ xy: 969, 113
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-thorium-wall-large-small
+ rotate: false
+ xy: 1711, 129
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-thorium-wall-large-tiny
+ rotate: false
+ xy: 1833, 73
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-thorium-wall-large-xlarge
+ rotate: false
+ xy: 351, 566
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-thorium-wall-medium
+ rotate: false
+ xy: 1003, 147
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-thorium-wall-small
+ rotate: false
+ xy: 1711, 103
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-thorium-wall-tiny
+ rotate: false
+ xy: 1815, 37
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-thorium-wall-xlarge
+ rotate: false
+ xy: 351, 516
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-thruster-large
+ rotate: false
+ xy: 1363, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-thruster-medium
+ rotate: false
+ xy: 1037, 181
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-thruster-small
+ rotate: false
+ xy: 1737, 129
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-thruster-tiny
+ rotate: false
+ xy: 1833, 55
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-thruster-xlarge
+ rotate: false
+ xy: 401, 566
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-titan-factory-large
+ rotate: false
+ xy: 1405, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-titan-factory-medium
+ rotate: false
+ xy: 1071, 215
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-titan-factory-small
+ rotate: false
+ xy: 1737, 103
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-titan-factory-tiny
+ rotate: false
+ xy: 1833, 37
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-titan-factory-xlarge
+ rotate: false
+ xy: 351, 466
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-titanium-conveyor-large
+ rotate: false
+ xy: 1447, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-titanium-conveyor-medium
+ rotate: false
+ xy: 1105, 249
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-titanium-conveyor-small
+ rotate: false
+ xy: 1727, 77
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-titanium-conveyor-tiny
+ rotate: false
+ xy: 1781, 19
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-titanium-conveyor-xlarge
+ rotate: false
+ xy: 401, 516
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-titanium-wall-large
+ rotate: false
+ xy: 1489, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-titanium-wall-large-large
+ rotate: false
+ xy: 1531, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-titanium-wall-large-medium
+ rotate: false
+ xy: 1139, 283
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-titanium-wall-large-small
+ rotate: false
+ xy: 1727, 51
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-titanium-wall-large-tiny
+ rotate: false
+ xy: 1781, 1
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-titanium-wall-large-xlarge
+ rotate: false
+ xy: 451, 566
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-titanium-wall-medium
+ rotate: false
+ xy: 1173, 317
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-titanium-wall-small
+ rotate: false
+ xy: 1727, 25
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-titanium-wall-tiny
+ rotate: false
+ xy: 1799, 19
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-titanium-wall-xlarge
+ rotate: false
+ xy: 351, 416
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-trident-ship-pad-large
+ rotate: false
+ xy: 1573, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-trident-ship-pad-medium
+ rotate: false
+ xy: 935, 45
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-trident-ship-pad-small
+ rotate: false
+ xy: 1753, 77
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-trident-ship-pad-tiny
+ rotate: false
+ xy: 1799, 1
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-trident-ship-pad-xlarge
+ rotate: false
+ xy: 401, 466
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-turbine-generator-large
+ rotate: false
+ xy: 1615, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-turbine-generator-medium
+ rotate: false
+ xy: 969, 79
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-turbine-generator-small
+ rotate: false
+ xy: 1753, 51
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-turbine-generator-tiny
+ rotate: false
+ xy: 1817, 19
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-turbine-generator-xlarge
+ rotate: false
+ xy: 451, 516
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-unloader-large
+ rotate: false
+ xy: 1657, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-unloader-medium
+ rotate: false
+ xy: 1003, 113
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-unloader-small
+ rotate: false
+ xy: 1753, 25
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-unloader-tiny
+ rotate: false
+ xy: 1817, 1
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-unloader-xlarge
+ rotate: false
+ xy: 501, 566
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-vault-large
+ rotate: false
+ xy: 1699, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-vault-medium
+ rotate: false
+ xy: 1037, 147
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-vault-small
+ rotate: false
+ xy: 1657, 395
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-vault-tiny
+ rotate: false
+ xy: 1835, 19
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-vault-xlarge
+ rotate: false
+ xy: 351, 366
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+block-water-extractor-large
+ rotate: false
+ xy: 1741, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-water-extractor-medium
+ rotate: false
+ xy: 1071, 181
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-water-extractor-small
+ rotate: false
+ xy: 1657, 369
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-water-extractor-tiny
+ rotate: false
+ xy: 1835, 1
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-water-extractor-xlarge
rotate: false
xy: 401, 416
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-wave-large
+block-water-large
rotate: false
- xy: 1909, 681
+ xy: 1783, 681
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-wave-medium
+block-water-medium
rotate: false
- xy: 1003, 142
+ xy: 1105, 215
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-wave-small
+block-water-small
rotate: false
- xy: 1559, 262
+ xy: 1683, 379
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-wave-tiny
+block-water-tiny
rotate: false
- xy: 1891, 255
+ xy: 1876, 332
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-wave-xlarge
+block-water-xlarge
rotate: false
xy: 451, 466
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-white-tree-dead-large
+block-wave-large
rotate: false
- xy: 881, 639
+ xy: 1825, 681
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-white-tree-dead-medium
+block-wave-medium
rotate: false
- xy: 1037, 176
+ xy: 1139, 249
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-white-tree-dead-small
+block-wave-small
rotate: false
- xy: 1731, 240
+ xy: 1709, 379
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-white-tree-dead-tiny
+block-wave-tiny
rotate: false
- xy: 1909, 273
+ xy: 1894, 332
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-white-tree-dead-xlarge
+block-wave-xlarge
rotate: false
xy: 501, 516
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-white-tree-large
+block-white-tree-dead-large
rotate: false
- xy: 881, 597
+ xy: 1867, 681
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-white-tree-medium
+block-white-tree-dead-medium
rotate: false
- xy: 1071, 210
+ xy: 1173, 283
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-white-tree-small
+block-white-tree-dead-small
rotate: false
- xy: 1757, 240
+ xy: 1735, 379
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-white-tree-tiny
+block-white-tree-dead-tiny
rotate: false
- xy: 1819, 165
+ xy: 1912, 332
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-white-tree-xlarge
+block-white-tree-dead-xlarge
rotate: false
xy: 551, 566
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-block-wraith-factory-large
+block-white-tree-large
rotate: false
- xy: 923, 639
+ xy: 1909, 681
size: 40, 40
orig: 40, 40
offset: 0, 0
index: -1
-block-wraith-factory-medium
+block-white-tree-medium
rotate: false
- xy: 1105, 244
+ xy: 969, 45
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-block-wraith-factory-small
+block-white-tree-small
rotate: false
- xy: 1577, 236
+ xy: 1761, 379
size: 24, 24
orig: 24, 24
offset: 0, 0
index: -1
-block-wraith-factory-tiny
+block-white-tree-tiny
rotate: false
- xy: 1837, 183
+ xy: 1930, 333
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-block-wraith-factory-xlarge
+block-white-tree-xlarge
rotate: false
xy: 351, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
+block-wraith-factory-large
+ rotate: false
+ xy: 1951, 681
+ size: 40, 40
+ orig: 40, 40
+ offset: 0, 0
+ index: -1
+block-wraith-factory-medium
+ rotate: false
+ xy: 1003, 79
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+block-wraith-factory-small
+ rotate: false
+ xy: 1787, 379
+ size: 24, 24
+ orig: 24, 24
+ offset: 0, 0
+ index: -1
+block-wraith-factory-tiny
+ rotate: false
+ xy: 1948, 333
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+block-wraith-factory-xlarge
+ rotate: false
+ xy: 401, 366
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
button
rotate: false
- xy: 1535, 652
+ xy: 1071, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16210,7 +16266,7 @@ button
index: -1
button-disabled
rotate: false
- xy: 965, 652
+ xy: 859, 686
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16218,7 +16274,7 @@ button-disabled
index: -1
button-down
rotate: false
- xy: 923, 610
+ xy: 1993, 694
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16226,7 +16282,7 @@ button-down
index: -1
button-edge-1
rotate: false
- xy: 1003, 652
+ xy: 897, 686
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16234,7 +16290,7 @@ button-edge-1
index: -1
button-edge-2
rotate: false
- xy: 1041, 652
+ xy: 821, 946
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16242,7 +16298,7 @@ button-edge-2
index: -1
button-edge-3
rotate: false
- xy: 1079, 652
+ xy: 881, 657
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16250,7 +16306,7 @@ button-edge-3
index: -1
button-edge-4
rotate: false
- xy: 1117, 652
+ xy: 881, 628
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16258,7 +16314,7 @@ button-edge-4
index: -1
button-edge-over-4
rotate: false
- xy: 1155, 652
+ xy: 881, 599
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16266,7 +16322,7 @@ button-edge-over-4
index: -1
button-over
rotate: false
- xy: 1193, 652
+ xy: 1993, 665
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16274,7 +16330,7 @@ button-over
index: -1
button-red
rotate: false
- xy: 1231, 652
+ xy: 919, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16282,7 +16338,7 @@ button-red
index: -1
button-right
rotate: false
- xy: 1345, 652
+ xy: 957, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16290,7 +16346,7 @@ button-right
index: -1
button-right-down
rotate: false
- xy: 1269, 652
+ xy: 919, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16298,7 +16354,7 @@ button-right-down
index: -1
button-right-over
rotate: false
- xy: 1307, 652
+ xy: 957, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16306,7 +16362,7 @@ button-right-over
index: -1
button-select
rotate: false
- xy: 1577, 210
+ xy: 1813, 379
size: 24, 24
split: 4, 4, 4, 4
orig: 24, 24
@@ -16314,7 +16370,7 @@ button-select
index: -1
button-square
rotate: false
- xy: 1459, 652
+ xy: 1033, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16322,7 +16378,7 @@ button-square
index: -1
button-square-down
rotate: false
- xy: 1383, 652
+ xy: 995, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16330,7 +16386,7 @@ button-square-down
index: -1
button-square-over
rotate: false
- xy: 1421, 652
+ xy: 995, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16338,7 +16394,7 @@ button-square-over
index: -1
button-trans
rotate: false
- xy: 1497, 652
+ xy: 1033, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16346,42 +16402,42 @@ button-trans
index: -1
check-disabled
rotate: false
- xy: 1139, 278
+ xy: 1037, 113
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
check-off
rotate: false
- xy: 1173, 312
+ xy: 1071, 147
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
check-on
rotate: false
- xy: 1207, 346
+ xy: 1105, 181
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
check-on-disabled
rotate: false
- xy: 1241, 380
+ xy: 1139, 215
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
check-on-over
rotate: false
- xy: 1275, 414
+ xy: 1173, 249
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
check-over
rotate: false
- xy: 1309, 448
+ xy: 1003, 45
size: 32, 32
orig: 32, 32
offset: 0, 0
@@ -16395,7 +16451,7 @@ clear
index: -1
cursor
rotate: false
- xy: 1979, 893
+ xy: 2001, 969
size: 4, 4
orig: 4, 4
offset: 0, 0
@@ -16409,7 +16465,7 @@ discord-banner
index: -1
flat-down-base
rotate: false
- xy: 1573, 652
+ xy: 1071, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -16417,3164 +16473,3192 @@ flat-down-base
index: -1
icon-about
rotate: false
- xy: 401, 366
+ xy: 451, 416
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-about-small
rotate: false
- xy: 1343, 482
+ xy: 1037, 79
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-about-smaller
rotate: false
- xy: 1615, 484
+ xy: 1411, 343
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-about-tiny
rotate: false
- xy: 1855, 201
+ xy: 1966, 333
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-add
rotate: false
- xy: 451, 416
+ xy: 501, 466
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-add-small
rotate: false
- xy: 1377, 516
+ xy: 1071, 113
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-add-smaller
rotate: false
- xy: 1649, 518
+ xy: 1445, 377
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-add-tiny
rotate: false
- xy: 1873, 219
+ xy: 1984, 333
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-admin
rotate: false
- xy: 501, 466
+ xy: 551, 516
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-admin-badge
rotate: false
- xy: 551, 516
+ xy: 601, 566
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-admin-badge-small
rotate: false
- xy: 1411, 550
+ xy: 1105, 147
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-admin-badge-smaller
rotate: false
- xy: 1683, 552
+ xy: 1479, 411
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-admin-badge-tiny
rotate: false
- xy: 1891, 237
+ xy: 2002, 333
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-admin-small
rotate: false
- xy: 1003, 108
+ xy: 1139, 181
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-admin-smaller
rotate: false
- xy: 1275, 110
+ xy: 1513, 445
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-admin-tiny
rotate: false
- xy: 1909, 255
+ xy: 2020, 333
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-arrow
rotate: false
- xy: 601, 566
+ xy: 351, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-arrow-16
rotate: false
- xy: 601, 566
+ xy: 351, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-arrow-16-small
rotate: false
- xy: 1037, 142
+ xy: 1173, 215
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-arrow-small
rotate: false
- xy: 1037, 142
+ xy: 1173, 215
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-arrow-16-smaller
rotate: false
- xy: 1309, 144
+ xy: 1547, 479
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-arrow-smaller
rotate: false
- xy: 1309, 144
+ xy: 1547, 479
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-arrow-16-tiny
rotate: false
- xy: 1819, 147
+ xy: 1881, 314
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-arrow-tiny
rotate: false
- xy: 1819, 147
+ xy: 1881, 314
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-arrow-down
rotate: false
- xy: 351, 266
+ xy: 401, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-arrow-down-small
rotate: false
- xy: 1071, 176
+ xy: 1037, 45
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-arrow-down-smaller
rotate: false
- xy: 1343, 178
+ xy: 1581, 513
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-arrow-down-tiny
rotate: false
- xy: 1837, 165
+ xy: 1881, 296
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-arrow-left
rotate: false
- xy: 401, 316
+ xy: 451, 366
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-arrow-left-small
rotate: false
- xy: 1105, 210
+ xy: 1071, 79
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-arrow-left-smaller
rotate: false
- xy: 1377, 212
+ xy: 1615, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-arrow-left-tiny
rotate: false
- xy: 1855, 183
+ xy: 1899, 314
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-arrow-right
rotate: false
- xy: 451, 366
+ xy: 501, 416
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-arrow-right-small
rotate: false
- xy: 1139, 244
+ xy: 1105, 113
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-arrow-right-smaller
rotate: false
- xy: 1411, 246
+ xy: 1207, 105
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-arrow-right-tiny
rotate: false
- xy: 1873, 201
+ xy: 1881, 278
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-arrow-up
rotate: false
- xy: 501, 416
+ xy: 551, 466
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-arrow-up-small
rotate: false
- xy: 1173, 278
+ xy: 1139, 147
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-arrow-up-smaller
rotate: false
- xy: 1445, 280
+ xy: 1241, 139
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-arrow-up-tiny
rotate: false
- xy: 1891, 219
+ xy: 1899, 296
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-back
rotate: false
- xy: 551, 466
+ xy: 601, 516
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-back-small
rotate: false
- xy: 1207, 312
+ xy: 1173, 181
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-back-smaller
rotate: false
- xy: 1479, 314
+ xy: 1275, 173
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-back-tiny
rotate: false
- xy: 1909, 237
+ xy: 1899, 278
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-ban
rotate: false
- xy: 601, 516
+ xy: 651, 566
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-ban-small
rotate: false
- xy: 1241, 346
+ xy: 1071, 45
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-ban-smaller
rotate: false
- xy: 1513, 348
+ xy: 1309, 207
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-ban-tiny
rotate: false
- xy: 1819, 129
+ xy: 1917, 314
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-break
rotate: false
- xy: 651, 566
+ xy: 351, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-break-small
rotate: false
- xy: 1275, 380
+ xy: 1105, 79
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-break-smaller
rotate: false
- xy: 1547, 382
+ xy: 1343, 241
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-break-tiny
rotate: false
- xy: 1837, 147
+ xy: 1917, 296
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-cancel
rotate: false
- xy: 351, 216
+ xy: 401, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-cancel-small
rotate: false
- xy: 1309, 414
+ xy: 1139, 113
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-cancel-smaller
rotate: false
- xy: 1581, 416
+ xy: 1377, 275
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-cancel-tiny
rotate: false
- xy: 1855, 165
+ xy: 1917, 278
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-quit-tiny
rotate: false
- xy: 1855, 165
+ xy: 1917, 278
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-changelog
rotate: false
- xy: 401, 266
+ xy: 451, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-changelog-small
rotate: false
- xy: 1343, 448
+ xy: 1173, 147
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-changelog-smaller
rotate: false
- xy: 1615, 452
+ xy: 1411, 311
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-changelog-tiny
rotate: false
- xy: 1873, 183
+ xy: 1935, 315
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-chat
rotate: false
- xy: 451, 316
+ xy: 501, 366
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-chat-small
rotate: false
- xy: 1377, 482
+ xy: 1105, 45
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-chat-smaller
rotate: false
- xy: 1715, 552
+ xy: 1647, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-chat-tiny
rotate: false
- xy: 1891, 201
+ xy: 1935, 297
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-check
rotate: false
- xy: 501, 366
+ xy: 551, 416
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-check-small
rotate: false
- xy: 1411, 516
+ xy: 1139, 79
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-check-smaller
rotate: false
- xy: 1747, 552
+ xy: 1207, 73
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-check-tiny
rotate: false
- xy: 1909, 219
+ xy: 1953, 315
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-command-attack
rotate: false
- xy: 551, 416
+ xy: 601, 466
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-command-attack-small
rotate: false
- xy: 1445, 550
+ xy: 1173, 113
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-command-attack-smaller
rotate: false
- xy: 1779, 552
+ xy: 1679, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-command-attack-tiny
rotate: false
- xy: 1819, 111
+ xy: 1935, 279
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-command-patrol
rotate: false
- xy: 601, 466
+ xy: 651, 516
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-command-patrol-small
rotate: false
- xy: 1037, 108
+ xy: 1139, 45
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-command-patrol-smaller
rotate: false
- xy: 1941, 649
+ xy: 1207, 41
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-command-patrol-tiny
rotate: false
- xy: 1837, 129
+ xy: 1953, 297
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-command-rally
rotate: false
- xy: 651, 516
+ xy: 701, 566
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-command-rally-small
rotate: false
- xy: 1071, 142
+ xy: 1173, 79
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-command-rally-smaller
rotate: false
- xy: 935, 68
+ xy: 1711, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-command-rally-tiny
rotate: false
- xy: 1855, 147
+ xy: 1971, 315
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-command-retreat
rotate: false
- xy: 701, 566
+ xy: 351, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-command-retreat-small
rotate: false
- xy: 1105, 176
+ xy: 1173, 45
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-command-retreat-smaller
rotate: false
- xy: 935, 36
+ xy: 1743, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-command-retreat-tiny
rotate: false
- xy: 1873, 165
+ xy: 1953, 279
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-copy
rotate: false
- xy: 351, 166
+ xy: 401, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-copy-small
rotate: false
- xy: 1139, 210
+ xy: 901, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-copy-smaller
rotate: false
- xy: 967, 68
+ xy: 1775, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-copy-tiny
rotate: false
- xy: 1891, 183
+ xy: 1971, 297
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-crafting
rotate: false
- xy: 401, 216
+ xy: 451, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-crafting-small
rotate: false
- xy: 1173, 244
+ xy: 935, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-crafting-smaller
rotate: false
- xy: 967, 36
+ xy: 1807, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-crafting-tiny
rotate: false
- xy: 1909, 201
+ xy: 1989, 315
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-cursor
rotate: false
- xy: 451, 266
+ xy: 501, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-cursor-small
rotate: false
- xy: 1207, 278
+ xy: 969, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-cursor-smaller
rotate: false
- xy: 851, 4
+ xy: 1839, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-cursor-tiny
rotate: false
- xy: 1837, 111
+ xy: 1971, 279
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-database
rotate: false
- xy: 501, 316
+ xy: 551, 366
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-database-small
rotate: false
- xy: 1241, 312
+ xy: 1003, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-database-smaller
rotate: false
- xy: 883, 4
+ xy: 1871, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-database-tiny
rotate: false
- xy: 1855, 129
+ xy: 1989, 297
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-defense
rotate: false
- xy: 551, 366
+ xy: 601, 416
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-defense-small
rotate: false
- xy: 1275, 346
+ xy: 1037, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-defense-smaller
rotate: false
- xy: 915, 4
+ xy: 1903, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-defense-tiny
rotate: false
- xy: 1873, 147
+ xy: 2007, 315
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-dev-builds
rotate: false
- xy: 601, 416
+ xy: 651, 466
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-dev-builds-small
rotate: false
- xy: 1309, 380
+ xy: 1071, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-dev-builds-smaller
rotate: false
- xy: 947, 4
+ xy: 1935, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-dev-builds-tiny
rotate: false
- xy: 1891, 165
+ xy: 1989, 279
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-diagonal
rotate: false
- xy: 651, 466
+ xy: 701, 516
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-diagonal-small
rotate: false
- xy: 1343, 414
+ xy: 1105, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-diagonal-smaller
rotate: false
- xy: 979, 4
+ xy: 1207, 9
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-diagonal-tiny
rotate: false
- xy: 1909, 183
+ xy: 2007, 297
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-discord
rotate: false
- xy: 701, 516
+ xy: 351, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-discord-small
rotate: false
- xy: 1377, 448
+ xy: 1139, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-discord-smaller
rotate: false
- xy: 1985, 663
+ xy: 1967, 547
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-discord-tiny
rotate: false
- xy: 1855, 111
+ xy: 2007, 279
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-distribution
rotate: false
- xy: 351, 116
+ xy: 401, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-distribution-small
rotate: false
- xy: 1411, 482
+ xy: 1173, 11
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-distribution-smaller
rotate: false
- xy: 2017, 663
+ xy: 1411, 279
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-distribution-tiny
rotate: false
- xy: 1873, 129
+ xy: 2025, 315
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-donate
rotate: false
- xy: 401, 166
+ xy: 451, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-donate-small
rotate: false
- xy: 1445, 516
+ xy: 1207, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-donate-smaller
rotate: false
- xy: 1807, 586
+ xy: 1443, 343
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-donate-tiny
rotate: false
- xy: 1891, 147
+ xy: 2025, 297
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-dots
rotate: false
- xy: 451, 216
+ xy: 501, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-dots-small
rotate: false
- xy: 1479, 550
+ xy: 1207, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-dots-smaller
rotate: false
- xy: 1811, 554
+ xy: 1443, 311
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-dots-tiny
rotate: false
- xy: 1909, 165
+ xy: 2025, 279
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-editor
rotate: false
- xy: 501, 266
+ xy: 551, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-editor-small
rotate: false
- xy: 1071, 108
+ xy: 1241, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-editor-smaller
rotate: false
- xy: 1003, 76
+ xy: 1443, 279
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-editor-tiny
rotate: false
- xy: 1873, 111
+ xy: 1881, 260
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-effect
rotate: false
- xy: 551, 316
+ xy: 601, 366
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-effect-small
rotate: false
- xy: 1105, 142
+ xy: 1207, 477
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-effect-smaller
rotate: false
- xy: 1035, 76
+ xy: 1477, 377
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-effect-tiny
rotate: false
- xy: 1891, 129
+ xy: 1899, 260
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-elevation
rotate: false
- xy: 601, 366
+ xy: 651, 416
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-elevation-small
rotate: false
- xy: 1139, 176
+ xy: 1241, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-elevation-smaller
rotate: false
- xy: 1067, 76
+ xy: 1475, 345
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-elevation-tiny
rotate: false
- xy: 1909, 147
+ xy: 1917, 260
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-eraser
rotate: false
- xy: 651, 416
+ xy: 701, 466
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-eraser-small
rotate: false
- xy: 1173, 210
+ xy: 1275, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-eraser-smaller
rotate: false
- xy: 1099, 76
+ xy: 1475, 313
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-eraser-tiny
rotate: false
- xy: 1891, 111
+ xy: 1935, 261
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-exit
rotate: false
- xy: 701, 466
+ xy: 351, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-exit-small
rotate: false
- xy: 1207, 244
+ xy: 1207, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-exit-smaller
rotate: false
- xy: 1131, 76
+ xy: 1475, 281
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-exit-tiny
rotate: false
- xy: 1909, 129
+ xy: 1953, 261
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-f-droid
rotate: false
- xy: 351, 66
+ xy: 401, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-f-droid-small
rotate: false
- xy: 1241, 278
+ xy: 1241, 477
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-f-droid-smaller
rotate: false
- xy: 1163, 76
+ xy: 1511, 411
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-f-droid-tiny
rotate: false
- xy: 1909, 111
+ xy: 1971, 261
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
icon-fdroid
rotate: false
- xy: 401, 116
+ xy: 451, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
icon-fdroid-small
rotate: false
- xy: 1275, 312
+ xy: 1275, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-fdroid-smaller
rotate: false
- xy: 1195, 76
+ xy: 1509, 379
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-fdroid-tiny
rotate: false
- xy: 1819, 93
+ xy: 1989, 261
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-file
- rotate: false
- xy: 451, 166
- size: 48, 48
- orig: 48, 48
- offset: 0, 0
- index: -1
-icon-file-image
+icon-feathub
rotate: false
xy: 501, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-file-image-small
+icon-feathub-small
rotate: false
- xy: 1309, 346
+ xy: 1309, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-file-image-smaller
+icon-feathub-smaller
rotate: false
- xy: 1227, 76
+ xy: 1545, 445
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-file-image-tiny
+icon-feathub-tiny
rotate: false
- xy: 1837, 93
+ xy: 2007, 261
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-file-small
- rotate: false
- xy: 1343, 380
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-file-smaller
- rotate: false
- xy: 999, 44
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-file-text
+icon-file
rotate: false
xy: 551, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-file-text-small
- rotate: false
- xy: 1377, 414
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-file-text-smaller
- rotate: false
- xy: 1031, 44
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-file-text-tiny
- rotate: false
- xy: 1855, 93
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-file-tiny
- rotate: false
- xy: 1873, 93
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-fill
+icon-file-image
rotate: false
xy: 601, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-fill-small
+icon-file-image-small
rotate: false
- xy: 1411, 448
+ xy: 1207, 409
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-fill-smaller
+icon-file-image-smaller
rotate: false
- xy: 1063, 44
+ xy: 1543, 413
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-fill-tiny
+icon-file-image-tiny
rotate: false
- xy: 1891, 93
+ xy: 2025, 261
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-flip
+icon-file-small
+ rotate: false
+ xy: 1241, 443
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-file-smaller
+ rotate: false
+ xy: 1579, 479
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-file-text
rotate: false
xy: 651, 366
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-flip-small
+icon-file-text-small
rotate: false
- xy: 1445, 482
+ xy: 1275, 477
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-flip-smaller
+icon-file-text-smaller
rotate: false
- xy: 1095, 44
+ xy: 1577, 447
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-flip-tiny
+icon-file-text-tiny
rotate: false
- xy: 1909, 93
+ xy: 1842, 253
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-floppy
+icon-file-tiny
+ rotate: false
+ xy: 1842, 235
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-fill
rotate: false
xy: 701, 416
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-floppy-16
+icon-fill-small
+ rotate: false
+ xy: 1309, 511
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-fill-smaller
+ rotate: false
+ xy: 1613, 513
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-fill-tiny
+ rotate: false
+ xy: 1842, 217
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-flip
rotate: false
xy: 401, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-floppy-16-small
+icon-flip-small
rotate: false
- xy: 1479, 516
+ xy: 1343, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-floppy-16-smaller
+icon-flip-smaller
rotate: false
- xy: 1127, 44
+ xy: 1611, 481
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-floppy-16-tiny
+icon-flip-tiny
rotate: false
- xy: 1927, 305
+ xy: 1842, 199
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-floppy-small
- rotate: false
- xy: 1513, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-floppy-smaller
- rotate: false
- xy: 1159, 44
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-floppy-tiny
- rotate: false
- xy: 1927, 287
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-folder
+icon-floppy
rotate: false
xy: 451, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-folder-parent
+icon-floppy-16
rotate: false
xy: 501, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-folder-parent-small
+icon-floppy-16-small
rotate: false
- xy: 1105, 108
+ xy: 1207, 375
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-folder-parent-smaller
+icon-floppy-16-smaller
rotate: false
- xy: 1191, 44
+ xy: 1645, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-folder-parent-tiny
+icon-floppy-16-tiny
rotate: false
- xy: 1927, 269
+ xy: 1842, 181
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-folder-small
+icon-floppy-small
rotate: false
- xy: 1139, 142
+ xy: 1241, 409
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-folder-smaller
+icon-floppy-smaller
rotate: false
- xy: 1223, 44
+ xy: 1677, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-folder-tiny
+icon-floppy-tiny
rotate: false
- xy: 1927, 251
+ xy: 1848, 163
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-github
+icon-folder
rotate: false
xy: 551, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-github-small
- rotate: false
- xy: 1173, 176
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-github-smaller
- rotate: false
- xy: 1011, 12
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-github-tiny
- rotate: false
- xy: 1927, 233
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-google-play
+icon-folder-parent
rotate: false
xy: 601, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-google-play-small
+icon-folder-parent-small
rotate: false
- xy: 1207, 210
+ xy: 1275, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-google-play-smaller
+icon-folder-parent-smaller
rotate: false
- xy: 1043, 12
+ xy: 1709, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-google-play-tiny
+icon-folder-parent-tiny
rotate: false
- xy: 1927, 215
+ xy: 1860, 255
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-grid
+icon-folder-small
+ rotate: false
+ xy: 1309, 477
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-folder-smaller
+ rotate: false
+ xy: 1741, 515
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-folder-tiny
+ rotate: false
+ xy: 1860, 237
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-github
rotate: false
xy: 651, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-grid-small
+icon-github-small
rotate: false
- xy: 1241, 244
+ xy: 1343, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-grid-smaller
+icon-github-smaller
rotate: false
- xy: 1075, 12
+ xy: 1773, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-grid-tiny
+icon-github-tiny
rotate: false
- xy: 1927, 197
+ xy: 1860, 219
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-home
+icon-google-play
rotate: false
xy: 701, 366
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-home-small
+icon-google-play-small
rotate: false
- xy: 1275, 278
+ xy: 1377, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-home-smaller
+icon-google-play-smaller
rotate: false
- xy: 1107, 12
+ xy: 1805, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-home-tiny
+icon-google-play-tiny
rotate: false
- xy: 1927, 179
+ xy: 1860, 201
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-host
+icon-grid
rotate: false
xy: 451, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-host-small
+icon-grid-small
rotate: false
- xy: 1309, 312
+ xy: 1207, 341
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-host-smaller
+icon-grid-smaller
rotate: false
- xy: 1139, 12
+ xy: 1837, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-host-tiny
+icon-grid-tiny
rotate: false
- xy: 1927, 161
+ xy: 1860, 183
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-info
+icon-home
rotate: false
xy: 501, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-info-small
+icon-home-small
rotate: false
- xy: 1343, 346
+ xy: 1241, 375
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-info-smaller
+icon-home-smaller
rotate: false
- xy: 1171, 12
+ xy: 1869, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-info-tiny
+icon-home-tiny
rotate: false
- xy: 1927, 143
+ xy: 1878, 242
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-itch.io
+icon-host
rotate: false
xy: 551, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-itch.io-small
+icon-host-small
rotate: false
- xy: 1377, 380
+ xy: 1275, 409
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-itch.io-smaller
+icon-host-smaller
rotate: false
- xy: 1203, 12
+ xy: 1901, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-itch.io-tiny
+icon-host-tiny
rotate: false
- xy: 1927, 125
+ xy: 1878, 224
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-item
+icon-info
rotate: false
xy: 601, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-item-small
+icon-info-small
rotate: false
- xy: 1411, 414
+ xy: 1309, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-item-smaller
+icon-info-smaller
rotate: false
- xy: 1235, 12
+ xy: 1933, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-item-tiny
+icon-info-tiny
rotate: false
- xy: 1927, 107
+ xy: 1896, 242
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-line
+icon-itch.io
rotate: false
xy: 651, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-line-small
+icon-itch.io-small
rotate: false
- xy: 1445, 448
+ xy: 1343, 477
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-line-smaller
+icon-itch.io-smaller
rotate: false
- xy: 1259, 76
+ xy: 1965, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-line-tiny
+icon-itch.io-tiny
rotate: false
- xy: 1927, 89
+ xy: 1878, 206
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-link
+icon-item
rotate: false
xy: 701, 316
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-link-small
+icon-item-small
rotate: false
- xy: 1479, 482
+ xy: 1377, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-link-smaller
+icon-item-smaller
rotate: false
- xy: 1255, 44
+ xy: 1239, 105
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-link-tiny
+icon-item-tiny
rotate: false
- xy: 1603, 92
+ xy: 1896, 224
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-liquid
+icon-line
rotate: false
xy: 501, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-liquid-consume
+icon-line-small
+ rotate: false
+ xy: 1411, 545
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-line-smaller
+ rotate: false
+ xy: 1239, 73
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-line-tiny
+ rotate: false
+ xy: 1914, 242
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-link
rotate: false
xy: 551, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-liquid-consume-small
+icon-link-small
rotate: false
- xy: 1513, 516
+ xy: 1207, 307
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-liquid-consume-smaller
+icon-link-smaller
rotate: false
- xy: 1267, 12
+ xy: 1239, 41
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-liquid-consume-tiny
+icon-link-tiny
rotate: false
- xy: 1591, 74
+ xy: 1878, 188
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-liquid-small
- rotate: false
- xy: 1547, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-liquid-smaller
- rotate: false
- xy: 1287, 44
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-liquid-tiny
- rotate: false
- xy: 1609, 74
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-load
+icon-liquid
rotate: false
xy: 601, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-load-image
+icon-liquid-consume
rotate: false
xy: 651, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-load-image-small
+icon-liquid-consume-small
rotate: false
- xy: 1139, 108
+ xy: 1241, 341
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-load-image-smaller
+icon-liquid-consume-smaller
rotate: false
- xy: 1299, 12
+ xy: 1239, 9
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-load-image-tiny
+icon-liquid-consume-tiny
rotate: false
- xy: 1603, 56
+ xy: 1896, 206
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-load-map
+icon-liquid-small
+ rotate: false
+ xy: 1275, 375
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-liquid-smaller
+ rotate: false
+ xy: 1273, 139
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-liquid-tiny
+ rotate: false
+ xy: 1914, 224
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-load
rotate: false
xy: 701, 266
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-load-map-small
- rotate: false
- xy: 1173, 142
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-load-map-smaller
- rotate: false
- xy: 1291, 78
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-load-map-tiny
- rotate: false
- xy: 1603, 38
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-load-small
- rotate: false
- xy: 1207, 176
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-load-smaller
- rotate: false
- xy: 1307, 110
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-load-tiny
- rotate: false
- xy: 1603, 20
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-loading
+icon-load-image
rotate: false
xy: 551, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-loading-small
+icon-load-image-small
rotate: false
- xy: 1241, 210
+ xy: 1309, 409
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-loading-smaller
+icon-load-image-smaller
rotate: false
- xy: 1323, 78
+ xy: 1271, 107
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-loading-tiny
+icon-load-image-tiny
rotate: false
- xy: 1945, 305
+ xy: 1896, 188
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-locked
+icon-load-map
rotate: false
xy: 601, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-locked-small
+icon-load-map-small
rotate: false
- xy: 1275, 244
+ xy: 1343, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-locked-smaller
+icon-load-map-smaller
rotate: false
- xy: 1319, 46
+ xy: 1271, 75
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-locked-tiny
+icon-load-map-tiny
rotate: false
- xy: 1945, 287
+ xy: 1914, 206
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-map
+icon-load-small
+ rotate: false
+ xy: 1377, 477
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-load-smaller
+ rotate: false
+ xy: 1271, 43
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-load-tiny
+ rotate: false
+ xy: 1914, 188
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-loading
rotate: false
xy: 651, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-map-small
+icon-loading-small
rotate: false
- xy: 1309, 278
+ xy: 1411, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-map-smaller
+icon-loading-smaller
rotate: false
- xy: 1331, 14
+ xy: 1271, 11
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-map-tiny
+icon-loading-tiny
rotate: false
- xy: 1945, 269
+ xy: 1853, 145
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-menu
+icon-locked
rotate: false
xy: 701, 216
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-menu-large
+icon-locked-small
+ rotate: false
+ xy: 1445, 545
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-locked-smaller
+ rotate: false
+ xy: 1307, 173
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-locked-tiny
+ rotate: false
+ xy: 1853, 127
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-map
rotate: false
xy: 601, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-menu-large-small
+icon-map-small
rotate: false
- xy: 1343, 312
+ xy: 1207, 273
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-menu-large-smaller
+icon-map-smaller
rotate: false
- xy: 1351, 46
+ xy: 1305, 141
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-menu-large-tiny
+icon-map-tiny
rotate: false
- xy: 1945, 251
+ xy: 1853, 109
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-menu-small
- rotate: false
- xy: 1377, 346
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-menu-smaller
- rotate: false
- xy: 1363, 14
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-menu-tiny
- rotate: false
- xy: 1945, 233
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-missing
+icon-menu
rotate: false
xy: 651, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-missing-small
- rotate: false
- xy: 1411, 380
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-missing-smaller
- rotate: false
- xy: 1615, 420
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-missing-tiny
- rotate: false
- xy: 1945, 215
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-mode-attack
+icon-menu-large
rotate: false
xy: 701, 166
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-mode-attack-small
+icon-menu-large-small
rotate: false
- xy: 1445, 414
+ xy: 1241, 307
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-mode-attack-smaller
+icon-menu-large-smaller
rotate: false
- xy: 1839, 615
+ xy: 1341, 207
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-mode-attack-tiny
+icon-menu-large-tiny
rotate: false
- xy: 1945, 197
+ xy: 1851, 91
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-mode-pvp
+icon-menu-small
+ rotate: false
+ xy: 1275, 341
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-menu-smaller
+ rotate: false
+ xy: 1339, 175
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-menu-tiny
+ rotate: false
+ xy: 1851, 73
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-missing
rotate: false
xy: 651, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-mode-pvp-small
+icon-missing-small
rotate: false
- xy: 1479, 448
+ xy: 1309, 375
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-mode-pvp-smaller
+icon-missing-smaller
rotate: false
- xy: 1871, 615
+ xy: 1375, 241
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-mode-pvp-tiny
+icon-missing-tiny
rotate: false
- xy: 1945, 179
+ xy: 1851, 55
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-mode-survival
+icon-mode-attack
rotate: false
xy: 701, 116
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-mode-survival-small
+icon-mode-attack-small
rotate: false
- xy: 1513, 482
+ xy: 1343, 409
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-mode-survival-smaller
+icon-mode-attack-smaller
rotate: false
- xy: 1903, 615
+ xy: 1373, 209
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-mode-survival-tiny
+icon-mode-attack-tiny
rotate: false
- xy: 1945, 161
+ xy: 1851, 37
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-none
+icon-mode-pvp
rotate: false
xy: 701, 66
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-none-small
+icon-mode-pvp-small
rotate: false
- xy: 1547, 516
+ xy: 1377, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-none-smaller
+icon-mode-pvp-smaller
rotate: false
- xy: 1935, 615
+ xy: 1409, 247
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-none-tiny
+icon-mode-pvp-tiny
rotate: false
- xy: 1945, 143
+ xy: 1853, 19
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-paste
+icon-mode-survival
rotate: false
xy: 351, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-paste-small
+icon-mode-survival-small
rotate: false
- xy: 1581, 550
+ xy: 1411, 477
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-paste-smaller
+icon-mode-survival-smaller
rotate: false
- xy: 1967, 617
+ xy: 1441, 247
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-paste-tiny
+icon-mode-survival-tiny
rotate: false
- xy: 1945, 125
+ xy: 1853, 1
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-pause
+icon-none
rotate: false
xy: 401, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-pause-small
+icon-none-small
rotate: false
- xy: 1173, 108
+ xy: 1445, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-pause-smaller
+icon-none-smaller
rotate: false
- xy: 1999, 631
+ xy: 1407, 215
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-pause-tiny
+icon-none-tiny
rotate: false
- xy: 1945, 107
+ xy: 1866, 165
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-pencil
+icon-paste
rotate: false
xy: 451, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-pencil-small
+icon-paste-small
rotate: false
- xy: 1207, 142
+ xy: 1479, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-pencil-smaller
+icon-paste-smaller
rotate: false
- xy: 1999, 599
+ xy: 1439, 215
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-pencil-tiny
+icon-paste-tiny
rotate: false
- xy: 1945, 89
+ xy: 1884, 170
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-pick
+icon-pause
rotate: false
xy: 501, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-pick-small
+icon-pause-small
rotate: false
- xy: 1241, 176
+ xy: 1207, 239
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-pick-smaller
+icon-pause-smaller
rotate: false
- xy: 1967, 585
+ xy: 1405, 183
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-pick-tiny
+icon-pause-tiny
rotate: false
- xy: 1953, 323
+ xy: 1902, 170
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-play
+icon-pencil
rotate: false
xy: 551, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-play-2
+icon-pencil-small
+ rotate: false
+ xy: 1241, 273
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-pencil-smaller
+ rotate: false
+ xy: 1437, 183
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-pencil-tiny
+ rotate: false
+ xy: 1920, 170
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-pick
rotate: false
xy: 601, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-play-2-small
+icon-pick-small
rotate: false
- xy: 1275, 210
+ xy: 1275, 307
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-play-2-smaller
+icon-pick-smaller
rotate: false
- xy: 1999, 567
+ xy: 1373, 177
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-play-2-tiny
+icon-pick-tiny
rotate: false
- xy: 1971, 323
+ xy: 1871, 147
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-play-tiny
- rotate: false
- xy: 1971, 323
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-play-custom
+icon-play
rotate: false
xy: 651, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-play-custom-small
- rotate: false
- xy: 1309, 244
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-play-custom-smaller
- rotate: false
- xy: 1843, 583
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-play-custom-tiny
- rotate: false
- xy: 1963, 305
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-play-small
- rotate: false
- xy: 1343, 278
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-play-smaller
- rotate: false
- xy: 1875, 583
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-players
+icon-play-2
rotate: false
xy: 701, 16
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-players-small
+icon-play-2-small
rotate: false
- xy: 1377, 312
+ xy: 1309, 341
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-players-smaller
+icon-play-2-smaller
rotate: false
- xy: 1907, 583
+ xy: 1405, 151
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-players-tiny
+icon-play-2-tiny
rotate: false
- xy: 1989, 323
+ xy: 1871, 129
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-power
+icon-play-tiny
+ rotate: false
+ xy: 1871, 129
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-play-custom
rotate: false
xy: 751, 528
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-power-small
+icon-play-custom-small
rotate: false
- xy: 1411, 346
+ xy: 1343, 375
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-power-smaller
+icon-play-custom-smaller
rotate: false
- xy: 1843, 551
+ xy: 1437, 151
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-power-tiny
+icon-play-custom-tiny
rotate: false
- xy: 1963, 287
+ xy: 1871, 111
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-production
+icon-play-small
+ rotate: false
+ xy: 1377, 409
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-play-smaller
+ rotate: false
+ xy: 1507, 345
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-players
rotate: false
xy: 751, 478
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-production-small
+icon-players-small
rotate: false
- xy: 1445, 380
+ xy: 1411, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-production-smaller
+icon-players-smaller
rotate: false
- xy: 1875, 551
+ xy: 1507, 313
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-production-tiny
+icon-players-tiny
rotate: false
- xy: 1981, 305
+ xy: 1889, 152
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-quit
+icon-power
rotate: false
xy: 801, 528
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-quit-small
+icon-power-small
rotate: false
- xy: 1479, 414
+ xy: 1445, 477
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-quit-smaller
+icon-power-smaller
rotate: false
- xy: 1907, 551
+ xy: 1507, 281
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-reddit
+icon-power-tiny
+ rotate: false
+ xy: 1889, 134
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-production
rotate: false
xy: 751, 428
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-reddit-small
+icon-production-small
rotate: false
- xy: 1513, 448
+ xy: 1479, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-reddit-smaller
+icon-production-smaller
rotate: false
- xy: 1811, 522
+ xy: 1475, 249
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-reddit-tiny
+icon-production-tiny
rotate: false
- xy: 2007, 323
+ xy: 1907, 152
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-redo
+icon-quit
rotate: false
xy: 801, 478
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-redo-small
+icon-quit-small
rotate: false
- xy: 1547, 482
+ xy: 1513, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-redo-smaller
+icon-quit-smaller
rotate: false
- xy: 1843, 519
+ xy: 1507, 249
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-redo-tiny
- rotate: false
- xy: 1963, 269
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-refresh
+icon-reddit
rotate: false
xy: 751, 378
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-refresh-small
+icon-reddit-small
rotate: false
- xy: 1581, 516
+ xy: 1207, 205
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-refresh-smaller
+icon-reddit-smaller
rotate: false
- xy: 1875, 519
+ xy: 1541, 379
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-refresh-tiny
+icon-reddit-tiny
rotate: false
- xy: 1981, 287
+ xy: 1889, 116
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-rename
+icon-redo
rotate: false
xy: 801, 428
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-rename-small
+icon-redo-small
rotate: false
- xy: 1615, 550
+ xy: 1241, 239
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-rename-smaller
+icon-redo-smaller
rotate: false
- xy: 1907, 519
+ xy: 1539, 347
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-rename-tiny
+icon-redo-tiny
rotate: false
- xy: 1999, 305
+ xy: 1907, 134
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-resize
+icon-refresh
rotate: false
xy: 751, 328
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-resize-small
+icon-refresh-small
rotate: false
- xy: 1207, 108
+ xy: 1275, 273
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-resize-smaller
+icon-refresh-smaller
rotate: false
- xy: 1939, 553
+ xy: 1539, 315
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-resize-tiny
+icon-refresh-tiny
rotate: false
- xy: 1963, 251
+ xy: 1907, 116
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-rotate
+icon-rename
rotate: false
xy: 801, 378
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-rotate-arrow
+icon-rename-small
+ rotate: false
+ xy: 1309, 307
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-rename-smaller
+ rotate: false
+ xy: 1539, 283
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-rename-tiny
+ rotate: false
+ xy: 1925, 152
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-resize
rotate: false
xy: 751, 278
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-rotate-arrow-small
+icon-resize-small
rotate: false
- xy: 1241, 142
+ xy: 1343, 341
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-rotate-arrow-smaller
+icon-resize-smaller
rotate: false
- xy: 1939, 521
+ xy: 1539, 251
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-rotate-arrow-tiny
+icon-resize-tiny
rotate: false
- xy: 1981, 269
+ xy: 1925, 134
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-rotate-left
+icon-rotate
rotate: false
xy: 801, 328
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-rotate-left-small
- rotate: false
- xy: 1275, 176
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-rotate-left-smaller
- rotate: false
- xy: 1971, 535
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-rotate-left-tiny
- rotate: false
- xy: 1999, 287
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-rotate-right
+icon-rotate-arrow
rotate: false
xy: 751, 228
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-rotate-right-small
+icon-rotate-arrow-small
rotate: false
- xy: 1309, 210
+ xy: 1377, 375
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-rotate-right-smaller
+icon-rotate-arrow-smaller
rotate: false
- xy: 2003, 535
+ xy: 1575, 413
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-rotate-right-tiny
+icon-rotate-arrow-tiny
rotate: false
- xy: 1963, 233
+ xy: 1925, 116
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-rotate-small
- rotate: false
- xy: 1343, 244
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-rotate-smaller
- rotate: false
- xy: 1971, 503
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-rotate-tiny
- rotate: false
- xy: 1981, 251
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-save
+icon-rotate-left
rotate: false
xy: 801, 278
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-save-image
+icon-rotate-left-small
+ rotate: false
+ xy: 1411, 409
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-rotate-left-smaller
+ rotate: false
+ xy: 1573, 381
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-rotate-left-tiny
+ rotate: false
+ xy: 1889, 98
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-rotate-right
rotate: false
xy: 751, 178
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-save-image-small
+icon-rotate-right-small
rotate: false
- xy: 1377, 278
+ xy: 1445, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-save-image-smaller
+icon-rotate-right-smaller
rotate: false
- xy: 2003, 503
+ xy: 1609, 447
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-save-image-tiny
+icon-rotate-right-tiny
rotate: false
- xy: 1999, 269
+ xy: 1907, 98
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-save-map
+icon-rotate-small
+ rotate: false
+ xy: 1479, 477
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-rotate-smaller
+ rotate: false
+ xy: 1607, 415
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-rotate-tiny
+ rotate: false
+ xy: 1925, 98
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-save
rotate: false
xy: 801, 228
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-save-map-small
- rotate: false
- xy: 1411, 312
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-save-map-smaller
- rotate: false
- xy: 1939, 489
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-save-map-tiny
- rotate: false
- xy: 1963, 215
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-save-small
- rotate: false
- xy: 1445, 346
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-save-smaller
- rotate: false
- xy: 1971, 471
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-save-tiny
- rotate: false
- xy: 1981, 233
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-settings
+icon-save-image
rotate: false
xy: 751, 128
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-settings-small
+icon-save-image-small
rotate: false
- xy: 1479, 380
+ xy: 1513, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-settings-smaller
+icon-save-image-smaller
rotate: false
- xy: 2003, 471
+ xy: 1643, 481
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-settings-tiny
+icon-save-image-tiny
rotate: false
- xy: 1999, 251
+ xy: 1871, 93
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-spray
+icon-save-map
rotate: false
xy: 801, 178
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-spray-small
+icon-save-map-small
rotate: false
- xy: 1513, 414
+ xy: 1547, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-spray-smaller
+icon-save-map-smaller
rotate: false
- xy: 1409, 212
+ xy: 1641, 449
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-spray-tiny
+icon-save-map-tiny
rotate: false
- xy: 1963, 197
+ xy: 1869, 75
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-terrain
+icon-save-small
+ rotate: false
+ xy: 1207, 171
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-save-smaller
+ rotate: false
+ xy: 1675, 483
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-save-tiny
+ rotate: false
+ xy: 1869, 57
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-settings
rotate: false
xy: 751, 78
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-terrain-small
+icon-settings-small
rotate: false
- xy: 1547, 448
+ xy: 1241, 205
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-terrain-smaller
+icon-settings-smaller
rotate: false
- xy: 1443, 246
+ xy: 1707, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-terrain-tiny
+icon-settings-tiny
rotate: false
- xy: 1981, 215
+ xy: 1869, 39
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-tools
+icon-spray
rotate: false
xy: 801, 128
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-tools-small
+icon-spray-small
rotate: false
- xy: 1581, 482
+ xy: 1275, 239
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-tools-smaller
+icon-spray-smaller
rotate: false
- xy: 1441, 214
+ xy: 1739, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-tools-tiny
+icon-spray-tiny
rotate: false
- xy: 1999, 233
+ xy: 1871, 21
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-trash
+icon-terrain
rotate: false
xy: 751, 28
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-trash-16
+icon-terrain-small
+ rotate: false
+ xy: 1309, 273
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-terrain-smaller
+ rotate: false
+ xy: 1771, 483
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-terrain-tiny
+ rotate: false
+ xy: 1871, 3
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-tools
rotate: false
xy: 801, 78
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-trash-16-small
+icon-tools-small
rotate: false
- xy: 1615, 516
+ xy: 1343, 307
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-trash-16-smaller
+icon-tools-smaller
rotate: false
- xy: 1477, 280
+ xy: 1803, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-trash-16-tiny
+icon-tools-tiny
rotate: false
- xy: 1963, 179
+ xy: 1889, 80
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-trash-small
- rotate: false
- xy: 1649, 550
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-trash-smaller
- rotate: false
- xy: 1475, 248
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-trash-tiny
- rotate: false
- xy: 1981, 197
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-tree
+icon-trash
rotate: false
xy: 801, 28
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-tree-small
- rotate: false
- xy: 1241, 108
- size: 32, 32
- orig: 32, 32
- offset: 0, 0
- index: -1
-icon-tree-smaller
- rotate: false
- xy: 1511, 314
- size: 30, 30
- orig: 30, 30
- offset: 0, 0
- index: -1
-icon-tree-tiny
- rotate: false
- xy: 1999, 215
- size: 16, 16
- orig: 16, 16
- offset: 0, 0
- index: -1
-icon-trello
+icon-trash-16
rotate: false
xy: 851, 528
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-trello-small
+icon-trash-16-small
rotate: false
- xy: 1275, 142
+ xy: 1377, 341
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-trello-smaller
+icon-trash-16-smaller
rotate: false
- xy: 1509, 282
+ xy: 1835, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-trello-tiny
+icon-trash-16-tiny
rotate: false
- xy: 1963, 161
+ xy: 1907, 80
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-turret
+icon-trash-small
+ rotate: false
+ xy: 1411, 375
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-trash-smaller
+ rotate: false
+ xy: 1867, 483
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-trash-tiny
+ rotate: false
+ xy: 1925, 80
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-tree
rotate: false
xy: 851, 478
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-turret-small
+icon-tree-small
rotate: false
- xy: 1309, 176
+ xy: 1445, 409
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-turret-smaller
+icon-tree-smaller
rotate: false
- xy: 1545, 348
+ xy: 1899, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-turret-tiny
+icon-tree-tiny
rotate: false
- xy: 1981, 179
+ xy: 1887, 62
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-tutorial
+icon-trello
rotate: false
xy: 851, 428
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-tutorial-small
+icon-trello-small
rotate: false
- xy: 1343, 210
+ xy: 1479, 443
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-tutorial-smaller
+icon-trello-smaller
rotate: false
- xy: 1543, 316
+ xy: 1931, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-tutorial-tiny
+icon-trello-tiny
rotate: false
- xy: 1999, 197
+ xy: 1905, 62
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-undo
+icon-turret
rotate: false
xy: 851, 378
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-undo-small
+icon-turret-small
rotate: false
- xy: 1377, 244
+ xy: 1513, 477
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-undo-smaller
+icon-turret-smaller
rotate: false
- xy: 1579, 382
+ xy: 1963, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-undo-tiny
+icon-turret-tiny
rotate: false
- xy: 1963, 143
+ xy: 1887, 44
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-units
+icon-tutorial
rotate: false
xy: 851, 328
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-units-small
+icon-tutorial-small
rotate: false
- xy: 1411, 278
+ xy: 1547, 511
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-units-smaller
+icon-tutorial-smaller
rotate: false
- xy: 1577, 350
+ xy: 1997, 515
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-units-tiny
+icon-tutorial-tiny
rotate: false
- xy: 1981, 161
+ xy: 1923, 62
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-unlocks
+icon-undo
rotate: false
xy: 851, 278
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-unlocks-small
+icon-undo-small
rotate: false
- xy: 1445, 312
+ xy: 1581, 545
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-unlocks-smaller
+icon-undo-smaller
rotate: false
- xy: 1341, 144
+ xy: 1995, 483
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-unlocks-tiny
+icon-undo-tiny
rotate: false
- xy: 1999, 179
+ xy: 1905, 44
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-upgrade
+icon-units
rotate: false
xy: 851, 228
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-upgrade-small
+icon-units-small
rotate: false
- xy: 1479, 346
+ xy: 1207, 137
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-upgrade-smaller
+icon-units-smaller
rotate: false
- xy: 1339, 112
+ xy: 1303, 107
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-upgrade-tiny
+icon-units-tiny
rotate: false
- xy: 1963, 125
+ xy: 1923, 44
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-wiki
+icon-unlocks
rotate: false
xy: 851, 178
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-wiki-small
+icon-unlocks-small
rotate: false
- xy: 1513, 380
+ xy: 1241, 171
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-wiki-smaller
+icon-unlocks-smaller
rotate: false
- xy: 1355, 80
+ xy: 1303, 75
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-wiki-tiny
+icon-unlocks-tiny
rotate: false
- xy: 1981, 143
+ xy: 1889, 26
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-workshop
+icon-upgrade
rotate: false
xy: 851, 128
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
-icon-workshop-small
+icon-upgrade-small
rotate: false
- xy: 1547, 414
+ xy: 1275, 205
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
-icon-workshop-smaller
+icon-upgrade-smaller
rotate: false
- xy: 1371, 112
+ xy: 1303, 43
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
-icon-workshop-tiny
+icon-upgrade-tiny
rotate: false
- xy: 1999, 161
+ xy: 1889, 8
size: 16, 16
orig: 16, 16
offset: 0, 0
index: -1
-icon-zoom
+icon-wiki
rotate: false
xy: 851, 78
size: 48, 48
orig: 48, 48
offset: 0, 0
index: -1
+icon-wiki-small
+ rotate: false
+ xy: 1309, 239
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-wiki-smaller
+ rotate: false
+ xy: 1303, 11
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-wiki-tiny
+ rotate: false
+ xy: 1907, 26
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-workshop
+ rotate: false
+ xy: 851, 28
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
+icon-workshop-small
+ rotate: false
+ xy: 1343, 273
+ size: 32, 32
+ orig: 32, 32
+ offset: 0, 0
+ index: -1
+icon-workshop-smaller
+ rotate: false
+ xy: 1471, 215
+ size: 30, 30
+ orig: 30, 30
+ offset: 0, 0
+ index: -1
+icon-workshop-tiny
+ rotate: false
+ xy: 1907, 8
+ size: 16, 16
+ orig: 16, 16
+ offset: 0, 0
+ index: -1
+icon-zoom
+ rotate: false
+ xy: 859, 925
+ size: 48, 48
+ orig: 48, 48
+ offset: 0, 0
+ index: -1
icon-zoom-small
rotate: false
- xy: 1581, 448
+ xy: 1377, 307
size: 32, 32
orig: 32, 32
offset: 0, 0
index: -1
icon-zoom-smaller
rotate: false
- xy: 1387, 80
+ xy: 1469, 183
size: 30, 30
orig: 30, 30
offset: 0, 0
index: -1
icon-zoom-tiny
rotate: false
- xy: 1963, 107
+ xy: 1925, 26
size: 16, 16
orig: 16, 16
offset: 0, 0
@@ -19588,7 +19672,7 @@ info-banner
index: -1
inventory
rotate: false
- xy: 1577, 168
+ xy: 1839, 363
size: 24, 40
split: 10, 10, 10, 14
orig: 24, 40
@@ -19610,7 +19694,7 @@ nomap
index: -1
pane
rotate: false
- xy: 1649, 652
+ xy: 1109, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -19618,7 +19702,7 @@ pane
index: -1
pane-2
rotate: false
- xy: 1611, 652
+ xy: 1109, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -19626,7 +19710,7 @@ pane-2
index: -1
scroll
rotate: false
- xy: 1783, 329
+ xy: 1891, 368
size: 24, 35
split: 10, 10, 6, 5
orig: 24, 35
@@ -19649,49 +19733,49 @@ scroll-knob-horizontal-black
index: -1
scroll-knob-vertical-black
rotate: false
- xy: 1577, 126
+ xy: 1865, 363
size: 24, 40
orig: 24, 40
offset: 0, 0
index: -1
scroll-knob-vertical-thin
rotate: false
- xy: 2035, 531
+ xy: 2035, 855
size: 12, 40
orig: 12, 40
offset: 0, 0
index: -1
selection
rotate: false
- xy: 1834, 493
+ xy: 821, 975
size: 1, 1
orig: 1, 1
offset: 0, 0
index: -1
slider
rotate: false
- xy: 1678, 508
+ xy: 1529, 159
size: 1, 8
orig: 1, 8
offset: 0, 0
index: -1
slider-knob
rotate: false
- xy: 1647, 476
+ xy: 1503, 209
size: 29, 38
orig: 29, 38
offset: 0, 0
index: -1
slider-knob-down
rotate: false
- xy: 1647, 436
+ xy: 1469, 143
size: 29, 38
orig: 29, 38
offset: 0, 0
index: -1
slider-knob-over
rotate: false
- xy: 1647, 396
+ xy: 1501, 169
size: 29, 38
orig: 29, 38
offset: 0, 0
@@ -19705,7 +19789,7 @@ slider-vertical
index: -1
underline
rotate: false
- xy: 1801, 652
+ xy: 1185, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -19713,7 +19797,7 @@ underline
index: -1
underline-2
rotate: false
- xy: 1687, 652
+ xy: 1147, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -19721,7 +19805,7 @@ underline-2
index: -1
underline-disabled
rotate: false
- xy: 1725, 652
+ xy: 1147, 623
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -19729,7 +19813,7 @@ underline-disabled
index: -1
underline-red
rotate: false
- xy: 1763, 652
+ xy: 1185, 652
size: 36, 27
split: 12, 12, 12, 12
orig: 36, 27
@@ -19737,14 +19821,14 @@ underline-red
index: -1
whiteui
rotate: false
- xy: 821, 928
+ xy: 1876, 327
size: 3, 3
orig: 3, 3
offset: 0, 0
index: -1
window-empty
rotate: false
- xy: 2019, 806
+ xy: 1571, 316
size: 27, 61
split: 4, 4, 2, 2
orig: 27, 61
diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png
index da21708541..fb27149b8f 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 41b7b27af0..7cd10c87d2 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 8f762bfdb1..82e66a4467 100644
Binary files a/core/assets/sprites/sprites5.png and b/core/assets/sprites/sprites5.png differ
diff --git a/core/src/io/anuke/mindustry/content/Loadouts.java b/core/src/io/anuke/mindustry/content/Loadouts.java
deleted file mode 100644
index 631066a24f..0000000000
--- a/core/src/io/anuke/mindustry/content/Loadouts.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package io.anuke.mindustry.content;
-
-import io.anuke.mindustry.ctype.*;
-import io.anuke.mindustry.game.*;
-
-import java.io.*;
-
-public class Loadouts implements ContentList{
- public static Schematic
- basicShard,
- advancedShard,
- basicFoundation,
- basicNucleus;
-
- @Override
- public void load(){
- try{
- basicShard = Schematics.readBase64("bXNjaAB4nD2K2wqAIBiD5ymibnoRn6YnEP1BwUMoBL19FuJ2sbFvUFgYZDaJsLeQrkinN9UJHImsNzlYE7WrIUastuSbnlKx2VJJt+8IQGGKdfO/8J5yrGJSMegLg+YUIA==");
- advancedShard = Schematics.readBase64("bXNjaAB4nD2LjQqAIAyET7OMIOhFfJqeYMxBgSkYCL199gu33fFtB4tOwUTaBCP5QpHFzwtl32DahBeKK1NwPq8hoOcUixwpY+CUxe3XIwBbB/pa6tadVCUP02hgHvp5vZq/0b7pBHPYFOQ=");
- basicFoundation = Schematics.readBase64("bXNjaAB4nD1OSQ6DMBBzFhVu8BG+0X8MQyoiJTNSukj8nlCi2Adbtg/GA4OBF8oB00rvyE/9ykafqOIw58A7SWRKy1ZiShhZ5RcOLZhYS1hefQ1gRIeptH9jq/qW2lvc1d2tgWsOfVX/tOwE86AYBA==");
- basicNucleus = Schematics.readBase64("bXNjaAB4nD2MUQqAIBBEJy0s6qOLdJXuYNtCgikYBd2+LNmdj308hkGHtkId7M4YFns4mk/yfB4a48602eDI+mlNznu0FMPFd0wYKCaewl8F0EOueqM+yKSLVfJrNKWnSw/FZGzEGXFG9sy/px4gEBW1");
- }catch(IOException e){
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/core/src/io/anuke/mindustry/ctype/ContentList.java b/core/src/io/anuke/mindustry/ctype/ContentList.java
deleted file mode 100644
index 1f77c37e18..0000000000
--- a/core/src/io/anuke/mindustry/ctype/ContentList.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package io.anuke.mindustry.ctype;
-
-/** Interface for a list of content to be loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
-public interface ContentList{
- /** This method should create all the content. */
- void load();
-}
diff --git a/core/src/io/anuke/mindustry/entities/traits/TeamTrait.java b/core/src/io/anuke/mindustry/entities/traits/TeamTrait.java
deleted file mode 100644
index 5f800b2098..0000000000
--- a/core/src/io/anuke/mindustry/entities/traits/TeamTrait.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package io.anuke.mindustry.entities.traits;
-
-import io.anuke.mindustry.game.Team;
-
-public interface TeamTrait extends Entity{
- Team getTeam();
-}
diff --git a/core/src/io/anuke/mindustry/entities/type/SolidEntity.java b/core/src/io/anuke/mindustry/entities/type/SolidEntity.java
deleted file mode 100644
index 7dc6b0aa89..0000000000
--- a/core/src/io/anuke/mindustry/entities/type/SolidEntity.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package io.anuke.mindustry.entities.type;
-
-import io.anuke.arc.math.geom.Vector2;
-import io.anuke.mindustry.entities.traits.SolidTrait;
-
-public abstract class SolidEntity extends BaseEntity implements SolidTrait{
- protected transient Vector2 velocity = new Vector2(0f, 0.0001f);
- private transient Vector2 lastPosition = new Vector2();
-
- @Override
- public Vector2 lastPosition(){
- return lastPosition;
- }
-
- @Override
- public Vector2 velocity(){
- return velocity;
- }
-}
diff --git a/core/src/io/anuke/mindustry/game/Team.java b/core/src/io/anuke/mindustry/game/Team.java
deleted file mode 100644
index 57209fc62c..0000000000
--- a/core/src/io/anuke/mindustry/game/Team.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package io.anuke.mindustry.game;
-
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.Color;
-import io.anuke.mindustry.graphics.*;
-
-public enum Team{
- derelict(Color.valueOf("4d4e58")),
- sharded(Pal.accent),
- crux(Color.valueOf("e82d2d")),
- green(Color.valueOf("4dd98b")),
- purple(Color.valueOf("9a4bdf")),
- blue(Color.royal.cpy());
-
- public final static Team[] all = values();
- public final Color color;
- public final int intColor;
-
- Team(Color color){
- this.color = color;
- intColor = Color.rgba8888(color);
- }
-
- public String localized(){
- return Core.bundle.get("team." + name() + ".name");
- }
-}
diff --git a/core/src/io/anuke/mindustry/game/Teams.java b/core/src/io/anuke/mindustry/game/Teams.java
deleted file mode 100644
index 45f5daf070..0000000000
--- a/core/src/io/anuke/mindustry/game/Teams.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package io.anuke.mindustry.game;
-
-import io.anuke.arc.collection.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.world.*;
-
-/** Class for various team-based utilities. */
-public class Teams{
- private TeamData[] map = new TeamData[Team.all.length];
-
- /**
- * Register a team.
- * @param team The team type enum.
- * @param enemies The array of enemies of this team. Any team not in this array is considered neutral.
- */
- public void add(Team team, Team... enemies){
- map[team.ordinal()] = new TeamData(team, EnumSet.of(enemies));
- }
-
- /** Returns team data by type. */
- public TeamData get(Team team){
- if(map[team.ordinal()] == null){
- add(team, Array.with(Team.all).select(t -> t != team).toArray(Team.class));
- }
- return map[team.ordinal()];
- }
-
- /** Returns whether a team is active, e.g. whether it has any cores remaining. */
- public boolean isActive(Team team){
- //the enemy wave team is always active
- return team == Vars.waveTeam || get(team).cores.size > 0;
- }
-
- /** Returns a set of all teams that are enemies of this team. */
- public EnumSet enemiesOf(Team team){
- return get(team).enemies;
- }
-
- /** Returns whether {@param other} is an enemy of {@param #team}. */
- public boolean areEnemies(Team team, Team other){
- return enemiesOf(team).contains(other);
- }
-
- /** Allocates a new array with the active teams.
- * Never call in the main game loop.*/
- public Array getActive(){
- return Array.select(map, t -> t != null);
- }
-
- public static class TeamData{
- public final ObjectSet cores = new ObjectSet<>();
- public final EnumSet enemies;
- public final Team team;
- public Queue brokenBlocks = new Queue<>();
-
- public TeamData(Team team, EnumSet enemies){
- this.team = team;
- this.enemies = enemies;
- }
- }
-
- /** Represents a block made by this team that was destroyed somewhere on the map.
- * This does not include deconstructed blocks.*/
- public static class BrokenBlock{
- public final short x, y, rotation, block;
- public final int config;
-
- public BrokenBlock(short x, short y, short rotation, short block, int config){
- this.x = x;
- this.y = y;
- this.rotation = rotation;
- this.block = block;
- this.config = config;
- }
- }
-}
diff --git a/core/src/io/anuke/mindustry/io/LegacyMapIO.java b/core/src/io/anuke/mindustry/io/LegacyMapIO.java
deleted file mode 100644
index 9dbb2bed01..0000000000
--- a/core/src/io/anuke/mindustry/io/LegacyMapIO.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package io.anuke.mindustry.io;
-
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.serialization.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.io.MapIO.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.LegacyColorMapper.*;
-import io.anuke.mindustry.world.blocks.*;
-
-import java.io.*;
-import java.util.zip.*;
-
-import static io.anuke.mindustry.Vars.*;
-
-/** Map IO for the "old" .mmap format.
- * Differentiate between legacy maps and new maps by checking the extension (or the header).*/
-public class LegacyMapIO{
- private static final ObjectMap fallback = ObjectMap.of("alpha-dart-mech-pad", "dart-mech-pad");
- private static final Json json = new Json();
-
- /* Convert a map from the old format to the new format. */
- public static void convertMap(Fi in, Fi out) throws IOException{
- Map map = readMap(in, true);
-
- String waves = map.tags.get("waves", "[]");
- Array groups = new Array<>(json.fromJson(SpawnGroup[].class, waves));
-
- Tile[][] tiles = world.createTiles(map.width, map.height);
- for(int x = 0; x < map.width; x++){
- for(int y = 0; y < map.height; y++){
- tiles[x][y] = new CachedTile();
- tiles[x][y].x = (short)x;
- tiles[x][y].y = (short)y;
- }
- }
- state.rules.spawns = groups;
- readTiles(map, tiles);
- MapIO.writeMap(out, map);
- }
-
- public static Map readMap(Fi file, boolean custom) throws IOException{
- try(DataInputStream stream = new DataInputStream(file.read(1024))){
- StringMap tags = new StringMap();
-
- //meta is uncompressed
- int version = stream.readInt();
- if(version != 1){
- throw new IOException("Outdated legacy map format");
- }
- int build = stream.readInt();
- short width = stream.readShort(), height = stream.readShort();
- byte tagAmount = stream.readByte();
-
- for(int i = 0; i < tagAmount; i++){
- String name = stream.readUTF();
- String value = stream.readUTF();
- tags.put(name, value);
- }
-
- return new Map(file, width, height, tags, custom, version, build);
- }
- }
-
- public static void readTiles(Map map, Tile[][] tiles) throws IOException{
- readTiles(map, (x, y) -> tiles[x][y]);
- }
-
- public static void readTiles(Map map, TileProvider tiles) throws IOException{
- readTiles(map.file, map.width, map.height, tiles);
- }
-
- private static void readTiles(Fi file, int width, int height, Tile[][] tiles) throws IOException{
- readTiles(file, width, height, (x, y) -> tiles[x][y]);
- }
-
- private static void readTiles(Fi file, int width, int height, TileProvider tiles) throws IOException{
- try(BufferedInputStream input = file.read(bufferSize)){
-
- //read map
- {
- DataInputStream stream = new DataInputStream(input);
-
- stream.readInt(); //version
- stream.readInt(); //build
- stream.readInt(); //width + height
- byte tagAmount = stream.readByte();
-
- for(int i = 0; i < tagAmount; i++){
- stream.readUTF(); //key
- stream.readUTF(); //val
- }
- }
-
- try(DataInputStream stream = new DataInputStream(new InflaterInputStream(input))){
-
- try{
- byte mapped = stream.readByte();
- IntMap idmap = new IntMap<>();
- IntMap namemap = new IntMap<>();
-
- for(int i = 0; i < mapped; i++){
- byte type = stream.readByte();
- short total = stream.readShort();
-
- for(int j = 0; j < total; j++){
- String name = stream.readUTF();
- if(type == 1){
- Block res = content.getByName(ContentType.block, fallback.get(name, name));
- idmap.put(j, res == null ? Blocks.air : res);
- namemap.put(j, fallback.get(name, name));
- }
- }
- }
-
- //read floor and create tiles first
- for(int i = 0; i < width * height; i++){
- int x = i % width, y = i / width;
- int floorid = stream.readUnsignedByte();
- int oreid = stream.readUnsignedByte();
- int consecutives = stream.readUnsignedByte();
-
- Tile tile = tiles.get(x, y);
- tile.setFloor((Floor)idmap.get(floorid));
- tile.setOverlay(idmap.get(oreid));
-
- for(int j = i + 1; j < i + 1 + consecutives; j++){
- int newx = j % width, newy = j / width;
- Tile newTile = tiles.get(newx, newy);
- newTile.setFloor((Floor)idmap.get(floorid));
- newTile.setOverlay(idmap.get(oreid));
- }
-
- i += consecutives;
- }
-
- //read blocks
- for(int i = 0; i < width * height; i++){
- int x = i % width, y = i / width;
- int id = stream.readUnsignedByte();
- Block block = idmap.get(id);
- if(block == null) block = Blocks.air;
-
- Tile tile = tiles.get(x, y);
- //the spawn block is saved in the block tile layer in older maps, shift it to the overlay
- if(block != Blocks.spawn){
- tile.setBlock(block);
- }else{
- tile.setOverlay(block);
- }
-
- if(namemap.get(id, "").equals("part")){
- stream.readByte(); //link
- }else if(tile.entity != null){
- byte tr = stream.readByte();
- stream.readShort(); //read health (which is actually irrelevant)
-
- byte team = Pack.leftByte(tr);
- byte rotation = Pack.rightByte(tr);
-
- tile.setTeam(Team.all[team]);
- tile.entity.health = tile.block().health;
- tile.rotation(rotation);
-
- if(tile.block() == Blocks.liquidSource || tile.block() == Blocks.unloader || tile.block() == Blocks.sorter){
- stream.readByte(); //these blocks have an extra config byte, read it
- }
- }else{ //no entity/part, read consecutives
- int consecutives = stream.readUnsignedByte();
-
- for(int j = i + 1; j < i + 1 + consecutives; j++){
- int newx = j % width, newy = j / width;
- tiles.get(newx, newy).setBlock(block);
- }
-
- i += consecutives;
- }
- }
-
- }finally{
- content.setTemporaryMapper(null);
- }
- }
- }
- }
-
- /** Reads a pixmap in the 3.5 pixmap format. */
- public static void readPixmap(Pixmap pixmap, Tile[][] tiles){
- for(int x = 0; x < pixmap.getWidth(); x++){
- for(int y = 0; y < pixmap.getHeight(); y++){
- int color = pixmap.getPixel(x, pixmap.getHeight() - 1 - y);
- LegacyBlock block = LegacyColorMapper.get(color);
- Tile tile = tiles[x][y];
-
- tile.setFloor(block.floor);
- tile.setBlock(block.wall);
- if(block.ore != null) tile.setOverlay(block.ore);
-
- //place core
- if(color == Color.rgba8888(Color.green)){
- //actual core parts
- tile.setBlock(Blocks.coreShard);
- tile.setTeam(Team.sharded);
- }
- }
- }
- }
-}
diff --git a/core/src/io/anuke/mindustry/mod/ClassAccess.java b/core/src/io/anuke/mindustry/mod/ClassAccess.java
deleted file mode 100644
index 916831a62b..0000000000
--- a/core/src/io/anuke/mindustry/mod/ClassAccess.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package io.anuke.mindustry.mod;
-
-import io.anuke.arc.collection.*;
-//obviously autogenerated, do not touch
-public class ClassAccess{
- public static final ObjectSet allowedClassNames = ObjectSet.with("io.anuke.arc.Core", "io.anuke.arc.collection.Array", "io.anuke.arc.collection.Array$ArrayIterable", "io.anuke.arc.collection.ArrayMap", "io.anuke.arc.collection.ArrayMap$Entries", "io.anuke.arc.collection.ArrayMap$Keys", "io.anuke.arc.collection.ArrayMap$Values", "io.anuke.arc.collection.AtomicQueue", "io.anuke.arc.collection.BinaryHeap", "io.anuke.arc.collection.BinaryHeap$Node", "io.anuke.arc.collection.Bits", "io.anuke.arc.collection.BooleanArray", "io.anuke.arc.collection.ByteArray", "io.anuke.arc.collection.CharArray", "io.anuke.arc.collection.ComparableTimSort", "io.anuke.arc.collection.DelayedRemovalArray", "io.anuke.arc.collection.EnumSet", "io.anuke.arc.collection.EnumSet$EnumSetIterator", "io.anuke.arc.collection.FloatArray", "io.anuke.arc.collection.GridBits", "io.anuke.arc.collection.GridMap", "io.anuke.arc.collection.IdentityMap", "io.anuke.arc.collection.IdentityMap$Entries", "io.anuke.arc.collection.IdentityMap$Entry", "io.anuke.arc.collection.IdentityMap$Keys", "io.anuke.arc.collection.IdentityMap$Values", "io.anuke.arc.collection.IntArray", "io.anuke.arc.collection.IntFloatMap", "io.anuke.arc.collection.IntFloatMap$Entries", "io.anuke.arc.collection.IntFloatMap$Entry", "io.anuke.arc.collection.IntFloatMap$Keys", "io.anuke.arc.collection.IntFloatMap$Values", "io.anuke.arc.collection.IntIntMap", "io.anuke.arc.collection.IntIntMap$Entries", "io.anuke.arc.collection.IntIntMap$Entry", "io.anuke.arc.collection.IntIntMap$Keys", "io.anuke.arc.collection.IntIntMap$Values", "io.anuke.arc.collection.IntMap", "io.anuke.arc.collection.IntMap$Entries", "io.anuke.arc.collection.IntMap$Entry", "io.anuke.arc.collection.IntMap$Keys", "io.anuke.arc.collection.IntMap$Values", "io.anuke.arc.collection.IntQueue", "io.anuke.arc.collection.IntSet", "io.anuke.arc.collection.IntSet$IntSetIterator", "io.anuke.arc.collection.LongArray", "io.anuke.arc.collection.LongMap", "io.anuke.arc.collection.LongMap$Entries", "io.anuke.arc.collection.LongMap$Entry", "io.anuke.arc.collection.LongMap$Keys", "io.anuke.arc.collection.LongMap$Values", "io.anuke.arc.collection.LongQueue", "io.anuke.arc.collection.ObjectFloatMap", "io.anuke.arc.collection.ObjectFloatMap$Entries", "io.anuke.arc.collection.ObjectFloatMap$Entry", "io.anuke.arc.collection.ObjectFloatMap$Keys", "io.anuke.arc.collection.ObjectFloatMap$Values", "io.anuke.arc.collection.ObjectIntMap", "io.anuke.arc.collection.ObjectIntMap$Entries", "io.anuke.arc.collection.ObjectIntMap$Entry", "io.anuke.arc.collection.ObjectIntMap$Keys", "io.anuke.arc.collection.ObjectIntMap$Values", "io.anuke.arc.collection.ObjectMap", "io.anuke.arc.collection.ObjectMap$Entries", "io.anuke.arc.collection.ObjectMap$Entry", "io.anuke.arc.collection.ObjectMap$Keys", "io.anuke.arc.collection.ObjectMap$Values", "io.anuke.arc.collection.ObjectSet", "io.anuke.arc.collection.ObjectSet$ObjectSetIterator", "io.anuke.arc.collection.OrderedMap", "io.anuke.arc.collection.OrderedMap$OrderedMapEntries", "io.anuke.arc.collection.OrderedMap$OrderedMapKeys", "io.anuke.arc.collection.OrderedMap$OrderedMapValues", "io.anuke.arc.collection.OrderedSet", "io.anuke.arc.collection.OrderedSet$OrderedSetIterator", "io.anuke.arc.collection.PooledLinkedList", "io.anuke.arc.collection.PooledLinkedList$Item", "io.anuke.arc.collection.Queue", "io.anuke.arc.collection.Queue$QueueIterable", "io.anuke.arc.collection.ShortArray", "io.anuke.arc.collection.SnapshotArray", "io.anuke.arc.collection.Sort", "io.anuke.arc.collection.SortedIntList", "io.anuke.arc.collection.SortedIntList$Iterator", "io.anuke.arc.collection.SortedIntList$Node", "io.anuke.arc.collection.StringMap", "io.anuke.arc.collection.TimSort", "io.anuke.arc.func.Boolc", "io.anuke.arc.func.Boolf", "io.anuke.arc.func.Boolf2", "io.anuke.arc.func.Boolp", "io.anuke.arc.func.Cons", "io.anuke.arc.func.Cons2", "io.anuke.arc.func.Floatc", "io.anuke.arc.func.Floatc2", "io.anuke.arc.func.Floatc4", "io.anuke.arc.func.Floatf", "io.anuke.arc.func.Floatp", "io.anuke.arc.func.Func", "io.anuke.arc.func.Func2", "io.anuke.arc.func.Func3", "io.anuke.arc.func.Intc", "io.anuke.arc.func.Intc2", "io.anuke.arc.func.Intc4", "io.anuke.arc.func.Intf", "io.anuke.arc.func.Intp", "io.anuke.arc.func.Prov", "io.anuke.arc.graphics.Color", "io.anuke.arc.graphics.Pixmap", "io.anuke.arc.graphics.Texture", "io.anuke.arc.graphics.TextureData", "io.anuke.arc.graphics.g2d.Draw", "io.anuke.arc.graphics.g2d.Fill", "io.anuke.arc.graphics.g2d.Lines", "io.anuke.arc.graphics.g2d.TextureAtlas", "io.anuke.arc.graphics.g2d.TextureAtlas$AtlasRegion", "io.anuke.arc.graphics.g2d.TextureRegion", "io.anuke.arc.math.Angles", "io.anuke.arc.math.Mathf", "io.anuke.arc.scene.Action", "io.anuke.arc.scene.Element", "io.anuke.arc.scene.Group", "io.anuke.arc.scene.Scene", "io.anuke.arc.scene.actions.Actions", "io.anuke.arc.scene.actions.AddAction", "io.anuke.arc.scene.actions.AddListenerAction", "io.anuke.arc.scene.actions.AfterAction", "io.anuke.arc.scene.actions.AlphaAction", "io.anuke.arc.scene.actions.ColorAction", "io.anuke.arc.scene.actions.DelayAction", "io.anuke.arc.scene.actions.DelegateAction", "io.anuke.arc.scene.actions.FloatAction", "io.anuke.arc.scene.actions.IntAction", "io.anuke.arc.scene.actions.LayoutAction", "io.anuke.arc.scene.actions.MoveByAction", "io.anuke.arc.scene.actions.MoveToAction", "io.anuke.arc.scene.actions.OriginAction", "io.anuke.arc.scene.actions.ParallelAction", "io.anuke.arc.scene.actions.RelativeTemporalAction", "io.anuke.arc.scene.actions.RemoveAction", "io.anuke.arc.scene.actions.RemoveActorAction", "io.anuke.arc.scene.actions.RemoveListenerAction", "io.anuke.arc.scene.actions.RepeatAction", "io.anuke.arc.scene.actions.RotateByAction", "io.anuke.arc.scene.actions.RotateToAction", "io.anuke.arc.scene.actions.RunnableAction", "io.anuke.arc.scene.actions.ScaleByAction", "io.anuke.arc.scene.actions.ScaleToAction", "io.anuke.arc.scene.actions.SequenceAction", "io.anuke.arc.scene.actions.SizeByAction", "io.anuke.arc.scene.actions.SizeToAction", "io.anuke.arc.scene.actions.TemporalAction", "io.anuke.arc.scene.actions.TimeScaleAction", "io.anuke.arc.scene.actions.TouchableAction", "io.anuke.arc.scene.actions.TranslateByAction", "io.anuke.arc.scene.actions.VisibleAction", "io.anuke.arc.scene.event.ChangeListener", "io.anuke.arc.scene.event.ChangeListener$ChangeEvent", "io.anuke.arc.scene.event.ClickListener", "io.anuke.arc.scene.event.DragListener", "io.anuke.arc.scene.event.DragScrollListener", "io.anuke.arc.scene.event.ElementGestureListener", "io.anuke.arc.scene.event.EventListener", "io.anuke.arc.scene.event.FocusListener", "io.anuke.arc.scene.event.FocusListener$FocusEvent", "io.anuke.arc.scene.event.FocusListener$FocusEvent$Type", "io.anuke.arc.scene.event.HandCursorListener", "io.anuke.arc.scene.event.IbeamCursorListener", "io.anuke.arc.scene.event.InputEvent", "io.anuke.arc.scene.event.InputEvent$Type", "io.anuke.arc.scene.event.InputListener", "io.anuke.arc.scene.event.SceneEvent", "io.anuke.arc.scene.event.Touchable", "io.anuke.arc.scene.event.VisibilityEvent", "io.anuke.arc.scene.event.VisibilityListener", "io.anuke.arc.scene.style.BaseDrawable", "io.anuke.arc.scene.style.Drawable", "io.anuke.arc.scene.style.NinePatchDrawable", "io.anuke.arc.scene.style.ScaledNinePatchDrawable", "io.anuke.arc.scene.style.Style", "io.anuke.arc.scene.style.TextureRegionDrawable", "io.anuke.arc.scene.style.TiledDrawable", "io.anuke.arc.scene.style.TransformDrawable", "io.anuke.arc.scene.ui.Button", "io.anuke.arc.scene.ui.Button$ButtonStyle", "io.anuke.arc.scene.ui.ButtonGroup", "io.anuke.arc.scene.ui.CheckBox", "io.anuke.arc.scene.ui.CheckBox$CheckBoxStyle", "io.anuke.arc.scene.ui.ColorImage", "io.anuke.arc.scene.ui.Dialog", "io.anuke.arc.scene.ui.Dialog$DialogStyle", "io.anuke.arc.scene.ui.Image", "io.anuke.arc.scene.ui.ImageButton", "io.anuke.arc.scene.ui.ImageButton$ImageButtonStyle", "io.anuke.arc.scene.ui.KeybindDialog", "io.anuke.arc.scene.ui.KeybindDialog$KeybindDialogStyle", "io.anuke.arc.scene.ui.Label", "io.anuke.arc.scene.ui.Label$LabelStyle", "io.anuke.arc.scene.ui.ProgressBar", "io.anuke.arc.scene.ui.ProgressBar$ProgressBarStyle", "io.anuke.arc.scene.ui.ScrollPane", "io.anuke.arc.scene.ui.ScrollPane$ScrollPaneStyle", "io.anuke.arc.scene.ui.SettingsDialog", "io.anuke.arc.scene.ui.SettingsDialog$SettingsTable", "io.anuke.arc.scene.ui.SettingsDialog$SettingsTable$CheckSetting", "io.anuke.arc.scene.ui.SettingsDialog$SettingsTable$Setting", "io.anuke.arc.scene.ui.SettingsDialog$SettingsTable$SliderSetting", "io.anuke.arc.scene.ui.SettingsDialog$StringProcessor", "io.anuke.arc.scene.ui.Slider", "io.anuke.arc.scene.ui.Slider$SliderStyle", "io.anuke.arc.scene.ui.TextArea", "io.anuke.arc.scene.ui.TextArea$TextAreaListener", "io.anuke.arc.scene.ui.TextButton", "io.anuke.arc.scene.ui.TextButton$TextButtonStyle", "io.anuke.arc.scene.ui.TextField", "io.anuke.arc.scene.ui.TextField$DefaultOnscreenKeyboard", "io.anuke.arc.scene.ui.TextField$OnscreenKeyboard", "io.anuke.arc.scene.ui.TextField$TextFieldClickListener", "io.anuke.arc.scene.ui.TextField$TextFieldFilter", "io.anuke.arc.scene.ui.TextField$TextFieldListener", "io.anuke.arc.scene.ui.TextField$TextFieldStyle", "io.anuke.arc.scene.ui.TextField$TextFieldValidator", "io.anuke.arc.scene.ui.Tooltip", "io.anuke.arc.scene.ui.Tooltip$Tooltips", "io.anuke.arc.scene.ui.Touchpad", "io.anuke.arc.scene.ui.Touchpad$TouchpadStyle", "io.anuke.arc.scene.ui.TreeElement", "io.anuke.arc.scene.ui.TreeElement$Node", "io.anuke.arc.scene.ui.TreeElement$TreeStyle", "io.anuke.arc.scene.ui.layout.Cell", "io.anuke.arc.scene.ui.layout.Collapser", "io.anuke.arc.scene.ui.layout.HorizontalGroup", "io.anuke.arc.scene.ui.layout.Scl", "io.anuke.arc.scene.ui.layout.Stack", "io.anuke.arc.scene.ui.layout.Table", "io.anuke.arc.scene.ui.layout.Table$DrawRect", "io.anuke.arc.scene.ui.layout.VerticalGroup", "io.anuke.arc.scene.ui.layout.WidgetGroup", "io.anuke.arc.scene.utils.ArraySelection", "io.anuke.arc.scene.utils.Cullable", "io.anuke.arc.scene.utils.Disableable", "io.anuke.arc.scene.utils.DragAndDrop", "io.anuke.arc.scene.utils.DragAndDrop$Payload", "io.anuke.arc.scene.utils.DragAndDrop$Source", "io.anuke.arc.scene.utils.DragAndDrop$Target", "io.anuke.arc.scene.utils.Elements", "io.anuke.arc.scene.utils.Layout", "io.anuke.arc.scene.utils.Selection", "io.anuke.arc.util.I18NBundle", "io.anuke.arc.util.Time", "io.anuke.mindustry.Vars", "io.anuke.mindustry.ai.BlockIndexer", "io.anuke.mindustry.ai.Pathfinder", "io.anuke.mindustry.ai.Pathfinder$PathData", "io.anuke.mindustry.ai.Pathfinder$PathTarget", "io.anuke.mindustry.ai.Pathfinder$PathTileStruct", "io.anuke.mindustry.ai.WaveSpawner", "io.anuke.mindustry.content.Blocks", "io.anuke.mindustry.content.Bullets", "io.anuke.mindustry.content.Fx", "io.anuke.mindustry.content.Items", "io.anuke.mindustry.content.Liquids", "io.anuke.mindustry.content.Loadouts", "io.anuke.mindustry.content.Mechs", "io.anuke.mindustry.content.StatusEffects", "io.anuke.mindustry.content.TechTree", "io.anuke.mindustry.content.TechTree$TechNode", "io.anuke.mindustry.content.TypeIDs", "io.anuke.mindustry.content.UnitTypes", "io.anuke.mindustry.content.Zones", "io.anuke.mindustry.core.ContentLoader", "io.anuke.mindustry.core.Control", "io.anuke.mindustry.core.FileTree", "io.anuke.mindustry.core.GameState", "io.anuke.mindustry.core.GameState$State", "io.anuke.mindustry.core.Logic", "io.anuke.mindustry.core.Platform", "io.anuke.mindustry.core.Renderer", "io.anuke.mindustry.core.UI", "io.anuke.mindustry.core.Version", "io.anuke.mindustry.core.World", "io.anuke.mindustry.core.World$Raycaster", "io.anuke.mindustry.ctype.Content", "io.anuke.mindustry.ctype.Content$ModContentInfo", "io.anuke.mindustry.ctype.ContentList", "io.anuke.mindustry.ctype.ContentType", "io.anuke.mindustry.ctype.MappableContent", "io.anuke.mindustry.ctype.UnlockableContent", "io.anuke.mindustry.editor.DrawOperation", "io.anuke.mindustry.editor.DrawOperation$OpType", "io.anuke.mindustry.editor.DrawOperation$TileOpStruct", "io.anuke.mindustry.editor.EditorTile", "io.anuke.mindustry.editor.EditorTool", "io.anuke.mindustry.editor.MapEditor", "io.anuke.mindustry.editor.MapEditor$Context", "io.anuke.mindustry.editor.MapEditorDialog", "io.anuke.mindustry.editor.MapGenerateDialog", "io.anuke.mindustry.editor.MapInfoDialog", "io.anuke.mindustry.editor.MapLoadDialog", "io.anuke.mindustry.editor.MapRenderer", "io.anuke.mindustry.editor.MapResizeDialog", "io.anuke.mindustry.editor.MapSaveDialog", "io.anuke.mindustry.editor.MapView", "io.anuke.mindustry.editor.OperationStack", "io.anuke.mindustry.editor.WaveInfoDialog", "io.anuke.mindustry.entities.Damage", "io.anuke.mindustry.entities.Damage$PropCellStruct", "io.anuke.mindustry.entities.Effects", "io.anuke.mindustry.entities.Effects$Effect", "io.anuke.mindustry.entities.Effects$EffectContainer", "io.anuke.mindustry.entities.Effects$EffectProvider", "io.anuke.mindustry.entities.Effects$EffectRenderer", "io.anuke.mindustry.entities.Effects$ScreenshakeProvider", "io.anuke.mindustry.entities.Entities", "io.anuke.mindustry.entities.EntityCollisions", "io.anuke.mindustry.entities.EntityGroup", "io.anuke.mindustry.entities.Predict", "io.anuke.mindustry.entities.TargetPriority", "io.anuke.mindustry.entities.Units", "io.anuke.mindustry.entities.bullet.ArtilleryBulletType", "io.anuke.mindustry.entities.bullet.BasicBulletType", "io.anuke.mindustry.entities.bullet.BombBulletType", "io.anuke.mindustry.entities.bullet.BulletType", "io.anuke.mindustry.entities.bullet.FlakBulletType", "io.anuke.mindustry.entities.bullet.HealBulletType", "io.anuke.mindustry.entities.bullet.LiquidBulletType", "io.anuke.mindustry.entities.bullet.MassDriverBolt", "io.anuke.mindustry.entities.bullet.MissileBulletType", "io.anuke.mindustry.entities.effect.Decal", "io.anuke.mindustry.entities.effect.Fire", "io.anuke.mindustry.entities.effect.GroundEffectEntity", "io.anuke.mindustry.entities.effect.GroundEffectEntity$GroundEffect", "io.anuke.mindustry.entities.effect.ItemTransfer", "io.anuke.mindustry.entities.effect.Lightning", "io.anuke.mindustry.entities.effect.Puddle", "io.anuke.mindustry.entities.effect.RubbleDecal", "io.anuke.mindustry.entities.effect.ScorchDecal", "io.anuke.mindustry.entities.traits.AbsorbTrait", "io.anuke.mindustry.entities.traits.BelowLiquidTrait", "io.anuke.mindustry.entities.traits.BuilderMinerTrait", "io.anuke.mindustry.entities.traits.BuilderTrait", "io.anuke.mindustry.entities.traits.BuilderTrait$BuildDataStatic", "io.anuke.mindustry.entities.traits.BuilderTrait$BuildRequest", "io.anuke.mindustry.entities.traits.DamageTrait", "io.anuke.mindustry.entities.traits.DrawTrait", "io.anuke.mindustry.entities.traits.Entity", "io.anuke.mindustry.entities.traits.HealthTrait", "io.anuke.mindustry.entities.traits.KillerTrait", "io.anuke.mindustry.entities.traits.MinerTrait", "io.anuke.mindustry.entities.traits.MoveTrait", "io.anuke.mindustry.entities.traits.SaveTrait", "io.anuke.mindustry.entities.traits.Saveable", "io.anuke.mindustry.entities.traits.ScaleTrait", "io.anuke.mindustry.entities.traits.ShooterTrait", "io.anuke.mindustry.entities.traits.SolidTrait", "io.anuke.mindustry.entities.traits.SpawnerTrait", "io.anuke.mindustry.entities.traits.SyncTrait", "io.anuke.mindustry.entities.traits.TargetTrait", "io.anuke.mindustry.entities.traits.TeamTrait", "io.anuke.mindustry.entities.traits.TimeTrait", "io.anuke.mindustry.entities.traits.TypeTrait", "io.anuke.mindustry.entities.traits.VelocityTrait", "io.anuke.mindustry.entities.type.BaseEntity", "io.anuke.mindustry.entities.type.BaseUnit", "io.anuke.mindustry.entities.type.Bullet", "io.anuke.mindustry.entities.type.DestructibleEntity", "io.anuke.mindustry.entities.type.EffectEntity", "io.anuke.mindustry.entities.type.Player", "io.anuke.mindustry.entities.type.SolidEntity", "io.anuke.mindustry.entities.type.TileEntity", "io.anuke.mindustry.entities.type.TimedEntity", "io.anuke.mindustry.entities.type.Unit", "io.anuke.mindustry.entities.type.base.BaseDrone", "io.anuke.mindustry.entities.type.base.BuilderDrone", "io.anuke.mindustry.entities.type.base.FlyingUnit", "io.anuke.mindustry.entities.type.base.GroundUnit", "io.anuke.mindustry.entities.type.base.HoverUnit", "io.anuke.mindustry.entities.type.base.MinerDrone", "io.anuke.mindustry.entities.type.base.RepairDrone", "io.anuke.mindustry.entities.units.StateMachine", "io.anuke.mindustry.entities.units.Statuses", "io.anuke.mindustry.entities.units.Statuses$StatusEntry", "io.anuke.mindustry.entities.units.UnitCommand", "io.anuke.mindustry.entities.units.UnitDrops", "io.anuke.mindustry.entities.units.UnitState", "io.anuke.mindustry.game.DefaultWaves", "io.anuke.mindustry.game.Difficulty", "io.anuke.mindustry.game.EventType", "io.anuke.mindustry.game.EventType$BlockBuildBeginEvent", "io.anuke.mindustry.game.EventType$BlockBuildEndEvent", "io.anuke.mindustry.game.EventType$BlockDestroyEvent", "io.anuke.mindustry.game.EventType$BlockInfoEvent", "io.anuke.mindustry.game.EventType$BuildSelectEvent", "io.anuke.mindustry.game.EventType$ClientLoadEvent", "io.anuke.mindustry.game.EventType$CommandIssueEvent", "io.anuke.mindustry.game.EventType$ContentReloadEvent", "io.anuke.mindustry.game.EventType$CoreItemDeliverEvent", "io.anuke.mindustry.game.EventType$DepositEvent", "io.anuke.mindustry.game.EventType$DisposeEvent", "io.anuke.mindustry.game.EventType$GameOverEvent", "io.anuke.mindustry.game.EventType$LaunchEvent", "io.anuke.mindustry.game.EventType$LaunchItemEvent", "io.anuke.mindustry.game.EventType$LineConfirmEvent", "io.anuke.mindustry.game.EventType$LoseEvent", "io.anuke.mindustry.game.EventType$MapMakeEvent", "io.anuke.mindustry.game.EventType$MapPublishEvent", "io.anuke.mindustry.game.EventType$MechChangeEvent", "io.anuke.mindustry.game.EventType$PlayEvent", "io.anuke.mindustry.game.EventType$PlayerBanEvent", "io.anuke.mindustry.game.EventType$PlayerChatEvent", "io.anuke.mindustry.game.EventType$PlayerConnect", "io.anuke.mindustry.game.EventType$PlayerIpBanEvent", "io.anuke.mindustry.game.EventType$PlayerIpUnbanEvent", "io.anuke.mindustry.game.EventType$PlayerJoin", "io.anuke.mindustry.game.EventType$PlayerLeave", "io.anuke.mindustry.game.EventType$PlayerUnbanEvent", "io.anuke.mindustry.game.EventType$ResearchEvent", "io.anuke.mindustry.game.EventType$ResetEvent", "io.anuke.mindustry.game.EventType$ResizeEvent", "io.anuke.mindustry.game.EventType$ServerLoadEvent", "io.anuke.mindustry.game.EventType$StateChangeEvent", "io.anuke.mindustry.game.EventType$TapConfigEvent", "io.anuke.mindustry.game.EventType$TapEvent", "io.anuke.mindustry.game.EventType$TileChangeEvent", "io.anuke.mindustry.game.EventType$Trigger", "io.anuke.mindustry.game.EventType$TurretAmmoDeliverEvent", "io.anuke.mindustry.game.EventType$UnitCreateEvent", "io.anuke.mindustry.game.EventType$UnitDestroyEvent", "io.anuke.mindustry.game.EventType$UnlockEvent", "io.anuke.mindustry.game.EventType$WaveEvent", "io.anuke.mindustry.game.EventType$WinEvent", "io.anuke.mindustry.game.EventType$WithdrawEvent", "io.anuke.mindustry.game.EventType$WorldLoadEvent", "io.anuke.mindustry.game.EventType$ZoneConfigureCompleteEvent", "io.anuke.mindustry.game.EventType$ZoneRequireCompleteEvent", "io.anuke.mindustry.game.Gamemode", "io.anuke.mindustry.game.GlobalData", "io.anuke.mindustry.game.LoopControl", "io.anuke.mindustry.game.MusicControl", "io.anuke.mindustry.game.Objective", "io.anuke.mindustry.game.Objectives", "io.anuke.mindustry.game.Objectives$Launched", "io.anuke.mindustry.game.Objectives$Unlock", "io.anuke.mindustry.game.Objectives$Wave", "io.anuke.mindustry.game.Objectives$ZoneObjective", "io.anuke.mindustry.game.Objectives$ZoneWave", "io.anuke.mindustry.game.Rules", "io.anuke.mindustry.game.Saves", "io.anuke.mindustry.game.Saves$SaveSlot", "io.anuke.mindustry.game.Schematic", "io.anuke.mindustry.game.Schematic$Stile", "io.anuke.mindustry.game.Schematics", "io.anuke.mindustry.game.SoundLoop", "io.anuke.mindustry.game.SpawnGroup", "io.anuke.mindustry.game.Stats", "io.anuke.mindustry.game.Stats$Rank", "io.anuke.mindustry.game.Stats$RankResult", "io.anuke.mindustry.game.Team", "io.anuke.mindustry.game.Teams", "io.anuke.mindustry.game.Teams$BrokenBlock", "io.anuke.mindustry.game.Teams$TeamData", "io.anuke.mindustry.game.Tutorial", "io.anuke.mindustry.game.Tutorial$TutorialStage", "io.anuke.mindustry.gen.BufferItem", "io.anuke.mindustry.gen.Call", "io.anuke.mindustry.gen.Call", "io.anuke.mindustry.gen.Icon", "io.anuke.mindustry.gen.Icon", "io.anuke.mindustry.gen.MethodHash", "io.anuke.mindustry.gen.Musics", "io.anuke.mindustry.gen.Musics", "io.anuke.mindustry.gen.PathTile", "io.anuke.mindustry.gen.PropCell", "io.anuke.mindustry.gen.RemoteReadClient", "io.anuke.mindustry.gen.RemoteReadServer", "io.anuke.mindustry.gen.Serialization", "io.anuke.mindustry.gen.Sounds", "io.anuke.mindustry.gen.Sounds", "io.anuke.mindustry.gen.Tex", "io.anuke.mindustry.gen.Tex", "io.anuke.mindustry.gen.TileOp", "io.anuke.mindustry.graphics.BlockRenderer", "io.anuke.mindustry.graphics.Bloom", "io.anuke.mindustry.graphics.CacheLayer", "io.anuke.mindustry.graphics.Drawf", "io.anuke.mindustry.graphics.FloorRenderer", "io.anuke.mindustry.graphics.IndexedRenderer", "io.anuke.mindustry.graphics.Layer", "io.anuke.mindustry.graphics.LightRenderer", "io.anuke.mindustry.graphics.MenuRenderer", "io.anuke.mindustry.graphics.MinimapRenderer", "io.anuke.mindustry.graphics.MultiPacker", "io.anuke.mindustry.graphics.MultiPacker$PageType", "io.anuke.mindustry.graphics.OverlayRenderer", "io.anuke.mindustry.graphics.Pal", "io.anuke.mindustry.graphics.Pixelator", "io.anuke.mindustry.graphics.Shaders", "io.anuke.mindustry.input.Binding", "io.anuke.mindustry.input.DesktopInput", "io.anuke.mindustry.input.InputHandler", "io.anuke.mindustry.input.InputHandler$PlaceLine", "io.anuke.mindustry.input.MobileInput", "io.anuke.mindustry.input.PlaceMode", "io.anuke.mindustry.input.Placement", "io.anuke.mindustry.input.Placement$DistanceHeuristic", "io.anuke.mindustry.input.Placement$NormalizeDrawResult", "io.anuke.mindustry.input.Placement$NormalizeResult", "io.anuke.mindustry.input.Placement$TileHueristic", "io.anuke.mindustry.maps.Map", "io.anuke.mindustry.maps.Maps", "io.anuke.mindustry.maps.Maps$MapProvider", "io.anuke.mindustry.maps.Maps$ShuffleMode", "io.anuke.mindustry.maps.Maps$ShuffleMode", "io.anuke.mindustry.maps.filters.BlendFilter", "io.anuke.mindustry.maps.filters.ClearFilter", "io.anuke.mindustry.maps.filters.DistortFilter", "io.anuke.mindustry.maps.filters.FilterOption", "io.anuke.mindustry.maps.filters.FilterOption$BlockOption", "io.anuke.mindustry.maps.filters.FilterOption$SliderOption", "io.anuke.mindustry.maps.filters.GenerateFilter", "io.anuke.mindustry.maps.filters.GenerateFilter$GenerateInput", "io.anuke.mindustry.maps.filters.GenerateFilter$GenerateInput$TileProvider", "io.anuke.mindustry.maps.filters.MedianFilter", "io.anuke.mindustry.maps.filters.MirrorFilter", "io.anuke.mindustry.maps.filters.NoiseFilter", "io.anuke.mindustry.maps.filters.OreFilter", "io.anuke.mindustry.maps.filters.OreMedianFilter", "io.anuke.mindustry.maps.filters.RiverNoiseFilter", "io.anuke.mindustry.maps.filters.ScatterFilter", "io.anuke.mindustry.maps.filters.TerrainFilter", "io.anuke.mindustry.maps.generators.BasicGenerator", "io.anuke.mindustry.maps.generators.BasicGenerator$DistanceHeuristic", "io.anuke.mindustry.maps.generators.BasicGenerator$TileHueristic", "io.anuke.mindustry.maps.generators.Generator", "io.anuke.mindustry.maps.generators.MapGenerator", "io.anuke.mindustry.maps.generators.MapGenerator$Decoration", "io.anuke.mindustry.maps.generators.RandomGenerator", "io.anuke.mindustry.maps.zonegen.DesertWastesGenerator", "io.anuke.mindustry.maps.zonegen.OvergrowthGenerator", "io.anuke.mindustry.type.Category", "io.anuke.mindustry.type.ErrorContent", "io.anuke.mindustry.type.Item", "io.anuke.mindustry.type.ItemStack", "io.anuke.mindustry.type.ItemType", "io.anuke.mindustry.type.Liquid", "io.anuke.mindustry.type.LiquidStack", "io.anuke.mindustry.type.Mech", "io.anuke.mindustry.type.Publishable", "io.anuke.mindustry.type.StatusEffect", "io.anuke.mindustry.type.StatusEffect$TransitionHandler", "io.anuke.mindustry.type.TypeID", "io.anuke.mindustry.type.UnitType", "io.anuke.mindustry.type.Weapon", "io.anuke.mindustry.type.WeatherEvent", "io.anuke.mindustry.type.Zone", "io.anuke.mindustry.ui.Bar", "io.anuke.mindustry.ui.BorderImage", "io.anuke.mindustry.ui.Cicon", "io.anuke.mindustry.ui.ContentDisplay", "io.anuke.mindustry.ui.Fonts", "io.anuke.mindustry.ui.GridImage", "io.anuke.mindustry.ui.IconSize", "io.anuke.mindustry.ui.IntFormat", "io.anuke.mindustry.ui.ItemDisplay", "io.anuke.mindustry.ui.ItemImage", "io.anuke.mindustry.ui.ItemsDisplay", "io.anuke.mindustry.ui.Links", "io.anuke.mindustry.ui.Links$LinkEntry", "io.anuke.mindustry.ui.LiquidDisplay", "io.anuke.mindustry.ui.Minimap", "io.anuke.mindustry.ui.MobileButton", "io.anuke.mindustry.ui.MultiReqImage", "io.anuke.mindustry.ui.ReqImage", "io.anuke.mindustry.ui.Styles", "io.anuke.mindustry.ui.dialogs.AboutDialog", "io.anuke.mindustry.ui.dialogs.AdminsDialog", "io.anuke.mindustry.ui.dialogs.BansDialog", "io.anuke.mindustry.ui.dialogs.ColorPicker", "io.anuke.mindustry.ui.dialogs.ContentInfoDialog", "io.anuke.mindustry.ui.dialogs.ControlsDialog", "io.anuke.mindustry.ui.dialogs.CustomGameDialog", "io.anuke.mindustry.ui.dialogs.CustomRulesDialog", "io.anuke.mindustry.ui.dialogs.DatabaseDialog", "io.anuke.mindustry.ui.dialogs.DeployDialog", "io.anuke.mindustry.ui.dialogs.DeployDialog$View", "io.anuke.mindustry.ui.dialogs.DeployDialog$ZoneNode", "io.anuke.mindustry.ui.dialogs.DiscordDialog", "io.anuke.mindustry.ui.dialogs.FileChooser", "io.anuke.mindustry.ui.dialogs.FileChooser$FileHistory", "io.anuke.mindustry.ui.dialogs.FloatingDialog", "io.anuke.mindustry.ui.dialogs.GameOverDialog", "io.anuke.mindustry.ui.dialogs.HostDialog", "io.anuke.mindustry.ui.dialogs.JoinDialog", "io.anuke.mindustry.ui.dialogs.JoinDialog$Server", "io.anuke.mindustry.ui.dialogs.LanguageDialog", "io.anuke.mindustry.ui.dialogs.LoadDialog", "io.anuke.mindustry.ui.dialogs.LoadoutDialog", "io.anuke.mindustry.ui.dialogs.MapPlayDialog", "io.anuke.mindustry.ui.dialogs.MapsDialog", "io.anuke.mindustry.ui.dialogs.MinimapDialog", "io.anuke.mindustry.ui.dialogs.ModsDialog", "io.anuke.mindustry.ui.dialogs.PaletteDialog", "io.anuke.mindustry.ui.dialogs.PausedDialog", "io.anuke.mindustry.ui.dialogs.SaveDialog", "io.anuke.mindustry.ui.dialogs.SchematicsDialog", "io.anuke.mindustry.ui.dialogs.SchematicsDialog$SchematicImage", "io.anuke.mindustry.ui.dialogs.SchematicsDialog$SchematicInfoDialog", "io.anuke.mindustry.ui.dialogs.SettingsMenuDialog", "io.anuke.mindustry.ui.dialogs.TechTreeDialog", "io.anuke.mindustry.ui.dialogs.TechTreeDialog$LayoutNode", "io.anuke.mindustry.ui.dialogs.TechTreeDialog$TechTreeNode", "io.anuke.mindustry.ui.dialogs.TechTreeDialog$View", "io.anuke.mindustry.ui.dialogs.TraceDialog", "io.anuke.mindustry.ui.dialogs.ZoneInfoDialog", "io.anuke.mindustry.ui.fragments.BlockConfigFragment", "io.anuke.mindustry.ui.fragments.BlockInventoryFragment", "io.anuke.mindustry.ui.fragments.ChatFragment", "io.anuke.mindustry.ui.fragments.FadeInFragment", "io.anuke.mindustry.ui.fragments.Fragment", "io.anuke.mindustry.ui.fragments.HudFragment", "io.anuke.mindustry.ui.fragments.LoadingFragment", "io.anuke.mindustry.ui.fragments.MenuFragment", "io.anuke.mindustry.ui.fragments.OverlayFragment", "io.anuke.mindustry.ui.fragments.PlacementFragment", "io.anuke.mindustry.ui.fragments.PlayerListFragment", "io.anuke.mindustry.ui.fragments.ScriptConsoleFragment", "io.anuke.mindustry.ui.layout.BranchTreeLayout", "io.anuke.mindustry.ui.layout.BranchTreeLayout$TreeAlignment", "io.anuke.mindustry.ui.layout.BranchTreeLayout$TreeLocation", "io.anuke.mindustry.ui.layout.RadialTreeLayout", "io.anuke.mindustry.ui.layout.TreeLayout", "io.anuke.mindustry.ui.layout.TreeLayout$TreeNode", "io.anuke.mindustry.world.Block", "io.anuke.mindustry.world.BlockStorage", "io.anuke.mindustry.world.Build", "io.anuke.mindustry.world.CachedTile", "io.anuke.mindustry.world.DirectionalItemBuffer", "io.anuke.mindustry.world.DirectionalItemBuffer$BufferItemStruct", "io.anuke.mindustry.world.Edges", "io.anuke.mindustry.world.ItemBuffer", "io.anuke.mindustry.world.LegacyColorMapper", "io.anuke.mindustry.world.LegacyColorMapper$LegacyBlock", "io.anuke.mindustry.world.Pos", "io.anuke.mindustry.world.StaticTree", "io.anuke.mindustry.world.Tile", "io.anuke.mindustry.world.WorldContext", "io.anuke.mindustry.world.blocks.Attributes", "io.anuke.mindustry.world.blocks.Autotiler", "io.anuke.mindustry.world.blocks.Autotiler$AutotilerHolder", "io.anuke.mindustry.world.blocks.BlockPart", "io.anuke.mindustry.world.blocks.BuildBlock", "io.anuke.mindustry.world.blocks.BuildBlock$BuildEntity", "io.anuke.mindustry.world.blocks.DoubleOverlayFloor", "io.anuke.mindustry.world.blocks.Floor", "io.anuke.mindustry.world.blocks.ItemSelection", "io.anuke.mindustry.world.blocks.LiquidBlock", "io.anuke.mindustry.world.blocks.OreBlock", "io.anuke.mindustry.world.blocks.OverlayFloor", "io.anuke.mindustry.world.blocks.PowerBlock", "io.anuke.mindustry.world.blocks.RespawnBlock", "io.anuke.mindustry.world.blocks.Rock", "io.anuke.mindustry.world.blocks.StaticWall", "io.anuke.mindustry.world.blocks.TreeBlock", "io.anuke.mindustry.world.blocks.defense.DeflectorWall", "io.anuke.mindustry.world.blocks.defense.DeflectorWall$DeflectorEntity", "io.anuke.mindustry.world.blocks.defense.Door", "io.anuke.mindustry.world.blocks.defense.Door$DoorEntity", "io.anuke.mindustry.world.blocks.defense.ForceProjector", "io.anuke.mindustry.world.blocks.defense.ForceProjector$ForceEntity", "io.anuke.mindustry.world.blocks.defense.ForceProjector$ShieldEntity", "io.anuke.mindustry.world.blocks.defense.MendProjector", "io.anuke.mindustry.world.blocks.defense.MendProjector$MendEntity", "io.anuke.mindustry.world.blocks.defense.OverdriveProjector", "io.anuke.mindustry.world.blocks.defense.OverdriveProjector$OverdriveEntity", "io.anuke.mindustry.world.blocks.defense.ShockMine", "io.anuke.mindustry.world.blocks.defense.SurgeWall", "io.anuke.mindustry.world.blocks.defense.Wall", "io.anuke.mindustry.world.blocks.defense.turrets.ArtilleryTurret", "io.anuke.mindustry.world.blocks.defense.turrets.BurstTurret", "io.anuke.mindustry.world.blocks.defense.turrets.ChargeTurret", "io.anuke.mindustry.world.blocks.defense.turrets.ChargeTurret$LaserTurretEntity", "io.anuke.mindustry.world.blocks.defense.turrets.CooledTurret", "io.anuke.mindustry.world.blocks.defense.turrets.DoubleTurret", "io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret", "io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret$ItemEntry", "io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret$ItemTurretEntity", "io.anuke.mindustry.world.blocks.defense.turrets.LaserTurret", "io.anuke.mindustry.world.blocks.defense.turrets.LaserTurret$LaserTurretEntity", "io.anuke.mindustry.world.blocks.defense.turrets.LiquidTurret", "io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret", "io.anuke.mindustry.world.blocks.defense.turrets.Turret", "io.anuke.mindustry.world.blocks.defense.turrets.Turret$AmmoEntry", "io.anuke.mindustry.world.blocks.defense.turrets.Turret$TurretEntity", "io.anuke.mindustry.world.blocks.distribution.ArmoredConveyor", "io.anuke.mindustry.world.blocks.distribution.BufferedItemBridge", "io.anuke.mindustry.world.blocks.distribution.BufferedItemBridge$BufferedItemBridgeEntity", "io.anuke.mindustry.world.blocks.distribution.Conveyor", "io.anuke.mindustry.world.blocks.distribution.Conveyor$ConveyorEntity", "io.anuke.mindustry.world.blocks.distribution.Conveyor$ItemPos", "io.anuke.mindustry.world.blocks.distribution.ExtendingItemBridge", "io.anuke.mindustry.world.blocks.distribution.ItemBridge", "io.anuke.mindustry.world.blocks.distribution.ItemBridge$ItemBridgeEntity", "io.anuke.mindustry.world.blocks.distribution.Junction", "io.anuke.mindustry.world.blocks.distribution.Junction$JunctionEntity", "io.anuke.mindustry.world.blocks.distribution.MassDriver", "io.anuke.mindustry.world.blocks.distribution.MassDriver$DriverBulletData", "io.anuke.mindustry.world.blocks.distribution.MassDriver$DriverState", "io.anuke.mindustry.world.blocks.distribution.MassDriver$MassDriverEntity", "io.anuke.mindustry.world.blocks.distribution.OverflowGate", "io.anuke.mindustry.world.blocks.distribution.OverflowGate$OverflowGateEntity", "io.anuke.mindustry.world.blocks.distribution.Router", "io.anuke.mindustry.world.blocks.distribution.Router$RouterEntity", "io.anuke.mindustry.world.blocks.distribution.Sorter", "io.anuke.mindustry.world.blocks.distribution.Sorter$SorterEntity", "io.anuke.mindustry.world.blocks.liquid.ArmoredConduit", "io.anuke.mindustry.world.blocks.liquid.Conduit", "io.anuke.mindustry.world.blocks.liquid.Conduit$ConduitEntity", "io.anuke.mindustry.world.blocks.liquid.LiquidBridge", "io.anuke.mindustry.world.blocks.liquid.LiquidExtendingBridge", "io.anuke.mindustry.world.blocks.liquid.LiquidJunction", "io.anuke.mindustry.world.blocks.liquid.LiquidOverflowGate", "io.anuke.mindustry.world.blocks.liquid.LiquidRouter", "io.anuke.mindustry.world.blocks.liquid.LiquidTank", "io.anuke.mindustry.world.blocks.logic.LogicBlock", "io.anuke.mindustry.world.blocks.logic.MessageBlock", "io.anuke.mindustry.world.blocks.logic.MessageBlock$MessageBlockEntity", "io.anuke.mindustry.world.blocks.power.Battery", "io.anuke.mindustry.world.blocks.power.BurnerGenerator", "io.anuke.mindustry.world.blocks.power.ConditionalConsumePower", "io.anuke.mindustry.world.blocks.power.DecayGenerator", "io.anuke.mindustry.world.blocks.power.ImpactReactor", "io.anuke.mindustry.world.blocks.power.ImpactReactor$FusionReactorEntity", "io.anuke.mindustry.world.blocks.power.ItemLiquidGenerator", "io.anuke.mindustry.world.blocks.power.ItemLiquidGenerator$ItemLiquidGeneratorEntity", "io.anuke.mindustry.world.blocks.power.LightBlock", "io.anuke.mindustry.world.blocks.power.LightBlock$LightEntity", "io.anuke.mindustry.world.blocks.power.NuclearReactor", "io.anuke.mindustry.world.blocks.power.NuclearReactor$NuclearReactorEntity", "io.anuke.mindustry.world.blocks.power.PowerDiode", "io.anuke.mindustry.world.blocks.power.PowerDistributor", "io.anuke.mindustry.world.blocks.power.PowerGenerator", "io.anuke.mindustry.world.blocks.power.PowerGenerator$GeneratorEntity", "io.anuke.mindustry.world.blocks.power.PowerGraph", "io.anuke.mindustry.world.blocks.power.PowerNode", "io.anuke.mindustry.world.blocks.power.SingleTypeGenerator", "io.anuke.mindustry.world.blocks.power.SolarGenerator", "io.anuke.mindustry.world.blocks.power.ThermalGenerator", "io.anuke.mindustry.world.blocks.production.Cultivator", "io.anuke.mindustry.world.blocks.production.Cultivator$CultivatorEntity", "io.anuke.mindustry.world.blocks.production.Drill", "io.anuke.mindustry.world.blocks.production.Drill$DrillEntity", "io.anuke.mindustry.world.blocks.production.Fracker", "io.anuke.mindustry.world.blocks.production.Fracker$FrackerEntity", "io.anuke.mindustry.world.blocks.production.GenericCrafter", "io.anuke.mindustry.world.blocks.production.GenericCrafter$GenericCrafterEntity", "io.anuke.mindustry.world.blocks.production.GenericSmelter", "io.anuke.mindustry.world.blocks.production.Incinerator", "io.anuke.mindustry.world.blocks.production.Incinerator$IncineratorEntity", "io.anuke.mindustry.world.blocks.production.LiquidConverter", "io.anuke.mindustry.world.blocks.production.Pump", "io.anuke.mindustry.world.blocks.production.Separator", "io.anuke.mindustry.world.blocks.production.SolidPump", "io.anuke.mindustry.world.blocks.production.SolidPump$SolidPumpEntity", "io.anuke.mindustry.world.blocks.sandbox.ItemSource", "io.anuke.mindustry.world.blocks.sandbox.ItemSource$ItemSourceEntity", "io.anuke.mindustry.world.blocks.sandbox.ItemVoid", "io.anuke.mindustry.world.blocks.sandbox.LiquidSource", "io.anuke.mindustry.world.blocks.sandbox.LiquidSource$LiquidSourceEntity", "io.anuke.mindustry.world.blocks.sandbox.PowerSource", "io.anuke.mindustry.world.blocks.sandbox.PowerVoid", "io.anuke.mindustry.world.blocks.storage.CoreBlock", "io.anuke.mindustry.world.blocks.storage.CoreBlock$CoreEntity", "io.anuke.mindustry.world.blocks.storage.LaunchPad", "io.anuke.mindustry.world.blocks.storage.StorageBlock", "io.anuke.mindustry.world.blocks.storage.StorageBlock$StorageBlockEntity", "io.anuke.mindustry.world.blocks.storage.Unloader", "io.anuke.mindustry.world.blocks.storage.Unloader$UnloaderEntity", "io.anuke.mindustry.world.blocks.storage.Vault", "io.anuke.mindustry.world.blocks.units.CommandCenter", "io.anuke.mindustry.world.blocks.units.CommandCenter$CommandCenterEntity", "io.anuke.mindustry.world.blocks.units.MechPad", "io.anuke.mindustry.world.blocks.units.MechPad$MechFactoryEntity", "io.anuke.mindustry.world.blocks.units.RallyPoint", "io.anuke.mindustry.world.blocks.units.RepairPoint", "io.anuke.mindustry.world.blocks.units.RepairPoint$RepairPointEntity", "io.anuke.mindustry.world.blocks.units.UnitFactory", "io.anuke.mindustry.world.blocks.units.UnitFactory$UnitFactoryEntity", "io.anuke.mindustry.world.consumers.Consume", "io.anuke.mindustry.world.consumers.ConsumeItemFilter", "io.anuke.mindustry.world.consumers.ConsumeItems", "io.anuke.mindustry.world.consumers.ConsumeLiquid", "io.anuke.mindustry.world.consumers.ConsumeLiquidBase", "io.anuke.mindustry.world.consumers.ConsumeLiquidFilter", "io.anuke.mindustry.world.consumers.ConsumePower", "io.anuke.mindustry.world.consumers.ConsumeType", "io.anuke.mindustry.world.consumers.Consumers", "io.anuke.mindustry.world.meta.Attribute", "io.anuke.mindustry.world.meta.BlockBars", "io.anuke.mindustry.world.meta.BlockFlag", "io.anuke.mindustry.world.meta.BlockGroup", "io.anuke.mindustry.world.meta.BlockStat", "io.anuke.mindustry.world.meta.BlockStats", "io.anuke.mindustry.world.meta.BuildVisibility", "io.anuke.mindustry.world.meta.PowerType", "io.anuke.mindustry.world.meta.Producers", "io.anuke.mindustry.world.meta.StatCategory", "io.anuke.mindustry.world.meta.StatUnit", "io.anuke.mindustry.world.meta.StatValue", "io.anuke.mindustry.world.meta.values.AmmoListValue", "io.anuke.mindustry.world.meta.values.BooleanValue", "io.anuke.mindustry.world.meta.values.BoosterListValue", "io.anuke.mindustry.world.meta.values.ItemFilterValue", "io.anuke.mindustry.world.meta.values.ItemListValue", "io.anuke.mindustry.world.meta.values.LiquidFilterValue", "io.anuke.mindustry.world.meta.values.LiquidValue", "io.anuke.mindustry.world.meta.values.NumberValue", "io.anuke.mindustry.world.meta.values.StringValue", "io.anuke.mindustry.world.modules.BlockModule", "io.anuke.mindustry.world.modules.ConsumeModule", "io.anuke.mindustry.world.modules.ItemModule", "io.anuke.mindustry.world.modules.ItemModule$ItemCalculator", "io.anuke.mindustry.world.modules.ItemModule$ItemConsumer", "io.anuke.mindustry.world.modules.LiquidModule", "io.anuke.mindustry.world.modules.LiquidModule$LiquidCalculator", "io.anuke.mindustry.world.modules.LiquidModule$LiquidConsumer", "io.anuke.mindustry.world.modules.PowerModule", "io.anuke.mindustry.world.producers.Produce", "io.anuke.mindustry.world.producers.ProduceItem", "java.io.PrintStream", "java.lang.Object", "java.lang.Runnable", "java.lang.String", "java.lang.System");
-}
\ No newline at end of file
diff --git a/core/src/io/anuke/mindustry/net/Administration.java b/core/src/io/anuke/mindustry/net/Administration.java
deleted file mode 100644
index f7815e03d2..0000000000
--- a/core/src/io/anuke/mindustry/net/Administration.java
+++ /dev/null
@@ -1,349 +0,0 @@
-package io.anuke.mindustry.net;
-
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.mindustry.Vars;
-
-
-import static io.anuke.mindustry.Vars.headless;
-import static io.anuke.mindustry.game.EventType.*;
-
-public class Administration{
- /** All player info. Maps UUIDs to info. This persists throughout restarts. */
- private ObjectMap playerInfo = new ObjectMap<>();
- private Array bannedIPs = new Array<>();
- private Array whitelist = new Array<>();
-
- public Administration(){
- Core.settings.defaults(
- "strict", true,
- "servername", "Server"
- );
-
- load();
- }
-
- public int getPlayerLimit(){
- return Core.settings.getInt("playerlimit", 0);
- }
-
- public void setPlayerLimit(int limit){
- Core.settings.putSave("playerlimit", limit);
- }
-
- public void setStrict(boolean on){
- Core.settings.putSave("strict", on);
- }
-
- public boolean getStrict(){
- return Core.settings.getBool("strict");
- }
-
- public boolean allowsCustomClients(){
- return Core.settings.getBool("allow-custom", !headless);
- }
-
- public void setCustomClients(boolean allowed){
- Core.settings.put("allow-custom", allowed);
- Core.settings.save();
- }
-
- /** Call when a player joins to update their information here. */
- public void updatePlayerJoined(String id, String ip, String name){
- PlayerInfo info = getCreateInfo(id);
- info.lastName = name;
- info.lastIP = ip;
- info.timesJoined++;
- if(!info.names.contains(name, false)) info.names.add(name);
- if(!info.ips.contains(ip, false)) info.ips.add(ip);
- }
-
- public boolean banPlayer(String uuid){
- return banPlayerID(uuid) || banPlayerIP(getInfo(uuid).lastIP);
- }
-
- /**
- * Bans a player by IP; returns whether this player was already banned.
- * If there are players who at any point had this IP, they will be UUID banned as well.
- */
- public boolean banPlayerIP(String ip){
- if(bannedIPs.contains(ip, false))
- return false;
-
- for(PlayerInfo info : playerInfo.values()){
- if(info.ips.contains(ip, false)){
- info.banned = true;
- }
- }
-
- bannedIPs.add(ip);
- save();
- Events.fire(new PlayerIpBanEvent(ip));
- return true;
- }
-
- /** Bans a player by UUID; returns whether this player was already banned. */
- public boolean banPlayerID(String id){
- if(playerInfo.containsKey(id) && playerInfo.get(id).banned)
- return false;
-
- getCreateInfo(id).banned = true;
-
- save();
- Events.fire(new PlayerBanEvent(Vars.playerGroup.find(p -> id.equals(p.uuid))));
- return true;
- }
-
- /**
- * Unbans a player by IP; returns whether this player was banned in the first place.
- * This method also unbans any player that was banned and had this IP.
- */
- public boolean unbanPlayerIP(String ip){
- boolean found = bannedIPs.contains(ip, false);
-
- for(PlayerInfo info : playerInfo.values()){
- if(info.ips.contains(ip, false)){
- info.banned = false;
- found = true;
- }
- }
-
- bannedIPs.removeValue(ip, false);
-
- if(found){
- save();
- Events.fire(new PlayerIpUnbanEvent(ip));
- }
- return found;
- }
-
- /**
- * Unbans a player by ID; returns whether this player was banned in the first place.
- * This also unbans all IPs the player used.
- */
- public boolean unbanPlayerID(String id){
- PlayerInfo info = getCreateInfo(id);
-
- if(!info.banned)
- return false;
-
- info.banned = false;
- bannedIPs.removeAll(info.ips, false);
- save();
- Events.fire(new PlayerUnbanEvent(Vars.playerGroup.find(p -> id.equals(p.uuid))));
- return true;
- }
-
- /**
- * Returns list of all players with admin status
- */
- public Array getAdmins(){
- Array result = new Array<>();
- for(PlayerInfo info : playerInfo.values()){
- if(info.admin){
- result.add(info);
- }
- }
- return result;
- }
-
- /**
- * Returns list of all players with admin status
- */
- public Array getBanned(){
- Array result = new Array<>();
- for(PlayerInfo info : playerInfo.values()){
- if(info.banned){
- result.add(info);
- }
- }
- return result;
- }
-
- /**
- * Returns all banned IPs. This does not include the IPs of ID-banned players.
- */
- public Array getBannedIPs(){
- return bannedIPs;
- }
-
- /**
- * Makes a player an admin. Returns whether this player was already an admin.
- */
- public boolean adminPlayer(String id, String usid){
- PlayerInfo info = getCreateInfo(id);
-
- if(info.admin && info.adminUsid != null && info.adminUsid.equals(usid))
- return false;
-
- info.adminUsid = usid;
- info.admin = true;
- save();
-
- return true;
- }
-
- /**
- * Makes a player no longer an admin. Returns whether this player was an admin in the first place.
- */
- public boolean unAdminPlayer(String id){
- PlayerInfo info = getCreateInfo(id);
-
- if(!info.admin)
- return false;
-
- info.admin = false;
- save();
-
- return true;
- }
-
- public boolean isWhitelistEnabled(){
- return Core.settings.getBool("whitelist", false);
- }
-
- public void setWhitelist(boolean enabled){
- Core.settings.putSave("whitelist", enabled);
- }
-
- public boolean isWhitelisted(String id, String usid){
- return !isWhitelistEnabled() || whitelist.contains(usid + id);
- }
-
- public boolean whitelist(String id){
- PlayerInfo info = getCreateInfo(id);
- if(whitelist.contains(info.adminUsid + id)) return false;
- whitelist.add(info.adminUsid + id);
- save();
- return true;
- }
-
- public boolean unwhitelist(String id){
- PlayerInfo info = getCreateInfo(id);
- if(whitelist.contains(info.adminUsid + id)){
- whitelist.remove(info.adminUsid + id);
- save();
- return true;
- }
- return false;
- }
-
- public boolean isIPBanned(String ip){
- return bannedIPs.contains(ip, false) || (findByIP(ip) != null && findByIP(ip).banned);
- }
-
- public boolean isIDBanned(String uuid){
- return getCreateInfo(uuid).banned;
- }
-
- public boolean isAdmin(String id, String usid){
- PlayerInfo info = getCreateInfo(id);
- return info.admin && usid.equals(info.adminUsid);
- }
-
- /** Finds player info by IP, UUID and name. */
- public ObjectSet findByName(String name){
- ObjectSet result = new ObjectSet<>();
-
- for(PlayerInfo info : playerInfo.values()){
- if(info.lastName.toLowerCase().equals(name.toLowerCase()) || (info.names.contains(name, false))
- || info.ips.contains(name, false) || info.id.equals(name)){
- result.add(info);
- }
- }
-
- return result;
- }
-
- public Array findByIPs(String ip){
- Array result = new Array<>();
-
- for(PlayerInfo info : playerInfo.values()){
- if(info.ips.contains(ip, false)){
- result.add(info);
- }
- }
-
- return result;
- }
-
- public PlayerInfo getInfo(String id){
- return getCreateInfo(id);
- }
-
- public PlayerInfo getInfoOptional(String id){
- return playerInfo.get(id);
- }
-
- public PlayerInfo findByIP(String ip){
- for(PlayerInfo info : playerInfo.values()){
- if(info.ips.contains(ip, false)){
- return info;
- }
- }
- return null;
- }
-
- public Array getWhitelisted(){
- return playerInfo.values().toArray().select(p -> isWhitelisted(p.id, p.adminUsid));
- }
-
- private PlayerInfo getCreateInfo(String id){
- if(playerInfo.containsKey(id)){
- return playerInfo.get(id);
- }else{
- PlayerInfo info = new PlayerInfo(id);
- playerInfo.put(id, info);
- save();
- return info;
- }
- }
-
- public void save(){
- Core.settings.putObject("player-info", playerInfo);
- Core.settings.putObject("banned-ips", bannedIPs);
- Core.settings.putObject("whitelisted", whitelist);
- Core.settings.save();
- }
-
- @SuppressWarnings("unchecked")
- private void load(){
- playerInfo = Core.settings.getObject("player-info", ObjectMap.class, ObjectMap::new);
- bannedIPs = Core.settings.getObject("banned-ips", Array.class, Array::new);
- whitelist = Core.settings.getObject("whitelisted", Array.class, Array::new);
- }
-
- @Serialize
- public static class PlayerInfo{
- public String id;
- public String lastName = "", lastIP = "";
- public Array ips = new Array<>();
- public Array names = new Array<>();
- public String adminUsid;
- public int timesKicked;
- public int timesJoined;
- public boolean banned, admin;
- public long lastKicked; //last kicked timestamp
-
- PlayerInfo(String id){
- this.id = id;
- }
-
- public PlayerInfo(){
- }
- }
-
- public static class TraceInfo{
- public String ip, uuid;
- public boolean modded, mobile;
-
- public TraceInfo(String ip, String uuid, boolean modded, boolean mobile){
- this.ip = ip;
- this.uuid = uuid;
- this.modded = modded;
- this.mobile = mobile;
- }
- }
-
-}
diff --git a/core/src/io/anuke/mindustry/plugin/Plugin.java b/core/src/io/anuke/mindustry/plugin/Plugin.java
deleted file mode 100644
index d3f4da04da..0000000000
--- a/core/src/io/anuke/mindustry/plugin/Plugin.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package io.anuke.mindustry.plugin;
-
-import io.anuke.mindustry.mod.*;
-
-public abstract class Plugin extends Mod{
-
-}
diff --git a/core/src/io/anuke/mindustry/world/producers/Produce.java b/core/src/io/anuke/mindustry/world/producers/Produce.java
deleted file mode 100644
index c055f50645..0000000000
--- a/core/src/io/anuke/mindustry/world/producers/Produce.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.anuke.mindustry.world.producers;
-
-public class Produce{
-}
diff --git a/core/src/io/anuke/mindustry/world/producers/ProduceItem.java b/core/src/io/anuke/mindustry/world/producers/ProduceItem.java
deleted file mode 100644
index f1083e17ed..0000000000
--- a/core/src/io/anuke/mindustry/world/producers/ProduceItem.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.anuke.mindustry.world.producers;
-
-public class ProduceItem{
-}
diff --git a/core/src/io/anuke/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java
similarity index 89%
rename from core/src/io/anuke/mindustry/ClientLauncher.java
rename to core/src/mindustry/ClientLauncher.java
index 5d04c44010..bc9e2f0663 100644
--- a/core/src/io/anuke/mindustry/ClientLauncher.java
+++ b/core/src/mindustry/ClientLauncher.java
@@ -1,26 +1,26 @@
-package io.anuke.mindustry;
+package mindustry;
-import io.anuke.arc.*;
-import io.anuke.arc.assets.*;
-import io.anuke.arc.assets.loaders.*;
-import io.anuke.arc.audio.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.async.*;
-import io.anuke.mindustry.core.*;
-import io.anuke.mindustry.ctype.Content;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.mod.*;
-import io.anuke.mindustry.net.Net;
+import arc.*;
+import arc.assets.*;
+import arc.assets.loaders.*;
+import arc.audio.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.async.*;
+import mindustry.core.*;
+import mindustry.ctype.Content;
+import mindustry.game.EventType.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.maps.*;
+import mindustry.mod.*;
+import mindustry.net.Net;
-import static io.anuke.arc.Core.*;
-import static io.anuke.mindustry.Vars.*;
+import static arc.Core.*;
+import static mindustry.Vars.*;
public abstract class ClientLauncher extends ApplicationCore implements Platform{
private static final int loadingFPS = 20;
diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/mindustry/Vars.java
similarity index 88%
rename from core/src/io/anuke/mindustry/Vars.java
rename to core/src/mindustry/Vars.java
index 134865bee2..80e6241e09 100644
--- a/core/src/io/anuke/mindustry/Vars.java
+++ b/core/src/mindustry/Vars.java
@@ -1,33 +1,34 @@
-package io.anuke.mindustry;
+package mindustry;
-import io.anuke.arc.Application.*;
-import io.anuke.arc.*;
-import io.anuke.arc.assets.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.io.*;
-import io.anuke.mindustry.ai.*;
-import io.anuke.mindustry.core.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.input.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.mod.*;
-import io.anuke.mindustry.net.Net;
-import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
+import arc.*;
+import arc.Application.*;
+import arc.assets.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.graphics.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.io.*;
+import mindustry.ai.*;
+import mindustry.core.*;
+import mindustry.entities.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.game.*;
+import mindustry.game.EventType.*;
+import mindustry.gen.*;
+import mindustry.input.*;
+import mindustry.maps.*;
+import mindustry.mod.*;
+import mindustry.net.*;
+import mindustry.net.Net;
+import mindustry.world.blocks.defense.ForceProjector.*;
import java.nio.charset.*;
import java.util.*;
-import static io.anuke.arc.Core.settings;
+import static arc.Core.settings;
@SuppressWarnings("unchecked")
public class Vars implements Loadable{
@@ -53,18 +54,16 @@ public class Vars implements Loadable{
public static final String crashReportURL = "http://192.99.169.18/report";
/** URL the links to the wiki's modding guide.*/
public static final String modGuideURL = "https://mindustrygame.github.io/wiki/modding/";
- /** URL to the JSON file containing all the global, public servers. */
+ /** URL to the JSON file containing all the global, public servers. Not queried in BE. */
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.*/
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();
/** maximum distance between mine and core that supports automatic transferring */
public static final float mineTransferRange = 220f;
- /** team of the player by default */
- public static final Team defaultTeam = Team.sharded;
- /** team of the enemy in waves/sectors */
- public static final Team waveTeam = Team.crux;
/** whether to enable editing of units in the editor */
public static final boolean enableUnitEditing = false;
/** max chat message length */
@@ -124,13 +123,13 @@ public class Vars implements Loadable{
public static boolean steam;
/** whether typing into the console is enabled - developers only */
public static boolean enableConsole = false;
- /** application data directory, equivalent to {@link io.anuke.arc.Settings#getDataDirectory()} */
+ /** application data directory, equivalent to {@link Settings#getDataDirectory()} */
public static Fi dataDirectory;
/** data subdirectory used for screenshots */
public static Fi screenshotDirectory;
- /** data subdirectory used for custom mmaps */
+ /** data subdirectory used for custom maps */
public static Fi customMapDirectory;
- /** data subdirectory used for custom mmaps */
+ /** data subdirectory used for custom map previews */
public static Fi mapPreviewDirectory;
/** tmp subdirectory for map conversion */
public static Fi tmpDirectory;
@@ -140,6 +139,8 @@ public class Vars implements Loadable{
public static Fi modDirectory;
/** data subdirectory used for schematics */
public static Fi schematicDirectory;
+ /** data subdirectory used for bleeding edge build versions */
+ public static Fi bebuildDirectory;
/** map file extension */
public static final String mapExtension = "msav";
/** save file extension */
@@ -161,6 +162,7 @@ public class Vars implements Loadable{
public static Platform platform = new Platform(){};
public static Mods mods;
public static Schematics schematics = new Schematics();
+ public static BeControl becontrol;
public static World world;
public static Maps maps;
@@ -184,7 +186,7 @@ public class Vars implements Loadable{
public static EntityGroup shieldGroup;
public static EntityGroup puddleGroup;
public static EntityGroup fireGroup;
- public static EntityGroup[] unitGroups;
+ public static EntityGroup unitGroup;
public static Player player;
@@ -196,7 +198,7 @@ public class Vars implements Loadable{
public static void init(){
Serialization.init();
- DefaultSerializers.typeMappings.put("io.anuke.mindustry.type.ContentType", "io.anuke.mindustry.ctype.ContentType");
+ DefaultSerializers.typeMappings.put("mindustry.type.ContentType", "mindustry.ctype.ContentType");
if(loadLocales){
//load locales
@@ -224,6 +226,7 @@ public class Vars implements Loadable{
defaultWaves = new DefaultWaves();
collisions = new EntityCollisions();
world = new World();
+ becontrol = new BeControl();
maps = new Maps();
spawner = new WaveSpawner();
@@ -239,11 +242,7 @@ public class Vars implements Loadable{
puddleGroup = entities.add(Puddle.class).enableMapping();
shieldGroup = entities.add(ShieldEntity.class, false);
fireGroup = entities.add(Fire.class).enableMapping();
- unitGroups = new EntityGroup[Team.all.length];
-
- for(Team team : Team.all){
- unitGroups[team.ordinal()] = entities.add(BaseUnit.class).enableMapping();
- }
+ unitGroup = entities.add(BaseUnit.class).enableMapping();
for(EntityGroup> group : entities.all()){
group.setRemoveListener(entity -> {
@@ -268,6 +267,7 @@ public class Vars implements Loadable{
tmpDirectory = dataDirectory.child("tmp/");
modDirectory = dataDirectory.child("mods/");
schematicDirectory = dataDirectory.child("schematics/");
+ bebuildDirectory = dataDirectory.child("be_builds/");
modDirectory.mkdirs();
diff --git a/core/src/io/anuke/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java
similarity index 77%
rename from core/src/io/anuke/mindustry/ai/BlockIndexer.java
rename to core/src/mindustry/ai/BlockIndexer.java
index f6df8f7475..7a100b7778 100644
--- a/core/src/io/anuke/mindustry/ai/BlockIndexer.java
+++ b/core/src/mindustry/ai/BlockIndexer.java
@@ -1,21 +1,21 @@
-package io.anuke.mindustry.ai;
+package mindustry.ai;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.Teams.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.meta.*;
+import arc.*;
+import arc.func.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.struct.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.type.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.meta.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Class used for indexing special target blocks for AI. */
@SuppressWarnings("unchecked")
@@ -28,15 +28,17 @@ public class BlockIndexer{
private final ObjectSet- itemSet = new ObjectSet<>();
/** Stores all ore quadtrants on the map. */
private ObjectMap
- > ores = new ObjectMap<>();
- /** Tags all quadrants. */
+ /** Maps each team ID to a quarant. A quadrant is a grid of bits, where each bit is set if and only if there is a block of that team in that quadrant. */
private GridBits[] structQuadrants;
/** Stores all damaged tile entities by team. */
- private ObjectSet[] damagedTiles = new ObjectSet[Team.all.length];
+ private ObjectSet[] damagedTiles = new ObjectSet[Team.all().length];
/**All ores available on this map.*/
private ObjectSet
- allOres = new ObjectSet<>();
+ /**Stores teams that are present here as tiles.*/
+ private ObjectSet activeTeams = new ObjectSet<>();
/** Maps teams to a map of flagged tiles by type. */
- private ObjectSet[][] flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length];
+ private ObjectSet[][] flagMap = new ObjectSet[Team.all().length][BlockFlag.all.length];
/** Maps tile positions to their last known tile index data. */
private IntMap typeMap = new IntMap<>();
/** Empty set used for returning. */
@@ -59,8 +61,8 @@ public class BlockIndexer{
Events.on(WorldLoadEvent.class, event -> {
scanOres.clear();
scanOres.addAll(Item.getAllOres());
- damagedTiles = new ObjectSet[Team.all.length];
- flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length];
+ damagedTiles = new ObjectSet[Team.all().length];
+ flagMap = new ObjectSet[Team.all().length][BlockFlag.all.length];
for(int i = 0; i < flagMap.length; i++){
for(int j = 0; j < BlockFlag.all.length; j++){
@@ -73,10 +75,7 @@ public class BlockIndexer{
ores = null;
//create bitset for each team type that contains each quadrant
- structQuadrants = new GridBits[Team.all.length];
- for(int i = 0; i < Team.all.length; i++){
- structQuadrants[i] = new GridBits(Mathf.ceil(world.width() / (float)quadrantSize), Mathf.ceil(world.height() / (float)quadrantSize));
- }
+ structQuadrants = new GridBits[Team.all().length];
for(int x = 0; x < world.width(); x++){
for(int y = 0; y < world.height(); y++){
@@ -103,7 +102,32 @@ public class BlockIndexer{
}
private ObjectSet[] getFlagged(Team team){
- return flagMap[team.ordinal()];
+ return flagMap[team.id];
+ }
+
+ private GridBits structQuadrant(Team t){
+ int id = Pack.u(t.id);
+ if(structQuadrants[id] == null){
+ structQuadrants[id] = new GridBits(Mathf.ceil(world.width() / (float)quadrantSize), Mathf.ceil(world.height() / (float)quadrantSize));
+ }
+ return structQuadrants[id];
+ }
+
+ /** Updates all the structure quadrants for a newly activated team. */
+ public void updateTeamIndex(Team team){
+ if(structQuadrants == null) return;
+
+ //go through every tile... ouch
+ for(int x = 0; x < world.width(); x++){
+ for(int y = 0; y < world.height(); y++){
+ Tile tile = world.tile(x, y);
+ if(tile.getTeam() == team){
+ int quadrantX = tile.x / quadrantSize;
+ int quadrantY = tile.y / quadrantSize;
+ structQuadrant(team).set(quadrantX, quadrantY);
+ }
+ }
+ }
}
/** @return whether this item is present on this map.*/
@@ -115,11 +139,11 @@ public class BlockIndexer{
public ObjectSet getDamaged(Team team){
returnArray.clear();
- if(damagedTiles[team.ordinal()] == null){
- damagedTiles[team.ordinal()] = new ObjectSet<>();
+ if(damagedTiles[team.id] == null){
+ damagedTiles[team.id] = new ObjectSet<>();
}
- ObjectSet set = damagedTiles[team.ordinal()];
+ ObjectSet set = damagedTiles[team.id];
for(Tile tile : set){
if((tile.entity == null || tile.entity.getTeam() != team || !tile.entity.damaged()) || tile.block() instanceof BuildBlock){
returnArray.add(tile);
@@ -135,13 +159,13 @@ public class BlockIndexer{
/** Get all allied blocks with a flag. */
public ObjectSet getAllied(Team team, BlockFlag type){
- return flagMap[team.ordinal()][type.ordinal()];
+ return flagMap[team.id][type.ordinal()];
}
/** Get all enemy blocks with a flag. */
public Array getEnemy(Team team, BlockFlag type){
returnArray.clear();
- for(Team enemy : state.teams.enemiesOf(team)){
+ for(Team enemy : team.enemies()){
if(state.teams.isActive(enemy)){
ObjectSet set = getFlagged(enemy)[type.ordinal()];
if(set != null){
@@ -155,14 +179,27 @@ public class BlockIndexer{
}
public void notifyTileDamaged(TileEntity entity){
- if(damagedTiles[entity.getTeam().ordinal()] == null){
- damagedTiles[entity.getTeam().ordinal()] = new ObjectSet<>();
+ if(damagedTiles[(int)entity.getTeam().id] == null){
+ damagedTiles[(int)entity.getTeam().id] = new ObjectSet<>();
}
- ObjectSet set = damagedTiles[entity.getTeam().ordinal()];
+ ObjectSet set = damagedTiles[(int)entity.getTeam().id];
set.add(entity.tile);
}
+ public TileEntity findEnemyTile(Team team, float x, float y, float range, Boolf pred){
+ for(Team enemy : activeTeams){
+ if(!team.isEnemy(enemy)) continue;
+
+ TileEntity entity = indexer.findTile(enemy, x, y, range, pred, true);
+ if(entity != null){
+ return entity;
+ }
+ }
+
+ return null;
+ }
+
public TileEntity findTile(Team team, float x, float y, float range, Boolf pred){
return findTile(team, x, y, range, pred, false);
}
@@ -188,7 +225,7 @@ 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()))){
+ if(ndst < range && (closest == null || ndst < dst || (usePriority && closest.block.priority.ordinal() <= e.block.priority.ordinal()))){
dst = ndst;
closest = e;
}
@@ -242,6 +279,7 @@ public class BlockIndexer{
}
typeMap.put(tile.pos(), new TileIndex(tile.block().flags, tile.getTeam()));
}
+ activeTeams.add(tile.getTeam());
if(ores == null) return;
@@ -280,26 +318,25 @@ public class BlockIndexer{
//this quadrant is now 'dirty', re-scan the whole thing
int quadrantX = tile.x / quadrantSize;
int quadrantY = tile.y / quadrantSize;
- int index = quadrantX + quadrantY * quadWidth();
- for(Team team : Team.all){
- TeamData data = state.teams.get(team);
+ for(Team team : activeTeams){
+ GridBits bits = structQuadrant(team);
//fast-set this quadrant to 'occupied' if the tile just placed is already of this team
- if(tile.getTeam() == data.team && tile.entity != null && tile.block().targetable){
- structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY);
+ if(tile.getTeam() == team && tile.entity != null && tile.block().targetable){
+ bits.set(quadrantX, quadrantY);
continue; //no need to process futher
}
- structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY, false);
+ bits.set(quadrantX, quadrantY, false);
outer:
for(int x = quadrantX * quadrantSize; x < world.width() && x < (quadrantX + 1) * quadrantSize; x++){
for(int y = quadrantY * quadrantSize; y < world.height() && y < (quadrantY + 1) * quadrantSize; y++){
Tile result = world.ltile(x, y);
//when a targetable block is found, mark this quadrant as occupied and stop searching
- if(result.entity != null && result.getTeam() == data.team){
- structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY);
+ if(result.entity != null && result.getTeam() == team){
+ bits.set(quadrantX, quadrantY);
break outer;
}
}
@@ -308,7 +345,7 @@ public class BlockIndexer{
}
private boolean getQuad(Team team, int quadrantX, int quadrantY){
- return structQuadrants[team.ordinal()].get(quadrantX, quadrantY);
+ return structQuadrant(team).get(quadrantX, quadrantY);
}
private int quadWidth(){
diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java
similarity index 88%
rename from core/src/io/anuke/mindustry/ai/Pathfinder.java
rename to core/src/mindustry/ai/Pathfinder.java
index 14890b531f..a16ac8f410 100644
--- a/core/src/io/anuke/mindustry/ai/Pathfinder.java
+++ b/core/src/mindustry/ai/Pathfinder.java
@@ -1,20 +1,20 @@
-package io.anuke.mindustry.ai;
+package mindustry.ai;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.arc.util.async.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.meta.*;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.math.geom.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.async.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.world.*;
+import mindustry.world.meta.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Pathfinder implements Runnable{
private static final long maxUpdate = Time.millisToNanos(4);
@@ -27,9 +27,9 @@ public class Pathfinder implements Runnable{
/** unordered array of path data for iteration only. DO NOT iterate ot access this in the main thread.*/
private Array list = new Array<>();
/** Maps teams + flags to a valid path to get to that flag for that team. */
- private PathData[][] pathMap = new PathData[Team.all.length][PathTarget.all.length];
+ private PathData[][] pathMap = new PathData[Team.all().length][PathTarget.all.length];
/** Grid map of created path data that should not be queued again. */
- private GridBits created = new GridBits(Team.all.length, PathTarget.all.length);
+ private GridBits created = new GridBits(Team.all().length, PathTarget.all.length);
/** handles task scheduling on the update thread. */
private TaskQueue queue = new TaskQueue();
/** current pathfinding thread */
@@ -42,8 +42,8 @@ public class Pathfinder implements Runnable{
//reset and update internal tile array
tiles = new int[world.width()][world.height()];
- pathMap = new PathData[Team.all.length][PathTarget.all.length];
- created = new GridBits(Team.all.length, PathTarget.all.length);
+ pathMap = new PathData[Team.all().length][PathTarget.all.length];
+ created = new GridBits(Team.all().length, PathTarget.all.length);
list = new Array<>();
for(int x = 0; x < world.width(); x++){
@@ -53,7 +53,7 @@ public class Pathfinder implements Runnable{
}
//special preset which may help speed things up; this is optional
- preloadPath(waveTeam, PathTarget.enemyCores);
+ preloadPath(state.rules.waveTeam, PathTarget.enemyCores);
start();
});
@@ -84,8 +84,8 @@ public class Pathfinder implements Runnable{
}
public int debugValue(Team team, int x, int y){
- if(pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()] == null) return 0;
- return pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()].weights[x][y];
+ if(pathMap[team.id][PathTarget.enemyCores.ordinal()] == null) return 0;
+ return pathMap[team.id][PathTarget.enemyCores.ordinal()].weights[x][y];
}
/** Update a tile in the internal pathfinding grid. Causes a complete pathfinding reclaculation. */
@@ -139,7 +139,7 @@ public class Pathfinder implements Runnable{
//stop looping when interrupted externally
return;
}
- }catch(Exception e){
+ }catch(Throwable e){
e.printStackTrace();
}
}
@@ -149,12 +149,12 @@ public class Pathfinder implements Runnable{
public Tile getTargetTile(Tile tile, Team team, PathTarget target){
if(tile == null) return null;
- PathData data = pathMap[team.ordinal()][target.ordinal()];
+ PathData data = pathMap[team.id][target.ordinal()];
if(data == null){
//if this combination is not found, create it on request
- if(!created.get(team.ordinal(), target.ordinal())){
- created.set(team.ordinal(), target.ordinal());
+ if(!created.get(team.id, target.ordinal())){
+ created.set(team.id, target.ordinal());
//grab targets since this is run on main thread
IntArray targets = target.getTargets(team, new IntArray());
queue.post(() -> createPath(team, target, targets));
@@ -188,7 +188,7 @@ public class Pathfinder implements Runnable{
/** @return whether a tile can be passed through by this team. Pathfinding thread only.*/
private boolean passable(int x, int y, Team team){
int tile = tiles[x][y];
- return PathTile.passable(tile) || (PathTile.team(tile) != team.ordinal() && PathTile.team(tile) != Team.derelict.ordinal());
+ return PathTile.passable(tile) || (PathTile.team(tile) != team.id && PathTile.team(tile) != (int)Team.derelict.id);
}
/**
@@ -238,7 +238,7 @@ public class Pathfinder implements Runnable{
PathData path = new PathData(team, target, world.width(), world.height());
list.add(path);
- pathMap[team.ordinal()][target.ordinal()] = path;
+ pathMap[team.id][target.ordinal()] = path;
//grab targets from passed array
synchronized(path.targets){
@@ -303,7 +303,7 @@ public class Pathfinder implements Runnable{
}
//spawn points are also enemies.
- if(state.rules.waves && team == defaultTeam){
+ if(state.rules.waves && team == state.rules.defaultTeam){
for(Tile other : spawner.getGroundSpawns()){
out.add(other.pos());
}
diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java
similarity index 71%
rename from core/src/io/anuke/mindustry/ai/WaveSpawner.java
rename to core/src/mindustry/ai/WaveSpawner.java
index ca50e36b13..3bd5bc5400 100644
--- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java
+++ b/core/src/mindustry/ai/WaveSpawner.java
@@ -1,22 +1,22 @@
-package io.anuke.mindustry.ai;
+package mindustry.ai;
-import io.anuke.arc.Events;
-import io.anuke.arc.collection.Array;
-import io.anuke.arc.func.Floatc2;
-import io.anuke.arc.math.Angles;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.Time;
-import io.anuke.arc.util.Tmp;
-import io.anuke.mindustry.content.Blocks;
-import io.anuke.mindustry.content.Fx;
-import io.anuke.mindustry.entities.Damage;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.entities.type.BaseUnit;
-import io.anuke.mindustry.game.EventType.WorldLoadEvent;
-import io.anuke.mindustry.game.SpawnGroup;
-import io.anuke.mindustry.world.Tile;
+import arc.Events;
+import arc.struct.Array;
+import arc.func.Floatc2;
+import arc.math.Angles;
+import arc.math.Mathf;
+import arc.util.Time;
+import arc.util.Tmp;
+import mindustry.content.Blocks;
+import mindustry.content.Fx;
+import mindustry.entities.Damage;
+import mindustry.entities.Effects;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.WorldLoadEvent;
+import mindustry.game.SpawnGroup;
+import mindustry.world.Tile;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class WaveSpawner{
private static final float margin = 40f, coreMargin = tilesize * 3; //how far away from the edge flying units spawn
@@ -53,7 +53,7 @@ public class WaveSpawner{
eachFlyerSpawn((spawnX, spawnY) -> {
for(int i = 0; i < spawned; i++){
- BaseUnit unit = group.createUnit(waveTeam);
+ BaseUnit unit = group.createUnit(state.rules.waveTeam);
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
unit.add();
}
@@ -66,7 +66,7 @@ public class WaveSpawner{
for(int i = 0; i < spawned; i++){
Tmp.v1.rnd(spread);
- BaseUnit unit = group.createUnit(waveTeam);
+ BaseUnit unit = group.createUnit(state.rules.waveTeam);
unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y);
Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit));
@@ -78,7 +78,7 @@ public class WaveSpawner{
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
if(doShockwave){
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawnX, spawnY, state.rules.dropZoneRadius));
- Time.run(40f, () -> Damage.damage(waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true));
+ Time.run(40f, () -> Damage.damage(state.rules.waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true));
}
});
@@ -90,11 +90,11 @@ public class WaveSpawner{
cons.accept(spawn.worldx(), spawn.worldy(), true);
}
- if(state.rules.attackMode && state.teams.isActive(waveTeam) && !state.teams.get(defaultTeam).cores.isEmpty()){
- Tile firstCore = state.teams.get(defaultTeam).cores.first();
- for(Tile core : state.teams.get(waveTeam).cores){
- Tmp.v1.set(firstCore).sub(core.worldx(), core.worldy()).limit(coreMargin + core.block().size*tilesize);
- cons.accept(core.worldx() + Tmp.v1.x, core.worldy() + Tmp.v1.y, false);
+ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
+ TileEntity firstCore = state.teams.playerCores().first();
+ for(TileEntity core : state.rules.waveTeam.cores()){
+ Tmp.v1.set(firstCore).sub(core.x, core.y).limit(coreMargin + core.block.size*tilesize);
+ cons.accept(core.x + Tmp.v1.x, core.y + Tmp.v1.y, false);
}
}
}
@@ -107,9 +107,9 @@ public class WaveSpawner{
cons.get(spawnX, spawnY);
}
- if(state.rules.attackMode && state.teams.isActive(waveTeam)){
- for(Tile core : state.teams.get(waveTeam).cores){
- cons.get(core.worldx(), core.worldy());
+ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
+ for(TileEntity core : state.teams.get(state.rules.waveTeam).cores){
+ cons.get(core.x, core.y);
}
}
}
diff --git a/core/src/io/anuke/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java
similarity index 97%
rename from core/src/io/anuke/mindustry/content/Blocks.java
rename to core/src/mindustry/content/Blocks.java
index f248dbab58..ecbeb7c1c8 100644
--- a/core/src/io/anuke/mindustry/content/Blocks.java
+++ b/core/src/mindustry/content/Blocks.java
@@ -1,34 +1,34 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.ctype.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.defense.*;
-import io.anuke.mindustry.world.blocks.defense.turrets.*;
-import io.anuke.mindustry.world.blocks.distribution.*;
-import io.anuke.mindustry.world.blocks.liquid.*;
-import io.anuke.mindustry.world.blocks.logic.*;
-import io.anuke.mindustry.world.blocks.power.*;
-import io.anuke.mindustry.world.blocks.production.*;
-import io.anuke.mindustry.world.blocks.sandbox.*;
-import io.anuke.mindustry.world.blocks.storage.*;
-import io.anuke.mindustry.world.blocks.units.*;
-import io.anuke.mindustry.world.consumers.*;
-import io.anuke.mindustry.world.meta.*;
-import io.anuke.mindustry.world.modules.*;
+import arc.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.ctype.*;
+import mindustry.entities.*;
+import mindustry.entities.bullet.*;
+import mindustry.entities.type.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.type.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.blocks.defense.*;
+import mindustry.world.blocks.defense.turrets.*;
+import mindustry.world.blocks.distribution.*;
+import mindustry.world.blocks.liquid.*;
+import mindustry.world.blocks.logic.*;
+import mindustry.world.blocks.power.*;
+import mindustry.world.blocks.production.*;
+import mindustry.world.blocks.sandbox.*;
+import mindustry.world.blocks.storage.*;
+import mindustry.world.blocks.units.*;
+import mindustry.world.consumers.*;
+import mindustry.world.meta.*;
+import mindustry.world.modules.*;
public class Blocks implements ContentList{
public static Block
@@ -49,7 +49,7 @@ public class Blocks implements ContentList{
melter, separator, sporePress, pulverizer, incinerator, coalCentrifuge,
//sandbox
- powerSource, powerVoid, itemSource, itemVoid, liquidSource, message, illuminator,
+ powerSource, powerVoid, itemSource, itemVoid, liquidSource, liquidVoid, message, illuminator,
//defense
copperWall, copperWallLarge, titaniumWall, titaniumWallLarge, plastaniumWall, plastaniumWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge,
@@ -898,10 +898,11 @@ public class Blocks implements ContentList{
}};
junction = new Junction("junction"){{
- requirements(Category.distribution, ItemStack.with(Items.copper, 1), true);
+ requirements(Category.distribution, ItemStack.with(Items.copper, 2), true);
speed = 26;
capacity = 12;
health = 30;
+ buildCostMultiplier = 6f;
}};
itemBridge = new BufferedItemBridge("bridge-conveyor"){{
@@ -921,16 +922,18 @@ public class Blocks implements ContentList{
sorter = new Sorter("sorter"){{
requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 2));
+ buildCostMultiplier = 3f;
}};
invertedSorter = new Sorter("inverted-sorter"){{
requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 2));
+ buildCostMultiplier = 3f;
invert = true;
}};
router = new Router("router"){{
requirements(Category.distribution, ItemStack.with(Items.copper, 3));
-
+ buildCostMultiplier = 2f;
}};
distributor = new Router("distributor"){{
@@ -940,6 +943,7 @@ public class Blocks implements ContentList{
overflowGate = new OverflowGate("overflow-gate"){{
requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 4));
+ buildCostMultiplier = 3f;
}};
massDriver = new MassDriver("mass-driver"){{
@@ -1234,7 +1238,7 @@ public class Blocks implements ContentList{
//region storage
coreShard = new CoreBlock("core-shard"){{
- requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with(Items.titanium, 4000));
+ requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with());
alwaysUnlocked = true;
health = 1100;
@@ -1243,7 +1247,7 @@ public class Blocks implements ContentList{
}};
coreFoundation = new CoreBlock("core-foundation"){{
- requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with(Items.titanium, 400, Items.silicon, 3000));
+ requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with());
health = 2000;
itemCapacity = 9000;
@@ -1251,7 +1255,7 @@ public class Blocks implements ContentList{
}};
coreNucleus = new CoreBlock("core-nucleus"){{
- requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with(Items.titanium, 4000, Items.silicon, 2000, Items.surgealloy, 3000));
+ requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with());
health = 4000;
itemCapacity = 13000;
@@ -1388,15 +1392,6 @@ public class Blocks implements ContentList{
range = 110f;
health = 250 * size * size;
shootSound = Sounds.splash;
-
- drawer = (tile, entity) -> {
- Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
-
- Draw.color(entity.liquids.current().color);
- Draw.alpha(entity.liquids.total() / liquidCapacity);
- Draw.rect(name + "-liquid", tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
- Draw.color();
- };
}};
lancer = new ChargeTurret("lancer"){{
@@ -1511,7 +1506,7 @@ public class Blocks implements ContentList{
}
@Override
- public void init(io.anuke.mindustry.entities.type.Bullet b){
+ public void init(mindustry.entities.type.Bullet b){
for(int i = 0; i < rays; i++){
Damage.collideLine(b, b.getTeam(), hitEffect, b.x, b.y, b.rot(), rayLength - Math.abs(i - (rays / 2)) * 20f);
}
@@ -1821,6 +1816,11 @@ public class Blocks implements ContentList{
alwaysUnlocked = true;
}};
+ liquidVoid = new LiquidVoid("liquid-void"){{
+ requirements(Category.liquid, BuildVisibility.sandboxOnly, ItemStack.with());
+ alwaysUnlocked = true;
+ }};
+
message = new MessageBlock("message"){{
requirements(Category.effect, ItemStack.with(Items.graphite, 5));
}};
diff --git a/core/src/io/anuke/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java
similarity index 97%
rename from core/src/io/anuke/mindustry/content/Bullets.java
rename to core/src/mindustry/content/Bullets.java
index b3e23d966b..017798731c 100644
--- a/core/src/io/anuke/mindustry/content/Bullets.java
+++ b/core/src/mindustry/content/Bullets.java
@@ -1,18 +1,18 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.world.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.util.*;
+import mindustry.ctype.ContentList;
+import mindustry.entities.*;
+import mindustry.entities.bullet.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.type.*;
+import mindustry.graphics.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Bullets implements ContentList{
public static BulletType
diff --git a/core/src/io/anuke/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java
similarity index 98%
rename from core/src/io/anuke/mindustry/content/Fx.java
rename to core/src/mindustry/content/Fx.java
index 4c31f0bd1a..a116034e1a 100644
--- a/core/src/io/anuke/mindustry/content/Fx.java
+++ b/core/src/mindustry/content/Fx.java
@@ -1,19 +1,19 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.entities.Effects.*;
-import io.anuke.mindustry.entities.effect.GroundEffectEntity.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.ui.Cicon;
+import arc.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.util.*;
+import mindustry.ctype.ContentList;
+import mindustry.entities.Effects.*;
+import mindustry.entities.effect.GroundEffectEntity.*;
+import mindustry.entities.type.*;
+import mindustry.graphics.*;
+import mindustry.type.*;
+import mindustry.ui.Cicon;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Fx implements ContentList{
public static Effect
@@ -1079,6 +1079,7 @@ public class Fx implements ContentList{
healBlockFull = new Effect(20, e -> {
Draw.color(e.color);
Draw.alpha(e.fout());
+ Fill.square(e.x, e.y, e.rotation * tilesize / 2f);
});
overdriveBlockFull = new Effect(60, e -> {
diff --git a/core/src/io/anuke/mindustry/content/Items.java b/core/src/mindustry/content/Items.java
similarity index 93%
rename from core/src/io/anuke/mindustry/content/Items.java
rename to core/src/mindustry/content/Items.java
index 77c88c651b..6269044786 100644
--- a/core/src/io/anuke/mindustry/content/Items.java
+++ b/core/src/mindustry/content/Items.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.graphics.Color;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.type.Item;
-import io.anuke.mindustry.type.ItemType;
+import arc.graphics.Color;
+import mindustry.ctype.ContentList;
+import mindustry.type.Item;
+import mindustry.type.ItemType;
public class Items implements ContentList{
public static Item scrap, copper, lead, graphite, coal, titanium, thorium, silicon, plastanium, phasefabric, surgealloy,
diff --git a/core/src/io/anuke/mindustry/content/Liquids.java b/core/src/mindustry/content/Liquids.java
similarity index 87%
rename from core/src/io/anuke/mindustry/content/Liquids.java
rename to core/src/mindustry/content/Liquids.java
index bbc934cd16..56d3e481ab 100644
--- a/core/src/io/anuke/mindustry/content/Liquids.java
+++ b/core/src/mindustry/content/Liquids.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.graphics.Color;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.type.Liquid;
+import arc.graphics.Color;
+import mindustry.ctype.ContentList;
+import mindustry.type.Liquid;
public class Liquids implements ContentList{
public static Liquid water, slag, oil, cryofluid;
diff --git a/core/src/mindustry/content/Loadouts.java b/core/src/mindustry/content/Loadouts.java
new file mode 100644
index 0000000000..145da6120e
--- /dev/null
+++ b/core/src/mindustry/content/Loadouts.java
@@ -0,0 +1,20 @@
+package mindustry.content;
+
+import mindustry.ctype.*;
+import mindustry.game.*;
+
+public class Loadouts implements ContentList{
+ public static Schematic
+ basicShard,
+ advancedShard,
+ basicFoundation,
+ basicNucleus;
+
+ @Override
+ public void load(){
+ basicShard = Schematics.readBase64("bXNjaAB4nD2K2wqAIBiD5ymibnoRn6YnEP1BwUMoBL19FuJ2sbFvUFgYZDaJsLeQrkinN9UJHImsNzlYE7WrIUastuSbnlKx2VJJt+8IQGGKdfO/8J5yrGJSMegLg+YUIA==");
+ advancedShard = Schematics.readBase64("bXNjaAB4nD2LjQqAIAyET7OMIOhFfJqeYMxBgSkYCL199gu33fFtB4tOwUTaBCP5QpHFzwtl32DahBeKK1NwPq8hoOcUixwpY+CUxe3XIwBbB/pa6tadVCUP02hgHvp5vZq/0b7pBHPYFOQ=");
+ basicFoundation = Schematics.readBase64("bXNjaAB4nD1OSQ6DMBBzFhVu8BG+0X8MQyoiJTNSukj8nlCi2Adbtg/GA4OBF8oB00rvyE/9ykafqOIw58A7SWRKy1ZiShhZ5RcOLZhYS1hefQ1gRIeptH9jq/qW2lvc1d2tgWsOfVX/tOwE86AYBA==");
+ basicNucleus = Schematics.readBase64("bXNjaAB4nD2MUQqAIBBEJy0s6qOLdJXuYNtCgikYBd2+LNmdj308hkGHtkId7M4YFns4mk/yfB4a48602eDI+mlNznu0FMPFd0wYKCaewl8F0EOueqM+yKSLVfJrNKWnSw/FZGzEGXFG9sy/px4gEBW1");
+ }
+}
diff --git a/core/src/io/anuke/mindustry/content/Mechs.java b/core/src/mindustry/content/Mechs.java
similarity index 95%
rename from core/src/io/anuke/mindustry/content/Mechs.java
rename to core/src/mindustry/content/Mechs.java
index 8684dd268b..9bbb67d51a 100644
--- a/core/src/io/anuke/mindustry/content/Mechs.java
+++ b/core/src/mindustry/content/Mechs.java
@@ -1,19 +1,19 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.type.*;
+import arc.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.ctype.ContentList;
+import mindustry.entities.*;
+import mindustry.entities.bullet.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.type.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.type.*;
public class Mechs implements ContentList{
public static Mech alpha, delta, tau, omega, dart, javelin, trident, glaive;
diff --git a/core/src/io/anuke/mindustry/content/StatusEffects.java b/core/src/mindustry/content/StatusEffects.java
similarity index 88%
rename from core/src/io/anuke/mindustry/content/StatusEffects.java
rename to core/src/mindustry/content/StatusEffects.java
index 4dc980869d..6672727847 100644
--- a/core/src/io/anuke/mindustry/content/StatusEffects.java
+++ b/core/src/mindustry/content/StatusEffects.java
@@ -1,13 +1,12 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.*;
-import io.anuke.arc.math.Mathf;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.type.StatusEffect;
-
-import static io.anuke.mindustry.Vars.waveTeam;
+import arc.*;
+import arc.math.Mathf;
+import mindustry.entities.Effects;
+import mindustry.ctype.ContentList;
+import mindustry.game.EventType.*;
+import mindustry.type.StatusEffect;
+import static mindustry.Vars.*;
public class StatusEffects implements ContentList{
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss;
@@ -48,7 +47,7 @@ public class StatusEffects implements ContentList{
init(() -> {
trans(shocked, ((unit, time, newTime, result) -> {
unit.damage(20f);
- if(unit.getTeam() == waveTeam){
+ if(unit.getTeam() == state.rules.waveTeam){
Events.fire(Trigger.shock);
}
result.set(this, time);
diff --git a/core/src/io/anuke/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java
similarity index 97%
rename from core/src/io/anuke/mindustry/content/TechTree.java
rename to core/src/mindustry/content/TechTree.java
index 8058a4982b..fb9207cdda 100644
--- a/core/src/io/anuke/mindustry/content/TechTree.java
+++ b/core/src/mindustry/content/TechTree.java
@@ -1,11 +1,12 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.collection.Array;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.type.ItemStack;
-import io.anuke.mindustry.world.Block;
+import arc.math.*;
+import arc.struct.*;
+import mindustry.ctype.*;
+import mindustry.type.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.content.Blocks.*;
+import static mindustry.content.Blocks.*;
public class TechTree implements ContentList{
public static Array all;
@@ -318,7 +319,7 @@ public class TechTree implements ContentList{
private static TechNode node(Block block, Runnable children){
ItemStack[] requirements = new ItemStack[block.requirements.length];
for(int i = 0; i < requirements.length; i++){
- requirements[i] = new ItemStack(block.requirements[i].item, 30 + block.requirements[i].amount * 6);
+ requirements[i] = new ItemStack(block.requirements[i].item, 40 + Mathf.round(Mathf.pow(block.requirements[i].amount, 1.25f) * 6, 10));
}
return new TechNode(block, requirements, children);
diff --git a/core/src/io/anuke/mindustry/content/TypeIDs.java b/core/src/mindustry/content/TypeIDs.java
similarity index 52%
rename from core/src/io/anuke/mindustry/content/TypeIDs.java
rename to core/src/mindustry/content/TypeIDs.java
index 2e3f6347b1..b99e321e98 100644
--- a/core/src/io/anuke/mindustry/content/TypeIDs.java
+++ b/core/src/mindustry/content/TypeIDs.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.mindustry.entities.effect.Fire;
-import io.anuke.mindustry.entities.effect.Puddle;
-import io.anuke.mindustry.entities.type.Player;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.type.TypeID;
+import mindustry.entities.effect.Fire;
+import mindustry.entities.effect.Puddle;
+import mindustry.entities.type.Player;
+import mindustry.ctype.ContentList;
+import mindustry.type.TypeID;
public class TypeIDs implements ContentList{
public static TypeID fire, puddle, player;
diff --git a/core/src/io/anuke/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java
similarity index 96%
rename from core/src/io/anuke/mindustry/content/UnitTypes.java
rename to core/src/mindustry/content/UnitTypes.java
index d6e1dd232a..1c5202ab46 100644
--- a/core/src/io/anuke/mindustry/content/UnitTypes.java
+++ b/core/src/mindustry/content/UnitTypes.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.arc.collection.*;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.entities.type.base.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.type.*;
+import arc.struct.*;
+import mindustry.ctype.ContentList;
+import mindustry.entities.bullet.*;
+import mindustry.entities.type.*;
+import mindustry.entities.type.Bullet;
+import mindustry.entities.type.base.*;
+import mindustry.gen.*;
+import mindustry.type.*;
public class UnitTypes implements ContentList{
public static UnitType
diff --git a/core/src/io/anuke/mindustry/content/Zones.java b/core/src/mindustry/content/Zones.java
similarity index 95%
rename from core/src/io/anuke/mindustry/content/Zones.java
rename to core/src/mindustry/content/Zones.java
index ae6598f60c..1bc988f955 100644
--- a/core/src/io/anuke/mindustry/content/Zones.java
+++ b/core/src/mindustry/content/Zones.java
@@ -1,16 +1,16 @@
-package io.anuke.mindustry.content;
+package mindustry.content;
-import io.anuke.mindustry.ctype.ContentList;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.Objectives.*;
-import io.anuke.mindustry.maps.generators.*;
-import io.anuke.mindustry.maps.generators.MapGenerator.*;
-import io.anuke.mindustry.maps.zonegen.*;
-import io.anuke.mindustry.type.*;
+import mindustry.ctype.ContentList;
+import mindustry.game.*;
+import mindustry.game.Objectives.*;
+import mindustry.maps.generators.*;
+import mindustry.maps.generators.MapGenerator.*;
+import mindustry.maps.zonegen.*;
+import mindustry.type.*;
-import static io.anuke.arc.collection.Array.with;
-import static io.anuke.mindustry.content.Items.*;
-import static io.anuke.mindustry.type.ItemStack.list;
+import static arc.struct.Array.with;
+import static mindustry.content.Items.*;
+import static mindustry.type.ItemStack.list;
public class Zones implements ContentList{
public static Zone
diff --git a/core/src/io/anuke/mindustry/core/ContentLoader.java b/core/src/mindustry/core/ContentLoader.java
similarity index 93%
rename from core/src/io/anuke/mindustry/core/ContentLoader.java
rename to core/src/mindustry/core/ContentLoader.java
index 274139b206..dc1e21e917 100644
--- a/core/src/io/anuke/mindustry/core/ContentLoader.java
+++ b/core/src/mindustry/core/ContentLoader.java
@@ -1,20 +1,20 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.mod.Mods.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.graphics.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.ctype.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.bullet.*;
+import mindustry.mod.Mods.*;
+import mindustry.type.*;
+import mindustry.world.*;
-import static io.anuke.arc.Core.files;
-import static io.anuke.mindustry.Vars.mods;
+import static arc.Core.files;
+import static mindustry.Vars.mods;
/**
* Loads all game content.
diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/mindustry/core/Control.java
similarity index 88%
rename from core/src/io/anuke/mindustry/core/Control.java
rename to core/src/mindustry/core/Control.java
index 56dc35eb2c..7c86601bb3 100644
--- a/core/src/io/anuke/mindustry/core/Control.java
+++ b/core/src/mindustry/core/Control.java
@@ -1,36 +1,36 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.arc.assets.*;
-import io.anuke.arc.audio.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.input.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.input.*;
-import io.anuke.mindustry.maps.Map;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.ui.dialogs.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.storage.*;
+import arc.*;
+import arc.assets.*;
+import arc.audio.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.input.*;
+import arc.math.geom.*;
+import arc.scene.ui.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.core.GameState.*;
+import mindustry.entities.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.input.*;
+import mindustry.maps.Map;
+import mindustry.type.*;
+import mindustry.ui.dialogs.*;
+import mindustry.world.*;
+import mindustry.world.blocks.storage.*;
import java.io.*;
import java.text.*;
import java.util.*;
-import static io.anuke.arc.Core.*;
-import static io.anuke.mindustry.Vars.net;
-import static io.anuke.mindustry.Vars.*;
+import static arc.Core.*;
+import static mindustry.Vars.net;
+import static mindustry.Vars.*;
/**
* Control module.
@@ -63,7 +63,7 @@ public class Control implements ApplicationListener, Loadable{
});
Events.on(PlayEvent.class, event -> {
- player.setTeam(state.rules.pvp ? netServer.assignTeam(player, playerGroup.all()) : defaultTeam);
+ player.setTeam(netServer.assignTeam(player, playerGroup.all()));
player.setDead(true);
player.add();
@@ -256,9 +256,9 @@ public class Control implements ApplicationListener, Loadable{
world.loadGenerator(zone.generator);
zone.rules.get(state.rules);
state.rules.zone = zone;
- for(Tile core : state.teams.get(defaultTeam).cores){
+ for(TileEntity core : state.teams.playerCores()){
for(ItemStack stack : zone.getStartingItems()){
- core.entity.items.add(stack.item, stack.amount);
+ core.items.add(stack.item, stack.amount);
}
}
state.set(State.playing);
@@ -294,8 +294,8 @@ public class Control implements ApplicationListener, Loadable{
Geometry.circle(coreb.x, coreb.y, 10, (cx, cy) -> {
Tile tile = world.ltile(cx, cy);
- if(tile != null && tile.getTeam() == defaultTeam && !(tile.block() instanceof CoreBlock)){
- world.removeBlock(tile);
+ if(tile != null && tile.getTeam() == state.rules.defaultTeam && !(tile.block() instanceof CoreBlock)){
+ tile.remove();
}
});
@@ -305,13 +305,13 @@ public class Control implements ApplicationListener, Loadable{
zone.rules.get(state.rules);
state.rules.zone = zone;
- for(Tile core : state.teams.get(defaultTeam).cores){
+ for(TileEntity core : state.teams.playerCores()){
for(ItemStack stack : zone.getStartingItems()){
- core.entity.items.add(stack.item, stack.amount);
+ core.items.add(stack.item, stack.amount);
}
}
- Tile core = state.teams.get(defaultTeam).cores.first();
- core.entity.items.clear();
+ TileEntity core = state.teams.playerCores().first();
+ core.items.clear();
logic.play();
state.rules.waveTimer = false;
@@ -434,9 +434,9 @@ public class Control implements ApplicationListener, Loadable{
input.update();
if(world.isZone()){
- for(Tile tile : state.teams.get(player.getTeam()).cores){
+ for(TileEntity tile : state.teams.cores(player.getTeam())){
for(Item item : content.items()){
- if(tile.entity != null && tile.entity.items.has(item)){
+ if(tile.items.has(item)){
data.unlockContent(item);
}
}
@@ -456,7 +456,7 @@ public class Control implements ApplicationListener, Loadable{
state.set(state.is(State.playing) ? State.paused : State.playing);
}
- if(Core.input.keyTap(Binding.menu) && !ui.restart.isShown()){
+ if(Core.input.keyTap(Binding.menu) && !ui.restart.isShown() && !ui.minimapfrag.shown()){
if(ui.chatfrag.shown()){
ui.chatfrag.hide();
}else if(!ui.paused.isShown() && !scene.hasDialog()){
diff --git a/core/src/io/anuke/mindustry/core/FileTree.java b/core/src/mindustry/core/FileTree.java
similarity index 82%
rename from core/src/io/anuke/mindustry/core/FileTree.java
rename to core/src/mindustry/core/FileTree.java
index cd201c5337..810b9669fb 100644
--- a/core/src/io/anuke/mindustry/core/FileTree.java
+++ b/core/src/mindustry/core/FileTree.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.arc.assets.loaders.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
+import arc.*;
+import arc.assets.loaders.*;
+import arc.struct.*;
+import arc.files.*;
/** Handles files in a modded context. */
public class FileTree implements FileHandleResolver{
diff --git a/core/src/io/anuke/mindustry/core/GameState.java b/core/src/mindustry/core/GameState.java
similarity index 72%
rename from core/src/io/anuke/mindustry/core/GameState.java
rename to core/src/mindustry/core/GameState.java
index 0e1c7a2d4b..2b233789eb 100644
--- a/core/src/io/anuke/mindustry/core/GameState.java
+++ b/core/src/mindustry/core/GameState.java
@@ -1,12 +1,11 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.entities.type.base.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
+import arc.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class GameState{
/** Current wave number, can be anything in non-wave modes. */
@@ -26,12 +25,8 @@ public class GameState{
/** Current game state. */
private State state = State.menu;
- public int enemies(){
- return net.client() ? enemies : unitGroups[waveTeam.ordinal()].count(b -> !(b instanceof BaseDrone));
- }
-
public BaseUnit boss(){
- return unitGroups[waveTeam.ordinal()].find(BaseUnit::isBoss);
+ return unitGroup.find(u -> u.isBoss() && u.getTeam() == rules.waveTeam);
}
public void set(State astate){
diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java
similarity index 72%
rename from core/src/io/anuke/mindustry/core/Logic.java
rename to core/src/mindustry/core/Logic.java
index 69c667e625..4e1e4a5c29 100644
--- a/core/src/io/anuke/mindustry/core/Logic.java
+++ b/core/src/mindustry/core/Logic.java
@@ -1,26 +1,26 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.ctype.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.Teams.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.BuildBlock.*;
-import io.anuke.mindustry.world.blocks.power.*;
+import arc.*;
+import arc.util.*;
+import mindustry.annotations.Annotations.*;
+import mindustry.content.*;
+import mindustry.core.GameState.*;
+import mindustry.ctype.*;
+import mindustry.entities.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.game.Teams.*;
+import mindustry.gen.*;
+import mindustry.type.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.blocks.BuildBlock.*;
+import mindustry.world.blocks.power.*;
import java.util.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/**
* Logic module.
@@ -47,8 +47,8 @@ public class Logic implements ApplicationListener{
//blocks that get broken are appended to the team's broken block queue
Tile tile = event.tile;
Block block = tile.block();
- //skip null entities or nukes, for obvious reasons
- if(tile.entity == null || tile.block() instanceof NuclearReactor) return;
+ //skip null entities or un-rebuildables, for obvious reasons; also skip client since they can't modify these requests
+ if(tile.entity == null || !tile.block().rebuildable || net.client()) return;
if(block instanceof BuildBlock){
@@ -107,9 +107,9 @@ public class Logic implements ApplicationListener{
//add starting items
if(!world.isZone()){
- for(Team team : Team.all){
- if(!state.teams.get(team).cores.isEmpty()){
- TileEntity entity = state.teams.get(team).cores.first().entity;
+ for(TeamData team : state.teams.getActive()){
+ if(team.hasCore()){
+ TileEntity entity = team.core();
entity.items.clear();
for(ItemStack stack : state.rules.loadout){
entity.items.add(stack.item, stack.amount);
@@ -143,23 +143,23 @@ public class Logic implements ApplicationListener{
}
private void checkGameOver(){
- if(!state.rules.attackMode && state.teams.get(defaultTeam).cores.size == 0 && !state.gameOver){
+ if(!state.rules.attackMode && state.teams.playerCores().size == 0 && !state.gameOver){
state.gameOver = true;
- Events.fire(new GameOverEvent(waveTeam));
+ Events.fire(new GameOverEvent(state.rules.waveTeam));
}else if(state.rules.attackMode){
Team alive = null;
- for(Team team : Team.all){
- if(state.teams.get(team).cores.size > 0){
+ for(TeamData team : state.teams.getActive()){
+ if(team.hasCore()){
if(alive != null){
return;
}
- alive = team;
+ alive = team.team;
}
}
if(alive != null && !state.gameOver){
- if(world.isZone() && alive == defaultTeam){
+ if(world.isZone() && alive == state.rules.defaultTeam){
//in attack maps, a victorious game over is equivalent to a launch
Call.launchZone();
}else{
@@ -176,7 +176,7 @@ public class Logic implements ApplicationListener{
ui.hudfrag.showLaunch();
}
- for(Tile tile : state.teams.get(defaultTeam).cores){
+ for(TileEntity tile : state.teams.playerCores()){
Effects.effect(Fx.launch, tile);
}
@@ -185,19 +185,18 @@ public class Logic implements ApplicationListener{
}
Time.runTask(30f, () -> {
- for(Tile tile : state.teams.get(defaultTeam).cores){
+ for(TileEntity entity : state.teams.playerCores()){
for(Item item : content.items()){
- if(tile == null || tile.entity == null || tile.entity.items == null) continue;
- data.addItem(item, tile.entity.items.get(item));
- Events.fire(new LaunchItemEvent(item, tile.entity.items.get(item)));
+ data.addItem(item, entity.items.get(item));
+ Events.fire(new LaunchItemEvent(item, entity.items.get(item)));
}
- world.removeBlock(tile);
+ entity.tile.remove();
}
state.launched = true;
state.gameOver = true;
Events.fire(new LaunchEvent());
//manually fire game over event now
- Events.fire(new GameOverEvent(defaultTeam));
+ Events.fire(new GameOverEvent(state.rules.defaultTeam));
});
}
@@ -210,14 +209,18 @@ public class Logic implements ApplicationListener{
@Override
public void update(){
+ Events.fire(Trigger.update);
if(!state.is(State.menu)){
+ if(!net.client()){
+ state.enemies = unitGroup.count(b -> b.getTeam() == state.rules.waveTeam && b.countsAsEnemy());
+ }
if(!state.isPaused()){
Time.update();
if(state.rules.waves && state.rules.waveTimer && !state.gameOver){
- if(!state.rules.waitForWaveToEnd || unitGroups[waveTeam.ordinal()].size() == 0){
+ if(!state.rules.waitForWaveToEnd || state.enemies == 0){
state.wavetime = Math.max(state.wavetime - Time.delta(), 0);
}
}
@@ -232,20 +235,15 @@ public class Logic implements ApplicationListener{
}
if(!state.isEditor()){
- for(EntityGroup group : unitGroups){
- group.update();
- }
-
+ unitGroup.update();
puddleGroup.update();
shieldGroup.update();
bulletGroup.update();
tileGroup.update();
fireGroup.update();
}else{
- for(EntityGroup> group : unitGroups){
- group.updateEvents();
- collisions.updatePhysics(group);
- }
+ unitGroup.updateEvents();
+ collisions.updatePhysics(unitGroup);
}
@@ -257,17 +255,13 @@ public class Logic implements ApplicationListener{
}
if(!state.isEditor()){
-
- for(EntityGroup group : unitGroups){
- if(group.isEmpty()) continue;
- collisions.collideGroups(bulletGroup, group);
- }
-
+ //bulletGroup
+ collisions.collideGroups(bulletGroup, unitGroup);
collisions.collideGroups(bulletGroup, playerGroup);
}
}
- if(!net.client() && !world.isInvalidMap() && !state.isEditor()){
+ if(!net.client() && !world.isInvalidMap() && !state.isEditor() && state.rules.canGameOver){
checkGameOver();
}
}
diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java
similarity index 93%
rename from core/src/io/anuke/mindustry/core/NetClient.java
rename to core/src/mindustry/core/NetClient.java
index 6a0f0428e3..8c12884472 100644
--- a/core/src/io/anuke/mindustry/core/NetClient.java
+++ b/core/src/mindustry/core/NetClient.java
@@ -1,36 +1,36 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.CommandHandler.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.io.*;
-import io.anuke.arc.util.serialization.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.BuilderTrait.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.net.Administration.*;
-import io.anuke.mindustry.net.Net.*;
-import io.anuke.mindustry.net.*;
-import io.anuke.mindustry.net.Packets.*;
-import io.anuke.mindustry.type.TypeID;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.modules.*;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.math.*;
+import arc.util.CommandHandler.*;
+import arc.util.*;
+import arc.util.io.*;
+import arc.util.serialization.*;
+import mindustry.*;
+import mindustry.core.GameState.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.*;
+import mindustry.entities.traits.BuilderTrait.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.game.*;
+import mindustry.game.EventType.*;
+import mindustry.gen.*;
+import mindustry.net.Administration.*;
+import mindustry.net.Net.*;
+import mindustry.net.*;
+import mindustry.net.Packets.*;
+import mindustry.type.TypeID;
+import mindustry.world.*;
+import mindustry.world.modules.*;
import java.io.*;
import java.util.zip.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class NetClient implements ApplicationListener{
private final static float dataTimeout = 60 * 18;
@@ -160,9 +160,17 @@ public class NetClient implements ApplicationListener{
throw new ValidateException(player, "Player has sent a message above the text limit.");
}
+ Events.fire(new PlayerChatEvent(player, message));
+
//check if it's a command
CommandResponse response = netServer.clientCommands.handleMessage(message, player);
if(response.type == ResponseType.noCommand){ //no command to handle
+ message = netServer.admins.filterMessage(player, message);
+ //supress chat message if it's filtered out
+ if(message == null){
+ return;
+ }
+
//server console logging
Log.info("&y{0}: &lb{1}", player.name, message);
@@ -189,8 +197,6 @@ public class NetClient implements ApplicationListener{
player.sendMessage(text);
}
}
-
- Events.fire(new PlayerChatEvent(player, message));
}
public static String colorizeName(int id, String name){
@@ -507,7 +513,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/io/anuke/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java
similarity index 88%
rename from core/src/io/anuke/mindustry/core/NetServer.java
rename to core/src/mindustry/core/NetServer.java
index 218cbd2d83..9fead5492b 100644
--- a/core/src/io/anuke/mindustry/core/NetServer.java
+++ b/core/src/mindustry/core/NetServer.java
@@ -1,44 +1,66 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.CommandHandler.*;
-import io.anuke.arc.util.io.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.BuilderTrait.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.net.*;
-import io.anuke.mindustry.net.Administration.*;
-import io.anuke.mindustry.net.Packets.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import arc.graphics.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.struct.*;
+import arc.util.*;
+import arc.util.CommandHandler.*;
+import arc.util.io.*;
+import mindustry.annotations.Annotations.*;
+import mindustry.content.*;
+import mindustry.core.GameState.*;
+import mindustry.entities.*;
+import mindustry.entities.traits.BuilderTrait.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.net.Administration;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.game.Teams.*;
+import mindustry.gen.*;
+import mindustry.net.*;
+import mindustry.net.Administration.*;
+import mindustry.net.Packets.*;
+import mindustry.world.*;
+import mindustry.world.blocks.storage.CoreBlock.*;
import java.io.*;
+import java.net.*;
import java.nio.*;
import java.util.zip.*;
-import static io.anuke.mindustry.Vars.*;
+import static arc.util.Log.*;
+import static mindustry.Vars.*;
public class NetServer implements ApplicationListener{
private final static int maxSnapshotSize = 430, timerBlockSync = 0;
- private final static float serverSyncTime = 12, kickDuration = 30 * 1000, blockSyncTime = 60 * 10;
- private final static Vector2 vector = new Vector2();
- private final static Rectangle viewport = new Rectangle();
+ private final static float serverSyncTime = 12, blockSyncTime = 60 * 8;
+ private final static Vec2 vector = new Vec2();
+ private final static Rect viewport = new Rect();
/** If a player goes away of their server-side coordinates by this distance, they get teleported back. */
private final static float correctDist = 16f;
public final Administration admins = new Administration();
public final CommandHandler clientCommands = new CommandHandler("/");
+ public TeamAssigner assigner = (player, players) -> {
+ if(state.rules.pvp){
+ //find team with minimum amount of players and auto-assign player to that.
+ TeamData re = state.teams.getActive().min(data -> {
+ int count = 0;
+ for(Player other : players){
+ if(other.getTeam() == data.team && other != player){
+ count++;
+ }
+ }
+ return count;
+ });
+ return re == null ? null : re.team;
+ }
+
+ return state.rules.defaultTeam;
+ };
private boolean closing = false;
private Interval timer = new Interval();
@@ -54,7 +76,7 @@ public class NetServer implements ApplicationListener{
public NetServer(){
net.handleServer(Connect.class, (con, connect) -> {
- if(admins.isIPBanned(connect.addressTCP)){
+ if(admins.isIPBanned(connect.addressTCP) || admins.isSubnetBanned(connect.addressTCP)){
con.kick(KickReason.banned);
}
});
@@ -72,7 +94,7 @@ public class NetServer implements ApplicationListener{
String uuid = packet.uuid;
- if(admins.isIPBanned(con.address)) return;
+ if(admins.isIPBanned(con.address) || admins.isSubnetBanned(con.address)) return;
if(con.hasBegunConnecting){
con.kick(KickReason.idInUse);
@@ -94,7 +116,7 @@ public class NetServer implements ApplicationListener{
return;
}
- if(Time.millis() - info.lastKicked < kickDuration){
+ if(Time.millis() < info.lastKicked){
con.kick(KickReason.recentKick);
return;
}
@@ -197,10 +219,7 @@ public class NetServer implements ApplicationListener{
con.player = player;
//playing in pvp mode automatically assigns players to teams
- if(state.rules.pvp){
- player.setTeam(assignTeam(player, playerGroup.all()));
- Log.info("Auto-assigned player {0} to team {1}.", player.name, player.getTeam());
- }
+ player.setTeam(assignTeam(player, playerGroup.all()));
sendWorldData(player);
@@ -303,6 +322,11 @@ public class NetServer implements ApplicationListener{
VoteSession[] currentlyKicking = {null};
clientCommands.register("votekick", "[player...]", "Vote to kick a player, with a cooldown.", (args, player) -> {
+ if(!Config.enableVotekick.bool()){
+ player.sendMessage("[scarlet]Vote-kick is disabled on this server.");
+ return;
+ }
+
if(playerGroup.size() < 3){
player.sendMessage("[scarlet]At least 3 players are needed to start a votekick.");
return;
@@ -390,6 +414,12 @@ public class NetServer implements ApplicationListener{
if(player.isLocal){
player.sendMessage("[scarlet]Re-synchronizing as the host is pointless.");
}else{
+ if(Time.timeSinceMillis(player.getInfo().lastSyncTime) < 1000 * 5){
+ player.sendMessage("[scarlet]You may only /sync every 5 seconds.");
+ return;
+ }
+
+ player.getInfo().lastSyncTime = Time.millis();
Call.onWorldDataBegin(player.con);
netServer.sendWorldData(player);
}
@@ -401,19 +431,7 @@ public class NetServer implements ApplicationListener{
}
public Team assignTeam(Player current, Iterable players){
- //find team with minimum amount of players and auto-assign player to that.
- return Structs.findMin(Team.all, team -> {
- if(state.teams.isActive(team) && !state.teams.get(team).cores.isEmpty()){
- int count = 0;
- for(Player other : players){
- if(other.getTeam() == team && other != current){
- count++;
- }
- }
- return count;
- }
- return Integer.MAX_VALUE;
- });
+ return assigner.assign(current, players);
}
public void sendWorldData(Player player){
@@ -437,7 +455,7 @@ public class NetServer implements ApplicationListener{
if(!player.con.hasDisconnected){
if(player.con.hasConnected){
Events.fire(new PlayerLeave(player));
- Call.sendMessage("[accent]" + player.name + "[accent] has disconnected.");
+ if(Config.showConnectMessages.bool()) Call.sendMessage("[accent]" + player.name + "[accent] has disconnected.");
Call.onPlayerDisconnect(player.id);
}
@@ -575,17 +593,21 @@ public class NetServer implements ApplicationListener{
player.add();
player.con.hasConnected = true;
- Call.sendMessage("[accent]" + player.name + "[accent] has connected.");
+ if(Config.showConnectMessages.bool()) Call.sendMessage("[accent]" + player.name + "[accent] has connected.");
Log.info("&lm[{1}] &y{0} has connected. ", player.name, player.uuid);
+ if(!Config.motd.string().equalsIgnoreCase("off")){
+ player.sendMessage(Config.motd.string());
+ }
+
Events.fire(new PlayerJoin(player));
}
public boolean isWaitingForPlayers(){
if(state.rules.pvp){
int used = 0;
- for(Team t : Team.all){
- if(playerGroup.count(p -> p.getTeam() == t) > 0){
+ for(TeamData t : state.teams.getActive()){
+ if(playerGroup.count(p -> p.getTeam() == t.team) > 0){
used++;
}
}
@@ -594,6 +616,7 @@ public class NetServer implements ApplicationListener{
return false;
}
+ @Override
public void update(){
if(!headless && !closing && net.server() && state.is(State.menu)){
@@ -611,6 +634,20 @@ public class NetServer implements ApplicationListener{
}
}
+ /** Should only be used on the headless backend. */
+ public void openServer(){
+ try{
+ net.host(Config.port.num());
+ info("&lcOpened a server on port {0}.", Config.port.num());
+ }catch(BindException e){
+ Log.err("Unable to host: Port already in use! Make sure no other servers are running on the same port in your network.");
+ state.set(State.menu);
+ }catch(IOException e){
+ err(e);
+ state.set(State.menu);
+ }
+ }
+
public void kickAll(KickReason reason){
for(NetConnection con : net.getConnections()){
con.kick(reason);
@@ -647,20 +684,20 @@ public class NetServer implements ApplicationListener{
public void writeEntitySnapshot(Player player) throws IOException{
syncStream.reset();
- ObjectSet cores = state.teams.get(player.getTeam()).cores;
+ Array cores = state.teams.cores(player.getTeam());
dataStream.writeByte(cores.size);
- for(Tile tile : cores){
- dataStream.writeInt(tile.pos());
- tile.entity.items.write(dataStream);
+ for(CoreEntity entity : cores){
+ dataStream.writeInt(entity.tile.pos());
+ entity.items.write(dataStream);
}
dataStream.close();
byte[] stateBytes = syncStream.toByteArray();
//write basic state data.
- Call.onStateSnapshot(player.con, state.wavetime, state.wave, state.enemies(), (short)stateBytes.length, net.compressSnapshot(stateBytes));
+ Call.onStateSnapshot(player.con, state.wavetime, state.wave, state.enemies, (short)stateBytes.length, net.compressSnapshot(stateBytes));
viewport.setSize(player.con.viewWidth, player.con.viewHeight).setCenter(player.con.viewX, player.con.viewY);
@@ -784,4 +821,8 @@ public class NetServer implements ApplicationListener{
e.printStackTrace();
}
}
+
+ public interface TeamAssigner{
+ Team assign(Player player, Iterable players);
+ }
}
diff --git a/core/src/io/anuke/mindustry/core/Platform.java b/core/src/mindustry/core/Platform.java
similarity index 86%
rename from core/src/io/anuke/mindustry/core/Platform.java
rename to core/src/mindustry/core/Platform.java
index 0cfb72a058..fda4ea4564 100644
--- a/core/src/io/anuke/mindustry/core/Platform.java
+++ b/core/src/mindustry/core/Platform.java
@@ -1,21 +1,21 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.arc.Input.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.util.serialization.*;
-import io.anuke.mindustry.mod.*;
-import io.anuke.mindustry.net.*;
-import io.anuke.mindustry.net.Net.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.ui.dialogs.*;
+import arc.*;
+import arc.Input.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.func.*;
+import arc.math.*;
+import arc.scene.ui.*;
+import arc.util.serialization.*;
+import mindustry.mod.*;
+import mindustry.net.*;
+import mindustry.net.Net.*;
+import mindustry.type.*;
+import mindustry.ui.dialogs.*;
import org.mozilla.javascript.*;
-import static io.anuke.mindustry.Vars.mobile;
+import static mindustry.Vars.mobile;
public interface Platform{
@@ -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/io/anuke/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java
similarity index 80%
rename from core/src/io/anuke/mindustry/core/Renderer.java
rename to core/src/mindustry/core/Renderer.java
index c8cf2b1063..7d5e6714b5 100644
--- a/core/src/io/anuke/mindustry/core/Renderer.java
+++ b/core/src/mindustry/core/Renderer.java
@@ -1,32 +1,31 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.graphics.glutils.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.pooling.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.effect.GroundEffectEntity.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.input.*;
-import io.anuke.mindustry.ui.Cicon;
-import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
+import arc.*;
+import arc.files.*;
+import arc.func.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.graphics.gl.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.pooling.*;
+import mindustry.content.*;
+import mindustry.core.GameState.*;
+import mindustry.entities.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.effect.GroundEffectEntity.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.graphics.*;
+import mindustry.input.*;
+import mindustry.ui.*;
+import mindustry.world.blocks.defense.ForceProjector.*;
-import static io.anuke.arc.Core.*;
-import static io.anuke.mindustry.Vars.*;
+import static arc.Core.*;
+import static mindustry.Vars.*;
public class Renderer implements ApplicationListener{
public final BlockRenderer blocks = new BlockRenderer();
@@ -42,7 +41,7 @@ public class Renderer implements ApplicationListener{
private float camerascale = targetscale;
private float landscale = 0f, landTime;
private float minZoomScl = Scl.scl(0.01f);
- private Rectangle rect = new Rectangle(), rect2 = new Rectangle();
+ private Rect rect = new Rect(), rect2 = new Rect();
private float shakeIntensity, shaketime;
public Renderer(){
@@ -57,8 +56,8 @@ public class Renderer implements ApplicationListener{
Effects.setEffectProvider((effect, color, x, y, rotation, data) -> {
if(effect == Fx.none) return;
if(Core.settings.getBool("effects")){
- Rectangle view = camera.bounds(rect);
- Rectangle pos = rect2.setSize(effect.size).setCenter(x, y);
+ Rect view = camera.bounds(rect);
+ Rect pos = rect2.setSize(effect.size).setCenter(x, y);
if(view.overlaps(pos)){
@@ -120,16 +119,18 @@ public class Renderer implements ApplicationListener{
landTime = 0f;
graphics.clear(Color.black);
}else{
- Vector2 position = Tmp.v3.set(player);
+ Vec2 position = Tmp.v3.set(player);
if(player.isDead()){
TileEntity core = player.getClosestCore();
- if(core != null && player.spawner == null){
- camera.position.lerpDelta(core.x, core.y, 0.08f);
- }else{
- camera.position.lerpDelta(position, 0.08f);
+ if(core != null){
+ if(player.spawner == null){
+ camera.position.lerpDelta(core.x, core.y, 0.08f);
+ }else{
+ camera.position.lerpDelta(position, 0.08f);
+ }
}
- }else if(control.input instanceof DesktopInput){
+ }else if(control.input instanceof DesktopInput && !state.isPaused()){
camera.position.lerpDelta(position, 0.08f);
}
@@ -344,11 +345,7 @@ public class Renderer implements ApplicationListener{
Draw.rect("circle-shadow", u.x, u.y, size * rad, size * rad);
};
- for(EntityGroup extends BaseUnit> group : unitGroups){
- if(!group.isEmpty()){
- group.draw(unit -> !unit.isDead(), draw::get);
- }
- }
+ unitGroup.draw(unit -> !unit.isDead(), draw::get);
if(!playerGroup.isEmpty()){
playerGroup.draw(unit -> !unit.isDead(), draw::get);
@@ -361,34 +358,21 @@ public class Renderer implements ApplicationListener{
float trnsX = -12, trnsY = -13;
Draw.color(0, 0, 0, 0.22f);
- for(EntityGroup extends BaseUnit> group : unitGroups){
- if(!group.isEmpty()){
- group.draw(unit -> unit.isFlying() && !unit.isDead(), baseUnit -> baseUnit.drawShadow(trnsX, trnsY));
- }
- }
-
- if(!playerGroup.isEmpty()){
- playerGroup.draw(unit -> unit.isFlying() && !unit.isDead(), player -> player.drawShadow(trnsX, trnsY));
- }
+ unitGroup.draw(unit -> unit.isFlying() && !unit.isDead(), baseUnit -> baseUnit.drawShadow(trnsX, trnsY));
+ playerGroup.draw(unit -> unit.isFlying() && !unit.isDead(), player -> player.drawShadow(trnsX, trnsY));
Draw.color();
}
private void drawAllTeams(boolean flying){
- for(Team team : Team.all){
- EntityGroup group = unitGroups[team.ordinal()];
+ unitGroup.draw(u -> u.isFlying() == flying && !u.isDead(), Unit::drawUnder);
+ playerGroup.draw(p -> p.isFlying() == flying && !p.isDead(), Unit::drawUnder);
- if(group.count(p -> p.isFlying() == flying) + playerGroup.count(p -> p.isFlying() == flying && p.getTeam() == team) == 0 && flying) continue;
+ unitGroup.draw(u -> u.isFlying() == flying && !u.isDead(), Unit::drawAll);
+ playerGroup.draw(p -> p.isFlying() == flying, Unit::drawAll);
- unitGroups[team.ordinal()].draw(u -> u.isFlying() == flying && !u.isDead(), Unit::drawUnder);
- playerGroup.draw(p -> p.isFlying() == flying && p.getTeam() == team && !p.isDead(), Unit::drawUnder);
-
- unitGroups[team.ordinal()].draw(u -> u.isFlying() == flying && !u.isDead(), Unit::drawAll);
- playerGroup.draw(p -> p.isFlying() == flying && p.getTeam() == team, Unit::drawAll);
-
- unitGroups[team.ordinal()].draw(u -> u.isFlying() == flying && !u.isDead(), Unit::drawOver);
- playerGroup.draw(p -> p.isFlying() == flying && p.getTeam() == team, Unit::drawOver);
- }
+ unitGroup.draw(u -> u.isFlying() == flying && !u.isDead(), Unit::drawOver);
+ playerGroup.draw(p -> p.isFlying() == flying, Unit::drawOver);
}
public void scaleCamera(float amount){
diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/mindustry/core/UI.java
similarity index 91%
rename from core/src/io/anuke/mindustry/core/UI.java
rename to core/src/mindustry/core/UI.java
index 9b0af80f52..f1b578cc9c 100644
--- a/core/src/io/anuke/mindustry/core/UI.java
+++ b/core/src/mindustry/core/UI.java
@@ -1,48 +1,49 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.arc.Graphics.*;
-import io.anuke.arc.Graphics.Cursor.*;
-import io.anuke.arc.Input.*;
-import io.anuke.arc.assets.*;
-import io.anuke.arc.assets.loaders.*;
-import io.anuke.arc.assets.loaders.resolvers.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.freetype.*;
-import io.anuke.arc.freetype.FreeTypeFontGenerator.*;
-import io.anuke.arc.freetype.FreetypeFontLoader.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.Texture.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.input.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.*;
-import io.anuke.arc.scene.actions.*;
-import io.anuke.arc.scene.event.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.TextField.*;
-import io.anuke.arc.scene.ui.Tooltip.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.editor.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.ui.dialogs.*;
-import io.anuke.mindustry.ui.fragments.*;
+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.ui.*;
+import arc.scene.ui.TextField.*;
+import arc.scene.ui.Tooltip.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import mindustry.core.GameState.*;
+import mindustry.editor.*;
+import mindustry.game.EventType.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.ui.*;
+import mindustry.ui.dialogs.*;
+import mindustry.ui.fragments.*;
-import static io.anuke.arc.scene.actions.Actions.*;
-import static io.anuke.mindustry.Vars.*;
+import static arc.scene.actions.Actions.*;
+import static mindustry.Vars.*;
public class UI implements ApplicationListener, Loadable{
public MenuFragment menufrag;
public HudFragment hudfrag;
public ChatFragment chatfrag;
public ScriptConsoleFragment scriptfrag;
+ public MinimapFragment minimapfrag;
public PlayerListFragment listfrag;
public LoadingFragment loadfrag;
@@ -68,7 +69,7 @@ public class UI implements ApplicationListener, Loadable{
public ContentInfoDialog content;
public DeployDialog deploy;
public TechTreeDialog tech;
- public MinimapDialog minimap;
+ //public MinimapDialog minimap;
public SchematicsDialog schematics;
public ModsDialog mods;
public ColorPicker picker;
@@ -210,6 +211,7 @@ public class UI implements ApplicationListener, Loadable{
menufrag = new MenuFragment();
hudfrag = new HudFragment();
chatfrag = new ChatFragment();
+ minimapfrag = new MinimapFragment();
listfrag = new PlayerListFragment();
loadfrag = new LoadingFragment();
scriptfrag = new ScriptConsoleFragment();
@@ -235,7 +237,6 @@ public class UI implements ApplicationListener, Loadable{
content = new ContentInfoDialog();
deploy = new DeployDialog();
tech = new TechTreeDialog();
- minimap = new MinimapDialog();
mods = new ModsDialog();
schematics = new SchematicsDialog();
@@ -254,6 +255,7 @@ public class UI implements ApplicationListener, Loadable{
hudfrag.build(hudGroup);
menufrag.build(menuGroup);
chatfrag.container().build(hudGroup);
+ minimapfrag.build(hudGroup);
listfrag.build(hudGroup);
scriptfrag.container().build(hudGroup);
loadfrag.build(group);
@@ -305,7 +307,19 @@ public class UI implements ApplicationListener, Loadable{
hide();
}).disabled(b -> field.getText().isEmpty());
buttons.addButton("$cancel", this::hide);
- }}.show();
+ keyDown(KeyCode.ENTER, () -> {
+ String text = field.getText();
+ if(!text.isEmpty()){
+ confirmed.get(text);
+ hide();
+ }
+ });
+ keyDown(KeyCode.ESCAPE, this::hide);
+ keyDown(KeyCode.BACK, this::hide);
+ show();
+ Core.scene.setKeyboardFocus(field);
+ field.setCursorPosition(def.length());
+ }};
}
}
diff --git a/core/src/io/anuke/mindustry/core/Version.java b/core/src/mindustry/core/Version.java
similarity index 84%
rename from core/src/io/anuke/mindustry/core/Version.java
rename to core/src/mindustry/core/Version.java
index a6ff7ea6a9..08a105d8fb 100644
--- a/core/src/io/anuke/mindustry/core/Version.java
+++ b/core/src/mindustry/core/Version.java
@@ -1,17 +1,17 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.arc.Files.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.io.*;
+import arc.*;
+import arc.Files.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.util.*;
+import arc.util.io.*;
public class Version{
/** Build type. 'official' for official releases; 'custom' or 'bleeding edge' are also used. */
- public static String type;
+ public static String type = "unknown";
/** Build modifier, e.g. 'alpha' or 'release' */
- public static String modifier;
+ public static String modifier = "unknown";
/** Number specifying the major version, e.g. '4' */
public static int number;
/** Build number, e.g. '43'. set to '-1' for custom builds. */
diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/mindustry/core/World.java
similarity index 83%
rename from core/src/io/anuke/mindustry/core/World.java
rename to core/src/mindustry/core/World.java
index 869338ffc7..bbc3f4074c 100644
--- a/core/src/io/anuke/mindustry/core/World.java
+++ b/core/src/mindustry/core/World.java
@@ -1,25 +1,25 @@
-package io.anuke.mindustry.core;
+package mindustry.core;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.maps.filters.*;
-import io.anuke.mindustry.maps.filters.GenerateFilter.*;
-import io.anuke.mindustry.maps.generators.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
+import arc.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.struct.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.*;
+import mindustry.core.GameState.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.game.Teams.*;
+import mindustry.io.*;
+import mindustry.maps.*;
+import mindustry.maps.filters.*;
+import mindustry.maps.filters.GenerateFilter.*;
+import mindustry.maps.generators.*;
+import mindustry.type.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class World{
public final Context context = new Context();
@@ -217,7 +217,7 @@ public class World{
public void loadMap(Map map, Rules checkRules){
try{
SaveIO.load(map.file, new FilterContext(map));
- }catch(Exception e){
+ }catch(Throwable e){
Log.err(e);
if(!headless){
ui.showErrorMessage("$map.invalid");
@@ -233,33 +233,22 @@ public class World{
invalidMap = false;
if(!headless){
- if(state.teams.get(defaultTeam).cores.size == 0 && !checkRules.pvp){
+ if(state.teams.playerCores().size == 0 && !checkRules.pvp){
ui.showErrorMessage("$map.nospawn");
invalidMap = true;
}else if(checkRules.pvp){ //pvp maps need two cores to be valid
- int teams = 0;
- for(Team team : Team.all){
- if(state.teams.get(team).cores.size != 0){
- teams ++;
- }
- }
- if(teams < 2){
+ if(state.teams.getActive().count(TeamData::hasCore) < 2){
invalidMap = true;
ui.showErrorMessage("$map.nospawn.pvp");
}
}else if(checkRules.attackMode){ //attack maps need two cores to be valid
- invalidMap = state.teams.get(waveTeam).cores.isEmpty();
+ invalidMap = state.teams.get(state.rules.waveTeam).noCores();
if(invalidMap){
ui.showErrorMessage("$map.nospawn.attack");
}
}
}else{
- invalidMap = true;
- for(Team team : Team.all){
- if(state.teams.get(team).cores.size != 0){
- invalidMap = false;
- }
- }
+ invalidMap = !state.teams.getActive().contains(TeamData::hasCore);
if(invalidMap){
throw new MapException(map, "Map has no cores!");
@@ -275,36 +264,6 @@ public class World{
}
}
- public void removeBlock(Tile tile){
- if(tile == null) return;
- tile.link().getLinkedTiles(other -> other.setBlock(Blocks.air));
- }
-
- public void setBlock(Tile tile, Block block, Team team){
- setBlock(tile, block, team, 0);
- }
-
- public void setBlock(Tile tile, Block block, Team team, int rotation){
- tile.setBlock(block, team, rotation);
- if(block.isMultiblock()){
- int offsetx = -(block.size - 1) / 2;
- int offsety = -(block.size - 1) / 2;
-
- for(int dx = 0; dx < block.size; dx++){
- for(int dy = 0; dy < block.size; dy++){
- int worldx = dx + offsetx + tile.x;
- int worldy = dy + offsety + tile.y;
- if(!(worldx == tile.x && worldy == tile.y)){
- Tile toplace = world.tile(worldx, worldy);
- if(toplace != null){
- toplace.setBlock(BlockPart.get(dx + offsetx, dy + offsety), team);
- }
- }
- }
- }
- }
- }
-
public void raycastEachWorld(float x0, float y0, float x1, float y1, Raycaster cons){
raycastEach(toTile(x0), toTile(y0), toTile(x1), toTile(y1), cons);
}
diff --git a/core/src/io/anuke/mindustry/ctype/Content.java b/core/src/mindustry/ctype/Content.java
similarity index 82%
rename from core/src/io/anuke/mindustry/ctype/Content.java
rename to core/src/mindustry/ctype/Content.java
index 09a304817d..382d1a22ab 100644
--- a/core/src/io/anuke/mindustry/ctype/Content.java
+++ b/core/src/mindustry/ctype/Content.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.ctype;
+package mindustry.ctype;
-import io.anuke.arc.files.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.mod.Mods.*;
+import arc.files.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.*;
+import mindustry.mod.Mods.*;
-/** Base class for a content type that is loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
+/** Base class for a content type that is loaded in {@link mindustry.core.ContentLoader}. */
public abstract class Content implements Comparable{
public final short id;
/** Info on which mod this content was loaded from. */
@@ -14,7 +14,7 @@ public abstract class Content implements Comparable{
public Content(){
- this.id = (short)Vars.content.getBy(getContentType()).size;
+ this.id = (short) Vars.content.getBy(getContentType()).size;
Vars.content.handleContent(this);
}
diff --git a/core/src/mindustry/ctype/ContentList.java b/core/src/mindustry/ctype/ContentList.java
new file mode 100644
index 0000000000..efe1588f31
--- /dev/null
+++ b/core/src/mindustry/ctype/ContentList.java
@@ -0,0 +1,7 @@
+package mindustry.ctype;
+
+/** Interface for a list of content to be loaded in {@link mindustry.core.ContentLoader}. */
+public interface ContentList{
+ /** This method should create all the content. */
+ void load();
+}
diff --git a/core/src/io/anuke/mindustry/ctype/ContentType.java b/core/src/mindustry/ctype/ContentType.java
similarity index 88%
rename from core/src/io/anuke/mindustry/ctype/ContentType.java
rename to core/src/mindustry/ctype/ContentType.java
index 5b2e1bdb3b..05c70484e3 100644
--- a/core/src/io/anuke/mindustry/ctype/ContentType.java
+++ b/core/src/mindustry/ctype/ContentType.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.ctype;
+package mindustry.ctype;
/** Do not rearrange, ever! */
public enum ContentType{
diff --git a/core/src/io/anuke/mindustry/ctype/MappableContent.java b/core/src/mindustry/ctype/MappableContent.java
similarity index 83%
rename from core/src/io/anuke/mindustry/ctype/MappableContent.java
rename to core/src/mindustry/ctype/MappableContent.java
index 709e7652d4..11a72651a5 100644
--- a/core/src/io/anuke/mindustry/ctype/MappableContent.java
+++ b/core/src/mindustry/ctype/MappableContent.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.ctype;
+package mindustry.ctype;
-import io.anuke.mindustry.*;
+import mindustry.*;
public abstract class MappableContent extends Content{
public final String name;
diff --git a/core/src/io/anuke/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java
similarity index 85%
rename from core/src/io/anuke/mindustry/ctype/UnlockableContent.java
rename to core/src/mindustry/ctype/UnlockableContent.java
index ab1e4d9e4b..af194377bf 100644
--- a/core/src/io/anuke/mindustry/ctype/UnlockableContent.java
+++ b/core/src/mindustry/ctype/UnlockableContent.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.ctype;
+package mindustry.ctype;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.ui.Cicon;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.graphics.g2d.*;
+import arc.scene.ui.layout.*;
+import mindustry.*;
+import mindustry.graphics.*;
+import mindustry.ui.Cicon;
/** Base interface for an unlockable content type. */
public abstract class UnlockableContent extends MappableContent{
@@ -15,7 +15,7 @@ public abstract class UnlockableContent extends MappableContent{
/** Localized description. May be null. */
public String description;
/** Icons by Cicon ID.*/
- protected TextureRegion[] cicons = new TextureRegion[io.anuke.mindustry.ui.Cicon.all.length];
+ protected TextureRegion[] cicons = new TextureRegion[mindustry.ui.Cicon.all.length];
public UnlockableContent(String name){
super(name);
diff --git a/core/src/io/anuke/mindustry/editor/DrawOperation.java b/core/src/mindustry/editor/DrawOperation.java
similarity index 84%
rename from core/src/io/anuke/mindustry/editor/DrawOperation.java
rename to core/src/mindustry/editor/DrawOperation.java
index b5a81a759f..061a7aee84 100755
--- a/core/src/io/anuke/mindustry/editor/DrawOperation.java
+++ b/core/src/mindustry/editor/DrawOperation.java
@@ -1,14 +1,14 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.annotations.Annotations.Struct;
-import io.anuke.arc.collection.LongArray;
-import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.gen.TileOp;
-import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.Floor;
+import mindustry.annotations.Annotations.Struct;
+import arc.struct.LongArray;
+import mindustry.game.Team;
+import mindustry.gen.TileOp;
+import mindustry.world.Block;
+import mindustry.world.Tile;
+import mindustry.world.blocks.Floor;
-import static io.anuke.mindustry.Vars.content;
+import static mindustry.Vars.content;
public class DrawOperation{
private MapEditor editor;
@@ -69,7 +69,7 @@ public class DrawOperation{
}else if(type == OpType.rotation.ordinal()){
tile.rotation(to);
}else if(type == OpType.team.ordinal()){
- tile.setTeam(Team.all[to]);
+ tile.setTeam(Team.get(to));
}else if(type == OpType.overlay.ordinal()){
tile.setOverlayID(to);
}
diff --git a/core/src/io/anuke/mindustry/editor/EditorTile.java b/core/src/mindustry/editor/EditorTile.java
similarity index 86%
rename from core/src/io/anuke/mindustry/editor/EditorTile.java
rename to core/src/mindustry/editor/EditorTile.java
index 91b76b2364..6a2829b098 100644
--- a/core/src/io/anuke/mindustry/editor/EditorTile.java
+++ b/core/src/mindustry/editor/EditorTile.java
@@ -1,17 +1,17 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.mindustry.content.Blocks;
-import io.anuke.mindustry.core.GameState.State;
-import io.anuke.mindustry.editor.DrawOperation.OpType;
-import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.gen.TileOp;
-import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.modules.*;
+import mindustry.content.Blocks;
+import mindustry.core.GameState.State;
+import mindustry.editor.DrawOperation.OpType;
+import mindustry.game.Team;
+import mindustry.gen.TileOp;
+import mindustry.world.Block;
+import mindustry.world.Tile;
+import mindustry.world.blocks.*;
+import mindustry.world.modules.*;
-import static io.anuke.mindustry.Vars.state;
-import static io.anuke.mindustry.Vars.ui;
+import static mindustry.Vars.state;
+import static mindustry.Vars.ui;
//TODO somehow remove or replace this class with a more flexible solution
public class EditorTile extends Tile{
@@ -74,7 +74,7 @@ public class EditorTile extends Tile{
return;
}
- if(getTeamID() == team.ordinal()) return;
+ if(getTeamID() == team.id) return;
op(OpType.team, getTeamID());
super.setTeam(team);
}
diff --git a/core/src/io/anuke/mindustry/editor/EditorTool.java b/core/src/mindustry/editor/EditorTool.java
similarity index 93%
rename from core/src/io/anuke/mindustry/editor/EditorTool.java
rename to core/src/mindustry/editor/EditorTool.java
index c38d91b8ed..8e197bf42e 100644
--- a/core/src/io/anuke/mindustry/editor/EditorTool.java
+++ b/core/src/mindustry/editor/EditorTool.java
@@ -1,15 +1,14 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.collection.IntArray;
-import io.anuke.arc.func.*;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.geom.Bresenham2;
-import io.anuke.arc.util.Structs;
-import io.anuke.mindustry.Vars;
-import io.anuke.mindustry.content.Blocks;
-import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.BlockPart;
+import arc.func.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.struct.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.game.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
public enum EditorTool{
zoom,
@@ -80,7 +79,7 @@ public enum EditorTool{
editor.drawCircle(x, y, tile -> {
if(mode == -1){
//erase block
- Vars.world.removeBlock(tile);
+ tile.remove();
}else if(mode == 0){
//erase ore
tile.clearOverlay();
@@ -119,7 +118,7 @@ public enum EditorTool{
if(editor.drawBlock.isOverlay()){
Block dest = tile.overlay();
if(dest == editor.drawBlock) return;
- tester = t -> t.overlay() == dest;
+ tester = t -> t.overlay() == dest && !t.floor().isLiquid;
setter = t -> t.setOverlay(editor.drawBlock);
}else if(editor.drawBlock.isFloor()){
Block dest = tile.floor();
@@ -141,7 +140,7 @@ public enum EditorTool{
if(tile.link().synthetic()){
Team dest = tile.getTeam();
if(dest == editor.drawTeam) return;
- fill(editor, x, y, false, t -> t.getTeamID() == dest.ordinal() && t.link().synthetic(), t -> t.setTeam(editor.drawTeam));
+ fill(editor, x, y, false, t -> t.getTeamID() == (int)dest.id && t.link().synthetic(), t -> t.setTeam(editor.drawTeam));
}
}
}
diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/mindustry/editor/MapEditor.java
similarity index 90%
rename from core/src/io/anuke/mindustry/editor/MapEditor.java
rename to core/src/mindustry/editor/MapEditor.java
index 40b44d2b12..7cab015b1f 100644
--- a/core/src/io/anuke/mindustry/editor/MapEditor.java
+++ b/core/src/mindustry/editor/MapEditor.java
@@ -1,22 +1,21 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.collection.StringMap;
-import io.anuke.arc.files.Fi;
-import io.anuke.arc.func.Cons;
-import io.anuke.arc.func.Boolf;
-import io.anuke.arc.graphics.Pixmap;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.Structs;
-import io.anuke.mindustry.content.Blocks;
-import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.gen.TileOp;
-import io.anuke.mindustry.io.LegacyMapIO;
-import io.anuke.mindustry.io.MapIO;
-import io.anuke.mindustry.maps.Map;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.BlockPart;
+import arc.struct.StringMap;
+import arc.files.Fi;
+import arc.func.Cons;
+import arc.func.Boolf;
+import arc.graphics.Pixmap;
+import arc.math.Mathf;
+import arc.util.Structs;
+import mindustry.content.Blocks;
+import mindustry.game.Team;
+import mindustry.gen.TileOp;
+import mindustry.io.MapIO;
+import mindustry.maps.Map;
+import mindustry.world.*;
+import mindustry.world.blocks.BlockPart;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class MapEditor{
public static final int[] brushSizes = {1, 2, 3, 4, 5, 9, 15, 20};
@@ -65,7 +64,7 @@ public class MapEditor{
reset();
createTiles(pixmap.getWidth(), pixmap.getHeight());
- load(() -> LegacyMapIO.readPixmap(pixmap, tiles()));
+ load(() -> MapIO.readPixmap(pixmap, tiles()));
renderer.resize(width(), height());
}
@@ -86,7 +85,7 @@ public class MapEditor{
for(int x = 0; x < width(); x++){
for(int y = 0; y < height(); y++){
if(tiles[x][y].block().isMultiblock()){
- world.setBlock(tiles[x][y], tiles[x][y].block(), tiles[x][y].getTeam());
+ tiles[x][y].set(tiles[x][y].block(), tiles[x][y].getTeam());
}
}
}
@@ -176,7 +175,7 @@ public class MapEditor{
}
}
- world.setBlock(tile(x, y), drawBlock, drawTeam);
+ tile(x, y).set(drawBlock, drawTeam);
}else{
boolean isFloor = drawBlock.isFloor() && drawBlock != Blocks.air;
@@ -185,7 +184,7 @@ public class MapEditor{
//remove linked tiles blocking the way
if(!isFloor && (tile.isLinked() || tile.block().isMultiblock())){
- world.removeBlock(tile.link());
+ tile.link().remove();
}
if(isFloor){
diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java
similarity index 95%
rename from core/src/io/anuke/mindustry/editor/MapEditorDialog.java
rename to core/src/mindustry/editor/MapEditorDialog.java
index b8745052a0..b9a28501b9 100644
--- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java
+++ b/core/src/mindustry/editor/MapEditorDialog.java
@@ -1,37 +1,37 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.input.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.actions.*;
-import io.anuke.arc.scene.event.*;
-import io.anuke.arc.scene.style.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.ui.Cicon;
-import io.anuke.mindustry.ui.dialogs.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.storage.*;
+import arc.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.func.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.input.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.actions.*;
+import arc.scene.event.*;
+import arc.scene.style.*;
+import arc.scene.ui.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.core.GameState.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.io.*;
+import mindustry.maps.*;
+import mindustry.ui.*;
+import mindustry.ui.Cicon;
+import mindustry.ui.dialogs.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.blocks.storage.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class MapEditorDialog extends Dialog implements Disposable{
public final MapEditor editor;
@@ -475,7 +475,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
}
table.update(() -> {
- Vector2 v = button.localToStageCoordinates(Tmp.v1.setZero());
+ Vec2 v = button.localToStageCoordinates(Tmp.v1.setZero());
table.setPosition(v.x, v.y, Align.topLeft);
if(!isShown()){
table.remove();
@@ -551,7 +551,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
int i = 0;
- for(Team team : Team.all){
+ for(Team team : Team.base()){
ImageButton button = new ImageButton(Tex.whiteui, Styles.clearTogglePartiali);
button.margin(4f);
button.getImageCell().grow();
diff --git a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java b/core/src/mindustry/editor/MapGenerateDialog.java
similarity index 92%
rename from core/src/io/anuke/mindustry/editor/MapGenerateDialog.java
rename to core/src/mindustry/editor/MapGenerateDialog.java
index 5195d746b4..12f989c272 100644
--- a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java
+++ b/core/src/mindustry/editor/MapGenerateDialog.java
@@ -1,29 +1,29 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.Pixmap.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.ImageButton.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.async.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.maps.filters.*;
-import io.anuke.mindustry.maps.filters.GenerateFilter.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.ui.dialogs.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
+import arc.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.graphics.*;
+import arc.graphics.Pixmap.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.ui.*;
+import arc.scene.ui.ImageButton.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.async.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.io.*;
+import mindustry.maps.filters.*;
+import mindustry.maps.filters.GenerateFilter.*;
+import mindustry.ui.*;
+import mindustry.ui.dialogs.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
@SuppressWarnings("unchecked")
public class MapGenerateDialog extends FloatingDialog{
@@ -138,7 +138,7 @@ public class MapGenerateDialog extends FloatingDialog{
tile.rotation(write.rotation);
tile.setFloor((Floor)content.block(write.floor));
tile.setBlock(content.block(write.block));
- tile.setTeam(Team.all[write.team]);
+ tile.setTeam(Team.get(write.team));
tile.setOverlay(content.block(write.ore));
}
}
@@ -187,7 +187,7 @@ public class MapGenerateDialog extends FloatingDialog{
return;
}
- Vector2 v = pane.stageToLocalCoordinates(Core.input.mouse());
+ Vec2 v = pane.stageToLocalCoordinates(Core.input.mouse());
if(v.x >= 0 && v.y >= 0 && v.x <= pane.getWidth() && v.y <= pane.getHeight()){
Core.scene.setScrollFocus(pane);
@@ -367,7 +367,7 @@ public class MapGenerateDialog extends FloatingDialog{
GenTile tile = buffer1[px][py];
input.apply(x, y, content.block(tile.floor), content.block(tile.block), content.block(tile.ore));
filter.apply(input);
- buffer2[px][py].set(input.floor, input.block, input.ore, Team.all[tile.team], tile.rotation);
+ buffer2[px][py].set(input.floor, input.block, input.ore, Team.get(tile.team), tile.rotation);
}
}
for(int px = 0; px < pixmap.getWidth(); px++){
@@ -415,7 +415,7 @@ public class MapGenerateDialog extends FloatingDialog{
this.floor = floor.id;
this.block = wall.id;
this.ore = ore.id;
- this.team = (byte)team.ordinal();
+ this.team = (byte) team.id;
this.rotation = (byte)rotation;
}
@@ -437,7 +437,7 @@ public class MapGenerateDialog extends FloatingDialog{
ctile.setBlock(content.block(block));
ctile.setOverlay(content.block(ore));
ctile.rotation(rotation);
- ctile.setTeam(Team.all[team]);
+ ctile.setTeam(Team.get(team));
return ctile;
}
}
diff --git a/core/src/io/anuke/mindustry/editor/MapInfoDialog.java b/core/src/mindustry/editor/MapInfoDialog.java
similarity index 90%
rename from core/src/io/anuke/mindustry/editor/MapInfoDialog.java
rename to core/src/mindustry/editor/MapInfoDialog.java
index b2b942250b..ab120c9880 100644
--- a/core/src/io/anuke/mindustry/editor/MapInfoDialog.java
+++ b/core/src/mindustry/editor/MapInfoDialog.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.ui.dialogs.*;
+import arc.*;
+import arc.struct.*;
+import arc.scene.ui.*;
+import mindustry.*;
+import mindustry.game.*;
+import mindustry.io.*;
+import mindustry.ui.*;
+import mindustry.ui.dialogs.*;
public class MapInfoDialog extends FloatingDialog{
private final MapEditor editor;
diff --git a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java b/core/src/mindustry/editor/MapLoadDialog.java
similarity index 84%
rename from core/src/io/anuke/mindustry/editor/MapLoadDialog.java
rename to core/src/mindustry/editor/MapLoadDialog.java
index 5fb9ffa982..7694d0fc4f 100644
--- a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java
+++ b/core/src/mindustry/editor/MapLoadDialog.java
@@ -1,14 +1,14 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.func.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.ui.dialogs.*;
+import arc.func.*;
+import arc.scene.ui.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import mindustry.maps.*;
+import mindustry.ui.*;
+import mindustry.ui.dialogs.*;
-import static io.anuke.mindustry.Vars.maps;
+import static mindustry.Vars.maps;
public class MapLoadDialog extends FloatingDialog{
private Map selected = null;
diff --git a/core/src/io/anuke/mindustry/editor/MapRenderer.java b/core/src/mindustry/editor/MapRenderer.java
similarity index 88%
rename from core/src/io/anuke/mindustry/editor/MapRenderer.java
rename to core/src/mindustry/editor/MapRenderer.java
index 27994abcdc..c5d007c92a 100644
--- a/core/src/io/anuke/mindustry/editor/MapRenderer.java
+++ b/core/src/mindustry/editor/MapRenderer.java
@@ -1,23 +1,23 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.IntSet;
-import io.anuke.arc.collection.IntSet.IntSetIterator;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.Texture;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.graphics.g2d.TextureRegion;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.Blocks;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.graphics.IndexedRenderer;
-import io.anuke.mindustry.world.Block;
-import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.BlockPart;
+import arc.*;
+import arc.struct.IntSet;
+import arc.struct.IntSet.IntSetIterator;
+import arc.graphics.Color;
+import arc.graphics.Texture;
+import arc.graphics.g2d.Draw;
+import arc.graphics.g2d.TextureRegion;
+import arc.math.Mathf;
+import arc.util.*;
+import mindustry.content.Blocks;
+import mindustry.game.EventType.*;
+import mindustry.game.Team;
+import mindustry.graphics.IndexedRenderer;
+import mindustry.world.Block;
+import mindustry.world.Tile;
+import mindustry.world.blocks.BlockPart;
-import static io.anuke.mindustry.Vars.tilesize;
+import static mindustry.Vars.tilesize;
public class MapRenderer implements Disposable{
private static final int chunkSize = 64;
diff --git a/core/src/io/anuke/mindustry/editor/MapResizeDialog.java b/core/src/mindustry/editor/MapResizeDialog.java
similarity index 88%
rename from core/src/io/anuke/mindustry/editor/MapResizeDialog.java
rename to core/src/mindustry/editor/MapResizeDialog.java
index 525adcefde..6eaf62eb42 100644
--- a/core/src/io/anuke/mindustry/editor/MapResizeDialog.java
+++ b/core/src/mindustry/editor/MapResizeDialog.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.func.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.ui.dialogs.*;
+import arc.func.*;
+import arc.math.*;
+import arc.scene.ui.layout.*;
+import mindustry.gen.*;
+import mindustry.ui.dialogs.*;
public class MapResizeDialog extends FloatingDialog{
private static final int minSize = 50, maxSize = 500, increment = 50;
diff --git a/core/src/io/anuke/mindustry/editor/MapSaveDialog.java b/core/src/mindustry/editor/MapSaveDialog.java
similarity index 87%
rename from core/src/io/anuke/mindustry/editor/MapSaveDialog.java
rename to core/src/mindustry/editor/MapSaveDialog.java
index 93b189349f..34eb4d6286 100644
--- a/core/src/io/anuke/mindustry/editor/MapSaveDialog.java
+++ b/core/src/mindustry/editor/MapSaveDialog.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.func.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.ui.dialogs.*;
+import arc.func.*;
+import arc.scene.ui.*;
+import mindustry.*;
+import mindustry.maps.*;
+import mindustry.ui.dialogs.*;
-import static io.anuke.mindustry.Vars.ui;
+import static mindustry.Vars.ui;
public class MapSaveDialog extends FloatingDialog{
private TextField field;
diff --git a/core/src/io/anuke/mindustry/editor/MapView.java b/core/src/mindustry/editor/MapView.java
similarity index 88%
rename from core/src/io/anuke/mindustry/editor/MapView.java
rename to core/src/mindustry/editor/MapView.java
index c637e9b6f2..6787f418ab 100644
--- a/core/src/io/anuke/mindustry/editor/MapView.java
+++ b/core/src/mindustry/editor/MapView.java
@@ -1,24 +1,24 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.input.GestureDetector;
-import io.anuke.arc.input.GestureDetector.GestureListener;
-import io.anuke.arc.input.KeyCode;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.Element;
-import io.anuke.arc.scene.event.*;
-import io.anuke.arc.scene.ui.TextField;
-import io.anuke.arc.scene.ui.layout.Scl;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.graphics.Pal;
-import io.anuke.mindustry.input.Binding;
-import io.anuke.mindustry.ui.GridImage;
+import arc.Core;
+import arc.graphics.Color;
+import arc.graphics.g2d.*;
+import arc.input.GestureDetector;
+import arc.input.GestureDetector.GestureListener;
+import arc.input.KeyCode;
+import arc.math.Mathf;
+import arc.math.geom.*;
+import arc.scene.Element;
+import arc.scene.event.*;
+import arc.scene.ui.TextField;
+import arc.scene.ui.layout.Scl;
+import arc.util.*;
+import mindustry.graphics.Pal;
+import mindustry.input.Binding;
+import mindustry.ui.GridImage;
-import static io.anuke.mindustry.Vars.mobile;
-import static io.anuke.mindustry.Vars.ui;
+import static mindustry.Vars.mobile;
+import static mindustry.Vars.ui;
public class MapView extends Element implements GestureListener{
private MapEditor editor;
@@ -27,9 +27,9 @@ public class MapView extends Element implements GestureListener{
private float zoom = 1f;
private boolean grid = false;
private GridImage image = new GridImage(0, 0);
- private Vector2 vec = new Vector2();
- private Rectangle rect = new Rectangle();
- private Vector2[][] brushPolygons = new Vector2[MapEditor.brushSizes.length][0];
+ private Vec2 vec = new Vec2();
+ private Rect rect = new Rect();
+ private Vec2[][] brushPolygons = new Vec2[MapEditor.brushSizes.length][0];
private boolean drawing;
private int lastx, lasty;
@@ -214,7 +214,7 @@ public class MapView extends Element implements GestureListener{
}
}
- private Vector2 unproject(int x, int y){
+ private Vec2 unproject(int x, int y){
float ratio = 1f / ((float)editor.width() / editor.height());
float size = Math.min(width, height);
float sclwidth = size * zoom;
@@ -268,9 +268,9 @@ public class MapView extends Element implements GestureListener{
if((!editor.drawBlock.isMultiblock() || tool == EditorTool.eraser) && tool != EditorTool.fill){
if(tool == EditorTool.line && drawing){
- Vector2 v1 = unproject(startx, starty).add(x, y);
+ Vec2 v1 = unproject(startx, starty).add(x, y);
float sx = v1.x, sy = v1.y;
- Vector2 v2 = unproject(lastx, lasty).add(x, y);
+ Vec2 v2 = unproject(lastx, lasty).add(x, y);
Lines.poly(brushPolygons[index], sx, sy, scaling);
Lines.poly(brushPolygons[index], v2.x, v2.y, scaling);
@@ -278,7 +278,7 @@ public class MapView extends Element implements GestureListener{
if((tool.edit || (tool == EditorTool.line && !drawing)) && (!mobile || drawing)){
Point2 p = project(mousex, mousey);
- Vector2 v = unproject(p.x, p.y).add(x, y);
+ Vec2 v = unproject(p.x, p.y).add(x, y);
//pencil square outline
if(tool == EditorTool.pencil && tool.mode == 1){
@@ -290,7 +290,7 @@ public class MapView extends Element implements GestureListener{
}else{
if((tool.edit || tool == EditorTool.line) && (!mobile || drawing)){
Point2 p = project(mousex, mousey);
- Vector2 v = unproject(p.x, p.y).add(x, y);
+ Vec2 v = unproject(p.x, p.y).add(x, y);
float offset = (editor.drawBlock.size % 2 == 0 ? scaling / 2f : 0f);
Lines.square(
v.x + scaling / 2f + offset,
@@ -332,7 +332,7 @@ public class MapView extends Element implements GestureListener{
}
@Override
- public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2){
+ public boolean pinch(Vec2 initialPointer1, Vec2 initialPointer2, Vec2 pointer1, Vec2 pointer2){
return false;
}
diff --git a/core/src/io/anuke/mindustry/editor/OperationStack.java b/core/src/mindustry/editor/OperationStack.java
similarity index 92%
rename from core/src/io/anuke/mindustry/editor/OperationStack.java
rename to core/src/mindustry/editor/OperationStack.java
index 7927cbb026..f21cde91b8 100755
--- a/core/src/io/anuke/mindustry/editor/OperationStack.java
+++ b/core/src/mindustry/editor/OperationStack.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.collection.Array;
+import arc.struct.Array;
public class OperationStack{
private final static int maxSize = 10;
diff --git a/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java
similarity index 90%
rename from core/src/io/anuke/mindustry/editor/WaveInfoDialog.java
rename to core/src/mindustry/editor/WaveInfoDialog.java
index 187d8a7fc2..50ee9de42e 100644
--- a/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java
+++ b/core/src/mindustry/editor/WaveInfoDialog.java
@@ -1,28 +1,28 @@
-package io.anuke.mindustry.editor;
+package mindustry.editor;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.input.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.event.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.TextField.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.ui.Cicon;
-import io.anuke.mindustry.ui.dialogs.*;
+import arc.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.input.*;
+import arc.math.*;
+import arc.scene.event.*;
+import arc.scene.ui.*;
+import arc.scene.ui.TextField.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.ctype.ContentType;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.io.*;
+import mindustry.type.*;
+import mindustry.ui.Cicon;
+import mindustry.ui.dialogs.*;
-import static io.anuke.mindustry.Vars.*;
-import static io.anuke.mindustry.game.SpawnGroup.never;
+import static mindustry.Vars.*;
+import static mindustry.game.SpawnGroup.never;
public class WaveInfoDialog extends FloatingDialog{
private final static int displayed = 20;
@@ -142,7 +142,7 @@ public class WaveInfoDialog extends FloatingDialog{
t.margin(0).defaults().pad(3).padLeft(5f).growX().left();
t.addButton(b -> {
b.left();
- b.addImage(group.type.icon(io.anuke.mindustry.ui.Cicon.medium)).size(32f).padRight(3);
+ b.addImage(group.type.icon(mindustry.ui.Cicon.medium)).size(32f).padRight(3);
b.add(group.type.localizedName).color(Pal.accent);
}, () -> showUpdate(group)).pad(-6f).padBottom(0f);
@@ -224,7 +224,7 @@ public class WaveInfoDialog extends FloatingDialog{
for(UnitType type : content.units()){
p.addButton(t -> {
t.left();
- t.addImage(type.icon(io.anuke.mindustry.ui.Cicon.medium)).size(40f).padRight(2f);
+ t.addImage(type.icon(mindustry.ui.Cicon.medium)).size(40f).padRight(2f);
t.add(type.localizedName);
}, () -> {
lastType = type;
diff --git a/core/src/io/anuke/mindustry/entities/Damage.java b/core/src/mindustry/entities/Damage.java
similarity index 88%
rename from core/src/io/anuke/mindustry/entities/Damage.java
rename to core/src/mindustry/entities/Damage.java
index e637c6081e..335ac96385 100644
--- a/core/src/io/anuke/mindustry/entities/Damage.java
+++ b/core/src/mindustry/entities/Damage.java
@@ -1,30 +1,30 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.Effects.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.graphics.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.entities.Effects.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Utility class for damaging in an area. */
public class Damage{
- private static Rectangle rect = new Rectangle();
- private static Rectangle hitrect = new Rectangle();
- private static Vector2 tr = new Vector2();
+ private static Rect rect = new Rect();
+ private static Rect hitrect = new Rect();
+ private static Vec2 tr = new Vec2();
private static GridBits bits = new GridBits(30, 30);
private static IntQueue propagation = new IntQueue();
private static IntSet collidedBlocks = new IntSet();
@@ -88,7 +88,7 @@ public class Damage{
tr.trns(angle, length);
Intc2 collider = (cx, cy) -> {
Tile tile = world.ltile(cx, cy);
- if(tile != null && !collidedBlocks.contains(tile.pos()) && tile.entity != null && tile.getTeamID() != team.ordinal() && tile.entity.collide(hitter)){
+ if(tile != null && !collidedBlocks.contains(tile.pos()) && tile.entity != null && tile.getTeamID() != team.id && tile.entity.collide(hitter)){
tile.entity.collision(hitter);
collidedBlocks.add(tile.pos());
hitter.getBulletType().hit(hitter, tile.worldx(), tile.worldy());
@@ -127,13 +127,13 @@ public class Damage{
Cons cons = e -> {
e.hitbox(hitrect);
- Rectangle other = hitrect;
+ Rect other = hitrect;
other.y -= expand;
other.x -= expand;
other.width += expand * 2;
other.height += expand * 2;
- Vector2 vec = Geometry.raycastRect(x, y, x2, y2, other);
+ Vec2 vec = Geometry.raycastRect(x, y, x2, y2, other);
if(vec != null){
Effects.effect(effect, vec.x, vec.y);
@@ -259,7 +259,7 @@ public class Damage{
for(int dx = -trad; dx <= trad; dx++){
for(int dy = -trad; dy <= trad; dy++){
Tile tile = world.tile(Math.round(x / tilesize) + dx, Math.round(y / tilesize) + dy);
- if(tile != null && tile.entity != null && (team == null || state.teams.areEnemies(team, tile.getTeam())) && Mathf.dst(dx, dy) <= trad){
+ if(tile != null && tile.entity != null && (team == null ||team.isEnemy(tile.getTeam())) && Mathf.dst(dx, dy) <= trad){
tile.entity.damage(damage);
}
}
diff --git a/core/src/io/anuke/mindustry/entities/Effects.java b/core/src/mindustry/entities/Effects.java
similarity index 92%
rename from core/src/io/anuke/mindustry/entities/Effects.java
rename to core/src/mindustry/entities/Effects.java
index ca1492bdbf..6f2a04033a 100644
--- a/core/src/io/anuke/mindustry/entities/Effects.java
+++ b/core/src/mindustry/entities/Effects.java
@@ -1,15 +1,15 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
-import io.anuke.arc.Core;
-import io.anuke.arc.collection.Array;
-import io.anuke.arc.func.Cons;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.geom.Position;
-import io.anuke.arc.util.pooling.Pools;
-import io.anuke.mindustry.entities.type.EffectEntity;
-import io.anuke.mindustry.entities.traits.ScaleTrait;
+import arc.Core;
+import arc.struct.Array;
+import arc.func.Cons;
+import arc.graphics.Color;
+import arc.graphics.g2d.*;
+import arc.math.Mathf;
+import arc.math.geom.Position;
+import arc.util.pooling.Pools;
+import mindustry.entities.type.EffectEntity;
+import mindustry.entities.traits.ScaleTrait;
public class Effects{
private static final EffectContainer container = new EffectContainer();
diff --git a/core/src/io/anuke/mindustry/entities/Entities.java b/core/src/mindustry/entities/Entities.java
similarity index 86%
rename from core/src/io/anuke/mindustry/entities/Entities.java
rename to core/src/mindustry/entities/Entities.java
index 8f9ff98300..022af6b95d 100755
--- a/core/src/io/anuke/mindustry/entities/Entities.java
+++ b/core/src/mindustry/entities/Entities.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
-import io.anuke.arc.collection.*;
-import io.anuke.mindustry.entities.traits.*;
+import arc.struct.*;
+import mindustry.entities.traits.*;
/** Simple container for managing entity groups.*/
public class Entities{
diff --git a/core/src/io/anuke/mindustry/entities/EntityCollisions.java b/core/src/mindustry/entities/EntityCollisions.java
similarity index 89%
rename from core/src/io/anuke/mindustry/entities/EntityCollisions.java
rename to core/src/mindustry/entities/EntityCollisions.java
index 808f8e4fc8..72e177d71e 100644
--- a/core/src/io/anuke/mindustry/entities/EntityCollisions.java
+++ b/core/src/mindustry/entities/EntityCollisions.java
@@ -1,14 +1,14 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
-import io.anuke.arc.collection.Array;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.geom.*;
-import io.anuke.mindustry.entities.traits.Entity;
-import io.anuke.mindustry.entities.traits.SolidTrait;
-import io.anuke.mindustry.world.Tile;
+import arc.struct.Array;
+import arc.math.Mathf;
+import arc.math.geom.*;
+import mindustry.entities.traits.Entity;
+import mindustry.entities.traits.SolidTrait;
+import mindustry.world.Tile;
-import static io.anuke.mindustry.Vars.tilesize;
-import static io.anuke.mindustry.Vars.world;
+import static mindustry.Vars.tilesize;
+import static mindustry.Vars.world;
public class EntityCollisions{
//range for tile collision scanning
@@ -17,11 +17,11 @@ public class EntityCollisions{
private static final float seg = 1f;
//tile collisions
- private Rectangle tmp = new Rectangle();
- private Vector2 vector = new Vector2();
- private Vector2 l1 = new Vector2();
- private Rectangle r1 = new Rectangle();
- private Rectangle r2 = new Rectangle();
+ private Rect tmp = new Rect();
+ private Vec2 vector = new Vec2();
+ private Vec2 l1 = new Vec2();
+ private Rect r1 = new Rect();
+ private Rect r2 = new Rect();
//entity collisions
private Array arrOut = new Array<>();
@@ -57,7 +57,7 @@ public class EntityCollisions{
public void moveDelta(SolidTrait entity, float deltax, float deltay, boolean x){
- Rectangle rect = r1;
+ Rect rect = r1;
entity.hitboxTile(rect);
entity.hitboxTile(r2);
rect.x += deltax;
@@ -72,7 +72,7 @@ public class EntityCollisions{
tmp.setSize(tilesize).setCenter(wx * tilesize, wy * tilesize);
if(tmp.overlaps(rect)){
- Vector2 v = Geometry.overlap(rect, tmp, x);
+ Vec2 v = Geometry.overlap(rect, tmp, x);
rect.x += v.x;
rect.y += v.y;
}
@@ -84,7 +84,7 @@ public class EntityCollisions{
entity.setY(entity.getY() + rect.y - r2.y);
}
- public boolean overlapsTile(Rectangle rect){
+ public boolean overlapsTile(Rect rect){
rect.getCenter(vector);
int r = 1;
@@ -157,7 +157,7 @@ public class EntityCollisions{
}
private boolean collide(float x1, float y1, float w1, float h1, float vx1, float vy1,
- float x2, float y2, float w2, float h2, float vx2, float vy2, Vector2 out){
+ float x2, float y2, float w2, float h2, float vx2, float vy2, Vec2 out){
float px = vx1, py = vy1;
vx1 -= vx2;
diff --git a/core/src/io/anuke/mindustry/entities/EntityGroup.java b/core/src/mindustry/entities/EntityGroup.java
similarity index 90%
rename from core/src/io/anuke/mindustry/entities/EntityGroup.java
rename to core/src/mindustry/entities/EntityGroup.java
index 588bca2709..24c3f0e4f0 100644
--- a/core/src/io/anuke/mindustry/entities/EntityGroup.java
+++ b/core/src/mindustry/entities/EntityGroup.java
@@ -1,17 +1,19 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.mindustry.entities.traits.*;
+import arc.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.graphics.*;
+import arc.math.geom.*;
+import mindustry.entities.traits.*;
-import static io.anuke.mindustry.Vars.collisions;
+import java.util.*;
+
+import static mindustry.Vars.collisions;
/** Represents a group of a certain type of entity.*/
@SuppressWarnings("unchecked")
-public class EntityGroup{
+public class EntityGroup implements Iterable{
private final boolean useTree;
private final int id;
private final Class type;
@@ -19,13 +21,13 @@ public class EntityGroup{
private final Array entitiesToRemove = new Array<>(false, 32);
private final Array entitiesToAdd = new Array<>(false, 32);
private final Array intersectArray = new Array<>();
- private final Rectangle intersectRect = new Rectangle();
+ private final Rect intersectRect = new Rect();
private IntMap map;
private QuadTree tree;
private Cons removeListener;
private Cons addListener;
- private final Rectangle viewport = new Rectangle();
+ private final Rect viewport = new Rect();
private int count = 0;
public EntityGroup(int id, Class type, boolean useTree){
@@ -34,7 +36,7 @@ public class EntityGroup{
this.type = type;
if(useTree){
- tree = new QuadTree<>(new Rectangle(0, 0, 0, 0));
+ tree = new QuadTree<>(new Rect(0, 0, 0, 0));
}
}
@@ -180,7 +182,7 @@ public class EntityGroup{
/** Resizes the internal quadtree, if it is enabled.*/
public void resize(float x, float y, float w, float h){
if(useTree){
- tree = new QuadTree<>(new Rectangle(x, y, w, h));
+ tree = new QuadTree<>(new Rect(x, y, w, h));
}
}
@@ -253,8 +255,13 @@ public class EntityGroup{
return null;
}
- /** Returns the logic-only array for iteration. */
+ /** Returns the array for iteration. */
public Array all(){
return entityArray;
}
+
+ @Override
+ public Iterator iterator(){
+ return entityArray.iterator();
+ }
}
diff --git a/core/src/io/anuke/mindustry/entities/Predict.java b/core/src/mindustry/entities/Predict.java
similarity index 71%
rename from core/src/io/anuke/mindustry/entities/Predict.java
rename to core/src/mindustry/entities/Predict.java
index ef385cbd26..c541771829 100644
--- a/core/src/io/anuke/mindustry/entities/Predict.java
+++ b/core/src/mindustry/entities/Predict.java
@@ -1,16 +1,16 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.entities.traits.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import mindustry.entities.traits.*;
/**
* Class for predicting shoot angles based on velocities of targets.
*/
public class Predict{
- private static Vector2 vec = new Vector2();
- private static Vector2 vresult = new Vector2();
+ private static Vec2 vec = new Vec2();
+ private static Vec2 vresult = new Vec2();
/**
* Calculates of intercept of a stationary and moving target. Do not call from multiple threads!
@@ -23,7 +23,7 @@ public class Predict{
* @param v speed of bullet
* @return the intercept location
*/
- public static Vector2 intercept(float srcx, float srcy, float dstx, float dsty, float dstvx, float dstvy, float v){
+ public static Vec2 intercept(float srcx, float srcy, float dstx, float dsty, float dstvx, float dstvy, float v){
dstvx /= Time.delta();
dstvy /= Time.delta();
float tx = dstx - srcx,
@@ -35,10 +35,10 @@ public class Predict{
float c = tx * tx + ty * ty;
// Solve quadratic
- Vector2 ts = quad(a, b, c);
+ Vec2 ts = quad(a, b, c);
// Find smallest positive solution
- Vector2 sol = vresult.set(dstx, dsty);
+ Vec2 sol = vresult.set(dstx, dsty);
if(ts != null){
float t0 = ts.x, t1 = ts.y;
float t = Math.min(t0, t1);
@@ -54,12 +54,12 @@ public class Predict{
/**
* See {@link #intercept(float, float, float, float, float, float, float)}.
*/
- public static Vector2 intercept(TargetTrait src, TargetTrait dst, float v){
- return intercept(src.getX(), src.getY(), dst.getX(), dst.getY(), dst.getTargetVelocityX() - src.getTargetVelocityX()/2f, dst.getTargetVelocityY() - src.getTargetVelocityY()/2f, v);
+ public static Vec2 intercept(TargetTrait src, TargetTrait dst, float v){
+ return intercept(src.getX(), src.getY(), dst.getX(), dst.getY(), dst.getTargetVelocityX() - src.getTargetVelocityX()/(2f*Time.delta()), dst.getTargetVelocityY() - src.getTargetVelocityY()/(2f*Time.delta()), v);
}
- private static Vector2 quad(float a, float b, float c){
- Vector2 sol = null;
+ private static Vec2 quad(float a, float b, float c){
+ Vec2 sol = null;
if(Math.abs(a) < 1e-6){
if(Math.abs(b) < 1e-6){
sol = Math.abs(c) < 1e-6 ? vec.set(0, 0) : null;
diff --git a/core/src/io/anuke/mindustry/entities/TargetPriority.java b/core/src/mindustry/entities/TargetPriority.java
similarity index 58%
rename from core/src/io/anuke/mindustry/entities/TargetPriority.java
rename to core/src/mindustry/entities/TargetPriority.java
index 47b0213de3..ec36b03925 100644
--- a/core/src/io/anuke/mindustry/entities/TargetPriority.java
+++ b/core/src/mindustry/entities/TargetPriority.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
public enum TargetPriority{
base,
diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java
similarity index 81%
rename from core/src/io/anuke/mindustry/entities/Units.java
rename to core/src/mindustry/entities/Units.java
index df4ba980df..67fe01dc9e 100644
--- a/core/src/io/anuke/mindustry/entities/Units.java
+++ b/core/src/mindustry/entities/Units.java
@@ -1,21 +1,18 @@
-package io.anuke.mindustry.entities;
+package mindustry.entities;
-import io.anuke.arc.collection.EnumSet;
-import io.anuke.arc.func.Cons;
-import io.anuke.arc.func.Boolf;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.geom.Geometry;
-import io.anuke.arc.math.geom.Rectangle;
-import io.anuke.mindustry.entities.traits.TargetTrait;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.world.Tile;
+import arc.func.*;
+import arc.math.*;
+import arc.math.geom.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.game.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Utility class for unit and team interactions.*/
public class Units{
- private static Rectangle hitrect = new Rectangle();
+ private static Rect hitrect = new Rect();
private static Unit result;
private static float cdist;
private static boolean boolResult;
@@ -86,13 +83,7 @@ public class Units{
public static TileEntity findEnemyTile(Team team, float x, float y, float range, Boolf pred){
if(team == Team.derelict) return null;
- for(Team enemy : state.teams.enemiesOf(team)){
- TileEntity entity = indexer.findTile(enemy, x, y, range, pred, true);
- if(entity != null){
- return entity;
- }
- }
- return null;
+ return indexer.findEnemyTile(team, x, y, range, pred);
}
/** Returns the closest target enemy. First, units are checked, then tile entities. */
@@ -157,7 +148,11 @@ public class Units{
/** Iterates over all units in a rectangle. */
public static void nearby(Team team, float x, float y, float width, float height, Cons cons){
- unitGroups[team.ordinal()].intersect(x, y, width, height, cons);
+ unitGroup.intersect(x, y, width, height, u -> {
+ if(u.getTeam() == team){
+ cons.get(u);
+ }
+ });
playerGroup.intersect(x, y, width, height, player -> {
if(player.getTeam() == team){
cons.get(player);
@@ -167,8 +162,8 @@ public class Units{
/** Iterates over all units in a circle around this position. */
public static void nearby(Team team, float x, float y, float radius, Cons cons){
- unitGroups[team.ordinal()].intersect(x - radius, y - radius, radius*2f, radius*2f, unit -> {
- if(unit.withinDst(x, y, radius)){
+ unitGroup.intersect(x - radius, y - radius, radius*2f, radius*2f, unit -> {
+ if(unit.getTeam() == team && unit.withinDst(x, y, radius)){
cons.get(unit);
}
});
@@ -182,45 +177,43 @@ public class Units{
/** Iterates over all units in a rectangle. */
public static void nearby(float x, float y, float width, float height, Cons cons){
- for(Team team : Team.all){
- unitGroups[team.ordinal()].intersect(x, y, width, height, cons);
- }
-
+ unitGroup.intersect(x, y, width, height, cons);
playerGroup.intersect(x, y, width, height, cons);
}
/** Iterates over all units in a rectangle. */
- public static void nearby(Rectangle rect, Cons cons){
+ public static void nearby(Rect rect, Cons cons){
nearby(rect.x, rect.y, rect.width, rect.height, cons);
}
/** Iterates over all units that are enemies of this team. */
public static void nearbyEnemies(Team team, float x, float y, float width, float height, Cons cons){
- EnumSet targets = state.teams.enemiesOf(team);
-
- for(Team other : targets){
- unitGroups[other.ordinal()].intersect(x, y, width, height, cons);
- }
+ unitGroup.intersect(x, y, width, height, u -> {
+ if(team.isEnemy(u.getTeam())){
+ cons.get(u);
+ }
+ });
playerGroup.intersect(x, y, width, height, player -> {
- if(targets.contains(player.getTeam())){
+ if(team.isEnemy(player.getTeam())){
cons.get(player);
}
});
}
/** Iterates over all units that are enemies of this team. */
- public static void nearbyEnemies(Team team, Rectangle rect, Cons cons){
+ public static void nearbyEnemies(Team team, Rect rect, Cons cons){
nearbyEnemies(team, rect.x, rect.y, rect.width, rect.height, cons);
}
/** Iterates over all units. */
public static void all(Cons cons){
- for(Team team : Team.all){
- unitGroups[team.ordinal()].all().each(cons);
- }
-
+ unitGroup.all().each(cons);
playerGroup.all().each(cons);
}
+ public static void each(Team team, Cons cons){
+ unitGroup.all().each(t -> t.getTeam() == team, cons);
+ }
+
}
diff --git a/core/src/io/anuke/mindustry/entities/bullet/ArtilleryBulletType.java b/core/src/mindustry/entities/bullet/ArtilleryBulletType.java
similarity index 77%
rename from core/src/io/anuke/mindustry/entities/bullet/ArtilleryBulletType.java
rename to core/src/mindustry/entities/bullet/ArtilleryBulletType.java
index 1bc00443c6..c59dedf99a 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/ArtilleryBulletType.java
+++ b/core/src/mindustry/entities/bullet/ArtilleryBulletType.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.Effects.*;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.gen.*;
+import arc.graphics.g2d.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.Effects.*;
+import mindustry.entities.type.Bullet;
+import mindustry.gen.*;
//TODO scale velocity depending on fslope()
public class ArtilleryBulletType extends BasicBulletType{
@@ -25,7 +25,7 @@ public class ArtilleryBulletType extends BasicBulletType{
}
@Override
- public void update(io.anuke.mindustry.entities.type.Bullet b){
+ public void update(Bullet b){
super.update(b);
if(b.timer.get(0, 3 + b.fslope() * 2f)){
diff --git a/core/src/io/anuke/mindustry/entities/bullet/BasicBulletType.java b/core/src/mindustry/entities/bullet/BasicBulletType.java
similarity index 81%
rename from core/src/io/anuke/mindustry/entities/bullet/BasicBulletType.java
rename to core/src/mindustry/entities/bullet/BasicBulletType.java
index bf20c811ab..44588dedf4 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/BasicBulletType.java
+++ b/core/src/mindustry/entities/bullet/BasicBulletType.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.graphics.g2d.TextureRegion;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.graphics.Pal;
+import arc.Core;
+import arc.graphics.Color;
+import arc.graphics.g2d.Draw;
+import arc.graphics.g2d.TextureRegion;
+import mindustry.entities.type.Bullet;
+import mindustry.graphics.Pal;
/** An extended BulletType for most ammo-based bullets shot from turrets and units. */
public class BasicBulletType extends BulletType{
diff --git a/core/src/io/anuke/mindustry/entities/bullet/BombBulletType.java b/core/src/mindustry/entities/bullet/BombBulletType.java
similarity index 87%
rename from core/src/io/anuke/mindustry/entities/bullet/BombBulletType.java
rename to core/src/mindustry/entities/bullet/BombBulletType.java
index 55c0a3b87d..50ff842780 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/BombBulletType.java
+++ b/core/src/mindustry/entities/bullet/BombBulletType.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.mindustry.gen.*;
+import mindustry.gen.*;
public class BombBulletType extends BasicBulletType{
diff --git a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java
similarity index 89%
rename from core/src/io/anuke/mindustry/entities/bullet/BulletType.java
rename to core/src/mindustry/entities/bullet/BulletType.java
index bc401c6d6d..6c5417d0ca 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java
+++ b/core/src/mindustry/entities/bullet/BulletType.java
@@ -1,19 +1,19 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.audio.*;
-import io.anuke.arc.math.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.Content;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.Effects.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.audio.*;
+import arc.math.*;
+import mindustry.content.*;
+import mindustry.ctype.Content;
+import mindustry.ctype.ContentType;
+import mindustry.entities.*;
+import mindustry.entities.Effects.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.type.*;
+import mindustry.world.*;
public abstract class BulletType extends Content{
public float lifetime;
diff --git a/core/src/io/anuke/mindustry/entities/bullet/FlakBulletType.java b/core/src/mindustry/entities/bullet/FlakBulletType.java
similarity index 78%
rename from core/src/io/anuke/mindustry/entities/bullet/FlakBulletType.java
rename to core/src/mindustry/entities/bullet/FlakBulletType.java
index e53be5fcf2..ead19859cc 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/FlakBulletType.java
+++ b/core/src/mindustry/entities/bullet/FlakBulletType.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.math.geom.Rectangle;
-import io.anuke.arc.util.Time;
-import io.anuke.mindustry.content.Fx;
-import io.anuke.mindustry.entities.Units;
-import io.anuke.mindustry.entities.type.Bullet;
+import arc.math.geom.Rect;
+import arc.util.Time;
+import mindustry.content.Fx;
+import mindustry.entities.Units;
+import mindustry.entities.type.Bullet;
public class FlakBulletType extends BasicBulletType{
- protected static Rectangle rect = new Rectangle();
+ protected static Rect rect = new Rect();
protected float explodeRange = 30f;
public FlakBulletType(float speed, float damage){
diff --git a/core/src/io/anuke/mindustry/entities/bullet/HealBulletType.java b/core/src/mindustry/entities/bullet/HealBulletType.java
similarity index 78%
rename from core/src/io/anuke/mindustry/entities/bullet/HealBulletType.java
rename to core/src/mindustry/entities/bullet/HealBulletType.java
index 95dbef7b63..4ff0b9fefd 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/HealBulletType.java
+++ b/core/src/mindustry/entities/bullet/HealBulletType.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.type.*;
+import mindustry.graphics.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
public class HealBulletType extends BulletType{
protected float healPercent = 3f;
diff --git a/core/src/io/anuke/mindustry/entities/bullet/LiquidBulletType.java b/core/src/mindustry/entities/bullet/LiquidBulletType.java
similarity index 74%
rename from core/src/io/anuke/mindustry/entities/bullet/LiquidBulletType.java
rename to core/src/mindustry/entities/bullet/LiquidBulletType.java
index 7d53a852ec..a1039e2748 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/LiquidBulletType.java
+++ b/core/src/mindustry/entities/bullet/LiquidBulletType.java
@@ -1,20 +1,21 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.geom.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.type.Bullet;
+import mindustry.type.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class LiquidBulletType extends BulletType{
- @NonNull Liquid liquid;
+ public @NonNull Liquid liquid;
+ public float puddleSize = 5f;
public LiquidBulletType(@Nullable Liquid liquid){
super(3.5f, 0);
@@ -67,7 +68,7 @@ public class LiquidBulletType extends BulletType{
@Override
public void hit(Bullet b, float hitx, float hity){
Effects.effect(hitEffect, liquid.color, hitx, hity);
- Puddle.deposit(world.tileWorld(hitx, hity), liquid, 5f);
+ Puddle.deposit(world.tileWorld(hitx, hity), liquid, puddleSize);
if(liquid.temperature <= 0.5f && liquid.flammability < 0.3f){
float intensity = 400f;
diff --git a/core/src/io/anuke/mindustry/entities/bullet/MassDriverBolt.java b/core/src/mindustry/entities/bullet/MassDriverBolt.java
similarity index 79%
rename from core/src/io/anuke/mindustry/entities/bullet/MassDriverBolt.java
rename to core/src/mindustry/entities/bullet/MassDriverBolt.java
index fe357b7f5f..8fbe5c77db 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/MassDriverBolt.java
+++ b/core/src/mindustry/entities/bullet/MassDriverBolt.java
@@ -1,16 +1,16 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.math.Angles;
-import io.anuke.arc.math.Mathf;
-import io.anuke.mindustry.content.Fx;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.graphics.Pal;
-import io.anuke.mindustry.world.blocks.distribution.MassDriver.DriverBulletData;
+import arc.graphics.Color;
+import arc.graphics.g2d.Draw;
+import arc.math.Angles;
+import arc.math.Mathf;
+import mindustry.content.Fx;
+import mindustry.entities.Effects;
+import mindustry.entities.type.Bullet;
+import mindustry.graphics.Pal;
+import mindustry.world.blocks.distribution.MassDriver.DriverBulletData;
-import static io.anuke.mindustry.Vars.content;
+import static mindustry.Vars.content;
public class MassDriverBolt extends BulletType{
@@ -24,7 +24,7 @@ public class MassDriverBolt extends BulletType{
}
@Override
- public void draw(io.anuke.mindustry.entities.type.Bullet b){
+ public void draw(mindustry.entities.type.Bullet b){
float w = 11f, h = 13f;
Draw.color(Pal.bulletYellowBack);
@@ -37,7 +37,7 @@ public class MassDriverBolt extends BulletType{
}
@Override
- public void update(io.anuke.mindustry.entities.type.Bullet b){
+ public void update(mindustry.entities.type.Bullet b){
//data MUST be an instance of DriverBulletData
if(!(b.getData() instanceof DriverBulletData)){
hit(b);
@@ -83,7 +83,7 @@ public class MassDriverBolt extends BulletType{
}
@Override
- public void despawned(io.anuke.mindustry.entities.type.Bullet b){
+ public void despawned(mindustry.entities.type.Bullet b){
super.despawned(b);
if(!(b.getData() instanceof DriverBulletData)) return;
diff --git a/core/src/io/anuke/mindustry/entities/bullet/MissileBulletType.java b/core/src/mindustry/entities/bullet/MissileBulletType.java
similarity index 72%
rename from core/src/io/anuke/mindustry/entities/bullet/MissileBulletType.java
rename to core/src/mindustry/entities/bullet/MissileBulletType.java
index 6bea5404cb..3c730d975a 100644
--- a/core/src/io/anuke/mindustry/entities/bullet/MissileBulletType.java
+++ b/core/src/mindustry/entities/bullet/MissileBulletType.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.entities.bullet;
+package mindustry.entities.bullet;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.Time;
-import io.anuke.mindustry.content.Fx;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.Pal;
+import arc.graphics.Color;
+import arc.math.Mathf;
+import arc.util.Time;
+import mindustry.content.Fx;
+import mindustry.entities.Effects;
+import mindustry.entities.type.Bullet;
+import mindustry.gen.*;
+import mindustry.graphics.Pal;
public class MissileBulletType extends BasicBulletType{
protected Color trailColor = Pal.missileYellowBack;
diff --git a/core/src/io/anuke/mindustry/entities/effect/Decal.java b/core/src/mindustry/entities/effect/Decal.java
similarity index 55%
rename from core/src/io/anuke/mindustry/entities/effect/Decal.java
rename to core/src/mindustry/entities/effect/Decal.java
index 103bc14919..cbe0e8edb2 100644
--- a/core/src/io/anuke/mindustry/entities/effect/Decal.java
+++ b/core/src/mindustry/entities/effect/Decal.java
@@ -1,14 +1,14 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.math.Mathf;
-import io.anuke.mindustry.entities.EntityGroup;
-import io.anuke.mindustry.entities.type.TimedEntity;
-import io.anuke.mindustry.entities.traits.BelowLiquidTrait;
-import io.anuke.mindustry.entities.traits.DrawTrait;
-import io.anuke.mindustry.graphics.Pal;
+import arc.graphics.g2d.Draw;
+import arc.math.Mathf;
+import mindustry.entities.EntityGroup;
+import mindustry.entities.type.TimedEntity;
+import mindustry.entities.traits.BelowLiquidTrait;
+import mindustry.entities.traits.DrawTrait;
+import mindustry.graphics.Pal;
-import static io.anuke.mindustry.Vars.groundEffectGroup;
+import static mindustry.Vars.groundEffectGroup;
/**
* Class for creating block rubble on the ground.
diff --git a/core/src/io/anuke/mindustry/entities/effect/Fire.java b/core/src/mindustry/entities/effect/Fire.java
similarity index 90%
rename from core/src/io/anuke/mindustry/entities/effect/Fire.java
rename to core/src/mindustry/entities/effect/Fire.java
index 8546ec45e8..a3e15873fa 100644
--- a/core/src/io/anuke/mindustry/entities/effect/Fire.java
+++ b/core/src/mindustry/entities/effect/Fire.java
@@ -1,24 +1,24 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.type.*;
+import mindustry.world.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Fire extends TimedEntity implements SaveTrait, SyncTrait{
private static final IntMap map = new IntMap<>();
diff --git a/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java b/core/src/mindustry/entities/effect/GroundEffectEntity.java
similarity index 85%
rename from core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java
rename to core/src/mindustry/entities/effect/GroundEffectEntity.java
index 4dfd0a694e..644757512c 100644
--- a/core/src/io/anuke/mindustry/entities/effect/GroundEffectEntity.java
+++ b/core/src/mindustry/entities/effect/GroundEffectEntity.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.Time;
-import io.anuke.mindustry.Vars;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.entities.Effects.Effect;
-import io.anuke.mindustry.entities.Effects.EffectRenderer;
-import io.anuke.mindustry.entities.type.EffectEntity;
-import io.anuke.mindustry.world.Tile;
+import arc.math.Mathf;
+import arc.util.Time;
+import mindustry.Vars;
+import mindustry.entities.Effects;
+import mindustry.entities.Effects.Effect;
+import mindustry.entities.Effects.EffectRenderer;
+import mindustry.entities.type.EffectEntity;
+import mindustry.world.Tile;
/**
* A ground effect contains an effect that is rendered on the ground layer as opposed to the top layer.
diff --git a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java b/core/src/mindustry/entities/effect/ItemTransfer.java
similarity index 73%
rename from core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java
rename to core/src/mindustry/entities/effect/ItemTransfer.java
index 0d8ab641ff..2018d15a69 100644
--- a/core/src/io/anuke/mindustry/entities/effect/ItemTransfer.java
+++ b/core/src/mindustry/entities/effect/ItemTransfer.java
@@ -1,28 +1,28 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.annotations.Annotations.Loc;
-import io.anuke.annotations.Annotations.Remote;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.Interpolation;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.geom.Position;
-import io.anuke.arc.math.geom.Vector2;
-import io.anuke.arc.util.Time;
-import io.anuke.arc.util.pooling.Pools;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.type.TimedEntity;
-import io.anuke.mindustry.entities.traits.DrawTrait;
-import io.anuke.mindustry.entities.type.Unit;
-import io.anuke.mindustry.graphics.Pal;
-import io.anuke.mindustry.type.Item;
-import io.anuke.mindustry.world.Tile;
+import mindustry.annotations.Annotations.Loc;
+import mindustry.annotations.Annotations.Remote;
+import arc.graphics.g2d.*;
+import arc.math.Interpolation;
+import arc.math.Mathf;
+import arc.math.geom.Position;
+import arc.math.geom.Vec2;
+import arc.util.Time;
+import arc.util.pooling.Pools;
+import mindustry.entities.*;
+import mindustry.entities.type.TimedEntity;
+import mindustry.entities.traits.DrawTrait;
+import mindustry.entities.type.Unit;
+import mindustry.graphics.Pal;
+import mindustry.type.Item;
+import mindustry.world.Tile;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class ItemTransfer extends TimedEntity implements DrawTrait{
- private Vector2 from = new Vector2();
- private Vector2 current = new Vector2();
- private Vector2 tovec = new Vector2();
+ private Vec2 from = new Vec2();
+ private Vec2 current = new Vec2();
+ private Vec2 tovec = new Vec2();
private Item item;
private float seed;
private Position to;
@@ -44,7 +44,7 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{
create(item, x, y, to, () -> to.addItem(item));
}
- @Remote(called = Loc.server)
+ @Remote(called = Loc.server, unreliable = true)
public static void transferItemTo(Item item, int amount, float x, float y, Tile tile){
if(tile == null || tile.entity == null || tile.entity.items == null) return;
for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){
diff --git a/core/src/io/anuke/mindustry/entities/effect/Lightning.java b/core/src/mindustry/entities/effect/Lightning.java
similarity index 76%
rename from core/src/io/anuke/mindustry/entities/effect/Lightning.java
rename to core/src/mindustry/entities/effect/Lightning.java
index 8d28f33d65..e4658cd1ff 100644
--- a/core/src/io/anuke/mindustry/entities/effect/Lightning.java
+++ b/core/src/mindustry/entities/effect/Lightning.java
@@ -1,41 +1,41 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.annotations.Annotations.Loc;
-import io.anuke.annotations.Annotations.Remote;
-import io.anuke.arc.collection.Array;
-import io.anuke.arc.collection.IntSet;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.pooling.Pools;
-import io.anuke.mindustry.content.Bullets;
-import io.anuke.mindustry.entities.EntityGroup;
-import io.anuke.mindustry.entities.Units;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.entities.type.TimedEntity;
-import io.anuke.mindustry.entities.traits.DrawTrait;
-import io.anuke.mindustry.entities.traits.TimeTrait;
-import io.anuke.mindustry.entities.type.Unit;
-import io.anuke.mindustry.game.Team;
-import io.anuke.mindustry.gen.Call;
-import io.anuke.mindustry.graphics.Pal;
-import io.anuke.mindustry.world.Tile;
+import mindustry.annotations.Annotations.Loc;
+import mindustry.annotations.Annotations.Remote;
+import arc.struct.Array;
+import arc.struct.IntSet;
+import arc.graphics.Color;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.pooling.Pools;
+import mindustry.content.Bullets;
+import mindustry.entities.EntityGroup;
+import mindustry.entities.Units;
+import mindustry.entities.type.Bullet;
+import mindustry.entities.type.TimedEntity;
+import mindustry.entities.traits.DrawTrait;
+import mindustry.entities.traits.TimeTrait;
+import mindustry.entities.type.Unit;
+import mindustry.game.Team;
+import mindustry.gen.Call;
+import mindustry.graphics.Pal;
+import mindustry.world.Tile;
-import static io.anuke.mindustry.Vars.*;
+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 Rectangle rect = new Rectangle();
+ 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();
private static final int maxChain = 8;
private static final float hitRange = 30f;
private static int lastSeed = 0;
- private Array lines = new Array<>();
+ private Array lines = new Array<>();
private Color color = Pal.lancerLaser;
/** For pooling use only. Do not call directly! */
@@ -70,7 +70,7 @@ public class Lightning extends TimedEntity implements DrawTrait, TimeTrait{
for(int i = 0; i < length / 2; i++){
Bullet.create(Bullets.damageLightning, l, team, x, y, 0f, 1f, 1f, dmg);
- l.lines.add(new Vector2(x + Mathf.range(3f), y + Mathf.range(3f)));
+ l.lines.add(new Vec2(x + Mathf.range(3f), y + Mathf.range(3f)));
if(l.lines.size > 1){
bhit[0] = false;
diff --git a/core/src/io/anuke/mindustry/entities/effect/Puddle.java b/core/src/mindustry/entities/effect/Puddle.java
similarity index 90%
rename from core/src/io/anuke/mindustry/entities/effect/Puddle.java
rename to core/src/mindustry/entities/effect/Puddle.java
index e53e40e8dc..132c2d1379 100644
--- a/core/src/io/anuke/mindustry/entities/effect/Puddle.java
+++ b/core/src/mindustry/entities/effect/Puddle.java
@@ -1,34 +1,34 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.pooling.Pool.*;
-import io.anuke.arc.util.pooling.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import arc.util.pooling.Pool.*;
+import arc.util.pooling.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.type.*;
+import mindustry.world.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrait, SyncTrait{
private static final IntMap map = new IntMap<>();
private static final float maxLiquid = 70f;
private static final int maxGeneration = 2;
private static final Color tmp = new Color();
- private static final Rectangle rect = new Rectangle();
- private static final Rectangle rect2 = new Rectangle();
+ private static final Rect rect = new Rect();
+ private static final Rect rect2 = new Rect();
private static int seeds;
private int loadedPosition = -1;
@@ -151,13 +151,13 @@ public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrai
}
@Override
- public void hitbox(Rectangle rectangle){
- rectangle.setCenter(x, y).setSize(tilesize);
+ public void hitbox(Rect rect){
+ rect.setCenter(x, y).setSize(tilesize);
}
@Override
- public void hitboxTile(Rectangle rectangle){
- rectangle.setCenter(x, y).setSize(0f);
+ public void hitboxTile(Rect rect){
+ rect.setCenter(x, y).setSize(0f);
}
@Override
diff --git a/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java b/core/src/mindustry/entities/effect/RubbleDecal.java
similarity index 77%
rename from core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java
rename to core/src/mindustry/entities/effect/RubbleDecal.java
index 222d1355e4..1d26980dc0 100644
--- a/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java
+++ b/core/src/mindustry/entities/effect/RubbleDecal.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.graphics.g2d.TextureRegion;
-import io.anuke.arc.math.Mathf;
+import arc.Core;
+import arc.graphics.g2d.Draw;
+import arc.graphics.g2d.TextureRegion;
+import arc.math.Mathf;
-import static io.anuke.mindustry.Vars.headless;
+import static mindustry.Vars.headless;
public class RubbleDecal extends Decal{
private TextureRegion region;
diff --git a/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java b/core/src/mindustry/entities/effect/ScorchDecal.java
similarity index 78%
rename from core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java
rename to core/src/mindustry/entities/effect/ScorchDecal.java
index 89f4eacf6f..e35cf7a7c0 100644
--- a/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java
+++ b/core/src/mindustry/entities/effect/ScorchDecal.java
@@ -1,14 +1,14 @@
-package io.anuke.mindustry.entities.effect;
+package mindustry.entities.effect;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.graphics.g2d.TextureRegion;
-import io.anuke.arc.math.Angles;
-import io.anuke.arc.math.Mathf;
-import io.anuke.mindustry.world.Tile;
+import arc.Core;
+import arc.graphics.g2d.Draw;
+import arc.graphics.g2d.TextureRegion;
+import arc.math.Angles;
+import arc.math.Mathf;
+import mindustry.world.Tile;
-import static io.anuke.mindustry.Vars.headless;
-import static io.anuke.mindustry.Vars.world;
+import static mindustry.Vars.headless;
+import static mindustry.Vars.world;
public class ScorchDecal extends Decal{
private static final int scorches = 5;
diff --git a/core/src/io/anuke/mindustry/entities/traits/AbsorbTrait.java b/core/src/mindustry/entities/traits/AbsorbTrait.java
similarity index 83%
rename from core/src/io/anuke/mindustry/entities/traits/AbsorbTrait.java
rename to core/src/mindustry/entities/traits/AbsorbTrait.java
index d408296c7c..2dd31c487e 100644
--- a/core/src/io/anuke/mindustry/entities/traits/AbsorbTrait.java
+++ b/core/src/mindustry/entities/traits/AbsorbTrait.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
public interface AbsorbTrait extends Entity, TeamTrait, DamageTrait{
void absorb();
diff --git a/core/src/io/anuke/mindustry/entities/traits/BelowLiquidTrait.java b/core/src/mindustry/entities/traits/BelowLiquidTrait.java
similarity index 72%
rename from core/src/io/anuke/mindustry/entities/traits/BelowLiquidTrait.java
rename to core/src/mindustry/entities/traits/BelowLiquidTrait.java
index c4abd8abf0..e5d54a5f58 100644
--- a/core/src/io/anuke/mindustry/entities/traits/BelowLiquidTrait.java
+++ b/core/src/mindustry/entities/traits/BelowLiquidTrait.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
/**
* A flag interface for marking an effect as appearing below liquids.
diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderMinerTrait.java b/core/src/mindustry/entities/traits/BuilderMinerTrait.java
similarity index 91%
rename from core/src/io/anuke/mindustry/entities/traits/BuilderMinerTrait.java
rename to core/src/mindustry/entities/traits/BuilderMinerTrait.java
index 5fbde29251..dff842212c 100644
--- a/core/src/io/anuke/mindustry/entities/traits/BuilderMinerTrait.java
+++ b/core/src/mindustry/entities/traits/BuilderMinerTrait.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
/** A class for gracefully merging mining and building traits.*/
public interface BuilderMinerTrait extends MinerTrait, BuilderTrait{
diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/mindustry/entities/traits/BuilderTrait.java
similarity index 93%
rename from core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java
rename to core/src/mindustry/entities/traits/BuilderTrait.java
index c7ced76ec8..02ae0bca5b 100644
--- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java
+++ b/core/src/mindustry/entities/traits/BuilderTrait.java
@@ -1,27 +1,27 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.Queue;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.BuildBlock.*;
+import arc.*;
+import arc.struct.Queue;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.blocks.BuildBlock.*;
import java.io.*;
import java.util.*;
-import static io.anuke.mindustry.Vars.*;
-import static io.anuke.mindustry.entities.traits.BuilderTrait.BuildDataStatic.*;
+import static mindustry.Vars.*;
+import static mindustry.entities.traits.BuilderTrait.BuildDataStatic.*;
/** Interface for units that build things.*/
public interface BuilderTrait extends Entity, TeamTrait{
@@ -229,7 +229,7 @@ public interface BuilderTrait extends Entity, TeamTrait{
//due to iOS weirdness, this is apparently required
class BuildDataStatic{
- static Vector2[] tmptr = new Vector2[]{new Vector2(), new Vector2(), new Vector2(), new Vector2()};
+ static Vec2[] tmptr = new Vec2[]{new Vec2(), new Vec2(), new Vec2(), new Vec2()};
}
/** Draw placement effects for an entity. */
@@ -343,7 +343,7 @@ public interface BuilderTrait extends Entity, TeamTrait{
return this;
}
- public Rectangle bounds(Rectangle rect){
+ public Rect bounds(Rect rect){
if(breaking){
return rect.set(-100f, -100f, 0f, 0f);
}else{
diff --git a/core/src/io/anuke/mindustry/entities/traits/DamageTrait.java b/core/src/mindustry/entities/traits/DamageTrait.java
similarity index 53%
rename from core/src/io/anuke/mindustry/entities/traits/DamageTrait.java
rename to core/src/mindustry/entities/traits/DamageTrait.java
index fdb41472e8..13feb85e6e 100644
--- a/core/src/io/anuke/mindustry/entities/traits/DamageTrait.java
+++ b/core/src/mindustry/entities/traits/DamageTrait.java
@@ -1,6 +1,4 @@
-package io.anuke.mindustry.entities.traits;
-
-import io.anuke.mindustry.entities.type.*;
+package mindustry.entities.traits;
public interface DamageTrait{
float damage();
diff --git a/core/src/io/anuke/mindustry/entities/traits/DrawTrait.java b/core/src/mindustry/entities/traits/DrawTrait.java
similarity index 73%
rename from core/src/io/anuke/mindustry/entities/traits/DrawTrait.java
rename to core/src/mindustry/entities/traits/DrawTrait.java
index 648d9797b3..472b582c75 100644
--- a/core/src/io/anuke/mindustry/entities/traits/DrawTrait.java
+++ b/core/src/mindustry/entities/traits/DrawTrait.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
public interface DrawTrait extends Entity{
diff --git a/core/src/io/anuke/mindustry/entities/traits/Entity.java b/core/src/mindustry/entities/traits/Entity.java
similarity index 87%
rename from core/src/io/anuke/mindustry/entities/traits/Entity.java
rename to core/src/mindustry/entities/traits/Entity.java
index 2de8e0e013..5b0416b69f 100644
--- a/core/src/io/anuke/mindustry/entities/traits/Entity.java
+++ b/core/src/mindustry/entities/traits/Entity.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.mindustry.entities.EntityGroup;
+import mindustry.entities.EntityGroup;
public interface Entity extends MoveTrait{
diff --git a/core/src/io/anuke/mindustry/entities/traits/HealthTrait.java b/core/src/mindustry/entities/traits/HealthTrait.java
similarity index 92%
rename from core/src/io/anuke/mindustry/entities/traits/HealthTrait.java
rename to core/src/mindustry/entities/traits/HealthTrait.java
index 644e099e75..fb241e0d1b 100644
--- a/core/src/io/anuke/mindustry/entities/traits/HealthTrait.java
+++ b/core/src/mindustry/entities/traits/HealthTrait.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.Mathf;
+import arc.math.Mathf;
public interface HealthTrait{
diff --git a/core/src/io/anuke/mindustry/entities/traits/KillerTrait.java b/core/src/mindustry/entities/traits/KillerTrait.java
similarity index 59%
rename from core/src/io/anuke/mindustry/entities/traits/KillerTrait.java
rename to core/src/mindustry/entities/traits/KillerTrait.java
index 17efa31c40..7be5f42882 100644
--- a/core/src/io/anuke/mindustry/entities/traits/KillerTrait.java
+++ b/core/src/mindustry/entities/traits/KillerTrait.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
public interface KillerTrait{
void killed(Entity other);
diff --git a/core/src/io/anuke/mindustry/entities/traits/MinerTrait.java b/core/src/mindustry/entities/traits/MinerTrait.java
similarity index 70%
rename from core/src/io/anuke/mindustry/entities/traits/MinerTrait.java
rename to core/src/mindustry/entities/traits/MinerTrait.java
index a312740804..5b3d51c21d 100644
--- a/core/src/io/anuke/mindustry/entities/traits/MinerTrait.java
+++ b/core/src/mindustry/entities/traits/MinerTrait.java
@@ -1,19 +1,20 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.Time;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.gen.Call;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.type.Item;
-import io.anuke.mindustry.world.Tile;
+import arc.Core;
+import arc.graphics.Color;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.util.Time;
+import mindustry.content.*;
+import mindustry.entities.Effects;
+import mindustry.entities.effect.*;
+import mindustry.entities.type.*;
+import mindustry.gen.Call;
+import mindustry.graphics.*;
+import mindustry.type.Item;
+import mindustry.world.Tile;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public interface MinerTrait extends Entity{
@@ -38,11 +39,26 @@ public interface MinerTrait extends Entity{
/** Returns whether or not this builder can mine a specific item type. */
boolean canMine(Item item);
+ /** @return whether to offload mined items immediately at the core. if false, items are collected and dropped in a burst. */
+ default boolean offloadImmediately(){
+ return false;
+ }
+
default void updateMining(){
Unit unit = (Unit)this;
Tile tile = getMineTile();
TileEntity core = unit.getClosestCore();
+ if(core != null && tile != null && tile.drop() != null && !unit.acceptsItem(tile.drop()) && unit.dst(core) < mineTransferRange){
+ int accepted = core.tile.block().acceptStack(unit.item().item, unit.item().amount, core.tile, unit);
+ if(accepted > 0){
+ Call.transferItemTo(unit.item().item, accepted,
+ tile.worldx() + Mathf.range(tilesize / 2f),
+ tile.worldy() + Mathf.range(tilesize / 2f), core.tile);
+ unit.clearItem();
+ }
+ }
+
if(tile == null || core == null || tile.block() != Blocks.air || dst(tile.worldx(), tile.worldy()) > getMiningRange()
|| tile.drop() == null || !unit.acceptsItem(tile.drop()) || !canMine(tile.drop())){
setMineTile(null);
@@ -52,12 +68,13 @@ public interface MinerTrait extends Entity{
if(Mathf.chance(Time.delta() * (0.06 - item.hardness * 0.01) * getMinePower())){
- if(unit.dst(core) < mineTransferRange && core.tile.block().acceptStack(item, 1, core.tile, unit) == 1){
+ if(unit.dst(core) < mineTransferRange && core.tile.block().acceptStack(item, 1, core.tile, unit) == 1 && offloadImmediately()){
Call.transferItemTo(item, 1,
tile.worldx() + Mathf.range(tilesize / 2f),
tile.worldy() + Mathf.range(tilesize / 2f), core.tile);
}else if(unit.acceptsItem(item)){
- Call.transferItemToUnit(item,
+ //this is clientside, since items are synced anyway
+ ItemTransfer.transferItemToUnit(item,
tile.worldx() + Mathf.range(tilesize / 2f),
tile.worldy() + Mathf.range(tilesize / 2f),
unit);
diff --git a/core/src/io/anuke/mindustry/entities/traits/MoveTrait.java b/core/src/mindustry/entities/traits/MoveTrait.java
similarity index 77%
rename from core/src/io/anuke/mindustry/entities/traits/MoveTrait.java
rename to core/src/mindustry/entities/traits/MoveTrait.java
index 561c7a76bd..f34abba24f 100644
--- a/core/src/io/anuke/mindustry/entities/traits/MoveTrait.java
+++ b/core/src/mindustry/entities/traits/MoveTrait.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.geom.Position;
+import arc.math.geom.Position;
public interface MoveTrait extends Position{
diff --git a/core/src/io/anuke/mindustry/entities/traits/SaveTrait.java b/core/src/mindustry/entities/traits/SaveTrait.java
similarity index 74%
rename from core/src/io/anuke/mindustry/entities/traits/SaveTrait.java
rename to core/src/mindustry/entities/traits/SaveTrait.java
index d992de766a..ee051dcd15 100644
--- a/core/src/io/anuke/mindustry/entities/traits/SaveTrait.java
+++ b/core/src/mindustry/entities/traits/SaveTrait.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
/**
* Marks an entity as serializable.
diff --git a/core/src/io/anuke/mindustry/entities/traits/Saveable.java b/core/src/mindustry/entities/traits/Saveable.java
similarity index 80%
rename from core/src/io/anuke/mindustry/entities/traits/Saveable.java
rename to core/src/mindustry/entities/traits/Saveable.java
index b0d22e6a34..801e4ab426 100644
--- a/core/src/io/anuke/mindustry/entities/traits/Saveable.java
+++ b/core/src/mindustry/entities/traits/Saveable.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
import java.io.*;
diff --git a/core/src/io/anuke/mindustry/entities/traits/ScaleTrait.java b/core/src/mindustry/entities/traits/ScaleTrait.java
similarity index 90%
rename from core/src/io/anuke/mindustry/entities/traits/ScaleTrait.java
rename to core/src/mindustry/entities/traits/ScaleTrait.java
index 9975bb12a8..2a572659b2 100644
--- a/core/src/io/anuke/mindustry/entities/traits/ScaleTrait.java
+++ b/core/src/mindustry/entities/traits/ScaleTrait.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.Interpolation;
+import arc.math.Interpolation;
public interface ScaleTrait{
/** 0 to 1. */
diff --git a/core/src/io/anuke/mindustry/entities/traits/ShooterTrait.java b/core/src/mindustry/entities/traits/ShooterTrait.java
similarity index 57%
rename from core/src/io/anuke/mindustry/entities/traits/ShooterTrait.java
rename to core/src/mindustry/entities/traits/ShooterTrait.java
index ca3010eec3..bb20ccc83c 100644
--- a/core/src/io/anuke/mindustry/entities/traits/ShooterTrait.java
+++ b/core/src/mindustry/entities/traits/ShooterTrait.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.util.Interval;
-import io.anuke.mindustry.type.Weapon;
+import arc.util.Interval;
+import mindustry.type.Weapon;
public interface ShooterTrait extends VelocityTrait, TeamTrait{
diff --git a/core/src/io/anuke/mindustry/entities/traits/SolidTrait.java b/core/src/mindustry/entities/traits/SolidTrait.java
similarity index 67%
rename from core/src/io/anuke/mindustry/entities/traits/SolidTrait.java
rename to core/src/mindustry/entities/traits/SolidTrait.java
index 5ebf8105f3..afa2efd6b0 100644
--- a/core/src/io/anuke/mindustry/entities/traits/SolidTrait.java
+++ b/core/src/mindustry/entities/traits/SolidTrait.java
@@ -1,17 +1,17 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.math.geom.QuadTree.QuadTreeObject;
-import io.anuke.mindustry.Vars;
+import arc.math.geom.*;
+import arc.math.geom.QuadTree.QuadTreeObject;
+import mindustry.Vars;
public interface SolidTrait extends QuadTreeObject, MoveTrait, VelocityTrait, Entity, Position{
- void hitbox(Rectangle rectangle);
+ void hitbox(Rect rect);
- void hitboxTile(Rectangle rectangle);
+ void hitboxTile(Rect rect);
- Vector2 lastPosition();
+ Vec2 lastPosition();
default boolean collidesGrid(int x, int y){
return true;
diff --git a/core/src/io/anuke/mindustry/entities/traits/SpawnerTrait.java b/core/src/mindustry/entities/traits/SpawnerTrait.java
similarity index 61%
rename from core/src/io/anuke/mindustry/entities/traits/SpawnerTrait.java
rename to core/src/mindustry/entities/traits/SpawnerTrait.java
index c890d4cbfc..3eeee072e5 100644
--- a/core/src/io/anuke/mindustry/entities/traits/SpawnerTrait.java
+++ b/core/src/mindustry/entities/traits/SpawnerTrait.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.geom.Position;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.world.Tile;
+import arc.math.geom.Position;
+import mindustry.entities.type.*;
+import mindustry.world.Tile;
public interface SpawnerTrait extends TargetTrait, Position{
Tile getTile();
diff --git a/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java b/core/src/mindustry/entities/traits/SyncTrait.java
similarity index 93%
rename from core/src/io/anuke/mindustry/entities/traits/SyncTrait.java
rename to core/src/mindustry/entities/traits/SyncTrait.java
index 7a25c9c1ed..29da740bc0 100644
--- a/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java
+++ b/core/src/mindustry/entities/traits/SyncTrait.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.mindustry.net.Interpolator;
+import mindustry.net.Interpolator;
import java.io.*;
diff --git a/core/src/io/anuke/mindustry/entities/traits/TargetTrait.java b/core/src/mindustry/entities/traits/TargetTrait.java
similarity index 84%
rename from core/src/io/anuke/mindustry/entities/traits/TargetTrait.java
rename to core/src/mindustry/entities/traits/TargetTrait.java
index 819e9dbcdc..1544b8d057 100644
--- a/core/src/io/anuke/mindustry/entities/traits/TargetTrait.java
+++ b/core/src/mindustry/entities/traits/TargetTrait.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.geom.Position;
-import io.anuke.mindustry.game.Team;
+import arc.math.geom.Position;
+import mindustry.game.Team;
/**
* Base interface for targetable entities.
diff --git a/core/src/mindustry/entities/traits/TeamTrait.java b/core/src/mindustry/entities/traits/TeamTrait.java
new file mode 100644
index 0000000000..f4424149af
--- /dev/null
+++ b/core/src/mindustry/entities/traits/TeamTrait.java
@@ -0,0 +1,7 @@
+package mindustry.entities.traits;
+
+import mindustry.game.Team;
+
+public interface TeamTrait extends Entity{
+ Team getTeam();
+}
diff --git a/core/src/io/anuke/mindustry/entities/traits/TimeTrait.java b/core/src/mindustry/entities/traits/TimeTrait.java
similarity index 77%
rename from core/src/io/anuke/mindustry/entities/traits/TimeTrait.java
rename to core/src/mindustry/entities/traits/TimeTrait.java
index 47dc7dfe48..cf89d7dca8 100644
--- a/core/src/io/anuke/mindustry/entities/traits/TimeTrait.java
+++ b/core/src/mindustry/entities/traits/TimeTrait.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.Time;
+import arc.math.Mathf;
+import arc.util.Time;
public interface TimeTrait extends ScaleTrait, Entity{
diff --git a/core/src/io/anuke/mindustry/entities/traits/TypeTrait.java b/core/src/mindustry/entities/traits/TypeTrait.java
similarity index 94%
rename from core/src/io/anuke/mindustry/entities/traits/TypeTrait.java
rename to core/src/mindustry/entities/traits/TypeTrait.java
index deddefe7ed..00917194fc 100644
--- a/core/src/io/anuke/mindustry/entities/traits/TypeTrait.java
+++ b/core/src/mindustry/entities/traits/TypeTrait.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.mindustry.type.TypeID;
+import mindustry.type.TypeID;
public interface TypeTrait{
diff --git a/core/src/io/anuke/mindustry/entities/traits/VelocityTrait.java b/core/src/mindustry/entities/traits/VelocityTrait.java
similarity index 83%
rename from core/src/io/anuke/mindustry/entities/traits/VelocityTrait.java
rename to core/src/mindustry/entities/traits/VelocityTrait.java
index e5bddaed43..6eb42254d7 100644
--- a/core/src/io/anuke/mindustry/entities/traits/VelocityTrait.java
+++ b/core/src/mindustry/entities/traits/VelocityTrait.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.entities.traits;
+package mindustry.entities.traits;
-import io.anuke.arc.math.geom.Vector2;
-import io.anuke.arc.util.Time;
+import arc.math.geom.Vec2;
+import arc.util.Time;
public interface VelocityTrait extends MoveTrait{
- Vector2 velocity();
+ Vec2 velocity();
default void applyImpulse(float x, float y){
velocity().x += x / mass();
diff --git a/core/src/io/anuke/mindustry/entities/type/BaseEntity.java b/core/src/mindustry/entities/type/BaseEntity.java
similarity index 87%
rename from core/src/io/anuke/mindustry/entities/type/BaseEntity.java
rename to core/src/mindustry/entities/type/BaseEntity.java
index 97de965cfe..6aa4f0f8b7 100755
--- a/core/src/io/anuke/mindustry/entities/type/BaseEntity.java
+++ b/core/src/mindustry/entities/type/BaseEntity.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.entities.EntityGroup;
-import io.anuke.mindustry.entities.traits.Entity;
+import mindustry.*;
+import mindustry.entities.EntityGroup;
+import mindustry.entities.traits.Entity;
public abstract class BaseEntity implements Entity{
private static int lastid;
diff --git a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java b/core/src/mindustry/entities/type/BaseUnit.java
similarity index 84%
rename from core/src/io/anuke/mindustry/entities/type/BaseUnit.java
rename to core/src/mindustry/entities/type/BaseUnit.java
index 6dfa7baa84..6062662e9b 100644
--- a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java
+++ b/core/src/mindustry/entities/type/BaseUnit.java
@@ -1,34 +1,34 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.type.TypeID;
-import io.anuke.mindustry.ui.Cicon;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.defense.DeflectorWall.*;
-import io.anuke.mindustry.world.blocks.units.CommandCenter.*;
-import io.anuke.mindustry.world.blocks.units.UnitFactory.*;
-import io.anuke.mindustry.world.meta.*;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.units.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.type.*;
+import mindustry.type.TypeID;
+import mindustry.ui.Cicon;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.blocks.defense.DeflectorWall.*;
+import mindustry.world.blocks.units.CommandCenter.*;
+import mindustry.world.blocks.units.UnitFactory.*;
+import mindustry.world.meta.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Base class for AI units. */
public abstract class BaseUnit extends Unit implements ShooterTrait{
@@ -126,6 +126,11 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
this.team = team;
}
+ /** @return whether this unit counts toward the enemy amount in the wave UI. */
+ public boolean countsAsEnemy(){
+ return true;
+ }
+
public UnitType getType(){
return type;
}
@@ -180,23 +185,16 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
}
}
- public Tile getClosest(BlockFlag flag){
+ public @Nullable Tile getClosest(BlockFlag flag){
return Geometry.findClosest(x, y, indexer.getAllied(team, flag));
}
- public Tile getClosestSpawner(){
+ public @Nullable Tile getClosestSpawner(){
return Geometry.findClosest(x, y, Vars.spawner.getGroundSpawns());
}
- public TileEntity getClosestEnemyCore(){
- for(Team enemy : Vars.state.teams.enemiesOf(team)){
- Tile tile = Geometry.findClosest(x, y, Vars.state.teams.get(enemy).cores);
- if(tile != null){
- return tile.entity;
- }
- }
-
- return null;
+ public @Nullable TileEntity getClosestEnemyCore(){
+ return Vars.state.teams.closestEnemyCore(x, y, team);
}
public UnitState getStartState(){
@@ -354,18 +352,18 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
}
@Override
- public void hitbox(Rectangle rectangle){
- rectangle.setSize(type.hitsize).setCenter(x, y);
+ public void hitbox(Rect rect){
+ rect.setSize(type.hitsize).setCenter(x, y);
}
@Override
- public void hitboxTile(Rectangle rectangle){
- rectangle.setSize(type.hitsizeTile).setCenter(x, y);
+ public void hitboxTile(Rect rect){
+ rect.setSize(type.hitsizeTile).setCenter(x, y);
}
@Override
public EntityGroup targetGroup(){
- return unitGroups[team.ordinal()];
+ return unitGroup;
}
@Override
diff --git a/core/src/io/anuke/mindustry/entities/type/Bullet.java b/core/src/mindustry/entities/type/Bullet.java
similarity index 90%
rename from core/src/io/anuke/mindustry/entities/type/Bullet.java
rename to core/src/mindustry/entities/type/Bullet.java
index abf7952aeb..f7e676ecc9 100644
--- a/core/src/io/anuke/mindustry/entities/type/Bullet.java
+++ b/core/src/mindustry/entities/type/Bullet.java
@@ -1,20 +1,20 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.pooling.Pool.*;
-import io.anuke.arc.util.pooling.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.world.*;
+import mindustry.annotations.Annotations.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import arc.util.pooling.Pool.*;
+import arc.util.pooling.*;
+import mindustry.entities.*;
+import mindustry.entities.bullet.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.traits.*;
+import mindustry.game.*;
+import mindustry.graphics.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Poolable, DrawTrait, VelocityTrait, TimeTrait, TeamTrait, AbsorbTrait{
public Interval timer = new Interval(3);
@@ -56,7 +56,7 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
bullet.velocity.set(0, type.speed).setAngle(angle).scl(velocityScl);
if(type.keepVelocity){
- bullet.velocity.add(owner instanceof VelocityTrait ? ((VelocityTrait)owner).velocity() : Vector2.ZERO);
+ bullet.velocity.add(owner instanceof VelocityTrait ? ((VelocityTrait)owner).velocity() : Vec2.ZERO);
}
bullet.team = team;
@@ -246,13 +246,13 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
}
@Override
- public void hitbox(Rectangle rectangle){
- rectangle.setSize(type.hitSize).setCenter(x, y);
+ public void hitbox(Rect rect){
+ rect.setSize(type.hitSize).setCenter(x, y);
}
@Override
- public void hitboxTile(Rectangle rectangle){
- rectangle.setSize(type.hitSize).setCenter(x, y);
+ public void hitboxTile(Rect rect){
+ rect.setSize(type.hitSize).setCenter(x, y);
}
@Override
@@ -297,7 +297,7 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
}
@Override
- public Vector2 velocity(){
+ public Vec2 velocity(){
return velocity;
}
diff --git a/core/src/io/anuke/mindustry/entities/type/DestructibleEntity.java b/core/src/mindustry/entities/type/DestructibleEntity.java
similarity index 91%
rename from core/src/io/anuke/mindustry/entities/type/DestructibleEntity.java
rename to core/src/mindustry/entities/type/DestructibleEntity.java
index 1db9308eef..99efe3b00c 100644
--- a/core/src/io/anuke/mindustry/entities/type/DestructibleEntity.java
+++ b/core/src/mindustry/entities/type/DestructibleEntity.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.mindustry.entities.traits.*;
+import mindustry.entities.traits.*;
public abstract class DestructibleEntity extends SolidEntity implements HealthTrait{
public transient boolean dead;
diff --git a/core/src/io/anuke/mindustry/entities/type/EffectEntity.java b/core/src/mindustry/entities/type/EffectEntity.java
similarity index 76%
rename from core/src/io/anuke/mindustry/entities/type/EffectEntity.java
rename to core/src/mindustry/entities/type/EffectEntity.java
index 33b2f47475..95f40d8100 100644
--- a/core/src/io/anuke/mindustry/entities/type/EffectEntity.java
+++ b/core/src/mindustry/entities/type/EffectEntity.java
@@ -1,15 +1,15 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.util.pooling.Pool.Poolable;
-import io.anuke.arc.util.pooling.Pools;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.entities.Effects.Effect;
-import io.anuke.mindustry.entities.EntityGroup;
-import io.anuke.mindustry.entities.traits.DrawTrait;
-import io.anuke.mindustry.entities.traits.Entity;
+import arc.graphics.Color;
+import arc.util.pooling.Pool.Poolable;
+import arc.util.pooling.Pools;
+import mindustry.entities.Effects;
+import mindustry.entities.Effects.Effect;
+import mindustry.entities.EntityGroup;
+import mindustry.entities.traits.DrawTrait;
+import mindustry.entities.traits.Entity;
-import static io.anuke.mindustry.Vars.effectGroup;
+import static mindustry.Vars.effectGroup;
public class EffectEntity extends TimedEntity implements Poolable, DrawTrait{
public Effect effect;
diff --git a/core/src/io/anuke/mindustry/entities/type/Player.java b/core/src/mindustry/entities/type/Player.java
similarity index 92%
rename from core/src/io/anuke/mindustry/entities/type/Player.java
rename to core/src/mindustry/entities/type/Player.java
index 45405aad70..79bb9a0bbd 100644
--- a/core/src/io/anuke/mindustry/entities/type/Player.java
+++ b/core/src/mindustry/entities/type/Player.java
@@ -1,37 +1,37 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.arc.util.pooling.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.input.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.net.Administration.*;
-import io.anuke.mindustry.net.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.ui.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.pooling.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.core.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.*;
+import mindustry.entities.traits.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.input.*;
+import mindustry.io.*;
+import mindustry.net.Administration.*;
+import mindustry.net.*;
+import mindustry.type.*;
+import mindustry.ui.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
public static final int timerSync = 2;
@@ -41,15 +41,14 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
private static final int timerShootRight = 1;
private static final float liftoffBoost = 0.2f;
- private static final Rectangle rect = new Rectangle();
+ private static final Rect rect = new Rect();
//region instance variables
public float baseRotation;
public float pointerX, pointerY;
public String name = "noname";
- public @Nullable
- String uuid, usid;
+ public @Nullable String uuid, usid;
public boolean isAdmin, isTransferring, isShooting, isBoosting, isMobile, isTyping, isBuilding = true;
public boolean buildWasAutoPaused = false;
public float boostHeat, shootHeat, destructTime;
@@ -71,7 +70,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
private float walktime, itemtime;
private Queue placeQueue = new Queue<>();
private Tile mining;
- private Vector2 movement = new Vector2();
+ private Vec2 movement = new Vec2();
private boolean moved;
//endregion
@@ -93,13 +92,13 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
}
@Override
- public void hitbox(Rectangle rectangle){
- rectangle.setSize(mech.hitsize).setCenter(x, y);
+ public void hitbox(Rect rect){
+ rect.setSize(mech.hitsize).setCenter(x, y);
}
@Override
- public void hitboxTile(Rectangle rectangle){
- rectangle.setSize(mech.hitsize * 2f / 3f).setCenter(x, y);
+ public void hitboxTile(Rect rect){
+ rect.setSize(mech.hitsize * 2f / 3f).setCenter(x, y);
}
@Override
@@ -119,6 +118,11 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
heal();
}
+ @Override
+ public boolean offloadImmediately(){
+ return true;
+ }
+
@Override
public TypeID getTypeID(){
return TypeIDs.player;
@@ -345,13 +349,13 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
Draw.reset();
}
+ public void drawBackItems(){
+ drawBackItems(itemtime, isLocal);
+ }
+
@Override
public void drawStats(){
- Draw.color(Color.black, team.color, healthf() + Mathf.absin(Time.time(), healthf() * 5f, 1f - healthf()));
- Draw.rect(getPowerCellRegion(), x + Angles.trnsx(rotation, mech.cellTrnsY, 0f), y + Angles.trnsy(rotation, mech.cellTrnsY, 0f), rotation - 90);
- Draw.reset();
- drawBackItems(itemtime, isLocal);
- drawLight();
+ mech.drawStats(this);
}
@Override
@@ -568,6 +572,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
protected void updateKeyboard(){
Tile tile = world.tileWorld(x, y);
+ boolean canMove = !Core.scene.hasKeyboard() || ui.minimapfrag.shown();
isBoosting = Core.input.keyDown(Binding.dash) && !mech.flying;
@@ -594,18 +599,18 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
}
if(Core.input.keyDown(Binding.mouse_move)){
- movement.x += Mathf.clamp((Core.input.mouseX() - Core.graphics.getWidth() / 2) * 0.005f, -1, 1) * speed;
- movement.y += Mathf.clamp((Core.input.mouseY() - Core.graphics.getHeight() / 2) * 0.005f, -1, 1) * speed;
+ movement.x += Mathf.clamp((Core.input.mouseX() - Core.graphics.getWidth() / 2f) * 0.005f, -1, 1) * speed;
+ movement.y += Mathf.clamp((Core.input.mouseY() - Core.graphics.getHeight() / 2f) * 0.005f, -1, 1) * speed;
}
- Vector2 vec = Core.input.mouseWorld(control.input.getMouseX(), control.input.getMouseY());
+ Vec2 vec = Core.input.mouseWorld(control.input.getMouseX(), control.input.getMouseY());
pointerX = vec.x;
pointerY = vec.y;
updateShooting();
movement.limit(speed).scl(Time.delta());
- if(!Core.scene.hasKeyboard()){
+ if(canMove){
velocity.add(movement.x, movement.y);
}else{
isShooting = false;
@@ -614,7 +619,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
updateVelocityStatus();
moved = dst(prex, prey) > 0.001f;
- if(!Core.scene.hasKeyboard()){
+ if(canMove){
float baseLerp = mech.getRotationAlpha(this);
if(!isShooting() || !mech.turnCursor){
if(!movement.isZero()){
@@ -631,7 +636,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
if(!state.isEditor() && isShooting() && mech.canShoot(this)){
if(!mech.turnCursor){
//shoot forward ignoring cursor
- mech.weapon.update(this, x + Angles.trnsx(rotation, 1f), y + Angles.trnsy(rotation, 1f));
+ mech.weapon.update(this, x + Angles.trnsx(rotation, mech.weapon.targetDistance), y + Angles.trnsy(rotation, mech.weapon.targetDistance));
}else{
mech.weapon.update(this, pointerX, pointerY);
}
@@ -738,7 +743,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
rotation = Mathf.slerpDelta(rotation, angleTo(target), 0.2f);
}
- Vector2 intercept = Predict.intercept(this, target, getWeapon().bullet.speed);
+ Vec2 intercept = Predict.intercept(this, target, getWeapon().bullet.speed);
pointerX = intercept.x;
pointerY = intercept.y;
diff --git a/core/src/mindustry/entities/type/SolidEntity.java b/core/src/mindustry/entities/type/SolidEntity.java
new file mode 100644
index 0000000000..d3d0685f3f
--- /dev/null
+++ b/core/src/mindustry/entities/type/SolidEntity.java
@@ -0,0 +1,19 @@
+package mindustry.entities.type;
+
+import arc.math.geom.Vec2;
+import mindustry.entities.traits.SolidTrait;
+
+public abstract class SolidEntity extends BaseEntity implements SolidTrait{
+ protected transient Vec2 velocity = new Vec2(0f, 0.0001f);
+ private transient Vec2 lastPosition = new Vec2();
+
+ @Override
+ public Vec2 lastPosition(){
+ return lastPosition;
+ }
+
+ @Override
+ public Vec2 velocity(){
+ return velocity;
+ }
+}
diff --git a/core/src/io/anuke/mindustry/entities/type/TileEntity.java b/core/src/mindustry/entities/type/TileEntity.java
similarity index 85%
rename from core/src/io/anuke/mindustry/entities/type/TileEntity.java
rename to core/src/mindustry/entities/type/TileEntity.java
index 8c9617b28b..cf5a2f4bdb 100644
--- a/core/src/io/anuke/mindustry/entities/type/TileEntity.java
+++ b/core/src/mindustry/entities/type/TileEntity.java
@@ -1,26 +1,27 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.Events;
-import io.anuke.arc.collection.Array;
-import io.anuke.arc.collection.ObjectSet;
-import io.anuke.arc.math.geom.Point2;
-import io.anuke.arc.math.geom.Vector2;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.entities.EntityGroup;
-import io.anuke.mindustry.entities.traits.HealthTrait;
-import io.anuke.mindustry.entities.traits.TargetTrait;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.EventType.BlockDestroyEvent;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.consumers.*;
-import io.anuke.mindustry.world.modules.*;
+import arc.math.*;
+import mindustry.annotations.Annotations.*;
+import arc.Events;
+import arc.struct.Array;
+import arc.struct.ObjectSet;
+import arc.math.geom.Point2;
+import arc.math.geom.Vec2;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.entities.EntityGroup;
+import mindustry.entities.traits.HealthTrait;
+import mindustry.entities.traits.TargetTrait;
+import mindustry.game.*;
+import mindustry.game.EventType.BlockDestroyEvent;
+import mindustry.gen.*;
+import mindustry.world.*;
+import mindustry.world.consumers.*;
+import mindustry.world.modules.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public static final float timeToSleep = 60f * 4; //4 seconds to fall asleep
@@ -124,7 +125,8 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@CallSuper
public void write(DataOutput stream) throws IOException{
stream.writeShort((short)health);
- stream.writeByte(Pack.byteByte(tile.getTeamID(), tile.rotation())); //team + rotation
+ stream.writeByte(Pack.byteByte((byte)8, tile.rotation())); //rotation + marker to indicate that team is moved (8 isn't valid)
+ stream.writeByte(tile.getTeamID());
if(items != null) items.write(stream);
if(power != null) power.write(stream);
if(liquids != null) liquids.write(stream);
@@ -134,11 +136,11 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@CallSuper
public void read(DataInput stream, byte revision) throws IOException{
health = stream.readUnsignedShort();
- byte tr = stream.readByte();
- byte team = Pack.leftByte(tr);
- byte rotation = Pack.rightByte(tr);
+ byte packedrot = stream.readByte();
+ byte team = Pack.leftByte(packedrot) == 8 ? stream.readByte() : Pack.leftByte(packedrot);
+ byte rotation = Pack.rightByte(packedrot);
- tile.setTeam(Team.all[team]);
+ tile.setTeam(Team.get(team));
tile.rotation(rotation);
if(items != null) items.read(stream);
@@ -164,9 +166,16 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
Call.onTileDestroyed(tile);
}
+ @Override
public void damage(float damage){
if(dead) return;
+ if(Mathf.zero(state.rules.blockHealthMultiplier)){
+ damage = health + 1;
+ }else{
+ damage /= state.rules.blockHealthMultiplier;
+ }
+
float preHealth = health;
Call.onTileDamage(tile, health - block.handleDamage(tile, damage));
@@ -277,7 +286,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
Events.fire(new BlockDestroyEvent(tile));
block.breakSound.at(tile);
block.onDestroyed(tile);
- world.removeBlock(tile);
+ tile.remove();
remove();
}
}
@@ -288,8 +297,8 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
}
@Override
- public Vector2 velocity(){
- return Vector2.ZERO;
+ public Vec2 velocity(){
+ return Vec2.ZERO;
}
@Override
diff --git a/core/src/io/anuke/mindustry/entities/type/TimedEntity.java b/core/src/mindustry/entities/type/TimedEntity.java
similarity index 71%
rename from core/src/io/anuke/mindustry/entities/type/TimedEntity.java
rename to core/src/mindustry/entities/type/TimedEntity.java
index dbd74260fe..413b1c3fd5 100644
--- a/core/src/io/anuke/mindustry/entities/type/TimedEntity.java
+++ b/core/src/mindustry/entities/type/TimedEntity.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.arc.util.pooling.Pool.Poolable;
-import io.anuke.mindustry.entities.traits.ScaleTrait;
-import io.anuke.mindustry.entities.traits.TimeTrait;
+import arc.util.pooling.Pool.Poolable;
+import mindustry.entities.traits.ScaleTrait;
+import mindustry.entities.traits.TimeTrait;
public abstract class TimedEntity extends BaseEntity implements ScaleTrait, TimeTrait, Poolable{
public float time;
diff --git a/core/src/io/anuke/mindustry/entities/type/Unit.java b/core/src/mindustry/entities/type/Unit.java
similarity index 88%
rename from core/src/io/anuke/mindustry/entities/type/Unit.java
rename to core/src/mindustry/entities/type/Unit.java
index 73dec77656..42463dc508 100644
--- a/core/src/io/anuke/mindustry/entities/type/Unit.java
+++ b/core/src/mindustry/entities/type/Unit.java
@@ -1,34 +1,32 @@
-package io.anuke.mindustry.entities.type;
+package mindustry.entities.type;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.Teams.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.net.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.ui.Cicon;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
+import arc.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.ui.layout.*;
+import arc.struct.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.units.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.net.*;
+import mindustry.type.*;
+import mindustry.ui.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public abstract class Unit extends DestructibleEntity implements SaveTrait, TargetTrait, SyncTrait, DrawTrait, TeamTrait{
/** Total duration of hit flash effect */
@@ -39,7 +37,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
public static final float maxAbsVelocity = 127f / velocityPercision;
public static final int noSpawner = Pos.get(-1, 1);
- private static final Vector2 moveVector = new Vector2();
+ private static final Vec2 moveVector = new Vec2();
public float rotation;
@@ -90,7 +88,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
if(isDead()) return false;
if(other instanceof DamageTrait){
- return other instanceof TeamTrait && state.teams.areEnemies((((TeamTrait)other).getTeam()), team);
+ return other instanceof TeamTrait && (((TeamTrait)other).getTeam()).isEnemy(team);
}else{
return other instanceof Unit && ((Unit)other).isFlying() == isFlying();
}
@@ -118,7 +116,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
}
@Override
- public Vector2 velocity(){
+ public Vec2 velocity(){
return velocity;
}
@@ -158,7 +156,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
this.item.amount = itemAmount;
this.item.item = content.item(itemID);
this.dead = dead;
- this.team = Team.all[team];
+ this.team = Team.get(team);
this.health = health;
this.x = x;
this.y = y;
@@ -169,7 +167,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
public void writeSave(DataOutput stream, boolean net) throws IOException{
if(item.item == null) item.item = Items.copper;
- stream.writeByte(team.ordinal());
+ stream.writeByte(team.id);
stream.writeBoolean(isDead());
stream.writeFloat(net ? interpolator.target.x : x);
stream.writeFloat(net ? interpolator.target.y : y);
@@ -217,13 +215,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
float fsize = getSize() / radScl;
moveVector.setZero();
float cx = x - fsize/2f, cy = y - fsize/2f;
-
- for(Team team : Team.all){
- if(team != getTeam() || !(this instanceof Player)){
- avoid(unitGroups[team.ordinal()].intersect(cx, cy, fsize, fsize));
- }
- }
-
+ avoid(unitGroup.intersect(cx, cy, fsize, fsize));
if(!(this instanceof Player)){
avoid(playerGroup.intersect(cx, cy, fsize, fsize));
}
@@ -234,7 +226,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
float radScl = 1.5f;
for(Unit en : arr){
- if(en.isFlying() != isFlying() || (en instanceof Player && en.getTeam() != getTeam())) continue;
+ if(en.isFlying() != isFlying() || (en instanceof Player && en.getTeam() != getTeam()) || (this instanceof Player && en.isFlying())) continue;
float dst = dst(en);
float scl = Mathf.clamp(1f - dst / (getSize()/(radScl*2f) + en.getSize()/(radScl*2f)));
moveVector.add(Tmp.v1.set((x - en.x) * scl, (y - en.y) * scl).limit(0.4f));
@@ -242,14 +234,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
}
public @Nullable TileEntity getClosestCore(){
- TeamData data = state.teams.get(team);
-
- Tile tile = Geometry.findClosest(x, y, data.cores);
- if(tile == null){
- return null;
- }else{
- return tile.entity;
- }
+ return state.teams.closestCore(x, y, team);
}
public Floor getFloorOn(){
@@ -267,6 +252,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
Tile tile = world.tileWorld(x, y);
status.update(this);
+ item.amount = Mathf.clamp(this.item.amount, 0, getItemCapacity());
velocity.limit(maxVelocity()).scl(1f + (status.getSpeedMultiplier() - 1f) * Time.delta());
@@ -275,7 +261,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
}
//apply knockback based on spawns
- if(getTeam() != waveTeam){
+ if(getTeam() != state.rules.waveTeam){
float relativeSize = state.rules.dropZoneRadius + getSize()/2f + 1f;
for(Tile spawn : spawner.getGroundSpawns()){
if(withinDst(spawn.worldx(), spawn.worldy(), relativeSize)){
@@ -356,6 +342,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
public void addItem(Item item, int amount){
this.item.amount = this.item.item == item ? this.item.amount + amount : amount;
this.item.item = item;
+ this.item.amount = Mathf.clamp(this.item.amount, 0, getItemCapacity());
}
public void clearItem(){
diff --git a/core/src/io/anuke/mindustry/entities/type/base/BaseDrone.java b/core/src/mindustry/entities/type/base/BaseDrone.java
similarity index 84%
rename from core/src/io/anuke/mindustry/entities/type/base/BaseDrone.java
rename to core/src/mindustry/entities/type/base/BaseDrone.java
index a6a4d0dbfa..02a8fd9d32 100644
--- a/core/src/io/anuke/mindustry/entities/type/base/BaseDrone.java
+++ b/core/src/mindustry/entities/type/base/BaseDrone.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.entities.type.base;
+package mindustry.entities.type.base;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.geom.Geometry;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.meta.BlockFlag;
+import arc.math.Mathf;
+import arc.math.geom.Geometry;
+import mindustry.entities.units.*;
+import mindustry.world.Tile;
+import mindustry.world.meta.BlockFlag;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public abstract class BaseDrone extends FlyingUnit{
public final UnitState retreat = new UnitState(){
@@ -32,6 +32,10 @@ public abstract class BaseDrone extends FlyingUnit{
}
};
+ public boolean countsAsEnemy(){
+ return false;
+ }
+
@Override
public void onCommand(UnitCommand command){
//do nothing, normal commands are not applicable here
diff --git a/core/src/io/anuke/mindustry/entities/type/base/BuilderDrone.java b/core/src/mindustry/entities/type/base/BuilderDrone.java
similarity index 90%
rename from core/src/io/anuke/mindustry/entities/type/base/BuilderDrone.java
rename to core/src/mindustry/entities/type/base/BuilderDrone.java
index fdaaa049dd..336be7be6e 100644
--- a/core/src/io/anuke/mindustry/entities/type/base/BuilderDrone.java
+++ b/core/src/mindustry/entities/type/base/BuilderDrone.java
@@ -1,23 +1,22 @@
-package io.anuke.mindustry.entities.type.base;
+package mindustry.entities.type.base;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.Teams.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.BuildBlock.*;
+import arc.*;
+import arc.math.*;
+import arc.struct.*;
+import arc.util.*;
+import mindustry.entities.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.entities.units.*;
+import mindustry.game.EventType.*;
+import mindustry.game.Teams.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.blocks.BuildBlock.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class BuilderDrone extends BaseDrone implements BuilderTrait{
private static final StaticReset reset = new StaticReset();
@@ -114,12 +113,10 @@ public class BuilderDrone extends BaseDrone implements BuilderTrait{
public BuilderDrone(){
if(reset.check()){
Events.on(BuildSelectEvent.class, event -> {
- EntityGroup group = unitGroups[event.team.ordinal()];
-
if(!(event.tile.entity instanceof BuildEntity)) return;
- for(BaseUnit unit : group.all()){
- if(unit instanceof BuilderDrone){
+ for(BaseUnit unit : unitGroup.all()){
+ if(unit instanceof BuilderDrone && unit.getTeam() == getTeam()){
BuilderDrone drone = (BuilderDrone)unit;
if(drone.isBuilding()){
//stop building if opposite building begins.
@@ -189,7 +186,7 @@ public class BuilderDrone extends BaseDrone implements BuilderTrait{
}
if(timer.get(timerTarget, 80) && Units.closestEnemy(getTeam(), x, y, 100f, u -> !(u instanceof BaseDrone)) == null && !isBuilding()){
- TeamData data = Vars.state.teams.get(team);
+ TeamData data = team.data();
if(!data.brokenBlocks.isEmpty()){
BrokenBlock block = data.brokenBlocks.removeLast();
if(Build.validPlace(getTeam(), block.x, block.y, content.block(block.block), block.rotation)){
diff --git a/core/src/io/anuke/mindustry/entities/type/base/FlyingUnit.java b/core/src/mindustry/entities/type/base/FlyingUnit.java
similarity index 92%
rename from core/src/io/anuke/mindustry/entities/type/base/FlyingUnit.java
rename to core/src/mindustry/entities/type/base/FlyingUnit.java
index 017ebad34f..35473b7a4e 100644
--- a/core/src/io/anuke/mindustry/entities/type/base/FlyingUnit.java
+++ b/core/src/mindustry/entities/type/base/FlyingUnit.java
@@ -1,20 +1,20 @@
-package io.anuke.mindustry.entities.type.base;
+package mindustry.entities.type.base;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.meta.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.entities.*;
+import mindustry.entities.bullet.*;
+import mindustry.entities.type.*;
+import mindustry.entities.units.*;
+import mindustry.graphics.*;
+import mindustry.world.*;
+import mindustry.world.meta.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class FlyingUnit extends BaseUnit{
protected float[] weaponAngles = {0,0};
@@ -65,7 +65,7 @@ public class FlyingUnit extends BaseUnit{
getWeapon().update(FlyingUnit.this, wx + Tmp.v2.x, wy + Tmp.v2.y, weaponAngles[wi], left);
}
}else{
- Vector2 to = Predict.intercept(FlyingUnit.this, target, ammo.speed);
+ Vec2 to = Predict.intercept(FlyingUnit.this, target, ammo.speed);
getWeapon().update(FlyingUnit.this, to.x, to.y);
}
}
diff --git a/core/src/io/anuke/mindustry/entities/type/base/GroundUnit.java b/core/src/mindustry/entities/type/base/GroundUnit.java
similarity index 87%
rename from core/src/io/anuke/mindustry/entities/type/base/GroundUnit.java
rename to core/src/mindustry/entities/type/base/GroundUnit.java
index c35c6c1528..56ba404a30 100644
--- a/core/src/io/anuke/mindustry/entities/type/base/GroundUnit.java
+++ b/core/src/mindustry/entities/type/base/GroundUnit.java
@@ -1,26 +1,26 @@
-package io.anuke.mindustry.entities.type.base;
+package mindustry.entities.type.base;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.ai.Pathfinder.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.bullet.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.meta.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.ai.Pathfinder.*;
+import mindustry.entities.*;
+import mindustry.entities.bullet.*;
+import mindustry.entities.type.*;
+import mindustry.entities.units.*;
+import mindustry.game.*;
+import mindustry.type.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.meta.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class GroundUnit extends BaseUnit{
- protected static Vector2 vec = new Vector2();
+ protected static Vec2 vec = new Vec2();
protected float walkTime;
protected float stuckTime;
@@ -175,7 +175,7 @@ public class GroundUnit extends BaseUnit{
if(Angles.near(angleTo(target), rotation, 13f)){
BulletType ammo = getWeapon().bullet;
- Vector2 to = Predict.intercept(GroundUnit.this, target, ammo.speed);
+ Vec2 to = Predict.intercept(GroundUnit.this, target, ammo.speed);
getWeapon().update(GroundUnit.this, to.x, to.y);
}
@@ -237,15 +237,15 @@ public class GroundUnit extends BaseUnit{
protected void moveAwayFromCore(){
Team enemy = null;
- for(Team team : Vars.state.teams.enemiesOf(team)){
- if(Vars.state.teams.isActive(team)){
+ for(Team team : team.enemies()){
+ if(team.active()){
enemy = team;
break;
}
}
if(enemy == null){
- for(Team team : Vars.state.teams.enemiesOf(team)){
+ for(Team team : team.enemies()){
enemy = team;
break;
}
diff --git a/core/src/io/anuke/mindustry/entities/type/base/HoverUnit.java b/core/src/mindustry/entities/type/base/HoverUnit.java
similarity index 82%
rename from core/src/io/anuke/mindustry/entities/type/base/HoverUnit.java
rename to core/src/mindustry/entities/type/base/HoverUnit.java
index 6aae538484..a1dfd25819 100644
--- a/core/src/io/anuke/mindustry/entities/type/base/HoverUnit.java
+++ b/core/src/mindustry/entities/type/base/HoverUnit.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.entities.type.base;
+package mindustry.entities.type.base;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.math.Angles;
-import io.anuke.arc.math.Mathf;
-import io.anuke.mindustry.entities.Units;
+import arc.graphics.g2d.Draw;
+import arc.math.Angles;
+import arc.math.Mathf;
+import mindustry.entities.Units;
public class HoverUnit extends FlyingUnit{
diff --git a/core/src/io/anuke/mindustry/entities/type/base/MinerDrone.java b/core/src/mindustry/entities/type/base/MinerDrone.java
similarity index 88%
rename from core/src/io/anuke/mindustry/entities/type/base/MinerDrone.java
rename to core/src/mindustry/entities/type/base/MinerDrone.java
index 2d90b8a604..5c10983577 100644
--- a/core/src/io/anuke/mindustry/entities/type/base/MinerDrone.java
+++ b/core/src/mindustry/entities/type/base/MinerDrone.java
@@ -1,20 +1,20 @@
-package io.anuke.mindustry.entities.type.base;
+package mindustry.entities.type.base;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.Structs;
-import io.anuke.mindustry.content.Blocks;
-import io.anuke.mindustry.entities.traits.MinerTrait;
-import io.anuke.mindustry.entities.type.TileEntity;
-import io.anuke.mindustry.entities.units.UnitState;
-import io.anuke.mindustry.gen.Call;
-import io.anuke.mindustry.type.Item;
-import io.anuke.mindustry.type.ItemType;
-import io.anuke.mindustry.world.Pos;
-import io.anuke.mindustry.world.Tile;
+import arc.math.Mathf;
+import arc.util.Structs;
+import mindustry.content.Blocks;
+import mindustry.entities.traits.MinerTrait;
+import mindustry.entities.type.TileEntity;
+import mindustry.entities.units.UnitState;
+import mindustry.gen.Call;
+import mindustry.type.Item;
+import mindustry.type.ItemType;
+import mindustry.world.Pos;
+import mindustry.world.Tile;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** A drone that only mines.*/
public class MinerDrone extends BaseDrone implements MinerTrait{
diff --git a/core/src/io/anuke/mindustry/entities/type/base/RepairDrone.java b/core/src/mindustry/entities/type/base/RepairDrone.java
similarity index 82%
rename from core/src/io/anuke/mindustry/entities/type/base/RepairDrone.java
rename to core/src/mindustry/entities/type/base/RepairDrone.java
index be16cd1724..a796d6eddc 100644
--- a/core/src/io/anuke/mindustry/entities/type/base/RepairDrone.java
+++ b/core/src/mindustry/entities/type/base/RepairDrone.java
@@ -1,15 +1,15 @@
-package io.anuke.mindustry.entities.type.base;
+package mindustry.entities.type.base;
-import io.anuke.mindustry.entities.Units;
-import io.anuke.mindustry.entities.type.TileEntity;
-import io.anuke.mindustry.entities.units.UnitState;
-import io.anuke.mindustry.world.Pos;
-import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.*;
+import mindustry.entities.Units;
+import mindustry.entities.type.TileEntity;
+import mindustry.entities.units.UnitState;
+import mindustry.world.Pos;
+import mindustry.world.Tile;
+import mindustry.world.blocks.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.world;
+import static mindustry.Vars.world;
public class RepairDrone extends BaseDrone{
public final UnitState repair = new UnitState(){
diff --git a/core/src/io/anuke/mindustry/entities/units/StateMachine.java b/core/src/mindustry/entities/units/StateMachine.java
similarity index 91%
rename from core/src/io/anuke/mindustry/entities/units/StateMachine.java
rename to core/src/mindustry/entities/units/StateMachine.java
index 7ed555e7b6..18255cec1b 100644
--- a/core/src/io/anuke/mindustry/entities/units/StateMachine.java
+++ b/core/src/mindustry/entities/units/StateMachine.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.units;
+package mindustry.entities.units;
public class StateMachine{
private UnitState state;
diff --git a/core/src/io/anuke/mindustry/entities/units/Statuses.java b/core/src/mindustry/entities/units/Statuses.java
similarity index 90%
rename from core/src/io/anuke/mindustry/entities/units/Statuses.java
rename to core/src/mindustry/entities/units/Statuses.java
index 2d2da40f1f..637bbf1a55 100644
--- a/core/src/io/anuke/mindustry/entities/units/Statuses.java
+++ b/core/src/mindustry/entities/units/Statuses.java
@@ -1,19 +1,19 @@
-package io.anuke.mindustry.entities.units;
+package mindustry.entities.units;
-import io.anuke.arc.collection.Bits;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.pooling.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.type.*;
+import arc.struct.Bits;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.util.*;
+import arc.util.pooling.*;
+import mindustry.content.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.type.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.content;
+import static mindustry.Vars.content;
/** Class for controlling status effects on an entity. */
public class Statuses implements Saveable{
diff --git a/core/src/io/anuke/mindustry/entities/units/UnitCommand.java b/core/src/mindustry/entities/units/UnitCommand.java
similarity index 81%
rename from core/src/io/anuke/mindustry/entities/units/UnitCommand.java
rename to core/src/mindustry/entities/units/UnitCommand.java
index 654b3b0970..dccc5076f6 100644
--- a/core/src/io/anuke/mindustry/entities/units/UnitCommand.java
+++ b/core/src/mindustry/entities/units/UnitCommand.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.entities.units;
+package mindustry.entities.units;
-import io.anuke.arc.*;
+import arc.*;
public enum UnitCommand{
attack, retreat, rally;
diff --git a/core/src/io/anuke/mindustry/entities/units/UnitDrops.java b/core/src/mindustry/entities/units/UnitDrops.java
similarity index 74%
rename from core/src/io/anuke/mindustry/entities/units/UnitDrops.java
rename to core/src/mindustry/entities/units/UnitDrops.java
index 142f2f3d65..f57ff0a75d 100644
--- a/core/src/io/anuke/mindustry/entities/units/UnitDrops.java
+++ b/core/src/mindustry/entities/units/UnitDrops.java
@@ -1,19 +1,20 @@
-package io.anuke.mindustry.entities.units;
+package mindustry.entities.units;
-import io.anuke.arc.math.Mathf;
-import io.anuke.mindustry.Vars;
-import io.anuke.mindustry.content.Items;
-import io.anuke.mindustry.entities.type.BaseUnit;
-import io.anuke.mindustry.entities.type.TileEntity;
-import io.anuke.mindustry.gen.Call;
-import io.anuke.mindustry.type.Item;
+import arc.math.Mathf;
+import mindustry.Vars;
+import mindustry.content.Items;
+import mindustry.entities.type.BaseUnit;
+import mindustry.entities.type.TileEntity;
+import mindustry.gen.Call;
+import mindustry.type.Item;
+import static mindustry.Vars.*;
public class UnitDrops{
private static Item[] dropTable;
public static void dropItems(BaseUnit unit){
//items only dropped in waves for enemy team
- if(unit.getTeam() != Vars.waveTeam || !Vars.state.rules.unitDrops){
+ if(unit.getTeam() != state.rules.waveTeam || !Vars.state.rules.unitDrops){
return;
}
diff --git a/core/src/io/anuke/mindustry/entities/units/UnitState.java b/core/src/mindustry/entities/units/UnitState.java
similarity index 75%
rename from core/src/io/anuke/mindustry/entities/units/UnitState.java
rename to core/src/mindustry/entities/units/UnitState.java
index 5c5f9c64a8..d64dd49446 100644
--- a/core/src/io/anuke/mindustry/entities/units/UnitState.java
+++ b/core/src/mindustry/entities/units/UnitState.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.entities.units;
+package mindustry.entities.units;
public interface UnitState{
default void entered(){
diff --git a/core/src/io/anuke/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/DefaultWaves.java
similarity index 97%
rename from core/src/io/anuke/mindustry/game/DefaultWaves.java
rename to core/src/mindustry/game/DefaultWaves.java
index 7bf39a29b3..82fddd3a62 100644
--- a/core/src/io/anuke/mindustry/game/DefaultWaves.java
+++ b/core/src/mindustry/game/DefaultWaves.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.collection.Array;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.type.ItemStack;
+import arc.struct.Array;
+import mindustry.content.*;
+import mindustry.type.ItemStack;
public class DefaultWaves{
private Array spawns;
diff --git a/core/src/io/anuke/mindustry/game/Difficulty.java b/core/src/mindustry/game/Difficulty.java
similarity index 89%
rename from core/src/io/anuke/mindustry/game/Difficulty.java
rename to core/src/mindustry/game/Difficulty.java
index 3b65017ff3..7c2e20e15f 100644
--- a/core/src/io/anuke/mindustry/game/Difficulty.java
+++ b/core/src/mindustry/game/Difficulty.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.Core;
+import arc.Core;
/** Presets for time between waves. Currently unused.*/
public enum Difficulty{
diff --git a/core/src/io/anuke/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java
similarity index 95%
rename from core/src/io/anuke/mindustry/game/EventType.java
rename to core/src/mindustry/game/EventType.java
index 4459e6860c..365e8f2b7c 100644
--- a/core/src/io/anuke/mindustry/game/EventType.java
+++ b/core/src/mindustry/game/EventType.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.core.GameState.State;
-import io.anuke.mindustry.ctype.UnlockableContent;
-import io.anuke.mindustry.entities.traits.BuilderTrait;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.Tile;
+import arc.util.ArcAnnotate.*;
+import mindustry.core.GameState.State;
+import mindustry.ctype.UnlockableContent;
+import mindustry.entities.traits.BuilderTrait;
+import mindustry.entities.type.*;
+import mindustry.entities.units.*;
+import mindustry.type.*;
+import mindustry.world.Tile;
public class EventType{
@@ -28,7 +28,9 @@ public class EventType{
exclusionDeath,
suicideBomb,
openWiki,
- teamCoreDamage
+ teamCoreDamage,
+ socketConfigChanged,
+ update
}
public static class WinEvent{}
diff --git a/core/src/io/anuke/mindustry/game/Gamemode.java b/core/src/mindustry/game/Gamemode.java
similarity index 92%
rename from core/src/io/anuke/mindustry/game/Gamemode.java
rename to core/src/mindustry/game/Gamemode.java
index f448bb637f..3679ba0ad2 100644
--- a/core/src/io/anuke/mindustry/game/Gamemode.java
+++ b/core/src/mindustry/game/Gamemode.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.func.*;
-import io.anuke.mindustry.maps.*;
+import arc.*;
+import arc.func.*;
+import mindustry.maps.*;
-import static io.anuke.mindustry.Vars.waveTeam;
+import static mindustry.Vars.*;
/** Defines preset rule sets. */
public enum Gamemode{
@@ -22,7 +22,7 @@ public enum Gamemode{
attack(rules -> {
rules.unitDrops = true;
rules.attackMode = true;
- }, map -> map.teams.contains(waveTeam.ordinal())),
+ }, map -> map.teams.contains((int)state.rules.waveTeam.id)),
pvp(rules -> {
rules.pvp = true;
rules.enemyCoreBuildRadius = 600f;
diff --git a/core/src/io/anuke/mindustry/game/GlobalData.java b/core/src/mindustry/game/GlobalData.java
similarity index 93%
rename from core/src/io/anuke/mindustry/game/GlobalData.java
rename to core/src/mindustry/game/GlobalData.java
index d211683e2c..3dbf592a71 100644
--- a/core/src/io/anuke/mindustry/game/GlobalData.java
+++ b/core/src/mindustry/game/GlobalData.java
@@ -1,19 +1,19 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.util.io.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.type.*;
+import arc.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.util.io.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.ctype.*;
+import mindustry.game.EventType.*;
+import mindustry.type.*;
import java.io.*;
import java.util.zip.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Stores player unlocks. Clientside only. */
public class GlobalData{
diff --git a/core/src/io/anuke/mindustry/game/LoopControl.java b/core/src/mindustry/game/LoopControl.java
similarity index 86%
rename from core/src/io/anuke/mindustry/game/LoopControl.java
rename to core/src/mindustry/game/LoopControl.java
index e69d3bd260..8e0a9f1801 100644
--- a/core/src/io/anuke/mindustry/game/LoopControl.java
+++ b/core/src/mindustry/game/LoopControl.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.audio.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.mindustry.*;
+import arc.*;
+import arc.audio.*;
+import arc.struct.*;
+import arc.math.*;
+import arc.math.geom.*;
+import mindustry.*;
public class LoopControl{
private ObjectMap sounds = new ObjectMap<>();
@@ -53,7 +53,7 @@ public class LoopControl{
private class SoundData{
float volume;
float total;
- Vector2 sum = new Vector2();
+ Vec2 sum = new Vec2();
int soundID;
float curVolume;
diff --git a/core/src/io/anuke/mindustry/game/MusicControl.java b/core/src/mindustry/game/MusicControl.java
similarity index 89%
rename from core/src/io/anuke/mindustry/game/MusicControl.java
rename to core/src/mindustry/game/MusicControl.java
index 16a3301ae3..26a44876ac 100644
--- a/core/src/io/anuke/mindustry/game/MusicControl.java
+++ b/core/src/mindustry/game/MusicControl.java
@@ -1,16 +1,16 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.audio.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.gen.*;
+import arc.*;
+import arc.audio.*;
+import arc.struct.*;
+import arc.math.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.core.GameState.*;
+import mindustry.game.EventType.*;
+import mindustry.gen.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Controls playback of multiple music tracks.*/
public class MusicControl{
@@ -83,7 +83,7 @@ public class MusicControl{
/** Whether to play dark music.*/
private boolean isDark(){
- if(!state.teams.get(player.getTeam()).cores.isEmpty() && state.teams.get(player.getTeam()).cores.first().entity.healthf() < 0.85f){
+ if(state.teams.get(player.getTeam()).hasCore() && state.teams.get(player.getTeam()).core().healthf() < 0.85f){
//core damaged -> dark
return true;
}
@@ -94,7 +94,7 @@ public class MusicControl{
}
//dark based on enemies
- return Mathf.chance(state.enemies() / 70f + 0.1f);
+ return Mathf.chance(state.enemies / 70f + 0.1f);
}
/** Plays and fades in a music track. This must be called every frame.
diff --git a/core/src/io/anuke/mindustry/game/Objective.java b/core/src/mindustry/game/Objective.java
similarity index 77%
rename from core/src/io/anuke/mindustry/game/Objective.java
rename to core/src/mindustry/game/Objective.java
index dcd1146a10..344fd728de 100644
--- a/core/src/io/anuke/mindustry/game/Objective.java
+++ b/core/src/mindustry/game/Objective.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.game.Objectives.*;
-import io.anuke.mindustry.type.*;
+import arc.scene.ui.layout.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.game.Objectives.*;
+import mindustry.type.*;
/** Defines a specific objective for a game. */
public interface Objective{
diff --git a/core/src/io/anuke/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java
similarity index 92%
rename from core/src/io/anuke/mindustry/game/Objectives.java
rename to core/src/mindustry/game/Objectives.java
index 340346bc13..82561fe4a2 100644
--- a/core/src/io/anuke/mindustry/game/Objectives.java
+++ b/core/src/mindustry/game/Objectives.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.type.*;
+import mindustry.world.*;
/** Holds objective classes. */
public class Objectives{
diff --git a/core/src/io/anuke/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java
similarity index 83%
rename from core/src/io/anuke/mindustry/game/Rules.java
rename to core/src/mindustry/game/Rules.java
index dbafda9579..0515d2ca60 100644
--- a/core/src/io/anuke/mindustry/game/Rules.java
+++ b/core/src/mindustry/game/Rules.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.graphics.*;
+import mindustry.content.*;
+import mindustry.io.*;
+import mindustry.type.*;
+import mindustry.world.*;
/**
* Defines current rules on how the game should function.
@@ -34,6 +34,8 @@ public class Rules{
public float unitHealthMultiplier = 1f;
/** How much health players start with. */
public float playerHealthMultiplier = 1f;
+ /** How much health blocks start with. */
+ public float blockHealthMultiplier = 1f;
/** How much damage player mechs deal. */
public float playerDamageMultiplier = 1f;
/** How much damage any other units deal. */
@@ -70,6 +72,8 @@ public class Rules{
public boolean editor = false;
/** Whether the tutorial is enabled. False by default. */
public boolean tutorial = false;
+ /** Whether a gameover can happen at all. Set this to false to implement custom gameover conditions. */
+ public boolean canGameOver = true;
/** Starting items put in cores */
public Array loadout = Array.with(ItemStack.with(Items.copper, 100));
/** Blocks that cannot be placed. */
@@ -78,6 +82,12 @@ public class Rules{
public boolean lighting = false;
/** Ambient light color, used when lighting is enabled. */
public Color ambientLight = new Color(0.01f, 0.01f, 0.04f, 0.99f);
+ /** team of the player by default */
+ public Team defaultTeam = Team.sharded;
+ /** team of the enemy in waves/sectors */
+ public Team waveTeam = Team.crux;
+ /** special tags for additional info */
+ public StringMap tags = new StringMap();
/** Copies this ruleset exactly. Not very efficient at all, do not use often. */
public Rules copy(){
diff --git a/core/src/io/anuke/mindustry/game/Saves.java b/core/src/mindustry/game/Saves.java
similarity index 93%
rename from core/src/io/anuke/mindustry/game/Saves.java
rename to core/src/mindustry/game/Saves.java
index 911fb5d558..cd3389d1f0 100644
--- a/core/src/io/anuke/mindustry/game/Saves.java
+++ b/core/src/mindustry/game/Saves.java
@@ -1,25 +1,25 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.assets.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.async.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.io.SaveIO.*;
-import io.anuke.mindustry.maps.Map;
-import io.anuke.mindustry.type.*;
+import arc.*;
+import arc.assets.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.graphics.*;
+import arc.util.*;
+import arc.util.async.*;
+import mindustry.*;
+import mindustry.core.GameState.*;
+import mindustry.game.EventType.*;
+import mindustry.io.*;
+import mindustry.io.SaveIO.*;
+import mindustry.maps.Map;
+import mindustry.type.*;
import java.io.*;
import java.text.*;
import java.util.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Saves{
private Array saves = new Array<>();
diff --git a/core/src/io/anuke/mindustry/game/Schematic.java b/core/src/mindustry/game/Schematic.java
similarity index 88%
rename from core/src/io/anuke/mindustry/game/Schematic.java
rename to core/src/mindustry/game/Schematic.java
index 32395fcf54..602e579828 100644
--- a/core/src/io/anuke/mindustry/game/Schematic.java
+++ b/core/src/mindustry/game/Schematic.java
@@ -1,16 +1,16 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.collection.IntIntMap.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.mod.Mods.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.storage.*;
+import arc.struct.*;
+import arc.struct.IntIntMap.*;
+import arc.files.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.*;
+import mindustry.mod.Mods.*;
+import mindustry.type.*;
+import mindustry.world.*;
+import mindustry.world.blocks.storage.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Schematic implements Publishable, Comparable{
public final Array tiles;
diff --git a/core/src/io/anuke/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java
similarity index 91%
rename from core/src/io/anuke/mindustry/game/Schematics.java
rename to core/src/mindustry/game/Schematics.java
index 326c199d05..7a96ed672b 100644
--- a/core/src/io/anuke/mindustry/game/Schematics.java
+++ b/core/src/mindustry/game/Schematics.java
@@ -1,33 +1,33 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.assets.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.graphics.glutils.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.arc.util.io.Streams.*;
-import io.anuke.arc.util.serialization.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.traits.BuilderTrait.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.Schematic.*;
-import io.anuke.mindustry.input.*;
-import io.anuke.mindustry.input.Placement.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.production.*;
-import io.anuke.mindustry.world.blocks.storage.*;
+import arc.*;
+import arc.assets.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.graphics.gl.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.io.Streams.*;
+import arc.util.serialization.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.traits.BuilderTrait.*;
+import mindustry.game.EventType.*;
+import mindustry.game.Schematic.*;
+import mindustry.input.*;
+import mindustry.input.Placement.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
+import mindustry.world.blocks.production.*;
+import mindustry.world.blocks.storage.*;
import java.io.*;
import java.util.zip.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Handles schematics.*/
public class Schematics implements Loadable{
@@ -142,6 +142,7 @@ public class Schematics implements Loadable{
ui.showException(e);
}
}
+ all.sort();
}
public void savePreview(Schematic schematic, Fi file){
@@ -249,12 +250,13 @@ public class Schematics implements Loadable{
public void placeLoadout(Schematic schem, int x, int y){
Stile coreTile = schem.tiles.find(s -> s.block instanceof CoreBlock);
+ if(coreTile == null) throw new IllegalArgumentException("Schematic has no core tile. Exiting.");
int ox = x - coreTile.x, oy = y - coreTile.y;
schem.tiles.each(st -> {
Tile tile = world.tile(st.x + ox, st.y + oy);
if(tile == null) return;
- world.setBlock(tile, st.block, defaultTeam);
+ tile.set(st.block, state.rules.defaultTeam);
tile.rotation(st.rotation);
if(st.block.posConfig){
tile.configureAny(Pos.get(tile.x - st.x + Pos.x(st.config), tile.y - st.y + Pos.y(st.config)));
@@ -279,6 +281,7 @@ public class Schematics implements Loadable{
ui.showException(e);
Log.err(e);
}
+ all.sort();
}
public void remove(Schematic s){
@@ -291,6 +294,7 @@ public class Schematics implements Loadable{
previews.get(s).dispose();
previews.remove(s);
}
+ all.sort();
}
/** Creates a schematic from a world selection. */
@@ -339,7 +343,8 @@ public class Schematics implements Loadable{
for(int cy = oy; cy <= oy2; cy++){
Tile tile = world.ltile(cx, cy);
- if(tile != null && tile.entity != null && !counted.contains(tile.pos()) && !(tile.block() instanceof BuildBlock) && tile.entity.block.isVisible()){
+ if(tile != null && tile.entity != null && !counted.contains(tile.pos()) && !(tile.block() instanceof BuildBlock)
+ && (tile.entity.block.isVisible() || (tile.entity.block instanceof CoreBlock && Core.settings.getBool("coreselect")))){
int config = tile.entity.config();
if(tile.block().posConfig){
config = Pos.get(Pos.x(config) + offsetX, Pos.y(config) + offsetY);
@@ -368,8 +373,12 @@ public class Schematics implements Loadable{
//region IO methods
/** Loads a schematic from base64. May throw an exception. */
- public static Schematic readBase64(String schematic) throws IOException{
- return read(new ByteArrayInputStream(Base64Coder.decode(schematic)));
+ public static Schematic readBase64(String schematic){
+ try{
+ return read(new ByteArrayInputStream(Base64Coder.decode(schematic)));
+ }catch(IOException e){
+ throw new RuntimeException(e);
+ }
}
public static Schematic read(Fi file) throws IOException{
diff --git a/core/src/io/anuke/mindustry/game/SoundLoop.java b/core/src/mindustry/game/SoundLoop.java
similarity index 91%
rename from core/src/io/anuke/mindustry/game/SoundLoop.java
rename to core/src/mindustry/game/SoundLoop.java
index 3266721ed6..444ce0c857 100644
--- a/core/src/io/anuke/mindustry/game/SoundLoop.java
+++ b/core/src/mindustry/game/SoundLoop.java
@@ -1,8 +1,8 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.audio.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
+import arc.audio.*;
+import arc.math.*;
+import arc.util.*;
/** A simple class for playing a looping sound at a position.*/
public class SoundLoop{
diff --git a/core/src/io/anuke/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java
similarity index 89%
rename from core/src/io/anuke/mindustry/game/SpawnGroup.java
rename to core/src/mindustry/game/SpawnGroup.java
index 50443f153e..c0a08d2661 100644
--- a/core/src/io/anuke/mindustry/game/SpawnGroup.java
+++ b/core/src/mindustry/game/SpawnGroup.java
@@ -1,14 +1,14 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.util.serialization.Json;
-import io.anuke.arc.util.serialization.Json.Serializable;
-import io.anuke.arc.util.serialization.JsonValue;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.type.BaseUnit;
-import io.anuke.mindustry.type.*;
+import arc.util.serialization.Json;
+import arc.util.serialization.Json.Serializable;
+import arc.util.serialization.JsonValue;
+import mindustry.content.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.type.BaseUnit;
+import mindustry.type.*;
-import static io.anuke.mindustry.Vars.content;
+import static mindustry.Vars.content;
/**
* A spawn group defines spawn information for a specific type of unit, with optional extra information like
diff --git a/core/src/io/anuke/mindustry/game/Stats.java b/core/src/mindustry/game/Stats.java
similarity index 90%
rename from core/src/io/anuke/mindustry/game/Stats.java
rename to core/src/mindustry/game/Stats.java
index 3c6847712e..1962f8d3ec 100644
--- a/core/src/io/anuke/mindustry/game/Stats.java
+++ b/core/src/mindustry/game/Stats.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.annotations.Annotations.Serialize;
-import io.anuke.arc.collection.Array;
-import io.anuke.arc.collection.ObjectIntMap;
-import io.anuke.arc.math.Mathf;
-import io.anuke.mindustry.type.*;
+import mindustry.annotations.Annotations.Serialize;
+import arc.struct.Array;
+import arc.struct.ObjectIntMap;
+import arc.math.Mathf;
+import mindustry.type.*;
@Serialize
public class Stats{
diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java
new file mode 100644
index 0000000000..0e5d60fadc
--- /dev/null
+++ b/core/src/mindustry/game/Team.java
@@ -0,0 +1,102 @@
+package mindustry.game;
+
+import arc.*;
+import arc.graphics.*;
+import arc.math.*;
+import arc.struct.*;
+import arc.util.*;
+import mindustry.game.Teams.*;
+import mindustry.graphics.*;
+import mindustry.world.blocks.storage.CoreBlock.*;
+
+import static mindustry.Vars.*;
+
+public class Team implements Comparable{
+ public final byte id;
+ public final Color color;
+ public String name;
+
+ /** All 256 registered teams. */
+ private static final Team[] all = new Team[256];
+ /** The 6 base teams used in the editor. */
+ private static final Team[] baseTeams = new Team[6];
+
+ public final static Team
+ derelict = new Team(0, "derelict", Color.valueOf("4d4e58")),
+ sharded = new Team(1, "sharded", Pal.accent.cpy()),
+ crux = new Team(2, "crux", Color.valueOf("e82d2d")),
+ green = new Team(3, "green", Color.valueOf("4dd98b")),
+ purple = new Team(4, "purple", Color.valueOf("9a4bdf")),
+ blue = new Team(5, "blue", Color.royal.cpy());
+
+ static{
+ Mathf.random.setSeed(8);
+ //create the whole 256 placeholder teams
+ 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 Rand().nextLong());
+ }
+
+ public static Team get(int id){
+ return all[Pack.u((byte)id)];
+ }
+
+ /** @return the 6 base team colors. */
+ public static Team[] base(){
+ return baseTeams;
+ }
+
+ /** @return all the teams - do not use this for lookup! */
+ public static Team[] all(){
+ return all;
+ }
+
+ protected Team(int id, String name, Color color){
+ this.name = name;
+ this.color = color;
+ this.id = (byte)id;
+
+ int us = Pack.u(this.id);
+ if(us < 6) baseTeams[us] = this;
+ all[us] = this;
+ }
+
+ public Array enemies(){
+ return state.teams.enemiesOf(this);
+ }
+
+ public TeamData data(){
+ return state.teams.get(this);
+ }
+
+ public CoreEntity core(){
+ return data().core();
+ }
+
+ public boolean active(){
+ return state.teams.isActive(this);
+ }
+
+ public boolean isEnemy(Team other){
+ return state.teams.areEnemies(this, other);
+ }
+
+ public Array cores(){
+ return state.teams.cores(this);
+ }
+
+ public String localized(){
+ return Core.bundle.get("team." + name + ".name", name);
+ }
+
+ @Override
+ public int compareTo(Team team){
+ return Integer.compare(id, team.id);
+ }
+
+ @Override
+ public String toString(){
+ return name;
+ }
+}
diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java
new file mode 100644
index 0000000000..e4fa1f1ef3
--- /dev/null
+++ b/core/src/mindustry/game/Teams.java
@@ -0,0 +1,183 @@
+package mindustry.game;
+
+import arc.func.*;
+import arc.math.geom.*;
+import arc.struct.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.*;
+import mindustry.entities.type.*;
+import mindustry.world.blocks.storage.CoreBlock.*;
+
+import static mindustry.Vars.*;
+
+/** Class for various team-based utilities. */
+public class Teams{
+ /** Maps team IDs to team data. */
+ private TeamData[] map = new TeamData[256];
+ /** Active teams. */
+ private Array active = new Array<>();
+
+ public @Nullable CoreEntity closestEnemyCore(float x, float y, Team team){
+ for(TeamData data : active){
+ if(areEnemies(team, data.team)){
+ CoreEntity tile = Geometry.findClosest(x, y, data.cores);
+ if(tile != null){
+ return tile;
+ }
+ }
+ }
+ return null;
+ }
+
+ public @Nullable CoreEntity closestCore(float x, float y, Team team){
+ return Geometry.findClosest(x, y, get(team).cores);
+ }
+
+ public Array enemiesOf(Team team){
+ return get(team).enemies;
+ }
+
+ public boolean eachEnemyCore(Team team, Boolf ret){
+ for(TeamData data : active){
+ if(areEnemies(team, data.team)){
+ for(CoreEntity tile : data.cores){
+ if(ret.get(tile)){
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public void eachEnemyCore(Team team, Cons ret){
+ for(TeamData data : active){
+ if(areEnemies(team, data.team)){
+ for(TileEntity tile : data.cores){
+ ret.get(tile);
+ }
+ }
+ }
+ }
+
+ /** Returns team data by type. */
+ public TeamData get(Team team){
+ if(map[Pack.u(team.id)] == null){
+ map[Pack.u(team.id)] = new TeamData(team);
+ }
+ return map[Pack.u(team.id)];
+ }
+
+ public Array playerCores(){
+ return get(state.rules.defaultTeam).cores;
+ }
+
+ /** Do not modify! */
+ public Array cores(Team team){
+ return get(team).cores;
+ }
+
+ /** Returns whether a team is active, e.g. whether it has any cores remaining. */
+ public boolean isActive(Team team){
+ //the enemy wave team is always active
+ return get(team).active();
+ }
+
+ /** Returns whether {@param other} is an enemy of {@param #team}. */
+ public boolean areEnemies(Team team, Team other){
+ //todo what about derelict?
+ return team != other;
+ }
+
+ public boolean canInteract(Team team, Team other){
+ return team == other || other == Team.derelict;
+ }
+
+ /** Do not modify. */
+ public Array getActive(){
+ return active;
+ }
+
+ public void registerCore(CoreEntity core){
+ TeamData data = get(core.getTeam());
+ //add core if not present
+ if(!data.cores.contains(core)){
+ data.cores.add(core);
+ }
+
+ //register in active list if needed
+ if(data.active() && !active.contains(data)){
+ active.add(data);
+ updateEnemies();
+ indexer.updateTeamIndex(data.team);
+ }
+ }
+
+ public void unregisterCore(CoreEntity entity){
+ TeamData data = get(entity.getTeam());
+ //remove core
+ data.cores.remove(entity);
+ //unregister in active list
+ if(!data.active()){
+ active.remove(data);
+ updateEnemies();
+ }
+ }
+
+ private void updateEnemies(){
+ if(!active.contains(get(state.rules.waveTeam))){
+ active.add(get(state.rules.waveTeam));
+ }
+
+ for(TeamData data : active){
+ data.enemies.clear();
+ for(TeamData other : active){
+ if(areEnemies(data.team, other.team)){
+ data.enemies.add(other.team);
+ }
+ }
+ }
+ }
+
+ public class TeamData{
+ public final Array cores = new Array<>();
+ public final Array enemies = new Array<>();
+ public final Team team;
+ public Queue brokenBlocks = new Queue<>();
+
+ public TeamData(Team team){
+ this.team = team;
+ }
+
+ public boolean active(){
+ return (team == state.rules.waveTeam && state.rules.waves) || cores.size > 0;
+ }
+
+ public boolean hasCore(){
+ return cores.size > 0;
+ }
+
+ public boolean noCores(){
+ return cores.isEmpty();
+ }
+
+ public CoreEntity core(){
+ return cores.first();
+ }
+ }
+
+ /** Represents a block made by this team that was destroyed somewhere on the map.
+ * This does not include deconstructed blocks.*/
+ public static class BrokenBlock{
+ public final short x, y, rotation, block;
+ public final int config;
+
+ public BrokenBlock(short x, short y, short rotation, short block, int config){
+ this.x = x;
+ this.y = y;
+ this.rotation = rotation;
+ this.block = block;
+ this.config = config;
+ }
+ }
+}
diff --git a/core/src/io/anuke/mindustry/game/Tutorial.java b/core/src/mindustry/game/Tutorial.java
similarity index 87%
rename from core/src/io/anuke/mindustry/game/Tutorial.java
rename to core/src/mindustry/game/Tutorial.java
index 99d45d3c2f..4b344bc945 100644
--- a/core/src/io/anuke/mindustry/game/Tutorial.java
+++ b/core/src/mindustry/game/Tutorial.java
@@ -1,21 +1,22 @@
-package io.anuke.mindustry.game;
+package mindustry.game;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.scene.*;
+import arc.scene.ui.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.graphics.*;
+import mindustry.type.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Handles tutorial state. */
public class Tutorial{
@@ -161,11 +162,11 @@ public class Tutorial{
},
withdraw(() -> event("withdraw")){
void begin(){
- state.teams.get(defaultTeam).cores.first().entity.items.add(Items.copper, 10);
+ state.teams.playerCores().first().items.add(Items.copper, 10);
}
},
deposit(() -> event("deposit")),
- waves(() -> state.wave > 2 && state.enemies() <= 0 && !spawner.isSpawning()){
+ waves(() -> state.wave > 2 && state.enemies <= 0 && !spawner.isSpawning()){
void begin(){
state.rules.waveTimer = true;
logic.runWave();
@@ -239,18 +240,18 @@ public class Tutorial{
//utility
static void placeBlocks(){
- Tile core = state.teams.get(defaultTeam).cores.first();
+ TileEntity core = state.teams.playerCores().first();
for(int i = 0; i < blocksToBreak; i++){
- world.removeBlock(world.ltile(core.x + blockOffset, core.y + i));
- world.tile(core.x + blockOffset, core.y + i).setBlock(Blocks.scrapWall, defaultTeam);
+ world.ltile(core.tile.x + blockOffset, core.tile.y + i).remove();
+ world.tile(core.tile.x + blockOffset, core.tile.y + i).setBlock(Blocks.scrapWall, state.rules.defaultTeam);
}
}
static boolean blocksBroken(){
- Tile core = state.teams.get(defaultTeam).cores.first();
+ TileEntity core = state.teams.playerCores().first();
for(int i = 0; i < blocksToBreak; i++){
- if(world.tile(core.x + blockOffset, core.y + i).block() == Blocks.scrapWall){
+ if(world.tile(core.tile.x + blockOffset, core.tile.y + i).block() == Blocks.scrapWall){
return false;
}
}
@@ -270,7 +271,7 @@ public class Tutorial{
}
static int item(Item item){
- return state.teams.get(defaultTeam).cores.isEmpty() ? 0 : state.teams.get(defaultTeam).cores.first().entity.items.get(item);
+ return state.rules.defaultTeam.data().noCores() ? 0 : state.rules.defaultTeam.core().items.get(item);
}
static boolean toggled(String name){
diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java
similarity index 94%
rename from core/src/io/anuke/mindustry/graphics/BlockRenderer.java
rename to core/src/mindustry/graphics/BlockRenderer.java
index 8912745633..41274e0349 100644
--- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java
+++ b/core/src/mindustry/graphics/BlockRenderer.java
@@ -1,22 +1,22 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.Texture.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.graphics.glutils.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.Teams.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
+import arc.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.graphics.Texture.*;
+import arc.graphics.g2d.*;
+import arc.graphics.gl.*;
+import arc.math.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.game.EventType.*;
+import mindustry.game.Teams.*;
+import mindustry.ui.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
-import static io.anuke.arc.Core.camera;
-import static io.anuke.mindustry.Vars.*;
+import static arc.Core.camera;
+import static mindustry.Vars.*;
public class BlockRenderer implements Disposable{
private final static int initialRequests = 32 * 32;
diff --git a/core/src/io/anuke/mindustry/graphics/Bloom.java b/core/src/mindustry/graphics/Bloom.java
similarity index 76%
rename from core/src/io/anuke/mindustry/graphics/Bloom.java
rename to core/src/mindustry/graphics/Bloom.java
index 91be9c210e..1b7b8f89f9 100644
--- a/core/src/io/anuke/mindustry/graphics/Bloom.java
+++ b/core/src/mindustry/graphics/Bloom.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.Pixmap.Format;
-import io.anuke.arc.graphics.VertexAttributes.Usage;
-import io.anuke.arc.graphics.glutils.FrameBuffer;
-import io.anuke.arc.graphics.glutils.Shader;
+import arc.Core;
+import arc.graphics.*;
+import arc.graphics.Pixmap.Format;
+import arc.graphics.VertexAttributes.Usage;
+import arc.graphics.gl.FrameBuffer;
+import arc.graphics.gl.Shader;
/**
* Bloomlib allow easy but efficient way to add bloom effect as post process
@@ -14,7 +14,6 @@ import io.anuke.arc.graphics.glutils.Shader;
* @author kalle_h
*/
public class Bloom{
-
/**
* To use implement bloom more like a glow. Texture alpha channel can be
* used as mask which part are glowing and which are not. see more info at:
@@ -61,10 +60,8 @@ public class Bloom{
*/
public void resume(){
bloomShader.begin();
- {
- bloomShader.setUniformi("u_texture0", 0);
- bloomShader.setUniformi("u_texture1", 1);
- }
+ bloomShader.setUniformi("u_texture0", 0);
+ bloomShader.setUniformi("u_texture1", 1);
bloomShader.end();
setSize(w, h);
@@ -83,13 +80,11 @@ public class Bloom{
* blending = false 32bits = true
*/
public Bloom(){
- initialize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4,
- null, false, false, true);
+ initialize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4, null, false, false, true);
}
public Bloom(boolean useBlending){
- initialize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4,
- null, false, useBlending, true);
+ initialize(Core.graphics.getWidth() / 4, Core.graphics.getHeight() / 4, null, false, useBlending, true);
}
/**
@@ -105,8 +100,7 @@ public class Bloom{
* and only do blooming on certain objects param use32bitFBO does
* fbo use higher precision than 16bits.
*/
- public Bloom(int FBO_W, int FBO_H, boolean hasDepth, boolean useBlending,
- boolean use32bitFBO){
+ public Bloom(int FBO_W, int FBO_H, boolean hasDepth, boolean useBlending, boolean use32bitFBO){
initialize(FBO_W, FBO_H, null, hasDepth, useBlending, use32bitFBO);
}
@@ -129,18 +123,14 @@ public class Bloom{
* and only do blooming on certain objects param use32bitFBO does
* fbo use higher precision than 16bits.
*/
- public Bloom(int FBO_W, int FBO_H, FrameBuffer sceneIsCapturedHere,
- boolean useBlending, boolean use32bitFBO){
-
- initialize(FBO_W, FBO_H, sceneIsCapturedHere, false, useBlending,
- use32bitFBO);
+ public Bloom(int FBO_W, int FBO_H, FrameBuffer sceneIsCapturedHere, boolean useBlending, boolean use32bitFBO){
+ initialize(FBO_W, FBO_H, sceneIsCapturedHere, false, useBlending, use32bitFBO);
disposeFBO = false;
}
- private void initialize(int FBO_W, int FBO_H, FrameBuffer fbo,
- boolean hasDepth, boolean useBlending, boolean use32bitFBO){
+ private void initialize(int FBO_W, int FBO_H, FrameBuffer fbo, boolean hasDepth, boolean useBlending, boolean use32bitFBO){
blending = useBlending;
- Format format = null;
+ Format format;
if(use32bitFBO){
if(useBlending){
@@ -157,8 +147,7 @@ public class Bloom{
}
}
if(fbo == null){
- frameBuffer = new FrameBuffer(format, Core.graphics.getWidth(),
- Core.graphics.getHeight(), hasDepth);
+ frameBuffer = new FrameBuffer(format, Core.graphics.getWidth(), Core.graphics.getHeight(), hasDepth);
}else{
frameBuffer = fbo;
}
@@ -190,10 +179,8 @@ public class Bloom{
setThreshold(0.5f);
bloomShader.begin();
- {
- bloomShader.setUniformi("u_texture0", 0);
- bloomShader.setUniformi("u_texture1", 1);
- }
+ bloomShader.setUniformi("u_texture0", 0);
+ bloomShader.setUniformi("u_texture1", 1);
bloomShader.end();
}
@@ -219,8 +206,8 @@ public class Bloom{
if(!capturing){
capturing = true;
frameBuffer.begin();
- Core.gl.glClearColor(r, g, b, a);
- Core.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+ Gl.clearColor(r, g, b, a);
+ Gl.clear(Gl.colorBufferBit);
}
}
@@ -252,23 +239,22 @@ public class Bloom{
frameBuffer.end();
}
- Core.gl.glDisable(GL20.GL_BLEND);
- Core.gl.glDisable(GL20.GL_DEPTH_TEST);
- Core.gl.glDepthMask(false);
+ Gl.disable(Gl.blend);
+ Gl.disable(Gl.depthTest);
+ Gl.depthMask(false);
gaussianBlur();
if(blending){
- Core.gl.glEnable(GL20.GL_BLEND);
- Core.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
+ Gl.enable(Gl.blend);
+ Gl.blendFunc(Gl.srcAlpha, Gl.oneMinusSrcAlpha);
}
pingPongTex1.bind(1);
original.bind(0);
+
bloomShader.begin();
- {
- fullScreenQuad.render(bloomShader, GL20.GL_TRIANGLE_FAN);
- }
+ fullScreenQuad.render(bloomShader, Gl.triangleFan);
bloomShader.end();
}
@@ -279,15 +265,9 @@ public class Bloom{
original.bind(0);
pingPongBuffer1.begin();
- {
- tresholdShader.begin();
- {
- // tresholdShader.setUniformi("u_texture0", 0);
- fullScreenQuad.render(tresholdShader, GL20.GL_TRIANGLE_FAN, 0,
- 4);
- }
- tresholdShader.end();
- }
+ tresholdShader.begin();
+ fullScreenQuad.render(tresholdShader, Gl.triangleFan, 0, 4);
+ tresholdShader.end();
pingPongBuffer1.end();
for(int i = 0; i < blurPasses; i++){
@@ -296,30 +276,19 @@ public class Bloom{
// horizontal
pingPongBuffer2.begin();
- {
- blurShader.begin();
- {
- blurShader.setUniformf("dir", 1f, 0f);
- fullScreenQuad.render(blurShader, GL20.GL_TRIANGLE_FAN, 0,
- 4);
- }
- blurShader.end();
- }
+ blurShader.begin();
+ blurShader.setUniformf("dir", 1f, 0f);
+ fullScreenQuad.render(blurShader, Gl.triangleFan, 0, 4);
+ blurShader.end();
pingPongBuffer2.end();
pingPongTex2.bind(0);
// vertical
pingPongBuffer1.begin();
- {
- blurShader.begin();
- {
- blurShader.setUniformf("dir", 0f, 1f);
-
- fullScreenQuad.render(blurShader, GL20.GL_TRIANGLE_FAN, 0,
- 4);
- }
- blurShader.end();
- }
+ blurShader.begin();
+ blurShader.setUniformf("dir", 0f, 1f);
+ fullScreenQuad.render(blurShader, Gl.triangleFan, 0, 4);
+ blurShader.end();
pingPongBuffer1.end();
}
}
@@ -334,9 +303,7 @@ public class Bloom{
public void setBloomIntesity(float intensity){
bloomIntensity = intensity;
bloomShader.begin();
- {
- bloomShader.setUniformf("BloomIntensity", intensity);
- }
+ bloomShader.setUniformf("BloomIntensity", intensity);
bloomShader.end();
}
@@ -350,9 +317,7 @@ public class Bloom{
public void setOriginalIntesity(float intensity){
originalIntensity = intensity;
bloomShader.begin();
- {
- bloomShader.setUniformf("OriginalIntensity", intensity);
- }
+ bloomShader.setUniformf("OriginalIntensity", intensity);
bloomShader.end();
}
@@ -364,10 +329,7 @@ public class Bloom{
public void setThreshold(float threshold){
this.threshold = threshold;
tresholdShader.begin();
- {
- tresholdShader.setUniformf("threshold", threshold,
- 1f / (1 - threshold));
- }
+ tresholdShader.setUniformf("threshold", threshold, 1f / (1 - threshold));
tresholdShader.end();
}
@@ -384,8 +346,7 @@ public class Bloom{
*/
public void dispose(){
try{
- if(disposeFBO)
- frameBuffer.dispose();
+ if(disposeFBO) frameBuffer.dispose();
fullScreenQuad.dispose();
@@ -395,16 +356,17 @@ public class Bloom{
blurShader.dispose();
bloomShader.dispose();
tresholdShader.dispose();
- }catch(Exception ignored){
+ }catch(Throwable ignored){
}
}
private static Mesh createFullScreenQuad(){
float[] verts = {-1, -1, 0, 0, 1, -1, 1, 0, 1, 1, 1, 1, -1, 1, 0, 1};
- Mesh tmpMesh = new Mesh(true, 4, 0, new VertexAttribute(
- Usage.Position, 2, "a_position"), new VertexAttribute(
- Usage.TextureCoordinates, 2, "a_texCoord0"));
+ Mesh tmpMesh = new Mesh(true, 4, 0,
+ new VertexAttribute(Usage.position, 2, "a_position"),
+ new VertexAttribute(Usage.textureCoordinates, 2, "a_texCoord0")
+ );
tmpMesh.setVertices(verts);
return tmpMesh;
diff --git a/core/src/io/anuke/mindustry/graphics/CacheLayer.java b/core/src/mindustry/graphics/CacheLayer.java
similarity index 81%
rename from core/src/io/anuke/mindustry/graphics/CacheLayer.java
rename to core/src/mindustry/graphics/CacheLayer.java
index 6b5c66683b..b91ca5b110 100644
--- a/core/src/io/anuke/mindustry/graphics/CacheLayer.java
+++ b/core/src/mindustry/graphics/CacheLayer.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.graphics.glutils.Shader;
+import arc.Core;
+import arc.graphics.Color;
+import arc.graphics.g2d.Draw;
+import arc.graphics.gl.Shader;
-import static io.anuke.arc.Core.camera;
-import static io.anuke.mindustry.Vars.renderer;
+import static arc.Core.camera;
+import static mindustry.Vars.renderer;
public enum CacheLayer{
water{
diff --git a/core/src/io/anuke/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java
similarity index 92%
rename from core/src/io/anuke/mindustry/graphics/Drawf.java
rename to core/src/mindustry/graphics/Drawf.java
index 036db1eca0..2fd9b48087 100644
--- a/core/src/io/anuke/mindustry/graphics/Drawf.java
+++ b/core/src/mindustry/graphics/Drawf.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.util.*;
+import arc.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.util.*;
-import static io.anuke.mindustry.Vars.renderer;
+import static mindustry.Vars.renderer;
public class Drawf{
diff --git a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java b/core/src/mindustry/graphics/FloorRenderer.java
similarity index 90%
rename from core/src/io/anuke/mindustry/graphics/FloorRenderer.java
rename to core/src/mindustry/graphics/FloorRenderer.java
index 58d022f579..6033b4ff03 100644
--- a/core/src/io/anuke/mindustry/graphics/FloorRenderer.java
+++ b/core/src/mindustry/graphics/FloorRenderer.java
@@ -1,22 +1,19 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.Core;
-import io.anuke.arc.Events;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.collection.IntSet.IntSetIterator;
-import io.anuke.arc.graphics.Camera;
-import io.anuke.arc.graphics.GL20;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.game.EventType.WorldLoadEvent;
-import io.anuke.mindustry.world.Tile;
-import io.anuke.mindustry.world.blocks.Floor;
+import arc.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.struct.*;
+import arc.struct.IntSet.*;
+import arc.util.*;
+import mindustry.game.EventType.*;
+import mindustry.world.*;
+import mindustry.world.blocks.*;
-import java.util.Arrays;
+import java.util.*;
-import static io.anuke.mindustry.Vars.tilesize;
-import static io.anuke.mindustry.Vars.world;
+import static mindustry.Vars.*;
public class FloorRenderer implements Disposable{
private final static int chunksize = 64;
@@ -104,7 +101,7 @@ public class FloorRenderer implements Disposable{
cbatch.setProjection(Core.camera.projection());
cbatch.beginDraw();
- Core.gl.glEnable(GL20.GL_BLEND);
+ Gl.enable(Gl.blend);
}
public void endDraw(){
diff --git a/core/src/io/anuke/mindustry/graphics/IndexedRenderer.java b/core/src/mindustry/graphics/IndexedRenderer.java
similarity index 80%
rename from core/src/io/anuke/mindustry/graphics/IndexedRenderer.java
rename to core/src/mindustry/graphics/IndexedRenderer.java
index fe7a39b51d..cb42b6fe0b 100644
--- a/core/src/io/anuke/mindustry/graphics/IndexedRenderer.java
+++ b/core/src/mindustry/graphics/IndexedRenderer.java
@@ -1,15 +1,11 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.VertexAttributes.Usage;
-import io.anuke.arc.graphics.g2d.BatchShader;
-import io.anuke.arc.graphics.g2d.TextureRegion;
-import io.anuke.arc.graphics.glutils.Shader;
-import io.anuke.arc.math.Mathf;
-import io.anuke.arc.math.Matrix3;
-import io.anuke.arc.util.Disposable;
-import io.anuke.arc.util.Strings;
+import arc.graphics.*;
+import arc.graphics.VertexAttributes.*;
+import arc.graphics.g2d.*;
+import arc.graphics.gl.*;
+import arc.math.*;
+import arc.util.*;
//TODO this class is a trainwreck, remove it
public class IndexedRenderer implements Disposable{
@@ -17,18 +13,18 @@ public class IndexedRenderer implements Disposable{
private Shader program = new Shader(
Strings.join("\n",
- "attribute vec4 " + Shader.POSITION_ATTRIBUTE + ";",
- "attribute vec4 " + Shader.COLOR_ATTRIBUTE + ";",
- "attribute vec2 " + Shader.TEXCOORD_ATTRIBUTE + "0;",
+ "attribute vec4 " + Shader.positionAttribute + ";",
+ "attribute vec4 " + Shader.colorAttribute + ";",
+ "attribute vec2 " + Shader.texcoordAttribute + "0;",
"uniform mat4 u_projTrans;",
"varying vec4 v_color;",
"varying vec2 v_texCoords;",
"",
"void main(){",
- " v_color = " + Shader.COLOR_ATTRIBUTE + ";",
+ " v_color = " + Shader.colorAttribute + ";",
" v_color.a = v_color.a * (255.0/254.0);",
- " v_texCoords = " + Shader.TEXCOORD_ATTRIBUTE + "0;",
- " gl_Position = u_projTrans * " + Shader.POSITION_ATTRIBUTE + ";",
+ " v_texCoords = " + Shader.texcoordAttribute + "0;",
+ " gl_Position = u_projTrans * " + Shader.positionAttribute + ";",
"}"),
Strings.join("\n",
"#ifdef GL_ES",
@@ -50,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){
@@ -60,7 +56,7 @@ public class IndexedRenderer implements Disposable{
}
public void render(Texture texture){
- Core.gl.glEnable(GL20.GL_BLEND);
+ Gl.enable(Gl.blend);
updateMatrix();
@@ -71,7 +67,7 @@ public class IndexedRenderer implements Disposable{
program.setUniformMatrix4("u_projTrans", BatchShader.copyTransform(combined));
program.setUniformi("u_texture", 0);
- mesh.render(program, GL20.GL_TRIANGLES, 0, vertices.length / vsize);
+ mesh.render(program, Gl.triangles, 0, vertices.length / vsize);
program.end();
}
@@ -214,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;
}
@@ -226,9 +222,9 @@ public class IndexedRenderer implements Disposable{
if(mesh != null) mesh.dispose();
mesh = new Mesh(true, 6 * sprites, 0,
- new VertexAttribute(Usage.Position, 2, "a_position"),
- new VertexAttribute(Usage.ColorPacked, 4, "a_color"),
- new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoord0"));
+ new VertexAttribute(Usage.position, 2, "a_position"),
+ new VertexAttribute(Usage.colorPacked, 4, "a_color"),
+ new VertexAttribute(Usage.textureCoordinates, 2, "a_texCoord0"));
vertices = new float[6 * sprites * vsize];
mesh.setVertices(vertices);
}
diff --git a/core/src/io/anuke/mindustry/graphics/Layer.java b/core/src/mindustry/graphics/Layer.java
similarity index 89%
rename from core/src/io/anuke/mindustry/graphics/Layer.java
rename to core/src/mindustry/graphics/Layer.java
index 1ba9c76ec6..f731452aa8 100644
--- a/core/src/io/anuke/mindustry/graphics/Layer.java
+++ b/core/src/mindustry/graphics/Layer.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
public enum Layer{
/** Base block layer. */
diff --git a/core/src/io/anuke/mindustry/graphics/LightRenderer.java b/core/src/mindustry/graphics/LightRenderer.java
similarity index 92%
rename from core/src/io/anuke/mindustry/graphics/LightRenderer.java
rename to core/src/mindustry/graphics/LightRenderer.java
index 19ab2ff016..0c0f94e02c 100644
--- a/core/src/io/anuke/mindustry/graphics/LightRenderer.java
+++ b/core/src/mindustry/graphics/LightRenderer.java
@@ -1,15 +1,15 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.graphics.glutils.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
+import arc.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.graphics.gl.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
-import static io.anuke.mindustry.Vars.state;
+import static mindustry.Vars.state;
/** Renders overlay lights. Client only. */
public class LightRenderer{
@@ -63,7 +63,7 @@ public class LightRenderer{
float v2 = lmid.getV();
- Vector2 v1 = Tmp.v1.trnsExact(rot + 90f, stroke);
+ Vec2 v1 = Tmp.v1.trnsExact(rot + 90f, stroke);
float lx1 = x - v1.x, ly1 = y - v1.y,
lx2 = x + v1.x, ly2 = y + v1.y,
lx3 = x2 + v1.x, ly3 = y2 + v1.y,
@@ -100,7 +100,7 @@ public class LightRenderer{
Draw.vert(ledge.getTexture(), vertices, 0, vertices.length);
- Vector2 v3 = Tmp.v2.trnsExact(rot, stroke);
+ Vec2 v3 = Tmp.v2.trnsExact(rot, stroke);
u = ledge.getU();
v = ledge.getV2();
diff --git a/core/src/io/anuke/mindustry/graphics/MenuRenderer.java b/core/src/mindustry/graphics/MenuRenderer.java
similarity index 92%
rename from core/src/io/anuke/mindustry/graphics/MenuRenderer.java
rename to core/src/mindustry/graphics/MenuRenderer.java
index 89078c92e9..099604bd6b 100644
--- a/core/src/io/anuke/mindustry/graphics/MenuRenderer.java
+++ b/core/src/mindustry/graphics/MenuRenderer.java
@@ -1,26 +1,26 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.Core;
-import io.anuke.arc.collection.Array;
-import io.anuke.arc.func.Floatc2;
-import io.anuke.arc.graphics.Camera;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.graphics.glutils.FrameBuffer;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.ui.layout.Scl;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.noise.RidgedPerlin;
-import io.anuke.arc.util.noise.Simplex;
-import io.anuke.mindustry.content.Blocks;
-import io.anuke.mindustry.content.UnitTypes;
-import io.anuke.mindustry.type.UnitType;
-import io.anuke.mindustry.ui.Cicon;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.Floor;
-import io.anuke.mindustry.world.blocks.OreBlock;
+import arc.Core;
+import arc.struct.Array;
+import arc.func.Floatc2;
+import arc.graphics.Camera;
+import arc.graphics.Color;
+import arc.graphics.g2d.*;
+import arc.graphics.gl.FrameBuffer;
+import arc.math.*;
+import arc.scene.ui.layout.Scl;
+import arc.util.*;
+import arc.util.noise.RidgedPerlin;
+import arc.util.noise.Simplex;
+import mindustry.content.Blocks;
+import mindustry.content.UnitTypes;
+import mindustry.type.UnitType;
+import mindustry.ui.Cicon;
+import mindustry.world.*;
+import mindustry.world.blocks.Floor;
+import mindustry.world.blocks.OreBlock;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class MenuRenderer implements Disposable{
private static final float darkness = 0.3f;
@@ -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/io/anuke/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java
similarity index 79%
rename from core/src/io/anuke/mindustry/graphics/MinimapRenderer.java
rename to core/src/mindustry/graphics/MinimapRenderer.java
index 568884d609..c34bb246ec 100644
--- a/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java
+++ b/core/src/mindustry/graphics/MinimapRenderer.java
@@ -1,23 +1,24 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.Pixmap.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.pooling.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import arc.struct.*;
+import arc.graphics.*;
+import arc.graphics.Pixmap.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.pooling.*;
+import mindustry.entities.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.io.*;
+import mindustry.ui.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class MinimapRenderer implements Disposable{
private static final float baseSize = 16f;
@@ -25,7 +26,7 @@ public class MinimapRenderer implements Disposable{
private Pixmap pixmap;
private Texture texture;
private TextureRegion region;
- private Rectangle rect = new Rectangle();
+ private Rect rect = new Rect();
private float zoom = 4;
public MinimapRenderer(){
@@ -42,7 +43,7 @@ public class MinimapRenderer implements Disposable{
return pixmap;
}
- public Texture getTexture(){
+ public @Nullable Texture getTexture(){
return texture;
}
@@ -70,8 +71,13 @@ public class MinimapRenderer implements Disposable{
region = new TextureRegion(texture);
}
- public void drawEntities(float x, float y, float w, float h, boolean withLabels){
- updateUnitArray();
+ public void drawEntities(float x, float y, float w, float h, float scaling, boolean withLabels){
+ if(!withLabels){
+ updateUnitArray();
+ }else{
+ units.clear();
+ Units.all(units::add);
+ }
float sz = baseSize * zoom;
float dx = (Core.camera.position.x / tilesize);
@@ -82,8 +88,14 @@ public class MinimapRenderer implements Disposable{
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize);
for(Unit unit : units){
- float rx = (unit.x - rect.x) / rect.width * w;
- float ry = (unit.y - rect.y) / rect.width * h;
+ if(unit.isDead()) continue;
+ float rx = !withLabels ? (unit.x - rect.x) / rect.width * w : unit.x / (world.width() * tilesize) * w;
+ float ry = !withLabels ? (unit.y - rect.y) / rect.width * h : unit.y / (world.height() * tilesize) * h;
+
+ Draw.mixcol(unit.getTeam().color, 1f);
+ float scale = Scl.scl(1f) / 2f * scaling * 32f;
+ Draw.rect(unit.getIconRegion(), x + rx, y + ry, scale, scale, unit.rotation - 90);
+ Draw.reset();
if(withLabels && unit instanceof Player){
Player pl = (Player) unit;
@@ -92,19 +104,16 @@ public class MinimapRenderer implements Disposable{
drawLabel(x + rx, y + ry, pl.name, unit.getTeam().color);
}
}
-
- Draw.color(unit.getTeam().color);
- Fill.rect(x + rx, y + ry, Scl.scl(baseSize / 2f), Scl.scl(baseSize / 2f));
}
- Draw.color();
+ Draw.reset();
}
public void drawEntities(float x, float y, float w, float h){
- drawEntities(x, y, w, h, true);
+ drawEntities(x, y, w, h, 1f, true);
}
- public TextureRegion getRegion(){
+ public @Nullable TextureRegion getRegion(){
if(texture == null) return null;
float sz = Mathf.clamp(baseSize * zoom, baseSize, Math.min(world.width(), world.height()));
diff --git a/core/src/io/anuke/mindustry/graphics/MultiPacker.java b/core/src/mindustry/graphics/MultiPacker.java
similarity index 89%
rename from core/src/io/anuke/mindustry/graphics/MultiPacker.java
rename to core/src/mindustry/graphics/MultiPacker.java
index 578aa677ba..a2a7d476fe 100644
--- a/core/src/io/anuke/mindustry/graphics/MultiPacker.java
+++ b/core/src/mindustry/graphics/MultiPacker.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.Pixmap.*;
-import io.anuke.arc.graphics.Texture.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.util.*;
+import arc.graphics.*;
+import arc.graphics.Pixmap.*;
+import arc.graphics.Texture.*;
+import arc.graphics.g2d.*;
+import arc.util.*;
public class MultiPacker implements Disposable{
private PixmapPacker[] packers = new PixmapPacker[PageType.all.length];
diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java
similarity index 76%
rename from core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
rename to core/src/mindustry/graphics/OverlayRenderer.java
index d33d310b88..6cb4348c23 100644
--- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java
+++ b/core/src/mindustry/graphics/OverlayRenderer.java
@@ -1,29 +1,28 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.input.*;
-import io.anuke.mindustry.type.Category;
-import io.anuke.mindustry.ui.Cicon;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.units.MechPad;
-import io.anuke.mindustry.world.meta.BlockFlag;
+import arc.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.type.*;
+import mindustry.input.*;
+import mindustry.type.*;
+import mindustry.ui.*;
+import mindustry.world.*;
+import mindustry.world.blocks.units.*;
+import mindustry.world.meta.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class OverlayRenderer{
private static final float indicatorLength = 14f;
private static final float spawnerMargin = tilesize*11f;
- private static final Rectangle rect = new Rectangle();
+ private static final Rect rect = new Rect();
private float buildFadeTime;
public void drawBottom(){
@@ -65,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);
@@ -95,17 +94,15 @@ public class OverlayRenderer{
Lines.stroke(buildFadeTime * 2f);
if(buildFadeTime > 0.005f){
- for(Team enemy : state.teams.enemiesOf(player.getTeam())){
- for(Tile core : state.teams.get(enemy).cores){
- float dst = Mathf.dst(player.x, player.y, core.drawx(), core.drawy());
- if(dst < state.rules.enemyCoreBuildRadius * 1.5f){
- Draw.color(Color.darkGray);
- Lines.circle(core.drawx(), core.drawy() - 2, state.rules.enemyCoreBuildRadius);
- Draw.color(Pal.accent, enemy.color, 0.5f + Mathf.absin(Time.time(), 10f, 0.5f));
- Lines.circle(core.drawx(), core.drawy(), state.rules.enemyCoreBuildRadius);
- }
+ state.teams.eachEnemyCore(player.getTeam(), core -> {
+ float dst = core.dst(player);
+ if(dst < state.rules.enemyCoreBuildRadius * 2.2f){
+ Draw.color(Color.darkGray);
+ Lines.circle(core.x, core.y - 2, state.rules.enemyCoreBuildRadius);
+ Draw.color(Pal.accent, core.getTeam().color, 0.5f + Mathf.absin(Time.time(), 10f, 0.5f));
+ Lines.circle(core.x, core.y, state.rules.enemyCoreBuildRadius);
}
- }
+ });
}
Lines.stroke(2f);
@@ -122,7 +119,7 @@ public class OverlayRenderer{
//draw selected block
if(input.block == null && !Core.scene.hasMouse()){
- Vector2 vec = Core.input.mouseWorld(input.getMouseX(), input.getMouseY());
+ Vec2 vec = Core.input.mouseWorld(input.getMouseX(), input.getMouseY());
Tile tile = world.ltileWorld(vec.x, vec.y);
if(tile != null && tile.block() != Blocks.air && tile.getTeam() == player.getTeam()){
@@ -139,7 +136,7 @@ public class OverlayRenderer{
//draw selection overlay when dropping item
if(input.isDroppingItem()){
- Vector2 v = Core.input.mouseWorld(input.getMouseX(), input.getMouseY());
+ Vec2 v = Core.input.mouseWorld(input.getMouseX(), input.getMouseY());
float size = 8;
Draw.rect(player.item().item.icon(Cicon.medium), v.x, v.y, size, size);
Draw.color(Pal.accent);
diff --git a/core/src/io/anuke/mindustry/graphics/Pal.java b/core/src/mindustry/graphics/Pal.java
similarity index 97%
rename from core/src/io/anuke/mindustry/graphics/Pal.java
rename to core/src/mindustry/graphics/Pal.java
index 2c46e726f7..fe6a0b6d24 100644
--- a/core/src/io/anuke/mindustry/graphics/Pal.java
+++ b/core/src/mindustry/graphics/Pal.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.graphics.Color;
+import arc.graphics.Color;
public class Pal{
public static final Color
diff --git a/core/src/io/anuke/mindustry/graphics/Pixelator.java b/core/src/mindustry/graphics/Pixelator.java
similarity index 80%
rename from core/src/io/anuke/mindustry/graphics/Pixelator.java
rename to core/src/mindustry/graphics/Pixelator.java
index 587ce3077a..f746ca69e3 100644
--- a/core/src/io/anuke/mindustry/graphics/Pixelator.java
+++ b/core/src/mindustry/graphics/Pixelator.java
@@ -1,17 +1,17 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.Blending;
-import io.anuke.arc.graphics.Texture.TextureFilter;
-import io.anuke.arc.graphics.g2d.Draw;
-import io.anuke.arc.graphics.glutils.FrameBuffer;
-import io.anuke.arc.util.Disposable;
-import io.anuke.mindustry.entities.type.Player;
+import arc.Core;
+import arc.graphics.Blending;
+import arc.graphics.Texture.TextureFilter;
+import arc.graphics.g2d.Draw;
+import arc.graphics.gl.FrameBuffer;
+import arc.util.Disposable;
+import mindustry.entities.type.Player;
-import static io.anuke.arc.Core.camera;
-import static io.anuke.arc.Core.graphics;
-import static io.anuke.mindustry.Vars.playerGroup;
-import static io.anuke.mindustry.Vars.renderer;
+import static arc.Core.camera;
+import static arc.Core.graphics;
+import static mindustry.Vars.playerGroup;
+import static mindustry.Vars.renderer;
public class Pixelator implements Disposable{
private FrameBuffer buffer = new FrameBuffer(2, 2);
diff --git a/core/src/io/anuke/mindustry/graphics/Shaders.java b/core/src/mindustry/graphics/Shaders.java
similarity index 94%
rename from core/src/io/anuke/mindustry/graphics/Shaders.java
rename to core/src/mindustry/graphics/Shaders.java
index 008d7da637..7c37935352 100644
--- a/core/src/io/anuke/mindustry/graphics/Shaders.java
+++ b/core/src/mindustry/graphics/Shaders.java
@@ -1,12 +1,12 @@
-package io.anuke.mindustry.graphics;
+package mindustry.graphics;
-import io.anuke.arc.Core;
-import io.anuke.arc.graphics.Color;
-import io.anuke.arc.graphics.g2d.TextureRegion;
-import io.anuke.arc.graphics.glutils.Shader;
-import io.anuke.arc.scene.ui.layout.Scl;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.arc.util.Time;
+import arc.Core;
+import arc.graphics.Color;
+import arc.graphics.g2d.TextureRegion;
+import arc.graphics.gl.Shader;
+import arc.scene.ui.layout.Scl;
+import arc.util.ArcAnnotate.*;
+import arc.util.Time;
public class Shaders{
public static Shadow shadow;
diff --git a/core/src/io/anuke/mindustry/input/Binding.java b/core/src/mindustry/input/Binding.java
similarity index 90%
rename from core/src/io/anuke/mindustry/input/Binding.java
rename to core/src/mindustry/input/Binding.java
index 9134506735..664c30a2cb 100644
--- a/core/src/io/anuke/mindustry/input/Binding.java
+++ b/core/src/mindustry/input/Binding.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.input;
+package mindustry.input;
-import io.anuke.arc.Application.ApplicationType;
-import io.anuke.arc.Core;
-import io.anuke.arc.KeyBinds.*;
-import io.anuke.arc.input.InputDevice.DeviceType;
-import io.anuke.arc.input.KeyCode;
+import arc.Application.ApplicationType;
+import arc.Core;
+import arc.KeyBinds.*;
+import arc.input.InputDevice.DeviceType;
+import arc.input.KeyCode;
public enum Binding implements KeyBind{
move_x(new Axis(KeyCode.A, KeyCode.D), "general"),
diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java
similarity index 89%
rename from core/src/io/anuke/mindustry/input/DesktopInput.java
rename to core/src/mindustry/input/DesktopInput.java
index cf7b3de6d5..8838dee9c9 100644
--- a/core/src/io/anuke/mindustry/input/DesktopInput.java
+++ b/core/src/mindustry/input/DesktopInput.java
@@ -1,28 +1,29 @@
-package io.anuke.mindustry.input;
+package mindustry.input;
-import io.anuke.arc.*;
-import io.anuke.arc.Graphics.*;
-import io.anuke.arc.Graphics.Cursor.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.scene.*;
-import io.anuke.arc.scene.event.*;
-import io.anuke.arc.scene.ui.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.entities.traits.BuilderTrait.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import arc.Graphics.*;
+import arc.Graphics.Cursor.*;
+import arc.graphics.g2d.*;
+import arc.math.*;
+import arc.scene.*;
+import arc.scene.event.*;
+import arc.scene.ui.*;
+import arc.scene.ui.layout.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.core.GameState.*;
+import mindustry.entities.traits.BuilderTrait.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.ui.*;
+import mindustry.world.*;
-import static io.anuke.arc.Core.scene;
-import static io.anuke.mindustry.Vars.*;
-import static io.anuke.mindustry.input.PlaceMode.*;
+import static arc.Core.scene;
+import static mindustry.Vars.*;
+import static mindustry.input.PlaceMode.*;
public class DesktopInput extends InputHandler{
/** Current cursor type. */
@@ -135,22 +136,29 @@ public class DesktopInput extends InputHandler{
ui.listfrag.toggle();
}
+ if(((player.getClosestCore() == null && player.isDead()) || state.isPaused()) && !ui.chatfrag.shown()){
+ //move camera around
+ float camSpeed = !Core.input.keyDown(Binding.dash) ? 3f : 8f;
+ Core.camera.position.add(Tmp.v1.setZero().add(Core.input.axis(Binding.move_x), Core.input.axis(Binding.move_y)).nor().scl(Time.delta() * camSpeed));
+
+ if(Core.input.keyDown(Binding.mouse_move)){
+ Core.camera.position.x += Mathf.clamp((Core.input.mouseX() - Core.graphics.getWidth() / 2f) * 0.005f, -1, 1) * camSpeed;
+ Core.camera.position.y += Mathf.clamp((Core.input.mouseY() - Core.graphics.getHeight() / 2f) * 0.005f, -1, 1) * camSpeed;
+ }
+ }
+
if(Core.input.keyRelease(Binding.select)){
player.isShooting = false;
}
- if(!state.is(State.menu) && Core.input.keyTap(Binding.minimap) && (scene.getKeyboardFocus() == ui.minimap || !scene.hasDialog()) && !Core.scene.hasKeyboard() && !(scene.getKeyboardFocus() instanceof TextField)){
- if(!ui.minimap.isShown()){
- ui.minimap.show();
- }else{
- ui.minimap.hide();
- }
+ if(!state.is(State.menu) && Core.input.keyTap(Binding.minimap) && !scene.hasDialog() && !(scene.getKeyboardFocus() instanceof TextField)){
+ ui.minimapfrag.toggle();
}
if(state.is(State.menu) || Core.scene.hasDialog()) return;
//zoom camera
- if(!Core.scene.hasScroll() && Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){
+ if((!Core.scene.hasScroll() || Core.input.keyDown(Binding.diagonal_placement)) && !ui.chatfrag.shown() && Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){
renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
}
@@ -300,7 +308,7 @@ public class DesktopInput extends InputHandler{
}
}
- if(Core.input.keyTap(Binding.clear_building)){
+ if(Core.input.keyTap(Binding.clear_building) || isPlacing()){
lastSchematic = null;
selectRequests.clear();
}
@@ -397,7 +405,7 @@ public class DesktopInput extends InputHandler{
}
if(mode == placing && block != null){
- if(!overrideLineRotation && !Core.input.keyDown(Binding.diagonal_placement) && (selectX != cursorX || selectY != cursorY) && ((int) Core.input.axisTap(Binding.rotate) != 0)){
+ if(!overrideLineRotation && !Core.input.keyDown(Binding.diagonal_placement) && (selectX != cursorX || selectY != cursorY) && ((int)Core.input.axisTap(Binding.rotate) != 0)){
rotation = ((int)((Angles.angle(selectX, selectY, cursorX, cursorY) + 45) / 90f)) % 4;
overrideLineRotation = true;
}
diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java
similarity index 93%
rename from core/src/io/anuke/mindustry/input/InputHandler.java
rename to core/src/mindustry/input/InputHandler.java
index c2ff9db807..e56244928e 100644
--- a/core/src/io/anuke/mindustry/input/InputHandler.java
+++ b/core/src/mindustry/input/InputHandler.java
@@ -1,50 +1,50 @@
-package io.anuke.mindustry.input;
+package mindustry.input;
-import io.anuke.annotations.Annotations.*;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.input.*;
-import io.anuke.arc.input.GestureDetector.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.*;
-import io.anuke.arc.scene.event.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.traits.BuilderTrait.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.Teams.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.input.Placement.*;
-import io.anuke.mindustry.net.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.ui.fragments.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.*;
-import io.anuke.mindustry.world.blocks.BuildBlock.*;
-import io.anuke.mindustry.world.blocks.power.PowerNode;
+import arc.*;
+import mindustry.annotations.Annotations.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.graphics.*;
+import arc.graphics.g2d.*;
+import arc.input.*;
+import arc.input.GestureDetector.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.*;
+import arc.scene.event.*;
+import arc.scene.ui.layout.*;
+import arc.util.ArcAnnotate.*;
+import arc.util.*;
+import mindustry.content.*;
+import mindustry.entities.*;
+import mindustry.entities.effect.*;
+import mindustry.entities.traits.BuilderTrait.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.game.Teams.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.input.Placement.*;
+import mindustry.net.*;
+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 java.util.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public abstract class InputHandler implements InputProcessor, GestureListener{
/** Used for dropping items. */
final static float playerSelectRange = mobile ? 17f : 11f;
/** Maximum line length. */
final static int maxLength = 100;
- final static Vector2 stackTrns = new Vector2();
- final static Rectangle r1 = new Rectangle(), r2 = new Rectangle();
+ final static Vec2 stackTrns = new Vec2();
+ final static Rect r1 = new Rect(), r2 = new Rect();
/** Distance on the back from where items originate. */
final static float backTrns = 3f;
@@ -92,7 +92,7 @@ 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 || !player.timer.get(Player.timerTransfer, 40)) return;
+ if(player == null || player.timer == null) return;
if(net.server() && (player.item().amount <= 0 || player.isTransferring|| !Units.canInteract(player, tile))){
throw new ValidateException(player, "Player cannot transfer an item.");
}
@@ -120,7 +120,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
ItemTransfer.create(item,
player.x + Angles.trnsx(player.rotation + 180f, backTrns), player.y + Angles.trnsy(player.rotation + 180f, backTrns),
- new Vector2(tile.drawx() + stackTrns.x, tile.drawy() + stackTrns.y), () -> {
+ new Vec2(tile.drawx() + stackTrns.x, tile.drawy() + stackTrns.y), () -> {
if(tile.block() != block || tile.entity == null || tile.entity.items == null) return;
tile.block().handleStack(item, removed, tile, player);
@@ -402,7 +402,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
}
- for(BrokenBlock req : state.teams.get(player.getTeam()).brokenBlocks){
+ for(BrokenBlock req : player.getTeam().data().brokenBlocks){
Block block = content.block(req.block);
if(block.bounds(req.x, req.y, Tmp.r2).overlaps(Tmp.r1)){
drawSelected(req.x, req.y, content.block(req.block), Pal.remove);
@@ -639,7 +639,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
int tileX(float cursorX){
- Vector2 vec = Core.input.mouseWorld(cursorX, 0);
+ Vec2 vec = Core.input.mouseWorld(cursorX, 0);
if(selectedBlock()){
vec.sub(block.offset(), block.offset());
}
@@ -647,7 +647,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
int tileY(float cursorY){
- Vector2 vec = Core.input.mouseWorld(0, cursorY);
+ Vec2 vec = Core.input.mouseWorld(0, cursorY);
if(selectedBlock()){
vec.sub(block.offset(), block.offset());
}
@@ -725,7 +725,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
public void tryDropItems(Tile tile, float x, float y){
- if(!droppingItem || player.item().amount <= 0 || canTapPlayer(x, y) || state.isPaused() || !player.timer.check(Player.timerTransfer, 40)){
+ if(!droppingItem || player.item().amount <= 0 || canTapPlayer(x, y) || state.isPaused() ){
droppingItem = false;
return;
}
diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java
similarity index 95%
rename from core/src/io/anuke/mindustry/input/MobileInput.java
rename to core/src/mindustry/input/MobileInput.java
index b057156719..3b8e881085 100644
--- a/core/src/io/anuke/mindustry/input/MobileInput.java
+++ b/core/src/mindustry/input/MobileInput.java
@@ -1,33 +1,33 @@
-package io.anuke.mindustry.input;
+package mindustry.input;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.func.*;
-import io.anuke.arc.graphics.g2d.*;
-import io.anuke.arc.input.GestureDetector.*;
-import io.anuke.arc.input.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.scene.*;
-import io.anuke.arc.scene.ui.ImageButton.*;
-import io.anuke.arc.scene.ui.layout.*;
-import io.anuke.arc.util.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.GameState.*;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.BuilderTrait.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.gen.*;
-import io.anuke.mindustry.graphics.*;
-import io.anuke.mindustry.ui.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import arc.struct.*;
+import arc.func.*;
+import arc.graphics.g2d.*;
+import arc.input.GestureDetector.*;
+import arc.input.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.scene.*;
+import arc.scene.ui.ImageButton.*;
+import arc.scene.ui.layout.*;
+import arc.util.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.core.GameState.*;
+import mindustry.entities.*;
+import mindustry.entities.traits.BuilderTrait.*;
+import mindustry.entities.traits.*;
+import mindustry.entities.type.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.gen.*;
+import mindustry.graphics.*;
+import mindustry.ui.*;
+import mindustry.world.*;
-import static io.anuke.mindustry.Vars.*;
-import static io.anuke.mindustry.input.PlaceMode.*;
+import static mindustry.Vars.*;
+import static mindustry.input.PlaceMode.*;
public class MobileInput extends InputHandler implements GestureListener{
/** Maximum speed the player can pan. */
@@ -36,7 +36,7 @@ public class MobileInput extends InputHandler implements GestureListener{
private final float edgePan = Scl.scl(60f);
//gesture data
- private Vector2 vector = new Vector2();
+ private Vec2 vector = new Vec2();
private float lastZoom = -1;
/** Position where the player started dragging a line. */
@@ -77,7 +77,7 @@ public class MobileInput extends InputHandler implements GestureListener{
}else{
Tile tile = world.ltileWorld(x, y);
- if(tile != null && tile.synthetic() && state.teams.areEnemies(player.getTeam(), tile.getTeam())){
+ if(tile != null && tile.synthetic() && player.getTeam().isEnemy(tile.getTeam())){
TileEntity entity = tile.entity;
player.setMineTile(null);
player.target = entity;
@@ -439,10 +439,12 @@ public class MobileInput extends InputHandler implements GestureListener{
@Override
public boolean touchDown(int screenX, int screenY, int pointer, KeyCode button){
- if(state.is(State.menu) || player.isDead()) return false;
+ if(state.is(State.menu)) return false;
down = true;
+ if(player.isDead()) return false;
+
//get tile on cursor
Tile cursor = tileAt(screenX, screenY);
diff --git a/core/src/io/anuke/mindustry/input/PlaceMode.java b/core/src/mindustry/input/PlaceMode.java
similarity index 67%
rename from core/src/io/anuke/mindustry/input/PlaceMode.java
rename to core/src/mindustry/input/PlaceMode.java
index cb287caed6..1c2d0d6ce2 100644
--- a/core/src/io/anuke/mindustry/input/PlaceMode.java
+++ b/core/src/mindustry/input/PlaceMode.java
@@ -1,4 +1,4 @@
-package io.anuke.mindustry.input;
+package mindustry.input;
public enum PlaceMode{
none, breaking, placing, schematicSelect
diff --git a/core/src/io/anuke/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java
similarity index 97%
rename from core/src/io/anuke/mindustry/input/Placement.java
rename to core/src/mindustry/input/Placement.java
index 35b078b8fe..49d3e9a030 100644
--- a/core/src/io/anuke/mindustry/input/Placement.java
+++ b/core/src/mindustry/input/Placement.java
@@ -1,15 +1,15 @@
-package io.anuke.mindustry.input;
+package mindustry.input;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.math.*;
-import io.anuke.arc.math.geom.*;
-import io.anuke.arc.util.pooling.*;
-import io.anuke.mindustry.world.*;
+import arc.*;
+import arc.struct.*;
+import arc.math.*;
+import arc.math.geom.*;
+import arc.util.pooling.*;
+import mindustry.world.*;
import java.util.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Placement{
private static final NormalizeResult result = new NormalizeResult();
diff --git a/core/src/io/anuke/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java
similarity index 83%
rename from core/src/io/anuke/mindustry/io/JsonIO.java
rename to core/src/mindustry/io/JsonIO.java
index 5d91106ea2..ef37dd9d65 100644
--- a/core/src/io/anuke/mindustry/io/JsonIO.java
+++ b/core/src/mindustry/io/JsonIO.java
@@ -1,14 +1,14 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.arc.util.serialization.*;
-import io.anuke.arc.util.serialization.Json.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.ctype.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.util.serialization.*;
+import arc.util.serialization.Json.*;
+import mindustry.*;
+import mindustry.content.*;
+import mindustry.ctype.*;
+import mindustry.ctype.ContentType;
+import mindustry.game.*;
+import mindustry.type.*;
+import mindustry.world.*;
import java.io.*;
@@ -20,7 +20,7 @@ public class JsonIO{
@Override
public void writeValue(Object value, Class knownType, Class elementType){
- if(value instanceof io.anuke.mindustry.ctype.MappableContent){
+ if(value instanceof MappableContent){
try{
getWriter().value(((MappableContent)value).name);
}catch(IOException e){
@@ -53,11 +53,11 @@ public class JsonIO{
}
public static T read(Class type, String string){
- return json.fromJson(type, string);
+ return json.fromJson(type, string.replace("io.anuke.", ""));
}
public static T read(Class type, T base, String string){
- return jsonBase.fromBaseJson(type, base, string);
+ return jsonBase.fromBaseJson(type, base, string.replace("io.anuke.", ""));
}
public static String print(String in){
@@ -95,6 +95,18 @@ public class JsonIO{
}
});
+ json.setSerializer(Team.class, new Serializer(){
+ @Override
+ public void write(Json json, Team object, Class knownType){
+ json.writeValue(object.id);
+ }
+
+ @Override
+ public Team read(Json json, JsonValue jsonData, Class type){
+ return Team.get(jsonData.asInt());
+ }
+ });
+
json.setSerializer(Block.class, new Serializer(){
@Override
public void write(Json json, Block object, Class knownType){
diff --git a/core/src/io/anuke/mindustry/io/MapIO.java b/core/src/mindustry/io/MapIO.java
similarity index 80%
rename from core/src/io/anuke/mindustry/io/MapIO.java
rename to core/src/mindustry/io/MapIO.java
index bf309505bd..85c5cc9cb7 100644
--- a/core/src/io/anuke/mindustry/io/MapIO.java
+++ b/core/src/mindustry/io/MapIO.java
@@ -1,21 +1,22 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.graphics.Pixmap.*;
-import io.anuke.arc.util.io.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.world.*;
-import io.anuke.mindustry.world.blocks.storage.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.graphics.*;
+import arc.graphics.Pixmap.*;
+import arc.util.io.*;
+import mindustry.content.*;
+import mindustry.core.*;
+import mindustry.game.*;
+import mindustry.maps.*;
+import mindustry.world.*;
+import mindustry.world.LegacyColorMapper.*;
+import mindustry.world.blocks.storage.*;
import java.io.*;
import java.util.zip.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Reads and writes map files. */
//TODO does this class even need to exist??? move to Maps?
@@ -91,7 +92,7 @@ public class MapIO{
public void setTeam(Team team){
super.setTeam(team);
if(block instanceof CoreBlock){
- map.teams.add(team.ordinal());
+ map.teams.add(team.id);
}
}
};
@@ -145,11 +146,33 @@ public class MapIO{
public static int colorFor(Block floor, Block wall, Block ore, Team team){
if(wall.synthetic()){
- return team.intColor;
+ return team.color.rgba();
}
return Color.rgba8888(wall.solid ? wall.color : ore == Blocks.air ? floor.color : ore.color);
}
+ /** Reads a pixmap in the 3.5 pixmap format. */
+ public static void readPixmap(Pixmap pixmap, Tile[][] tiles){
+ for(int x = 0; x < pixmap.getWidth(); x++){
+ for(int y = 0; y < pixmap.getHeight(); y++){
+ int color = pixmap.getPixel(x, pixmap.getHeight() - 1 - y);
+ LegacyBlock block = LegacyColorMapper.get(color);
+ Tile tile = tiles[x][y];
+
+ tile.setFloor(block.floor);
+ tile.setBlock(block.wall);
+ if(block.ore != null) tile.setOverlay(block.ore);
+
+ //place core
+ if(color == Color.rgba8888(Color.green)){
+ //actual core parts
+ tile.setBlock(Blocks.coreShard);
+ tile.setTeam(Team.sharded);
+ }
+ }
+ }
+ }
+
interface TileProvider{
Tile get(int x, int y);
}
diff --git a/core/src/io/anuke/mindustry/io/SaveFileReader.java b/core/src/mindustry/io/SaveFileReader.java
similarity index 93%
rename from core/src/io/anuke/mindustry/io/SaveFileReader.java
rename to core/src/mindustry/io/SaveFileReader.java
index 8384aca50e..c324e78fdb 100644
--- a/core/src/io/anuke/mindustry/io/SaveFileReader.java
+++ b/core/src/mindustry/io/SaveFileReader.java
@@ -1,11 +1,11 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.arc.collection.ObjectMap;
-import io.anuke.arc.collection.ObjectMap.Entry;
-import io.anuke.arc.collection.StringMap;
-import io.anuke.arc.util.io.CounterInputStream;
-import io.anuke.arc.util.io.ReusableByteOutStream;
-import io.anuke.mindustry.world.WorldContext;
+import arc.struct.ObjectMap;
+import arc.struct.ObjectMap.Entry;
+import arc.struct.StringMap;
+import arc.util.io.CounterInputStream;
+import arc.util.io.ReusableByteOutStream;
+import mindustry.world.WorldContext;
import java.io.*;
diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/mindustry/io/SaveIO.java
similarity index 93%
rename from core/src/io/anuke/mindustry/io/SaveIO.java
rename to core/src/mindustry/io/SaveIO.java
index 6aa76d8ba9..62abedef77 100644
--- a/core/src/io/anuke/mindustry/io/SaveIO.java
+++ b/core/src/mindustry/io/SaveIO.java
@@ -1,18 +1,18 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.Fi;
-import io.anuke.arc.util.io.CounterInputStream;
-import io.anuke.arc.util.io.FastDeflaterOutputStream;
-import io.anuke.mindustry.Vars;
-import io.anuke.mindustry.io.versions.*;
-import io.anuke.mindustry.world.WorldContext;
+import arc.struct.*;
+import arc.files.Fi;
+import arc.util.io.CounterInputStream;
+import arc.util.io.FastDeflaterOutputStream;
+import mindustry.Vars;
+import mindustry.io.versions.*;
+import mindustry.world.WorldContext;
import java.io.*;
import java.util.Arrays;
import java.util.zip.InflaterInputStream;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class SaveIO{
/** Format header. This is the string 'MSAV' in ASCII. */
diff --git a/core/src/io/anuke/mindustry/io/SaveMeta.java b/core/src/mindustry/io/SaveMeta.java
similarity index 80%
rename from core/src/io/anuke/mindustry/io/SaveMeta.java
rename to core/src/mindustry/io/SaveMeta.java
index 4759b955ab..04ce7e4af2 100644
--- a/core/src/io/anuke/mindustry/io/SaveMeta.java
+++ b/core/src/mindustry/io/SaveMeta.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.arc.collection.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.maps.*;
+import arc.struct.*;
+import mindustry.game.*;
+import mindustry.maps.*;
-import static io.anuke.mindustry.Vars.maps;
+import static mindustry.Vars.maps;
public class SaveMeta{
public int version;
diff --git a/core/src/io/anuke/mindustry/io/SavePreviewLoader.java b/core/src/mindustry/io/SavePreviewLoader.java
similarity index 74%
rename from core/src/io/anuke/mindustry/io/SavePreviewLoader.java
rename to core/src/mindustry/io/SavePreviewLoader.java
index f7038875bc..bf01424a11 100644
--- a/core/src/io/anuke/mindustry/io/SavePreviewLoader.java
+++ b/core/src/mindustry/io/SavePreviewLoader.java
@@ -1,9 +1,9 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.arc.assets.*;
-import io.anuke.arc.assets.loaders.*;
-import io.anuke.arc.assets.loaders.resolvers.*;
-import io.anuke.arc.files.*;
+import arc.assets.*;
+import arc.assets.loaders.*;
+import arc.assets.loaders.resolvers.*;
+import arc.files.*;
public class SavePreviewLoader extends TextureLoader{
diff --git a/core/src/io/anuke/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java
similarity index 93%
rename from core/src/io/anuke/mindustry/io/SaveVersion.java
rename to core/src/mindustry/io/SaveVersion.java
index cab3c55250..06c75bc878 100644
--- a/core/src/io/anuke/mindustry/io/SaveVersion.java
+++ b/core/src/mindustry/io/SaveVersion.java
@@ -1,23 +1,23 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.io.*;
-import io.anuke.mindustry.content.*;
-import io.anuke.mindustry.core.*;
-import io.anuke.mindustry.ctype.*;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.*;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.game.Teams.*;
-import io.anuke.mindustry.maps.*;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import arc.struct.*;
+import arc.util.*;
+import arc.util.io.*;
+import mindustry.content.*;
+import mindustry.core.*;
+import mindustry.ctype.*;
+import mindustry.ctype.ContentType;
+import mindustry.entities.*;
+import mindustry.entities.traits.*;
+import mindustry.game.*;
+import mindustry.game.Teams.*;
+import mindustry.maps.*;
+import mindustry.type.*;
+import mindustry.world.*;
import java.io.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public abstract class SaveVersion extends SaveFileReader{
public int version;
@@ -217,7 +217,7 @@ public abstract class SaveVersion extends SaveFileReader{
Array data = state.teams.getActive();
stream.writeInt(data.size);
for(TeamData team : data){
- stream.writeInt(team.team.ordinal());
+ stream.writeInt((int)team.team.id);
stream.writeInt(team.brokenBlocks.size);
for(BrokenBlock block : team.brokenBlocks){
stream.writeShort(block.x);
@@ -258,8 +258,8 @@ public abstract class SaveVersion extends SaveFileReader{
public void readEntities(DataInput stream) throws IOException{
int teamc = stream.readInt();
for(int i = 0; i < teamc; i++){
- Team team = Team.all[stream.readInt()];
- TeamData data = state.teams.get(team);
+ Team team = Team.get(stream.readInt());
+ TeamData data = team.data();
int blocks = stream.readInt();
for(int j = 0; j < blocks; j++){
data.brokenBlocks.addLast(new BrokenBlock(stream.readShort(), stream.readShort(), stream.readShort(), content.block(stream.readShort()).id, stream.readInt()));
diff --git a/core/src/io/anuke/mindustry/io/TypeIO.java b/core/src/mindustry/io/TypeIO.java
similarity index 90%
rename from core/src/io/anuke/mindustry/io/TypeIO.java
rename to core/src/mindustry/io/TypeIO.java
index be5161659b..5095ce396a 100644
--- a/core/src/io/anuke/mindustry/io/TypeIO.java
+++ b/core/src/mindustry/io/TypeIO.java
@@ -1,28 +1,28 @@
-package io.anuke.mindustry.io;
+package mindustry.io;
-import io.anuke.annotations.Annotations.ReadClass;
-import io.anuke.annotations.Annotations.WriteClass;
-import io.anuke.arc.graphics.Color;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.Effects;
-import io.anuke.mindustry.entities.Effects.Effect;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.entities.bullet.BulletType;
-import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
-import io.anuke.mindustry.entities.traits.ShooterTrait;
-import io.anuke.mindustry.entities.type.*;
-import io.anuke.mindustry.entities.units.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.net.Administration.TraceInfo;
-import io.anuke.mindustry.net.Packets.AdminAction;
-import io.anuke.mindustry.net.Packets.KickReason;
-import io.anuke.mindustry.type.*;
-import io.anuke.mindustry.world.*;
+import mindustry.annotations.Annotations.ReadClass;
+import mindustry.annotations.Annotations.WriteClass;
+import arc.graphics.Color;
+import mindustry.ctype.ContentType;
+import mindustry.entities.Effects;
+import mindustry.entities.Effects.Effect;
+import mindustry.entities.type.Bullet;
+import mindustry.entities.bullet.BulletType;
+import mindustry.entities.traits.BuilderTrait.BuildRequest;
+import mindustry.entities.traits.ShooterTrait;
+import mindustry.entities.type.*;
+import mindustry.entities.units.*;
+import mindustry.game.*;
+import mindustry.net.Administration.TraceInfo;
+import mindustry.net.Packets.AdminAction;
+import mindustry.net.Packets.KickReason;
+import mindustry.type.*;
+import mindustry.world.*;
import java.io.*;
import java.nio.ByteBuffer;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
/** Class for specifying read/write methods for code generation. */
@SuppressWarnings("unused")
@@ -87,7 +87,7 @@ public class TypeIO{
@WriteClass(BaseUnit.class)
public static void writeBaseUnit(ByteBuffer buffer, BaseUnit unit){
- buffer.put((byte)unit.getTeam().ordinal());
+ buffer.put((byte) (int)unit.getTeam().id);
buffer.putInt(unit.getID());
}
@@ -95,7 +95,7 @@ public class TypeIO{
public static BaseUnit readBaseUnit(ByteBuffer buffer){
byte tid = buffer.get();
int id = buffer.getInt();
- return unitGroups[tid].getByID(id);
+ return unitGroup.getByID(id);
}
@WriteClass(Tile.class)
@@ -194,12 +194,12 @@ public class TypeIO{
@WriteClass(Team.class)
public static void writeTeam(ByteBuffer buffer, Team reason){
- buffer.put((byte)reason.ordinal());
+ buffer.put((byte) (int)reason.id);
}
@ReadClass(Team.class)
public static Team readTeam(ByteBuffer buffer){
- return Team.all[buffer.get()];
+ return Team.get(buffer.get());
}
@WriteClass(UnitCommand.class)
diff --git a/core/src/io/anuke/mindustry/io/versions/LegacyTypeTable.java b/core/src/mindustry/io/versions/LegacyTypeTable.java
similarity index 90%
rename from core/src/io/anuke/mindustry/io/versions/LegacyTypeTable.java
rename to core/src/mindustry/io/versions/LegacyTypeTable.java
index 6e04863262..2aeb8c8d66 100644
--- a/core/src/io/anuke/mindustry/io/versions/LegacyTypeTable.java
+++ b/core/src/mindustry/io/versions/LegacyTypeTable.java
@@ -1,10 +1,10 @@
-package io.anuke.mindustry.io.versions;
+package mindustry.io.versions;
-import io.anuke.arc.func.Prov;
-import io.anuke.mindustry.entities.type.Bullet;
-import io.anuke.mindustry.entities.effect.*;
-import io.anuke.mindustry.entities.type.Player;
-import io.anuke.mindustry.entities.type.base.*;
+import arc.func.Prov;
+import mindustry.entities.type.Bullet;
+import mindustry.entities.effect.*;
+import mindustry.entities.type.Player;
+import mindustry.entities.type.base.*;
/*
Latest data: [build 81]
diff --git a/core/src/io/anuke/mindustry/io/versions/Save1.java b/core/src/mindustry/io/versions/Save1.java
similarity index 86%
rename from core/src/io/anuke/mindustry/io/versions/Save1.java
rename to core/src/mindustry/io/versions/Save1.java
index 471c2c2f3f..446fe8e80b 100644
--- a/core/src/io/anuke/mindustry/io/versions/Save1.java
+++ b/core/src/mindustry/io/versions/Save1.java
@@ -1,7 +1,7 @@
-package io.anuke.mindustry.io.versions;
+package mindustry.io.versions;
-import io.anuke.arc.func.*;
-import io.anuke.mindustry.entities.traits.*;
+import arc.func.*;
+import mindustry.entities.traits.*;
import java.io.*;
diff --git a/core/src/io/anuke/mindustry/io/versions/Save2.java b/core/src/mindustry/io/versions/Save2.java
similarity index 75%
rename from core/src/io/anuke/mindustry/io/versions/Save2.java
rename to core/src/mindustry/io/versions/Save2.java
index bcf0fb8366..497289ed71 100644
--- a/core/src/io/anuke/mindustry/io/versions/Save2.java
+++ b/core/src/mindustry/io/versions/Save2.java
@@ -1,13 +1,13 @@
-package io.anuke.mindustry.io.versions;
+package mindustry.io.versions;
-import io.anuke.mindustry.ctype.ContentType;
-import io.anuke.mindustry.entities.traits.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.type.TypeID;
+import mindustry.ctype.ContentType;
+import mindustry.entities.traits.*;
+import mindustry.io.*;
+import mindustry.type.TypeID;
import java.io.*;
-import static io.anuke.mindustry.Vars.content;
+import static mindustry.Vars.content;
public class Save2 extends SaveVersion{
diff --git a/core/src/io/anuke/mindustry/io/versions/Save3.java b/core/src/mindustry/io/versions/Save3.java
similarity index 55%
rename from core/src/io/anuke/mindustry/io/versions/Save3.java
rename to core/src/mindustry/io/versions/Save3.java
index c418a1bf46..74a9d7a2c4 100644
--- a/core/src/io/anuke/mindustry/io/versions/Save3.java
+++ b/core/src/mindustry/io/versions/Save3.java
@@ -1,6 +1,6 @@
-package io.anuke.mindustry.io.versions;
+package mindustry.io.versions;
-import io.anuke.mindustry.io.*;
+import mindustry.io.*;
public class Save3 extends SaveVersion{
public Save3(){
diff --git a/core/src/io/anuke/mindustry/maps/Map.java b/core/src/mindustry/maps/Map.java
similarity index 92%
rename from core/src/io/anuke/mindustry/maps/Map.java
rename to core/src/mindustry/maps/Map.java
index 6fef24a8c4..90bb4f2f87 100644
--- a/core/src/io/anuke/mindustry/maps/Map.java
+++ b/core/src/mindustry/maps/Map.java
@@ -1,20 +1,20 @@
-package io.anuke.mindustry.maps;
+package mindustry.maps;
-import io.anuke.arc.*;
-import io.anuke.arc.collection.*;
-import io.anuke.arc.files.*;
-import io.anuke.arc.graphics.*;
-import io.anuke.arc.util.*;
-import io.anuke.arc.util.ArcAnnotate.*;
-import io.anuke.mindustry.*;
-import io.anuke.mindustry.game.EventType.*;
-import io.anuke.mindustry.game.*;
-import io.anuke.mindustry.io.*;
-import io.anuke.mindustry.maps.filters.*;
-import io.anuke.mindustry.mod.Mods.*;
-import io.anuke.mindustry.type.*;
+import arc.*;
+import arc.struct.*;
+import arc.files.*;
+import arc.graphics.*;
+import arc.util.*;
+import arc.util.ArcAnnotate.*;
+import mindustry.*;
+import mindustry.game.EventType.*;
+import mindustry.game.*;
+import mindustry.io.*;
+import mindustry.maps.filters.*;
+import mindustry.mod.Mods.*;
+import mindustry.type.*;
-import static io.anuke.mindustry.Vars.*;
+import static mindustry.Vars.*;
public class Map implements Comparable