diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 85459446aa..4c8606ea07 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -24,4 +24,5 @@ assignees: '' --- *Place an X (no spaces) between the brackets to confirm that you have read the line below.* +- [ ] **I have updated to the latest release (https://github.com/Anuken/Mindustry/releases) to make sure my issue has not been fixed.** - [ ] **I have searched the closed and open issues to make sure that this problem has not already been reported.** diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml new file mode 100644 index 0000000000..1532c48561 --- /dev/null +++ b/.github/workflows/deployment.yml @@ -0,0 +1,59 @@ +name: Deployment + +on: + push: + tags: + - 'v*' + +jobs: + buildJava14: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 14 + uses: actions/setup-java@v1 + with: + java-version: 14 + - name: Create artifacts + run: | + ./gradlew desktop:dist server:dist core:javadoc -Pbuildversion=${GITHUB_REF:1} + - name: Update docs + run: | + cd ../ + git clone --depth=1 https://github.com/MindustryGame/docs.git + cp -a Mindustry/core/build/docs/javadoc/. docs/ + cd docs + git add . + git commit -m "Update ${GITHUB_REF:1}" + git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/MindustryGame/docs + cd ../Mindustry + - name: Add Arc release + run: | + git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc + cd ../Arc + git tag ${GITHUB_REF} + git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/Arc ${GITHUB_REF}; + cd ../Mindustry + - name: Update F-Droid build string + run: | + git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds + cd ../MindustryBuilds + echo "Updating version to ${GITHUB_REF:1}" + echo versionName=6-fdroid-${GITHUB_REF:1}$'\n'versionCode=${GITHUB_REF:1} > version_fdroid.txt + git add . + git commit -m "Updating to build ${GITHUB_REF:1}" + cd ../Mindustry + - name: Upload client artifacts + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: desktop/libs/Mindustry.jar + tag: ${{ github.ref }} + - name: Upload server artifacts + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: server/libs/server-release.jar + tag: ${{ github.ref }} + diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml deleted file mode 100644 index 490c317f03..0000000000 --- a/.github/workflows/gradle.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Java CI - -on: [push] - -jobs: - buildJava14: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 14 - uses: actions/setup-java@v1 - with: - java-version: 14 - - name: Run unit tests with gradle and Java 14 - run: ./gradlew compileJava - buildJava15: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 15 - uses: actions/setup-java@v1 - with: - java-version: 15 - - name: Run unit tests with gradle and Java 15 - run: ./gradlew compileJava diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000000..81cf1ff4e9 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,21 @@ +name: Pull Request Tests + +on: [pull_request] + +jobs: + buildJava14: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 14 + uses: actions/setup-java@v1 + with: + java-version: 14 + - name: Run unit tests and build JAR + run: ./gradlew test desktop:dist + - name: Upload desktop JAR for testing + uses: actions/upload-artifact@v2 + with: + name: Desktop JAR (zipped) + path: desktop/build/libs/Mindustry.jar diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 0000000000..9436adb06c --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,24 @@ +name: Tests + +on: [push] + +jobs: + buildJava14: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 14 + uses: actions/setup-java@v1 + with: + java-version: 14 + - name: Run unit tests + run: ./gradlew test + - name: Trigger BE build + run: | + git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds + cd ../MindustryBuilds + BNUM=$(($GITHUB_RUN_NUMBER + 20000)) + git tag ${BNUM} + git config --global user.name "Build Uploader" + git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds ${BNUM} diff --git a/.gitignore b/.gitignore index 543197c2f8..09bdd6ec4b 100644 --- a/.gitignore +++ b/.gitignore @@ -19,12 +19,13 @@ logs/ /annotations/out/ /net/build/ /tools/build/ -/core/build/ /tests/build/ /server/build/ changelog saves/ /core/assets-raw/fontgen/out/ +/core/assets-raw/fontgen/icons/ +/core/assets-raw/fontgen/icon_parts/ core/assets/saves/ /core/assets/saves/ steam_appid.txt @@ -35,6 +36,7 @@ steam_appid.txt /annotations/src/main/resources/META-INF/services /core/assets/version.properties /core/assets/locales +/core/assets/cache/ /ios/src/mindustry/gen/ /core/src/mindustry/gen/ ios/robovm.properties @@ -143,13 +145,6 @@ nb-configuration.xml /local.properties .gradle/ gradle-app.setting -/build/ -/android/build/ -/core/build/ -/desktop/build/ -/html/build/ -/ios/build/ -/ios-moe/build/ ## OS Specific .DS_Store diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 11dbe8cd1e..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,50 +0,0 @@ -jdk: -- openjdk14 -dist: xenial -android: - components: - - android-29 - - build-tools-29.0.3 - -script: -- git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds -- cd ../MindustryBuilds -- echo ${TRAVIS_TAG} -- if [ -n "$TRAVIS_TAG" ]; then echo versionName=6-fdroid-${TRAVIS_TAG:1}$'\n'versionCode=${TRAVIS_TAG:1} > version_fdroid.txt; git add .; git commit -m "Updating to build ${TRAVIS_TAG}"; fi -- git tag ${TRAVIS_BUILD_NUMBER} -- git config --global user.name "Build Uploader" -- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/MindustryBuilds ${TRAVIS_BUILD_NUMBER}; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/MindustryBuilds; fi -- cd ../Mindustry -- git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc -- if [ -n "$TRAVIS_TAG" ]; then cd ../Arc; git tag ${TRAVIS_TAG}; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/Arc ${TRAVIS_TAG}; cd ../Mindustry; fi -- "./gradlew test" -- "./gradlew desktop:dist -Pbuildversion=${TRAVIS_TAG:1}" -- "./gradlew server:dist -Pbuildversion=${TRAVIS_TAG:1}" -- "./gradlew core:javadoc" -- cd ../ -- git clone --depth=1 https://github.com/MindustryGame/docs.git -- cp -a Mindustry/core/build/docs/javadoc/. docs/ -- cd docs -- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then git add .; git commit -m "Update ${TRAVIS_BUILD_NUMBER}"; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/MindustryGame/docs; fi -- cd ../Mindustry -deploy: -- provider: releases - skip_cleanup: true - draft: false - api_key: - secure: Cv5wFtWt62/A24EvSEQvMow7gKPbZ3oATEFPuSghhB2TQz1dA40Zee3Qvk4LFlpLrhYo4K0ZSczCZRGpR+hCd8+Dpww52bheYEvWuh3ZQfvu/fXtEx2j5PwP1qMpmIgSxETV/gkD7l9FImdh0VzktYiAvQfmi0bEocG9/D4QwjFpNat7iwBdcMiw1MvAygpdIWRsjiw0RKlB2mWarmoHhQ7Gu7qlU3j50uaEvcrtmU0pBUPggNQwQRv32i9NPvNFxrqqlUjDLIS8JFea99zCkp8BwYqbEvBIMzd+Qip1/stLJJA3+cDUClbsDtg8rAVetzpOrdLEEBmqShFe5MDl2yEHcsgpN9CFsyTaUfvB3P3rVjizvycMm42IsUkXQiarm5xTQ/TIA8Rd8AHiSKuweNCg1Fd5SFaRtKy8JVLXuxyfUccmyje6hhz2L4lS2Wfj3mAG7sqZUCXhWP79EKdGkiPOjKv4CwXEKmuH3BMVqPlNUZJr9Eg3sV1FG0h2l+MVOOnR635qdUbb49sYojYxVruMLX0BH1c4ZCu230m8CUoWA1Em1QNI75ya7+9Y5T6AsgWDVpBvdUo9fWNbdp+VQ0GskFQsJD5wtnxbcbHeFiERAgGBm7z6qt9u9LrQpBH+dsW52ADvYsu3L4nQEa+sdMHwTTwmGY+iUvsxu0DqxGg= - file: - - desktop/build/libs/Mindustry.jar - - server/build/libs/server-release.jar - on: - repo: Anuken/Mindustry - tags: true -#- provider: script -# script: bash update_wiki.sh -# on: -# repo: Anuken/Mindustry -# tags: true -env: - global: - - secure: TqlUl/ojjkCMVOGbCTKz7Cnr4F08UyWzY/CiJ0vvUOGJGZ1qm7XavAlDf5XT0egU4mvr37THubFO8vojbqmrmy0oZnYh3njKFA8axgyZ8PyKkjGHOfd0i6qyEWsOr9H90/2X8r3LwEeLaDFyHpu3wljIGBjweg53g2qwmDwCFa9UR80FJZ+xDB+rD6B3cXT0DTEkCoLZXLqXm0Y3HvBdSuBL1LR/FNb2BSxNq+tNLGiz1kdQZV5erausbbZypBoGxzz63xAnyz2kkFz73A8xQYVTzGbFodTPz7HM13GVZ5s43I03Y+HYyHBgBaSLziO2hi2kzVJccOwzBp7wS4fs1MqsFY5+IeWJ9k+hm89NiYT7+6zlEgoUMlIniny1qLqWTzx7btUeuC/y/h5TVBNgaV+z0jmHycHfeSyq5I+vmX4J8qe3wmaN8TcdqYKU5nIznOTk3CM5Fzu0Bs9vkCkOxmormmcjMFW1RbdOLc/hpZWZggsBA88sNEAI8eq+r5QEeqzeCx8YKoZDjdrsqvgLMc3El3gS9oMGxkn0Y/TEcqs9Tc4BXtTkqIA68hD0DYzlAxYjVbbkAI9Hh9lHNvV3Dr/oCkGXQ/HflM143kj1L3tSBZpqeqQE2XhngB5nqpS3OZTmZbMTQ8qD2luU18yaTGMLF5tJS/fdKPRx0gQ1kL8= - - secure: VEskj/0TVX2o7iUVXuVPysj/VSWmPhDl57SrT7/nBNN/P/8N5jFAvx8PMzG7qT0S5FzKxuV20psE4WylUGRKdeRtK7/QNBV7T3YqYYM6BUB1VeRpxe5hLxTeuBK3izglFO8DkdDqjUtzQSjzkoYT75ilROjhBrBUPhVek7UlbBHbaklPWYFXHnJmYS1FpZTdzqIj+Y0Gd1PSL2MzK4X74aAHl0qaDgsTwYwtKs7IAz+kFaTZBRpi9VjQHAFhDlkDR3jo9wQjH8/F6x0lCgV/FulSc37Okdb40sLFG98xcEA6gWh1NPMkz8CulUdVE7mj7SJNxLbNvoMNrWOVRjmEsn59p/9LiNC1F9ncFz9vjQjAmi7rMFFGHGxe5nn8cIAkpTvHQQkZoWHAA9SNJTDMMf09m2pRy/vvzx+a6NVxyC9iNrhLlnBg4gxAqRh0S6NU0uL+fuygKixn7rqlnb7KMT7bAbfcuV+dng6c8V7hYKDCh7sJbH8iJump1xkwoM7ecnU8fxJF/oKOr/fbk0Bfxu+Q9qYLrV1+DEdm93Vl2Thq+DBKmI66jRGSva6HeCLFo81PEiEjP1nLv75+kvVfOqVqJrZD1BrvoG2eWT/3hVLrN2kEIWWlpvQVC7FL11yWmYtAuOBh/vfhI76zKr+YTS6ccG9rqW4XeYjJytshe8M= diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 143a73d6b8..8b4ec3bf55 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,7 +30,7 @@ This means: - No underscores for anything. (Yes, I know `Bindings` violates this principle, but that's for legacy reasons and really should be cleaned up some day) - Do not use braceless `if/else` statements. `if(x) statement else statement2` should **never** be done. In very specific situations, having braceless if-statements on one line is allowed: `if(cond) return;` would be valid. - Prefer single-line javadoc `/** @return for example */` instead of multiline javadoc whenver possible -- Short method/variable names (multipleLongWords should be avoided if it's possible to so reasonably, especially for variables) +- Short method/variable names (multipleLongWords should be avoided if it's possible to do so reasonably, especially for variables) - Use wildcard imports - `import some.package.*` - for everything. This makes incorrect class usage more obvious (*e.g. arc.util.Timer vs java.util.Timer*) and leads to cleaner-looking code. Import [this style file](.github/Mindustry-CodeStyle-IJ.xml) into IntelliJ to get correct formatting when developing Mindustry. diff --git a/README.md b/README.md index 13f620832f..882d0b15ae 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![Logo](core/assets-raw/sprites/ui/logo.png) [![Build Status](https://travis-ci.org/Anuken/Mindustry.svg?branch=master)](https://travis-ci.org/Anuken/Mindustry) -[![Discord](https://img.shields.io/discord/391020510269669376.svg)](https://discord.gg/mindustry) +[![Discord](https://img.shields.io/discord/391020510269669376.svg?logo=discord&logoColor=white&logoWidth=20&labelColor=7289DA&label=Discord)](https://discord.gg/mindustry) A sandbox tower defense game written in Java. @@ -61,18 +61,5 @@ Post feature requests and feedback [here](https://github.com/Anuken/Mindustry-Su ## Downloads -[Get it on Itch.io](https://anuke.itch.io/mindustry) - -[Get it on Google Play](https://play.google.com/store/apps/details?id=io.anuke.mindustry) - -[Get it on F-Droid](https://f-droid.org/packages/io.anuke.mindustry/) - -[Download On Flathub](https://flathub.org/apps/details/com.github.Anuken.Mindustry) +| [![](https://static.itch.io/images/badge.svg)](https://anuke.itch.io/mindustry) | [![](https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png)](https://play.google.com/store/apps/details?id=io.anuke.mindustry) | [![](https://fdroid.gitlab.io/artwork/badge/get-it-on.png)](https://f-droid.org/packages/io.anuke.mindustry) | [![](https://flathub.org/assets/badges/flathub-badge-en.svg)](https://flathub.org/apps/details/com.github.Anuken.Mindustry) | +|--- |--- |--- |--- | diff --git a/android/build.gradle b/android/build.gradle index 3ec6b34cfe..4fe5258d46 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -35,7 +35,8 @@ dependencies{ natives "com.github.Anuken.Arc:natives-box2d-android:${getArcHash()}" //android dependencies magically disappear during compilation, thanks gradle! - if(new File(projectDir.parent, '../Arc').exists()) compileOnly fileTree(dir: '../../Arc/backends/backend-android/libs', include: ['*.jar']) + def sdkFile = new File((String)findSdkDir(), "/platforms/android-29/android.jar") + if(sdkFile.exists()) compileOnly files(sdkFile.absolutePath) } task deploy(type: Copy){ diff --git a/android/src/mindustry/android/AndroidLauncher.java b/android/src/mindustry/android/AndroidLauncher.java index 7400bd37a8..5084cbc67d 100644 --- a/android/src/mindustry/android/AndroidLauncher.java +++ b/android/src/mindustry/android/AndroidLauncher.java @@ -27,7 +27,6 @@ import java.util.*; import static mindustry.Vars.*; - public class AndroidLauncher extends AndroidApplication{ public static final int PERMISSION_REQUEST_CODE = 1; boolean doubleScaleTablets = true; @@ -78,11 +77,11 @@ public class AndroidLauncher extends AndroidApplication{ } @Override - public void showFileChooser(boolean open, String extension, Cons cons){ - showFileChooser(open, cons, extension); + public void showFileChooser(boolean open, String title, String extension, Cons cons){ + showFileChooser(open, title, cons, extension); } - void showFileChooser(boolean open, Cons cons, String... extensions){ + void showFileChooser(boolean open, String title, Cons cons, String... extensions){ String extension = extensions[0]; if(VERSION.SDK_INT >= VERSION_CODES.Q){ @@ -119,7 +118,7 @@ public class AndroidLauncher extends AndroidApplication{ }); }else if(VERSION.SDK_INT >= VERSION_CODES.M && !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){ - chooser = new FileChooser(open ? "@open" : "@save", file -> Structs.contains(extensions, file.extension().toLowerCase()), open, file -> { + chooser = new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), open, file -> { if(!open){ cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension)); }else{ @@ -137,16 +136,16 @@ public class AndroidLauncher extends AndroidApplication{ requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE); }else{ if(open){ - new FileChooser("@open", file -> Structs.contains(extensions, file.extension().toLowerCase()), true, cons).show(); + new FileChooser(title, file -> Structs.contains(extensions, file.extension().toLowerCase()), true, cons).show(); }else{ - super.showFileChooser(open, extension, cons); + super.showFileChooser(open, "@open", extension, cons); } } } @Override public void showMultiFileChooser(Cons cons, String... extensions){ - showFileChooser(true, cons, extensions); + showFileChooser(true, "@open", cons, extensions); } @Override @@ -166,29 +165,33 @@ public class AndroidLauncher extends AndroidApplication{ }}); checkFiles(getIntent()); + try{ + //new external folder + Fi data = Core.files.absolute(getContext().getExternalFilesDir(null).getAbsolutePath()); + Core.settings.setDataDirectory(data); - //new external folder - Fi data = Core.files.absolute(getContext().getExternalFilesDir(null).getAbsolutePath()); - Core.settings.setDataDirectory(data); + //move to internal storage if there's no file indicating that it moved + if(!Core.files.local("files_moved").exists()){ + Log.info("Moving files to external storage..."); - //move to internal storage if there's no file indicating that it moved - if(!Core.files.local("files_moved").exists()){ - Log.info("Moving files to external storage..."); - - try{ - //current local storage folder - Fi src = Core.files.absolute(Core.files.getLocalStoragePath()); - for(Fi fi : src.list()){ - fi.copyTo(data); + try{ + //current local storage folder + Fi src = Core.files.absolute(Core.files.getLocalStoragePath()); + for(Fi fi : src.list()){ + fi.copyTo(data); + } + //create marker + Core.files.local("files_moved").writeString("files moved to " + data); + Core.files.local("files_moved_103").writeString("files moved again"); + Log.info("Files moved."); + }catch(Throwable t){ + Log.err("Failed to move files!"); + t.printStackTrace(); } - //create marker - Core.files.local("files_moved").writeString("files moved to " + data); - Core.files.local("files_moved_103").writeString("files moved again"); - Log.info("Files moved."); - }catch(Throwable t){ - Log.err("Failed to move files!"); - t.printStackTrace(); } + }catch(Exception e){ + //print log but don't crash + Log.err(e); } } diff --git a/annotations/build.gradle b/annotations/build.gradle index 4ee43cfcb3..4532472197 100644 --- a/annotations/build.gradle +++ b/annotations/build.gradle @@ -1,2 +1,2 @@ sourceSets.main.java.srcDirs = ["src/main/java/"] -sourceSets.main.resources.srcDirs = ["src/main/resources/"] \ No newline at end of file +sourceSets.main.resources.srcDirs = ["src/main/resources/"] diff --git a/annotations/src/main/java/mindustry/annotations/Annotations.java b/annotations/src/main/java/mindustry/annotations/Annotations.java index 501c255d2e..88bd457e05 100644 --- a/annotations/src/main/java/mindustry/annotations/Annotations.java +++ b/annotations/src/main/java/mindustry/annotations/Annotations.java @@ -98,6 +98,8 @@ public class Annotations{ boolean serialize() default true; /** Whether to generate IO code. This is for advanced usage only. */ boolean genio() default true; + /** Whether I made a massive mistake by merging two different class branches */ + boolean legacy() default false; } /** Indicates an internal interface for entity components. */ diff --git a/annotations/src/main/java/mindustry/annotations/BaseProcessor.java b/annotations/src/main/java/mindustry/annotations/BaseProcessor.java index 3cf9ac44b0..fd2c05dca2 100644 --- a/annotations/src/main/java/mindustry/annotations/BaseProcessor.java +++ b/annotations/src/main/java/mindustry/annotations/BaseProcessor.java @@ -115,12 +115,12 @@ public abstract class BaseProcessor extends AbstractProcessor{ return ClassName.get(c).box(); } - public static TypeVariableName getTVN(TypeParameterElement element) { + public static TypeVariableName getTVN(TypeParameterElement element){ String name = element.getSimpleName().toString(); List boundsMirrors = element.getBounds(); List boundsTypeNames = new ArrayList<>(); - for (TypeMirror typeMirror : boundsMirrors) { + for(TypeMirror typeMirror : boundsMirrors){ boundsTypeNames.add(TypeName.get(typeMirror)); } @@ -137,11 +137,11 @@ public abstract class BaseProcessor extends AbstractProcessor{ if(imports != null){ String rawSource = file.toString(); Seq result = new Seq<>(); - for (String s : rawSource.split("\n", -1)) { + for(String s : rawSource.split("\n", -1)){ result.add(s); - if (s.startsWith("package ")) { + if (s.startsWith("package ")){ result.add(""); - for (String i : imports) { + for (String i : imports){ result.add(i); } } @@ -229,7 +229,7 @@ public abstract class BaseProcessor extends AbstractProcessor{ try{ process(roundEnv); }catch(Throwable e){ - e.printStackTrace(); + Log.err(e); throw new RuntimeException(e); } return true; diff --git a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java index 1cd5f7c4e5..8eba0ec683 100644 --- a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java +++ b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java @@ -240,7 +240,6 @@ public class EntityProcess extends BaseProcessor{ //look at each definition for(Selement type : allDefs){ EntityDef ann = type.annotation(EntityDef.class); - boolean isFinal = ann.isFinal(); //all component classes (not interfaces) Seq components = allComponents(type); @@ -274,6 +273,10 @@ public class EntityProcess extends BaseProcessor{ name += "Entity"; } + if(ann.legacy()){ + name += "Legacy" + Strings.capitalize(type.name()); + } + //skip double classes if(usedNames.containsKey(name)){ extraNames.get(usedNames.get(name), ObjectSet::new).add(type.name()); diff --git a/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java b/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java index 8e22e33db9..c38570a4d4 100644 --- a/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java +++ b/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java @@ -32,27 +32,40 @@ public class AssetsProcess extends BaseProcessor{ MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); MethodSpec.Builder loadStyles = MethodSpec.methodBuilder("loadStyles").addModifiers(Modifier.PUBLIC, Modifier.STATIC); MethodSpec.Builder icload = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); + CodeBlock.Builder ichinit = CodeBlock.builder(); String resources = rootDirectory + "/core/assets-raw/sprites/ui"; Jval icons = Jval.read(Fi.get(rootDirectory + "/core/assets-raw/fontgen/config.json").readString()); ObjectMap texIcons = new OrderedMap<>(); PropertiesUtils.load(texIcons, Fi.get(rootDirectory + "/core/assets/icons/icons.properties").reader()); + StringBuilder iconcAll = new StringBuilder(); + texIcons.each((key, val) -> { String[] split = val.split("\\|"); String name = Strings.kebabToCamel(split[1]).replace("Medium", "").replace("Icon", ""); - if(SourceVersion.isKeyword(name) || name.equals("char")) name = name + "i"; + if(SourceVersion.isKeyword(name) || name.equals("char")) name += "i"; - ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("(char)" + key).build()); + ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).addJavadoc(String.format("\\u%04x", Integer.parseInt(key))).initializer("'" + ((char)Integer.parseInt(key)) + "'").build()); }); ictype.addField(FieldSpec.builder(ParameterizedTypeName.get(ObjectMap.class, String.class, TextureRegionDrawable.class), "icons", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("new ObjectMap<>()").build()); + ichtype.addField(FieldSpec.builder(ParameterizedTypeName.get(ObjectIntMap.class, String.class), + "codes", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("new ObjectIntMap<>()").build()); + + ObjectSet used = new ObjectSet<>(); + for(Jval val : icons.get("glyphs").asArray()){ String name = capitalize(val.getString("css", "")); + + if(!val.getBool("selected", true) || !used.add(name)) continue; + int code = val.getInt("code", 0); - ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("(char)" + code).build()); + iconcAll.append((char)code); + ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).addJavadoc(String.format("\\u%04x", code)).initializer("'" + ((char)code) + "'").build()); + ichinit.addStatement("codes.put($S, $L)", name, code); ictype.addField(TextureRegionDrawable.class, name + "Small", Modifier.PUBLIC, Modifier.STATIC); icload.addStatement(name + "Small = mindustry.ui.Fonts.getGlyph(mindustry.ui.Fonts.def, (char)" + code + ")"); @@ -64,6 +77,9 @@ public class AssetsProcess extends BaseProcessor{ icload.addStatement("icons.put($S, " + name + "Small)", name + "Small"); } + ichtype.addField(FieldSpec.builder(String.class, "all", Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).initializer("$S", iconcAll.toString()).build()); + ichtype.addStaticBlock(ichinit.build()); + Fi.get(resources).walk(p -> { if(!p.extEquals("png")) return; @@ -78,7 +94,7 @@ public class AssetsProcess extends BaseProcessor{ if(SourceVersion.isKeyword(varname)) varname += "s"; type.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC); - load.addStatement(varname + " = ("+dtype+")arc.Core.atlas.drawable($S)", sfilen); + load.addStatement(varname + " = (" + dtype + ")arc.Core.atlas.drawable($S)", sfilen); }); for(Element elem : elements){ @@ -106,7 +122,6 @@ public class AssetsProcess extends BaseProcessor{ HashSet names = new HashSet<>(); Fi.get(path).walk(p -> { - String fname = p.name(); String name = p.nameWithoutExtension(); if(names.contains(name)){ @@ -115,23 +130,20 @@ public class AssetsProcess extends BaseProcessor{ names.add(name); } - if(SourceVersion.isKeyword(name)){ - name = name + "s"; - } + if(SourceVersion.isKeyword(name)) name += "s"; - String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname; + String filepath = path.substring(path.lastIndexOf("/") + 1) + p.path().substring(p.path().lastIndexOf(path) + path.length()); - String filename = "arc.Core.app.getType() != arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\""; - - loadBegin.addStatement("arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3")); + String filename = "\"" + filepath + "\""; + loadBegin.addStatement("arc.Core.assets.load(" + filename + ", " + rtype + ".class).loaded = a -> " + name + " = (" + rtype + ")a", filepath, filepath.replace(".ogg", ".mp3")); 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 arc.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); + type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio." + rtype.substring(rtype.lastIndexOf(".") + 1) + "()").build()); }); if(classname.equals("Sounds")){ - type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); + type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio." + rtype.substring(rtype.lastIndexOf(".") + 1) + "()").build()); } type.addMethod(loadBegin.build()); diff --git a/annotations/src/main/resources/classids.properties b/annotations/src/main/resources/classids.properties index 43a3517ff0..293373a9df 100644 --- a/annotations/src/main/resources/classids.properties +++ b/annotations/src/main/resources/classids.properties @@ -1,10 +1,13 @@ #Maps entity names to IDs. Autogenerated. alpha=0 +arkyid=29 atrax=1 +beta=30 block=2 corvus=24 flare=3 +gamma=31 mace=4 mega=5 mindustry.entities.comp.BuildingComp=6 @@ -26,6 +29,8 @@ oct=26 poly=18 pulsar=19 quad=23 +quasar=32 risso=20 spiroct=21 +toxopid=33 vela=25 \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/alpha/0.json b/annotations/src/main/resources/revisions/alpha/0.json new file mode 100644 index 0000000000..eff5fa651d --- /dev/null +++ b/annotations/src/main/resources/revisions/alpha/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/arkyid/0.json b/annotations/src/main/resources/revisions/arkyid/0.json new file mode 100644 index 0000000000..eff5fa651d --- /dev/null +++ b/annotations/src/main/resources/revisions/arkyid/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/beta/0.json b/annotations/src/main/resources/revisions/beta/0.json new file mode 100644 index 0000000000..eff5fa651d --- /dev/null +++ b/annotations/src/main/resources/revisions/beta/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/block/3.json b/annotations/src/main/resources/revisions/block/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/block/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/block/4.json b/annotations/src/main/resources/revisions/block/4.json new file mode 100644 index 0000000000..7503c106b6 --- /dev/null +++ b/annotations/src/main/resources/revisions/block/4.json @@ -0,0 +1 @@ +{version:4,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/corvus/3.json b/annotations/src/main/resources/revisions/corvus/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/corvus/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/corvus/4.json b/annotations/src/main/resources/revisions/corvus/4.json new file mode 100644 index 0000000000..7503c106b6 --- /dev/null +++ b/annotations/src/main/resources/revisions/corvus/4.json @@ -0,0 +1 @@ +{version:4,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/flare/3.json b/annotations/src/main/resources/revisions/flare/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/flare/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/flare/4.json b/annotations/src/main/resources/revisions/flare/4.json new file mode 100644 index 0000000000..7503c106b6 --- /dev/null +++ b/annotations/src/main/resources/revisions/flare/4.json @@ -0,0 +1 @@ +{version:4,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/gamma/0.json b/annotations/src/main/resources/revisions/gamma/0.json new file mode 100644 index 0000000000..eff5fa651d --- /dev/null +++ b/annotations/src/main/resources/revisions/gamma/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/mace/3.json b/annotations/src/main/resources/revisions/mace/3.json new file mode 100644 index 0000000000..811f101bd5 --- /dev/null +++ b/annotations/src/main/resources/revisions/mace/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/mace/4.json b/annotations/src/main/resources/revisions/mace/4.json new file mode 100644 index 0000000000..786a64a7e2 --- /dev/null +++ b/annotations/src/main/resources/revisions/mace/4.json @@ -0,0 +1 @@ +{version:4,fields:[{name:ammo,type:float},{name:armor,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/mono/3.json b/annotations/src/main/resources/revisions/mono/3.json new file mode 100644 index 0000000000..364fdca813 --- /dev/null +++ b/annotations/src/main/resources/revisions/mono/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/oct/2.json b/annotations/src/main/resources/revisions/oct/2.json new file mode 100644 index 0000000000..87371c85dd --- /dev/null +++ b/annotations/src/main/resources/revisions/oct/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/pulsar/0.json b/annotations/src/main/resources/revisions/pulsar/0.json new file mode 100644 index 0000000000..b2a9e3161a --- /dev/null +++ b/annotations/src/main/resources/revisions/pulsar/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:float},{name:armor,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/quad/3.json b/annotations/src/main/resources/revisions/quad/3.json new file mode 100644 index 0000000000..d091179927 --- /dev/null +++ b/annotations/src/main/resources/revisions/quad/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/quasar/0.json b/annotations/src/main/resources/revisions/quasar/0.json new file mode 100644 index 0000000000..b2a9e3161a --- /dev/null +++ b/annotations/src/main/resources/revisions/quasar/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:float},{name:armor,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/risso/3.json b/annotations/src/main/resources/revisions/risso/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/risso/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/risso/4.json b/annotations/src/main/resources/revisions/risso/4.json new file mode 100644 index 0000000000..7503c106b6 --- /dev/null +++ b/annotations/src/main/resources/revisions/risso/4.json @@ -0,0 +1 @@ +{version:4,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/spiroct/3.json b/annotations/src/main/resources/revisions/spiroct/3.json new file mode 100644 index 0000000000..364fdca813 --- /dev/null +++ b/annotations/src/main/resources/revisions/spiroct/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/toxopid/0.json b/annotations/src/main/resources/revisions/toxopid/0.json new file mode 100644 index 0000000000..eff5fa651d --- /dev/null +++ b/annotations/src/main/resources/revisions/toxopid/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/build.gradle b/build.gradle index c94a79598a..5adc73c9ee 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript{ } dependencies{ - classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.8' + classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.11' classpath "com.github.anuken:packr:-SNAPSHOT" classpath "com.github.Anuken.Arc:packer:$arcHash" classpath "com.github.Anuken.Arc:arc-core:$arcHash" @@ -36,7 +36,7 @@ allprojects{ if(!project.hasProperty("versionType")) versionType = 'official' appName = 'Mindustry' steamworksVersion = '891ed912791e01fe9ee6237a6497e5212b85c256' - rhinoVersion = '8437435dab9993769d72739608580d40c5343285' + rhinoVersion = '2617981f706e50b8753155d8e15e326308be3b22' loadVersionProps = { return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p } @@ -99,6 +99,17 @@ allprojects{ return project.ext.mainClassName.substring(0, project.ext.mainClassName.indexOf("desktop") - 1) } + findSdkDir = { + //null because IntelliJ doesn't get env variables + def v = System.getenv("ANDROID_HOME") + if(v != null) return v + //rootDir is null here, amazing. brilliant. + def file = new File("local.properties") + if(!file.exists()) file = new File("../local.properties") + def props = new Properties().with{p -> p.load(file.newReader()); return p } + return props.get("sdk.dir") + } + generateLocales = { def output = 'en\n' def bundles = new File(project(':core').projectDir, 'assets/bundles/') @@ -172,11 +183,20 @@ allprojects{ jcenter() } + task clearCache{ + doFirst{ + delete{ + delete "$rootDir/core/assets/cache" + } + } + } + tasks.withType(JavaCompile){ targetCompatibility = 8 sourceCompatibility = 14 options.encoding = "UTF-8" options.compilerArgs += ["-Xlint:deprecation"] + dependsOn clearCache } } diff --git a/core/assets-raw/fontgen/config.json b/core/assets-raw/fontgen/config.json index 1c25eac26c..0a31462a8d 100644 --- a/core/assets-raw/fontgen/config.json +++ b/core/assets-raw/fontgen/config.json @@ -48,20 +48,6 @@ "code": 59397, "src": "fontawesome" }, - { - "uid": "6f880cbd94039674f0de065ffb57c250", - "css": "distribution", - "code": 59398, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M0 0L0 50 0 100 0 150 0 200 0 250 0 300 0 350 0 400 0 450 0 500 0 550 0 600 0 650 0 700 0 750 0 800 0 850 0 900 0 950 0 1000 50 1000 100 1000 100 950 100 850 100 750 100 650 100 550 100 450 100 350 100 250 100 150 100 50 100 0 50 0 0 0ZM900 0L900 50 900 150 900 250 900 350 900 450 900 550 900 650 900 750 900 850 900 950 900 1000 950 1000 1000 1000 1000 950 1000 900 1000 850 1000 800 1000 750 1000 700 1000 650 1000 600 1000 550 1000 500 1000 450 1000 400 1000 350 1000 300 1000 250 1000 200 1000 150 1000 100 1000 50 1000 0 950 0 900 0ZM500 106.3C487.5 106.3 475 108.3 462.5 112.5 437.5 120.8 416.7 133.3 400 150L350 200C333.3 216.7 325 233.3 325 250 325 266.7 337.5 279.2 362.5 287.5 387.5 295.8 416.7 300 450 300L550 300C597.6 293.9 649.1 300.5 675 250 675 233.3 666.7 216.7 650 200L600 150C583.3 133.3 562.5 120.8 537.5 112.5 525 108.3 512.5 106.3 500 106.3ZM500 406.3C487.5 406.3 475 408.3 462.5 412.5 437.5 420.8 416.7 433.3 400 450L350 500C333.3 516.7 325 533.3 325 550 325 566.7 337.5 579.2 362.5 587.5 387.5 595.8 416.7 600 450 600L550 600C583.3 600 612.5 595.8 637.5 587.5 662.5 579.2 675 566.7 675 550 675 533.3 666.7 516.7 650 500L600 450C583.3 433.3 562.5 420.8 537.5 412.5 525 408.3 512.5 406.3 500 406.3ZM500 706.3C487.5 706.3 475 708.3 462.5 712.5 437.5 720.8 416.7 733.3 400 750L350 800C333.3 816.7 325 833.3 325 850 325 866.7 337.5 879.2 362.5 887.5 387.5 895.8 416.7 900 450 900L550 900C583.3 900 612.5 895.8 637.5 887.5 662.5 879.2 675 866.7 675 850 675 833.3 666.7 816.7 650 800L600 750C583.3 733.3 562.5 720.8 537.5 712.5 525 708.3 512.5 706.3 500 706.3Z", - "width": 1000 - }, - "search": [ - "icon-distribution-transparent.png" - ] - }, { "uid": "w3nzesrlbezu6f30q7ytyq919p6gdlb6", "css": "home", @@ -86,54 +72,18 @@ "code": 59401, "src": "typicons" }, - { - "uid": "dd4b00255957a608953c409346e7d7fb", - "css": "warning", - "code": 59402, - "src": "typicons" - }, { "uid": "cdfalpadi7huwv9ah4fef2gpfpb4c6qm", "css": "resize", "code": 59403, "src": "typicons" }, - { - "uid": "j6xzwioffey3gxe90yx3ie56j5dlt902", - "css": "block_", - "code": 59404, - "src": "typicons" - }, - { - "uid": "jh3jpcb1t1bcm80gidkadilh080aq79h", - "css": "menu", - "code": 59405, - "src": "typicons" - }, - { - "uid": "dpxunrtmigvk6jm0ieo7axfsgzx4awll", - "css": "settings", - "code": 59406, - "src": "typicons" - }, { "uid": "i7r8vgyqewsy2rlx0xhawybpw5uyss3z", "css": "wrench", "code": 59407, "src": "typicons" }, - { - "uid": "971842913945f59c7f3cf11e75e1e4f1", - "css": "power_", - "code": 59408, - "src": "typicons" - }, - { - "uid": "2b8ea04aa0e500ae056f9c7934af18e6", - "css": "pine", - "code": 59409, - "src": "typicons" - }, { "uid": "0ece9a12de796b8411f868d582bee678", "css": "github-square", @@ -152,12 +102,6 @@ "code": 59411, "src": "typicons" }, - { - "uid": "k7sao112253txym1egnte7822irbyphe", - "css": "eye", - "code": 59412, - "src": "typicons" - }, { "uid": "jqzwo6i8oicjbn049sh2856d8anrqoli", "css": "edit", @@ -188,36 +132,12 @@ "code": 59421, "src": "fontawesome" }, - { - "uid": "ca1c07c0df52dbf2af6813c9e36c2611", - "css": "copy", - "code": 59424, - "src": "typicons" - }, { "uid": "785a9b232e86ae750516adc5228a5aa7", "css": "steam", "code": 59426, "src": "zocial" }, - { - "uid": "348b04ea17f646fbc6a46e20ebe4fe12", - "css": "download", - "code": 61486, - "src": "mfglabs" - }, - { - "uid": "4f3b31017c63ba04dc4f78ce7a8f02b1", - "css": "upload", - "code": 61487, - "src": "mfglabs" - }, - { - "uid": "6020aff067fc3c119cdd75daa5249220", - "css": "exchange", - "code": 61676, - "src": "fontawesome" - }, { "uid": "ccddff8e8670dcd130e3cb55fdfc2fd0", "css": "down-open", @@ -257,45 +177,27 @@ { "uid": "e44ef09cb81413287d702eefa65dd790", "css": "pause", - "code": 59434, + "code": 59398, "src": "typicons" }, { "uid": "lu2wqmd7v9zp21knhy4eifo41wjp4cnx", "css": "list", - "code": 59435, + "code": 59409, "src": "typicons" }, { "uid": "5211af474d3a9848f67f945e2ccaf143", "css": "cancel", - "code": 59436, + "code": 59413, "src": "fontawesome" }, { "uid": "fhkechw94uv9ydw6tukba3ka2hhoif4n", "css": "move", - "code": 59438, + "code": 59416, "src": "typicons" }, - { - "uid": "287ee2cac4ded1712253c7b03ff4a5db", - "css": "pipette", - "code": 59439, - "src": "typicons" - }, - { - "uid": "0e26e70b4aa537cc206f41b21dcf2fcc", - "css": "lock", - "code": 59442, - "src": "elusive" - }, - { - "uid": "8f562a6dca9c14c9c8268bdb64efa89f", - "css": "lock-open", - "code": 59443, - "src": "elusive" - }, { "uid": "fa10777b2d88cc64cd6e4f26ef0e5264", "css": "terminal", @@ -326,12 +228,6 @@ "code": 59447, "src": "fontawesome" }, - { - "uid": "8a1d446e5555e76f82ddb1c8b526f579", - "css": "tree", - "code": 59448, - "src": "entypo" - }, { "uid": "813cb2527308990d4870591d9d76f8cd", "css": "right-open-out", @@ -350,12 +246,6 @@ "code": 59451, "src": "typicons" }, - { - "uid": "5c49851100aa021825b346d16d7f3abf", - "css": "temperatire", - "code": 59452, - "src": "typicons" - }, { "uid": "e3699d145bd628d2a35d4a508b616f0c", "css": "filters", @@ -368,12 +258,6 @@ "code": 59455, "src": "iconic" }, - { - "uid": "b9be509237c9abea9c258d677777b713", - "css": "pick", - "code": 59456, - "src": "iconic" - }, { "uid": "ebc57fa8400e4ede049ac5dc665210e1", "css": "eraser", @@ -404,50 +288,16 @@ "code": 59458, "src": "elusive" }, - { - "uid": "9edf364d6c567aa474b0f9ec6c26c042", - "css": "hammer", - "code": 59459, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M470.3 0C458.1 0 446 6.1 433.8 18.3L397.3 54.8 360.7 91.3 324.2 127.9 287.7 164.4 251.1 200.9 214.6 237.4 178.1 274C165.9 286.1 159.8 298.3 159.8 310.5 159.8 322.7 165.9 334.9 178.1 347L214.6 383.6 251.1 420.1 287.7 456.6 324.2 493.2C336.4 505.3 342.5 517.5 342.5 529.7 342.5 541.9 336.4 554 324.2 566.2L287.7 602.7 251.1 639.3 214.6 675.8 178.1 712.3 141.6 748.9 105 785.4 68.5 821.9 32 858.4C19.8 870.6 10.7 885.8 4.6 904.1-1.5 922.4-1.5 940.6 4.6 958.9 10.7 977.2 22.8 989.3 41.1 995.4 59.4 1001.5 77.6 1001.5 95.9 995.4 114.2 989.3 129.4 980.2 141.6 968L178.1 931.5 214.6 895 251.1 858.4 287.7 821.9 324.2 785.4 360.7 748.9 397.3 712.3 433.8 675.8C446 663.6 458.1 657.5 470.3 657.5 482.5 657.5 494.7 663.6 506.8 675.8L543.4 712.3 579.9 748.9 616.4 785.4 653 821.9C665.1 834.1 677.3 840.2 689.5 840.2 701.7 840.2 713.9 834.1 726 821.9L762.6 785.4 799.1 748.9 835.6 712.3 872.1 675.8 908.7 639.3 945.2 602.7 981.7 566.2C993.9 554 1000 541.9 1000 529.7 1000 517.5 993.9 505.3 981.7 493.2L945.2 456.6 908.7 420.1 872.1 383.6 835.6 347 799.1 310.5 762.6 274 726 237.4 689.5 200.9 653 164.4 616.4 127.9 579.9 91.3 543.4 54.8 506.8 18.3C494.7 6.1 482.5 0 470.3 0Z", - "width": 1000 - }, - "search": [ - "hammer" - ] - }, { "uid": "e594fc6e5870b4ab7e49f52571d52577", "css": "diagonal", "code": 59460, "src": "fontawesome" }, - { - "uid": "wh8nbtrxjl2f67dpybsww6mri0xcaklm", - "css": "export", - "code": 59462, - "src": "typicons" - }, - { - "uid": "9e33d50c92e84bd26d83d1f37d6f0d57", - "css": "admin", - "code": 59432, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M427.1 385.4Q437.5 354.2 468.8 343.8 500 333.3 531.3 343.8 562.5 354.2 572.9 385.4 583.3 416.7 572.9 447.9 562.5 479.2 531.3 489.6 500 500 468.8 489.6 437.5 479.2 427.1 447.9 416.7 416.7 427.1 385.4M166.7 41.7Q187.5 20.8 218.8 10.4 250 0 291.7 0 333.3 0 375 0 416.7 0 458.3 0 500 0 541.7 0 583.3 0 625 0 666.7 0 708.3 0 750 0 781.3 10.4 812.5 20.8 833.3 41.7 854.2 62.5 875 83.3 895.8 104.2 916.7 125 937.5 145.8 958.3 166.7 979.2 187.5 989.6 218.8 1000 250 1000 291.7 1000 333.3 1000 375 1000 416.7 1000 458.3 1000 500 989.6 531.3 979.2 562.5 958.3 583.3 937.5 604.2 927.1 635.4 916.7 666.7 916.7 708.3 916.7 750 906.3 781.3 895.8 812.5 875 833.3 854.2 854.2 833.3 875 812.5 895.8 791.7 916.7 770.8 937.5 750 958.3 729.2 979.2 697.9 989.6 666.7 1000 625 1000 583.3 1000 541.7 1000 500 1000 458.3 1000 416.7 1000 375 1000 333.3 1000 302.1 989.6 270.8 979.2 250 958.3 229.2 937.5 208.3 916.7 187.5 895.8 166.7 875 145.8 854.2 125 833.3 104.2 812.5 93.8 781.3 83.3 750 83.3 708.3 83.3 666.7 72.9 635.4 62.5 604.2 41.7 583.3 20.8 562.5 10.4 531.3 0 500 0 458.3 0 416.7 0 375 0 333.3 0 291.7 0 250 10.4 218.8 20.8 187.5 41.7 166.7 62.5 145.8 83.3 125 104.2 104.2 125 83.3 145.8 62.5 166.7 41.7M541.7 750Q583.3 750 614.6 739.6 645.8 729.2 645.8 708.3 645.8 687.5 614.6 677.1 583.3 666.7 541.7 666.7 500 666.7 458.3 666.7 416.7 666.7 385.4 677.1 354.2 687.5 354.2 708.3 354.2 729.2 385.4 739.6 416.7 750 458.3 750 500 750 541.7 750M541.7 583.3Q583.3 583.3 614.6 572.9 645.8 562.5 666.7 541.7 687.5 520.8 708.3 500 729.2 479.2 739.6 447.9 750 416.7 739.6 385.4 729.2 354.2 708.3 333.3 687.5 312.5 666.7 291.7 645.8 270.8 614.6 260.4 583.3 250 541.7 250 500 250 458.3 250 416.7 250 385.4 260.4 354.2 270.8 333.3 291.7 312.5 312.5 291.7 333.3 270.8 354.2 260.4 385.4 250 416.7 260.4 447.9 270.8 479.2 291.7 500 312.5 520.8 333.3 541.7 354.2 562.5 385.4 572.9 416.7 583.3 458.3 583.3 500 583.3 541.7 583.3", - "width": 1000 - }, - "search": [ - "admin" - ] - }, { "uid": "4bad23bc52aaddaac37da019e46b6f6b", - "css": "discord", - "code": 59464, + "css": "discord_", + "code": 59405, "src": "custom_icons", "selected": true, "svg": { @@ -458,152 +308,12 @@ "discord-logo-white" ] }, - { - "uid": "777bee87001d4219672e09caa12e1c78", - "css": "crafting", - "code": 59425, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M909.1 62.9Q923.1 21 965 7 1007-7 1049 7 1090.9 21 1104.9 62.9 1118.9 104.9 1118.9 160.8 1118.9 216.8 1118.9 272.7 1118.9 328.7 1118.9 384.6 1118.9 440.6 1118.9 496.5 1118.9 552.4 1118.9 608.4 1118.9 664.3 1118.9 720.3 1118.9 776.2 1118.9 832.2 1118.9 888.1 1104.9 930.1 1090.9 972 1049 986 1007 1000 951 1000 895.1 1000 839.2 1000 783.2 1000 727.3 1000 671.3 1000 615.4 1000 559.4 1000 503.5 1000 447.6 1000 391.6 1000 335.7 1000 279.7 1000 223.8 1000 167.8 1000 111.9 1000 69.9 986 28 972 14 930.1 0 888.1 0 832.2 0 776.2 0 720.3 0 664.3 0 608.4 0 552.4 0 496.5 0 440.6 0 384.6 0 328.7 0 272.7 0 216.8 14 174.8 28 132.9 55.9 132.9 83.9 132.9 111.9 160.8 139.9 188.8 167.8 216.8 195.8 244.8 223.8 272.7 251.7 300.7 279.7 328.7 307.7 356.6 335.7 384.6 363.6 412.6 391.6 412.6 419.6 412.6 433.6 370.6 447.6 328.7 447.6 272.7 447.6 216.8 461.5 174.8 475.5 132.9 503.5 132.9 531.5 132.9 559.4 160.8 587.4 188.8 615.4 216.8 643.4 244.8 671.3 272.7 699.3 300.7 727.3 328.7 755.2 356.6 783.2 384.6 811.2 412.6 839.2 412.6 867.1 412.6 881.1 370.6 895.1 328.7 895.1 272.7 895.1 216.8 895.1 160.8 895.1 104.9 909.1 62.9M839.2 888.1Q895.1 888.1 937.1 874.1 979 860.1 993 818.2 1007 776.2 1007 720.3 1007 664.3 993 622.4 979 580.4 937.1 566.4 895.1 552.4 853.1 538.5 811.2 524.5 783.2 496.5 755.2 468.5 727.3 440.6 699.3 412.6 671.3 384.6 643.4 356.6 615.4 356.6 587.4 356.6 573.4 398.6 559.4 440.6 545.5 482.5 531.5 524.5 489.5 538.5 447.6 552.4 405.6 538.5 363.6 524.5 335.7 496.5 307.7 468.5 279.7 440.6 251.7 412.6 223.8 384.6 195.8 356.6 167.8 356.6 139.9 356.6 125.9 398.6 111.9 440.6 111.9 496.5 111.9 552.4 111.9 608.4 111.9 664.3 111.9 720.3 111.9 776.2 125.9 818.2 139.9 860.1 181.8 874.1 223.8 888.1 279.7 888.1 335.7 888.1 391.6 888.1 447.6 888.1 503.5 888.1 559.4 888.1 615.4 888.1 671.3 888.1 727.3 888.1 783.2 888.1 839.2 888.1M251.7 720.3Q251.7 692.3 279.7 692.3 307.7 692.3 307.7 720.3 307.7 748.3 279.7 748.3 251.7 748.3 251.7 720.3M475.5 720.3Q475.5 692.3 503.5 692.3 531.5 692.3 531.5 720.3 531.5 748.3 503.5 748.3 475.5 748.3 475.5 720.3M699.3 720.3Q699.3 692.3 727.3 692.3 755.2 692.3 755.2 720.3 755.2 748.3 727.3 748.3 699.3 748.3 699.3 720.3", - "width": 1119 - }, - "search": [ - "crafting" - ] - }, - { - "uid": "39651356f0f411effa9ab4a83abd2d0d", - "css": "defense", - "code": 59465, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M101.3 0C88.6 0 75.9 2.1 63.3 6.3 38 14.8 21.1 31.6 12.7 57 4.2 82.3 0 111.8 0 145.6V246.8 348.1 449.4C0 483.1 4.2 512.7 12.7 538 21.1 563.3 33.8 584.4 50.6 601.3L101.3 651.9 151.9 702.5 202.5 753.2 253.2 803.8 303.8 854.4 354.4 905.1 405.1 955.7C421.9 972.6 443 985.2 468.4 993.7 493.7 1002.1 519 1002.1 544.3 993.7 569.6 985.2 590.7 972.6 607.6 955.7L658.2 905.1 708.9 854.4 759.5 803.8 810.1 753.2 860.8 702.5 911.4 651.9 962 601.3C978.9 584.4 991.6 563.3 1000 538 1008.4 512.7 1012.7 483.1 1012.7 449.4V348.1 246.8 145.6C1012.7 111.8 1008.4 82.3 1000 57 991.6 31.6 974.7 14.8 949.4 6.3 924.1-2.1 898.7-2.1 873.4 6.3 848.1 14.8 827 27.4 810.1 44.3L759.5 94.9 708.9 145.6C692 162.4 670.9 175.1 645.6 183.5 620.3 192 590.7 196.2 557 196.2H455.7C421.9 196.2 392.4 192 367.1 183.5 341.8 175.1 320.7 162.4 303.8 145.6L253.2 94.9 202.5 44.3C185.7 27.4 164.6 14.8 139.2 6.3 126.6 2.1 113.9 0 101.3 0ZM151.9 120.3C168.8 120.3 185.7 128.7 202.5 145.6L253.2 196.2 303.8 246.8C320.7 263.7 341.8 276.4 367.1 284.8 392.4 293.2 421.9 297.5 455.7 297.5H557C590.7 297.5 620.3 293.2 645.6 284.8 670.9 276.4 692 263.7 708.9 246.8L759.5 196.2 810.1 145.6C827 128.7 843.9 120.3 860.8 120.3 877.6 120.3 890.3 132.9 898.7 158.2 907.2 183.5 911.4 213.1 911.4 246.8V348.1 449.4C911.4 483.1 907.2 512.7 898.7 538 890.3 563.3 877.6 584.4 860.8 601.3L810.1 651.9 759.5 702.5 708.9 753.2 658.2 803.8 607.6 854.4C590.7 871.3 569.6 884 544.3 892.4 519 900.8 493.7 900.8 468.4 892.4 443 884 421.9 871.3 405.1 854.4L354.4 803.8 303.8 753.2 253.2 702.5 202.5 651.9 151.9 601.3C135 584.4 122.4 563.3 113.9 538 105.5 512.7 101.3 483.1 101.3 449.4V348.1 246.8C101.3 213.1 105.5 183.5 113.9 158.2 122.4 132.9 135 120.3 151.9 120.3Z", - "width": 1013 - }, - "search": [ - "defense" - ] - }, - { - "uid": "10e2d46ee8b987f0a414451439b23036", - "css": "effect", - "code": 59466, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M250 0C216.7 0 187.5 4.2 162.5 12.5 137.5 20.8 116.7 33.3 100 50L50 100C33.3 116.7 20.8 137.5 12.5 162.5 4.2 187.5 0 216.7 0 250V350 450 550 650 750C0 783.3 4.2 812.5 12.5 837.5 20.8 862.5 33.3 883.3 50 900L100 950C116.7 966.7 137.5 979.2 162.5 987.5 187.5 995.8 216.7 1000 250 1000H350 450 550 650 750C783.3 1000 812.5 995.8 837.5 987.5 862.5 979.2 883.3 966.7 900 950L950 900C966.7 883.3 979.2 862.5 987.5 837.5 995.8 812.5 1000 783.3 1000 750V650 550 450 350 250C1000 216.7 995.8 187.5 987.5 162.5 979.2 137.5 966.7 116.7 950 100L900 50C883.3 33.3 862.5 20.8 837.5 12.5 812.5 4.2 783.3 0 750 0H650 550 450 350ZM350 100H450 550 650C683.3 100 712.5 104.2 737.5 112.5 762.5 120.8 783.3 133.3 800 150L850 200C866.7 216.7 879.2 237.5 887.5 262.5 895.8 287.5 900 316.7 900 350V450 550 650C900 683.3 895.8 712.5 887.5 737.5 879.2 762.5 866.7 783.3 850 800L800 850C783.3 866.7 762.5 879.2 737.5 887.5 712.5 895.8 683.3 900 650 900H550 450 350C316.7 900 287.5 895.8 262.5 887.5 237.5 879.2 216.7 866.7 200 850L150 800C133.3 783.3 120.8 762.5 112.5 737.5 104.2 712.5 100 683.3 100 650V550 450 350C100 316.7 104.2 287.5 112.5 262.5 120.8 237.5 133.3 216.7 150 200L200 150C216.7 133.3 237.5 120.8 262.5 112.5 287.5 104.2 316.7 100 350 100ZM500 306.3C487.5 306.3 475 308.3 462.5 312.5 437.5 320.8 416.7 333.3 400 350L350 400C333.3 416.7 320.8 437.5 312.5 462.5 304.2 487.5 304.2 512.5 312.5 537.5 320.8 562.5 333.3 583.3 350 600L400 650C416.7 666.7 437.5 679.2 462.5 687.5 487.5 695.8 512.5 695.8 537.5 687.5 562.5 679.2 583.3 666.7 600 650L650 600C666.7 583.3 679.2 562.5 687.5 537.5 695.8 512.5 695.8 487.5 687.5 462.5 679.2 437.5 666.7 416.7 650 400L600 350C583.3 333.3 562.5 320.8 537.5 312.5 525 308.3 512.5 306.3 500 306.3Z", - "width": 1000 - }, - "search": [ - "effect" - ] - }, - { - "uid": "a4d157485929f47f7a7872bac82ffbb7", - "css": "liquid", - "code": 59467, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M0 57.1Q0 28.6 42.9 14.3 85.7 0 142.9 0 200 0 257.1 0 314.3 0 371.4 0 428.6 0 485.7 0 542.9 0 600 0 657.1 0 700 14.3 742.9 28.6 742.9 57.1 742.9 85.7 714.3 114.3 685.7 142.9 671.4 185.7 657.1 228.6 671.4 271.4 685.7 314.3 728.6 328.6 771.4 342.9 814.3 328.6 857.1 314.3 885.7 285.7 914.3 257.1 942.9 257.1 971.4 257.1 985.7 300 1000 342.9 1000 400 1000 457.1 1000 514.3 1000 571.4 1000 628.6 1000 685.7 1000 742.9 1000 800 1000 857.1 1000 914.3 985.7 957.1 971.4 1000 942.9 1000 914.3 1000 885.7 971.4 857.1 942.9 814.3 928.6 771.4 914.3 714.3 914.3 657.1 914.3 600 914.3 542.9 914.3 485.7 914.3 428.6 914.3 385.7 900 342.9 885.7 314.3 857.1 285.7 828.6 257.1 800 228.6 771.4 200 742.9 171.4 714.3 142.9 685.7 114.3 657.1 100 614.3 85.7 571.4 85.7 514.3 85.7 457.1 85.7 400 85.7 342.9 85.7 285.7 85.7 228.6 71.4 185.7 57.1 142.9 28.6 114.3 0 85.7 0 57.1M714.3 800Q771.4 800 814.3 785.7 857.1 771.4 871.4 728.6 885.7 685.7 885.7 628.6 885.7 571.4 871.4 528.6 857.1 485.7 814.3 471.4 771.4 457.1 728.6 442.9 685.7 428.6 657.1 400 628.6 371.4 600 342.9 571.4 314.3 557.1 271.4 542.9 228.6 528.6 185.7 514.3 142.9 471.4 128.6 428.6 114.3 371.4 114.3 314.3 114.3 271.4 128.6 228.6 142.9 214.3 185.7 200 228.6 200 285.7 200 342.9 200 400 200 457.1 200 514.3 200 571.4 214.3 614.3 228.6 657.1 257.1 685.7 285.7 714.3 314.3 742.9 342.9 771.4 385.7 785.7 428.6 800 485.7 800 542.9 800 600 800 657.1 800 714.3 800", - "width": 1000 - }, - "search": [ - "liquid" - ] - }, - { - "uid": "757a660cd53e3349515bc329726c3dbd", - "css": "production", - "code": 59469, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M7 69.9Q21 28 62.9 14 104.9 0 160.8 0 216.8 0 272.7 0 328.7 0 384.6 0 440.6 0 496.5 0 552.4 0 608.4 0 664.3 0 720.3 0 776.2 0 818.2 14 860.1 28 874.1 69.9 888.1 111.9 874.1 153.8 860.1 195.8 832.2 223.8 804.2 251.7 776.2 279.7 748.3 307.7 720.3 335.7 692.3 363.6 678.3 405.6 664.3 447.6 664.3 503.5 664.3 559.4 664.3 615.4 664.3 671.3 664.3 727.3 664.3 783.2 650.3 825.2 636.4 867.1 608.4 895.1 580.4 923.1 552.4 951 524.5 979 482.5 993 440.6 1007 398.6 993 356.6 979 328.7 951 300.7 923.1 272.7 895.1 244.8 867.1 230.8 825.2 216.8 783.2 216.8 727.3 216.8 671.3 216.8 615.4 216.8 559.4 216.8 503.5 216.8 447.6 202.8 405.6 188.8 363.6 160.8 335.7 132.9 307.7 104.9 279.7 76.9 251.7 49 223.8 21 195.8 7 153.8-7 111.9 7 69.9M342.7 825.2Q356.6 867.1 384.6 867.1 412.6 867.1 440.6 839.2 468.5 811.2 496.5 783.2 524.5 755.2 524.5 727.3 524.5 699.3 496.5 671.3 468.5 643.4 468.5 615.4 468.5 587.4 496.5 559.4 524.5 531.5 524.5 503.5 524.5 475.5 496.5 447.6 468.5 419.6 440.6 391.6 412.6 363.6 384.6 363.6 356.6 363.6 342.7 405.6 328.7 447.6 328.7 503.5 328.7 559.4 328.7 615.4 328.7 671.3 328.7 727.3 328.7 783.2 342.7 825.2M608.4 223.8Q664.3 223.8 706.3 209.8 748.3 195.8 748.3 167.8 748.3 139.9 706.3 125.9 664.3 111.9 608.4 111.9 552.4 111.9 496.5 111.9 440.6 111.9 384.6 111.9 328.7 111.9 272.7 111.9 216.8 111.9 174.8 125.9 132.9 139.9 132.9 167.8 132.9 195.8 174.8 209.8 216.8 223.8 272.7 223.8 328.7 223.8 384.6 223.8 440.6 223.8 496.5 223.8 552.4 223.8 608.4 223.8", - "width": 881 - }, - "search": [ - "production" - ] - }, - { - "uid": "fffdfd2df00136ae95e542b0af62d8fa", - "css": "turret", - "code": 59470, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M125.9 62.9Q139.9 21 181.8 7 223.8-7 265.7 7 307.7 21 321.7 62.9 335.7 104.9 349.7 146.9 363.6 188.8 405.6 202.8 447.6 216.8 489.5 202.8 531.5 188.8 545.5 146.9 559.4 104.9 573.4 62.9 587.4 21 629.4 7 671.3-7 713.3 7 755.2 21 769.2 62.9 783.2 104.9 783.2 160.8 783.2 216.8 783.2 272.7 783.2 328.7 797.2 370.6 811.2 412.6 839.2 440.6 867.1 468.5 881.1 510.5 895.1 552.4 895.1 608.4 895.1 664.3 895.1 720.3 895.1 776.2 895.1 832.2 895.1 888.1 881.1 930.1 867.1 972 825.2 986 783.2 1000 727.3 1000 671.3 1000 629.4 986 587.4 972 559.4 944.1 531.5 916.1 489.5 902.1 447.6 888.1 405.6 902.1 363.6 916.1 335.7 944.1 307.7 972 265.7 986 223.8 1000 167.8 1000 111.9 1000 69.9 986 28 972 14 930.1 0 888.1 0 832.2 0 776.2 0 720.3 0 664.3 0 608.4 0 552.4 14 510.5 28 468.5 55.9 440.6 83.9 412.6 97.9 370.6 111.9 328.7 111.9 272.7 111.9 216.8 111.9 160.8 111.9 104.9 125.9 62.9M629.4 874.1Q671.3 888.1 713.3 874.1 755.2 860.1 769.2 818.2 783.2 776.2 783.2 720.3 783.2 664.3 783.2 608.4 783.2 552.4 769.2 510.5 755.2 468.5 727.3 440.6 699.3 412.6 671.3 384.6 643.4 356.6 601.4 342.7 559.4 328.7 503.5 328.7 447.6 328.7 391.6 328.7 335.7 328.7 293.7 342.7 251.7 356.6 223.8 384.6 195.8 412.6 167.8 440.6 139.9 468.5 125.9 510.5 111.9 552.4 111.9 608.4 111.9 664.3 111.9 720.3 111.9 776.2 125.9 818.2 139.9 860.1 181.8 874.1 223.8 888.1 265.7 874.1 307.7 860.1 335.7 832.2 363.6 804.2 405.6 790.2 447.6 776.2 489.5 790.2 531.5 804.2 559.4 832.2 587.4 860.1 629.4 874.1", - "width": 895 - }, - "search": [ - "turret" - ] - }, - { - "uid": "dbc386322a6eec797d94d5cf2af56dc3", - "css": "units", - "code": 59471, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M566.9 0C524.9 0 488.2 5.2 456.7 15.7 425.2 26.2 399 42 378 63L315 126 252 189 189 252 126 315 63 378C42 399 26.2 425.2 15.7 456.7 5.2 488.2 0 524.9 0 566.9 0 608.9 5.2 645.7 15.7 677.2 26.2 708.7 42 724.4 63 724.4 84 724.4 105 713.9 126 692.9 147 671.9 168 661.4 189 661.4 210 661.4 225.7 677.2 236.2 708.7 246.7 740.2 252 776.9 252 818.9 252 860.9 257.2 897.6 267.7 929.1 278.2 960.6 299.2 981.6 330.7 992.1 362.2 1002.6 393.7 1002.6 425.2 992.1 456.7 981.6 477.7 960.6 488.2 929.1L519.7 834.6C530.2 803.1 551.2 782.2 582.7 771.7 614.2 761.2 645.7 761.2 677.2 771.7 708.7 782.2 729.7 803.1 740.2 834.6L771.7 929.1C782.2 960.6 803.1 981.6 834.6 992.1 866.1 1002.6 897.6 1002.6 929.1 992.1 960.6 981.6 981.6 960.6 992.1 929.1 1002.6 897.6 1007.9 860.9 1007.9 818.9 1007.9 776.9 1013.1 740.2 1023.6 708.7 1034.1 677.2 1049.9 661.4 1070.9 661.4 1091.9 661.4 1112.9 671.9 1133.9 692.9 1154.9 713.9 1175.9 724.4 1196.9 724.4 1217.8 724.4 1233.6 708.7 1244.1 677.2 1254.6 645.7 1259.8 608.9 1259.8 566.9 1259.8 524.9 1254.6 488.2 1244.1 456.7 1233.6 425.2 1217.8 399 1196.9 378L1133.9 315 1070.9 252 1007.9 189 944.9 126 881.9 63C860.9 42 834.6 26.2 803.1 15.7 771.7 5.2 734.9 0 692.9 0ZM566.9 126H692.9C734.9 126 771.7 131.2 803.1 141.7 834.6 152.2 860.9 168 881.9 189L944.9 252 1007.9 315 1070.9 378C1091.9 399 1102.4 419.9 1102.4 440.9 1102.4 461.9 1086.6 477.7 1055.1 488.2L960.6 519.7C929.1 530.2 902.9 545.9 881.9 566.9 860.9 587.9 834.6 603.7 803.1 614.2 771.7 624.7 734.9 629.9 692.9 629.9H566.9C524.9 629.9 488.2 624.7 456.7 614.2 425.2 603.7 399 587.9 378 566.9 357 545.9 330.7 530.2 299.2 519.7L204.7 488.2C173.2 477.7 157.5 461.9 157.5 440.9 157.5 419.9 168 399 189 378L252 315 315 252 378 189C399 168 425.2 152.2 456.7 141.7 488.2 131.2 524.9 126 566.9 126ZM629.9 259.8C614.2 259.8 598.4 262.5 582.7 267.7 551.2 278.2 535.4 294 535.4 315 535.4 336 551.2 351.7 582.7 362.2 614.2 372.7 645.7 372.7 677.2 362.2 708.7 351.7 724.4 336 724.4 315 724.4 294 708.7 278.2 677.2 267.7 661.4 262.5 645.7 259.8 629.9 259.8Z", - "width": 1260 - }, - "search": [ - "units" - ] - }, - { - "uid": "4fe8d91bf30522a9a76bab94836b2dd7", - "css": "upgrade", - "code": 59472, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M396.2 44Q421.4 18.9 459.1 6.3 496.9-6.3 534.6 6.3 572.3 18.9 597.5 44 622.6 69.2 647.8 94.3 673 119.5 698.1 144.7 723.3 169.8 748.4 195 773.6 220.1 798.7 245.3 823.9 270.4 849.1 295.6 874.2 320.8 899.4 345.9 924.5 371.1 949.7 396.2 974.8 421.4 987.4 459.1 1000 496.9 987.4 534.6 974.8 572.3 937.1 584.9 899.4 597.5 849.1 597.5 798.7 597.5 761 610.1 723.3 622.6 710.7 660.4 698.1 698.1 698.1 748.4 698.1 798.7 698.1 849.1 698.1 899.4 685.5 937.1 673 974.8 635.2 987.4 597.5 1000 547.2 1000 496.9 1000 446.5 1000 396.2 1000 358.5 987.4 320.8 974.8 308.2 937.1 295.6 899.4 295.6 849.1 295.6 798.7 295.6 748.4 295.6 698.1 283 660.4 270.4 622.6 232.7 610.1 195 597.5 144.7 597.5 94.3 597.5 56.6 584.9 18.9 572.3 6.3 534.6-6.3 496.9 6.3 459.1 18.9 421.4 44 396.2 69.2 371.1 94.3 345.9 119.5 320.8 144.7 295.6 169.8 270.4 195 245.3 220.1 220.1 245.3 195 270.4 169.8 295.6 144.7 320.8 119.5 345.9 94.3 371.1 69.2 396.2 44M459.1 886.8Q496.9 899.4 534.6 886.8 572.3 874.2 584.9 836.5 597.5 798.7 597.5 748.4 597.5 698.1 597.5 647.8 597.5 597.5 610.1 559.7 622.6 522 660.4 509.4 698.1 496.9 735.8 484.3 773.6 471.7 773.6 446.5 773.6 421.4 748.4 396.2 723.3 371.1 698.1 345.9 673 320.8 647.8 295.6 622.6 270.4 597.5 245.3 572.3 220.1 534.6 207.5 496.9 195 459.1 207.5 421.4 220.1 396.2 245.3 371.1 270.4 345.9 295.6 320.8 320.8 295.6 345.9 270.4 371.1 245.3 396.2 220.1 421.4 220.1 446.5 220.1 471.7 257.9 484.3 295.6 496.9 333.3 509.4 371.1 522 383.6 559.7 396.2 597.5 396.2 647.8 396.2 698.1 396.2 748.4 396.2 798.7 408.8 836.5 421.4 874.2 459.1 886.8", - "width": 994 - }, - "search": [ - "upgrade" - ] - }, - { - "uid": "8cbea4558186fc7f4197ccba882dd534", - "css": "save", - "code": 59440, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M11.4 56.8Q22.7 22.7 56.8 11.4 90.9 0 136.4 0 181.8 0 227.3 0 272.7 0 318.2 0 363.6 0 409.1 0 454.5 0 500 0 545.5 0 590.9 0 636.4 0 681.8 0 727.3 0 761.4 11.4 795.5 22.7 818.2 45.5 840.9 68.2 863.6 90.9 886.4 113.6 897.7 147.7 909.1 181.8 909.1 227.3 909.1 272.7 909.1 318.2 909.1 363.6 909.1 409.1 909.1 454.5 909.1 500 909.1 545.5 909.1 590.9 909.1 636.4 909.1 681.8 909.1 727.3 909.1 772.7 909.1 818.2 909.1 863.6 909.1 909.1 897.7 943.2 886.4 977.3 852.3 988.6 818.2 1000 772.7 1000 727.3 1000 681.8 1000 636.4 1000 590.9 1000 545.5 1000 500 1000 454.5 1000 409.1 1000 363.6 1000 318.2 1000 272.7 1000 227.3 1000 181.8 1000 136.4 1000 90.9 1000 56.8 988.6 22.7 977.3 11.4 943.2 0 909.1 0 863.6 0 818.2 0 772.7 0 727.3 0 681.8 0 636.4 0 590.9 0 545.5 0 500 0 454.5 0 409.1 0 363.6 0 318.2 0 272.7 0 227.3 0 181.8 0 136.4 0 90.9 11.4 56.8M500 909.1Q545.5 909.1 579.5 897.7 613.6 886.4 625 852.3 636.4 818.2 636.4 772.7 636.4 727.3 625 693.2 613.6 659.1 579.5 647.7 545.5 636.4 500 636.4 454.5 636.4 409.1 636.4 363.6 636.4 329.5 647.7 295.5 659.1 284.1 693.2 272.7 727.3 272.7 772.7 272.7 818.2 284.1 852.3 295.5 886.4 329.5 897.7 363.6 909.1 409.1 909.1 454.5 909.1 500 909.1M738.6 852.3Q750 886.4 772.7 886.4 795.5 886.4 806.8 852.3 818.2 818.2 818.2 772.7 818.2 727.3 818.2 681.8 818.2 636.4 818.2 590.9 818.2 545.5 818.2 500 818.2 454.5 818.2 409.1 818.2 363.6 818.2 318.2 818.2 272.7 818.2 227.3 818.2 181.8 806.8 147.7 795.5 113.6 761.4 102.3 727.3 90.9 693.2 102.3 659.1 113.6 647.7 147.7 636.4 181.8 636.4 227.3 636.4 272.7 625 306.8 613.6 340.9 579.5 352.3 545.5 363.6 500 363.6 454.5 363.6 409.1 363.6 363.6 363.6 329.5 352.3 295.5 340.9 284.1 306.8 272.7 272.7 272.7 227.3 272.7 181.8 261.4 147.7 250 113.6 215.9 102.3 181.8 90.9 147.7 102.3 113.6 113.6 102.3 147.7 90.9 181.8 90.9 227.3 90.9 272.7 90.9 318.2 90.9 363.6 90.9 409.1 90.9 454.5 90.9 500 90.9 545.5 90.9 590.9 90.9 636.4 90.9 681.8 90.9 727.3 90.9 772.7 90.9 818.2 102.3 852.3 113.6 886.4 136.4 886.4 159.1 886.4 170.5 852.3 181.8 818.2 181.8 772.7 181.8 727.3 181.8 681.8 181.8 636.4 193.2 602.3 204.5 568.2 238.6 556.8 272.7 545.5 318.2 545.5 363.6 545.5 409.1 545.5 454.5 545.5 500 545.5 545.5 545.5 590.9 545.5 636.4 545.5 670.5 556.8 704.5 568.2 715.9 602.3 727.3 636.4 727.3 681.8 727.3 727.3 727.3 772.7 727.3 818.2 738.6 852.3M420.5 261.4Q454.5 272.7 488.6 261.4 522.7 250 534.1 215.9 545.5 181.8 534.1 147.7 522.7 113.6 488.6 102.3 454.5 90.9 420.5 102.3 386.4 113.6 375 147.7 363.6 181.8 375 215.9 386.4 250 420.5 261.4", - "width": 909 - }, - "search": [ - "save" - ] - }, { "uid": "dd6df3b754e8d0dbf09d9b24088f0442", "css": "box", "code": 59422, "src": "iconic" }, - { - "uid": "3b1a66b7efb81f4f8980f3edc369eeda", - "css": "link", - "code": 59444, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M208.3 0C180.6 0 156.2 3.5 135.4 10.4 114.6 17.4 97.2 27.8 83.3 41.7L41.7 83.3C27.8 97.2 17.4 114.6 10.4 135.4 3.5 156.3 0 180.6 0 208.3V291.7 375 458.3 541.7 625 708.3 791.7C0 819.4 3.5 843.8 10.4 864.6 17.4 885.4 27.8 902.8 41.7 916.7L83.3 958.3C97.2 972.2 114.6 982.6 135.4 989.6 156.2 996.5 180.6 1000 208.3 1000H291.7 375 458.3 541.7 625 708.3 791.7C819.4 1000 843.7 996.5 864.6 989.6 885.4 982.6 902.8 972.2 916.7 958.3L958.3 916.7C972.2 902.8 982.6 885.4 989.6 864.6 996.5 843.8 1000 819.4 1000 791.7 1000 763.9 996.5 739.6 989.6 718.8 982.6 697.9 972.2 680.6 958.3 666.7L916.7 625C902.8 611.1 888.9 604.2 875 604.2 861.1 604.2 850.7 614.6 843.7 635.4 836.8 656.3 833.3 680.6 833.3 708.3 833.3 736.1 829.9 760.4 822.9 781.3 816 802.1 802.1 816 781.2 822.9 760.4 829.9 736.1 833.3 708.3 833.3H625 541.7 458.3 375 291.7C263.9 833.3 239.6 829.9 218.7 822.9 197.9 816 184 802.1 177.1 781.3 170.1 760.4 166.7 736.1 166.7 708.3V625 541.7 458.3 375 291.7C166.7 263.9 170.1 239.6 177.1 218.8 184 197.9 197.9 184 218.7 177.1 239.6 170.1 263.9 166.7 291.7 166.7 319.4 166.7 343.7 163.2 364.6 156.3 385.4 149.3 395.8 138.9 395.8 125 395.8 111.1 388.9 97.2 375 83.3L333.3 41.7C319.4 27.8 302.1 17.4 281.2 10.4 260.4 3.5 236.1 0 208.3 0ZM625 0C597.2 0 572.9 3.5 552.1 10.4 531.2 17.4 520.8 27.8 520.8 41.7 520.8 55.6 527.8 69.4 541.7 83.3L583.3 125 625 166.7C638.9 180.6 645.8 194.4 645.8 208.3 645.8 222.2 638.9 236.1 625 250L583.3 291.7 541.7 333.3 500 375 458.3 416.7 416.7 458.3 375 500C361.1 513.9 350.7 531.3 343.7 552.1 336.8 572.9 336.8 593.8 343.7 614.6 350.7 635.4 364.6 649.3 385.4 656.3 406.2 663.2 427.1 663.2 447.9 656.3 468.7 649.3 486.1 638.9 500 625L541.7 583.3 583.3 541.7 625 500 666.7 458.3 708.3 416.7 750 375C763.9 361.1 777.8 354.2 791.7 354.2 805.6 354.2 819.4 361.1 833.3 375L875 416.7 916.7 458.3C930.6 472.2 944.4 479.2 958.3 479.2 972.2 479.2 982.6 468.8 989.6 447.9 996.5 427.1 1000 402.8 1000 375V291.7 208.3 125C1000 97.2 996.5 72.9 989.6 52.1 982.6 31.3 968.7 17.4 947.9 10.4 927.1 3.5 902.8 0 875 0H791.7 708.3Z", - "width": 1000 - }, - "search": [ - "link" - ] - }, { "uid": "f08ba9f0e8f9b426a92efcaa59c1e932", "css": "reddit-alien", @@ -634,296 +344,10 @@ "code": 61825, "src": "fontawesome" }, - { - "uid": "ffe24157e3c63b2ad9526b4e779caefb", - "css": "itchio", - "code": 59468, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M303.8 44.3Q329.1 19 367.1 6.3 405.1-6.3 443 6.3 481 19 506.3 44.3 531.6 69.6 569.6 82.3 607.6 94.9 658.2 94.9 708.9 94.9 759.5 94.9 810.1 94.9 848.1 82.3 886.1 69.6 911.4 44.3 936.7 19 974.7 6.3 1012.7-6.3 1050.6 6.3 1088.6 19 1113.9 44.3 1139.2 69.6 1164.6 94.9 1189.9 120.3 1202.5 158.2 1215.2 196.2 1215.2 246.8 1215.2 297.5 1227.8 335.4 1240.5 373.4 1265.8 398.7 1291.1 424.1 1316.5 449.4 1341.8 474.7 1367.1 500 1392.4 525.3 1405.1 563.3 1417.7 601.3 1417.7 651.9 1417.7 702.5 1417.7 753.2 1417.7 803.8 1405.1 841.8 1392.4 879.7 1367.1 905.1 1341.8 930.4 1316.5 955.7 1291.1 981 1253.2 993.7 1215.2 1006.3 1177.2 993.7 1139.2 981 1113.9 955.7 1088.6 930.4 1063.3 905.1 1038 879.7 1012.7 854.4 987.3 829.1 949.4 816.5 911.4 803.8 860.8 803.8 810.1 803.8 759.5 803.8 708.9 803.8 658.2 803.8 607.6 803.8 557 803.8 506.3 803.8 468.4 816.5 430.4 829.1 405.1 854.4 379.7 879.7 354.4 905.1 329.1 930.4 303.8 955.7 278.5 981 240.5 993.7 202.5 1006.3 164.6 993.7 126.6 981 101.3 955.7 75.9 930.4 50.6 905.1 25.3 879.7 12.7 841.8 0 803.8 0 753.2 0 702.5 0 651.9 0 601.3 12.7 563.3 25.3 525.3 50.6 500 75.9 474.7 101.3 449.4 126.6 424.1 151.9 398.7 177.2 373.4 189.9 335.4 202.5 297.5 202.5 246.8 202.5 196.2 215.2 158.2 227.8 120.3 253.2 94.9 278.5 69.6 303.8 44.3M670.9 689.9Q708.9 702.5 746.8 689.9 784.8 677.2 797.5 639.2 810.1 601.3 822.8 563.3 835.4 525.3 873.4 512.7 911.4 500 949.4 487.3 987.3 474.7 987.3 449.4 987.3 424.1 962 398.7 936.7 373.4 911.4 348.1 886.1 322.8 860.8 297.5 835.4 272.2 810.1 246.8 784.8 221.5 746.8 208.9 708.9 196.2 670.9 208.9 632.9 221.5 607.6 246.8 582.3 272.2 557 297.5 531.6 322.8 506.3 348.1 481 373.4 455.7 398.7 430.4 424.1 430.4 449.4 430.4 474.7 468.4 487.3 506.3 500 544.3 512.7 582.3 525.3 594.9 563.3 607.6 601.3 620.3 639.2 632.9 677.2 670.9 689.9", - "width": 1418 - }, - "search": [ - "itchio" - ] - }, - { - "uid": "4fa999c5ba68a4ec62d4abe5e8e51076", - "css": "line", - "code": 59473, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M836.8 36.8Q857.9 15.8 889.5 5.3 921.1-5.3 952.6 5.3 984.2 15.8 994.7 47.4 1005.3 78.9 994.7 110.5 984.2 142.1 963.2 163.2 942.1 184.2 921.1 205.3 900 226.3 878.9 247.4 857.9 268.4 836.8 289.5 815.8 310.5 794.7 331.6 773.7 352.6 752.6 373.7 731.6 394.7 710.5 415.8 689.5 436.8 668.4 457.9 647.4 478.9 626.3 500 605.3 521.1 584.2 542.1 563.2 563.2 542.1 584.2 521.1 605.3 500 626.3 478.9 647.4 457.9 668.4 436.8 689.5 415.8 710.5 394.7 731.6 373.7 752.6 352.6 773.7 331.6 794.7 310.5 815.8 289.5 836.8 268.4 857.9 247.4 878.9 226.3 900 205.3 921.1 184.2 942.1 163.2 963.2 142.1 984.2 110.5 994.7 78.9 1005.3 47.4 994.7 15.8 984.2 5.3 952.6-5.3 921.1 5.3 889.5 15.8 857.9 36.8 836.8 57.9 815.8 78.9 794.7 100 773.7 121.1 752.6 142.1 731.6 163.2 710.5 184.2 689.5 205.3 668.4 226.3 647.4 247.4 626.3 268.4 605.3 289.5 584.2 310.5 563.2 331.6 542.1 352.6 521.1 373.7 500 394.7 478.9 415.8 457.9 436.8 436.8 457.9 415.8 478.9 394.7 500 373.7 521.1 352.6 542.1 331.6 563.2 310.5 584.2 289.5 605.3 268.4 626.3 247.4 647.4 226.3 668.4 205.3 689.5 184.2 710.5 163.2 731.6 142.1 752.6 121.1 773.7 100 794.7 78.9 815.8 57.9 836.8 36.8", - "width": 1000 - }, - "search": [ - "line" - ] - }, - { - "uid": "d4d06d27c6e566237097413b3695b4aa", - "css": "spray", - "code": 59474, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M18.2 0C6.1 0 0 6.1 0 18.2 0 30.3 6.1 36.4 18.2 36.4 30.3 36.4 36.4 30.3 36.4 18.2 36.4 6.1 30.3 0 18.2 0ZM454.5 54.5C430.3 54.5 409.1 57.6 390.9 63.6 372.7 69.7 363.6 78.8 363.6 90.9 363.6 103 369.7 115.2 381.8 127.3 393.9 139.4 400 151.5 400 163.6 400 175.8 393.9 187.9 381.8 200L345.5 236.4 309.1 272.7 272.7 309.1 236.4 345.5C224.2 357.6 218.2 369.7 218.2 381.8 218.2 393.9 227.3 403 245.5 409.1 263.6 415.2 284.8 418.2 309.1 418.2H381.8 454.5 527.3 600 672.7C697 418.2 718.2 415.2 736.4 409.1 754.5 403 763.6 393.9 763.6 381.8 763.6 369.7 757.6 357.6 745.5 345.5L709.1 309.1 672.7 272.7C660.6 260.6 651.5 245.5 645.5 227.3 639.4 209.1 636.4 187.9 636.4 163.6 636.4 139.4 633.3 118.2 627.3 100 621.2 81.8 609.1 69.7 590.9 63.6 572.7 57.6 551.5 54.5 527.3 54.5ZM163.6 72.7C151.5 72.7 145.5 78.8 145.5 90.9 145.5 103 151.5 115.2 163.6 127.3 175.8 139.4 181.8 151.5 181.8 163.6 181.8 175.8 175.8 187.9 163.6 200 151.5 212.1 145.5 224.2 145.5 236.4 145.5 248.5 151.5 254.5 163.6 254.5 175.8 254.5 187.9 248.5 200 236.4L236.4 200C248.5 187.9 254.5 175.8 254.5 163.6 254.5 151.5 248.5 139.4 236.4 127.3L200 90.9C187.9 78.8 175.8 72.7 163.6 72.7ZM18.2 145.5C6.1 145.5 0 151.5 0 163.6 0 175.8 6.1 181.8 18.2 181.8 30.3 181.8 36.4 175.8 36.4 163.6 36.4 151.5 30.3 145.5 18.2 145.5ZM18.2 290.9C6.1 290.9 0 297 0 309.1 0 321.2 6.1 327.3 18.2 327.3 30.3 327.3 36.4 321.2 36.4 309.1 36.4 297 30.3 290.9 18.2 290.9ZM309.1 490.9C284.8 490.9 263.6 493.9 245.5 500 227.3 506.1 215.2 518.2 209.1 536.4 203 554.5 200 575.8 200 600V672.7 745.5C200 769.7 203 790.9 209.1 809.1 215.2 827.3 227.3 839.4 245.5 845.5 263.6 851.5 284.8 854.5 309.1 854.5H381.8 454.5 527.3 600 672.7C697 854.5 718.2 851.5 736.4 845.5 754.5 839.4 766.7 827.3 772.7 809.1 778.8 790.9 781.8 769.7 781.8 745.5V672.7 600C781.8 575.8 778.8 554.5 772.7 536.4 766.7 518.2 754.5 506.1 736.4 500 718.2 493.9 697 490.9 672.7 490.9H600 527.3 454.5 381.8ZM309.1 927.3C284.8 927.3 263.6 930.3 245.5 936.4 227.3 942.4 218.2 951.5 218.2 963.6 218.2 975.8 227.3 984.8 245.5 990.9 263.6 997 284.8 1000 309.1 1000H381.8 454.5 527.3 600 672.7C697 1000 718.2 997 736.4 990.9 754.5 984.8 763.6 975.8 763.6 963.6 763.6 951.5 754.5 942.4 736.4 936.4 718.2 930.3 697 927.3 672.7 927.3H600 527.3 454.5 381.8Z", - "width": 782 - }, - "search": [ - "spray" - ] - }, - { - "uid": "eab433e0de7fbc7ce341bca83f184abb", - "css": "fill", - "code": 59457, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M426 35.9Q443.9 17.9 470.9 9 497.8 0 533.6 0 569.5 0 596.4 9 623.3 17.9 641.3 35.9 659.2 53.8 677.1 71.7 695.1 89.7 704 116.6 713 143.5 713 179.4 713 215.2 704 242.2 695.1 269.1 677.1 287 659.2 304.9 659.2 322.9 659.2 340.8 686.1 349.8 713 358.7 748.9 358.7 784.8 358.7 811.7 367.7 838.6 376.7 856.5 394.6 874.4 412.6 892.4 430.5 910.3 448.4 928.3 466.4 946.2 484.3 964.1 502.2 982.1 520.2 991 547.1 1000 574 1000 609.9 1000 645.7 1000 681.6 1000 717.5 1000 753.4 1000 789.2 1000 825.1 1000 861 991 887.9 982.1 914.8 964.1 914.8 946.2 914.8 937.2 887.9 928.3 861 928.3 825.1 928.3 789.2 919.3 762.3 910.3 735.4 892.4 717.5 874.4 699.6 865.5 672.6 856.5 645.7 847.5 618.8 838.6 591.9 820.6 591.9 802.7 591.9 784.8 609.9 766.8 627.8 748.9 645.7 730.9 663.7 713 681.6 695.1 699.6 677.1 717.5 659.2 735.4 641.3 753.4 623.3 771.3 605.4 789.2 587.4 807.2 569.5 825.1 551.6 843 533.6 861 515.7 878.9 497.8 896.9 479.8 914.8 461.9 932.7 443.9 950.7 426 968.6 408.1 986.5 381.2 995.5 354.3 1004.5 327.4 995.5 300.4 986.5 282.5 968.6 264.6 950.7 246.6 932.7 228.7 914.8 210.8 896.9 192.8 878.9 174.9 861 157 843 139 825.1 121.1 807.2 103.1 789.2 85.2 771.3 67.3 753.4 49.3 735.4 31.4 717.5 13.5 699.6 4.5 672.6-4.5 645.7 4.5 618.8 13.5 591.9 31.4 574 49.3 556.1 67.3 538.1 85.2 520.2 103.1 502.2 121.1 484.3 139 466.4 157 448.4 174.9 430.5 192.8 412.6 210.8 394.6 228.7 376.7 246.6 376.7 264.6 376.7 273.5 403.6 282.5 430.5 273.5 457.4 264.6 484.3 246.6 502.2 228.7 520.2 210.8 538.1 192.8 556.1 174.9 574 157 591.9 148 618.8 139 645.7 148 672.6 157 699.6 174.9 717.5 192.8 735.4 210.8 753.4 228.7 771.3 246.6 789.2 264.6 807.2 282.5 825.1 300.4 843 327.4 852 354.3 861 381.2 852 408.1 843 426 825.1 443.9 807.2 461.9 789.2 479.8 771.3 497.8 753.4 515.7 735.4 533.6 717.5 551.6 699.6 569.5 681.6 587.4 663.7 605.4 645.7 623.3 627.8 641.3 609.9 659.2 591.9 677.1 574 695.1 556.1 695.1 538.1 695.1 520.2 677.1 502.2 659.2 484.3 641.3 466.4 623.3 448.4 605.4 430.5 587.4 412.6 569.5 394.6 551.6 376.7 533.6 358.7 515.7 340.8 506.7 313.9 497.8 287 506.7 260.1 515.7 233.2 533.6 233.2 551.6 233.2 569.5 251.1 587.4 269.1 605.4 269.1 623.3 269.1 632.3 242.2 641.3 215.2 641.3 179.4 641.3 143.5 632.3 116.6 623.3 89.7 596.4 80.7 569.5 71.7 533.6 71.7 497.8 71.7 470.9 80.7 443.9 89.7 435 116.6 426 143.5 426 179.4 426 215.2 426 251.1 426 287 426 322.9 426 358.7 426 394.6 426 430.5 417 457.4 408.1 484.3 390.1 484.3 372.2 484.3 363.2 457.4 354.3 430.5 354.3 394.6 354.3 358.7 354.3 322.9 354.3 287 354.3 251.1 354.3 215.2 354.3 179.4 354.3 143.5 363.2 116.6 372.2 89.7 390.1 71.7 408.1 53.8 426 35.9", - "width": 1000 - }, - "search": [ - "fill" - ] - }, - { - "uid": "d9d4c18716c0d8b23485258e35d9e3a9", - "css": "paste", - "code": 59419, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M392.9 0C369 0 348.2 3 330.4 8.9 312.5 14.9 297.6 23.8 285.7 35.7 273.8 47.6 258.9 56.5 241.1 62.5 223.2 68.5 202.4 71.4 178.6 71.4 154.8 71.4 133.9 74.4 116.1 80.4 98.2 86.3 83.3 95.2 71.4 107.1L35.7 142.9C23.8 154.8 14.9 169.6 8.9 187.5 3 205.4 0 226.2 0 250V321.4 392.9 464.3 535.7 607.1 678.6 750 821.4C0 845.2 3 866.1 8.9 883.9 14.9 901.8 23.8 916.7 35.7 928.6L71.4 964.3C83.3 976.2 98.2 985.1 116.1 991.1 133.9 997 154.8 1000 178.6 1000H250 321.4 392.9 464.3 535.7 607.1 678.6C702.4 1000 723.2 997 741.1 991.1 758.9 985.1 773.8 976.2 785.7 964.3L821.4 928.6C833.3 916.7 842.3 901.8 848.2 883.9 854.2 866.1 857.1 845.2 857.1 821.4V750 678.6 607.1 535.7 464.3 392.9 321.4 250C857.1 226.2 854.2 205.4 848.2 187.5 842.3 169.6 833.3 154.8 821.4 142.9L785.7 107.1C773.8 95.2 758.9 86.3 741.1 80.4 723.2 74.4 702.4 71.4 678.6 71.4 654.8 71.4 633.9 68.5 616.1 62.5 598.2 56.5 583.3 47.6 571.4 35.7 559.5 23.8 544.6 14.9 526.8 8.9 508.9 3 488.1 0 464.3 0ZM428.6 75.9C437.5 75.9 446.4 77.4 455.4 80.4 473.2 86.3 482.1 95.2 482.1 107.1 482.1 119 473.2 128 455.4 133.9 437.5 139.9 419.6 139.9 401.8 133.9 383.9 128 375 119 375 107.1 375 95.2 383.9 86.3 401.8 80.4 410.7 77.4 419.6 75.9 428.6 75.9ZM214.3 218.8C223.2 218.8 232.1 220.2 241.1 223.2 258.9 229.2 273.8 238.1 285.7 250 297.6 261.9 312.5 270.8 330.4 276.8 348.2 282.7 369 285.7 392.9 285.7H464.3C488.1 285.7 508.9 282.7 526.8 276.8 544.6 270.8 559.5 261.9 571.4 250 583.3 238.1 598.2 229.2 616.1 223.2 633.9 217.3 651.8 217.3 669.6 223.2 687.5 229.2 699.4 241.1 705.4 258.9 711.3 276.8 714.3 297.6 714.3 321.4V392.9 464.3 535.7 607.1 678.6 750C714.3 773.8 711.3 794.6 705.4 812.5 699.4 830.4 687.5 842.3 669.6 848.2 651.8 854.2 631 857.1 607.1 857.1H535.7 464.3 392.9 321.4 250C226.2 857.1 205.4 854.2 187.5 848.2 169.6 842.3 157.7 830.4 151.8 812.5 145.8 794.6 142.9 773.8 142.9 750V678.6 607.1 535.7 464.3 392.9 321.4C142.9 297.6 145.8 276.8 151.8 258.9 157.7 241.1 169.6 229.2 187.5 223.2 196.4 220.2 205.4 218.8 214.3 218.8ZM321.4 428.6C297.6 428.6 276.8 431.5 258.9 437.5 241.1 443.5 232.1 452.4 232.1 464.3 232.1 476.2 241.1 485.1 258.9 491.1 276.8 497 297.6 500 321.4 500H392.9 464.3 535.7C559.5 500 580.4 497 598.2 491.1 616.1 485.1 625 476.2 625 464.3 625 452.4 616.1 443.5 598.2 437.5 580.4 431.5 559.5 428.6 535.7 428.6H464.3 392.9ZM321.4 571.4C297.6 571.4 276.8 574.4 258.9 580.4 241.1 586.3 232.1 595.2 232.1 607.1 232.1 619 241.1 628 258.9 633.9 276.8 639.9 297.6 642.9 321.4 642.9H392.9 464.3 535.7C559.5 642.9 580.4 639.9 598.2 633.9 616.1 628 625 619 625 607.1 625 595.2 616.1 586.3 598.2 580.4 580.4 574.4 559.5 571.4 535.7 571.4H464.3 392.9ZM321.4 714.3C297.6 714.3 276.8 717.3 258.9 723.2 241.1 729.2 232.1 738.1 232.1 750 232.1 761.9 241.1 770.8 258.9 776.8 276.8 782.7 297.6 785.7 321.4 785.7H392.9 464.3 535.7C559.5 785.7 580.4 782.7 598.2 776.8 616.1 770.8 625 761.9 625 750 625 738.1 616.1 729.2 598.2 723.2 580.4 717.3 559.5 714.3 535.7 714.3H464.3 392.9Z", - "width": 857 - }, - "search": [ - "paste" - ] - }, - { - "uid": "a69daaa147a4c2bee4b985727c89e1ff", - "css": "book", - "code": 59423, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M227.3 0C197 0 170.5 3.8 147.7 11.4 125 18.9 106.1 30.3 90.9 45.5L45.5 90.9C30.3 106.1 18.9 125 11.4 147.7 3.8 170.5 0 197 0 227.3V318.2 409.1 500 590.9 681.8 772.7 863.6C0 893.9 3.8 920.5 11.4 943.2 18.9 965.9 34.1 981.1 56.8 988.6 79.5 996.2 106.1 1000 136.4 1000H227.3 318.2 409.1 500 590.9 681.8C712.1 1000 738.6 996.2 761.4 988.6 784.1 981.1 803 969.7 818.2 954.5L863.6 909.1C878.8 893.9 890.2 875 897.7 852.3 905.3 829.5 909.1 803 909.1 772.7V681.8 590.9 500 409.1 318.2 227.3 136.4C909.1 106.1 905.3 79.5 897.7 56.8 890.2 34.1 875 18.9 852.3 11.4 829.5 3.8 803 0 772.7 0H681.8 590.9 500 409.1 318.2ZM318.2 90.9H409.1 500 590.9 681.8C712.1 90.9 738.6 94.7 761.4 102.3 784.1 109.8 799.2 125 806.8 147.7 814.4 170.5 818.2 197 818.2 227.3V318.2 409.1 500 590.9 681.8C818.2 712.1 814.4 738.6 806.8 761.4 799.2 784.1 784.1 799.2 761.4 806.8 738.6 814.4 712.1 818.2 681.8 818.2H590.9 500 409.1 318.2C287.9 818.2 261.4 814.4 238.6 806.8 215.9 799.2 200.8 784.1 193.2 761.4 185.6 738.6 181.8 712.1 181.8 681.8V590.9 500 409.1 318.2 227.3C181.8 197 185.6 170.5 193.2 147.7 200.8 125 215.9 109.8 238.6 102.3 261.4 94.7 287.9 90.9 318.2 90.9ZM409.1 181.8C378.8 181.8 352.3 185.6 329.5 193.2 306.8 200.8 291.7 215.9 284.1 238.6 276.5 261.4 276.5 284.1 284.1 306.8 291.7 329.5 306.8 344.7 329.5 352.3 352.3 359.8 378.8 363.6 409.1 363.6H500 590.9C621.2 363.6 647.7 359.8 670.5 352.3 693.2 344.7 708.3 329.5 715.9 306.8 723.5 284.1 723.5 261.4 715.9 238.6 708.3 215.9 693.2 200.8 670.5 193.2 647.7 185.6 621.2 181.8 590.9 181.8H500ZM409.1 454.5C378.8 454.5 352.3 458.3 329.5 465.9 306.8 473.5 295.5 484.8 295.5 500 295.5 515.2 306.8 526.5 329.5 534.1 352.3 541.7 378.8 545.5 409.1 545.5H500 590.9C621.2 545.5 647.7 541.7 670.5 534.1 693.2 526.5 704.5 515.2 704.5 500 704.5 484.8 693.2 473.5 670.5 465.9 647.7 458.3 621.2 454.5 590.9 454.5H500ZM409.1 636.4C378.8 636.4 352.3 640.2 329.5 647.7 306.8 655.3 295.5 666.7 295.5 681.8 295.5 697 306.8 708.3 329.5 715.9 352.3 723.5 378.8 727.3 409.1 727.3H500 590.9C621.2 727.3 647.7 723.5 670.5 715.9 693.2 708.3 704.5 697 704.5 681.8 704.5 666.7 693.2 655.3 670.5 647.7 647.7 640.2 621.2 636.4 590.9 636.4H500Z", - "width": 909 - }, - "search": [ - "book" - ] - }, - { - "uid": "ceb9cde822ac23f35c3bd67a8d0c4fac", - "css": "host", - "code": 59437, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M11.4 56.8Q22.7 22.7 56.8 11.4 90.9 0 136.4 0 181.8 0 227.3 0 272.7 0 318.2 0 363.6 0 409.1 0 454.5 0 500 0 545.5 0 590.9 0 636.4 0 681.8 0 727.3 0 772.7 0 818.2 0 863.6 0 909.1 0 954.5 0 1000 0 1034.1 11.4 1068.2 22.7 1079.5 56.8 1090.9 90.9 1090.9 136.4 1090.9 181.8 1079.5 215.9 1068.2 250 1034.1 261.4 1000 272.7 954.5 272.7 909.1 272.7 863.6 272.7 818.2 272.7 772.7 272.7 727.3 272.7 681.8 272.7 636.4 272.7 590.9 272.7 545.5 272.7 500 272.7 454.5 272.7 409.1 272.7 363.6 272.7 318.2 272.7 272.7 272.7 227.3 272.7 181.8 272.7 136.4 272.7 90.9 272.7 56.8 261.4 22.7 250 11.4 215.9 0 181.8 0 136.4 0 90.9 11.4 56.8M409.1 181.8Q454.5 181.8 488.6 170.5 522.7 159.1 522.7 136.4 522.7 113.6 488.6 102.3 454.5 90.9 409.1 90.9 363.6 90.9 318.2 90.9 272.7 90.9 227.3 90.9 181.8 90.9 147.7 102.3 113.6 113.6 113.6 136.4 113.6 159.1 147.7 170.5 181.8 181.8 227.3 181.8 272.7 181.8 318.2 181.8 363.6 181.8 409.1 181.8M840.9 136.4Q840.9 159.1 863.6 159.1 886.4 159.1 886.4 136.4 886.4 113.6 863.6 113.6 840.9 113.6 840.9 136.4M11.4 420.5Q22.7 386.4 56.8 375 90.9 363.6 136.4 363.6 181.8 363.6 227.3 363.6 272.7 363.6 318.2 363.6 363.6 363.6 409.1 363.6 454.5 363.6 500 363.6 545.5 363.6 590.9 363.6 636.4 363.6 681.8 363.6 727.3 363.6 772.7 363.6 818.2 363.6 863.6 363.6 909.1 363.6 954.5 363.6 1000 363.6 1034.1 375 1068.2 386.4 1079.5 420.5 1090.9 454.5 1090.9 500 1090.9 545.5 1079.5 579.5 1068.2 613.6 1034.1 625 1000 636.4 954.5 636.4 909.1 636.4 863.6 636.4 818.2 636.4 772.7 636.4 727.3 636.4 681.8 636.4 636.4 636.4 590.9 636.4 545.5 636.4 500 636.4 454.5 636.4 409.1 636.4 363.6 636.4 318.2 636.4 272.7 636.4 227.3 636.4 181.8 636.4 136.4 636.4 90.9 636.4 56.8 625 22.7 613.6 11.4 579.5 0 545.5 0 500 0 454.5 11.4 420.5M409.1 545.5Q454.5 545.5 488.6 534.1 522.7 522.7 522.7 500 522.7 477.3 488.6 465.9 454.5 454.5 409.1 454.5 363.6 454.5 318.2 454.5 272.7 454.5 227.3 454.5 181.8 454.5 147.7 465.9 113.6 477.3 113.6 500 113.6 522.7 147.7 534.1 181.8 545.5 227.3 545.5 272.7 545.5 318.2 545.5 363.6 545.5 409.1 545.5M840.9 500Q840.9 522.7 863.6 522.7 886.4 522.7 886.4 500 886.4 477.3 863.6 477.3 840.9 477.3 840.9 500M11.4 784.1Q22.7 750 56.8 738.6 90.9 727.3 136.4 727.3 181.8 727.3 227.3 727.3 272.7 727.3 318.2 727.3 363.6 727.3 409.1 727.3 454.5 727.3 500 727.3 545.5 727.3 590.9 727.3 636.4 727.3 681.8 727.3 727.3 727.3 772.7 727.3 818.2 727.3 863.6 727.3 909.1 727.3 954.5 727.3 1000 727.3 1034.1 738.6 1068.2 750 1079.5 784.1 1090.9 818.2 1090.9 863.6 1090.9 909.1 1079.5 943.2 1068.2 977.3 1034.1 988.6 1000 1000 954.5 1000 909.1 1000 863.6 1000 818.2 1000 772.7 1000 727.3 1000 681.8 1000 636.4 1000 590.9 1000 545.5 1000 500 1000 454.5 1000 409.1 1000 363.6 1000 318.2 1000 272.7 1000 227.3 1000 181.8 1000 136.4 1000 90.9 1000 56.8 988.6 22.7 977.3 11.4 943.2 0 909.1 0 863.6 0 818.2 11.4 784.1M409.1 909.1Q454.5 909.1 488.6 897.7 522.7 886.4 522.7 863.6 522.7 840.9 488.6 829.5 454.5 818.2 409.1 818.2 363.6 818.2 318.2 818.2 272.7 818.2 227.3 818.2 181.8 818.2 147.7 829.5 113.6 840.9 113.6 863.6 113.6 886.4 147.7 897.7 181.8 909.1 227.3 909.1 272.7 909.1 318.2 909.1 363.6 909.1 409.1 909.1M840.9 863.6Q840.9 886.4 863.6 886.4 886.4 886.4 886.4 863.6 886.4 840.9 863.6 840.9 840.9 840.9 840.9 863.6", - "width": 1091 - }, - "search": [ - "host" - ] - }, - { - "uid": "496a07ca2bfa65f351c24b819fae0362", - "css": "exit", - "code": 59416, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M208.3 0C180.6 0 156.2 3.5 135.4 10.4 114.6 17.4 97.2 27.8 83.3 41.7L41.7 83.3C27.8 97.2 17.4 114.6 10.4 135.4 3.5 156.2 0 180.6 0 208.3V291.7 375 458.3 541.7 625 708.3 791.7C0 819.4 3.5 843.7 10.4 864.6 17.4 885.4 27.8 902.8 41.7 916.7L83.3 958.3C97.2 972.2 114.6 982.6 135.4 989.6 156.2 996.5 180.6 1000 208.3 1000H291.7 375 458.3 541.7 625 708.3C736.1 1000 760.4 996.5 781.3 989.6 802.1 982.6 819.4 972.2 833.3 958.3L875 916.7C888.9 902.8 895.8 888.9 895.8 875 895.8 861.1 885.4 850.7 864.6 843.7 843.8 836.8 819.4 833.3 791.7 833.3H708.3 625 541.7 458.3 375 291.7C263.9 833.3 239.6 829.9 218.7 822.9 197.9 816 184 802.1 177.1 781.2 170.1 760.4 166.7 736.1 166.7 708.3V625 541.7 458.3 375 291.7C166.7 263.9 170.1 239.6 177.1 218.7 184 197.9 197.9 184 218.7 177.1 239.6 170.1 263.9 166.7 291.7 166.7H375 458.3 541.7 625 708.3 791.7C819.4 166.7 843.8 163.2 864.6 156.2 885.4 149.3 895.8 138.9 895.8 125 895.8 111.1 888.9 97.2 875 83.3L833.3 41.7C819.4 27.8 802.1 17.4 781.3 10.4 760.4 3.5 736.1 0 708.3 0H625 541.7 458.3 375 291.7ZM791.7 270.8C777.8 270.8 767.4 281.2 760.4 302.1L739.6 364.6C732.6 385.4 718.8 399.3 697.9 406.2 677.1 413.2 652.8 416.7 625 416.7H541.7 458.3C430.6 416.7 406.2 420.1 385.4 427.1 364.6 434 350.7 447.9 343.7 468.7 336.8 489.6 336.8 510.4 343.7 531.2 350.7 552.1 364.6 566 385.4 572.9 406.2 579.9 430.6 583.3 458.3 583.3H541.7 625C652.8 583.3 677.1 586.8 697.9 593.7 718.8 600.7 732.6 614.6 739.6 635.4L760.4 697.9C767.4 718.7 777.8 729.2 791.7 729.2 805.6 729.2 819.4 722.2 833.3 708.3L875 666.7 916.7 625 958.3 583.3C972.2 569.4 982.6 552.1 989.6 531.2 996.5 510.4 996.5 489.6 989.6 468.7 982.6 447.9 972.2 430.6 958.3 416.7L916.7 375 875 333.3 833.3 291.7C819.4 277.8 805.6 270.8 791.7 270.8Z", - "width": 995 - }, - "search": [ - "exit" - ] - }, - { - "uid": "06a8fb7f89285292492baf4e4f3657be", - "css": "terrain", - "code": 59475, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M340.4 21.3Q361.7 0 383 0 404.3 0 425.5 21.3 446.8 42.6 468.1 63.8 489.4 85.1 510.6 106.4 531.9 127.7 553.2 148.9 574.5 170.2 595.7 191.5 617 212.8 638.3 212.8 659.6 212.8 680.9 191.5 702.1 170.2 723.4 170.2 744.7 170.2 766 191.5 787.2 212.8 808.5 234 829.8 255.3 851.1 276.6 872.3 297.9 893.6 319.1 914.9 340.4 936.2 361.7 957.4 383 978.7 404.3 1000 425.5 1010.6 457.4 1021.3 489.4 1021.3 531.9 1021.3 574.5 1021.3 617 1021.3 659.6 1021.3 702.1 1021.3 744.7 1021.3 787.2 1021.3 829.8 1021.3 872.3 1021.3 914.9 1010.6 946.8 1000 978.7 968.1 989.4 936.2 1000 893.6 1000 851.1 1000 808.5 1000 766 1000 723.4 1000 680.9 1000 638.3 1000 595.7 1000 553.2 1000 510.6 1000 468.1 1000 425.5 1000 383 1000 340.4 1000 297.9 1000 255.3 1000 212.8 1000 170.2 1000 127.7 1000 85.1 1000 53.2 989.4 21.3 978.7 10.6 946.8 0 914.9 0 872.3 0 829.8 0 787.2 0 744.7 0 702.1 0 659.6 0 617 0 574.5 0 531.9 0 489.4 0 446.8 0 404.3 10.6 372.3 21.3 340.4 42.6 319.1 63.8 297.9 85.1 276.6 106.4 255.3 127.7 234 148.9 212.8 170.2 191.5 191.5 170.2 212.8 148.9 234 127.7 255.3 106.4 276.6 85.1 297.9 63.8 319.1 42.6 340.4 21.3M808.5 914.9Q851.1 914.9 883 904.3 914.9 893.6 925.5 861.7 936.2 829.8 936.2 787.2 936.2 744.7 936.2 702.1 936.2 659.6 936.2 617 936.2 574.5 925.5 542.6 914.9 510.6 893.6 489.4 872.3 468.1 851.1 446.8 829.8 425.5 808.5 404.3 787.2 383 766 361.7 744.7 340.4 723.4 340.4 702.1 340.4 680.9 361.7 659.6 383 638.3 383 617 383 595.7 361.7 574.5 340.4 553.2 319.1 531.9 297.9 510.6 276.6 489.4 255.3 468.1 234 446.8 212.8 425.5 191.5 404.3 170.2 383 170.2 361.7 170.2 340.4 191.5 319.1 212.8 297.9 234 276.6 255.3 255.3 276.6 234 297.9 212.8 319.1 191.5 340.4 170.2 361.7 148.9 383 127.7 404.3 106.4 425.5 95.7 457.4 85.1 489.4 85.1 531.9 85.1 574.5 85.1 617 85.1 659.6 85.1 702.1 85.1 744.7 85.1 787.2 85.1 829.8 95.7 861.7 106.4 893.6 138.3 904.3 170.2 914.9 212.8 914.9 255.3 914.9 297.9 914.9 340.4 914.9 383 914.9 425.5 914.9 468.1 914.9 510.6 914.9 553.2 914.9 595.7 914.9 638.3 914.9 680.9 914.9 723.4 914.9 766 914.9 808.5 914.9", - "width": 1021 - }, - "search": [ - "terrain" - ] - }, - { - "uid": "c97c45befeea2eaee193c77fc6c6fd64", - "css": "trash", - "code": 59413, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M260.4 52.1Q270.8 20.8 302.1 10.4 333.3 0 375 0 416.7 0 458.3 0 500 0 531.3 10.4 562.5 20.8 572.9 52.1 583.3 83.3 593.8 114.6 604.2 145.8 635.4 156.3 666.7 166.7 708.3 166.7 750 166.7 781.3 177.1 812.5 187.5 822.9 218.8 833.3 250 833.3 291.7 833.3 333.3 833.3 375 833.3 416.7 822.9 447.9 812.5 479.2 791.7 500 770.8 520.8 760.4 552.1 750 583.3 750 625 750 666.7 750 708.3 750 750 750 791.7 750 833.3 750 875 750 916.7 739.6 947.9 729.2 979.2 697.9 989.6 666.7 1000 625 1000 583.3 1000 541.7 1000 500 1000 458.3 1000 416.7 1000 375 1000 333.3 1000 291.7 1000 250 1000 208.3 1000 166.7 1000 135.4 989.6 104.2 979.2 93.8 947.9 83.3 916.7 83.3 875 83.3 833.3 83.3 791.7 83.3 750 83.3 708.3 83.3 666.7 83.3 625 83.3 583.3 72.9 552.1 62.5 520.8 41.7 500 20.8 479.2 10.4 447.9 0 416.7 0 375 0 333.3 0 291.7 0 250 10.4 218.8 20.8 187.5 52.1 177.1 83.3 166.7 125 166.7 166.7 166.7 197.9 156.3 229.2 145.8 239.6 114.6 250 83.3 260.4 52.1M177.1 864.6Q187.5 895.8 208.3 895.8 229.2 895.8 239.6 864.6 250 833.3 250 791.7 250 750 250 708.3 250 666.7 250 625 250 583.3 239.6 552.1 229.2 520.8 208.3 520.8 187.5 520.8 177.1 552.1 166.7 583.3 166.7 625 166.7 666.7 166.7 708.3 166.7 750 166.7 791.7 166.7 833.3 177.1 864.6M385.4 906.3Q416.7 916.7 447.9 906.3 479.2 895.8 489.6 864.6 500 833.3 500 791.7 500 750 500 708.3 500 666.7 500 625 500 583.3 489.6 552.1 479.2 520.8 447.9 510.4 416.7 500 385.4 510.4 354.2 520.8 343.8 552.1 333.3 583.3 333.3 625 333.3 666.7 333.3 708.3 333.3 750 333.3 791.7 333.3 833.3 343.8 864.6 354.2 895.8 385.4 906.3M593.8 864.6Q604.2 895.8 625 895.8 645.8 895.8 656.3 864.6 666.7 833.3 666.7 791.7 666.7 750 666.7 708.3 666.7 666.7 666.7 625 666.7 583.3 656.3 552.1 645.8 520.8 625 520.8 604.2 520.8 593.8 552.1 583.3 583.3 583.3 625 583.3 666.7 583.3 708.3 583.3 750 583.3 791.7 583.3 833.3 593.8 864.6M625 416.7Q666.7 416.7 697.9 406.3 729.2 395.8 739.6 364.6 750 333.3 739.6 302.1 729.2 270.8 697.9 260.4 666.7 250 625 250 583.3 250 541.7 250 500 250 458.3 250 416.7 250 375 250 333.3 250 291.7 250 250 250 208.3 250 166.7 250 135.4 260.4 104.2 270.8 93.8 302.1 83.3 333.3 93.8 364.6 104.2 395.8 135.4 406.3 166.7 416.7 208.3 416.7 250 416.7 291.7 416.7 333.3 416.7 375 416.7 416.7 416.7 458.3 416.7 500 416.7 541.7 416.7 583.3 416.7 625 416.7M385.4 156.3Q416.7 166.7 447.9 156.3 479.2 145.8 479.2 125 479.2 104.2 447.9 93.8 416.7 83.3 385.4 93.8 354.2 104.2 354.2 125 354.2 145.8 385.4 156.3", - "width": 833 - }, - "search": [ - "trash" - ] - }, - { - "uid": "7e5b51e48fad210964d9b2ef40e120ca", - "css": "refresh", - "code": 59463, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M178.6 0C154.8 0 133.9 3 116.1 8.9 98.2 14.9 83.3 23.8 71.4 35.7L35.7 71.4C23.8 83.3 14.9 98.2 8.9 116.1 3 133.9 0 154.8 0 178.6V250 321.4 392.9 464.3C0 488.1 3 508.9 8.9 526.8 14.9 544.6 26.8 556.5 44.6 562.5 62.5 568.5 80.4 568.5 98.2 562.5 116.1 556.5 128 544.6 133.9 526.8 139.9 508.9 142.9 488.1 142.9 464.3V392.9 321.4 250C142.9 226.2 145.8 205.4 151.8 187.5 157.7 169.6 169.6 157.7 187.5 151.8 205.4 145.8 226.2 142.9 250 142.9H321.4 392.9 464.3 535.7 607.1C631 142.9 651.8 145.8 669.6 151.8 687.5 157.7 696.4 166.7 696.4 178.6 696.4 190.5 690.5 202.4 678.6 214.3 666.7 226.2 660.7 238.1 660.7 250 660.7 261.9 669.6 270.8 687.5 276.8 705.4 282.7 726.2 285.7 750 285.7H821.4C845.2 285.7 866.1 282.7 883.9 276.8 901.8 270.8 913.7 258.9 919.6 241.1 925.6 223.2 928.6 202.4 928.6 178.6V107.1C928.6 83.3 925.6 62.5 919.6 44.6 913.7 26.8 904.8 17.9 892.9 17.9 881 17.9 869 23.8 857.1 35.7 845.2 47.6 833.3 53.6 821.4 53.6 809.5 53.6 797.6 47.6 785.7 35.7 773.8 23.8 758.9 14.9 741.1 8.9 723.2 3 702.4 0 678.6 0H607.1 535.7 464.3 392.9 321.4 250ZM928.6 433C919.6 433 910.7 434.5 901.8 437.5 883.9 443.5 872 455.4 866.1 473.2 860.1 491.1 857.1 511.9 857.1 535.7V607.1 678.6 750C857.1 773.8 854.2 794.6 848.2 812.5 842.3 830.4 830.4 842.3 812.5 848.2 794.6 854.2 773.8 857.1 750 857.1H678.6 607.1 535.7 464.3 392.9C369 857.1 348.2 854.2 330.4 848.2 312.5 842.3 303.6 833.3 303.6 821.4 303.6 809.5 309.5 797.6 321.4 785.7 333.3 773.8 339.3 761.9 339.3 750 339.3 738.1 330.4 729.2 312.5 723.2 294.6 717.3 273.8 714.3 250 714.3H178.6C154.8 714.3 133.9 717.3 116.1 723.2 98.2 729.2 86.3 741.1 80.4 758.9 74.4 776.8 71.4 797.6 71.4 821.4V892.9C71.4 916.7 74.4 937.5 80.4 955.4 86.3 973.2 95.2 982.1 107.1 982.1 119 982.1 131 976.2 142.9 964.3 154.8 952.4 166.7 946.4 178.6 946.4 190.5 946.4 202.4 952.4 214.3 964.3 226.2 976.2 241.1 985.1 258.9 991.1 276.8 997 297.6 1000 321.4 1000H392.9 464.3 535.7 607.1 678.6 750 821.4C845.2 1000 866.1 997 883.9 991.1 901.8 985.1 916.7 976.2 928.6 964.3L964.3 928.6C976.2 916.7 985.1 901.8 991.1 883.9 997 866.1 1000 845.2 1000 821.4V750 678.6 607.1 535.7C1000 511.9 997 491.1 991.1 473.2 985.1 455.4 973.2 443.5 955.4 437.5 946.4 434.5 937.5 433 928.6 433Z", - "width": 1000 - }, - "search": [ - "refresh" - ] - }, - { - "uid": "59925475e7cc98ccd821771cff586bb6", - "css": "pencil_", - "code": 59476, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M836.4 0C824.2 0 812.1 6.1 800 18.2L763.6 54.5 727.3 90.9 690.9 127.3C678.8 139.4 672.7 151.5 672.7 163.6 672.7 175.8 678.8 187.9 690.9 200L727.3 236.4 763.6 272.7 800 309.1C812.1 321.2 824.2 327.3 836.4 327.3 848.5 327.3 860.6 321.2 872.7 309.1L909.1 272.7 945.5 236.4 981.8 200C993.9 187.9 1000 175.8 1000 163.6 1000 151.5 993.9 139.4 981.8 127.3L945.5 90.9 909.1 54.5 872.7 18.2C860.6 6.1 848.5 0 836.4 0ZM545.5 290.9C533.3 290.9 521.2 297 509.1 309.1L472.7 345.5 436.4 381.8 400 418.2 363.6 454.5 327.3 490.9 290.9 527.3 254.5 563.6 218.2 600 181.8 636.4 145.5 672.7 109.1 709.1 72.7 745.5 36.4 781.8C24.2 793.9 15.2 809.1 9.1 827.3 3 845.5 0 866.7 0 890.9 0 915.2 3 936.4 9.1 954.5 15.2 972.7 27.3 984.8 45.5 990.9 63.6 997 84.8 1000 109.1 1000 133.3 1000 154.5 997 172.7 990.9 190.9 984.8 206.1 975.8 218.2 963.6L254.5 927.3 290.9 890.9 327.3 854.5 363.6 818.2 400 781.8 436.4 745.5 472.7 709.1 509.1 672.7 545.5 636.4 581.8 600 618.2 563.6 654.5 527.3 690.9 490.9C703 478.8 709.1 466.7 709.1 454.5 709.1 442.4 703 430.3 690.9 418.2L654.5 381.8 618.2 345.5 581.8 309.1C569.7 297 557.6 290.9 545.5 290.9ZM254.5 654.5C266.7 654.5 278.8 660.6 290.9 672.7L327.3 709.1C339.4 721.2 345.5 733.3 345.5 745.5 345.5 757.6 339.4 769.7 327.3 781.8L290.9 818.2 254.5 854.5 218.2 890.9C206.1 903 190.9 912.1 172.7 918.2 154.5 924.2 136.4 924.2 118.2 918.2 100 912.1 87.9 900 81.8 881.8 75.8 863.6 75.8 845.5 81.8 827.3 87.9 809.1 97 793.9 109.1 781.8L145.5 745.5 181.8 709.1 218.2 672.7C230.3 660.6 242.4 654.5 254.5 654.5Z", - "width": 1000 - }, - "search": [ - "pencil" - ] - }, - { - "uid": "346f9aef245e0c2ded44e31ad7c66acb", - "css": "mode-pvp", - "code": 59477, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M305.8 0C296.1 0 286.4 1.6 276.7 4.9 257.3 11.3 244.3 24.3 237.9 43.7 231.4 63.1 231.4 82.5 237.9 101.9 244.3 121.4 254 137.5 267 150.5L305.8 189.3 344.7 228.2 383.5 267C396.4 279.9 409.4 286.4 422.3 286.4 435.3 286.4 448.2 279.9 461.2 267L500 228.2C512.9 215.2 519.4 202.3 519.4 189.3 519.4 176.4 512.9 163.4 500 150.5L461.2 111.7 422.3 72.8 383.5 34C370.6 21 354.4 11.3 335 4.9 325.2 1.6 315.5 0 305.8 0ZM927.2 0C917.5 0 907.8 1.6 898.1 4.9 878.6 11.3 862.5 21 849.5 34L810.7 72.8 771.8 111.7 733 150.5 694.2 189.3 655.3 228.2 616.5 267 577.7 305.8 538.8 344.7 500 383.5 461.2 422.3 422.3 461.2 383.5 500C370.6 512.9 354.4 522.7 335 529.1 315.5 535.6 296.1 535.6 276.7 529.1 257.3 522.7 241.1 512.9 228.2 500 215.2 487.1 199 477.3 179.6 470.9 160.2 464.4 140.8 464.4 121.4 470.9 101.9 477.3 89 490.3 82.5 509.7 76.1 529.1 76.1 548.5 82.5 568 89 587.4 98.7 603.6 111.7 616.5 124.6 629.5 134.3 645.6 140.8 665 147.2 684.5 147.2 703.9 140.8 723.3 134.3 742.7 124.6 758.9 111.7 771.8L72.8 810.7 34 849.5C21 862.5 11.3 878.6 4.9 898.1-1.6 917.5-1.6 936.9 4.9 956.3 11.3 975.7 24.3 988.7 43.7 995.1 63.1 1001.6 82.5 1001.6 101.9 995.1 121.4 988.7 137.5 979 150.5 966L189.3 927.2 228.2 888.3C241.1 875.4 257.3 865.7 276.7 859.2 296.1 852.8 315.5 852.8 335 859.2 354.4 865.7 370.6 875.4 383.5 888.3 396.4 901.3 412.6 911 432 917.5 451.5 923.9 470.9 923.9 490.3 917.5 509.7 911 522.7 898.1 529.1 878.6 535.6 859.2 535.6 839.8 529.1 820.4 522.7 801 512.9 784.8 500 771.8 487.1 758.9 477.3 742.7 470.9 723.3 464.4 703.9 464.4 684.5 470.9 665 477.3 645.6 487.1 629.5 500 616.5L538.8 577.7 577.7 538.8 616.5 500 655.3 461.2 694.2 422.3 733 383.5 771.8 344.7 810.7 305.8 849.5 267 888.3 228.2 927.2 189.3 966 150.5C979 137.5 988.7 121.4 995.1 101.9 1001.6 82.5 1001.6 63.1 995.1 43.7 988.7 24.3 975.7 11.3 956.3 4.9 946.6 1.6 936.9 0 927.2 0ZM1082.5 466C1072.8 466 1063.1 467.6 1053.4 470.9 1034 477.3 1017.8 487.1 1004.9 500 991.9 512.9 975.7 522.7 956.3 529.1 936.9 535.6 917.5 535.6 898.1 529.1 878.6 522.7 862.5 512.9 849.5 500 836.6 487.1 823.6 480.6 810.7 480.6 797.7 480.6 784.8 487.1 771.8 500L733 538.8C720.1 551.8 713.6 564.7 713.6 577.7 713.6 590.6 720.1 603.6 733 616.5 746 629.5 755.7 645.6 762.1 665 768.6 684.5 768.6 703.9 762.1 723.3 755.7 742.7 746 758.9 733 771.8 720.1 784.8 710.4 801 703.9 820.4 697.4 839.8 697.4 859.2 703.9 878.6 710.4 898.1 723.3 911 742.7 917.5 762.1 923.9 781.6 923.9 801 917.5 820.4 911 836.6 901.3 849.5 888.3 862.5 875.4 878.6 865.7 898.1 859.2 917.5 852.8 936.9 852.8 956.3 859.2 975.7 865.7 991.9 875.4 1004.9 888.3L1043.7 927.2 1082.5 966C1095.5 979 1111.7 988.7 1131.1 995.1 1150.5 1001.6 1169.9 1001.6 1189.3 995.1 1208.7 988.7 1221.7 975.7 1228.2 956.3 1234.6 936.9 1234.6 917.5 1228.2 898.1 1221.7 878.6 1212 862.5 1199 849.5L1160.2 810.7 1121.4 771.8C1108.4 758.9 1098.7 742.7 1092.2 723.3 1085.8 703.9 1085.8 684.5 1092.2 665 1098.7 645.6 1108.4 629.5 1121.4 616.5 1134.3 603.6 1144 587.4 1150.5 568 1157 548.5 1157 529.1 1150.5 509.7 1144 490.3 1131.1 477.3 1111.7 470.9 1101.9 467.6 1092.2 466 1082.5 466Z", - "width": 1233 - }, - "search": [ - "mode-pvp" - ] - }, - { - "uid": "8d74cd519427de451b48df6554aaf593", - "css": "mode-attack", - "code": 59478, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M849.5 34Q868.9 14.6 898.1 4.9 927.2-4.9 956.3 4.9 985.4 14.6 995.1 43.7 1004.9 72.8 995.1 101.9 985.4 131.1 966 150.5 946.6 169.9 927.2 189.3 907.8 208.7 888.3 228.2 868.9 247.6 849.5 267 830.1 286.4 810.7 305.8 791.3 325.2 771.8 344.7 752.4 364.1 733 383.5 713.6 402.9 694.2 422.3 674.8 441.7 655.3 461.2 635.9 480.6 616.5 500 597.1 519.4 577.7 538.8 558.3 558.3 538.8 577.7 519.4 597.1 500 616.5 480.6 635.9 470.9 665 461.2 694.2 470.9 723.3 480.6 752.4 500 771.8 519.4 791.3 529.1 820.4 538.8 849.5 529.1 878.6 519.4 907.8 490.3 917.5 461.2 927.2 432 917.5 402.9 907.8 383.5 888.3 364.1 868.9 335 859.2 305.8 849.5 276.7 859.2 247.6 868.9 228.2 888.3 208.7 907.8 189.3 927.2 169.9 946.6 150.5 966 131.1 985.4 101.9 995.1 72.8 1004.9 43.7 995.1 14.6 985.4 4.9 956.3-4.9 927.2 4.9 898.1 14.6 868.9 34 849.5 53.4 830.1 72.8 810.7 92.2 791.3 111.7 771.8 131.1 752.4 140.8 723.3 150.5 694.2 140.8 665 131.1 635.9 111.7 616.5 92.2 597.1 82.5 568 72.8 538.8 82.5 509.7 92.2 480.6 121.4 470.9 150.5 461.2 179.6 470.9 208.7 480.6 228.2 500 247.6 519.4 276.7 529.1 305.8 538.8 335 529.1 364.1 519.4 383.5 500 402.9 480.6 422.3 461.2 441.7 441.7 461.2 422.3 480.6 402.9 500 383.5 519.4 364.1 538.8 344.7 558.3 325.2 577.7 305.8 597.1 286.4 616.5 267 635.9 247.6 655.3 228.2 674.8 208.7 694.2 189.3 713.6 169.9 733 150.5 752.4 131.1 771.8 111.7 791.3 92.2 810.7 72.8 830.1 53.4 849.5 34", - "width": 1000 - }, - "search": [ - "mode-attack" - ] - }, - { - "uid": "09e5948ca30589e5baa8d27e1c509588", - "css": "mode-survival", - "code": 59479, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M9.7 43.5Q19.3 14.5 48.3 4.8 77.3-4.8 106.3 4.8 135.3 14.5 154.6 33.8 173.9 53.1 193.2 72.5 212.6 91.8 231.9 111.1 251.2 130.4 280.2 140.1 309.2 149.8 347.8 149.8 386.5 149.8 425.1 149.8 463.8 149.8 502.4 149.8 541.1 149.8 579.7 149.8 618.4 149.8 647.3 140.1 676.3 130.4 695.7 111.1 715 91.8 734.3 72.5 753.6 53.1 772.9 33.8 792.3 14.5 821.3 4.8 850.2-4.8 879.2 4.8 908.2 14.5 917.9 43.5 927.5 72.5 927.5 111.1 927.5 149.8 927.5 188.4 927.5 227.1 927.5 265.7 927.5 304.3 927.5 343 927.5 381.6 927.5 420.3 927.5 458.9 927.5 497.6 927.5 536.2 927.5 574.9 927.5 613.5 917.9 642.5 908.2 671.5 888.9 690.8 869.6 710.1 850.2 729.5 830.9 748.8 811.6 768.1 792.3 787.4 772.9 806.8 753.6 826.1 734.3 845.4 715 864.7 695.7 884.1 676.3 903.4 657 922.7 637.7 942 618.4 961.4 599 980.7 570 990.3 541.1 1000 502.4 1000 463.8 1000 425.1 1000 386.5 1000 357.5 990.3 328.5 980.7 309.2 961.4 289.9 942 270.5 922.7 251.2 903.4 231.9 884.1 212.6 864.7 193.2 845.4 173.9 826.1 154.6 806.8 135.3 787.4 115.9 768.1 96.6 748.8 77.3 729.5 58 710.1 38.6 690.8 19.3 671.5 9.7 642.5 0 613.5 0 574.9 0 536.2 0 497.6 0 458.9 0 420.3 0 381.6 0 343 0 304.3 0 265.7 0 227.1 0 188.4 0 149.8 0 111.1 0 72.5 9.7 43.5", - "width": 928 - }, - "search": [ - "mode-survival" - ] - }, - { - "uid": "3a617b3ed2fe766baec5b723b1d9502f", - "css": "command-rally", - "code": 59480, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M166.7 83.3Q208.3 41.7 270.8 20.8 333.3 0 416.7 0 500 0 583.3 0 666.7 0 729.2 20.8 791.7 41.7 833.3 83.3 875 125 916.7 166.7 958.3 208.3 979.2 270.8 1000 333.3 1000 416.7 1000 500 1000 583.3 1000 666.7 979.2 729.2 958.3 791.7 916.7 833.3 875 875 833.3 916.7 791.7 958.3 729.2 979.2 666.7 1000 583.3 1000 500 1000 416.7 1000 333.3 1000 270.8 979.2 208.3 958.3 166.7 916.7 125 875 83.3 833.3 41.7 791.7 20.8 729.2 0 666.7 0 583.3 0 500 0 416.7 0 333.3 20.8 270.8 41.7 208.3 83.3 166.7 125 125 166.7 83.3M437.5 812.5Q500 833.3 562.5 812.5 625 791.7 666.7 750 708.3 708.3 750 666.7 791.7 625 812.5 562.5 833.3 500 812.5 437.5 791.7 375 750 333.3 708.3 291.7 666.7 250 625 208.3 562.5 187.5 500 166.7 437.5 187.5 375 208.3 333.3 250 291.7 291.7 250 333.3 208.3 375 187.5 437.5 166.7 500 187.5 562.5 208.3 625 250 666.7 291.7 708.3 333.3 750 375 791.7 437.5 812.5", - "width": 1000 - }, - "search": [ - "command-rally" - ] - }, - { - "uid": "90fb5a431ca95c46a446c8f4a481d5ce", - "css": "command-attack", - "code": 59481, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M670.2 74.5Q712.8 31.9 776.6 10.6 840.4-10.6 904.3 10.6 968.1 31.9 989.4 95.7 1010.6 159.6 989.4 223.4 968.1 287.2 925.5 329.8 883 372.3 840.4 414.9 797.9 457.4 755.3 500 712.8 542.6 670.2 585.1 627.7 627.7 585.1 670.2 542.6 712.8 542.6 755.3 542.6 797.9 585.1 840.4 627.7 883 627.7 925.5 627.7 968.1 585.1 968.1 542.6 968.1 500 925.5 457.4 883 414.9 883 372.3 883 329.8 925.5 287.2 968.1 223.4 989.4 159.6 1010.6 95.7 989.4 31.9 968.1 10.6 904.3-10.6 840.4 10.6 776.6 31.9 712.8 74.5 670.2 117 627.7 117 585.1 117 542.6 74.5 500 31.9 457.4 31.9 414.9 31.9 372.3 74.5 372.3 117 372.3 159.6 414.9 202.1 457.4 244.7 457.4 287.2 457.4 329.8 414.9 372.3 372.3 414.9 329.8 457.4 287.2 500 244.7 542.6 202.1 585.1 159.6 627.7 117 670.2 74.5", - "width": 1000 - }, - "search": [ - "command-attack" - ] - }, - { - "uid": "17ef812a059c83b5ea3612f860f9569a", - "css": "command-retreat", - "code": 59482, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M352.3 45.5Q397.7 0 443.2 0 488.6 0 511.4 68.2 534.1 136.4 556.8 204.5 579.5 272.7 647.7 295.5 715.9 318.2 806.8 318.2 897.7 318.2 965.9 340.9 1034.1 363.6 1056.8 431.8 1079.5 500 1056.8 568.2 1034.1 636.4 965.9 659.1 897.7 681.8 806.8 681.8 715.9 681.8 647.7 704.5 579.5 727.3 556.8 795.5 534.1 863.6 511.4 931.8 488.6 1000 443.2 1000 397.7 1000 352.3 954.5 306.8 909.1 261.4 863.6 215.9 818.2 170.5 772.7 125 727.3 79.5 681.8 34.1 636.4 11.4 568.2-11.4 500 11.4 431.8 34.1 363.6 79.5 318.2 125 272.7 170.5 227.3 215.9 181.8 261.4 136.4 306.8 90.9 352.3 45.5", - "width": 1068 - }, - "search": [ - "command-retreat" - ] - }, - { - "uid": "2073dbd997e5d8e1ffc1322d13ba5585", - "css": "chat", - "code": 59484, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M129 64.5Q161.3 32.3 209.7 16.1 258.1 0 322.6 0 387.1 0 451.6 0 516.1 0 580.6 0 645.2 0 709.7 0 774.2 0 822.6 16.1 871 32.3 903.2 64.5 935.5 96.8 967.7 129 1000 161.3 1016.1 209.7 1032.3 258.1 1032.3 322.6 1032.3 387.1 1032.3 451.6 1032.3 516.1 1016.1 564.5 1000 612.9 967.7 645.2 935.5 677.4 903.2 709.7 871 741.9 822.6 758.1 774.2 774.2 709.7 774.2 645.2 774.2 580.6 774.2 516.1 774.2 451.6 774.2 387.1 774.2 338.7 790.3 290.3 806.5 274.2 854.8 258.1 903.2 241.9 951.6 225.8 1000 193.5 1000 161.3 1000 129 967.7 96.8 935.5 64.5 903.2 32.3 871 16.1 822.6 0 774.2 0 709.7 0 645.2 0 580.6 0 516.1 0 451.6 0 387.1 0 322.6 0 258.1 16.1 209.7 32.3 161.3 64.5 129 96.8 96.8 129 64.5", - "width": 1032 - }, - "search": [ - "chat" - ] - }, - { - "uid": "9dd9e835aebe1060ba7190ad2b2ed951", - "css": "zoom", - "code": 59415, - "src": "fontawesome" - }, - { - "uid": "1bc31b80669cb5edc2ee5d1370554bc9", - "css": "players", - "code": 59483, - "src": "custom_icons", - "selected": true, - "svg": { - "path": "M370.1 55.1Q401.6 23.6 448.8 7.9 496.1-7.9 543.3 7.9 590.6 23.6 622 55.1 653.5 86.6 685 118.1 716.5 149.6 732.3 196.9 748 244.1 732.3 291.3 716.5 338.6 685 370.1 653.5 401.6 653.5 433.1 653.5 464.6 685 496.1 716.5 527.6 748 559.1 779.5 590.6 811 622 842.5 653.5 874 685 905.5 716.5 937 748 968.5 779.5 984.3 826.8 1000 874 984.3 921.3 968.5 968.5 921.3 984.3 874 1000 811 1000 748 1000 685 1000 622 1000 559.1 1000 496.1 1000 433.1 1000 370.1 1000 307.1 1000 244.1 1000 181.1 1000 118.1 1000 70.9 984.3 23.6 968.5 7.9 921.3-7.9 874 7.9 826.8 23.6 779.5 55.1 748 86.6 716.5 118.1 685 149.6 653.5 181.1 622 212.6 590.6 244.1 559.1 275.6 527.6 307.1 496.1 338.6 464.6 338.6 433.1 338.6 401.6 307.1 370.1 275.6 338.6 259.8 291.3 244.1 244.1 259.8 196.9 275.6 149.6 307.1 118.1 338.6 86.6 370.1 55.1", - "width": 992 - }, - "search": [ - "players" - ] - }, { "uid": "dd1e5d774d1ced68cb7c439d8ed102f5", "css": "logic", - "code": 59420, + "code": 59406, "src": "custom_icons", "selected": true, "svg": { @@ -933,6 +357,704 @@ "search": [ "logic" ] + }, + { + "uid": "d0ff49daa25603348abe7e3f7c70be56", + "css": "distribution", + "code": 59412, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M50 0L0 50V150 250 350 450 550 650 750 850 950L50 1000 100 950V850 750 650 550 450 350 250 150 50ZM950 0L900 50V150 250 350 450 550 650 750 850 950L950 1000 1000 950V850 750 650 550 450 350 250 150 50ZM450 100L400 150 350 200 300 250 350 300H450 550 650L700 250 650 200 600 150 550 100ZM450 400L400 450 350 500 300 550 350 600H450 550 650L700 550 650 500 600 450 550 400ZM450 700L400 750 350 800 300 850 350 900H450 550 650L700 850 650 800 600 750 550 700Z", + "width": 1000 + }, + "search": [ + "distribution" + ] + }, + { + "uid": "47efe0c5ca937e0def7264347af501ed", + "css": "hammer", + "code": 59415, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M458.3 0L416.7 41.7 375 83.3 333.3 125 291.7 166.7 250 208.3 208.3 250 166.7 291.7 208.3 333.3 250 375 291.7 416.7 333.3 458.3V541.7L291.7 583.3 250 625 208.3 666.7 166.7 708.3 125 750 83.3 791.7 41.7 833.3 0 875V958.3L41.7 1000H125L166.7 958.3 208.3 916.7 250 875 291.7 833.3 333.3 791.7 375 750 416.7 708.3 458.3 666.7H541.7L583.3 708.3 625 750 666.7 791.7 708.3 833.3 750 791.7 791.7 750 833.3 708.3 875 666.7 916.7 625 958.3 583.3 1000 541.7 958.3 500 916.7 458.3 875 416.7 833.3 375 791.7 333.3 750 291.7 708.3 250 666.7 208.3 625 166.7 583.3 125 541.7 83.3 500 41.7Z", + "width": 1000 + }, + "search": [ + "hammer" + ] + }, + { + "uid": "b41aaf351112113e5f50cb8b977d6293", + "css": "save", + "code": 59419, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M45.5 0L0 45.5V136.4 227.3 318.2 409.1 500 590.9 681.8 772.7 863.6 954.5L45.5 1000H136.4 227.3 318.2 409.1 500 590.9 681.8 772.7 863.6L909.1 954.5V863.6 772.7 681.8 590.9 500 409.1 318.2 227.3 136.4L863.6 90.9 818.2 45.5 772.7 0H681.8 590.9 500 409.1 318.2 227.3 136.4ZM136.4 90.9H227.3L272.7 136.4V227.3 318.2L318.2 363.6H409.1 500 590.9L636.4 318.2V227.3 136.4L681.8 90.9H772.7L818.2 136.4V227.3 318.2 409.1 500 590.9 681.8 772.7 863.6L772.7 909.1 727.3 863.6V772.7 681.8 590.9L681.8 545.5H590.9 500 409.1 318.2 227.3L181.8 590.9V681.8 772.7 863.6L136.4 909.1 90.9 863.6V772.7 681.8 590.9 500 409.1 318.2 227.3 136.4ZM409.1 90.9H500L545.5 136.4V227.3L500 272.7H409.1L363.6 227.3V136.4ZM318.2 636.4H409.1 500 590.9L636.4 681.8V772.7 863.6L590.9 909.1H500 409.1 318.2L272.7 863.6V772.7 681.8Z", + "width": 909 + }, + "search": [ + "save" + ] + }, + { + "uid": "e67fcdbfc21c4f395a4f78e2a56c5060", + "css": "link", + "code": 59420, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M125 0L83.3 41.7 41.7 83.3 0 125V208.3 291.7 375 458.3 541.7 625 708.3 791.7 875L41.7 916.7 83.3 958.3 125 1000H208.3 291.7 375 458.3 541.7 625 708.3 791.7 875L916.7 958.3 958.3 916.7 1000 875V791.7 708.3L958.3 666.7 916.7 625 875 583.3 833.3 625V708.3 791.7L791.7 833.3H708.3 625 541.7 458.3 375 291.7 208.3L166.7 791.7V708.3 625 541.7 458.3 375 291.7 208.3L208.3 166.7H291.7 375L416.7 125 375 83.3 333.3 41.7 291.7 0H208.3ZM541.7 0L500 41.7 541.7 83.3 583.3 125 625 166.7 666.7 208.3 625 250 583.3 291.7 541.7 333.3 500 375 458.3 416.7 416.7 458.3 375 500 333.3 541.7V625L375 666.7H458.3L500 625 541.7 583.3 583.3 541.7 625 500 666.7 458.3 708.3 416.7 750 375 791.7 333.3 833.3 375 875 416.7 916.7 458.3 958.3 500 1000 458.3V375 291.7 208.3 125 41.7L958.3 0H875 791.7 708.3 625Z", + "width": 1000 + }, + "search": [ + "link" + ] + }, + { + "uid": "3679836be9338f58f8a74e4352dc0bdd", + "css": "itchio", + "code": 59434, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M350 0L300 50 250 100 200 150V250 350L150 400 100 450 50 500 0 550V650 750 850L50 900 100 950 150 1000H250L300 950 350 900 400 850 450 800H550 650 750 850 950L1000 850 1050 900 1100 950 1150 1000H1250L1300 950 1350 900 1400 850V750 650 550L1350 500 1300 450 1250 400 1200 350V250 150L1150 100 1100 50 1050 0H950L900 50 850 100H750 650 550L500 50 450 0ZM650 200H750L800 250 850 300 900 350 950 400 1000 450 950 500H850L800 550V650L750 700H650L600 650V550L550 500H450L400 450 450 400 500 350 550 300 600 250Z", + "width": 1400 + }, + "search": [ + "itchio" + ] + }, + { + "uid": "a3f0c795c6e6506c0bf33e4d344676d5", + "css": "line", + "code": 59435, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M875 0L833.3 41.7 791.7 83.3 750 125 708.3 166.7 666.7 208.3 625 250 583.3 291.7 541.7 333.3 500 375 458.3 416.7 416.7 458.3 375 500 333.3 541.7 291.7 583.3 250 625 208.3 666.7 166.7 708.3 125 750 83.3 791.7 41.7 833.3 0 875V958.3L41.7 1000H125L166.7 958.3 208.3 916.7 250 875 291.7 833.3 333.3 791.7 375 750 416.7 708.3 458.3 666.7 500 625 541.7 583.3 583.3 541.7 625 500 666.7 458.3 708.3 416.7 750 375 791.7 333.3 833.3 291.7 875 250 916.7 208.3 958.3 166.7 1000 125V41.7L958.3 0Z", + "width": 1000 + }, + "search": [ + "line" + ] + }, + { + "uid": "f54e291de7ca06c5101bdeb7e81d6b7f", + "css": "admin", + "code": 59436, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M208.3 0L166.7 41.7 125 83.3 83.3 125 41.7 166.7 0 208.3V291.7 375 458.3 541.7L41.7 583.3 83.3 625V708.3 791.7L125 833.3 166.7 875 208.3 916.7 250 958.3 291.7 1000H375 458.3 541.7 625 708.3L750 958.3 791.7 916.7 833.3 875 875 833.3 916.7 791.7V708.3 625L958.3 583.3 1000 541.7V458.3 375 291.7 208.3L958.3 166.7 916.7 125 875 83.3 833.3 41.7 791.7 0H708.3 625 541.7 458.3 375 291.7ZM375 250H458.3 541.7 625L666.7 291.7 708.3 333.3 750 375V458.3L708.3 500 666.7 541.7 625 583.3H541.7 458.3 375L333.3 541.7 291.7 500 250 458.3V375L291.7 333.3 333.3 291.7ZM458.3 333.3L416.7 375V458.3L458.3 500H541.7L583.3 458.3V375L541.7 333.3ZM375 666.7H458.3 541.7 625L666.7 708.3 625 750H541.7 458.3 375L333.3 708.3Z", + "width": 1000 + }, + "search": [ + "admin" + ] + }, + { + "uid": "53efee2384cbefdc94210fb1b4972ed6", + "css": "spray-1", + "code": 59437, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M35.7 0L0 35.7 35.7 71.4 71.4 35.7ZM178.6 71.4L142.9 107.1 178.6 142.9 214.3 178.6 178.6 214.3 142.9 250 178.6 285.7 214.3 250 250 214.3 285.7 178.6 250 142.9 214.3 107.1ZM392.9 71.4L357.1 107.1 392.9 142.9 428.6 178.6 392.9 214.3 357.1 250 321.4 285.7 285.7 321.4 250 357.1 214.3 392.9 250 428.6H321.4 392.9 464.3 535.7 607.1 678.6 750L785.7 392.9 750 357.1 714.3 321.4 678.6 285.7 642.9 250V178.6 107.1L607.1 71.4H535.7 464.3ZM35.7 142.9L0 178.6 35.7 214.3 71.4 178.6ZM35.7 285.7L0 321.4 35.7 357.1 71.4 321.4ZM250 500L214.3 535.7V607.1 678.6 750 821.4L250 857.1H321.4 392.9 464.3 535.7 607.1 678.6 750L785.7 821.4V750 678.6 607.1 535.7L750 500H678.6 607.1 535.7 464.3 392.9 321.4ZM250 928.6L214.3 964.3 250 1000H321.4 392.9 464.3 535.7 607.1 678.6 750L785.7 964.3 750 928.6H678.6 607.1 535.7 464.3 392.9 321.4Z", + "width": 786 + }, + "search": [ + "spray" + ] + }, + { + "uid": "98cdb7c2e72493434efd910db1f62b29", + "css": "crafting", + "code": 59440, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M944.4 0L888.9 55.6V166.7 277.8 388.9L833.3 444.4 777.8 388.9 722.2 333.3 666.7 277.8 611.1 222.2 555.6 166.7 500 111.1 444.4 166.7V277.8 388.9L388.9 444.4 333.3 388.9 277.8 333.3 222.2 277.8 166.7 222.2 111.1 166.7 55.6 111.1 0 166.7V277.8 388.9 500 611.1 722.2 833.3 944.4L55.6 1000H166.7 277.8 388.9 500 611.1 722.2 833.3 944.4 1055.6L1111.1 944.4V833.3 722.2 611.1 500 388.9 277.8 166.7 55.6L1055.6 0ZM166.7 333.3L222.2 388.9 277.8 444.4 333.3 500 388.9 555.6H500L555.6 500V388.9L611.1 333.3 666.7 388.9 722.2 444.4 777.8 500 833.3 555.6H944.4L1000 611.1V722.2 833.3L944.4 888.9H833.3 722.2 611.1 500 388.9 277.8 166.7L111.1 833.3V722.2 611.1 500 388.9ZM277.8 666.7L222.2 722.2 277.8 777.8 333.3 722.2ZM500 666.7L444.4 722.2 500 777.8 555.6 722.2ZM722.2 666.7L666.7 722.2 722.2 777.8 777.8 722.2Z", + "width": 1111 + }, + "search": [ + "crafting" + ] + }, + { + "uid": "dc6530e8b375575b7df2040d108e5368", + "css": "fill", + "code": 59468, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M464.3 0L428.6 35.7 392.9 71.4 357.1 107.1V178.6 250 321.4 392.9 464.3L392.9 500 428.6 464.3V392.9 321.4 250 178.6 107.1L464.3 71.4H535.7 607.1L642.9 107.1V178.6 250L607.1 285.7 571.4 250 535.7 214.3 500 250V321.4L535.7 357.1 571.4 392.9 607.1 428.6 642.9 464.3 678.6 500 714.3 535.7 678.6 571.4 642.9 607.1 607.1 642.9 571.4 678.6 535.7 714.3 500 750 464.3 785.7 428.6 821.4 392.9 857.1H321.4L285.7 821.4 250 785.7 214.3 750 178.6 714.3 142.9 678.6V607.1L178.6 571.4 214.3 535.7 250 500 285.7 464.3V392.9L250 357.1 214.3 392.9 178.6 428.6 142.9 464.3 107.1 500 71.4 535.7 35.7 571.4 0 607.1V678.6L35.7 714.3 71.4 750 107.1 785.7 142.9 821.4 178.6 857.1 214.3 892.9 250 928.6 285.7 964.3 321.4 1000H392.9L428.6 964.3 464.3 928.6 500 892.9 535.7 857.1 571.4 821.4 607.1 785.7 642.9 750 678.6 714.3 714.3 678.6 750 642.9 785.7 607.1 821.4 571.4 857.1 607.1V678.6L892.9 714.3 928.6 750V821.4 892.9L964.3 928.6 1000 892.9V821.4 750 678.6 607.1 535.7L964.3 500 928.6 464.3 892.9 428.6 857.1 392.9 821.4 357.1H750 678.6L642.9 321.4 678.6 285.7 714.3 250V178.6 107.1L678.6 71.4 642.9 35.7 607.1 0H535.7Z", + "width": 1000 + }, + "search": [ + "fill" + ] + }, + { + "uid": "88103366af75e17d8a3921ee1fb8616c", + "css": "paste", + "code": 59474, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M321.4 0L285.7 35.7 250 71.4H178.6 107.1L71.4 107.1 35.7 142.9 0 178.6V250 321.4 392.9 464.3 535.7 607.1 678.6 750 821.4 892.9L35.7 928.6 71.4 964.3 107.1 1000H178.6 250 321.4 392.9 464.3 535.7 607.1 678.6 750L785.7 964.3 821.4 928.6 857.1 892.9V821.4 750 678.6 607.1 535.7 464.3 392.9 321.4 250 178.6L821.4 142.9 785.7 107.1 750 71.4H678.6 607.1L571.4 35.7 535.7 0H464.3 392.9ZM392.9 71.4H464.3L500 107.1 464.3 142.9H392.9L357.1 107.1ZM178.6 214.3H250L285.7 250 321.4 285.7H392.9 464.3 535.7L571.4 250 607.1 214.3H678.6L714.3 250V321.4 392.9 464.3 535.7 607.1 678.6 750 821.4L678.6 857.1H607.1 535.7 464.3 392.9 321.4 250 178.6L142.9 821.4V750 678.6 607.1 535.7 464.3 392.9 321.4 250ZM250 428.6L214.3 464.3 250 500H321.4 392.9 464.3 535.7 607.1L642.9 464.3 607.1 428.6H535.7 464.3 392.9 321.4ZM250 571.4L214.3 607.1 250 642.9H321.4 392.9 464.3 535.7 607.1L642.9 607.1 607.1 571.4H535.7 464.3 392.9 321.4ZM250 714.3L214.3 750 250 785.7H321.4 392.9 464.3 535.7 607.1L642.9 750 607.1 714.3H535.7 464.3 392.9 321.4Z", + "width": 857 + }, + "search": [ + "paste" + ] + }, + { + "uid": "c0d81c71f616c8324a78c54d994af313", + "css": "effect", + "code": 59475, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M150 0L100 50 50 100 0 150V250 350 450 550 650 750 850L50 900 100 950 150 1000H250 350 450 550 650 750 850L900 950 950 900 1000 850V750 650 550 450 350 250 150L950 100 900 50 850 0H750 650 550 450 350 250ZM250 100H350 450 550 650 750L800 150 850 200 900 250V350 450 550 650 750L850 800 800 850 750 900H650 550 450 350 250L200 850 150 800 100 750V650 550 450 350 250L150 200 200 150ZM450 300L400 350 350 400 300 450V550L350 600 400 650 450 700H550L600 650 650 600 700 550V450L650 400 600 350 550 300Z", + "width": 1000 + }, + "search": [ + "effect" + ] + }, + { + "uid": "65c4e52c12c9bed7754878f76c4a0acd", + "css": "book", + "code": 59483, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M136.4 0L90.9 45.5 45.5 90.9 0 136.4V227.3 318.2 409.1 500 590.9 681.8 772.7 863.6 954.5L45.5 1000H136.4 227.3 318.2 409.1 500 590.9 681.8 772.7L818.2 954.5 863.6 909.1 909.1 863.6V772.7 681.8 590.9 500 409.1 318.2 227.3 136.4 45.5L863.6 0H772.7 681.8 590.9 500 409.1 318.2 227.3ZM227.3 90.9H318.2 409.1 500 590.9 681.8 772.7L818.2 136.4V227.3 318.2 409.1 500 590.9 681.8 772.7L772.7 818.2H681.8 590.9 500 409.1 318.2 227.3L181.8 772.7V681.8 590.9 500 409.1 318.2 227.3 136.4ZM318.2 181.8L272.7 227.3V318.2L318.2 363.6H409.1 500 590.9 681.8L727.3 318.2V227.3L681.8 181.8H590.9 500 409.1ZM318.2 454.5L272.7 500 318.2 545.5H409.1 500 590.9 681.8L727.3 500 681.8 454.5H590.9 500 409.1ZM318.2 636.4L272.7 681.8 318.2 727.3H409.1 500 590.9 681.8L727.3 681.8 681.8 636.4H590.9 500 409.1Z", + "width": 909 + }, + "search": [ + "book" + ] + }, + { + "uid": "cee021b830261625d59e49c48a86102c", + "css": "liquid", + "code": 59484, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M55.6 0L0 55.6 55.6 111.1 111.1 166.7V277.8 388.9 500 611.1L166.7 666.7 222.2 722.2 277.8 777.8 333.3 833.3 388.9 888.9H500 611.1 722.2 833.3L888.9 944.4 944.4 1000 1000 944.4V833.3 722.2 611.1 500 388.9 277.8L944.4 222.2 888.9 277.8 833.3 333.3H722.2L666.7 277.8V166.7L722.2 111.1 777.8 55.6 722.2 0H611.1 500 388.9 277.8 166.7ZM277.8 111.1H388.9 500L555.6 166.7V277.8L611.1 333.3 666.7 388.9 722.2 444.4H833.3L888.9 500V611.1 722.2L833.3 777.8H722.2 611.1 500 388.9L333.3 722.2 277.8 666.7 222.2 611.1V500 388.9 277.8 166.7Z", + "width": 1000 + }, + "search": [ + "liquid" + ] + }, + { + "uid": "afcfe6416bfdb70c40ede7bf666667d9", + "css": "host", + "code": 59485, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M45.5 0L0 45.5V136.4 227.3L45.5 272.7H136.4 227.3 318.2 409.1 500 590.9 681.8 772.7 863.6 954.5 1045.5L1090.9 227.3V136.4 45.5L1045.5 0H954.5 863.6 772.7 681.8 590.9 500 409.1 318.2 227.3 136.4ZM136.4 90.9H227.3 318.2 409.1 500L545.5 136.4 500 181.8H409.1 318.2 227.3 136.4L90.9 136.4ZM863.6 90.9L909.1 136.4 863.6 181.8 818.2 136.4ZM45.5 363.6L0 409.1V500 590.9L45.5 636.4H136.4 227.3 318.2 409.1 500 590.9 681.8 772.7 863.6 954.5 1045.5L1090.9 590.9V500 409.1L1045.5 363.6H954.5 863.6 772.7 681.8 590.9 500 409.1 318.2 227.3 136.4ZM136.4 454.5H227.3 318.2 409.1 500L545.5 500 500 545.5H409.1 318.2 227.3 136.4L90.9 500ZM863.6 454.5L909.1 500 863.6 545.5 818.2 500ZM45.5 727.3L0 772.7V863.6 954.5L45.5 1000H136.4 227.3 318.2 409.1 500 590.9 681.8 772.7 863.6 954.5 1045.5L1090.9 954.5V863.6 772.7L1045.5 727.3H954.5 863.6 772.7 681.8 590.9 500 409.1 318.2 227.3 136.4ZM136.4 818.2H227.3 318.2 409.1 500L545.5 863.6 500 909.1H409.1 318.2 227.3 136.4L90.9 863.6ZM863.6 818.2L909.1 863.6 863.6 909.1 818.2 863.6Z", + "width": 1091 + }, + "search": [ + "host" + ] + }, + { + "uid": "060ea30307b6e6ab4706682853ec9d21", + "css": "production", + "code": 59486, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M55.6 0L0 55.6V166.7L55.6 222.2 111.1 277.8 166.7 333.3 222.2 388.9V500 611.1 722.2 833.3L277.8 888.9 333.3 944.4 388.9 1000H500L555.6 944.4 611.1 888.9 666.7 833.3V722.2 611.1 500 388.9L722.2 333.3 777.8 277.8 833.3 222.2 888.9 166.7V55.6L833.3 0H722.2 611.1 500 388.9 277.8 166.7ZM166.7 111.1H277.8 388.9 500 611.1 722.2L777.8 166.7 722.2 222.2H611.1 500 388.9 277.8 166.7L111.1 166.7ZM388.9 333.3L444.4 388.9 500 444.4 555.6 500 500 555.6 444.4 611.1 500 666.7 555.6 722.2 500 777.8 444.4 833.3 388.9 888.9 333.3 833.3V722.2 611.1 500 388.9Z", + "width": 889 + }, + "search": [ + "production" + ] + }, + { + "uid": "32084a9ecd9e7693002b13e274a84240", + "css": "exit", + "code": 59487, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M125 0L83.3 41.7 41.7 83.3 0 125V208.3 291.7 375 458.3 541.7 625 708.3 791.7 875L41.7 916.7 83.3 958.3 125 1000H208.3 291.7 375 458.3 541.7 625 708.3 791.7L833.3 958.3 875 916.7 916.7 875 875 833.3H791.7 708.3 625 541.7 458.3 375 291.7 208.3L166.7 791.7V708.3 625 541.7 458.3 375 291.7 208.3L208.3 166.7H291.7 375 458.3 541.7 625 708.3 791.7 875L916.7 125 875 83.3 833.3 41.7 791.7 0H708.3 625 541.7 458.3 375 291.7 208.3ZM708.3 250L666.7 291.7 708.3 333.3 750 375 708.3 416.7H625 541.7 458.3 375L333.3 458.3V541.7L375 583.3H458.3 541.7 625 708.3L750 625 708.3 666.7 666.7 708.3 708.3 750H791.7L833.3 708.3 875 666.7 916.7 625 958.3 583.3 1000 541.7V458.3L958.3 416.7 916.7 375 875 333.3 833.3 291.7 791.7 250Z", + "width": 1000 + }, + "search": [ + "exit" + ] + }, + { + "uid": "7ee2f2d80faaf4bce9af14bbb6cf1f07", + "css": "mode-pvp", + "code": 59489, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M269.2 0L230.8 38.5V115.4L269.2 153.8 307.7 192.3 346.2 230.8 384.6 269.2 423.1 307.7 461.5 269.2 500 230.8 538.5 192.3 500 153.8 461.5 115.4 423.1 76.9 384.6 38.5 346.2 0ZM884.6 0L846.2 38.5 807.7 76.9 769.2 115.4 730.8 153.8 692.3 192.3 653.8 230.8 615.4 269.2 576.9 307.7 538.5 346.2 500 384.6 461.5 423.1 423.1 461.5 384.6 500 346.2 538.5H269.2L230.8 500 192.3 461.5H115.4L76.9 500V576.9L115.4 615.4 153.8 653.8V730.8L115.4 769.2 76.9 807.7 38.5 846.2 0 884.6V961.5L38.5 1000H115.4L153.8 961.5 192.3 923.1 230.8 884.6 269.2 846.2H346.2L384.6 884.6 423.1 923.1H500L538.5 884.6V807.7L500 769.2 461.5 730.8V653.8L500 615.4 538.5 576.9 576.9 538.5 615.4 500 653.8 461.5 692.3 423.1 730.8 384.6 769.2 346.2 807.7 307.7 846.2 269.2 884.6 230.8 923.1 192.3 961.5 153.8 1000 115.4V38.5L961.5 0ZM807.7 461.5L769.2 500 730.8 538.5 692.3 576.9 730.8 615.4 769.2 653.8V730.8L730.8 769.2 692.3 807.7V884.6L730.8 923.1H807.7L846.2 884.6 884.6 846.2H961.5L1000 884.6 1038.5 923.1 1076.9 961.5 1115.4 1000H1192.3L1230.8 961.5V884.6L1192.3 846.2 1153.8 807.7 1115.4 769.2 1076.9 730.8V653.8L1115.4 615.4 1153.8 576.9V500L1115.4 461.5H1038.5L1000 500 961.5 538.5H884.6L846.2 500Z", + "width": 1231 + }, + "search": [ + "mode-pvp" + ] + }, + { + "uid": "fca174e630aceac2289d86197d04ac6d", + "css": "mode-attack", + "code": 59493, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M884.6 0L846.2 38.5 807.7 76.9 769.2 115.4 730.8 153.8 692.3 192.3 653.8 230.8 615.4 269.2 576.9 307.7 538.5 346.2 500 384.6 461.5 423.1 423.1 461.5 384.6 500 346.2 538.5H269.2L230.8 500 192.3 461.5H115.4L76.9 500V576.9L115.4 615.4 153.8 653.8V730.8L115.4 769.2 76.9 807.7 38.5 846.2 0 884.6V961.5L38.5 1000H115.4L153.8 961.5 192.3 923.1 230.8 884.6 269.2 846.2H346.2L384.6 884.6 423.1 923.1H500L538.5 884.6V807.7L500 769.2 461.5 730.8V653.8L500 615.4 538.5 576.9 576.9 538.5 615.4 500 653.8 461.5 692.3 423.1 730.8 384.6 769.2 346.2 807.7 307.7 846.2 269.2 884.6 230.8 923.1 192.3 961.5 153.8 1000 115.4V38.5L961.5 0Z", + "width": 1000 + }, + "search": [ + "mode-attack" + ] + }, + { + "uid": "d2dae093c8eaeecb8b86b9b3137d5e59", + "css": "refresh-1", + "code": 59495, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M41.7 0L0 41.7V125 208.3 291.7 375 458.3 541.7L41.7 583.3H125L166.7 541.7V458.3 375 291.7 208.3L208.3 166.7H291.7 375 458.3 541.7 625 708.3L750 208.3 708.3 250 666.7 291.7 708.3 333.3H791.7 875 958.3L1000 291.7V208.3 125 41.7L958.3 0 916.7 41.7 875 83.3 833.3 41.7 791.7 0H708.3 625 541.7 458.3 375 291.7 208.3 125ZM875 416.7L833.3 458.3V541.7 625 708.3 791.7L791.7 833.3H708.3 625 541.7 458.3 375 291.7L250 791.7 291.7 750 333.3 708.3 291.7 666.7H208.3 125 41.7L0 708.3V791.7 875 958.3L41.7 1000 83.3 958.3 125 916.7 166.7 958.3 208.3 1000H291.7 375 458.3 541.7 625 708.3 791.7 875 958.3L1000 958.3V875 791.7 708.3 625 541.7 458.3L958.3 416.7Z", + "width": 1000 + }, + "search": [ + "refresh" + ] + }, + { + "uid": "279c989fcea20393a5b83eb9e598d59a", + "css": "none", + "code": 59496, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M187.5 0L125 62.5 62.5 125 0 187.5V312.5 437.5 562.5 687.5 812.5L62.5 875 125 937.5 187.5 1000H312.5 437.5 562.5 687.5 812.5L875 937.5 937.5 875 1000 812.5V687.5 562.5 437.5 312.5 187.5L937.5 125 875 62.5 812.5 0H687.5 562.5 437.5 312.5ZM437.5 125H562.5 687.5L750 187.5 812.5 250 875 312.5V437.5 562.5L812.5 625 750 562.5 687.5 500 625 437.5 562.5 375 500 312.5 437.5 250 375 187.5ZM187.5 375L250 437.5 312.5 500 375 562.5 437.5 625 500 687.5 562.5 750 625 812.5 562.5 875H437.5 312.5L250 812.5 187.5 750 125 687.5V562.5 437.5Z", + "width": 1000 + }, + "search": [ + "none" + ] + }, + { + "uid": "e3b561a775bcb150f6b8ea719a465345", + "css": "pencil_", + "code": 59497, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M821.4 0L785.7 35.7 750 71.4 714.3 107.1 678.6 142.9 642.9 178.6 678.6 214.3 714.3 250 750 285.7 785.7 321.4 821.4 357.1 857.1 321.4 892.9 285.7 928.6 250 964.3 214.3 1000 178.6 964.3 142.9 928.6 107.1 892.9 71.4 857.1 35.7ZM535.7 285.7L500 321.4 464.3 357.1 428.6 392.9 392.9 428.6 357.1 464.3 321.4 500 285.7 535.7 250 571.4 214.3 607.1 178.6 642.9 142.9 678.6 107.1 714.3 71.4 750 35.7 785.7 0 821.4V892.9 964.3L35.7 1000H107.1 178.6L214.3 964.3 250 928.6 285.7 892.9 321.4 857.1 357.1 821.4 392.9 785.7 428.6 750 464.3 714.3 500 678.6 535.7 642.9 571.4 607.1 607.1 571.4 642.9 535.7 678.6 500 714.3 464.3 678.6 428.6 642.9 392.9 607.1 357.1 571.4 321.4ZM250 642.9L285.7 678.6 321.4 714.3 357.1 750 321.4 785.7 285.7 821.4 250 857.1 214.3 892.9 178.6 928.6H107.1L71.4 892.9V821.4L107.1 785.7 142.9 750 178.6 714.3 214.3 678.6Z", + "width": 1000 + }, + "search": [ + "pencil" + ] + }, + { + "uid": "8b4d5e8da6aa68188b631aaf252a9e14", + "css": "refresh", + "code": 59498, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M41.7 0L0 41.7V125 208.3 291.7 375 458.3 541.7L41.7 583.3H125L166.7 541.7V458.3 375 291.7 208.3L208.3 166.7H291.7 375 458.3 541.7 625 708.3L750 208.3 708.3 250 666.7 291.7 708.3 333.3H791.7 875 958.3L1000 291.7V208.3 125 41.7L958.3 0 916.7 41.7 875 83.3 833.3 41.7 791.7 0H708.3 625 541.7 458.3 375 291.7 208.3 125ZM875 416.7L833.3 458.3V541.7 625 708.3 791.7L791.7 833.3H708.3 625 541.7 458.3 375 291.7L250 791.7 291.7 750 333.3 708.3 291.7 666.7H208.3 125 41.7L0 708.3V791.7 875 958.3L41.7 1000 83.3 958.3 125 916.7 166.7 958.3 208.3 1000H291.7 375 458.3 541.7 625 708.3 791.7 875 958.3L1000 958.3V875 791.7 708.3 625 541.7 458.3L958.3 416.7Z", + "width": 1000 + }, + "search": [ + "refresh" + ] + }, + { + "uid": "44e902e72564bc6d9a9eb1d174208d35", + "css": "mode-survival", + "code": 59499, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M38.5 0L0 38.5V115.4 192.3 269.2 346.2 423.1 500 576.9 653.8L38.5 692.3 76.9 730.8 115.4 769.2 153.8 807.7 192.3 846.2 230.8 884.6 269.2 923.1 307.7 961.5 346.2 1000H423.1 500 576.9L615.4 961.5 653.8 923.1 692.3 884.6 730.8 846.2 769.2 807.7 807.7 769.2 846.2 730.8 884.6 692.3 923.1 653.8V576.9 500 423.1 346.2 269.2 192.3 115.4 38.5L884.6 0H807.7L769.2 38.5 730.8 76.9 692.3 115.4 653.8 153.8H576.9 500 423.1 346.2 269.2L230.8 115.4 192.3 76.9 153.8 38.5 115.4 0Z", + "width": 923 + }, + "search": [ + "mode-survival" + ] + }, + { + "uid": "9e23184b166b551c5fb0bd5ee3a4dc2c", + "css": "command-rally", + "code": 59500, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M250 0L166.7 83.3 83.3 166.7 0 250V416.7 583.3 750L83.3 833.3 166.7 916.7 250 1000H416.7 583.3 750L833.3 916.7 916.7 833.3 1000 750V583.3 416.7 250L916.7 166.7 833.3 83.3 750 0H583.3 416.7ZM416.7 166.7H583.3L666.7 250 750 333.3 833.3 416.7V583.3L750 666.7 666.7 750 583.3 833.3H416.7L333.3 750 250 666.7 166.7 583.3V416.7L250 333.3 333.3 250Z", + "width": 1000 + }, + "search": [ + "command-rally" + ] + }, + { + "uid": "5b2609713ca347b272beb0bc5f49c42e", + "css": "units", + "code": 59501, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M437.5 0L375 62.5 312.5 125 250 187.5 187.5 250 125 312.5 62.5 375 0 437.5V562.5 687.5L62.5 750 125 687.5 187.5 625 250 687.5V812.5 937.5L312.5 1000H437.5L500 937.5V812.5L562.5 750H687.5L750 812.5V937.5L812.5 1000H937.5L1000 937.5V812.5 687.5L1062.5 625 1125 687.5 1187.5 750 1250 687.5V562.5 437.5L1187.5 375 1125 312.5 1062.5 250 1000 187.5 937.5 125 875 62.5 812.5 0H687.5 562.5ZM437.5 125H562.5 687.5 812.5L875 187.5 937.5 250 1000 312.5 1062.5 375 1125 437.5 1062.5 500H937.5L875 562.5 812.5 625H687.5 562.5 437.5L375 562.5 312.5 500H187.5L125 437.5 187.5 375 250 312.5 312.5 250 375 187.5ZM562.5 250L500 312.5 562.5 375H687.5L750 312.5 687.5 250Z", + "width": 1250 + }, + "search": [ + "units" + ] + }, + { + "uid": "de2b09bde33670e3502e3e07b936e098", + "css": "command-attack", + "code": 59502, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M750 0L666.7 83.3 583.3 166.7 500 250 416.7 333.3 333.3 416.7 250 500 166.7 416.7 83.3 333.3 0 416.7 83.3 500 166.7 583.3 83.3 666.7 0 750V916.7L83.3 1000H250L333.3 916.7 416.7 833.3 500 916.7 583.3 1000 666.7 916.7 583.3 833.3 500 750 583.3 666.7 666.7 583.3 750 500 833.3 416.7 916.7 333.3 1000 250V83.3L916.7 0Z", + "width": 1000 + }, + "search": [ + "command-attack" + ] + }, + { + "uid": "343b1d6c67d1c2bdc279b8df809fb3bf", + "css": "trash", + "code": 59503, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M291.7 0L250 41.7V125L208.3 166.7H125 41.7L0 208.3V291.7 375 458.3L41.7 500 83.3 541.7V625 708.3 791.7 875 958.3L125 1000H208.3 291.7 375 458.3 541.7 625 708.3L750 958.3V875 791.7 708.3 625 541.7L791.7 500 833.3 458.3V375 291.7 208.3L791.7 166.7H708.3 625L583.3 125V41.7L541.7 0H458.3 375ZM375 83.3H458.3L500 125 458.3 166.7H375L333.3 125ZM125 250H208.3 291.7 375 458.3 541.7 625 708.3L750 291.7V375L708.3 416.7H625 541.7 458.3 375 291.7 208.3 125L83.3 375V291.7ZM208.3 500L250 541.7V625 708.3 791.7 875L208.3 916.7 166.7 875V791.7 708.3 625 541.7ZM375 500H458.3L500 541.7V625 708.3 791.7 875L458.3 916.7H375L333.3 875V791.7 708.3 625 541.7ZM625 500L666.7 541.7V625 708.3 791.7 875L625 916.7 583.3 875V791.7 708.3 625 541.7Z", + "width": 833 + }, + "search": [ + "trash" + ] + }, + { + "uid": "f82a79ee879412f7ddf7c517c6958d45", + "css": "chat", + "code": 59504, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M187.5 0L125 62.5 62.5 125 0 187.5V312.5 437.5 562.5 687.5 812.5L62.5 875 125 937.5 187.5 1000 250 937.5V812.5L312.5 750H437.5 562.5 687.5 812.5L875 687.5 937.5 625 1000 562.5V437.5 312.5 187.5L937.5 125 875 62.5 812.5 0H687.5 562.5 437.5 312.5Z", + "width": 1000 + }, + "search": [ + "chat" + ] + }, + { + "uid": "1a406c75ee5adac112504cd1baf6d482", + "css": "turret", + "code": 59505, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M166.7 0L111.1 55.6V166.7 277.8 388.9L55.6 444.4 0 500V611.1 722.2 833.3 944.4L55.6 1000H166.7 277.8L333.3 944.4 388.9 888.9H500L555.6 944.4 611.1 1000H722.2 833.3L888.9 944.4V833.3 722.2 611.1 500L833.3 444.4 777.8 388.9V277.8 166.7 55.6L722.2 0H611.1L555.6 55.6V166.7L500 222.2H388.9L333.3 166.7V55.6L277.8 0ZM277.8 333.3H388.9 500 611.1L666.7 388.9 722.2 444.4 777.8 500V611.1 722.2 833.3L722.2 888.9H611.1L555.6 833.3 500 777.8H388.9L333.3 833.3 277.8 888.9H166.7L111.1 833.3V722.2 611.1 500L166.7 444.4 222.2 388.9Z", + "width": 889 + }, + "search": [ + "turret" + ] + }, + { + "uid": "559d541ead67649a9658f22b36bc48fc", + "css": "players", + "code": 59506, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M437.5 0L375 62.5 312.5 125 250 187.5V312.5L312.5 375 375 437.5 312.5 500 250 562.5 187.5 625 125 687.5 62.5 750 0 812.5V937.5L62.5 1000H187.5 312.5 437.5 562.5 687.5 812.5 937.5L1000 937.5V812.5L937.5 750 875 687.5 812.5 625 750 562.5 687.5 500 625 437.5 687.5 375 750 312.5V187.5L687.5 125 625 62.5 562.5 0Z", + "width": 1000 + }, + "search": [ + "players" + ] + }, + { + "uid": "2e574f2316b8b4f840d5680dcad8088b", + "css": "editor", + "code": 59507, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M375 0L333.3 41.7 291.7 83.3 250 125 208.3 166.7 166.7 208.3 125 250 83.3 291.7 41.7 333.3 0 375V458.3 541.7 625 708.3 791.7 875 958.3L41.7 1000H125 208.3 291.7 375 458.3 541.7 625 708.3 791.7 875 958.3L1000 958.3V875 791.7 708.3 625 541.7 458.3L958.3 416.7 916.7 375 875 333.3 833.3 291.7 791.7 250 750 208.3 708.3 166.7 666.7 208.3 625 250 583.3 208.3 541.7 166.7 500 125 458.3 83.3 416.7 41.7ZM375 166.7L416.7 208.3 458.3 250 500 291.7 541.7 333.3 583.3 375 625 416.7 666.7 375 708.3 333.3 750 375 791.7 416.7 833.3 458.3 875 500 916.7 541.7V625 708.3 791.7 875L875 916.7H791.7 708.3 625 541.7 458.3 375 291.7 208.3 125L83.3 875V791.7 708.3 625 541.7 458.3L125 416.7 166.7 375 208.3 333.3 250 291.7 291.7 250 333.3 208.3Z", + "width": 1000 + }, + "search": [ + "editor" + ] + }, + { + "uid": "6e16d3f823a60ce0e9db3a9768668132", + "css": "copy", + "code": 59508, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M107.1 0L71.4 35.7 35.7 71.4 0 107.1V178.6 250 321.4 392.9 464.3 535.7 607.1L35.7 642.9 71.4 678.6 107.1 714.3 142.9 678.6V607.1 535.7 464.3 392.9 321.4 250 178.6L178.6 142.9H250 321.4 392.9 464.3 535.7 607.1L642.9 107.1 607.1 71.4 571.4 35.7 535.7 0H464.3 392.9 321.4 250 178.6ZM321.4 214.3L285.7 250 250 285.7 214.3 321.4V392.9 464.3 535.7 607.1 678.6 750 821.4 892.9L250 928.6 285.7 964.3 321.4 1000H392.9 464.3 535.7 607.1 678.6 750 821.4L857.1 964.3 892.9 928.6 928.6 892.9V821.4 750 678.6 607.1 535.7 464.3 392.9 321.4L892.9 285.7 857.1 250 821.4 214.3H750 678.6 607.1 535.7 464.3 392.9ZM392.9 357.1H464.3 535.7 607.1 678.6 750L785.7 392.9V464.3 535.7 607.1 678.6 750 821.4L750 857.1H678.6 607.1 535.7 464.3 392.9L357.1 821.4V750 678.6 607.1 535.7 464.3 392.9Z", + "width": 929 + }, + "search": [ + "copy" + ] + }, + { + "uid": "295e9560f763400dae5f29abd75c4e39", + "css": "tree", + "code": 59509, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M38.5 0L0 38.5V115.4 192.3L38.5 230.8 76.9 269.2V346.2 423.1 500 576.9L115.4 615.4H192.3 269.2 346.2L384.6 653.8 423.1 692.3 461.5 730.8V807.7 884.6 961.5L500 1000 538.5 961.5V884.6 807.7 730.8L576.9 692.3 615.4 653.8 653.8 615.4H730.8 807.7 884.6L923.1 576.9V500 423.1 346.2 269.2L961.5 230.8 1000 192.3V115.4 38.5L961.5 0H884.6 807.7L769.2 38.5V115.4 192.3L807.7 230.8 846.2 269.2V346.2 423.1 500L807.7 538.5H730.8 653.8L615.4 500 576.9 461.5 538.5 423.1V346.2 269.2L576.9 230.8 615.4 192.3V115.4 38.5L576.9 0H500 423.1L384.6 38.5V115.4 192.3L423.1 230.8 461.5 269.2V346.2 423.1L423.1 461.5 384.6 500 346.2 538.5H269.2 192.3L153.8 500V423.1 346.2 269.2L192.3 230.8 230.8 192.3V115.4 38.5L192.3 0H115.4Z", + "width": 1000 + }, + "search": [ + "tree" + ] + }, + { + "uid": "0581bbd4c54547d8d6721cc122ffe0fa", + "css": "lock-open", + "code": 59510, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M291.7 0L250 41.7 208.3 83.3 166.7 125V208.3 291.7 375L125 416.7 83.3 458.3 41.7 500 0 541.7V625 708.3 791.7 875L41.7 916.7 83.3 958.3 125 1000H208.3 291.7 375 458.3 541.7 625 708.3L750 958.3 791.7 916.7 833.3 875V791.7 708.3 625 541.7L791.7 500 750 458.3 708.3 416.7H625 541.7 458.3 375L333.3 375V291.7 208.3L375 166.7H458.3L500 208.3V291.7L541.7 333.3H625L666.7 291.7V208.3 125L625 83.3 583.3 41.7 541.7 0H458.3 375ZM375 583.3H458.3L500 625V708.3 791.7L458.3 833.3H375L333.3 791.7V708.3 625Z", + "width": 833 + }, + "search": [ + "lock-open" + ] + }, + { + "uid": "d0203434b5e4cea53499b112743fd675", + "css": "pick", + "code": 59511, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M590.9 0L545.5 45.5 500 90.9 454.5 136.4 409.1 181.8 363.6 136.4 318.2 90.9 272.7 136.4 318.2 181.8 363.6 227.3 409.1 272.7 454.5 318.2 409.1 363.6 363.6 409.1 318.2 454.5 272.7 500 227.3 545.5 181.8 590.9 136.4 636.4 90.9 681.8V772.7L45.5 818.2 0 863.6V954.5L45.5 1000H136.4L181.8 954.5 227.3 909.1H318.2L363.6 863.6 409.1 818.2 454.5 772.7 500 727.3 545.5 681.8 590.9 636.4 636.4 590.9 681.8 545.5 727.3 590.9 772.7 636.4 818.2 681.8 863.6 727.3 909.1 681.8 863.6 636.4 818.2 590.9 863.6 545.5 909.1 500 954.5 454.5 1000 409.1V318.2 227.3 136.4L954.5 90.9 909.1 45.5 863.6 0H772.7 681.8ZM500 363.6L545.5 409.1 590.9 454.5 636.4 500 590.9 545.5 545.5 590.9 500 636.4 454.5 681.8 409.1 727.3 363.6 772.7 318.2 818.2H227.3L181.8 772.7V681.8L227.3 636.4 272.7 590.9 318.2 545.5 363.6 500 409.1 454.5 454.5 409.1Z", + "width": 1000 + }, + "search": [ + "pick" + ] + }, + { + "uid": "b04d1002bf24f642a026b8844f0ab4af", + "css": "export", + "code": 59512, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M50 0L0 50V150 250 350 450 550 650 750 850 950L50 1000H150 250 350 450 550 650 750 850 950L1000 950V850 750L950 700 900 750V850L850 900H750 650 550 450 350 250 150L100 850V750 650 550 450 350 250 150L150 100H250 350 450 550L600 50 550 0H450 350 250 150ZM850 0L800 50V150L750 200H650 550L500 250 450 300 400 350 350 400 300 450V550L350 600H450L500 550 550 500 600 450 650 400H750L800 450V550L850 600 900 550 950 500 1000 450 1050 400 1100 350V250L1050 200 1000 150 950 100 900 50Z", + "width": 1100 + }, + "search": [ + "export" + ] + }, + { + "uid": "6636e2512996fa2c2b37b8d9e111d4fe", + "css": "download", + "code": 59513, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M464.3 0L428.6 35.7V107.1 178.6 250 321.4 392.9L392.9 428.6 357.1 392.9 321.4 357.1H250L214.3 392.9V464.3L250 500 285.7 535.7 321.4 571.4 357.1 607.1 392.9 642.9 428.6 678.6 464.3 714.3H535.7L571.4 678.6 607.1 642.9 642.9 607.1 678.6 571.4 714.3 535.7 750 500 785.7 464.3V392.9L750 357.1H678.6L642.9 392.9 607.1 428.6 571.4 392.9V321.4 250 178.6 107.1 35.7L535.7 0ZM35.7 714.3L0 750V821.4 892.9 964.3L35.7 1000H107.1 178.6 250 321.4 392.9 464.3 535.7 607.1 678.6 750 821.4 892.9 964.3L1000 964.3V892.9 821.4 750L964.3 714.3H892.9L857.1 750V821.4L821.4 857.1H750 678.6 607.1 535.7 464.3 392.9 321.4 250 178.6L142.9 821.4V750L107.1 714.3Z", + "width": 1000 + }, + "search": [ + "download" + ] + }, + { + "uid": "f9895cd70db81922fbd2aa1882f04a03", + "css": "upload", + "code": 59515, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M464.3 0L428.6 35.7 392.9 71.4 357.1 107.1 321.4 142.9 285.7 178.6 250 214.3 214.3 250V321.4L250 357.1H321.4L357.1 321.4 392.9 285.7 428.6 321.4V392.9 464.3 535.7 607.1 678.6L464.3 714.3H535.7L571.4 678.6V607.1 535.7 464.3 392.9 321.4L607.1 285.7 642.9 321.4 678.6 357.1H750L785.7 321.4V250L750 214.3 714.3 178.6 678.6 142.9 642.9 107.1 607.1 71.4 571.4 35.7 535.7 0ZM35.7 714.3L0 750V821.4 892.9 964.3L35.7 1000H107.1 178.6 250 321.4 392.9 464.3 535.7 607.1 678.6 750 821.4 892.9 964.3L1000 964.3V892.9 821.4 750L964.3 714.3H892.9L857.1 750V821.4L821.4 857.1H750 678.6 607.1 535.7 464.3 392.9 321.4 250 178.6L142.9 821.4V750L107.1 714.3Z", + "width": 1000 + }, + "search": [ + "upload" + ] + }, + { + "uid": "e8191eedaa10260cef458a2385925cb0", + "css": "settings", + "code": 59516, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M450 0L400 50V150L350 200 300 150 250 100H150L100 150V250L150 300 200 350 150 400H50L0 450V550L50 600H150L200 650 150 700 100 750V850L150 900H250L300 850 350 800 400 850V950L450 1000H550L600 950V850L650 800 700 850 750 900H850L900 850V750L850 700 800 650 850 600H950L1000 550V450L950 400H850L800 350 850 300 900 250V150L850 100H750L700 150 650 200 600 150V50L550 0ZM450 400H550L600 450V550L550 600H450L400 550V450Z", + "width": 1000 + }, + "search": [ + "settings" + ] + }, + { + "uid": "ea0128855a25fc520b78658acfe68693", + "css": "spray", + "code": 59517, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M35.7 0L0 35.7 35.7 71.4 71.4 35.7ZM178.6 71.4L142.9 107.1 178.6 142.9 214.3 178.6 178.6 214.3 142.9 250 178.6 285.7 214.3 250 250 214.3 285.7 178.6 250 142.9 214.3 107.1ZM392.9 71.4L357.1 107.1 392.9 142.9 428.6 178.6 392.9 214.3 357.1 250 321.4 285.7 285.7 321.4 250 357.1 214.3 392.9 250 428.6H321.4 392.9 464.3 535.7 607.1 678.6 750L785.7 392.9 750 357.1 714.3 321.4 678.6 285.7 642.9 250V178.6 107.1L607.1 71.4H535.7 464.3ZM35.7 142.9L0 178.6 35.7 214.3 71.4 178.6ZM35.7 285.7L0 321.4 35.7 357.1 71.4 321.4ZM250 500L214.3 535.7V607.1 678.6 750 821.4L250 857.1H321.4 392.9 464.3 535.7 607.1 678.6 750L785.7 821.4V750 678.6 607.1 535.7L750 500H678.6 607.1 535.7 464.3 392.9 321.4ZM250 928.6L214.3 964.3 250 1000H321.4 392.9 464.3 535.7 607.1 678.6 750L785.7 964.3 750 928.6H678.6 607.1 535.7 464.3 392.9 321.4Z", + "width": 786 + }, + "search": [ + "spray" + ] + }, + { + "uid": "32b0960726db55c7f26620e15f83acd9", + "css": "zoom", + "code": 59530, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M423.1 0L384.6 38.5 346.2 76.9 307.7 115.4 269.2 153.8 230.8 192.3 192.3 230.8 153.8 269.2V346.2 423.1 500 576.9L192.3 615.4 230.8 653.8 192.3 692.3 153.8 730.8 115.4 769.2 76.9 807.7 38.5 846.2 0 884.6V961.5L38.5 1000H115.4L153.8 961.5 192.3 923.1 230.8 884.6 269.2 846.2 307.7 807.7 346.2 769.2 384.6 807.7 423.1 846.2H500 576.9 653.8 730.8L769.2 807.7 807.7 769.2 846.2 730.8 884.6 692.3 923.1 653.8 961.5 615.4 1000 576.9V500 423.1 346.2 269.2L961.5 230.8 923.1 192.3 884.6 153.8 846.2 115.4 807.7 76.9 769.2 38.5 730.8 0H653.8 576.9 500ZM500 153.8H576.9 653.8L692.3 192.3 730.8 230.8 769.2 269.2 807.7 307.7 846.2 346.2V423.1 500L807.7 538.5 769.2 576.9 730.8 615.4 692.3 653.8 653.8 692.3H576.9 500L461.5 653.8 423.1 615.4 384.6 576.9 346.2 538.5 307.7 500V423.1 346.2L346.2 307.7 384.6 269.2 423.1 230.8 461.5 192.3Z", + "width": 1000 + }, + "search": [ + "search" + ] + }, + { + "uid": "22856e2f42e364e7e363348542b46062", + "css": "power_old", + "code": 59531, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1250 0L1166.7 83.3 1083.3 166.7 1000 250 916.7 333.3 833.3 416.7 750 500 666.7 416.7 583.3 333.3 500 250 416.7 166.7 333.3 250 250 333.3 166.7 416.7V583.3L83.3 666.7 0 750V916.7L83.3 1000 166.7 916.7 250 833.3 333.3 750 416.7 666.7 500 750 583.3 833.3 666.7 916.7 750 1000 833.3 916.7 916.7 833.3 1000 750 1083.3 666.7 1166.7 583.3V416.7L1250 333.3 1333.3 250V83.3Z", + "width": 1333 + }, + "search": [ + "power" + ] + }, + { + "uid": "971842913945f59c7f3cf11e75e1e4f1", + "css": "power_", + "code": 59408, + "src": "typicons" + }, + { + "uid": "844ca62d81744d1ca4b59a4763aeca86", + "css": "menu", + "code": 59532, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M62.5 0L0 62.5V187.5L62.5 250H187.5L250 187.5V62.5L187.5 0ZM437.5 0L375 62.5V187.5L437.5 250H562.5 687.5 812.5 937.5L1000 187.5V62.5L937.5 0H812.5 687.5 562.5ZM62.5 375L0 437.5V562.5L62.5 625H187.5L250 562.5V437.5L187.5 375ZM437.5 375L375 437.5V562.5L437.5 625H562.5 687.5 812.5 937.5L1000 562.5V437.5L937.5 375H812.5 687.5 562.5ZM62.5 750L0 812.5V937.5L62.5 1000H187.5L250 937.5V812.5L187.5 750ZM437.5 750L375 812.5V937.5L437.5 1000H562.5 687.5 812.5 937.5L1000 937.5V812.5L937.5 750H812.5 687.5 562.5Z", + "width": 1000 + }, + "search": [ + "menu" + ] + }, + { + "uid": "4b4d5e5ee8884c2f545869496dcb525b", + "css": "lock", + "code": 59533, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M318.2 0L272.7 45.5 227.3 90.9 181.8 136.4V227.3 318.2L136.4 363.6 90.9 409.1 45.5 454.5 0 500V590.9 681.8 772.7 863.6L45.5 909.1 90.9 954.5 136.4 1000H227.3 318.2 409.1 500 590.9 681.8 772.7L818.2 954.5 863.6 909.1 909.1 863.6V772.7 681.8 590.9 500L863.6 454.5 818.2 409.1 772.7 363.6 727.3 318.2V227.3 136.4L681.8 90.9 636.4 45.5 590.9 0H500 409.1ZM409.1 181.8H500L545.5 227.3V318.2L500 363.6H409.1L363.6 318.2V227.3ZM409.1 545.5H500L545.5 590.9V681.8 772.7L500 818.2H409.1L363.6 772.7V681.8 590.9Z", + "width": 909 + }, + "search": [ + "lock" + ] + }, + { + "uid": "9515bb59fd462b77f0d088978c339778", + "css": "eye", + "code": 59534, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M450 0L400 50 350 100 300 150 250 200 200 250 150 300 100 350 50 400 0 450V550L50 600 100 650 150 700 200 750 250 800 300 850 350 900 400 950 450 1000H550 650 750 850 950 1050 1150L1200 950 1250 900 1300 850 1350 800 1400 750 1450 700 1500 650 1550 600 1600 550V450L1550 400 1500 350 1450 300 1400 250 1350 200 1300 150 1250 100 1200 50 1150 0H1050 950 850 750 650 550ZM650 200H750 850 950L1000 250 1050 300 1100 350 1150 400 1200 450V550L1150 600 1100 650 1050 700 1000 750 950 800H850 750 650L600 750 550 700 500 650 450 600 400 550V450L450 400 500 350 550 300 600 250ZM750 400L700 450V550L750 600H850L900 550V450L850 400Z", + "width": 1600 + }, + "search": [ + "eye" + ] + }, + { + "uid": "fdd7088d0019bb1033df645f01981429", + "css": "eye-off", + "code": 59535, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1041.7 0L1000 41.7 958.3 83.3 916.7 125 875 166.7 833.3 208.3 791.7 250 750 291.7 708.3 333.3 666.7 375 625 416.7 583.3 458.3 541.7 500 500 541.7 458.3 583.3 416.7 625 375 666.7 333.3 708.3 291.7 750 250 791.7 208.3 833.3 166.7 875V958.3L208.3 1000H291.7L333.3 958.3 375 916.7 416.7 875 458.3 833.3 500 791.7 541.7 750 583.3 708.3 625 666.7 666.7 625 708.3 583.3 750 541.7 791.7 500 833.3 458.3 875 416.7 916.7 375 958.3 333.3 1000 291.7 1041.7 250 1083.3 208.3 1125 166.7 1166.7 125V41.7L1125 0ZM375 83.3L333.3 125 291.7 166.7 250 208.3 208.3 250 166.7 291.7 125 333.3 83.3 375 41.7 416.7 0 458.3V541.7L41.7 583.3 83.3 625 125 666.7H208.3L250 625 291.7 583.3 333.3 541.7V458.3L375 416.7 416.7 375 458.3 333.3 500 291.7 541.7 250H625L666.7 208.3 708.3 166.7 750 125 708.3 83.3H625 541.7 458.3ZM1125 333.3L1083.3 375 1041.7 416.7 1000 458.3V541.7L958.3 583.3 916.7 625 875 666.7 833.3 708.3 791.7 750H708.3L666.7 791.7 625 833.3 583.3 875 625 916.7H708.3 791.7 875 958.3L1000 875 1041.7 833.3 1083.3 791.7 1125 750 1166.7 708.3 1208.3 666.7 1250 625 1291.7 583.3 1333.3 541.7V458.3L1291.7 416.7 1250 375 1208.3 333.3Z", + "width": 1333 + }, + "search": [ + "eye-off" + ] + }, + { + "uid": "f47srtt9pew19q6kg9jniwtzsb8q1rhy", + "css": "warning", + "code": 9888, + "src": "modernpics" + }, + { + "uid": "c17baed6f9afce2a8fafe730886b8e06", + "css": "terrain", + "code": 59492, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M350 0L300 50 250 100 200 150 150 200 100 250 50 300 0 350V450 550 650 750 850 950L50 1000H150 250 350 450 550 650 750 850 950L1000 950V850 750 650 550 450L950 400 900 350 850 300 800 250 750 200 700 250 650 300 600 250 550 200 500 150 450 100 400 50ZM350 200L400 250 450 300 500 350 550 400 600 450 650 500 700 450 750 400 800 450 850 500 900 550V650 750 850L850 900H750 650 550 450 350 250 150L100 850V750 650 550 450L150 400 200 350 250 300 300 250Z", + "width": 1000 + }, + "search": [ + "terrain" + ] + }, + { + "uid": "bdff09f8036a4b1757599b2510a02ffe", + "css": "defense", + "code": 59469, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M62.5 0L0 62.5V187.5 312.5 437.5 562.5L62.5 625 125 687.5 187.5 750 250 812.5 312.5 875 375 937.5 437.5 1000H562.5L625 937.5 687.5 875 750 812.5 812.5 750 875 687.5 937.5 625 1000 562.5V437.5 312.5 187.5 62.5L937.5 0H812.5L750 62.5 687.5 125H562.5 437.5 312.5L250 62.5 187.5 0ZM187.5 125L250 187.5 312.5 250H437.5 562.5 687.5L750 187.5 812.5 125 875 187.5V312.5 437.5 562.5L812.5 625 750 687.5 687.5 750 625 812.5 562.5 875H437.5L375 812.5 312.5 750 250 687.5 187.5 625 125 562.5V437.5 312.5 187.5Z", + "width": 1000 + }, + "search": [ + "defense" + ] } ] } \ No newline at end of file diff --git a/core/assets-raw/fontgen/extra/admin.svg b/core/assets-raw/fontgen/extra/admin.svg new file mode 100644 index 0000000000..03b33386b8 --- /dev/null +++ b/core/assets-raw/fontgen/extra/admin.svg @@ -0,0 +1,54 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/assets-raw/fontgen/extra/distribution.svg b/core/assets-raw/fontgen/extra/distribution.svg new file mode 100644 index 0000000000..63d50541d0 --- /dev/null +++ b/core/assets-raw/fontgen/extra/distribution.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/assets-raw/fontgen/extra/effect.svg b/core/assets-raw/fontgen/extra/effect.svg new file mode 100644 index 0000000000..2194e8953e --- /dev/null +++ b/core/assets-raw/fontgen/extra/effect.svg @@ -0,0 +1,53 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/core/assets-raw/fontgen/extra/file-image.svg b/core/assets-raw/fontgen/extra/file-image.svg new file mode 100644 index 0000000000..37d149a2e4 --- /dev/null +++ b/core/assets-raw/fontgen/extra/file-image.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/core/assets-raw/fontgen/extra/info.svg b/core/assets-raw/fontgen/extra/info.svg new file mode 100644 index 0000000000..d7ec5d243f --- /dev/null +++ b/core/assets-raw/fontgen/extra/info.svg @@ -0,0 +1,53 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/core/assets-raw/fontgen/icons/logic.svg b/core/assets-raw/fontgen/extra/logic.svg similarity index 100% rename from core/assets-raw/fontgen/icons/logic.svg rename to core/assets-raw/fontgen/extra/logic.svg diff --git a/core/assets-raw/fontgen/icons/admin.svg b/core/assets-raw/fontgen/icons/admin.svg deleted file mode 100644 index 8b6e5e5220..0000000000 --- a/core/assets-raw/fontgen/icons/admin.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/book.svg b/core/assets-raw/fontgen/icons/book.svg deleted file mode 100644 index 4ce30ae7ee..0000000000 --- a/core/assets-raw/fontgen/icons/book.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/chat.svg b/core/assets-raw/fontgen/icons/chat.svg deleted file mode 100644 index dab837b908..0000000000 --- a/core/assets-raw/fontgen/icons/chat.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/command-attack.svg b/core/assets-raw/fontgen/icons/command-attack.svg deleted file mode 100644 index ffd597b7a5..0000000000 --- a/core/assets-raw/fontgen/icons/command-attack.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/command-rally.svg b/core/assets-raw/fontgen/icons/command-rally.svg deleted file mode 100644 index b402671f69..0000000000 --- a/core/assets-raw/fontgen/icons/command-rally.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/command-retreat.svg b/core/assets-raw/fontgen/icons/command-retreat.svg deleted file mode 100644 index a608141b9b..0000000000 --- a/core/assets-raw/fontgen/icons/command-retreat.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/crafting.svg b/core/assets-raw/fontgen/icons/crafting.svg deleted file mode 100644 index 7f2e56d27c..0000000000 --- a/core/assets-raw/fontgen/icons/crafting.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/defense.svg b/core/assets-raw/fontgen/icons/defense.svg deleted file mode 100644 index 0891560c0a..0000000000 --- a/core/assets-raw/fontgen/icons/defense.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/distribution.svg b/core/assets-raw/fontgen/icons/distribution.svg deleted file mode 100644 index f60b2f7251..0000000000 --- a/core/assets-raw/fontgen/icons/distribution.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/effect.svg b/core/assets-raw/fontgen/icons/effect.svg deleted file mode 100644 index 004fecdb71..0000000000 --- a/core/assets-raw/fontgen/icons/effect.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/exit.svg b/core/assets-raw/fontgen/icons/exit.svg deleted file mode 100644 index 2a9a6ddc8f..0000000000 --- a/core/assets-raw/fontgen/icons/exit.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/fill.svg b/core/assets-raw/fontgen/icons/fill.svg deleted file mode 100644 index 4435469aac..0000000000 --- a/core/assets-raw/fontgen/icons/fill.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/hammer.svg b/core/assets-raw/fontgen/icons/hammer.svg deleted file mode 100644 index a9ec0312f5..0000000000 --- a/core/assets-raw/fontgen/icons/hammer.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/host.svg b/core/assets-raw/fontgen/icons/host.svg deleted file mode 100644 index e927c7af2f..0000000000 --- a/core/assets-raw/fontgen/icons/host.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/itchio.svg b/core/assets-raw/fontgen/icons/itchio.svg deleted file mode 100644 index d26eb1780a..0000000000 --- a/core/assets-raw/fontgen/icons/itchio.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/line.svg b/core/assets-raw/fontgen/icons/line.svg deleted file mode 100644 index 91e2e2fb29..0000000000 --- a/core/assets-raw/fontgen/icons/line.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/link.svg b/core/assets-raw/fontgen/icons/link.svg deleted file mode 100644 index 34b8a163d7..0000000000 --- a/core/assets-raw/fontgen/icons/link.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/liquid.svg b/core/assets-raw/fontgen/icons/liquid.svg deleted file mode 100644 index 6eb50596d8..0000000000 --- a/core/assets-raw/fontgen/icons/liquid.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/mode-attack.svg b/core/assets-raw/fontgen/icons/mode-attack.svg deleted file mode 100644 index cc78940688..0000000000 --- a/core/assets-raw/fontgen/icons/mode-attack.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/mode-pvp.svg b/core/assets-raw/fontgen/icons/mode-pvp.svg deleted file mode 100644 index 76c7f31f77..0000000000 --- a/core/assets-raw/fontgen/icons/mode-pvp.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/mode-survival.svg b/core/assets-raw/fontgen/icons/mode-survival.svg deleted file mode 100644 index aa5d0dcac8..0000000000 --- a/core/assets-raw/fontgen/icons/mode-survival.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/paste.svg b/core/assets-raw/fontgen/icons/paste.svg deleted file mode 100644 index 67a323b6ea..0000000000 --- a/core/assets-raw/fontgen/icons/paste.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/pencil.svg b/core/assets-raw/fontgen/icons/pencil.svg deleted file mode 100644 index f2bfa70403..0000000000 --- a/core/assets-raw/fontgen/icons/pencil.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/players.svg b/core/assets-raw/fontgen/icons/players.svg deleted file mode 100644 index 3cdfa46245..0000000000 --- a/core/assets-raw/fontgen/icons/players.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/power.svg b/core/assets-raw/fontgen/icons/power.svg deleted file mode 100644 index 6d6a5063f2..0000000000 --- a/core/assets-raw/fontgen/icons/power.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/production.svg b/core/assets-raw/fontgen/icons/production.svg deleted file mode 100644 index 74f0f882a9..0000000000 --- a/core/assets-raw/fontgen/icons/production.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/refresh.svg b/core/assets-raw/fontgen/icons/refresh.svg deleted file mode 100644 index 1cde3c7e11..0000000000 --- a/core/assets-raw/fontgen/icons/refresh.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/save.svg b/core/assets-raw/fontgen/icons/save.svg deleted file mode 100644 index d2b0776e95..0000000000 --- a/core/assets-raw/fontgen/icons/save.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/spray.svg b/core/assets-raw/fontgen/icons/spray.svg deleted file mode 100644 index a1b0cf95f7..0000000000 --- a/core/assets-raw/fontgen/icons/spray.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/terrain.svg b/core/assets-raw/fontgen/icons/terrain.svg deleted file mode 100644 index acb45bd0de..0000000000 --- a/core/assets-raw/fontgen/icons/terrain.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/trash.svg b/core/assets-raw/fontgen/icons/trash.svg deleted file mode 100644 index 22ed1dee35..0000000000 --- a/core/assets-raw/fontgen/icons/trash.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/turret.svg b/core/assets-raw/fontgen/icons/turret.svg deleted file mode 100644 index 12009fa1f3..0000000000 --- a/core/assets-raw/fontgen/icons/turret.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/units.svg b/core/assets-raw/fontgen/icons/units.svg deleted file mode 100644 index 969b63e096..0000000000 --- a/core/assets-raw/fontgen/icons/units.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/icons/upgrade.svg b/core/assets-raw/fontgen/icons/upgrade.svg deleted file mode 100644 index 9cee75f283..0000000000 --- a/core/assets-raw/fontgen/icons/upgrade.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/core/assets-raw/fontgen/merge.pe b/core/assets-raw/fontgen/merge.pe index 2dfaf77598..6e5bad0d13 100755 --- a/core/assets-raw/fontgen/merge.pe +++ b/core/assets-raw/fontgen/merge.pe @@ -1,3 +1,3 @@ -Open("core/assets/fonts/font.ttf") -MergeFonts("core/assets-raw/fontgen/out/font.ttf") -Generate("core/assets/fonts/font.ttf") +Open($2) +MergeFonts($1) +Generate($1) diff --git a/core/assets-raw/fonts/Arturito Slab_v2.ttf b/core/assets-raw/fonts/Arturito Slab_v2.ttf deleted file mode 100755 index 04096503fa..0000000000 Binary files a/core/assets-raw/fonts/Arturito Slab_v2.ttf and /dev/null differ diff --git a/core/assets-raw/fonts/EkkamaiNew-Regular.ttf b/core/assets-raw/fonts/EkkamaiNew-Regular.ttf deleted file mode 100644 index 8c3f521e80..0000000000 Binary files a/core/assets-raw/fonts/EkkamaiNew-Regular.ttf and /dev/null differ diff --git a/core/assets-raw/fonts/Exo2-Regular.ttf b/core/assets-raw/fonts/Exo2-Regular.ttf deleted file mode 100644 index 8e09f6fb43..0000000000 Binary files a/core/assets-raw/fonts/Exo2-Regular.ttf and /dev/null differ diff --git a/core/assets-raw/fonts/NanumBarunGothic.ttf b/core/assets-raw/fonts/NanumBarunGothic.ttf deleted file mode 100644 index 658cd3c239..0000000000 Binary files a/core/assets-raw/fonts/NanumBarunGothic.ttf and /dev/null differ diff --git a/core/assets-raw/fonts/OpenSansEmoji.ttf b/core/assets-raw/fonts/OpenSansEmoji.ttf deleted file mode 100644 index 57d86a62bb..0000000000 Binary files a/core/assets-raw/fonts/OpenSansEmoji.ttf and /dev/null differ diff --git a/core/assets-raw/fonts/font_latin.ttf b/core/assets-raw/fonts/font_latin.ttf deleted file mode 100644 index cebae09c33..0000000000 Binary files a/core/assets-raw/fonts/font_latin.ttf and /dev/null differ diff --git a/core/assets-raw/icons/about.png b/core/assets-raw/icons/about.png new file mode 100644 index 0000000000..3943975b97 Binary files /dev/null and b/core/assets-raw/icons/about.png differ diff --git a/core/assets-raw/icons/add.png b/core/assets-raw/icons/add.png new file mode 100644 index 0000000000..328c8ca469 Binary files /dev/null and b/core/assets-raw/icons/add.png differ diff --git a/core/assets-raw/icons/admin.png b/core/assets-raw/icons/admin.png new file mode 100644 index 0000000000..f4101c0423 Binary files /dev/null and b/core/assets-raw/icons/admin.png differ diff --git a/core/assets-raw/icons/book.png b/core/assets-raw/icons/book.png new file mode 100644 index 0000000000..a4395e4ed5 Binary files /dev/null and b/core/assets-raw/icons/book.png differ diff --git a/core/assets-raw/icons/break.png b/core/assets-raw/icons/break.png new file mode 100644 index 0000000000..c4b079735c Binary files /dev/null and b/core/assets-raw/icons/break.png differ diff --git a/core/assets-raw/icons/cancel.png b/core/assets-raw/icons/cancel.png new file mode 100644 index 0000000000..03ea12174f Binary files /dev/null and b/core/assets-raw/icons/cancel.png differ diff --git a/core/assets-raw/icons/changelog.png b/core/assets-raw/icons/changelog.png new file mode 100644 index 0000000000..e6fbf8d3c1 Binary files /dev/null and b/core/assets-raw/icons/changelog.png differ diff --git a/core/assets-raw/icons/chat.png b/core/assets-raw/icons/chat.png new file mode 100644 index 0000000000..85f52fa41c Binary files /dev/null and b/core/assets-raw/icons/chat.png differ diff --git a/core/assets-raw/icons/check.png b/core/assets-raw/icons/check.png new file mode 100644 index 0000000000..db96907362 Binary files /dev/null and b/core/assets-raw/icons/check.png differ diff --git a/core/assets-raw/icons/command-attack.png b/core/assets-raw/icons/command-attack.png new file mode 100644 index 0000000000..655f819338 Binary files /dev/null and b/core/assets-raw/icons/command-attack.png differ diff --git a/core/assets-raw/icons/command-rally.png b/core/assets-raw/icons/command-rally.png new file mode 100644 index 0000000000..4271a5a321 Binary files /dev/null and b/core/assets-raw/icons/command-rally.png differ diff --git a/core/assets-raw/icons/copy.png b/core/assets-raw/icons/copy.png new file mode 100644 index 0000000000..0f03ee5d04 Binary files /dev/null and b/core/assets-raw/icons/copy.png differ diff --git a/core/assets-raw/icons/crafting.png b/core/assets-raw/icons/crafting.png new file mode 100644 index 0000000000..3f7022e87b Binary files /dev/null and b/core/assets-raw/icons/crafting.png differ diff --git a/core/assets-raw/icons/cursor.png b/core/assets-raw/icons/cursor.png new file mode 100644 index 0000000000..1025a08a9e Binary files /dev/null and b/core/assets-raw/icons/cursor.png differ diff --git a/core/assets-raw/icons/defense.png b/core/assets-raw/icons/defense.png new file mode 100644 index 0000000000..694492a160 Binary files /dev/null and b/core/assets-raw/icons/defense.png differ diff --git a/core/assets-raw/icons/diagonal.png b/core/assets-raw/icons/diagonal.png new file mode 100644 index 0000000000..262be1cebc Binary files /dev/null and b/core/assets-raw/icons/diagonal.png differ diff --git a/core/assets-raw/icons/distribution.png b/core/assets-raw/icons/distribution.png new file mode 100644 index 0000000000..3a202b38e8 Binary files /dev/null and b/core/assets-raw/icons/distribution.png differ diff --git a/core/assets-raw/icons/donate.png b/core/assets-raw/icons/donate.png new file mode 100644 index 0000000000..cad39eb1ba Binary files /dev/null and b/core/assets-raw/icons/donate.png differ diff --git a/core/assets-raw/icons/dots.png b/core/assets-raw/icons/dots.png new file mode 100644 index 0000000000..a8d656d6cc Binary files /dev/null and b/core/assets-raw/icons/dots.png differ diff --git a/core/assets-raw/icons/download.png b/core/assets-raw/icons/download.png new file mode 100644 index 0000000000..d6f5700c7f Binary files /dev/null and b/core/assets-raw/icons/download.png differ diff --git a/core/assets-raw/icons/editor.png b/core/assets-raw/icons/editor.png new file mode 100644 index 0000000000..6cb0a64f9f Binary files /dev/null and b/core/assets-raw/icons/editor.png differ diff --git a/core/assets-raw/icons/effect.png b/core/assets-raw/icons/effect.png new file mode 100644 index 0000000000..212034645b Binary files /dev/null and b/core/assets-raw/icons/effect.png differ diff --git a/core/assets-raw/icons/elevation.png b/core/assets-raw/icons/elevation.png new file mode 100644 index 0000000000..cbc30c8cc1 Binary files /dev/null and b/core/assets-raw/icons/elevation.png differ diff --git a/core/assets-raw/icons/eraser.png b/core/assets-raw/icons/eraser.png new file mode 100644 index 0000000000..fc72acc9f2 Binary files /dev/null and b/core/assets-raw/icons/eraser.png differ diff --git a/core/assets-raw/icons/exit.png b/core/assets-raw/icons/exit.png new file mode 100644 index 0000000000..e5cc257e39 Binary files /dev/null and b/core/assets-raw/icons/exit.png differ diff --git a/core/assets-raw/icons/export.png b/core/assets-raw/icons/export.png new file mode 100644 index 0000000000..4607f74b75 Binary files /dev/null and b/core/assets-raw/icons/export.png differ diff --git a/core/assets-raw/icons/eye-off.png b/core/assets-raw/icons/eye-off.png new file mode 100644 index 0000000000..cf304c9f77 Binary files /dev/null and b/core/assets-raw/icons/eye-off.png differ diff --git a/core/assets-raw/icons/eye.png b/core/assets-raw/icons/eye.png new file mode 100644 index 0000000000..1a14383523 Binary files /dev/null and b/core/assets-raw/icons/eye.png differ diff --git a/core/assets-raw/icons/fdroid.png b/core/assets-raw/icons/fdroid.png new file mode 100644 index 0000000000..24c7cb884d Binary files /dev/null and b/core/assets-raw/icons/fdroid.png differ diff --git a/core/assets-raw/icons/file-image.png b/core/assets-raw/icons/file-image.png new file mode 100644 index 0000000000..254ea95f3d Binary files /dev/null and b/core/assets-raw/icons/file-image.png differ diff --git a/core/assets-raw/icons/file-text.png b/core/assets-raw/icons/file-text.png new file mode 100644 index 0000000000..41b4fbc342 Binary files /dev/null and b/core/assets-raw/icons/file-text.png differ diff --git a/core/assets-raw/icons/file.png b/core/assets-raw/icons/file.png new file mode 100644 index 0000000000..0f41e17cbf Binary files /dev/null and b/core/assets-raw/icons/file.png differ diff --git a/core/assets-raw/icons/fill.png b/core/assets-raw/icons/fill.png new file mode 100644 index 0000000000..79bc8b2c39 Binary files /dev/null and b/core/assets-raw/icons/fill.png differ diff --git a/core/assets-raw/icons/flip.png b/core/assets-raw/icons/flip.png new file mode 100644 index 0000000000..d81d741434 Binary files /dev/null and b/core/assets-raw/icons/flip.png differ diff --git a/core/assets-raw/icons/folder-parent.png b/core/assets-raw/icons/folder-parent.png new file mode 100644 index 0000000000..160f2be902 Binary files /dev/null and b/core/assets-raw/icons/folder-parent.png differ diff --git a/core/assets-raw/icons/folder.png b/core/assets-raw/icons/folder.png new file mode 100644 index 0000000000..c55313ef32 Binary files /dev/null and b/core/assets-raw/icons/folder.png differ diff --git a/core/assets-raw/icons/grid.png b/core/assets-raw/icons/grid.png new file mode 100644 index 0000000000..5427571a16 Binary files /dev/null and b/core/assets-raw/icons/grid.png differ diff --git a/core/assets-raw/icons/hammer.png b/core/assets-raw/icons/hammer.png new file mode 100644 index 0000000000..1ee4a5c3bf Binary files /dev/null and b/core/assets-raw/icons/hammer.png differ diff --git a/core/assets-raw/icons/home.png b/core/assets-raw/icons/home.png new file mode 100644 index 0000000000..b97dba2a11 Binary files /dev/null and b/core/assets-raw/icons/home.png differ diff --git a/core/assets-raw/icons/host.png b/core/assets-raw/icons/host.png new file mode 100644 index 0000000000..6253c986bd Binary files /dev/null and b/core/assets-raw/icons/host.png differ diff --git a/core/assets-raw/icons/info.png b/core/assets-raw/icons/info.png new file mode 100644 index 0000000000..7e2bb40037 Binary files /dev/null and b/core/assets-raw/icons/info.png differ diff --git a/core/assets-raw/icons/itchio.png b/core/assets-raw/icons/itchio.png new file mode 100644 index 0000000000..ec92eb3725 Binary files /dev/null and b/core/assets-raw/icons/itchio.png differ diff --git a/core/assets-raw/icons/item.png b/core/assets-raw/icons/item.png new file mode 100644 index 0000000000..9dd6da2249 Binary files /dev/null and b/core/assets-raw/icons/item.png differ diff --git a/core/assets-raw/icons/line.png b/core/assets-raw/icons/line.png new file mode 100644 index 0000000000..5ce2cfdc78 Binary files /dev/null and b/core/assets-raw/icons/line.png differ diff --git a/core/assets-raw/icons/link.png b/core/assets-raw/icons/link.png new file mode 100644 index 0000000000..71446afcc0 Binary files /dev/null and b/core/assets-raw/icons/link.png differ diff --git a/core/assets-raw/icons/liquid-consume.png b/core/assets-raw/icons/liquid-consume.png new file mode 100644 index 0000000000..48c93ed9d2 Binary files /dev/null and b/core/assets-raw/icons/liquid-consume.png differ diff --git a/core/assets-raw/icons/liquid.png b/core/assets-raw/icons/liquid.png new file mode 100644 index 0000000000..41fe7d5f92 Binary files /dev/null and b/core/assets-raw/icons/liquid.png differ diff --git a/core/assets-raw/icons/load-image.png b/core/assets-raw/icons/load-image.png new file mode 100644 index 0000000000..88a162b628 Binary files /dev/null and b/core/assets-raw/icons/load-image.png differ diff --git a/core/assets-raw/icons/load.png b/core/assets-raw/icons/load.png new file mode 100644 index 0000000000..ecbd0c08cf Binary files /dev/null and b/core/assets-raw/icons/load.png differ diff --git a/core/assets-raw/icons/loading.png b/core/assets-raw/icons/loading.png new file mode 100644 index 0000000000..0fd2d5265d Binary files /dev/null and b/core/assets-raw/icons/loading.png differ diff --git a/core/assets-raw/icons/lock-open.png b/core/assets-raw/icons/lock-open.png new file mode 100644 index 0000000000..36b637b0b9 Binary files /dev/null and b/core/assets-raw/icons/lock-open.png differ diff --git a/core/assets-raw/icons/lock.png b/core/assets-raw/icons/lock.png new file mode 100644 index 0000000000..cf438bcd9c Binary files /dev/null and b/core/assets-raw/icons/lock.png differ diff --git a/core/assets-raw/icons/map.png b/core/assets-raw/icons/map.png new file mode 100644 index 0000000000..92ff76d74f Binary files /dev/null and b/core/assets-raw/icons/map.png differ diff --git a/core/assets-raw/icons/menu.png b/core/assets-raw/icons/menu.png new file mode 100644 index 0000000000..0469f99721 Binary files /dev/null and b/core/assets-raw/icons/menu.png differ diff --git a/core/assets-raw/icons/missing.png b/core/assets-raw/icons/missing.png new file mode 100644 index 0000000000..6a9c5d9012 Binary files /dev/null and b/core/assets-raw/icons/missing.png differ diff --git a/core/assets-raw/icons/mode-attack.png b/core/assets-raw/icons/mode-attack.png new file mode 100644 index 0000000000..c6aac86259 Binary files /dev/null and b/core/assets-raw/icons/mode-attack.png differ diff --git a/core/assets-raw/icons/mode-pvp.png b/core/assets-raw/icons/mode-pvp.png new file mode 100644 index 0000000000..3a0c63ceb6 Binary files /dev/null and b/core/assets-raw/icons/mode-pvp.png differ diff --git a/core/assets-raw/icons/mode-survival.png b/core/assets-raw/icons/mode-survival.png new file mode 100644 index 0000000000..c88da7b3b6 Binary files /dev/null and b/core/assets-raw/icons/mode-survival.png differ diff --git a/core/assets-raw/icons/none.png b/core/assets-raw/icons/none.png new file mode 100644 index 0000000000..fcf22bc9da Binary files /dev/null and b/core/assets-raw/icons/none.png differ diff --git a/core/assets-raw/icons/paste.png b/core/assets-raw/icons/paste.png new file mode 100644 index 0000000000..606165ed34 Binary files /dev/null and b/core/assets-raw/icons/paste.png differ diff --git a/core/assets-raw/icons/pause.png b/core/assets-raw/icons/pause.png new file mode 100644 index 0000000000..7471836eaa Binary files /dev/null and b/core/assets-raw/icons/pause.png differ diff --git a/core/assets-raw/icons/pencil.png b/core/assets-raw/icons/pencil.png new file mode 100644 index 0000000000..053a283d08 Binary files /dev/null and b/core/assets-raw/icons/pencil.png differ diff --git a/core/assets-raw/icons/pick.png b/core/assets-raw/icons/pick.png new file mode 100644 index 0000000000..dfd7743030 Binary files /dev/null and b/core/assets-raw/icons/pick.png differ diff --git a/core/assets-raw/icons/play-2.png b/core/assets-raw/icons/play-2.png new file mode 100644 index 0000000000..c001e60b04 Binary files /dev/null and b/core/assets-raw/icons/play-2.png differ diff --git a/core/assets-raw/icons/play.png b/core/assets-raw/icons/play.png new file mode 100644 index 0000000000..8530e6b09d Binary files /dev/null and b/core/assets-raw/icons/play.png differ diff --git a/core/assets-raw/icons/players.png b/core/assets-raw/icons/players.png new file mode 100644 index 0000000000..be4746291f Binary files /dev/null and b/core/assets-raw/icons/players.png differ diff --git a/core/assets-raw/icons/power.png b/core/assets-raw/icons/power.png new file mode 100644 index 0000000000..149248be30 Binary files /dev/null and b/core/assets-raw/icons/power.png differ diff --git a/core/assets-raw/icons/production.png b/core/assets-raw/icons/production.png new file mode 100644 index 0000000000..fe6c3523c0 Binary files /dev/null and b/core/assets-raw/icons/production.png differ diff --git a/core/assets-raw/icons/quit.png b/core/assets-raw/icons/quit.png new file mode 100644 index 0000000000..26a9634945 Binary files /dev/null and b/core/assets-raw/icons/quit.png differ diff --git a/core/assets-raw/icons/redo.png b/core/assets-raw/icons/redo.png new file mode 100644 index 0000000000..4c53eb56ef Binary files /dev/null and b/core/assets-raw/icons/redo.png differ diff --git a/core/assets-raw/icons/refresh.png b/core/assets-raw/icons/refresh.png new file mode 100644 index 0000000000..cd1050f017 Binary files /dev/null and b/core/assets-raw/icons/refresh.png differ diff --git a/core/assets-raw/icons/rename.png b/core/assets-raw/icons/rename.png new file mode 100644 index 0000000000..4a6731a31b Binary files /dev/null and b/core/assets-raw/icons/rename.png differ diff --git a/core/assets-raw/icons/resize.png b/core/assets-raw/icons/resize.png new file mode 100644 index 0000000000..ee53c8470f Binary files /dev/null and b/core/assets-raw/icons/resize.png differ diff --git a/core/assets-raw/icons/rotate-arrow.png b/core/assets-raw/icons/rotate-arrow.png new file mode 100644 index 0000000000..22039f3020 Binary files /dev/null and b/core/assets-raw/icons/rotate-arrow.png differ diff --git a/core/assets-raw/icons/rotate-left.png b/core/assets-raw/icons/rotate-left.png new file mode 100644 index 0000000000..9b05efec5f Binary files /dev/null and b/core/assets-raw/icons/rotate-left.png differ diff --git a/core/assets-raw/icons/rotate-right.png b/core/assets-raw/icons/rotate-right.png new file mode 100644 index 0000000000..2009c9394d Binary files /dev/null and b/core/assets-raw/icons/rotate-right.png differ diff --git a/core/assets-raw/icons/rotate.png b/core/assets-raw/icons/rotate.png new file mode 100644 index 0000000000..3c989a555f Binary files /dev/null and b/core/assets-raw/icons/rotate.png differ diff --git a/core/assets-raw/icons/save-image.png b/core/assets-raw/icons/save-image.png new file mode 100644 index 0000000000..5234c4f2f4 Binary files /dev/null and b/core/assets-raw/icons/save-image.png differ diff --git a/core/assets-raw/icons/save.png b/core/assets-raw/icons/save.png new file mode 100644 index 0000000000..e8ba657ab7 Binary files /dev/null and b/core/assets-raw/icons/save.png differ diff --git a/core/assets-raw/icons/search.png b/core/assets-raw/icons/search.png new file mode 100644 index 0000000000..02736c1a4b Binary files /dev/null and b/core/assets-raw/icons/search.png differ diff --git a/core/assets-raw/icons/settings.png b/core/assets-raw/icons/settings.png new file mode 100644 index 0000000000..2653418e19 Binary files /dev/null and b/core/assets-raw/icons/settings.png differ diff --git a/core/assets-raw/icons/spray.png b/core/assets-raw/icons/spray.png new file mode 100644 index 0000000000..17198d657b Binary files /dev/null and b/core/assets-raw/icons/spray.png differ diff --git a/core/assets-raw/icons/terrain.png b/core/assets-raw/icons/terrain.png new file mode 100644 index 0000000000..a9bd73972e Binary files /dev/null and b/core/assets-raw/icons/terrain.png differ diff --git a/core/assets-raw/icons/tools.png b/core/assets-raw/icons/tools.png new file mode 100644 index 0000000000..2ece1ae8f4 Binary files /dev/null and b/core/assets-raw/icons/tools.png differ diff --git a/core/assets-raw/icons/trash-16.png b/core/assets-raw/icons/trash-16.png new file mode 100644 index 0000000000..a1de49233b Binary files /dev/null and b/core/assets-raw/icons/trash-16.png differ diff --git a/core/assets-raw/icons/trash.png b/core/assets-raw/icons/trash.png new file mode 100644 index 0000000000..e0f419f2f3 Binary files /dev/null and b/core/assets-raw/icons/trash.png differ diff --git a/core/assets-raw/icons/tree.png b/core/assets-raw/icons/tree.png new file mode 100644 index 0000000000..0901a7a721 Binary files /dev/null and b/core/assets-raw/icons/tree.png differ diff --git a/core/assets-raw/icons/turret.png b/core/assets-raw/icons/turret.png new file mode 100644 index 0000000000..32fd01b464 Binary files /dev/null and b/core/assets-raw/icons/turret.png differ diff --git a/core/assets-raw/icons/tutorial.png b/core/assets-raw/icons/tutorial.png new file mode 100644 index 0000000000..40ba90a5e4 Binary files /dev/null and b/core/assets-raw/icons/tutorial.png differ diff --git a/core/assets-raw/icons/undo.png b/core/assets-raw/icons/undo.png new file mode 100644 index 0000000000..cf5dd4c154 Binary files /dev/null and b/core/assets-raw/icons/undo.png differ diff --git a/core/assets-raw/icons/units.png b/core/assets-raw/icons/units.png new file mode 100644 index 0000000000..1ee9cd9f55 Binary files /dev/null and b/core/assets-raw/icons/units.png differ diff --git a/core/assets-raw/icons/upload.png b/core/assets-raw/icons/upload.png new file mode 100644 index 0000000000..b8e4c1d725 Binary files /dev/null and b/core/assets-raw/icons/upload.png differ diff --git a/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team.png b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team.png new file mode 100644 index 0000000000..e141d97940 Binary files /dev/null and b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team.png differ diff --git a/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator.png b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator.png new file mode 100644 index 0000000000..a83ba863a9 Binary files /dev/null and b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator.png differ diff --git a/core/assets-raw/sprites/blocks/production/blast-mixer.png b/core/assets-raw/sprites/blocks/production/blast-mixer.png index 9effafb9c8..52e7a3020e 100644 Binary files a/core/assets-raw/sprites/blocks/production/blast-mixer.png and b/core/assets-raw/sprites/blocks/production/blast-mixer.png differ diff --git a/core/assets-raw/sprites/blocks/props/basalt-boulder1.png b/core/assets-raw/sprites/blocks/props/basalt-boulder1.png new file mode 100644 index 0000000000..f88209e5ee Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/basalt-boulder1.png differ diff --git a/core/assets-raw/sprites/blocks/props/basalt-boulder2.png b/core/assets-raw/sprites/blocks/props/basalt-boulder2.png new file mode 100644 index 0000000000..7c19c928ac Binary files /dev/null and b/core/assets-raw/sprites/blocks/props/basalt-boulder2.png differ diff --git a/core/assets-raw/sprites/effects/launch-arrow.png b/core/assets-raw/sprites/effects/launch-arrow.png new file mode 100644 index 0000000000..5faa4ae6c7 Binary files /dev/null and b/core/assets-raw/sprites/effects/launch-arrow.png differ diff --git a/core/assets-raw/sprites/items/item-blast-compound.png b/core/assets-raw/sprites/items/item-blast-compound.png index cc45da15db..1b103c7c9d 100644 Binary files a/core/assets-raw/sprites/items/item-blast-compound.png and b/core/assets-raw/sprites/items/item-blast-compound.png differ diff --git a/core/assets-raw/sprites/items/item-coal.png b/core/assets-raw/sprites/items/item-coal.png index 13df71b603..4f67e0a80e 100644 Binary files a/core/assets-raw/sprites/items/item-coal.png and b/core/assets-raw/sprites/items/item-coal.png differ diff --git a/core/assets-raw/sprites/items/item-copper.png b/core/assets-raw/sprites/items/item-copper.png index 74f6bd94ed..e35ef78511 100644 Binary files a/core/assets-raw/sprites/items/item-copper.png and b/core/assets-raw/sprites/items/item-copper.png differ diff --git a/core/assets-raw/sprites/items/item-graphite.png b/core/assets-raw/sprites/items/item-graphite.png index 47bbcb1506..3d802be63f 100644 Binary files a/core/assets-raw/sprites/items/item-graphite.png and b/core/assets-raw/sprites/items/item-graphite.png differ diff --git a/core/assets-raw/sprites/items/item-lead.png b/core/assets-raw/sprites/items/item-lead.png index 35595097ca..f42443997b 100644 Binary files a/core/assets-raw/sprites/items/item-lead.png and b/core/assets-raw/sprites/items/item-lead.png differ diff --git a/core/assets-raw/sprites/items/item-metaglass.png b/core/assets-raw/sprites/items/item-metaglass.png index 6b6d36240f..4707552a2c 100644 Binary files a/core/assets-raw/sprites/items/item-metaglass.png and b/core/assets-raw/sprites/items/item-metaglass.png differ diff --git a/core/assets-raw/sprites/items/item-phase-fabric.png b/core/assets-raw/sprites/items/item-phase-fabric.png index 174215dd86..8dd6efca38 100644 Binary files a/core/assets-raw/sprites/items/item-phase-fabric.png and b/core/assets-raw/sprites/items/item-phase-fabric.png differ diff --git a/core/assets-raw/sprites/items/item-plastanium.png b/core/assets-raw/sprites/items/item-plastanium.png index 3d51e7562e..f6ddf438fc 100644 Binary files a/core/assets-raw/sprites/items/item-plastanium.png and b/core/assets-raw/sprites/items/item-plastanium.png differ diff --git a/core/assets-raw/sprites/items/item-pyratite.png b/core/assets-raw/sprites/items/item-pyratite.png index 77012a522d..987fdca8c0 100644 Binary files a/core/assets-raw/sprites/items/item-pyratite.png and b/core/assets-raw/sprites/items/item-pyratite.png differ diff --git a/core/assets-raw/sprites/items/item-sand.png b/core/assets-raw/sprites/items/item-sand.png index ed025f9931..79ddca5d30 100644 Binary files a/core/assets-raw/sprites/items/item-sand.png and b/core/assets-raw/sprites/items/item-sand.png differ diff --git a/core/assets-raw/sprites/items/item-scrap.png b/core/assets-raw/sprites/items/item-scrap.png index 45df8819fc..242b66db66 100644 Binary files a/core/assets-raw/sprites/items/item-scrap.png and b/core/assets-raw/sprites/items/item-scrap.png differ diff --git a/core/assets-raw/sprites/items/item-silicon.png b/core/assets-raw/sprites/items/item-silicon.png index 9014611f2c..1c498c2524 100644 Binary files a/core/assets-raw/sprites/items/item-silicon.png and b/core/assets-raw/sprites/items/item-silicon.png differ diff --git a/core/assets-raw/sprites/items/item-spore-pod.png b/core/assets-raw/sprites/items/item-spore-pod.png index 08fab9d2e8..b627c0da1b 100644 Binary files a/core/assets-raw/sprites/items/item-spore-pod.png and b/core/assets-raw/sprites/items/item-spore-pod.png differ diff --git a/core/assets-raw/sprites/items/item-surge-alloy.png b/core/assets-raw/sprites/items/item-surge-alloy.png index 789012ef13..4cac00c5e4 100644 Binary files a/core/assets-raw/sprites/items/item-surge-alloy.png and b/core/assets-raw/sprites/items/item-surge-alloy.png differ diff --git a/core/assets-raw/sprites/items/item-thorium.png b/core/assets-raw/sprites/items/item-thorium.png index b548c5acf7..6da37cfb1e 100644 Binary files a/core/assets-raw/sprites/items/item-thorium.png and b/core/assets-raw/sprites/items/item-thorium.png differ diff --git a/core/assets-raw/sprites/items/item-titanium.png b/core/assets-raw/sprites/items/item-titanium.png index b1dd24233a..69368ab751 100644 Binary files a/core/assets-raw/sprites/items/item-titanium.png and b/core/assets-raw/sprites/items/item-titanium.png differ diff --git a/core/assets-raw/sprites/items/liquid-cryofluid.png b/core/assets-raw/sprites/items/liquid-cryofluid.png index ada0f5b06d..b438a5ed37 100644 Binary files a/core/assets-raw/sprites/items/liquid-cryofluid.png and b/core/assets-raw/sprites/items/liquid-cryofluid.png differ diff --git a/core/assets-raw/sprites/items/liquid-oil.png b/core/assets-raw/sprites/items/liquid-oil.png index 16ea1670b4..51c7a8db47 100644 Binary files a/core/assets-raw/sprites/items/liquid-oil.png and b/core/assets-raw/sprites/items/liquid-oil.png differ diff --git a/core/assets-raw/sprites/items/liquid-slag.png b/core/assets-raw/sprites/items/liquid-slag.png index c482af93dd..2d51d55a8c 100644 Binary files a/core/assets-raw/sprites/items/liquid-slag.png and b/core/assets-raw/sprites/items/liquid-slag.png differ diff --git a/core/assets-raw/sprites/items/liquid-water.png b/core/assets-raw/sprites/items/liquid-water.png index a822b86412..602eee79a9 100644 Binary files a/core/assets-raw/sprites/items/liquid-water.png and b/core/assets-raw/sprites/items/liquid-water.png differ diff --git a/core/assets-raw/sprites/shapes/circle-small.png b/core/assets-raw/sprites/shapes/circle-small.png new file mode 100644 index 0000000000..f69791c29d Binary files /dev/null and b/core/assets-raw/sprites/shapes/circle-small.png differ diff --git a/core/assets-raw/sprites/units/omura-cannon-heat.png b/core/assets-raw/sprites/units/omura-cannon-heat.png deleted file mode 100644 index 5e2b0dc212..0000000000 Binary files a/core/assets-raw/sprites/units/omura-cannon-heat.png and /dev/null differ diff --git a/core/assets-raw/sprites/units/weapons/large-laser-mount.png b/core/assets-raw/sprites/units/weapons/large-laser-mount.png index 9cad74c69b..5e04ace067 100644 Binary files a/core/assets-raw/sprites/units/weapons/large-laser-mount.png and b/core/assets-raw/sprites/units/weapons/large-laser-mount.png differ diff --git a/core/assets/baseparts/1605279968000.msch b/core/assets/baseparts/1605279968000.msch new file mode 100644 index 0000000000..7eb0cd3b7e Binary files /dev/null and b/core/assets/baseparts/1605279968000.msch differ diff --git a/core/assets/baseparts/1605280014089.msch b/core/assets/baseparts/1605280014089.msch new file mode 100644 index 0000000000..127bf95450 --- /dev/null +++ b/core/assets/baseparts/1605280014089.msch @@ -0,0 +1,2 @@ +mschx-ъ! EouٝB~/#EptN_m W)0םr[,ppZl!ck/zr4bjI2%_%JSmW! +;pGkVNf Jj8PKG8&~m3bfqk'ab/([=[) \ No newline at end of file diff --git a/core/assets/baseparts/1605280470180.msch b/core/assets/baseparts/1605280470180.msch new file mode 100644 index 0000000000..0936a4a315 --- /dev/null +++ b/core/assets/baseparts/1605280470180.msch @@ -0,0 +1 @@ +mschxMn E7^1"Ji?KCd$⁗Sp(U xoUrJ>hDßaј* W j>N禢Yvxe] $997xIIw^ίjaIylTJ5RPDu*hQA4P3n,EF тWP.MSГ l$>g-JFqGh$t}Ɛ1Z+XF}r6f1K,%T \ No newline at end of file diff --git a/core/assets/baseparts/1605280548230.msch b/core/assets/baseparts/1605280548230.msch new file mode 100644 index 0000000000..a21848a1f2 --- /dev/null +++ b/core/assets/baseparts/1605280548230.msch @@ -0,0 +1,2 @@ +mschx-[n E;n8+B(B`i'q3s!pUj!ta)z0S^vh ƨ?z:18\%#yt[F\V /'`БO` +|CphxQNaێ6+}VpJ]>1$TBӕ{l/a3?k4A \ No newline at end of file diff --git a/core/assets/baseparts/1605281022715.msch b/core/assets/baseparts/1605281022715.msch new file mode 100644 index 0000000000..5ea7a4b570 Binary files /dev/null and b/core/assets/baseparts/1605281022715.msch differ diff --git a/core/assets/baseparts/1605281081581.msch b/core/assets/baseparts/1605281081581.msch new file mode 100644 index 0000000000..ad93878cf2 Binary files /dev/null and b/core/assets/baseparts/1605281081581.msch differ diff --git a/core/assets/baseparts/1605281121912.msch b/core/assets/baseparts/1605281121912.msch new file mode 100644 index 0000000000..4c3235757c --- /dev/null +++ b/core/assets/baseparts/1605281121912.msch @@ -0,0 +1,2 @@ +mschxM gj'[bL*4c|{gCB`vg? _vq +a۔ky8 [Z|WÂR8})!G5}Bc4>O;Ō7ͱ(_NW4\mJF "btk! ho:v]5BNɾC=Nw6;,tJ ,; \ No newline at end of file diff --git a/core/assets/baseparts/1605281215706.msch b/core/assets/baseparts/1605281215706.msch new file mode 100644 index 0000000000..27c39cfdf1 Binary files /dev/null and b/core/assets/baseparts/1605281215706.msch differ diff --git a/core/assets/baseparts/1605281306347.msch b/core/assets/baseparts/1605281306347.msch new file mode 100644 index 0000000000..1ef95d9ea5 Binary files /dev/null and b/core/assets/baseparts/1605281306347.msch differ diff --git a/core/assets/baseparts/1605283900306.msch b/core/assets/baseparts/1605283900306.msch new file mode 100644 index 0000000000..687c52017e Binary files /dev/null and b/core/assets/baseparts/1605283900306.msch differ diff --git a/core/assets/baseparts/1605284013998.msch b/core/assets/baseparts/1605284013998.msch new file mode 100644 index 0000000000..31c282985c Binary files /dev/null and b/core/assets/baseparts/1605284013998.msch differ diff --git a/core/assets/baseparts/1605284595866.msch b/core/assets/baseparts/1605284595866.msch new file mode 100644 index 0000000000..704fe6ed9c Binary files /dev/null and b/core/assets/baseparts/1605284595866.msch differ diff --git a/core/assets/baseparts/1605284660452.msch b/core/assets/baseparts/1605284660452.msch new file mode 100644 index 0000000000..be36f1bc5b Binary files /dev/null and b/core/assets/baseparts/1605284660452.msch differ diff --git a/core/assets/baseparts/1605285080497.msch b/core/assets/baseparts/1605285080497.msch new file mode 100644 index 0000000000..da0da93d56 Binary files /dev/null and b/core/assets/baseparts/1605285080497.msch differ diff --git a/core/assets/baseparts/752927009641857205.msch b/core/assets/baseparts/752927009641857205.msch deleted file mode 100644 index 7943fb1481..0000000000 Binary files a/core/assets/baseparts/752927009641857205.msch and /dev/null differ diff --git a/core/assets/baseparts/752944648628076745.msch b/core/assets/baseparts/752944648628076745.msch deleted file mode 100644 index 090ffe0155..0000000000 --- a/core/assets/baseparts/752944648628076745.msch +++ /dev/null @@ -1,2 +0,0 @@ -mschxMan mMtC`{]:& =zh`WiSOa!w)(A/zcyw6͢`^)HE']j!L7{4Q;6xE?ܡ>L{y_̇Ȗ$ʎj7Cn6ѳ!Ot-G+ĉ o.?d ̏kr/8N4@Ϩd41SqÂc% -ɏM \ No newline at end of file diff --git a/core/assets/baseparts/752955880965799966.msch b/core/assets/baseparts/752955880965799966.msch index 4cda9322ea..d96fc42c38 100644 Binary files a/core/assets/baseparts/752955880965799966.msch and b/core/assets/baseparts/752955880965799966.msch differ diff --git a/core/assets/baseparts/752965444419453010.msch b/core/assets/baseparts/752965444419453010.msch deleted file mode 100644 index 008b1f015b..0000000000 Binary files a/core/assets/baseparts/752965444419453010.msch and /dev/null differ diff --git a/core/assets/baseparts/753005578997071974.msch b/core/assets/baseparts/753005578997071974.msch index 747c61f453..c7dd6dceaa 100644 Binary files a/core/assets/baseparts/753005578997071974.msch and b/core/assets/baseparts/753005578997071974.msch differ diff --git a/core/assets/baseparts/753035709576642631.msch b/core/assets/baseparts/753035709576642631.msch deleted file mode 100644 index c1955436b5..0000000000 Binary files a/core/assets/baseparts/753035709576642631.msch and /dev/null differ diff --git a/core/assets/baseparts/753232120369119314.msch b/core/assets/baseparts/753232120369119314.msch deleted file mode 100644 index f68d33fae5..0000000000 Binary files a/core/assets/baseparts/753232120369119314.msch and /dev/null differ diff --git a/core/assets/baseparts/753653426667257906.msch b/core/assets/baseparts/753653426667257906.msch deleted file mode 100644 index a5b60b4c99..0000000000 Binary files a/core/assets/baseparts/753653426667257906.msch and /dev/null differ diff --git a/core/assets/baseparts/754024880747315332.msch b/core/assets/baseparts/754024880747315332.msch new file mode 100644 index 0000000000..4bb358263a --- /dev/null +++ b/core/assets/baseparts/754024880747315332.msch @@ -0,0 +1 @@ +mschxMkN0 O6La)젴MJX;H|}l'8@pev>ci }&ܭq[@cL38?ok13J}s3ONɅ8ywKuMpfX{pS?-93?L[_7?-G*v+%o^5`8ԢtE;jQh:R$nQVEh!raBņw٠y-F:U:cQJQ+,<^p@qdb4V,挩{ʪʪʲʴPhFM#%ʎ}+7)>8 WI \ No newline at end of file diff --git a/core/assets/baseparts/755588030362026104.msch b/core/assets/baseparts/755588030362026104.msch new file mode 100644 index 0000000000..3603ec105e --- /dev/null +++ b/core/assets/baseparts/755588030362026104.msch @@ -0,0 +1 @@ +mschx%]! OgC$D`m)aMdӿBr-zPqo{:|+O}g7.tW0ҹ<0a45@kLc7#Q 2 VJe_FJز0Kg`(L#-TѴBz;%IiV \ No newline at end of file diff --git a/core/assets/baseparts/759634196280508416.msch b/core/assets/baseparts/759634196280508416.msch new file mode 100644 index 0000000000..cb0ff78983 --- /dev/null +++ b/core/assets/baseparts/759634196280508416.msch @@ -0,0 +1 @@ +mschx=͎0t:WX DϝwڼR |DOOw{;6))]~Fz9snn.>gX%̋2O/k{ңzMW?e+O?BEH]B, zmgd;"iS$T@IYxlI|yY 4PB6zfWWԤdHY*)R 'ʎÓlR` z3u: qo MIdI"5A/j*YB X(Z蠗Lr0`ifZ ۘxmވ? \ No newline at end of file diff --git a/core/assets/baseparts/772638841168461854.msch b/core/assets/baseparts/772638841168461854.msch new file mode 100644 index 0000000000..b6af5101d8 Binary files /dev/null and b/core/assets/baseparts/772638841168461854.msch differ diff --git a/core/assets/baseparts/772642175838191616.msch b/core/assets/baseparts/772642175838191616.msch new file mode 100644 index 0000000000..a9d0084d20 Binary files /dev/null and b/core/assets/baseparts/772642175838191616.msch differ diff --git a/core/assets/baseparts/772642264635670528.msch b/core/assets/baseparts/772642264635670528.msch new file mode 100644 index 0000000000..a49b98f067 Binary files /dev/null and b/core/assets/baseparts/772642264635670528.msch differ diff --git a/core/assets/baseparts/772642357136719872.msch b/core/assets/baseparts/772642357136719872.msch new file mode 100644 index 0000000000..4b2bc355e2 Binary files /dev/null and b/core/assets/baseparts/772642357136719872.msch differ diff --git a/core/assets/baseparts/772642606227390504.msch b/core/assets/baseparts/772642606227390504.msch new file mode 100644 index 0000000000..c54d37f5ba Binary files /dev/null and b/core/assets/baseparts/772642606227390504.msch differ diff --git a/core/assets/baseparts/772642700713000960.msch b/core/assets/baseparts/772642700713000960.msch new file mode 100644 index 0000000000..2fe878bddf Binary files /dev/null and b/core/assets/baseparts/772642700713000960.msch differ diff --git a/core/assets/baseparts/772754117604409344.msch b/core/assets/baseparts/772754117604409344.msch new file mode 100644 index 0000000000..6b8699479c Binary files /dev/null and b/core/assets/baseparts/772754117604409344.msch differ diff --git a/core/assets/baseparts/772836684403834920.msch b/core/assets/baseparts/772836684403834920.msch new file mode 100644 index 0000000000..5d9f41d58f Binary files /dev/null and b/core/assets/baseparts/772836684403834920.msch differ diff --git a/core/assets/baseparts/772859800051908639.msch b/core/assets/baseparts/772859800051908639.msch new file mode 100644 index 0000000000..175d05b796 Binary files /dev/null and b/core/assets/baseparts/772859800051908639.msch differ diff --git a/core/assets/baseparts/772860007561166868.msch b/core/assets/baseparts/772860007561166868.msch new file mode 100644 index 0000000000..27267597ad --- /dev/null +++ b/core/assets/baseparts/772860007561166868.msch @@ -0,0 +1,2 @@ +mschxMPn |IKđJ!VH,ۛww8@Yřxnw:Lg5EE*#{ fN.gm)MTάgI]_Yӎ]n}rzY0^Y9jy]4_I-M5/K*Y9mqu}z5{C T !P (ЁdAYV +"A #P /Pm۾ mCɬ`v#I̍\U&}TGyTFz]n&5Z{%}zE˕ \C@>gA_%(3T LlO!7=!9dmڐ!iߌTys \ No newline at end of file diff --git a/core/assets/baseparts/772860344174772254.msch b/core/assets/baseparts/772860344174772254.msch new file mode 100644 index 0000000000..781cd94d46 Binary files /dev/null and b/core/assets/baseparts/772860344174772254.msch differ diff --git a/core/assets/baseparts/772861253630165084.msch b/core/assets/baseparts/772861253630165084.msch new file mode 100644 index 0000000000..e73ded4e03 --- /dev/null +++ b/core/assets/baseparts/772861253630165084.msch @@ -0,0 +1,3 @@ +mschx%kn IV9 ;xS!a@M%F>fzƩp~:}bU$ %M; Ce~rT:^/6*#yA97ϧ#)%++5mꘌ5;f18ZfS4b0f52wOV$N+1(u +U +mIRuâ80GFĩ2шU;F~'b3xb`_ ݾ+U \ No newline at end of file diff --git a/core/assets/baseparts/772861891516301334.msch b/core/assets/baseparts/772861891516301334.msch new file mode 100644 index 0000000000..6e69e6b51a Binary files /dev/null and b/core/assets/baseparts/772861891516301334.msch differ diff --git a/core/assets/baseparts/772862221297909760.msch b/core/assets/baseparts/772862221297909760.msch new file mode 100644 index 0000000000..83f138819d Binary files /dev/null and b/core/assets/baseparts/772862221297909760.msch differ diff --git a/core/assets/baseparts/772880624582787112.msch b/core/assets/baseparts/772880624582787112.msch new file mode 100644 index 0000000000..0c260e50d1 Binary files /dev/null and b/core/assets/baseparts/772880624582787112.msch differ diff --git a/core/assets/baseparts/772880838392152095.msch b/core/assets/baseparts/772880838392152095.msch new file mode 100644 index 0000000000..5923b9dfe9 Binary files /dev/null and b/core/assets/baseparts/772880838392152095.msch differ diff --git a/core/assets/baseparts/773972917637611530.msch b/core/assets/baseparts/773972917637611530.msch new file mode 100644 index 0000000000..9c9c4778d6 Binary files /dev/null and b/core/assets/baseparts/773972917637611530.msch differ diff --git a/core/assets/baseparts/773972978551226368.msch b/core/assets/baseparts/773972978551226368.msch new file mode 100644 index 0000000000..7b74ef5219 --- /dev/null +++ b/core/assets/baseparts/773972978551226368.msch @@ -0,0 +1 @@ +mschx%] ֳm|3UievJ& 1zezV}9N6 /Ӷ״Gvm}N?Qv1xY(%""LBfҳ' }"! vCd*bLAA*M( BIղ|z!''xY(L޵!&`8  \ No newline at end of file diff --git a/core/assets/baseparts/773973064429993996.msch b/core/assets/baseparts/773973064429993996.msch new file mode 100644 index 0000000000..c383e58c3f --- /dev/null +++ b/core/assets/baseparts/773973064429993996.msch @@ -0,0 +1 @@ +mschxEmj0 tڴ FΐinIcX,xAaz-oa/~7m)5 E=SFnK˘#ǙïÖָډ\\@ [~quO- 17}CB7!F}L3Z.>=Bks2\qg`W- +P Ih3e.e-k+0Pwp(x& \ No newline at end of file diff --git a/core/assets/baseparts/773974064850272309.msch b/core/assets/baseparts/773974064850272309.msch new file mode 100644 index 0000000000..b9109ca782 Binary files /dev/null and b/core/assets/baseparts/773974064850272309.msch differ diff --git a/core/assets/baseparts/773974140545531924.msch b/core/assets/baseparts/773974140545531924.msch new file mode 100644 index 0000000000..5a1570cd07 Binary files /dev/null and b/core/assets/baseparts/773974140545531924.msch differ diff --git a/core/assets/baseparts/773976628883619840.msch b/core/assets/baseparts/773976628883619840.msch new file mode 100644 index 0000000000..3536999ddf Binary files /dev/null and b/core/assets/baseparts/773976628883619840.msch differ diff --git a/core/assets/baseparts/774001709088505867.msch b/core/assets/baseparts/774001709088505867.msch new file mode 100644 index 0000000000..432907e211 Binary files /dev/null and b/core/assets/baseparts/774001709088505867.msch differ diff --git a/core/assets/baseparts/774002215428816936.msch b/core/assets/baseparts/774002215428816936.msch new file mode 100644 index 0000000000..8c301a217d Binary files /dev/null and b/core/assets/baseparts/774002215428816936.msch differ diff --git a/core/assets/baseparts/774013552553754635.msch b/core/assets/baseparts/774013552553754635.msch new file mode 100644 index 0000000000..cb900f4073 Binary files /dev/null and b/core/assets/baseparts/774013552553754635.msch differ diff --git a/core/assets/bloomshaders/alpha_bloom.frag b/core/assets/bloomshaders/alpha_bloom.frag index a48233ded0..b3475ff259 100644 --- a/core/assets/bloomshaders/alpha_bloom.frag +++ b/core/assets/bloomshaders/alpha_bloom.frag @@ -10,4 +10,4 @@ void main(){ vec4 bloom = texture2D(u_texture1, v_texCoords) * BloomIntensity; original = original * (vec4(1.0) - bloom); gl_FragColor = original + bloom; -} \ No newline at end of file +} diff --git a/core/assets/bloomshaders/alpha_threshold.frag b/core/assets/bloomshaders/alpha_threshold.frag index b2ffe580a6..fc910bed6c 100644 --- a/core/assets/bloomshaders/alpha_threshold.frag +++ b/core/assets/bloomshaders/alpha_threshold.frag @@ -11,4 +11,4 @@ void main(){ gl_FragColor = vec4(0.0); } //gl_FragColor = (texture2D(u_texture0, v_texCoords) - vec4(threshold.r)) * threshold.g; -} \ No newline at end of file +} diff --git a/core/assets/bloomshaders/bloom.frag b/core/assets/bloomshaders/bloom.frag index 65abbe56d1..e6bac1f0bf 100644 --- a/core/assets/bloomshaders/bloom.frag +++ b/core/assets/bloomshaders/bloom.frag @@ -10,4 +10,4 @@ void main(){ vec4 bloom = texture2D(u_texture1, v_texCoords) * BloomIntensity; original = original * (vec4(1.0) - bloom); gl_FragColor = original + bloom; -} \ No newline at end of file +} diff --git a/core/assets/bloomshaders/blurspace.vert b/core/assets/bloomshaders/blurspace.vert index bc16d0b2a7..e766d21cee 100644 --- a/core/assets/bloomshaders/blurspace.vert +++ b/core/assets/bloomshaders/blurspace.vert @@ -23,4 +23,4 @@ void main(){ v_texCoords4 = a_texCoord0 + f; gl_Position = a_position; -} \ No newline at end of file +} diff --git a/core/assets/bloomshaders/maskedtreshold.frag b/core/assets/bloomshaders/maskedtreshold.frag index ec09b4435a..ec2634ef3f 100644 --- a/core/assets/bloomshaders/maskedtreshold.frag +++ b/core/assets/bloomshaders/maskedtreshold.frag @@ -6,4 +6,4 @@ void main(){ vec4 tex = texture2D(u_texture0, v_texCoords); vec3 colors = (tex.rgb - threshold.r) * threshold.g * tex.a; gl_FragColor = vec4(colors, tex.a); -} \ No newline at end of file +} diff --git a/core/assets/bloomshaders/screenspace.vert b/core/assets/bloomshaders/screenspace.vert index 1c57ff8852..af368efbb4 100644 --- a/core/assets/bloomshaders/screenspace.vert +++ b/core/assets/bloomshaders/screenspace.vert @@ -5,4 +5,4 @@ varying vec2 v_texCoords; void main(){ v_texCoords = a_texCoord0; gl_Position = a_position; -} \ No newline at end of file +} diff --git a/core/assets/bloomshaders/threshold.frag b/core/assets/bloomshaders/threshold.frag index 932bf77c5d..705d6987d5 100644 --- a/core/assets/bloomshaders/threshold.frag +++ b/core/assets/bloomshaders/threshold.frag @@ -4,4 +4,4 @@ varying mediump vec2 v_texCoords; void main(){ gl_FragColor.rgb = (texture2D(u_texture0, v_texCoords).rgb - vec3(threshold.x)) * threshold.y; -} \ No newline at end of file +} diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index f7a3a6dcfe..82654724eb 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -10,18 +10,21 @@ link.dev-builds.description = Unstable development builds 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.f-droid.description = F-Droid listing link.wiki.description = Official Mindustry wiki link.suggestions.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. gameover = Game Over +gameover.disconnect = Disconnect gameover.pvp = The[accent] {0}[] team is victorious! +gameover.waiting = [accent]Waiting for next map... highscore = [accent]New highscore! copied = Copied. -indev.popup = [accent]v6[] is currently in [accent]beta[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- SFX and music are unfinished/missing\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. +indev.popup = [accent]v6[] is currently in [accent]beta[].\n[lightgray]This means:[]\n[scarlet]- The campaign is unfinished[]\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. indev.notready = This part of the game isn't ready yet +indev.campaign = [accent]You've reached the end of the campaign![]\n\nThis is as far as the content goes. Interplanetary travel will be added in future updates. load.sound = Sounds load.map = Maps @@ -57,6 +60,7 @@ schematic.rename = Rename Schematic schematic.info = {0}x{1}, {2} blocks schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. +stats = Stats stat.wave = Waves Defeated:[accent] {0} stat.enemiesDestroyed = Enemies Destroyed:[accent] {0} stat.built = Buildings Built:[accent] {0} @@ -189,6 +193,10 @@ servers.local = Local Servers servers.remote = Remote Servers servers.global = Community Servers +servers.showhidden = Show Hidden Servers +server.shown = Shown +server.hidden = Hidden + trace = Trace Player trace.playername = Player name: [accent]{0} trace.ip = IP: [accent]{0} @@ -267,6 +275,9 @@ cancel = Cancel openlink = Open Link copylink = Copy Link back = Back +crash.export = Export Crash Logs +crash.none = No crash logs found. +crash.exported = Crash logs exported. data.export = Export Data data.import = Import Data data.openfolder = Open Data Folder @@ -283,6 +294,7 @@ cancelbuilding = [accent][[{0}][] to clear plan selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building +showui = UI hidden.\nPress [accent][[{0}][] to show UI. wave = [accent]Wave {0} wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Wave in {0} @@ -290,6 +302,8 @@ wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Waiting... waiting.players = Waiting for players... wave.enemies = [lightgray]{0} Enemies Remaining +wave.enemycores = [accent]{0}[lightgray] Enemy Cores +wave.enemycore = [accent]{0}[lightgray] Enemy Core wave.enemy = [lightgray]{0} Enemy Remaining wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. @@ -421,6 +435,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Ore Median @@ -445,6 +460,7 @@ filter.option.amount = Amount filter.option.block = Block filter.option.floor = Floor filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -461,7 +477,9 @@ load = Load save = Save fps = FPS: {0} ping = Ping: {0}ms -language.restart = Please restart your game for the language settings to take effect. +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb +language.restart = Restart your game for the language settings to take effect. settings = Settings tutorial = Tutorial tutorial.retake = Re-Take Tutorial @@ -475,27 +493,23 @@ complete = [lightgray]Complete: requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} +requirement.produce = Produce {0} requirement.capture = Capture {0} -bestwave = [lightgray]Best Wave: {0} launch.text = Launch research.multiplayer = Only the host can research items. +map.multiplayer = Only the host can view sectors. uncover = Uncover configure = Configure Loadout -#TODO + loadout = Loadout resources = Resources bannedblocks = Banned Blocks addall = Add All +launch.from = Launching From: [accent]{0} launch.destination = Destination: {0} configure.invalid = Amount must be a number between 0 and {0}. -zone.unlocked = [lightgray]{0} unlocked. -zone.requirement.complete = Requirement for {0} completed:[lightgray]\n{1} -zone.resources = [lightgray]Resources Detected: -zone.objective = [lightgray]Objective: [accent]{0} -zone.objective.survival = Survive -zone.objective.attack = Destroy Enemy Core add = Add... -boss.health = Boss Health +boss.health = Guardian Health connectfail = [scarlet]Connection error:\n\n[accent]{0} error.unreachable = Server unreachable.\nIs the address spelled correctly? @@ -517,18 +531,41 @@ weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: sectors.production = Production: +sectors.export = Export: +sectors.time = Time: +sectors.threat = Threat: +sectors.wave = Wave: sectors.stored = Stored: sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) sectors.rename = Rename Sector +sectors.enemybase = [scarlet]Enemy Base +sectors.vulnerable = [scarlet]Vulnerable +sectors.underattack = [scarlet]Under attack! [accent]{0}% damaged +sectors.survives = [accent]Survives {0} waves +sectors.go = Go +sector.curcapture = Sector Captured +sector.curlost = Sector Lost +sector.missingresources = [scarlet]Insufficient Core Resources +sector.attacked = Sector [accent]{0}[white] under attack! +sector.lost = Sector [accent]{0}[white] lost! +#note: the missing space in the line below is intentional +sector.captured = Sector [accent]{0}[white]captured! + +threat.low = Low +threat.medium = Medium +threat.high = High +threat.extreme = Extreme +threat.eradication = Eradication + +planets = Planets planet.serpulo.name = Serpulo -#TODO better name planet.sun.name = Sun -#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway +sector.impact0078.name = Impact 0078 sector.groundZero.name = Ground Zero sector.craters.name = The Craters sector.frozenForest.name = Frozen Forest @@ -540,10 +577,10 @@ sector.overgrowth.name = Overgrowth sector.tarFields.name = Tar Fields sector.saltFlats.name = Salt Flats sector.fungalPass.name = Fungal Pass - -#unused -#sector.impact0078.name = Impact 0078 -#sector.crags.name = Crags +sector.biomassFacility.name = Biomass Synthesis Facility +sector.windsweptIslands.name = Windswept Islands +sector.extractionOutpost.name = Extraction Outpost +sector.planetaryTerminal.name = Planetary Launch Terminal sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. @@ -551,7 +588,7 @@ sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats sector.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. sector.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. sector.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. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. +sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Mace units. Destroy it. sector.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. sector.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. sector.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. @@ -571,10 +608,13 @@ settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done 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.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Paused > clear = Clear banned = [scarlet]Banned -unplaceable.sectorcaptured = [scarlet]Requires captured sector yes = Yes no = No info.title = Info @@ -584,6 +624,7 @@ unit.nobuild = [scarlet]Unit can't build lastaccessed = [lightgray]Last Accessed: {0} block.unknown = [lightgray]??? +stat.description = Purpose stat.input = Input stat.output = Output stat.booster = Booster @@ -611,6 +652,8 @@ stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time +stat.weapons = Weapons +stat.bullet = Bullet stat.speedincrease = Speed Increase stat.range = Range stat.drilltier = Drillables @@ -633,7 +676,7 @@ stat.lightningchance = Lightning Chance stat.lightningdamage = Lightning Damage stat.flammability = Flammability stat.radioactivity = Radioactivity -stat.heatcapacity = HeatCapacity +stat.heatcapacity = Heat Capacity stat.viscosity = Viscosity stat.temperature = Temperature stat.speed = Speed @@ -643,12 +686,15 @@ stat.minetier = Mine Tier stat.payloadcapacity = Payload Capacity stat.commandlimit = Command Limit stat.abilities = Abilities +stat.canboost = Can Boost +stat.flying = Flying ability.forcefield = Force Field ability.repairfield = Repair Field ability.statusfield = Status Field ability.unitspawn = {0} Factory ability.shieldregenfield = Shield Regen Field +ability.movelightning = Movement Lightning bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -677,12 +723,14 @@ units.processorcontrol = [lightgray]Processor Controlled bullet.damage = [stat]{0}[lightgray] damage bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary +bullet.sapping = [stat]sapping bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback bullet.pierce = [stat]{0}[lightgray]x pierce bullet.infinitepierce = [stat]pierce +bullet.healpercent = [stat]{0}[lightgray]% healing bullet.freezing = [stat]freezing bullet.tarred = [stat]tarred bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier @@ -707,12 +755,13 @@ unit.items = items unit.thousands = k unit.millions = mil unit.billions = b +category.purpose = Purpose category.general = General category.power = Power category.liquids = Liquids category.items = Items category.crafting = Input/Output -category.shooting = Shooting +category.function = Function category.optional = Optional Enhancements setting.landscape.name = Lock Landscape setting.shadows.name = Shadows @@ -720,8 +769,9 @@ setting.blockreplace.name = Automatic Block Suggestions setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate +setting.backgroundpause.name = Pause In Background setting.buildautopause.name = Auto-Pause Building -setting.animatedwater.name = Animated Fluids +setting.animatedwater.name = Animated Surfaces setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] setting.playerindicators.name = Player Indicators @@ -748,7 +798,6 @@ setting.conveyorpathfinding.name = Conveyor Placement Pathfinding 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] (restart may be required) @@ -757,7 +806,7 @@ setting.smoothcamera.name = Smooth Camera setting.vsync.name = VSync setting.pixelate.name = Pixelate setting.minimap.name = Show Minimap -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Display Core Items setting.position.name = Show Player Position setting.musicvol.name = Music Volume setting.atmosphere.name = Show Planet Atmosphere @@ -837,6 +886,8 @@ keybind.menu.name = Menu keybind.pause.name = Pause keybind.pause_building.name = Pause/Resume Building keybind.minimap.name = Minimap +keybind.planet_map.name = Planet Map +keybind.research.name = Research keybind.chat.name = Chat keybind.player_list.name = Player List keybind.console.name = Console @@ -900,6 +951,7 @@ content.item.name = Items content.liquid.name = Liquids content.unit.name = Units content.block.name = Blocks +content.sector.name = Sectors item.copper.name = Copper item.lead.name = Lead @@ -960,6 +1012,7 @@ block.resupply-point.name = Resupply Point block.parallax.name = Parallax block.cliff.name = Cliff block.sand-boulder.name = Sand Boulder +block.basalt-boulder.name = Basalt Boulder block.grass.name = Grass block.slag.name = Slag block.space.name = Space @@ -1057,7 +1110,6 @@ block.conveyor.name = Conveyor block.titanium-conveyor.name = Titanium Conveyor block.plastanium-conveyor.name = Plastanium 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 @@ -1065,7 +1117,6 @@ 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.underflow-gate.name = Underflow Gate block.silicon-smelter.name = Silicon Smelter @@ -1161,6 +1212,11 @@ block.payload-router.name = Payload Router block.disassembler.name = Disassembler block.silicon-crucible.name = Silicon Crucible block.overdrive-dome.name = Overdrive Dome +#experimental, may be removed +block.block-forge.name = Block Forge +block.block-loader.name = Block Loader +block.block-unloader.name = Block Unloader +block.interplanetary-accelerator.name = Interplanetary Accelerator block.switch.name = Switch block.micro-processor.name = Micro Processor @@ -1179,158 +1235,243 @@ team.derelict.name = derelict team.green.name = green team.purple.name = purple -tutorial.next = [lightgray] -tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] 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 = 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.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\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.[] -tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\nUse the scrollwheel to rotate blocks before placing them.\n[accent]Place 2 conveyors with the line tool, then deliver an item into 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]Place 2 conveyors with the line tool, then deliver an item into the core. -tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base. -tutorial.drillturret = Duo turrets require[accent] copper ammo[] to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1 -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 = 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 obtained resources can then be used to research new technology.\n\n[accent]Press the launch button. +hint.skip = Skip +hint.desktopMove = Use [accent][[WASD][] to move. +hint.zoom = [accent]Scroll[] to zoom in or out. +hint.mine = Move near the \uf8c4 copper ore and [accent]tap[] it to mine manually. +hint.desktopShoot = [accent][[Left-click][] to shoot. +hint.depositItems = To transfer items, drag from your ship to the core. +hint.respawn = To respawn as a ship, press [accent][[V][]. +hint.respawn.mobile = You have switched control a unit/structure. To respawn as a ship, [accent]tap the avatar in the top left.[] +hint.desktopPause = Press [accent][[Space][] to pause and unpause the game. +hint.placeDrill = Select the \ue85e [accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and click on a copper patch to place it. +hint.placeDrill.mobile = Select the \ue85e[accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and tap on a copper patch to place it.\n\nPress the \ue800 [accent]checkmark[] at the bottom right to confirm. +hint.placeConveyor = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate. +hint.placeConveyor.mobile = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nHold down your finger for a second and drag to place multiple conveyors. +hint.placeTurret = Place \uf861 [accent]Turrets[] to defend your base from enemies.\n\nTurrets require ammo - in this case, \uf838copper.\nUse conveyors and drills to supply them. +hint.breaking = [accent]Right-click[] and drag to break blocks. +hint.breaking.mobile = Activate the \ue817 [accent]hammer[] in the bottom right and tap to break blocks.\n\nHold down your finger for a second and drag to break in a selection. +hint.research = Use the \ue875 [accent]Research[] button to research new technology. +hint.research.mobile = Use the \ue875 [accent]Research[] button in the \ue88c [accent]Menu[] to research new technology. +hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to control friendly units or turrets. +hint.unitControl.mobile = [accent][Double-tap[] to control friendly units or turrets. +hint.launch = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the bottom right. +hint.launch.mobile = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the \ue88c [accent]Menu[]. +hint.schematicSelect = Hold [accent][[F][] and drag to select blocks to copy and paste.\n\n[accent][[Middle Click][] to copy a single block type. +hint.conveyorPathfind = Hold [accent][[L-Ctrl][] while dragging conveyors to automatically generate a path. +hint.conveyorPathfind.mobile = Enable \ue844 [accent]diagonal mode[] and drag conveyors to automatically generate a path. +hint.boost = Hold [accent][[L-Shift][] to fly over obstacles with your current unit.\n\nOnly a few ground units have boosters. +hint.command = Press [accent][[G][] to command nearby units into formation. +hint.command.mobile = [accent][[Double-tap][] your unit to command nearby units into formation. +hint.payloadPickup = Press [accent][[[] to pick up small blocks or units. +hint.payloadPickup.mobile = [accent]Tap and hold[] a small block or unit to pick it up. +hint.payloadDrop = Press [accent]][] to drop a payload. +hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a payload there. +hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. +hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uf87f [accent]Power Nodes[]. -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 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. -item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel. -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. -item.silicon.description = An extremely useful semiconductor. Applications in solar panels, complex electronics and homing turret ammunition. -item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition. -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. -item.surge-alloy.description = An advanced alloy with unique electrical properties. -item.spore-pod.description = A pod of synthetic spores, synthesized from atmospheric concentrations for industrial purposes. Used for conversion into oil, explosives and fuel. -item.blast-compound.description = An unstable compound used in bombs and explosives. Synthesized from spore pods and other volatile substances. Use as fuel is not advised. -item.pyratite.description = An extremely flammable substance used in incendiary weapons. -liquid.water.description = The most useful liquid. Commonly used for cooling machines and waste processing. -liquid.slag.description = Various different types of molten metal mixed together. Can be separated into its constituent minerals, or sprayed at enemy units as a weapon. -liquid.oil.description = A liquid used in advanced material production. Can be converted into coal as fuel, or sprayed and set on fire as a weapon. -liquid.cryofluid.description = An inert, non-corrosive liquid created from water and titanium. Has extremely high heat capacity. Extensively used as coolant. +item.copper.description = Used in all types of construction and ammunition. +item.copper.details = Copper. Abnormally abundant metal on Serpulo. Structurally weak unless reinforced. +item.lead.description = Used in liquid transportation and electrical structures. +item.lead.details = Dense. Inert. Extensively used in batteries.\nNote: Likely toxic to biological life forms. Not that there are many left here. +item.metaglass.description = Used in liquid distribution/storage structures. +item.graphite.description = Used in electrical components and turret ammunition. +item.sand.description = Used for production of other refined materials. +item.coal.description = Used for fuel and refined material production. +item.coal.details = Appears to be fossilized plant matter, formed long before the seeding event. +item.titanium.description = Used in liquid transportation structures, drills and aircraft. +item.thorium.description = Used in durable structures and as nuclear fuel. +item.scrap.description = Used in Melters and Pulverizers for refining into other materials. +item.scrap.details = Leftover remnants of old structures and units. +item.silicon.description = Used in solar panels, complex electronics and homing turret ammunition. +item.plastanium.description = Used in advanced units, insulation and fragmentation ammunition. +item.phase-fabric.description = Used in advanced electronics and self-repairing structures. +item.surge-alloy.description = Used in advanced weaponry and reactive defense structures. +item.spore-pod.description = Used for conversion into oil, explosives and fuel. +item.spore-pod.details = Spores. Likely a synthetic life form. Emit gases toxic to other biological life. Extremely invasive. Highly flammable in certain conditions. +item.blast-compound.description = Used in bombs and explosive ammunition. +item.pyratite.description = Used in incendiary weapons and combustion-fueled generators. -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. -block.kiln.description = Smelts sand and lead into the compound known as metaglass. Requires small amounts of power to run. +liquid.water.description = Used for cooling machines and waste processing. +liquid.slag.description = Refined in separators into constituent metals, or sprayed at enemies as a weapon. +liquid.oil.description = Used in advanced material production and as incendiary ammunition. +liquid.cryofluid.description = Used as coolant in reactors, turrets and factories. + +block.resupply-point.description = Resupplies nearby units with copper ammunition. Not compatible with units that require battery power. +block.armored-conveyor.description = Moves items forward. Does not accept inputs from the sides. +block.illuminator.description = Emits light. +block.message.description = Stores a message for communication between allies. +block.graphite-press.description = Compresses coal into graphite. +block.multi-press.description = Compresses coal into graphite. Requires water as coolant. +block.silicon-smelter.description = Refines silicon from sand and coal. +block.kiln.description = Smelts sand and lead into metaglass. block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Synthesizes phase fabric from radioactive thorium and sand. Requires massive amounts of power to function. -block.alloy-smelter.description = Combines titanium, lead, silicon and copper to produce surge alloy. -block.cryofluid-mixer.description = Mixes water and fine titanium powder into cryofluid. Essential for thorium reactor usage. -block.blast-mixer.description = Crushes and mixes clusters of spores with pyratite to produce blast compound. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.melter.description = Melts down scrap into slag for further processing or usage in wave turrets. -block.separator.description = Separates slag into its mineral components. Outputs the cooled result. -block.spore-press.description = Compresses spore pods under extreme pressure to synthesize oil. +block.phase-weaver.description = Synthesizes phase fabric from thorium and sand. +block.alloy-smelter.description = Fuses titanium, lead, silicon and copper into surge alloy. +block.cryofluid-mixer.description = Mixes water and fine titanium powder to produce cryofluid. +block.blast-mixer.description = Produces blast compound from pyratite and spore pods. +block.pyratite-mixer.description = Mixes coal, lead and sand into pyratite. +block.melter.description = Melts down scrap into slag. +block.separator.description = Separates slag into its mineral components. +block.spore-press.description = Compresses spore pods into oil. block.pulverizer.description = Crushes scrap into fine sand. -block.coal-centrifuge.description = Solidifes oil into chunks of coal. -block.incinerator.description = Vaporizes any excess item or liquid it receives. -block.power-void.description = Voids all power inputted into it. Sandbox only. +block.coal-centrifuge.description = Transforms oil into coal. +block.incinerator.description = Vaporizes any item or liquid it receives. +block.power-void.description = Voids all power inputted. Sandbox only. 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. -block.phase-wall-large.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact.\nSpans multiple tiles. -block.surge-wall.description = An extremely durable defensive block.\nBuilds up charge on bullet contact, releasing it randomly. -block.surge-wall-large.description = An extremely durable defensive block.\nBuilds up charge on bullet contact, releasing it randomly.\nSpans multiple tiles. -block.door.description = A small door. Can be opened or closed by tapping. -block.door-large.description = A large door. Can be opened and closed by tapping.\nSpans multiple tiles. -block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency. -block.mend-projector.description = An upgraded version of the Mender. Repairs blocks in its vicinity.\nOptionally uses phase fabric to boost range and efficiency. +block.copper-wall.description = Protects structures from enemy projectiles. +block.copper-wall-large.description = Protects structures from enemy projectiles. +block.titanium-wall.description = Protects structures from enemy projectiles. +block.titanium-wall-large.description = Protects structures from enemy projectiles. +block.plastanium-wall.description = Protects structures from enemy projectiles. Absorbs lasers and electric arcs. Blocks automatic power connections. +block.plastanium-wall-large.description = Protects structures from enemy projectiles. Absorbs lasers and electric arcs. Blocks automatic power connections. +block.thorium-wall.description = Protects structures from enemy projectiles. +block.thorium-wall-large.description = Protects structures from enemy projectiles. +block.phase-wall.description = Protects structures from enemy projectiles, reflecting most bullets upon impact. +block.phase-wall-large.description = Protects structures from enemy projectiles, reflecting most bullets upon impact. +block.surge-wall.description = Protects structures from enemy projectiles, periodically releasing electric arcs upon contact. +block.surge-wall-large.description = Protects structures from enemy projectiles, periodically releasing electric arcs upon contact. +block.door.description = A wall that can be opened and closed. +block.door-large.description = A wall that can be opened and closed. +block.mender.description = Periodically repairs blocks in its vicinity.\nOptionally uses silicon to boost range and efficiency. +block.mend-projector.description = Repairs blocks in its vicinity.\nOptionally uses phase fabric to boost range and efficiency. block.overdrive-projector.description = Increases the speed of nearby buildings.\nOptionally uses phase fabric to boost range and efficiency. -block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage.\nOverheats if too much damage is sustained. Optionally uses coolant to prevent overheating. Phase fabric can be used to increase shield size. -block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.conveyor.description = Basic item transport block. Moves items forward and automatically deposits them into blocks. Rotatable. -block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front.\nRequires multiple loading and unloading points for peak throughput. -block.junction.description = Acts as a bridge for two crossing conveyor belts. Useful in situations with two different conveyors carrying different materials to different locations. -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 = Only outputs to the left and right if the front path is blocked. -block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. -block.mass-driver.description = The ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. Requires power to operate. -block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. -block.rotary-pump.description = An advanced pump. Pumps more liquid, but requires power. -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.\nDoes not leak. -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. -block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. -block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. +block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage.\nOverheats if too much damage is sustained. Optionally uses coolant to prevent overheating. Phase fabric increases shield size. +block.shock-mine.description = Releases electric arcs upon enemy unit contact. +block.conveyor.description = Transports items forward. +block.titanium-conveyor.description = Transports items forward. Faster than a standard conveyor. +block.plastanium-conveyor.description = Transports items forward in batches. Accepts items at the back, and unloads them in three directions at the front. Requires multiple loading and unloading points for peak throughput. +block.junction.description = Acts as a bridge for two crossing conveyor belts. +block.bridge-conveyor.description = Transports items over terrain or buildings. +block.phase-conveyor.description = Instantly transports items over terrain or buildings. Longer range than the item bridge, but requires power. +block.sorter.description = If an input item matches the selection, it passes forward. Otherwise, the item is outputted to the left and right. +block.inverted-sorter.description = Similar to a standard sorter, but outputs selected items to the sides instead. +block.router.description = Distributes input items to 3 output directions equally. +block.router.details = A necessary evil. Using next to production inputs is not advised, as they will get clogged by output. +block.distributor.description = Distributes input items to 7 output directions equally. +block.overflow-gate.description = Only outputs items to the left and right if the front path is blocked. Cannot be used next to other gates. +block.underflow-gate.description = Opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. Cannot be used next to other gates. +block.mass-driver.description = Long-range item transport structure. Collects batches of items and shoots them to other mass drivers. +block.mechanical-pump.description = Pumps and outputs liquids. Does not require power. +block.rotary-pump.description = Pumps and outputs liquids. Requires power. +block.thermal-pump.description = Pumps and outputs liquids. +block.conduit.description = Moves liquids forward. Used in conjunction with pumps and other conduits. +block.pulse-conduit.description = Moves liquids forward. Transports faster and stores more than standard conduits. +block.plated-conduit.description = Moves liquids forward. Does not accept input from the sides. Does not leak. +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. +block.liquid-tank.description = Stores a large amount of liquid. Outputs to all sides, similarly to a liquid router. +block.liquid-junction.description = Acts as a bridge for two crossing conduits. +block.bridge-conduit.description = Transports liquids over terrain or buildings. +block.phase-conduit.description = Transports liquids over terrain or buildings. Longer range than the bridge conduit, but requires power. 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. -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.surge-tower.description = A long-range power node with fewer available connections. +block.diode.description = Moves battery power in one direction, but only if the other side has less power stored. +block.battery.description = Stores power in times of surplus energy. Outputs power in times of deficit. +block.battery-large.description = Stores power in times of surplus energy. Outputs power in times of deficit. Higher capacity than a regular battery. block.combustion-generator.description = Generates power by burning flammable materials, such as coal. block.thermal-generator.description = Generates power when placed in hot locations. -block.steam-generator.description = An advanced combustion generator. More efficient, but requires additional water for generating steam. +block.steam-generator.description = Generates power by burning flammable materials and converting water to steam. block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. -block.rtg-generator.description = A simple, reliable generator. Uses the heat of decaying radioactive compounds to produce energy at a slow rate. +block.rtg-generator.description = Uses the heat of decaying radioactive compounds to produce energy at a slow rate. block.solar-panel.description = Provides a small amount of power from the sun. -block.solar-panel-large.description = A significantly more efficient version of the standard solar panel. -block.thorium-reactor.description = Generates significant amounts of power from thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. Power output depends on fullness, with base power generated at full capacity. -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 = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely. Only capable of mining basic resources. +block.solar-panel-large.description = Provides a small amount of power from the sun. More efficient than the standard solar panel. +block.thorium-reactor.description = Generates significant amounts of power from thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. +block.impact-reactor.description = Creates massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. +block.mechanical-drill.description = When placed on ore, outputs items at a slow pace indefinitely. Only capable of mining basic resources. block.pneumatic-drill.description = An improved drill, capable of mining titanium. Mines at a faster pace than a mechanical drill. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Capable of mining thorium. block.blast-drill.description = The ultimate drill. Requires large amounts of power. block.water-extractor.description = Extracts groundwater. Used in locations with no surface water available. -block.cultivator.description = Cultivates tiny concentrations of spores in the atmosphere into industry-ready pods. +block.cultivator.description = Cultivates tiny concentrations of atmospheric spores into spore pods. +block.cultivator.details = Recovered technology. Used to produce massive amounts of biomass as efficiently as possible. Likely the initial incubator of the spores now covering Serpulo. block.oil-extractor.description = Uses large amounts of power, sand and water to drill for oil. -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 = Stores a large amount of items of each type. An unloader block can be used to retrieve items from the vault. -block.container.description = Stores a small amount of items of each type. An unloader block can be used to retrieve items from the container. -block.unloader.description = Unloads items from any nearby non-transportation block. The type of item to be unloaded can be changed by tapping. -block.launch-pad.description = Launches batches of items without any need for a core launch. -block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. -block.duo.description = A small, cheap turret. Useful against ground units. -block.scatter.description = An essential anti-air turret. Sprays clumps of lead, scrap or metaglass flak at enemy units. +block.core-shard.description = Core of the base. Once destroyed, the sector is lost. +block.core-shard.details = The first iteration. Compact. Self-replicating. Equipped with single-use launch thrusters. Not designed for interplanetary travel. +block.core-foundation.description = Core of the base. Well armored. Stores more resources than a Shard. +block.core-foundation.details = The second iteration. +block.core-nucleus.description = Core of the base. Extremely well armored. Stores massive amounts of resources. +block.core-nucleus.details = The third and final iteration. +block.vault.description = Stores a large amount of items of each type. Contents can be retrieved with an unloader. +block.container.description = Stores a small amount of items of each type. Contents can be retrieved with an unloader. +block.unloader.description = Unloads the selected item from nearby blocks. +block.launch-pad.description = Launches batches of items to selected sectors. +block.duo.description = Fires alternating bullets at enemies. +block.scatter.description = Fires clumps of lead, scrap or metaglass flak at enemy aircraft. block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. -block.hail.description = A small, long-range artillery turret. -block.wave.description = A medium-sized turret. Shoots streams of liquid at enemies. Automatically extinguishes fires when supplied with water. -block.lancer.description = A medium-sized anti-ground laser turret. Charges and fires powerful beams of energy. -block.arc.description = A small close-range electric turret. Fires arcs of electricity at enemies. -block.swarmer.description = A medium-sized missile turret. Attacks both air and ground enemies. Fires homing missiles. -block.salvo.description = A larger, more advanced version of the Duo turret. Fires quick salvos of bullets at the enemy. -block.fuse.description = A large, close-range shrapnel turret. Fires three piercing blasts at nearby enemies. -block.ripple.description = An extremely powerful artillery turret. Shoots clusters of shells at enemies over long distances. -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.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.hail.description = Fires small shells at ground enemies over long distances. +block.wave.description = Fires streams of liquid at enemies. Automatically extinguishes fires when supplied with water. +block.lancer.description = Charges and fires powerful beams of energy at ground targets. +block.arc.description = Fires arcs of electricity at ground targets. +block.swarmer.description = Fires homing missiles at enemies. +block.salvo.description = Fires quick salvos of bullets at enemies. +block.fuse.description = Fires three close-range piercing blasts at nearby enemies. +block.ripple.description = Shoots clusters of shells at ground enemies over long distances. +block.cyclone.description = Fires explosive clumps of flak at nearby enemies. +block.spectre.description = Fires large armor-piercing bullets at air and ground targets. +block.meltdown.description = Charges and fires a persistent laser beam at nearby enemies. Requires coolant to operate. +block.foreshadow.description = Fires a large single-target bolt over long distances. +block.repair-point.description = Continuously repairs the closest damaged unit in its vicinity. +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. +block.parallax.description = Fires a tractor beam that pulls in air targets, damaging them in the process. +block.tsunami.description = Fires powerful streams of liquid at enemies. Automatically extinguishes fires when supplied with water. +block.silicon-crucible.description = Refines silicon from sand and coal, using pyratite as an additional heat source. More efficient in hot locations. +block.disassembler.description = Separates slag into trace amounts of exotic mineral components at low efficiency. Can produce thorium. +block.overdrive-dome.description = Increases the speed of nearby buildings. Requires phase fabric and silicon to operate. +block.payload-conveyor.description = Moves large payloads, such as units from factories. +block.payload-router.description = Splits input payloads into 3 output directions. +block.command-center.description = Controls unit behavior with several different commands. +block.ground-factory.description = Produces ground units. Output units can be used directly, or moved into reconstructors for upgrading. +block.air-factory.description = Produces air units. Output units can be used directly, or moved into reconstructors for upgrading. +block.naval-factory.description = Produces naval units. Output units can be used directly, or moved into reconstructors for upgrading. +block.additive-reconstructor.description = Upgrades inputted units to the second tier. +block.multiplicative-reconstructor.description = Upgrades inputted units to the third tier. +block.exponential-reconstructor.description = Upgrades inputted units to the fourth tier. +block.tetrative-reconstructor.description = Upgrades inputted units to the fifth and final tier. +block.switch.description = A toggleable switch. State can be read and controlled with logic processors. +block.micro-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. +block.logic-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. Faster than the micro processor. +block.hyper-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. Faster than the logic processor. +block.memory-cell.description = Stores information for a logic processor. +block.memory-bank.description = Stores information for a logic processor. High capacity. +block.logic-display.description = Displays arbitrary graphics from a logic processor. +block.large-logic-display.description = Displays arbitrary graphics from a logic processor. +block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. + +unit.dagger.description = Fires standard bullets at all nearby enemies. +unit.mace.description = Fires streams of flame at all nearby enemies. +unit.fortress.description = Fires long-range artillery at ground targets. +unit.scepter.description = Fires a barrage of charged bullets at all nearby enemies. +unit.reign.description = Fires a barrage of massive piercing bullets at all nearby enemies. +unit.nova.description = Fires laser bolts that damage enemies and repair allied structures. Capable of flight. +unit.pulsar.description = Fires arcs of electricity that damage enemies and repair allied structures. Capable of flight. +unit.quasar.description = Fires piercing laser beams that damage enemies and repair allied structures. Capable of flight. Shielded. +unit.vela.description = Fires a massive continuous laser beam that damages enemies, causes fires and repair allied structures. Capable of flight. +unit.corvus.description = Fires a massive laser blast that damages enemies and repairs allied structures. Can step over most terrain. +unit.crawler.description = Runs toward enemies and self-destructs, causing a large explosion. +unit.atrax.description = Fires debilitating orbs of slag at ground targets. Can step over most terrain. +unit.spiroct.description = Fires sapping laser beams at enemies, repairing itself in the process. Can step over most terrain. +unit.arkyid.description = Fires large sapping laser beams at enemies, repairing itself in the process. Can step over most terrain. +unit.toxopid.description = Fires large electric cluster-shells and piercing lasers at enemies. Can step over most terrain. +unit.flare.description = Fires standard bullets at nearby ground targets. +unit.horizon.description = Drops clusters of bombs on ground targets. +unit.zenith.description = Fires salvos of missiles at all nearby enemies. +unit.antumbra.description = Fires a barrage of bullets at all nearby enemies. +unit.eclipse.description = Fires two piercing lasers and a barrage of flak at all nearby enemies. +unit.mono.description = Automatically mines copper and lead, depositing it into the core. +unit.poly.description = Automatically rebuilds damaged structures and assists other units in construction. +unit.mega.description = Automatically repairs damaged structures. Capable of carrying blocks and small ground units. +unit.quad.description = Drops large bombs on ground targets, repairing allied structures and damaging enemies. Capable of carrying medium-sized ground units. +unit.oct.description = Protects nearby allies with its regenerating shield. Capable of carrying most ground units. +unit.risso.description = Fires a barrage of missiles and bullets at all nearby enemies. +unit.minke.description = Fires shells and standard bullets at nearby ground targets. +unit.bryde.description = Fires long-range artillery shells and missiles at enemies. +unit.sei.description = Fires a barrage of missiles and armor-piercing bullets at enemies. +unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Constructs flare units. +unit.alpha.description = Defends the Shard core from enemies. Builds structures. +unit.beta.description = Defends the Foundation core from enemies. Builds structures. +unit.gamma.description = Defends the Nucleus core from enemies. Builds structures. diff --git a/core/assets/bundles/bundle_be.properties b/core/assets/bundles/bundle_be.properties index 590d8094f2..00fe18201e 100644 --- a/core/assets/bundles/bundle_be.properties +++ b/core/assets/bundles/bundle_be.properties @@ -55,6 +55,7 @@ schematic.saved = Схема захавана. schematic.delete.confirm = Гэтая схема будзе выдалена. schematic.rename = Перайменаваць схему schematic.info = {0}x{1}, {2} блокаў +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Хваляў адлюстравана:[accent] {0} stat.enemiesDestroyed = Ворагаў знішчана:[accent] {0} @@ -100,7 +101,6 @@ done = Гатова feature.unsupported = Ваша прылада не падтрымлівае гэтую магчымасць. mods.alphainfo = Майце на ўвазе, што мадыфікацыі знаходзяцца ў альфа-версіі і [scarlet]могуць утрымліваць шмат памылак[]. Дакладвайце аб любых праблемах, якія Вы знойдзеце ў Mindustry Github або Discord. -mods.alpha = [accent](Альфа) mods = Мадыфікацыі mods.none = [lightgray]Мадыфікацыі не знойдзены! mods.guide = Кіраўніцтва па модам @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] вылучыць і скапіяваць pausebuilding = [accent][[{0}][] для прыпынення будаўніцтва resumebuilding = [scarlet][[{0}][] для працягу будаўніцтва wave = [accent]Хваля {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Хваля праз {0} wave.waveInProgress = [lightgray]Хваля працягваецца waiting = [lightgray]Чаканне… waiting.players = Чаканне гульцоў… wave.enemies = Ворагаў: [lightgray]{0} wave.enemy = Застаўся [lightgray]{0}[] ворагаў +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Загрузіць малюнак saveimage = Захаваць малюнак unknown = Невядома @@ -328,6 +331,7 @@ editor.generation = Генерацыя: editor.ingame = Рэдагаваць ў гульні editor.publish.workshop = Апублікаваць у майстэрні editor.newmap = Новая карта +editor.center = Center workshop = Майстэрня waves.title = Хвалі waves.remove = Выдаліць @@ -416,6 +420,7 @@ filters.empty = [lightgray]Няма фільтраў! Дадайце адзін filter.distort = Скажэнне filter.noise = Шум filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Медыяна filter.oremedian = Рудня медыяна @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Блок filter.option.floor = Паверхня filter.option.flooronto = Мэтавая паверхню +filter.option.target = Target filter.option.wall = Сцяна filter.option.ore = Руда filter.option.floor2 = Другая паверхню @@ -471,15 +477,9 @@ requirement.wave = дасягнем {0} хвалі ў зоне {1} requirement.core = Знішчыце варожае ядро ​​ў зоне {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Аднавіць зону: \n[lightgray] {0} bestwave = [lightgray]Лепшая хваля: {0} -launch = <Запуск> launch.text = Launch -launch.title = Запуск паспяховы -launch.next = [lightgray]наступная магчымасць на {0} -той хвалі -launch.unable2 = [scarlet]Запуск немагчымы.[] -launch.confirm = Гэта [accent]запусціць[] усе рэсурсы ў Вашым ядры. \nВы не зможаце вярнуцца на гэтую базу. -launch.skip.confirm = Калі Вы прапусціце цяпер, то Вы не зможаце вырабіць [accent] запуск[] да пазнейшых хваль. +research.multiplayer = Only the host can research items. uncover = Раскрыць configure = Канфігурацыя выгрузкі loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Вы сапраўды хочаце ачысціць с settings.clearall.confirm = [scarlet] АСЦЯРОЖНА![] \nГэта сатрэ ўсе дадзеныя, уключаючы захавання, карты, прагрэс кампаніі і налады кіравання. \nПосле таго як Вы націснеце [accent] [ОК][], гульня знішчыць усе дадзеныя і аўтаматычна зачыніцца. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent] <Паўза> clear = Ачысціць banned = [scarlet] Забаронена @@ -570,12 +580,14 @@ info.title = Інфармацыя error.title = [crimson]Адбылася памылка error.crashtitle = Адбылася памылка unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Уваход stat.output = Выхад stat.booster = Паскаральнік stat.tiles = Неабходныя пліткі stat.affinities = Павелічэнне эфектыўнасці -block.unknown = [lightgray]??? stat.powercapacity = Умяшчальнасць энергіі stat.powershot = Энергія/Выстрэл stat.damage = Страты @@ -594,6 +606,7 @@ stat.powerconnections = Колькасць злучэнняў stat.poweruse = Спажывае энергіі stat.powerdamage = Энергія/страты stat.itemcapacity = Умяшчальнасць прадметаў +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Базавая генерацыя энергіі stat.productiontime = Час вытворчасці stat.repairtime = Час поўнай рэгенерацыі @@ -613,6 +626,28 @@ stat.reload = Стрэлы/секунду stat.ammo = Боепрыпасы stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Патрабуецца свідар лепей bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Энергія: {0}/с bar.powerstored = Назапашана: {0}/{1} bar.poweramount = Энергія: {0} bar.poweroutput = Выхад энергіі: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Прадметы: {0} bar.capacity = Умяшчальнасць: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Прагрэс будаўніцтва bar.input = Уваход bar.output = Выхад +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat] {0} [lightgray]страты bullet.splashdamage = [stat] {0} [lightgray]страты ў радыусе ~ [stat] {1} [lightgray] блокаў bullet.incendiary = [stat] запальны @@ -642,12 +680,15 @@ bullet.homing = [stat] саманаводных bullet.shock = [stat] шокавы bullet.frag = [stat] асколачны bullet.knockback = [stat] {0} [lightgray]аддачы +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat] замарожваюцца bullet.tarred = [stat] запавольвае, гаручы bullet.multiplier = [stat]{0}[lightgray]x множнік боепрыпасаў bullet.reload = [stat]{0}[lightgray]x хуткасць стрэльбы unit.blocks = блокі +unit.blockssquared = blocks² unit.powersecond = адзінак энергіі/секунду unit.liquidsecond = вадкасных адзінак/секунду unit.itemssecond = прадметаў/секунду @@ -670,7 +711,7 @@ category.power = Энергія category.liquids = Вадкасці category.items = Прадметы category.crafting = Увядзенне/Выснова -category.shooting = Стральба +category.function = Function category.optional = Дадатковыя паляпшэння setting.landscape.name = Толькі альбомны (гарызантальны) рэжым setting.shadows.name = Цені @@ -679,7 +720,6 @@ setting.linear.name = Лінейная фільтраванне setting.hints.name = Падказкі setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Аўтаматычная прыпыненне будаўніцтва -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Аніміраваныя вада setting.animatedshields.name = Аніміраваныя шчыты setting.antialias.name = Згладжванне [lightgray] (патрабуе перазапуску)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Поўнаэкранны рэжым setting.borderlesswindow.name = Безрамочное акно [lightgray] (можа спатрэбіцца перазапуск) setting.fps.name = Паказваць FPS і пінг setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Паказаць клавішы выбару блока setting.vsync.name = Вертыкальная сінхранізацыя setting.pixelate.name = Пікселізацыя setting.minimap.name = Адлюстроўваць міні-карту @@ -822,6 +861,7 @@ mode.custom = Карыстальніцкія правілы rules.infiniteresources = Бясконцыя рэсурсы (Гулец) rules.reactorexplosions = Выбухі рэактараў +rules.schematic = Schematics Allowed rules.wavetimer = Інтэрвал хваляў rules.waves = Хвалі rules.attack = Рэжым атакі @@ -847,6 +887,7 @@ rules.title.unit = Баёў. адз. rules.title.experimental = эксперыментальнай rules.title.environment = Environment rules.lighting = Асвятленне +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Навакольны свет @@ -858,6 +899,7 @@ content.item.name = Рэчывы content.liquid.name = Вадкасці content.unit.name = Баявыя адзінкі content.block.name = Блокі + item.copper.name = Медзь item.lead.name = Свінец item.coal.name = Вугаль @@ -879,23 +921,6 @@ liquid.slag.name = Шлак liquid.oil.name = Нафта liquid.cryofluid.name = Крыягенная вадкасць -item.explosiveness = [lightgray]Выбуханебяспека: {0}% -item.flammability = [lightgray]Узгаральнасць: {0}% -item.radioactivity = [lightgray]Радыёактыўнасць: {0}% - -unit.health = [lightgray]Здароўе: {0} -unit.speed = [lightgray]Хуткасць: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Цеплаёмістасць: {0} -liquid.viscosity = [lightgray]Глейкасць: {0} -liquid.temperature = [lightgray]Тэмпература: {0} - unit.dagger.name = Кінжал unit.mace.name = Mace unit.fortress.name = Крэпасць @@ -936,6 +961,7 @@ block.cliff.name = Скала block.sand-boulder.name = Пяшчаны валун block.grass.name = Трава block.slag.name = Шлак +block.space.name = Space block.salt.name = Соль block.salt-wall.name = Salt Wall block.pebbles.name = Галька @@ -981,6 +1007,7 @@ block.darksand-water.name = Тёмный пясок з вадой block.char.name = Выпаленая зямля block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Заснежаны лёд block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Крыніца энергіі block.unloader.name = Разгрузчык block.vault.name = Сховішча block.wave.name = Хваля +block.tsunami.name = Tsunami block.swarmer.name = Раявiк block.salvo.name = Залп block.ripple.name = Рабь @@ -1114,6 +1142,7 @@ block.arc.name = Дуга block.rtg-generator.name = Радыеізатопны тэрмаэлектрычны генератар block.spectre.name = Спектр block.meltdown.name = Іспепяліцель +block.foreshadow.name = Foreshadow block.container.name = Кантэйнер block.launch-pad.name = Пускавая пляцоўка block.launch-pad-large.name = Вялікая пускавая пляцоўка @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = Сіняя team.crux.name = Чырвоная @@ -1302,4 +1332,4 @@ block.cyclone.description = Вялікая турэль, якая можа ве block.spectre.description = Масіўная двуствольное гармата. Страляе буйнымі бранябойнымі кулямі па паветраных і наземных мэтах. block.meltdown.description = Масіўная лазерная гармата. Зараджае і страляе пастаянным лазерным прамянём ў бліжэйшых ворагаў. Патрабуецца астуджальная вадкасць для працы. block.repair-point.description = Бесперапынна лечыць бліжэйшую пашкоджаную баявую адзінку або мех у сваім радыусе. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index f9f98951dc..bf15164929 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -10,18 +10,22 @@ 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.f-droid.description = F-Droid link.wiki.description = Oficiální Wiki Mindustry link.suggestions.description = Suggest new features 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 získání snímku obrazovky. gameover = Konec hry +gameover.disconnect = Odpojit se gameover.pvp = Vyhrál tým [accent]{0}[]! +gameover.waiting = [accent]Hra čeká na další mapu... highscore = [accent]Nový rekord! copied = Zkopírováno. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. +indev.popup = Mindustry [accent]v6[] je aktuálně ve verzi [accent]beta[].\n[lightgray]To znamená:[]\n[scarlet]- Kampaň je nedokončená[]\n- Cokoli, co vidíte, se může změnit nebo být odstraněno.\n\nHlaste prosím chyby na [accent]Github[]. indev.notready = Tato část hry ještě není připravena +indev.campaign = [accent]Dovršil jsi kampaň![]\n\nTohle je vše, co Ti hra může po obsahové stránce nabídnout. Meziplanetární lety budou přidány až v budoucích aktualizacích. + load.sound = Zvuky load.map = Mapy @@ -57,6 +61,7 @@ schematic.rename = Přejmenovat šablonu schematic.info = {0}x{1}, {2} bloků schematic.disabled = [scarlet]Šablony jsou zakázány[]\nNa této [accent]mapě[] nebo [accent]serveru[] nemůžeš používat šablony. +stats = Statistiky stat.wave = Vln poraženo: [accent]{0} stat.enemiesDestroyed = Nepřátel zničeno: [accent]{0}[] stat.built = Budov postaveno: [accent]{0}[] @@ -100,8 +105,7 @@ committingchanges = Provádím změny done = Hotovo 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.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 Mindustry. Děkujeme! mods = Mody mods.none = [lightgray]Modifikace nebyly nalezeny.[] mods.guide = Průvodce modifikacemi @@ -190,6 +194,10 @@ servers.local = Místní servery servers.remote = Vzdálené servery servers.global = Komunitní servery +servers.showhidden = Zobraz skryté servery +server.shown = Zobrazené +server.hidden = Skryté + trace = Vystopovat hráče trace.playername = Jméno hráče: [accent]{0}[] trace.ip = Adresa IP: [accent]{0}[] @@ -268,6 +276,9 @@ cancel = Zrušit openlink = Otevřít odkaz copylink = Zkopírovat odkaz back = Zpět +crash.export = Exportovat záznamy o zhroucení hry +crash.none = Záznamy o zhroucení hry nebyly nalezeny. +crash.exported = Záznamy o zhroucení hry byly exportovány. data.export = Exportovat data data.import = Importovat data data.openfolder = Otevřít složku s daty @@ -279,18 +290,24 @@ quit.confirm.tutorial = Jsi si jistý?Výuku je možné znovu spustit v [accent] loading = [accent]Načítám... reloading = [accent]Načítám modifikace... saving = [accent]Ukládám... -respawn = [accent][[{0}][] k znovyzrození v jádře +respawn = [accent][[{0}][] k znovuzrození v jádře 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í +showui = UI je skryto.\nZmáčkni [accent][[{0}][] pro jeho zobrazení. wave = [accent]Vlna číslo {0}[] +wave.cap = [accent]Vlna {0} z {1}[] 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 = [lightgray]{0} zbývajících nepřátel -wave.enemy = [lightgray]{0} zbývající nepřítel +wave.enemycores = [accent]{0}[lightgray] nepřátelská jádra +wave.enemycore = [accent]{0}[lightgray] nepřátelské jádro +wave.enemy = [lightgray]{0} zbývající nepřátel +wave.guardianwarn = Počet vln do příchodu strážce: [accent]{0}[]. +wave.guardianwarn.one = [accent]Strážce přijde již příští vlnu![] loadimage = Nahrát obrázek saveimage = Uložit obrázek unknown = Neznámý @@ -329,6 +346,7 @@ editor.generation = Generace: editor.ingame = Upravit ve hře editor.publish.workshop = Vystavit ve Workshopu na Steamu editor.newmap = Nová mapa +editor.center = Vycentrovat workshop = Workshop na Steamu waves.title = Vlny waves.remove = Odebrat @@ -338,7 +356,7 @@ waves.waves = vln(y) waves.perspawn = za zrození waves.shields = štítů/vlnu waves.to = do -waves.guardian = Guardian +waves.guardian = Strážce waves.preview = Náhled waves.edit = Upravit.... waves.copy = Uložit do schránky @@ -347,7 +365,7 @@ 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í. -#these are intentionally in lower case +#toto je záměrně malými písmeny wavemode.counts = počty wavemode.totals = součty wavemode.health = zdraví @@ -417,8 +435,9 @@ 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.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = Výběr nepřátelské líhně +filter.spawnpath = Cesta k líhni +filter.corespawn = Váběr ládra filter.median = Medián filter.oremedian = Medián rud filter.blend = Prolnutí @@ -442,6 +461,7 @@ filter.option.amount = Amount filter.option.block = Blok filter.option.floor = Povrch filter.option.flooronto = Cílový povrch +filter.option.target = Cíl filter.option.wall = Stěna filter.option.ore = Ruda filter.option.floor2 = Druhotný povrch @@ -458,7 +478,9 @@ 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! +memory = Paměť: {0} MB +memory2 = Paměť:\n {0} MB +\n {1} MB +language.restart = Hru je třeba restartovat, aby se provedla změna jazyka. settings = Volby tutorial = Výuka tutorial.retake = Spustit znovu výuku. @@ -471,18 +493,20 @@ locked = Zamčeno complete = [lightgray]Dokončeno: requirement.wave = Dosáhni vlny {0} na mapě {1} requirement.core = Znič nepřátelské jádro na mapě {0} -requirement.research = Vynalezeno {0} -requirement.capture = Polapeno {0} -bestwave = [lightgray]Nejvyšší vlna: {0} +requirement.research = Vynalezni {0} +requirement.produce = Vyrob {0} +requirement.capture = Polap {0} launch.text = Vyslat -campaign.multiplayer = Když hraješ kampaň ve hře více hráčů, můžeš vynalézat pouze pomocí věcí ze [accent]svých[] sektorů, [scarlet]ne[] ze sektoru hostitele, kde jsi právě teď.\n\nAbys získal věci do [accent]svých[] sektorů ve hře více hráčů, použij [accent]vysílací plošinu[]. +research.multiplayer = Jen hostitel hry může vynalézat nové technologie. uncover = Odkrýt mapu configure = Přizpůsobit vybavení + #TODO loadout = Načtení resources = Zdroje bannedblocks = Zakázané bloky addall = Přidat vše +launch.from = Vysláno z: [accent]{0} launch.destination = Cíl: {0} configure.invalid = Hodnota musí být číslo mezi 0 a {0}. zone.unlocked = [lightgray]Mapa {0} byla odemknuta.[] @@ -502,24 +526,48 @@ error.mismatch = Chyba při komunikaci se serverem:\nVerze klienta a serveru se 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.any = Neznámá chyba sítě. error.bloom = Chyba inicializace filtru Bloom.\nTvé zařízení ho nejspíš nepodporuje. weather.rain.name = Déšť weather.snow.name = Sníh weather.sandstorm.name = Písečná ouře weather.sporestorm.name = Spórová bouře +weather.fog.name = Mlha sectors.unexplored = [lightgray]Neprozkoumáno sectors.resources = Zdroje: sectors.production = Výroba: +sectors.export = Export: +sectors.time = Čas: +sectors.threat = Ohrožení: +sectors.wave = Vlna: sectors.stored = Uskladněno: sectors.resume = Pokračovat sectors.launch = Vyslat sectors.select = Vybrat -sectors.nonelaunch = [lightgray]žádné (slunce)[] +sectors.nonelaunch = [lightgray]bez (slunce)[] +sectors.rename = Přejmenovat sektor -#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway +sector.curcapture = Sektor polapen +sector.missingresources = [scarlet]Nedostatečné zdroje v jádře +sector.attacked = Sektor [accent]{0}[white] pod útokem! +sector.lost = Sektor [accent]{0}[white] ztracen! :( +#note: the missing space in the line below is intentional +sector.captured = Sektor [accent]{0}[white]polapen! :) + +threat.low = Nízké +threat.medium = Střední +threat.high = Velké +threat.extreme = Extrémní +threat.eradication = Vyhlazující + +planets = Planets + +planet.serpulo.name = Serpulo +planet.sun.name = Sol + +sector.impact0078.name = Dopad 0078 sector.groundZero.name = Základní tábor sector.craters.name = Krátery sector.frozenForest.name = Zamrzlý les @@ -531,16 +579,19 @@ sector.overgrowth.name = Džungle sector.tarFields.name = Dehtová pole sector.saltFlats.name = Solné nížiny sector.fungalPass.name = Plísňový průsmyk +sector.biomassFacility.name = Zařízení pro syntézu biomasy +sector.windsweptIslands.name = Větrné ostrovy +sector.extractionOutpost.name = Extrakční základna +sector.planetaryTerminal.name = Planetární odpalovací terminál #unused -#sector.impact0078.name = Impact 0078 #sector.crags.name = Crags sector.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. sector.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. sector.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. sector.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. -sector.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. +sector.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í konstrukce zůstaly ušetřeny, zbytek se rozpadl na šrot.\nPokračuj ve své expanzi hlouběji. Objev ztracenou technologii. sector.stainedMountains.description = Dále ve vnitrozemí leží hory, dosud neposkvrněny spórami.\nVytěž titan, kterým tato oblast oplývá. Nauč se jej používat.\n\nPřítomnost nepřátelských jednotek je zde větší. Radši jim nedej moc času na vyslání jejich nejsilnějších jednotech. sector.overgrowth.description = Tato přerostlá džungle se nachází blíže ke zdroji spór.\nNepřítel zde zbudoval předsunutou hlídku. Stav jednotky Dýka a znič s jejich pomocí jádro základny. Získej znovu to, co bylo již dávno ztraceno. sector.tarFields.description = Rozhraní produkční naftové oblasti mezi horami a pouští. Jedna z mála oblastí, kde se stále nachází dehet.\nAčkoliv je oblast opuštěná, stále se v jejím okolí nachází nebezpečné nepřátelské síly. Není radno je podcenit.\n\n[lightgray]Vyzkoumej technologii na zpracování nafty.[] @@ -560,24 +611,30 @@ 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čí. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = Opravdu chceš vymazat veškeré Tvé uložené hry? +settings.clearsaves = Vymazat uložené hry +settings.clearresearch = Vymazat výzkum +settings.clearresearch.confirm = Jsi si jist, že opravdu chceš vymazat veškerý dosažený výzkum v této kampani? +settings.clearcampaignsaves = Vymazat uložené hry kampaně +settings.clearcampaignsaves.confirm = Jsi si jist, že opravdu chceš vymazat všechny uložené hry v této kampani? paused = [accent]< Pozastaveno >[] clear = Vyčistit banned = [scarlet]Zakázán[] -unplaceable.sectorcaptured = [scarlet]Vyžaduje polapený sektor[] yes = Ano no = Ne info.title = Informace error.title = [scarlet]Objevila se chyba[] error.crashtitle = Objevila se chyba unit.nobuild = [scarlet]Jednotka nemůže stavět +lastaccessed = [lightgray]Naposledy použil: {0} +block.unknown = [lightgray]???[] + +stat.description = Účel stat.input = Vstup stat.output = Výstup stat.booster = Posilovač stat.tiles = Vyžadované dlaždice stat.affinities = Synergie -block.unknown = [lightgray]???[] stat.powercapacity = Kapacita energie stat.powershot = Energie na 1 výstřel stat.damage = Poškození @@ -600,6 +657,8 @@ stat.memorycapacity = Kapacita paměti stat.basepowergeneration = Základní generování energie stat.productiontime = Čas produkce stat.repairtime = Čas do úplné opravy +stat.weapons = Zbraně +stat.bullet = Střela stat.speedincrease = Zvýšení rychlosti stat.range = Dosah stat.drilltier = Lze těžit @@ -607,15 +666,40 @@ stat.drillspeed = Základní rychlost vrtu stat.boosteffect = Účinek posílení stat.maxunits = Nejvýše aktivních jednotek stat.health = Životy -stat.buildtime = Čas stavby +stat.buildtime = Čas konstrukce stat.maxconsecutive = Nejvýše po sobě -stat.buildcost = Cena stavby +stat.buildcost = Cena konstrukce stat.inaccuracy = Nepřesnost stat.shots = Střely stat.reload = Střel za 1s stat.ammo = Střelivo stat.shieldhealth = Zdraví štítu stat.cooldowntime = Čas na zchladnutí +stat.explosiveness = Výbušnost +stat.basedeflectchance = Základní pravděpobnost odražení +stat.lightningchance = Pravděpodobnost blesku +stat.lightningdamage = Poškození bleskem +stat.flammability = Hořlavost +stat.radioactivity = Radioaktivita +stat.heatcapacity = Tepelná kapacita +stat.viscosity = Vazkost +stat.temperature = Teplota +stat.speed = Rychlost +stat.buildspeed = Rychlost stavění +stat.minespeed = Rychlost těžení +stat.minetier = Těžící úroveň +stat.payloadcapacity = Kapacita pro náklad +stat.commandlimit = Limit ovládání +stat.abilities = Schopnosti +stat.canboost = Umí posilovat +stat.flying = Létající + +ability.forcefield = Silové pole +ability.repairfield = Opravit pole +ability.statusfield = Stav pole +ability.unitspawn = {0} továrna +ability.shieldregenfield = Silově opravné pole +ability.movelightning = Pohybující se blesk bar.drilltierreq = Je vyžadován lepší vrt bar.noresources = Chybějí zdroje @@ -627,6 +711,7 @@ bar.powerbalance = Energie: {0} bar.powerstored = Uskladněno: {0}/{1} bar.poweramount = Energie celkem: {0} bar.poweroutput = Výstup energie: {0} +bar.powerlines = Spojení: {0}/{1} bar.items = Předměty: {0} bar.capacity = Kapacita: {0} bar.unitcap = {0} {1}/{2} @@ -634,7 +719,7 @@ bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[jednotka je v bar.liquid = Chlazení bar.heat = Teplo bar.power = Energie -bar.progress = Stavba v průběhu +bar.progress = Konstrukce v průběhu bar.input = Vstup bar.output = Výstup @@ -642,17 +727,22 @@ units.processorcontrol = [lightgray]Procesor je ovládán[] bullet.damage = [stat]{0}[lightgray] poškození[] bullet.splashdamage = [stat]{0}[lightgray] plošného poškození ~[stat] {1}[lightgray] dlaždic -bullet.incendiary = [stat]zápalné +bullet.incendiary = [stat]zápalný +bullet.sapping = [stat]oslabující bullet.homing = [stat]samonaváděcí -bullet.shock = [stat]šokové -bullet.frag = [stat]trhavé -bullet.knockback = [stat]{0}[lightgray] odhození -bullet.freezing = [stat]mrazivé -bullet.tarred = [stat]dehtové -bullet.multiplier = [stat]{0}[lightgray]x více střel -bullet.reload = [stat]{0}[lightgray]x rychlost střelby +bullet.shock = [stat]šokový +bullet.frag = [stat]trhavý +bullet.knockback = [stat]{0}[lightgray] odhození[] +bullet.pierce = [stat]{0}[lightgray]x průrazné[] +bullet.infinitepierce = [stat]průrazné[] +bullet.healpercent = [stat]{0}[lightgray]% opravující +bullet.freezing = [stat]zmrazující[] +bullet.tarred = [stat]dehtující[] +bullet.multiplier = [stat]{0}[lightgray]x více střel[] +bullet.reload = [stat]{0}[lightgray]x rychlost střelby[] unit.blocks = bloky +unit.blockssquared = bloky² unit.powersecond = energie/sekunda unit.liquidsecond = kapalin/sekundu unit.itemssecond = předmětů/sekundu @@ -670,12 +760,13 @@ unit.items = předměty unit.thousands = tis unit.millions = mio unit.billions = mld +category.purpose = Účel category.general = Všeobecné category.power = Energie category.liquids = Kapaliny category.items = Předměty category.crafting = Vstup/Výstup -category.shooting = Střílí +category.function = Funkce category.optional = Volitelné vylepšení setting.landscape.name = Uzamknout krajinu setting.shadows.name = Stíny @@ -683,9 +774,9 @@ setting.blockreplace.name = Automatický návrh bloků setting.linear.name = Lineární filtrování setting.hints.name = Rady a tipy setting.flow.name = Zobrazit rychlost toku zdroje [scarlet](experimentální)[] +setting.backgroundpause.name = Pozastavit v pozadí setting.buildautopause.name = Automaticky pozastavit stavění -setting.mapcenter.name = Auto Center Map To Player -setting.animatedwater.name = Animované tekutiny +setting.animatedwater.name = Animované povrchy setting.animatedshields.name = Animované štíty setting.antialias.name = Použít antialias [lightgray](vyžaduje restart)[] setting.playerindicators.name = Indikátor pro hráče @@ -718,7 +809,6 @@ setting.fullscreen.name = Celá obrazovka setting.borderlesswindow.name = Bezokrajové okno[lightgray] (může výt vyžadován restart)[] setting.fps.name = Ukázat FPS a ping setting.smoothcamera.name = Plynulá kamera -setting.blockselectkeys.name = Ukázat klávesy při práci s blokem setting.vsync.name = Vertikální synchronizace setting.pixelate.name = Rozpixlovat setting.minimap.name = Ukázat mapičku @@ -761,7 +851,7 @@ keybind.press = Stiskni klávesu... keybind.press.axis = Stiskni osu ovladače nebo klávesu... keybind.screenshot.name = Snímek mapy keybind.toggle_power_lines.name = Přepnout zobrazení energetického vedení -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_block_status.name = Přepnout stav bloku keybind.move_x.name = Pohyb vodorovně keybind.move_y.name = Pohyb svisle keybind.mouse_move.name = Následovat myš @@ -815,7 +905,7 @@ keybind.drop_unit.name = Zahodit jednotku keybind.zoom_minimap.name = Přiblížit mapu mode.help.title = Popis režimů mode.survival.name = Hra o přežití -mode.survival.description = Klasický režim. Zdroje jsou limitované a vlny nepřátel přicházejí automaticky.\n[gray]Vyžaduje, aby v mapě bylo místo pro líhnutí nepřítel.[] +mode.survival.description = Klasický režim. Zdroje jsou limitované a vlny nepřátel přicházejí automaticky.\n[gray]Vyžaduje, aby v mapě bylo místo pro líhnutí nepřátel.[] mode.sandbox.name = Pískoviště mode.sandbox.description = Zdroje jsou nekonečné, vlny nepřátel nemají automatické načasování. mode.editor.name = Editor @@ -865,6 +955,8 @@ content.item.name = Předměty content.liquid.name = Kapaliny content.unit.name = Jednotky content.block.name = Bloky +content.sector.name = Sektory + item.copper.name = Měď item.lead.name = Olovo item.coal.name = Uhlí @@ -882,27 +974,10 @@ item.pyratite.name = Pyratit item.metaglass.name = Metasklo item.scrap.name = Šrot liquid.water.name = Voda -liquid.slag.name = Roztavený kov +liquid.slag.name = Struska liquid.oil.name = Nafta liquid.cryofluid.name = Chladící kapalina -item.explosiveness = [lightgray]Výbušnost: {0}%[] -item.flammability = [lightgray]Zápalnost: {0}%[] -item.radioactivity = [lightgray]Radioaktivita: {0}%[] - -unit.health = [lightgray]Životy: {0}[] -unit.speed = [lightgray]Rychlost: {0}[] -unit.weapon = [lightgray]Zbraň: {0} -unit.itemcapacity = [lightgray]Kapacita: {0} -unit.minespeed = [lightgray]Rychlost těžení: {0}% -unit.minepower = [lightgray]Těžební síla: {0} -unit.ability = [lightgray]Schopnost: {0} -unit.buildspeed = [lightgray]Rychlost stavění: {0}% - -liquid.heatcapacity = [lightgray]Teplotní kapacita: {0}[] -liquid.viscosity = [lightgray]Viskozita: {0}[] -liquid.temperature = [lightgray]Teplota: {0}[] - unit.dagger.name = Dýka unit.mace.name = Palcát unit.fortress.name = Pevnost @@ -942,7 +1017,8 @@ block.parallax.name = Paralaxa block.cliff.name = Útes block.sand-boulder.name = Pískovec block.grass.name = Tráva -block.slag.name = Slag +block.slag.name = Struska +block.space.name = Vesmír block.salt.name = Sůl block.salt-wall.name = Solné skály block.pebbles.name = Oblázky @@ -988,8 +1064,9 @@ block.darksand-water.name = Voda s černým pískem block.char.name = Dřevěné uhlí block.dacite.name = Dacit block.dacite-wall.name = Stěna dacitu +block.dacite-boulder.name = Dacitový kámen block.ice-snow.name = Zasněžený led -block.stone-wall.name = Stone Wall +block.stone-wall.name = Kamenné skály block.ice-wall.name = Ledové skály block.snow-wall.name = Sněhové skály block.dune-wall.name = Písečné duny @@ -1034,9 +1111,8 @@ block.hail.name = Kroupomet block.lancer.name = Kopiník block.conveyor.name = Dopravník block.titanium-conveyor.name = Titanoový dopravník -block.plastanium-conveyor.name = Plastanium Conveyor +block.plastanium-conveyor.name = Plastanový přepravník block.armored-conveyor.name = Obrněný dopravník -block.armored-conveyor.description = Přepravuje předměty stejně rychle jako titanový přepravník, ale má navíc brnění. Přijímá předměty ze srtan pouze z jiných přepravníků. block.junction.name = Křižovatka block.router.name = Směrovač block.distributor.name = Rozdělovač @@ -1082,8 +1158,8 @@ block.power-source.name = Nekonečný zdroj energie block.unloader.name = Odbavovač block.vault.name = Trezor block.wave.name = Vlna -block.swarmer.name = Rojiště block.tsunami.name = Tsunami +block.swarmer.name = Rojiště block.salvo.name = Salva block.ripple.name = Vlnění block.phase-conveyor.name = Fázový přepravník @@ -1118,7 +1194,7 @@ block.fuse.name = Fúze block.shock-mine.name = Šoková mina block.overdrive-projector.name = Urychlující projektor block.force-projector.name = Silový projektor -block.arc.name = Oblouk +block.arc.name = Výboj block.rtg-generator.name = RTG block.spectre.name = Přízrak block.meltdown.name = Rozpékač @@ -1140,6 +1216,11 @@ block.payload-router.name = Směřovač nákladu block.disassembler.name = Rozebírač block.silicon-crucible.name = Tavicí tyglík pro křemík block.overdrive-dome.name = Velká urychlující kupole +#experimental, may be removed +block.block-forge.name = Výheň bloků +block.block-loader.name = Nakladač bloků +block.block-unloader.name = Vykladač bloků +block.interplanetary-accelerator.name = Meziplanetární urychlovač block.switch.name = Přepínač block.micro-processor.name = Mikroprocesor @@ -1166,10 +1247,10 @@ tutorial.drill.mobile = Sám vidíš, že ruční těžba není moc efektivní.\ tutorial.blockinfo = Každý blok má jiné vlastnosti. Každý vrt může těžit pouze některé suroviny.\nPro zobrazení informací a statistik o bloku [accent]zvol "?" při vybraném bloku ve stavební nabídce[].\n\nNyní se podívej na [accent]vlastnosti mechanického vrtu[]. tutorial.conveyor = Pro dopravu materiálu k jádru jsou zapotřebí [accent]dopravníky[].\nVytvoř řadu dopravníků od vrtu až k jádru.\nDrž zmáčknuté [accent]levé tlačítko myši[], abys umístil dopravníky v jedné řadě.\nKdyž zmáčkneš [accent]Ctrl[], řada dopravníků se bude umisťovat navíc úhlopříčně.\nPoužij [accent]kolečko myši[] pro otáčení bloku před umístěním.\n[accent]Umísti dopravníky tak, abys dopravil měď do jádra[]. tutorial.conveyor.mobile = Pro dopravu materiálu k jádru jsou zapotřebí [accent]dopravníky[].\nVytvoř řadu dopravníků od vrtu až k jádru.\n[accent]Pokládej dopravníky v řadě ťupnutím a delším prstu[] a táhnutím v požadovaném směru.\n[accent]Umísti dopravníky tak, abys dopravil měď do jádra[]. -tutorial.turret = Jakmile se materiál dostane do jádra, může být použit pro stavbu.\nPamatuj si, že ne všechno lze použít pro stavbu.\nVěci, které melze použít jako stavební materiál, jako například [accent]uhlí[] nebo [accent]šrot[], nelze do jádra uložit, a zasekne tak celý dopravník na vstupu.\nPro odehnání útočných jednotek [lightgray]nepřítele[] od jádra je třeba postavit obranné stavby.\nPostav [accent]střílnu Duo[] poblíž svého jádra. +tutorial.turret = Jakmile se materiál dostane do jádra, může být použit pro konstrukci.\nPamatuj si, že ne všechno lze použít pro konstrukci.\nVěci, které melze použít jako stavební materiál, jako například [accent]uhlí[] nebo [accent]šrot[], nelze do jádra uložit, a zasekne tak celý dopravník na vstupu.\nPro odehnání útočných jednotek [lightgray]nepřítele[] od jádra je třeba postavit obranné konstrukce.\nPostav [accent]střílnu Duo[] poblíž svého jádra. tutorial.drillturret = Střílny Duo potřebují jako střelivo [accent]měď[].\nPolož mechanický vrt blízko střílny.\nPro zásobování mědí veď dopravníky od vrtu ke střílně.\n\n[accent]Doručeno střeliva: {0}/{1}[] -tutorial.pause = Během hry, například v boji, můžeš [accent]pozastavit hru[].\nPři pozastavení můžeš naplánovat stavbu do fronty.\n\n[accent]Pozastav hru mezerníkem[]. -tutorial.pause.mobile = Během hry, například v boji, můžeš [accent]pozastavit hru[].\nPři pozastavení můžeš naplánovat stavbu do fronty.\n\n[accent]Pozastavení hry probedeš ťupnutím na dvě čárky vlevo nahoře. +tutorial.pause = Během hry, například v boji, můžeš [accent]pozastavit hru[].\nPři pozastavení můžeš naplánovat konstrukci do fronty.\n\n[accent]Pozastav hru mezerníkem[]. +tutorial.pause.mobile = Během hry, například v boji, můžeš [accent]pozastavit hru[].\nPři pozastavení můžeš naplánovat konstrukci do fronty.\n\n[accent]Pozastavení hry probedeš ťupnutím na dvě čárky vlevo nahoře. tutorial.unpause = Teď zmáčkni mezerník znova a pokračuj ve hře. tutorial.unpause.mobile = Teď ťupni na ikonu na stejném místě a pokračuj ve hře. tutorial.breaking = Bloky je třeba nejen stavět, ale Často rozbít.\n[accent]Drž pravé tlačítko myšu[] a táhni s ní pro výběr bloků, které potřebuješ rozbít.\n\n[accent]Znič všechen šrot vlevo od Tvého jádra použitím blokového výběru[]. @@ -1180,136 +1261,207 @@ tutorial.waves = [lightgray]Nepřítel[] se přibližuje.\n\nUbraň své jádro tutorial.waves.mobile = [lightgray]Nepřítel[] se přibližuje.\n\nUbraň své jádro po dobu 2 vln. Tvá loď bude automaticky střílet po nepřátelských jednotkách.\nPostav více střílen a vrtů. Natěž více mědi. tutorial.launch = Jakmile dosáhneš určité vlny, budeš moci [accent]vyslat své jádro zpět[]. Opustíš tím svou základnu a [accent]získáš suroviny uložené v jádře[].\nZískané suroviny mohou být použity pro výzkum nových technologií.\n\n[accent]Stiskni tlačítko pro vyslání jádra zpět[]. -item.copper.description = Nejběžnější stavební materiál. Používá se ve všech typech bloků. -item.lead.description = Základní materiál. Používá se v energetických blocích a při přepravě kapalin. -item.metaglass.description = Velmi tvrdá skleněná sloučenina. Hodně používaná pro ukládání a rozvod kapalin. -item.graphite.description = Mineralizovaný uhlík, používaný v energetických komponentách a též jako munice. -item.sand.description = Běžný materiál, který se hojně používá při slévání a tavení. -item.coal.description = Zkamenělé rostliny, zformované dávno před vznikem mapy. Používané běžně jako palivo a pro vyrobu dalších materálů. -item.titanium.description = Vzácný, velice lehký kov, využívaný hojně při přepravě kapalin, ve vrtech a při výrobě letových strojů. -item.thorium.description = Hutný, radioaktivní materiál, využívaný jako strukturální podpora a nuklearní palivo. -item.scrap.description = Zbytky starých struktur a jednotek. Obsahuje stopové množství mnoha různých kovů. -item.silicon.description = Extrémně užitečný polovodič. Využívá se v solárních panelech, pokročilých energetických blocích a jako munice do samonaváděcích střel ve střílnách. -item.plastanium.description = Lehký, kujný materiál, využívaný v pokročilém letectví a jako tříštivá munice. -item.phase-fabric.description = Takřka nehmotná substance používaná v pokročilých energetických blocích a v samoopravných technologiích. -item.surge-alloy.description = Vyspělá slitina s jedinečnými energetickými vlastnostmi. -item.spore-pod.description = Umělé spór, syntetizované pro průmyslové účely z atmosférických koncentrací. Jejich využití spočívá v přeměně na naftu, výbušniny a jako palivo. -item.blast-compound.description = Nestálá směs používaná v bombách a výbušninách. Syntetizuje se ze spórových tobolek a těkavých substancí. Nedoporučuje se využívat jako palivo. -item.pyratite.description = Extrémně vznětlivá substance, používaná ve zápalném střelivu. -liquid.water.description = Nejužitečnější kapalina. Hojně využívaná jak chlazení do strojů a též pro výrobu spór. -liquid.slag.description = Různé různé druhy roztaveného kovu smíchané dohromady. Lze je rozdělit na jednotlivé minerály, nebo se tato slitina dá použít jako munice při střílení na nepřátelské jednotky. -liquid.oil.description = Kapalina použitá při pokročilé výrobě materiálů. Může být přeměněna na uhlí, nebo při rozprášení a zapálení použita jako zbraň. -liquid.cryofluid.description = Netečná, nereznoucí kapalina, vytvořená z vody a titanu. Má extrémně vysokou tepelnou kapacitu. Hojně se používá jako chladicí kapalina. +item.copper.description = Používá se ve všech typech bloků a munice. +item.copper.details = Měď. Nezvykle nadpočetný kov na Serpulu. Konstrukčně slabý, pokud není rafinovaná. +item.lead.description = Používá se v přepravě kapalin a elektrických konstrukcích. +item.lead.details = Hutný, netečný materiál. Hojně používán v bateriích.\nPoznámka: Pravděpodobně toxický pro biologické formy života. Ne že by jich tady moc zbývalo. +item.metaglass.description = Používá se v přepravě kapalin a úložných konstrukcích. +item.graphite.description = Používá se v elektrických komponentách a nábojích do věží. +item.sand.description = Používá se ve výrobě ostatních rafinovaných materiálů. +item.coal.description = Používá se na palivo a výrobu rafinovaný materiálů. +item.coal.details = Jeví se být zkamenělou rostlinou hmotou, zformovaou dávno před událostí vytvoření tohoto světa náhodným číslem. +item.titanium.description = Používá se v konstrukcích pro přepravu kapalin, ve vrtácích a letectví. +item.thorium.description = Používá se v bytelných konstrukcích a též jako nukleární palivo. +item.scrap.description = Používá se v tavičích a drtičích pro rafinaci na jiné materiály. +item.scrap.details = Zbytky zbytků starých konstrukcí a jednotek. +item.silicon.description = Používá se v solárních panelech, komplexní elektronice a samonaváděcích střelách do obraných věží. +item.plastanium.description = Používá se v pokročilých jednotkách, izolaci a tříštivé munici. +item.phase-fabric.description = Používá se v pokročilé elektronice a samoopravných konstrukcích. +item.surge-alloy.description = Používá se v pokročilém zbrojnictví a reakčních obranných konstrukcích. +item.spore-pod.description = Používá se pro přeměnu na ropu, výbušniny a palivo. +item.spore-pod.details = Spóry. Pravděpodobně syntetická forma života. Vydává plyn toxický pro jiné formy života. Extrémně invazivní. Vysoce hořlavý za určitých podmínek. +item.blast-compound.description = Používá se v bombách a výbušné munici. +item.pyratite.description = Používá se v zápalných zbraních a spalovacích generátorech. -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ů grafitu. -block.multi-press.description = Vylepšená verze lisu na grafit. Využívá vodu a energii k rychlejšímu a efektivnějšímu zpracování uhlí. -block.silicon-smelter.description = Redukuje písek vyčištěným uhlím, čímž vyrábí křemík. -block.kiln.description = Taví písek a olovo na směs známou jako metasklo. Vyžaduje k běhu malé množství energie. -block.plastanium-compressor.description = Produkuje plastanu z titanu a nafty. -block.phase-weaver.description = Produkuje fázovou tkaninu z radioaktivního thoria a písku. Spotřebuje k tomu výrazné množství energie. -block.alloy-smelter.description = Produkuje rázovou slitinu z titanu, olova, křemíku a mědi. -block.cryofluid-mixer.description = Míchá vodu a jemný titanová prášek do chladící kapaliny, nezbytné například pro thoriový reaktor. -block.blast-mixer.description = Drtí a míchá shluky spór s pyratitem, čímž vzniká výbušnina. -block.pyratite-mixer.description = Míchá uhlí, olovo a písek do vysoce hořlavého pyratitu. -block.melter.description = Taví šrot do roztaveného kovu pro další zpracování, nebo pro munici do střílny Vlna. -block.separator.description = Odděluje z roztaveného kovu jednotlivé minerální součásti, které na výstupu zchlazuje do pevné formy. -block.spore-press.description = Lisuje ze spór pod enormním tlakem naftu. +liquid.water.description = Používá se pro chladící stroje a na zpracování odpadu. +liquid.slag.description = Používá se v oddělovačích pro rozdělení na jednotlivé kovy, nebo je chrlena na protivníky z věží. +liquid.oil.description = Používá se v pokročilé materiálové výrobě a jako zápalná munice. +liquid.cryofluid.description = Používá se jako chladící kapalina v reaktorech, věžích a továrnách. + +block.resupply-point.description = Zásobuje okolní jednotky měděnou municí. Není kompatibilní s jednotkami, které vyžadují energii z baterie. +block.armored-conveyor.description = Přepravuje předměty vpřed. Nepřijímá předměty ze stran. +block.illuminator.description = Vydává světlo. +block.message.description = Ukládá zprávu pro komunikaci mezi spojenci. +block.graphite-press.description = Lisuje uhlí na grafit. +block.multi-press.description = Lisuje uhlí na grafit. Vyžaduje vodu jako chladivo. +block.silicon-smelter.description = Rafinuje křemík z písku a uhlí. +block.kiln.description = Taví písek a olovo na metasklo. +block.plastanium-compressor.description = Produkuje plastan z titanu a nafty. +block.phase-weaver.description = Syntetizuje fázovou tkaninu z thoria a písku. +block.alloy-smelter.description = Taví titan, olovo, křemík a měď na rázovou slitinu. +block.cryofluid-mixer.description = Míchá vodu a jemný titanová prášek na chladící kapalinu. +block.blast-mixer.description = Vyrábí výbušninu z pyratitu a shluků spór. +block.pyratite-mixer.description = Míchá uhlí, olovo a písek na pyratit. +block.melter.description = Taví šrot na strusku. +block.separator.description = Odděluje ze strusky jednotlivé minerální součásti. +block.spore-press.description = Lisuje skluhy spór na naftu. block.pulverizer.description = Drtí šrot na jemný písek. -block.coal-centrifuge.description = Tuhne naftu do kusů uhlí. -block.incinerator.description = Vypaří jakékoliv nadbytečné předměty nebo kapaliny, které mu pošleš. -block.power-void.description = Zničí jakoukoliv energii, kterou bloku pošleš. Jen pro režim Pískoviště. -block.power-source.description = Nekonečný zdroj energie. Jen pro Pískoviště. -block.item-source.description = Nekonečný zdroj předmětů. Jen pro Pískoviště. -block.item-void.description = Zničí jakýkoliv vstupní předmět, který bloku pošleš. Jen pro Pískoviště. -block.liquid-source.description = Nekonečný zdroj kapalin. Jen pro Pískoviště. -block.liquid-void.description = Zničí jakoukoliv kapalinu, kterou bloku pošleš. Jen pro Pískoviště. -block.copper-wall.description = Levný obranný blok.\nUžitečný k obraně Tvého jádra a střílen pro prvních několik vln nepřátel. -block.copper-wall-large.description = Levný obranný blok.\nUžitečný k obraně Tvého jádra a střílen pro prvních několik vln nepřátel.\nZabírá více dlaždic. -block.titanium-wall.description = Středně silný obranný blok.\nPoskytuje středně dobrou obranu proti nepřátelům. -block.titanium-wall-large.description = Středně silný obranný blok.\nPoskytuje středně dobrou obranu proti nepřátelům.\nZabírá více dlaždic. -block.plastanium-wall.description = Speciální typ zdi, která je schopná absorbovat energetické výboje a blokuje automaticky energetické vedení, například mezi uzly. -block.plastanium-wall-large.description = Speciální typ zdi, která je schopná absorbovat energetické výboje a blokuje automaticky energetické vedení, například mezi uzly.\nZabírá více dlaždic. -block.thorium-wall.description = Silný obranný blok.\nSlušná obrana před nepřáteli. -block.thorium-wall-large.description = Silný obranný blok.\nSlušná obrana před nepřáteli.\nZabírá více dlaždic. -block.phase-wall.description = Zeď potažená speciální odrazivou sloučeninou na fázové bázi. Odráží při nárazu většinu střel. -block.phase-wall-large.description = Zeď potažená speciální odrazivou sloučeninou na fázové bázi. Odráží při nárazu většinu střel.\nZabírá více dlaždic. -block.surge-wall.description = Extrémně odolný obranný blok.\nPři zásahu střelou akumuluje energii, kterou pak náhodně uvolňuje ve formě výboje. -block.surge-wall-large.description = Extrémně odolný obranný blok.\nPři zásahu střelou akumuluje energii, kterou pak náhodně uvolňuje ve formě výboje.\nZabírá více dlaždic. -block.door.description = Malé dveře, které se dají otevřít nebo zavřít kliknutím/tupnutím na ně. -block.door-large.description = Velké dveře, které se dají otevřít nebo zavřít kliknutím/ťupnutím na ně.\nZabírají více dlaždic. -block.mender.description = Pravidelně opravuje bloky ve svém poli působnosti. Dobré pro opravu obranného systému mezi vlnami.\nVolitelně lze využít křemíku pro posílení dosahu a efektivity. -block.mend-projector.description = Vylepšená verze Opraváře. Opravuje bloky ve svém poli působnosti.\nVolitelně lze využít fízové tkaniny pro posílení dosahu a efektivity. -block.overdrive-projector.description = Zrychluje funkce budov v okolí.\nVolitelně lze využít křemíku pro posílení dosahu a efektivity. -block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, které chrání jednotky a budovy uvnitř před poškozením.\nPokud dostane moc poškození, tak se přehřeje. Volitelně lze použít chlazení pro snížení přehřívání a fázové tkaniny pro zvětšené dosahu štítu. -block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Takřka neviditelné pro nepřátele (a i v nabídce bloků :) ). -block.conveyor.description = Základní blok pro přepravu předmětů. Unáší předměty kupředu a automaticky plní vhodná úložiště (budovy, kontejnery, jádro), které po cestě potká. Lze jej otáčet dle potřeby. -block.titanium-conveyor.description = Pokročilý blok pro přepravu předmětů. Přenáší předměty rychleji, než základní dopravník. -block.plastanium-conveyor.description = Přesouvá položky v dávkích.\nPřijímá položky zezadu, a vykládá je do tří směrů vepředu.\nPro špičkový průchod vyžaduje několik nakládacích a vykládacích míst. -block.junction.description = Chová se jako most pro dva křížící se pásy dopravníků. Užitečný při situaci, kdy dva rozdílné dopravníky dopravují dva rozdílné materiály přes jedno pole. -block.bridge-conveyor.description = Pokročilý blok pro přepravu předmětů. Dovoluje transport předmětů až přes tři pole, a to přes jakýkoliv terén nebo budovu. -block.phase-conveyor.description = Pokročilý blok pro přepravu předmětů. Využívá energii k teleportaci předmětů na vzdálenost několika dlaždic mezi jiným propojeným fázovým dopravníkem. -block.sorter.description = Třídí předměty. Pokud je předmět shodný s výběrem, je poslán rovně dál. Jinak je předmět je odbočen do strany. -block.inverted-sorter.description = Třídí předměty. Pokud je předmět shodný s výběrem, je odbočen do strany. Jinak je předmět je poslán rovně dál. -block.router.description = Přijímá předměty z jednoho směru a posílá je rovnoměrně do zbylých tří směrů. Užitečný pro rozdělení předmětů z jednoho zdroje do různých cílů, jako odbočení z dopravníků a podobně.\n\n[scarlet]Pozor, nepoužívejte pro vstup do produkční budovy, jinak se bude ucpávat výstupními předměty[]. -block.distributor.description = Pokročilý směrovač. Rozděluje předměty rovnoměrně až do 7 dalších směrů. -block.overflow-gate.description = Předměty jsou poslány do strany, pokud je směr vpřed zablokován. Užitečné například pro zpracování přebytečného materiálu, pokud je primární příjemce saturován. -block.underflow-gate.description = Předměty jsou poslány vpřed, pokud je směr do strany zablokován. Užitečné například pro zpracování přebytečného materiálu, pokud je primární příjemce saturován. -block.mass-driver.description = Ultimátní blok pro přepravu předmětů. Sebere několik předmětů a vystřelí je k dalšímu hromadnému směřovači přes několik dlaždic. Vyžaduje ke své funkci energii. -block.mechanical-pump.description = Levné čerpadlo s pomalým průtokem, nevyžaduje však energii k provozu. -block.rotary-pump.description = Pokročilé čerpadlo, které za pomoci energie vyčerpá větší množství kapalin, než standardní. -block.thermal-pump.description = Ultimátní čerpadlo. Nejrychlejší čerpání kapalin. -block.conduit.description = Základní blok pro přepravu kapalin. Unáší kapaliny vpřed. Používá se s čerpadly, v některých vrtech a nebo ve spojení s jiným potrubím. -block.pulse-conduit.description = Pokročilý blok přepravy kapalin. Přepravuje kapaliny rychleji a má větší kapacitu, než základní potrubí. -block.plated-conduit.description = Přenáší kapaliny stejně rychle jako pulzní potrubí, ale díky oplátování má větší výdržnost. Ze stran přijímá kapaliny pouze z dalších potrubí.\nV případě poškození má menší ztrátu kapaliny. -block.liquid-router.description = Přijímá kapaliny z jednoho směru a vypouští je rovnoměrně do zbylých tří směrů. Dokáže pojmout i určitý objem kapalin do vnitřího úložiště. Používá se při rozdělení kapaliny z jednoho zdroje směřující do různých cílů. -block.liquid-tank.description = Ukládá velké množství kapalin. Používá se pro vyrovnávání zásob vody, když je přítok nestabilní nebo jako záložní chlazení pro životně důležité stavby. -block.liquid-junction.description = Chová se jako most pro dvě křížící se potrubí. Používá se v situacích, kdy dvě rozdílná potrubí vedou rozdílný obsah přes jedno místo. -block.bridge-conduit.description = Pokročilý blok přepravy kapalin. Dovoluje přenášet kapaliny přes tři dlaždice napříč jakýmkoliv terénem nebo přes budovy. -block.phase-conduit.description = Pokročilý blok pro přepravu kapalib. Využívá energii k teleportaci kapalin na vzdálenost několika dlaždic mezi jiným propojeným fázovým potrubím. +block.coal-centrifuge.description = Přetváří naftu na uhlí. +block.incinerator.description = Vypařuje jakékoliv předměty nebo kapaliny, které obdrží. +block.power-void.description = Zničí jakoukoliv energii na vstupu. Jen v režimu Pískoviště. +block.power-source.description = Nekonečný zdroj energie. Jen v režimu Pískoviště. +block.item-source.description = Nekonečný zdroj předmětů. Jen v režimu Pískoviště. +block.item-void.description = Zničí jakýkoliv vstupní předmět, který bloku pošleš. Jen v režimu Pískoviště. +block.liquid-source.description = Nekonečný zdroj kapalin. Jen v režimu Pískoviště. +block.liquid-void.description = Zničí jakoukoliv kapalinu, kterou bloku pošleš. Jen v režimu Pískoviště. +block.copper-wall.description = Chrání konstrukce před nepřátelskými střelami. +block.copper-wall-large.description = Chrání konstrukce před nepřátelskými střelami. +block.titanium-wall.description = Chrání konstrukce před nepřátelskými střelami. +block.titanium-wall-large.description = Chrání konstrukce před nepřátelskými střelami. +block.plastanium-wall.description = Chrání konstrukce před nepřátelskými střelami. Pohlcuje laserové a elektrické výboje. Automaticky blokuje energetické spoje. +block.plastanium-wall-large.description = Chrání konstrukce před nepřátelskými střelami. Absorbs lasers and electric arcs. Automaticky blokuje energetické spoje. +block.thorium-wall.description = Chrání konstrukce před nepřátelskými střelami. +block.thorium-wall-large.description = Chrání konstrukce před nepřátelskými střelami. +block.phase-wall.description = Chrání konstrukce před nepřátelskými střelami, reflecting most bullets upon impact. +block.phase-wall-large.description = Chrání konstrukce před nepřátelskými střelami, reflecting most bullets upon impact. +block.surge-wall.description = Chrání konstrukce před nepřátelskými střelami. Při doteku opakovaně vydává elektrické výboje. +block.surge-wall-large.description = Chrání konstrukce před nepřátelskými střelami. Při doteku opakovaně vydává elektrické výboje. +block.door.description = Zeď, která může být otevřena a zavřena. +block.door-large.description = Zeď, která může být otevřena a zavřena. +block.mender.description = Opakovaně opravuje bloky ve svém dosahu.\nVolitelně umí použít křemík pro posílení dosahu a efektivity. +block.mend-projector.description = Opakovaně opravuje bloky ve svém dosahu.\nVolitelně umí použít fázovou tkaninu pro posílení dosahu a efektivity. +block.overdrive-projector.description = Zrychluje funkce budov v okolí.\nVolitelně umí využít fázovou tkaninu pro posílení dosahu a efektivity. +block.force-projector.description = Vytváří okolo sebe šestiúhelníkové silové pole. Chrání konstrukce a jednotky uvnitř pole před poškozením.\nPřehřívá se, pokud obdrží moc poškození. Přehřátí lze eliminovat použitím chlazení. Fázová tkanina zvyšje velikost pole. +block.shock-mine.description = Vydává elektrické výboje při dotyku nepřátelskou jednotkou. +block.conveyor.description = Přepravuje předměty vpřed. +block.titanium-conveyor.description = Přepravuje předměty vpřed. Rychlejší, než standardní dopravník. +block.plastanium-conveyor.description = Přepravuje předměty vpřed in batches. Přijímá předměty zezadu, a vykládá je do tří směrů vpředu. Vyžaduje více nakládacích a vykládacích bodů pro špičkový průtok. +block.junction.description = Funguje jako most pro dva křížící se dopravníky. +block.bridge-conveyor.description = Přepravuje předměty přes terén nebo budovy. +block.phase-conveyor.description = Okamžitě přepravuje předměty přes terén nebo budovy. Má delší dosah než standardní přemostění přepravníku, ale vyžaduje energii. +block.sorter.description = Pokud vstupní položka odpovídá výběru, je předána vpřed. Jinak je vyložena napravo a nalevo. +block.inverted-sorter.description = Podobné stanrdardní třídičce, ale vykládá vybrané položky do stran. +block.router.description = Rozděluje vstupní položky rovnoměrně do tří výstupů. +block.router.details = Nezbytné zlo. Použití hned u produkčních vstupů se nedoporučuje, protože budou ucpány výstupnímk položkami. +block.distributor.description = Rozděluje vstupní položky rovnoměrně do sedmi výstupů. +block.overflow-gate.description = Pokud je směr vpřed ucpán, posílá vstupní položky do stran. Nelze použít vedle jiné brány. +block.underflow-gate.description = Pokud je směr do stran ucpán, posílá vstupní položky vpřed. Nelze použít vedle jiné brány. +block.mass-driver.description = Konstrukce pro přepravu položek na velkou vzdálenost. Sesere dávku položek a vystřelí ji k dalšímu hromadnému přenašeči. +block.mechanical-pump.description = Pumpuje kapalinu a předává ji dál. Nevyžaduje energii. +block.rotary-pump.description = Pumpuje kapalinu a předává ji dál. Vyžaduje energii. +block.thermal-pump.description = Pumpuje kapalinu a předává ji dál. +block.conduit.description = Přepravuje kapaliny vpřed. Používá se spolu s pumpami a dalším potrubím. +block.pulse-conduit.description = Přepravuje kapaliny vpřed. Přepravuje kapaliny rychleji a ukládá jich více, než standadní potrubí. +block.plated-conduit.description = Přepravuje kapaliny vpřed. Nepřijímá kapaliny ze stran. Nemá úniky. +block.liquid-router.description = Přijímá kapalinu z jednoho směru a vydává ji rovnomerně do tří ostatních stran. Umí též uchovat malé množství kapaliny. +block.liquid-tank.description = Ukládá velké množství kapaliny. Předává ji do stran, podobně jako směřovač kapalin. +block.liquid-junction.description = Funguje jako most pro dvě křížící se potrubí. +block.bridge-conduit.description = Přepravuje kapalinu přes terén a budovy. +block.phase-conduit.description = Přepravuje kapalinu přes terén a budovy. Má delší dosah než standardní přemostění potrubí, ale vyžaduje energii. block.power-node.description = Přenáší energii mezi propojenými uzly. Uzel získává energii z nebo dodává energii do bloků ve svém poli působnosti. block.power-node-large.description = Pokročilý energerický uzel. Má větší dosah než základní uzel. -block.surge-tower.description = Energetický uzel s extrémním dosahem, ale méně dostupnými přípojkami pro ostatní bloky, než ostatní uzly. -block.diode.description = Energie z baterie přes tento blok protéká jen jedním směrem, a to jen za podmínky, že a druhé straně je méně energie (například vybitá baterie). -block.battery.description = Ukládá energii v případě nadbytku v síti a poskytuje energii kdykolik, když se energetické síti nedostává (záporný rozdíl). -block.battery-large.description = Ukládá více energie, než základní baterie. +block.surge-tower.description = Energetický uzel s dlouhým dosahem, ale méně dostupnými přípojkami pro ostatní bloky, než ostatní uzly. +block.diode.description = Energie z baterie přes tento blok protéká jen jedním směrem, a to jen za podmínky, že na druhé straně je méně energie (například vybitá baterie). +block.battery.description = Ukládá energii v případě nadbytku v síti a poskytuje energii kdykolik, když se energetické síti nedostává. +block.battery-large.description = Ukládá energii v případě nadbytku v síti a poskytuje energii kdykolik, když se energetické síti nedostává. Ukládá více energie než základní baterie. block.combustion-generator.description = Generuje energii spalováním hořlaných materiálů, jako je například uhlí. block.thermal-generator.description = Pokud je umístěn na teplotně aktivní místo (jako je magmatický kámen), dokáže z tepla generovat energii. -block.steam-generator.description = Pokročilý spalovací generátor. Efektivnější, ale vyžaduje dodatečný přísun vody pro produkci páry. +block.steam-generator.description = Vytváří energii spalováním hořlavých materiálů a měněním vody na páru. 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 = Radioizotopní termoenergetický generátor (RTG) je jednoduchý, spolehlivý generátor. Využívá tepla z rozpadu radioaktivních složek ke generování menších dávek energie. -block.solar-panel.description = Základní solární panel pro generování malého množství energie ze Slunce. -block.solar-panel-large.description = Výrazně efektivnější verze solárního panelu pro generování energie ze Slunce. -block.thorium-reactor.description = Generuje významné množství energie z thoria. Vyžaduje nepřetržité chlazení. Je-li chlazen nedostatečně, způsobí značnou explozi. Výstup energie závisí na míře naplnění generátoru, základní generování energie se aktivuje při plné kapacitě. -block.impact-reactor.description = Vyspělý generátor, schopný vytvářet při maximálním výkonu obrovská množství energie. Vyžaduje však značné množství energie pro nastartování celého procesu. -block.mechanical-drill.description = Levný vrt. Při položení na vhodné pole (ruda, písek) natrvalo a pomalu produkuje odpovídající materiál. Umí těžit jen základní rudy. +block.rtg-generator.description = Používá teplo z rozpadajících se radioaktivních materiálů k výrobě energie v malých dávkách. +block.solar-panel.description = Vytváří malého množství energie ze Slunce. +block.solar-panel-large.description = Vytváří malého množství energie ze Slunce. Efektivnější, než základní solárí panel. +block.thorium-reactor.description = Generuje významné množství energie z thoria. Vyžaduje nepřetržité chlazení. Je-li chlazen nedostatečně, způsobí značnou explozi. +block.impact-reactor.description = Vytváří při špičkové účinnosti velké množství energi. Vyspělý generátor, schopný vytvářet při maximálním výkonu obrovská množství energie. Vyžaduje však značné množství energie pro nastartování celého procesu. +block.mechanical-drill.description = Když je umístěn na rudu, generuje donekonečna odpovídající položky, pomalou rychlostí. Použitelný jen pro těžení základních surovin. block.pneumatic-drill.description = Vylepšený vrt, který je schopen těžit i titan. Těží vyšší rychlostí než mechanický vrt. block.laser-drill.description = Vrtá rychleji než penumatický vrt díky laserové technologii, ale vyžaduje ke svému fungování energii. Dokáže navrtat i rudné žíly thoria. block.blast-drill.description = Ultimátní vrt, vyžadující k provozu značné množství energie. block.water-extractor.description = Extrahuje podzemní vodu. Vhodný pro místa, kde se nevyskytuje povrchová voda. -block.cultivator.description = Kultivuje drobounké koncentrace spór v atmosféře do formy vhodné pro průmyslové využití spór. +block.cultivator.description = Kultivuje drobounké koncentrace atmosférických spór do spórových polštářků. +block.cultivator.details = Zachráněná technologie. Používá se k výrobě obrovského množství biomasy tak efektivně, jak jen to jde. Pravděpodobně se původně jednalo o inkubátor spó, které nyní pokrývají Serpulo. block.oil-extractor.description = Vyžaduje značné množství energie, písku a vody na těžení nafty. -block.core-shard.description = První verze jádra. Pokud je zničeno, veškerý kontakt s mapou je ztracen. Nedopusť, aby se to stalo. -block.core-foundation.description = Druhá cerze jádra. Je lépe obrněná a pojme více surovin. -block.core-nucleus.description = Třetí a konečná iterace vývoje jádra. Velmi dobře obrněná. Dokáže skladovat významné množství zdrojů. +block.core-shard.description = Jádro základny. Pokud je zničena, sektor je ztracen. +block.core-shard.details = První iterace. Kompaktní. Sebereplikující. Vybavená vysílacím pohonem na jedno použití. Není navržena pro meziplanetární cestování. +block.core-foundation.description = Jádro základny. Dobře opevněná. Pojme více surovin, než základna Odstěpek. +block.core-foundation.details = Druhá iterace. +block.core-nucleus.description = Jádro základny. Velmi dobře opevněná. Dokáže skladovat enormní množství zdrojů. +block.core-nucleus.details = Třetí a konečná iterace vývoje jádra. block.vault.description = Ukládá velké množství předmětů od každého typu. K vyskladnění věcí z trezoru je možné použít odbavovač. block.container.description = Ukládá menší množství předmětů od každého typu. K vyskladnění věcí z kontejneru je možné použít odbavovač. -block.unloader.description = Vyskladňuje předměty z kontejneru, trezoru nebo jádra na dopravník nebo přímo do produktivních bloků. Druh předmětu pro vyskladnění lze nastavit kliknutím nebo ťupnutím na odbavovač. -block.launch-pad.description = Vysílá dávky předmětů z mapy bez nutnosti vyslat zpět jádro. -block.launch-pad-large.description = Vylepšená verze vysílací plošiny. Má větší úložný prostor a vysílá předměty z mapy častěji. -block.duo.description = Malá, levná střílna. Užitečná proti pozemním jednotkám. -block.scatter.description = Základní protivzdušná střílna. Střílí kusy olova, pláty šrotu nebo střepy metaskla na nepřátelské jednotky. +block.unloader.description = Vyskladňuje vybrané položky z okolních bloků. +block.launch-pad.description = Vysílá dávky předmětů do přilehlých sektorů. +block.duo.description = Střílí střídavé dávky kulek na nepřátele. +block.scatter.description = Střílí kusy olova, pláty šrotu nebo střepy metaskla na nepřátelské letectvo. block.scorch.description = Sežehne pozemní jednotky blízkosti. Velmi efektivní na malé vzdálenosti. -block.hail.description = Malá dělostřelecká střílna na delší vzdálenosti. -block.wave.description = Středně velká střílna. Pálí po nepřítelích proudy kapaliny (například roztaveného kovu). Umí automaticky uhasit oheň, pokud je zásobena vodou. -block.lancer.description = Středně velká střílna proti pozemním jednotkám. Po nabití se střílí mocné energetické paprsky. -block.arc.description = Malá energetická střílna. Pálí výboje po nepřátelských jednotkách. -block.swarmer.description = Středně velká střílna s raketami. Útočí na pozemní i vzdušné cíle. Pálí samonaváděcí střely. -block.salvo.description = Větší, pokročilejší verze střílny Duo. Pálí na nepřátele rychlé dávky střel. -block.fuse.description = Velká střílna s krátkým dosahem. Pálí trojici pronikavých výbuchů na blízké nepřátele. -block.ripple.description = Extrémně silná dělostřelecká střílna. Pálí na dálku shluky střel na nepřátelské jednotky. -block.cyclone.description = Velká protiletecká a protipozemní střílna. Pálí explodující dávky na nepřítele v okolí. -block.spectre.description = Velká střílna s kanónem s dvěma hlavněmi. Střílí velké náboje, které pronikají brněním jak pozemních, tak vzdušných nepřátelských cílů. -block.meltdown.description = Masivní laserový kanón. Nabije se a pak pálí nepřetržitý laserový paprsek na nepřátele v okolí. Vyžaduje ke své funkci chlazení. -block.repair-point.description = Nepřetržitě léčí nejbližší poškozenou jednotku v poli své působnosti. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.hail.description = Střílí na dálku malé patrony na pozemní nepřátele. +block.wave.description = Střílí po nepřátelích proudy kapaliny (například strusky). Umí automaticky uhasit oheň, pokud je zásobena vodou. +block.lancer.description = Po nabití střílí mocné energetické paprsky na pozemní cíle. +block.arc.description = Střílí výboje po pozemních jednotkách. +block.swarmer.description = Střílí po nepřátelích samonaváděcí střely. +block.salvo.description = Střílí na nepřátele rychlé dávky střel. +block.fuse.description = Střílí trojici pronikavých výbuchů na blízké nepřátele. +block.ripple.description = Střílí na dálku shluky střel na pozemní jednotky. +block.cyclone.description = Střílí vybuchující dávky na blízké nepřátele. +block.spectre.description = Střílí velké náboje, které pronikají brněním jak pozemních, tak vzdušných cílů. +block.meltdown.description = Po nabití střílí nepřetržitý laserový paprsek na nepřátele v okolí. Vyžaduje ke své funkci chlazení. +block.repair-point.description = Nepřetržitě opravuje nejbližší poškozenou jednotku v poli své působnosti. +block.segment.description = Poškozuje a ničí příchozí střely. Laserové střely ale zacílit neumí. +block.parallax.description = Střílí tažný paprsek, který přitahuje vzdušné cíle, a poškozuje je. +block.tsunami.description = Střílí mocné proudy kapalin na nepřátele. Samočinně hasí oheň, pokud je zásobován vodou. +block.silicon-crucible.description = Rafinuje křemík z písku a uhlí za použití pyratitu jako přídavného zdroje tepla. Účinnější na horkých místech. +block.disassembler.description = Odděluje ze strusky stopové množství exotických minerálových součástí při malé účinnosti. Umí vyrobit thorium. +block.overdrive-dome.description = Zvyšuje rychlost okolních konstrukcí. Vyžaduje ke svému fungování fázovou tkaninu a křemík. +block.payload-conveyor.description = Přesouvá velké náklady, jako jednotky z továren. +block.payload-router.description = Rozděluje vstuní náklad na 3 výstupní směry. +block.command-center.description = Ovládá chování jednotky několika příkazy. +block.ground-factory.description = Vyrábí pozemní jednotky. Výstupní jednotky mohou být použity přímo, nebo přesunuty do přestavovačů na vylepšení. +block.air-factory.description = Vyrábí letecké jednotky. Výstupní jednotky mohou být použity přímo, nebo přesunuty do přestavovačů na vylepšení. +block.naval-factory.description = Vyrání námořní jednotky. Výstupní jednotky mohou být použity přímo, nebo přesunuty do přestavovačů na vylepšení. +block.additive-reconstructor.description = Vylepšuje vstupní jednotky na druhou úroveň. +block.multiplicative-reconstructor.description = Vylepšuje vstupní jednotky na třetí úroveň. +block.exponential-reconstructor.description = Vylepšuje vstupní jednotky na čtvrtou úroveň. +block.tetrative-reconstructor.description =Vylepšuje vstupní jednotky na pátou, konečnou úroveň. +block.switch.description = Přepínač. Jeho stav je možné číst a ovládat logickými procesory. +block.micro-processor.description = Spouští posloupnost logických instrukcí ve smyčce. Dá se použít k ovládání jednotek a konstrukcí. +block.logic-processor.description = Spouští posloupnost logických instrukcí ve smyčce. Dá se použít k ovládání jednotek a konstrukcí. Rychlejší než mikroprocesor. +block.hyper-processor.description = Spouští posloupnost logických instrukcí ve smyčce. Dá se použít k ovládání jednotek a konstrukcí. Rychlejší než logický procesor. +block.memory-cell.description = Ukládá informace z logického procesoru. +block.memory-bank.description = Ukládá informace z logického procesoru. Větší kapacita. +block.logic-display.description = Zobrazuje libovolnou grafiku z logického procesoru. +block.large-logic-display.description = Zobrazuje libovolnou grafiku z logického procesoru. +block.interplanetary-accelerator.description = Masivní elektromagnetická věž. Urychlí jádro na únikovou rychlost pro meziplanetární vyslání. + +unit.dagger.description = Střílí základní střely na všechny okolní nepřátele. +unit.mace.description = Střílí proudy ohně na všechny okolní nepřátele. +unit.fortress.description = Střílí dělostřelecké salvy na pozemní cíle. +unit.scepter.description = Střílí palbu nabitých střel na všechny okolní nepřátele. +unit.reign.description = Střílí palbu masivních střel pronikajících brněním na všechny okolní nepřátele. +unit.nova.description = Střílí laserové výboje, které poškozují nepřátele a opravují spojenecké konstrukce. Je schopný letu. +unit.pulsar.description = Střílí oblouky elektřiny, které poškozují nepřátele a opravují spojenecké struktury. Schopný letu. +unit.quasar.description = Střílí pronikavé laserové paprsky, které poškozují nepřátele a opravují spojenecké struktury. Schopný letu. Oštítovaný. +unit.vela.description = Střílí masivní nepřetržitý laserový paprsek, který poškozuje nepřátele, způsobuje požáry a opravuje spojenecké struktury. Schopný letu. +unit.corvus.description = Střílí masivní laserový paprsek, který poškozuje nepřátele a opravuje spojenecké struktury. Může překonat většinu z terénů. +unit.crawler.description = Běží směrem k nepřátelům, vybuchne a způsobí velkou explozi. +unit.atrax.description = Střílí oslabující koule strusky na pozemní cíle. Může překonat většinu z terénů. +unit.spiroct.description = Střílí mířené laserové paprsky na nepřátele, a zároveň se tím opravuje. Může překročit většinu terénu. +unit.arkyid.description = Střílí velké mířené laserové paprsky na nepřátele, a zároveň se tím opravuje. Může překročit většinu terénu. +unit.toxopid.description = Střílí na nepřátele velké elektrické kazetové střely a lasery pronikající brněním. Může překročit většinu z terénů. +unit.flare.description = Střílí základní střely na okolní nepřátele. +unit.horizon.description = Pouští shluky bomb na pozemní cíle. +unit.zenith.description = Střílí salvy raket na všechny blízké nepřátele. +unit.antumbra.description = Střílí palbu střel na všechny blízké nepřátele. +unit.eclipse.description = Vystřelí dva pronikavé lasery a záplavu protivzdušných střel na všechny blízké nepřátele. +unit.mono.description = Samočinně těží měď a olovo a ukládá je do jádra. +unit.poly.description = Samočinně obnovuje poškozené konstrukce a pomáhá ostatním jednotkám při stavbě. +unit.mega.description = Samočinně opravuje poškozené konstrukce. Je schopný přenést bloky a malé pozemní jednotky. +unit.quad.description = Pouští velké bomby na pozemní cíle, opravuje spojenecké konstrukce a poškozuje nepřátele. Je schopen přenést středně velké pozemní jednotky. +unit.oct.description = Chrání blízké spojence pomocí regeneračního štítu. Je schopen přenést většinu pozemních jednotek. +unit.risso.description = Střílí palbu raket a střel na všechny blízké nepřátele. +unit.minke.description = Střílí patrony a základní střely na blízké pozemní cíle. +unit.bryde.description = Střílí na nepřátele dělostřelecké granáty a rakety dlouhého doletu. +unit.sei.description = Střílí na nepřátele palbu raket a průbojných střel. +unit.omura.description = Střílí na nepřátele průrazné šrouby s dlouhým doletem. Vytváří jednotky Záře. +unit.alpha.description = Brání jádro Odštěpek před nepřáteli. Staví konstrukce. +unit.beta.description = Brání jádro Základ před nepřáteli. Staví konstrukce. +unit.gamma.description = Brání jádro Atom před nepřáteli. Staví konstrukce. diff --git a/core/assets/bundles/bundle_da.properties b/core/assets/bundles/bundle_da.properties index b65afebcd3..093abdc4be 100644 --- a/core/assets/bundles/bundle_da.properties +++ b/core/assets/bundles/bundle_da.properties @@ -55,6 +55,7 @@ schematic.saved = Skabelon gemt. schematic.delete.confirm = Denne skabelon vil være væk for altid. schematic.rename = Omdøb skabelon schematic.info = {0}x{1}, {2} blokke +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Invasionsbølger nedslået:[accent] {0} stat.enemiesDestroyed = Fjender nedlagt:[accent] {0} @@ -100,7 +101,6 @@ done = Færdig feature.unsupported = Din enhed understøtter ikke denne funktion mods.alphainfo = Vær opmærksom på at mods ikke er færdigudviklet.[scarlet]De kan indeholde mange fejl[].\n Hvis du oplever fejl can du reportére dem på Mindustry GitHub eller Discord. -mods.alpha = [accent](Alpha) mods = Mods mods.none = [LIGHT_GRAY]Ingen mods fundet! mods.guide = Modding guide @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Wave {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Wave in {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Waiting... waiting.players = Waiting for players... wave.enemies = [lightgray]{0} Enemies Remaining wave.enemy = [lightgray]{0} Enemy Remaining +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Load Image saveimage = Save Image unknown = Unknown @@ -328,6 +331,7 @@ editor.generation = Generation: editor.ingame = Edit In-Game editor.publish.workshop = Publish On Workshop editor.newmap = New Map +editor.center = Center workshop = Workshop waves.title = Waves waves.remove = Remove @@ -416,6 +420,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Ore Median @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Block filter.option.floor = Floor filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Best Wave: {0} -launch = < LAUNCH > launch.text = Launch -launch.title = Launch Successful -launch.next = [lightgray]next opportunity at wave {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done 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.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Paused > clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]An error has occured error.crashtitle = An error has occured unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Input stat.output = Output stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Power Capacity stat.powershot = Power/Shot stat.damage = Damage @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Power Use stat.powerdamage = Power/Damage stat.itemcapacity = Item Capacity +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time @@ -613,6 +626,28 @@ stat.reload = Shots/Second stat.ammo = Ammo stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Power: {0}/s bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} bar.poweroutput = Power Output: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Items: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Build Progress bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] damage bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary @@ -642,12 +680,15 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = power units/second unit.liquidsecond = liquid units/second unit.itemssecond = items/second @@ -670,7 +711,7 @@ category.power = Power category.liquids = Liquids category.items = Items category.crafting = Input/Output -category.shooting = Shooting +category.function = Function category.optional = Optional Enhancements setting.landscape.name = Lock Landscape setting.shadows.name = Shadows @@ -679,7 +720,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animated Water setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] @@ -691,7 +731,7 @@ 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.uiscale.name = UI Scaling[lightgray] (requires restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = Training setting.difficulty.easy = Easy @@ -713,7 +753,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart) setting.fps.name = Show FPS & Ping setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelate setting.minimap.name = Show Minimap @@ -822,6 +861,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer rules.waves = Waves rules.attack = Attack Mode @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Items content.liquid.name = Liquids content.unit.name = Units content.block.name = Blocks + item.copper.name = Copper item.lead.name = Lead item.coal.name = Coal @@ -879,23 +921,6 @@ liquid.slag.name = Slag liquid.oil.name = Oil liquid.cryofluid.name = Cryofluid -item.explosiveness = [lightgray]Explosiveness: {0}% -item.flammability = [lightgray]Flammability: {0}% -item.radioactivity = [lightgray]Radioactivity: {0}% - -unit.health = [lightgray]Health: {0} -unit.speed = [lightgray]Speed: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Heat Capacity: {0} -liquid.viscosity = [lightgray]Viscosity: {0} -liquid.temperature = [lightgray]Temperature: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.slag.name = Slag +block.space.name = Space block.salt.name = Salt block.salt-wall.name = Salt Wall block.pebbles.name = Pebbles @@ -981,6 +1007,7 @@ block.darksand-water.name = Dark Sand Water block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ice Snow block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Power Infinite block.unloader.name = Unloader block.vault.name = Vault block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = RTG Generator block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blue team.crux.name = red @@ -1302,4 +1332,4 @@ block.cyclone.description = A large anti-air and anti-ground turret. Fires explo 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.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index 5d02ed2f85..256bdc0ad3 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -20,8 +20,8 @@ gameover = Der Kern wurde zerstört. gameover.pvp = Das[accent] {0}[] Team ist siegreich! highscore = [accent]Neuer Highscore! copied = Kopiert. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]v6[] ist gerade in der [accent]Beta-Phase[].\n[lightgray]Das bedeutet:[]\n[scarlet]- Die Kampagne ist unfertig[]\n- Musik/SFX sind unfertig\n- Alles kann jederzeit verändert oder entfernt werden\n\nMelde Bugs und Abstürze auf [accent]Github[]. +indev.notready = Dieser Teil vom Spiel ist noch unfertig. load.sound = Audio load.map = Karten @@ -55,6 +55,7 @@ schematic.saved = Entwurf gespeichert. schematic.delete.confirm = Dieser Entwurf wird vollständig vernichtet. schematic.rename = Entwurf umbenennen schematic.info = {0}x{1}, {2} Blöcke +schematic.disabled = [scarlet]Entwürfe deaktiviert[]\nAuf dieser [accent]Karte[] oder [accent]Server[] dürfen keine Entwürfe verwendet werden. stat.wave = Wellen besiegt:[accent] {0} stat.enemiesDestroyed = Gegner zerstört:[accent] {0} @@ -62,15 +63,15 @@ stat.built = Gebäude gebaut:[accent] {0} stat.destroyed = Gebäude zerstört:[accent] {0} stat.deconstructed = Gebäude abgebaut:[accent] {0} stat.delivered = Übertragene Ressourcen: -stat.playtime = Time Played:[accent] {0} +stat.playtime = Spielzeit:[accent] {0} stat.rank = Finaler Rang:[accent] {0} -globalitems = [accent]Global Items +globalitems = [accent]Globale Items 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: -coreattack = < Die Basis wird angegriffen! > +coreattack = < Der Kern wird angegriffen! > nearpoint = [[ [scarlet]SOFORT DEN SPAWNPUNKT VERLASSEN[] ]\nVernichtung droht database = Kern-Datenbank savegame = Spiel speichern @@ -100,35 +101,34 @@ done = Fertig feature.unsupported = Dein System unsterstützt dieses Feature nicht. mods.alphainfo = Vergiss nicht, dass Mods in der Alpha sind, und[scarlet] sehr fehlerhaft sein können[].\nMelde alle Probleme an den Mindustry GitHub oder Discord. -mods.alpha = [accent](Alpha) mods = Mods mods.none = [lightgray]Keine Mods gefunden! mods.guide = Modding-Anleitung mods.report = Problem melden mods.openfolder = Mod-Verzeichnis öffnen mods.reload = Neu laden -mods.reloadexit = The game will now exit, to reload mods. +mods.reloadexit = Das Spiel wird jetzt beendet, um die Mod-Änderungen anzuwenden. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Aktiviert mod.disabled = [scarlet]Deaktiviert mod.disable = Deaktivieren -mod.content = Content: +mod.content = Inhalt: mod.delete.error = Unfähig Mod zu löschen. Datei könnte in Benutzung sein. mod.requiresversion = [scarlet]Benötigt mindestens Version:[accent] {0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]Nicht mit V6 kompatibel (no minGameVersion: 105) mod.missingdependencies = [scarlet]Fehlende Abhängigkeiten: {0} mod.erroredcontent = [scarlet]Inhalt-Fehler mod.errors = Beim Laden von Inhalt sind Fehler aufgetreten. -mod.noerrorplay = [scarlet]Du hast Mods mit Fehlern.[] Deaktiviere die Mods oder fixe die Fehler, bevor du spielst. +mod.noerrorplay = [scarlet]Du hast Mods mit Fehlern.[] Deaktiviere die Mods oder behebe die Fehler, bevor du spielst. mod.nowdisabled = [scarlet]Mod '{0}' fehlen 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 wird jetzt beendet, um die Mod-Änderungen anzuwenden. mod.reloadrequired = [scarlet]Neuladen benötigt mod.import = Mod importieren -mod.import.file = Import File +mod.import.file = Datei importieren mod.import.github = GitHub-Mod importieren -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. +mod.jarwarn = [scarlet]JAR Mods sind nicht sicher.[]\nInstalliere nur Mods von vertrauenswürdigen Quellen! +mod.item.remove = Dies ist Teil vom [accent] '{0}'[] Mod. Deaktivieren sie diesen Mod, um dies zu entfernen. mod.remove.confirm = Dieser Mod wird gelöscht. mod.author = [lightgray]Autor:[] {0} 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} @@ -139,8 +139,8 @@ mod.scripts.disable = Ihr Gerät unterstüzt keine Mods mit Scripts. Du musst di about.button = Info name = Name: noname = Wähle zunächst einen[accent] Spielernamen[]. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Planetenkarte +launchcore = Kern starten filename = Dateiname: unlocked = Neuer Inhalt freigeschaltet! completed = [accent]Abgeschlossen @@ -148,11 +148,11 @@ techtree = Forschung research.list = [lightgray]Forschung: research = Erforschen researched = [lightgray]{0} erforscht. -research.progress = {0}% complete +research.progress = Fortschritt: {0}% players = {0} Spieler online players.single = {0} Spieler online -players.search = search -players.notfound = [gray]no players found +players.search = Suche +players.notfound = [gray]Keine Spieler gefunden server.closing = [accent]Schließe den Server ... server.kicked.kick = Du wurdest vom Server geworfen! server.kicked.whitelist = Du befindest dich nicht auf der Whitelist des Servers. @@ -185,9 +185,9 @@ server.refreshing = Server wird aktualisiert hosts.none = [lightgray]Keine LAN-Spiele gefunden! host.invalid = [scarlet]Kann keine Verbindung zum Host herstellen. -servers.local = Local Servers -servers.remote = Remote Servers -servers.global = Community Servers +servers.local = Lokale Server +servers.remote = Andere Server +servers.global = Community-Server trace = Spieler verfolgen trace.playername = Spielername: [accent]{0} @@ -212,7 +212,7 @@ confirmkick = Bist du sicher, dass du diesen Spieler rauswerfen willst? confirmvotekick = Bist du sicher, dass du darüber abstimmen willst, diesen Spieler rauszuwerfen? confirmunban = Bist du sicher, dass du die Verbannung des Spielers rückgängig machen willst? confirmadmin = Bist du sicher, dass du diesen Spieler zu einem Administrator machen möchtest? -confirmunadmin = Bis du sicher, dass dieser Spieler kein Administrator mehr sein soll? +confirmunadmin = Bist du sicher, dass dieser Spieler kein Administrator mehr sein soll? joingame.title = Spiel beitreten joingame.ip = IP: disconnect = Verbindung unterbrochen. @@ -269,7 +269,7 @@ copylink = Link kopieren back = Zurück data.export = Daten exportieren data.import = Daten importieren -data.openfolder = Open Data Folder +data.openfolder = Datenordner öffnen data.exported = Daten exportiert. data.invalid = Dies sind keine gültigen Spieldaten. data.import.confirm = Der Import von externen Daten wird [scarlet] alle[] deine gegenwärtigen Spieldaten löschen.\n[accent]Das kann nicht rückgängig gemacht werden![]Sobald der Import abeschlossen ist, wird dein Spiel sofort beendet. @@ -278,18 +278,21 @@ quit.confirm.tutorial = Weißt du, was du tust?\nDu kannst das Tutorial unter[ac loading = [accent]Wird geladen... reloading = [accent]Lade Mods neu... saving = [accent]Speichere... -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}][] um im Kern zu spawnen cancelbuilding = [accent][[{0}][] um den Plan zu leeren selectschematic = [accent][[{0}][] zum Auswählen+Kopieren pausebuilding = [accent][[{0}][] um das Bauen zu pausieren resumebuilding = [scarlet][[{0}][] um das Bauen fortzusetzen wave = [accent]Welle {0} +wave.cap = [accent]Welle {0}/{1} wave.waiting = Welle in {0} wave.waveInProgress = [lightgray]Welle im Gange waiting = Warten... waiting.players = Warte auf Spieler... wave.enemies = [lightgray]{0} Gegner verbleiben wave.enemy = [lightgray]{0} Gegner verbleiben +wave.guardianwarn = Boss erscheint in [accent]{0}[] Wellen. +wave.guardianwarn.one = Boss erscheint in [accent]{0}[] Welle. loadimage = Bild laden saveimage = Bild speichern unknown = Unbekannt @@ -306,7 +309,7 @@ workshop.error = Fehler beim Laden von Workshop-Details: {0} map.publish.confirm = Willst du diese Karte wirklich veröffentlichen?\n\n[lightgray]Vergewissere dich, dass du der Workshop-EULA zugestimmt hast, sonst tauchen deine Karten nicht auf! workshop.menu = Wähle aus, was du mit diesem Objekt tun willst. workshop.info = Objekt-Info -changelog = Changelog (optional): +changelog = Änderungen (optional): eula = Steam EULA missing = Dieses Objekt wurde gelöscht oder verschoben.\n[lightgray]Die Workshop-Auflistung ist nun automatisch getrennt worden. publishing = [accent]Veröffentlichen... @@ -328,16 +331,17 @@ editor.generation = Generator: editor.ingame = Im Spiel Bearbeiten editor.publish.workshop = Im Workshop veröffentlichen editor.newmap = Neue Karte +editor.center = Zur Mitte workshop = Workshop waves.title = Wellen waves.remove = Entfernen waves.never = waves.every = alle waves.waves = Welle(n) -waves.perspawn = per Spawn -waves.shields = shields/wave +waves.perspawn = pro Spawn +waves.shields = Schilder pro Welle waves.to = bis -waves.guardian = Guardian +waves.guardian = Boss waves.preview = Vorschau waves.edit = Bearbeiten... waves.copy = Aus der Zwischenablage kopieren @@ -346,9 +350,9 @@ waves.invalid = Ungültige Wellen in der Zwischenablage. waves.copied = Wellen kopiert. waves.none = Keine Gegner definiert.\nInfo: Leere Wellenentwürfe werden automatisch mit dem Standard-Entwurf ersetzt. -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = Menge +wavemode.totals = Gesamtmenge +wavemode.health = Lebenspunkte editor.default = [lightgray] details = Details @@ -415,8 +419,9 @@ toolmode.drawteams.description = Zeichnet Teams statt Blöcke. filters.empty = [lightgray]Keine Filter! Füge einen mit dem unteren Knopf hinzu. filter.distort = Verzerren filter.noise = Rauschen -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = Gegnerischer Spawn Auswahl +filter.spawnpath = Weg zum Spawn +filter.corespawn = Kernauswahl filter.median = Median filter.oremedian = Erzmedian filter.blend = Mischen @@ -427,7 +432,7 @@ filter.mirror = Spiegel filter.clear = Löschen filter.option.ignore = Ignorieren filter.scatter = Streuen -filter.terrain = Terrain +filter.terrain = Landschaft filter.option.scale = Skalierung filter.option.chance = Wahrscheinlichkeit filter.option.mag = Größe @@ -436,10 +441,11 @@ filter.option.circle-scale = Kreisskalierung filter.option.octaves = Oktaven filter.option.falloff = Rückgang filter.option.angle = Winkel -filter.option.amount = Amount +filter.option.amount = Menge filter.option.block = Block filter.option.floor = Boden filter.option.flooronto = Ziel Boden +filter.option.target = Ziel filter.option.wall = Wand filter.option.ore = Erz filter.option.floor2 = Sekundärer Boden @@ -469,24 +475,18 @@ locked = Gesperrt complete = [lightgray]Abschließen: requirement.wave = Erreiche Welle {0} in {1} requirement.core = Zerstöre den feindlichen Kern in {0} -requirement.research = Research {0} -requirement.capture = Capture {0} -resume = Zu Zone zurückkehren:\n[lightgray]{0} +requirement.research = Erforsche {0} +requirement.capture = Erobere {0} bestwave = [lightgray]Beste Welle: {0} -launch = Starten -launch.text = Launch -launch.title = Start erfolgreich -launch.next = [lightgray]Nächste Möglichkeit bei Welle {0} -launch.unable2 = [scarlet]START nicht möglich.[] -launch.confirm = Dies wird alle Ressourcen in deinen Kern übertragen.\nDu kannst nicht wieder zu dieser Karte zurückkehren. -launch.skip.confirm = Wenn du die Wartezeit überspringst, kannst du den Kern bis zu einer späteren Welle nicht mehr starten. +launch.text = Start +research.multiplayer = Nur der Host kann forschen. uncover = Freischalten configure = Startitems festlegen -loadout = Loadout -resources = Resources +loadout = Startitems +resources = Ressourcen bannedblocks = Gesperrte Blöcke addall = Alle hinzufügen -launch.destination = Destination: {0} +launch.destination = Ziel: {0} configure.invalid = Anzahl muss eine Zahl zwischen 0 und {0} sein. zone.unlocked = [lightgray]{0} freigeschaltet. zone.requirement.complete = Welle {0} erreicht:\n{1} Anforderungen der Zone erfüllt. @@ -495,7 +495,7 @@ 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 +boss.health = Boss-Lebenspunkte connectfail = [crimson] Verbindung zum Server konnte nicht hergestellt werden: [accent]{0} error.unreachable = Server nicht erreichbar. @@ -508,19 +508,25 @@ error.io = Netzwerk-I/O-Fehler. error.any = Unbekannter Netzwerkfehler. error.bloom = Bloom konnte nicht initialisiert werden.\nEs kann sein, dass dein Gerät es nicht unterstützt. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = Regen +weather.snow.name = Schnee +weather.sandstorm.name = Sandsturm +weather.sporestorm.name = Sporensturm +weather.fog.name = Nebel -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch +sectors.unexplored = [lightgray]Unentdeckt +sectors.resources = Ressourcen: +sectors.production = Produktion: +sectors.stored = Gelagert: +sectors.resume = Weiterspielen +sectors.launch = Start sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Sektor umbenennen +sector.missingresources = [scarlet]Fehlende Kernressourcen + +planet.serpulo.name = Serpulo +planet.sun.name = Sonne sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -550,7 +556,7 @@ settings.language = Sprache settings.data = Spieldaten settings.reset = Auf Standard zurücksetzen settings.rebind = Zuweisen -settings.resetKey = Reset +settings.resetKey = Zurücksetzen settings.controls = Steuerung settings.game = Spiel settings.sound = Audio @@ -558,24 +564,30 @@ settings.graphics = Grafik settings.cleardata = Spieldaten zurücksetzen... settings.clear.confirm = Bist du sicher, dass du die Spieldaten zurücksetzen willst?\n Diese Aktion kann nicht rückgängig gemacht werden! settings.clearall.confirm = [scarlet]WARNUNG![]\nDas wird jegliche Spieldaten zurücksetzen, inklusive Speicherstände, Karten, Freischaltungen und Tastenbelegungen.\n Sobald du 'OK' drückst, wird alles zurückgesetzt und das Spiel schließt sich automatisch. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = Möchtest du wirklich alle Speicherstände löschen? +settings.clearsaves = Speicherstände löschen +settings.clearresearch = Erforschungen löschen +settings.clearresearch.confirm = Möchtest du wirklich alle Erforschungen löschen? +settings.clearcampaignsaves = Kampagne-Speicherstände löschen +settings.clearcampaignsaves.confirm = Möchtest du wirklich alle Kampagne-Speicherstände löschen? paused = [accent]< Pausiert > clear = Leeren banned = [scarlet]Verbannt -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]Erfordert erforderter Sektor yes = Ja no = Nein info.title = Info error.title = [crimson]Ein Fehler ist aufgetreten error.crashtitle = Ein Fehler ist aufgetreten! unit.nobuild = [scarlet]Einheit kann nicht bauen! +lastaccessed = [lightgray]Zuletzt konfiguriert: {0} +block.unknown = [lightgray]??? + stat.input = Eingang stat.output = Ausgang stat.booster = Verstärkung -stat.tiles = Required Tiles -stat.affinities = Affinities -block.unknown = [lightgray]??? +stat.tiles = Erforderte Untergründe +stat.affinities = Affinitäten stat.powercapacity = Kapazität stat.powershot = Stromverbrauch/Schuss stat.damage = Schaden @@ -585,15 +597,16 @@ stat.itemsmoved = Bewegungsgeschwindigkeit stat.launchtime = Zeit zwischen Starts stat.shootrange = Reichweite stat.size = Größe -stat.displaysize = Display Size +stat.displaysize = Bildschirmgröße stat.liquidcapacity = Flüssigkeitskapazität stat.powerrange = Stromreichweite -stat.linkrange = Link Range -stat.instructions = Instructions +stat.linkrange = Verbindungsradius +stat.instructions = Befehle stat.powerconnections = Maximale Stromverbindungen stat.poweruse = Stromverbrauch stat.powerdamage = Stromverbrauch/Schadenspunkt stat.itemcapacity = Materialkapazität +stat.memorycapacity = Speicherkapazität stat.basepowergeneration = Basis-Stromerzeugung stat.productiontime = Produktionszeit stat.repairtime = Zeit zur vollständigen Reparatur @@ -605,29 +618,52 @@ stat.boosteffect = Verstärkungseffekt stat.maxunits = Max. aktive Einheiten stat.health = Lebenspunkte stat.buildtime = Baudauer -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = Max. Konsekutive stat.buildcost = Baukosten stat.inaccuracy = Ungenauigkeit stat.shots = Schüsse stat.reload = Schüsse/Sekunde stat.ammo = Munition -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time +stat.shieldhealth = Schildlebenspunkte +stat.cooldowntime = Cooldown-Zeit +stat.explosiveness = Sprengkraft +stat.basedeflectchance = Grundreflektionschance +stat.lightningchance = Blitzwahr­schein­lich­keit +stat.lightningdamage = Blitzschaden +stat.flammability = Brennbarkeit +stat.radioactivity = Radioaktivität +stat.heatcapacity = Hitzekapazität +stat.viscosity = Viskosität +stat.temperature = Temperatur +stat.speed = Geschwindigkeit +stat.buildspeed = Baugeschwindigkeit +stat.minespeed = Abbaugeschwindigkeit +stat.minetier = Abbau-Kraft +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Kommandier-Limit +stat.abilities = Fähigkeiten + +ability.forcefield = Kraftfeld +ability.repairfield = Heilungsfeld +ability.statusfield = Statusfeld +ability.unitspawn = {0} Fabrik +ability.shieldregenfield = Schild-regenerations-Feld bar.drilltierreq = Besserer Bohrer Benötigt -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = Fehlende Ressourcen +bar.corereq = Kern-Basis erforderlich bar.drillspeed = Bohrgeschwindigkeit: {0}/s -bar.pumpspeed = Pump Speed: {0}/s +bar.pumpspeed = Pumpengeschwindigkeit: {0}/s bar.efficiency = Effizienz: {0}% bar.powerbalance = Strom: {0}/s bar.powerstored = Gespeichert: {0}/{1} bar.poweramount = Strom: {0} bar.poweroutput = Stromgenerierung: {0} +bar.powerlines = Verbindungen: {0}/{1} bar.items = Items: {0} bar.capacity = Kapazität: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[Einheit deaktiviert] bar.liquid = Flüssigkeit bar.heat = Hitze bar.power = Strom @@ -635,6 +671,8 @@ bar.progress = Baufortschritt bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Prozessorgesteuert + bullet.damage = [stat]{0}[lightgray] Schaden bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln bullet.incendiary = [stat]entzündend @@ -642,12 +680,15 @@ bullet.homing = [stat]zielsuchend bullet.shock = [stat]schockend bullet.frag = [stat]explosiv bullet.knockback = [stat]{0}[lightgray] zurückstoßend +bullet.pierce = [stat]{0}[lightgray]x Durchstechkraft +bullet.infinitepierce = [stat]Durchstechkraft bullet.freezing = [stat]frierend bullet.tarred = [stat]teerend bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator bullet.reload = [stat]{0}[lightgray]x Feuerrate unit.blocks = Blöcke +unit.blockssquared = Blöcke² unit.powersecond = Stromeinheiten/Sekunde unit.liquidsecond = Flüssigkeitseinheiten/Sekunde unit.itemssecond = Materialeinheiten/Sekunde @@ -660,30 +701,29 @@ unit.persecond = /sek unit.perminute = /min unit.timesspeed = x Geschwindigkeit unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = Schildlebenspunkte unit.items = Materialeinheiten unit.thousands = k -unit.millions = mil -unit.billions = b +unit.millions = Mio +unit.billions = Mrd category.general = Allgemeines category.power = Strom category.liquids = Flüssigkeiten category.items = Materialien category.crafting = Erzeugung -category.shooting = Schießen +category.function = Funktion category.optional = Optionale Zusätze setting.landscape.name = Landschaft sperren setting.shadows.name = Schatten setting.blockreplace.name = Automatische Blockvorschläge setting.linear.name = Lineare Filterung setting.hints.name = Tipps -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) +setting.flow.name = Ressourcen-Fluss anzeigen [scarlet] (experimentell) setting.buildautopause.name = Bauen automatisch pausieren -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animiertes Wasser setting.animatedshields.name = Animierte Schilde setting.antialias.name = Antialias[lightgray] (Neustart erforderlich)[] -setting.playerindicators.name = Player Indicators +setting.playerindicators.name = Spieler-Indikatoren setting.indicators.name = Verbündeten-Indikatoren setting.autotarget.name = Auto-Zielauswahl setting.keyboard.name = Maus+Tastatur Steuerung @@ -702,7 +742,7 @@ setting.difficulty.name = Schwierigkeit: setting.screenshake.name = Wackeleffekt setting.effects.name = Effekte anzeigen setting.destroyedblocks.name = Zerstörte Blöcke anzeigen -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Block-Status anzeigen setting.conveyorpathfinding.name = Automatische Wegfindung beim Bau von Förderbändern setting.sensitivity.name = Controller-Empfindlichkeit setting.saveinterval.name = Autosave-Häufigkeit @@ -711,16 +751,15 @@ setting.blockselecttimeout.name = Block-Auswahl Timeout setting.milliseconds = {0} Millisekunden setting.fullscreen.name = Vollbild setting.borderlesswindow.name = Randloses Fenster [lightgray](Neustart vielleicht erforderlich) -setting.fps.name = FPS zeigen -setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Block Shortcuts anzeigen +setting.fps.name = FPS anzeigen +setting.smoothcamera.name = Sanfte Kamerabewegungen setting.vsync.name = VSync setting.pixelate.name = Verpixeln [lightgray](Könnte die Leistung beeinträchtigen) setting.minimap.name = Zeige die Minimap -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Kern-Items anzeigen (WIP) setting.position.name = Spieler-Position anzeigen setting.musicvol.name = Musiklautstärke -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = Planetatmosphäre zeigen setting.ambientvol.name = Ambient-Lautstärke setting.mutemusic.name = Musik stummschalten setting.sfxvol.name = Audioeffekt-Lautstärke @@ -728,10 +767,10 @@ setting.mutesound.name = Audioeffekte stummschalten setting.crashreport.name = Anonyme Absturzberichte senden setting.savecreate.name = Automatisch speichern setting.publichost.name = Öffentliche Sichtbarkeit des Spiels -setting.playerlimit.name = Player Limit +setting.playerlimit.name = Spielerbegrenzung setting.chatopacity.name = Chat-Deckkraft setting.lasersopacity.name = Power-Laser-Deckkraft -setting.bridgeopacity.name = Bridge Opacity +setting.bridgeopacity.name = Brücken-Deckkraft setting.playerchat.name = Chat im Spiel anzeigen 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. @@ -743,24 +782,24 @@ keybinds.mobile = [scarlet]Die meisten Tastenzuweisungen hier funktionieren auf category.general.name = Allgemein category.view.name = Ansicht category.multiplayer.name = Mehrspieler -category.blocks.name = Block Select +category.blocks.name = Blockauswahl command.attack = Angreifen command.rally = Patrouillieren command.retreat = Rückzug command.idle = Idle placement.blockselectkeys = \n[lightgray]Taste: [{0}, keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.control.name = Einheit steuern keybind.clear_building.name = Bauplan löschen 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 = Power Lasers umschalten -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_block_status.name = Blockstatus umschalten keybind.move_x.name = X-Achse keybind.move_y.name = Y-Achse keybind.mouse_move.name = Der Maus folgen -keybind.pan.name = Pan View +keybind.pan.name = Kamera alleine bewegen keybind.boost.name = Boost keybind.schematic_select.name = Bereich auswählen keybind.schematic_menu.name = Entwurfsmenü @@ -788,9 +827,9 @@ keybind.diagonal_placement.name = Diagonal platzieren keybind.pick.name = Block auswählen keybind.break_block.name = Block zerstören keybind.deselect.name = Auswahl aufheben -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = Block aufheben +keybind.dropCargo.name = Block fallen lassen +keybind.command.name = Eineiten kommandieren keybind.shoot.name = Schießen keybind.zoom.name = Zoomen keybind.menu.name = Menü @@ -801,7 +840,7 @@ keybind.chat.name = Chat keybind.player_list.name = Spielerliste keybind.console.name = Konsole keybind.rotate.name = Drehen -keybind.rotateplaced.name = Rotate Existing (Hold) +keybind.rotateplaced.name = Gebauten Block drehen (gedrückt halten) keybind.toggle_menus.name = Menüs umschalten keybind.chat_history_prev.name = Chat Historie zurück keybind.chat_history_next.name = Chat Historie vor @@ -822,37 +861,39 @@ mode.custom = Angepasste Regeln rules.infiniteresources = Unbegrenzte Ressourcen rules.reactorexplosions = Reaktor-Explosionen +rules.schematic = Entwürfe erlaubt rules.wavetimer = Wellen-Timer rules.waves = Wellen rules.attack = Angriff-Modus -rules.buildai = AI Building +rules.buildai = KI kann bauen rules.enemyCheat = Unbegrenzte Ressourcen für die KI (Rotes Team) -rules.blockhealthmultiplier = Block Health Multiplier -rules.blockdamagemultiplier = Block Damage Multiplier -rules.unitbuildspeedmultiplier = Baugeschwindigkeit-Einheit Multiplikator +rules.blockhealthmultiplier = Block-Lebenspunkte-Multiplikator +rules.blockdamagemultiplier = Block-Schaden-Multiplikator +rules.unitbuildspeedmultiplier = Baugeschwindigkeit-Einheit Multiplikator rules.unithealthmultiplier = Lebenspunkte-Einheit Multiplikator rules.unitdamagemultiplier = Schaden-Einheit Multiplikator rules.enemycorebuildradius = Bauverbot Radius druch feindlichen Kern:[lightgray] (Kacheln) rules.wavespacing = Wellen-Abstand:[lightgray] (Sek) rules.buildcostmultiplier = Bau-Kosten Multiplikator rules.buildspeedmultiplier = Bau-Schnelligkeit Multiplikator -rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier +rules.deconstructrefundmultiplier = Abbau Ressourcen-Rückerstattung rules.waitForWaveToEnd = Warten bis Welle endet rules.dropzoneradius = Drop-Zonen-Radius:[lightgray] (Kacheln) -rules.unitammo = Units Require Ammo +rules.unitammo = Einheiten benötigen Munition rules.title.waves = Wellen rules.title.resourcesbuilding = Ressourcen & Gebäude rules.title.enemy = Gegner rules.title.unit = Einheiten rules.title.experimental = Experimentell -rules.title.environment = Environment -rules.lighting = Lighting -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage -rules.ambientlight = Ambient Light -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.title.environment = Umgebung +rules.lighting = Blitze +rules.enemyLights = Gegnerisches Licht +rules.fire = Feuer +rules.explosions = Explosionsschaden +rules.ambientlight = Umgebungslicht +rules.weather = Wetter +rules.weather.frequency = Häufigkeit: +rules.weather.duration = Dauer: content.item.name = Materialien content.liquid.name = Flüssigkeiten @@ -879,23 +920,6 @@ liquid.slag.name = Schlacke liquid.oil.name = Öl liquid.cryofluid.name = Kryoflüssigkeit -item.explosiveness = [lightgray]Explosivität: {0} -item.flammability = [lightgray]Entflammbarkeit: {0} -item.radioactivity = [lightgray]Radioaktivität: {0} - -unit.health = [lightgray]Lebenskraft: {0} -unit.speed = [lightgray]Geschwindigkeit: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Wärmekapazität: {0} -liquid.viscosity = [lightgray]Viskosität: {0} -liquid.temperature = [lightgray]Temperatur: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -904,11 +928,11 @@ unit.pulsar.name = Pulsar unit.quasar.name = Quasar unit.crawler.name = Crawler unit.atrax.name = Atrax -unit.spiroct.name = Spiroct +unit.spiroct.name = Spirokt unit.arkyid.name = Arkyid unit.toxopid.name = Toxopid unit.flare.name = Flare -unit.horizon.name = Horizon +unit.horizon.name = Horizont unit.zenith.name = Zenith unit.antumbra.name = Antumbra unit.eclipse.name = Eclipse @@ -916,7 +940,7 @@ unit.mono.name = Mono unit.poly.name = Poly unit.mega.name = Mega unit.quad.name = Quad -unit.oct.name = Oct +unit.oct.name = Okt unit.risso.name = Risso unit.minke.name = Minke unit.bryde.name = Bryde @@ -928,30 +952,31 @@ unit.gamma.name = Gamma unit.scepter.name = Scepter unit.reign.name = Reign unit.vela.name = Vela -unit.corvus.name = Corvus +unit.corvus.name = Korvus -block.resupply-point.name = Resupply Point +block.resupply-point.name = Nachlade-Punkt block.parallax.name = Parallax -block.cliff.name = Cliff +block.cliff.name = Klippe block.sand-boulder.name = Sandbrocken block.grass.name = Gras -block.slag.name = Slag +block.slag.name = Schlacke +block.space.name = Weltall block.salt.name = Salz -block.salt-wall.name = Salt Wall +block.salt-wall.name = Salzwand block.pebbles.name = Geröll block.tendrils.name = Ranken -block.sand-wall.name = Sand Wall +block.sand-wall.name = Sandwand block.spore-pine.name = Sporenkiefer -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = Sporenwand +block.boulder.name = Felsbrocken +block.snow-boulder.name = Schneebrocken block.snow-pine.name = Schnee-Kiefer block.shale.name = Schiefer block.shale-boulder.name = Schiefergeröll block.moss.name = Moos block.shrubs.name = Gestrüpp block.spore-moss.name = Moossporen -block.shale-wall.name = Shale Wall +block.shale-wall.name = Schieferwand block.scrap-wall.name = Schrottmauer block.scrap-wall-large.name = Große Schrottmauer block.scrap-wall-huge.name = Riesige Schrottmauer @@ -967,8 +992,8 @@ block.core-foundation.name = Kern: Fundament block.core-nucleus.name = Kern: Nukleus block.deepwater.name = Tiefes Wasser block.water.name = Wasser -block.tainted-water.name = Unreines Wasser -block.darksand-tainted-water.name = Unreines Wasser (Dunkler Sand) +block.tainted-water.name = Dreckiges Wasser +block.darksand-tainted-water.name = Dreckiges Wasser (Dunkler Sand) block.tar.name = Teer block.stone.name = Stein block.sand.name = Sand @@ -979,17 +1004,18 @@ block.craters.name = Krater block.sand-water.name = Sandiges Wasser block.darksand-water.name = Dunkles sandiges Wasser block.char.name = Holzkohle -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite.name = Dazit +block.dacite-wall.name = Dazitwand +block.dacite-boulder.name = Dazitgeröll block.ice-snow.name = Eisschnee -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = Steinwand +block.ice-wall.name = Eiswand +block.snow-wall.name = Schneewand +block.dune-wall.name = Dünenwand block.pine.name = Kiefer -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = Erde +block.dirt-wall.name = Erdwand +block.mud.name = Schlamm block.white-tree-dead.name = Weißer Baum (tot) block.white-tree.name = Weißer Baum block.spore-cluster.name = Sporen-Cluster @@ -1027,7 +1053,7 @@ block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Förderband block.titanium-conveyor.name = Titan-Förderband -block.plastanium-conveyor.name = Plastanium Förderband +block.plastanium-conveyor.name = Plastanium-Förderband block.armored-conveyor.name = Gepanzertes Förderband block.armored-conveyor.description = Bewegt Gegenstände genauso schnell wie das Titan-Förderband, ist aber besser gepanzert. Akzeptiert nur Verbindungen mit anderen Förderbändern. block.junction.name = Kreuzung @@ -1037,7 +1063,7 @@ block.sorter.name = Sortierer block.inverted-sorter.name = Invertierter Sortierer block.message.name = Nachricht block.illuminator.name = Illuminierer -block.illuminator.description = Eine kleine, kompakte, konfigurierbare Lichtquelle. Benötigt Strom. +block.illuminator.description = Eine kleine, kompakte, konfigurierbare Lichtquelle. Benötigt Strom. block.overflow-gate.name = Überlauftor block.underflow-gate.name = Unterlauftor block.silicon-smelter.name = Silizium-Schmelzer @@ -1075,6 +1101,7 @@ block.power-source.name = Unendliche Stromquelle block.unloader.name = Entlader block.vault.name = Tresor block.wave.name = Welle +block.tsunami.name = Tsunami block.swarmer.name = Schwärmer block.salvo.name = Salve block.ripple.name = Zerstörer @@ -1114,37 +1141,39 @@ block.arc.name = Arcus block.rtg-generator.name = RTG-Generator block.spectre.name = Phantom block.meltdown.name = Meltdown -block.container.name = Container +block.foreshadow.name = Foreshadow +block.container.name = Behälter block.launch-pad.name = Launchpad block.launch-pad-large.name = Großes Launchpad block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.command-center.name = Kommandozentrale +block.ground-factory.name = Bodenfabrik +block.air-factory.name = Luftfabrik +block.naval-factory.name = Wasserfabrik +block.additive-reconstructor.name = Hinzufügender Rekonstrukteur +block.multiplicative-reconstructor.name = Multiplikativer Rekonstrukteur +block.exponential-reconstructor.name = Exponentieller Rekonstrukteur +block.tetrative-reconstructor.name = Tetrativer Rekonstrukteur +block.payload-conveyor.name = Einheitenförderband +block.payload-router.name = Einheitverteiler +block.disassembler.name = Großer Trenner +block.silicon-crucible.name = Silizium Schmelztiegel +block.overdrive-dome.name = Beschleunigungs-Maschine -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = Schalter +block.micro-processor.name = Mikroprozessor +block.logic-processor.name = Logikprozessor +block.hyper-processor.name = Hyperprocessor +block.logic-display.name = Logik-Bildschirm +block.large-logic-display.name = Großer Logik-Bildschirm +block.memory-cell.name = Speicherzelle +block.memory-bank.name = Große Speicherzelle team.blue.name = Blau team.crux.name = Rot team.sharded.name = Orange team.orange.name = Orange -team.derelict.name = Derelict +team.derelict.name = Derelikt team.green.name = Grün team.purple.name = Lila @@ -1302,4 +1331,4 @@ block.cyclone.description = Ein großer Schnellfeuer-Geschützturm. block.spectre.description = Ein großer Geschützturm, der zwei starke Schüsse gleichzeitig abfeuert. block.meltdown.description = Ein großer Geschützturm, der starke Strahlen mit großer Reichweite abfeuert. block.repair-point.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Beschädigt und zerstört gegnerische Projektile. Laser werden nicht anvisiert. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 6c24039d7e..dad6c44fa3 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -8,8 +8,8 @@ link.github.description = Código fuente del juego link.changelog.description = Lista de actualizaciones link.dev-builds.description = Versiones en 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 = Página de Mindustry en Google Play Store +link.itch.io.description = itch.io es la página donde podes descargar las versiones para PC y Servidor +link.google-play.description = Ficha en la Google Play Store link.f-droid.description = Página de F-Droid del juego link.wiki.description = Wiki oficial de Mindustry link.suggestions.description = Sugerir nuevas funciones @@ -20,8 +20,10 @@ gameover = Tu núcleo ha sido destruido. gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! highscore = [accent]¡Nuevo récord de puntuación! copied = Copiado. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet + +indev.popup = [accent]v6[] esta actualmente en [accent]alpha[].\n[lightgray]Esto significa que:[]\n[scarlet]- El modo de campaña no esta totalmente acabado[]\n-Falta contenido dentro del juego\n - Mucha de la [scarlet]AI de enemigos[] no funciona totalmente\n- Algunas unidades todavia no estan acabadas\n- Todo lo que ves es probable que sea cambiado o removido.\n\nReporta bugs o crasheos en [accent]Github[]. +indev.notready = Esta parte del juego no esta lista todavia. + load.sound = Sonidos load.map = Mapas @@ -55,6 +57,7 @@ schematic.saved = Esquemático guardado. schematic.delete.confirm = Esto esquemático será completamente borrado. schematic.rename = Renombrar esquemático schematic.info = {0}x{1}, {2} bloques +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Oleadas Derrotadas:[accent] {0} stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0} @@ -100,22 +103,21 @@ done = Hecho 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 = [lightgray]No se encontraron Mods! -mods.guide = Guia de Modding +mods.guide = Guía de Modding mods.report = Reportar Error mods.openfolder = Abrir carpeta de mods -mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reload = Recargar +mods.reloadexit = El juego se va a cerrar para recargar los mods. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Activado mod.disabled = [scarlet]Desactivado mod.disable = Desactivar -mod.content = Content: +mod.content = Contenido: 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.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]No es compatible con la V6 (no minGameVersion: 105) mod.missingdependencies = [scarlet]Dependencias faltantes: {0} mod.erroredcontent = [scarlet]Errores de contenido mod.errors = Ocurrieron fallos al cargar el contenido. @@ -125,9 +127,11 @@ 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.file = Import File + +mod.import.file = Importar archivo mod.import.github = Importar Mod de Github -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]Los mods JAR pueden ser inseguros.[]\nAsegúrate de que los descargaste de una fuente segura! + mod.item.remove = Este objeto es parte del[accent] '{0}'[] mod. Para eliminarlo, desinstala ese mod. mod.remove.confirm = Este mod va a ser eliminado.\n¿Quieres continuar? mod.author = [lightgray]Autor:[] {0} @@ -139,8 +143,8 @@ mod.scripts.disable = Tu dispositivo no soporta los mods con scripts. Debes desh about.button = Acerca de name = Nombre: noname = Elige un[accent] nombre de jugador[] primero. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Mapa del planeta +launchcore = Lanzar núcleo filename = Nombre del archivo: unlocked = ¡Nuevo Bloque Desbloqueado! completed = [accent]Completado @@ -148,7 +152,7 @@ techtree = Árbol de Tecnologías research.list = [lightgray]investigación: research = Investigación researched = [lightgray]{0} investigado. -research.progress = {0}% complete +research.progress = {0}% completado players = {0} jugadores online players.single = {0} jugador online players.search = buscar @@ -278,18 +282,23 @@ quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe pu loading = [accent]Cargando... reloading = [accent]Recargando mods... saving = [accent]Guardando... -respawn = [accent][[{0}][] to respawn in core + +respawn = [accent][[{0}][] para respawnear en el nucleo + cancelbuilding = [accent][[{0}][] para limpiar 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.cap = [accent]Wave {0}/{1} wave.waiting = Oleada en {0} wave.waveInProgress = [lightgray]Oleada en progreso waiting = Esperando... waiting.players = Esperando jugadores... wave.enemies = [lightgray]{0} Enemigos Restantes wave.enemy = [lightgray]{0} Enemigo Restante +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Cargar Imagen saveimage = Guardar Imagen unknown = Desconocido @@ -328,6 +337,7 @@ editor.generation = Generación: editor.ingame = Editar dentro del juego editor.publish.workshop = Publicar en el Steam Workshop editor.newmap = Nuevo Mapa +editor.center = Center workshop = Steam Workshop waves.title = Oleadas waves.remove = Borrar @@ -346,9 +356,11 @@ waves.invalid = Oleadas inválidaas en el portapapeles. waves.copied = Oleadas copiadas. waves.none = No hay enemigos definidos.\nNótese que las listas de oleadas vacías se sustituirán por la lista por defecto. -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health + +wavemode.counts = Cuentas +wavemode.totals = Totales +wavemode.health = Salud + editor.default = [lightgray] details = Detalles... @@ -415,8 +427,9 @@ toolmode.drawteams.description = Dibuja equipos en vez de bloques. filters.empty = [lightgray]¡No hay filtros! Añade uno con el botón de abajo. filter.distort = Distorsionar filter.noise = Ruido -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = Elegir punto de aparición enemigo +filter.spawnpath = Path To Spawn +filter.corespawn = Elegir Núcleo filter.median = Median filter.oremedian = Veta Median filter.blend = Mezcla @@ -436,10 +449,11 @@ filter.option.circle-scale = Escala del círculo filter.option.octaves = Octaves filter.option.falloff = Caída filter.option.angle = Ángulo -filter.option.amount = Amount +filter.option.amount = Cantidad filter.option.block = Bloque filter.option.floor = Suelo filter.option.flooronto = Suelo objetivo +filter.option.target = Target filter.option.wall = Muro filter.option.ore = Veta filter.option.floor2 = Piso secundario @@ -471,15 +485,9 @@ requirement.wave = Alcanzar la oleada {0} en {1} requirement.core = Destruir el núcleo enemigo en {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Continuar Zona:\n[lightgray]{0} bestwave = [lightgray]Récord: {0} -launch = Lanzar launch.text = Launch -launch.title = Lanzamiento Exitoso -launch.next = [lightgray]próxima oportunidad en la oleada {0} -launch.unable2 = [scarlet]No se puede LANZAR.[] -launch.confirm = Esto lanzará todos los recursos al núcleo.\nNo podrás volver a esta base. -launch.skip.confirm = Si saltas la oleada ahora, no podrás lanzar recursos hasta unas oleadas después. +research.multiplayer = Only the host can research items. uncover = Descubrir configure = Configurar carga inicial loadout = Loadout @@ -508,43 +516,51 @@ error.io = Error I/O de conexión. error.any = Error de red desconocido. error.bloom = Error al cargar el bloom.\nPuede que tu dispositivo no soporte esta característica. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = Lluvia +weather.snow.name = Nieve +weather.sandstorm.name = Tormenta de arena +weather.sporestorm.name = Tormenta de esporas -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +weather.fog.name = Niebla -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +sectors.unexplored = [lightgray]No explorado +sectors.resources = Recursos: +sectors.production = Producción: +sectors.stored = Almacenado: +sectors.resume = Reanudar +sectors.launch = Lanzar +sectors.select = Elegir +sectors.nonelaunch = [lightgray]ninguno (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insuficientes recursos -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.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. -sector.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. -sector.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. -sector.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. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.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. -sector.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. -sector.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. -sector.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. +planet.serpulo.name = Serpulo +planet.sun.name = Sol + +sector.groundZero.name = Zona de impacto +sector.craters.name = Los Cráteres +sector.frozenForest.name = Bosque Congelado +sector.ruinousShores.name = Costas Ruinosas +sector.stainedMountains.name = Montañas manchadas +sector.desolateRift.name = Grieta desolada +sector.nuclearComplex.name = Complejo de producción nuclear +sector.overgrowth.name = Crecimiento excesivo +sector.tarFields.name = Campos de alquitrán +sector.saltFlats.name = Llanuras de sal +sector.fungalPass.name = Paso de hongos + + +sector.groundZero.description = La ubicación óptima para empezar una vez más. Baja amenaza enemiga. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible.\nSiga adelante. +sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no pueden contenerlos para siempre.\n\nComienza la aventura hacia el poder. Construye generadores de combustión. Aprenda a usar reparadores. +sector.saltFlats.description = En las afueras del desierto se encuentran las Salinas. Se pueden encontrar pocos recursos en esta ubicación.\n\nEl enemigo ha erigido un complejo de almacenamiento de recursos aquí. Erradicar su núcleo. No dejes nada en pie. +sector.craters.description = El agua se ha acumulado en este cráter, reliquia de las viejas guerras. Recupere el área. Recoge arena. Fundir metavidrio. Bombee agua para enfriar torretas y taladros. +sector.ruinousShores.description = Más allá de los páramos, está la costa. Una vez, esta ubicación albergó una serie de defensa costera. No queda mucho. Solo las estructuras de defensa más básicas han quedado ilesas, todo lo demás reducido a chatarra.\nContinúe la expansión hacia afuera. Redescubra la tecnología. +sector.stainedMountains.description = Más tierra adentro se encuentran las montañas, pero no contaminadas por esporas.\nExtraiga el abundante titanio de esta zona. Aprenda como usarlo.\n\nLa presencia enemiga es mayor aquí. No les des tiempo para enviar sus unidades más fuertes. +sector.overgrowth.description = Esta área está cubierta de maleza, más cerca de la fuente de las esporas.\nEl enemigo ha establecido un puesto de avanzada aquí. Construye unidades Titán. Destruyelo. Recupera lo que se perdió. +sector.tarFields.description = Las afueras de una zona de producción de petróleo, entre la montaña y el desierto. Una de las pocas áreas con reservas de alquitrán utilizables.\nAunque está abandonada, esta zona tiene algunas fuerzas enemigas peligrosas cerca. No los subestimes.\n\n[lightgray]Investigue la tecnología de procesamiento de aceite si es posible. +sector.desolateRift.description = Una zona extremadamente peligrosa. Recursos abundantes, pero poco espacio. Alto riesgo de destrucción. Vete lo antes posible. No se deje engañar por el gran intervalo entre los ataques enemigos. +sector.nuclearComplex.description = Antigua instalación de producción y procesamiento de torio, reducida a ruinas.\n[lightgray] Investiga el torio y sus múltiples usos.\n\nEl enemigo está presente aquí en gran número, constantemente en busca de atacantes. +sector.fungalPass.description = Un área de transición entre montañas altas y tierras bajas plagadas de esporas. Aquí se encuentra una pequeña base de reconocimiento enemiga.\nDestroy it.\nUsa unidades Dagger y Crawler. Saca los dos núcleos de funcionamiento! settings.language = Idioma settings.data = Datos del Juego @@ -558,24 +574,33 @@ 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.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. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves + +settings.clearsaves.confirm = Estas seguro de que quieres borrar tus partidas guardadas? +settings.clearsaves = Limpiar partidas guardadas +settings.clearresearch = Borrar descubrimientos +settings.clearresearch.confirm = Estas seguro? +settings.clearcampaignsaves = Borrar Guardados de campaña +settings.clearcampaignsaves.confirm = Estas seguro de que quieres borrar tus partidas guardadas en el modo campaña? + paused = [accent] < Pausado > clear = Limpiar banned = [scarlet]Baneado -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]Necesita que el sector esté capturado. yes = Sí no = No info.title = [accent]Información error.title = [crimson]Un error ha ocurrido. error.crashtitle = Un error ha ocurrido. -unit.nobuild = [scarlet]Unit can't build + +unit.nobuild = [scarlet]La unidad no puede construir +lastaccessed = [lightgray]Anteriormente usado: {0} +block.unknown = [lightgray]??? + stat.input = Entrada stat.output = Salida stat.booster = Potenciador stat.tiles = Tiles requeridos stat.affinities = Afinidades -block.unknown = [lightgray]??? stat.powercapacity = Capacidad de Energía stat.powershot = Energía/Disparo stat.damage = Daño @@ -585,15 +610,16 @@ stat.itemsmoved = Velocidad de movimiento stat.launchtime = Tiempo entre lanzamientos stat.shootrange = Rango de Disparo stat.size = Tamaño -stat.displaysize = Display Size +stat.displaysize = Tamaño mostrado stat.liquidcapacity = Capacidad de Líquidos stat.powerrange = Rango de Energía -stat.linkrange = Link Range +stat.linkrange = Rango de conexión stat.instructions = Instructions stat.powerconnections = Conexiones maximas stat.poweruse = Consumo de Energía stat.powerdamage = Energía/Daño stat.itemcapacity = Capacidad de Objetos +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Generación de energía base stat.productiontime = Tiempo de producción stat.repairtime = Tiempo para Reparar Bloque Completamente @@ -605,18 +631,41 @@ stat.boosteffect = Efecto del Potenciador stat.maxunits = Máximo de Unidades Activas stat.health = Vida stat.buildtime = Tiempo de construcción -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = Máximo consecutivo stat.buildcost = Coste de construcción stat.inaccuracy = Imprecisión stat.shots = Disparos stat.reload = Recarga stat.ammo = Munición -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time +stat.shieldhealth = Salud del escudo +stat.cooldowntime = Tiempo de enfriamiento +stat.explosiveness = Explosiveness +stat.basedeflectchance = Probabilidad de desvío base +stat.lightningchance = Probabilidad de rayo +stat.lightningdamage = Daño por rayo +stat.flammability = Inflamabilidad +stat.radioactivity = Radiactividad +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosidad +stat.temperature = Temperatura +stat.speed = Velocidad +stat.buildspeed = Velocidad de construcción +stat.minespeed = Velocidad de la mina +stat.minetier = Nivel de mina +stat.payloadcapacity = Capacidad de carga útil +stat.commandlimit = Límite de comando +stat.abilities = Habilidades + +skill.forcefield = Campo de fuerza +skill.repairfield = Campo de reparación +skill.statusfield = Campo de estado +skill.unitspawn = {0} Fábrica +skill.shieldregenfield = Campo de regeneración del escudo bar.drilltierreq = Se requiere un mejor taladro. -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = Recursos faltantes +bar.corereq = Se requiere de un núcleo base + bar.drillspeed = Velocidad del Taladro: {0}/s bar.pumpspeed = Velocidad de bombeado: {0}/s bar.efficiency = Eficiencia: {0}% @@ -624,6 +673,7 @@ bar.powerbalance = Energía: {0} bar.powerstored = Almacenados: {0}/{1} bar.poweramount = Energía: {0} bar.poweroutput = Salida de Energía: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Objetos: {0} bar.capacity = Capacidad: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +685,8 @@ bar.progress = Progreso de construcción bar.input = Entrada bar.output = Salida +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] daño bullet.splashdamage = [stat]{0}[lightgray] daño de área ~[stat] {1}[lightgray] casillas bullet.incendiary = [stat]Incendiaria @@ -642,12 +694,15 @@ bullet.homing = [stat]Rastreadora bullet.shock = [stat]Electrizante bullet.frag = [stat]Explosiva bullet.knockback = [stat]{0}[lightgray]Retroceso +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = unidades de energía/segundo unit.liquidsecond = unidades de líquido/segundo unit.itemssecond = objetos/segundo @@ -660,7 +715,9 @@ unit.persecond = /seg unit.perminute = /min unit.timesspeed = x velocidad unit.percent = % -unit.shieldhealth = shield health + +unit.shieldhealth = Vida del escudo + unit.items = objetos unit.thousands = k unit.millions = M @@ -670,20 +727,21 @@ category.power = Energía category.liquids = Líquidos category.items = Objetos category.crafting = Fabricación -category.shooting = Disparo +category.function = Function category.optional = Mejoras Opcionales setting.landscape.name = Bloquear modo paisaje setting.shadows.name = Sombras setting.blockreplace.name = Sugerir bloques al construir setting.linear.name = Filtrado Lineal setting.hints.name = Pistas -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) + +setting.flow.name = Mostrar tasa de flujo de recursos[scarlet] (experimental) setting.buildautopause.name = Auto-pausar construcción -setting.mapcenter.name = Auto Center Map To Player + setting.animatedwater.name = Agua Animada setting.animatedshields.name = Escudos Animados -setting.antialias.name = Antialias[lightgray] (necesita reiniciar)[] -setting.playerindicators.name = Player Indicators +setting.antialias.name = Antialias[lightgray] (necesita un reinicio)[] +setting.playerindicators.name = Indicadores de jugadores setting.indicators.name = Indicadores de Aliados setting.autotarget.name = Auto apuntado setting.keyboard.name = Controles de Ratón+Teclado @@ -702,7 +760,7 @@ setting.difficulty.name = Dificultad: setting.screenshake.name = Movimiento de la Pantalla setting.effects.name = Mostrar Efectos setting.destroyedblocks.name = Mostrar bloques destruidos -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Mostrar estado de los bloques setting.conveyorpathfinding.name = Colocación del transportador en búsqueda de caminos setting.sensitivity.name = Sensibilidad del Control setting.saveinterval.name = Intervalo del Autoguardado @@ -712,15 +770,16 @@ setting.milliseconds = {0} milisegundos setting.fullscreen.name = Pantalla Completa setting.borderlesswindow.name = Ventana sin Bordes[lightgray] (podría requerir un reinicio) setting.fps.name = Mostrar FPS -setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Mostrar teclas de selección de bloque +setting.smoothcamera.name = Cámara suave + + setting.vsync.name = Vsync (Limita los fps a los Hz de tu pantalla) setting.pixelate.name = Pixelar [lightgray](podría reducir el rendimiento) setting.minimap.name = Mostrar Minimapa -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Mostrar elementos en el nucleo (WIP) setting.position.name = Mostrar posición del jugador. setting.musicvol.name = Volumen de la Música -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = Mostrar atmosfera del planeta setting.ambientvol.name = Volumen del Ambiente setting.mutemusic.name = Silenciar Musica setting.sfxvol.name = Volumen de los efectos de sonido @@ -743,27 +802,29 @@ keybinds.mobile = [scarlet]Los accesos del teclado aquí mostrados no estan disp category.general.name = General category.view.name = Visión category.multiplayer.name = Multijugador -category.blocks.name = Block Select +category.blocks.name = Seleccionar bloques command.attack = Atacar command.rally = Patrullar command.retreat = Retirarse -command.idle = Idle -placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +command.idle = Esperar +placement.blockselectkeys = \n[lightgray]LLaves: [{0}, +keybind.respawn.name = Reaparecer +keybind.control.name = Controlar unidad keybind.clear_building.name = Eliminar 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.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_block_status.name = Cambiar estado de los bloques keybind.move_x.name = Mover x keybind.move_y.name = Mover y keybind.mouse_move.name = Seguír al ratón -keybind.pan.name = Pan View -keybind.boost.name = Boost + +keybind.pan.name = Vista panorámica +keybind.boost.name = Impulsar + keybind.schematic_select.name = Seleccionar región -keybind.schematic_menu.name = Menu de esquématicos +keybind.schematic_menu.name = Menu de esquemas keybind.schematic_flip_x.name = Girar esquemático desde X keybind.schematic_flip_y.name = Girar esquemático desde Y keybind.category_prev.name = Categoría anterior @@ -811,7 +872,7 @@ keybind.zoom_minimap.name = Zoom del 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 = Caja de arena +mode.sandbox.name = Arenero mode.sandbox.description = Recursos ilimitados y sin temporizador para las oleadas. mode.editor.name = Editor mode.pvp.name = JcJ @@ -822,13 +883,14 @@ mode.custom = Normas personalizadas rules.infiniteresources = Recursos Infinitos rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Temportzador de Oleadas rules.waves = Oleadas rules.attack = Modo de Ataque -rules.buildai = AI Building +rules.buildai = Construccion de la IA rules.enemyCheat = Recursos infinitos de la IA rules.blockhealthmultiplier = Multiplicador de salud de bloque -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = Multiplicador de daño de bloque rules.unitbuildspeedmultiplier = Multiplicador de velocidad de creación de unidades rules.unithealthmultiplier = Multiplicador de la vida de las unidades rules.unitdamagemultiplier = Multiplicador del daño de unidades @@ -839,25 +901,29 @@ rules.buildspeedmultiplier = Multiplicador de velocidad de construcción rules.deconstructrefundmultiplier = Multiplicador de Devolución de Desconstrucción rules.waitForWaveToEnd = Las oleadas esperan a los enemigos rules.dropzoneradius = Radio de zona de caída:[lightgray] (casillas) -rules.unitammo = Units Require Ammo +rules.unitammo = Las unidades necesitan munición rules.title.waves = Oleadas rules.title.resourcesbuilding = Recursos y Construcción rules.title.enemy = Enemigos rules.title.unit = Unidades rules.title.experimental = Experimental -rules.title.environment = Environment + +rules.title.environment = Entorno rules.lighting = Iluminación -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.enemyLights = Luces enemigas +rules.fire = Fuego +rules.explosions = Daño de explosiones de Bloques/Unidades rules.ambientlight = Iluminación ambiental -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = Clima +rules.weather.frequency = Frequencia: +rules.weather.duration = Duracion: + content.item.name = Objetos content.liquid.name = Líquidos content.unit.name = Unidades content.block.name = Bloques + item.copper.name = Cobre item.lead.name = Plomo item.coal.name = Carbón @@ -879,25 +945,9 @@ liquid.slag.name = Fundido liquid.oil.name = Petróleo liquid.cryofluid.name = Criogénico -item.explosiveness = [lightgray]Explosividad: {0} -item.flammability = [lightgray]Inflamabilidad: {0} -item.radioactivity = [lightgray]Radioactividad: {0} - -unit.health = [lightgray]Vida: {0} -unit.speed = [lightgray]Velocidad: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Capacidad Térmica: {0} -liquid.viscosity = [lightgray]Viscosidad: {0} -liquid.temperature = [lightgray]Temperatura: {0} unit.dagger.name = Daga -unit.mace.name = Mace +unit.mace.name = Mazo unit.fortress.name = Fortaleza unit.nova.name = Nova unit.pulsar.name = Pulsar @@ -906,10 +956,10 @@ unit.crawler.name = Oruga unit.atrax.name = Atrax unit.spiroct.name = Spiroct unit.arkyid.name = Arkyid -unit.toxopid.name = Toxopid -unit.flare.name = Flare -unit.horizon.name = Horizon -unit.zenith.name = Zenith +unit.toxopid.name = Toxopodo +unit.flare.name = Bengala +unit.horizon.name = Horizonte +unit.zenith.name = Cenit unit.antumbra.name = Antumbra unit.eclipse.name = Eclipse unit.mono.name = Mono @@ -925,33 +975,40 @@ unit.omura.name = Omura unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma -unit.scepter.name = Scepter +unit.scepter.name = Cetro unit.reign.name = Reign unit.vela.name = Vela -unit.corvus.name = Corvus +unit.corvus.name = Corvo + +block.resupply-point.name = Punto de reabastecimiento + +block.parallax.name = Paralaje +block.cliff.name = Acantilado -block.resupply-point.name = Resupply Point -block.parallax.name = Parallax -block.cliff.name = Cliff block.sand-boulder.name = Piedra de Arena block.grass.name = Hierba -block.slag.name = Slag +block.slag.name = Escoria +block.space.name = Space block.salt.name = Sal -block.salt-wall.name = Salt Wall + +block.salt-wall.name = Muro de sal block.pebbles.name = Guijarros block.tendrils.name = Zarcillos -block.sand-wall.name = Sand Wall +block.sand-wall.name = Muro de arena block.spore-pine.name = Pino de esporas -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = Muro de esporas +block.boulder.name = Roca +block.snow-boulder.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 block.shrubs.name = Arbustos block.spore-moss.name = Musgo de esporas -block.shale-wall.name = Shale Wall + +block.shale-wall.name = Muro de pizarra + 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 @@ -979,17 +1036,18 @@ block.craters.name = Cráteres block.sand-water.name = Agua con Arena block.darksand-water.name = Agua con Arena Oscura block.char.name = Carbonizado -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite.name = Dacita +block.dacite-wall.name = Pared de Dacita +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Hielo Nieve -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = Pared de piedra +block.ice-wall.name = Pared de hielo +block.snow-wall.name = Pared de nieve +block.dune-wall.name = Pared de duna block.pine.name = Pino -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = Tierra +block.dirt-wall.name = Pared de tierra +block.mud.name = Lodo block.white-tree-dead.name = Árbol Blanco Muerto block.white-tree.name = Árbol Blanco block.spore-cluster.name = Concentración de Esporas @@ -1005,7 +1063,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.basalt.name = Basalt +block.basalt.name = Basalto block.hotrock.name = Roca Caliente block.magmarock.name = Roca de Magma block.copper-wall.name = Muro de Cobre @@ -1075,6 +1133,7 @@ block.power-source.name = Energía Infinita block.unloader.name = Descargador block.vault.name = Bóveda block.wave.name = Ola +block.tsunami.name = Tsunami block.swarmer.name = Enjambre block.salvo.name = Salva block.ripple.name = Onda @@ -1114,37 +1173,45 @@ block.arc.name = Arco block.rtg-generator.name = Generador RTG block.spectre.name = Espectro block.meltdown.name = Fusión de Reactor +block.foreshadow.name = Foreshadow block.container.name = Contenedor block.launch-pad.name = Pad de Lanzamiento block.launch-pad-large.name = Pad de Lanzamiento Grande -block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.segment.name = Segmento +block.command-center.name = Centro de comando + +block.ground-factory.name = Fábrica terrestre +block.air-factory.name = Fábrica aérea + +block.naval-factory.name = Fábrica naval +block.additive-reconstructor.name = Reconstructor aditivo +block.multiplicative-reconstructor.name = Reconstructor multiplicativo +block.exponential-reconstructor.name = Reconstructor exponencial +block.tetrative-reconstructor.name = Reconstructor tetrativo + +block.payload-conveyor.name = Transportador masivo +block.payload-router.name = Enrutador de carga útil +block.disassembler.name = Desensamblador +block.silicon-crucible.name = Crisol de silicio +block.overdrive-dome.name = Cupula de sobremarcha + +block.switch.name = Interruptor +block.micro-processor.name = Micro Processador +block.logic-processor.name = Procesador lógico +block.hyper-processor.name = Hiperprocesador +block.logic-display.name = Pantalla lógica +block.large-logic-display.name = Gran pantalla lógica +block.memory-cell.name = Celda de memoria +block.memory-bank.name = Banco de memoria -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell team.blue.name = Azul team.crux.name = rojo team.sharded.name = naranja team.orange.name = Naranja -team.derelict.name = derelict + +team.derelict.name = derelicto + team.green.name = Verde team.purple.name = Púrpura @@ -1302,4 +1369,4 @@ block.cyclone.description = Una torre grande anti-aérea y anti-terrestre. Dispa block.spectre.description = Un cañon masivo de dos barriles. Dispara balas perforantes a objetivos de aire y tierra. block.meltdown.description = Un cañon láser masivo. Carga y dispara un rayo láser constante a enemigos cercanos. Requiere enfriamiento para operar. block.repair-point.description = Repara la unidad dañada más cercana a su alrededor. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Daña y destruye proyectiles enemigos. No apunta a láseres. diff --git a/core/assets/bundles/bundle_et.properties b/core/assets/bundles/bundle_et.properties index 62b0002df6..46cf235d26 100644 --- a/core/assets/bundles/bundle_et.properties +++ b/core/assets/bundles/bundle_et.properties @@ -55,6 +55,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 +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Lahingulaineid läbitud:[accent] {0} stat.enemiesDestroyed = Vaenlasi hävitatud:[accent] {0} @@ -100,7 +101,6 @@ 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 mods.none = [lightgray]No mods found! mods.guide = Modding Guide @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Lahingulaine {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Järgmine laine\nalgab: {0} wave.waveInProgress = [lightgray]Toimub lahingulaine waiting = [lightgray]Ootan... waiting.players = Ootan mängijaid... wave.enemies = [lightgray]{0} vaenlast alles wave.enemy = [lightgray]{0} vaenlane alles +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Lae pilt saveimage = Salvesta pilt unknown = @@ -328,6 +331,7 @@ editor.generation = Genereerimine: editor.ingame = Redigeeri mängus editor.publish.workshop = Avalda Workshop'is editor.newmap = Uus maailm +editor.center = Center workshop = Workshop waves.title = Lahingulained waves.remove = Eemalda @@ -416,6 +420,7 @@ filters.empty = [lightgray]Filtrid puuduvad! Lisa filtreid alloleva nupuga. filter.distort = Moonutamine filter.noise = Müra filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Mediaan filter.oremedian = Maakide mediaan @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Blokk filter.option.floor = Põrand filter.option.flooronto = Asendatav põrand +filter.option.target = Target filter.option.wall = Sein filter.option.ore = Maak filter.option.floor2 = Teine põrand @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Jätka piirkonnas:\n[lightgray]{0} bestwave = [lightgray]Parim lahingulaine: {0} -launch = < LENDUTÕUS > launch.text = Launch -launch.title = Lendutõus -launch.next = [lightgray]Järgmine võimalus on {0}. laine järel -launch.unable2 = [scarlet]Ei saa LENDU TÕUSTA.[] -launch.confirm = Lendu tõusmisel võetakse kaasa\nkõik tuumikus olevad ressursid.\n[accent]Sellesse baasi ei ole võimalik tagasi tulla. -launch.skip.confirm = Kui jätad praegu lendu tõusmata, siis saad seda teha alles hilisemate lahingulainete järel. +research.multiplayer = Only the host can research items. uncover = Ava configure = Muuda varustust loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Oled kindel, et soovid olemasolevad\nsätted kustutada? settings.clearall.confirm = [scarlet]HOIATUS![]\nKustutatakse kõik andmed, sealhulgas salvestised, maailmad, kampaania saavutused\nja juhtnuppude sätted.\n[accent]Vajutades nupule "OK", kustutatakse\nkõik andmed ja seejärel mäng sulgub.[] settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Paus > clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]Viga error.crashtitle = Viga unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Sisend stat.output = Väljund stat.booster = Kiirendaja stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Energiamahtuvus stat.powershot = Energia ühikut/lasu kohta stat.damage = Hävituspunkte @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Energiatarve stat.powerdamage = Energiatarve hävituspunkti kohta stat.itemcapacity = Ressursside mahutavus +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Energiatootlus stat.productiontime = Tootmisaeg stat.repairtime = Täieliku parandamise aeg @@ -613,6 +626,28 @@ stat.reload = Lasku/s stat.ammo = Laskemoon stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Nõuab paremat puuri bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Bilanss: {0}/s bar.powerstored = Puhver: {0}/{1} bar.poweramount = Laeng: {0} bar.poweroutput = Tootlus: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Ressursse: {0} bar.capacity = Mahutavus: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Edenemine bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] hävituspunkti bullet.splashdamage = [stat]{0}[lightgray] hävituspunkti ~[stat] {1}[lightgray] blokki bullet.incendiary = [stat]süttiv @@ -642,12 +680,15 @@ bullet.homing = [stat]isesihtiv bullet.shock = [stat]elektriseeriv bullet.frag = [stat]kildpomm bullet.knockback = [stat]{0}[lightgray]x tagasilöögi kordaja +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = energiaühikut/s unit.liquidsecond = vedelikuühikut/s unit.itemssecond = ressursiühikut/s @@ -670,7 +711,7 @@ category.power = Energia category.liquids = Vedelikud category.items = Ressursid category.crafting = Sisend/Väljund -category.shooting = Tulistamine +category.function = Function category.optional = Valikulised täiustused setting.landscape.name = Lukusta horisontaalpaigutus setting.shadows.name = Varjud @@ -679,7 +720,6 @@ setting.linear.name = Lineaarne tekstuurivastendus setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animeeritud vesi setting.animatedshields.name = Animeeritud kilbid setting.antialias.name = Sakitõrje[lightgray] (vajab mängu taaskäivitamist)[] @@ -713,7 +753,6 @@ 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.smoothcamera.name = Smooth Camera -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 @@ -822,6 +861,7 @@ mode.custom = Reeglid rules.infiniteresources = Lõputult ressursse rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Kasuta taimerit rules.waves = Kasuta lahingulaineid rules.attack = Mänguviis "Rünnak" @@ -847,6 +887,7 @@ rules.title.unit = Väeüksused rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Ressursid content.liquid.name = Vedelikud content.unit.name = Väeüksused content.block.name = Konstruktsioonid + item.copper.name = Vask item.lead.name = Plii item.coal.name = Süsi @@ -879,23 +921,6 @@ liquid.slag.name = Räbu liquid.oil.name = Nafta liquid.cryofluid.name = Krüovedelik -item.explosiveness = [lightgray]Plahvatusohtlikkus: {0}% -item.flammability = [lightgray]Tuleohtlikkus: {0}% -item.radioactivity = [lightgray]Radioaktiivsus: {0}% - -unit.health = [lightgray]Elud: {0} -unit.speed = [lightgray]Kiirus: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Soojusmahtuvus: {0} -liquid.viscosity = [lightgray]Viskoossus: {0} -liquid.temperature = [lightgray]Temperatuur: {0} - unit.dagger.name = Soldat unit.mace.name = Mace unit.fortress.name = Koljat @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Liivakamakas block.grass.name = Rohi block.slag.name = Slag +block.space.name = Space block.salt.name = Sool block.salt-wall.name = Salt Wall block.pebbles.name = Kruus @@ -981,6 +1007,7 @@ block.darksand-water.name = Vesi tumedal liival block.char.name = Puusüsi block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Jäine lumi block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Energiaallikas block.unloader.name = Mahalaadija block.vault.name = Suur hoidla block.wave.name = Prits +block.tsunami.name = Tsunami block.swarmer.name = Parvpildur block.salvo.name = Krempelpaugutaja block.ripple.name = Tähesadu @@ -1114,6 +1142,7 @@ block.arc.name = Elektrikahur block.rtg-generator.name = RT-generaator block.spectre.name = Kõmmutaja block.meltdown.name = Valguskiir +block.foreshadow.name = Foreshadow block.container.name = Hoidla block.launch-pad.name = Stardiplatvorm block.launch-pad-large.name = Suur stardiplatvorm @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = sinine team.crux.name = punane @@ -1302,4 +1332,4 @@ block.cyclone.description = Suur lendavate ja maapealsete väeüksuste vastane k block.spectre.description = Massiivne kaheraudne kahur, mis tulistab soomuskatteid läbistavaid mürske nii lendavate kui ka maapealsete väeüksuste pihta. block.meltdown.description = Massiivne laserkahur, mis tekitab püsiva energiakiire. Vajab töötamiseks jahutusvedelikku. block.repair-point.description = Parandab kõige lähemal asuvat liitlaste väeüksust. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_eu.properties b/core/assets/bundles/bundle_eu.properties index 7afde97031..537d0b3133 100644 --- a/core/assets/bundles/bundle_eu.properties +++ b/core/assets/bundles/bundle_eu.properties @@ -55,6 +55,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 +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Garaitutako boladak:[accent] {0} stat.enemiesDestroyed = Suntsitutako etsaiak:[accent] {0} @@ -100,7 +101,6 @@ 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 mods.none = [lightgray]Ez da mod-ik aurkitu! mods.guide = Mod-ak sortzeko gida @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] hautatu+kopiatzeko pausebuilding = [accent][[{0}][] eraikiketa eteteko resumebuilding = [scarlet][[{0}][] eraikiketa berrekiteko wave = [accent]{0}. bolada +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Boladarako {0} wave.waveInProgress = [lightgray]Bolada abian waiting = [lightgray]Itxaroten... waiting.players = Jokalariei itxaroten... wave.enemies = [lightgray]{0} etsai daude wave.enemy = [lightgray]Etsai {0} dago +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Kargatu irudia saveimage = Gorde irudia unknown = Ezezaguna @@ -328,6 +331,7 @@ editor.generation = Sorrarazi: editor.ingame = Editatu jolasean editor.publish.workshop = Argitaratu lantegian editor.newmap = Mapa berria +editor.center = Center workshop = Lantegia waves.title = Boladak waves.remove = Kendu @@ -416,6 +420,7 @@ filters.empty = [lightgray]Iragazkirik ez! Gehitu bat beheko botoiarekin. filter.distort = Distortsioa filter.noise = Orbana filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Mediana filter.oremedian = Mea mediana @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Blokea filter.option.floor = Zorua filter.option.flooronto = Zoru xedea +filter.option.target = Target filter.option.wall = Horma filter.option.ore = Mea filter.option.floor2 = Bigarren zorua @@ -471,15 +477,9 @@ requirement.wave = Iritsi {0} boladara {1} requirement.core = Suntsitu etsaiaren muina {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Berrekin:\n[lightgray]{0} bestwave = [lightgray]Bolada onena: {0} -launch = < EGOTZI > launch.text = Launch -launch.title = Ongi egotzi da -launch.next = [lightgray]hurrengo aukera\n {0}. boladan -launch.unable2 = [scarlet]Ezin da EGOTZI.[] -launch.confirm = Honek zure muinean dauden baliabide guztiak egotziko ditu.\nEzin izango zara base honetara itzuli. -launch.skip.confirm = Orain ez eginez gero, geroagoko beste bolada batera itxaron beharko duzu. +research.multiplayer = Only the host can research items. uncover = Estalgabetu configure = Konfiguratu zuzkidura loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Ziur datu hauek garbitu nahi dituzula?\nEgindakoa ezin settings.clearall.confirm = [scarlet]ABISUA![]\nHonek datu guztiak garbituko ditu, gordetako partidak, mapak, desblokeatutakoak, eta teklen konfigurazioak barne.\nBehin 'Ados' sakatzen duzula jolasak datuk guztiak ezabatuko ditu eta automatikoki irten. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Pausatuta > clear = Garbitu banned = [scarlet]Debekatuta @@ -570,12 +580,14 @@ info.title = Informazioa error.title = [crimson]Errore bat gertatu da error.crashtitle = Errore bat gertatu da unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Sarrera stat.output = Irteera stat.booster = Indargarria stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Energia-edukiera stat.powershot = Energia/tiroko stat.damage = Kaltea @@ -594,6 +606,7 @@ stat.powerconnections = Gehieneko konexioak stat.poweruse = Energia-erabilera stat.powerdamage = Energia/Kaltea stat.itemcapacity = Elementu-edukiera +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Oinarrizko energia sorrera stat.productiontime = Eraikitze denbora stat.repairtime = Blokearen konpontze denbora osoa @@ -613,6 +626,28 @@ stat.reload = Tiroak/segundoko stat.ammo = Munizioa stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Zulagailu hobea behar da bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Energia: {0}/s bar.powerstored = Bilduta: {0}/{1} bar.poweramount = Energia: {0} bar.poweroutput = Energia irteera: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Elementuak: {0} bar.capacity = Edukiera: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Eraikitze egoera bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] kalte bullet.splashdamage = [stat]{0}[lightgray] ingurune-kaltea ~[stat] {1}[lightgray] lauza bullet.incendiary = [stat]su-eragilea @@ -642,12 +680,15 @@ bullet.homing = [stat]gidatua bullet.shock = [stat]danbatekoa bullet.frag = [stat]fragmentazioa bullet.knockback = [stat]{0}[lightgray] kontusioa +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = energia unitate/segundoko unit.liquidsecond = likido unitate/segundoko unit.itemssecond = elementu/segundoko @@ -670,7 +711,7 @@ category.power = Energia category.liquids = Likidoak category.items = Baliabideak category.crafting = Sarrera/Irteera -category.shooting = Tirokatzea +category.function = Function category.optional = Aukerako hobekuntzak setting.landscape.name = Blokeatu horizontalean setting.shadows.name = Itzalak @@ -679,7 +720,6 @@ setting.linear.name = Iragazte lineala setting.hints.name = Pistak setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animatutako ura setting.animatedshields.name = Animatutako ezkutuak setting.antialias.name = Antialias[lightgray] (berrabiarazi behar da)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Pantaila osoa setting.borderlesswindow.name = Ertzik gabeko leihoa[lightgray] (berrabiaraztea behar lezake) setting.fps.name = Erakutsi FPS setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelatu[lightgray] (animazioak desgaitzen ditu) setting.minimap.name = Erakutsi mapatxoa @@ -822,6 +861,7 @@ mode.custom = Arau pertsonalizatuak rules.infiniteresources = Baliabide amaigabeak rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Boladen denboragailua rules.waves = Boladak rules.attack = Eraso modua @@ -847,6 +887,7 @@ rules.title.unit = Unitateak rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Solidoak content.liquid.name = Likidoak content.unit.name = Unitateak content.block.name = Blokeak + item.copper.name = Kobrea item.lead.name = Beruna item.coal.name = Ikatza @@ -879,23 +921,6 @@ liquid.slag.name = Zepa liquid.oil.name = Olioa liquid.cryofluid.name = Krio-isurkaria -item.explosiveness = [lightgray]Lehergarritasuna: {0}% -item.flammability = [lightgray]Sukoitasuna: {0}% -item.radioactivity = [lightgray]Erradioaktibitatea: {0}% - -unit.health = [lightgray]Osasuna: {0} -unit.speed = [lightgray]Abiadura: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Bero edukiera: {0} -liquid.viscosity = [lightgray]Likatasuna: {0} -liquid.temperature = [lightgray]Tenperatura: {0} - unit.dagger.name = Daga unit.mace.name = Mace unit.fortress.name = Gotorleku @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Hondar harkaitza block.grass.name = Belarra block.slag.name = Slag +block.space.name = Space block.salt.name = Gatza block.salt-wall.name = Salt Wall block.pebbles.name = Harribilak @@ -981,6 +1007,7 @@ block.darksand-water.name = Hondar ilun ura block.char.name = Kokea block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Izotz elurra block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Energia amaigabea block.unloader.name = Deskargagailua block.vault.name = Kripta block.wave.name = Olatu +block.tsunami.name = Tsunami block.swarmer.name = Erlauntz block.salvo.name = Buhunba block.ripple.name = Marmarra @@ -1114,6 +1142,7 @@ block.arc.name = Arku block.rtg-generator.name = RTG sorgailua block.spectre.name = Espektro block.meltdown.name = Nukleofusio +block.foreshadow.name = Foreshadow block.container.name = Edukiontzia block.launch-pad.name = Egozketa-plataforma block.launch-pad-large.name = Egozketa-plataforma handia @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = urdina team.crux.name = gorria @@ -1302,4 +1332,4 @@ block.cyclone.description = Aire zein lurreko defentsarako dorre handia. Torpedo block.spectre.description = Kanoi bikoitz erraldoia. Blindajea zulatu dezaketen bala handiak tirokatzen ditu aireko zein lurreko xedeei. block.meltdown.description = Laser kanoi erraldoia. Etengabeko laser izpi bat kargatu eta jauritzen die inguruko etsaiei. Hozgarria behar du jarduteko. block.repair-point.description = Etengabe konpontzen du inguruko kaltetutako unitate hurbilena. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index 30a231333c..c5dfa9f91a 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -21,7 +21,7 @@ gameover.pvp = [accent] {0}[] joukkue voittaa! highscore = [accent]Uusi ennätys! copied = Kopioitu. indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.notready = Tämä osa peliä ei ole vielä valmis load.sound = Ääniä load.map = Karttoja @@ -42,7 +42,7 @@ schematic = Kaavio schematic.add = Tallenna kaavio... schematics = Kaaviot schematic.replace = Kaavio tällä nimellä on jo olemassa. Haluatko korvata sen? -schematic.exists = A schematic by that name already exists. +schematic.exists = Kaavio tällä nimellä on jo olemassa. schematic.import = Tuo kaavio... schematic.exportfile = Vie tiedosto schematic.importfile = Tuo tiedosto @@ -55,6 +55,7 @@ schematic.saved = Kaavio tallennettu. schematic.delete.confirm = Tämä kaavio poistetaan. schematic.rename = Nimeä kaavio uudelleen schematic.info = {0}x{1}, {2} palikkaa +schematic.disabled = [scarlet]Kaaviot poistettu käytöstä[]\nEt pysty käyttämään kaavioita tällä [accent]kartalla[] tai [accent]palvelimella. stat.wave = Tasoja voitettu:[accent] {0} stat.enemiesDestroyed = Vihollisia tuhottu:[accent] {0} @@ -62,7 +63,7 @@ stat.built = Rakennuksia rakennettu:[accent] {0} stat.destroyed = Rakennuksia tuhottu:[accent] {0} stat.deconstructed = Rakennuksia purettu:[accent] {0} stat.delivered = Resursseja laukaistu: -stat.playtime = Time Played:[accent] {0} +stat.playtime = Pelattu aika:[accent] {0} stat.rank = Lopullinen arvosana: [accent]{0} globalitems = [accent]Global Items @@ -100,7 +101,6 @@ done = Valmis feature.unsupported = Laitteesi ei tue tätä toimintoa. mods.alphainfo = Pidä mielessä että modit ovat alpha-tilassa, ja[scarlet] ne voivat olla virheellisiä[].\nRaportoi kaikki virheet Mindustry GitHub-sivuille tai Discordiin. -mods.alpha = [accent](Alpha) mods = Modit mods.none = [lightgray]Modeja ei löytynyt! mods.guide = Modaamisopas @@ -236,8 +236,8 @@ save.delete.confirm = Oletko varma että haluat poistaa tämän tallennuksen? save.delete = Poista save.export = Vie tallennus 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.fail = [crimson]Tallennuksen tuominen epäonnistui: [accent]{0} +save.export.fail = [crimson]Tallennuksen vieminen epäonnistui: [accent]{0} save.import = Tuo tallennus save.newslot = Tallennuksen nimi: save.rename = Nimeä uudelleen @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Taso {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Seuraava taso {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Odotetaan... waiting.players = Odotetaan pelaajia... wave.enemies = [lightgray]{0} vihollista jäljellä wave.enemy = [lightgray]{0} vihollinen jäljellä +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Lataa kuva saveimage = Tallenna kuva unknown = Tuntematon @@ -328,6 +331,7 @@ editor.generation = Generaatio: editor.ingame = Muokka pelin sisällä editor.publish.workshop = Julkaise Workshoppiin editor.newmap = Uusi kartta +editor.center = Center workshop = Työpaja waves.title = Tasot waves.remove = Poista @@ -416,6 +420,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Vääristää filter.noise = Melu filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Valitse Ydin filter.median = Mediaani filter.oremedian = Malmin mediaani @@ -440,6 +445,7 @@ filter.option.amount = Määrä filter.option.block = Estää filter.option.floor = Lattia filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Seinä filter.option.ore = Malmi filter.option.floor2 = Secondary Floor @@ -471,15 +477,9 @@ requirement.wave = Pääse Tasolle {0} kartassa {1} requirement.core = Tuhoa vihollisen ydin kartassa {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Paras taso: {0} -launch = < LAUKAISE > launch.text = Launch -launch.title = Onnistunut laukaisu -launch.next = [lightgray]seuraava mahdollisuus tasolla {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = Tämä laukaisee kaikki resurssit ytimestäsi.\nEt voi enää palata takaisin. -launch.skip.confirm = Jos ohitat nyt, voit laukaista vasta myöhemmillä tasoilla. +research.multiplayer = Only the host can research items. uncover = Paljasta configure = Configure Loadout loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Oletko varma että haluat tyhjentää pelin datan?\nMit settings.clearall.confirm = [scarlet]WARNING![]\nTämä poistaa kaiken datan, mukaanlukien kesken olevat pelit, kartat, avatut asiat ja kontrolliasetukset.\nKun painat 'ok' kaikki datasi poistetaan ja peli suljetaan. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Pysäytetty > clear = Tyhjä banned = [scarlet]Kielletty @@ -570,12 +580,14 @@ info.title = Informaatio error.title = [crimson]An error has occured error.crashtitle = An error has occured unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Sisääntulo stat.output = Ulostulo stat.booster = Tehostaja stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Energiakapasiteetti stat.powershot = Energiaa/Ammus stat.damage = Vahinko @@ -594,6 +606,7 @@ stat.powerconnections = Maksimimäärä yhdistyksiä stat.poweruse = Energian käyttö stat.powerdamage = Energia/Vahinko stat.itemcapacity = Tavarakapasiteetti +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Perus energiantuotto stat.productiontime = Tuotantoaika stat.repairtime = Kokonaisen palikan korjausaika @@ -613,6 +626,28 @@ stat.reload = Ammusta/sekunnissa stat.ammo = Ammus stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Parempi pora vaadittu bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Energia: {0}/s bar.powerstored = Säilöttynä: {0}/{1} bar.poweramount = Energia: {0} bar.poweroutput = Energiantuotto: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Tavaroita: {0} bar.capacity = Kapasiteetti: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Rakennuksen edistys bar.input = Sisääntulo bar.output = Ulostulo +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] Vahinko bullet.splashdamage = [stat]{0}[lightgray] Aluevahinko ~[stat] {1}[lightgray] palikkaa bullet.incendiary = [stat]sytyttävä @@ -642,12 +680,15 @@ bullet.homing = [stat]itseohjautuva bullet.shock = [stat]shokki bullet.frag = [stat]sirpaloituva bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]jäädyttävä bullet.tarred = [stat]tervattu bullet.multiplier = [stat]{0}[lightgray]x ammusten kerroin bullet.reload = [stat]{0}[lightgray]x ampumisnopeus unit.blocks = palikat +unit.blockssquared = blocks² unit.powersecond = energiayksikköä/sekunti unit.liquidsecond = nesteyksikköä/sekunti unit.itemssecond = esinettä/sekunti @@ -670,7 +711,7 @@ category.power = Energia category.liquids = Neste category.items = Tavarat category.crafting = Ulos/Sisääntulo -category.shooting = Ammunta +category.function = Function category.optional = Mahdolliset parannukset setting.landscape.name = Lukitse tasavaakaan setting.shadows.name = Varjot @@ -679,7 +720,6 @@ setting.linear.name = Lineaarinen suodatus setting.hints.name = Vihjeet setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Automaattisest Pysäytä Rakentaessa -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animoitu vesi setting.animatedshields.name = Animoidut kilvet setting.antialias.name = Antialiaasi[lightgray] (vaatii uudelleenkäynnistyksen)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Borderless Window[lightgray] (vaatii uudelleenkäynnistyksen) setting.fps.name = Näytä FPS setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Näytä palikan valintaohjaimet setting.vsync.name = VSync setting.pixelate.name = Pixeloi[lightgray] (poistaa animaation käytöstä) setting.minimap.name = Näytä pienoiskartta @@ -822,6 +861,7 @@ mode.custom = Custom Rules rules.infiniteresources = Ikuiset resurssit rules.reactorexplosions = Reaktorien räjähtäminen +rules.schematic = Schematics Allowed rules.wavetimer = Tasojen aikaraja rules.waves = Tasot rules.attack = Hyökkäystila @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Tavarat content.liquid.name = Nesteet content.unit.name = Yksiköt content.block.name = Palikat + item.copper.name = Kupari item.lead.name = Lyijy item.coal.name = Hiili @@ -879,23 +921,6 @@ liquid.slag.name = Kuona liquid.oil.name = Öljy liquid.cryofluid.name = Kryoneste -item.explosiveness = [lightgray]Räjädysmäisyys: {0}% -item.flammability = [lightgray]Syttyvyys: {0}% -item.radioactivity = [lightgray]Radioaktiivisuus: {0}% - -unit.health = [lightgray]Elämäpisteet: {0} -unit.speed = [lightgray]Nopeus: {0} -unit.weapon = [lightgray]Ammuksia: {0} -unit.itemcapacity = [lightgray]Esine kapasiteetti: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Lämpökapasiteetti: {0} -liquid.viscosity = [lightgray]Tahmeus: {0} -liquid.temperature = [lightgray]Lämpö: {0} - unit.dagger.name = Tikari unit.mace.name = Mace unit.fortress.name = Linnoitus @@ -936,6 +961,7 @@ block.cliff.name = Vuoren block.sand-boulder.name = Hiekkalohkare block.grass.name = Ruoho block.slag.name = Kuono +block.space.name = Space block.salt.name = Suolapitoisuus block.salt-wall.name = Salt Wall block.pebbles.name = Pikkukivi @@ -981,6 +1007,7 @@ block.darksand-water.name = Dark Sand Water block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ice Snow block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Power Infinite block.unloader.name = Unloader block.vault.name = Vault block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Kaari block.rtg-generator.name = RTG Generator block.spectre.name = Haamu block.meltdown.name = Sulamispiste +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = sininen team.crux.name = punainen @@ -1302,4 +1332,4 @@ block.cyclone.description = A large anti-air and anti-ground turret. Fires explo 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.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_fil.properties b/core/assets/bundles/bundle_fil.properties index 0fa6608526..9e796de8bf 100644 --- a/core/assets/bundles/bundle_fil.properties +++ b/core/assets/bundles/bundle_fil.properties @@ -55,6 +55,7 @@ schematic.saved = Na-i-adya na ang schematic. schematic.delete.confirm = Ang schematic na'to ay tuluyang mawawala. schematic.rename = Palitan Ang Pangalan ng Schematic schematic.info = {0}x{1}, {2} blocks +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Wave na Nalagpasan:[accent] {0} stat.enemiesDestroyed = Tinalong Kalaban:[accent] {0} @@ -100,7 +101,6 @@ done = Tapos Na feature.unsupported = Hindi suportado ng 'yong device ang feature na'to. mods.alphainfo = Tandaan mo na ang mga mod ay nasa 'alpha', at[scarlet] maaaring may depekto pa ang mga 'to[].\nI-ulat ang kahit anong depektong matutuklasan mo sa Mindustry GitHub o Discord. -mods.alpha = [accent](Alpha) mods = Mga Mod mods.none = [lightgray]Walang mga mod na nahanap! mods.guide = Gabay para sa Paggawa ng Mod @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Wave {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Wave in {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Waiting... waiting.players = Waiting for players... wave.enemies = [lightgray]{0} Enemies Remaining wave.enemy = [lightgray]{0} Enemy Remaining +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Load Image saveimage = Save Image unknown = Unknown @@ -328,6 +331,7 @@ editor.generation = Generation: editor.ingame = Edit In-Game editor.publish.workshop = Publish On Workshop editor.newmap = New Map +editor.center = Center workshop = Workshop waves.title = Waves waves.remove = Remove @@ -416,6 +420,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Ore Median @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Block filter.option.floor = Floor filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Best Wave: {0} -launch = < LAUNCH > launch.text = Launch -launch.title = Launch Successful -launch.next = [lightgray]next opportunity at wave {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done 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.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Paused > clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = Info error.title = [scarlet]An error has occured error.crashtitle = An error has occured unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Input stat.output = Output stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Power Capacity stat.powershot = Power/Shot stat.damage = Damage @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Power Use stat.powerdamage = Power/Damage stat.itemcapacity = Item Capacity +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time @@ -613,6 +626,28 @@ stat.reload = Shots/Second stat.ammo = Ammo stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Power: {0}/s bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} bar.poweroutput = Power Output: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Items: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Build Progress bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] damage bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary @@ -642,12 +680,15 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = power units/second unit.liquidsecond = liquid units/second unit.itemssecond = items/second @@ -670,7 +711,7 @@ category.power = Power category.liquids = Liquids category.items = Items category.crafting = Input/Output -category.shooting = Shooting +category.function = Function category.optional = Optional Enhancements setting.landscape.name = Lock Landscape setting.shadows.name = Shadows @@ -679,7 +720,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animated Fluids setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Borderless Window[lightgray] (restart may be required) setting.fps.name = Show FPS & Ping setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelate setting.minimap.name = Show Minimap @@ -822,6 +861,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer rules.waves = Waves rules.attack = Attack Mode @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Items content.liquid.name = Liquids content.unit.name = Units content.block.name = Blocks + item.copper.name = Copper item.lead.name = Lead item.coal.name = Coal @@ -879,23 +921,6 @@ liquid.slag.name = Slag liquid.oil.name = Oil liquid.cryofluid.name = Cryofluid -item.explosiveness = [lightgray]Explosiveness: {0}% -item.flammability = [lightgray]Flammability: {0}% -item.radioactivity = [lightgray]Radioactivity: {0}% - -unit.health = [lightgray]Health: {0} -unit.speed = [lightgray]Speed: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Heat Capacity: {0} -liquid.viscosity = [lightgray]Viscosity: {0} -liquid.temperature = [lightgray]Temperature: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.slag.name = Slag +block.space.name = Space block.salt.name = Salt block.salt-wall.name = Salt Wall block.pebbles.name = Pebbles @@ -981,6 +1007,7 @@ block.darksand-water.name = Dark Sand Water block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ice Snow block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Power Infinite block.unloader.name = Unloader block.vault.name = Vault block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = RTG Generator block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blue team.crux.name = red @@ -1302,4 +1332,4 @@ block.cyclone.description = A large anti-air and anti-ground turret. Fires explo 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.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 925465c595..307a8f586b 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -55,6 +55,7 @@ schematic.saved = Schéma sauvegardé. schematic.delete.confirm = Ce schéma sera supprimé définitivement. schematic.rename = Renommer le schéma schematic.info = {0}x{1}, {2} blocs +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Vagues vaincues:[accent] {0} stat.enemiesDestroyed = Ennemis détruits:[accent] {0} @@ -100,7 +101,6 @@ done = Fait feature.unsupported = Votre appareil ne supporte pas cette fonctionnalité. mods.alphainfo = Gardez à l'esprit que les mods sont en alpha et[scarlet] peuvent être très buggés[].\nMerci de signaler les problèmes que vous rencontrez via le GitHub ou le Discord Mindustry. -mods.alpha = [accent](Alpha) mods = Mods mods.none = [lightgray]Aucun mod trouvé! mods.guide = Guide de Modding @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] pour sélectionner et copier pausebuilding = [accent][[{0}][] pour mettre la construction en pause resumebuilding = [scarlet][[{0}][] pour reprendre la construction wave = [accent]Vague {0} +wave.cap = [accent]Vague {0}/{1} wave.waiting = [lightgray]Vague dans {0} wave.waveInProgress = [lightgray]Vague en cours waiting = [lightgray]En attente... waiting.players = En attente de joueurs... wave.enemies = [lightgray]{0} Ennemis restants wave.enemy = [lightgray]{0} Ennemi restant +wave.guardianwarn = Gardien à l'approche dans [accent]{0}[] vagues. +wave.guardianwarn.one = Gardien à l'approche dans [accent]{0}[] vague. loadimage = Charger l'image saveimage = Sauvegarder l'image unknown = Inconnu @@ -328,6 +331,7 @@ editor.generation = Génération: editor.ingame = Éditer dans le jeu editor.publish.workshop = Publier sur le Workshop editor.newmap = Nouvelle carte +editor.center = Centrer workshop = Steam Workshop waves.title = Vagues waves.remove = Supprimer @@ -416,6 +420,7 @@ filters.empty = [lightgray]Aucun filtre! Ajoutez-en un avec les boutons ci-desso filter.distort = Déformation filter.noise = Bruit filter.enemyspawn = Zone d'apparition enemi +filter.spawnpath = Path To Spawn filter.corespawn = Zone d'apparition du noyau filter.median = Médian filter.oremedian = Minerai Médian @@ -440,6 +445,7 @@ filter.option.amount = Quantité filter.option.block = Bloc filter.option.floor = Sol filter.option.flooronto = Sol en question +filter.option.target = Cible filter.option.wall = Mur filter.option.ore = Minerai filter.option.floor2 = Sol secondaire @@ -471,15 +477,9 @@ requirement.wave = Vague {0} dans {1} requirement.core = Détruire le Noyau ennemi dans {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Reprendre la partie:\n[lightgray]{0} bestwave = [lightgray]Meilleur: {0} -launch = < LANCEMENT > launch.text = Launch -launch.title = Lancement Réussi -launch.next = [lightgray]prochaine opportunité à la vague {0} -launch.unable2 = [scarlet]LANCEMENT impossible.[] -launch.confirm = Cela va transférer toutes les ressources de votre noyau.\nVous ne pourrez plus retourner à cette base. -launch.skip.confirm = Si vous passez à la vague suivante, vous ne pourrez pas effectuer le lancement avant les prochaines vagues. +research.multiplayer = Only the host can research items. uncover = Découvrir configure = Modifier les ressources à emporter loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Êtes-vous sûr d'effacer ces données ?\nAucun retour settings.clearall.confirm = [scarlet]ATTENTION![]\nCette action effacera toutes les données, y compris les sauvegardes, les cartes, la progression et la configuration des touches.\nUne fois que vous aurez pressé 'OK' le jeu effacera TOUTES les données et se fermera. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Pause > clear = Effacer banned = [scarlet]Bannis @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]Une erreur s'est produite error.crashtitle = Une erreur s'est produite unit.nobuild = [scarlet]Cette unité ne peut construire +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Entrée stat.output = Sortie stat.booster = Booster stat.tiles = Pré-requis stat.affinities = Affinités -block.unknown = [lightgray]??? stat.powercapacity = Capacité d'énergie stat.powershot = Énergie/Tir stat.damage = Dégâts @@ -594,6 +606,7 @@ stat.powerconnections = Nombre maximal de connections stat.poweruse = Énergie utilisée stat.powerdamage = Dégâts d'énergie stat.itemcapacity = Stockage +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Production d'énergie stat.productiontime = Durée de production stat.repairtime = Durée de réparation complète du Bloc @@ -613,6 +626,28 @@ stat.reload = Tirs/Seconde stat.ammo = Munitions stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Meilleure Foreuse Requise bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Énergie: {0}/s bar.powerstored = En stock: {0}/{1} bar.poweramount = Énergie: {0} bar.poweroutput = Énergie Produite: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Objets: {0} bar.capacity = Capacité: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Progression de la construction bar.input = Entrée bar.output = Sortie +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] dégâts bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgray] blocs bullet.incendiary = [stat]incendiaire @@ -642,12 +680,15 @@ bullet.homing = [stat]autoguidé bullet.shock = [stat]choc électrique bullet.frag = [stat]explosif bullet.knockback = [stat]{0}[lightgray] recul +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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 tir unit.blocks = blocs +unit.blockssquared = blocks² unit.powersecond = énergie/seconde unit.liquidsecond = unité de liquide/seconde unit.itemssecond = objets/seconde @@ -670,7 +711,7 @@ category.power = Énergie category.liquids = Liquides category.items = Objets category.crafting = Fabrication -category.shooting = Puissance de feu +category.function = Function category.optional = Améliorations optionnelles setting.landscape.name = Verrouiller en rotation paysage setting.shadows.name = Ombres @@ -679,7 +720,6 @@ setting.linear.name = Filtrage Linéaire setting.hints.name = Astuces setting.flow.name = Afficher le Débit des Ressources setting.buildautopause.name = Confirmation avant la construction -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Eau animée setting.animatedshields.name = Boucliers Animés setting.antialias.name = Anticrénelage[lightgray] (redémarrage du jeu nécessaire)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Plein Écran setting.borderlesswindow.name = Fenêtre sans bords (Borderless)[lightgray] (peut nécessiter le redémarrage du jeu) setting.fps.name = Afficher FPS et Ping setting.smoothcamera.name = Lissage de la Caméra -setting.blockselectkeys.name = Afficher les Touches pour Sélectionner les Blocs avec un Clavier setting.vsync.name = VSync setting.pixelate.name = Pixeliser[lightgray] (désactive les animations) setting.minimap.name = Afficher la Minimap @@ -822,6 +861,7 @@ mode.custom = Règles personnalisées rules.infiniteresources = Ressources infinies rules.reactorexplosions = Explosion des Réacteurs +rules.schematic = Schematics Allowed rules.wavetimer = Minuterie pour les vagues rules.waves = Vagues rules.attack = Mode « Attaque » @@ -847,6 +887,7 @@ rules.title.unit = Unités rules.title.experimental = Expérimental rules.title.environment = Environment rules.lighting = Éclairage +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Éclairage Ambiant @@ -858,6 +899,7 @@ content.item.name = Objets content.liquid.name = Liquides content.unit.name = Unités content.block.name = Blocs + item.copper.name = Cuivre item.lead.name = Plomb item.coal.name = Charbon @@ -879,23 +921,6 @@ liquid.slag.name = Scories liquid.oil.name = Pétrole liquid.cryofluid.name = Liquide Cryogénique -item.explosiveness = [lightgray]Explosivité: {0} -item.flammability = [lightgray]Inflammabilité: {0} -item.radioactivity = [lightgray]Radioactivité: {0} - -unit.health = [lightgray]Santé: {0} -unit.speed = [lightgray]Vitesse: {0} -unit.weapon = [lightgray]Arme: {0} -unit.itemcapacity = [lightgray]Stockage: {0} -unit.minespeed = [lightgray]Vitesse de Minage: {0}% -unit.minepower = [lightgray]Puissance de Minage: {0} -unit.ability = [lightgray]Abilité: {0} -unit.buildspeed = [lightgray]Vitesse de Construction: {0}% - -liquid.heatcapacity = [lightgray]Capacité Thermique: {0} -liquid.viscosity = [lightgray]Viscosité: {0} -liquid.temperature = [lightgray]Température: {0} - unit.dagger.name = Poignard unit.mace.name = Mace unit.fortress.name = Forteresse @@ -936,6 +961,7 @@ block.cliff.name = Falaise block.sand-boulder.name = Bloc de Sable block.grass.name = Herbe block.slag.name = Scories +block.space.name = Space block.salt.name = Sel block.salt-wall.name = Salt Wall block.pebbles.name = Cailloux @@ -981,6 +1007,7 @@ block.darksand-water.name = Eau avec fond de Sable Sombre block.char.name = Cendre block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Neige et Glace block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Source d'Énergie block.unloader.name = Déchargeur block.vault.name = Coffre-Fort block.wave.name = Onde +block.tsunami.name = Tsunami block.swarmer.name = Nuée block.salvo.name = Salve block.ripple.name = Percussion @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = Générateur G.T.R. block.spectre.name = Spectre block.meltdown.name = Fusion +block.foreshadow.name = Foreshadow block.container.name = Conteneur block.launch-pad.name = Plateforme de Lancement block.launch-pad-large.name = Grande Plateforme de Lancement @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = bleu team.crux.name = rouge @@ -1302,4 +1332,4 @@ block.cyclone.description = Une grande tourelle qui tire rapidement des débris block.spectre.description = Une tourelle massive à double cannon et qui tire de puissantes balles perce-blindages simultanément. block.meltdown.description = Une tourelle massive chargeant et tirant de puissants rayons lasers. Nécessite un liquide de refroidissement. block.repair-point.description = Soigne en permanence l'unité endommagée la plus proche à proximité. -block.segment.description = Endommage et détruit les tirs ennemis. Cependant, les lasers ne peuvent pas être ciblés. \ No newline at end of file +block.segment.description = Endommage et détruit les tirs ennemis. Cependant, les lasers ne peuvent pas être ciblés. diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index 869da14c46..8975031cb6 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -20,8 +20,8 @@ gameover = Le base a été détruite. gameover.pvp = L'équipe[accent] {0}[] a gagnée ! highscore = [accent]Nouveau meilleur score ! copied = Copié. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]La v6[] est actuellement en [accent]alpha[].\n[lightgray]Cela signifie :[]\n[scarlet]- La campagne est totalement incomplète[]\n- Il manque du contenu\n - La plupart des [scarlet]IA d'unités[] ne fonctionne pas correctement\n- De nombreuses unités ne sont pas terminées\n- Tout ce que vous voyez est susceptible d'être modifié ou supprimé.\n\nMerci de rapporter les bugs/crash sur [accent]Github[]. +indev.notready = Cette partie du jeu n'est pas encore prête load.sound = Son load.map = Maps @@ -33,7 +33,7 @@ load.scripts = Scripts be.update = Une nouvelle version est disponible: be.update.confirm = Voulez vous la télécharger et recommencer maintenant ? -be.updating = Entrain de mettre à jour... +be.updating = En train de mettre à jour... be.ignore = Ignorer be.noupdates = Aucune mise à jour n'as été trouvée. be.check = Chercher des mises à jour @@ -52,9 +52,10 @@ schematic.copy.import = Importer du presse-papier schematic.shareworkshop = Partager sur l'Atelier schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner Schéma schematic.saved = Schéma enregistré. -schematic.delete.confirm = Ce Schéma sera totalement éradiqué. +schematic.delete.confirm = Ce Schéma sera définitivement supprimé. schematic.rename = Renommer Schéma schematic.info = {0}x{1}, {2} blocks +schematic.disabled = [scarlet] Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]map[] ou ce [accent]serveur. stat.wave = Vagues vaincues:[accent] {0} stat.enemiesDestroyed = Ennemies détruits:[accent] {0} @@ -100,7 +101,6 @@ done = Fini feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité. mods.alphainfo = Tenez en compte que les mods sont en version alpha et [scarlet] qu'ils peuvent avoir des bugs[].\nVeuillez signaler tout les problèmes que vous encontrez sur le Github de Mindustry ou sur Discord. -mods.alpha = [accent](Alpha) mods = Mods mods.none = [lightgray]Aucun Mod trouvé ! mods.guide = Guide de Modding @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Vague {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Prochaine vague dans {0} wave.waveInProgress = [lightgray]Vague en cours waiting = [lightgray]En attente... waiting.players = En attente de joueurs ... wave.enemies = [lightgray]{0} Ennemis restants wave.enemy = [lightgray]{0} Ennemi restant +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Charger l'image saveimage = Sauvegarder l'image unknown = Inconnu @@ -328,6 +331,7 @@ editor.generation = Generation: editor.ingame = Modifier en jeu editor.publish.workshop = Publish On Workshop editor.newmap = Nouvelle carte +editor.center = Center workshop = Workshop waves.title = Vagues waves.remove = Retirer @@ -416,6 +420,7 @@ filters.empty = [lightgray]Aucun filtre! Ajoutez-en un avec les boutons ci-desso filter.distort = Déformation filter.noise = Bruit filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Ore Median @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Bloc filter.option.floor = Sol filter.option.flooronto = Sible au sol +filter.option.target = Target filter.option.wall = Mur filter.option.ore = Minerai filter.option.floor2 = Sol secondaire @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Reprendre la partie en cours:\n[lightgray]{0} bestwave = [lightgray]Meilleur: {0} -launch = Lancement launch.text = Launch -launch.title = Lancement réussi -launch.next = [lightgray]Prochaine opportunité à la vague {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = Cela lancera toutes les ressources dans votre noyau.\nVous ne pourrez pas revenir à cette base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +research.multiplayer = Only the host can research items. uncover = Découvrir configure = Configurer le transfert des ressources. loadout = Loadout @@ -508,12 +508,13 @@ 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. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = Pluie +weather.snow.name = Neige +weather.sandstorm.name = Tempête de sable +weather.sporestorm.name = Tempête de spores +weather.fog.name = Brouillard -sectors.unexplored = [lightgray]Unexplored +sectors.unexplored = [lightgray] Inexploré sectors.resources = Resources: sectors.production = Production: sectors.stored = Stored: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Ressources du noyau insuffisantes + +planet.serpulo.name = Serpulo +planet.sun.name = Soleil sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -546,8 +552,8 @@ sector.desolateRift.description = An extremely dangerous zone. Plentiful resourc sector.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. sector.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. -settings.language = Langage -settings.data = Game Data +settings.language = Langue +settings.data = Données du jeu settings.reset = Valeur par défaut. settings.rebind = Réatttribuer settings.resetKey = Reset @@ -560,6 +566,10 @@ settings.clear.confirm = Êtes-vous sûr d'effacer ces données ?\n[scarlet]Ceci settings.clearall.confirm = [scarlet]ATTENTION![]\nCet action effacera toutes les données , incluant les sauvegarges, les cartes, les déblocages et la configuration des touches.\nUne fois que vous aurez pressé 'Ok' le jeu effacera toutes les données et se fermera. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = En pause clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]Une erreur s'est produite error.crashtitle = Une erreur s'est produite unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]Inconnu + stat.input = Ressource(s) requise(s) stat.output = Ressource(s) produite(s) stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]Inconnu stat.powercapacity = Capacité d'énergie stat.powershot = Énergie/Tir stat.damage = Damage @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Énergie utilisée stat.powerdamage = Énergie/Dégâts stat.itemcapacity = Stockage +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Production d'énergie de base stat.productiontime = Temps de production stat.repairtime = Temps pour la réparation totale du bloc @@ -613,6 +626,28 @@ stat.reload = Tirs/Seconde stat.ammo = Munition stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Énergie: {0} bar.powerstored = Stored: {0}/{1} bar.poweramount = Énergie: {0} bar.poweroutput = Énergie en sortie: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Objets: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Progression de la construction bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] dégats bullet.splashdamage = [stat]{0}[lightgray] dgt zone ~[stat] {1}[lightgray] tuiles bullet.incendiary = [stat]incendiaire @@ -642,12 +680,15 @@ bullet.homing = [stat]autoguidage bullet.shock = [stat]choc bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray]recul +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = Énergie/seconde unit.liquidsecond = Liquides/seconde unit.itemssecond = Objets/seconde @@ -670,7 +711,7 @@ category.power = Énergie category.liquids = Liquides category.items = Objets category.crafting = Fabrication -category.shooting = Défense +category.function = Function category.optional = Améliorations facultatives setting.landscape.name = Verrouiller la rotation en mode paysage setting.shadows.name = Ombres @@ -679,7 +720,6 @@ setting.linear.name = Filtrage linéaire setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Eau animée setting.animatedshields.name = Boucliers Animés setting.antialias.name = Antialias[lightgray] (demande le redémarrage de l'appareil)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Plein écran setting.borderlesswindow.name = Fenêtre sans bordure[lightgray] (peut nécessiter un redémarrage) setting.fps.name = Afficher FPS setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixélisé [lightgray](peut diminuer les performances)[] setting.minimap.name = Montrer la minimap @@ -822,6 +861,7 @@ mode.custom = Règles personnalisées rules.infiniteresources = Ressources infinies rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Temps de vague rules.waves = Vague rules.attack = Mode attaque @@ -847,6 +887,7 @@ rules.title.unit = Unités rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Objets content.liquid.name = Liquides content.unit.name = Unités content.block.name = Blocs + item.copper.name = Cuivre item.lead.name = Plomb item.coal.name = Charbon @@ -879,30 +921,13 @@ liquid.slag.name = Scorie liquid.oil.name = Pétrole liquid.cryofluid.name = Liquide Cryogénique -item.explosiveness = [lightgray]Explosivité: {0} -item.flammability = [lightgray]Inflammabilité: {0} -item.radioactivity = [lightgray]Radioactivité: {0} - -unit.health = [lightgray]Santé: {0} -unit.speed = [lightgray]Vitesse: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Capacité Thermique {0} -liquid.viscosity = [lightgray]Viscosité: {0} -liquid.temperature = [lightgray]Température: {0} - unit.dagger.name = Poignard unit.mace.name = Mace unit.fortress.name = Forteresse unit.nova.name = Nova unit.pulsar.name = Pulsar unit.quasar.name = Quasar -unit.crawler.name = Chenille +unit.crawler.name = Rampeur unit.atrax.name = Atrax unit.spiroct.name = Spiroct unit.arkyid.name = Arkyid @@ -930,17 +955,18 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Resupply Point +block.resupply-point.name = Point de rechargement block.parallax.name = Parallax -block.cliff.name = Cliff +block.cliff.name = Falaise block.sand-boulder.name = Sable rocheux block.grass.name = Herbe -block.slag.name = Slag +block.slag.name = Scories +block.space.name = Space block.salt.name = Sel -block.salt-wall.name = Salt Wall +block.salt-wall.name = Mur de sel block.pebbles.name = Cailloux block.tendrils.name = Vrilles -block.sand-wall.name = Sand Wall +block.sand-wall.name = Mur de sable block.spore-pine.name = Pin sporifère block.spore-wall.name = Spore Wall block.boulder.name = Boulder @@ -957,11 +983,11 @@ block.scrap-wall-large.name = Grand mur de ferraille block.scrap-wall-huge.name = Enorme mur de ferraille block.scrap-wall-gigantic.name = Gigantesque mur de ferraille block.thruster.name = Propulseur -block.kiln.name = Four a métaverre +block.kiln.name = Four block.graphite-press.name = Presse à graphite block.multi-press.name = Multi-Presse block.constructing = {0}\n[lightgray](En construction) -block.spawn.name = Générateur d'ennemi +block.spawn.name = Générateur d'ennemis block.core-shard.name = Core: Shard block.core-foundation.name = Core: Fondation block.core-nucleus.name = Core: Nucleus @@ -981,6 +1007,7 @@ block.darksand-water.name = Eau (sable noir) block.char.name = Carboniser block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Neige glacée block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1021,71 +1048,72 @@ block.thorium-wall-large.name = Grand mur en thorium block.door.name = Porte block.door-large.name = Grande porte block.duo.name = Duo -block.scorch.name = Scorch -block.scatter.name = Scatter -block.hail.name = Hail -block.lancer.name = Lancer -block.conveyor.name = Transporteur -block.titanium-conveyor.name = Transporteur en titane -block.plastanium-conveyor.name = Plastanium Conveyor -block.armored-conveyor.name = Armored Conveyor +block.scorch.name = Brûleur +block.scatter.name = Disperseur +block.hail.name = Grêle +block.lancer.name = Lancier +block.conveyor.name = Convoyeur +block.titanium-conveyor.name = Convoyeur en titane +block.plastanium-conveyor.name = Convoyeur en plastanium +block.armored-conveyor.name = Convoyeur cuirassé 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.junction.name = Jonction block.router.name = Routeur block.distributor.name = [accent]Distributeur[] block.sorter.name = Trieur -block.inverted-sorter.name = Inverted Sorter +block.inverted-sorter.name = Trieur inversé 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.underflow-gate.name = Underflow Gate +block.underflow-gate.name = Barrière de Refoulement block.silicon-smelter.name = Fonderie de silicium block.phase-weaver.name = Tisseur à phase block.pulverizer.name = Pulvérisateur block.cryofluid-mixer.name = Refroidisseur block.melter.name = Four à Fusion block.incinerator.name = Incinérateur -block.spore-press.name = Spore presse +block.spore-press.name = Presse à spores block.separator.name = Séparateur 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.diode.name = Diode de batterie block.battery.name = Batterie -block.battery-large.name = Batterie large +block.battery-large.name = Grande batterie block.combustion-generator.name = Générateur à combustion block.steam-generator.name = Générateur à turbine block.differential-generator.name = Générateur différentiel block.impact-reactor.name = Réacteur à impact block.mechanical-drill.name = Foreuse mécanique -block.pneumatic-drill.name = Foreuse à vérin +block.pneumatic-drill.name = Foreuse à vérins block.laser-drill.name = Foreuse Laser block.water-extractor.name = Extracteur d'eau block.cultivator.name = Cultivateur block.conduit.name = Conduit -block.mechanical-pump.name = Pompe Méchanique +block.mechanical-pump.name = Pompe Mécanique 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.liquid-void.name = Vaporisateur block.power-void.name = Absorbeur énergétique block.power-source.name = Puissance infinie block.unloader.name = Déchargeur block.vault.name = Coffre-Fort block.wave.name = Vague +block.tsunami.name = Tsunami block.swarmer.name = Essaim block.salvo.name = Salve -block.ripple.name = Ripple -block.phase-conveyor.name = Transporteur phasé -block.bridge-conveyor.name = Pont transporteur +block.ripple.name = Percussion +block.phase-conveyor.name = Convoyeur phasé +block.bridge-conveyor.name = Pont block.plastanium-compressor.name = Compresseur de plastanium block.pyratite-mixer.name = Mixeur à pyratite block.blast-mixer.name = Mixeur à explosion block.solar-panel.name = Panneau solaire block.solar-panel-large.name = Grand panneau solaire -block.oil-extractor.name = Extracteur de pétrol +block.oil-extractor.name = Extracteur de pétrole block.repair-point.name = Point de Réparation block.pulse-conduit.name = Conduit à Impulsion block.plated-conduit.name = Plated Conduit @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = G.T.R. block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Conteneur block.launch-pad.name = Rampe de lancement block.launch-pad-large.name = Grande rampe de lancement @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = Bleu team.crux.name = red @@ -1244,7 +1274,7 @@ block.inverted-sorter.description = Processes items like a standard sorter, but block.router.description = Accepte les éléments d'une direction et les envoie dans 3 autres directions de manière égale. Utile pour séparer les matériaux d'une source en plusieurs cibles. block.distributor.description = Un routeur avancé qui divise les articles en 7 autres directions de manière égale. [scarlet]Seule et unique ![] block.overflow-gate.description = C'est la combinaison entre un routeur et un diviseur qui peut seulement distribuer à gauche et à droite si le chemin de devant est bloqué. -block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. +block.underflow-gate.description = Le contraire d'une barrière de débordement.\nEnvoie les ressources vers l'avant si les chemins de gauche et de droite sont bloqués. block.mass-driver.description = Bloc de transport d'articles ultime.\nRecueille plusieurs objets et les envoie ensuite à un autre pilote de masse sur une longue distance. block.mechanical-pump.description = Une pompe bon marché avec un débit lent, mais aucune consommation d'énergie. block.rotary-pump.description = Une pompe avancée qui double la vitesse en utilisant l’énergie. @@ -1302,4 +1332,4 @@ block.cyclone.description = Une grande tourelle à tir rapide. block.spectre.description = Une grande tourelle qui tire deux balles puissantes à la fois. block.meltdown.description = Une grande tourelle qui tire de puissants faisceaux à longue portée. block.repair-point.description = Soigne en permanence l'unité endommagée la plus proche à proximité. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index c24c9a24ee..0d342c5491 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -55,6 +55,7 @@ schematic.saved = Schematic mentve. schematic.delete.confirm = Ez a Schematic törölve lesz. schematic.rename = Schematic átnevezése schematic.info = {0}x{1}, {2} blokk +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Hullámok kivédve:[accent] {0} stat.enemiesDestroyed = Ellenségek kivédve:[accent] {0} @@ -100,7 +101,6 @@ done = Kész feature.unsupported = Az eszköz nem támogatja a funkciót. mods.alphainfo = Figyelem! a modok alfa állapotban vannak, és[scarlet] nagyon sok lehet benne a hiba[].\nJelentsd be az esetleges hibákat a Mindustry GitHubon vagy a Discordon. -mods.alpha = [accent](Alfa) mods = Modok mods.none = [LIGHT_GRAY]Nincsen Mod! mods.guide = Mod készítési útmutató @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]{0}. hullám +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Következő hullám: {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Várakozás... waiting.players = Waiting for players... wave.enemies = [lightgray]{0} ellenség maradt wave.enemy = [lightgray]{0} ellenség maradt +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Load Image saveimage = Save Image unknown = Unknown @@ -328,6 +331,7 @@ editor.generation = Generation: editor.ingame = Edit In-Game editor.publish.workshop = Publish On Workshop editor.newmap = New Map +editor.center = Center workshop = Workshop waves.title = Waves waves.remove = Remove @@ -416,6 +420,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Ore Median @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Block filter.option.floor = Floor filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Best Wave: {0} -launch = < INDÍTÁS > launch.text = Launch -launch.title = Indítás sikeres -launch.next = [lightgray]következő lehetőség a {0}. hullámnál -launch.unable2 = [scarlet]Nem lehet ELINDÍTANI.[] -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. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done 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.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Paused > clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]An error has occured error.crashtitle = An error has occured unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Input stat.output = Output stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Power Capacity stat.powershot = Power/Shot stat.damage = Damage @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Power Use stat.powerdamage = Power/Damage stat.itemcapacity = Item Capacity +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time @@ -613,6 +626,28 @@ stat.reload = Shots/Second stat.ammo = Ammo stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Power: {0}/s bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} bar.poweroutput = Power Output: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Items: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Build Progress bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] damage bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary @@ -642,12 +680,15 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = power units/second unit.liquidsecond = liquid units/second unit.itemssecond = items/second @@ -670,7 +711,7 @@ category.power = Power category.liquids = Liquids category.items = Items category.crafting = Input/Output -category.shooting = Shooting +category.function = Function category.optional = Optional Enhancements setting.landscape.name = Lock Landscape setting.shadows.name = Shadows @@ -679,7 +720,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animated Water setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] @@ -691,7 +731,7 @@ 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.uiscale.name = UI Scaling[lightgray] (requires restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = Training setting.difficulty.easy = Easy @@ -713,7 +753,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart) setting.fps.name = Show FPS & Ping setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelate setting.minimap.name = Show Minimap @@ -822,6 +861,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer rules.waves = Waves rules.attack = Attack Mode @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Items content.liquid.name = Liquids content.unit.name = Units content.block.name = Blocks + item.copper.name = Copper item.lead.name = Lead item.coal.name = Coal @@ -879,23 +921,6 @@ liquid.slag.name = Slag liquid.oil.name = Oil liquid.cryofluid.name = Cryofluid -item.explosiveness = [lightgray]Robbanékonyság: {0}% -item.flammability = [lightgray]Gyúlékonyság: {0}% -item.radioactivity = [lightgray]Radioaktivitás: {0}% - -unit.health = [lightgray]Health: {0} -unit.speed = [lightgray]Sebesség: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Hő hapacitás: {0} -liquid.viscosity = [lightgray]Viszkozitás: {0} -liquid.temperature = [lightgray]Hőmérséklet: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.slag.name = Slag +block.space.name = Space block.salt.name = Salt block.salt-wall.name = Salt Wall block.pebbles.name = Pebbles @@ -981,6 +1007,7 @@ block.darksand-water.name = Dark Sand Water block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ice Snow block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Power Infinite block.unloader.name = Unloader block.vault.name = Vault block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = RTG Generator block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blue team.crux.name = red @@ -1302,4 +1332,4 @@ block.cyclone.description = A large anti-air and anti-ground turret. Fires explo 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.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index e9f6f933eb..1616c1ef5e 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -101,7 +101,6 @@ done = Selesai feature.unsupported = Perangkat Anda tidak mendukung fitur ini. mods.alphainfo = Perlu diingat bahwa mod masih dalam perkembangan, dan[scarlet] bisa mengakibatkan kerusakan[].\nLapor isu atau masalah di Github atau Discord Mindustry. -mods.alpha = [accent](Alpha) mods = Mod mods.none = [lightgray]Tidak ada mod yang ditemukan! mods.guide = Panduan Modding @@ -268,6 +267,9 @@ cancel = Batal openlink = Buka Tautan copylink = Salin Tautan back = Kembali +crash.export = Export Crash Logs +crash.none = No crash logs found. +crash.exported = Crash logs exported. data.export = Ekspor Data data.import = Impor Data data.openfolder = Buka Folder Data @@ -285,12 +287,15 @@ selectschematic = [accent][[{0}][] untuk memilih+salin pausebuilding = [accent][[{0}][] untuk berhenti membangun resumebuilding = [scarlet][[{0}][] untuk lanjut membangun wave = [accent]Gelombang {0} +wave.cap = [accent]Gelombang {0}/{1} wave.waiting = [lightgray]Gelombang di {0} wave.waveInProgress = [lightgray]Gelombang sedang berlangsung waiting = [lightgray]Menunggu... waiting.players = Menunggu pemain lainnya... wave.enemies = [lightgray]{0} Musuh Tersisa wave.enemy = [lightgray]{0} Musuh Tersisa +wave.guardianwarn = Guardian akan tiba dalam [accent]{0}[] gelombang. +wave.guardianwarn.one = Guardian akan tiba dalam [accent]{0}[] gelombang. loadimage = Memuat Gambar saveimage = Simpan Gambar unknown = Tak diketahui @@ -329,6 +334,7 @@ editor.generation = Generasi: editor.ingame = Sunting dalam Permainan editor.publish.workshop = Terbitkan di Workshop editor.newmap = Peta Baru +editor.center = Pusat workshop = Workshop waves.title = Gelombang waves.remove = Hapus @@ -418,6 +424,7 @@ filters.empty = [lightgray]Tidak ada filter! Tambahkan dengan tombol dibawah. filter.distort = Kerusakkan filter.noise = Kebisingan filter.enemyspawn = Pilih Munculnya Musuh +filter.spawnpath = Path To Spawn filter.corespawn = Pilih Inti filter.median = Median filter.oremedian = Median Bijih @@ -442,6 +449,7 @@ filter.option.amount = Jumlah filter.option.block = Blok filter.option.floor = Lantai filter.option.flooronto = Target Lantai +filter.option.target = Target filter.option.wall = Dinding filter.option.ore = Sumber Daya filter.option.floor2 = Lantai Sekunder @@ -458,6 +466,8 @@ load = Memuat save = Simpan fps = FPS: {0} ping = Ping: {0}ms +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb language.restart = Silahkan mengulang kembali permainan agar pengaturan bahasa berpengaruh. settings = Pengaturan tutorial = Tutorial @@ -475,9 +485,10 @@ requirement.research = Kembangkan {0} requirement.capture = Kuasai {0} bestwave = [lightgray]Gelombang Terbaik: {0} launch.text = Luncurkan -campaign.multiplayer = Saat bermain bersama di kampanye, Kamu hanya bisa kembangkan menggunakan item dari sektor [accent]kamu[], [scarlet]Bukan[] sektor milik host yang kamu berada sekarang.\n\nUntuk mendapatkan item tersebut ke sektor [accent]kamu[] saat bermain bersama, gunakan [accent]alas peluncur[]. +research.multiplayer = Hanya host yang dapat meneliti item. uncover = Buka configure = Konfigurasi Muatan + #TODO loadout = Muatan resources = Sumber Daya @@ -487,14 +498,14 @@ launch.destination = Destinasi: {0} configure.invalid = Jumlah harus berupa angka diantara 0 dan {0}. zone.unlocked = [lightgray]{0} terbuka. zone.requirement.complete = Gelombang {0} terselesaikan:\nPersyaratan zona {1} tercapai. -zone.resources = Sumber Daya Terdeteksi: +zone.resources = [lightgray]Sumber Daya Terdeteksi: zone.objective = [lightgray]Objektif: [accent]{0} zone.objective.survival = Bertahan zone.objective.attack = Hancurkan Inti Musuh add = Menambahkan... boss.health = Darah Bos -connectfail = [crimson]Gagal menyambung ke server:\n\n[accent]{0} +connectfail = [scarlet]Gagal menyambung ke server:\n\n[accent]{0} error.unreachable = Server tak terjangkau.\nApakah alamatnya benar? error.invalidaddress = Alamat tidak valid. error.timedout = Kehabisan waktu!\nPastikan pemilik mempunyai port forwarding, dan alamatnya benar! @@ -509,6 +520,7 @@ weather.rain.name = Hujan weather.snow.name = Salju weather.sandstorm.name = Badai Pasir weather.sporestorm.name = Badai Spora +weather.fog.name = Kabut sectors.unexplored = [lightgray]Belum Ditelusuri sectors.resources = Sumber Daya: @@ -518,6 +530,12 @@ sectors.resume = Lanjutkan sectors.launch = Luncurkan sectors.select = Pilih sectors.nonelaunch = [lightgray]tidak ada +sectors.rename = Ganti Nama Sektor +sector.missingresources = [scarlet]Sumber Daya Inti Tidak Cukup + +planet.serpulo.name = Serpulo +#TODO better name +planet.sun.name = Matahari #NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway sector.groundZero.name = Ground Zero @@ -536,17 +554,17 @@ sector.fungalPass.name = Fungal Pass #sector.impact0078.name = Impact 0078 #sector.crags.name = Crags -sector.groundZero.description = Lokasi yang optimal untuk bermain satu kali lagi. Sangat sedikit musuh. Beberapa sumber daya.\nKumpulkan timah dan tembaga sebanyak yang anda bisa.\nPindah. -sector.frozenForest.description = Disini, dekat dengan gunung, spora spora sudah menyebar. Temperatur yang sangat rendah tidak dapat mempertahankan selamanya.\n\nBerusaha untuk kekuatan. Bangun generator pembakaran. Pelajari cara menggunakan mender. -sector.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. -sector.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. -sector.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. -sector.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. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.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. -sector.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. -sector.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. -sector.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. +sector.groundZero.description = Lokasi yang optimal untuk bermain satu kali lagi. Sangat sedikit musuh. Beberapa sumber daya dapat dikumpulkan.\nKumpulkan timah dan tembaga sebanyak yang kamu bisa.\nMulai dari sini. +sector.frozenForest.description = Disini, dekat dengan gunung, spora sudah menyebar. Suhu dingin tidak dapat menahannya.\n\nHasilkan listrik. Bangun generator pembakar. Pelajari cara menggunakan mender. +sector.saltFlats.description = Di pinggiran padang pasir terdapat Daratan Garam. Beberapa sumber daya dapat ditemukan disini.\n\nMusuh telah membangun gudang disini. Hancurkan inti mereka. Jangan biarkan satupun tersisa. +sector.craters.description = Air banyak terkumpul di kawah ini, sebuah peninggalan dari perang masa lalu. Klaim area ini lagi. Kumpulkan pasir. Lebur metaglass. Pompa air untuk mendinginkan turret dan bor. +sector.ruinousShores.description = Keluar dari lembah gunung, terdapat garis pantai. Sebelumnya, area ini adalah garis pertahanan pantai. Sekarang tidak banyak yang tersisa. Hanya pertahanan dasar yang tersisa, yang lain hancur berkeping keping.\nBangun kembali pertahanan di sini. Pelajari lebih banyak teknologi. +sector.stainedMountains.description = Area ini terletak di dekat pegunungan, namun belum tersentuh oleh spora.\nTambang titanium yang ada di area ini. Pelajari fungsinya.\n\nMusuh jauh lebih kuat disini. Jangan biarkan mereka meluncurkan unit yang lebih kuat. +sector.overgrowth.description = Area ini banyak ditumbuhi spora, karena dekat dengan sumber spora.\nMusuh telah membangun basis disini. Bangun unit Mace. Hancurkan mereka. Klaim apapun yang tersisa. +sector.tarFields.description = Terletak di pinggiran zona produksi minyak, diantara gunung dan padang pasir. Salah satu dari beberapa area yang memiliki cadangan minyak yang dapat digunakan.\nMeskipun ditinggalkan, area ini terdapat pertahanan musuh yang sangat kuat disekitarnya. Jangan meremehkan mereka.\n\n[lightgray]Pelajari proses penyulingan minyak jika bisa. +sector.desolateRift.description = Zona yang sangat berbahaya. Banyak sumber daya, tetapi terdapat sedikit ruang. Sangat beresiko tinggi untuk dihancurkan. Keluar secepat yang kamu bisa. Jangan terlena karena waktu antara gelombang yang lama. +sector.nuclearComplex.description = Sebuah fasilitas untuk memproduksi dan memproses thorium, telah hancur.\n[lightgray]Pelajari thorium dan cara penggunaanya.\n\nMusuh disini menyerang dalam jumlah besar, yang siap untuk menghadapi siapapun. +sector.fungalPass.description = Area ini terdapat diantara pegunungan yang lebih tinggi dengan yang lebih rendah, juga daerah yang dipenuhi spora. Musuh membangun basis kecil disini.\nHancurkan itu.\nGunakan unit Dagger dan Crawler. Hancurkan dua inti mereka. settings.language = Bahasa settings.data = Data Game @@ -562,22 +580,28 @@ settings.clear.confirm = Anda yakin ingin menghapus data ini?\nWaktu tidak bisa settings.clearall.confirm = [scarlet]PERINGATAN![]\nIni akan menghapus semua data permainan, termasuk simpanan, peta, bukaan dan keybind.\nSetelah Anda menekan 'ok' permainan akan menghapus semua data dan keluar otomatis. settings.clearsaves.confirm = Anda yakin ingin menghapus semua simpanan? settings.clearsaves = Bersihkan Simpanan +settings.clearresearch = Bersihkan Penelitian +settings.clearresearch.confirm = Apakah Anda yakin ingin membersihkan semua penelitian kampanye? +settings.clearcampaignsaves = Bersihkan Simpanan Kampanye +settings.clearcampaignsaves.confirm = Apakah Anda yakin ingin membersihkan semua simpanan kampanye? paused = [accent]< Jeda > clear = Bersih banned = [scarlet]Dilarang -unplaceable.sectorcaptured = [scarlet]Membutuhkan sektor yang dikuasai yes = Ya no = Tidak info.title = Info error.title = [crimson]Sebuah kesalahan telah terjadi error.crashtitle = Sebuah kesalahan telah terjadi unit.nobuild = [scarlet]Unit tidak dapat membangun +lastaccessed = [lightgray]Terakhir Diakses: {0} +block.unknown = [lightgray]??? + +stat.description = Purpose stat.input = Masukan stat.output = Pengeluaran stat.booster = Pendorong stat.tiles = Kotak yang dibutuhkan stat.affinities = Afinitas -block.unknown = [lightgray]??? stat.powercapacity = Kapasitas Tenaga stat.powershot = Tenaga/Tembakan stat.damage = Kerusakan @@ -614,8 +638,32 @@ stat.inaccuracy = Jarak Melenceng stat.shots = Tembakan stat.reload = Tembakan/Detik stat.ammo = Amunisi -stat.shieldhealth = Shield Health +stat.shieldhealth = Darah Perisai stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = Heat Capacity +stat.viscosity = Viscosity +stat.temperature = Temperatur +stat.speed = Kecepatan +stat.buildspeed = Kecepatan Membangun +stat.minespeed = Kecepatan Menambang +stat.minetier = Tingkat Menambang +stat.payloadcapacity = Kapasitas Muatan +stat.commandlimit = Batas Perintah +stat.abilities = Abilities +stat.canboost = Can Boost +stat.flying = Terbang + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Pabrik +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Membutuhkan Bor yang Lebih Baik bar.noresources = Sumber Daya Tidak Ditemukan @@ -627,6 +675,7 @@ bar.powerbalance = Tenaga: {0}/s bar.powerstored = Disimpan: {0}/{1} bar.poweramount = Tenaga: {0} bar.poweroutput = Pengeluaran Tenaga: {0} +bar.powerlines = Sambungan: {0}/{1} bar.items = Item: {0} bar.capacity = Kapasitas: {0} bar.unitcap = {0} {1}/{2} @@ -638,6 +687,8 @@ bar.progress = Perkembangan Pembangunan bar.input = Masukan bar.output = Keluaran +units.processorcontrol = [lightgray]Dikendalikan Prosesor + bullet.damage = [stat]{0}[lightgray] kekuatan (dmg) bullet.splashdamage = [stat]{0}[lightgray] kekuatan percikan~[stat] {1}[lightgray] kotak bullet.incendiary = [stat]membakar @@ -645,12 +696,15 @@ bullet.homing = [stat]mengejar bullet.shock = [stat]mengkejut bullet.frag = [stat]menyebar bullet.knockback = [stat]{0}[lightgray] pantulan kembali +bullet.pierce = [stat]{0}[lightgray]x tembus +bullet.infinitepierce = [stat]menembus 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.blockssquared = blok² unit.powersecond = unit tenaga/detik unit.liquidsecond = unit zat cair/detik unit.itemssecond = item/detik @@ -663,17 +717,18 @@ unit.persecond = /detik unit.perminute = /menit unit.timesspeed = x kecepatan unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = darah perisai unit.items = item unit.thousands = rb unit.millions = jt unit.billions = m +category.purpose = Purpose category.general = Umum category.power = Tenaga category.liquids = Zat Cair category.items = Item category.crafting = Pemasukan/Pengeluaran -category.shooting = Menembak +category.function = Fungsi category.optional = Peningkatan Opsional setting.landscape.name = Kunci Pemandangan setting.shadows.name = Bayangan @@ -681,10 +736,10 @@ setting.blockreplace.name = Usulan Blok Otomatis setting.linear.name = Filter Bergaris setting.hints.name = Petunjuk setting.flow.name = Tampilan Laju Aliran Sumber Daya +setting.backgroundpause.name = Jeda di Latar setting.buildautopause.name = Jeda Otomatis saat Membangun -setting.mapcenter.name = Pusatkan Peta Otomatis Ke Pemain setting.animatedwater.name = Animasi Perairan -setting.animatedshields.name = Animasi Pelindung +setting.animatedshields.name = Animasi Perisai setting.antialias.name = Antialiasi[lightgray] (membutuhkan restart)[] setting.playerindicators.name = Indikasi Pemain setting.indicators.name = Indikasi Musuh/Teman Lain @@ -709,14 +764,13 @@ setting.blockstatus.name = Tunjukan Status Blok setting.conveyorpathfinding.name = Navigasi Pengantar Otomatis setting.sensitivity.name = Sensitivitas Kontroler setting.saveinterval.name = Jarak Menyimpan -setting.seconds = {0} Sekon +setting.seconds = {0} detik setting.blockselecttimeout.name = Waktu Habis Pemilihan Blok -setting.milliseconds = {0} milisekon +setting.milliseconds = {0} milidetik setting.fullscreen.name = Layar Penuh setting.borderlesswindow.name = Jendela tak Berbatas[lightgray] (mungkin memerlukan mengulang kembali) setting.fps.name = Tunjukkan FPS setting.smoothcamera.name = Kamera Halus -setting.blockselectkeys.name = Tunjukkan Kunci Pilih Blok setting.vsync.name = VSync setting.pixelate.name = Mode Pixel[lightgray] (menonaktifkan animasi) setting.minimap.name = Tunjukkan Peta Kecil @@ -863,6 +917,7 @@ content.item.name = Item content.liquid.name = Zat Cair content.unit.name = Unit content.block.name = Blok + item.copper.name = Tembaga item.lead.name = Timah item.coal.name = Batu Bara @@ -878,29 +933,12 @@ item.sand.name = Pasir item.blast-compound.name = Senyawa Peledak item.pyratite.name = Pyratit item.metaglass.name = Metaglass -item.scrap.name = Kepingan +item.scrap.name = Rongsokan liquid.water.name = Air liquid.slag.name = Terak liquid.oil.name = Minyak liquid.cryofluid.name = Cairan Pendingin -item.explosiveness = [lightgray]Tingkat Keledakan: {0}% -item.flammability = [lightgray]Tingkat Kebakaran: {0}% -item.radioactivity = [lightgray]Tingkat Radioaktif: {0}% - -unit.health = [lightgray]Darah: {0} -unit.speed = [lightgray]Kecepatan: {0} -unit.weapon = [lightgray]Senjata: {0} -unit.itemcapacity = [lightgray]Kapasitas Item: {0} -unit.minespeed = [lightgray]Kecepatan Menambang: {0}% -unit.minepower = [lightgray]Kekuatan Menambang: {0} -unit.ability = [lightgray]Kemampuan: {0} -unit.buildspeed = [lightgray]Kecepatan Membangun: {0}% - -liquid.heatcapacity = [lightgray]Kapasitas Panas: {0} -liquid.viscosity = [lightgray]Kelekatan: {0} -liquid.temperature = [lightgray]Suhu: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -938,29 +976,30 @@ unit.corvus.name = Corvus block.resupply-point.name = Titik Pemasok Ulang block.parallax.name = Parallax block.cliff.name = Cliff -block.sand-boulder.name = Batu Pasir +block.sand-boulder.name = Batu Pasir Besar block.grass.name = Rumput block.slag.name = Slag +block.space.name = Luar Angkasa block.salt.name = Garam -block.salt-wall.name = Salt Wall +block.salt-wall.name = Bukit Garam block.pebbles.name = Kerikil block.tendrils.name = Sulur -block.sand-wall.name = Sand Wall +block.sand-wall.name = Bukit Pasir block.spore-pine.name = Cemara Spora -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = Bukit Spora +block.boulder.name = Batu Besar +block.snow-boulder.name = Batu Salju Besar block.snow-pine.name = Pinus Salju block.shale.name = Serpihan block.shale-boulder.name = Serpihan Batu Besar block.moss.name = Lumut block.shrubs.name = Semak-Semak block.spore-moss.name = Lumut Spora -block.shale-wall.name = Shale Wall -block.scrap-wall.name = Dinding Kepingan -block.scrap-wall-large.name = Dinding Kepingan Besar 1 -block.scrap-wall-huge.name = Dinding Kepingan Besar 2 -block.scrap-wall-gigantic.name = Dinding Kepingan Besar 3 +block.shale-wall.name = Bukit Serpih +block.scrap-wall.name = Dinding Rongsokan +block.scrap-wall-large.name = Dinding Rongsokan Besar +block.scrap-wall-huge.name = Dinding Rongsokan Sangat Besar +block.scrap-wall-gigantic.name = Dinding Rongsokan Raksasa block.thruster.name = Pendorong block.kiln.name = Pengeringan block.graphite-press.name = Pencetak Grafit @@ -986,6 +1025,7 @@ block.darksand-water.name = Air Pasir Hitam block.char.name = Bara block.dacite.name = Dasit block.dacite-wall.name = Dinding Dasit +block.dacite-boulder.name = Batu Besar Dasit block.ice-snow.name = Salju Es block.stone-wall.name = Dinding Batu block.ice-wall.name = Dinding Es @@ -1034,7 +1074,6 @@ block.conveyor.name = Pengantar block.titanium-conveyor.name = Pengantar Berbahan Titanium block.plastanium-conveyor.name = Pengantar Berbahan Plastanium block.armored-conveyor.name = Pengantar Berlapis Pelindung -block.armored-conveyor.description = Memindahkan barang sama cepatnya dengan pengantar titanium, namun memiliki lebih banyak armor. Tidak dapat menerima masukan dari samping dari apapun kecuali dari pengantar. block.junction.name = Simpangan block.router.name = Pengarah block.distributor.name = Distributor @@ -1042,13 +1081,12 @@ block.sorter.name = Penyortir block.inverted-sorter.name = Penyortir terbalik block.message.name = Pesan block.illuminator.name = Penerang -block.illuminator.description = Sebuah benda berukuran kecil, sumber penghasil cahaya. Membutuhkan tenaga untuk berfungsi. block.overflow-gate.name = Gerbang Luap block.underflow-gate.name = Gerbang Tidak Meluap block.silicon-smelter.name = Pelebur Silikon block.phase-weaver.name = Pengrajut Phase block.pulverizer.name = Pulverisator -block.cryofluid-mixer.name = Penyampur Cairan Dingin +block.cryofluidmixer.name = Penyampur Cairan Dingin block.melter.name = Pencair block.incinerator.name = Penghangus block.spore-press.name = Penekan Spora @@ -1107,8 +1145,8 @@ block.blast-drill.name = Bor Ledakan Udara block.thermal-pump.name = Pompa Suhu Panas block.thermal-generator.name = Generator Suhu Panas block.alloy-smelter.name = Pelebur Paduan Listrik -block.mender.name = Reparator -block.mend-projector.name = Proyeksi Reparator +block.mender.name = Mender +block.mend-projector.name = Mender Proyektor block.surge-wall.name = Dinding Listrik block.surge-wall-large.name = Dinding Listrik Besar block.cyclone.name = Cyclone @@ -1138,6 +1176,10 @@ block.payload-router.name = Pengarah Massa block.disassembler.name = Pembongkar block.silicon-crucible.name = Multi-Lebur block.overdrive-dome.name = Kubah Proyeksi Percepat +#experimental, may be removed +block.block-forge.name = Block Forge +block.block-loader.name = Block Loader +block.block-unloader.name = Block Unloader block.switch.name = Saklar block.micro-processor.name = Prosesor Mikro @@ -1179,19 +1221,24 @@ tutorial.waves.mobile = Para[lightgray] Musuh[] telah muncul.\n\nLindungi intimu tutorial.launch = Saat kamu mencapai gelombang tertentu, kamu dapat[accent] meluncurkan intimu[], meninggalkan pertahananmu[accent] mendapatkan semua sumber daya di intimu.[]\nSumber daya ini digunakan sebagai riset teknologi.\n\n[accent]Tekan tombol meluncur. item.copper.description = Bahan struktur yang berguna. Digunakan di semua tipe blok. +item.copper.details = Tembaga. Logam yang sangat melimpah di Serpulo. Lemah secara struktural kecuali jika diperkuat. item.lead.description = Bahan dasar di awal permainan. Digunakan di elektronik dan blok transportasi zat cair. +item.lead.details = Padat. Lembam. Biasanya digunakan dalam baterai.\nCatatan : Kemungkinan beracun untuk kehidupan biologis. Bukan berarti tidak banyak disini. item.metaglass.description = Kaca yang super-kuat. Digunakan untuk distribusi zar cair dan penyimpanan. item.graphite.description = Karbon termineralisasi, dipakai untuk amunisi dan penyekatan listrik. item.sand.description = Bahan umum yang digunakan di berbagai peleburan item.coal.description = Bahan bakar umum. +item.coal.details = Hasil dari tumbuhan yang menjadi fosil, sudah terjadi sangat lama sebelum spora-spora menyebar. item.titanium.description = Logam langka yang sangat ringan digunakan di transportasi zat cair, bor dan pesawat terbang. item.thorium.description = Logam yang padat dan radioaktif, sebagai bantuan struktur ban bahan bakar nuklir. item.scrap.description = Peninggalan bangunan dan unit tua. mengandung beberapa zat logam. +item.scrap.details = Sisa sisa bangunan dan unit tua. item.silicon.description = Semi-konduktor yang sangat berguna, penerapan di panel surya dan banyak benda elektronik. item.plastanium.description = Bahan yang ringan dan elastis, digunakan di pesawat terbang canggih dan amunisi kepingan. item.phase-fabric.description = Zat yang hampir tidak ada bobot ini digunakan di elektronik canggih dan teknologi reparasi. item.surge-alloy.description = Paduan canggih dengan properti listrik yang unik. item.spore-pod.description = Digunakan untuk produksi minyak, bahan peledak dan bahan bakar. +item.spore-pod.details = Spora. Sepertinya bentuk kehidupan sintetis. Menghasilkan gas beracun yang meracuni kehidupan biologis lainnya. Sangat mudah menyebar. Sangat mudah terbakar dalam kondisi tertentu. item.blast-compound.description = Senyawa yang digunakan di bom dan peledak lainnya. Bisa dipakai untuk bahan bakar, tetapi tidak disarankan. item.pyratite.description = Zat yang mudah dibakar ini digunakan di senjata pembakar. liquid.water.description = Umumnya digunakan untuk mendinginkan mesin-mesin dan pendaur ulang. @@ -1199,6 +1246,8 @@ liquid.slag.description = Berbagai tipe logam yang meleleh. Dapat dipisahkan men liquid.oil.description = Bisa dibakar, diledakkan atau sebagai pendigin. liquid.cryofluid.description = Zat cair paling efisien untuk mendinginkan hal-hal. +block.armored-conveyor.description = Memindahkan barang sama cepatnya dengan pengantar titanium, namun memiliki lebih banyak armor. Tidak dapat menerima masukan dari samping dari apapun kecuali dari pengantar. +block.illuminator.description = Sebuah benda berukuran kecil, sumber penghasil cahaya. Membutuhkan tenaga untuk berfungsi. block.message.description = Menyimpan pesan. Digunakan untuk komunikasi antar sekutu. block.graphite-press.description = Memadatkan bongkahan batu bara menjadi lempengan grafit murni. block.multi-press.description = Versi pemadat grafit yang lebih bagus. Membutuhkan air dan tenaga untuk memproses batu bara lebih cepat dan efisien. @@ -1207,7 +1256,7 @@ block.kiln.description = Membakar pasir dan timah menjadi kaca meta. Membutuhkan block.plastanium-compressor.description = Memproduksi plastanium dari minyak dan titanium. block.phase-weaver.description = Memproduksi kain phase dari thorium dan banyak pasir. block.alloy-smelter.description = Memproduksi campuran logam dari titanium, timah, silikon dan tembaga. -block.cryofluid-mixer.description = Mencampur air dan titanium menjadi cairan dingin yang lebih efisien untuk pendingin. +block.cryofluidmixer.description = Mencampur air dan titanium menjadi cairan dingin yang lebih efisien untuk pendingin. block.blast-mixer.description = Menggunakan minyak untuk membentuk pyratite menjadi senyawa peledak yang kurang mudah terbakar tetapi lebih eksplosif. block.pyratite-mixer.description = Mencampur batu bara, timah dan pasir menjadi pyratite yang sangat mudah terbakar. block.melter.description = Melelehkan kepingan menjadi terak untuk proses selanjutnya atau digunakan menara. @@ -1250,6 +1299,7 @@ block.phase-conveyor.description = Blok transportasi canggih. Menggunakan tenaga block.sorter.description = Memilah Item. Jika item cocok dengan seleksi, itemnya diperbolehkan lewat. Jika tidak, item akan dikeluarkan dari kiri dan/atau kanan. block.inverted-sorter.description = Sama seperti penyortir, melainkan mengeluarkan item terpilih ke samping. block.router.description = Menerima bahan dari satu arah dan mengeluarkannya ke 3 arah yang sama. Bisa juga menyimpan sejumlah bahan. Berguna untuk memisahkan bahan dari satu sumber ke target yang banyak. +block.router.details = Bisa sangat menggangu. Jangan meletakannya disamping input produksi, karena bisa tersumbat oleh output. block.distributor.description = Pemisah canggih yang memisah item ke 7 arah berbeda bersamaan. block.overflow-gate.description = Kombinasi antara pemisah dan penyortir yang hanya mengeluarkan item ke kiri dan/atau ke kanan jika bagian depan tertutup. block.underflow-gate.description = Kebalikan dari gerbang luap. Mengeluarkan ke depan jika kanan dan kiri tertutup. @@ -1286,10 +1336,14 @@ block.laser-drill.description = Mengebor lebih cepat lewat teknologi laser, tapi block.blast-drill.description = Bor tercanggih. Membutuhkan banyak tenaga. block.water-extractor.description = Mengekstrak air dari tanah. Gunakan jika tidak ada sumber air disekitar. block.cultivator.description = Membudidaya spora kecil menjadi polong siap diolah. +block.cultivator.details = Recovered technology. Used to produce massive amounts of biomass as efficiently as possible. Likely the initial incubator of the spores now covering Serpulo. block.oil-extractor.description = Menggunakan tenaga cukup besar untuk mengekstrak minyak dari pasir. Gunakan jika tidak ada sumber minyak disekitar. block.core-shard.description = Versi pertama dari pengulangan kapsul inti. Jika hancur, Semua kontak dengan daerah akan hilang. Jangan biarkan ini terjadi. +block.core-shard.details = Iterasi pertama. Padat. Bisa menggandakan dirinya (untuk menguasai sektor disekitarnya). Dilengkapi dengan pendorong yang sekali pakai. Tidak didesain untuk perjalanan antar planet. block.core-foundation.description = Versi kedua dari intk. Lebih kuat. Menyimpan banyak sumber daya. +block.core-foundation.details = Iterasi kedua. block.core-nucleus.description = Versi ketiga dan pengulangan terakhir dari kapsul inti. Sangkat kuat. Menyimpan sangat banyak sumberr daya. +block.core-nucleus.details = Iterasi ketiga dan yang terakhir. block.vault.description = Menyimpan semua tipe item berkuantitas besar. [lightgray] pembongkar muatan[] bisa digunakan untuk mengeluarkan item dari gudang. block.container.description = Menyimpan semua tipe item. [lightgray] pembongkar muatan[] bisa digunakan untuk mengeluarkan item dari kontainer. block.unloader.description = Mengeluarkan item dari kontainer, gudang atau inti kedalam pengantar atau langsung ke blok yang dituju. Tipe item yang dimuat bisa diganti dengan mengetuk pembongkar muatan. @@ -1310,4 +1364,61 @@ block.cyclone.description = Menara penembak beruntun besar. block.spectre.description = Menara besar yang menembak dua peluru kuat sekaligus. block.meltdown.description = Menara besar ini menembak sinar panjang yang kuat. block.repair-point.description = Terus menerus memulihkan unit terluka disekitar. -block.segment.description = Merusakkan dan menghancurkan proyektil yang datang. Proyektil laser tidak akan ditargetkan. \ No newline at end of file +block.segment.description = Merusakkan dan menghancurkan proyektil yang datang. Proyektil laser tidak akan ditargetkan. +block.parallax.description = Fires a tractor beam that pulls in air targets, damaging them in the process. +block.tsunami.description = Fires powerful streams of liquid at enemies. Automatically extinguishes fires when supplied with water. +block.silicon-crucible.description = Refines silicon from sand and coal, using pyratite as an additional heat source. More efficient in hot locations. +block.disassembler.description = Separates slag into trace amounts of exotic mineral components at low efficiency. Can produce thorium. +block.overdrive-dome.description = Increases the speed of nearby buildings. Requires phase fabric and silicon to operate. +block.payload-conveyor.description = Moves large payloads, such as units from factories. +block.payload-router.description = Splits input payloads into 3 output directions. +block.command-center.description = Controls unit behavior with several different commands. +block.ground-factory.description = Produces ground units. Output units can be used directly, or moved into reconstructors for upgrading. +block.air-factory.description = Produces air units. Output units can be used directly, or moved into reconstructors for upgrading. +block.naval-factory.description = Produces naval units. Output units can be used directly, or moved into reconstructors for upgrading. +block.additive-reconstructor.description = Upgrades inputted units to the second tier. +block.multiplicative-reconstructor.description = Upgrades inputted units to the third tier. +block.exponential-reconstructor.description = Upgrades inputted units to the fourth tier. +block.tetrative-reconstructor.description = Upgrades inputted units to the fifth and final tier. +block.switch.description = A toggleable switch. State can be read and controlled with logic processors. +block.micro-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. +block.logic-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. Faster than the micro processor. +block.hyper-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. Faster than the logic processor. +block.memory-cell.description = Stores information for a logic processor. +block.memory-bank.description = Stores information for a logic processor. High capacity. +block.logic-display.description = Displays arbitrary graphics from a logic processor. +block.large-logic-display.description = Displays arbitrary graphics from a logic processor. + +unit.dagger.description = Menembak musuh terdekat dengan amunisi standar. +unit.mace.description = Menyerang musuh terdekat dengan cara membakarnya. +unit.fortress.description = Menembak musuh darat dengan altileri jarak jauh. +unit.scepter.description = Menembak semua musuh terdekat dengan rentetan peluru bermuatan listrik. +unit.reign.description = Menembak semua musuh terdekat dengan gugusan peluru tajam dalam jumlah banyak. +unit.nova.description = Menembak baut laser yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. +unit.pulsar.description = Menembak petir yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. +unit.quasar.description = Menembak sinar laser yang dapat menembus bangunan yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat terbang. Memiliki perisai. +unit.vela.description = Menembak sinar laser besar dan kontinu yang dapat merusak musuh, membakarnya dan memperbaiki bangunan musuh. Dapat terbang. +unit.corvus.description = Menembak sinar laser besar yang dapat merusak musuh dan memperbaiki bangunan teman. Dapat berjalan diatas hampir semua medan. +unit.crawler.description = Berlari menuju musuh dan menghancurkan dirinya, yang dapat menghasilkan ledakan besar. +unit.atrax.description = Menembak musuh dengan cairan lava kepada target darat. Dapat berjalan diatas hampir semua medan. +unit.spiroct.description = Menembak laser pelemah kepada musuh, dapat memperbaiki dirinya dalam proses. Dapat berjalan diatas hampir semua medan. +unit.arkyid.description = Menembak laser pelemah besar kepada musuh, dapat memperbaiki dirinya dalam proses. Dapat berjalan diatas hampir semua medan. +unit.toxopid.description = Menembak gugusan cangkang energi besar dan laser penusuk kepada musuh. Dapat berjalan diatas hampir semua medan. +unit.flare.description = Menembak musuh darat terdekat dengan amunisi standar. +unit.horizon.description = Menjatuhkan gugusan bom kepada musuh darat. +unit.zenith.description = Menembak misil kepada musuh terdekat. +unit.antumbra.description = Menembak rentetan peluru kepada musuh terdekat. +unit.eclipse.description = Menembak dua sinar laser dan rentetan peluru kepada musuh terdekat. +unit.mono.description = Menambang tembaga dan timah secara otomatis, membawanya menuju inti. +unit.poly.description = Membangun kembali bangunan yang hancur secara otomatis dan membantu unit lain dalam pembangunan. +unit.mega.description = Memperbaiki bangunan secara otomatis. Dapat membawa bangunan dan unit darat kecil. +unit.quad.description = Menjatuhkan bom besar kepada target darat, yang bisa memberbaiki struktur teman dan merusak musuh. Dapat membawa unit darat berukuran sedang. +unit.oct.description = Melindungi teman disekitarnya dengan perisai yang dapat beregenerasi. Dapat membawa hampir semua unit darat. +unit.risso.description = Menembak misil dan peluru kepada semua musuh terdekat. +unit.minke.description = Menembak cangkang pembakar dan peluru standar kepada musuh darat terdekat. +unit.bryde.description = Menembak altileri jarak jauh dan misil kepada musuh. +unit.sei.description = Menembak rentetan misil dan peluru yang dapat menembus baju besi kepada musuh. +unit.omura.description = Menembak railgun jarak jauh kepada musuh. Dapat memproduksi unit flare. +unit.alpha.description = Melindungi Inti Bagian dari musuh. Dapat membangun. +unit.beta.description = Melindungi Inti Fondasi dari musuh. Dapat membangun. +unit.gamma.description = Melindungi Inti Nukleus dari musuh. Dapat membangun. diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 5fc3245ed6..a072e060c4 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -55,6 +55,7 @@ schematic.saved = Schematica salvata. schematic.delete.confirm = Questa schematica sarà cancellata definitivamente. schematic.rename = Rinomina Schematica schematic.info = {0}x{1}, {2} blocchi +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Ondate Sconfitte:[accent] {0} stat.enemiesDestroyed = Nemici Distrutti:[accent] {0} @@ -100,7 +101,6 @@ done = Fatto feature.unsupported = Il tuo dispositivo non supporta questa funzione. mods.alphainfo = Tieni a mente che queste mods sono in alpha e[scarlet] possono contenere molti bug[]. Segnala tutti i problemi che trovi sulla pagina GitHub o sul server Discord di Mindustry. -mods.alpha = [accent](Alpha) mods = Mods mods.none = [lightgray]Nessuna mod trovata! mods.guide = Guida per il modding @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] per selezionare+copiare pausebuilding = [accent][[{0}][] per smettere di costruire resumebuilding = [scarlet][[{0}][] per riprendere a costruire wave = [accent]Ondata {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Ondata tra {0} wave.waveInProgress = [lightgray]Ondata in corso waiting = In attesa... waiting.players = Attendendo giocatori... wave.enemies = [lightgray]{0} Nemici Rimasti wave.enemy = [lightgray]{0} Nemico Rimasto +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Carica immagine saveimage = Salva Immagine unknown = Sconosciuto @@ -328,6 +331,7 @@ editor.generation = Generazione: editor.ingame = Modifica in Gioco editor.publish.workshop = Pubblica nel Workshop editor.newmap = Nuova Mappa +editor.center = Center workshop = Workshop waves.title = Ondate waves.remove = Rimuovi @@ -416,6 +420,7 @@ filters.empty = [lightgray]Nessun filtro! Aggiungine uno cliccando il tasto sott filter.distort = Modifica filter.noise = Rumore filter.enemyspawn = Seleziona Spawn Nemico +filter.spawnpath = Path To Spawn filter.corespawn = Seleziona Nucleo filter.median = Mediana filter.oremedian = Mediana Minerali @@ -440,6 +445,7 @@ filter.option.amount = Quantità filter.option.block = Blocco filter.option.floor = Terreno filter.option.flooronto = Terreno Mirato +filter.option.target = Target filter.option.wall = Muro filter.option.ore = Minerale filter.option.floor2 = Terreno Secondario @@ -471,15 +477,9 @@ requirement.wave = Raggiungi l'ondata {0} in {1} requirement.core = Distruggi il Nucleo Nemico in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Riprendi Zona:\n[lightgray]{0} bestwave = [lightgray]Ondata Migliore: {0} -launch = < DECOLLARE > launch.text = Launch -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 +research.multiplayer = Only the host can research items. uncover = Scopri configure = Configura Equipaggiamento loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Sei sicuro di voler cancellare i dati?\nQuesta operazio 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. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< In Pausa > clear = Pulisci banned = [scarlet]Bandito @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]Si è verificato un errore error.crashtitle = Si è verificato un errore unit.nobuild = [scarlet]L'unità non può costruire +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Ingresso stat.output = Uscita stat.booster = Potenziamenti stat.tiles = Blocchi Richiesti stat.affinities = Affinità -block.unknown = [lightgray]??? stat.powercapacity = Capacità Energetica stat.powershot = Danno/Colpo stat.damage = Danno @@ -594,6 +606,7 @@ stat.powerconnections = Connessioni Massime stat.poweruse = Utilizzo Energia stat.powerdamage = Energia/Danno stat.itemcapacity = Capacità +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Generazione Energia di Base stat.productiontime = Tempo di Produzione stat.repairtime = Tempo di Riparazione Completa @@ -613,6 +626,28 @@ stat.reload = Ricarica stat.ammo = Munizioni stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Miglior Trivella Richiesta bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Energia: {0}/s bar.powerstored = Immagazzinata: {0}/{1} bar.poweramount = Energia: {0} bar.poweroutput = Energia in Uscita: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Oggetti: {0} bar.capacity = Capacità: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Progresso Costruzione bar.input = Entrata bar.output = Uscita +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] danno bullet.splashdamage = [stat]{0}[lightgray] danno ad area ~[stat] {1}[lightgray] blocchi bullet.incendiary = [stat]incendiario @@ -642,12 +680,15 @@ bullet.homing = [stat]autoguidato bullet.shock = [stat]stordente bullet.frag = [stat]a frammentazione bullet.knockback = [stat]{0}[lightgray] contraccolpo +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]congelante bullet.tarred = [stat]viscoso bullet.multiplier = [stat]{0}[lightgray]x moltiplicatore munizioni bullet.reload = [stat]{0}[lightgray]x ricarica unit.blocks = blocchi +unit.blockssquared = blocks² unit.powersecond = unità energia/s unit.liquidsecond = unità liquide/s unit.itemssecond = oggetti/s @@ -670,7 +711,7 @@ category.power = Energia category.liquids = Liquidi category.items = Oggetti category.crafting = Produzione -category.shooting = Potenza di fuoco +category.function = Function category.optional = Miglioramenti Opzionali setting.landscape.name = Visuale Orizontale setting.shadows.name = Ombre @@ -679,7 +720,6 @@ setting.linear.name = Filtro Lineare setting.hints.name = Suggerimenti setting.flow.name = Visualizza Portata Nastri/Condotti setting.buildautopause.name = Pausa Automatica nella Costruzione -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Fluidi Animati setting.animatedshields.name = Scudi Animati setting.antialias.name = Antialias[lightgray] (richiede riavvio)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Schermo Intero setting.borderlesswindow.name = Finestra Senza Bordi[lightgray] (potrebbe richiedere il riavvio) setting.fps.name = Mostra FPS e Ping setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Mostra Tasto di Selezione del Blocco setting.vsync.name = VSync setting.pixelate.name = Effetto Pixel[lightgray] (disabilita le animazioni) setting.minimap.name = Mostra Minimappa @@ -822,6 +861,7 @@ mode.custom = Regole Personalizzate rules.infiniteresources = Risorse Infinite rules.reactorexplosions = Esplosioni Reattore +rules.schematic = Schematics Allowed rules.wavetimer = Timer Ondate rules.waves = Ondate rules.attack = Modalità Attacco @@ -847,6 +887,7 @@ rules.title.unit = Unità rules.title.experimental = Sperimentale rules.title.environment = Environment rules.lighting = Illuminazione +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Illuminazione\nAmbientale @@ -858,6 +899,7 @@ content.item.name = Oggetti content.liquid.name = Liquidi content.unit.name = Unità content.block.name = Blocchi + item.copper.name = Rame item.lead.name = Piombo item.coal.name = Carbone @@ -879,23 +921,6 @@ liquid.slag.name = Scoria liquid.oil.name = Petrolio liquid.cryofluid.name = Criofluido -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} -unit.weapon = [lightgray]Armi: {0} -unit.itemcapacity = [lightgray]Capacità Oggetti: {0} -unit.minespeed = [lightgray]Velocità di Scavo: {0}% -unit.minepower = [lightgray]Potenza di Scavo: {0} -unit.ability = [lightgray]Abilità: {0} -unit.buildspeed = [lightgray]Velocità di Costruzione: {0}% - -liquid.heatcapacity = [lightgray]Capacità Termica: {0} -liquid.viscosity = [lightgray]Viscosità: {0} -liquid.temperature = [lightgray]Temperatura: {0} - unit.dagger.name = Drone Pugnalatore unit.mace.name = Mace unit.fortress.name = Fortezza @@ -936,6 +961,7 @@ block.cliff.name = Scogliera block.sand-boulder.name = Masso di Sabbia block.grass.name = Erba block.slag.name = Scoria +block.space.name = Space block.salt.name = Sale block.salt-wall.name = Salt Wall block.pebbles.name = Ciottoli @@ -981,6 +1007,7 @@ block.darksand-water.name = Acqua Sabbiosa Scura block.char.name = Carbone block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Neve Ghiacciata block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Fonte Infinita (energia) block.unloader.name = Scaricatore block.vault.name = Deposito block.wave.name = Idrogetto +block.tsunami.name = Tsunami block.swarmer.name = Sciamatore block.salvo.name = Cannone Leggero block.ripple.name = Cannone Pesante @@ -1114,6 +1142,7 @@ block.arc.name = Arco Elettrico block.rtg-generator.name = Generatore RTG block.spectre.name = Spettro block.meltdown.name = Fusione +block.foreshadow.name = Foreshadow block.container.name = Contenitore block.launch-pad.name = Ascensore Spaziale block.launch-pad-large.name = Ascensore Spaziale Avanzato @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blu team.crux.name = rosso @@ -1302,4 +1332,4 @@ 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.repair-point.description = Cura continuamente l'unità danneggiata più vicina. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 68c766e79b..16c05bc37a 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -55,6 +55,7 @@ schematic.saved = 設計図を保存しました。 schematic.delete.confirm = この設計図は完全に削除されます。よろしいですか schematic.rename = 設計図の名前を変更する。 schematic.info = {1}x{0}, {2} ブロック +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = 防衛したウェーブ:[accent] {0} stat.enemiesDestroyed = 敵に破壊された数:[accent] {0} @@ -100,7 +101,6 @@ done = 完了 feature.unsupported = あなたのデバイスはこの機能をサポートしていません。 mods.alphainfo = Mods機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 問題を発見した場合は Mindustry GitHubに報告してください。 -mods.alpha = [accent](Alpha) mods = Mods mods.none = [lightgray]Modが見つかりませんでした! mods.guide = Mod作成ガイド @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] 選択し、コピーする pausebuilding = [accent][[{0}][] 建築を一時的に中断する resumebuilding = [scarlet][[{0}][] 建築を再開する wave = [accent]ウェーブ {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]次のウェーブまで {0} 秒 wave.waveInProgress = [lightgray]ウェーブ進行中 waiting = [lightgray]待機中... waiting.players = プレイヤーを待っています... wave.enemies = [lightgray]敵は残り {0} 体 wave.enemy = [lightgray]敵は残り {0} 体 +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = 画像を読み込む saveimage = 画像を保存 unknown = 不明 @@ -328,6 +331,7 @@ editor.generation = 生成: editor.ingame = ゲーム内で編集する editor.publish.workshop = ワークショップで公開 editor.newmap = 新しいマップ +editor.center = Center workshop = ワークショップ waves.title = ウェーブ waves.remove = 削除 @@ -416,6 +420,7 @@ filters.empty = [lightgray]フィルターが設定されていません! 下の filter.distort = ゆがみ filter.noise = ノイズ filter.enemyspawn = 敵スポーンセレクト +filter.spawnpath = Path To Spawn filter.corespawn = コアセレクト filter.median = メディアン filter.oremedian = メディアン (鉱石) @@ -440,6 +445,7 @@ filter.option.amount = 量 filter.option.block = ブロック filter.option.floor = 地面 filter.option.flooronto = 対象の地面 +filter.option.target = Target filter.option.wall = 壁 filter.option.ore = 鉱石 filter.option.floor2 = 2番目の地面 @@ -471,15 +477,9 @@ requirement.wave = {1} でウェーブ {0} に到達 requirement.core = {0} の敵のコアを破壊 requirement.research = Research {0} requirement.capture = Capture {0} -resume = 再開:\n[lightgray]{0} bestwave = [lightgray]最高ウェーブ: {0} -launch = < 発射 > launch.text = Launch -launch.title = 発射成功 -launch.next = [lightgray]次は ウェーブ {0} で発射可能です。 -launch.unable2 = [scarlet]発射できません。[] -launch.confirm = すべての資源をコアに搬入し、発射します。\nもうこの基地には戻ってくることはできません。 -launch.skip.confirm = スキップすると、次の発射可能なウェーブまで発射できません。 +research.multiplayer = Only the host can research items. uncover = 開放 configure = 積み荷の設定 loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = データを削除してもよろしいですか?\nこ settings.clearall.confirm = [scarlet]警告![]\nこれはすべてのデータが削除されます。これにはセーブデータ、マップ、アンロック、キーバインドが含まれます。\n「ok」 を押すと、すべてのデータが削除され、自動的に終了します。 settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< ポーズ > clear = 消去 banned = [scarlet]使用禁止 @@ -570,12 +580,14 @@ info.title = 情報 error.title = [crimson]エラーが発生しました error.crashtitle = エラーが発生しました unit.nobuild = [scarlet]ユニットを構築できません +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = 搬入 stat.output = 搬出 stat.booster = ブースト stat.tiles = 必要なタイル stat.affinities = 親和性 -block.unknown = [lightgray]??? stat.powercapacity = 電力容量 stat.powershot = 電力/ショット stat.damage = ダメージ @@ -594,6 +606,7 @@ stat.powerconnections = 最大接続数 stat.poweruse = 電力使用量 stat.powerdamage = 電力/ダメージ stat.itemcapacity = アイテム容量 +stat.memorycapacity = Memory Capacity stat.basepowergeneration = 基本発電量 stat.productiontime = 製造速度 stat.repairtime = ブロックの完全修復速度 @@ -613,6 +626,28 @@ stat.reload = リロード速度 stat.ammo = 弾薬 stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = より高性能なドリルを使用してください bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = 電力均衡: {0}/秒 bar.powerstored = 総蓄電量: {0}/{1} bar.poweramount = 蓄電量: {0} bar.poweroutput = 発電量: {0} +bar.powerlines = Connections: {0}/{1} bar.items = アイテム: {0} bar.capacity = 容量: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = 建設状況 bar.input = 入力 bar.output = 出力 +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] ダメージ bullet.splashdamage = [stat]{0}[lightgray] 範囲ダメージ 約[stat] {1}[lightgray] タイル bullet.incendiary = [stat]焼夷弾 @@ -642,12 +680,15 @@ bullet.homing = [stat]追尾弾 bullet.shock = [stat]電撃 bullet.frag = [stat]爆発弾 bullet.knockback = [stat]{0}[lightgray] ノックバック +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]凍結 bullet.tarred = [stat]タール弾 bullet.multiplier = [stat]弾薬 {0}[lightgray]倍 bullet.reload = [stat]リロード速度 {0}[lightgray]倍 unit.blocks = ブロック +unit.blockssquared = blocks² unit.powersecond = 電力/秒 unit.liquidsecond = 液体/秒 unit.itemssecond = アイテム/秒 @@ -670,7 +711,7 @@ category.power = 電力 category.liquids = 液体 category.items = アイテム category.crafting = 搬入/搬出 -category.shooting = ショット +category.function = Function category.optional = 強化オプション setting.landscape.name = 横画面で固定 setting.shadows.name = 影 @@ -679,7 +720,6 @@ setting.linear.name = リニアフィルター setting.hints.name = ヒント setting.flow.name = 資源流通量の表示 setting.buildautopause.name = オートポーズビルディング -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = 流体のアニメーション setting.animatedshields.name = シールドのアニメーション setting.antialias.name = アンチエイリアス[lightgray] (再起動が必要)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = フルスクリーン setting.borderlesswindow.name = 境界の無いウィンドウ[lightgray] (再起動が必要になる場合があります) setting.fps.name = FPSを表示 setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = ブロック選択キーを表示 setting.vsync.name = 垂直同期 setting.pixelate.name = ピクセル化[lightgray] (アニメーションが無効化されます) setting.minimap.name = ミニマップを表示 @@ -822,6 +861,7 @@ mode.custom = カスタムルール rules.infiniteresources = 資源の無限化 rules.reactorexplosions = リアクターの爆発 +rules.schematic = Schematics Allowed rules.wavetimer = ウェーブの自動進行 rules.waves = ウェーブ rules.attack = アタックモード @@ -847,6 +887,7 @@ rules.title.unit = ユニット rules.title.experimental = 実験的なゲームプレイ rules.title.environment = Environment rules.lighting = 霧 +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = 霧の色 @@ -858,6 +899,7 @@ content.item.name = アイテム content.liquid.name = 液体 content.unit.name = ユニット content.block.name = ブロック + item.copper.name = 銅 item.lead.name = 鉛 item.coal.name = 石炭 @@ -879,23 +921,6 @@ liquid.slag.name = スラグ liquid.oil.name = 石油 liquid.cryofluid.name = 冷却水 -item.explosiveness = [lightgray]爆発性: {0}% -item.flammability = [lightgray]可燃性: {0}% -item.radioactivity = [lightgray]放射能: {0}% - -unit.health = [lightgray]耐久値: {0} -unit.speed = [lightgray]速度: {0} -unit.weapon = [lightgray]武器: {0} -unit.itemcapacity = [lightgray]アイテム容量: {0} -unit.minespeed = [lightgray]採掘速度: {0}% -unit.minepower = [lightgray]採掘性能: {0} -unit.ability = [lightgray]能力: {0} -unit.buildspeed = [lightgray]建築速度: {0}% - -liquid.heatcapacity = [lightgray]熱容量: {0} -liquid.viscosity = [lightgray]粘度: {0} -liquid.temperature = [lightgray]温度: {0} - unit.dagger.name = ダガー unit.mace.name = Mace unit.fortress.name = フォートレス @@ -936,6 +961,7 @@ block.cliff.name = 崖 block.sand-boulder.name = 巨大な礫 block.grass.name = 草 block.slag.name = スラグ +block.space.name = Space block.salt.name = 岩塩氷河 block.salt-wall.name = Salt Wall block.pebbles.name = 小石 @@ -981,6 +1007,7 @@ block.darksand-water.name = 黒い砂で濁った水 block.char.name = 焦げ跡 block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = 雪氷 block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = 無限電源 block.unloader.name = 搬出機 block.vault.name = ボールト block.wave.name = ウェーブ +block.tsunami.name = Tsunami block.swarmer.name = スウォーマー block.salvo.name = サルボー block.ripple.name = リップル @@ -1114,6 +1142,7 @@ block.arc.name = アーク block.rtg-generator.name = RTG発電機 block.spectre.name = スペクター block.meltdown.name = メルトダウン +block.foreshadow.name = Foreshadow block.container.name = コンテナー block.launch-pad.name = 発射台 block.launch-pad-large.name = 大型発射台 @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = ブルー team.crux.name = レッド @@ -1302,4 +1332,4 @@ block.cyclone.description = 大型の連射型ターレットです。 block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。 block.meltdown.description = 強力な長距離攻撃が可能な大型のターレットです。 block.repair-point.description = 近くの負傷したユニットを修復します。 -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 82bb299642..0cc0f1d3b7 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -12,7 +12,7 @@ link.itch.io.description = PC 다운로드가 있는 itch.io 페이지 link.google-play.description = Google Play 스토어 목록 link.f-droid.description = F-Droid 카탈로그 목록 link.wiki.description = 공식 Mindustry 위키 -link.suggestions.description = 새로운 기능 제안 +link.suggestions.description = 새 기능 제안하기 linkfail = 링크를 열지 못했습니다!\nURL이 클립보드에 복사되었습니다. screenshot = 스크린 샷이 {0} 에 저장되었습니다. screenshot.invalid = 맵이 너무 커서 스크린샷에 사용될 메모리가 부족할 수 있습니다. @@ -20,8 +20,8 @@ gameover = 게임 오버 gameover.pvp = [accent]{0}[] 팀이 승리했습니다! highscore = [accent]새로운 최고 점수! copied = 복사됨. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = 현재 [accent]v6[] 버전은 [accent]알파[] 단계입니다.\n[lightgray]이 말은:[]\n- [scarlet]캠페인이 아직 완전히 개발되지 않음[]\n- 몇몇 컨텐츠가 빠짐\n- 대부분의 [scarlet]유닛 AI[]가 작동하지 않음\n- 많은 유닛들이 아직 미완성\n- 보이는 것은 모두 바뀌거나 제거될 수 있음\n\n[accent]Github[] 에서 버그 또는 강제종료 오류를 신고 해 주세요. +indev.notready = 이 부분은 아직 준비가 되지 않았습니다. load.sound = 소리 load.map = 맵 @@ -55,8 +55,9 @@ schematic.saved = 설계도 저장됨. schematic.delete.confirm = 이 설계도는 완전히 삭제될 것입니다. schematic.rename = 설계도 이름 바꾸기 schematic.info = {0}x{1}, {2} 블록 +schematic.disabled = [scarlet]설계도 비활성화됨[]\n이 [accent]맵[] 또는 [accent]서버[] 에서는 설계도를 사용할 수 없습니다. -stat.wave = 패배한 웨이브:[accent] {0} +stat.wave = 패배한 단계:[accent] {0} stat.enemiesDestroyed = 파괴된 적:[accent] {0} stat.built = 지어진 건물: [accent]{0} stat.destroyed = 파괴된 건물: [accent]{0} @@ -71,7 +72,7 @@ level.highscore = 최고 점수: [accent]{0} level.select = 맵 선택 level.mode = 게임 모드: coreattack = < 코어가 공격 받고 있습니다! > -nearpoint = [[ [scarlet]낙하 지점에서 나가세요[] ]\n적 낙하 시 낙하 지점 내 건물 및 유닛 파괴 +nearpoint = [[ [scarlet]즉시 스폰지점에서 떠나세요[] ]\n전멸 임박 database = 코어 데이터베이스 savegame = 게임 저장 loadgame = 게임 불러오기 @@ -100,7 +101,6 @@ done = 완료 feature.unsupported = 기기가 이 기능을 지원하지 않습니다. mods.alphainfo = 현재 모드는 알파이며, [scarlet]버그가 많을 수 있습니다[].\n발견한 문제는 Mindustry Github 또는 Discord에 보고하세요. -mods.alpha = [accent](알파) mods = 모드 mods.none = [lightgray]모드를 찾을 수 없습니다! mods.guide = 모드 제작 가이드 @@ -115,7 +115,7 @@ mod.disable = 비활성화 mod.content = 콘텐츠: mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0} -mod.outdated = [scarlet]V6 전용이 아닌 모드 (minGameVersion: 105 누락) +mod.outdated = [scarlet]V6 버전과 호환되지 않음 (minGameVersion: 105 안됨) mod.missingdependencies = [scarlet]누락된 요구 모드: {0} mod.erroredcontent = [scarlet]콘텐츠 오류 mod.errors = 콘텐츠를 로드하는 동안 오류가 발생함. @@ -139,8 +139,8 @@ mod.scripts.disable = 이 기기는 스크립트가 있는 모드를 지원하 about.button = 정보 name = 이름: noname = 먼저 [accent]플레이어 이름[]을 설정하세요. -planetmap = Planet Map -launchcore = Launch Core +planetmap = 행성 지도 +launchcore = 코어 출격 filename = 파일 이름: unlocked = 새로운 콘텐츠가 해금되었습니다! completed = [accent]완료됨 @@ -148,8 +148,8 @@ techtree = 연구 기록 research.list = [lightgray]연구: research = 연구 researched = [lightgray]{0} 연구 완료. -research.progress = {0}% 완료 -players = {0} 플레이어들 +research.progress = {0}% 완료됨 +players = {0} 플레이어 players.single = {0} 플레이어 players.search = 검색 players.notfound = [gray]플레이어를 찾을 수 없습니다. @@ -251,7 +251,7 @@ on = 활성화 off = 비활성화 save.autosave = 자동저장: {0} save.map = 맵: {0} -save.wave = {0} 웨이브 +save.wave = {0} 단계 save.mode = 게임모드: {0} save.date = 마지막 저장일: {0} save.playtime = 플레이 시간: {0} @@ -278,18 +278,21 @@ quit.confirm.tutorial = 튜토리얼을 종료하시겠습니까?\n튜토리얼 loading = [accent]불러오는중... reloading = [accent]모드 새로고침하는중... saving = [accent]저장중... -respawn = 코어에서 부활까지 [accent][[{0}][]초 남음. +respawn = [accent][[{0}][] 키 또는 초후 코어에서 리스폰 cancelbuilding = [accent][[{0}][] 를 눌러 계획 초기화 selectschematic = [accent][[{0}][] 를 눌러 선택+복사 pausebuilding = [accent][[{0}][] 를 눌러 건설 일시중지 resumebuilding = [scarlet][[{0}][] 를 눌러 건설 재개 -wave = [accent]{0} 웨이브 -wave.waiting = 다음 웨이브까지[lightgray] {0}초 -wave.waveInProgress = [lightgray]웨이브 진행중 +wave = [accent]{0} 단계 +wave.cap = [accent]Wave {0}/{1} +wave.waiting = 다음 단계까지[lightgray] {0}초 +wave.waveInProgress = [lightgray]단계 진행중 waiting = [lightgray]대기중... waiting.players = 상대 플레이어를 기다리는 중... wave.enemies = [lightgray]적 유닛 {0}명 남음 wave.enemy = [lightgray]{0}명 남음 +wave.guardianwarn = [accent]{0}[] 단계 후에 가디언이 접근합니다. +wave.guardianwarn.one = [accent]{0}[] 단계 후에 가디언이 접근합니다. loadimage = 사진 불러오기 saveimage = 사진 저장 unknown = 알 수 없음 @@ -322,33 +325,34 @@ editor.mapinfo = 맵 정보 editor.author = 제작자: editor.description = 설명: editor.nodescription = 맵을 업로드하려면 최소 4자 이상의 설명이 있어야 합니다. -editor.waves = 웨이브: +editor.waves = 단계: editor.rules = 규칙: -editor.generation = 생성: +editor.generation = 지형 생성: editor.ingame = 인게임 편집 editor.publish.workshop = 창작마당 게시 editor.newmap = 신규 맵 +editor.center = 중앙 workshop = 창작마당 -waves.title = 웨이브 +waves.title = 단계 waves.remove = 삭제 waves.never = 여기까지 유닛생성 waves.every = 매 -waves.waves = 웨이브마다 -waves.perspawn = 생성 -waves.shields = 방어막/웨이브 +waves.waves = 단계마다 +waves.perspawn = 마리 생성 +waves.shields = 보호막/단계 waves.to = 부터 -waves.guardian = 보호자 +waves.guardian = 가디언 waves.preview = 미리보기 waves.edit = 편집 waves.copy = 클립보드로 복사 waves.load = 클립보드에서 불러오기 -waves.invalid = 클립보드에 잘못된 웨이브 데이터가 있습니다. -waves.copied = 웨이브 복사됨 -waves.none = 적 웨이브가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 웨이브로 설정됩니다. +waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다. +waves.copied = 단계 복사됨 +waves.none = 적 단계가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 단계로 설정됩니다. -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = 마리 +wavemode.totals = 총 +wavemode.health = 체력 editor.default = [lightgray]<기본값> details = 설명 @@ -416,6 +420,7 @@ filters.empty = [lightgray]필터가 없습니다! 아래 버튼을 눌러 하 filter.distort = 왜곡 filter.noise = 노이즈 filter.enemyspawn = 적 스폰 선택 +filter.spawnpath = Path To Spawn filter.corespawn = 코어 선택 filter.median = 중앙값 filter.oremedian = 자원 중앙값 @@ -428,24 +433,25 @@ filter.clear = 초기화 filter.option.ignore = 무시 filter.scatter = 흩뿌리기 filter.terrain = 지형 -filter.option.scale = 규모 -filter.option.chance = 배치 횟수 +filter.option.scale = 크기 +filter.option.chance = 배치 빈도 filter.option.mag = 크기 -filter.option.threshold = 문턱 +filter.option.threshold = 경계선 filter.option.circle-scale = 원 크기 filter.option.octaves = 옥타브 filter.option.falloff = 경사 filter.option.angle = 각도 filter.option.amount = 개수 filter.option.block = 블록 -filter.option.floor = 바닥 +filter.option.floor = 바꿀 바닥 filter.option.flooronto = 목표 바닥 +filter.option.target = Target filter.option.wall = 벽 filter.option.ore = 자원 filter.option.floor2 = 2층 바닥 -filter.option.threshold2 = 2번째 문턱 +filter.option.threshold2 = 2번째 경계선 filter.option.radius = 반경 -filter.option.percentile = 백분위수 +filter.option.percentile = 백분율 width = 넓이: height = 높이: @@ -467,26 +473,20 @@ abandon = 포기 abandon.text = 이 지역과 모든 자원이 적에게 넘어갑니다. locked = 잠김 complete = [lightgray]해금 조건 : -requirement.wave = {1}지역에서 {0}웨이브 달성 -requirement.core = {0}지역에서 적 코어를 파괴 +requirement.wave = {1} 지역에서 {0}단계 달성 +requirement.core = {0} 지역에서 적 코어를 파괴 requirement.research = {0} 연구 requirement.capture = {0} 점령 -resume = 지역 재개:\n[lightgray]{0} -bestwave = [lightgray]최고 웨이브: {0} -launch = < 출격 > -launch.text = Launch -launch.title = 출격 성공 -launch.next = [lightgray]다음 출격 기회는 {0} 웨이브에서 나타납니다. -launch.unable2 = [scarlet]출격할 수 없습니다.[] -launch.confirm = 이것은 당신의 코어에 있는 모든 자원을 출격 시킬 것입니다.\n당신은 이 기지로 다시 돌아올 수 없을 것입니다. -launch.skip.confirm = 지금 건너뛰면 다음 출격 웨이브가 끝날 때까지 출격할 수 없습니다. +bestwave = [lightgray]최고 단계: {0} +launch.text = 출격 +research.multiplayer = Only the host can research items. uncover = 지역 개방 configure = 로드아웃 설정 -loadout = Loadout -resources = Resources +loadout = 로드아웃 +resources = 자원 bannedblocks = 금지된 블록들 addall = 모두 추가 -launch.destination = Destination: {0} +launch.destination = 목적지: {0} configure.invalid = 해당 값은 0에서 {0} 사이의 숫자여야 합니다. zone.unlocked = [lightgray]{0} 해금됨. zone.requirement.complete = {0}에 대한 요구 사항 충족:[lightgray]\n{1} @@ -510,17 +510,23 @@ error.bloom = 블룸 그래픽 효과를 적용하지 못했습니다.\n당신 weather.rain.name = 비 weather.snow.name = 눈 -weather.sandstorm.name = 모래폭풍 -weather.sporestorm.name = 포자폭풍 +weather.sandstorm.name = 모래 폭풍 +weather.sporestorm.name = 포자 폭풍 +weather.fog.name = Fog -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.unexplored = [lightgray]미개척 +sectors.resources = 자원: +sectors.production = 생산: +sectors.stored = 저장: +sectors.resume = 재개 +sectors.launch = 출격 +sectors.select = 선택 +sectors.nonelaunch = [lightgray]없음 (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = 전초기지 sector.craters.name = 크레이터 @@ -558,8 +564,12 @@ settings.graphics = 그래픽 settings.cleardata = 게임 데이터 초기화... settings.clear.confirm = 정말로 이 데이터를 지우시겠습니까?\n완료된 작업은 취소할 수 없습니다! settings.clearall.confirm = [scarlet]경고![]\n이 작업은 저장된 맵, 맵파일, 잠금 해제된 목록과 키 매핑, 그리고 모든 데이터를 삭제합니다.\n확인 버튼을 다시 눌러 모든 데이터를 삭제하고 게임에서 나갑니다. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = 정말로 모든 저장을 삭제 하시겠습니까? +settings.clearsaves = 저장 초기화 +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< 일시정지 > clear = 초기화 banned = [scarlet]차단됨 @@ -570,49 +580,74 @@ info.title = 정보 error.title = [scarlet]오류가 발생했습니다. error.crashtitle = 오류가 발생했습니다 unit.nobuild = [scarlet]이 유닛은 건설할 수 없습니다. +lastaccessed = [lightgray]마지막 접근: {0} +block.unknown = [lightgray]??? + stat.input = 입력 stat.output = 출력 stat.booster = 가속 stat.tiles = 필요한 타일 stat.affinities = 친화력 -block.unknown = [lightgray]??? -stat.powercapacity = 전력 용량 -stat.powershot = 전력/발 -stat.damage = 공격력 -stat.targetsair = 공중 공격 -stat.targetsground = 지상 공격 -stat.itemsmoved = 이동 속도 -stat.launchtime = 출격 간격 -stat.shootrange = 사거리 -stat.size = 크기 +stat.powercapacity = Power Capacity +stat.powershot = Power/Shot +stat.damage = Damage +stat.targetsair = Targets Air +stat.targetsground = Targets Ground +stat.itemsmoved = Move Speed +stat.launchtime = Time Between Launches +stat.shootrange = Range +stat.size = Size stat.displaysize = Display Size -stat.liquidcapacity = 액체 용량 -stat.powerrange = 전력 범위 +stat.liquidcapacity = Liquid Capacity +stat.powerrange = Power Range stat.linkrange = Link Range stat.instructions = Instructions -stat.powerconnections = 최대 연결 수 -stat.poweruse = 전력 사용 -stat.powerdamage = 전력/데미지 -stat.itemcapacity = 저장 용량 -stat.basepowergeneration = 기본 전력 생성량 -stat.productiontime = 제작 시간 -stat.repairtime = 전체 블록 수리시간 -stat.speedincrease = 속도 증가 -stat.range = 사거리 -stat.drilltier = 드릴 -stat.drillspeed = 기본 드릴 속도 -stat.boosteffect = 가속 효과 -stat.maxunits = 최대 활성 유닛수 -stat.health = 체력 -stat.buildtime = 건설 시간 +stat.powerconnections = Max Connections +stat.poweruse = Power Use +stat.powerdamage = Power/Damage +stat.itemcapacity = Item Capacity +stat.memorycapacity = Memory Capacity +stat.basepowergeneration = Base Power Generation +stat.productiontime = Production Time +stat.repairtime = Block Full Repair Time +stat.speedincrease = Speed Increase +stat.range = Range +stat.drilltier = Drillables +stat.drillspeed = Base Drill Speed +stat.boosteffect = Boost Effect +stat.maxunits = Max Active Units +stat.health = Health +stat.buildtime = Build Time stat.maxconsecutive = Max Consecutive -stat.buildcost = 건설 재료 -stat.inaccuracy = 오차각 -stat.shots = 공격 속도 -stat.reload = 발/초 -stat.ammo = 탄약 -stat.shieldhealth = 보호막 체력 +stat.buildcost = Build Cost +stat.inaccuracy = Inaccuracy +stat.shots = Shots +stat.reload = Shots/Second +stat.ammo = Ammo +stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = 더 좋은 드릴이 필요 bar.noresources = 자원 부족 @@ -624,6 +659,7 @@ bar.powerbalance = 전력: {0}/s bar.powerstored = 저장량: {0}/{1} bar.poweramount = 전력: {0} bar.poweroutput = 전력 출력: {0} +bar.powerlines = 연결: {0}/{1} bar.items = 자원량: {0} bar.capacity = 용량: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = 생산 진행도 bar.input = 입력 bar.output = 출력 +units.processorcontrol = [lightgray]프로세서 제어됨 + bullet.damage = [stat]{0}[lightgray] 피해 bullet.splashdamage = [stat]{0}[lightgray] 범위 공격 ~[stat] {1}[lightgray] 타일 bullet.incendiary = [stat]방화 @@ -642,12 +680,15 @@ bullet.homing = [stat]유도 bullet.shock = [stat]전격 bullet.frag = [stat]파편 bullet.knockback = [stat]{0}[lightgray] 밀침 +bullet.pierce = [stat]{0}[lightgray]x 피어스 +bullet.infinitepierce = [stat]피어스 bullet.freezing = [stat]빙결 bullet.tarred = [stat]타르 bullet.multiplier = [stat]{0}[lightgray]x 탄약 배수 bullet.reload = [stat]{0}[lightgray]x 발사 속도 unit.blocks = 블록 +unit.blockssquared = blocks² unit.powersecond = 전력/초 unit.liquidsecond = 액체/초 unit.itemssecond = 개/초 @@ -655,12 +696,12 @@ unit.liquidunits = 액체 unit.powerunits = 전력 unit.degrees = 도 unit.seconds = 초 -unit.minutes = mins +unit.minutes = 분 unit.persecond = /초 -unit.perminute = /min +unit.perminute = /분 unit.timesspeed = x 배 unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = 보호막 체력 unit.items = 자원 unit.thousands = 천 unit.millions = 백만 @@ -670,7 +711,7 @@ category.power = 전력 category.liquids = 액체 category.items = 자원 category.crafting = 입력/출력 -category.shooting = 사격 +category.function = Function category.optional = 보조 자원 setting.landscape.name = 가로화면 잠금 setting.shadows.name = 그림자 @@ -679,12 +720,11 @@ setting.linear.name = 선형 필터링 setting.hints.name = 힌트 setting.flow.name = 자원 흐름량 표시 setting.buildautopause.name = 건설 자동 일시정지 -setting.mapcenter.name = 플레이어 기준으로 맵 중앙 고정 -setting.animatedwater.name = 움직이는 유체 -setting.animatedshields.name = 움직이는 보호막 +setting.animatedwater.name = 액체 애니메이션 효과 +setting.animatedshields.name = 보호막 애니메이션 효과 setting.antialias.name = 안티 에일리어싱[lightgray] (재시작 필요)[] -setting.playerindicators.name = 플레이어 표시기 -setting.indicators.name = 적 표시기 +setting.playerindicators.name = 플레이어 위치 표시기 +setting.indicators.name = 적 위치 표시기 setting.autotarget.name = 자동 조준 setting.keyboard.name = 마우스+키보드 조작 setting.touchscreen.name = 터치스크린 조작 @@ -698,22 +738,21 @@ setting.difficulty.easy = 쉬움 setting.difficulty.normal = 보통 setting.difficulty.hard = 어려움 setting.difficulty.insane = 미침 -setting.difficulty.name = 난이도: +setting.difficulty.name = 난이도: setting.screenshake.name = 화면 흔들림 setting.effects.name = 효과 보임 setting.destroyedblocks.name = 파괴된 블록 표시 setting.blockstatus.name = 블록 상태 표시 -setting.conveyorpathfinding.name = 컨베이어 배치 경로찾기 +setting.conveyorpathfinding.name = 컨베이어 배치시 자동으로 경로 찾기 setting.sensitivity.name = 컨트롤러 감도 setting.saveinterval.name = 저장 간격 -setting.seconds = {0} 초 +setting.seconds = {0}초 setting.blockselecttimeout.name = 블록 선택 시간 초과 -setting.milliseconds = {0} 밀리 초 +setting.milliseconds = {0}ms setting.fullscreen.name = 전체 화면 setting.borderlesswindow.name = 테두리 없는 창 모드[lightgray] (재시작이 필요할 수 있습니다) setting.fps.name = FPS와 핑 표시 setting.smoothcamera.name = 부드러운 시점 -setting.blockselectkeys.name = 블록 선택 키 표시 setting.vsync.name = 수직 동기화 setting.pixelate.name = 픽셀화 setting.minimap.name = 미니맵 표시 @@ -747,8 +786,8 @@ category.blocks.name = 블록 선택 command.attack = 공격 command.rally = 순찰 command.retreat = 후퇴 -command.idle = Idle -placement.blockselectkeys = \n[lightgray]키: [{0}, +command.idle = 대기 +placement.blockselectkeys = \n[lightgray]단축키: [{0}, keybind.respawn.name = 리스폰 keybind.control.name = 유닛 제어 keybind.clear_building.name = 설계도 초기화 @@ -760,7 +799,7 @@ keybind.toggle_block_status.name = 블록 상태 토글 keybind.move_x.name = X축 이동 keybind.move_y.name = Y축 이동 keybind.mouse_move.name = 커서를 따라서 이동 -keybind.pan.name = Pan View +keybind.pan.name = 펜 보기 keybind.boost.name = 부스트 keybind.schematic_select.name = 영역 설정 keybind.schematic_menu.name = 설계도 메뉴 @@ -788,9 +827,9 @@ keybind.diagonal_placement.name = 대각선 설치 keybind.pick.name = 블록 선택 keybind.break_block.name = 블록 파괴 keybind.deselect.name = 선택해제 -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = 화물 집기 +keybind.dropCargo.name = 화물 내려놓기 +keybind.command.name = 명령 keybind.shoot.name = 사격 keybind.zoom.name = 확대 keybind.menu.name = 메뉴 @@ -810,9 +849,9 @@ keybind.drop_unit.name = 유닛 떨구기 keybind.zoom_minimap.name = 미니맵 확대 mode.help.title = 모드 설명 mode.survival.name = 생존 -mode.survival.description = 이것은 일반 모드입니다. 제한된 자원과 자동으로 시작되는 웨이브가 있습니다.\n[gray]플레이하려면 맵에 적의 스폰지점이 필요합니다. +mode.survival.description = 이것은 일반 모드입니다. 제한된 자원과 자동으로 시작되는 단계가 있습니다.\n[gray]플레이하려면 맵에 적의 스폰지점이 필요합니다. mode.sandbox.name = 샌드박스 -mode.sandbox.description = 무한한 자원과 웨이브 시작 타이머가 없습니다. +mode.sandbox.description = 무한한 자원과 단계 시작 타이머가 없습니다. mode.editor.name = 편집기 mode.pvp.name = PvP mode.pvp.description = 다른 플레이어와 현장에서 싸우십시오.\n[gray]플레이하려면 맵에 다른 색상의 코어가 2개 이상 있어야합니다. @@ -821,11 +860,12 @@ mode.attack.description = 적의 기지를 파괴하세요.\n[gray]플레이하 mode.custom = 사용자 정의 규칙 rules.infiniteresources = 무한 자원 -rules.reactorexplosions = 원자로 폭발 -rules.wavetimer = 웨이브 시간 -rules.waves = 웨이브 +rules.reactorexplosions = 원자로 폭발 허용 +rules.schematic = 설계도 허용 +rules.wavetimer = 시간 제한이 있는 단계 +rules.waves = 일반 단계 rules.attack = 공격 모드 -rules.buildai = AI Building +rules.buildai = AI 건설 rules.enemyCheat = 무한 AI (빨간팀) 자원 rules.blockhealthmultiplier = 블록 체력 배수 rules.blockdamagemultiplier = 블록 공격력 배수 @@ -833,31 +873,33 @@ rules.unitbuildspeedmultiplier = 유닛 생산 속도 배수 rules.unithealthmultiplier = 유닛 체력 배수 rules.unitdamagemultiplier = 유닛 공격력 배수 rules.enemycorebuildradius = 적 코어 건설 금지구역 범위:[lightgray] (타일) -rules.wavespacing = 웨이브 간격:[lightgray] (초) +rules.wavespacing = 단계 간격:[lightgray] (초) rules.buildcostmultiplier = 건설 자원소모 배수 rules.buildspeedmultiplier = 건설 속도 배수 rules.deconstructrefundmultiplier = 해체 환불 배수 -rules.waitForWaveToEnd = 웨이브가 끝날때까지 대기중 +rules.waitForWaveToEnd = 한 단계가 끝날때까지 대기 rules.dropzoneradius = 스폰 구역 범위: [lightgray] (타일) -rules.unitammo = 유닛에 탄약이 필요 -rules.title.waves = 웨이브 +rules.unitammo = 탄약 필요 +rules.title.waves = 단계 rules.title.resourcesbuilding = 자원 & 건축 rules.title.enemy = 적 rules.title.unit = 유닛 rules.title.experimental = 실험적인 기능 rules.title.environment = 환경 -rules.lighting = 조명 -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.lighting = 조명 활성화 +rules.enemyLights = 적에게 조명 표시 활성화 +rules.fire = 방화 활성화 +rules.explosions = 블록/유닛 폭발 데미지 활성화 rules.ambientlight = 자연 조명 -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = 날씨 +rules.weather.frequency = 빈도: +rules.weather.duration = 지속 시간: content.item.name = 자원 content.liquid.name = 액체 content.unit.name = 유닛 content.block.name = 블록 + item.copper.name = 구리 item.lead.name = 납 item.coal.name = 석탄 @@ -879,23 +921,6 @@ liquid.slag.name = 광재 liquid.oil.name = 기름 liquid.cryofluid.name = 냉각수 -item.explosiveness = [lightgray]폭발성: {0} -item.flammability = [lightgray]인화성: {0} -item.radioactivity = [lightgray]방사능: {0} - -unit.health = [lightgray]체력: {0} -unit.speed = [lightgray]속도: {0} -unit.weapon = [lightgray]무기: {0} -unit.itemcapacity = [lightgray]자원 수용량: {0} -unit.minespeed = [lightgray]채광 속도: {0}% -unit.minepower = [lightgray]채광 레벨: {0} -unit.ability = [lightgray]능력: {0} -unit.buildspeed = [lightgray]건설 속도: {0}% - -liquid.heatcapacity = [lightgray]비열: {0} -liquid.viscosity = [lightgray]점도: {0} -liquid.temperature = [lightgray]온도: {0} - unit.dagger.name = 대거 unit.mace.name = 메이스 unit.fortress.name = 포트리스 @@ -906,7 +931,7 @@ unit.crawler.name = 크롤러 unit.atrax.name = 아트락스 unit.spiroct.name = 스피록트 unit.arkyid.name = 아키드 -unit.toxopid.name = Toxopid +unit.toxopid.name = 톡소드 unit.flare.name = 플레어 unit.horizon.name = 호라이즌 unit.zenith.name = 제니스 @@ -915,8 +940,8 @@ unit.eclipse.name = 이클립스 unit.mono.name = 모노 unit.poly.name = 폴리 unit.mega.name = 메가 -unit.quad.name = Quad -unit.oct.name = Oct +unit.quad.name = 쿼드 +unit.oct.name = 옥토 unit.risso.name = 리소 unit.minke.name = 민케 unit.bryde.name = 브리드 @@ -925,17 +950,18 @@ unit.omura.name = 오무라 unit.alpha.name = 알파 unit.beta.name = 베타 unit.gamma.name = 감마 -unit.scepter.name = Scepter -unit.reign.name = Reign -unit.vela.name = Vela -unit.corvus.name = Corvus +unit.scepter.name = 셉터 +unit.reign.name = 리닝 +unit.vela.name = 벨라 +unit.corvus.name = 코르부스 -block.resupply-point.name = Resupply Point +block.resupply-point.name = 보급 지점 block.parallax.name = 시차 block.cliff.name = 낭떠러지 block.sand-boulder.name = 사암 block.grass.name = 잔디 block.slag.name = 광재 +block.space.name = 우주 block.salt.name = 소금 block.salt-wall.name = 소금 벽 block.pebbles.name = 조약돌 @@ -981,6 +1007,7 @@ block.darksand-water.name = 젖은 검은 모래 block.char.name = 숯 block.dacite.name = 데이사이트 block.dacite-wall.name = 데이사이트 벽 +block.dacite-boulder.name = 데이사이트 볼더 block.ice-snow.name = 얼음눈 block.stone-wall.name = 돌 벽 block.ice-wall.name = 얼음 벽 @@ -1075,6 +1102,7 @@ block.power-source.name = 전력 공급기 block.unloader.name = 언로더 block.vault.name = 창고 block.wave.name = 파도 +block.tsunami.name = 쓰나미 block.swarmer.name = 스워머 block.salvo.name = 살보 block.ripple.name = 립플 @@ -1109,23 +1137,24 @@ block.cyclone.name = 사이클론 block.fuse.name = 퓨즈 block.shock-mine.name = 전격 지뢰 block.overdrive-projector.name = 과부하 프로젝터 -block.force-projector.name = 보호막 프로젝터 +block.force-projector.name = 포스 프로젝터 block.arc.name = 아크 block.rtg-generator.name = RTG 발전기 block.spectre.name = 스펙터 block.meltdown.name = 멜트다운 +block.foreshadow.name = 전그림자 block.container.name = 컨테이너 block.launch-pad.name = 출격 패드 block.launch-pad-large.name = 대형 출격 패드 block.segment.name = 세그먼트 -block.command-center.name = 지휘소 +block.command-center.name = 커맨드 센터 block.ground-factory.name = 지상 공장 block.air-factory.name = 항공 공장 block.naval-factory.name = 해양 공장 -block.additive-reconstructor.name = 첨가물 재구성기 -block.multiplicative-reconstructor.name = 다중 재구성기 -block.exponential-reconstructor.name = 지수 재구성기 -block.tetrative-reconstructor.name = 발산 재구성기 +block.additive-reconstructor.name = 부가 재건축기 +block.multiplicative-reconstructor.name = 다중 재건축기 +block.exponential-reconstructor.name = 급수 재건축기 +block.tetrative-reconstructor.name = 테트레티 재건축기 block.payload-conveyor.name = 화물 컨베이어 block.payload-router.name = 화물 분배기 block.disassembler.name = 가속 분해기 @@ -1133,12 +1162,13 @@ block.silicon-crucible.name = 실리콘 도가니 block.overdrive-dome.name = 대형 과부하 프로젝터 block.switch.name = 스위치 -block.micro-processor.name = 소형 프로세서 -block.logic-processor.name = 명령 프로세서 +block.micro-processor.name = 마이크로 프로세서 +block.logic-processor.name = 로직 프로세서 block.hyper-processor.name = 하이퍼 프로세서 -block.logic-display.name = 화면 -block.large-logic-display.name = 대형 화면 -block.memory-cell.name = 기억 블록 +block.logic-display.name = 로직 디스플레이 +block.large-logic-display.name = 대형 로직 디스플레이 +block.memory-cell.name = 메모리 셀 +block.memory-bank.name = 메모리 뱅크 team.blue.name = 파랑색 팀 team.crux.name = 빨강색 팀 @@ -1166,9 +1196,9 @@ tutorial.breaking = 블록은 종종 파괴 되어야 합니다.\n선택한 모 tutorial.breaking.mobile = 블록은 종종 파괴 되어야 합니다.\n[accent]삭제 모드[]를 선택한 다음 블록을 탭 하여 파괴할 수 있습니다.\n[accnet]몇 초 동안 손가락을 누르고 원하는 방향으로 드래그[]하여 범위 안에있는 블록을 파괴하세요.\n그리고 체크 표시 버튼을 눌러 삭제 작업을 할 수 있습니다.\n[accent]영역 선택을 사용하여 코어 왼쪽의 모든 조각 벽을 파괴하세요. tutorial.withdraw = 경우에 따라 블록에서 자원을 직접 가져와야 합니다.\n이 작업을 하려면 [accent]자원이 있는 블록[]을 탭한 다음, 인벤토리에서 [accent]자원[]을 탭하세요.\n[accent]누른 상태를 유지[]하면 여러개를 꺼낼 수 있습니다.\n\n[accent]코어에서 구리를 빼내세요. tutorial.deposit = 기체에서 목적지 블록으로 드래그하여 자원을 블록에 넣으세요.\n\n[accent]구리를 다시 코어에 넣으세요[]. -tutorial.waves = [lightgray]적[]이 다가옵니다.\n2 웨이브로부터 코어를 방어하세요. [accent]클릭[]하여 사격할 수 있습니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요. -tutorial.waves.mobile = [lightgray]적[]이 다가옵니다.\n2 웨이브로부터 코어를 방어하세요. 당신의 기체는 자동으로 적을 향해 사격합니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요. -tutorial.launch = 특정 웨이브에 도달하면 [accent]코어로 출격[] 을 할 수 있습니다.\n\n이렇게 얻은 자원을 사용하여 새로운 기술을 연구 할 수 있습니다.\n\n[accent]출격 버튼을 누르세요. +tutorial.waves = [lightgray]적[]이 다가옵니다.\n2단계 로부터 코어를 방어하세요. [accent]클릭[]하여 사격할 수 있습니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요. +tutorial.waves.mobile = [lightgray]적[]이 다가옵니다.\n2단계 부터 코어를 방어하세요. 당신의 기체는 자동으로 적을 향해 사격합니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요. +tutorial.launch = 특정 단계에 도달하면 [accent]코어로 출격[] 을 할 수 있습니다.\n\n이렇게 얻은 자원을 사용하여 새로운 기술을 연구 할 수 있습니다.\n\n[accent]출격 버튼을 누르세요. item.copper.description = 가장 기본적인 건설 재료. 모든 유형의 블록에서 광범위하게 사용됩니다. item.lead.description = 기본 초반 재료. 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. @@ -1214,8 +1244,8 @@ block.item-source.description = 자원을 무한대로 출력합니다. 샌드 block.item-void.description = 모든 자원을 파괴합니다. 샌드박스 전용. block.liquid-source.description = 액체를 무한히 출력합니다. 샌드박스 전용. block.liquid-void.description = 액체를 제거합니다. 샌드박스 전용. -block.copper-wall.description = 저렴한 수비 블록.\n처음 몇 웨이브에서 코어와 포탑을 보호하는데 유용합니다. -block.copper-wall-large.description = 저렴한 수비 블록.\n처음 몇 웨이브에서 코어와 포탑을 보호하는데 유용합니다.\n여러 타일을 차지합니다. +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 = 전격 공격을 흡수하고 전력 노드의 자동 연결을 차단하는 특수 유형의 벽. @@ -1228,7 +1258,7 @@ block.surge-wall.description = 내구성이 매우 강한 방어 블록.\n총탄 block.surge-wall-large.description = 내구성이 매우 강한 방어 블록.\n총탄이 날아오면 충전량을 높여 무작위로 방출합니다.\n여러 타일을 차지합니다. block.door.description = 작은 문. 탭하여 열거나 닫을 수 있습니다. block.door-large.description = 큰 문. 탭하여 열거나 닫을 수 있습니다.\n여러 타일을 차지합니다. -block.mender.description = 주변의 블록을 주기적으로 수리합니다. 웨이브 사이의 방어를 유지하게 합니다.\n선택적으로 실리콘을 사용하여 범위와 효율성을 향상시킵니다. +block.mender.description = 주변의 블록을 주기적으로 수리합니다. 각 단계 사이의 방어를 유지하게 합니다.\n선택적으로 실리콘을 사용하여 범위와 효율성을 향상시킵니다. block.mend-projector.description = 소형 수리 프로젝터의 강화 버전. 주변의 블록을 수리합니다.\n선택적으로 메타를 사용하여 범위와 효율성을 향상시킵니다. block.overdrive-projector.description = 주변 건물의 속도를 높입니다.\n선택적으로 메타를 사용하여 범위와 효율성을 높입니다. block.force-projector.description = 건물과 내부의 유닛을 공격으로부터 보호하며, 그 주위에 육각형 역장을 형성합니다.\n너무 많은 손상이 지속되면 과열되며, 선택적으로 냉각수를 사용하여 과열을 방지할 수 있고, 메타는 역장의 크기를 늘리는 데 사용할 수 있습니다. @@ -1241,7 +1271,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.underflow-gate.description = 오버플로 게이트의 반대. 왼쪽 및 오른쪽 경로가 차단되면 전면으로 출력됩니다. @@ -1252,7 +1282,7 @@ block.thermal-pump.description = 가장 강력한 펌프. block.conduit.description = 기본 액체 운송 블록. 액체를 앞으로 이동시킵미다. 펌프 및 기타 파이프와 함께 사용됩니다. block.pulse-conduit.description = 고급 액체 운송 블록. 액체를 더 빠르게 운반하고 표준 파이프보다 더 많이 저장합니다. block.plated-conduit.description = 펄스 파이프와 같은 속도로 이동하지만 더 높은 방어력을 가지고 있습니다. 파이프 이외의 물체로 측면의 액체를 받아들이지 않습니다.\n누설이 적습니다. -block.liquid-router.description = 한 방향에서 액체를 받아 최대 3개의 다른 방향으로 동일하게 출력합니다. 일정량의 액체를 저장할 수도 있으며 한 공급원에서 여러 대상으로 액체를 분할하는 데 유용합니다. +block.liquid-router.description = 한 방향에서 액체를 받아 최대 3개의 다른 방향으로 동일하게 출력합니다. 일정량의 액체를 저장할 수도 있으며 한 소스에서 여러 대상으로 액체를 분할하는 데 유용합니다. block.liquid-tank.description = 대량의 액체를 저장합니다. 재료가 일정하지 않은 상황에서 버퍼를 생성하거나 중요한 블록을 냉각하기 위한 보호 장치로 사용하세요. block.liquid-junction.description = 두 개의 교차 파이프를 위한 다리 역할을 합니다. 다른 액체를 다른 위치로 운반하는 두 개의 다른 파이프가 있는 상황에서 유용합니다. block.bridge-conduit.description = 고급 액체 운송 블록. 지형이나 건물을 넘어 최대 3개 타일 위로 액체를 운반할 수 있습니다. @@ -1302,4 +1332,4 @@ block.cyclone.description = 대공 및 대지 포탑. 근처 유닛에게 폭발 block.spectre.description = 거대한 이중 배럴 대포. 공중 및 지상 목표물에 큰 관통 철갑탄을 발사합니다. block.meltdown.description = 거대한 레이저 대포. 근처의 적에게 지속적인 레이버 빔을 충전하여 발사합니다. 냉각수가 있어야 작동합니다. block.repair-point.description = 주변에서 가장 가까운 유닛을 지속적으로 치료합니다. -block.segment.description = 날아오는 발사체를 요격합니다. 레이저는 목표 대상이 아닙니다. \ No newline at end of file +block.segment.description = 날아오는 발사체를 요격합니다. 레이저는 목표 대상이 아닙니다. diff --git a/core/assets/bundles/bundle_lt.properties b/core/assets/bundles/bundle_lt.properties index 2ebd273b5a..0a8290e544 100644 --- a/core/assets/bundles/bundle_lt.properties +++ b/core/assets/bundles/bundle_lt.properties @@ -55,6 +55,7 @@ schematic.saved = Schema išsaugota. schematic.delete.confirm = Ši schema bus negrįžtamai pašalinta. schematic.rename = Pervadinti schemą schematic.info = {0}x{1}, {2} blokai +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Įveikta bangų:[accent] {0} stat.enemiesDestroyed = Sunaikinta priešų:[accent] {0} @@ -100,7 +101,6 @@ done = Baigta feature.unsupported = Jūsų įrenginys nepalaiko šios funkcijos. mods.alphainfo = Prisiminkite, jog modifikacijos vis dar yra alpha, ir[scarlet] gali būti [].\nPraneškite apie rastas klaidas Mindustry GitHub puslapyje arba Discord serveryje. -mods.alpha = [accent](Alpha) mods = Modifikacijos mods.none = [lightgray]Modifikacijos nerastos mods.guide = Modifikavimo pagalba @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] pasirinkimui+kopijavimui pausebuilding = [accent][[{0}][] statymo sustabdymui resumebuilding = [scarlet][[{0}][] statymo pratęsimui wave = [accent]Banga {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Banga po {0} wave.waveInProgress = [lightgray]Vyksta banga waiting = [lightgray]Laukiama... waiting.players = Laukiama žaidėjų... wave.enemies = [lightgray]{0} Likę priešai wave.enemy = [lightgray]{0} Likęs priešas +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Užkrauti vaizdą saveimage = Išsaugoti vaizdą unknown = Nežinomas @@ -328,6 +331,7 @@ editor.generation = Generacija: editor.ingame = Redaguoti žaidime editor.publish.workshop = Publikuoti Dirbtuvėje editor.newmap = Naujas žemėlapis +editor.center = Center workshop = Dirbtuvė waves.title = Bangos waves.remove = Panaikinti @@ -416,6 +420,7 @@ filters.empty = [lightgray]Nėra filtrų! Pridėkite su mygtuku easančiu žemia filter.distort = Iškraipyti filter.noise = Triukšmas filter.enemyspawn = Priešų atsiradimo vietos pasirinkimas +filter.spawnpath = Path To Spawn filter.corespawn = Branduolio pasirinkimas filter.median = Mediana filter.oremedian = Rūdų mediana @@ -440,6 +445,7 @@ filter.option.amount = Kiekis filter.option.block = Blokas filter.option.floor = Sluoksnis filter.option.flooronto = Pasirinktas sluoksnis +filter.option.target = Target filter.option.wall = Siena filter.option.ore = Rūda filter.option.floor2 = Antrasis sluoksnis @@ -471,15 +477,9 @@ requirement.wave = Pasiekite {0} zonoje {1} requirement.core = Sunaikinkite priešų branduolį zonoje {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Pratęsti zoną:\n[lightgray]{0} bestwave = [lightgray]Bangos rekordas: {0} -launch = < PALEISTI > launch.text = Launch -launch.title = Paleidimas sėkmingas -launch.next = [lightgray]kita proga bangoje {0} -launch.unable2 = [scarlet]Negalima PALEISTI.[] -launch.confirm = Tai paleis visus resursus jūsų branduolyje.\nJūs nebegalėsite sugrįžti į šią bazę. -launch.skip.confirm = Jei praleisite dabar, negalėsite paleisti iki vėlesnių bangų. +research.multiplayer = Only the host can research items. uncover = Atidengti configure = Keisti resursų kiekį loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Ar tikrai norite ištrinti šiuos duomenis?\nTai negali settings.clearall.confirm = [scarlet]ĮSPĖJIMAS![]\nTai ištrins visus duomenis, įskaitant išsaugojimus, žemėlapius, atrakinimus ir mygtukų pakeitimus.\nVos paspaudus 'gerai' žaidimas ištrins visus duomenis ir išsijungs. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Sustabdyta > clear = Išvalyti banned = [scarlet]Užblokuota @@ -570,12 +580,14 @@ info.title = Informacija error.title = [crimson]Įvyko klaida error.crashtitle = Įvyko klaida unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Įeiga stat.output = Išeiga stat.booster = Stiprintuvas stat.tiles = Privalomi stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Energijos Talpumas stat.powershot = Energija per šūvį stat.damage = Žala @@ -594,6 +606,7 @@ stat.powerconnections = Maks. Jungčių Kiekis stat.poweruse = Energijos Suvartojimas stat.powerdamage = Power/Damage stat.itemcapacity = Daiktų Talpumas +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Bazinis Energijos Generavimas stat.productiontime = Gamybos Laikas stat.repairtime = Pilnas bloko sutaisymo laikas @@ -613,6 +626,28 @@ stat.reload = Šūviai per sekundę stat.ammo = Šoviniai stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Privalomas Geresnis Grąžtas bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Energija: {0}/s bar.powerstored = Sukaupta: {0}/{1} bar.poweramount = Energija: {0} bar.poweroutput = Energijos Išeiga: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Daiktai: {0} bar.capacity = Talpumas: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Statymo Progresas bar.input = Įeiga bar.output = Išeiga +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] žalos bullet.splashdamage = [stat]{0}[lightgray] zonos žalos ~[stat] {1}[lightgray] blokai bullet.incendiary = [stat]uždegantis @@ -642,12 +680,15 @@ bullet.homing = [stat]sekimas bullet.shock = [stat]šokas bullet.frag = [stat]skilantis bullet.knockback = [stat]{0}[lightgray] numušimas +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]šaldantis bullet.tarred = [stat]dervuotas bullet.multiplier = [stat]{0}[lightgray]x šovinių daugiklis bullet.reload = [stat]{0}[lightgray]x šaudymo greitis unit.blocks = blokai +unit.blockssquared = blocks² unit.powersecond = energijos per sekundę unit.liquidsecond = skysčio per sekundę unit.itemssecond = daiktų per sekundę @@ -670,7 +711,7 @@ category.power = Energija category.liquids = Skysčiai category.items = Daiktai category.crafting = Įeiga/Išeiga -category.shooting = Šaudymas +category.function = Function category.optional = Galimi Pagerinimai setting.landscape.name = Užrakinti pasukimą setting.shadows.name = Šešėliai @@ -679,7 +720,6 @@ setting.linear.name = Linijinis Filtravimas setting.hints.name = Užuominos setting.flow.name = Rodyti Resursų Srauto Geritį[scarlet] (experimental) setting.buildautopause.name = Automatinis Statybų Sustabdymas -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Vandens Animacija setting.animatedshields.name = Skydų Animacija setting.antialias.name = Glodinimas[lightgray] (reikalingas perkrovimas)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Langas Be Pakrasčių[lightgray] (gali reikėti perkrauti) setting.fps.name = Rodyti FPS ir Ping setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Rodyti Blokų Pasirinkimo Mygtukus setting.vsync.name = VSync setting.pixelate.name = Pikseliavimas setting.minimap.name = Rodyti Mini Žemėlapį @@ -822,6 +861,7 @@ mode.custom = Pasirinktinės Taisyklės rules.infiniteresources = Neriboti Resursai rules.reactorexplosions = Reaktorių Sprogimai +rules.schematic = Schematics Allowed rules.wavetimer = Bangų Laikmatis rules.waves = Bangos rules.attack = Puolimo Režimas @@ -847,6 +887,7 @@ rules.title.unit = Vienetai rules.title.experimental = Eksperimentinis rules.title.environment = Environment rules.lighting = Apšvietimas +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Aplinkos Šviesa @@ -858,6 +899,7 @@ content.item.name = Daiktai content.liquid.name = Skysčiai content.unit.name = Vienetai content.block.name = Blokai + item.copper.name = Varis item.lead.name = Švinas item.coal.name = Anglis @@ -879,23 +921,6 @@ liquid.slag.name = Šlakas liquid.oil.name = Nafta liquid.cryofluid.name = Krio Skystis -item.explosiveness = [lightgray]Sprogstamumas: {0}% -item.flammability = [lightgray]Degumas: {0}% -item.radioactivity = [lightgray]Radioaktyvumas: {0}% - -unit.health = [lightgray]Gyvybės: {0} -unit.speed = [lightgray]Greitis: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Karščio Talpumas: {0} -liquid.viscosity = [lightgray]Klampumas: {0} -liquid.temperature = [lightgray]Temperatūra: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Smėlio Riedulys block.grass.name = Žolė block.slag.name = Slag +block.space.name = Space block.salt.name = Druska block.salt-wall.name = Salt Wall block.pebbles.name = Akmenukai @@ -981,6 +1007,7 @@ block.darksand-water.name = Tamsaus Smėlio Vanduo block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ledinis Sniegas block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Begalinė Energija block.unloader.name = Iškroviklis block.vault.name = Seifas block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = RTG Generatorius block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Talpykla block.launch-pad.name = Paleidimo Aikštelė block.launch-pad-large.name = Didelė Paleidimo Aikštelė @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = mėlyna team.crux.name = raudona @@ -1302,4 +1332,4 @@ block.cyclone.description = Didelis bokštas puolantis, tiek žemę, tiek orą. block.spectre.description = Milžiniškas dvivamzdis bokštas. Šaudo didelius, kiaurai per šarvus einančius šovinius į taikinius esančius ant žemės ir ore. block.meltdown.description = Milžiniška lazerinė patranka. Užsikrauna ir šaudo lazerinius spindulius į aplinkinius priešus. Veikimui reikalingas aušinimo skystis. block.repair-point.description = Pastoviai gydo artimiausius netoliese esančius vienetus. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 41d6e8a8fc..5ee4d6faa6 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -55,6 +55,7 @@ schematic.saved = Ontwerp bewaard. schematic.delete.confirm = Dit ontwerp zal in een zwart gat verdwijnen. schematic.rename = Hernoem ontwerp schematic.info = {0}x{1}, {2} blokken +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Waves Verslagen:[accent] {0} stat.enemiesDestroyed = Vijanden Vernietigd:[accent] {0} @@ -100,7 +101,6 @@ 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 = [lightgray]Geen mods gevonden! mods.guide = Modding Handboek @@ -284,12 +284,15 @@ 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.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Volgende ronde over {0} wave.waveInProgress = [lightgray]Ronde bezig waiting = [lightgray]Wachten... waiting.players = Wachten op spelers... wave.enemies = [lightgray]{0} Vijanden resterend wave.enemy = [lightgray]{0} Vijand resterend +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Laad afbeelding saveimage = Bewaar afbeelding unknown = Onbekend @@ -328,6 +331,7 @@ editor.generation = Generatie: editor.ingame = Bewerk In-Game editor.publish.workshop = Publiceer in Werkplaats editor.newmap = Nieuwe Kaart +editor.center = Center workshop = Werkplaats waves.title = Rondes waves.remove = Verwijder @@ -416,6 +420,7 @@ filters.empty = [lightgray]Geen filters! Voeg een toe met onderstaande knop. filter.distort = Verdraai filter.noise = Geluid filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Mediaan filter.oremedian = Ertsmediaan @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Blok filter.option.floor = Vloer filter.option.flooronto = Doel Vloer +filter.option.target = Target filter.option.wall = Muur filter.option.ore = Grondstof filter.option.floor2 = Secundaire vloer @@ -467,19 +473,13 @@ abandon = Verlaat abandon.text = Je verliest deze kaart met alles erop en eraan aan de vijand. locked = Op slot complete = [lightgray]Voltooid: -requirement.wave = Berijk ronde {0} in {1} +requirement.wave = Bereik ronde {0} in {1} requirement.core = Vernietig vijandige core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Hervat zone:\n[lightgray]{0} bestwave = [lightgray]Beste ronde: {0} -launch = < LANCEER > launch.text = Launch -launch.title = Lancering Sucessvol -launch.next = [lightgray]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 de volgende mogelijkheid. +research.multiplayer = Only the host can research items. uncover = Ontdek configure = Configureer startinventaris loadout = Loadout @@ -489,7 +489,7 @@ addall = Voeg Alles Toe launch.destination = Destination: {0} configure.invalid = Hoeveelheid moet een getal zijn tussen 0 en {0}. zone.unlocked = [lightgray]{0} vrijgespeeld. -zone.requirement.complete = Ronde {0} berijkt:\n{1} zone vrijgespeeld. +zone.requirement.complete = Ronde {0} bereikt:\n{1} zone vrijgespeeld. zone.resources = Vindbare grondstoffen: zone.objective = [lightgray]Doel: [accent]{0} zone.objective.survival = Overleef @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Weet je zeker dat je deze data wilt verwijderen?\nDit i settings.clearall.confirm = [scarlet]WAARSCHUWING![]\nDit verwijderd alle data, inclusief saves, kaarten, technologie en bedienings-instellingen.\nAls je op doorgaat wist het spel al je data en stopt automatisch. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Gepauzeerd > clear = Wis banned = [scarlet]Verbannen @@ -570,12 +580,14 @@ info.title = Informatie error.title = [crimson]Een fout is opgetreden error.crashtitle = Een fout is opgetreden unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Input stat.output = Output stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Stroomcapaciteit stat.powershot = Stroom/Schot stat.damage = Schade @@ -594,6 +606,7 @@ stat.powerconnections = Maximale Hoeveelheid Connecties stat.poweruse = Stroomverbruik stat.powerdamage = Stroom/Schade stat.itemcapacity = Materiaalcapaciteit +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Standaard Stroom Generatie stat.productiontime = Productie Tijd stat.repairtime = Volledige Blok Repareertijd @@ -613,6 +626,28 @@ stat.reload = Schoten/Seconde stat.ammo = Ammunitie stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Betere miner nodig bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Stroom: {0} bar.powerstored = Opgeslagen: {0}/{1} bar.poweramount = Stroom: {0} bar.poweroutput = Stroom Output: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Items: {0} bar.capacity = Capaciteit: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Bouw Voortgang bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] dmg bullet.splashdamage = [stat]{0}[lightgray] gebied dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]brandstichtend @@ -642,12 +680,15 @@ bullet.homing = [stat]doelzoekend bullet.shock = [stat]schok bullet.frag = [stat]clusterbom bullet.knockback = [stat]{0}[lightgray] terugslag +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]bevriezend bullet.tarred = [stat]pek bullet.multiplier = [stat]{0}[lightgray]x ammunitieverdubbelaar bullet.reload = [stat]{0}[lightgray]x herlaad unit.blocks = blokken +unit.blockssquared = blocks² unit.powersecond = stroomeenheid/seconde unit.liquidsecond = vloeistofeenheid/seconde unit.itemssecond = items/seconde @@ -670,7 +711,7 @@ category.power = Stroom category.liquids = Vloeisof category.items = Items category.crafting = Productie -category.shooting = Wapens +category.function = Function category.optional = Optionele Verbeteringen setting.landscape.name = Vergrendel Landschap setting.shadows.name = Schaduwen @@ -679,7 +720,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Pauzeer Bouw Automatisch -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animeer Water setting.animatedshields.name = Animeer Schilden setting.antialias.name = Antialias[lightgray] (herstart vereist)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Volledig scherm setting.borderlesswindow.name = Borderless Venster[lightgray] (wellicht herstart vereist) setting.fps.name = Show FPS setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Toon Blok Selectie Toetscombinaties setting.vsync.name = VSync setting.pixelate.name = Pixelate [lightgray](mogelijk verminderde performance) setting.minimap.name = Toon Minimap @@ -822,6 +861,7 @@ mode.custom = Aangepaste regels rules.infiniteresources = Oneindige Resources rules.reactorexplosions = Ontploffende Reactors +rules.schematic = Schematics Allowed rules.wavetimer = Ronde timer rules.waves = Rondes rules.attack = Aanval modus @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimenteel rules.title.environment = Environment rules.lighting = Belichting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Mist @@ -858,6 +899,7 @@ content.item.name = Items content.liquid.name = Vloeisof content.unit.name = Eenheiden content.block.name = Blokken + item.copper.name = Coper item.lead.name = Lood item.coal.name = Steenkool @@ -879,23 +921,6 @@ liquid.slag.name = Slag liquid.oil.name = Olie liquid.cryofluid.name = Koelvloeistof -item.explosiveness = [lightgray]Explosivieit: {0}% -item.flammability = [lightgray]Vlambaarheid: {0}% -item.radioactivity = [lightgray]Radioactiviteit: {0}% - -unit.health = [lightgray]Health: {0} -unit.speed = [lightgray]Snelheid: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Warmte Capaciteit: {0} -liquid.viscosity = [lightgray]Viscositeit: {0} -liquid.temperature = [lightgray]Tempratuur: {0} - unit.dagger.name = Dolk unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Zandkei block.grass.name = Gras block.slag.name = Slag +block.space.name = Space block.salt.name = Zout block.salt-wall.name = Salt Wall block.pebbles.name = Steentjes @@ -981,6 +1007,7 @@ block.darksand-water.name = Donker Zand Water block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ice Snow block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1037,7 +1064,7 @@ 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.illuminator.description = Een kleine aanpasbare lamp, heeft stroom nodig. block.overflow-gate.name = Overflow Gate block.underflow-gate.name = Underflow Gate block.silicon-smelter.name = Siliciumsmelter @@ -1075,6 +1102,7 @@ block.power-source.name = Power Infinite block.unloader.name = Unloader block.vault.name = Kluis block.wave.name = Golf +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = RTG Generator block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Doos block.launch-pad.name = Lanceerplatform block.launch-pad-large.name = Groot Lanceerplatform @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blauw team.crux.name = rood @@ -1171,9 +1201,9 @@ tutorial.waves.mobile = De[lightgray] vijand[] naderd.\n\nVerdedig je core voor 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.[]\nMet deze grondstoffen kan je nieuwe technologieën onderzoeken.\n\n[accent]Druk op de lanceerknop. item.copper.description = Een nuttig materiaal voor gebouwen. Wordt erg vaak in blokken gebruikt. -item.lead.description = Een basismateriaal. Wordt vaak gebruikt in elektronica en vloeistoftransport. -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.lead.description = Een basismateriaal. Wordt veel gebruikt in elektronica en vloeistoftransport. +item.metaglass.description = Een supersterke glas-samenstelling. Veel gebruikt voor vloeistof transport en opslag. +item.graphite.description = Gemineraliseerde koolstof, gebruikt voor ammunitie en elektrische isolatie. item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux. item.coal.description = A common and readily available fuel. item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft. @@ -1302,4 +1332,4 @@ block.cyclone.description = A large rapid fire turret. block.spectre.description = A large turret which shoots two powerful bullets at once. block.meltdown.description = A large turret which shoots powerful long-range beams. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties index 4f2ed1fdcd..babc376e82 100644 --- a/core/assets/bundles/bundle_nl_BE.properties +++ b/core/assets/bundles/bundle_nl_BE.properties @@ -55,6 +55,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 +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Je overleefde tot aanvalsgolf: [accent]{0}[]. stat.enemiesDestroyed = Vijanden vernietigd:[accent] {0} @@ -100,7 +101,6 @@ 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 mods.none = [lightgray]Geen mods gevonden! mods.guide = Handleiding tot Modding @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] om te selecter+kopieren pausebuilding = [accent][[{0}][] om het bouwen te pauseren resumebuilding = [scarlet][[{0}][] om verder te gaan met bouwen wave = [accent]Golf {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Golf in {0} wave.waveInProgress = [lightgray]Golf bezig waiting = [lightgray]Wachten... waiting.players = Aan het wachten op spelers... wave.enemies = [lightgray]{0} Vijanden Over wave.enemy = [lightgray]{0} Vijand Over +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Laad Afbeelding saveimage = Sla Afbeelding Op unknown = Onbekend @@ -328,6 +331,7 @@ editor.generation = Generation: editor.ingame = Edit In-Game editor.publish.workshop = Publish On Workshop editor.newmap = New Map +editor.center = Center workshop = Workshop waves.title = Waves waves.remove = Remove @@ -416,6 +420,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Ore Median @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Block filter.option.floor = Floor filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Best Wave: {0} -launch = < LAUNCH > launch.text = Launch -launch.title = Launch Successful -launch.next = [lightgray]next opportunity at wave {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done 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.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Paused > clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]An error has occured error.crashtitle = An error has occured unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Input stat.output = Output stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Power Capacity stat.powershot = Power/Shot stat.damage = Damage @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Power Use stat.powerdamage = Power/Damage stat.itemcapacity = Item Capacity +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time @@ -613,6 +626,28 @@ stat.reload = Shots/Second stat.ammo = Ammo stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Power: {0}/s bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} bar.poweroutput = Power Output: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Items: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Build Progress bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] damage bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary @@ -642,12 +680,15 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = power units/second unit.liquidsecond = liquid units/second unit.itemssecond = items/second @@ -670,7 +711,7 @@ category.power = Power category.liquids = Liquids category.items = Items category.crafting = Input/Output -category.shooting = Shooting +category.function = Function category.optional = Optional Enhancements setting.landscape.name = Lock Landscape setting.shadows.name = Shadows @@ -679,7 +720,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animated Water setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] @@ -691,7 +731,7 @@ 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.uiscale.name = UI Scaling[lightgray] (requires restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = training setting.difficulty.easy = easy @@ -713,7 +753,6 @@ setting.fullscreen.name = Fullscreen setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart) setting.fps.name = Show FPS setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelate [lightgray](may decrease performance, disables animations) setting.minimap.name = Show Minimap @@ -822,6 +861,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer rules.waves = Waves rules.attack = Attack Mode @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Items content.liquid.name = Liquids content.unit.name = Units content.block.name = Blocks + item.copper.name = Copper item.lead.name = Lead item.coal.name = Coal @@ -879,23 +921,6 @@ liquid.slag.name = Slag liquid.oil.name = Oil liquid.cryofluid.name = Cryofluid -item.explosiveness = [lightgray]Explosiveness: {0}% -item.flammability = [lightgray]Flammability: {0}% -item.radioactivity = [lightgray]Radioactivity: {0}% - -unit.health = [lightgray]Health: {0} -unit.speed = [lightgray]Speed: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Heat Capacity: {0} -liquid.viscosity = [lightgray]Viscosity: {0} -liquid.temperature = [lightgray]Temperature: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.slag.name = Slag +block.space.name = Space block.salt.name = Salt block.salt-wall.name = Salt Wall block.pebbles.name = Pebbles @@ -981,6 +1007,7 @@ block.darksand-water.name = Dark Sand Water block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ice Snow block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Power Infinite block.unloader.name = Unloader block.vault.name = Vault block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = RTG Generator block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blue team.crux.name = red @@ -1302,4 +1332,4 @@ block.cyclone.description = A large rapid fire turret. block.spectre.description = A large turret which shoots two powerful bullets at once. block.meltdown.description = A large turret which shoots powerful long-range beams. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 80502bb870..922c854e69 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -10,18 +10,18 @@ link.dev-builds.description = Niestabilne wersje gry link.trello.description = Oficjalna tablica Trello z planowanym funkcjami link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania link.google-play.description = Strona w sklepie Google Play -link.f-droid.description = F-Droid catalogue listing +link.f-droid.description = Wykaz Katalogu F-Droid link.wiki.description = Oficjana Wiki Mindustry link.suggestions.description = Zaproponuj nowe funkcje linkfail = Nie udało się otworzyć linku!\nURL został skopiowany. -screenshot = Zapisano zdjęcie w {0} +screenshot = Zapisano zrzut ekranu 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 = [accent] Nowy rekord! +highscore = [accent]Nowy rekord! copied = Skopiowano. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]Wersja v6[] jest obecnie w [accent]alphie[].\n[lightgray]Oznacza to, że:[]\n[scarlet]- Kampania nie jest skończona[]\n- Brakuje zawartości\n - Większość [scarlet]SI jednostek[] nie działa poprawnie\n- Wiele jednostek jest niedokończonych\n- Wszystko to, co widzisz, może ulec zmianie lub usunięciu.\n\nZgłaszaj błędy i awarie na [accent]Githubie[]. +indev.notready = Ta część gry nie jest jeszcze ukończona load.sound = Dźwięki load.map = Mapy @@ -55,6 +55,7 @@ schematic.saved = Schemat zapisany. schematic.delete.confirm = Ten schemat zostanie usunięty. schematic.rename = Zmień nazwę schematu schematic.info = {0}x{1}, {2} bloków +schematic.disabled = [scarlet]Schematy są wyłączone[]\nNie możesz używać schematów na tej [accent]mapie[] lub [accent]serwerze. stat.wave = Fale powstrzymane:[accent] {0} stat.enemiesDestroyed = Przeciwnicy zniszczeni:[accent] {0} @@ -100,24 +101,23 @@ done = Gotowe feature.unsupported = Twoje urządzenie nie wspiera tej funkcji. mods.alphainfo = Pamiętaj, że mody są wersji alpha, i[scarlet] mogą być pełne błędów[].\nZgłaszaj wszystkie znalezione problemy na Mindustry GitHub lub Discord. -mods.alpha = [scarlet](Alpha) mods = Mody mods.none = [lightgray]Nie znaleziono modów! mods.guide = Poradnik do modów mods.report = Zgłoś Błąd mods.openfolder = Otwórz folder z modami mods.reload = Przeładuj -mods.reloadexit = The game will now exit, to reload mods. +mods.reloadexit = Gra zostanie teraz zamknięta, aby ponownie załadować mody. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Włączony mod.disabled = [scarlet]Wyłączony mod.disable = Wyłącz -mod.content = Content: +mod.content = Zawartość: 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.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]Niekompatybilne z wersją v6 (no minGameVersion: 105) mod.missingdependencies = [scarlet]Brakujące zależności: {0} -mod.erroredcontent = [scarlet]Content Errors +mod.erroredcontent = [scarlet]Błędy Zawartości 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. @@ -127,7 +127,7 @@ mod.reloadrequired = [scarlet]Wymagany restart mod.import = Importuj Mod mod.import.file = Importuj Plik mod.import.github = Importuj mod z GitHuba -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]Mody JAR są niebezpieczne.[]\nUpewnij się, że importujesz ten mod z dobrze znanego źródła! 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 = [lightgray]Autor:[] {0} @@ -139,8 +139,8 @@ mod.scripts.disable = Twoje urządzenie nie wspiera modów ze skryptami. Musisz about.button = O Grze name = Nazwa: noname = Najpierw wybierz[accent] nazwę gracza[]. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Mapa Planety +launchcore = Wystrzel Rdzeń filename = Nazwa Pliku: unlocked = Odblokowano nową zawartość! completed = [accent]Ukończony @@ -148,12 +148,12 @@ techtree = Drzewo Technologiczne research.list = [lightgray]Badania: research = Badaj researched = [lightgray]{0} zbadane. -research.progress = {0}% complete +research.progress = {0}% ukończone players = {0} graczy players.single = {0} gracz -players.search = search +players.search = wyszukaj players.notfound = [gray]nie znaleziono graczy -server.closing = [accent] Zamykanie serwera... +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. server.kicked.serverClose = Serwer został zamknięty. @@ -171,11 +171,11 @@ server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobi 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 niego dołączyć lub wyszukać [accent]serwery w lokalnej sieci[], do których możesz dołączyć.\nGra wieloosobowa na LAN i WAN jest wspierana.\n\n[lightgray]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać hosta o jego IP, które można znaleźć po wpisaniu "my ip" w przeglądarce na urządzeniu hosta. +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 na ich liście serwerów.\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 niego dołączyć lub wyszukać [accent]serwery w lokalnej sieci[] lub wyszukać [accent]publiczne[] serwery, do których możesz dołączyć.\nGra wieloosobowa na LAN i WAN jest wspierana.\n\n[lightgray]Jeśli chcesz dołączyć przez IP, musisz zapytać hosta o jego IP, które można znaleźć po wpisaniu "my ip" w przeglądarce na urządzeniu hosta. hostserver = Stwórz Serwer invitefriends = Zaproś Znajomych -hostserver.mobile = Hostuj\nGrę +hostserver.mobile = Hostuj Grę host = Hostuj hosting = [accent]Otwieranie serwera... hosts.refresh = Odśwież @@ -208,11 +208,11 @@ server.outdated.client = [crimson]Przestarzały klient![] server.version = [gray]Wersja: {0} server.custombuild = [accent]Zmodowany klient confirmban = Jesteś pewny, że chcesz zbanować "{0}[white]"? -confirmkick = Jesteś pewny, że chcesz wyrzucić {0}[white]"? -confirmvotekick = Jesteś pewny, że chcesz głosować za wyrzuceniem {0}[white]"? +confirmkick = Jesteś pewny, że chcesz wyrzucić "{0}[white]"? +confirmvotekick = Jesteś pewny, że chcesz głosować za wyrzuceniem "{0}[white]"? confirmunban = Jesteś pewny, że chcesz odbanować tego gracza? -confirmadmin = Jesteś pewny, że chcesz dać rangę admina {0}[white]"? -confirmunadmin = Jesteś pewny, że chcesz zabrać rangę admina {0}[white]"? +confirmadmin = Jesteś pewny, że chcesz dać rangę admina "{0}[white]"? +confirmunadmin = Jesteś pewny, że chcesz zabrać rangę admina "{0}[white]"? joingame.title = Dołącz do gry joingame.ip = IP: disconnect = Rozłączono. @@ -237,7 +237,7 @@ save.delete = Usuń save.export = Eksportuj save.import.invalid = [accent]Zapis gry jest niepoprawny! save.import.fail = [crimson]Nie udało się zaimportować zapisu: [accent]{0} -save.export.fail = [crimson]Nie można wyeksportować zapisu: [accent]{0} +save.export.fail = [crimson]Nie udało się wyeksportować zapisu: [accent]{0} save.import = Importuj Zapis save.newslot = Zapisz nazwę: save.rename = Zmień nazwę @@ -255,14 +255,14 @@ save.wave = Fala {0} save.mode = Tryb Gry: {0} save.date = Ostatnio Zapisane: {0} save.playtime = Czas gry: {0} -warning = Uwaga +warning = Uwaga. confirm = Potwierdź delete = Usuń view.workshop = Pokaż w Warsztacie workshop.listing = Edytuj pozycję w Warsztacie ok = OK open = Otwórz -customize = Dostosuj +customize = Dostosuj zasady cancel = Anuluj openlink = Otwórz Link copylink = Kopiuj Link @@ -272,30 +272,33 @@ data.import = Importuj Dane data.openfolder = Otwórz folder danych 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. +data.import.confirm = Zaimportowanie zewnętrznych danych nadpisze[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zaimportowane, gra automatycznie się wyłączy. quit.confirm = Czy na pewno chcesz wyjść? quit.confirm.tutorial = Jesteś pewien?\nSamouczek może zostać powtórzony w[accent] Ustawienia->Gra->Ponów samouczek.[] loading = [accent]Ładowanie... reloading = [accent]Przeładowywanie Modów... saving = [accent]Zapisywanie... -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}][] by odrodzić się w rdzeniu cancelbuilding = [accent][[{0}][] by wyczyścić plan selectschematic = [accent][[{0}][] by wybrać+skopiować pausebuilding = [accent][[{0}][] by wstrzymać budowę resumebuilding = [scarlet][[{0}][] by kontynuować budowę wave = [accent]Fala {0} -wave.waiting = Fala za {0} +wave.cap = [accent]Fala {0}/{1} +wave.waiting = [lightgray]Fala za {0} wave.waveInProgress = [lightgray]Fala w trakcie waiting = [lightgray]Oczekiwanie... waiting.players = Oczekiwanie na graczy... wave.enemies = Pozostało [lightgray]{0} wrogów wave.enemy = Pozostał [lightgray]{0} wróg +wave.guardianwarn = Strażnik nadejdzie za [accent]{0}[] fale. +wave.guardianwarn.one = Strażnik nadejdzie za [accent]{0}[] fale. loadimage = Załaduj Obraz saveimage = Zapisz Obraz unknown = Nieznane custom = Własne builtin = Wbudowane -map.delete.confirm = Jesteś pewny, że chcesz usunąć tę mapę? Nie będzie można jej przywrócić. +map.delete.confirm = Jesteś pewny, że chcesz usunąć tę mapę? Nie będzie można jej przywrócić! map.random = [accent]Losowa Mapa map.nospawn = Ta mapa nie zawiera żadnego rdzenia! Dodaj [accent]pomarańczowy[] rdzeń do tej mapy w edytorze. map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[scarlet] inny niż pomarańczowy[] rdzeń do mapy w edytorze. @@ -309,7 +312,7 @@ workshop.info = Informacja o pozycji changelog = Historia aktualizacji (opcjonalna): eula = Umowa Użytkownika Końcowego (EULA) Steam missing = Ta pozycja została przeniesiona bądź usunięta.\n[lightgray]Pozycja na Warsztacie została automatycznie odłączona. -publishing = [accent]Trwa publikowanie... +publishing = [accent]Publikowanie... publish.confirm = Czy jesteś pewien, że chcesz to opublikować?\n\n[lightgray]Najpierw upewnij się, że zgadzasz się z umową EULA Warsztatu, w przeciwnym razie twoje pozycje nie będą widoczne! publish.error = Błąd podczas publikowania pozycji: {0} steam.error = Nie udało się zainicjować serwisów Steam.\nBłąd: {0} @@ -328,6 +331,7 @@ editor.generation = Generacja: editor.ingame = Edytuj w Grze editor.publish.workshop = Opublikuj w Warsztacie editor.newmap = Nowa Mapa +editor.center = Center workshop = Warsztat waves.title = Fale waves.remove = Usuń @@ -335,9 +339,9 @@ waves.never = waves.every = co waves.waves = fal(e) waves.perspawn = co pojawienie -waves.shields = shields/wave +waves.shields = tarcze/fala waves.to = do -waves.guardian = Guardian +waves.guardian = Strażnik waves.preview = Podgląd waves.edit = Edytuj... waves.copy = Kopiuj Do Schowka @@ -346,9 +350,9 @@ waves.invalid = Nieprawidłowe fale w schowku. waves.copied = Fale zostały skopiowane. waves.none = Brak zdefiniowanych wrogów.\nPamiętaj, że puste układy fal zostaną automatycznie zastąpione układem domyślnym. -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = liczba +wavemode.totals = sumy +wavemode.health = życie editor.default = [lightgray] details = Detale... @@ -386,10 +390,10 @@ editor.export = Eksportuj... editor.exportfile = Eksportuj Plik editor.exportfile.description = Eksportuj plik mapy editor.exportimage = Eksportuj Obraz Terenu -editor.exportimage.description = Eksportuj plik obrazu terenu +editor.exportimage.description = Eksportuj plik obrazu zawierający tylko podstawowy teren editor.loadimage = Załaduj Teren editor.saveimage = Zapisz Teren -editor.unsaved = [scarlet]Masz niezapisane zmiany![]\nCzy na pewno chcesz wyjść? +editor.unsaved = Czy na pewno chcesz wyjść?[]\n[scarlet]Wszelkie niezapisane zmiany zostaną utracone. editor.resizemap = Zmień Rozmiar Mapy editor.mapname = Nazwa Mapy: editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy. @@ -416,6 +420,7 @@ filters.empty = [lightgray]Brak filtrów! Dodaj jeden za pomocą przycisku poni filter.distort = Zniekształcanie filter.noise = Szum filter.enemyspawn = Wybierz spawn przeciwnika +filter.spawnpath = Droga Do Spawnu filter.corespawn = Wybierz rdzeń filter.median = Mediana filter.oremedian = Mediana Rud @@ -440,6 +445,7 @@ filter.option.amount = Ilość filter.option.block = Blok filter.option.floor = Podłoga filter.option.flooronto = Podłoga Docelowa +filter.option.target = Target filter.option.wall = Ściana filter.option.ore = Ruda filter.option.floor2 = Druga Podłoga @@ -469,24 +475,18 @@ locked = Zablokowane complete = [lightgray]Ukończone: requirement.wave = Osiągnij falę {0} w {1} requirement.core = Zniszcz Rdzeń wroga w {0} -requirement.research = Research {0} -requirement.capture = Capture {0} -resume = Kontynuuj Strefę:\n[lightgray]{0} +requirement.research = Zbadaj {0} +requirement.capture = Zdobądź {0} bestwave = [lightgray]Najwyższa fala: {0} -launch = < WYSTRZEL > -launch.text = Launch -launch.title = Wystrzelenie udane -launch.next = [lightgray]Następna okazja przy fali {0} -launch.unable2 = [scarlet]WYSTRZELENIE niedostępne.[] -launch.confirm = Spowoduje to wystrzelenie wszystkich surowców w rdzeniu.\nNie będziesz mógł wrócić do tej bazy. -launch.skip.confirm = Jeśli teraz przejdziesz do kolejnej fali, nie będziesz miał możliwości wystrzelenia do czasu pokonania dalszych fal. +launch.text = Wystrzel +research.multiplayer = Tylko host może odkrywać przedmoty. uncover = Odkryj configure = Skonfiguruj Ładunek loadout = Loadout -resources = Resources +resources = Zasoby bannedblocks = Zabronione bloki addall = Dodaj wszystkie -launch.destination = Destination: {0} +launch.destination = Cell: {0} configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}. zone.unlocked = [lightgray]Strefa {0} odblokowana. zone.requirement.complete = Fala {0} osiągnięta:\n{1} Wymagania strefy zostały spełnione. @@ -500,7 +500,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 sprawdź 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! @@ -508,19 +508,25 @@ error.io = Błąd sieciowy I/O. error.any = Nieznany błąd sieci. error.bloom = Nie udało się załadować bloom.\nTwoje urządzenie może nie wspierać tej funkcji. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = Deszcz +weather.snow.name = Śnieg +weather.sandstorm.name = Burza piaskowa +weather.sporestorm.name = Burza zarodników +weather.fog.name = Mgła -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.unexplored = [lightgray]Niezbadane +sectors.resources = Zasoby: +sectors.production = Produkcja: +sectors.stored = Zmagazynowane: +sectors.resume = Kontynuuj +sectors.launch = Wystrzel +sectors.select = Wybierz +sectors.nonelaunch = [lightgray]żaden (słońce) +sectors.rename = Zmień Nazwę Sektora +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Punkt Zerowy sector.craters.name = Kratery @@ -535,8 +541,8 @@ sector.saltFlats.name = Solne Równiny sector.fungalPass.name = Grzybowa Przełęcz sector.groundZero.description = Optymalna lokalizacja, aby rozpocząć jeszcze raz. Niskie zagrożenie. Niewiele zasobów.\nZbierz jak najwięcej miedzi i ołowiu, tyle ile jest możliwe.\nPrzejdź do następnej strefy jak najszybciej. -sector.frozenForest.description = Nawet tutaj, bliżej gór, zarodniki rozprzestrzeniły się. Niskie temperatury nie mogą ich zatrzymać na zawsze.\n\nRozpocznij przedsięwzięcie od władzy. Buduj generatory spalinowe. Naucz się korzystać z naprawiaczy. -sector.saltFlats.description = Na obrzeżach pustyni spoczywają Solne Równiny. Można tu znaleźć niewiele surowców.\n\nWrogowie zbudowali tu bazę składującą surowce. Zniszcz ich rdżeń. Zniszcz wszystko co stanie ci na drodze. +sector.frozenForest.description = Nawet tutaj, bliżej gór, zarodniki rozprzestrzeniły się. Niskie temperatury nie mogą ich zatrzymać na zawsze.\n\nRozpocznij przedsięwzięcie od prądu. Buduj generatory spalinowe. Naucz się korzystać z naprawiaczy. +sector.saltFlats.description = Na obrzeżach pustyni spoczywają Solne Równiny. Można tu znaleźć niewiele surowców.\n\nWrogowie zbudowali tu bazę składującą surowce. Zniszcz ich rdzeń. Zniszcz wszystko co stanie ci na drodze. sector.craters.description = W tym kraterze zebrała się woda. Pozostałość dawnych wojen. Odzyskaj ten teren. Wykop piasek. Wytop metaszkło. Pompuj wodę do działek obronnych i wierteł by je schłodzić sector.ruinousShores.description = Za pustkowiami ciągnie się linia brzegowa. Kiedyś znajdowała się tu przybrzeżna linia obronna. Niewiele z niej zostało. Ostały się tylko podstawowe struktury obronne, z reszty został tylko złom.\nKontynuuj eksploracje. Odkryj pozostawioną tu technologię. sector.stainedMountains.description = W głębi lądu leżą góry, jeszcze nieskażone przez zarodniki.\nWydobądź obfity tytan w tym obszarze. Dowiedz się, jak z niego korzystać.\n\nObecność wroga jest tutaj większa. Nie daj im czasu na wysłanie swoich najsilniejszych jednostek. @@ -558,8 +564,12 @@ settings.graphics = Grafika settings.cleardata = Wyczyść Dane Gry... settings.clear.confirm = Czy jesteś pewien że chcesz usunąć te dane?\nPo tym nie ma powrotu! settings.clearall.confirm = [scarlet]UWAGA![]\nTo wykasuje wszystkie dane, włącznie z zapisanymi grami i mapami, ustawienami, i znanymi technologiami.\nKiedy naciśniesz 'ok', gra usunie wszystkie swoje dane i automatycznie wyłączy się. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = Jesteś pewny że chcesz usunąć wszystkie zapisy? +settings.clearsaves = Usuń Zapisy +settings.clearresearch = Usuń Postęp Drzewa Tech. +settings.clearresearch.confirm = Jesteś pewny że chcesz usunąć cały postęp drzewa technologicznego? +settings.clearcampaignsaves = Usuń Zapisy Kampanii +settings.clearcampaignsaves.confirm = Jesteś pewny że chcesz usunąć wszystkie zapisy kampanii? paused = [accent]< Wstrzymano > clear = Wyczyść banned = [scarlet]Zbanowano @@ -570,12 +580,14 @@ info.title = Informacje error.title = [crimson]Wystąpił błąd error.crashtitle = Wystąpił błąd unit.nobuild = [scarlet]Jednostka nie może budować +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Wejście stat.output = Wyjście stat.booster = Wzmacniacz stat.tiles = Wymagane Pola stat.affinities = Uwydajnienie -block.unknown = [lightgray]??? stat.powercapacity = Pojemność mocy stat.powershot = moc/strzał stat.damage = Obrażenia @@ -585,15 +597,16 @@ stat.itemsmoved = Prędkość poruszania się stat.launchtime = Czas pomiędzy wystrzeleniami stat.shootrange = Zasięg stat.size = Rozmiar -stat.displaysize = Display Size +stat.displaysize = Wielkość Wyświetlania stat.liquidcapacity = Pojemność cieczy stat.powerrange = Zakres mocy stat.linkrange = Link Range -stat.instructions = Instructions +stat.instructions = Instrukcje stat.powerconnections = Maksymalna ilość połączeń stat.poweruse = Zużycie prądu stat.powerdamage = Moc/Zniszczenia stat.itemcapacity = Pojemność przedmiotów +stat.memorycapacity = Pojemość Pamięci stat.basepowergeneration = Podstawowa generacja mocy stat.productiontime = Czas produkcji stat.repairtime = Czas pełnej naprawy bloku @@ -605,14 +618,36 @@ stat.boosteffect = Efekt wzmocnienia stat.maxunits = Maksymalna ilość jednostek stat.health = Zdrowie stat.buildtime = Czas budowy -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = Maksymalnie Kolejny stat.buildcost = Koszt budowy stat.inaccuracy = Niecelność stat.shots = Strzały -stat.reload = Strzałów/sekundę +stat.reload = Strzałów/Sekundę stat.ammo = Amunicja -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time +stat.shieldhealth = Życie Tarczy +stat.cooldowntime = Czas Odnowienia +stat.explosiveness = Wybuchowość +stat.basedeflectchance = Bazowa Szansa Na Odbicie +stat.lightningchance = Szansa Na Błyskawicę +stat.lightningdamage = Obrażenia Błyskawic +stat.flammability = Palność +stat.radioactivity = Radioaktywność +stat.heatcapacity = Pojemność Cieplna +stat.viscosity = Lepkość +stat.temperature = Temperatura +stat.speed = Prędość +stat.buildspeed = Prędkość Budowy +stat.minespeed = Prędkość Wydobycia +stat.minetier = Stopień Wydobycia +stat.payloadcapacity = Ładowność +stat.commandlimit = Limit Jednostek Zarządanych +stat.abilities = Umiejętności + +ability.forcefield = Pole Mocy +ability.repairfield = Pole Naprawy +ability.statusfield = Pole Statusu +ability.unitspawn = {0} Fabryka +ability.shieldregenfield = Strefa Tarczy Regenerującej bar.drilltierreq = Wymagane Lepsze Wiertło bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Moc: {0} bar.powerstored = Zmagazynowano: {0}/{1} bar.poweramount = Moc: {0} bar.poweroutput = Wyjście mocy: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Przedmiotów: {0} bar.capacity = Pojemność: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Postęp Budowy bar.input = Wejście bar.output = Wyjście +units.processorcontrol = [lightgray]Procesor Kontrolowany + bullet.damage = [stat]{0}[lightgray] Obrażenia bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[lightgray] kratki bullet.incendiary = [stat]zapalający @@ -642,12 +680,15 @@ bullet.homing = [stat]naprowadzający bullet.shock = [stat]piorunowy bullet.frag = [stat]fragmentacyjny bullet.knockback = [stat]{0}[lightgray] odrzut +bullet.pierce = [stat]{0}[lightgray]x przebicia +bullet.infinitepierce = [stat]przebijający bullet.freezing = [stat]zamrażający bullet.tarred = [stat]smolny bullet.multiplier = [stat]{0}[lightgray]x mnożnik amunicji bullet.reload = [stat]{0}[lightgray]x szybkość ataku unit.blocks = bloki +unit.blockssquared = bloki² unit.powersecond = jednostek prądu na sekundę unit.liquidsecond = jednostek płynu na sekundę unit.itemssecond = przedmiotów na sekundę @@ -660,7 +701,7 @@ unit.persecond = /sekundę unit.perminute = /min unit.timesspeed = x prędkość unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = życie tarczy unit.items = przedmioty unit.thousands = tys. unit.millions = mln @@ -670,7 +711,7 @@ category.power = Prąd category.liquids = Płyny category.items = Przedmioty category.crafting = Przetwórstwo -category.shooting = Strzelanie +category.function = Funkcja category.optional = Dodatkowe ulepszenia setting.landscape.name = Zablokuj tryb panoramiczny setting.shadows.name = Cienie @@ -679,7 +720,6 @@ setting.linear.name = Filtrowanie Liniowe setting.hints.name = Podpowiedzi setting.flow.name = Wyświetl szybkość przepływu zasobów[scarlet] (eksperymentalne) setting.buildautopause.name = Automatycznie zatrzymaj budowanie -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animowana woda setting.animatedshields.name = Animowana tarcza setting.antialias.name = Antyaliasing[lightgray] (wymaga restartu)[] @@ -707,20 +747,19 @@ setting.conveyorpathfinding.name = Ustalanie ścieżki przenośników setting.sensitivity.name = Czułość kontrolera setting.saveinterval.name = Interwał automatycznego zapisywania setting.seconds = {0} sekund -setting.blockselecttimeout.name = Block Select Timeout +setting.blockselecttimeout.name = Czas Wyboru Klocka 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.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Pokazuj skróty klawiszowe bloków +setting.smoothcamera.name = Gładka Kamera setting.vsync.name = Synchronizacja pionowa setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje) setting.minimap.name = Pokaż Minimapę -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Poazuj Przedmoty W Rdzeniu (WIP) setting.position.name = Pokazuj położenie gracza setting.musicvol.name = Głośność muzyki -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = Pokazuj atmosferę planety setting.ambientvol.name = Głośność otoczenia setting.mutemusic.name = Wycisz muzykę setting.sfxvol.name = Głośność dźwięków @@ -743,11 +782,11 @@ keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w category.general.name = Ogólne category.view.name = Wyświetl category.multiplayer.name = Wielu graczy -category.blocks.name = Block Select +category.blocks.name = Wybierz Blok command.attack = Atakuj command.rally = Zbierz command.retreat = Wycofaj -command.idle = Idle +command.idle = Nieaktywny placement.blockselectkeys = \n[lightgray]Klawisz: [{0}, keybind.respawn.name = Respawn keybind.control.name = Control Unit @@ -756,12 +795,12 @@ 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 = Zmień widoczność linii energetycznych -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_block_status.name = Przełączanie Między Statusami Bloków keybind.move_x.name = Poruszanie w poziomie keybind.move_y.name = Poruszanie w pionie keybind.mouse_move.name = Podążaj Za Myszą -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.pan.name = Widok Panoramiczny +keybind.boost.name = Przyspiesz keybind.schematic_select.name = Wybierz region keybind.schematic_menu.name = Menu schematów keybind.schematic_flip_x.name = Obróć schemat horyzontalnie @@ -788,8 +827,8 @@ keybind.diagonal_placement.name = Budowa po skosie keybind.pick.name = Wybierz Blok keybind.break_block.name = Zniszcz Blok keybind.deselect.name = Odznacz -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo +keybind.pickupCargo.name = Podnieś Ładunek +keybind.dropCargo.name = Opuść Ładunek keybind.command.name = Command keybind.shoot.name = Strzelanie keybind.zoom.name = Przybliżanie @@ -818,28 +857,29 @@ mode.pvp.name = PvP mode.pvp.description = Walcz przeciwko innym graczom.\n[gray]Wymaga co najmniej dwóch rdzeni o róźnych kolorach na mapie, aby móc grać w tym trybie mode.attack.name = Atak mode.attack.description = Brak fal. Celem jest zniszczenie bazy przeciwnika.\n[gray]Wymaga czerwonego rdzenia na mapie, aby móc grać w tym trybie. -mode.custom = Własny tryb +mode.custom = Własny Tryb -rules.infiniteresources = Nieskończone zasoby -rules.reactorexplosions = Eksplozje reaktorów -rules.wavetimer = Zegar fal +rules.infiniteresources = Nieskończone Zasoby +rules.reactorexplosions = Eksplozje Reaktorów +rules.schematic = Schematy Są Dozwolone +rules.wavetimer = Zegar Fal rules.waves = Fale -rules.attack = Tryb ataku -rules.buildai = AI Building -rules.enemyCheat = Nieskończone zasoby komputera-przeciwnika (czerwonego zespołu) -rules.blockhealthmultiplier = Mnożnik życia bloków -rules.blockdamagemultiplier = Block Damage Multiplier -rules.unitbuildspeedmultiplier = Mnożnik prędkości tworzenia jednostek -rules.unithealthmultiplier = Mnożnik życia jednostek -rules.unitdamagemultiplier = Mnożnik obrażeń jednostek -rules.enemycorebuildradius = Zasięg blokady budowy przy rdzeniu wroga:[lightgray] (kratki) -rules.wavespacing = Odstępy między falami:[lightgray] (sek) -rules.buildcostmultiplier = Mnożnik kosztów budowania -rules.buildspeedmultiplier = Mnożnik prędkości budowania +rules.attack = Tryb Ataku +rules.buildai = SI Może Budować +rules.enemyCheat = Nieskończone Zasoby SI (czerwonego zespołu) +rules.blockhealthmultiplier = Mnożnik Życia Bloków +rules.blockdamagemultiplier = Mnożnik Uszkodzeń Bloków +rules.unitbuildspeedmultiplier = Mnożnik Prędkości Tworzenia Jednostek +rules.unithealthmultiplier = Mnożnik Życia Jednostek +rules.unitdamagemultiplier = Mnożnik Obrażeń jednostek +rules.enemycorebuildradius = Zasięg Blokady Budowy Przy Rdzeniu Wroga:[lightgray] (kratki) +rules.wavespacing = Odstępy Między Falami:[lightgray] (sek) +rules.buildcostmultiplier = Mnożnik Kosztów Budowania +rules.buildspeedmultiplier = Mnożnik Prędkości Budowania rules.deconstructrefundmultiplier = Mnożnik Zwrotu Dekonstrukcji -rules.waitForWaveToEnd = Fale czekają na przeciwników -rules.dropzoneradius = Zasięg strefy zrzutu:[lightgray] (kratki) -rules.unitammo = Units Require Ammo +rules.waitForWaveToEnd = Fale Czekają Na Przeciwników +rules.dropzoneradius = Zasięg Strefy Zrzutu:[lightgray] (kratki) +rules.unitammo = Jednostki Potrzebują Amunicji rules.title.waves = Fale rules.title.resourcesbuilding = Zasoby i Budowanie rules.title.enemy = Przeciwnicy @@ -847,17 +887,19 @@ rules.title.unit = Jednostki rules.title.experimental = Eksperymentalne rules.title.environment = Environment rules.lighting = Oświetlenie -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.enemyLights = Wrogowie Emitują Światło +rules.fire = Ogień +rules.explosions = Uszkodzenia Wybuchu Klocka/Jednostki rules.ambientlight = Otaczające Światło -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = Pogoda +rules.weather.frequency = Częstotliwość: +rules.weather.duration = Czas trwania: content.item.name = Przedmioty content.liquid.name = Płyny content.unit.name = Jednostki content.block.name = Klocki + item.copper.name = Miedź item.lead.name = Ołów item.coal.name = Węgiel @@ -879,23 +921,6 @@ liquid.slag.name = Żużel liquid.oil.name = Ropa liquid.cryofluid.name = Lodociecz -item.explosiveness = [lightgray]Wybuchowość: {0} -item.flammability = [lightgray]Palność: {0} -item.radioactivity = [lightgray]Promieniotwórczość: {0} - -unit.health = [lightgray]Zdrowie: {0} -unit.speed = [lightgray]Prędkość: {0} -unit.weapon = [lightgray]Broń: {0} -unit.itemcapacity = [lightgray]Pojemność przedmiotów: {0} -unit.minespeed = [lightgray]Prędkość kopania: {0}% -unit.minepower = [lightgray]Moc kopania: {0} -unit.ability = [lightgray]Umiejętność: {0} -unit.buildspeed = [lightgray]Prędkość budowania: {0}% - -liquid.heatcapacity = [lightgray]Wytrzymałość na przegrzewanie: {0} -liquid.viscosity = [lightgray]Lepkość: {0} -liquid.temperature = [lightgray]Temperatura: {0} - unit.dagger.name = Nóż unit.mace.name = Mace unit.fortress.name = Forteca @@ -930,12 +955,13 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Resupply Point +block.resupply-point.name = Punkt Uzupełnienia block.parallax.name = Parallax block.cliff.name = Klif block.sand-boulder.name = Piaskowy Głaz block.grass.name = Trawa block.slag.name = Żużel +block.space.name = Space block.salt.name = Sól block.salt-wall.name = Salt Wall block.pebbles.name = Kamyki @@ -981,6 +1007,7 @@ block.darksand-water.name = Woda z Ciemnym Piaskiem block.char.name = Popiół block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Lodowy Śnieg block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -990,7 +1017,7 @@ block.pine.name = Sosna block.dirt.name = Dirt block.dirt-wall.name = Dirt Wall block.mud.name = Mud -block.white-tree-dead.name = Białe Drzewo Martwe +block.white-tree-dead.name = Białe Martwe Drzewo block.white-tree.name = Białe Drzewo block.spore-cluster.name = Skupisko Zarodników block.metal-floor.name = Metalowa Podłoga @@ -1075,6 +1102,7 @@ block.power-source.name = Źródło prądu block.unloader.name = Ekstraktor block.vault.name = Magazyn block.wave.name = Strumień +block.tsunami.name = Tsunami block.swarmer.name = Działo Rojowe block.salvo.name = Działo Salwowe block.ripple.name = Działo Falowe @@ -1114,31 +1142,33 @@ block.arc.name = Piorun block.rtg-generator.name = Generator RTG block.spectre.name = Huragan block.meltdown.name = Rozpad +block.foreshadow.name = Foreshadow block.container.name = Kontener block.launch-pad.name = Wyrzutnia block.launch-pad-large.name = Duża Wyrzutnia block.segment.name = Segment -block.command-center.name = Command Center +block.command-center.name = Centrum Dowodzenia block.ground-factory.name = Fabryka Naziemna block.air-factory.name = Fabryka Powietrzna block.naval-factory.name = Fabryka Morska block.additive-reconstructor.name = Rekonstruktor Addytywny block.multiplicative-reconstructor.name = Rekonstruktor Multiplikatywny block.exponential-reconstructor.name = Rekonstruktor Wykładniczy -block.tetrative-reconstructor.name = Tetrative Reconstructor +block.tetrative-reconstructor.name = Rekonstruktor Tetratywny block.payload-conveyor.name = Przenośnik Masowy block.payload-router.name = Rozdzielacz Ładunku -block.disassembler.name = Dezasembler -block.silicon-crucible.name = Silicon Crucible +block.disassembler.name = Rozkładacz +block.silicon-crucible.name = Tygiel Krzemu block.overdrive-dome.name = Kopuła Pola Overdrive -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = Przełącznik +block.micro-processor.name = Micro Procesor +block.logic-processor.name = Logiczny Procesor +block.hyper-processor.name = Hyper Procesor +block.logic-display.name = Wyświetlacz Logiczny +block.large-logic-display.name = Duży Wyświetlacz Logiczny +block.memory-cell.name = Komórka Pamięci +block.memory-bank.name = Bank Pamięci team.blue.name = niebieski team.crux.name = czerwony @@ -1166,7 +1196,7 @@ tutorial.breaking = Bloki często wymagają rozbiórki.\n[accent]Przytrzymaj pra tutorial.breaking.mobile = Bloki często wymagają rozbiórki.\n[accent]Wybierz tryb dekonstrukcji[], a następnie dotknij blok by zacząć go niszczyć.\nZdekonstruuj obszarowo poprzez przytrzymanie palcem przez moment[] i przesunięcie go w jakimś kierunku.\nNaciśnij przycisk ptaszka by potwierdzić rozbiórkę.\n\n[accent]Zniszcz wszystkie bloki złomu na lewo od twojego rdzenia używając selekcji obszarowej. tutorial.withdraw = Czasami, konieczne jest wyjmowanie przedmiotów prosto z bloków.\nBy tego dokonać, [accent]kliknij blok[] z przedmiotami w nim, potem [accent]kliknij przedmiot[] w inwentarzu.\nMożesz zebrać wiele przedmiotów naraz poprzez [accent]kliknięcie i przytrzymanie[].\n\n[accent]Zabierz trochę miedzi z rdzenia.[] tutorial.deposit = Włóż przedmioty do bloków poprzez przeciągnięcie z twojego statku do danego bloku.\n\n[accent]Włóż miedź z powrotem do rdzenia .[] -tutorial.waves = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdżeń przez 2 fale.[accent] Kliknij[] by strzelać.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi. +tutorial.waves = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdzeń przez 2 fale.[accent] Kliknij[] by strzelać.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi. tutorial.waves.mobile = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdzeń przez 2 fale. Twój statek będzie automatycznie atakował wrogów.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi. tutorial.launch = Kiedy dotrzesz do określonej fali, masz możliwość[accent] wystrzelenia rdzenia[], pozostawiając struktury obronne za sobą i[accent] otrzymując wszystkie surowce znajdujące się w rdzeniu.[]\nSurowce te mogą potem zostać użyte do odkrywania nowych technologii.\n\n[accent]Naciśnij przycisk Wystrzału. @@ -1189,7 +1219,7 @@ item.pyratite.description = Niesamowicie palny związek używany w zbrojeniu. Ni liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów. liquid.slag.description = Wiele różnych metali stopionych i zmieszanych razem. Może zostać rozdzielony na jego metale składowe, albo wystrzelony w wrogie jednostki i użyty jako broń. liquid.oil.description = Używany w do produkcji złożonych materiałów. Może zostać przetworzony na węgiel, lub wystrzelony w wrogów przez wieżyczke. -liquid.cryofluid.description = Obojętna, niekorozyjna ciecz utworzona z wody i tytanu +liquid.cryofluid.description = Obojętna, niekorozyjna ciecz utworzona z wody i tytanu. block.message.description = Przechowuje wiadomość. Wykorzystywane do komunikacji pomiędzy sojusznikami. block.graphite-press.description = Kompresuje kawałki węgla w czyste blaszki grafitu. @@ -1248,7 +1278,7 @@ block.underflow-gate.description = Odwrotność bramy przepełnieniowej, który block.mass-driver.description = Najlepszy blok do transportu przedmiotów. Zbiera wiele przedmiotów naraz a potem wystrzeliwuje je do kolejnej katapulty masy na bardzo duże odległości. block.mechanical-pump.description = Tania pompa o niskiej wydajności. Nie wymaga prądu. block.rotary-pump.description = Zaawansowana pompa. Pompuje więcej cieczy, ale wymaga zasilania. -block.thermal-pump.description = Najlepsza pompa. +block.thermal-pump.description = Najlepsza pompa. Pompuje ogromne ilości cieczy, ale wymaga zasilaina. block.conduit.description = Podstawowy blok do transportowania cieczy. Używany w połączeniu z pompami i innymi rurami. block.pulse-conduit.description = Zaawansowany blok do transportowania cieczy. Transportuje je szybciej i magazynuje więcej niż standardowe rury. block.plated-conduit.description = Przesyła ciecze z taką samą szybkością co rura tytanowa, ale jest bardziej odporna. Wejściami bocznymi mogą być tylko inne rury.\nWycieka z niej mniej cieczy. @@ -1302,4 +1332,63 @@ 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.repair-point.description = Bez przerw naprawia najbliższą uszkodzoną jednostkę w jego zasięgu. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Uszkadza i niszczy wrogie pociskiski poza laserami. +block.parallax.description = Wykorzystuje laser, który przyciąga do siebie wrogów, zadając im obrażenia. +block.tsunami.description = Strzela wielkim strumieniem cieczy we wrogów. Automatycznie gasi ogień, gdy jest podłączony do wody. +block.silicon-crucible.description = Oczyszcza krzem z węgla i piasku wykorzystując piratian. Bardziej efektywny w gorących miejscach. +block.disassembler.description = Oddziela egzotyczne materiały z mieszaniny jaką jest żużel z małą efektywnością. Może wyprodukować tor. +block.overdrive-dome.description = Zwiększa szybkość budynków w zasięgu. Wymaga włókna fazowego oraz krzemu by działać. +block.payload-conveyor.description = Przenosi duże ładunki, takie jak jednostki z fabryk. +block.payload-router.description = Dzieli wejście z przewoźnika masowego i dzieli je w 3 różne strony. +block.command-center.description = Kontroluje zachowanie jednostek paroma różnymi komendami. +block.ground-factory.description = Produkuje jednostki naziemne. Jednostki mogą być do razu wykorzystane lub przeniesone do rekonstrukota by je ulepszyć. +block.air-factory.description = Produkuje jednostki powietrzne. Jednostki mogą być do razu wykorzystane lub przeniesone do rekonstrukota by je ulepszyć. +block.naval-factory.description = Produkuje jednostki morskie. Jednostki mogą być do razu wykorzystane lub przeniesone do rekonstrukota by je ulepszyć. +block.additive-reconstructor.description = Ulepsza wsadzone jednostki do stopnia drugiego. +block.multiplicative-reconstructor.description = Ulepsza wsadzone jednostki do stopnia trzeciego. +block.exponential-reconstructor.description = Ulepsza wsadzone jednostki do stopnia czwartego. +block.tetrative-reconstructor.description = Ulepsza wsadzone jednostki do stopnia piątego i ostatniego. +block.switch.description = Jest Przełączalny. Stan jego może być odczytywany lub kontrolowany przez procesory. +block.micro-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. +block.logic-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. Szybszy niż mikro procesor. +block.hyper-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. Szybszy niż logiczny procesor. +block.memory-cell.description = Przechowuje informacje dla procesora. +block.memory-bank.description = Przechowuje informacje dla procesora. Duża pojemność. +block.logic-display.description = Wyświetla obraz z procesora. +block.large-logic-display.description = Wyświetla obraz z procesora. +block.interplanetary-accelerator.description = Masywna elektromagnetyczna wierza. Przyspiesza rdzeń do prędkości ucieczki by wylądować na innych planetach. + + +unit.dagger.description = Strzela standardowymi pociskami w najbliższych wrogów. +unit.mace.description = Strzela strumieniami ognia w najbliższych wrogów. +unit.fortress.description = Strzela artylerią dalekiego zasięgu we wrogie jednostki na ziemi. +unit.scepter.description = Strzela salwą naładowanych pocisków we wszystkich przeciwników. +unit.reign.description = Strzela salwą masywnych przebijających pocisków we wszystkich przeciwników. +unit.nova.description = Wystrzeliwuje pioruny, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać. +unit.pulsar.description = Wystrzeliwuje elektryczne pioruny, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać. +unit.quasar.description = Wystrzeliwuje wiązki laserowe, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać. Posiada tarcze. +unit.vela.description = Wystrzeliwuje masywny ciągły laser, który uszkadza przeciwników i leczy sojusznicze struktury. Może latać. +unit.corvus.description = Wystrzeliwuje masywny laserowy błysk, który uszkadza przeciwników i leczy sojusznicze struktury. Może przejść po większości terenu. +unit.crawler.description = Wbiega w przeciwników i dokonuje samozniszczenia powodując dużą eksplozje. +unit.atrax.description = Wystrzeliwuje wyniszczające kule żużlu w cele na ziemi. Może przejść po większości terenu. +unit.spiroct.description = Strzela wyczerpującymi życie laserami we wrogów, naprawiając siebie. Może przejść po większości terenu. +unit.arkyid.description = Strzela dużymi wyczerpującymi życie laserami we wrogów, naprawiając siebie. Może przejść po większości terenu. +unit.toxopid.description = Strzela wielkimi elektrycznymi skupionymi kulami i przebijającymi laserami we wrogów. Może przejść po większości terenu. +unit.flare.description = Strzela standardowymi pociskami we jednostki naziemne. +unit.horizon.description = Upuszcza stos bomb na jednostki naziemne. +unit.zenith.description = Strzela salwą rakiet w każdego pobliskiego wroga. +unit.antumbra.description = Strzela zaporą rakiet w każdego pobliskiego wroga. +unit.eclipse.description = Strzela dwoma przebijającymi laserami i pociskami przeciwlotniczymi we wrogów. +unit.mono.description = Automatycznie wykopuje miedź i ołów i odkłada je do rdzenia. +unit.poly.description = Automatycznie naprawia zniszczone struktury i asystuje w budowie. +unit.mega.description = Automatycznie naprawia zniszczone struktury. Może podnosić małe jednostki i bloki. +unit.quad.description = Upuszcza wielkie bomby na cele na ziemi, które uszkadzają przeciwników i leczą sojusznicze struktury. Może podnosić jednostki naziemne średniej wielkości. +unit.oct.description = Broni wszystkie jednostki tarczą regeneracyjną. Może podnosić większość jednostek naziemnych. +unit.risso.description = Strzela sporą ilością pocisków i rakiet w najbliższych przeciwników. +unit.minke.description = Strzela granatami i standardowymi pociskami w najbliższych przeciwników. +unit.bryde.description = Strzela granatami i rakietami na dużą odległość we wrogów. +unit.sei.description = Strzela dużą ilością rakiet oraz przebijających zbroje pocisków we wrogów +unit.omura.description = Strzela przebijającym superszybkim pociskiem we wrogów ze sporej odległości. Produkuje Błyski (jednostki) +unit.alpha.description = Chroni Rdzeń: Odłamek przed wrogami. Buduje struktury. +unit.beta.description = Chroni Rdzeń: Podstawa przed wrogami. Buduje struktury. +unit.gamma.description = Chroni Rdzeń: Jądro przed wrogami. Buduje struktury. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 7f2659d839..0e597d2159 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -20,8 +20,8 @@ gameover = O núcleo foi destruído. gameover.pvp = O time[accent] {0}[] ganhou! highscore = [accent]Novo recorde! copied = Copiado -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]v6[] está atualmente em [accent]alpha[].\n[lightgray]Isso significa:[]\n[scarlet]- A campanha está inacabada[]\n- Está faltando conteúdo\n - A maioria das [scarlet]IAs das unidades[] não funciona adequadamente\n- A maioria das unidades estão inacabadas\n- Tudo o que você ver está sujeito a mudanças ou remoção.\n\nReporte bugs ou crashes em [accent]Github[]. +indev.notready = Essa parte do jogo ainda não esta pronta load.sound = Sons load.map = Mapas @@ -55,6 +55,7 @@ schematic.saved = Esquema salvo. schematic.delete.confirm = Esse esquema será apagado. Tem certeza? schematic.rename = Renomear esquema schematic.info = {0}x{1}, {2} blocos +schematic.disabled = [scarlet]Esquemas desativados[]\nVocê precisa de permissão para usar esquemas nesse [accent]mapa[] ou [accent]servidor. stat.wave = Hordas derrotadas:[accent] {0} stat.enemiesDestroyed = Inimigos destruídos:[accent] {0} @@ -65,7 +66,7 @@ stat.delivered = Recursos lançados: stat.playtime = Tempo jogado:[accent] {0} stat.rank = Classificação final: [accent]{0} -globalitems = [accent]Global Items +globalitems = [accent]Itens Globais map.delete = Certeza que quer deletar o mapa "[accent]{0}[]"? level.highscore = Melhor\npontuação: [accent] {0} level.select = Seleção de fase @@ -100,22 +101,21 @@ done = Feito feature.unsupported = Seu dispositivo não suporta essa função. mods.alphainfo = Tenha em mente que os mods estão em alpha, e[scarlet] talvez eles contenham erros e instabilidades[].\nReporte quaisquer problemas no Discord ou GitHub do Mindustry. -mods.alpha = [accent](Alpha) mods = Mods mods.none = [lightgray]Nenhum mod encontrado! mods.guide = Guia de mods mods.report = Reportar um Bug mods.openfolder = Abrir pasta de mods -mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reload = Recarregar +mods.reloadexit = O jogo vai fechar, para poder recarregar os mods. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Ativado mod.disabled = [scarlet]Desativado mod.disable = Desati-\nvar -mod.content = Content: +mod.content = Conteúdo: mod.delete.error = Incapaz de deletar o mod. O arquivo talvez esteja em uso. mod.requiresversion = [scarlet]Requer no mínimo versão [accent]{0} [scarlet]do jogo. -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.outdated = [scarlet]Não compatível com a V6 (sem minGameVersion: 105) mod.missingdependencies = [scarlet]Dependências ausentes: {0} mod.erroredcontent = [scarlet]Erros no conteúdo mod.errors = Ocorreram erros ao carregar o conteúdo. @@ -125,22 +125,22 @@ 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.file = Import File +mod.import.file = Importar Arquivo mod.import.github = Importar mod do GitHub -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]mods JAR são altamente inseguros.[]\nTenha certeza que esse mod tenha uma fonte confiável! 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 = [lightgray]Autor:[] {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.disable = Your device does not support mods with scripts. You must disable these mods to play the game. +mod.scripts.disable = Seu dispositivo não suporta mods com scripts. Você precisa desabilitar esses mods para conseguir jogar. about.button = Sobre name = Nome: noname = Escolha[accent] um nome[] primeiro. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Mapa do Planeta +launchcore = Lançar núcleo filename = Nome do arquivo: unlocked = Novo bloco desbloqueado! completed = [accent]Completado @@ -148,7 +148,7 @@ techtree = Árvore Tecnológica research.list = [lightgray]Pesquise: research = Pesquisar researched = [lightgray]{0} Pesquisado. -research.progress = {0}% complete +research.progress = {0}% completo players = {0} Jogadores ativos players.single = {0} Jogador ativo players.search = Procurar @@ -278,18 +278,21 @@ quit.confirm.tutorial = Você tem certeza que você sabe o que você esta fazend loading = [accent]Carregando... reloading = [accent]Recarregando mods... saving = [accent]Salvando... -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}][] para nascer no núcleo cancelbuilding = [accent][[{0}][] para cancelar a construção selectschematic = [accent][[{0}][] para selecionar + copiar pausebuilding = [accent][[{0}][] para parar a construção resumebuilding = [scarlet][[{0}][] para continuar a construção wave = [accent]Horda {0} +wave.cap = [accent]Horda {0}/{1} wave.waiting = Proxima horda em {0} wave.waveInProgress = [lightgray]Horda em progresso waiting = Aguardando... waiting.players = Esperando por jogadores... wave.enemies = [lightgray]{0} inimigos restantes wave.enemy = [lightgray]{0} inimigo restante +wave.guardianwarn = Guardião se aproximando em [accent]{0}[] Hordas. +wave.guardianwarn.one = Guardião se aproximando em [accent]{0}[] Horda. loadimage = Carregar\nimagem saveimage = Salvar\nimagem unknown = Desconhecido @@ -328,6 +331,7 @@ editor.generation = Geração: editor.ingame = Editar em jogo editor.publish.workshop = Publicar na oficina editor.newmap = Novo mapa +editor.center = Center workshop = Oficina waves.title = Hordas waves.remove = Remover @@ -335,7 +339,7 @@ waves.never = waves.every = a cada waves.waves = Horda(s) waves.perspawn = por spawn -waves.shields = shields/wave +waves.shields = Escudo/Horda waves.to = para waves.guardian = Guardian waves.preview = Pré-visualizar @@ -346,9 +350,9 @@ waves.invalid = Hordas inválidas na área de transferência. waves.copied = Hordas copiadas. waves.none = Sem hordas definidas.\nNote que layouts vazios de hordas serão automaticamente substituídos pelo layout padrão. -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = quantidade +wavemode.totals = total +wavemode.health = vida editor.default = [lightgray] details = Detalhes... @@ -416,6 +420,7 @@ filters.empty = [lightgray]Sem filtro! Adicione um usando o botão abaixo. filter.distort = Distorcedor filter.noise = Geração aleatória filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Medio filter.oremedian = Minério mediano @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Bloco filter.option.floor = Chão filter.option.flooronto = Chão alvo +filter.option.target = Target filter.option.wall = Parede filter.option.ore = Minério filter.option.floor2 = Chão secundário @@ -471,15 +477,9 @@ requirement.wave = Alcançar a Horda {0} em {1} requirement.core = Destruir o núcleo inimigo em {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resumir Zona:\n[lightgray]{0} bestwave = [lightgray]Melhor: {0} -launch = Lançar launch.text = Launch -launch.title = Lançamento feito com sucesso -launch.next = [lightgray]Próxima oportunidade na Horda {0} -launch.unable2 = [scarlet]Impossível lançar.[] -launch.confirm = Isto vai lançar todos os seus recursos no seu núcleo.\nVoce não será capaz de retornar para esta base. -launch.skip.confirm = Se você pular a horda agora, você não será capaz de lançar até hordas futuras. +research.multiplayer = Only the host can research items. uncover = Descobrir configure = Configurar carregamento loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não 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. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = Pausado clear = Limpo banned = [scarlet]BANIDO @@ -570,12 +580,14 @@ info.title = [accent]Informação error.title = [crimson]Ocorreu um Erro. error.crashtitle = Ocorreu um Erro unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Entrada stat.output = Saída stat.booster = Apoio stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Capacidade de Energia stat.powershot = Energia/tiro stat.damage = Dano @@ -594,6 +606,7 @@ stat.powerconnections = Conexões Máximas stat.poweruse = Uso de energia stat.powerdamage = Dano/Poder stat.itemcapacity = Capacidade de Itens +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Geração de poder base stat.productiontime = Tempo de produção stat.repairtime = Tempo de reparo total do bloco @@ -609,10 +622,32 @@ stat.maxconsecutive = Max Consecutive stat.buildcost = Custo de construção stat.inaccuracy = Imprecisão stat.shots = Tiros -stat.reload = Tiros por segundo +stat.reload = Tempo de recarga stat.ammo = Munição stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time +stat.cooldowntime = Tempo de espera +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Broca melhor necessária. bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Energia: {0} bar.powerstored = Armazenada: {0}/{1} bar.poweramount = Energia: {0} bar.poweroutput = Saída de energia: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Itens: {0} bar.capacity = Capacidade: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Progresso da construção bar.input = Entrada bar.output = Sainda +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] de dano bullet.splashdamage = [stat]{0}[lightgray] de dano em área ~[stat] {1}[lightgray] bloco(s) bullet.incendiary = [stat]Incendiário @@ -642,12 +680,15 @@ bullet.homing = [stat]Guiado bullet.shock = [stat]Choque bullet.frag = [stat]Fragmentação bullet.knockback = [stat]{0}[lightgray]Impulso +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = unidades de energia por segundo unit.liquidsecond = líquido segundo unit.itemssecond = itens por segundo @@ -670,7 +711,7 @@ category.power = Energia category.liquids = Líquidos category.items = Itens category.crafting = Entrada/Saída -category.shooting = Atiradores +category.function = Function category.optional = Melhoras opcionais setting.landscape.name = Travar panorama setting.shadows.name = Sombras @@ -679,7 +720,6 @@ setting.linear.name = Filtragem linear setting.hints.name = Dicas setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Pausar construções automaticamente -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Água animada setting.animatedshields.name = Escudos animados setting.antialias.name = Filtro suavizante[lightgray] (reinicialização requerida)[] @@ -702,7 +742,7 @@ setting.difficulty.name = Dificuldade setting.screenshake.name = Balanço da Tela setting.effects.name = Efeitos setting.destroyedblocks.name = Mostrar Blocos Destruídos -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Mostrar a Propriedade dos Blocos setting.conveyorpathfinding.name = Esteiras Encontram Caminho setting.sensitivity.name = Sensibilidade do Controle setting.saveinterval.name = Intervalo de Auto Salvamento @@ -712,15 +752,14 @@ setting.milliseconds = {0} milissegundos setting.fullscreen.name = Tela Cheia setting.borderlesswindow.name = Janela sem borda[lightgray] (Pode precisar reiniciar) setting.fps.name = Mostrar FPS e Ping -setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Mostrar teclas de seleção de blocos +setting.smoothcamera.name = Suavizar movimentos da câmera setting.vsync.name = VSync setting.pixelate.name = Pixelizado [lightgray](Pode diminuir a performace) setting.minimap.name = Mostrar minimapa setting.coreitems.name = Display Core Items (WIP) setting.position.name = Mostrar a posição do Jogador setting.musicvol.name = Volume da Música -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = Mostrar a atmosfera do planeta setting.ambientvol.name = Volume do Ambiente setting.mutemusic.name = Desligar Música setting.sfxvol.name = Volume de Efeitos @@ -743,25 +782,25 @@ keybinds.mobile = [scarlet]A maior parte das teclas aqui não são funcionais em category.general.name = Geral category.view.name = Ver category.multiplayer.name = Multijogador -category.blocks.name = Block Select +category.blocks.name = Selecionar bloco command.attack = Atacar command.rally = Reunir command.retreat = Recuar -command.idle = Idle +command.idle = Ausente placement.blockselectkeys = \n[lightgray]Tecla: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.respawn.name = Reaparecer +keybind.control.name = Controlar unidade keybind.clear_building.name = Limpar construção keybind.press = Pressione uma tecla... keybind.press.axis = Pressione um eixo ou tecla... keybind.screenshot.name = Captura do mapa keybind.toggle_power_lines.name = Mudar lasers -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_block_status.name = Mostrar a propriedade dos blocos keybind.move_x.name = Mover no eixo x keybind.move_y.name = Mover no eixo Y -keybind.mouse_move.name = Seguir Mouse -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.mouse_move.name = Seguir o Cursor +keybind.pan.name = Câmera livre +keybind.boost.name = Impulsionar keybind.schematic_select.name = Selecionar região keybind.schematic_menu.name = Menu de Esquemas keybind.schematic_flip_x.name = Girar o Esquema no eixo X @@ -784,15 +823,15 @@ keybind.block_select_09.name = Categoria/Selecionar bloco 9 keybind.block_select_10.name = Categoria/Selecionar bloco 10 keybind.fullscreen.name = Alterar tela cheia keybind.select.name = selecionar -keybind.diagonal_placement.name = Colocação diagonal +keybind.diagonal_placement.name = Posicionamento Diagonal keybind.pick.name = Pegar bloco keybind.break_block.name = Quebrar bloco keybind.deselect.name = Desselecionar -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = Pegar Carga +keybind.dropCargo.name = Soltar Carga +keybind.command.name = Comandar keybind.shoot.name = Atirar -keybind.zoom.name = Zoom +keybind.zoom.name = Ampliar keybind.menu.name = Menu keybind.pause.name = Pausar keybind.pause_building.name = Parar/Resumir a construção @@ -807,7 +846,7 @@ keybind.chat_history_prev.name = Historico do chat anterior keybind.chat_history_next.name = Historico do próximo chat keybind.chat_scroll.name = Rolar chat keybind.drop_unit.name = Soltar unidade -keybind.zoom_minimap.name = Zoom do minimapa +keybind.zoom_minimap.name = Ampliar 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. @@ -822,10 +861,11 @@ mode.custom = Regras personalizadas rules.infiniteresources = Recursos infinitos rules.reactorexplosions = Reatores explodem +rules.schematic = Schematics Allowed rules.wavetimer = Tempo de horda rules.waves = Hordas rules.attack = Modo de ataque -rules.buildai = AI Building +rules.buildai = Habilitar construção da IA rules.enemyCheat = Recursos de IA Infinitos rules.blockhealthmultiplier = Multiplicador de vida do bloco rules.blockdamagemultiplier = Block Damage Multiplier @@ -836,28 +876,30 @@ rules.enemycorebuildradius = Raio de "Não-criação" de core inimigo:[lightgray rules.wavespacing = Espaço de tempo entre hordas:[lightgray] (seg) rules.buildcostmultiplier = Multiplicador de custo de construção rules.buildspeedmultiplier = Multiplicador de velocidade de construção -rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier +rules.deconstructrefundmultiplier = Multiplicador de reembolso de desconstrução rules.waitForWaveToEnd = Hordas esperam inimigos rules.dropzoneradius = Raio da zona de spawn:[lightgray] (blocos) -rules.unitammo = Units Require Ammo +rules.unitammo = Unidades requerem munição rules.title.waves = Hordas rules.title.resourcesbuilding = Recursos e Construções rules.title.enemy = Inimigos rules.title.unit = Unidades rules.title.experimental = Experimental -rules.title.environment = Environment +rules.title.environment = Ambiente rules.lighting = Iluminação -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.enemyLights = Enemy Lights +rules.fire = Fogo +rules.explosions = Dano de explosão de unidades/blocos rules.ambientlight = Luz ambiente -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = Clima +rules.weather.frequency = Frequência: +rules.weather.duration = Duração: content.item.name = Itens content.liquid.name = Líquidos content.unit.name = Unidades content.block.name = Blocos + item.copper.name = Cobre item.lead.name = Chumbo item.coal.name = Carvão @@ -879,23 +921,6 @@ liquid.slag.name = Escória liquid.oil.name = Petróleo liquid.cryofluid.name = Fluído Criogênico -item.explosiveness = [lightgray]Explosibilidade: {0} -item.flammability = [lightgray]Inflamabilidade: {0} -item.radioactivity = [lightgray]Radioatividade: {0} - -unit.health = [lightgray]Vida: {0} -unit.speed = [lightgray]Velocidade: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Capacidade de aquecimento: {0} -liquid.viscosity = [lightgray]Viscosidade: {0} -liquid.temperature = [lightgray]Temperatura: {0} - unit.dagger.name = Adaga unit.mace.name = Mace unit.fortress.name = Fortaleza @@ -930,28 +955,29 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Resupply Point -block.parallax.name = Parallax -block.cliff.name = Cliff +block.resupply-point.name = Ponto de Reabastecimento +block.parallax.name = Paralaxe +block.cliff.name = Relevo block.sand-boulder.name = Pedregulho de areia block.grass.name = Grama -block.slag.name = Slag +block.slag.name = Escória +block.space.name = Space block.salt.name = Sal -block.salt-wall.name = Salt Wall +block.salt-wall.name = Parede de Sal block.pebbles.name = Pedrinhas block.tendrils.name = Gavinhas block.sand-wall.name = Sand Wall block.spore-pine.name = Pinheiro de esporo block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.boulder.name = Rochedo +block.snow-boulder.name = Monte de neve block.snow-pine.name = Pinheiro com neve -block.shale.name = Xisto -block.shale-boulder.name = Pedra de Xisto +block.shale.name = Folhelho +block.shale-boulder.name = Pedra de Folhelho block.moss.name = Musgo block.shrubs.name = Arbusto block.spore-moss.name = Musgo de Esporos -block.shale-wall.name = Shale Wall +block.shale-wall.name = Parede de Folhelho block.scrap-wall.name = Muro de sucata block.scrap-wall-large.name = Muro grande de sucata block.scrap-wall-huge.name = Muro enorme de sucata @@ -961,7 +987,7 @@ block.kiln.name = Forno block.graphite-press.name = Prensa de grafite block.multi-press.name = Multi-Prensa block.constructing = {0}\n[lightgray](Construindo) -block.spawn.name = Area inimiga +block.spawn.name = Área inimiga block.core-shard.name = Fragmento do núcleo block.core-foundation.name = Fundação do núcleo block.core-nucleus.name = Centro do núcleo @@ -978,18 +1004,19 @@ block.snow.name = Neve block.craters.name = Crateras block.sand-water.name = Água sobre areia block.darksand-water.name = Água sobre areia escura -block.char.name = Char -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall -block.ice-snow.name = Gelo de neve -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.char.name = Cinzas +block.dacite.name = Dacito +block.dacite-wall.name = Parede de Dacito +block.dacite-boulder.name = Dacite Boulder +block.ice-snow.name = Gelo com Neve +block.stone-wall.name = Parede de Pedra +block.ice-wall.name = Parede de Gelo +block.snow-wall.name = Parede de Neve +block.dune-wall.name = Duna block.pine.name = Pinheiro -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = Terra +block.dirt-wall.name = Parede de Terra +block.mud.name = Lama block.white-tree-dead.name = Árvore branca morta block.white-tree.name = Árvore branca block.spore-cluster.name = Aglomerado de esporos @@ -1005,7 +1032,7 @@ block.dark-panel-4.name = Painel escuro 4 block.dark-panel-5.name = Painel escuro 5 block.dark-panel-6.name = Painel escuro 6 block.dark-metal.name = Metal escuro -block.basalt.name = Basalt +block.basalt.name = Basalto block.hotrock.name = Rocha quente block.magmarock.name = Rocha de magma block.copper-wall.name = Muro de Cobre @@ -1019,7 +1046,7 @@ block.phase-wall-large.name = Muralha de Fase block.thorium-wall.name = Muro de Tório block.thorium-wall-large.name = Muralha de Tório block.door.name = Porta -block.door-large.name = Portão +block.door-large.name = Porta grande block.duo.name = Torreta dupla block.scorch.name = Lança-chamas block.scatter.name = Dispersão @@ -1027,7 +1054,7 @@ block.hail.name = Artilharia block.lancer.name = Lanceiro block.conveyor.name = Esteira block.titanium-conveyor.name = Esteira de titânio -block.plastanium-conveyor.name = Plastanium Conveyor +block.plastanium-conveyor.name = Esteira de plastânio block.armored-conveyor.name = Esteira blindada block.armored-conveyor.description = Move os itens com a mesma velocidade das esteiras de titânio, mas tem mais armadura. Não aceita itens dos lados de nada além de outras esteiras. block.junction.name = Junção @@ -1038,8 +1065,8 @@ block.inverted-sorter.name = Ordenador invertido block.message.name = Mensagem block.illuminator.name = Iluminador block.illuminator.description = Uma pequena, compacta e configurável fonte de luz. Precisa de energia para funcionar. -block.overflow-gate.name = Portão Sobrecarregado -block.underflow-gate.name = Portão Sobrecarregado invertida +block.overflow-gate.name = Portão de Fluxo +block.underflow-gate.name = Portão de Fluxo invertido block.silicon-smelter.name = Fundidora de silicio block.phase-weaver.name = Palheta de fase block.pulverizer.name = Pulverizador @@ -1075,6 +1102,7 @@ block.power-source.name = Fonte de energia block.unloader.name = Descarregador block.vault.name = Cofre block.wave.name = Onda +block.tsunami.name = Tsunami block.swarmer.name = Enxame block.salvo.name = Salvo block.ripple.name = Morteiro @@ -1114,31 +1142,33 @@ block.arc.name = Tesla block.rtg-generator.name = Gerador GTR block.spectre.name = Espectro block.meltdown.name = Fusão +block.foreshadow.name = Foreshadow block.container.name = Contâiner block.launch-pad.name = Plataforma de lançamento block.launch-pad-large.name = Plataforma de lançamento grande -block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.segment.name = Segmento +block.command-center.name = Centro de Comando +block.ground-factory.name = Fábrica de unidades terrestres +block.air-factory.name = Fábrica de unidades aéreas +block.naval-factory.name = Fábrica de unidades navais +block.additive-reconstructor.name = Reconstrutor Aditivo +block.multiplicative-reconstructor.name = Reconstrutor Multiplicativo +block.exponential-reconstructor.name = Reconstrutor Exponencial +block.tetrative-reconstructor.name = Reconstrutor Tetrativo +block.payload-conveyor.name = Esteira de Carga +block.payload-router.name = Roteador de Carga +block.disassembler.name = Desmontador +block.silicon-crucible.name = Fornalha De Silício +block.overdrive-dome.name = Domo de Sobrecarga -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = Alavanca +block.micro-processor.name = Micro Processador +block.logic-processor.name = Processador Lógico +block.hyper-processor.name = Hiper Processador +block.logic-display.name = Monitor Lógico +block.large-logic-display.name = Monitor lógico grande +block.memory-cell.name = Célula de Memória +block.memory-bank.name = Memory Bank team.blue.name = Azul team.crux.name = Vermelho @@ -1223,7 +1253,7 @@ block.plastanium-wall-large.description = Um tipo especial de muro que absorve a block.thorium-wall.description = Um bloco defensivo forte.\nBoa proteção contra inimigos. block.thorium-wall-large.description = Um bloco defensivo forte.\nBoa proteção contra inimigos.\nOcupa múltiplos blocos. block.phase-wall.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto. -block.phase-wall-large.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto.\nSOcupa múltiplos blocos. +block.phase-wall-large.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto.\nOcupa múltiplos blocos. block.surge-wall.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-s aleatoriamente. block.surge-wall-large.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-s aleatoriamente.\nOcupa multiplos blocos. block.door.description = Uma pequeda porta. Pode ser aberta e fechada ao tocar. @@ -1239,8 +1269,8 @@ block.plastanium-conveyor.description = Moves items in batches.\nAccepts items a 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. block.phase-conveyor.description = Bloco de transporte de item avançado. Usa energia para teleportar itens a uma esteira de fase sobre uma severa distancia. -block.sorter.description = [interact]Aperte no bloco para configurar[] -block.inverted-sorter.description = Processa os itens como um sorteador normal, mas os itens escolhidos sairão pelas laterais ao invés. +block.sorter.description = Filtra itens passando o selecionado para frente e os outros para os lados. +block.inverted-sorter.description = Filtra os itens como um ordenador normal, porém, os itens escolhidos sairão pelas laterais. block.router.description = Aceita itens de uma direção e os divide em 3 direções igualmente. Util para espalhar materiais da fonte para multiplos alvos. block.distributor.description = Um roteador avançado que espalhas os itens em 7 outras direções igualmente. block.overflow-gate.description = Uma combinação de roteador e divisor Que apenas manda para a esquerda e Direita se a frente estiver bloqueada. @@ -1300,6 +1330,6 @@ block.fuse.description = Uma torre grande com curto alcance. Dispara três feixe block.ripple.description = Uma torre de artilharia extremamente poderosa. Dispara varios tiros aglomerados a uma grande distância nos seus inimigos. block.cyclone.description = Uma grande torre que dispara balas explosivas que se fragmentam em unidades aéreas e terrestres próximas. block.spectre.description = Um grande canhão massivo. Dispara grandes tiros perfuradores de blindagem em inimigos aéreos e terrestres. -block.meltdown.description = Um grande canhão laser massivo. Carrega e dispara um poderoso e persistente feixe nos seus inimigos. Requer uma refrigeração para ser operada. +block.meltdown.description = Um grande canhão laser massivo. Carrega e dispara um poderoso e persistente feixe nos seus inimigos. Requer um resfriamento para ser operada. block.repair-point.description = Continuamente repara a unidade danificada mais proxima. -block.segment.description = Destrói projéteis inimigos. Projéteis de laser não são afetados. \ No newline at end of file +block.segment.description = Destrói projéteis inimigos que se aproximam. Feixes não serão detectados. diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index c4b5070b3a..6e08cc7d3f 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -55,6 +55,7 @@ schematic.saved = Esquema gravado. schematic.delete.confirm = Este esquema irá ser completamente apagado. schematic.rename = Renomear Esquema schematic.info = {0}x{1}, {2} blocos +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Hordas derrotadas:[accent] {0} stat.enemiesDestroyed = Inimigos Destruídos:[accent] {0} @@ -100,7 +101,6 @@ done = Feito 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 = [lightgray]Mods não encontrados! mods.guide = Guia de mods @@ -284,12 +284,15 @@ 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.cap = [accent]Wave {0}/{1} wave.waiting = Horda em {0} wave.waveInProgress = [lightgray]Horda Em Progresso waiting = Aguardando... waiting.players = Esperando por jogadores... wave.enemies = [lightgray]{0} inimigos restantes wave.enemy = [lightgray]{0} inimigo restante +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Carregar\nimagem saveimage = Gravarr\nimagem unknown = Desconhecido @@ -328,6 +331,7 @@ editor.generation = Geração: editor.ingame = Editar em jogo editor.publish.workshop = Publicar na oficina editor.newmap = Novo mapa +editor.center = Center workshop = Oficina waves.title = Hordas waves.remove = Remover @@ -416,6 +420,7 @@ filters.empty = [lightgray]Sem filtro! Adicione um usando o botão abaixo. filter.distort = Distorcedor filter.noise = Geração aleatória filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Mediano filter.oremedian = Minério Mediano @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Bloco filter.option.floor = Chão filter.option.flooronto = Chão alvo +filter.option.target = Target filter.option.wall = Parede filter.option.ore = Minério filter.option.floor2 = Chão secundário @@ -471,15 +477,9 @@ requirement.wave = Ronda alcançada {0} / {1} requirement.core = Destruir Núcleo Inimigo em {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resumir Zona:\n[lightgray]{0} bestwave = [lightgray]Melhor: {0} -launch = Lançar launch.text = Launch -launch.title = Lançamento feito com sucesso -launch.next = [lightgray]Próxima oportunidade na Horda {0} -launch.unable2 = [scarlet]Impossível lançar.[] -launch.confirm = Isto vai lançar todos os seus recursos no seu núcleo.\nVoce não será capaz de retornar para esta base. -launch.skip.confirm = Se você pular a horda agora, você não será capaz de lançar até hordas mais avançadas. +research.multiplayer = Only the host can research items. uncover = Descobrir configure = Configurar carregamento loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não 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. settings.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = Pausado clear = Limpar banned = [scarlet]Banido @@ -570,12 +580,14 @@ info.title = [accent]Informação error.title = [crimson]Ocorreu um Erro. error.crashtitle = Ocorreu um Erro unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Entrada stat.output = Saida stat.booster = Booster stat.tiles = Telhas Requeridas stat.affinities = Afinidades -block.unknown = [lightgray]??? stat.powercapacity = Capacidade de Energia stat.powershot = Energia/tiro stat.damage = Dano @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Uso de energia stat.powerdamage = Dano/Poder stat.itemcapacity = Capacidade de Itens +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Geração de poder base stat.productiontime = Tempo de produção stat.repairtime = Tempo de reparo total do bloco @@ -613,6 +626,28 @@ stat.reload = Tiros por segundo stat.ammo = Munição stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Broca melhor necessária. bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Energia: {0} bar.powerstored = Armazenada: {0}/{1} bar.poweramount = Energia: {0} bar.poweroutput = Saída de energia: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Itens: {0} bar.capacity = Capacidade: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Progresso da construção bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] dano bullet.splashdamage = [stat]{0}[lightgray] Dano em área ~[stat] {1}[lightgray] Blocos bullet.incendiary = [stat]Incendiário @@ -642,12 +680,15 @@ bullet.homing = [stat]Guiado bullet.shock = [stat]Choque bullet.frag = [stat]Fragmentação bullet.knockback = [stat]{0}[lightgray]Impulso +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = Unidades de energia/segundo unit.liquidsecond = Unidades de líquido/segundo unit.itemssecond = itens/segundo @@ -670,7 +711,7 @@ category.power = Poder category.liquids = Líquidos category.items = Itens category.crafting = Construindo -category.shooting = Atirando +category.function = Function category.optional = Melhoras opcionais setting.landscape.name = Travar panorama setting.shadows.name = Sombras @@ -679,7 +720,6 @@ setting.linear.name = Filtragem linear setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Água animada setting.animatedshields.name = Escudos animados setting.antialias.name = Filtro suavizante[lightgray] (reinicialização requerida)[] @@ -713,7 +753,6 @@ setting.fullscreen.name = Ecrã inteiro setting.borderlesswindow.name = Janela sem borda[lightgray] (Pode precisar reiniciar) setting.fps.name = Mostrar FPS setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelizado [lightgray](Pode diminuir a performace) setting.minimap.name = Mostrar minimapa @@ -822,6 +861,7 @@ mode.custom = Regras personalizadas rules.infiniteresources = Recursos infinitos rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Tempo de horda rules.waves = Hordas rules.attack = Modo de ataque @@ -847,6 +887,7 @@ rules.title.unit = Unidades rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Itens content.liquid.name = Liquidos content.unit.name = Unidades content.block.name = Blocos + item.copper.name = Cobre item.lead.name = Chumbo item.coal.name = Carvão @@ -879,23 +921,6 @@ liquid.slag.name = Escória liquid.oil.name = Petróleo liquid.cryofluid.name = Crio Fluido -item.explosiveness = [lightgray]Explosibilidade: {0} -item.flammability = [lightgray]Inflamabilidade: {0} -item.radioactivity = [lightgray]Radioatividade: {0} - -unit.health = [lightgray]Vida: {0} -unit.speed = [lightgray]Velocidade: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Capacidade de aquecimento: {0} -liquid.viscosity = [lightgray]Viscosidade: {0} -liquid.temperature = [lightgray]Temperatura: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortaleza @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Pedregulho de areia block.grass.name = Grama block.slag.name = Slag +block.space.name = Space block.salt.name = Sal block.salt-wall.name = Salt Wall block.pebbles.name = Pedrinhas @@ -981,6 +1007,7 @@ block.darksand-water.name = Água sobre areia escura block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Gelo de neve block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Criador de energia block.unloader.name = Descarregador block.vault.name = Cofre block.wave.name = Onda +block.tsunami.name = Tsunami block.swarmer.name = Enxame block.salvo.name = Salvo block.ripple.name = Ondulação @@ -1114,6 +1142,7 @@ block.arc.name = Arco Elétrico block.rtg-generator.name = Gerador GTR block.spectre.name = Espectro block.meltdown.name = Fusão +block.foreshadow.name = Foreshadow block.container.name = Contâiner block.launch-pad.name = Plataforma de lançamento block.launch-pad-large.name = Plataforma de lançamento grande @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = Azul team.crux.name = Vermelho @@ -1302,4 +1332,4 @@ block.cyclone.description = Uma grande torre de tiro rapido. block.spectre.description = Uma grande torre que da dois tiros poderosos ao mesmo tempo. block.meltdown.description = Uma grande torre que atira dois raios poderosos ao mesmo tempo. block.repair-point.description = Continuamente repara a unidade danificada mais proxima. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index aa9fd2f18d..a88caa9aa8 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -17,11 +17,14 @@ linkfail = Linkul nu a putut fi deschis!\nAdresa URL a fost copiată. screenshot = Captură de ecran salvată la {0} screenshot.invalid = Harta e prea mare. Se poate să nu existe suficientă memorie pentru captura de ecran. gameover = Jocul s-a încheiat +gameover.disconnect = Deconectare gameover.pvp = Echipa [accent] {0}[] este câștigătoare! +gameover.waiting = [accent]Se așteaptă următoarea hartă... highscore = [accent]Scor maxim nou! copied = Copiat. -indev.popup = [accent]v6[] este momentan în [accent]alpha[].\n[lightgray]Asta înseamnă că:[]\n[scarlet]- Campania este complet neterminată[]\n- Majoritatea [scarlet]AI-ului unităților[] nu funcționează bine\n- Multe unități sunt neterminate\n- Modul campanie nu este terminat \n- Tot ce vedeți se poate schimba sau poate fi eliminat.\n\nPentru a raporta buguri și crashuri intrați pe [accent]Github[]. +indev.popup = [accent]v6[] este momentan în [accent]beta[].\n[lightgray]Asta înseamnă că:[]\n[scarlet]- Campania este neterminată[]\n- Tot ce vedeți se poate schimba sau poate fi eliminat.\n\nPentru a raporta buguri și crashuri intrați pe [accent]Github[]. indev.notready = Această secțiune a jocului nu este gata încă. +indev.campaign = [accent]Ai ajuns la finalul campaniei![]\n\nAi mers cât de departe se poate momentan. Călătoria interplanetară va fi adăugată într-un update viitor. load.sound = Sunete load.map = Hărți @@ -57,6 +60,7 @@ schematic.rename = Redenumește Schema schematic.info = {0}x{1}, {2} blocuri schematic.disabled = [scarlet]Schemele sunt dezactivate[]\nNu ai voie să folosești scheme pe această [accent]hartă[] sau [accent]server. +stats = Informații stat.wave = Valuri Învinse:[accent] {0} stat.enemiesDestroyed = Inamici Distruși:[accent] {0} stat.built = Structuri Construite:[accent] {0} @@ -100,8 +104,7 @@ committingchanges = Se Încarcă Schimbările done = Gata feature.unsupported = Dispozitivul tău nu suportă această funcție. -mods.alphainfo = Modurile sunt încă în alpha și[scarlet] pot avea multe buguri[].\nRaportați orice probleme apărute pe Githubul Mindustry sau pe Discord. -mods.alpha = [accent](Alpha) +mods.alphainfo = Modurile sunt încă în alpha și[scarlet] pot avea multe buguri[].\nRaportează orice probleme apărute pe Githubul Mindustry. mods = Moduri mods.none = [lightgray]Nu s-au găsit moduri! mods.guide = Ghid de Modding @@ -128,11 +131,11 @@ mod.reloadrequired = [scarlet]E Nevoie de o Repornire mod.import = Importă Mod mod.import.file = Importă Fișier mod.import.github = Importă din GitHub -mod.jarwarn = [scarlet]Modurile în format JAR nu sunt sigure.[]\nAi grijă să importezi acest mod dintr-o sursă de încredere! -mod.item.remove = Acest obiect este parte din modul [accent] '{0}'[]. Ca să îl poți elimina, dezinstalează acel mod. +mod.jarwarn = [scarlet]Modurile în format JAR nu sunt sigure.[]\nAi grijă să imporți acest mod dintr-o sursă de încredere! +mod.item.remove = Acest obiect face parte din modul [accent] '{0}'[]. Ca să îl poți elimina, dezinstalează acel mod. mod.remove.confirm = Acest mod va fi șters. mod.author = [lightgray]Autor:[] {0} -mod.missing = Această salvare conține moduri cărora le-ai făcut update recent sau nu mai sunt instalate. Fișierul poate fi corupt. Sigur vrei să îl încarci?\n[lightgray]Moduri:\n{0} +mod.missing = Această salvare conține moduri cărora le-ai făcut update recent sau care nu mai sunt instalate. Fișierul poate fi corupt. Sigur vrei să îl încarci?\n[lightgray]Moduri:\n{0} mod.preview.missing = Înainte să publici acest mod pe Workshop, trebuie să adaugi o imagine pt previzualizare.\nPune o imagine numită[accent] preview.png[] în folderul modului și încearcă din nou. mod.folder.missing = Doar modurile din câmpul folder pot fi publicate pe Workshop.\nPt a converti orice mod într-un folder, dezarhivează zipul într-un folder și șterge vechiul zip, apoi repornește jocul sau reîncărcă-ți modurile. mod.scripts.disable = Dispozitivul tău nu suportă moduri cu scripturi. Trebuie să dezactivezi aceste moduri ca să joci jocul. @@ -173,7 +176,7 @@ server.kicked.gameover = Joc încheiat! server.kicked.serverRestarting = Acest server se repornește. server.versions = Versiunea ta:[accent] {0}[]versiunea serverului:[accent] {1}[] host.info = Butonul [accent]găzduiește[] va găzdui un server pe portul [scarlet]6567[]. \nOrice persoană de pe același port [lightgray]wifi sau rețea locală[] ar trebui să-ți vadă serverul în lista lor de servere.\n\nDacă vrei ca lumea să se poată conecta de oriunde cu IP-ul, este nevoie de [accent]port forwarding[].\n\n[lightgray]Notă: Dacă cineva are probleme în a se conecta la jocul tău LAN, verifică dacă ai lăsat Mindustry să acceseze rețeaua locală în setările de firewall. De menționat este faptul că uneori rețelele publice nu permit descoperirea serverului. -join.info = Aici poți scrie un [accent]IP de server[] pt a te conecta, a descoperi [accent]rețeaua locală[] sau serverele [accent]globale[] pt a te conecta la ele.\nAtât multiplayerul LAN cât și cel WAN este suportat.\n\n[lightgray]Dacă vrei să te conectezi la cineva cu IP-ul, trebuie să ceri gazdei IP-ul său, care poate fi găsit căutând pe Google "my ip' de pe dispozitivul lor. +join.info = Aici poți scrie un [accent]IP de server[] pt a te conecta sau pt a descoperi [accent]rețeaua locală[] sau serverele [accent]globale[] la care să te conectezi.\nAtât multiplayerul LAN cât și cel WAN sunt suportate.\n\n[lightgray]Dacă vrei să te conectezi la cineva cu IP-ul, trebuie să ceri gazdei IP-ul său, care poate fi găsit căutând pe Google "my ip" de pe dispozitivul său. hostserver = Găzduiește Joc Multiplayer invitefriends = Invită Prieteni hostserver.mobile = Găzduiește Joc @@ -190,6 +193,10 @@ servers.local = Servere Locale servers.remote = Servere de la Distanță servers.global = Servere ale Comunității +servers.showhidden = Vezi Serverele Ascunse +server.shown = Afișate +server.hidden = Ascunse + trace = Urmărește Jucător trace.playername = Nume jucător: [accent]{0} trace.ip = IP: [accent]{0} @@ -268,6 +275,9 @@ cancel = Anulare openlink = Deschidr Linkul copylink = Copiază Linkul back = Înapoi +crash.export = Exportă Crash Logs +crash.none = Nu s-au găsit crash logs. +crash.exported = Crash logs exportate. data.export = Exportă Date data.import = Importă Date data.openfolder = Deschide Folderul cu Date @@ -284,12 +294,16 @@ cancelbuilding = [accent][[{0}][] pt a curăța planul selectschematic = [accent][[{0}][] pt selectare+copiere pausebuilding = [accent][[{0}][] pt a face o pauză de la construit resumebuilding = [scarlet][[{0}][] pt a continua construitul +showui = Interfață ascunsă.\nApasă [accent][[{0}][] pt a vedea interfața. wave = [accent]Valul {0} +wave.cap = [accent]Valul {0}/{1} wave.waiting = [lightgray]Val în {0} wave.waveInProgress = [lightgray]Val în desfășurare waiting = [lightgray]În așteptare... waiting.players = Se așteaptă jucătorii... wave.enemies = [lightgray]Mai sunt {0} inamici +wave.enemycores = [accent]{0}[lightgray] Nuclee Inamice +wave.enemycore = [accent]{0}[lightgray] Nucleu Inamic wave.enemy = [lightgray]Mai e {0} inamic wave.guardianwarn = Gardianul va veni în [accent]{0}[] valuri. wave.guardianwarn.one = Gardianul va veni într-[accent]un[] val. @@ -350,6 +364,7 @@ waves.invalid = Valuri invalide în clipboard. waves.copied = Valuri copiate. waves.none = Niciun inamic definit.\nDe reținut că o listă de valuri goală va fi înlocuită automat cu lista de valuri prestabilită. +#intenționat cu literă mică wavemode.counts = numere wavemode.totals = totaluri wavemode.health = viață @@ -362,6 +377,8 @@ editor.spawn = Adaugă Unitate editor.removeunit = Înlătură Unitate editor.teams = Echipe editor.errorload = Eroare la încărcarea fișierului. +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb editor.errorsave = Eroare la salvarea fișierului. editor.errorimage = Aceasta este o imagine, nu o hartă.\n\nDacă vrei să imporți o hartă din versiunile 3.5/build 40, folosește butonul 'Importă Hartă Veche' din editor. editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format învechit care nu mai este suportat. @@ -420,6 +437,7 @@ filters.empty = [lightgray]Fără filtre! Adaugă unul folosind butonul de mai j filter.distort = Distorsionare filter.noise = Zgomot Vizual filter.enemyspawn = Selectare Punct de Lansare Inamic +filter.spawnpath = Cale Către Punctul de Lansare filter.corespawn = Selectare Nucleu filter.median = Mediană filter.oremedian = Mediană Minereu @@ -443,7 +461,8 @@ filter.option.angle = Unghi filter.option.amount = Cantitate filter.option.block = Bloc filter.option.floor = Podea -filter.option.flooronto = Podea țintă +filter.option.flooronto = Podea Țintă +filter.option.target = Țintă filter.option.wall = Perete filter.option.ore = Minereu filter.option.floor2 = Podea Secundară @@ -460,7 +479,7 @@ load = Încarcă save = Salvează fps = FPS: {0} ping = Ping: {0}ms -language.restart = Vă rugăm să reporniți jocul pentru că setările de limbă să aibă efect. +language.restart = Repornește jocul pentru ca setările de limbă să aibă efect. settings = Setări tutorial = Tutorial tutorial.retake = Reia Tutorial @@ -471,19 +490,23 @@ abandon = Abandonează abandon.text = Zona aceasta și toate resursele ei vor fi cedate inamicului. locked = Blocat complete = [lightgray]Finalizat: -requirement.wave = Ajungi la valul {0} în {1} -requirement.core = Distruge Nucleu Inamic în{0} +requirement.wave = Treci de valul {0} în {1} +requirement.core = Distruge Nucleul Inamic din {0} requirement.research = Cercetează {0} +requirement.produce = Produ {0} requirement.capture = Capturează {0} -bestwave = [lightgray]Cel Mai Bun Val: {0} launch.text = Lansează -campaign.multiplayer = Când joci muliplayer în campanie, nu poți cerceta noi tehnologii decât folosind materiale din sectoarele [accent]tale[], [scarlet]nu[] din sectorul gazdei jocului, unde te afli acum.\n\nPt a transfera materialele către sectoarele [accent]tale[] în multiplayer, folosește o [accent]platformă de lansare[]. +research.multiplayer = Doar gazda poate cerceta noi tehnologii. +map.multiplayer = Doar gazda poate vedea harta sectoarelor. uncover = Descoperă -configure = Configurează Încărcarea +configure = Configurează Încărcarea + +#Spațiu Necesar loadout = Încărcare resources = Resurse bannedblocks = Blocuri Interzise addall = Adaugă-le pe toate +launch.from = Lansează Din: [accent]{0} launch.destination = Destinație: {0} configure.invalid = Cantitatea trebuie să fie un număr între 0 și {0}. zone.unlocked = [lightgray]{0} deblocat(ă). @@ -510,38 +533,72 @@ weather.rain.name = Ploaie weather.snow.name = Ninsoare weather.sandstorm.name = Furtună de nisip weather.sporestorm.name = Furtună de spori +weather.fog.name = Ceață sectors.unexplored = [lightgray]Neexplorat sectors.resources = Resurse: sectors.production = Producție: +sectors.export = Export: +sectors.time = Timp: +sectors.threat = Amenințare: +sectors.wave = Valul: sectors.stored = Stocat: sectors.resume = Revino sectors.launch = Lansare sectors.select = Selectează sectors.nonelaunch = [lightgray]nimic (soarele) +sectors.rename = Redenumește Sectorul +sectors.enemybase = [scarlet]Bază Inamică +sectors.vulnerable = [scarlet]Vulnerabil +sectors.underattack = [scarlet]Sectorul e atacat! [accent]{0}% deteriorat +sectors.survives = [accent]Supraviețuiește {0} valuri -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +sector.curcapture = Sector Capturat +sector.curlost = Sector Pierdut +sector.missingresources = [scarlet]Resurse din Nucleu Insuficiente +sector.attacked = Sectorul [accent]{0}[white] este atacat! +sector.lost = Ai pierdut sectorul [accent]{0}[white]! +#spațiul lipsă de mai jos e intenționat +sector.captured = Ai capturat sectorul [accent]{0}[white]! + +threat.low = Scăzută +threat.medium = Medie +threat.high = Mare +threat.extreme = Extremă +threat.eradication = Eradicare + +planets = Planete + +planet.serpulo.name = Serpulo +planet.sun.name = Soare + +sector.impact0078.name = Impact 0078 +sector.groundZero.name = Punctul Zero +sector.craters.name = Craterele +sector.frozenForest.name = Pădurea Glacială +sector.ruinousShores.name = Țărmurile Părăsite +sector.stainedMountains.name = Munții Pătați +sector.desolateRift.name = Riftul Dezolat +sector.nuclearComplex.name = Complexul de Producție Nucleară +sector.overgrowth.name = Supracreșterea +sector.tarFields.name = Câmpurile cu Păcură +sector.saltFlats.name = Podișurile Saline +sector.fungalPass.name = Pasul Fungic +sector.biomassFacility.name = Facilitatea de Sinteză a Biomasei +sector.windsweptIslands.name = Insulele Măturate de Vânt +sector.extractionOutpost.name = Avanpostul de Extracție +sector.planetaryTerminal.name = Terminalul de Lansare Planetară sector.groundZero.description = Locația optimă pt a începe încă odată. Risc de inamici scăzut. Puține resurse.\nAdună cât de mult plumb și cupru se poate.\nMergi mai departe. -sector.frozenForest.description = Chiar și aici, aproape de munți, sperii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare. -sector.saltFlats.description = La periferia deșertului stau Salt Flats. Puține resurse pot fi găsite în această locație.\n\nInamicul a ridicat un complex-depozit aici. Distruge-le nucleul. Nu lăsa nimic în urmă. +sector.frozenForest.description = Chiar și aici, aproape de munți, sporii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare. +sector.saltFlats.description = La periferia deșertului stau Podișurile Saline. Puține resurse pot fi găsite în această locație.\n\nInamicul a ridicat un complex-depozit aici. Distruge-le nucleul. Nu lăsa nimic în urmă. sector.craters.description = Apa s-a acumulat în acest crater, rămășiță a vechilor războaie. Cucerește din nou zona. Adună nisip. Toarnă-l în metasticlă. Pompează apă pt a răci armele și burghiele. sector.ruinousShores.description = După deșerturi vine țărmul. Odată, locația aceasta a avut un sistem de apărare de coastă. N-a rămas mult din el. Doar structurile de apărare cele mai de bază rămas în picioare, restul fiind redus la fier vechi.\nContinuă expansiunea în afară. Redescoperă tehnologia. sector.stainedMountains.description = Mai înspre continent sunt munții, încă neatinși de spori.\nExtrage abundentele resurse de titan din zonă. Învață cum să-l folosești.\n\nPrezența inamicului e mai mare aici. Nu le da timp să-și trimită cele mai puternice unități. -sector.overgrowth.description = Zona asta e plină de buruieni, mai aproape de sursa sporilor.\nInamicul și-a stabilit un adăpost aici. Construiește unități Titan. Distruge-o. Cucerește din nou ce s-a pierdut. +sector.overgrowth.description = Această zonă este plină de buruieni, mai aproape de sursa sporilor.\nInamicul și-a stabilit un adăpost aici. Construiește unități Mace. Distruge-o. Cucerește din nou ce s-a pierdut. sector.tarFields.description = O zonă aflată la periferia unei zone de producție petrolieră, între munți și deșert. Una din puținele zone cu resurse utilizabile de țiței.\nDeși abandonată, zona aceasta are niște forțe inamice periculoase înapropiere. Nu le subestima.\n\n[lightgray]Cercetează tehnologia de procesare a petrolului dacă se poate. sector.desolateRift.description = O zonă extrem de periculoasă. Multe resurse, dar puțin spațiu. Mare risc de distrugere. Pleacă cât mai curând. Nu te lăsa păcălit de timpul mare dintre atacurile inamice. -sector.nuclearComplex.description = O fostă facilitate pt producerea și procesarea de torium, redusă la ruine.\n[lightgray]Cercetează toriul și multele sale utilizări.\n\nInamicul e prezent aici în mari numere, căutând constând atacatori. +sector.nuclearComplex.description = O fostă facilitate pt producerea și procesarea de toriu, redusă la ruine.\n[lightgray]Cercetează toriul și multele sale utilizări.\n\nInamicul e prezent aici în mari numere, căutând constând atacatori. sector.fungalPass.description = O zonă de tranziție dintre munții înalți și zonele joase, pline cu spori. O mică bază de recunoaștere a inamicului este localizată aici.\nDistruge-o.\nFolosește unități Dagger și Crawler. Distruge cele 2 nuclee. settings.language = Limbă @@ -558,10 +615,13 @@ settings.clear.confirm = Sigur vrei să ștergi datele?\nCe e făcut nu poate fi settings.clearall.confirm = [scarlet]Atenție![]\nAsta va șterge toate datele, inclusiv salvări, hărți, deblocări și atribuiri de controale.\nOdată ce apeși 'ok' jocul va șterge toate datele și se va închide automat. settings.clearsaves.confirm = Sigur vrei să ștergi toate salvările? settings.clearsaves = Șterge Salvările +settings.clearresearch = Șterge Tehnologiile Cercetate +settings.clearresearch.confirm = Sigur vrei să ștergi toate tehnologiile cercetate în campanie? +settings.clearcampaignsaves = Șterge Salvările din Campanie +settings.clearcampaignsaves.confirm = Sigur vrei să ștergi toate salvările din campanie? paused = [accent]< Pauză > clear = Curăță banned = [scarlet]Interzis -unplaceable.sectorcaptured = [scarlet]Ai nevoie de un sector capturat yes = Da no = Nu info.title = Info @@ -569,25 +629,27 @@ error.title = [scarlet]A apărut o eroare. error.crashtitle = A apărut o eroare. unit.nobuild = [scarlet]Unitatea nu poate construi. lastaccessed = [lightgray]Ultima Accesare: {0} +block.unknown = [lightgray]??? + +stat.description = Utilizare stat.input = Necesită stat.output = Produce -stat.booster = Booster +stat.booster = Îmbunătățiri stat.tiles = Teren Necesar stat.affinities = Efecte Teren -block.unknown = [lightgray]??? stat.powercapacity = Capacitate electrică stat.powershot = Electricitate/Glonț stat.damage = Forță stat.targetsair = Lovește Aeronave stat.targetsground = Lovește Artilerie -stat.itemsmoved = Viteza de Mișcare a Materialelor +stat.itemsmoved = Viteză de Mișcare a Materialelor stat.launchtime = Timp între Lansări stat.shootrange = Rază stat.size = Mărime -stat.displaysize = Mărimea Monitorului Logic +stat.displaysize = Mărime Monitor Logic stat.liquidcapacity = Capacitate Lichid -stat.powerrange = Raza Electrică -stat.linkrange = Raza Legăturilor +stat.powerrange = Rază Electrică +stat.linkrange = Rază Legături stat.instructions = Instrucțiuni stat.powerconnections = Maxim Conexiuni stat.poweruse = Consum Electricitate @@ -596,12 +658,14 @@ stat.itemcapacity = Capacitate Materiale stat.memorycapacity = Capacitate Memorie stat.basepowergeneration = Generare Electricitate (Bază) stat.productiontime = Timp Producție -stat.repairtime = Durata Reparării Blocului +stat.repairtime = Durată Reparare Bloc +stat.weapons = Arme +stat.bullet = Glonț stat.speedincrease = Creștere Viteză -stat.range = Rază +stat.range = Rază stat.drilltier = Minabile stat.drillspeed = Viteză Burghiu (Bază) -stat.boosteffect = Efect de Boost +stat.boosteffect = Efect de Îmbunătățire stat.maxunits = Maxim Unități Active stat.health = Viață stat.buildtime = Timp Construcție @@ -611,8 +675,33 @@ stat.inaccuracy = Inacuratețe stat.shots = Lovituri stat.reload = Lovituri/Secundă stat.ammo = Muniție -stat.shieldhealth = Viața Scutului +stat.shieldhealth = Viață Scut stat.cooldowntime = Timp de Reîncărcare +stat.explosiveness = Explozivitate +stat.basedeflectchance = Șansă de Reflexie +stat.lightningchance = Șansă Fulger +stat.lightningdamage = Forță Fulger +stat.flammability = Inflamabilitate +stat.radioactivity = Radioactivitate +stat.heatcapacity = Capacitate de Căldură +stat.viscosity = Vâscozitate +stat.temperature = Temperatură +stat.speed = Viteză +stat.buildspeed = Viteză Construcție +stat.minespeed = Viteză Minare +stat.minetier = Minabile +stat.payloadcapacity = Capacitate Încărcătură +stat.commandlimit = Nr Unități Comandate +stat.abilities = Abilități +stat.canboost = Poate Îmbunătăți +stat.flying = Zboară + +ability.forcefield = Câmp de Forță +ability.repairfield = Câmp de Reparare +ability.statusfield = Câmp Suprasolicitare Unități +ability.unitspawn = {0} Fabrici +ability.shieldregenfield = Câmp de Regenerare a Scutului +ability.movelightning = Mișcare Fulger bar.drilltierreq = Burghiu Mai Bun Necesar bar.noresources = Resurse lipsă @@ -628,7 +717,7 @@ bar.powerlines = Conexiuni: {0}/{1} bar.items = Materiale: {0} bar.capacity = Capacitate: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unitate dezactivată] bar.liquid = Lichid bar.heat = Căldură bar.power = Electricitate @@ -641,16 +730,21 @@ units.processorcontrol = [lightgray]Controlat de Procesor bullet.damage = [stat]{0}[lightgray] forță bullet.splashdamage = [stat]{0}[lightgray] forță explozivă ~[stat] {1}[lightgray] pătrate bullet.incendiary = [stat]incendiar +bullet.sapping = [stat]atragere inamici bullet.homing = [stat]cu radar bullet.shock = [stat]șoc bullet.frag = [stat]fragil bullet.knockback = [stat]{0} [lightgray]împingere +bullet.pierce = [stat]{0}[lightgray]x penetrare +bullet.infinitepierce = [stat]penetrare +bullet.healpercent = [stat]{0}[lightgray]% reparare bullet.freezing = [stat]înghețat bullet.tarred = [stat]lipicios bullet.multiplier = [stat]{0}[lightgray]x multiplicator muniție bullet.reload = [stat]{0}[lightgray]x lovituri unit.blocks = blocuri +unit.blockssquared = blocuri² unit.powersecond = electricitate/secundă unit.liquidsecond = unități lichid/secundă unit.itemssecond = materiale/secundă @@ -663,17 +757,18 @@ unit.persecond = /sec unit.perminute = /min unit.timesspeed = x viteză unit.percent = % -unit.shieldhealth = viața scutului +unit.shieldhealth = viață scut unit.items = materiale unit.thousands = mii unit.millions = mil unit.billions = b +category.purpose = Utilizare category.general = General category.power = Electricitate category.liquids = Lichide category.items = Materiale category.crafting = Necesită/Produce -category.shooting = Lovire +category.function = Funcționare category.optional = Îmbunătățiri opționale setting.landscape.name = Blochează Mod Peisaj setting.shadows.name = Umbre @@ -682,8 +777,8 @@ setting.linear.name = Filtrare Liniară setting.hints.name = Indicii setting.flow.name = Afișează Rata de Curgere a lichidelor setting.buildautopause.name = Autopauză de la Construit -setting.mapcenter.name = Auto Centrează Harta La Jucător -setting.animatedwater.name = Fluide Animate +setting.backgroundpause.name = Pune Pauză în Fundal +setting.animatedwater.name = Suprafețe Animate setting.animatedshields.name = Scuturi Animate setting.antialias.name = Antialiasing[lightgray] (necesită repornire)[] setting.playerindicators.name = Indicatori Jucător @@ -710,13 +805,11 @@ setting.conveyorpathfinding.name = Găsirea Drumului la Plasarea Benzii setting.sensitivity.name = Sensibilitatea Controlului setting.saveinterval.name = Interval de Salvare setting.seconds = {0} secunde -setting.blockselecttimeout.name = Selectarea Blocului a Întârziat setting.milliseconds = {0} millisecunde setting.fullscreen.name = Ecran Complet setting.borderlesswindow.name = Fereastră Fără Margine[lightgray] (repornirea poate fi necesară) setting.fps.name = Vezi FPS & Ping setting.smoothcamera.name = Cameră Graduală -setting.blockselectkeys.name = Vezi Detalii Cheie cu Privire la Selectarea Blocurilor setting.vsync.name = VSync setting.pixelate.name = Pixelează setting.minimap.name = Vezi Miniharta @@ -726,7 +819,7 @@ setting.musicvol.name = Volumul Muzicii setting.atmosphere.name = Vezi Atmosfera Planetelor setting.ambientvol.name = Volum Ambiental setting.mutemusic.name = Muzica pe Mut -setting.sfxvol.name = Volum SFX +setting.sfxvol.name = Volum Efecte Sonore setting.mutesound.name = Sunetul pe Mut setting.crashreport.name = Trimite Rapoarte de Crash anonime setting.savecreate.name = Auto-Creează Salvări @@ -800,6 +893,7 @@ keybind.menu.name = Meniu keybind.pause.name = Pauză keybind.pause_building.name = Pauză/Reia Construit keybind.minimap.name = Minihartă +keybind.planet_map.name = Harta Planetei keybind.chat.name = Chat keybind.player_list.name = Listă Jucători keybind.console.name = Consolă @@ -863,6 +957,8 @@ content.item.name = Materiale content.liquid.name = Lichide content.unit.name = Unități content.block.name = Blocuri +content.sector.name = Sectoare + item.copper.name = Cupru item.lead.name = Plumb item.coal.name = Cărbune @@ -884,23 +980,6 @@ liquid.slag.name = Zgură liquid.oil.name = Petrol liquid.cryofluid.name = Criofluid -item.explosiveness = [lightgray]Explozivitate: {0}% -item.flammability = [lightgray]Inflamabilitate: {0}% -item.radioactivity = [lightgray]Radioactivitate: {0}% - -unit.health = [lightgray]Viață: {0} -unit.speed = [lightgray]Viteză: {0} -unit.weapon = [lightgray]Armă: {0} -unit.itemcapacity = [lightgray]Capacitatea de Material: {0} -unit.minespeed = [lightgray]Viteza de Minare: {0}% -unit.minepower = [lightgray]Puterea Minării: {0} -unit.ability = [lightgray]Abilitate: {0} -unit.buildspeed = [lightgray]Viteza de Construcție: {0}% - -liquid.heatcapacity = [lightgray]Capacitatea de Căldură: {0} -liquid.viscosity = [lightgray]Vâscozitatea: {0} -liquid.temperature = [lightgray]Temperatura: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -986,6 +1065,7 @@ block.sand-water.name = Apă cu Nisip block.darksand-water.name = Apă cu Nisip Negru block.char.name = Turbă block.dacite.name = Dacit +block.dacite-boulder.name = Bolovan de Dacit block.dacite-wall.name = Perete de Dacit block.ice-snow.name = Gheață Înzăpezită block.stone-wall.name = Perete de Piatră @@ -1035,15 +1115,17 @@ block.conveyor.name = Bandă block.titanium-conveyor.name = Bandă de Titan block.plastanium-conveyor.name = Bandă de Plastaniu block.armored-conveyor.name = Bandă Armată -block.armored-conveyor.description = Cară materialele la aceeași viteză ca benzile de titan, dar posedă o armură. Nu acceptă materiale de pe lateral decât de la alte benzi armate. block.junction.name = Intersecție block.router.name = Router block.distributor.name = Distributor +#experimental, pot fi șterse în viitor +block.block-forge.name = Forjă de Blocuri +block.block-loader.name = Încărcător de Blocuri +block.block-unloader.name = Descărcător de Blocuri block.sorter.name = Sortator block.inverted-sorter.name = Sortator Invers block.message.name = Mesaj block.illuminator.name = Iluminator -block.illuminator.description = O sursă de lumină mică, compactă, configurabilă. Necesită electricitate pt a funcționa. block.overflow-gate.name = Poartă de Revărsare block.underflow-gate.name = Poartă de Subversare block.silicon-smelter.name = Topitor de Silicon @@ -1139,11 +1221,12 @@ block.payload-router.name = Router în Masă block.disassembler.name = Dezasamblator block.silicon-crucible.name = Creuzet de Silicon block.overdrive-dome.name = Dom de Suprasolicitare +block.interplanetary-accelerator.name = Accelerator Interplanetar block.switch.name = Întrerupător block.micro-processor.name = Microprocesor block.logic-processor.name = Procesor Logic -block.hyper-processor.name = Hyperprocesor +block.hyper-processor.name = Hiperprocesor block.logic-display.name = Monitor Logic block.large-logic-display.name = Monitor Logic Mare block.memory-cell.name = Celulă de Memorie @@ -1153,162 +1236,246 @@ team.blue.name = albastră team.crux.name = roșie team.sharded.name = portocalie team.orange.name = portocalie -team.derelict.name = abandonat +team.derelict.name = abandonată team.green.name = verde team.purple.name = mov -tutorial.next = [lightgray] -tutorial.intro = Bun venit în[scarlet] Tutorialul Mindustry.[]\nFolosește[accent] [[WASD][] ca să te miști.\n[accent]Cu rotița[] poți face harta mai mare sau mai mică.\nÎncepe prin[accent] a mina cupru[]. Apropie-te de el, Apoi apasă pe un minereu de cupru de lângă nucleul tău.\n\n[accent]{0}/{1} cupru -tutorial.intro.mobile = Bun venit în[scarlet] Tutorialul Mindustry.[]\nGlisează pe ecran pt a te mișca.\n[accent]Trage cu 2 degete[] pt face harta mai mare sau mai mică.\nÎncepe prin[accent] a mina cupru[]. Apropie-te de el, Apoi apasă pe un minereu de cupru de lângă nucleul tău.\n\n[accent]{0}/{1} cupru -tutorial.drill = Mineritul manual este ineficient.\n[accent]Burghiele[] pot mina automat.\nDă click pe tabul burghie din colțul din dreapta-jos.\nSelectează[accent] burghiul mecanic[]. Plasează-l pe un minereu de cupru dând click.\nPoți selecta burghiul și apăsând [accent][[2][] apoi rapid [accent][[1][], indiferent de ce tab este deschis.\n[accent]Click-dreapta[] ca să te oprești din a construi. -tutorial.drill.mobile = Mineritul manual este ineficient.\n[accent]Burghiele[] pot mina automat.\nDă click pe tabul burghie din colțul din dreapta-jos.\nSelectează[accent] burghiul mecanic[]. Plasează-l pe un minereu de cupru dând click, apoi apasă pe[accent] bifa[] de mai jos pt a-ți confirma selecția.\nApasă pe[accent] butonul X[] pt a anula plasarea. -tutorial.blockinfo = Fiecare bloc are statistici diferite. Fiecare burghiu poate mina minereuri diferite.\nPt a verifica informațiile despre un bloc,[accent] dă click pe butonul "?" care apare când blocul este selectat din meniu.[]\n\n[accent]Accesează informații despre Burghiul Mecanic.[] -tutorial.conveyor = [accent]Benzile[] se folosesc pt a transporta materiale la nucleu.\nConstruiește o bandă rulantă de la burghiu către nucleu.\n[accent]Ține apăsat pe mouse pt a desena o linie.[]\nȚine[accent] CTRL[] în timp se plasezi o line pt a o plasa diagonal.\nFolosește rotița pt a roti blocurile înainte să le plasezi.\n[accent]Plasează 2 benzi, apoi livrează un material la nucleu. -tutorial.conveyor.mobile = [accent]Benzile[] se folosesc pt a transporta materiale la nucleu.\nConstruiește o bandă rulantă de la burghiu către nucleu.\n[accent] Construiește o linie ținând degetul pe ecran câteva secunde și apoi[] trage într-o direcție.\n\n[accent]Plasează 2 benzi, apoi livrează un material la nucleu. -tutorial.turret = Odată ce un material intră în nucleu, poate fi folosit pt a construi.\nDe reținut că nu toate materialele pot fi folosite pt construit.\nMaterialele care nu sunt folosite pt construit, cum ar fi[accent] cărbunele[] sau[accent] fierul vechi[], nu pot fi puse în nucleu.\nTrebuie să construiești structuri defensive ca să te aperi de[lightgray] inamici[].\nConstruiește [accent]o armă duo[] lângă baza ta. -tutorial.drillturret = Armele Duo au nevoie de[accent] muniție de cupru[] pt a trage.\nPlasează un burghiu lângă armă.\nConstruiește o bandă către armă pt a o alimenta cu muniție de cupru.\n\n[accent]Muniție livrată: 0/1 -tutorial.pause = În timpul luptei, poți[accent] da pauză la joc.[]\nPoți planifica construcții în timpul pauzei.\n\n[accent]Apasă pe space pt a da pauză. -tutorial.pause.mobile = În timpul luptei, poți[accent] da pauză la joc.[]\nPoți planifica construcții în timpul pauzei.\n\n[accent]Apasă butonul din colțul din stânga sus pt a da pauză. -tutorial.unpause = Acum apasă space din nou pt a continua. -tutorial.unpause.mobile = Acum apasă-l din nou pt a continua. -tutorial.breaking = Uneori, blocurile trebuie distruse.\n[accent]Ține apăsat pe click dreapta[] pt a distruge toate blocurile dintr-o selecție.[]\n\n[accent]Distruge toate blocurile de fier vechi din stânga nucleului. -tutorial.breaking.mobile = Uneori, blocurile trebuie distruse.\n[accent]Selectează modul deconstrucție[], aopi dă click pe un bloc pt a-l distruge.\nDistruge o zonă ținând apăsat cu degetul pt câteva secunde[] și apoi trăgând într-o direcție.\nApasă bifa de mai jos pt a confirma distrugerea.\n\n[accent]Distruge toate blocurile de fier vechi din stânga nucleului. -tutorial.withdraw = Câteodată a lua materiale direct din blocuri este necesar.\nPt a face asta, [accent]dă click pe un bloc[] cu materiale în el, apoi [accent]dă click pe materialul[] din inventar.\nMai multe materiale pot fi luate [accent]făcând click și ținând apăsat[].\n\n[accent]Ia niște cupru din nucleu.[] -tutorial.deposit = Depozitează materiale înapoi în blocuri trăgând din nava ta către blocul de destinație.\n\n[accent]Depozitează cuprul înapoi în nucleu.[] -tutorial.waves = [lightgray]Inamicul[] se apropie.\n\nApără nucleul timp de 2 valuri.[accent] Click[] pt a trage cu arma.\nConstruiește mai multe arme și burghie. Minează mai mult cupru. -tutorial.waves.mobile = [lightgray]Inamicul[] se apropie.\n\nApără nucleul timp de 2 valuri. Nava ta va trage automat către inamici.\nConstruiește mai multe arme și burghie. Minează mai mult cupru. -tutorial.launch = Odată ce ajungi la un anumit val, poți [accent]lansa nucleul[], lăsându-ți apărările în urmă și[accent] obținând toate resursele din nucleu.[]\nResursele obținute pot fi apoi folosite pt a cerceta noi tehnologii.\n\n[accent]Apasă butonul de lansare. +# A NU SE TRADUCE! NU SUNT GATA! +hint.skip = Skip +hint.desktopMove = Use [accent][[WASD][] to move. +hint.zoom = [accent]Scroll[] to zoom in or out. +hint.mine = Move near the \uf8c4 copper ore and [accent]tap[] it to mine manually. +hint.desktopShoot = [accent][[Left-click][] to shoot. +hint.depositItems = To transfer items, drag from your ship to the core. +hint.respawn = To respawn as a ship, press [accent][[V][]. +hint.respawn.mobile = You have switched control a unit/structure. To respawn as a ship, [accent]tap the avatar in the top left.[] +hint.desktopPause = Press [accent][[Space][] to pause and unpause the game. +hint.placeDrill = Select the \ue85e [accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and click on a copper patch to place it. +hint.placeDrill.mobile = Select the \ue85e[accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and tap on a copper patch to place it.\n\nPress the \ue800 [accent]checkmark[] at the bottom right to confirm. +hint.placeConveyor = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate. +hint.placeConveyor.mobile = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nHold down your finger for a second and drag to place multiple conveyors. +hint.placeTurret = Place \uf861 [accent]Turrets[] to defend your base from enemies.\n\nTurrets require ammo - in this case, \uf838copper.\nUse conveyors and drills to supply them. +hint.breaking = [accent]Right-click[] and drag to break blocks. +hint.breaking.mobile = Activate the \ue817 [accent]hammer[] in the bottom right and tap to break blocks.\n\nHold down your finger for a second and drag to break in a selection. +hint.research = Use the \ue875 [accent]Research[] button to research new technology. +hint.research.mobile = Use the \ue875 [accent]Research[] button in the \ue88c [accent]Menu[] to research new technology. +hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to control friendly units or turrets. +hint.unitControl.mobile = [accent][Double-tap[] to control friendly units or turrets. +hint.launch = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the bottom right. +hint.launch.mobile = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the \ue88c [accent]Menu[]. +hint.schematicSelect = Hold [accent][[F][] and drag to select blocks to copy and paste.\n\n[accent][[Middle Click][] to copy a single block type. +hint.conveyorPathfind = Hold [accent][[L-Ctrl][] while dragging conveyors to automatically generate a path. +hint.conveyorPathfind.mobile = Enable \ue844 [accent]diagonal mode[] and drag conveyors to automatically generate a path. +hint.boost = Hold [accent][[L-Shift][] to fly over obstacles with your current unit.\n\nOnly a few ground units have boosters. +hint.command = Press [accent][[G][] to command nearby units into formation. +hint.command.mobile = [accent][[Double-tap][] your unit to command nearby units into formation. +hint.payloadPickup = Press [accent][[[] to pick up small blocks or units. +hint.payloadPickup.mobile = [accent]Tap and hold[] a small block or unit to pick it up. +hint.payloadDrop = Press [accent]][] to drop a payload. +hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a payload there. +hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. -item.copper.description = Materialul structural cel mai de bază. Folosit în mod extensiv în toate tipurile de blocuri. -item.lead.description = Un material de bază. Folosit în mod extensiv în electronice și blocuri transportoare de lichid. -item.metaglass.description = Un compus de sticlă super rezistent. Folosit în mod extensiv pt distribuirea și stocarea de lichide. -item.graphite.description = Carbon mineralizat, folosit pt muniție și componente electrice. -item.sand.description = Un material des întâlnit care se folosește extensiv în topitorii, în special pt aliaje. -item.coal.description = Materie vegetală fosilizată, formată cu mult înainte de evenimentul însămânțării. Folosit extensiv ca combustibil și pt producerea de resurse. -item.titanium.description = Un metal rar și super ușor folosit extensiv pt transportul lichidelor, burghie și aeronautică. -item.thorium.description = Un metal dens, radioactiv, folosit ca suport structural și combustibil nuclear. -item.scrap.description = Rămășițe ale structurilor și unităților vechi. Conține urme ale multor metale diferite. -item.silicon.description = Un semiconductor extrem de folositor. Aplicații în energia solară, electronice complexe și muniție cu radar. -item.plastanium.description = Un material ușor, flexibil folosit în aeronautica avansată și muniție fragilă. -item.phase-fabric.description = O substanță cu greutate aproape de 0 folosită în electronica avansată și tehnologia de autoreparare. -item.surge-alloy.description = Un aliaj avansat cu proprietăți electrice unice. -item.spore-pod.description = O păstaie de spori, sintetizați din concentrațiile atmosferice pt utilizări industriale. Folosit pt a fi convertit în petrol, explozibili și combustibil. -item.blast-compound.description = Un compus instabil folosit în bombe și explozibili. Sintetizat din păstăile de spori și alte materiale volatile. Folosirea ca combustibil nu e recomandată. -item.pyratite.description = O substanță extrem de inflamabilă folosită în armele incendiare. -liquid.water.description = Cel mai util lichid. Folosit deseori pt răcirea mașinăriilor și procesarea deșeurilor. -liquid.slag.description = Diferite tipuri de metal topit amestacate laolaltă. Poate fi separat în materialele constituente, sau pulverizat înspre unitățile inamice ca armă. -liquid.oil.description = Un lichid folosit în producerea de materiale avansate. Poate fi convertit în cărbune pt combustibil, sau pulverizat și ars ca armă. -liquid.cryofluid.description = Un lichid inert, non coroziv creat din apă și titan. Are o capacitate de absorbție a căldurii mare. Folosit în mod extensiv ca răcitor. +item.copper.description = Folosit în tot felul de construcții și muniție. +item.copper.details = Cupru. Metal anormal de abundent pe Serpulo. Structural slab dacă nu este consolidat. +item.lead.description = Folosit în transportarea lichidelor și în electronică. +item.lead.details = Dens. Inert. Folosit extensiv în baterii.\nObservație: Probabil toxic pt formele de viață biologice. Nu că ar mai fi rămas prea multe aici. +item.metaglass.description = Folosită pt distribuirea și stocarea de lichide. +item.graphite.description = Folosit pt componente electrice și alimentarea armelor cu muniție. +item.sand.description = Folosit pt producție sau alte materiale rafinate. +item.coal.description = Folosit extensiv ca combustibil și pt producerea de materiale rafinate. +item.coal.details = Pare să fie materie vegetală fosilizată, formată cu mult înainte de evenimentul însămânțării. +item.titanium.description = Folosit pt structuri transportatoare de lichid, burghie și aeronautică. +item.thorium.description = Folosit în structuri durabile și combustibil nuclear. +item.scrap.description = Folosit in topitoare și pulverizatoare pt a fi rafinat în alte materiale. +item.scrap.details = Rămășițe ale structurilor și unităților vechi.. +item.silicon.description = Folosit în producerea energiei solare, electronice complexe și muniție cu radar pt armament. +item.plastanium.description = Folosit pt unitățile militare avansate, ca izolator electric și muniție fragilă. +item.phase-fabric.description = Folosită în electronica avansată și tehnologia de autoreparare. +item.surge-alloy.description = Folosit în electronica avansată și structuri defensive reactive. +item.spore-pod.description = Folosită pt a fi convertită în petrol, explozibili și combustibil. +item.spore-pod.details = Spori. Probabil o formă de viață sintetică. Emite gaze toxice altor forme de viață biologică. Nu că ar mai fi rămas prea multe aici. +item.blast-compound.description = Folosit în bombe și muniție explozibilă. +item.pyratite.description = Folosită în armele incendiare și generatoare pe bază de procese de combustie. +liquid.water.description = Folosită pt răcirea mașinăriilor și procesarea deșeurilor. +liquid.slag.description = Rafinată în separatoare înapoi în materialele constituente, sau pulverizată înspre unitățile inamice ca armă. +liquid.oil.description = Folosit în producerea avansată de materialet și ca muniție incendiară. +liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici. + +block.resupply-point.description = Realimentează unitățile din apropiere cu muniție de cupru. Nu este compatibil cu unitățile care se încarcă din baterii. +block.armored-conveyor.description = Transportă materialele înainte. Nu acceptă materiale de pe lateral decât de la alte benzi. +block.illuminator.description = Emite lumină. block.message.description = Păstrează un mesaj. Folosit pt comunicarea dintre aliați. -block.graphite-press.description = Compresează bucăți de cărbune în plăci de grafit pur. -block.multi-press.description = O versiune mai bună a presei de grafit. Folosește apă și electricitate pt a procesa cărbunele rapid și eficient. -block.silicon-smelter.description = Transformă nisipul și cărbunele pur. Produce silicon. -block.kiln.description = Toarnă nisip și plumb în compusul numit metasticlă. Necesită puțină electricitate pt pornire. +block.graphite-press.description = Compresează cărbunele în grafit. +block.multi-press.description = Compresează cărbunele în grafit. Are nevoie de apă ca răcitor. +block.silicon-smelter.description = Rafinează silicon din nisip și cărbune. +block.kiln.description = Toarnă nisipul și plumbul în metasticlă. block.plastanium-compressor.description = Produce plastaniu din petrol și titan. -block.phase-weaver.description = Sintetizează fibră-fază din toriu radioactiv și nisip. Necesită electricitate pt a funcționa. +block.phase-weaver.description = Sintetizează fibră-fază din toriu și nisip. block.alloy-smelter.description = Combină titan, plumb, silicon și cupru pt a produce supra aliaj. -block.cryofluid-mixer.description = Amestecă apă și pudră fină de titan în criofluid. Esențial pt folosirea în reactoarele de toriu. -block.blast-mixer.description = Zdrobește și amestecă gramezi de spori cu piratită pt a produce un compus explozibil. -block.pyratite-mixer.description = Amestecă niște cărbune, plumb și nisip în inflamabila piratită. -block.melter.description = Topește fierul vechi în zgură pt procesare ulterioară sau folosire în armele Wave. -block.separator.description = Separă zgura în componentele sale minerale. Furnizează rezultatul răcit. -block.spore-press.description = Compresează păstăi de spori sub presiuni extreme pt a sintetiza petrol. +block.cryofluid-mixer.description = Amestecă apă și pudră fină de titan pt a produce criofluid. +block.blast-mixer.description = Produce un compus explozibil din piratită și păstăi de spori. +block.pyratite-mixer.description = Amestecă plumb, cărbune și nisip în piratită. +block.melter.description = Topește fierul vechi în zgură. +block.separator.description = Separă zgura în componentele sale minerale. +block.spore-press.description = Compresează păstăile de spori în petrol. block.pulverizer.description = Zdrobește fierul vechi în nisip fin. -block.coal-centrifuge.description = Solidifică petrolul în bucăți de cărbune. -block.incinerator.description = Vaporizează orice exces de material sau lichid primește. +block.coal-centrifuge.description = Transformă petrolul în cărbune. +block.incinerator.description = Vaporizează orice material sau lichid primește. block.power-void.description = Consumă toată electricitatea primită. Doar în modul sandbox. block.power-source.description = Generează electricitate infinită. Doar în modul sandbox. block.item-source.description = Generează materiale la infinit. Doar în modul sandbox. block.item-void.description = Distruge orice material. Doar în modul sandbox. block.liquid-source.description = Generează lichide la infinit. Doar în modul sandbox. block.liquid-void.description = Distruge orice lichid. Doar în modul sandbox. -block.copper-wall.description = Un perete defensiv ieftin.\nUtil pt a proteja nucleul și armele în primele valuri. -block.copper-wall-large.description = Un perete defensiv ieftin.\nUtil pt a proteja nucleul și armele în primele valuri.\nSe întinde pe mai multe pătrate. -block.titanium-wall.description = Un perete defensiv de rezistență moderată.\nFurnizează protecție moderată împotriva inamicilor. -block.titanium-wall-large.description = Un perete defensiv de rezistență moderată.\nFurnizează protecție moderată împotriva inamicilor. \nSe întinde pe mai multe pătrate. -block.plastanium-wall.description = Un tip special de perete care absoarbe laserele electrice și blochează conectarea automată a nodurilor electrice. -block.plastanium-wall-large.description = Un tip special de perete care absoarbe laserele electrice și blochează conectarea automată a nodurilor electrice.\nSe întinde pe mai multe pătrate. -block.thorium-wall.description = Un perete defenziv puternic. \nProtecție decentă împotriva inamicilor. -block.thorium-wall-large.description = Un perete defenziv puternic. \nProtecție decentă împotriva inamicilor.\nSe întinde pe mai multe pătrate. -block.phase-wall.description = Un perete învelit într-un material reflexiv special bazat pe fibra-fază. Reflectă majoritatea gloanțelor la impact. -block.phase-wall-large.description = Un perete învelit într-un material reflexiv special bazat pe fibra-fază. Reflectă majoritatea gloanțelor la impact.\nSe întinde pe mai multe pătrate. -block.surge-wall.description = Un perete defensiv extrem de durabil.\nStrânge electricitate statică la contactul cu gloanțele, lansând-o la întâmplare. -block.surge-wall-large.description = Un perete defensiv extrem de durabil.\nStrânge electricitate statică la contactul cu gloanțele, lansând-o la întâmplare.\nSe întinde pe mai multe pătrate. -block.door.description = O ușă mică. Poate fi deschisă sau închisă dând click. -block.door-large.description = O ușă mare. Poate fi deschisă sau închisă dând click.\nSe întinde pe mai multe pătrate. -block.mender.description = Repară periodic blocurile din vecinătate. Menține apărările în stare bună între valuri.\nPoate folosi silicon pt un boost al razei de acțiune și al eficienței. -block.mend-projector.description = O versiune mai bună a reparatorului. Repară periodic blocurile din vecinătate. \nPoate folosi fibră-fază pt un boost al razei de acțiune și al eficienței. -block.overdrive-projector.description = Grăbește blocurile din apropiere.\nPoate folosi fibră-fază pt un boost al razei de acțiune și al eficienței. -block.force-projector.description = Creează un câmp de forță hexagonal în jurul său, protejând blocurile și unitățile din interior de deteriorare.\nSe supraîncălzește dacă este prea deteriorat. Poate folosi răcitor pt a preveni supraîncălzirea pt a preveni supraîncălzirea. Fibra-fază poate fi folosită pt a crește mărimea scutului. -block.shock-mine.description = Rănește inamicii care calcă pe ea. Aproape invizibilă pt inamic. -block.conveyor.description = Bloc de transport al materialelor. Împinge materialele în față și le depozitează automat în blocuri. Poate fi rotită. -block.titanium-conveyor.description = Bloc avansat de transport al materialelor. Împinge materialele mai rapid decât blocurile standard. -block.plastanium-conveyor.description = Împingee grămezi de materiale.\nAcceptă materiale din spate, și le descarcă în 3 direcții în față.\nNecesită mai multe puncte de încărcare și descărcare pt a transporta nr maxim de materiale/secundă. -block.junction.description = Acționează ca un pod pt două benzi care se intersectează. Util în situații în care se intersectează 2 benzi cărând diverse materiale în diferite locații. -block.bridge-conveyor.description = Bloc avansat de transport al materialelor. Permite transportul materialelor peste orice teren sau clădire, până la 3 pătrate distanță. -block.phase-conveyor.description = Bloc avansat de transport al materialelor. Folosește electricitate pt a teleporta materialele la o altă bandă de fază peste mai multe pătrate. -block.sorter.description = Sortează materialele. Dacă un material se potrivește selecției, este lăsat să treacă. Altfel, materialul este transportat la stânga sau la dreapta. -block.inverted-sorter.description = Procesează materialele ca un sortator standard, dar materialele selectate sunt transportate la stânga sau la dreapta. -block.router.description = Acceptă materiale, apoi le distribuie în alte 3 direcții în mod egal. Util pt a împărți materialele de la o sursă către mai multe destinații.\n\n[scarlet]Nu folosi niciodată pt a introduce materiale în blocuri, căci vor fi blocate de produșii blocurilor.[] -block.distributor.description = Un router avansat. Împarte materialele în alte 7 direcții în mod egal. -block.overflow-gate.description = Transportă materialele doar la stânga și dreapta dacă drumul din față este blocat. -block.underflow-gate.description = Opusul porții de revărsare. Transportă materialele în față dacă benzile din stânga și dreapta sunt blocate. -block.mass-driver.description = Cel mai bun bloc de transport al materialelor. Adună mai multe materiale și apoi le lansează până la un alt distributor în masă pe o rază mare. Necesită electricitate pt a opera. -block.mechanical-pump.description = O pompă ieftină care pompează puțin, dar nu consumă electricitate. -block.rotary-pump.description = O pompă avansată. Pompează mai mult lichid dar consumă electricitate. -block.thermal-pump.description = Cea mai bună pompă. -block.conduit.description = Un bloc de transport al lichidelor. Împinge lichidele în față. Folosit cu pompe și alte conducte. -block.pulse-conduit.description = Un bloc avansat de transport al lichidelor. Transportă lichidele mai rapid și stochează mai mult decât conductele standard. -block.plated-conduit.description = Transportă lichidele lafel de rapid precum conductele cu puls, dar este mai rezistentă. Nu acceptă fluide din lateral de la altceva în afară de conducte.\nLichidul nu se varsă la exterior. -block.liquid-router.description = Acceptă lichide dintr-o direcție și le distribuie în alte 3 direcții în mod egal. Poate stoca o anumită cantitate de lichid. Folositor pt a distribui lichidele dintr-o sursă către mai multe destinații. -block.liquid-tank.description = Stochează o mare cantitate de lichid. Util pt depozita lichide pt situațiile în care cererea de materiale nu e constantă sau ca extra securitate pt răcirea blocurilor vitale. -block.liquid-junction.description = Acționează ca un pod pt două conducte care se intersectează. Util în situația în care se intersectează 2 conducte diferite ce cară divesre lichide către diverse locații. -block.bridge-conduit.description = Un bloc avansat de transport al lichidelor. Permite transportul lichidelor peste orice tip teren sau bloc, până la 3 pătrate distanță. -block.phase-conduit.description = Un bloc avansat de transport al lichidelor. Folosește electricitate pt a teleporta lichidele către o altă conductă de fază la o mare distanță. +block.copper-wall.description = Protejează clădirile de proiectilele inamice. +block.copper-wall-large.description = Protejează clădirile de proiectilele inamice. +block.titanium-wall.description = Protejează clădirile de proiectilele inamice. +block.titanium-wall-large.description = Protejează clădirile de proiectilele inamice. +block.plastanium-wall.description = Protejează clădirile de proiectilele inamice. Absoarbe laserele electrice. Blochează conectarea automată a nodurilor electrice. +block.plastanium-wall-large.description = Protejează clădirile de proiectilele inamice. Absoarbe laserele electrice. Blochează conectarea automată a nodurilor electrice. +block.thorium-wall.description = Protejează clădirile de proiectilele inamice. +block.thorium-wall-large.description = Protejează clădirile de proiectilele inamice. +block.phase-wall.description = Protejează clădirile de proiectilele inamice, reflectând majoritatea gloanțelor la impact. +block.phase-wall-large.description = Protejează clădirile de proiectilele inamice, reflectând majoritatea gloanțelor la impact. +block.surge-wall.description = Protejează clădirile de proiectilele inamice, lansând periodic lasere electrice la contactul cu gloanțele. +block.surge-wall-large.description = Protejează clădirile de proiectilele inamice, lansând periodic lasere electrice la contactul cu gloanțele. +block.door.description = Un perete care poate fi deschis sau închis. +block.door-large.description = Un perete care poate fi deschis sau închis. +block.mender.description = Repară periodic blocurile din vecinătate. \nPoate folosi silicon pt a îmbunătăți raza de acțiune și eficiența. +block.mend-projector.description = Repară blocurile din vecinătate. \nPoate folosi fibră-fază pt a îmbunătăți raza de acțiune și eficiența. +block.overdrive-projector.description = Grăbește blocurile din apropiere.\nPoate folosi fibră-fază a îmbunătăți raza de acțiune și eficiența. +block.force-projector.description = Crează un câmp hexagonal de forță în jurul său, protejând blocurile și unitățile din interior de deteriorare. Se supraîncălzește dacă este prea deteriorat. Poate folosi răcitor pt a preveni supraîncălzirea. Fibra-fază poate fi folosită pt a crește mărimea scutului. +block.shock-mine.description = Lansează lasere electrice la contactul cu inamicul. +block.conveyor.description = Transportă materialele înainte. +block.titanium-conveyor.description = Transportă materialele înainte. Mai rapidă decât benzile standard. +block.plastanium-conveyor.description = Transportă grămezi de materialele înainte.\nAcceptă materiale din spate, și le descarcă în 3 direcții în față.\nNecesită mai multe puncte de încărcare și descărcare pt a transporta nr maxim de materiale/secundă. +block.junction.description = Acționează ca un pod pt două benzi care se intersectează. +block.bridge-conveyor.description = Transportă materiale peste orice teren sau clădire. +block.phase-conveyor.description = Transportă instant materiale peste orice teren sau clădire. Poate fi mai lung decât podul de bandă, dar necesită electricitate. +block.sorter.description = Dacă un material se potrivește selecției, este lăsat să treacă. Altfel, materialul este transportat la stânga sau la dreapta. +block.inverted-sorter.description = Similar sortatorului standard, dar materialul selectat este transportat la stânga sau la dreapta. +block.router.description = Distribuie materialele primite în alte 3 direcții în mod egal. +block.router.details = Un rău necesar. Nu folosi niciodată pt a introduce materiale în blocuri, căci vor fi blocate de produșii blocurilor. +block.distributor.description = Distribuie materialele primite în alte 7 direcții în mod egal. +block.overflow-gate.description = Transportă materialele doar la stânga și dreapta dacă drumul din față este blocat. Nu poate fi folosită lângă alte porți. +block.underflow-gate.description = Opusul porții de revărsare. Transportă materialele în față dacă benzile din stânga și dreapta sunt blocate. Nu poate fi folosită lângă alte porți. +block.mass-driver.description = Dispozitiv folosit pt transportul materialelor pe distanțe mari. Adună mai multe materiale și apoi le lansează până la un alt distributor în masă pe o rază mare. +block.mechanical-pump.description = Pompează lichide din mediul înconjurător. Nu necesită electricitate. +block.rotary-pump.description = Pompează lichide din mediul înconjurător. Necesită electricitate. +block.thermal-pump.description = Pompează lichide din mediul înconjurător. +block.conduit.description = Împinge lichidele în față. Folosit cu pompe și alte conducte. +block.pulse-conduit.description = Împinge lichidele în față. Transportă lichidele mai rapid și stochează mai mult decât conductele standard. +block.plated-conduit.description = Împinge lichidele în față. Nu acceptă lichide din lateral de la altceva în afară de conducte. Lichidul nu se varsă la exterior. +block.liquid-router.description = Acceptă lichide dintr-o direcție și le distribuie în alte 3 direcții în mod egal. Poate stoca o anumită cantitate de lichid. +block.liquid-tank.description = Stochează o mare cantitate de lichid și îl lasă să curgă prin toate conductele adiacente, similar unui router de lichid. +block.liquid-junction.description = Acționează ca un pod pt două conducte care se intersectează. +block.bridge-conduit.description = Transportă lichidele peste orice teren sau clădire. +block.phase-conduit.description = Transportă lichidele peste orice teren sau clădire. Poate fi mai lungă decât podul de conductă, dar necesită electricitate. block.power-node.description = Transmite electricitate către nodurile conectate. Nodul primește electricitate din sau oferă electricitate oricăror blocuri adiacente. block.power-node-large.description = Un nod electric avansat cu o rază mare. block.surge-tower.description = Un nod electric cu o rază extrem de mare dar cu mai puține conexiuni disponibile. -block.diode.description = Energia din baterii poate trece prin acest bloc doar într-o direcție, dar doar dacă o parte are mai puțină energie stocată. +block.diode.description = Transportă energia din baterii într-o direcție, dar doar dacă partea cealaltă are mai puțină energie stocată. block.battery.description = Stochează electricitatea pt rezerve atunci când există un surplus în rețea. Oferă electricitate atunci când există un deficit. -block.battery-large.description = Stochează mai multă electricitate decât bateria standard. +block.battery-large.description = Stochează electricitatea pt rezerve atunci când există un surplus în rețea. Oferă electricitate atunci când există un deficit. Capacitate mai mare decât cea a bateriei obișnuite. block.combustion-generator.description = Generează electricitate arzând materiale inflamabile, precum cărbunele. block.thermal-generator.description = Generează electricitate atunci când este plasat în locuri calde. -block.steam-generator.description = Un generator de combustie avansat. Mai eficient, dar necesită apă pt a genera abur. +block.steam-generator.description = Generează electricitate arzând materiale inflamabile și convertind apa în abur. block.differential-generator.description = Generează mari cantități de electricitate. Utilizează diferența de temperatură dintre criofluid și piratită arzând. -block.rtg-generator.description = Un generator simplu pe care te poți baza. Folosește căldura materialelor radioactive care se dezintegrează pt a produce încet electricitate. +block.rtg-generator.description = Folosește căldura materialelor radioactive care se dezintegrează pt a produce încet electricitate. block.solar-panel.description = Oferă o cantitate mică de energie solară. -block.solar-panel-large.description = O versiune cu mult mai eficientă a panoului solar standard. +block.solar-panel-large.description = Oferă o cantitate mică de energie solară. Mai eficient decât panoul solar standard. block.thorium-reactor.description = Generează mari cantități de electricitate din toriu. Necesită răcire constantă. Explodează violent dacă i se oferă cantități insuficiente de răcitor. Electricitatea produsă depinde de cât de plin e, cu electricitatea de bază produsă la capacitate maximă. -block.impact-reactor.description = Un generator avansat, capabil să creeze cantități masive de electricitate la eficiență maximă. Are nevoie de o cantitate de electricitate pt a începe procesul. -block.mechanical-drill.description = Un burghiu ieftin. Odată plasat pe blocurile corezpunzătoare, minează încet materiale. Capabil să mineze materiale de bază. +block.impact-reactor.description = Crează cantități masive de electricitate la eficiență maximă. Are nevoie de o cantitate de electricitate pt a începe procesul. +block.mechanical-drill.description = Odată plasat pe un minereu, minează încet materialele. Capabil să mineze materiale de bază. block.pneumatic-drill.description = Un burghiu îmbunătățit, capabil să mineze titan. Minează mai rapid decât burghiul mecanic. block.laser-drill.description = Poate mina mai rapid prin tehnologia bazată pe laser, dar necesită electricitate. Poate mina toriu. block.blast-drill.description = Cel mai bun burghiu. Necesită cantități mari de electricitate. block.water-extractor.description = Extrage apă din pământ. Folosit în locații unde apa de suprafață nu este disponibilă. -block.cultivator.description = Cultivă mici concentrații de spori din atmosferă în păstăi pregătite pt procesare industrială. +block.cultivator.description = Cultivă micile concentrații atomsferice de spori în păstăi de spori. +block.cultivator.details = Tehnologie recuperată. Folosit pt a produce cantități masive de biomasă cât de eficient posibil. Posibil să fie incubatorul inițial al sporilor care acoperă acum Serpulo. block.oil-extractor.description = Folosește mari cantități de electricitate, nisip și apă pt a extrage petrol. -block.core-shard.description = Prima versiune a capsulei nucleice. Odată distrusă, orice contact cu regiunea se pierde. Nu lăsa asta să se întâmple. -block.core-foundation.description = A doua versiune a nucleului. Mai bine armată. Stochează mai multe resurse. -block.core-nucleus.description = A treia și ultima versiune a capsulei nucleice. Extrem de bine armată. Stochează mari cantități de resurse. -block.vault.description = Stochează o mare cantitate de materiale de orice tip. Un bloc descărcător poate fi folosit pt a lua obiecte din seif. -block.container.description = Stochează o mică cantitate de materiale de orice tip. Un bloc descărcător poate fi folosit pt a lua obiecte din container. -block.unloader.description = Descarcă materialele din orice bloc din apropiere, mai puțin cele de transport. Tipul materialului de descărcat poate fi schimbat. Click pe descărcător. -block.launch-pad.description = Lansează grămezi de materiale fără a fi nevoie să lansezi nucleul. -block.launch-pad-large.description = O versiune mai bună a platformei de lansare. Stochează mai multe materiale. Lansează mai frecvent. -block.duo.description = O armă mică, ieftină. Util împotriva unităților de artilerie. -block.scatter.description = O armă esențială anti aeronave. Aruncă bucățele de plumb, fier vechi sau metasticlă către inamici. -block.scorch.description = Arde orice artilerie inamică din apropiere. Mai eficient la distanță mică. -block.hail.description = O armă anti-artilerie mică, care trage la mari distanțe. -block.wave.description = O armă medie. Trage cu lichid către inamici. Stinge focul automat când este alimentată cu apă. -block.lancer.description = O armă anti-artilerie medie, cu laser. Se încarcă și trage cu lasere puternice de electricitate. -block.arc.description = O armă electrică cu o rază de acțiune mică. Trage cu mici lasere de electricitate către inamici. -block.swarmer.description = O armă medie cu rachete. Atacă atât artileria cât și navele inamice. Trage cu rachete cu radar. -block.salvo.description = O versiune mai mare, mai avansată a armei Duo. Trage salve rapide de gloanțe către inamici. -block.fuse.description = O armă șrapnel mare cu rază de acțiune mică. Trage trei raze de gloanțe care găuresc scuturile inamicilor din apropiere. -block.ripple.description = O armă de artilerie extrem de puternică. Lovește grămezi de bucăți de material înspre inamici pe distanțe mari. -block.cyclone.description = O mare armă anti-artilerie și anti-aer. Trage cu grămezi explozive de material către ddunitățile inamice. -block.spectre.description = O armă masivă cu două țevi. Trage cu gloanțe mari care găuresc armurile țintelor aeriene și artileriei. -block.meltdown.description = O armă cu laser masivă. Trage cu un laser continuu la inamicii din apropiere. Necesită răcitor pt a opera. +block.core-shard.description = Nucleul bazei. Odată distrus, sectorul e pierdut. +block.core-shard.details = Prima versiune. Compact. Autoreprodus. Echipat cu propulsoare de unică folosință. Nu e făcut pt călătorii interplanetare. +block.core-foundation.description = Nucleul bazei. Bine armat. Stochează mai multe resurse decât nucleul Shard. +block.core-foundation.details = A doua versiune. +block.core-nucleus.description = Nucleul bazei. Extrem de bine armat. Stochează cantități masive de resurse. +block.core-nucleus.details = A treia și ultima versiune. +block.vault.description = Stochează o mare cantitate de materiale de orice tip. Conținutul poate fi recuperat folosind un descărcător. +block.container.description = Stochează o mică cantitate de materiale de orice tip. Conținutul poate fi recuperat folosind un descărcător. +block.unloader.description = Descarcă materialele din orice bloc din apropiere, mai puțin cele de transport. +block.launch-pad.description = Lansează grămezi de materiale către sectoarele selectate. +block.duo.description = Trage cu gloanțe alternante către inamici. +block.scatter.description = Trage cu bucățele de plumb, fier vechi sau metasticlă către aeronavele inamice. +block.scorch.description = Arde orice artilerie inamică din apropiere. Foarte eficient la distanță mică. +block.hail.description = Trage cu mici capsule către artileria inamică pe distanțe lungi. +block.wave.description = Trage jeturi de lichid către inamici. Stinge focul automat când este alimentată cu apă. +block.lancer.description = Se încarcă și trage cu lasere puternice de electricitate. +block.arc.description = Trage cu mici lasere de electricitate către artileria inamică. +block.swarmer.description = Trage cu rachete cu radar către inamici. +block.salvo.description = Trage salve rapide de gloanțe către inamici. +block.fuse.description = Trage trei raze de gloanțe care penetrează scuturile inamicilor din apropiere. +block.ripple.description = Lovește cu capsule către inamici pe distanțe mari. +block.cyclone.description = Trage cu grămezi explozive de material către unitățile inamice din apropiere. +block.spectre.description = Trage cu gloanțe mari care penetrează scuturile inamicilor din apropiere. +block.meltdown.description = Se încarcă și trage cu un laser continuu la inamicii din apropiere. Necesită răcitor pt a opera. block.repair-point.description = Repară încontinuu cea mai deteriorată unitate din vecinătate. -block.segment.description = Deteriorează și distruge proiectilele din apropiere. Laserele nu sunt afectate. \ No newline at end of file +block.segment.description = Deteriorează și distruge proiectilele din apropiere. Laserele nu sunt afectate. +block.parallax.description = Trage cu o rază tractoare care atrage aeronavele inamice, deteriorându-le. +block.tsunami.description = Trage jeturi puternice de lichid către inamici. Stinge focul automat când este alimentată cu apă. +block.silicon-crucible.description = Rafinează silicon din nisip și cărbune, folosind piratită ca sursă adițională de cărbune. Mai eficient când e plasat în locuri calde. +block.disassembler.description = Separă zgura în componentele sale minerale exotice. Eficiență mică. Poate produce toriu. +block.overdrive-dome.description = Grăbește blocurile din apropiere. Necesită fibră-fază și silicon pt a opera. +block.payload-conveyor.description = Mișcă încărcături mari, cum ar fi unitățile militare din fabrici. +block.payload-router.description = Distribuie încărcătura primită în 3 direcții diferite. +block.command-center.description = Controlează comportamentul unităților militare folosind diverse comenzi. +block.ground-factory.description = Produce unități de artilerie. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. +block.air-factory.description = Produce unități aeriene. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. +block.naval-factory.description = Produce unități navale. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. +block.additive-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel doi. +block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel trei. +block.exponential-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel patru. +block.tetrative-reconstructor.description =Îmbunătățește unitățile primite, tranformându-le în unități de ltimă generație: nivelul cinci. +block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Statusul său poate fi citit și controlat de procesoarele logice. +block.micro-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. +block.logic-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât microprocesorul. +block.hyper-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât procesorul logic. +block.memory-cell.description = Stochează informație pt un procesor. +block.memory-bank.description = Stochează informație pt un procesor. Capacitate mare. +block.logic-display.description = Afișează grafica transmisă de un procesor logic. +block.large-logic-display.description = Afișează grafica transmisă de un procesor logic. +block.interplanetary-accelerator.description = Un turn masiv cu o armă railgun electromagnetică. Accelerează nucleele la viteză cosmică pt lansare interplanetară. + +unit.dagger.description = Trage cu gloanțe standard către toți inamicii din apropiere. +unit.mace.description = Trage cu jeturi de flacără aprinsă către toți inamicii din apropiere. +unit.fortress.description = Trage cu gloanțe de artilerie către artileria inamică pe distanțe lungi. +unit.scepter.description = Trage cu un baraj de gloanțe încărcate către toți inamicii din apropiere. +unit.reign.description = Trage cu un baraj de gloanțe masive care penetrează scuturile tuturor inamicilor din apropiere. +unit.nova.description = Trage cu mici lasere care deteriorează inamicii și repară structurile aliate. Poate zbura. +unit.pulsar.description = Trage cu lasere electrice care deteriorează inamicii și repară structurile aliate. Poate zbura. +unit.quasar.description = Trage cu lasere electrice care deteriorează inamicii și repară structurile aliate. Poate zbura. Echipat cu un scut. +unit.vela.description = Trage cu un laser masiv, continuu, inflamabil care deteriorează inamicii și repară structurile aliate. Poate zbura. +unit.corvus.description = Trage cu e explozie masivă de lasere care deteriorează inamicii și repară structurile aliate. Poate merge peste majoritatea terenurilor. +unit.crawler.description = Aleargă către inamici și se autodistruge, cauzând o explozie. +unit.atrax.description = Trage cu globuri de zgură care slăbesc artileria inamică. Poate merge peste majoritatea terenurilor. +unit.spiroct.description = Trage cu lasere care apropie inamicii, autoreparându-se în acest proces. Poate merge peste majoritatea terenurilor. +unit.arkyid.description = Trage cu lasere mari care apropie inamicii, autoreparându-se în acest proces. Poate merge peste majoritatea terenurilor. +unit.toxopid.description = Trage cu capsule electrice mari și lasere care penetrează scuturile inamice. Poate merge peste majoritatea terenurilor. +unit.flare.description = Trage cu gloanțe standard la artileria inamică din apropiere. +unit.horizon.description = Aruncă grămezi de bombe peste artileria inamică. +unit.zenith.description = Trage cu salve de rachete către inamicii din apropiere. +unit.antumbra.description = Trage cu un baraj de gloanțe către inamicii din apropiere. +unit.eclipse.description = Trage cu un baraj de grămezi de material și două lasere care penetrează scuturile tuturor inamicilor din apropiere. +unit.mono.description = Minează automat cupru și plumb, depozitându-le în nucleu. +unit.poly.description = Reconstruiește automat structurile deteriorate și asistă alte unități la construire. +unit.mega.description = Repară automat structurile deteriorate. Capabilă să care blocuri și mici unități de artilerie. +unit.quad.description = Aruncă bombe mari peste artileria inamică, reparând structurile aliate și deteriorând inamicii. Capabilă să care unități de artilerie de dimensiuni medii. +unit.oct.description = Protejează aliații din apropiere cu scutul său care se regenerează. Capabilă să care majoritatea unităților de artilerie. +unit.risso.description = Trage un baraj de rachete și gloanțe către toți inamicii din apropiere. +unit.minke.description = Trage cu capsule și gloanțe standard către artileria inamică din apropiere. +unit.bryde.description = Trage cu capsule de artilerie și rachete către inamici pe distanțe lungi. +unit.sei.description = Trage cu un baraj de rachete și gloanțe care penetrează scuturile inamicilor. +unit.omura.description = Trage cu un railgun cu gloanțe care penetrează scuturile inamice pe distanțe lungi. Construiește unități Flare. +unit.alpha.description = Apără nucleul Shard de inamici. Construiește structuri. +unit.beta.description = Apără nucleul Foundation de inamici. Construiește structuri. +unit.gamma.description = Apără nucleul Core de inamici. Construiește structuri. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 8d1f0e91ac..7de0bffa31 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -761,7 +761,7 @@ category.power = Энергия category.liquids = Жидкости category.items = Предметы category.crafting = Ввод/Вывод -category.shooting = Стрельба/Действие +category.function = Действие category.optional = Дополнительные улучшения setting.landscape.name = Только альбомный (горизонтальный) режим setting.shadows.name = Тени diff --git a/core/assets/bundles/bundle_sv.properties b/core/assets/bundles/bundle_sv.properties index 8d3942eccb..12c3e84a7b 100644 --- a/core/assets/bundles/bundle_sv.properties +++ b/core/assets/bundles/bundle_sv.properties @@ -16,19 +16,19 @@ link.suggestions.description = Föreslå nya funktioner linkfail = Kunde inte öppna länken!\nLänken 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 skärmdump. -gameover = Game Over -gameover.pvp = The[accent] {0}[] team is victorious! +gameover = Spelet Slut +gameover.pvp = Laget [accent] {0}[] vann! highscore = [accent]Nytt rekord! copied = Kopierad. indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.notready = Denna del av spelet är iunte färdig ännu load.sound = Ljud load.map = Kartor load.image = Bilder load.content = Innehåll load.system = System -load.mod = Mods +load.mod = Moddar load.scripts = Scripts be.update = En ny beta version är tillgänglig: @@ -55,6 +55,7 @@ schematic.saved = Schematic sparad. schematic.delete.confirm = Den här schematicen kommer bli ytterst borttagen. schematic.rename = Döp om Schematic schematic.info = {0}x{1}, {2} block +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Besegrade vågor:[accent] {0} stat.enemiesDestroyed = Besegrade fiender:[accent] {0} @@ -97,24 +98,23 @@ uploadingcontent = Laddar upp innehåll uploadingpreviewfile = Laddar upp förhandsgranskningsfil committingchanges = Comitting Changes done = Klar -feature.unsupported = Your device does not support this feature. +feature.unsupported = Din enhet stödjer inte denna funktion. -mods.alphainfo = Kom ihåg att mods är i alpha, och[scarlet] kan vara väldigt buggiga[].\nReport any issues you find to the Mindustry GitHub or Discord. -mods.alpha = [accent](Alpha) -mods = Mods -mods.none = [lightgray]No mods found! +mods.alphainfo = Kom ihåg att moddar är i alpha, och[scarlet] kan vara väldigt buggiga[].\nReport any issues you find to the Mindustry GitHub or Discord. +mods = Moddar +mods.none = [lightgray]Hittar inga Moddar! mods.guide = Modding Guide mods.report = Report Bug mods.openfolder = Open Mod Folder mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reloadexit = Spelat kommer nu att starta om, för att ladda om moddarna. mod.display = [gray]Mod:[orange] {0} -mod.enabled = [lightgray]Enabled -mod.disabled = [scarlet]Disabled -mod.disable = Disable +mod.enabled = [lightgray]Aktiverad +mod.disabled = [scarlet]Inaktiverad +mod.disable = Inaktivera mod.content = Content: -mod.delete.error = Unable to delete mod. File may be in use. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} +mod.delete.error = Kunde inte ta bort modden. Filen kanske används. +mod.requiresversion = [scarlet]Kräver som minst version: [accent]{0} mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) mod.missingdependencies = [scarlet]Missing dependencies: {0} mod.erroredcontent = [scarlet]Content Errors @@ -123,10 +123,10 @@ mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affec 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.file = Import File -mod.import.github = Import GitHub Mod +mod.reloadrequired = [scarlet]Omstart krävs +mod.import = Importera Mod +mod.import.file = Importera Fil +mod.import.github = Importera GitHub Mod mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! 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. @@ -139,7 +139,7 @@ mod.scripts.disable = Your device does not support mods with scripts. You must d about.button = Om name = Namn: noname = Välj ett[accent] namn[] först. -planetmap = Planet Map +planetmap = Planet Karta launchcore = Launch Core filename = Filnamn: unlocked = Nytt innehåll upplåst! @@ -169,14 +169,14 @@ 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.kicked.serverRestarting = Servern startar om. 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. -hostserver = Host Multiplayer Game +hostserver = Hosta Multiplayer Spel invitefriends = Invite Friends -hostserver.mobile = Host\nGame -host = Host +hostserver.mobile = Hosta\nSpel +host = Hosta hosting = [accent]Öppnar server... hosts.refresh = Refresh hosts.discovering = Discovering LAN games @@ -256,7 +256,7 @@ save.mode = Gamemode: {0} save.date = Last Saved: {0} save.playtime = Speltid: {0} warning = Varning. -confirm = Confirm +confirm = Bekräfta delete = Radera view.workshop = View In Workshop workshop.listing = Edit Workshop Listing @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Våg {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Våg om {0} wave.waveInProgress = [lightgray]Wave in progress waiting = [lightgray]Väntar... waiting.players = Väntar på spelare... wave.enemies = [lightgray]{0} Fiender kvarvarande wave.enemy = [lightgray]{0} Fiende kvar +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Ladda bild saveimage = Spara bild unknown = Okänd @@ -328,6 +331,7 @@ editor.generation = Generering: editor.ingame = Edit In-Game editor.publish.workshop = Publish On Workshop editor.newmap = New Map +editor.center = Center workshop = Workshop waves.title = Vågor waves.remove = Ta bort @@ -416,6 +420,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Brus filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Malmmedian @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Block filter.option.floor = Golv filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Vägg filter.option.ore = Malm filter.option.floor2 = Secondary Floor @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Best Wave: {0} -launch = < LAUNCH > launch.text = Launch -launch.title = Launch Successful -launch.next = [lightgray]next opportunity at wave {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout loadout = Loadout @@ -512,27 +512,33 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch +sectors.unexplored = [lightgray]Oupptäckt +sectors.resources = Resurser: +sectors.production = Produktion: +sectors.stored = Lagrade: +sectors.resume = Återuppta +sectors.launch = Skjuta upp sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Byt namn på sektor +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest +sector.craters.name = Kratrarna +sector.frozenForest.name = Fryst skog sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +sector.stainedMountains.name = Färgade berg +sector.desolateRift.name = Ödslig rift +sector.nuclearComplex.name = Kärnkraftsproduktionskomplex +sector.overgrowth.name = Överväxt +sector.tarFields.name = Tjärfält +sector.saltFlats.name = Saltöken +sector.fungalPass.name = Svamppass sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. @@ -547,7 +553,7 @@ sector.nuclearComplex.description = A former facility for the production and pro sector.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. settings.language = Språk -settings.data = Game Data +settings.data = Spel Data settings.reset = Återställ till Standardvärden settings.rebind = Byt settings.resetKey = Reset @@ -560,6 +566,10 @@ settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done 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.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Pausat > clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = Info error.title = [crimson]An error has occured error.crashtitle = An error has occured unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Inmatning stat.output = Utmatning stat.booster = Booster -stat.tiles = Required Tiles +stat.tiles = Nödvändiga Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Power Capacity stat.powershot = Power/Shot stat.damage = Skada @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Power Use stat.powerdamage = Power/Damage stat.itemcapacity = Item Capacity +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time @@ -613,6 +626,28 @@ stat.reload = Shots/Second stat.ammo = Ammunition stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Bättre Borr Krävs bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Power: {0}/s bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} bar.poweroutput = Power Output: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Föremål: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Build Progress bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] skada bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary @@ -642,12 +680,15 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = power units/second unit.liquidsecond = liquid units/second unit.itemssecond = items/second @@ -670,7 +711,7 @@ category.power = Energi category.liquids = Vätskor category.items = Föremål category.crafting = Inmatning/Utmatning -category.shooting = Skjutning +category.function = Function category.optional = Optional Enhancements setting.landscape.name = Lock Landscape setting.shadows.name = Skuggor @@ -679,7 +720,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animerat Vatten setting.animatedshields.name = Animerade Sköldar setting.antialias.name = Antialias[lightgray] (requires restart)[] @@ -691,7 +731,7 @@ setting.touchscreen.name = Touchscreen Controls setting.fpscap.name = Begränsade FPS setting.fpscap.none = Inga setting.fpscap.text = {0} FPS -setting.uiscale.name = UI Scaling[lightgray] (require restart)[] +setting.uiscale.name = UI Scaling[lightgray] (requires restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = Träning setting.difficulty.easy = Lätt @@ -713,7 +753,6 @@ setting.fullscreen.name = Fullskärm setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart) setting.fps.name = Show FPS setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixellera[lightgray] (disables animations) setting.minimap.name = Visa Minikarta @@ -822,6 +861,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Vågtimer rules.waves = Vågor rules.attack = Attack Mode @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -856,15 +897,16 @@ rules.weather.duration = Duration: content.item.name = Föremål content.liquid.name = Vätskor -content.unit.name = Units +content.unit.name = Enheter content.block.name = Block + item.copper.name = Koppar item.lead.name = Bly item.coal.name = Kol item.graphite.name = Grafit item.titanium.name = Titan item.thorium.name = Torium -item.silicon.name = Silikon +item.silicon.name = Kisel item.plastanium.name = Plast item.phase-fabric.name = Phase Fabric item.surge-alloy.name = Surge Alloy @@ -879,23 +921,6 @@ liquid.slag.name = Slag liquid.oil.name = Olja liquid.cryofluid.name = Cryofluid -item.explosiveness = [lightgray]Explosiveness: {0}% -item.flammability = [lightgray]Flammability: {0}% -item.radioactivity = [lightgray]Radioactivity: {0}% - -unit.health = [lightgray]Health: {0} -unit.speed = [lightgray]Fart: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Heat Capacity: {0} -liquid.viscosity = [lightgray]Viskositet: {0} -liquid.temperature = [lightgray]Temperatur: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Sandbumling block.grass.name = Gräs block.slag.name = Slag +block.space.name = Space block.salt.name = Salt block.salt-wall.name = Salt Wall block.pebbles.name = Pebbles @@ -981,6 +1007,7 @@ block.darksand-water.name = Mörksandvatten block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Issnö block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = Energikälla block.unloader.name = Urladdare block.vault.name = Valv block.wave.name = Våg +block.tsunami.name = Tsunami block.swarmer.name = Svärmare block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Båge block.rtg-generator.name = RTG Generator block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blåa team.crux.name = röda @@ -1302,4 +1332,4 @@ block.cyclone.description = A large anti-air and anti-ground turret. Fires explo 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.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index b86d8e7182..930887461d 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -7,21 +7,21 @@ link.reddit.description = ซับเรดดิท (subreddit) ของ Mind link.github.description = source code ของเกม link.changelog.description = รายการที่อัปเดต 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.suggestions.description = Suggest new features +link.trello.description = Trello board ทางการสำหรับฟีเจอร์ต่างๆที่วางแผนไว้ +link.itch.io.description = หน้าเว็บ itch.io สำหรับดาวน์โหลดบน PC +link.google-play.description = หน้า Google Play store ของเกม +link.f-droid.description = หน้าแคตาลอค F-Droid ของเกม +link.wiki.description = วิกิของ Mindustry อย่างเป็นทางการ +link.suggestions.description = เสนอฟีเจอร์ใหม่ linkfail = ไม่สามารถเปิดลิ้งค์ได้\nคัดลอก URL ลงในคลิปบอร์ดแล้ว screenshot = Screenshot บันทึกที่ {0} screenshot.invalid = แมพใหญ่เกินไป, หน่วยความจำอาจจะไม่พอสำหรับ screenshot. -gameover = Game Over +gameover = จบเกม gameover.pvp = ทีมที่ชนะคือทีม[accent] {0}[]! highscore = [accent]คะแนนสูงสุดใหม่! copied = คัดลอกแล้ว. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]เวอร์ชั่น v6[] ณ ขณะนี้อยู่ในช่วง [accent]alpha[].\n[lightgray]นั้นหมายถึง:[]\n[scarlet]- เคมเปญไม่ยังเสร็จสมบูรณ์ []\n- เนื้อหาบางอย่างขาดหาย\n - [scarlet]AI ของยูนิต[] ส่วนใหญ่ทำงานได้แบบไม่สมบูรณ์\n- ยูนิตส่วนมากยังไม่เสร็จ\n- ที่อย่างที่เห็นอาจเปลี่ยนแปลงได้หรือลบออกโดยสิ้นเชิงในอนาคต\n\nแจ้งบัคหรือปัญหาที่พบเจอได้ที่ [accent]Github[]. +indev.notready = ส่วนนี้ของเกมยังไม่พร้อมให้ใช้งาน load.sound = เสียง load.map = แมพ @@ -31,7 +31,7 @@ load.system = ระบบ load.mod = มอด load.scripts = สคริปต์ -be.update = A new Bleeding Edge build is available: +be.update = เวอร์ชั้นล่าสุดออกแล้ว: be.update.confirm = ดาวน์โหลดเวอร์ชั่นใหม่แล้วรีสตาร์ทเลยไหม? be.updating = กำลังอัปเดต... be.ignore = ยกเลิก @@ -42,7 +42,7 @@ schematic = แผนผัง schematic.add = กำลังบันทึกแผนผัง... schematics = แผนผัง schematic.replace = มีแผนผังที่ใช้ชื่อนี้แล้ว. แทนที่เลยไหม? -schematic.exists = A schematic by that name already exists. +schematic.exists = มีแผนผังในชื่อนั้นอยู่แล้ว schematic.import = นำเข้าแผนผัง... schematic.exportfile = ส่งออกไฟล์ schematic.importfile = นำเข้าไฟล์ @@ -55,6 +55,7 @@ schematic.saved = บันทึกแผนผังแล้ว. schematic.delete.confirm = แผนผังนี้จะถูกกำจัดให้หมดสิ้นโดยสิ้นเชิง schematic.rename = เปลี่ยนชื่อของแผนผัง schematic.info = {0}x{1}, {2} บล็อค +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = จำนวนคลื่น(รอบ)ที่กำจัดได้:[accent] {0} stat.enemiesDestroyed = จำนวนศัตรูที่ทำลายไปได้:[accent] {0} @@ -62,17 +63,17 @@ stat.built = จำนวนสิ่งก่อสร้างที่สร stat.destroyed = จำนวนสิ่งก่อสร้างของศัตรูที่ทำลายไปได้:[accent] {0} stat.deconstructed = จำนวนสิ่งก่อสร้างที่ถูกทำลายไป:[accent] {0} stat.delivered = ทรัพยากรที่ส่งไปได้: -stat.playtime = Time Played:[accent] {0} +stat.playtime = ระยะเวลาที่เล่นไป:[accent] {0} stat.rank = ระดับ: [accent]{0} -globalitems = [accent]Global Items +globalitems = [accent]ไอเท็มโกลบอล map.delete = คุณแน่ใจหรือว่าจะลบแมพชื่อ "[accent]{0}[]"? level.highscore = คะแนนสูงสุด: [accent]{0} level.select = เลือกด่าน level.mode = เกมโหมด: coreattack = < แกนกลางกำลังถูกโจมตี! > nearpoint = [[ [scarlet]ออกจากดรอปพอยท์ด่วน IMMEDIATELY[] ]\nการทำลายล้างกำลังใกล้เข้ามา -database = ฐานข้อมูหลัง +database = ฐานข้อมูลหลัก savegame = เซฟเกม loadgame = โหลดเกม joingame = เข้าร่วมเกม @@ -90,69 +91,68 @@ maps.browse = ค้นหาแมพ continue = ต่อ maps.none = [lightgray]ไม่มีแมพ! invalid = ไม่ถูกต้อง -pickcolor = Pick Color +pickcolor = เลือกสี preparingconfig = กำลังเตรียม Config -preparingcontent = กำลังเตรียม Content -uploadingcontent = กำลังอัปโหลด Content +preparingcontent = กำลังเตรียมเนื้อหา +uploadingcontent = กำลังอัปโหลดเนื้อหา uploadingpreviewfile = กำลังอัปโหลดไฟล์พรีวิว -committingchanges = Comitting Changes +committingchanges = กำลังทำการเปลี่ยนแปลง done = เรียบร้อย feature.unsupported = อุปกรณ์ของคุณไม่รองรับฟีเจอร์นี้ mods.alphainfo = จำไว้ว่ามอดนั้นยังอยู่ในขั้น alpha และ[scarlet] อาจจะมีบัค[].\nโปรดรายงานปัญหาที่คุณพบใน Github ของ Mindustry หรือ ในเซิฟเวอร์ Discord -mods.alpha = [accent](Alpha) mods = มอด mods.none = [lightgray]ไม่พบมอด! mods.guide = คู่มือการทำมอด mods.report = รายงานบัค mods.openfolder = เปิดมอดโฟลเดอร์ -mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reload = โหลดใหม่ +mods.reloadexit = เกมจะออกเพื่อจะโหลดมอด mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]เปิดใช้งาน mod.disabled = [scarlet]ปิดใช้งาน mod.disable = ปิดใช้งาน -mod.content = Content: +mod.content = เนื้อหา: mod.delete.error = ไม่สามารถลบมอดได้. ไฟล์อาจอยู่ในระหว่างการใช้งาน. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.requiresversion = [scarlet]เวอร์ชั่นเกมขั้นต่ำที่ต้องการ: [accent]{0} +mod.outdated = [scarlet]ไม่สามารถใช้ได้ในเวอร์ชั่น V6 (ไม่มี minGameVersion: 105) 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.erroredcontent = [scarlet]เนื้อหาผิดพลาด +mod.errors = มีข้อผิดพลาดเกิดขึ้นระหว่าโหลดเนื้อหา +mod.noerrorplay = [scarlet]คุณมีมอดที่มีข้อผิดพลาด.[] กรุณาปิดมอดนั้นๆหรือแก้ไขข้อผิดพลาดก่อนที่จะเล่น mod.nowdisabled = [scarlet]มอด '{0}' ไม่มี dependencies:[accent] {1}\n[lightgray]จำเป็นต้องโหลดมอดพวกนี้ก่อน\nมอดนี้จะถูกปิดใช้งานโดยอัตโนมัติ mod.enable = เปิดใช้งาน mod.requiresrestart = เกมจะปิดลงเพื่อใส่มอด mod.reloadrequired = [scarlet]จำเป็นต้องรีโหลด mod.import = นำเข้ามอด -mod.import.file = Import File +mod.import.file = นำเข้าไฟล์ mod.import.github = นำเข้ามอดจาก Github -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. +mod.jarwarn = [scarlet]มอดไฟล์ JAR นั้นค่อนข้างไม่ปลอดภัย.[]\nกรุณาเช็คให้แน่ใจว่าคุณนำเข้ามอดนี้จะแหล่งที่เชื่อถือได้! +mod.item.remove = ไอเทมนี้เป็นส่วนหนึ่งของมอด[accent] '{0}'[]. หากต้องการนำออก กรุณาถอดการติดตั้งมอดนั้น mod.remove.confirm = มอดนี้จะถูกลบ mod.author = [lightgray]ผู้สร้าง:[] {0} -mod.missing = เซฟนี้มีมอดที่คุณอัปเดตหรือไม่ได้ติดตั้งแล้ว. อาจทำให้เซฟเสีย. คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]Mods:\n{0} +mod.missing = เซฟนี้มีมอดที่คุณอัปเดตหรือไม่ได้ติดตั้งแล้ว. อาจทำให้เซฟเสีย. คุณแน่จะหรือว่าจะโหลดเซฟนี้?\n[lightgray]มอดที่ใช้:\n{0} mod.preview.missing = ก่อนที่จะนำมอดไปลงใน workshop, คุณต้องใส่รูปพรีวิวก่อน\nใส่รูปชื่อ[accent] preview.png[] ลงในโฟลเดอร์ของมอดแล้วลองอีกครั้ง mod.folder.missing = มอดที่อยู่ในรูปแบบโฟลเดอร์เท่านั้นที่สามารถลงใน workshop ได้\nunzip ไฟล์แล้วลบไฟล์ zip เก่า แล้วรีสตาร์ทเกมหรือรีโหลดมอด -mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. +mod.scripts.disable = เครื่องของคุณไม่รองรับมอดที่มี scripts. คุณจำเป็นต้องปิดมอดเหล่านี้ก่อนจึงจะสามารถเล่นได้. about.button = เกี่ยวกับ name = ชื่อ: noname = ใส่ชื่อ[accent] ผู้เล่น[] ก่อน. -planetmap = Planet Map -launchcore = Launch Core +planetmap = แผนที่ดาวเคราะห์ +launchcore = ส่ง Core filename = ชื่อไฟล์: -unlocked = content ใหม่ปลดล็อค! +unlocked = เนื้อหาใหม่ปลดล็อค! completed = [accent]สำเร็จ techtree = ความคืบหน้าในการวิจัย research.list = [lightgray]วิจัย: research = วิจัย researched = [lightgray]{0} วิจัยแล้ว. -research.progress = {0}% complete +research.progress = เสร็จแล้ว {0}% players = {0} ผู้เล่น players.single = {0} ผู้เล่น -players.search = search -players.notfound = [gray]no players found +players.search = ค้นหา +players.notfound = [gray]ไม่พบผู้เล่น server.closing = [accent]กำลังปิดเซิฟเวอร์... server.kicked.kick = คุณถูกเตะออกจากเซิฟเวอร์! server.kicked.whitelist = คุณไม่ได้อยู่ใน whitelisted @@ -168,8 +168,8 @@ server.kicked.nameInUse = มีคนที่ใช้ชืชื่อนี 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.kicked.gameover = จบเกม! +server.kicked.serverRestarting = เซิฟเวอร์กำลังเริ่มใหม่. 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 ผู้เล่นที่โฮสต์เซิฟเวอร์นั้นๆ. @@ -185,9 +185,9 @@ server.refreshing = กำลังรีเฟรชเซิฟเวอร์ hosts.none = [lightgray]ไม่พบเซิฟเวอร์ใน local! host.invalid = [scarlet]ไม่สามารถเชื่อมต่อกับโฮสต์ได้ -servers.local = Local Servers -servers.remote = Remote Servers -servers.global = Community Servers +servers.local = เซิฟเวอร์ Local +servers.remote = เซิฟเวอร์ Remote +servers.global = เซิฟเวอร์ Community trace = Trace ผู้เล่น/ แกะรอยผู้เล่น trace.playername = ชื่อผู้เล่น: [accent]{0} @@ -269,7 +269,7 @@ copylink = คัดลอกลิ้งค์ back = กลับ data.export = ส่งออกข้อมูล data.import = นำเข้าข้อมูล -data.openfolder = Open Data Folder +data.openfolder = เปิดโฟลเดอร์ข้อมูล data.exported = ข้อมูลส่งออกแล้ว data.invalid = นี่ไม่ใช่ข้อมูลเกมที่ถูกต้อง. data.import.confirm = การนำเข้าข้อมูลจากภายนอกจะเขียนทับข้อมูลเก่า[scarlet]ทั้งหมด[]\n[accent]และไม่สามารถย้อนกลับได้![]\n\nหลังจากที่นำข้อมูลแล้วเกมจะปิดลงโดยทันที @@ -278,18 +278,21 @@ quit.confirm.tutorial = คุณแน่ใจหรือว่าคุณ loading = [accent]กำลังโหลด... reloading = [accent]กำลังรีโหลดมอด... saving = [accent]กำลังเซฟ... -respawn = [accent][[{0}][] to respawn in core +respawn = [accent][[{0}]][]เพื่อเกิดใหม่ที่ core cancelbuilding = [accent][[{0}][]เพื่อเคลียแผน selectschematic = [accent][[{0}][]เพื่อเลือกและคัดลอก pausebuilding = [accent][[{0}][]เพื่อหยุดการสร้างชั่วคราว resumebuilding = [scarlet][[{0}][]เพื่อสร้างต่อ wave = [accent]Wave {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Wave ในอีก {0} wave.waveInProgress = [lightgray]Wave กำลังดำเนินการ waiting = [lightgray]กำลังรอ... waiting.players = รอผู้เล่น... wave.enemies = ศัตรูคงเหลือ [lightgray]{0} wave.enemy = ศัตรูคงเหลือ [lightgray]{0} +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = โหลดรูป saveimage = เซฟรูป unknown = ไม่ทราบ @@ -315,7 +318,7 @@ publish.error = การเผยแพร่ไอเท็มดังต่ steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0} editor.brush = แปรง -editor.openin = เปิดมน Editor +editor.openin = เปิดใน Editor editor.oregen = การเกิดของแร่ editor.oregen.info = การเกิดของแร่: editor.mapinfo = ข้อมูลของแมพ @@ -328,16 +331,17 @@ editor.generation = การเกิด: editor.ingame = แก้ไขในเกม editor.publish.workshop = เผยแพร่บน Workshop editor.newmap = แมพใหม่ +editor.center = Center workshop = Workshop waves.title = Waves waves.remove = ลบ -waves.never = +waves.never = <ไม่เคย> waves.every = ทุกๆ waves.waves = wave(s) waves.perspawn = ต่อสปาวน์ -waves.shields = shields/wave -waves.to = to -waves.guardian = Guardian +waves.shields = เกราะ/wave +waves.to = ถึง +waves.guardian = การ์เดียน waves.preview = พรีวิว waves.edit = แก้ไข... waves.copy = คัดลอกไปยังคลิปบอร์ด @@ -346,8 +350,8 @@ waves.invalid = waves ในคลิปบอร์ดไม่ถูกต้ waves.copied = คัดลอก Waves แล้ว waves.none = ไม่ได้กำหนดศัตรู\nwave layouts เปล่าจะถูกแทนที่โดย layout ค่าเริ่มต้นของเกม -wavemode.counts = counts -wavemode.totals = totals +wavemode.counts = จำนวน +wavemode.totals = ทั้งหมด wavemode.health = health editor.default = [lightgray]<ค่าเริ่่มต้น> @@ -415,8 +419,9 @@ toolmode.drawteams.description = วาดทีมแทนที่จะเ filters.empty = [lightgray]ไม่มีฟิลเตอร์! เพิ่มด้วยปุ่มด้านล่างนี้ filter.distort = บิดเบือน filter.noise = นอยส์ -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = เบือกที่เกิดศัตรู +filter.spawnpath = Path To Spawn +filter.corespawn = เลือก Core filter.median = เฉลี่ย filter.oremedian = เฉลี่ยแร่ filter.blend = ผสมผสาน @@ -436,10 +441,11 @@ filter.option.circle-scale = สเกลวงกลม filter.option.octaves = เลอะเลือน filter.option.falloff = หลุด filter.option.angle = มุม -filter.option.amount = Amount +filter.option.amount = จำนวน filter.option.block = บล็อค filter.option.floor = พื้น filter.option.flooronto = พื้น Target +filter.option.target = Target filter.option.wall = กำแพง filter.option.ore = แร่ filter.option.floor2 = พื้นชั้น 2 @@ -471,20 +477,14 @@ requirement.wave = ถึง Wave ที่ {0} ใน {1} requirement.core = ทำลาย Core ของศัตรูใน {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = เล่นต่อในโซน:\n[lightgray]{0} bestwave = [lightgray]Wave สูงสุด: {0} -launch = < ส่ง > -launch.text = Launch -launch.title = ส่งเรียบร้อย -launch.next = [lightgray]โอกาสครั้งหน้าที่ wave {0} -launch.unable2 = [scarlet]ไม่สามารถส่งได้[] -launch.confirm = นี่จะส่งทรัพยากรทั้งหมดใน core ของคุณ\nคุณจะไม่สามารถกลับมาที่ฐานนี้ได้อีก -launch.skip.confirm = ถ้าคุณข้ามตอนนี้, คุณจะไม่สามารถส่งจนกว่าจะถึง waves ต่อๆไป +launch.text = ส่ง +research.multiplayer = Only the host can research items. uncover = เปิดเผย configure = ตั้งค่า Loadout loadout = Loadout -resources = Resources -bannedblocks = Banned Blocks +resources = ทรัพยากร +bannedblocks = บล็อคต้องห้าม addall = เพิ่มทั้งหมด launch.destination = Destination: {0} configure.invalid = จำนวนต้อยู่ระหว่าง 0 ถึง {0}. @@ -508,19 +508,25 @@ error.io = Network I/O error. error.any = Unknown network error. error.bloom = ไม่สามารถเริ่มต้น bloom ได้\nอุปกรณ์ของคุณอาจไม่รองรับ -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = ฝน +weather.snow.name = หิมะ +weather.sandstorm.name = พายุทราย +weather.sporestorm.name = พายุสปอร์ +weather.fog.name = Fog -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select +sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ +sectors.resources = ทรัพยากร: +sectors.production = การผลิต: +sectors.stored = เก็บ: +sectors.resume = ทำต่อ +sectors.launch = ส่ง +sectors.select = เลือก sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -534,22 +540,22 @@ sector.tarFields.name = Tar Fields sector.saltFlats.name = Salt Flats sector.fungalPass.name = Fungal Pass -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.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. -sector.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. -sector.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. -sector.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. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.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. -sector.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. -sector.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. -sector.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. +sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง. ศัตรูมีน้อย. ทรัพยากรน้อยฃ.\nเก็บตะกั่วและทองแดงให้ได้มากที่สุด.\nแล้วไปต่อ. +sector.frozenForest.description = แม้แต่ที่นี่, ที่ที่อยู่ใกล้ภูเขา, สปอร์ก็ยังแพร่มาถึงที่นี่. อากาศที่เย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป.\n\nเริ่มต้นการใช้ไฟฟ้า. สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้ถ่าน. เรียนรู้ที่จะใช้เครื่องซ่อมแซม. +sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของ Salt Flats. สามารถพบทรัพยากรบางอย่างได้ที่นี่.\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่. ทำลาย core ของพวกมัน. อย่าให้มีอะไรเหลือ. +sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศนี้, ที่นี้เป็นอนุสรณ์ของสองคราม. ยึดพื้นที่นี่มา. เก็บทราย. เผากระจกเมต้า. ปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและแท่นขุดเจาะ. +sector.ruinousShores.description = ต่อจากของเสียต่างๆ, เป็นที่ตั้งของชายฝั่ง. ครั้งก่อน, ที่นี่เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง. ณ ตอนนี้แทบจะไม่เหลือแล้ว. มีเหลือแค่ระบบการป้องกันพื้นฐาน, ทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก.\nทำการขยายการสำรวจต่อไป. ค้นพบกับเทคโนโลยีอีกครั้ง. +sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา, ซึ่งยังไม่ถูกสปอร์แตะต้อง.\nขุดไทเทเนียมที่อุดมสมบูรณ์ในพื้นที่นี้. เรียนรู้ที่จะใช้มัน.\n\nมีศัตรูมากขึ้นในบริเวณนี้. อย่าปล่อยให้พวกมันปล่อยยูนิตที่แข็งแกร่งที่สุดของพวกมันออกมา. +sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช, ใกล้กับแหล่งกำเนิของสปอร์.\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่. สร้างยูนิตไททัน. ทำลายฐานซะ. แล้วนำสิ่งที่ถูกยึดไปกลับคืนมา. +sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน, อยู่ระหว่างภูเขาและทะเลทราย. หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดิบที่ใช้ได้.\nแม้ว่าจะถูกทิ้งร้าง, พื้นที่นี้ยังคงมีทัพของศัตรูอยู่ใกล้ๆ. อย่าประมาทกับพวกมัน.\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้. +sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก. ทรัพยากรมากมาย, แต่พื้นที่น้อย. ความเสี่ยงการโดนทำลายล้างสูง. ออกไปจากที่นี่ให้ไวที่สุด. อย่าถูกหลอกโดนระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ. +sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า, ถูกทำลายกลายเป็นซาก.\n[lightgray]วิจัยทอเรี่ยมและวิธีการใช้มัน.\n\nศัตรูในบริเวณนี้มีจำนวนมาก, ตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา. +sector.fungalPass.description = พื้นที่ระหว่างพื้นที่สูงและต่ำของภูเขา, พื้นที่นี้เต็มไปด้วยสปอร์. ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่.\nทำลายมันซะ.\nใช้ยูนิตเด็กเกอร์และครอว์เลอร์. ทำลาย core ทั้งสองซะ. settings.language = ภาษา settings.data = ข้อมูลเกม settings.reset = รีเซ็ตเป็นค่าเริ่มต้น -settings.rebind = Rebind +settings.rebind = แก้ไขปุ่ม settings.resetKey = Reset settings.controls = การควบคุม settings.game = เกม @@ -558,24 +564,30 @@ settings.graphics = กราฟิก settings.cleardata = เคลียร์ข้อมูลเกม... settings.clear.confirm = คุณแน่ใจหรือว่าจะเคลียร์ข้อมูลเกม?\nสิ่งที่ทำไปแล้วจะไม่สามารถย้อนกลับได้! settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ, แมพ, สิ่งที่ปลดล็อคแล้วและ keybinds.\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด? +settings.clearsaves = เคลียร์เซฟ +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< หยุดชั่วคราว > clear = เคลียร์ banned = [scarlet]แบน -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]ต้องการ captured sector yes = ใช่ no = ไม่ info.title = ข้อมูล error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น -unit.nobuild = [scarlet]Unit can't build +unit.nobuild = [scarlet]ยูนิตไม่สามารถสร้างได้ +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = นำเข้า stat.output = ส่งออก stat.booster = บูสเตอร์ -stat.tiles = Required Tiles +stat.tiles = ต้องการ Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = ความจุพลังงาน stat.powershot = หน่วยพลังงาน/นัด stat.damage = ดาเมจ @@ -585,15 +597,16 @@ stat.itemsmoved = ความเร็วเคลื่อนที่ stat.launchtime = เวลาระหว่างการส่ง stat.shootrange = ระยะยิง stat.size = ขนาด -stat.displaysize = Display Size +stat.displaysize = ขนาดที่โชว์ stat.liquidcapacity = จุของเหลว stat.powerrange = ระยะพลังงาน stat.linkrange = Link Range -stat.instructions = Instructions +stat.instructions = คำแนะนำ stat.powerconnections = จำนวนการเชื่อมต่อสูงสุด stat.poweruse = ใช้พลังงาน stat.powerdamage = หน่วยพลังงาน/ดาเมจ stat.itemcapacity = จุไอเท็ม +stat.memorycapacity = Memory Capacity stat.basepowergeneration = กำเนิดพลังงานพื้นฐาน stat.productiontime = เวลาที่ใช้ในการผลิต stat.repairtime = เวลาที่ใช้ในการซ่อมแซมให้สมบูรณ์ @@ -605,18 +618,40 @@ stat.boosteffect = แอฟเฟ็คของบูสต์ stat.maxunits = จำนวนยูนิตสูงสุด stat.health = เลือด stat.buildtime = เวลาในการสร้าง -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = ติดต่อกันสูงสุด stat.buildcost = ใช้ stat.inaccuracy = ความคลาดเคลื่อน stat.shots = นัด stat.reload = นัด/วินาที stat.ammo = กระสุน -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time +stat.shieldhealth = เลือดของเกราะ +stat.cooldowntime = เวลา Cooldown +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = จำเป็นต้องใช้เครื่องขุดที่ดีกว่า -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = ทรัพยากรหาย +bar.corereq = ฐาน Core ที่ต้องการ bar.drillspeed = ความเร็วขุด: {0}/s bar.pumpspeed = ความเร็วปั้ม: {0}/s bar.efficiency = ประสิทธิภาพ: {0}% @@ -624,10 +659,11 @@ bar.powerbalance = พลังงาน: {0}/s bar.powerstored = เก็บแล้ว: {0}/{1} bar.poweramount = พลังงาน: {0} bar.poweroutput = พลังงานออก: {0} +bar.powerlines = Connections: {0}/{1} bar.items = ไอเท็ม: {0} bar.capacity = ความจุ: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[ยูนิตถูกปิด] bar.liquid = ของเหลว bar.heat = ความร้อน bar.power = พลังงาน @@ -635,6 +671,8 @@ bar.progress = ความคืบหน้าในการสร้าง bar.input = นำเข้า bar.output = ส่งออก +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] ดาเมจ bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[stat] {1}[lightgray] ช่อง bullet.incendiary = [stat]ติดไฟ @@ -642,12 +680,15 @@ bullet.homing = [stat]ติดตาม bullet.shock = [stat]ช็อค bullet.frag = [stat]แตกออก bullet.knockback = [stat]{0}[lightgray] ดันกลับ +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]แช่แข็ง bullet.tarred = [stat]เปื้อนน้ำมัน bullet.multiplier = [stat]{0}[lightgray]x จำนวนกระสุนต่อ 1 ไอเท็ม bullet.reload = [stat]{0}[lightgray]x ความเร็วยิง unit.blocks = บล็อค +unit.blockssquared = blocks² unit.powersecond = หน่วยพลังงาน/วินาที unit.liquidsecond = หน่วยของเหลว/วินาที unit.itemssecond = ไอเท็ม/วินาที @@ -660,30 +701,29 @@ unit.persecond = /วินาที unit.perminute = /min unit.timesspeed = เท่าเร็วขึ้น unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = เลือดเกราะ unit.items = ไอเท็ม -unit.thousands = k -unit.millions = mil -unit.billions = b +unit.thousands = พัน +unit.millions = ล้าน +unit.billions = พันล้าน category.general = ทั่วไป category.power = พลังงาน category.liquids = ของเหลว category.items = ไอเท็ม category.crafting = นำเข้า/ส่งออก -category.shooting = การยิง +category.function = Function category.optional = การเพิ่มประสิทธิภาพทางเลือก setting.landscape.name = ล็อค Landscape แนวนอน setting.shadows.name = เงา setting.blockreplace.name = แนะนำบล็อคโดยอัตโนมัติ setting.linear.name = การกรองเชิงเส้น setting.hints.name = คำแนะนำ -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) +setting.flow.name = แสดงอัตราการไหลของทรัพยากร[scarlet] (รุ่นทดลอง) setting.buildautopause.name = หยุดสร้างชั่วคราวแบบอัตโนมัติ -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = แอนิเมชั่นน้ำ setting.animatedshields.name = แอนิเมชั่นเกราะ setting.antialias.name = Antialias[lightgray] (จำเป็นต้องรีสตาร์ท)[] -setting.playerindicators.name = Player Indicators +setting.playerindicators.name = ตัวบอกผู้เล่น setting.indicators.name = ตัวบอกศัตรู/พักพวก setting.autotarget.name = เล็งเป้าอัตโนมัติ setting.keyboard.name = การควบคุมแบบ เม้าส์+คีย์บอร์ด @@ -702,25 +742,24 @@ setting.difficulty.name = ระดับความยาก: setting.screenshake.name = การสั่นของจอ setting.effects.name = แสดงเอฟเฟ็ค setting.destroyedblocks.name = แสดงบล็อคที่ถูกทำลาย -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = แสดงสเตตัสของบล็อค setting.conveyorpathfinding.name = Pathfinding setting.sensitivity.name = ความไวของตัวควบคุม setting.saveinterval.name = ระยะห่าวระหว่างเซฟ setting.seconds = {0} วินาที -setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds +setting.blockselecttimeout.name = การหมดเวลาในการเลือกบล็อค +setting.milliseconds = {0} มิลลิวินาที setting.fullscreen.name = เต็มจอ setting.borderlesswindow.name = วินโดว์แบบไร้ขอบ[lightgray] (อาจจะต้องรีตาร์ท) setting.fps.name = แสดง FPS และ Ping -setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys +setting.smoothcamera.name = กล้องแบบสมูท setting.vsync.name = VSync setting.pixelate.name = Pixelate[lightgray] (ปิดใช้งานแอนิเมชั่น) setting.minimap.name = แสดงมินิแมพ -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = แสดงไอเท็มใน Core (ยังไม่เสร็จสมบูรณ์) setting.position.name = แสดงตำแหน่งของผู้เล่น setting.musicvol.name = ระดับเสียงเพลง -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = แสดงชั้นบรรยากาศของดาวเคราะห์ setting.ambientvol.name = ระดับเสียงล้อมรอบ setting.mutemusic.name = ปิดเพลง setting.sfxvol.name = ระดับเสียง SFX @@ -728,10 +767,10 @@ setting.mutesound.name = ปิดเสียง setting.crashreport.name = ส่งรายงานการแครชแบบไม่ระบุตัวตน setting.savecreate.name = สร้างเซฟโดยอัตโนมัติ setting.publichost.name = การมองเห็นเซิฟเวอร์สาธารณะ -setting.playerlimit.name = Player Limit +setting.playerlimit.name = จัดกัดผู้เล่น setting.chatopacity.name = ความโปร่งแสงของแชท setting.lasersopacity.name = ความโปร่งแสงของเลเซอร์พลังงาน -setting.bridgeopacity.name = Bridge Opacity +setting.bridgeopacity.name = ความโปร่งแสงของสะพาน setting.playerchat.name = แสดงบับเบิ้ลแชทของผู้เล่น public.confirm = คุณต้องการให้เกมของคุณเปิดเป็นสาธารณะหรือไม่?\n[accent]ทุกคนจะสามารถเข้าร่วมเกมของคุณได้.\n[lightgray]คุณสามารถเปลี่ยนการตั้งค่านี้ได้ที่ ตั้งค่า->เกม->การมองเห็นเซิฟเวอร์สาธารณะ. public.beta = เกมเวอร์ชั่นเบต้าไม่สามารถเปิดเซิฟเวอร์สาธารณะได้ @@ -743,54 +782,54 @@ keybinds.mobile = [scarlet]การตั้งค่าปุ่มส่ว category.general.name = ทั่วไป category.view.name = วิว category.multiplayer.name = ผู้เล่นหลายคน -category.blocks.name = Block Select +category.blocks.name = เลือกบล็อค command.attack = โจมตี command.rally = ชุมนุม command.retreat = ถอยกลับ -command.idle = Idle +command.idle = อยู่เฉยๆ placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.respawn.name = เกิดใหม่ +keybind.control.name = ควบคุมยูนิต keybind.clear_building.name = เคลียร์สิ่งก็สร้าง keybind.press = กดปุ่มใดก็ได้... keybind.press.axis = กดแกนหรือปุ่มใดก็ได้... keybind.screenshot.name = แมพ Screenshot -keybind.toggle_power_lines.name = Toggle Power Lasers -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_power_lines.name = เปิดปิดเลเซอร์พลังงาน +keybind.toggle_block_status.name = เปิดปิดสถานะของบล็อค keybind.move_x.name = เคลื่อนที่ในแกน x keybind.move_y.name = เคลี่อนที่ในแกน y keybind.mouse_move.name = ตามเม้าส์ -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.pan.name = แพนวิว +keybind.boost.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.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 = เปิด/ปิด Fullscreen keybind.select.name = เลือก/ยิง keybind.diagonal_placement.name = วางเป็นแนวทแยง keybind.pick.name = เลือกบล็อค keybind.break_block.name = ทุบบล็อค keybind.deselect.name = ยกเลิกการเบือก -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = ยกของขึ้น +keybind.dropCargo.name = วางของลง +keybind.command.name = คำสั่ง keybind.shoot.name = ยิง keybind.zoom.name = ซูม keybind.menu.name = เมนู @@ -811,7 +850,7 @@ keybind.zoom_minimap.name = ซูมมินิแมพ mode.help.title = คำอธิบายโหมด mode.survival.name = เอาชีวิตรอด mode.survival.description = โหมดปกติ. ทรัพยากรมีจำกัดและ wave มาโดยอัตโนมัติ.\n[gray]ต้องมีสปาวน์ของศัตรูเพื่อที่จะเล่น. -mode.sandbox.name = Sandbox +mode.sandbox.name = โหมดอิสระ mode.sandbox.description = ทรัพยาดรไม่จำกัดและ wave ไม่จับเวลา. mode.editor.name = Editor mode.pvp.name = PvP @@ -822,13 +861,14 @@ mode.custom = กฎแบบกำหนดเอง rules.infiniteresources = ทรัพยากรไม่จำกัด rules.reactorexplosions = การระเบิดของ +rules.schematic = Schematics Allowed rules.wavetimer = ตัวนับเวลาปล่อยคลื่น(รอบ) rules.waves = คลื่น(รอบ) rules.attack = โหมดการโจมตี -rules.buildai = AI Building +rules.buildai = สิ่ก่อสร้างของ AI rules.enemyCheat = AI (ทีมสีแดง) มีทรัพยากรไม่จำกัด rules.blockhealthmultiplier = พหุคูณเลือดของบล็อค -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = พหุคูณดาเมจของบล็อค rules.unitbuildspeedmultiplier = พหุคูณความเร็วในการสร้างยูนิต rules.unithealthmultiplier = พหุคูณเลือดของยูนิต rules.unitdamagemultiplier = พหุคูณพลังโจมตีของยูนิต @@ -836,28 +876,30 @@ rules.enemycorebuildradius = รัศมีห้ามสร้างบริ rules.wavespacing = ระยะเวลาระหว่างคลื่น(รอบ):[lightgray] (วินาที) rules.buildcostmultiplier = พหุคูณจำนวนทรัพยากรที่ใช้ในการสร้าง rules.buildspeedmultiplier = พหุคูณความเร็วในการสร้าง -rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier +rules.deconstructrefundmultiplier = พหุคูณการคืนทรัพยากรเมื่อทำการทำลายสิ่งก่อสร้าง rules.waitForWaveToEnd = คลื่น(รอบ)รอศัตรู rules.dropzoneradius = รัศมีจุดเกิดของศัตรู:[lightgray] (ช่อง) -rules.unitammo = Units Require Ammo +rules.unitammo = ยูนิตต้องใช้กระสุน rules.title.waves = คลื่น(รอบ) rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง rules.title.enemy = ศัตรู rules.title.unit = ยูนิต rules.title.experimental = Experimental -rules.title.environment = Environment -rules.lighting = Lighting -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage -rules.ambientlight = Ambient Light -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.title.environment = สิ่งแวดล้อม +rules.lighting = แสง +rules.enemyLights = Enemy Lights +rules.fire = ไฟ +rules.explosions = ดาเมจบล็อค/ยูนิตระเบิด +rules.ambientlight = แสงจากแวดล้อม +rules.weather = สภาพอากาศ +rules.weather.frequency = ความถี่: +rules.weather.duration = ระยะเวลา: content.item.name = ไอเท็ม content.liquid.name = ของเหลว content.unit.name = ยูนิต content.block.name = บล็อค + item.copper.name = ทองแดง item.lead.name = ตะกั่ว item.coal.name = ถ่านหิน @@ -879,79 +921,63 @@ liquid.slag.name = เศษแร่ liquid.oil.name = น้ำมัน liquid.cryofluid.name = โครโรฟิวล์ -item.explosiveness = [lightgray]ค่าการระเบิด: {0}% -item.flammability = [lightgray]ความไวต่อไฟ: {0}% -item.radioactivity = [lightgray]ค่ากัมมันตภาพรังสี: {0}% - -unit.health = [lightgray]เลือด: {0} -unit.speed = [lightgray]ความเร็ว: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]ความจุความร้อน: {0} -liquid.viscosity = [lightgray]ความหนืด: {0} -liquid.temperature = [lightgray]อุณหภูมิ: {0} - unit.dagger.name = แด็กเกอร์ -unit.mace.name = Mace +unit.mace.name = เมส unit.fortress.name = ฟอร์เทรส -unit.nova.name = Nova -unit.pulsar.name = Pulsar -unit.quasar.name = Quasar +unit.nova.name = โนว่า +unit.pulsar.name = พอวซ่า +unit.quasar.name = ควอซ่า unit.crawler.name = ครอว์เลอร์ -unit.atrax.name = Atrax -unit.spiroct.name = Spiroct -unit.arkyid.name = Arkyid -unit.toxopid.name = Toxopid -unit.flare.name = Flare -unit.horizon.name = Horizon -unit.zenith.name = Zenith -unit.antumbra.name = Antumbra -unit.eclipse.name = Eclipse -unit.mono.name = Mono -unit.poly.name = Poly -unit.mega.name = Mega -unit.quad.name = Quad -unit.oct.name = Oct -unit.risso.name = Risso -unit.minke.name = Minke -unit.bryde.name = Bryde -unit.sei.name = Sei -unit.omura.name = Omura -unit.alpha.name = Alpha -unit.beta.name = Beta -unit.gamma.name = Gamma -unit.scepter.name = Scepter -unit.reign.name = Reign -unit.vela.name = Vela -unit.corvus.name = Corvus +unit.atrax.name = เอแทรซ +unit.spiroct.name = สปิรอคท์ +unit.arkyid.name = อาร์คิดย์ +unit.toxopid.name = โทโสพิด +unit.flare.name = แฟลร์ +unit.horizon.name = ฮอไรซอน +unit.zenith.name = ซีนิท +unit.antumbra.name = แอนทัมบรา +unit.eclipse.name = อีคลิปส์ +unit.mono.name = โมโน +unit.poly.name = โพลี +unit.mega.name = เมก้า +unit.quad.name = ควอด +unit.oct.name = ออกค์ +unit.risso.name = ริสโส +unit.minke.name = มิงค์ +unit.bryde.name = ไบรดย์ +unit.sei.name = ไซย์ +unit.omura.name = โอมูร่า +unit.alpha.name = อัลฟ่า +unit.beta.name = บีตเา +unit.gamma.name = แกมม่า +unit.scepter.name = สเซปเตอร์ +unit.reign.name = เรน +unit.vela.name = เวล่า +unit.corvus.name = คอร์วัส -block.resupply-point.name = Resupply Point -block.parallax.name = Parallax -block.cliff.name = Cliff +block.resupply-point.name = จุดเติมของ +block.parallax.name = พาราแล็ซ +block.cliff.name = หน้าผ่า block.sand-boulder.name = ก้อนหินทราย block.grass.name = หญ้า block.slag.name = Slag +block.space.name = Space block.salt.name = เกลือ -block.salt-wall.name = Salt Wall +block.salt-wall.name = กำแพงเกลือ block.pebbles.name = ก้อนกรวด block.tendrils.name = ไม้เลื้อย -block.sand-wall.name = Sand Wall +block.sand-wall.name = กำแพงทราย block.spore-pine.name = ต้นสนสปอร์ -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = กำแพงสปอร์ +block.boulder.name = ก้อยหินใหญ่ +block.snow-boulder.name = หินหิมะใหญ่ block.snow-pine.name = ต้นสนที่คลุมหิมะ block.shale.name = หินดินดาน block.shale-boulder.name = ก้อนหินดินดาน block.moss.name = ตะไคร่น้ำ block.shrubs.name = พุ่มไม้ block.spore-moss.name = พุ่มไม้สปอร์ -block.shale-wall.name = Shale Wall +block.shale-wall.name = กำแพงหินดินดาน block.scrap-wall.name = กำแพงเศษเหล็ก block.scrap-wall-large.name = กำแพงเศษเหล็กขนาดใหญ่ block.scrap-wall-huge.name = กำแพงเศษเหล็กขนาดใหญ่มาก @@ -969,7 +995,7 @@ block.deepwater.name = น้ำลึก block.water.name = น้ำ block.tainted-water.name = น้ำเสีย block.darksand-tainted-water.name = น้ำเสียบนทรายดำ -block.tar.name = น้ำมันดิน +block.tar.name = น้ำมันดิบ block.stone.name = หิน block.sand.name = ทราย block.darksand.name = ทรายดำ @@ -979,17 +1005,18 @@ block.craters.name = หลุมอุกกาบาต block.sand-water.name = น้ำบนทราย block.darksand-water.name = น้ำบนทรายดำ block.char.name = ถ่าน -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite.name = ดาไซต์ +block.dacite-wall.name = กำแพงดาไซต์ +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = น้ำแข็งหิมะ -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = กำแพงหิน +block.ice-wall.name = กำแพงน้ำแข็ง +block.snow-wall.name = กำแพงหิมะ +block.dune-wall.name = กำแพงเนินทราย block.pine.name = ต้นสน -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = ดิน +block.dirt-wall.name = กำแพงดิน +block.mud.name = โคลน block.white-tree-dead.name = ต้นไม้ขาวที่ตายแล้ว block.white-tree.name = ต้มไม้ขาว block.spore-cluster.name = กลุ่มสปอร์ @@ -1005,7 +1032,7 @@ block.dark-panel-4.name = แผ่นดำ 4 block.dark-panel-5.name = แผ่นดำ 5 block.dark-panel-6.name = แผ่นดำ 6 block.dark-metal.name = เหล็กดำ -block.basalt.name = Basalt +block.basalt.name = บะซอลต์ block.hotrock.name = หินร้อน block.magmarock.name = หินแมกม่า block.copper-wall.name = กำแพงทองแดง @@ -1027,7 +1054,7 @@ block.hail.name = แฮล block.lancer.name = แลนเซอร์ block.conveyor.name = สายพาน block.titanium-conveyor.name = สายพานไทเทเนี่ยม -block.plastanium-conveyor.name = Plastanium Conveyor +block.plastanium-conveyor.name = สายพานพสาตตาเนี่ยม block.armored-conveyor.name = สายพานเสริมเกราะ block.armored-conveyor.description = เคลื่อนย้ายไอเท็มได้เร็วเทียบเท่าสายพานไทเทเนี่ยม แต่มีเกราะที่แข็งแรงกว่า ไม่สามารถรับไอเท็มจากด้านข้างและจากสายพานชนิดอื่นนอกจากสายพานชนิดเดียวกัน. block.junction.name = ทางแยก @@ -1036,10 +1063,10 @@ 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.illuminator.name = ตัวเปล่งแสง +block.illuminator.description = แหล่งกำเนิดแสงขนาดเล็ก สามารถดัดแปลงได้. จำเป็นต้องใช้พลังงานในการทำงาน. block.overflow-gate.name = ประตูระบายไอเทม -block.underflow-gate.name = Underflow Gate +block.underflow-gate.name = ประตูระบายไอเท็มย้อนกลับ block.silicon-smelter.name = เตาเผาซิลิกอน block.phase-weaver.name = เครื่องทอใยเฟส block.pulverizer.name = เครื่องบด @@ -1055,7 +1082,7 @@ block.surge-tower.name = เสาเสิร์จ block.diode.name = ไดโอดแบตเตอรี่ block.battery.name = แบตเตอรี่ block.battery-large.name = แบตเตอรี่ขนาดใหญ่ -block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าโดยการสันดาป +block.combustion-generator.name = เครื่องกำเนิดไฟฟ้าเผาไหม้ถ่าน block.steam-generator.name = เครื่องกำเนิดไฟฟ้าไอน้ำ block.differential-generator.name = เครื่องกำเนิดไฟฟ้าดิฟเฟอเร่นเตอร์ block.impact-reactor.name = เตาปฏิกรณ์อัดกระแทก @@ -1075,6 +1102,7 @@ block.power-source.name = จุดกำเนิดพลังงาน block.unloader.name = ตัวถ่ายไอเทม block.vault.name = ตู้นิรภัย block.wave.name = เวฟ +block.tsunami.name = Tsunami block.swarmer.name = สวอร์มเมอร์ block.salvo.name = ซัลโว block.ripple.name = ริปเปิล @@ -1114,37 +1142,39 @@ block.arc.name = อาร์ค block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า RTG block.spectre.name = สเปคเตอร์ block.meltdown.name = เมลท์ดาวน์ +block.foreshadow.name = Foreshadow block.container.name = ตู้เก็บของ block.launch-pad.name = ฐานส่งของ block.launch-pad-large.name = ฐานส่งของขนาดใหญ่ block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor +block.command-center.name = ศูนย์ควบคุม +block.ground-factory.name = โรงงานภาคพื้นดิน +block.air-factory.name = โรงงานภาคอากาศ +block.naval-factory.name = โรงงานทางน้ำ +block.additive-reconstructor.name = Reconstructor แบบบวก +block.multiplicative-reconstructor.name = Reconstructor แบบคูณ +block.exponential-reconstructor.name = Reconstructor แบบเอ็กโพเนนเชียว block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.payload-conveyor.name = สายพาน Mass +block.payload-router.name = ตัวเปลี่ยเส้นทาง Payload +block.disassembler.name = ตัวชำแหละ +block.silicon-crucible.name = เบ้าหลอมซิลิคอน +block.overdrive-dome.name = โดม Overdrive -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = สวิชต์ +block.micro-processor.name = ตัวประมวลผล Micro +block.logic-processor.name = ตัวประมวลผล Logic +block.hyper-processor.name = ตัวประมวลผล Hyper +block.logic-display.name = ตัวแสดง Logic +block.large-logic-display.name = ตัวแสดง Logic ขนาดใหญ่ +block.memory-cell.name = เซลล์ความจำ +block.memory-bank.name = Memory Bank team.blue.name = น้ำเงิน team.crux.name = แดง team.sharded.name = ส้ม team.orange.name = ส้ม -team.derelict.name = derelict +team.derelict.name = ไม่มี team.green.name = เขียว team.purple.name = ม่วง @@ -1208,12 +1238,12 @@ block.spore-press.description = อัดกระเปาะสปอร์ด block.pulverizer.description = บดเศษเหล็กให้เป็นทรายละเอียด. block.coal-centrifuge.description = ทำให้น้ำมันแข็งตัวเป็นก้อนถ่านหิน. block.incinerator.description = ทำลายไอเท็มหรือของเหลวทุกอย่างที่ได้รับมา. -block.power-void.description = ทิ้งพลังงานทั้งหมดที่ได้รับ. เฉพาะ Sandbox เท่านั้น. -block.power-source.description = ส่งออกพลังงานไม่จำกัด. เฉพาะ Sandbox เท่านั้น. -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.power-void.description = ทิ้งพลังงานทั้งหมดที่ได้รับ. เฉพาะ โหมดอิสระ เท่านั้น. +block.power-source.description = ส่งออกพลังงานไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. +block.item-source.description = ส่งออกไอเท็มไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. +block.item-void.description = ทำลายทุกไอเท็ม . เฉพาะ โหมดอิสระ เท่านั้น. +block.liquid-source.description = ส่งออกของเหลวไม่จำกัด. เฉพาะ โหมดอิสระ เท่านั้น. +block.liquid-void.description = ทิ้งของเหลวทุกชนิด. เฉพาะ โหมดอิสระ เท่านั้น. block.copper-wall.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ. block.copper-wall-large.description = บล็อคป้องกันราคาถูก.\nมีประโยชน์สำหรับป้องกัน core และป้อมปืนใน wave แรกๆ.\nคลอบคลุมหลายข่อง. block.titanium-wall.description = บล็อคป้องกันแข็งแกร่งปานกลาง.\nป้องกันศัตรูได้ในระดับหนึ่ง. @@ -1222,8 +1252,8 @@ block.plastanium-wall.description = กำแพงพิเศษที่ส block.plastanium-wall-large.description = กำแพงพิเศษที่สามารถดูดซับไฟฟ้าและป้องกันการต่อไฟกับโหนดพลังงานโดยอัตโนมัติได้.\nคลอบคลุมหลายช่อง. block.thorium-wall.description = บล็อคป้องกันที่แข็งแรง.\nป้องกันศัตรูได้อย่างดี. block.thorium-wall-large.description = บล็อคป้องกันที่แข็งแรง.\nป้องกันศัตรูได้อย่างดี.\nคลอบคลุมหลายช่อง. -block.phase-wall.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact. -block.phase-wall-large.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact.\nคลอบคลุมหลายช่อง. +block.phase-wall.description = กำแพงที่เคลือบด้วยวัสดุสะท้อนพิเศษจำพวก phase. เบี่ยงเบนกระสุนส่วนใหญ่ที่รับมา. +block.phase-wall-large.description = กำแพงที่เคลือบด้วยวัสดุสะท้อนพิเศษจำพวก phase. เบี่ยงเบนกระสุนส่วนใหญ่ที่รับมา.\nคลอบคลุมหลายช่อง. block.surge-wall.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม. block.surge-wall-large.description = บล็อคป้องกันที่มีทนทานสูง.\nสะสมพลังงานจากกระสุน, แล้วปล่อยออกมาแบบสุ่ม.\nคลอบคลุมหลายช่อง. block.door.description = ประตูขนาดเล็ก. สามารถเปิดได้โดยการกด. @@ -1235,7 +1265,7 @@ block.force-projector.description = สร้างสนามพลังง block.shock-mine.description = ดาเมจศัตรูที่เหยียบ. แถบจะล่องหนต่อศัตรู. block.conveyor.description = บล็อคขนส่งไอเท็มพื้นฐาน. เคลื่อนไอเท็มไปข้างหน้าและใส่ลงบล็อคโดยอัตโนมัติ. สามารถหมุนได้. block.titanium-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. เคลื่อนไอเท็มเร็วกว่าสายพานทั่วไป. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. +block.plastanium-conveyor.description = เคลื่อนย้ายไอเท็มเป็นชุด.\nรับไอดท็มจากด้านหลัง, และนำออกไปสามทางข้างหน้า. block.junction.description = มีหน้าที่เป็นสะพานสำหรับสายพาน 2 สายข้ามกัน. มีประโยชน์สำหรับเวลาสายพาน 2 สายที่ขนไอเท็มมา 2 ชนิดไปยัง 2 สถานที่. block.bridge-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ทำให้สามารถส่งไอเท็มข้ามบล็อคใดก็ได้ 3 ช่อง. block.phase-conveyor.description = บล็อคขนส่งไอเท็มขั้นสูง. ใช้พลังงานเพื่อส่งไอเท็มไปยังสายพานเฟสอีกอัน ข้ามได้หลายช่อง. @@ -1244,14 +1274,14 @@ block.inverted-sorter.description = แยกไอเท็มคล้าย block.router.description = รับไอเท็มแล้วส่งออก 3 ทางเท่าๆกัน. มีประโยชน์สำหรับแยกไอเท็มจากแหล่งเดียวไปหลายที่.\n\n[scarlet]อย่าวางไว้ติดกับทางส่งไอเท็มเข้าเพราะของออกจะไปอุดตันได้.[] block.distributor.description = เร้าเตอร์ขั้นสูง. แยกไอเท็มออก 7 ทางอย่างเท่าๆกัน. block.overflow-gate.description = ของจะออกจากข้างๆเมื่อทางข้างหน้ถูกบล็อคเท่านั้น. -block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. +block.underflow-gate.description = ตรงข้ามกับประตูระบายไอเท็ม. ส่งออกไอเท็มไปข้างหน้าหากทางซ้ายและขวาถูกบล็อค. block.mass-driver.description = บล็อคขนส่งไอเท็มขั้นสุดยอด. รวบรวมไอเท็มจำนวนหนึ่งแล้วยิงไปหาแมสไดรเวอร์อีกอันที่อยู่ไกลออกไป. ต้องใช้พลังงานในการใช้งาน. block.mechanical-pump.description = ปั๊มราคาถูก เอ้าพุธต์ช้า แต่ไม่ใช้พลังงาน. block.rotary-pump.description = ปั๊มขั้นสูง. ปั๊มของเหลวได้มากขึ้นแค่ใช้พลังงาน. block.thermal-pump.description = ปั๊มขั้นสุดยอด. block.conduit.description = บล็อคขนส่งของเหลวพื้นฐาน. เคลื่อนของเหลวไปข้างหน้า. ใช้ร่วมกับปั๊มและรางน้ำอื่นๆ. block.pulse-conduit.description = บล็อคขนส่งของเหลวขั้นสูง. เคลื่อนย้ายของเหลวเร็วขึ้นและเก็บเยอะกว่ารางน้ำธรรมดา. -block.plated-conduit.description = Moves liquids at the same rate as pulse conduits, but possesses more armor. Does not accept fluids from the sides by anything other than conduits.\nLeaks less. +block.plated-conduit.description = เคลื่อนย้ายของเหลวได้เร็วพอๆกับ ท่อน้ำพัลซ์, แต่มีเกราะที่หนากว่า. ไม่รับของเหลวจากด้านข้างจากอย่างอื่นนอกจากท่อน้ำด้วยกันเอง.\nรั่วน้อยกว่า. block.liquid-router.description = รับของเหลวจากทางเดียวแล้วส่งออก 3 ทางเท่าๆกัน. สามารถเก็บของ้หลวได้จำนวนหนึ่ง. มีประโยชน์สำหรับการแยกของเหลวจากแหล่งเดียวไปหลายที่. block.liquid-tank.description = เก็บของเหลวจำนวนมาก. ใช่สำหรับสร้างบัฟเฟอร์ในเวลาที่ความต้องการของทรัพยากรไม่คงที่หรือเป็นตัวเซฟสำหรับบล็อคที่จำเป็นต้องใช้การหล่อเย็น. block.liquid-junction.description = ทำหน้าที่เป็นสะพานสำหรับรางน้ำ 2 รางที่ข้ามกันที่มีของเหลว 2 ชนิด ซึ่งต้องการจะไปคนละที่. @@ -1302,4 +1332,4 @@ block.cyclone.description = ป้อมปืนต่อต้านอาก block.spectre.description = ปืนใหญ่ลำกล้องคูขนาดยักษ์. ยิงกระสุนเจาะเกราะใส่ศัตรูทั้งบนอากาศและภาดพื้นดิน. block.meltdown.description = ปืนใหญ่เลเซอร์ขนาดยักษ์. ชาร์จแล้วยิงลำแสงเลเซอร์ใส่ศัตรูที่อยู่ใกล้. จำเป็นต้องใช้สารหล่อเย็น. block.repair-point.description = ซ่อมแซมยูนิตที่อยู่ในรัศมีอย่างต่อเนื่อง. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = ทำดาเมจและทำลายโปรเจกไตล์ที่กำลังเข้ามา. โปรเจกไตล์เลเซอร์จะไม่ถูกล็อคเป้าด้วยบล็อคนี้. diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index cfac48c897..8b9f3a97aa 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -55,6 +55,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 +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Waves Defeated:[accent] {0} stat.enemiesDestroyed = Enemies Destroyed:[accent] {0} @@ -100,7 +101,6 @@ 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 = [lightgray]No mods found! mods.guide = Modding Guide @@ -284,12 +284,15 @@ selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building wave = [accent]Dalga {0} +wave.cap = [accent]Wave {0}/{1} wave.waiting = Dalganin baslamasina: {0} wave.waveInProgress = [lightgray]Wave in progress waiting = Bekleniyor... waiting.players = Waiting for players... wave.enemies = [lightgray]{0} Enemies Remaining wave.enemy = [lightgray]{0} Enemy Remaining +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. loadimage = Resimden Yukle saveimage = Resimi kaydet unknown = Bilinmeyen @@ -328,6 +331,7 @@ editor.generation = Generation: editor.ingame = Edit In-Game editor.publish.workshop = Publish On Workshop editor.newmap = New Map +editor.center = Center workshop = Workshop waves.title = Waves waves.remove = Remove @@ -416,6 +420,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise filter.enemyspawn = Enemy Spawn Select +filter.spawnpath = Path To Spawn filter.corespawn = Core Select filter.median = Median filter.oremedian = Ore Median @@ -440,6 +445,7 @@ filter.option.amount = Amount filter.option.block = Block filter.option.floor = Floor filter.option.flooronto = Target Floor +filter.option.target = Target filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -471,15 +477,9 @@ requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} requirement.capture = Capture {0} -resume = Resume Zone:\n[lightgray]{0} bestwave = [lightgray]Best: {0} -launch = Launch launch.text = Launch -launch.title = Launch Successful -launch.next = [lightgray]next opportunity at wave {0} -launch.unable2 = [scarlet]Unable to LAUNCH.[] -launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. -launch.skip.confirm = If you skip now, you will not be able to launch until later waves. +research.multiplayer = Only the host can research items. uncover = Uncover configure = Configure Loadout loadout = Loadout @@ -512,6 +512,7 @@ weather.rain.name = Rain weather.snow.name = Snow weather.sandstorm.name = Sandstorm weather.sporestorm.name = Sporestorm +weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: @@ -521,6 +522,11 @@ sectors.resume = Resume sectors.launch = Launch sectors.select = Select sectors.nonelaunch = [lightgray]none (sun) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources + +planet.serpulo.name = Serpulo +planet.sun.name = Sun sector.groundZero.name = Ground Zero sector.craters.name = The Craters @@ -560,6 +566,10 @@ settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done 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.clearsaves.confirm = Are you sure you want to clear all your saves? settings.clearsaves = Clear Saves +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = Duraklatildi clear = Clear banned = [scarlet]Banned @@ -570,12 +580,14 @@ info.title = [accent]Bilgi error.title = [crimson]Bir hata olustu error.crashtitle = Bir hata olustu unit.nobuild = [scarlet]Unit can't build +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = Input stat.output = Output stat.booster = Booster stat.tiles = Required Tiles stat.affinities = Affinities -block.unknown = [lightgray]??? stat.powercapacity = Guc kapasitesi stat.powershot = Guc/Saldiri hizi stat.damage = Damage @@ -594,6 +606,7 @@ stat.powerconnections = Max Connections stat.poweruse = Guc kullanimi stat.powerdamage = Power/Damage stat.itemcapacity = Esya kapasitesi +stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time @@ -613,6 +626,28 @@ stat.reload = Yeniden doldurma stat.ammo = Ammo stat.shieldhealth = Shield Health stat.cooldowntime = Cooldown Time +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -624,6 +659,7 @@ bar.powerbalance = Power: {0} bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} bar.poweroutput = Power Output: {0} +bar.powerlines = Connections: {0}/{1} bar.items = Items: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = Build Progress bar.input = Input bar.output = Output +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray] dmg bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary @@ -642,12 +680,15 @@ bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag bullet.knockback = [stat]{0}[lightgray] knockback +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce 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.blockssquared = blocks² unit.powersecond = saniyede bir unit.liquidsecond = Saniyede bir unit.itemssecond = Saniyede bir @@ -670,7 +711,7 @@ category.power = Guc category.liquids = sivilar category.items = esyalar category.crafting = uretim -category.shooting = sikma +category.function = Function category.optional = Optional Enhancements setting.landscape.name = Lock Landscape setting.shadows.name = Shadows @@ -679,7 +720,6 @@ setting.linear.name = Linear Filtering setting.hints.name = Hints setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) setting.buildautopause.name = Auto-Pause Building -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animated Water setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[lightgray] (requires restart)[] @@ -691,7 +731,7 @@ setting.touchscreen.name = Touchscreen Controls setting.fpscap.name = Max FPS setting.fpscap.none = Yok setting.fpscap.text = {0} FPS -setting.uiscale.name = UI Scaling[lightgray] (require restart)[] +setting.uiscale.name = UI Scaling[lightgray] (requires restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = training setting.difficulty.easy = kolay @@ -713,7 +753,6 @@ setting.fullscreen.name = Tam ekran setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart) setting.fps.name = FPS'i goster setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync setting.pixelate.name = Pixelate [lightgray](may decrease performance) setting.minimap.name = Haritayi goster @@ -822,6 +861,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.reactorexplosions = Reactor Explosions +rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer rules.waves = Waves rules.attack = Attack Mode @@ -847,6 +887,7 @@ rules.title.unit = Units rules.title.experimental = Experimental rules.title.environment = Environment rules.lighting = Lighting +rules.enemyLights = Enemy Lights rules.fire = Fire rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light @@ -858,6 +899,7 @@ content.item.name = Esyalar content.liquid.name = Sivilar content.unit.name = Units content.block.name = Blocks + item.copper.name = Bakir item.lead.name = Kursun item.coal.name = Komur @@ -879,23 +921,6 @@ liquid.slag.name = Slag liquid.oil.name = Benzin liquid.cryofluid.name = kriyo sivisi -item.explosiveness = [lightgray]Patlayicilik: {0} -item.flammability = [lightgray]Yanbilirlik: {0} -item.radioactivity = [lightgray]Radyoaktivite: {0} - -unit.health = [lightgray]Can: {0} -unit.speed = [lightgray]hiz: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]isinma kapasitesi: {0} -liquid.viscosity = [lightgray]Yari sivilik: {0} -liquid.temperature = [lightgray]isi: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -936,6 +961,7 @@ block.cliff.name = Cliff block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.slag.name = Slag +block.space.name = Space block.salt.name = Salt block.salt-wall.name = Salt Wall block.pebbles.name = Pebbles @@ -981,6 +1007,7 @@ block.darksand-water.name = Dark Sand Water block.char.name = Char block.dacite.name = Dacite block.dacite-wall.name = Dacite Wall +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = Ice Snow block.stone-wall.name = Stone Wall block.ice-wall.name = Ice Wall @@ -1075,6 +1102,7 @@ block.power-source.name = sonsuz guc block.unloader.name = bekletici block.vault.name = kasa block.wave.name = Dalga +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1114,6 +1142,7 @@ block.arc.name = Arc block.rtg-generator.name = RTG Generator block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad @@ -1139,6 +1168,7 @@ block.hyper-processor.name = Hyper Processor block.logic-display.name = Logic Display block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell +block.memory-bank.name = Memory Bank team.blue.name = blue team.crux.name = red @@ -1302,4 +1332,4 @@ block.cyclone.description = A large rapid fire turret. block.spectre.description = A large turret which shoots two powerful bullets at once. block.meltdown.description = A large turret which shoots powerful long-range beams. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 395e062453..5087985f0c 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -20,8 +20,8 @@ gameover = Kaybettin gameover.pvp = [accent] {0}[] Takımı kazandı! highscore = [accent]Yeni rekor! copied = Panoya Kopyalandı. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]v6[] şu anda [accent]beta aşamasındadır[].\n[lightgray]Bu demektir ki:[]\n[scarlet]- Mücadele modu tamamlanmamıştır[]\n- Müzik ve ses efektleri tamamlanmamıştır veya eksiktir\n- Gördüğün her şey değişime ya da kaldırılmaya açıktır.\n\nHataları ve çökmeleri [accent]Github[]'da bildir. +indev.notready = Oyunun bu kısmı henüz hazır değil. load.sound = Sesler load.map = Haritalar @@ -42,19 +42,20 @@ schematic = Şema schematic.add = Şemayı Kaydet... schematics = Şemalar schematic.replace = Aynı isimde bir şema zaten var. Üzerine yazılsın mı? -schematic.exists = A schematic by that name already exists. +schematic.exists = Aynı isimde bir şema zaten var. schematic.import = Şema İçeri Aktar... schematic.exportfile = Dışa Aktar schematic.importfile = İçe Aktar -schematic.browseworkshop = Workshop'u incele +schematic.browseworkshop = Atölyeyi incele schematic.copy = Panoya Kopyala schematic.copy.import = Panodan İçeri Aktar -schematic.shareworkshop = Workshop'ta Kaydet +schematic.shareworkshop = Atölyede Kaydet schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Şemayı döndür schematic.saved = Şema Kaydedildi. schematic.delete.confirm = Bu şema tamamen yok edilecek. schematic.rename = Şemayı yeniden adlandır schematic.info = {0}x{1}, {2} blok +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = Yenilen Dalgalar:[accent] {0} stat.enemiesDestroyed = Yok Edilen Düşmanlar:[accent] {0} @@ -62,10 +63,10 @@ stat.built = İnşa Edilen Yapılar:[accent] {0} stat.destroyed = Yok Edilen Yapılar:[accent] {0} stat.deconstructed = Yıkılan Yapılar:[accent] {0} stat.delivered = Gönderilen Kaynaklar: -stat.playtime = Time Played:[accent] {0} +stat.playtime = Oynama Süresi:[accent] {0} stat.rank = Rütbe: [accent]{0} -globalitems = [accent]Global Items +globalitems = [accent]Toplanan Kaynaklar map.delete = "[accent]{0}[]" haritasını silmek istediğine emin misin? level.highscore = Rekor: [accent]{0} level.select = Seviye Seçimi @@ -82,7 +83,7 @@ none = minimap = Harita position = Pozisyon close = Kapat -website = Website +website = Web sitesi quit = Çık save.quit = Kaydet & Çık maps = Haritalar @@ -100,22 +101,21 @@ done = Bitti feature.unsupported = Cihazınızda bu özellik desteklenmemektedir. 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 mods.none = [lightgray]Hiç mod bulunamadı! mods.guide = Mod Rehberi mods.report = Hata bildir mods.openfolder = Mod klasörünü aç -mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.reload = Yeniden Yükle +mods.reloadexit = Modları yeniden yüklemek için oyun kapanacak. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Etkin mod.disabled = [scarlet]Devre Dışı mod.disable = Devre Dışı Bırak -mod.content = Content: +mod.content = İçerik: mod.delete.error = Mod silinemiyor. Dosya kullanımda olabilir. -mod.requiresversion = [scarlet]Gereken en düşük oun versiyonu: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.requiresversion = [scarlet]Gereken en düşük oyun versiyonu: [accent]{0} +mod.outdated = [scarlet]V6 ile uyumlu değil (minGameVersion: 105 yok) mod.missingdependencies = [scarlet]Bu modun çalışması için gereken modlar: {0} mod.erroredcontent = [scarlet]İçerik hatası. mod.errors = İçerik yüklenirken bir hata oluştu. @@ -125,9 +125,9 @@ 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.file = Import File +mod.import.file = Dosya İçeri Aktar mod.import.github = GitHub Modu İçeri Aktar -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]Jar modları doğası gereği güvenli değildir.[]\nBu modu güvenilir bir kaynaktan içeri aktardığına emin ol! mod.item.remove = Bu eşya[accent] '{0}'[] modunun bir parçası. Kaldırmak için modu silebilirsiniz. mod.remove.confirm = Bu mod silinecek. mod.author = [lightgray]Yayıncı:[] {0} @@ -139,8 +139,8 @@ mod.scripts.disable = Your device does not support mods with scripts. You must d about.button = Hakkında name = İsim: noname = Bir[accent] kullanıcı adı[] seçmelisin. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Gezegen Haritası +launchcore = Kalkış filename = Dosya Adı: unlocked = Yeni içerik açıldı! completed = [accent]Tamamlandı @@ -148,11 +148,11 @@ techtree = Teknoloji Ağacı research.list = [lightgray]Araştırmalar: research = Araştır researched = [lightgray]{0} Araştırıldı. -research.progress = {0}% complete +research.progress = %{0} tamamlandı players = {0} çevrimiçi oyuncu players.single = {0} çevrimiçi oyuncu -players.search = search -players.notfound = [gray]no players found +players.search = ara +players.notfound = [gray]hiç oyuncu bulunamadı server.closing = [accent]Sunucu kapatılıyor... server.kicked.kick = Sunucudan atıldın! server.kicked.whitelist = Beyaz listede değilsin. @@ -185,9 +185,9 @@ server.refreshing = Sunucu yenileniyor hosts.none = [lightgray]Yerel oyun bulunamadı! host.invalid = [scarlet]Kurucuya bağlanılamıyor. -servers.local = Local Servers -servers.remote = Remote Servers -servers.global = Community Servers +servers.local = Yerel Sunucular +servers.remote = Uzak Sunucular +servers.global = Topluluk Sunucuları trace = Oyuncuyu Takip Et trace.playername = Oyuncu İsmi: [accent]{0} @@ -234,22 +234,22 @@ save.none = Kayıt bulunamadı! savefail = Oyun kaydedilemedi! save.delete.confirm = Bu kaydı silmek istediğine emin misin? save.delete = Sil -save.export = Kayıdı Dışa Aktar +save.export = Kaydı Dışa Aktar save.import.invalid = [accent]Bu kayıt geçersiz! save.import.fail = [crimson]Kayıt içe aktarılamadı: [accent]{0} save.export.fail = [crimson]Kayıt dışa aktarılamadı: [accent]{0} -save.import = Kayıdı İçe Aktar +save.import = Kaydı İçe Aktar save.newslot = İsmi kaydet: save.rename = Yeniden isimlendir save.rename.text = Yeni isim: selectslot = Bir kayıt seçin. -slot = [accent]Slot {0} +slot = [accent]Yuva {0} editmessage = Mesajı Düzenle save.corrupted = [accent]Kayıt dosyası bozuk veya geçersiz! empty = on = Aç off = Kapa -save.autosave = Otomatk kayıt: {0} +save.autosave = Otomatik kayıt: {0} save.map = Harita: {0} save.wave = Dalga {0} save.mode = Oyun modu: {0} @@ -269,27 +269,30 @@ copylink = Bağlantıyı Kopyala back = Geri data.export = Veriyi Dışa Aktar data.import = Veriyi İçe Aktar -data.openfolder = Open Data Folder +data.openfolder = Veri Klasörü Aç data.exported = Veri dışa aktarıldı. data.invalid = Bu oyun verisi geçerli değil. data.import.confirm = Dışarıdan içeri veri aktarmak şu anki verilerinizin [scarlet]tamamını[] silecektir.[accent]Bu işlem geri alınamaz![]\n\nVeri içeri aktarıldığında oyundan çıkacaksınız. quit.confirm = Çıkmak istediğinize emin misiniz? -quit.confirm.tutorial = Ne yaptığınıza emin misiniz?\nÖğreticiyi [accent] Ayarlar->Oyun->Öğreticiyi Yeniden Al'dan[] tekrar yapabilirsiniz. +quit.confirm.tutorial = Ne yaptığınıza emin misiniz?\nÖğreticiyi [accent] Ayarlar -> Oyun -> Öğreticiyi Yeniden Al[]'dan tekrar yapabilirsiniz. loading = [accent]Yükleniyor... reloading = [accent]Modlar Yeniden Yükleniyor... saving = [accent]Kayıt ediliyor... -respawn = [accent][[{0}][] to respawn in core -cancelbuilding = Planı temizlemek için [accent][[{0}][] -selectschematic = Seçmek ve kopyalamak için [accent][[{0}][] -pausebuilding = İnşaatı durdurmak için [accent][[{0}][] -resumebuilding = İnşaata devam etmek için [scarlet][[{0}][] +respawn = [accent][[{0}][] Çekirdekte yeniden doğ +cancelbuilding = [accent][[{0}][] Planı temizle +selectschematic = [accent][[{0}][] Seç ve kopyala +pausebuilding = [accent][[{0}][] İnşaatı durdur +resumebuilding = [scarlet][[{0}][] İnşaata devam et wave = [accent]Dalga {0} +wave.cap = [accent]Dalga {0}/{1} wave.waiting = [lightgray]{0} saniye içinde dalga başlayacak wave.waveInProgress = [lightgray]Dalga gerçekleşiyor waiting = [lightgray]Bekleniliyor... waiting.players = Oyuncular bekleniliyor... wave.enemies = [lightgray]{0} Tane Düşman Kaldı wave.enemy = [lightgray]{0} Tane Düşman Kaldı +wave.guardianwarn = [accent]{0}[] dalga sonra gardiyan yaklaşıyor. +wave.guardianwarn.one = [accent]{0}[] dalga sonra gardiyan yaklaşıyor. loadimage = Resim Aç saveimage = Resim Kaydet unknown = Bilinmeyen @@ -307,7 +310,7 @@ map.publish.confirm = Bu haritayı yayınlamak istediğinize emin misiniz?\n[lig workshop.menu = Bu eşya ile ne yapmak istediğinizi seçin. workshop.info = Eşya açıklaması changelog = Değişim Listesi (isteğe bağlı): -eula = Steam Kullanıvı Sözleşmesi +eula = Steam Kullanıcı Sözleşmesi missing = Bu eşya silinmiş veya taşınmış.\n[lightgray]Workshop listesinden kaldırıldı. publishing = [accent]Yayınlanıyor... publish.confirm = Bunu yayınlamak istediğinize emin misiniz?\n[lightgray]önce Atölye Sözleşmesine uyduğunuza emin olun, yoksa yapıtlarınız gözükmeyecektir! @@ -328,6 +331,7 @@ editor.generation = Oluşum: editor.ingame = Oyun içinde düzenle editor.publish.workshop = Atölyede Yayınla editor.newmap = Yeni Harita +editor.center = Ortala workshop = Atölye waves.title = Dalgalar waves.remove = Kaldır @@ -335,9 +339,9 @@ waves.never = waves.every = her waves.waves = dalga(lar) waves.perspawn = doğma noktası başına -waves.shields = shields/wave +waves.shields = kalkan/dalga waves.to = doğru -waves.guardian = Guardian +waves.guardian = Gardiyan waves.preview = Önizleme waves.edit = Düzenle... waves.copy = Panodan kopyala @@ -346,9 +350,9 @@ waves.invalid = Panoda geçersiz dalga sayısı var. waves.copied = Dalgalar kopyalandı. waves.none = Düşman bulunamadı.\nBoş dalga düzenlerin otomatik olarak varsayılan düzenle değiştirileceğini unutmayın -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = miktarlar +wavemode.totals = toplamlar +wavemode.health = can editor.default = [lightgray] details = Detaylar... @@ -401,7 +405,7 @@ toolmode.replace = Değiştir toolmode.replace.description = Sadece katı blokların üzerinde çizer. toolmode.replaceall = Hepsini Değiştir toolmode.replaceall.description = Haritadaki bütün blokları değiştirir. -toolmode.orthogonal = Dik +toolmode.orthogonal = Çizgi toolmode.orthogonal.description = Sadece dik çizgiler çizer. toolmode.square = Kare toolmode.square.description = Kare fırça. @@ -415,8 +419,9 @@ toolmode.drawteams.description = Bloklar yerine takımları çizer.. filters.empty = [lightgray]Hiç filtre yok! Aşağıdaki butonla bir adet ekleyin. filter.distort = Çarpıt filter.noise = Gürültü -filter.enemyspawn = Enemy Spawn Select -filter.corespawn = Core Select +filter.enemyspawn = Düşman Doğma Alanı Seçimi +filter.spawnpath = Doğma Noktasına Yol +filter.corespawn = Çekirdek Seçimi filter.median = Medyan filter.oremedian = Maden Medyanı filter.blend = Geçiş @@ -436,10 +441,11 @@ filter.option.circle-scale = Daire Ölçek filter.option.octaves = Oktavlar filter.option.falloff = Düşüş filter.option.angle = Açı -filter.option.amount = Amount +filter.option.amount = Miktar filter.option.block = Blok filter.option.floor = Zemin filter.option.flooronto = Hedef Zemin +filter.option.target = Target filter.option.wall = Duvar filter.option.ore = Maden filter.option.floor2 = İkincil Duvar @@ -451,7 +457,7 @@ width = Eni: height = Boyu: menu = Menü play = Oyna -campaign = Başla +campaign = Mücadele load = Yükle save = Kaydet fps = FPS: {0} @@ -469,24 +475,18 @@ locked = Kilitli complete = [lightgray]Ulaş: requirement.wave = Bölge {1}'de Dalga {0} requirement.core = {0}`da Düşman Çekirdeği Yok Et -requirement.research = Research {0} -requirement.capture = Capture {0} -resume = Bölgeye Devam Et:\n[lightgray]{0} +requirement.research = {0} araştır +requirement.capture = {0} sektörünü ele geçir bestwave = [lightgray]En İyi Dalga: {0} -launch = < KALKIŞ > -launch.text = Launch -launch.title = Kalkış Başarılı -launch.next = [lightgray]Bir sonraki imkan {0}. dalgada olacak. -launch.unable2 = [scarlet]KALKIŞ mümkün değil.[] -launch.confirm = Bu işlem çekirdeğinizdeki bütün kaynakları yollayacak.\nBu üsse geri dönemeyeceksiniz. -launch.skip.confirm = Eğer şimdi geçerseniz, +launch.text = Kalkış +research.multiplayer = Sadece kurucu araştırma yapabilir. uncover = Aç configure = Ekipmanı Yapılandır -loadout = Loadout -resources = Resources +loadout = Yükleme +resources = Kaynaklar bannedblocks = Yasaklı Bloklar addall = Hepsini Ekle -launch.destination = Destination: {0} +launch.destination = Varış Yeri: {0} configure.invalid = Miktar 0 ve {0} arasında bir sayı olmalı. zone.unlocked = [lightgray]{0} kilidi açıldı. zone.requirement.complete = {0}. dalgaya ulaşıldı:\n{1} bölge şartları karşılandı. @@ -498,7 +498,7 @@ 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.unreachable = Sunucuya ulaşılamıyor.\nAdresin doğru yazıldığına emin misiniz? error.invalidaddress = Geçersiz adres. error.timedout = Zaman aşımı!\nSunucunun port yönlendirmeyi ayarladığına ve adresin doğru olduğuna emin olun! error.mismatch = Paket hatası:\nSunucu ve alıcı arasında versiyon uyuşmazlığı ihtimali var.\nHem sizde hem de sunucuda Mindustry'nin en son sürümü yüklü olduğuna emin olun! @@ -508,43 +508,49 @@ error.io = Ağ I/O hatası. error.any = Bilinmeyen ağ hatası. error.bloom = Kamaşma başlatılamadı.\nCihazınız bu özelliği desteklemiyor olabilir. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = Yağmur +weather.snow.name = Kar +weather.sandstorm.name = Kum Fırtınası +weather.sporestorm.name = Spor Yağmuru +weather.fog.name = Sis -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.unexplored = [lightgray]Keşfedilmemiş +sectors.resources = Kaynaklar: +sectors.production = Üretim: +sectors.stored = Depolanan: +sectors.resume = Devam Et +sectors.launch = Kalkış +sectors.select = Seç +sectors.nonelaunch = [lightgray]yok (güneş) +sectors.rename = Sektörü Yeniden Adlandır +sector.missingresources = [scarlet]Yetersiz Çekirdek Kaynakları -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +planet.serpulo.name = Serpulo +planet.sun.name = Güneş -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.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. -sector.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. -sector.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. -sector.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. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.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. -sector.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. -sector.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. -sector.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. +sector.groundZero.name = Sıfır Noktası +sector.craters.name = Kraterler +sector.frozenForest.name = Donmuş Orman +sector.ruinousShores.name = Harap Kıyılar +sector.stainedMountains.name = Lekeli Dağlar +sector.desolateRift.name = Issız Aralık +sector.nuclearComplex.name = Kompleks Nükleer Üretimi +sector.overgrowth.name = Fazla Büyüme +sector.tarFields.name = Katran Alanları +sector.saltFlats.name = Tuz Düzlükleri +sector.fungalPass.name = Mantar Geçidi + +sector.groundZero.description = Yeniden başlamak için ideal bölge. Düşük düşman tehlikesi ve az miktarda kaynak mevcut. Mümkün olduğunca çok bakır ve kurşun topla.\nİlerle. +sector.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. +sector.saltFlats.description = Çölün kenar kısımlarında tuz düzlükleri uzanır. Bu konumda az miktarda kaynak bulunur.\n\nDüşman burada kompleks bir kaynak depolama sistemi inşa etti. Çekirdeklerini yok et. Ayakta hiçbir şey bırakma. +sector.craters.description = Eski savaşların bir anıtı olan bu kratere su dolmuş. Alanı yeniden ele geçir. Kum topla ve metacam üret. Taret ve matkapları soğutmak için su pompala. +sector.ruinousShores.description = Yıkıntıların ardında bir kıyı var. Bir zamanlar bu konum bir dizi kıyı defansına ev sahipliği yapmış. Geriye pek bir şey kalmamış. Sadece en temel savunma yapıları zarar görmeden kaldı, onun dışındaki her şey hurdaya geri dönüştü.\nDışa doğru genişletmeye devam et. Teknolojiyi yeniden keşfet. +sector.stainedMountains.description = Daha uzaklarda dağlar uzanıyor, daha sporlar tarafından istilaya uğramamışlar.\nAlandaki serbest titanyumu çıkart ve kullanmasını öğren.\n\nDüşman varlığı burada daha fazla. Onların daha güçlü birimlerini göndermelerine izin verme. +sector.overgrowth.description = Bu alan aşırı büyümüştür, sporların kaynağına daha yakındır.\nDüşman burada bir merkez kurdu. Titan birlikleri inşa et. Onu yok et. Kaybedileni geri al. +sector.tarFields.description = Bir petrol üretim bölgesinin eteklerinde, dağların ve çölün arasındadır. Birkaç kullanılabilir katran rezervlerinden biri. \nTerk edilmiş olmasına rağmen, bu alan yakınlarda bazı tehlikeli düşman güçlerine sahip. Onları küçümseme.\n\n[lightgray]Mümkünse petrol üretme teknolojisini araştır. +sector.desolateRift.description = Aşırı tehlikeli bir bölge. Bol kaynaklar, ama az yer mevcut. Yüksek yıkım riski. Mümkün olduğunca çabuk ayrılmaya çalış. Düşman saldırıları arasındaki uzun mesafeye aldanma. +sector.nuclearComplex.description = Toryum üretimi ve işlenmesi için eski bir tesistir, harabeye dönüşmüştür.\n[lightgray]Toryumu ve onun birçok kullanımını araştır. \n\nDüşman burada çok sayıda mevcut ve sürekli saldırganları arıyorlar. +sector.fungalPass.description = Yüksek dağlar ve daha alçak, sporla dolu topraklar arasında bir geçiş alanıdır. Burada küçük bir düşman keşif üssü bulunuyor.\nOnu yok et.\nDagger ve Crawler birlikleri kullan. İki çekirdeği çıkar. settings.language = Dil settings.data = Oyun Verisi @@ -557,25 +563,31 @@ settings.sound = Ses settings.graphics = Grafikler settings.cleardata = Oyun Verisini Sil... settings.clear.confirm = Verileri silmek istediğinizden emin misiniz?\nBu işlemi geri alamazsınız! -settings.clearall.confirm = [scarlet]Uyarı![]\nBu işlem kayıtlar, haritalar açılan bloklar ve tuş atamaları dahil bütün verileri silecektir.\n"ok" tuşuna bastığınızda bütün verileriniz silinecek ve oyun kapanacaktır. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves +settings.clearall.confirm = [scarlet]Uyarı![]\nBu işlem kayıtlar, haritalar açılan bloklar ve tuş atamaları dahil bütün verileri silecektir.\n"Tamam" tuşuna bastığınızda bütün verileriniz silinecek ve oyun kapanacaktır. +settings.clearsaves.confirm = Tüm kayıtlarınızı silmek istediğinizden emin misiniz? +settings.clearsaves = Kayıtları Sil +settings.clearresearch = Araştırma Verisini Sil +settings.clearresearch.confirm = Mücadele modundaki yaptığınız tüm araştırmaları sıfırlamak istediğinize emin misiniz? +settings.clearcampaignsaves = Mücadele Kayıt Verisini Sil +settings.clearcampaignsaves.confirm = Mücadele modundaki oynadığınız tüm sektörleri sıfırlamak istediğinize emin misiniz? paused = [accent] clear = Temizle banned = [scarlet]Yasaklı -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]Ele geçirilmiş sektör gerekir yes = Evet no = Hayır info.title = Bilgi error.title = [crimson]Bir hata oldu error.crashtitle = Bir hata oldu -unit.nobuild = [scarlet]Unit can't build +unit.nobuild = [scarlet]Birlik inşa edemiyor +lastaccessed = [lightgray]Son Erişme: {0} +block.unknown = [lightgray]??? + stat.input = Giriş stat.output = Çıkış stat.booster = Güçlendirici -stat.tiles = Required Tiles -stat.affinities = Affinities -block.unknown = [lightgray]??? +stat.tiles = Gereken Kare +stat.affinities = Yakınlıklar stat.powercapacity = Enerji Kapasitesi stat.powershot = Enerji/Atış stat.damage = Hasar @@ -585,15 +597,16 @@ stat.itemsmoved = Hareket Hızı stat.launchtime = Fırlatmalar Arasındaki Süre stat.shootrange = Menzil stat.size = Boyut -stat.displaysize = Display Size +stat.displaysize = Gösterim Boyutu stat.liquidcapacity = Sıvı Kapasitesi stat.powerrange = Enerji Menzili -stat.linkrange = Link Range -stat.instructions = Instructions -stat.powerconnections = Bağlantı sayısı +stat.linkrange = Bağlantı Menzili +stat.instructions = Talimatlar +stat.powerconnections = Bağlantı Sayısı stat.poweruse = Enerji Kullanımı stat.powerdamage = Enerji/Hasar stat.itemcapacity = Eşya Kapasitesi +stat.memorycapacity = Bellek Kapasitesi stat.basepowergeneration = Temel Enerji Üretimi stat.productiontime = Üretim Süresi stat.repairtime = Tamir Tamir Edilme Süresi @@ -605,49 +618,77 @@ stat.boosteffect = Hızlandırma Efekti stat.maxunits = Maksimum Aktif Birim stat.health = Can stat.buildtime = İnşaat Süresi -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = Art Arda En Fazla stat.buildcost = İnşaat Fiyatı stat.inaccuracy = İskalama Oranı stat.shots = Atışlar stat.reload = Atışlar/Sn stat.ammo = Mermi -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time +stat.shieldhealth = Kalkan Canı +stat.cooldowntime = Soğuma Süresi +stat.explosiveness = Patlayıcılık +stat.basedeflectchance = Mermi Sekme Şansı +stat.lightningchance = Yıldırım Çarpma Şansı +stat.lightningdamage = Yıldırım Hasarı +stat.flammability = Yanıcılık +stat.radioactivity = Radyoaktivite +stat.heatcapacity = Isı Kapasitesi +stat.viscosity = Viskosite +stat.temperature = Sıcaklık +stat.speed = Hız +stat.buildspeed = İnşa Hızı +stat.minespeed = Kazı Hızı +stat.minetier = Kazı Seviyesi +stat.payloadcapacity = Yük Kapasitesi +stat.commandlimit = Komut Limiti +stat.abilities = Kabiliyetler + +ability.forcefield = Güç Kalkanı +ability.repairfield = Onarma Alanı +ability.statusfield = Hızlandırma Alanı +ability.unitspawn = {0} Birliği Fabrikası +ability.shieldregenfield = Kalkan Yenileme Alanı bar.drilltierreq = Daha İyi Matkap Gerekli -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = Eksik Kaynaklar +bar.corereq = Çekirdek Tabanı Gerekli bar.drillspeed = Matkap Hızı: {0}/s -bar.pumpspeed = Pump Speed: {0}/s +bar.pumpspeed = Pompa Hızı: {0}/s bar.efficiency = Verim: {0}% bar.powerbalance = Enerji: {0}/sn bar.powerstored = Depolanan: {0}/{1} bar.poweramount = Enerji: {0} bar.poweroutput = Enerji Üretimi: {0} +bar.powerlines = Bağlantılar: {0}/{1} bar.items = Eşyalar: {0} bar.capacity = Kapasite: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[birlik engellendi] bar.liquid = Sıvı bar.heat = Isı bar.power = Enerji -bar.progress = Build Progress +bar.progress = İnşa İlerlemesi bar.input = Girdi bar.output = Çıktı -bullet.damage = [stat]{0}[lightgray] hasar -bullet.splashdamage = [stat]{0}[lightgray] alan hasarı ~[stat] {1}[lightgray] kare +units.processorcontrol = [lightgray]İşlemci Kontrolünde + +bullet.damage = [stat]{0} [lightgray]hasar +bullet.splashdamage = [stat]{0} [lightgray]alan hasarı ~[stat] {1} [lightgray]kare bullet.incendiary = [stat]yakıcı bullet.homing = [stat]güdümlü bullet.shock = [stat]şoklayıcı bullet.frag = [stat]parça tesirli -bullet.knockback = [stat]{0}[lightgray] savurma +bullet.knockback = [stat]{0} [lightgray]savurma +bullet.pierce = [stat]{0}[lightgray]x delme +bullet.infinitepierce = [stat]delme 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.blocks = blok +unit.blockssquared = blok² unit.powersecond = enerji birimi/saniye unit.liquidsecond = sıvı birimi/saniye unit.itemssecond = eşya/saniye @@ -655,12 +696,12 @@ unit.liquidunits = sıvı birimi unit.powerunits = enerji birimi unit.degrees = derece unit.seconds = saniye -unit.minutes = mins +unit.minutes = dakika unit.persecond = /sn -unit.perminute = /min +unit.perminute = /dk unit.timesspeed = x hız unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = kalkan canı unit.items = eşya unit.thousands = k unit.millions = mil @@ -670,20 +711,19 @@ category.power = Enerji category.liquids = Sıvılar category.items = Eşyalar category.crafting = Üretim -category.shooting = Silahlar +category.function = Fonksiyon category.optional = İsteğe Bağlı Geliştirmeler setting.landscape.name = Yatayda sabitle setting.shadows.name = Gölgeler setting.blockreplace.name = Otomatik Blok önerileri setting.linear.name = Lineer Filtreleme setting.hints.name = İpuçları -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) +setting.flow.name = Kaynak Geçiş Hızını Göster[scarlet] (deneysel) setting.buildautopause.name = İnşa etmeyi otomatik olarak durdur -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = Animasyonlu Su setting.animatedshields.name = Animasyonlu Kalkanlar -setting.antialias.name = Düzgğnleştirme[lightgray] (yeniden açmak gerekebilir)[] -setting.playerindicators.name = Player Indicators +setting.antialias.name = Düzgünleştirme [lightgray](yeniden başlatma gerekebilir)[] +setting.playerindicators.name = Oyuncu Belirteçleri setting.indicators.name = Düşman/Müttefik Belirteçleri setting.autotarget.name = Otomatik Hedef Alma setting.keyboard.name = Fare+Klavye Kontrolleri @@ -691,7 +731,7 @@ setting.touchscreen.name = Dokunmatik Ekran Kontrolleri setting.fpscap.name = Maksimum FPS setting.fpscap.none = Limitsiz setting.fpscap.text = {0} FPS -setting.uiscale.name = UI Ölçeği[lightgray] (yeniden açmak gerekebilir)[] +setting.uiscale.name = Arayüz Ölçeği [lightgray](yeniden başlatma gerekebilir)[] setting.swapdiagonal.name = Her Zaman Çapraz Yerleştirme setting.difficulty.training = Eğitim setting.difficulty.easy = Kolay @@ -702,25 +742,24 @@ setting.difficulty.name = Zorluk: setting.screenshake.name = Ekranı Salla setting.effects.name = Efektleri Görüntüle setting.destroyedblocks.name = Kırılmış Blokları Göster -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Blok Durumunu Göster setting.conveyorpathfinding.name = Konveyör Yol Bulma setting.sensitivity.name = Kontrolcü Hassasiyeti setting.saveinterval.name = Kayıt Aralığı setting.seconds = {0} Saniye -setting.blockselecttimeout.name = Block Select Timeout +setting.blockselecttimeout.name = Blok Seçme Zaman Aşımı setting.milliseconds = {0} milisaniye setting.fullscreen.name = Tam Ekran -setting.borderlesswindow.name = Kenarsız Pencere[lightgray] (yeniden açmak gerekebilir) +setting.borderlesswindow.name = Kenarsız Pencere [lightgray](yeniden açmak gerekebilir) setting.fps.name = FPS Göster -setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = Blok seçim tüşlarını göster +setting.smoothcamera.name = Yumuşak Geçişli Kamera setting.vsync.name = VSync -setting.pixelate.name = Pixelleştir[lightgray] (animasyonları kapatır) +setting.pixelate.name = Pixelleştir [lightgray](animasyonları kapatır) setting.minimap.name = Haritayı Göster -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Çekirdekteki Eşyaları Göster [lightgray](üzerinde çalışılıyor) setting.position.name = Oyuncu Noktasını Göster setting.musicvol.name = Müzik -setting.atmosphere.name = Show Planet Atmosphere +setting.atmosphere.name = Gezegen Atmosferini Göster setting.ambientvol.name = Çevresel Ses setting.mutemusic.name = Müziği Kapat setting.sfxvol.name = Oyun Sesi @@ -728,14 +767,14 @@ setting.mutesound.name = Sesi Kapat setting.crashreport.name = Anonim Çökme Raporları Gönder setting.savecreate.name = Otomatik Kayıt Oluştur setting.publichost.name = Halka Açık Oyunlar -setting.playerlimit.name = Player Limit +setting.playerlimit.name = Oyuncu Limiti setting.chatopacity.name = Mesajlaşma Opaklığı setting.lasersopacity.name = Enerji Lazeri Opaklığı -setting.bridgeopacity.name = Bridge Opacity +setting.bridgeopacity.name = Köprü Opaklığı setting.playerchat.name = Oyun-içi Konuşmayı Göster public.confirm = Oyununuzu halka açık yapmak ister misiniz?\n[accent]Oyunlarınıza herkes katılabilecektir.\n[lightgray]Bu seçenek daha sonra Ayarlar->Oyun->Halka Açık Oyunlar'dan değiştirilebilir. public.beta = Oyunun beta sürümlerinin halka açık lobiler yapamayacağını unutmayın. -uiscale.reset = UI ölçeği değiştirildi.\nBu ölçeği onaylamak için "OK" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[] +uiscale.reset = Arayüz ölçeği değiştirildi.\nBu ölçeği onaylamak için "Tamam" butonuna basın.\n[accent] {0}[] [scarlet]saniye içinde eski ayarlara geri dönülüp oyundan çıkılıyor…[] uiscale.cancel = İptal Et ve Çık setting.bloom.name = Kamaşma keybind.title = Tuşları Yeniden Ata @@ -743,25 +782,25 @@ keybinds.mobile = [scarlet]Buradaki çoğu tuş ataması mobilde geçerli değil category.general.name = Genel category.view.name = Görünüm category.multiplayer.name = Çok Oyunculu -category.blocks.name = Block Select +category.blocks.name = Blok Seçimi command.attack = Saldır command.rally = Toplan command.retreat = Geri Çekil -command.idle = Idle +command.idle = Boşta placement.blockselectkeys = \n[lightgray]Tuş: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.respawn.name = Yeniden Doğ +keybind.control.name = Birliği Kontrol Et 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 = Enerji lazerlerini aç/kapa -keybind.toggle_block_status.name = Toggle Block Statuses +keybind.toggle_power_lines.name = Enerji Lazerlerini Aç/Kapa +keybind.toggle_block_status.name = Blok İstatistiklerini Aç/Kapa keybind.move_x.name = x Ekseninde Hareket keybind.move_y.name = y Ekseninde Hareket keybind.mouse_move.name = Fareyi Takip Et -keybind.pan.name = Pan View -keybind.boost.name = Boost +keybind.pan.name = Yatay Kaydırma Görünümü +keybind.boost.name = Yükselt 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 @@ -788,15 +827,15 @@ keybind.diagonal_placement.name = Çapraz Yerleştirme keybind.pick.name = Blok Seç keybind.break_block.name = Blok Kır keybind.deselect.name = Seçimleri Kaldır -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = Kargoyu Al +keybind.dropCargo.name = Kargoyu Bırak +keybind.command.name = Komut keybind.shoot.name = Ateş Et keybind.zoom.name = Yakınlaştırma/Uzaklaştırma 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.minimap.name = Harita keybind.chat.name = Konuş keybind.player_list.name = Oyuncu Listesi keybind.console.name = Konsol @@ -807,7 +846,7 @@ keybind.chat_history_prev.name = Sohbet geçmişi önceki keybind.chat_history_next.name = Sohbet geçmişi sonraki keybind.chat_scroll.name = Sohbet Kaydırma keybind.drop_unit.name = Birlik Düşürme -keybind.zoom_minimap.name = Mini Haritada Yakınlaştırma/Uzaklaştırma +keybind.zoom_minimap.name = Haritada Yakınlaştırma/Uzaklaştırma mode.help.title = Modların açıklamaları mode.survival.name = Hayatta Kalma mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir. @@ -822,42 +861,45 @@ mode.custom = Özel Kurallar rules.infiniteresources = Sınırsız Kaynaklar rules.reactorexplosions = Reaktör Patlamaları +rules.schematic = Schematics Allowed rules.wavetimer = Dalga Zamanlayıcısı rules.waves = Dalgalar rules.attack = Saldırı Modu -rules.buildai = AI Building +rules.buildai = Yapay Zeka İnşası rules.enemyCheat = Sonsuz AI (Kırmızı Takım) Kaynakları rules.blockhealthmultiplier = Blok Canı Çarpanı -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = Blok Hasarı Çarpanı rules.unitbuildspeedmultiplier = Birim Üretim Hızı Çarpanı rules.unithealthmultiplier = Birim Canı Çarpanı rules.unitdamagemultiplier = Birim Hasarı Çapanı -rules.enemycorebuildradius = Düşman Çekirdeği İnşa Yasağı Yarıçapı:[lightgray] (kare) -rules.wavespacing = Dalga Aralığı:[lightgray] (sec) -rules.buildcostmultiplier = İnşa ücreti Çarpanı +rules.enemycorebuildradius = Düşman Çekirdeği İnşa Yasağı Yarıçapı: [lightgray](kare) +rules.wavespacing = Dalga Aralığı: [lightgray](sn) +rules.buildcostmultiplier = İnşa Ücreti Çarpanı rules.buildspeedmultiplier = İnşa Hızı Çarpanı -rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier +rules.deconstructrefundmultiplier = Yıkım İade Çarpanı rules.waitForWaveToEnd = Dalgalar Düşmanı Bekler -rules.dropzoneradius = İniş Noktası Yarıçapı:[lightgray] (kare) -rules.unitammo = Units Require Ammo +rules.dropzoneradius = İniş Noktası Yarıçapı: [lightgray](kare) +rules.unitammo = Birlikler Mermi Gerektiriyor rules.title.waves = Dalgalar rules.title.resourcesbuilding = Kaynaklar & İnşa rules.title.enemy = Düşmanlar rules.title.unit = Birlikler rules.title.experimental = Deneysel -rules.title.environment = Environment +rules.title.environment = Çevre rules.lighting = Işıklandırma -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.enemyLights = Enemy Lights +rules.fire = Ateş +rules.explosions = Blok/Birlik Patlama Hasarı rules.ambientlight = Ortam Işığı -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = Hava +rules.weather.frequency = Sıklık: +rules.weather.duration = Süreklilik: content.item.name = Eşyalar content.liquid.name = Sıvılar content.unit.name = Birimler content.block.name = Bloklar + item.copper.name = Bakır item.lead.name = Kurşun item.coal.name = Kömür @@ -879,23 +921,6 @@ liquid.slag.name = Cüruf liquid.oil.name = Petrol liquid.cryofluid.name = Kriyosıvı -item.explosiveness = [lightgray]Patlama: {0}% -item.flammability = [lightgray]Yanıcılık: {0}% -item.radioactivity = [lightgray]Radyoaktivite: {0}% - -unit.health = [lightgray]Can: {0} -unit.speed = [lightgray]Hız: {0} -unit.weapon = [lightgray]Weapon: {0} -unit.itemcapacity = [lightgray]Item Capacity: {0} -unit.minespeed = [lightgray]Mining Speed: {0}% -unit.minepower = [lightgray]Mining Power: {0} -unit.ability = [lightgray]Ability: {0} -unit.buildspeed = [lightgray]Building Speed: {0}% - -liquid.heatcapacity = [lightgray]Isı Kapasitesi: {0} -liquid.viscosity = [lightgray]Vizkosite: {0} -liquid.temperature = [lightgray]Sıcaklık: {0} - unit.dagger.name = Dagger unit.mace.name = Mace unit.fortress.name = Fortress @@ -932,26 +957,27 @@ unit.corvus.name = Corvus block.resupply-point.name = Resupply Point block.parallax.name = Parallax -block.cliff.name = Cliff -block.sand-boulder.name = Kum Kaya Parçaları +block.cliff.name = Uçurum +block.sand-boulder.name = Kumlu Kaya Parçaları block.grass.name = Çimen -block.slag.name = Slag +block.slag.name = Cüruf +block.space.name = Uzay block.salt.name = Tuz -block.salt-wall.name = Salt Wall +block.salt-wall.name = Tuz Duvar block.pebbles.name = Çakıl Taşları block.tendrils.name = Tendriller -block.sand-wall.name = Sand Wall +block.sand-wall.name = Kum Duvar block.spore-pine.name = Spor Çamı -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = Spor Duvar +block.boulder.name = Kaya Parçaları +block.snow-boulder.name = Karlı Kaya PArçaları block.snow-pine.name = Karlı Çam block.shale.name = Şist block.shale-boulder.name = Şist Kayası block.moss.name = Yosun block.shrubs.name = Çalılık -block.spore-moss.name = Liken -block.shale-wall.name = Shale Wall +block.spore-moss.name = Spor Yosunu +block.shale-wall.name = Şist Duvar block.scrap-wall.name = Hurda Duvar block.scrap-wall-large.name = Büyük Hurda Duvar block.scrap-wall-huge.name = Dev Hurda Duvar @@ -979,17 +1005,18 @@ block.craters.name = Krater block.sand-water.name = Kumlu Su block.darksand-water.name = Kara Kumlu Su block.char.name = Kömür -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite.name = Dakit +block.dacite-wall.name = Dakit Duvar +block.dacite-boulder.name = Dakit Kaya Parçaları block.ice-snow.name = Buzlu Kar -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = Taş Duvar +block.ice-wall.name = Buz Duvar +block.snow-wall.name = Kar Duvar +block.dune-wall.name = Kara Kum Duvar block.pine.name = Çam -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = Toprak +block.dirt-wall.name = Toprak Duvar +block.mud.name = Çamur block.white-tree-dead.name = Ölü Beyaz Ağaç block.white-tree.name = Beyaz Ağaç block.spore-cluster.name = Spor Kümesi @@ -1005,15 +1032,15 @@ block.dark-panel-4.name = Kara Panel 4 block.dark-panel-5.name = Kara Panel 5 block.dark-panel-6.name = Kara Panel 6 block.dark-metal.name = Kara Metal -block.basalt.name = Basalt +block.basalt.name = Bazalt block.hotrock.name = Sıcak Kaya block.magmarock.name = Magma Kayası block.copper-wall.name = Bakır Duvar block.copper-wall-large.name = Büyük Bakır Duvar block.titanium-wall.name = Titanyum Duvar block.titanium-wall-large.name = Büyük Titanyum Duvar -block.plastanium-wall.name = Plastanium Wall -block.plastanium-wall-large.name = Large Plastanium Wall +block.plastanium-wall.name = Plastanyum Duvar +block.plastanium-wall-large.name = Büyük Plastanyum Duvar block.phase-wall.name = Faz Duvar block.phase-wall-large.name = Büyük Faz Duvar block.thorium-wall.name = Toryum Duvar @@ -1027,7 +1054,7 @@ block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Konveyör block.titanium-conveyor.name = Titanyum Konveyör -block.plastanium-conveyor.name = Plastanium Conveyor +block.plastanium-conveyor.name = Plastanyum Konveyör block.armored-conveyor.name = Zırhlı Konveyör block.armored-conveyor.description = Materyalleri titanyum konveyörlerle aynı hızda taşır ama daha fazla zırha sahiptir. Diğer konveyörler dışında yan taraflardan materyal kabul etmez. block.junction.name = Kavşak @@ -1036,10 +1063,10 @@ 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.underflow-gate.name = Underflow Gate +block.illuminator.name = Aydınlatıcı +block.illuminator.description = Küçük, kompakt, yapılandırılabilir bir ışık kaynağı. Çalışması için enerji gerekir. +block.overflow-gate.name = Taşma Geçidi +block.underflow-gate.name = Yana Taşma Geçidi block.silicon-smelter.name = Silikon Fırını block.phase-weaver.name = Faz Örücü block.pulverizer.name = Pulverizatör @@ -1052,7 +1079,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.diode.name = Batarya Diyotu block.battery.name = Batarya block.battery-large.name = Büyük Batarya block.combustion-generator.name = Termik Jeneratör @@ -1069,12 +1096,13 @@ 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.liquid-void.name = Sıvı Yokedici block.power-void.name = Enerji Yokedici block.power-source.name = Sonsuz Enerji Kaynağı block.unloader.name = Boşaltıcı block.vault.name = Depo block.wave.name = Wave +block.tsunami.name = Tsunami block.swarmer.name = Swarmer block.salvo.name = Salvo block.ripple.name = Ripple @@ -1088,13 +1116,13 @@ block.solar-panel-large.name = Büyük Güneş Paneli block.oil-extractor.name = Petrol Çıkarıcı block.repair-point.name = Tamir Noktası block.pulse-conduit.name = Dalga Borusu -block.plated-conduit.name = Plated Conduit +block.plated-conduit.name = Kaplı Boru block.phase-conduit.name = Faz Borusu block.liquid-router.name = Sıvı Yönlendiricisi block.liquid-tank.name = Sıvı Tankı block.liquid-junction.name = Sıvı Kavşağı block.bridge-conduit.name = Köprülü Boru -block.rotary-pump.name = Rotary Pompa +block.rotary-pump.name = Döner Pompa block.thorium-reactor.name = Toryum Reaktörü block.mass-driver.name = Kütle Sürücüsü block.blast-drill.name = Hava Patlamalı Matkap @@ -1108,49 +1136,51 @@ block.surge-wall-large.name = Büyük Akı Duvarı block.cyclone.name = Cyclone block.fuse.name = Fuse block.shock-mine.name = Şok Mayını -block.overdrive-projector.name = Aşırı Yükleme Projektörü +block.overdrive-projector.name = Hızlandırma Projektörü block.force-projector.name = Kalkan Projektörü block.arc.name = Arc block.rtg-generator.name = RTG Jeneratörü block.spectre.name = Spectre block.meltdown.name = Meltdown +block.foreshadow.name = Foreshadow block.container.name = Konteyner block.launch-pad.name = Kalkış Pisti block.launch-pad-large.name = Büyük Kalkış Pisti block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.command-center.name = Komuta Merkezi +block.ground-factory.name = Yer Birimi Fabrikası +block.air-factory.name = Hava Birimi Fabrikası +block.naval-factory.name = Deniz Birimi Fabrikası +block.additive-reconstructor.name = Eklemeli Yeniden Yapılandırıcı +block.multiplicative-reconstructor.name = Çarpmalı Yeniden Yapılandırıcı +block.exponential-reconstructor.name = Üstel Yeniden Yapılandırıcı +block.tetrative-reconstructor.name = Dörtlü Yeniden Yapılandırıcı +block.payload-conveyor.name = Yük Konveyörü +block.payload-router.name = Yük Yönlendirici +block.disassembler.name = Sökücü +block.silicon-crucible.name = Büyük Silikon Fırını +block.overdrive-dome.name = Hızlandırma Kubbesi -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = Düğme +block.micro-processor.name = Mikro İşlemci +block.logic-processor.name = İşlemci +block.hyper-processor.name = Hiper İşlemci +block.logic-display.name = Ekran +block.large-logic-display.name = Büyük Ekran +block.memory-cell.name = Bellek Hücresi +block.memory-bank.name = Bellek Bankası team.blue.name = mavi -team.crux.name = kırmızı -team.sharded.name = turuncu +team.crux.name = öz +team.sharded.name = parçalanmış team.orange.name = turuncu -team.derelict.name = derelict +team.derelict.name = sahipsiz team.green.name = yeşil team.purple.name = mor tutorial.next = [lightgray] tutorial.intro = [scarlet]Mindustry öğreticisine hoş geldiniz.[]\n[accent]Bakır kazarak[] başlayın. Bunu yapmak için merkezinize yakın bir bakır madenine dokunun.\n\n[accent]{0}/{1} bakır -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 = [scarlet]Mindustry öğreticisine hoş geldiniz.[]\nHareket etmek için ekranı kaydırın.\nYakınlaştırmak ve uzaklaştırmak için [accent]iki parmakla kıstırın[].\n[accent]Bakır kazarak[] başlayın. Bunu yapmak için merkezinize yakın bir bakır madenine dokunun.\n\n[accent]{0}/{1} bakır tutorial.drill = Manuel olarak kazmak verimsizdir.\n[accent]Matkaplar []otomatikman kazabilir.\nSağ alttaki matkap sekmesine tıklayınız.\n[accent]Mekanik matkabı[] seçiniz. Tıklayarak bir bakır madenine yerleştirin.\n Yapımı durdurmak için [accent]sağ tıklayın[] ve yakınlaştırmak ve uzaklaştırmak için [accent]CTRL basılı tutarak tekerleği kaydırın[]. tutorial.drill.mobile = Manuel olarak kazmak verimsizdir.\n[accent]Matkaplar []otomatik olarak kazabilir.\nSağ alttaki matkap sekmesine dokunun.\n[accent]Mekanik matkabı[] seçin. \nDokunarak bir bakır madenine yerleştirin, sonra seçiminizi onaylamak için alttaki [accent] tik düğmesine[] basın.\nYerleştirmenizi iptal etmek için [accent] X butonuna[] basın. tutorial.blockinfo = Her bloğun farklı istatistikleri vardır. Her matkap sadece belirli madenleri kazabilir.\nBir bloğun bilgi ve istatistiklerine bakmak için,[accent] yapım menüsünde seçerken "?" tuşuna dokunun.[]\n\n[accent]Şimdi mekanik matkabın istatistiklerine erişin.[] @@ -1213,17 +1243,17 @@ 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.liquid-void.description = Verilen sıvıları yok eder. Sadece Yaratıcı Modda. 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. block.titanium-wall-large.description = Orta derecede güçlü savunma bloğu.\nDüşmanlardan orta derecede koruma sağlar.\nBirçok blok alan kaplar. -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 = Elektrik arklarını emen ve otomatik enerji noktası bağlantılarını engelleyen özel bir duvar türü. +block.plastanium-wall-large.description = Elektrik arklarını emen ve otomatik enerji noktası bağlantılarını engelleyen özel bir duvar türü.\nBirçok blok alan kaplar. block.thorium-wall.description = Güçlü bir savunma bloğu.\nDüşmanlardan iyi korunma sağlar. block.thorium-wall-large.description = Güçlü bir savunma bloğu.\nDüşmanlardan iyi korunma sağlar.\nBirçok blok alan kaplar. -block.phase-wall.description = Özel faz örgüsü bazlı yansıtıcı materyal ile kaplanmış bir duvar. Çoğu mermi çarpma anında saptırır. -block.phase-wall-large.description = Özel faz bazlı yansıtıcı bileşik ile kaplanmış bir duvar. Çoğu mermi çarpma anında saptırır.\nBirçok blok alan kaplar. +block.phase-wall.description = Özel faz örgüsü bazlı yansıtıcı materyal ile kaplanmış bir duvar. Çoğu mermi çarpma anında geri sektirir. +block.phase-wall-large.description = Özel faz bazlı yansıtıcı bileşik ile kaplanmış bir duvar. Çoğu mermi çarpma anında geri sektirir.\nBirçok blok alan kaplar. block.surge-wall.description = Son derece dayanıklı bir savunma bloğu.\nMermi temasıyla yükü toplar ve bu yükü rastgele serbest bırakır. block.surge-wall-large.description = Son derece dayanıklı bir savunma bloğu.\nMermi temasıyla yükü toplar ve bu yükü rastgele serbest bırakır.\nBirçok blok alan kaplar. block.door.description = Küçük bir kapı. Dokunarak açılabilir veya kapatılabilir. @@ -1235,23 +1265,23 @@ block.force-projector.description = Kendi etrafında altıgen güç alanı oluş block.shock-mine.description = Mayına basan düşmanlara hasar verir. Düşmana neredeyse görünmezdir. block.conveyor.description = Temel materyal taşıma bloğu. Materyalleri ileri taşır ve onları diğer bloklara otomatik olarak yerleştirir. Çevrilebilir. block.titanium-conveyor.description = Gelişmiş materyal taşıma bloğu. Materyalleri standart konveyörlerden daha hızlı taşır. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. -block.junction.description = Çakışan iki konveyör hattı arasında bir köprü görevi görür. İki farklı konveyörğn farklı hedeflere farklı materyalleri taşıdığı durumlarda kullanışlıdır. +block.plastanium-conveyor.description = Materyalleri gruplar halinde taşır.\nArkadan eşyaları kabul eder ve öndeki üç yöne boşaltır. +block.junction.description = Çakışan iki konveyör hattı arasında bir köprü görevi görür. İki farklı konveyörün farklı hedeflere farklı materyalleri taşıdığı durumlarda kullanışlıdır. block.bridge-conveyor.description = Gelişmiş materyal taşıma bloğu. Materyalleri her türlü arazi veya binanın üzerinden üç bloğa kadar uzağa taşıyabilir. block.phase-conveyor.description = Gelişmiş materyal taşıma bloğu. Materyalleri kendisine bağlı bir başka faz konveyörüne ışınlamak için enerji kullanır. block.sorter.description = Materyalleri ayıklar. Eğer materyal seçilen ile eşleşiyorsa geçmesine izin verilir. Yoksa materyal sağa ya da sola atılır. -block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead. +block.inverted-sorter.description = Materyalleri sıradan bir ayıklayıcı gibi işler, ancak seçili öğeleri önden değil yanlardan geçirir. block.router.description = Materyalleri bir yönden alıp diğer üç yöne eşit olarak dağıtır. Materyalleri bir kaynaktan birden fazla hedefe iletmek için kullanılır.\n\n[scarlet]Asla üretim yapan binaların dibine yerleştirmeyin, yoksa istenmeyen materyaller tarafından tıkanabilir.[] block.distributor.description = Gelişmiş bir yönlendirici. Materyalleri yedi farklı yöne dağıtabilir. block.overflow-gate.description = Ayırıcı ve yönlendiricinin bir karışımı. Materyalleri sadece ön kısım kapalı olduğunda sağa ve sola atar. -block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. +block.underflow-gate.description = Taşma geçidinin zıttıdır. Sol ve sağ taraf kapalıysa materyalleri ön tarafa atar. block.mass-driver.description = En gelişmiş materyal taşıma bloğu. bir miktar materyalı alır ve onları uzak mesafedeki bir başka kütle sürücüsüne ateşler. Çalışması için enerji gerekir. block.mechanical-pump.description = Hiç enerji harcamayan, düşük çıktılı, ucuz bir pompa. block.rotary-pump.description = Daha gelişmiş bir pompa. Daha fazla sıvı depolar ama çalışması için enerji gerekir. 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.plated-conduit.description = Sıvıları dalga borusuyla aynı güçte taşır ancak daha fazla zırha sahiptir. Borular dışında başka bir şekilde yandan sıvı kabul etmez.\nDaha az sızıntı yapar. 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. @@ -1260,7 +1290,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.diode.description = Pil gücü, bu bloktan yalnızca diğer tarafta daha az güç depolandığında sadece tek bir yöne akabilir. 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. @@ -1302,4 +1332,4 @@ block.cyclone.description = Büyük bir anti hava ve anti kara tareti. Yakının block.spectre.description = Dev bir çift namlulu top. Hava ve kara birimlerine iri, zırh delici mermiler atar. block.meltdown.description = Dev bir lazer topu. Yüklenip yakındaki düşmanlara uzun süreli lazer ışınları yollar. Çalışması için soğutucu gerekir. block.repair-point.description = Kendisine en yakın hasarlı birimi tamir eder. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = Gelen mermilere zarar verir ve onları yok eder. Lazer mermilere etki etmez. diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index dfc4bae48b..da049feb90 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -17,10 +17,12 @@ linkfail = Не вдалося перейти за посиланням!\nURL-а screenshot = Зняток мапи збережено до {0} screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи. gameover = Гра завершена +gameover.disconnect = Від’єднатися gameover.pvp = [accent]{0}[] команда перемогла! +gameover.waiting = [accent]Очікуємо наступно мапу… highscore = [accent]Новий рекорд! copied = Скопійовано. -indev.popup = Наразі [accent]6.0[] знаходиться у стадії [accent]альфа[].\n[lightgray]Це означає наступне:[]\n- Не вистачає наповнення гри;\n- Більшість [scarlet]ШІ бойових одиниць[] не працює належним чином;\n- Багато одиниць [scarlet]відсутні[] або незавершені;\n- Кампанія повністю не є завершеною;\n- Усе, що ви бачите, може змінитися або видалитися.\n\nПовідомляйте про вади або збої на [accent]Github[], а про помилки в перекладі в Discord. +indev.popup = Наразі [accent]6.0[] знаходиться у стадії [accent]бета-тестування[].\n[lightgray]Це означає наступне:[]\n- Не вистачає наповнення кампанії;\n- Кампанія повністю не є завершеною;\n- Усе, що ви бачите, може змінитися або видалитися.\n\nПовідомляйте про вади або збої на [accent]Github[], а про помилки в перекладі в Discord. indev.notready = Ця частина гри ще не готова. load.sound = Звуки @@ -57,6 +59,7 @@ schematic.rename = Перейменувати схему schematic.info = {0}x{1}, блоків: {2} schematic.disabled = [scarlet]Схеми вимкнені[]\nВам не дозволяється використовувати схеми на цій [accent]мапі[] чи [accent]сервері. +stats = Статистика stat.wave = Хвиль відбито:[accent] {0} stat.enemiesDestroyed = Противників знищено:[accent] {0} stat.built = Будівель збудовано:[accent] {0} @@ -101,7 +104,6 @@ done = Зроблено feature.unsupported = Ваш пристрій не підтримує цю функцію mods.alphainfo = Майте на увазі, що модифікації перебувають в альфі, і [scarlet]можуть бути дуже несправними[].\nПовідомте про будь-які проблеми, які ви знайдете до Mindustry Github або Discord. -mods.alpha = [accent](Альфа) mods = Модифікації mods.none = [lightgray]Модифікацій не знайдено! mods.guide = Посібник із модифікацій @@ -172,7 +174,7 @@ 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 доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дають змогу виявити сервер. +host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[].\nКористувачі, які перебувають в тій же [lightgray]WiFi або локальній мережах[], мають побачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоби люди могли приєднуватися з будь-якої точки планети через IP, то потрібно зробити[accent] переадресація порту[].\n\n[lightgray]Примітка. Якщо у вас виникли проблеми з приєднанням до вашої локальної гри, переконайтеся, що ви надали Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дають змогу виявити сервер. join.info = Тут ви можете ввести [accent]IP сервера[] для під’єднання або знайти сервери у [accent]локальній[] чи [accent]глобальній мережі[] для приєднання до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Це не є автоматичним глобальним списком серверів; якщо ви хочете приєднатися до когось через IP, вам доведеться попросити власника сервера дати свій ip. hostserver = Запустити багатокористувацький сервер invitefriends = Запросити друзів @@ -190,6 +192,10 @@ servers.local = Локальні сервери servers.remote = Віддалені сервери servers.global = Глобальні сервери +servers.showhidden = Показати приховані сервери +server.shown = Показано +server.hidden = Приховано + trace = Стежити за гравцем trace.playername = Ім’я гравця: [accent]{0} trace.ip = IP: [accent]{0} @@ -268,6 +274,9 @@ cancel = Скасувати openlink = Перейти за посиланням copylink = Скопіювати посилання back = Назад +crash.export = Експортувати аварійні звіти +crash.none = Аварійних звітів не знайдено +crash.exported = Аварійні звіти експортовано data.export = Вивантажити дані data.import = Завантажити дані data.openfolder = Відчинити теку з даними @@ -284,13 +293,19 @@ cancelbuilding = [accent][[{0}][], щоб очистити план selectschematic = [accent][[{0}][], щоби вибрати та скопіювати pausebuilding = [accent][[{0}][], щоби призупинити будування resumebuilding = [scarlet][[{0}][], щоби продовжити будування +showui = Користувацький інтерфейс приховано.\nНатисніть [accent][[{0}][], щоби показати його знову. wave = [accent]Хвиля {0} +wave.cap = [accent]Хвиля {0}/{1} wave.waiting = [lightgray]Наступна хвиля\nчерез {0} wave.waveInProgress = [lightgray]Хвиля триває waiting = [lightgray]Очікування… waiting.players = Очікування гравців… wave.enemies = Залишилося\n[lightgray]{0} противник. +wave.enemycores = Ворожих ядер: [accent]{0}[lightgray] +wave.enemycore = [accent]{0}[lightgray] вороже ядро wave.enemy = Залишився\n[lightgray]{0} противник +wave.guardianwarn = Хвиль до появи Вартового: [accent]{0}[] . +wave.guardianwarn.one = Вартовий з’явиться через [accent]{0}[] хвилю. loadimage = Завантажити зображення saveimage = Зберегти зображення unknown = Невідомо @@ -329,6 +344,7 @@ editor.generation = Генерація: editor.ingame = Редагувати в грі editor.publish.workshop = Опублікувати в Майстерні Steam editor.newmap = Нова мапа +editor.center = Центрувати workshop = Майстерня waves.title = Хвилі waves.remove = Видалити @@ -347,6 +363,7 @@ waves.invalid = Недійсні хвилі в буфері обміну. waves.copied = Хвилі скопійовані. waves.none = Противники не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею. +#these are intentionally in lower case wavemode.counts = кількість wavemode.totals = усього wavemode.health = здоров’я @@ -417,6 +434,7 @@ filters.empty = [lightgray]Немає фільтрів! Додайте хоча filter.distort = Спотворення filter.noise = Шум filter.enemyspawn = Вибір точки появи противників +filter.spawnpath = Шлях до точки появи filter.corespawn = Вибір ядра filter.median = Медіана filter.oremedian = Рудна медіана @@ -441,6 +459,7 @@ filter.option.amount = Кількість filter.option.block = Блок filter.option.floor = Поверхня filter.option.flooronto = Цільова поверхня +filter.option.target = Ціль filter.option.wall = Стіна filter.option.ore = Руда filter.option.floor2 = Друга поверхня @@ -457,7 +476,9 @@ load = Завантажити save = Зберегти fps = FPS: {0} ping = Затримка: {0} мс -language.restart = Будь ласка, перезапустіть свою гру, щоби налаштування мови набули чинності. +memory = Mem: {0}мб +memory2 = Mem:\n {0}мб +\n {1}мб +language.restart = Перезапустіть свою гру, щоби налаштування мови набули чинності. settings = Налаштування tutorial = Навчання tutorial.retake = Пройти навчання ще раз @@ -470,13 +491,16 @@ locked = Заблоковано complete = [lightgray]Необхідно: requirement.wave = Досягніть хвилі {0} у зоні «{1}» requirement.core = Знищте вороже ядро в зоні «{0}» -requirement.research = Research {0} -requirement.capture = Capture {0} +requirement.research = Дослідіть {0} +requirement.produce = Виробіть {0} +requirement.capture = Захопіть {0} bestwave = [lightgray]Найкраща хвиля: {0} launch.text = Запуск -campaign.multiplayer = Коли ви граєте з кимось в кампанії, то ви можете дослідити лише використовуючи предмети з [accent]ваших[] секторів, [scarlet]гн[] з сектора власника, на якому ви перебуваєте прямо зараз.\n\nЗадля отримання предметів у [accent]своїх[] секторах в багатокористувацькій грі використайте [accent]Стартовий майданчик[]. +research.multiplayer = Лише власник сервера має змогу досліджувати предмети. uncover = Розкрити configure = Налаштувати вивантаження + +#TODO loadout = Вивантаження resources = Ресурси bannedblocks = Заборонені блоки @@ -490,7 +514,7 @@ zone.objective = [lightgray]Мета: [accent]{0} zone.objective.survival = вижити zone.objective.attack = знищити вороже ядро add = Додати… -boss.health = Здоров’я босу +boss.health = Здоров’я Вартового connectfail = [crimson]Помилка з’єднання:\n\n[accent]{0} error.unreachable = Сервер не є доступним.\nЧи правильно написана адреса? @@ -507,16 +531,42 @@ weather.rain.name = Дощ weather.snow.name = Сніг weather.sandstorm.name = Піщана буря weather.sporestorm.name = Спорова буря +weather.fog.name = Туман sectors.unexplored = [lightgray]Не досліджено sectors.resources = Ресурси: sectors.production = Виробництво: +sectors.export = Експортування: +sectors.time = Час: +sectors.threat = Загроза: +sectors.wave = Хвиля: sectors.stored = Зберігає: sectors.resume = Продовжити -sectors.launch = Запуск +sectors.launch = Запустити sectors.select = Вибрати sectors.nonelaunch = [lightgray]нічого (сонце) +sectors.rename = Перейменування сектора +sector.curcapture = Сектор захоплено +sector.missingresources = [scarlet]Недостатньо ресурсів в ядрі +sector.attacked = Сектор [accent]{0}[white] під атакою! +sector.lost = Сектор [accent]{0}[white] втрачено! +#note: the missing space in the line below is intentional +sector.captured = Сектор [accent]{0}[white]захоплено! +threat.low = низька +threat.medium = середня +threat.high = висока +threat.extreme = екстремальна +threat.eradication = викорінювальна + +planets = Планети + +planet.serpulo.name = Cерпуло +#TODO better name +planet.sun.name = Сонце + +#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway +sector.impact0078.name = Аварійне приземлення 0078 sector.groundZero.name = Відправний пункт sector.craters.name = Кратери sector.frozenForest.name = Крижаний ліс @@ -528,6 +578,12 @@ sector.overgrowth.name = Зарості sector.tarFields.name = Дьогтьові поля sector.saltFlats.name = Соляні рівнини sector.fungalPass.name = Грибний перевал +sector.biomassFacility.name = Центр дослідження синтезу біомаси +sector.windsweptIslands.name = Вітряні острови +sector.extractionOutpost.name = Видобувна застава + +#unused +#sector.crags.name = Crags sector.groundZero.description = Оптимальне місце для повторних ігор. Низька ворожа загроза. Мало ресурсів.\nЗбирайте якомога більше свинцю та міді.\nНе затримуйтесь і йдіть далі. sector.frozenForest.description = Спори поширилися навіть тут, ближче до гір. Холодна температура не може стримувати їх завжди.\n\nЗважтесь створити енергію. Побудуйте генератори внутрішнього згорання. Навчіться користуватися регенераторами. @@ -539,7 +595,7 @@ sector.overgrowth.description = Ближче до джерела спор є т sector.tarFields.description = Між горами та пустелею простягається окраїна зони видобутку нафти. Це один із небагатьох районів із корисними для використання запасами смоли.\nНе зважаючи на те, що територія покинута, вона має поблизу небезпечні сили противника. Не варто їх недооцінювати.\n\n[lightgray]Якщо можливо, дослідіть технологію перероблювання нафти. sector.desolateRift.description = Надзвичайно небезпечна зона. Багато ресурсів, але мало місця. Високий ризик знищення. Евакуюватися потрібно якомога швидше. Не розслабляйтеся між ворожими атаками та знайдіть ахіллесову п’яту супротивника. sector.nuclearComplex.description = Колишній об’єкт для виробництва та перероблювання торію було зведено до руїн.\n[lightgray]Дослідіть торій та його нескінченну кількість застосувань.\n\n Противник, який постійно шукає нападників, присутній тут у великій кількості, тому не баріться з евакуацією. -sector.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. +sector.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. settings.language = Мова settings.data = Ігрові дані @@ -555,22 +611,28 @@ settings.clear.confirm = Ви дійсно хочете очистити ці д settings.clearall.confirm = [scarlet]УВАГА![]\nЦе очистить усі дані, включно із збереженнями, мапами, розблокованим та налаштуваннями керування.\nПісля натискання «Гаразд» гра видалить усі дані та автоматично закриється. settings.clearsaves.confirm = Ви справді хочете видалити всі ваші збереження? settings.clearsaves = Очистити збереження -paused = [accent]< Пауза> +settings.clearresearch = Очистити дослідження +settings.clearresearch.confirm = Ви справді хочете очистити дослідження кампанії? +settings.clearcampaignsaves = Очистити збереження в кампанії +settings.clearcampaignsaves.confirm = Ви справді хочете очистити всі збереженні в кампанії? +paused = [accent]< Пауза > clear = Очистити banned = [scarlet]Заблоковано -unplaceable.sectorcaptured = [scarlet]Вимагає захопленого сектору yes = Так no = Ні info.title = Інформація error.title = [crimson]Виникла помилка error.crashtitle = Виникла помилка unit.nobuild = [scarlet]Ця одиниця не може будувати +lastaccessed = [lightgray]Остання зміна від {0} +block.unknown = [lightgray]??? + +stat.description = Призначення stat.input = Ввід stat.output = Вивід stat.booster = Прискорювач stat.tiles = Необхідні плитки stat.affinities = Збільшення ефективності -block.unknown = [lightgray]??? stat.powercapacity = Місткість енергії stat.powershot = Енергія за постріл stat.damage = Шкода @@ -593,6 +655,8 @@ stat.memorycapacity = Ємність пам’яті stat.basepowergeneration = Базова генерація енергії stat.productiontime = Час виробництва stat.repairtime = Час повного відновлення блоку +stat.weapons = Зброя +stat.bullet = Кулі stat.speedincrease = Збільшення швидкості stat.range = Радіус дії stat.drilltier = Видобуває @@ -605,10 +669,35 @@ stat.maxconsecutive = Максимальна послідовність stat.buildcost = Вартість будування stat.inaccuracy = Розкид stat.shots = Постріли -stat.reload = Постріли/секунду +stat.reload = Постріли за сек. stat.ammo = Боєприпаси stat.shieldhealth = Міцність щита stat.cooldowntime = Тривалість охолодження +stat.explosiveness = Вибухонебезпечність +stat.basedeflectchance = Базовий шанс відбиття +stat.lightningchance = Шанс удару блискавки +stat.lightningdamage = Шкода від удару блискавки +stat.flammability = Займистість +stat.radioactivity = Радіоактивність +stat.heatcapacity = Теплоємність +stat.viscosity = В’язкість +stat.temperature = Температура +stat.speed = Швидкість +stat.buildspeed = Швидкість будування +stat.minespeed = Швидкість видобутку +stat.minetier = Рівень видобутку +stat.payloadcapacity = Вантажопідйомність +stat.commandlimit = Максимум в загоні +stat.abilities = Здібності +stat.canboost = Можна прискорити +stat.flying = Літає + +ability.forcefield = Щитове поле +ability.repairfield = Ремонтувальне поле +ability.statusfield = Поле підсилення +ability.unitspawn = Завод одиниць «{0}» +ability.shieldregenfield = Поле, що відновлює щити +ability.movelightning = Блискавки при русі bar.drilltierreq = Потребується кращий бур bar.noresources = Бракує ресурсів @@ -620,6 +709,7 @@ bar.powerbalance = Енергія: {0} за с. bar.powerstored = Зберігає: {0}/{1} bar.poweramount = Енергія: {0} bar.poweroutput = Вихідна енергія: {0} +bar.powerlines = З’єднань: {0}/{1} bar.items = Предмети: {0} bar.capacity = Місткість: {0} bar.unitcap = {0} {1}/{2} @@ -631,19 +721,26 @@ bar.progress = Хід будування bar.input = Ввід bar.output = Вивід +units.processorcontrol = [lightgray]Керується процесором + bullet.damage = [stat]{0}[lightgray] шкода bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток bullet.incendiary = [stat]запальний +bullet.sapping = [stat]виснажує bullet.homing = [stat]самонаведення bullet.shock = [stat]шок bullet.frag = [stat]шкода по ділянці bullet.knockback = [stat]{0}[lightgray] відкидання +bullet.pierce = [stat]{0}[lightgray]x пробиття +bullet.infinitepierce = [stat]пробиття +bullet.healpercent = [stat]{0}[lightgray]% лікування bullet.freezing = [stat]заморожування bullet.tarred = [stat]дьогтьовий bullet.multiplier = [stat]{0}[lightgray]x патронів bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджання unit.blocks = блоки +unit.blockssquared = блоків² unit.powersecond = одиниць енергії за секунду unit.liquidsecond = одиниць рідини за секунду unit.itemssecond = предметів за секунду @@ -661,12 +758,13 @@ unit.items = предм. unit.thousands = тис unit.millions = млн unit.billions = млрд +category.purpose = Призначення category.general = Загальне category.power = Енергія category.liquids = Рідини category.items = Предмети category.crafting = Виробництво -category.shooting = Стрільба +category.function = Стрільба category.optional = Додаткові поліпшення setting.landscape.name = Тільки альбомний (горизонтальний) режим setting.shadows.name = Тіні @@ -674,8 +772,8 @@ setting.blockreplace.name = Пропонування щодо автоматич setting.linear.name = Лінійна фільтрація setting.hints.name = Підказки setting.flow.name = Показувати темп швидкості ресурсів +setting.backgroundpause.name = Пауза при згортанн setting.buildautopause.name = Автоматичне призупинення будування -setting.mapcenter.name = Автоматичне центрування мапи на гравця setting.animatedwater.name = Анімаційні рідини setting.animatedshields.name = Анімаційні щити setting.antialias.name = Згладжування[lightgray] (потребує перезапуску)[] @@ -709,7 +807,6 @@ setting.fullscreen.name = Повноекранний режим setting.borderlesswindow.name = Вікно без полів[lightgray] (може потребувати перезапуску) setting.fps.name = Показувати FPS і затримку до сервера setting.smoothcamera.name = Гладка камера -setting.blockselectkeys.name = Показувати клавіші вибору блока setting.vsync.name = Вертикальна синхронізація setting.pixelate.name = Пікселізація setting.minimap.name = Показувати мінімапу @@ -844,6 +941,7 @@ rules.title.unit = Бойові одиниці rules.title.experimental = Експериментальне rules.title.environment = Середовище rules.lighting = Світлотінь +rules.enemyLights = Ворожі вогні rules.fire = Вогонь rules.explosions = Шкода від вибухів блоків і одиниць rules.ambientlight = Навколишнє світло @@ -855,6 +953,7 @@ content.item.name = Предмети content.liquid.name = Рідини content.unit.name = Бойові одиниці content.block.name = Блоки + item.copper.name = Мідь item.lead.name = Свинець item.coal.name = Вугілля @@ -868,7 +967,7 @@ item.surge-alloy.name = Кінетичний сплав item.spore-pod.name = Споровий стручок item.sand.name = Пісок item.blast-compound.name = Вибухова суміш -item.pyratite.name = Піротит +item.pyratite.name = Пиротит item.metaglass.name = Метаскло item.scrap.name = Брухт liquid.water.name = Вода @@ -876,23 +975,6 @@ liquid.slag.name = Шлак liquid.oil.name = Нафта liquid.cryofluid.name = Кріогенна рідина -item.explosiveness = [lightgray]Вибухонебезпечність: {0} % -item.flammability = [lightgray]Вогненебезпечність: {0} % -item.radioactivity = [lightgray]Радіоактивність: {0} % - -unit.health = [lightgray]Здоров’я: {0} -unit.speed = [lightgray]Швидкість: {0} -unit.weapon = [lightgray]Зброя: {0} -unit.itemcapacity = [lightgray]Місткість елементів: {0} -unit.minespeed = [lightgray]Швидкість видобутку: {0} % -unit.minepower = [lightgray]Потужність видобутку: {0} -unit.ability = [lightgray]Здібність: {0} -unit.buildspeed = [lightgray]Швидкість будування: {0} % - -liquid.heatcapacity = [lightgray]Теплоємність: {0} -liquid.viscosity = [lightgray]В’язкість: {0} -liquid.temperature = [lightgray]Температура: {0} - unit.dagger.name = Кинджал unit.mace.name = Булава unit.fortress.name = Фортеця @@ -904,7 +986,7 @@ unit.atrax.name = Атракс unit.spiroct.name = Павучник unit.arkyid.name = Аркиїд unit.toxopid.name = Отруйник -unit.flare.name = Фальшфеєр +unit.flare.name = Фальшфейєр unit.horizon.name = Горизонт unit.zenith.name = Зеніт unit.antumbra.name = Тіньовик @@ -912,13 +994,13 @@ unit.eclipse.name = Затьмарник unit.mono.name = Моно unit.poly.name = Полі unit.mega.name = Мега -unit.quad.name = Квал +unit.quad.name = Квад unit.oct.name = Окт unit.risso.name = Грампус -unit.minke.name = Смугач малий -unit.bryde.name = Смугач Брайда -unit.sei.name = Sei -unit.omura.name = Omura +unit.minke.name = Смугач +unit.bryde.name = Брайд +unit.sei.name = Сейвал +unit.omura.name = Омура unit.alpha.name = Альфа unit.beta.name = Бета unit.gamma.name = Гамма @@ -933,6 +1015,7 @@ block.cliff.name = Скеля block.sand-boulder.name = Пісочний валун block.grass.name = Трава block.slag.name = Шлак +block.space.name = Космос block.salt.name = Сіль block.salt-wall.name = Соляна стіна block.pebbles.name = Галька @@ -957,7 +1040,7 @@ block.thruster.name = Штовхач block.kiln.name = Піч block.graphite-press.name = Графітний прес block.multi-press.name = Мультипрес -block.constructing = {0}\n[lightgray](В процесі) +block.constructing = {0}\n[lightgray](У процесі) block.spawn.name = Місце появи противника block.core-shard.name = Ядро «Уламок» block.core-foundation.name = Ядро «Штаб» @@ -978,6 +1061,7 @@ block.darksand-water.name = Темний пісок із водою block.char.name = Випалена земля block.dacite.name = Дацит block.dacite-wall.name = Дацитова стіна +block.dacite-boulder.name = Дацитовий валун block.ice-snow.name = Крижаний сніг block.stone-wall.name = Кам’яна стіна block.ice-wall.name = Крижана стіна @@ -1026,7 +1110,6 @@ block.conveyor.name = Конвеєр block.titanium-conveyor.name = Титановий конвеєр block.plastanium-conveyor.name = Пластанієвий конвеєр block.armored-conveyor.name = Броньований конвеєр -block.armored-conveyor.description = Переміщує предмети з тією ж швидкістю, що й титанові конвеєри, але має більше міцності. Не приймає введення з боків ні з чого, крім інших конвеєрних стрічок. block.junction.name = Перехрестя block.router.name = Маршрутизатор block.distributor.name = Розподілювач @@ -1034,7 +1117,6 @@ block.sorter.name = Сортувальник block.inverted-sorter.name = Зворотній сортувальник block.message.name = Повідомлення block.illuminator.name = Освітлювач -block.illuminator.description = Невелике, компактне, джерело світла, яку можна налаштувати. Для роботи потребує енергії. block.overflow-gate.name = Надмірний затвор block.underflow-gate.name = Недостатній затвор block.silicon-smelter.name = Кремнієвий плавильний завод @@ -1070,15 +1152,16 @@ block.liquid-void.name = Рідинний вакуум block.power-void.name = Енергетичний вакуум block.power-source.name = Нескінченне джерело енергії block.unloader.name = Розвантажувач -block.vault.name = Вмістилище +block.vault.name = Склад block.wave.name = Хвиля +block.tsunami.name = Цунамі block.swarmer.name = Роєвик block.salvo.name = Залп block.ripple.name = Ряб block.phase-conveyor.name = Фазовий конвеєр block.bridge-conveyor.name = Мостовий конвеєр block.plastanium-compressor.name = Пластанієвий компресор -block.pyratite-mixer.name = Змішувач піротита +block.pyratite-mixer.name = Змішувач пиротита block.blast-mixer.name = Змішувач вибухонебезпечного з’єднання block.solar-panel.name = Сонячна панель block.solar-panel-large.name = Велика сонячна панель @@ -1111,6 +1194,7 @@ block.arc.name = Дуга block.rtg-generator.name = Радіоізотопний термоелектричний генератор block.spectre.name = Спектр block.meltdown.name = Розплавлювач +block.foreshadow.name = Передвісник block.container.name = Сховище block.launch-pad.name = Стартовий майданчик block.launch-pad-large.name = Великий стартовий майданчик @@ -1127,7 +1211,11 @@ block.payload-conveyor.name = Вантажний конвеєр block.payload-router.name = Розвантажувальний маршрутизатор block.disassembler.name = Розбирач block.silicon-crucible.name = Кремнієвий тигель -block.overdrive-dome.name = Величний Прискорювач +block.overdrive-dome.name = Великий прискорювач +#experimental, may be removed +block.block-forge.name = Блок-кузня +block.block-loader.name = Блок-завантажувач +block.block-unloader.name = Блок-вивантажувач block.switch.name = Перемикач block.micro-processor.name = Мікропроцесор @@ -1168,136 +1256,205 @@ tutorial.waves = [lightgray]Противник[] з’явився.\n\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.sand.description = Поширений матеріал, який широко використовується у виплавці, як під час сплавлення, так і в якості відходів. -item.coal.description = Скам’янілі рослинні речовини, що утворилися задовго до посіву. Широко використовується для виробництва пального та ресурсів. -item.titanium.description = Рідкісний надлегкий метал, який широко використовується для транспортування рідини, бурів і літаків. -item.thorium.description = Щільний радіоактивний метал, що використовується в якості конструкційної опори та ядерного палива. -item.scrap.description = Залишки старих споруд та підрозділів. Містить мікроелементи багатьох різних металів. -item.silicon.description = Надзвичайно корисний напівпровідник. Має застосування в сонячних батареях, складній електроніці та боєприпасах для башт. -item.plastanium.description = Легкий пластичний матеріал, що використовується в сучасних літальних апаратах та у фрагментованих боєприпасах. -item.phase-fabric.description = Майже невагома речовина, що застосовується в передовій електроніці та в технології самовідновлення. -item.surge-alloy.description = Удосконалений сплав з унікальними електричними властивостями. -item.spore-pod.description = Струмок синтетичних спор, синтезований з атмосферних концентрацій для промислових цілей. Використовується для перетворення на нафту, вибухівку та паливо. -item.blast-compound.description = Нестабільна сполука, яка використовується в бомбах і вибухівках. Синтезується зі спорових стручків та інших летких речовин. Використовувати як паливо не рекомендується. -item.pyratite.description = Надзвичайно легкозаймиста речовина, що використовується в запальній зброї. -liquid.water.description = Найкорисніша рідина. Зазвичай використовується для охолодження машин та перероблювання відходів. -liquid.slag.description = Різні види розплавленого металу змішуються між собою. Може бути відокремлений від складових корисних копалин або розпорошений на ворожі частини як зброя. -liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена у вугілля в якості палива або використана як куля. -liquid.cryofluid.description = Інертна рідина, що створена з води та титану. Має здатність надзвичайно високою пропускною спроможністю. Широко використовується в якості рідини, що охолоджує. +item.copper.description = Використовується у всіх типах блоків і боєприпасах. +item.copper.details = Мідь. Напрочуд багато жил цієї руди на Серпуло. За своєю структурою слабка, якщо не зміцнена. +item.lead.description = Широко використовується в електроніці та в транспортуванні рідин. +item.lead.details = Сплав. Інертний. Широко використовується в акумуляторах.\nПримітка. Мабуть, токсичний для біологічних форм життя. Не те щоб тут залишилося багато... +item.metaglass.description = Використовується для розподілу чи зберігання рідини. +item.graphite.description = Використовується для боєприпасів та електричних компонентів. +item.sand.description = Використовується для виробництва інших удосконалених матеріалів. +item.coal.description = Використовується для виробництва палива і вдосноналених матеріалів. +item.coal.details = Виглядає скам’янілою рослинною речовиною, утвореною задовго до Сівби. +item.titanium.description = Використовується в транспортуванні рідин, бурів та авіації. +item.thorium.description = Використовується в міцних конструкціях і як ядерне паливо. +item.scrap.description = Використовується у Плавильнях і Подрібнювачах для переробки в інші матеріали в інші матеріали. +item.scrap.details = Залишки старих споруд та підрозділів. +item.silicon.description = Використовується в сонячних панелях, складній електроніці та боєприпасах самонаведення для башт. +item.plastanium.description = Використовується в передових одиницях та у фрагментованих боєприпасах. +item.phase-fabric.description = Використовується в передовій електроніці і технології самовідновлення. +item.surge-alloy.description = Використовується в передовій зброї та реактивних захисних конструкціях. +item.spore-pod.description = Використовується для перетворення на нафту, вибухівку та паливо. +item.spore-pod.details = Спори. Найімовірніше, синтетична форма життя. Виділяють гази, токсичні для іншого біологічного життя. Надзвичайно загарбницька поведінка. Легкозаймисті при певних умовах. +item.blast-compound.description = Використовується в бомбах та в розривних боєприпасах. +item.pyratite.description = Використовується в запальній зброї і твердопаливних генераторах. +liquid.water.description = Використовується для охолодження машин та перероблювання відходів. +liquid.slag.description = Переробляється у відокремлювачах у складові метали або розпорошується на ворогів як зброя. +liquid.oil.description = Використовується у виробництві передових матеріалів і як запальні боєприпаси. +liquid.cryofluid.description = Використовується як теплоносій в реакторах, баштах і заводах. -block.message.description = Зберігає повідомлення. Використовується для комунікації між союзниками. -block.graphite-press.description = Стискає шматки вугілля в чисті аркуші графіту. -block.multi-press.description = Модернізована версія графітового преса. Використовує воду та енергію для швидкого та ефективного перероблювання вугілля. -block.silicon-smelter.description = Змішує пісок із чистим вугіллям. Виробляє кремній. -block.kiln.description = Виплавляє пісок та свинець у сполуку, відому як метаскло. Для запуску потрібна невелика кількість енергії. -block.plastanium-compressor.description = Виробляє пластаній із нафти та титану. -block.phase-weaver.description = Синтезує фазову тканину з радіоактивного торію та піску. Для роботи потрібна велика кількість енергії. +block.armored-conveyor.description = Переміщує предмети вперед. Не приймає введення з боків ні з чого, крім інших конвеєрних стрічок. +block.illuminator.description = Випромінює світло. +block.message.description = Зберігає повідомлення для комунікації між союзниками. +block.graphite-press.description = Стискає вугілля в графіт. +block.multi-press.description = Стискає вугілля в графіт. Потребує воду для охолодження. +block.silicon-smelter.description = Синтезує пісок з вугіллям для отримання кремнію. +block.kiln.description = Виплавляє пісок та свинець у метаскло. +block.plastanium-compressor.description = Виробляє пластаній із нафти і титану. +block.phase-weaver.description = Синтезує фазову тканину з торію та піску. block.alloy-smelter.description = Поєднує титан, свинець, кремній і мідь для отримання кінетичного сплаву. -block.cryofluid-mixer.description = Змішує воду і дрібний порошок титану в кріогенну рідину. Основне використання в торієвому реактору. -block.blast-mixer.description = Подрібнює і змішує скупчення спор із піротитом для отримання вибухової суміші. -block.pyratite-mixer.description = Змішує вугілля, свинець та пісок у легкозаймистий піротит. -block.melter.description = Розплавляє брухт у шлак для подальшого перероблювання, або використання в баштах «Хвиля». -block.separator.description = Відокремлює шлак на його мінеральні компоненти. Виводить охолоджені матеріали. -block.spore-press.description = Стискає спорові стручки під сильним тиском для синтезу нафти. +block.cryofluid-mixer.description = Змішує воду і подрібнений титан, щоб виробити кріогенну рідину. +block.blast-mixer.description = Виробляє вибухову суміш з піратиту і спорових стручків. +block.pyratite-mixer.description = Змішує вугілля, свинець та пісок у легкозаймистий пиротит. +block.melter.description = Розплавляє брухт у шлак. +block.separator.description = Відокремлює шлак на його мінеральні компоненти. +block.spore-press.description = Стискає спорові стручки для синтезування нафти. block.pulverizer.description = Подрібнює брухт у дрібний пісок. -block.coal-centrifuge.description = Нафта перетворюється в шматки вугілля. -block.incinerator.description = Випаровує будь-який зайвий предмет або рідину, які він отримує. -block.power-void.description = Знищує будь-яку енергію, до якої він під’єднаний. Тільки пісочниця. -block.power-source.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.liquid-void.description = Видаляє будь-які рідини. Тільки пісочниця. -block.copper-wall.description = Дешевий оборонний блок.\nКорисний для оборони ядра та башт у перші кілька хвиль. -block.copper-wall-large.description = Дешевий оборонний блок.\nКорисний для оборони ядра та башт у перші кілька хвиль.\nЗаймає декілька плиток. -block.titanium-wall.description = Порівняно сильний оборонний блок.\nЗабезпечує помірний оборони від противників. -block.titanium-wall-large.description = Порівняно сильний оборонний блок.\nЗабезпечує помірний оборони від противників.\nЗаймає декілька плиток. -block.plastanium-wall.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з’єднання енергетичних вузлів. -block.plastanium-wall-large.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з’єднання енергетичних вузлів.\nЗаймає декілька плиток. -block.thorium-wall.description = Сильний оборонний блок.\nГарна оборона від противників. -block.thorium-wall-large.description = Сильний оборонний блок.\nГарна оборона від противників.\nЗаймає декілька плиток. -block.phase-wall.description = Стіна має покриття спеціальним складом, що відбиває світло і який базується на фазовій тканині. Здебільшого відбиває кулі у разі удару. -block.phase-wall-large.description = Стіна має покриття спеціальним складом, що відбиває світло і який базується на фазовій тканині. Здебільшого відбиває кулі у разі удару.\nЗаймає декілька плиток. -block.surge-wall.description = Надзвичайно міцний оборонний блок.\nЗбільшує заряд, якщо контактуватиме з кулями, вивільняючи його випадковим чином. -block.surge-wall-large.description = Надзвичайно міцний оборонний блок.\nЗбільшує заряд, якщо контактуватиме з кулями, вивільняючи його випадковим чином.\nЗаймає декілька плиток. -block.door.description = Невеликі двері. Можна відчинити або зачинити, натиснувши на них. -block.door-large.description = Великі двері. Можна відчинити та зачинити, натиснувши на них.\nЗаймає декілька плиток. -block.mender.description = Періодично ремонтує блоки в його радіусі дії. Боронить башти та стіни.\nЗа бажанням, можна використати кремній для підвищення дальності та ефективності. -block.mend-projector.description = Покращена версія «Регенератора». Періодично ремонтує блоки в його радіусі дії.\nЗа бажанням, можна використати фазову тканину для підвищення дальності та ефективності. -block.overdrive-projector.description = Збільшує швидкість найближчих будівель.\nЗа бажанням, можна використати фазову тканину для підвищення дальності та ефективності. -block.force-projector.description = Створює навколо себе шестикутне силове поле, боронячи будівлі та блоки всередині від пошкоджень.\nПерегрівається, якщо завдано занадто великої шкоди. За бажанням, можна використати теплоносій для запобігання перегріву. Для збільшення розміру щита можна використовувати фазову тканину. -block.shock-mine.description = Наносить шкоду противникам, коли вони наступають на міну. Майже невидима для противника. -block.conveyor.description = Базовий транспортний блок. Переміщує елементи вперед і автоматично перетворює їх у блоки. Можна обертати. -block.titanium-conveyor.description = Покращений блок транспорту елементів. Переміщує предмети швидше, ніж звичайні конвеєри. -block.plastanium-conveyor.description = Переміщує предмети партіями.\nПриймає елементи на задній частині та вивантажує їх у трьох напрямках спереду.\nПотребує кілька точок завантаження та розвантаження для максимальної пропускної здатності. -block.junction.description = Діє як міст для двох перехресних конвеєрних стрічок. Корисно в ситуаціях, коли два різних конвеєри перевозять різні матеріали в різні місця. -block.bridge-conveyor.description = Покращений блок транспорту елементів. Дає змогу транспортувати предмети до 3-ох плиток із будь-якої місцевості чи будівлі. -block.phase-conveyor.description = Покращений блок транспорту елементів. Використовує енергію для телепортування елементів на під’єднаний фазовий конвеєр через кілька плиток. -block.sorter.description = Сортує предмети. Якщо елемент відповідає вибраному, його можна передати. В іншому випадку елемент виводиться зліва та/чи справа. -block.inverted-sorter.description = Обробляє елементи, як звичайний сортувальник, але виводить обрані елементи на сторони. -block.router.description = Приймає елементи з одного напрямку та виводить їх до трьох інших напрямків порівну. Корисно для поділу матеріалів від одного джерела до кількох цілей.\n\n[scarlet]Ніколи не використовуйте поруч із входами до механізмів, оскільки вони будуть забиті вихідними предметами.[] -block.distributor.description = Поліпшений маршрутизатор. Розділяє предмети до 7 інших напрямків порівну. -block.overflow-gate.description = Вивантажує лише вліво та/або вправо, якщо передній шлях заблокований. -block.underflow-gate.description = Повна протилежність надмірному затвору. Виводить предмет прямо, якщо лівий та/або правий шлях заблоковано. +block.item-void.description = Руйнує будь-які предмети. Тільки пісочниця. +block.liquid-source.description = Постійно виробляє рідини. Тільки пісочниця. +block.liquid-void.description = Випаровує будь-які рідини. Тільки пісочниця. +block.copper-wall.description = Захищає споруди від ворожих снарядів. +block.copper-wall-large.description = Захищає споруди від ворожих снарядів. +block.titanium-wall.description = Захищає споруди від ворожих снарядів. +block.titanium-wall-large.description = Захищає споруди від ворожих снарядів. +block.plastanium-wall.description = Захищає споруди від ворожих снарядів. Поглинає електричні дуги і лазери. Блокує автоматичні з’єднання енергетичних вузлів. +block.plastanium-wall-large.description = Захищає споруди від ворожих снарядів. Поглинає електричні дуги і лазери. Блокує автоматичні з’єднання енергетичних вузлів. +block.thorium-wall.description = Захищає споруди від ворожих снарядів. +block.thorium-wall-large.description = Захищає споруди від ворожих снарядів. +block.phase-wall.description = Захищає споруди від ворожих снарядів, відбиває більшість куль при зіткненні. +block.phase-wall-large.description = Захищає споруди від ворожих снарядів, відбиває більшість куль при зіткненні. +block.surge-wall.description = Захищає споруди від ворожих снарядів, періодично випускає електричні дуги при зіткненні. +block.surge-wall-large.description = Захищає споруди від ворожих снарядів, періодично випускає електричні дуги при зіткненні. +block.door.description = Стіна, яку можна відкрити і закрити. +block.door-large.description = Стіна, яку можна відкрити і закрити. +block.mender.description = Періодично ремонтує блоки в своєму радіусі дії.\nЗа бажанням можна використати кремній задля підвищення радіусу дії й ефективності. +block.mend-projector.description = Ремонтує блоки в своєму радіусі дії.\nЗа бажанням можна використати фазову тканину задля підвищення радіусу дії й ефективності. +block.overdrive-projector.description = Збільшує швидкість найближчих будівель.\nЗа бажанням можна використати фазову тканину задля підвищення радіусу дії й ефективності. +block.force-projector.description = Створює навколо себе шестикутне силове поле, захищаючи будівлі та блоки всередині від пошкоджень.\nПерегрівається, якщо завдано занадто великої шкоди. За бажанням можна використати теплоносій для запобігання перегріву. Для збільшення розміру щита можна використовувати фазову тканину. +block.shock-mine.description = Випускає електричні дуги при контакті з ворогом. +block.conveyor.description = Переміщує елементи вперед. +block.titanium-conveyor.description = Переміщує предмети швидше, ніж звичайний конвеєр. +block.plastanium-conveyor.description = Переміщує предмети партіями. Приймає елементи на задній частині та вивантажує їх у трьох напрямках спереду. Потребує кілька точок завантаження та розвантаження для максимальної пропускної здатності. +block.junction.description = Діє як міст для двох перехресних конвеєрних стрічок. +block.bridge-conveyor.description = Транспортує предмети через будівлі або місцевість +block.phase-conveyor.description = Миттєво транспортує предмети через місцевості або будівлі. Більший діапазон, ніж у мостового конвеєра, але потребує енергії. +block.sorter.description = Якщо елемент відповідає вибраному, його можна передати. В іншому випадку елемент виводиться ліворуч та праворуч. +block.inverted-sorter.description = Схожий на звичайний сортувальник, але виводить обрані елементи на бокові сторони. +block.router.description = Розподіляє елементи, що надходять, порівну на 3 різні напрямки. +block.router.details = Необхідне зло. Не використовуйте поруч із входами до механізмів, оскільки вони, входи, будуть забиті вихідними предметами. +block.distributor.description = Розділяє предмети до 7 інших напрямків порівну. +block.overflow-gate.description = Вивантажує лише ліворуч і праворуч, якщо передній шлях заблокований. +block.underflow-gate.description = Повна протилежність надмірному затвору. Виводить предмет прямо, якщо лівий і правий шлях заблоковано. block.mass-driver.description = Найкращий блок для транспортування предметів. Збирає кілька предметів, а потім вистрілює їх до іншої електромагнітної катапульти на велику відстань. Для роботи потребує енергія. block.mechanical-pump.description = Дешевий насос із повільним виходом, але не потребує енергоспоживання. block.rotary-pump.description = Удосконалений насос. Насоси більше викачують, але потребують енергію. block.thermal-pump.description = Найкращий насос. -block.conduit.description = Основний блок транспортування рідини. Пересуває рідини вперед. Застосовується спільно з насосами та іншими трубопроводами. -block.pulse-conduit.description = Удосконалений блок транспортування рідини. Швидше транспортує й більше зберігає рідини, ніж стандартні трубопроводи. -block.plated-conduit.description = Переміщує рідини з тією ж швидкістю, що й імпульсні трубопроводи, але має більше міцності. Не приймає рідин із боків окрім інших трубопроводів.\nПротікає менше. -block.liquid-router.description = Приймає рідини з одного напрямку та виводить їх до трьох інших напрямків порівну. Також можна зберігати певну кількість рідини. Корисно для розщеплення рідин від одного джерела до кількох мішеней. -block.liquid-tank.description = Зберігає велику кількість рідини. Використовуйте для створення буферів у ситуаціях із непостійним попитом на матеріали або як гарантію охолодження життєво важливих блоків. -block.liquid-junction.description = Діє як міст для двох каналів, що перетинаються. Корисно в ситуаціях, коли два різні трубопроводи транспортують різні рідини в різні місця. -block.bridge-conduit.description = Удосконалений блок транспортування рідини. Надає можливість транспортувати рідину до 3 плиток будь-якої місцевості чи будівлі. -block.phase-conduit.description = Удосконалений блок транспортування рідини. Використовує енергію для транспортування рідин до приєднаного фазового каналу через декілька плиток. +block.conduit.description = Пересуває рідини вперед. Застосовується спільно з насосами та іншими трубопроводами. +block.pulse-conduit.description = Пересуває рідини вперед. Швидше транспортує і зберігає більше рідини, ніж стандартні трубопроводи. +block.plated-conduit.description = Пересуває рідини вперед. Не приймає рідин із боків окрім інших трубопроводів. Не протікає. +block.liquid-router.description = Приймає рідини з одного напрямку та виводить їх до трьох інших напрямків порівну. Також може зберігати певну кількість рідини. +block.liquid-tank.description = Зберігає велику кількість рідини. Виводить воду на всі сторони, через це схожий на рідинний маршрутизатор. +block.liquid-junction.description = Діє як міст для двох трубопроводів. +block.bridge-conduit.description = Транспортує рідину через місцевість і будівлі. +block.phase-conduit.description = Транспортує рідину через місцевість і будівлі. Діапазон дії більший ніж у мостового трубопровода block.power-node.description = Передає живлення на приєднані вузли. Вузол буде отримувати живлення від будь-яких сусідніх блоків або подавати живлення до них. -block.power-node-large.description = Поліпшений вузол живлення з більшим радіусом дії. +block.power-node-large.description = Передовий вузол живлення з більшим радіусом дії. block.surge-tower.description = Вузол живлення з меншою кількістю доступних з’єднань і з найбільшим радіусом дії. block.diode.description = Живлення акумулятора може протікати через цей блок лише в одному напрямку, але лише в тому випадку, якщо інша сторона має менше енергії. block.battery.description = Зберігає енергію як буфер у часи надлишкової енергії. Виводить енергію в періоди дефіциту. -block.battery-large.description = Зберігає набагато більше енергії, ніж звичайний акумулятор. -block.combustion-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали, такі як вугілля. -block.thermal-generator.description = Генерує енергію у разі розміщення в спекотних місцях. -block.steam-generator.description = Удосконалений генератор згоряння. Більш ефективний, але потребує додаткової води для отримання пари. -block.differential-generator.description = Удосконалений генератор згоряння. Використовує різницю температур між кріогенною рідиною й піротитом, що горить. -block.rtg-generator.description = Простий і надійний генератор. Використовує тепло радіоактивних сполук, які розкладаються, для отримання енергії з повільною швидкістю. +block.battery-large.description = Зберігає енергію як буфер у часи надлишкової енергії. Виводить енергію в періоди дефіциту. Більша ємність ніж у звичайного акумулятора. +block.combustion-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали, як-от вугілля. +block.thermal-generator.description = Виробляє енергію при розміщенні в спекотних місцях. +block.steam-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали і перетворює воду в пару. +block.differential-generator.description = Виробляє велику кількість енергії. Використовує різницю температур між кріогенною рідиною й пиротитом, що горить. +block.rtg-generator.description = Використовує тепло радіоактивних сполук, які розкладаються, для отримання енергії з повільною швидкістю. block.solar-panel.description = Забезпечує невелику кількість енергії від сонця. -block.solar-panel-large.description = Значно ефективніша ніж стандартна сонячна панель. -block.thorium-reactor.description = Виробляє значну кількість енергії з торію. Вимагає постійного охолодження. Сильно вибухне, якщо подаватиметься недостатня кількість теплоносія. Вихідна потужність залежить від заповненості, базова потужність генерується на повній місткості. -block.impact-reactor.description = Удосконалений генератор, здатний створювати величезну кількість енергії за максимальною ефективності. Для запуску процесу потрібно значні обсяги енергії. -block.mechanical-drill.description = Недорогий бур. Якщо розмістити на доречних плитках, то виводитиме предмети постійно, але повільно. Придатний лише для базових ресурсів. +block.solar-panel-large.description = Забезпечує невелику кількість енергії від сонця. Значно ефективніша ніж стандартна сонячна панель. +block.thorium-reactor.description = Виробляє значну кількість енергії з торію. Потребує постійного охолодження. Сильно вибухне, якщо подаватиметься недостатня кількість теплоносія. +block.impact-reactor.description = Здатний створювати величезну кількість енергії за максимальною ефективності. Для запуску процесу потрібно значні обсяги енергії. +block.mechanical-drill.description = Якщо розмістити на доречних плитках, то виводитиме предмети постійно, але повільно. Придатний лише для базових ресурсів. block.pneumatic-drill.description = Поліпшений бур, здатний видобувати титан. Видобуває швидше, ніж механічний бур. -block.laser-drill.description = Дає змогу виконувати буріння ще швидше за допомогою лазерної технології, але вимагає енергії. Придатний до видобутку торію. -block.blast-drill.description = Найкращий бур. Потрібна велика кількість енергії. -block.water-extractor.description = Видобуває підземні води. Використовується в місцях, де немає поверхневої води. -block.cultivator.description = Культивує невеликі концентрації спор в атмосфері на готові до промисловості стручки. -block.oil-extractor.description = Для видобутку нафти використовується велика кількість енергії, піску та води. -block.core-shard.description = Найперша версія капсули ядра. Після його знищення всі контакти з регіоном втрачаються. Не допустіть цього. -block.core-foundation.description = Друга версія ядра. Краще броньована. Зберігає більше ресурсів. -block.core-nucleus.description = Третя й остання версія капсули ядра. Надзвичайно добре броньована. Зберігає величезні обсяги ресурсів. +block.laser-drill.description = Дає змогу видобувати ще швидше за допомогою лазерної технології, але потребує енергії. здатний видобувати торій. +block.blast-drill.description = Найкращий бур. Потрібує великої кількості енергії. +block.water-extractor.description = Викачує підземні води. Використовується в місцях, де немає поверхневої води. +block.cultivator.description = Культивує невеликі концентрації спор в стручки. +block.cultivator.details = Відновлена технологія. Використовується для отримання величезної кількості біомаси якомога ефективніше. Ймовірно, початковий інкубатор спор, що зараз покриває Серпуло. +block.oil-extractor.description = Використовується велика кількість енергії, піску та води для отримання нафти. +block.core-shard.description = Ядро бази. Після знищення сектор втрачається. Найперша версія капсули ядра. Після його знищення всі контакти з регіоном втрачаються. Не допустіть цього. +block.core-shard.details = Найперша версія капсули ядра. Компактне. Самовідтворюванне. Оснащене одноразовими пусковими рушіями. Не призначено для міжпланетних подорожей. +block.core-foundation.description = Ядро бази. Добре броньоване. Зберігає більше ресурсів. +block.core-foundation.details = Друга версія ядра. +block.core-nucleus.description = Ядро бази. Напрочуд добре броньовано. Зберігає величезну кількість ресурсів. +block.core-nucleus.details = Третя і фінальна версія ядра. block.vault.description = Зберігає велику кількість предметів кожного типу. Блок розвантажувача може використовуватися для отримання предметів зі сховища. block.container.description = Зберігає малу кількість предметів кожного типу. Блок розвантажувача може використовуватися для отримання предметів зі сховища. -block.unloader.description = Вивантажує предмети з блока, який не переміщує предмети, на конвеєр або безпосередньо в сусідній блок. Тип предмета для завантаження можна змінити, натиснувши на блок. -block.launch-pad.description = Запускає партії предметів без необхідності запуску ядра. Стартовий майданчик надає можливість вам запускати ресурси кожні n секунд без необхідності завершувати гру. Просто подайте в нього ресурси та забезпечте енергією. -block.launch-pad-large.description = Поліпшена версія стартового майданчика. Зберігає більше предметів. Запускається частіше. -block.duo.description = Мала й дешева башта. Корисна проти наземних одиниць. -block.scatter.description = Основна протиповітряна башта. Вистрілює грудочки свинцю, брухту чи метаскла в противників. +block.unloader.description = Вивантажує предмети з найближчих блоків +block.launch-pad.description = Запускає партії предметів без необхідності запуску ядра. +block.duo.description = Вистрілює по черзі кулями по ворогах. +block.scatter.description = Вистрілює скупченням свинцю, брухту чи метаскла в повітряних противників. block.scorch.description = Підпалює будь-яких наземних противників поблизу. Високоефективна на близькій відстані. -block.hail.description = Невелика артилерійська башта з далеким радіусом дії. -block.wave.description = Башта середнього розміру. Випускає потоками рідини в противників. Автоматично гасить пожежі при постачанні води. -block.lancer.description = Лазерна башта середнього розміру, яка атакує наземних противників. Заряджає і вистрілює потужні пучки енергії. -block.arc.description = Невелика електрична башта з малим радіусом дії. Стріляє дугами електрики в противників. -block.swarmer.description = Ракетна башта середнього розміру. Атакує як повітряних, так і наземних противників. Запускає ракети, які летять у противників самостійно. -block.salvo.description = Більш велика, вдосконалена версія башти «Подвійна». Вистрілює швидкий залп куль у противника. -block.fuse.description = Велика енергетична башта з малим радіусом дії. Стріляє трьома пронизливими променями на найближчих противників. -block.ripple.description = Надзвичайно потужна артилерійська башта. На великі відстані стріляє скупченнями снарядів у противників. -block.cyclone.description = Велика протиповітряна та протиназемна башта. Підпалює вибухонебезпечними грудками скупчення противників. -block.spectre.description = Масивна двоствольна гармата. Стріляє великими бронебійними кулями в повітряні та наземні цілі. -block.meltdown.description = Масивна лазерна гармата. Заряджає і стріляє лазерним променем у найближчих противників. Для роботи потрібен теплоносій. -block.repair-point.description = Безперервно ремонтує найближчу пошкоджену бойову одиницю. -block.segment.description = Пошкоджує та руйнує вхідні снаряди. Окрім лазерних. \ No newline at end of file +block.hail.description = Вистрілює невеликі снаряди в наземних ворогів на великі відстані. +block.wave.description = Вистрілює потоки рідин в ворогів. Автоматично гасить пожежі при постачанні води. +block.lancer.description = Заряджає і вистрілює потужні пучки енергії в наземних противників. +block.arc.description = Вистрілює дугами електрики в наземних противників. +block.swarmer.description = Запускає ракети, що автоматично наводяться у противників. +block.salvo.description = Вистрілює швидкий залп куль у противника. +block.fuse.description = Вистрілює трьома променями, що пронизують броню, у малому радіусі у противників. +block.ripple.description = Вистрілює скупченням снарядів у противників. +block.cyclone.description = Підпалює вибухові грудки скупчення противників. +block.spectre.description = Вистрілює великі бронебійні кулі у повітряні та наземні цілі. +block.meltdown.description = Заряджає і вистріляє лазерним променем у найближчих противників. Для роботи потрібен теплоносій. +block.foreshadow.description = Вистрілює великим болтом в одну ціль на велику дистанцію +block.repair-point.description = Безперервно ремонтує найближчу пошкоджену бойову одиницю у своєму радіусі дії. +block.segment.description = Пошкоджує та руйнує вхідні снаряди. Окрім лазерних. +block.parallax.description = Притягає ворожі повітряні одиниці, пошкоджуючи їх в процесі. +block.tsunami.description = Вистрілює потужними потоками рідини у ворогів. Автоматично гасить пожежі при постачанні води. +block.silicon-crucible.description = Очищує кремній від піску та вугілля, використовуючи пиратит як додаткове джерело тепла. Більш ефективний у жарких місцях. +block.disassembler.description = Поділяє шлак на незначні кількості екзотичних мінеральних компонентів при низькій ефективності. Може виробляти торій. +block.overdrive-dome.description = Збільшує швидкість найближчих будівль. Потребує фазову тканину і кремній. +block.payload-conveyor.description = Переміщує великі вантажі, як-от одиниці з заводів. +block.payload-router.description = Розділяє вантажі, що надходять, у 3 різні сторони. +block.command-center.description = Контролює поведінку одиниць за допомогою декількох різних команд. +block.ground-factory.description = Виробляє наземних одиниць. Вивід одиниць можна здійснити безпосередньо на місцевість, або спрямувати до реконструкторів для поліпшення. +block.air-factory.description = Виробляє повітряних одиниць. Вивід одиниць можна здійснити безпосередньо на місцевість, або спрямувати до реконструкторів для поліпшення. +block.naval-factory.description = Виробляє одиниць. Вивід одиниць можна здійснити безпосередньо на місцевість, або спрямувати до реконструкторів для поліпшення. +block.additive-reconstructor.description = Поліпшує введених одиниць до другого рівня. +block.multiplicative-reconstructor.description = Поліпшує введених одиниць до третього рівня. +block.exponential-reconstructor.description = Поліпшує введених одиниць до четвертого рівня. +block.tetrative-reconstructor.description = Поліпшує введених одиниць до п’ятого і фінального рівня. +block.switch.description = Перемикач. Стан можна читати і контролювати за допомогою логічних процесорів. +block.micro-processor.description = Запускає послідовність логічних вказівок (інструкцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. +block.logic-processor.description = Запускає послідовність логічних вказівок (інструкцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. Швидше ніж Мікропроцесор. +block.hyper-processor.description = Запускає послідовність логічних вказівок (інструкцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. Швидше ніж Логічний процесор +block.memory-cell.description = Зберігає інформацію для логічного процесора. +block.memory-bank.description = Зберігає інформацію для логічного процесора. Висока місткість. +block.logic-display.description = Відображає довільну графіку з логічного процесора. +block.large-logic-display.description = Відображає довільну графіку з логічного процесора. + +unit.dagger.description = Вистрілює стандартними кулями по найближчих ворогах. +unit.mace.description = Вистрілює потоками полум'я у найближчих ворогів. +unit.fortress.description = Вистрілює з дальнобійної артилерії по наземних цілях. +unit.scepter.description = Вистрілює шквалом заряджених куль у найближчих ворогів. +unit.reign.description = Вистрілює шквалом масивних пронизливих куль по найближчих ворогах. +unit.nova.description = Вистрілює лазерними болтами, які пошкоджують ворогів та відновлюють союзні споруди. Здатний до польоту. +unit.pulsar.description = Випускає дуги електрики, які завдають шкоди ворогам та відновлюють союзні споруди. Здатний до польоту. +unit.quasar.description = Вистрілює пробивними лазерними промені, які пошкоджують ворогів та відновлюють споріднені конструкції. Здатний до польоту. Захищений. +unit.vela.description = Вистрілює масивним безперервним лазерним промінем, який завдає шкоди ворогам, спричиняє пожежі та відновлює союзні споруди. Здатний до польоту. +unit.corvus.description = Спричиняє масивний лазерний вибух, який завдає шкоди ворогам та відновлює споріднені споруди. Може переступати через більшість місцевості. +unit.crawler.description = Біжить до ворогів і самознищується, викликаючи великий вибух. +unit.atrax.description = Випалює виснажливі шари шлаку в наземних цілях. Може переступити більшість місцевості. +unit.spiroct.description = Вистрілює виснажливими лазерними променями у ворогів, відновлюючись при цьому. Може переступати через більшість місцевості. +unit.arkyid.description = Вистрілює у ворогів великими виснажливими лазерними променями, відновлюючись при цьому. +unit.toxopid.description = Вистрілює у ворогів великими електричними касетними снарядами та пробивними лазерами. Може переступати через більшість місцевості. +unit.flare.description = Вистрілює стандартними кулями в найближчі цілі. +unit.horizon.description = Кидає купу бомб на наземні цілі. +unit.zenith.description = Вистрілює залпи ракет по всіх найближчих ворогів. +unit.antumbra.description = Вистрілює шквал куль у всіх найближчих ворогів. +unit.eclipse.description = Вистрілює два пронизливі лазери та шквал луски по всіх найближчих ворогах. +unit.mono.description = Автоматично видобуває мідь і свинець і кладе їх в ядро. +unit.poly.description = Автоматично перебудовує зруйновані споруди та допомагає іншим одиницям у будівництві. +unit.mega.description = Автоматично відновлює пошкоджені конструкції. Здатний нести блоки та невеликі наземні блоки. +unit.quad.description = Кидає великі бомби на наземні цілі, відновлюючи союзні споруди та завдаючи шкоди ворогам. Здатний нести середні наземні одиниці. +unit.oct.description = Захищає найближчих союзників своїм відновлювальним щитом. Здатний нести більшість наземних одиниць. +unit.risso.description = Вистрілює шквалом ракет і куль по всіх найближчих ворогах. +unit.minke.description = Вистрілює запальними снарядами та стандартнами кулями по найближчих наземних цілях. +unit.bryde.description = Вистрілює по ворогам артилерійськими снарядами та ракетами великої дальності. +unit.sei.description = Вистрілює по ворогам шквалом ракет і бронебійних куль. +unit.omura.description = Вистрілює по ворогах дальнобійним болтом, що пробиває броню. Виробляє повітряних Фальшфеєрів. +unit.alpha.description = Захищає ядро «Уламок» від противників. Будує споруди. +unit.beta.description = Захищає ядро «Штаб» від противників. Будує споруди. +unit.gamma.description = Захищає ядро «Атом» від противників. Будує споруди. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 5744d3d0fd..9b0f278d9c 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -1,4 +1,4 @@ -credits.text = 作者[royal]Anuken[] - [sky]anukendev@gmail.com[] 译者[orange]老滑稽[] - [cyan]QQ:1290419934[] +credits.text = 作者[royal]Anuken[] - [sky]anukendev@gmail.com[] credits = 致谢 contributors = 翻译者和贡献者 discord = 加入 Mindustry 的 Discord! @@ -20,8 +20,8 @@ gameover = 游戏结束 gameover.pvp = [accent] {0}[]队获胜! highscore = [accent]新纪录! copied = 已复制。 -indev.popup = [accent]v6[]仍在[accent]测试版[].\n[lightgray]这意味着:[]\n[scarlet]- 战役不完善[]\n- 内容不完整\n - 大多[scarlet]单位AI[]运行不佳\n- 单位系统不完整\n- 一切内容都可能发生变动或调整。\n\n向[accent]主群(QQ681962751)[]提交错误报告。 -indev.notready = 还没做好看NM +indev.popup = [accent]6.0[]仍在[accent]测试版[].\n[lightgray]这意味着:[]\n[scarlet]- 战役玩法完全没有完成[]\n- 很多内容还没有做完\n - 大多[scarlet]单位AI[]无法正确地运行\n- 单位系统完全没有完成\n- 一切您所看到的内容都可能会移除或调整。\n\n在[accent]Github[]提交错误报告。\n[#66ccff]来自译者WinterUnderTheSnow的忠告:不建议新玩家游玩还在测试阶段的6.0!建议您先从[orange]v104.6[#66ccff]或[orange]v104.10[#66ccff]开始游玩! +indev.notready = 这部分玩法还未开发完成。 load.sound = 音乐加载中 load.map = 地图加载中 @@ -55,6 +55,7 @@ schematic.saved = 蓝图已保存。 schematic.delete.confirm = 确认删除蓝图? schematic.rename = 重命名蓝图 schematic.info = {0}x{1},{2} 个方块 +schematic.disabled = [scarlet]蓝图已禁用![]\n您不能在此[accent]地图[]或[accent]服务器[]上使用蓝图. stat.wave = 防守波数:[accent]{0} stat.enemiesDestroyed = 消灭敌人:[accent]{0} @@ -65,7 +66,7 @@ stat.delivered = 装运资源: stat.playtime = 游玩时间:[accent] {0} stat.rank = 最终评级:[accent]{0} -globalitems = [accent]Global Items +globalitems = [accent]全局物品 map.delete = 确定要删除“[accent]{0}[]”地图吗? level.highscore = 最高分:[accent]{0} level.select = 选择关卡 @@ -100,7 +101,6 @@ done = 已完成 feature.unsupported = 您的设备不支持此功能。 mods.alphainfo = 请注意,测试版本中的模组[scarlet]很容易存在缺陷[]。\n在 Mindustry 的 GitHub 或 Discord 上报告你发现的问题。 -mods.alpha = [accent](测试) mods = 模组 mods.none = [lightgray]没有找到模组! mods.guide = 模组制作教程 @@ -115,7 +115,7 @@ mod.disable = 禁用 mod.content = 内容: mod.delete.error = 无法删除模组。可能文件被占用。 mod.requiresversion = [scarlet]所需的游戏版本:[accent]{0} -mod.outdated = [scarlet]模组不兼容6.0(缺失 minGameVersion: 105) +mod.outdated = [scarlet]该模组可能不能在6.0上正确地运行(缺失 minGameVersion: 105) mod.missingdependencies = [scarlet]缺少前置模组:{0} mod.erroredcontent = [scarlet]内容错误 mod.errors = 读取内容时发生错误. @@ -127,14 +127,14 @@ mod.reloadrequired = [scarlet]需要重启 mod.import = 导入模组 mod.import.file = 导入文件 mod.import.github = 从 GitHub 导入模组 -mod.jarwarn = [scarlet]JAR模组存在危险性。[]\n请确保此模组来源安全可靠! +mod.jarwarn = [scarlet]JAR模组注定存在危险性。[]\n请确保此模组来源安全可靠! mod.item.remove = 这个物品是[accent] '{0}'[]模组的一部分. 删除物品需要先卸载此模组. mod.remove.confirm = 此模组将被删除。 mod.author = [lightgray]作者:[] {0} mod.missing = 此存档包含您最近已更新或者现在未安装的模组。存档可能会损坏。确定要加载它吗?\n[lightgray]模组:\n{0} mod.preview.missing = 在创意工坊中发布此模组前,您必须添加一则预览图像。\n请将名为[accent] preview.png[] 的图像放入模组文件夹,然后重试。 mod.folder.missing = 只有文件夹形式的模组能在创意工坊上发布。\n若要将任何模组转换为文件夹,只需将其文件解压缩到文件夹中并删除旧压缩包,然后重新启动游戏或重新加载模组。 -mod.scripts.disable = 你的设备不支持含有脚本的模组。必须禁用相关模组以进入游戏。 +mod.scripts.disable = 您的设备不支持含有脚本的模组。必须禁用相关模组以进入游戏。 about.button = 关于 name = 名字: @@ -151,28 +151,28 @@ researched = [lightgray]{0}己研究。 research.progress = {0}% 完成度 players = {0} 位玩家在线 players.single = {0} 位玩家在线 -players.search = search +players.search = 研究 players.notfound = [gray]没有找到玩家。 server.closing = [accent]服务器关闭… server.kicked.kick = 你被踢出了服务器。 server.kicked.whitelist = 你不在服务器白名单中。 server.kicked.serverClose = 服务器已关闭。 -server.kicked.vote = 你被投票踢出了服务器。 +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 = 你的名字与服务器中的一个人重复了。 +server.kicked.nameInUse = 您的名字与服务器中的一个人重复了。 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] Wi-Fi 或本地网络[]下的人应该都可以在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过 IP 地址连接,你需要设定[accent]端口转发[]。\n\n[lightgray]注意:如果某人无法连接到你的局域网游戏,请确保你在防火墙设置里允许了 Mindustry 访问本地网络。 -join.info = 您可以输入[accent]服务器的 IP 地址[]来连接,或寻找[accent]本地网络[]中的服务器来连接。\n支持局域网或广域网的多人游戏。\n\n[lightgray]注意:没有全球服务器列表;如果你想通过 IP 地址连接某个服务器,你需要向房主询问 IP 地址。 +join.info = 您可以输入[accent]服务器的 IP 地址[]来连接,或寻找[accent]本地网络[]中的服务器来连接。\n支持局域网或广域网的多人游戏。\n\n[lightgray]注意:没有全球服务器列表;如果你想通过 IP 地址连接某个服务器,你需要向服主询问 IP 地址。 hostserver = 创建服务器 invitefriends = 邀请朋友 hostserver.mobile = 创建\n服务器 @@ -201,7 +201,7 @@ server.bans.none = 没有被封禁的玩家! server.admins = 管理员 server.admins.none = 该服务器没有管理员! server.add = 添加服务器 -server.delete = 你确定要删除这个服务器吗? +server.delete = 您确定要删除这个服务器吗? server.edit = 编辑服务器 server.outdated = [crimson]服务器过旧![] server.outdated.client = [crimson]客户端过旧![] @@ -228,11 +228,11 @@ server.addressinuse = 地址已在使用! server.invalidport = 无效的端口! server.error = [crimson]创建服务器错误:[accent]{0} save.new = 新存档 -save.overwrite = 你确定你要覆盖这个存档吗? +save.overwrite = 您确定要覆盖这个存档吗? overwrite = 覆盖 save.none = 没有找到存档! savefail = 保存失败! -save.delete.confirm = 你确定你要删除这个存档吗? +save.delete.confirm = 您确定要删除这个存档吗? save.delete = 删除 save.export = 导出存档 save.import.invalid = [accent]此存档无效! @@ -245,7 +245,7 @@ save.rename.text = 新名称: selectslot = 选择一个存档。 slot = [accent]存档位 {0} editmessage = 编辑消息 -save.corrupted = [accent]存档损坏或无效!\n如果你刚刚升级了游戏,那么这可能是因为存档格式改变了,而[scarlet]不是[] bug 。 +save.corrupted = [accent]存档损坏或无效!\n如果您刚刚升级了游戏,那么这可能是因为存档格式改变了,而[scarlet]不是[] bug 。 empty = < 空 > on = 开 off = 关 @@ -284,18 +284,21 @@ selectschematic = [accent][[{0}][]来选择复制 pausebuilding = [accent][[{0}][]来暂停建造 resumebuilding = [scarlet][[{0}][]来恢复建造 wave = [accent]第{0}波 +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]下一波倒计时:{0}秒 wave.waveInProgress = [lightgray]波次袭来 waiting = [lightgray]等待中… waiting.players = 等待玩家中… wave.enemies = [lightgray]剩余 {0} 个敌人 wave.enemy = [lightgray]剩余 {0} 个敌人 +wave.guardianwarn = Boss 将在[accent]{0}[]波后到来。 +wave.guardianwarn.one = Boss 将在[accent]{0}[]波后到来。 loadimage = 加载图片 saveimage = 保存图片 unknown = 未知 custom = 自定义 -builtin = 内建的 -map.delete.confirm = 你确定你想要删除这张地图吗?这个操作无法撤销! +builtin = 内置的 +map.delete.confirm = 您确定你想要删除这张地图吗?这个操作无法撤销! map.random = [accent]随机地图 map.nospawn = 这个地图没有核心!请在编辑器中添加一个[royal]己方[]的核心。 map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[royal]敌人[]的核心。 @@ -328,6 +331,7 @@ editor.generation = 筛选器: editor.ingame = 游戏内编辑 editor.publish.workshop = 上传到创意工坊 editor.newmap = 新地图 +editor.center = 居中 workshop = 创意工坊 waves.title = 波数 waves.remove = 移除 @@ -335,9 +339,9 @@ waves.never = < 无限 > waves.every = 每 waves.waves = 波 waves.perspawn = 每次生成 -waves.shields = 护盾/波次 +waves.shields = 护盾/波 waves.to = 至 -waves.guardian = 首领 +waves.guardian = Boss waves.preview = 预览 waves.edit = 编辑… waves.copy = 复制到剪贴板 @@ -359,7 +363,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 = 此地图文件无效或已损坏。 @@ -372,8 +376,8 @@ editor.resize = 调整大小 editor.loadmap = 载入地图 editor.savemap = 保存地图 editor.saved = 已保存! -editor.save.noname = 你的地图没有名字!在“地图信息”菜单里设置一个。 -editor.save.overwrite = 你的地图覆盖了一个内置的地图!在“地图信息”菜单里重新设置一个不同的名称。 +editor.save.noname = 您的地图没有名字!在“地图信息”菜单里设置一个。 +editor.save.overwrite = 您的地图覆盖了一个内置的地图!在“地图信息”菜单里重新设置一个不同的名称。 editor.import.exists = [scarlet]无法导入:[]存在名为“{0}”的内置地图! editor.import = 导入… editor.importmap = 导入地图 @@ -416,6 +420,7 @@ filters.empty = [lightgray]没有过滤条件!用下方的按钮添加。 filter.distort = 扭曲程度 filter.noise = 波动程度 filter.enemyspawn = 敌人生成点选择 +filter.spawnpath = 敌人生成途径 filter.corespawn = 核心降落点选择 filter.median = 平均数 filter.oremedian = 矿石平均数 @@ -440,6 +445,7 @@ filter.option.amount = 数量 filter.option.block = 方块 filter.option.floor = 地面 filter.option.flooronto = 地面目标 +filter.option.target = 目标 filter.option.wall = 墙 filter.option.ore = 矿石 filter.option.floor2 = 二重地面 @@ -471,15 +477,9 @@ requirement.wave = {1}中的第{0}波次 requirement.core = 在{0}中摧毁敌方核心 requirement.research = 研究 {0} requirement.capture = 占领 {0} -resume = 暂停:\n[lightgray]{0} bestwave = [lightgray]最高波次:{0} -launch = < 发射 > launch.text = 发射 -launch.title = 发射成功 -launch.next = [lightgray]下个发射窗口在第{0}波 -launch.unable2 = [scarlet]无法发射[] -launch.confirm = 您将装载并发射核心中的所有资源。\n此地图将重置,无法回到此基地。 -launch.skip.confirm = 如果现在跳过,在下一个发射窗口到来前,您都无法发射。 +research.multiplayer = 仅有服主可研究物品。 uncover = 解锁 configure = 设定装运的数量 loadout = 装运 @@ -495,7 +495,7 @@ zone.objective = [lightgray]目标:[accent]{0} zone.objective.survival = 生存 zone.objective.attack = 摧毁敌方核心 add = 添加… -boss.health = BOSS 生命值 +boss.health = Boss 生命值 connectfail = [crimson]服务器连接失败:[accent]{0} error.unreachable = 无法访问服务器。\n确定输对地址了吗? @@ -512,6 +512,7 @@ weather.rain.name = 降雨 weather.snow.name = 降雪 weather.sandstorm.name = 沙尘暴 weather.sporestorm.name = 孢子雾 +weather.fog.name = 雾 sectors.unexplored = [lightgray]未探索 sectors.resources = 资源: @@ -521,6 +522,11 @@ sectors.resume = 继续 sectors.launch = 发射 sectors.select = 选择 sectors.nonelaunch = [lightgray]无 (太阳) +sectors.rename = 重命名区块 +sector.missingresources = [scarlet]核心资源不足 + +planet.serpulo.name = 塞普罗 +planet.sun.name = 太阳 sector.groundZero.name = 零号地区 sector.craters.name = 陨石带 @@ -532,7 +538,7 @@ sector.nuclearComplex.name = 核裂阵 sector.overgrowth.name = 增生区 sector.tarFields.name = 油田 sector.saltFlats.name = 盐碱荒滩 -sector.crags.name = 悬崖 +sector.fungalPass.name = 真菌通道 sector.groundZero.description = 踏上旅程的最佳位置。这儿的敌人威胁很小,但资源也少。\n收集尽可能多的铅和铜。\n出发吧! sector.frozenForest.description = 即使是靠近山脉的这里,孢子也已经扩散。他们不能长期停留在寒冷的温度中。\n\n开始运用电力。建造火力发电机并学会使用修理者。 @@ -560,6 +566,10 @@ settings.clear.confirm = 您确定要清除此数据?\n此操作无法撤销 settings.clearall.confirm = [scarlet]警告![]\n这将清除所有数据,包括存档、地图、解锁和按键绑定。\n按「是」后,游戏将删除所有数据并自动退出。 settings.clearsaves.confirm = 您确定要清除存档? settings.clearsaves = 清除存档 +settings.clearresearch = 清除研究进度 +settings.clearresearch.confirm = 您确定要清除战役研究进度? +settings.clearcampaignsaves = 清除战役进度 +settings.clearcampaignsaves.confirm = 您确定要清除战役进度? paused = [accent]< 暂停 > clear = 清除 banned = [scarlet]已禁止 @@ -570,12 +580,14 @@ info.title = [accent]详情 error.title = [crimson]发生了一个错误 error.crashtitle = 发生了一个错误 unit.nobuild = [scarlet]单位未能建造 +lastaccessed = [lightgray]上次操作: {0} +block.unknown = [lightgray]??? + stat.input = 输入 stat.output = 输出 stat.booster = 增强物品/液体 stat.tiles = 所需地型 stat.affinities = 相关 -block.unknown = [lightgray]??? stat.powercapacity = 能量容量 stat.powershot = 能量/发射 stat.damage = 伤害 @@ -594,6 +606,7 @@ stat.powerconnections = 最多连接 stat.poweruse = 使用能量 stat.powerdamage = 功率/损伤 stat.itemcapacity = 物品容量 +stat.memorycapacity = 内存容量 stat.basepowergeneration = 基础能源输出 stat.productiontime = 生产时间 stat.repairtime = 建筑完全修复时间 @@ -613,6 +626,28 @@ stat.reload = 每秒发射数 stat.ammo = 弹药 stat.shieldhealth = 盾容 stat.cooldowntime = 冷却时间 +stat.explosiveness = 爆炸性 +stat.basedeflectchance = 基础反射几率 +stat.lightningchance = 激发闪电几率 +stat.lightningdamage = 激发闪电伤害 +stat.flammability = 燃烧性 +stat.radioactivity = 放射性 +stat.heatcapacity = 热容量 +stat.viscosity = 粘度 +stat.temperature = 温度 +stat.speed = 速度 +stat.buildspeed = 建造速度 +stat.minespeed = 采矿速度 +stat.minetier = 采矿等级 +stat.payloadcapacity = 载货容量 +stat.commandlimit = 指挥上限 +stat.abilities = 能力 + +ability.forcefield = 力墙场 +ability.repairfield = 修复场 +ability.statusfield = 状态场 +ability.unitspawn = {0} 工厂 +ability.shieldregenfield = 护盾再生场 bar.drilltierreq = 需要更好的钻头 bar.noresources = 缺失资源 @@ -624,6 +659,7 @@ bar.powerbalance = 能量:{0}/秒 bar.powerstored = 储能:{0}/{1} bar.poweramount = 能量:{0} bar.poweroutput = 能量输出:{0} +bar.powerlines = 链接: {0}/{1} bar.items = 物品:{0} bar.capacity = 容量:{0} bar.unitcap = {0} {1}/{2} @@ -635,6 +671,8 @@ bar.progress = 制造进度 bar.input = 输入 bar.output = 输出 +units.processorcontrol = [lightgray]由处理器控制 + bullet.damage = [stat]{0}[lightgray] 伤害 bullet.splashdamage = [stat]{0}[lightgray] 范围伤害 ~[stat] {1}[lightgray] 格 bullet.incendiary = [stat] 燃烧 @@ -642,12 +680,15 @@ bullet.homing = [stat] 追踪 bullet.shock = [stat] 电击 bullet.frag = [stat] 分裂 bullet.knockback = [stat]{0}[lightgray] 击退 +bullet.pierce = [stat]{0}[lightgray]x 穿透 +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat] 冰冻 bullet.tarred = [stat] 减速 bullet.multiplier = [stat]{0}[lightgray]x 装弹数量 bullet.reload = [stat]{0}[lightgray]x 装弹速度 unit.blocks = 方块 +unit.blockssquared = 方块² unit.powersecond = 能量/秒 unit.liquidsecond = 液体/秒 unit.itemssecond = 物品/秒 @@ -670,7 +711,7 @@ category.power = 能量 category.liquids = 液体 category.items = 物品 category.crafting = 制造 -category.shooting = 发射 +category.function = 功能 category.optional = 可选的增强 setting.landscape.name = 锁定横屏 setting.shadows.name = 影子 @@ -679,7 +720,6 @@ setting.linear.name = 抗锯齿 setting.hints.name = 提示 setting.flow.name = 显示资源传送速度[scarlet] (实验性) setting.buildautopause.name = 自动暂停建造 -setting.mapcenter.name = 地图自动居中 setting.animatedwater.name = 流动的水 setting.animatedshields.name = 动态画面 setting.antialias.name = 抗锯齿 @@ -713,7 +753,6 @@ setting.fullscreen.name = 全屏 setting.borderlesswindow.name = 无边界窗口[lightgray](可能需要重启) setting.fps.name = 显示 FPS 和网络延迟 setting.smoothcamera.name = 镜头平滑 -setting.blockselectkeys.name = 显示建筑选择按键 setting.vsync.name = 垂直同步 setting.pixelate.name = 像素画面 [lightgray](禁用动画) setting.minimap.name = 显示小地图 @@ -755,8 +794,8 @@ keybind.clear_building.name = 清除建筑 keybind.press = 请按一个键… keybind.press.axis = 请按一个轴或键… keybind.screenshot.name = 地图截图 -keybind.toggle_power_lines.name = 显隐能量标识线 -keybind.toggle_block_status.name = 显隐方块状态 +keybind.toggle_power_lines.name = 显示/隐藏能量标识线 +keybind.toggle_block_status.name = 显示/隐藏方块状态 keybind.move_x.name = 水平移动 keybind.move_y.name = 竖直移动 keybind.mouse_move.name = 跟随鼠标 @@ -822,6 +861,7 @@ mode.custom = 自定义模式 rules.infiniteresources = 无限资源 rules.reactorexplosions = 反应堆爆炸 +rules.schematic = 启用蓝图 rules.wavetimer = 波次计时器 rules.waves = 波次 rules.attack = 攻击模式 @@ -847,7 +887,8 @@ rules.title.unit = 单位 rules.title.experimental = 实验性 rules.title.environment = 环境性 rules.lighting = 光照 -rules.fire = Fire +rules.enemyLights = 单位光照 +rules.fire = 火焰 rules.explosions = 建筑/单位爆炸伤害 rules.ambientlight = 环境光 rules.weather = 气候 @@ -858,6 +899,7 @@ content.item.name = 物品 content.liquid.name = 液体 content.unit.name = 部队 content.block.name = 块 + item.copper.name = 铜 item.lead.name = 铅 item.coal.name = 煤 @@ -879,63 +921,47 @@ liquid.slag.name = 矿渣 liquid.oil.name = 石油 liquid.cryofluid.name = 冷冻液 -item.explosiveness = [lightgray]爆炸性:{0}% -item.flammability = [lightgray]易燃性:{0}% -item.radioactivity = [lightgray]放射性:{0}% - -unit.health = [lightgray]生命值:{0} -unit.speed = [lightgray]速度:{0} -unit.weapon = [lightgray]武器{0} -unit.itemcapacity = [lightgray]物品容量:{0} -unit.minespeed = [lightgray]采矿速度:{0}% -unit.minepower = [lightgray]采矿力量:{0} -unit.ability = [lightgray]能力:{0} -unit.buildspeed = [lightgray]建造速度:{0}% - -liquid.heatcapacity = [lightgray]热容量:{0} -liquid.viscosity = [lightgray]粘度:{0} -liquid.temperature = [lightgray]温度:{0} - unit.dagger.name = 尖刀 -unit.mace.name = 牙狼 +unit.mace.name = 战锤 unit.fortress.name = 堡垒 unit.nova.name = 新星 -unit.pulsar.name = 脉冲星 -unit.quasar.name = 超星 +unit.pulsar.name = 恒星 +unit.quasar.name = 耀星 unit.crawler.name = 爬虫 -unit.atrax.name = 火蛛 -unit.spiroct.name = 天蝎 -unit.arkyid.name = 血蛭 -unit.toxopid.name = 毒蟒 -unit.flare.name = 星耀 +unit.atrax.name = 毒蛛 +unit.spiroct.name = 血蛭 +unit.arkyid.name = 毒蛊 +unit.toxopid.name = 天蝎 +unit.flare.name = 星辉 unit.horizon.name = 天垠 unit.zenith.name = 苍穹 -unit.antumbra.name = 半影 +unit.antumbra.name = 月影 unit.eclipse.name = 日蚀 unit.mono.name = 独影 unit.poly.name = 聚幻 -unit.mega.name = 巨像 +unit.mega.name = 巨灵 unit.quad.name = 雷霆 unit.oct.name = 要塞 unit.risso.name = 梭鱼 -unit.minke.name = 刺鲸 -unit.bryde.name = 虎鲨 -unit.sei.name = 湖妖 +unit.minke.name = 飞鲨 +unit.bryde.name = 戟鲸 +unit.sei.name = 蛟龙 unit.omura.name = 海神 unit.alpha.name = 阿尔法 unit.beta.name = 贝塔 -unit.gamma.name = 伽玛 +unit.gamma.name = 伽马 unit.scepter.name = 权杖 -unit.reign.name = 君王 +unit.reign.name = 王座 unit.vela.name = 灾星 unit.corvus.name = 死星 block.resupply-point.name = 补给点 -block.parallax.name = 阻滞光束 +block.parallax.name = 差扰光束 block.cliff.name = 悬崖 -block.sand-boulder.name = 沙砂巨石 +block.sand-boulder.name = 砂岩 block.grass.name = 草地 block.slag.name = 矿渣 +block.space.name = 太空 block.salt.name = 盐碱地 block.salt-wall.name = 盐墙 block.pebbles.name = 鹅卵石 @@ -981,6 +1007,7 @@ block.darksand-water.name = 暗沙 水 block.char.name = 焦土 block.dacite.name = 英安岩 block.dacite-wall.name = 英安岩墙 +block.dacite-boulder.name = 英安巨岩 block.ice-snow.name = 冰雪地 block.stone-wall.name = 石墙 block.ice-wall.name = 冰墙 @@ -1014,7 +1041,7 @@ block.titanium-wall.name = 钛墙 block.titanium-wall-large.name = 大型钛墙 block.plastanium-wall.name = 塑钢墙 block.plastanium-wall-large.name = 大型塑钢墙 -block.phase-wall.name = 相织布墙 +block.phase-wall.name = 相织物墙 block.phase-wall-large.name = 大型相织物墙 block.thorium-wall.name = 钍墙 block.thorium-wall-large.name = 大型钍墙 @@ -1029,7 +1056,7 @@ block.conveyor.name = 传送带 block.titanium-conveyor.name = 钛传送带 block.plastanium-conveyor.name = 塑钢传送带 block.armored-conveyor.name = 装甲传送带 -block.armored-conveyor.description = 运送物品,与钛传送带一样的速度,但有更强的装甲。除其他传送带,不接受任何边的输入。 +block.armored-conveyor.description = 运送物品,与钛传送带一样的速度,但有更强的装甲。除其他传送带,不接受任何边上的输入。 block.junction.name = 连接器 block.router.name = 路由器 block.distributor.name = 分配器 @@ -1075,6 +1102,7 @@ block.power-source.name = 无限能源 block.unloader.name = 装卸器 block.vault.name = 仓库 block.wave.name = 波浪 +block.tsunami.name = 海啸 block.swarmer.name = 蜂群 block.salvo.name = 齐射炮 block.ripple.name = 浪涌 @@ -1114,31 +1142,33 @@ block.arc.name = 电弧 block.rtg-generator.name = RTG 发电机 block.spectre.name = 幽灵 block.meltdown.name = 熔毁 +block.foreshadow.name = 厄兆 block.container.name = 容器 block.launch-pad.name = 发射台 block.launch-pad-large.name = 大型发射台 block.segment.name = 裂解光束 block.command-center.name = 指挥中心 -block.ground-factory.name = 陆战单位工厂 -block.air-factory.name = 空战单位工厂 -block.naval-factory.name = 海战单位工厂 +block.ground-factory.name = 陆军工厂 +block.air-factory.name = 空军工厂 +block.naval-factory.name = 海军工厂 block.additive-reconstructor.name = 数增级单位重构工厂 -block.multiplicative-reconstructor.name = 倍增级单位重构工厂 -block.exponential-reconstructor.name = 幂乘级单位重构工厂 +block.multiplicative-reconstructor.name = 倍乘级单位重构工厂 +block.exponential-reconstructor.name = 多幂级单位重构工厂 block.tetrative-reconstructor.name = 无量级单位重构工厂 block.payload-conveyor.name = 载荷传送带 block.payload-router.name = 载荷路由器 -block.disassembler.name = 分离机 +block.disassembler.name = 解离机 block.silicon-crucible.name = 热能坩埚 -block.overdrive-dome.name = 超速场投射器 +block.overdrive-dome.name = 超速穹顶投射器 block.switch.name = 开关 block.micro-processor.name = 微型处理器 block.logic-processor.name = 逻辑处理器 -block.hyper-processor.name = 超频处理器 +block.hyper-processor.name = 超核处理器 block.logic-display.name = 逻辑显示屏 block.large-logic-display.name = 大型逻辑显示屏 -block.memory-cell.name = 存储单元 +block.memory-cell.name = 内存元 +block.memory-bank.name = 内存库 team.blue.name = 蓝 team.crux.name = 红 @@ -1302,4 +1332,4 @@ block.cyclone.description = 大型炮塔,对空对地,发射在敌人周围 block.spectre.description = 超大型炮塔,对空对地,一次射出两颗强大的破甲弹。 block.meltdown.description = 超大型激光炮塔,充能之后持续发射光束,需要冷却剂。 block.repair-point.description = 持续治疗其附近受损最严重的单位。 -block.segment.description = 摧毁袭来的除激光以外的子弹或导弹. \ No newline at end of file +block.segment.description = 摧毁袭来的除激光以外的子弹或导弹. diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index e495f4b768..591ef50191 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -14,14 +14,14 @@ link.f-droid.description = F-Droid 目錄頁面 link.wiki.description = 官方 Mindustry 維基 link.suggestions.description = 建議新功能 linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。 -screenshot = 截圖保存到{0} -screenshot.invalid = 地圖太大了,可能沒有足夠的內存用於截圖。 +screenshot = 截圖儲存到{0} +screenshot.invalid = 地圖太大了,可能沒有足夠的記憶體用於截圖。 gameover = 遊戲結束 gameover.pvp = [accent]{0}[]隊獲勝! highscore = [accent]新的高分紀錄! copied = 已複製。 -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.popup = [accent]v6[] 目前仍在 in [accent]alpha[]。\n[lightgray]這代表了:[]\n[scarlet]- 戰役尚未完成[]\n- 部份內容遺失\n - 大多數的 [scarlet]單位 AI[] 無法正常運作\n- 許多單位仍未完成\n- 您看到的所有內容均可能變更或移除。\n\n請在 [accent]Github[] 上回報臭蟲或當機。 +indev.notready = 這部份的遊戲尚未完成 load.sound = 音效載入中 load.map = 地圖載入中 @@ -39,11 +39,11 @@ be.noupdates = 沒有新的更新。 be.check = 檢查是否有新的更新 schematic = 藍圖 -schematic.add = 儲存藍圖... +schematic.add = 儲存藍圖…… schematics = 藍圖 schematic.replace = 相同名稱的藍圖已經存在。是否取代它? schematic.exists = 相同名稱的藍圖已經存在。 -schematic.import = 匯入藍圖... +schematic.import = 匯入藍圖…… schematic.exportfile = 匯出檔案 schematic.importfile = 匯入檔案 schematic.browseworkshop = 瀏覽工作坊 @@ -51,10 +51,11 @@ schematic.copy = 複製到剪貼簿 schematic.copy.import = 從剪貼簿匯入 schematic.shareworkshop = 分享到工作坊 schematic.flip = [accent][[{0}][]/[accent][[{1}][]:翻轉藍圖 -schematic.saved = 藍圖已保存。 +schematic.saved = 藍圖已儲存。 schematic.delete.confirm = 該藍圖將被完全清除。 schematic.rename = 重新命名藍圖 schematic.info = {0}x{1}, {2}方塊 +schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. stat.wave = 打敗的波次:[accent]{0} stat.enemiesDestroyed = 摧毀的敵人:[accent]{0} @@ -65,7 +66,7 @@ stat.delivered = 發射的核心資源: stat.playtime = 遊玩時間:[accent] {0} stat.rank = 最終排名:[accent]{0} -globalitems = [accent]Global Items +globalitems = [accent]全域物品 map.delete = 確認要刪除「[accent]{0}[]」地圖嗎? level.highscore = 最高分:[accent]{0} level.select = 選擇關卡 @@ -91,23 +92,22 @@ continue = 繼續 maps.none = [lightgray]找不到地圖! invalid = 無效 pickcolor = 選擇顏色 -preparingconfig = 配置準備中 +preparingconfig = 設定準備中 preparingcontent = 內容準備中 uploadingcontent = 內容上傳中 uploadingpreviewfile = 上傳預覽文件 -committingchanges = 提交變更 +committingchanges = 遞交變更 done = 完成 -feature.unsupported = 您的設備不支持此功能。 +feature.unsupported = 您的裝置不支援此功能。 -mods.alphainfo = 請記住,模組仍處於Alpha狀態,[scarlet]可能會有很多BUG[].\n向Mindustry GitHub或Discord報告發現的任何問題。 -mods.alpha = [accent](Alpha) +mods.alphainfo = 請記住,模組仍處於Alpha狀態,[scarlet]可能會有很多臭蟲[]。\n請到Mindustry GitHub或Discord報告發現的任何問題。 mods = 模組 mods.none = [lightgray]找不到模組! mods.guide = 模組指南 mods.report = 回報錯誤 mods.openfolder = 開啟模組資料夾 mods.reload = 重新載入 -mods.reloadexit = The game will now exit, to reload mods. +mods.reloadexit = 遊戲將會結束以重新載入模組。 mod.display = [gray]模組:[orange]{0} mod.enabled = [lightgray]已啟用 mod.disabled = [scarlet]已禁用 @@ -115,32 +115,32 @@ mod.disable = 禁用 mod.content = 內容: mod.delete.error = 無法刪除模組,檔案可能在使用中。 mod.requiresversion = [scarlet]最低遊戲版本要求:[accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) -mod.missingdependencies = [scarlet]缺少必須項目: {0} +mod.outdated = [scarlet]與 V6 不相容(無 minGameVersion: 105) +mod.missingdependencies = [scarlet]缺少依賴關係:{0} mod.erroredcontent = [scarlet]內容錯誤 mod.errors = 載入內容時發生錯誤 -mod.noerrorplay = [scarlet]你使用了有錯誤的模組。[] 遊戲前請先禁用相關模組或修正錯誤。 -mod.nowdisabled = [scarlet]「{0}」模組缺少必須項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。 +mod.noerrorplay = [scarlet]你使用了有問題的模組。[] 遊戲前請先停用相關模組或修正問題。 +mod.nowdisabled = [scarlet]「{0}」模組缺少依賴關係:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動停用。 mod.enable = 啟用 mod.requiresrestart = 遊戲將立即關閉以套用模組變更。 mod.reloadrequired = [scarlet]需要重新載入 mod.import = 匯入模組 mod.import.file = 匯入檔案 mod.import.github = 匯入GitHub模組 -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]JAR 模組本質上是不安全的。[]\n請確保您正從可信的來源匯入這個模組! mod.item.remove = 此物品是[accent] '{0}'[]模組的一部份。解除安裝模組以移除此物品。 mod.remove.confirm = 該模組將被刪除。 -mod.author = [lightgray]作者:[] {0} -mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0} -mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。 +mod.author = [lightgray]作者:[] {0} +mod.missing = 此存檔含有您最近更新或已解除安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0} +mod.preview.missing = 在工作坊發佈這個模組前,您必須新增預覽圖。\n在該模組的資料夾中加入一個名為[accent] preview.png[]的圖片並重試。 mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾,只需將其文件解壓縮到資料夾並刪除舊的.zip檔,然後重新啟動遊戲或重新載入模組。 -mod.scripts.disable = 您的設備不支持包含指令檔的模組。您必須關閉這些模組才能進行遊戲。 +mod.scripts.disable = 您的裝置不支持包含指令檔的模組。您必須關閉這些模組才能進行遊戲。 about.button = 關於 name = 名稱: noname = 請先選擇一個[accent]玩家名稱[]。 -planetmap = Planet Map -launchcore = Launch Core +planetmap = 星球地圖 +launchcore = 發射核心 filename = 檔案名稱︰ unlocked = 已解鎖新內容! completed = [accent]完成 @@ -148,40 +148,40 @@ techtree = 科技樹 research.list = [lightgray]研究︰ research = 研究 researched = [lightgray]{0}研究完成。 -research.progress = {0}% complete +research.progress = {0}% 完成 players = {0}個線上玩家 players.single = {0}個線上玩家 players.search = 搜尋 players.notfound = [gray]沒有找到玩家 -server.closing = [accent]正在關閉伺服器... +server.closing = [accent]正在關閉伺服器…… server.kicked.kick = 您已被踢出伺服器! server.kicked.whitelist = 您不在這裡的白名單內. server.kicked.serverClose = 伺服器已關閉。 server.kicked.vote = 您已被投票踢出伺服器,再見。 server.kicked.clientOutdated = 客戶端版本過舊!請更新遊戲! -server.kicked.serverOutdated = 伺服器版本過舊!請聯絡伺服主更新伺服器! -server.kicked.banned = 您已經在這個伺服器中被封禁。 +server.kicked.serverOutdated = 伺服器版本過舊!請聯絡伺服器管理員更新伺服器! +server.kicked.banned = 您已經在這個伺服器中被封鎖。 server.kicked.typeMismatch = 該伺服器與您的版本不相容。 -server.kicked.playerLimit = 該伺服器已滿。請等待一個空位置。 +server.kicked.playerLimit = 該伺服器已滿。請等待玩家離開。 server.kicked.recentKick = 您最近曾被踢出伺服器。\n請稍後再進行連線。 server.kicked.nameInUse = 伺服器中已經\n有人有相同的名稱了。 server.kicked.nameEmpty = 你的名稱必須至少包含一個字母或數字。 server.kicked.idInUse = 你已經在伺服器中!不允許使用兩個帳號。 -server.kicked.customClient = 這個伺服器不支持自訂客戶端,請下載官方版本。 +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]區域網路[]/[accent]全域網路[]內的伺服器。目前支援區域網路與網際網路連線。\n\n[lightgray]如果您想透過IP位址連線到他人的伺服器,您必須向他們詢問IP位址。自己的IP位置可以從google上搜尋到。 +host.info = [accent]建立伺服器[]按鍵會在連接埠[scarlet]6567[]建立一個伺服器。\n所有跟您在同一個[lightgray]網路或區域網路[]環境的玩家應該能在他們的伺服器清單中找到您的伺服器。\n\n如果您希望網際網路上的玩家透過 IP 位置連線到您的伺服器,您必須設定[accent]連接埠轉發[]。\n\n[lightgray]注意:如果區域網路內有玩家無法連線至您的伺服器,請務必確認您已於防火牆設定中開放 Mindustry 存取您的區域網路。請注意公用網路有時不允許搜尋伺服器。 +join.info = 您可以在此輸入欲連線的[accent]伺服器 IP 位置[],或尋找[accent]區域網路[]/[accent]網際網路[]內的伺服器。目前支援區域網路與網際網路連線。\n\n[lightgray]如果您想透過 IP 位置連線到他人的伺服器,您必須向他們詢問 IP 位置。自己的 IP 位置可以從 Google 上搜尋到。 hostserver = 建立伺服器 invitefriends = 邀請好友 hostserver.mobile = 建立\n伺服器 host = 伺服器 -hosting = [accent]伺服器啟動中... +hosting = [accent]伺服器啟動中…… hosts.refresh = 刷新 hosts.discovering = 搜尋區域網路遊戲 hosts.discovering.any = 搜尋遊戲 -server.refreshing = 伺服器刷新中 +server.refreshing = 伺服器重新整理中 hosts.none = [lightgray]找不到區域網路伺服器! host.invalid = [scarlet]無法連線至伺服器。 @@ -195,9 +195,9 @@ trace.ip = IP:[accent]{0} trace.id = ID:[accent]{0} trace.mobile = 行動客戶端:[accent]{0} trace.modclient = 自訂客戶端:[accent]{0} -invalidid = 無效的客戶端 ID!請提交錯誤報告。 -server.bans = 封禁 -server.bans.none = 沒有玩家被封禁! +invalidid = 無效的客戶端 ID!請遞交錯誤回報。 +server.bans = 封鎖 +server.bans.none = 沒有玩家被封鎖! server.admins = 管理員 server.admins.none = 找不到管理員! server.add = 新增伺服器 @@ -207,29 +207,29 @@ server.outdated = [crimson]伺服器版本過舊![] server.outdated.client = [crimson]客戶端版本過舊![] server.version = [gray]v{0} {1} server.custombuild = [accent]自訂客戶端 -confirmban = 您確定要封禁「[white]{0}[]」嗎? +confirmban = 您確定要封鎖「[white]{0}[]」嗎? confirmkick = 您確定要踢出「[white]{0}[]」嗎? -confirmvotekick = 您確定要投票剔除「[white]{0}[]」嗎? -confirmunban = 您確定要解除封禁這個玩家嗎? +confirmvotekick = 您確定要投票踢出「[white]{0}[]」嗎? +confirmunban = 您確定要解除封鎖這個玩家嗎? confirmadmin = 您確定要晉升「[white]{0}[]」為管理員嗎? confirmunadmin = 您確定要解除「[white]{0}[]」的管理員嗎? joingame.title = 加入遊戲 -joingame.ip = IP位址: +joingame.ip = IP 位置: disconnect = 已中斷連線。 disconnect.error = 連線錯誤。 disconnect.closed = 連線關閉。 -disconnect.timeout = 連線超時。 +disconnect.timeout = 連線逾時。 disconnect.data = 無法載入地圖資料! cantconnect = 無法加入遊戲 ([accent]{0}[]). -connecting = [accent]連線中... -connecting.data = [accent]地圖資料載入中... +connecting = [accent]連線中…… +connecting.data = [accent]地圖資料載入中…… server.port = 連接埠: -server.addressinuse = 該位址已被使用! +server.addressinuse = 該位置已被使用! server.invalidport = 無效的連接埠! server.error = [crimson]建立伺服器時發生錯誤。 save.new = 新存檔 -save.overwrite = 您確定要覆蓋存檔嗎? -overwrite = 覆蓋 +save.overwrite = 您確定要覆寫存檔嗎? +overwrite = 覆寫 save.none = 找不到存檔! savefail = 存檔失敗! save.delete.confirm = 您確定要刪除這個存檔嗎? @@ -270,49 +270,52 @@ back = 返回 data.export = 匯出數據 data.import = 匯入數據 data.openfolder = 開啟檔案資料夾 -data.exported = 數據已匯出。 +data.exported = 資料已匯出。 data.invalid = 這不是有效的遊戲資料。 -data.import.confirm = 導入外部數據將覆蓋您當前[scarlet]所有的[]遊戲數據,\n[accent]這個動作不能撤銷![]\n\n匯入數據後,您的遊戲將立即退出。 -quit.confirm = 您確定要退出嗎? -quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n該教學可以在[accent] 設定->遊戲[] 選項中重置教學。 -loading = [accent]載入中... -reloading = [accent]模組重新載入中... -saving = [accent]儲存中... +data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後,您的遊戲將立刻結束。 +quit.confirm = 您確定要結束嗎? +quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n可以在[accent] 設定->遊戲[] 選項中重設教學。 +loading = [accent]載入中…… +reloading = [accent]模組重新載入中…… +saving = [accent]儲存中…… respawn = [accent][[{0}][]重生 cancelbuilding = [accent][[{0}][]清除計畫 selectschematic = [accent][[{0}][]選擇並複製 pausebuilding = [accent][[{0}][]暫停建造 -resumebuilding = [scarlet][[{0}][]恢復建造 +resumebuilding = [scarlet][[{0}][]繼續建造 wave = [accent]第{0}波 +wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]將於{0}秒後抵達 wave.waveInProgress = [lightgray]波次進行中 -waiting = [lightgray]等待中... -waiting.players = 等待玩家中... +waiting = [lightgray]等待中…… +waiting.players = 等待玩家中…… wave.enemies = [lightgray]剩下{0}個敵人 wave.enemy = [lightgray]剩下{0}個敵人 -loadimage = 載入圖像 -saveimage = 儲存圖像 +wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. +wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. +loadimage = 載入圖片 +saveimage = 儲存圖片 unknown = 未知 custom = 自訂 builtin = 内建 -map.delete.confirm = 確認要刪除地圖嗎?此操作無法撤回! +map.delete.confirm = 確認要刪除地圖嗎?此動作無法復原! map.random = [accent]隨機地圖 map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[accent]橘色[]的核心。 map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[scarlet]不是橘色[]的核心。 map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[scarlet]紅色[]的核心。 -map.invalid = 地圖載入錯誤:地圖可能已經損壞。 +map.invalid = 地圖載入錯誤:地圖可能已經損毀。 workshop.update = 更新項目 -workshop.error = 提取工作坊詳細信息時出錯: {0} -map.publish.confirm = 您確定要發布此地圖嗎?\n\n[lightgray]首先請先確定您同意Steam工坊 EULA協定,否則您的地圖將不會顯示! -workshop.menu = 選擇您要對此項目執行的操作。 -workshop.info = 項目信息 -changelog = 變更日誌(可選): +workshop.error = 擷取工作坊詳細資訊時出錯: {0} +map.publish.confirm = 您確定要發布此地圖嗎?\n\n[lightgray]首先請先確定您同意 Steam 工作坊的 EULA,否則您的地圖將不會顯示! +workshop.menu = 選擇您要對此項目執行的動作。 +workshop.info = 項目資訊 +changelog = 變動紀錄(選擇性): eula = Steam EULA -missing = 此項目已被刪除或移動。\n[lightgray]工作坊列表現在已自動取消鏈接。 -publishing = [accent]發佈中... -publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意Workshop EULA,否則您的項目將不會顯示! -publish.error = 發佈項目時出錯: {0} -steam.error = Steam 服務初始化失敗.\n錯誤: {0} +missing = 此項目已被刪除或移動。\n[lightgray]工作坊列表現在已自動取消連結。 +publishing = [accent]發佈中…… +publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意 Workshop EULA,否則您的項目將不會顯示! +publish.error = 發佈項目時發生問題:{0} +steam.error = Steam 服務初始化失敗。\n錯誤:{0} editor.brush = 粉刷 editor.openin = 在編輯器中開啟 @@ -328,6 +331,7 @@ editor.generation = 篩選器: editor.ingame = 在遊戲中編輯 editor.publish.workshop = 在工作坊上發佈 editor.newmap = 新地圖 +editor.center = Center workshop = 工作坊 waves.title = 波次 waves.remove = 移除 @@ -339,30 +343,30 @@ waves.shields = 護盾/波次 waves.to = 至 waves.guardian = 守衛者 waves.preview = 預覽 -waves.edit = 編輯... -waves.copy = 複製到剪貼板 -waves.load = 從剪貼板加載 -waves.invalid = 剪貼板中的波次無效。 +waves.edit = 編輯…… +waves.copy = 複製到剪貼簿 +waves.load = 從剪貼簿載入 +waves.invalid = 剪貼簿中的波次無效。 waves.copied = 波次已被複製。 -waves.none = 無自定義敵人.\n請注意,空佈局將自動替換為預設佈局。 +waves.none = 無自訂敵人。\n請注意,空佈局將自動替換為預設佈局。 -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +wavemode.counts = 數量 +wavemode.totals = 總數 +wavemode.health = 生命值 -editor.default = [lightgray]〈默認〉 -details = 詳情... -edit = 編輯... +editor.default = [lightgray](預設) +details = 詳細資訊…… +edit = 編輯…… editor.name = 名稱: editor.spawn = 重生單位 editor.removeunit = 移除單位 editor.teams = 隊伍 -editor.errorload = 加載文件時出錯:\n[accent]{0} -editor.errorsave = 保存文件時出錯:\n[accent]{0} -editor.errorimage = 這是一個圖像檔,而不是地圖。不要更改副檔名使它可用。\n\n如果要匯入地形圖像檔,請使用編輯器中的「匯入地形圖像檔」按鈕。 -editor.errorlegacy = 此地圖太舊,並使用不支持的舊地圖格式。 -editor.errornot = 這不是一個地圖檔案。 -editor.errorheader = 此地圖檔案無效或已損壞。 +editor.errorload = 載入檔案時發生問題:\n[accent]{0} +editor.errorsave = 儲存檔案時發生問題:\n[accent]{0} +editor.errorimage = 這是圖片檔,而非地圖。不要試圖修改副檔名讓它可以使用。\n\n如果要匯入地形圖片檔,請使用編輯器中的「匯入地形圖片檔」按鈕。 +editor.errorlegacy = 此地圖太舊,並使用不支援的舊地圖格式。 +editor.errornot = 這不是地圖檔。 +editor.errorheader = 此地圖檔無效或已損毀。 editor.errorname = 地圖沒有定義名稱。 editor.update = 更新 editor.randomize = 隨機化 @@ -372,23 +376,23 @@ editor.resize = 調整大小 editor.loadmap = 載入地圖 editor.savemap = 儲存地圖 editor.saved = 已儲存! -editor.save.noname = 您的地圖沒有名稱!在「地圖資訊」畫面設置一個名稱。 -editor.save.overwrite = 您的地圖覆寫一個內建的地圖!在「地圖信息」畫面設置一個不同的名稱。 -editor.import.exists = [scarlet]匯入失敗:[]一個叫「{0}」的內建地圖已存在! -editor.import = 匯入... +editor.save.noname = 您的地圖沒有名稱!在「地圖資訊」畫面設定一個名稱。 +editor.save.overwrite = 您的地圖覆寫了內建的地圖!在「地圖資訊」畫面設定其他名稱。 +editor.import.exists = [scarlet]匯入失敗:[]叫「{0}」的內建地圖已存在! +editor.import = 匯入…… editor.importmap = 匯入地圖 -editor.importmap.description = 匯入一個已存在的地圖 +editor.importmap.description = 匯入已存在的地圖 editor.importfile = 匯入檔案 -editor.importfile.description = 匯入一個外部的地圖檔案 -editor.importimage = 匯入地形圖像檔 -editor.importimage.description = 匯入一個外部的地形圖像檔 -editor.export = 匯出... +editor.importfile.description = 匯入外部的地圖檔案 +editor.importimage = 匯入地形圖片檔 +editor.importimage.description = 匯入外部的地形圖片檔 +editor.export = 匯出…… editor.exportfile = 匯出檔案 -editor.exportfile.description = 匯出一個地圖檔案 -editor.exportimage = 匯出地形圖像檔 -editor.exportimage.description = 匯出一個地形圖像檔 -editor.loadimage = 載入圖像 -editor.saveimage = 儲存圖像 +editor.exportfile.description = 匯出地圖檔 +editor.exportimage = 匯出地形圖片檔 +editor.exportimage.description = 匯出地形圖片檔 +editor.loadimage = 載入圖片 +editor.saveimage = 儲存圖片 editor.unsaved = [scarlet]尚未儲存變更![]\n您確定要退出嗎? editor.resizemap = 調整地圖大小 editor.mapname = 地圖名稱: @@ -404,18 +408,19 @@ toolmode.replaceall.description = 取代地圖中的所有方塊。 toolmode.orthogonal = 垂直 toolmode.orthogonal.description = 僅繪製在垂直線上。 toolmode.square = 正方形 -toolmode.square.description = 正方形筆刷. +toolmode.square.description = 正方形筆刷。 toolmode.eraseores = 清除礦物 toolmode.eraseores.description = 僅清除礦物。 toolmode.fillteams = 填充團隊 -toolmode.fillteams.description = 填充團隊而不是方塊。 +toolmode.fillteams.description = 填充團隊而非方塊。 toolmode.drawteams = 繪製團隊 -toolmode.drawteams.description = 繪製團隊而不是方塊。 +toolmode.drawteams.description = 繪製團隊而非方塊。 -filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。 +filters.empty = [lightgray]沒有過濾器!使用下面的按鈕新增一個。 filter.distort = 扭曲 filter.noise = 雜訊 filter.enemyspawn = 敵人重生選擇 +filter.spawnpath = Path To Spawn filter.corespawn = 核心選擇 filter.median = 平均數 filter.oremedian = 礦石平均數 @@ -440,6 +445,7 @@ filter.option.amount = 數量 filter.option.block = 方塊 filter.option.floor = 地板 filter.option.flooronto = 目標地板 +filter.option.target = Target filter.option.wall = 牆 filter.option.ore = 礦石 filter.option.floor2 = 次要地板 @@ -455,38 +461,32 @@ campaign = 戰役 load = 載入 save = 儲存 fps = FPS:{0} -ping = 延遲:{0}ms +ping = 延遲:{0}毫秒 language.restart = 請重新啟動遊戲以使選取的語言生效。 settings = 設定 tutorial = 教學 -tutorial.retake = 重置教學 +tutorial.retake = 重設教學 editor = 地圖編輯器 mapeditor = 地圖編輯器 abandon = 放棄 -abandon.text = 此區域及其所有資源將會丟失給敵人。 +abandon.text = 此區域及其所有資源將會放棄,並給敵人使用。 locked = 鎖定 complete = [lightgray]完成: requirement.wave = 在{1}到達第{0}波 requirement.core = 在{0}摧毀敵人核心 -requirement.research = Research {0} -requirement.capture = Capture {0} -resume = 繼續區域:\n[lightgray]{0} +requirement.research = 研究 {0} +requirement.capture = 捕獲 {0} bestwave = [lightgray]最高波次:{0} -launch = < 發射 > -launch.text = Launch -launch.title = 發射成功 -launch.next = [lightgray]下次的機會於波次{0} -launch.unable2 = [scarlet]無法發射核心。[] -launch.confirm = 這將發射核心中的所有資源。\n你將無法返回這個基地。 -launch.skip.confirm = 如果您現在跳過,您將無法發射核心直到下一次的可發射波數。 +launch.text = 發射 +research.multiplayer = Only the host can research items. uncover = 探索 -configure = 配置裝載 -loadout = Loadout -resources = Resources -bannedblocks = 禁用方塊 +configure = 設定 +loadout = 裝載 +resources = 資源 +bannedblocks = 停用方塊 addall = 全部加入 -launch.destination = Destination: {0} +launch.destination = 目的地:{0} configure.invalid = 數值必須介於 0 到 {0}。 zone.unlocked = [lightgray]{0}已解鎖。 zone.requirement.complete = 到達波次{0}:\n滿足{1}區域要求。 @@ -494,75 +494,85 @@ zone.resources = [lightgray]檢測到的資源: zone.objective = [lightgray]目標: [accent]{0} zone.objective.survival = 生存 zone.objective.attack = 摧毀敵人核心 -add = 新增... +add = 新增…… boss.health = 頭目血量 connectfail = [crimson]伺服器連線錯誤:[accent]{0} -error.unreachable = 無法到達伺服器。請確認位址是否正確? -error.invalidaddress = 無效的位址。 -error.timedout = 連線超時!\n確保伺服器設置了連接埠轉發,並且位址正確! -error.mismatch = 封包錯誤:\n客戶端/伺服器版本可能不匹配。\n確保客戶端和伺服器都有最新版本的Mindustry! -error.alreadyconnected = 已連接。 +error.unreachable = 無法連線到伺服器。請確認位置是否正確? +error.invalidaddress = 無效的位置。 +error.timedout = 連線逾時!\n確保伺服器設置了連接埠轉發且位置正確! +error.mismatch = 封包錯誤:\n客戶端/伺服器版本可能不相符。\n確保客戶端和伺服器都有最新版本的 Mindustry! +error.alreadyconnected = 已連線。 error.mapnotfound = 找不到地圖! -error.io = 網絡輸出入錯誤。 -error.any = 未知網絡錯誤。 -error.bloom = 初始化特效失敗.\n您的設備可能不支援它 +error.io = 網路錯誤。 +error.any = 未知網路錯誤。 +error.bloom = 初始化特效失敗。\n您的裝置可能不支援 -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm +weather.rain.name = 雨 +weather.snow.name = 雪 +weather.sandstorm.name = 沙塵暴 +weather.sporestorm.name = 孢子風暴 +weather.fog.name = Fog -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) +sectors.unexplored = [lightgray]未探索 +sectors.resources = 資源: +sectors.production = 生產: +sectors.stored = 儲存: +sectors.resume = 繼續 +sectors.launch = 發射 +sectors.select = 選取 +sectors.nonelaunch = [lightgray]無(太陽) +sectors.rename = Rename Sector +sector.missingresources = [scarlet]Insufficient Core Resources -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +planet.serpulo.name = Serpulo +planet.sun.name = Sun -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.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. -sector.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. -sector.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. -sector.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. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.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. -sector.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. -sector.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. -sector.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. +sector.groundZero.name = 原點 +sector.craters.name = 火山島 +sector.frozenForest.name = 冰封森林 +sector.ruinousShores.name = 廢墟海岸 +sector.stainedMountains.name = 彩繪山 +sector.desolateRift.name = 荒谷 +sector.nuclearComplex.name = 核能生產複合體 +sector.overgrowth.name = 雜草叢生 +sector.tarFields.name = 油田 +sector.saltFlats.name = 鹽灘 +sector.fungalPass.name = 真菌橫行 + +sector.groundZero.description = 再次開始的最佳位置。敵人威脅程度低。資源少。\n盡可能地採集鉛與銅。\n繼續前進。 +sector.frozenForest.description = 即使是在如此靠近山脈的地方,孢子也已經擴散了。如此低溫也無法永遠遏止它們。\n\n開始冒險發電。建造火力發電機。並學習使用修理單位。 +sector.saltFlats.description = 鹽灘在沙漠的外圍。此處資源不多。\n\n敵人已在此建立了一座資源倉庫。剷除他們的核心。不要留下任何東西。 +sector.craters.description = 在曾發生過古代戰爭的火山口積了很多水。開墾這個區域。採集沙子。煉製玻璃。抽水冷卻砲塔與鑽頭。 +sector.ruinousShores.description = 越過廢棄物就是海岸線。此處曾設有海岸防禦陣線。但剩下的不多。只有最基本的防禦結構沒有損毀,其他的一切都已然變為廢墟。\n繼續向外擴展。重新發現技術。 +sector.stainedMountains.description = 還未受孢子污染的山脈向內陸延伸。\n在此區域開採鈦金屬。學習如何使用它。\n\n這裡的敵人更為強大。不要讓他們有以最強大武力攻擊的機會。 +sector.overgrowth.description = 此區域雜草叢生,離孢子的源頭很近。\n敵人在此建立了前哨站。建造泰坦單位。摧毀它。然後找回遺失的東西。 +sector.tarFields.description = 產油區的外圍,在山脈與沙漠之間。少數有油料儲備的地區。\n雖然看似被廢棄,但此區域附近仍有一些危險的敵軍。不要小看他們。\n\n[lightgray]如果可以的話,請研究石油加工科技。 +sector.desolateRift.description = 非常危險的區域。資源豐富,但空間狹小。有高破壞風險。盡快離開。不要被敵人的攻擊間距太長而被愚弄。 +sector.nuclearComplex.description = 曾是釷的生產與加工設施,但現在已成廢墟。\n[lightgray]研究釷及其許多用途。\n\n敵人非常多,不斷搜尋可攻擊的對象。 +sector.fungalPass.description = 高山與滿是孢子的低谷間的過渡區域。這裡有敵人的小型偵察基地。\n摧毀它。\n使用匕首機甲與爬行機甲。拿下兩個核心。 settings.language = 語言 -settings.data = 遊戲數據 +settings.data = 遊戲資料 settings.reset = 重設為預設設定 settings.rebind = 重新綁定 settings.resetKey = 重設按鍵 -settings.controls = 操作 +settings.controls = 控制 settings.game = 遊戲 settings.sound = 音效 settings.graphics = 圖形 -settings.cleardata = 清除遊戲數據... -settings.clear.confirm = 您確定要清除數據嗎?\n此操作無法撤回! -settings.clearall.confirm = [scarlet]警告![]\n這將清除所有數據,包括存檔、地圖、解鎖和熱鍵綁定。\n按「是」後,遊戲將刪除所有數據並自動退出。 -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves -paused = [accent]〈已暫停〉 +settings.cleardata = 清除遊戲資料…… +settings.clear.confirm = 您確定要清除資料嗎?\n此動作無法復原! +settings.clearall.confirm = [scarlet]警告![]\n這會清除所有資料,包括存檔、地圖、解鎖項目和快捷鍵綁定。\n按「是」後,遊戲將刪除所有資料並自動結束。 +settings.clearsaves.confirm = 您確定您想要清除所有存檔嗎? +settings.clearsaves = 清除存檔 +settings.clearresearch = Clear Research +settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? +settings.clearcampaignsaves = Clear Campaign Saves +settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? +paused = [accent](已暫停) clear = 清除 -banned = [scarlet]已被封禁 +banned = [scarlet]已被封鎖 unplaceable.sectorcaptured = [scarlet]需要已占領的地區 yes = 是 no = 否 @@ -570,12 +580,14 @@ info.title = 資訊 error.title = [crimson]發生錯誤 error.crashtitle = 發生錯誤 unit.nobuild = [scarlet]單位不能建造 +lastaccessed = [lightgray]Last Accessed: {0} +block.unknown = [lightgray]??? + stat.input = 輸入 stat.output = 輸出 stat.booster = 強化 stat.tiles = 需求方塊 stat.affinities = 親和方塊 -block.unknown = [lightgray]??? stat.powercapacity = 蓄電量 stat.powershot = 能量/射擊 stat.damage = 傷害 @@ -584,16 +596,17 @@ stat.targetsground = 攻擊地面目標 stat.itemsmoved = 移動速度 stat.launchtime = 發射間隔 stat.shootrange = 範圍 -stat.size = 尺寸 -stat.displaysize = Display Size +stat.size = 大小 +stat.displaysize = 顯示大小 stat.liquidcapacity = 液體容量 stat.powerrange = 輸出範圍 -stat.linkrange = Link Range -stat.instructions = Instructions -stat.powerconnections = 最大連接數 +stat.linkrange = 連結範圍 +stat.instructions = 介紹 +stat.powerconnections = 最大連結數 stat.poweruse = 能量使用 stat.powerdamage = 能量/傷害 stat.itemcapacity = 物品容量 +stat.memorycapacity = Memory Capacity stat.basepowergeneration = 基礎能量生產 stat.productiontime = 生產時間 stat.repairtime = 方塊完全修復時間 @@ -601,29 +614,52 @@ stat.speedincrease = 速度提升 stat.range = 範圍 stat.drilltier = 可鑽取礦物 stat.drillspeed = 基本鑽取速度 -stat.boosteffect = 提升效應 +stat.boosteffect = 加速效果 stat.maxunits = 最大活躍單位 stat.health = 耐久度 stat.buildtime = 建設時間 -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = 最大連續 stat.buildcost = 建造成本 stat.inaccuracy = 誤差 stat.shots = 射擊數 stat.reload = 射擊次數/秒 stat.ammo = 彈藥 -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time +stat.shieldhealth = 護盾生命值 +stat.cooldowntime = 冷確時間 +stat.explosiveness = Explosiveness +stat.basedeflectchance = Base Deflect Chance +stat.lightningchance = Lightning Chance +stat.lightningdamage = Lightning Damage +stat.flammability = Flammability +stat.radioactivity = Radioactivity +stat.heatcapacity = HeatCapacity +stat.viscosity = Viscosity +stat.temperature = Temperature +stat.speed = Speed +stat.buildspeed = Build Speed +stat.minespeed = Mine Speed +stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = 需要更好的鑽頭 -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = 缺少資源 +bar.corereq = 核心基礎需求 bar.drillspeed = 鑽頭速度:{0}/秒 -bar.pumpspeed = 液體泵送速度:{0}/s +bar.pumpspeed = 液體泵送速度:{0}/秒 bar.efficiency = 效率:{0}% bar.powerbalance = 能量變化:{0} bar.powerstored = 能量存量: {0}/{1} bar.poweramount = 能量:{0} bar.poweroutput = 能量輸出:{0} +bar.powerlines = Connections: {0}/{1} bar.items = 物品:{0} bar.capacity = 容量: {0} bar.unitcap = {0} {1}/{2} @@ -635,19 +671,24 @@ bar.progress = 建造進度 bar.input = 輸入 bar.output = 輸出 +units.processorcontrol = [lightgray]Processor Controlled + bullet.damage = [stat]{0}[lightgray]傷害 bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格 bullet.incendiary = [stat]燃燒 -bullet.homing = [stat]追踪 +bullet.homing = [stat]追蹤 bullet.shock = [stat]電擊 bullet.frag = [stat]破片彈 bullet.knockback = [stat]{0}[lightgray]擊退 +bullet.pierce = [stat]{0}[lightgray]x pierce +bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]冷凍 bullet.tarred = [stat]焦油 bullet.multiplier = [stat]{0}[lightgray]×彈藥倍數 bullet.reload = [stat]{0}[lightgray]×射擊速率 unit.blocks = 方塊 +unit.blockssquared = blocks² unit.powersecond = 能量單位/秒 unit.liquidsecond = 液體單位/秒 unit.itemssecond = 物品/秒 @@ -655,22 +696,22 @@ unit.liquidunits = 液體單位 unit.powerunits = 能量單位 unit.degrees = 度 unit.seconds = 秒 -unit.minutes = mins +unit.minutes = 分 unit.persecond = /秒 -unit.perminute = /min +unit.perminute = /分 unit.timesspeed = ×速度 unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = 護盾生命值 unit.items = 物品 -unit.thousands = k -unit.millions = mil -unit.billions = b +unit.thousands = 千 +unit.millions = 百萬 +unit.billions = 十億 category.general = 一般 category.power = 能量 category.liquids = 液體 category.items = 物品 category.crafting = 需求 -category.shooting = 射擊 +category.function = Function category.optional = 可選的強化 setting.landscape.name = 鎖定水平畫面 setting.shadows.name = 陰影 @@ -679,19 +720,18 @@ setting.linear.name = 線性過濾 setting.hints.name = 提示 setting.flow.name = 顯示資源輸送速度[scarlet] setting.buildautopause.name = 自動暫停建築 -setting.mapcenter.name = Auto Center Map To Player setting.animatedwater.name = 液體動畫 setting.animatedshields.name = 護盾動畫 -setting.antialias.name = 消除鋸齒[lightgray](需要重啟遊戲)[] -setting.playerindicators.name = 盟友指示標 -setting.indicators.name = 敵方指示標 +setting.antialias.name = 消除鋸齒[lightgray](需要重新啟動遊戲)[] +setting.playerindicators.name = 盟友標示 +setting.indicators.name = 敵方標示 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] (需要重啟遊戲)[] +setting.uiscale.name = 使用者介面縮放[lightgray](需要重新啟動遊戲)[] setting.swapdiagonal.name = 預設對角線放置 setting.difficulty.training = 訓練 setting.difficulty.easy = 簡單 @@ -710,14 +750,13 @@ setting.seconds = {0}秒 setting.blockselecttimeout.name = 跳過方塊建造時距 setting.milliseconds = {0}毫秒 setting.fullscreen.name = 全螢幕 -setting.borderlesswindow.name = 無邊框窗口[lightgray](可能需要重啟遊戲) +setting.borderlesswindow.name = 無邊框視窗[lightgray](可能需要重新啟動遊戲) setting.fps.name = 顯示FPS與Ping -setting.smoothcamera.name = Smooth Camera -setting.blockselectkeys.name = 顯示方塊選擇快捷鍵 +setting.smoothcamera.name = 平滑攝影機 setting.vsync.name = 垂直同步 setting.pixelate.name = 像素化 setting.minimap.name = 顯示小地圖 -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = 顯示核心時間(開發中) setting.position.name = 顯示玩家位置 setting.musicvol.name = 音樂音量 setting.atmosphere.name = 顯示星球大氣層 @@ -725,37 +764,37 @@ setting.ambientvol.name = 環境音量 setting.mutemusic.name = 靜音 setting.sfxvol.name = 音效音量 setting.mutesound.name = 靜音 -setting.crashreport.name = 發送匿名崩潰報告 +setting.crashreport.name = 傳送匿名當機回報 setting.savecreate.name = 自動建立存檔 setting.publichost.name = 公開遊戲可見度 setting.playerlimit.name = 玩家數限制 setting.chatopacity.name = 聊天框不透明度 -setting.lasersopacity.name = 激光不透明度 +setting.lasersopacity.name = 雷射不透明度 setting.bridgeopacity.name = 橋透明度 -setting.playerchat.name = 在遊戲中顯示聊天框 -public.confirm = 您想公開遊戲嗎?\n[accent]任何人都可以加入您的遊戲。\n[lightgray]以後可以在“設置”->“遊戲”->“公開遊戲可見度”中進行更改。 +setting.playerchat.name = 在遊戲中顯示聊天視窗 +public.confirm = 您想公開遊戲嗎?\n[accent]任何人都可以加入您的遊戲。\n[lightgray]之後可以在「設定」→「遊戲」→「公開遊戲可見度」中進行更改。 public.beta = 請注意,該遊戲的Beta版本無法公開遊戲大廳。 -uiscale.reset = UI縮放已變更\n按下"確定"確認這個比例\n[scarlet][accent] {0}[] 秒後...退出並還原設定 +uiscale.reset = 使用者介面縮放已變更\n按下「確定」確認這個比例\n[scarlet][accent] {0}[] 秒後退出並還原設定 uiscale.cancel = 取消並退出 setting.bloom.name = 粒子特效 keybind.title = 重新綁定按鍵 -keybinds.mobile = [scarlet]此處的大多數快捷鍵在移動設備上均不起作用。僅支援基本移動。 +keybinds.mobile = [scarlet]此處的大多數快捷鍵在行動裝置上均無法運作。僅支援基本移動。 category.general.name = 一般 category.view.name = 查看 category.multiplayer.name = 多人 -category.blocks.name = Block Select +category.blocks.name = 選取方塊 command.attack = 攻擊 command.rally = 集結 command.retreat = 撤退 -command.idle = Idle +command.idle = 閒置 placement.blockselectkeys = \n[lightgray]按鍵:[{0}, keybind.respawn.name = 重生 keybind.control.name = 控制單位 keybind.clear_building.name = 清除建築指令 -keybind.press = 按一下按鍵... -keybind.press.axis = 按一下軸向或按鍵... +keybind.press = 按一下按鍵…… +keybind.press.axis = 按一下軸向或按鍵…… keybind.screenshot.name = 地圖截圖 -keybind.toggle_power_lines.name = 顯示能量激光 +keybind.toggle_power_lines.name = 顯示能量雷射 keybind.toggle_block_status.name = 開啟方塊狀態顯示 keybind.move_x.name = 水平移動 keybind.move_y.name = 垂直移動 @@ -788,24 +827,24 @@ keybind.diagonal_placement.name = 對角線放置 keybind.pick.name = 選擇方塊 keybind.break_block.name = 移除方塊 keybind.deselect.name = 取消選取 -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = 撿起貨物 +keybind.dropCargo.name = 丟棄貨物 +keybind.command.name = 指令 keybind.shoot.name = 射擊 keybind.zoom.name = 縮放 keybind.menu.name = 主選單 keybind.pause.name = 暫停遊戲 -keybind.pause_building.name = 暫停/恢復建造 +keybind.pause_building.name = 暫停/繼續建造 keybind.minimap.name = 小地圖 keybind.chat.name = 聊天 keybind.player_list.name = 玩家列表 keybind.console.name = 終端機 keybind.rotate.name = 旋轉 -keybind.rotateplaced.name = 旋轉現有(按住) +keybind.rotateplaced.name = 旋轉現有(按住) keybind.toggle_menus.name = 切換畫面 keybind.chat_history_prev.name = 之前的聊天記錄 keybind.chat_history_next.name = 之後的聊天記錄 -keybind.chat_scroll.name = 聊天記錄滾動 +keybind.chat_scroll.name = 聊天記錄捲動 keybind.drop_unit.name = 放下單位 keybind.zoom_minimap.name = 縮放小地圖 mode.help.title = 模式說明 @@ -822,13 +861,14 @@ mode.custom = 自訂規則 rules.infiniteresources = 無限資源 rules.reactorexplosions = 反應爐爆炸 +rules.schematic = Schematics Allowed rules.wavetimer = 波次時間 rules.waves = 波次 rules.attack = 攻擊模式 -rules.buildai = AI Building +rules.buildai = 電腦建築 rules.enemyCheat = 電腦無限資源 rules.blockhealthmultiplier = 建築物耐久度倍數 -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = 建築物傷害倍數 rules.unitbuildspeedmultiplier = 單位建設速度倍數 rules.unithealthmultiplier = 單位生命值倍數 rules.unitdamagemultiplier = 單位傷害倍數 @@ -838,8 +878,8 @@ rules.buildcostmultiplier = 建設成本倍數 rules.buildspeedmultiplier = 建設速度倍數 rules.deconstructrefundmultiplier = 拆除資源返還比例 rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次 -rules.dropzoneradius = 空降區半徑:[lightgray](格) -rules.unitammo = Units Require Ammo +rules.dropzoneradius = 空降區半徑:[lightgray](格) +rules.unitammo = 單位需要彈藥 rules.title.waves = 波次 rules.title.resourcesbuilding = 資源與建築 rules.title.enemy = 敵人 @@ -847,17 +887,19 @@ rules.title.unit = 單位 rules.title.experimental = 實驗中 rules.title.environment = 環境 rules.lighting = 光照 -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.enemyLights = Enemy Lights +rules.fire = 火 +rules.explosions = 方塊/單位爆炸傷害 rules.ambientlight = 環境光照 -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = 天氣 +rules.weather.frequency = 頻率: +rules.weather.duration = 持續時間: content.item.name = 物品 content.liquid.name = 液體 content.unit.name = 單位 content.block.name = 方塊 + item.copper.name = 銅 item.lead.name = 鉛 item.coal.name = 煤炭 @@ -870,7 +912,7 @@ item.phase-fabric.name = 相織布 item.surge-alloy.name = 波動合金 item.spore-pod.name = 孢子莢 item.sand.name = 沙 -item.blast-compound.name = 爆炸混合物 +item.blast-compound.name = 爆炸化合物 item.pyratite.name = 火焰彈 item.metaglass.name = 鋼化玻璃 item.scrap.name = 廢料 @@ -879,32 +921,15 @@ liquid.slag.name = 熔渣 liquid.oil.name = 原油 liquid.cryofluid.name = 冷凍液 -item.explosiveness = [lightgray]爆炸性:{0}% -item.flammability = [lightgray]易燃性:{0}% -item.radioactivity = [lightgray]放射性:{0}% - -unit.health = [lightgray]生命值:{0} -unit.speed = [lightgray]速度:{0} -unit.weapon = [lightgray]武器: {0} -unit.itemcapacity = [lightgray]物品容量: {0} -unit.minespeed = [lightgray]採礦速度: {0}% -unit.minepower = [lightgray]採礦能力: {0} -unit.ability = [lightgray]能力: {0} -unit.buildspeed = [lightgray]建造速度: {0}% - -liquid.heatcapacity = [lightgray]熱容量:{0} -liquid.viscosity = [lightgray]粘性:{0} -liquid.temperature = [lightgray]溫度:{0} - unit.dagger.name = 匕首機甲 -unit.mace.name = Mace +unit.mace.name = 權杖 unit.fortress.name = 要塞 -unit.nova.name = Nova -unit.pulsar.name = Pulsar -unit.quasar.name = Quasar +unit.nova.name = 超新星 +unit.pulsar.name = 脈衝星 +unit.quasar.name = 類星體 unit.crawler.name = 爬行機甲 unit.atrax.name = Atrax -unit.spiroct.name = Spiroct +unit.spiroct.name = 尖刺 unit.arkyid.name = Arkyid unit.toxopid.name = Toxopid unit.flare.name = Flare @@ -930,28 +955,29 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Resupply Point -block.parallax.name = Parallax +block.resupply-point.name = 補給點 +block.parallax.name = 視差 block.cliff.name = 峭壁 block.sand-boulder.name = 沙礫 block.grass.name = 草 block.slag.name = 熔渣 +block.space.name = Space block.salt.name = 鹽 -block.salt-wall.name = Salt Wall +block.salt-wall.name = 鹽牆 block.pebbles.name = 卵石 block.tendrils.name = 卷鬚 -block.sand-wall.name = Sand Wall +block.sand-wall.name = 沙牆 block.spore-pine.name = 孢子松 -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = 孢子牆 +block.boulder.name = 巨石 +block.snow-boulder.name = 雪巨石 block.snow-pine.name = 雪松 block.shale.name = 頁岩 block.shale-boulder.name = 頁岩巨石 block.moss.name = 苔蘚 block.shrubs.name = 灌木 block.spore-moss.name = 孢子苔蘚 -block.shale-wall.name = Shale Wall +block.shale-wall.name = 頁岩牆 block.scrap-wall.name = 廢牆 block.scrap-wall-large.name = 大型廢牆 block.scrap-wall-huge.name = 巨型廢牆 @@ -979,17 +1005,18 @@ block.craters.name = 隕石坑 block.sand-water.name = 沙水 block.darksand-water.name = 黑沙水 block.char.name = 燒焦 -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall +block.dacite.name = 英安岩 +block.dacite-wall.name = 英安岩牆 +block.dacite-boulder.name = Dacite Boulder block.ice-snow.name = 冰雪 -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = 石牆 +block.ice-wall.name = 冰牆 +block.snow-wall.name = 雪牆 +block.dune-wall.name = 沙丘牆 block.pine.name = 松樹 -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = 土 +block.dirt-wall.name = 土牆 +block.mud.name = 泥 block.white-tree-dead.name = 枯萎白樹 block.white-tree.name = 白樹 block.spore-cluster.name = 孢子簇 @@ -1061,7 +1088,7 @@ block.differential-generator.name = 差動發電機 block.impact-reactor.name = 衝擊反應堆 block.mechanical-drill.name = 機械鑽頭 block.pneumatic-drill.name = 氣動鑽頭 -block.laser-drill.name = 激光鑽頭 +block.laser-drill.name = 雷射鑽頭 block.water-extractor.name = 水提取器 block.cultivator.name = 培養槽 block.conduit.name = 管線 @@ -1073,8 +1100,9 @@ block.liquid-void.name = 液體虛空 block.power-void.name = 能量虛空 block.power-source.name = 無限能量源 block.unloader.name = 裝卸器 -block.vault.name = 存儲庫 +block.vault.name = 儲存庫 block.wave.name = 波浪砲 +block.tsunami.name = Tsunami block.swarmer.name = 群集砲 block.salvo.name = 齊射砲 block.ripple.name = 波紋砲 @@ -1114,31 +1142,33 @@ block.arc.name = 電弧砲 block.rtg-generator.name = 放射性同位素熱發電機 block.spectre.name = 鬼影砲 block.meltdown.name = 熔毀砲 +block.foreshadow.name = Foreshadow block.container.name = 容器 block.launch-pad.name = 小型發射台 block.launch-pad-large.name = 大型發射台 -block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome +block.segment.name = 片段 +block.command-center.name = 指揮中心 +block.ground-factory.name = 地面工廠 +block.air-factory.name = 航空工廠 +block.naval-factory.name = 海軍工廠 +block.additive-reconstructor.name = 加法重建者 +block.multiplicative-reconstructor.name = 乘法重建者 +block.exponential-reconstructor.name = 指數重建者 +block.tetrative-reconstructor.name = 特殊重建者 +block.payload-conveyor.name = 原料輸送帶 +block.payload-router.name = 原料分配器 +block.disassembler.name = 拆裝機 +block.silicon-crucible.name = 矽爐 +block.overdrive-dome.name = 高速拱頂 -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell +block.switch.name = 交換器 +block.micro-processor.name = 微處理器 +block.logic-processor.name = 邏輯處理器 +block.hyper-processor.name = 超級處理器 +block.logic-display.name = 邏輯顯示 +block.large-logic-display.name = 大型邏輯顯示 +block.memory-cell.name = 記憶單元 +block.memory-bank.name = Memory Bank team.blue.name = 藍 team.crux.name = 紅 @@ -1172,7 +1202,7 @@ tutorial.launch = 一旦您達到特定的波數, 您就可以[accent] 發射 item.copper.description = 最基本的結構材料。在各種類型的方塊中廣泛使用。 item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和液體運輸方塊。 -item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和存儲。 +item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和儲存。 item.graphite.description = 礦化的碳,用於彈藥和電氣元件。 item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和作為助熔劑。 item.coal.description = 遠在「播種」事件前就形成的植物化石。一種常見並容易獲得的燃料。 @@ -1183,7 +1213,7 @@ item.silicon.description = 一種非常有用的半導體,被用於太陽能 item.plastanium.description = 一種輕量、可延展的材料,用於高級的飛行載具和破片彈藥。 item.phase-fabric.description = 一種近乎無重量的物質,用於先進的電子設備和自修復技術。 item.surge-alloy.description = 一種具有獨特電子特性的高級合金。 -item.spore-pod.description = 合成的胞子莢。合成大氣濃度的胞子做為工業用途。用於轉化為原油、爆炸物和燃料。 +item.spore-pod.description = 合成的孢子莢。合成大氣濃度的孢子做為工業用途。用於轉化為原油、爆炸物和燃料。 item.blast-compound.description = 一種用於炸彈和爆裂物的不穩定混合物。不建議作為燃料。 item.pyratite.description = 一種在燃燒武器中使用的極易燃物質。 liquid.water.description = 最有用的液體。常用於冷卻機器和廢物處理。 @@ -1253,7 +1283,7 @@ block.conduit.description = 基本液體運輸方塊。將液體往前輸送。 block.pulse-conduit.description = 高級的液體運輸方塊。比標準管線更快地輸送並儲存更多液體。 block.plated-conduit.description = 用和脈衝管線相同的速率運送液體,但有更強的裝甲。除了其他管線以外,不會接受來自側面的其他液體\n比較不會漏液。 block.liquid-router.description = 接受來自一個方向的液體並將它們平均輸出到最多3個其他方向。可以儲存一定量的液體。用於將液體從一個來源分成多個目標。 -block.liquid-tank.description = 存儲大量液體。當液體需求非恆定時,使用它來創建緩衝或作為冷卻重要方塊的保障。 +block.liquid-tank.description = 儲存大量液體。當液體需求非恆定時,使用它來創建緩衝或作為冷卻重要方塊的保障。 block.liquid-junction.description = 作為兩個交叉管線的橋樑。適用於兩條不同管線將不同液體運送到不同位置的情況。 block.bridge-conduit.description = 高級的液體運輸方塊。允許跨過最多3個任何地形或建築物的方塊運輸液體。 block.phase-conduit.description = 高級的液體運輸方塊。使用能量將液體傳送到多個方塊外連接的相織管線。 @@ -1261,8 +1291,8 @@ block.power-node.description = 將能量傳輸到相連的節點。該節點將 block.power-node-large.description = 具有更大範圍和更多連接的高級電源節點。 block.surge-tower.description = 具有兩個可用連接的超遠程能量節點。 block.diode.description = 電池中的電力在這個方塊中只能有一個固定的流向,並且只有在另一側的能量較少時才會通過。 -block.battery.description = 有能量剩餘時存儲電力並在能量短缺時提供能量。 -block.battery-large.description = 比普通電池存儲更多的能量。 +block.battery.description = 有能量剩餘時儲存電力並在能量短缺時提供能量。 +block.battery-large.description = 比普通電池儲存更多的能量。 block.combustion-generator.description = 透過燃燒原油或可燃物品以產生能量。 block.thermal-generator.description = 放置在熱的位置時會產生能量。 block.steam-generator.description = 比燃燒發電機更有效率,但需要水才能運作。 @@ -1274,19 +1304,19 @@ block.thorium-reactor.description = 從高度放射性釷產生大量能量。 block.impact-reactor.description = 先進的發電機,在尖峰值效率時能產生巨量能量。需要大量的電源輸入才能啟動該過程。 block.mechanical-drill.description = 一種便宜的鑽頭。當放置在適當的方塊上時,以緩慢的速度無限期地輸出物品。只能挖掘基本的原料。 block.pneumatic-drill.description = 一種改進的鑽頭,可以挖掘鈦。比機械鑽頭挖掘的更快。 -block.laser-drill.description = 通過激光技術可以更快地挖掘,但需要能量。此外,這種鑽頭可以挖掘放射性釷。 +block.laser-drill.description = 通過雷射技術可以更快地挖掘,但需要能量。此外,這種鑽頭可以挖掘放射性釷。 block.blast-drill.description = 終極的鑽頭。需要大量能量。 block.water-extractor.description = 從地下提取水。當附近沒有湖泊時可以使用它。 block.cultivator.description = 將大氣中微小濃度的胞子培養成工業等級的孢子莢。 block.oil-extractor.description = 使用大量的能量、水以及沙子鑽取原油。當附近沒有直接的原油來源時使用它。 -block.core-shard.description = 初代的核心膠囊。一旦被摧毀,與該地區的所有聯繫都將失去。不要讓這種情況發生。 -block.core-foundation.description = 第二代核心。有更好的裝甲。可以存儲更多資源。 -block.core-nucleus.description = 第三代核心,也是最後一代。裝甲非常好。可以存儲大量資源。 -block.vault.description = 存儲大量的每一種物品。當物品需求非恆定時,使用它來創建緩衝。使用[lightgray]裝卸器[]以從存儲庫提取物品。 -block.container.description = 存儲少量的每一種物品。當物品需求非恆定時,使用它來創建緩衝。使用[lightgray]裝卸器[]以從容器提取物品。 -block.unloader.description = 將物品從容器、存儲庫或核心卸載到傳輸帶上或直接卸載到相鄰的方塊中。透過點擊卸載器來更改要卸載的物品類型。 +block.core-shard.description = 初代的核心膠囊。一旦被摧毀,會失去對該地區的控制權。不要讓這種情況發生。 +block.core-foundation.description = 第二代核心。有更好的裝甲。可以儲存更多資源。 +block.core-nucleus.description = 第三代核心,也是最後一代。裝甲非常好。可以儲存大量資源。 +block.vault.description = 儲存大量的每一種物品。當物品需求非恆定時,使用它來創建緩衝。使用[lightgray]裝卸器[]以從儲存庫提取物品。 +block.container.description = 儲存少量的每一種物品。當物品需求非恆定時,使用它來創建緩衝。使用[lightgray]裝卸器[]以從容器提取物品。 +block.unloader.description = 將物品從容器、倉庫或核心卸載到傳輸帶上或直接卸貨到相鄰的方塊中。透過點擊卸貨器來更改要卸貨的物品類型。 block.launch-pad.description = 無需發射核心即可直接發射物品。 -block.launch-pad-large.description = 發射台的進階版。可存儲更多物品。更快的發射速度。 +block.launch-pad-large.description = 發射台的進階版。可儲存更多物品。更快的發射速度。 block.duo.description = 一種小而便宜的砲塔。 block.scatter.description = 不可或缺的中型防空砲塔。向敵方單位噴射鉛塊、廢料或是鋼化玻璃碎片。 block.scorch.description = 燃燒所有靠近它的地面敵人。在近距離非常有效。 @@ -1300,6 +1330,6 @@ block.fuse.description = 一種近距的大型能量砲塔。向敵人發射三 block.ripple.description = 極為強大的迫擊炮塔。一次向敵人發射數發子彈。 block.cyclone.description = 一種對空和對地的大型砲塔。向附近單位發射爆裂性的碎塊。 block.spectre.description = 一種雙炮管的巨型砲塔。向空中及地面敵人發射大型的穿甲彈。 -block.meltdown.description = 一種巨型激光砲塔。充能並發射持續性的激光光束。需要冷卻液以運作。 +block.meltdown.description = 一種巨型雷射砲塔。充電並發射持續性的雷射光束。需要冷卻液以運作。 block.repair-point.description = 持續治療附近最近的受損單位。 -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. \ No newline at end of file +block.segment.description = 傷害並摧毀來襲的砲彈。無法將雷射砲彈作為目標。 diff --git a/core/assets/contributors b/core/assets/contributors index 9f1cf8c9f4..39c29ff93a 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -96,3 +96,8 @@ YellOw139 PetrGasparik LeoDog896 Summet +MEEP of Faith +jalastram (freesound.org) +newlocknew (freesound.org) +dsmolenaers (freesound.org) +Headphaze (freesound.org) \ No newline at end of file diff --git a/core/assets/fonts/font.woff b/core/assets/fonts/font.woff index 4d8ed4b9f7..c031c478de 100644 Binary files a/core/assets/fonts/font.woff and b/core/assets/fonts/font.woff differ diff --git a/core/assets/fonts/icon.ttf b/core/assets/fonts/icon.ttf index 4b61658e65..badd3e3b66 100644 Binary files a/core/assets/fonts/icon.ttf and b/core/assets/fonts/icon.ttf differ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 417ed98b34..008fb1289a 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -314,3 +314,7 @@ 63422=foreshadow|block-foreshadow-medium 63421=tsunami|block-tsunami-medium 63420=space|block-space-medium +63419=legacy-unit-factory-air|block-legacy-unit-factory-air-medium +63418=legacy-unit-factory-ground|block-legacy-unit-factory-ground-medium +63417=interplanetary-accelerator|block-interplanetary-accelerator-medium +63416=basalt-boulder|block-basalt-boulder-medium diff --git a/core/assets/maps/archipelago.msav b/core/assets/maps/archipelago.msav new file mode 100644 index 0000000000..24764ccf20 Binary files /dev/null and b/core/assets/maps/archipelago.msav differ diff --git a/core/assets/maps/biomassFacility.msav b/core/assets/maps/biomassFacility.msav new file mode 100644 index 0000000000..bf16a3b7ea Binary files /dev/null and b/core/assets/maps/biomassFacility.msav differ diff --git a/core/assets/maps/crags.msav b/core/assets/maps/crags.msav deleted file mode 100644 index 1fb64c01e7..0000000000 Binary files a/core/assets/maps/crags.msav and /dev/null differ diff --git a/core/assets/maps/craters.msav b/core/assets/maps/craters.msav index 04c1aa73d3..94bba211ac 100644 Binary files a/core/assets/maps/craters.msav and b/core/assets/maps/craters.msav differ diff --git a/core/assets/maps/debrisField.msav b/core/assets/maps/debrisField.msav new file mode 100644 index 0000000000..956a7d5b49 Binary files /dev/null and b/core/assets/maps/debrisField.msav differ diff --git a/core/assets/maps/extractionOutpost.msav b/core/assets/maps/extractionOutpost.msav new file mode 100644 index 0000000000..5728a4b217 Binary files /dev/null and b/core/assets/maps/extractionOutpost.msav differ diff --git a/core/assets/maps/frozenForest.msav b/core/assets/maps/frozenForest.msav index 0eb9f1fe56..09f7e2a546 100644 Binary files a/core/assets/maps/frozenForest.msav and b/core/assets/maps/frozenForest.msav differ diff --git a/core/assets/maps/fungalPass.msav b/core/assets/maps/fungalPass.msav index 1e3a26f520..f0edb0987b 100644 Binary files a/core/assets/maps/fungalPass.msav and b/core/assets/maps/fungalPass.msav differ diff --git a/core/assets/maps/glacier.msav b/core/assets/maps/glacier.msav index 83a4f07437..73796f7643 100644 Binary files a/core/assets/maps/glacier.msav and b/core/assets/maps/glacier.msav differ diff --git a/core/assets/maps/groundZero.msav b/core/assets/maps/groundZero.msav index 1f1500439b..bb169dbbc7 100644 Binary files a/core/assets/maps/groundZero.msav and b/core/assets/maps/groundZero.msav differ diff --git a/core/assets/maps/impact0078.msav b/core/assets/maps/impact0078.msav index 03bcfe8be2..56f5570bfb 100644 Binary files a/core/assets/maps/impact0078.msav and b/core/assets/maps/impact0078.msav differ diff --git a/core/assets/maps/nuclearComplex.msav b/core/assets/maps/nuclearComplex.msav index fe8b36e26a..aa9424850b 100644 Binary files a/core/assets/maps/nuclearComplex.msav and b/core/assets/maps/nuclearComplex.msav differ diff --git a/core/assets/maps/overgrowth.msav b/core/assets/maps/overgrowth.msav index b65b8e4818..0fd4902d1d 100644 Binary files a/core/assets/maps/overgrowth.msav and b/core/assets/maps/overgrowth.msav differ diff --git a/core/assets/maps/planetaryTerminal.msav b/core/assets/maps/planetaryTerminal.msav new file mode 100644 index 0000000000..c705da368f Binary files /dev/null and b/core/assets/maps/planetaryTerminal.msav differ diff --git a/core/assets/maps/stainedMountains.msav b/core/assets/maps/stainedMountains.msav index c627b0917e..af3abb26c2 100644 Binary files a/core/assets/maps/stainedMountains.msav and b/core/assets/maps/stainedMountains.msav differ diff --git a/core/assets/maps/tarFields.msav b/core/assets/maps/tarFields.msav index bf8b306f95..006be2fb0f 100644 Binary files a/core/assets/maps/tarFields.msav and b/core/assets/maps/tarFields.msav differ diff --git a/core/assets/maps/veins.msav b/core/assets/maps/veins.msav index 744dbaf99d..3273feb74b 100644 Binary files a/core/assets/maps/veins.msav and b/core/assets/maps/veins.msav differ diff --git a/core/assets/maps/windsweptIslands.msav b/core/assets/maps/windsweptIslands.msav new file mode 100644 index 0000000000..d5e838b60d Binary files /dev/null and b/core/assets/maps/windsweptIslands.msav differ diff --git a/core/assets/music/boss1.mp3 b/core/assets/music/boss1.mp3 new file mode 100644 index 0000000000..4a54f750c9 Binary files /dev/null and b/core/assets/music/boss1.mp3 differ diff --git a/core/assets/music/boss2.mp3 b/core/assets/music/boss2.mp3 new file mode 100644 index 0000000000..cd9eaf1b25 Binary files /dev/null and b/core/assets/music/boss2.mp3 differ diff --git a/core/assets/music/editor.mp3 b/core/assets/music/editor.mp3 new file mode 100644 index 0000000000..0b3a8e6182 Binary files /dev/null and b/core/assets/music/editor.mp3 differ diff --git a/core/assets/music/editor.ogg b/core/assets/music/editor.ogg deleted file mode 100644 index 61348f1b75..0000000000 Binary files a/core/assets/music/editor.ogg and /dev/null differ diff --git a/core/assets/music/game1.mp3 b/core/assets/music/game1.mp3 new file mode 100644 index 0000000000..bfb9b3d468 Binary files /dev/null and b/core/assets/music/game1.mp3 differ diff --git a/core/assets/music/game1.ogg b/core/assets/music/game1.ogg deleted file mode 100644 index d69bb0e931..0000000000 Binary files a/core/assets/music/game1.ogg and /dev/null differ diff --git a/core/assets/music/game2.mp3 b/core/assets/music/game2.mp3 new file mode 100644 index 0000000000..baeddf2914 Binary files /dev/null and b/core/assets/music/game2.mp3 differ diff --git a/core/assets/music/game2.ogg b/core/assets/music/game2.ogg deleted file mode 100644 index 9cf7898026..0000000000 Binary files a/core/assets/music/game2.ogg and /dev/null differ diff --git a/core/assets/music/game3.mp3 b/core/assets/music/game3.mp3 new file mode 100644 index 0000000000..e7f8e34f75 Binary files /dev/null and b/core/assets/music/game3.mp3 differ diff --git a/core/assets/music/game3.ogg b/core/assets/music/game3.ogg deleted file mode 100644 index 657848a0da..0000000000 Binary files a/core/assets/music/game3.ogg and /dev/null differ diff --git a/core/assets/music/game4.mp3 b/core/assets/music/game4.mp3 new file mode 100644 index 0000000000..c21cf226f0 Binary files /dev/null and b/core/assets/music/game4.mp3 differ diff --git a/core/assets/music/game4.ogg b/core/assets/music/game4.ogg deleted file mode 100644 index 051c414540..0000000000 Binary files a/core/assets/music/game4.ogg and /dev/null differ diff --git a/core/assets/music/game5.mp3 b/core/assets/music/game5.mp3 new file mode 100644 index 0000000000..2bcc7e7a94 Binary files /dev/null and b/core/assets/music/game5.mp3 differ diff --git a/core/assets/music/game5.ogg b/core/assets/music/game5.ogg deleted file mode 100644 index d988882f7a..0000000000 Binary files a/core/assets/music/game5.ogg and /dev/null differ diff --git a/core/assets/music/game6.mp3 b/core/assets/music/game6.mp3 new file mode 100644 index 0000000000..9e0cfc97d6 Binary files /dev/null and b/core/assets/music/game6.mp3 differ diff --git a/core/assets/music/game6.ogg b/core/assets/music/game6.ogg deleted file mode 100644 index 45b063ae9c..0000000000 Binary files a/core/assets/music/game6.ogg and /dev/null differ diff --git a/core/assets/music/game7.mp3 b/core/assets/music/game7.mp3 new file mode 100644 index 0000000000..4a8d5187b8 Binary files /dev/null and b/core/assets/music/game7.mp3 differ diff --git a/core/assets/music/game7.ogg b/core/assets/music/game7.ogg deleted file mode 100644 index 6a1011657c..0000000000 Binary files a/core/assets/music/game7.ogg and /dev/null differ diff --git a/core/assets/music/game8.mp3 b/core/assets/music/game8.mp3 new file mode 100644 index 0000000000..a2cebbc465 Binary files /dev/null and b/core/assets/music/game8.mp3 differ diff --git a/core/assets/music/game9.mp3 b/core/assets/music/game9.mp3 new file mode 100644 index 0000000000..a852b4c4c9 Binary files /dev/null and b/core/assets/music/game9.mp3 differ diff --git a/core/assets/music/land.mp3 b/core/assets/music/land.mp3 new file mode 100644 index 0000000000..80720c478c Binary files /dev/null and b/core/assets/music/land.mp3 differ diff --git a/core/assets/music/land.ogg b/core/assets/music/land.ogg deleted file mode 100644 index 800b253656..0000000000 Binary files a/core/assets/music/land.ogg and /dev/null differ diff --git a/core/assets/music/launch.mp3 b/core/assets/music/launch.mp3 new file mode 100644 index 0000000000..7aeb2a3340 Binary files /dev/null and b/core/assets/music/launch.mp3 differ diff --git a/core/assets/music/launch.ogg b/core/assets/music/launch.ogg deleted file mode 100644 index 1da1a065c6..0000000000 Binary files a/core/assets/music/launch.ogg and /dev/null differ diff --git a/core/assets/music/menu.mp3 b/core/assets/music/menu.mp3 new file mode 100644 index 0000000000..6423eba4b2 Binary files /dev/null and b/core/assets/music/menu.mp3 differ diff --git a/core/assets/music/menu.ogg b/core/assets/music/menu.ogg deleted file mode 100644 index c23fe679fb..0000000000 Binary files a/core/assets/music/menu.ogg and /dev/null differ diff --git a/core/assets/scripts/base.js b/core/assets/scripts/base.js index ace7d878ee..d0fab50b81 100755 --- a/core/assets/scripts/base.js +++ b/core/assets/scripts/base.js @@ -1,28 +1,46 @@ "use strict"; -const log = function(context, obj){ - Vars.mods.getScripts().log(context, String(obj)) +function log(context, obj){ + Vars.mods.scripts.log(context, String(obj)) } -const readString = path => Vars.mods.getScripts().readString(path) -const readBytes = path => Vars.mods.getScripts().readBytes(path) -const loadMusic = path => Vars.mods.getScripts().loadMusic(path) -const loadSound = path => Vars.mods.getScripts().loadSound(path) +const readString = path => Vars.mods.scripts.readString(path) +const readBytes = path => Vars.mods.scripts.readBytes(path) +const loadMusic = path => Vars.mods.scripts.loadMusic(path) +const loadSound = path => Vars.mods.scripts.loadSound(path) + +const readFile = (purpose, ext, cons) => Vars.mods.scripts.readFile(purpose, ext, cons); +const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons); +const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str); +const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes); let scriptName = "base.js" let modName = "none" const print = text => log(modName + "/" + scriptName, text); -const extendContent = function(classType, name, params){ - return new JavaAdapter(classType, params, name) +//js 'extend(Base, ..., {})' = java 'new Base(...) {}' +function extend(/*Base, ..., def*/){ + const Base = arguments[0] + const def = arguments[arguments.length - 1] + //swap order from Base, def, ... to Base, ..., def + const args = [Base, def].concat(Array.from(arguments).splice(1, arguments.length - 2)) + + //forward constructor arguments to new JavaAdapter + const instance = JavaAdapter.apply(null, args) + //JavaAdapter only overrides functions; set fields too + for(var i in def){ + if(typeof(def[i]) != "function"){ + instance[i] = def[i] + } + } + return instance } -const extend = function(classType, params){ - return new JavaAdapter(classType, params) -} +//For backwards compatibility, use extend instead +const extendContent = extend; -//these are not sctrictly necessary, but are kept for edge cases +//these are not strictly necessary, but are kept for edge cases const run = method => new java.lang.Runnable(){run: method} const boolf = method => new Boolf(){get: method} const boolp = method => new Boolp(){get: method} diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index 81a07f2bef..214da61a7b 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -2,29 +2,47 @@ "use strict"; -const log = function(context, obj){ - Vars.mods.getScripts().log(context, String(obj)) +function log(context, obj){ + Vars.mods.scripts.log(context, String(obj)) } -const readString = path => Vars.mods.getScripts().readString(path) -const readBytes = path => Vars.mods.getScripts().readBytes(path) -const loadMusic = path => Vars.mods.getScripts().loadMusic(path) -const loadSound = path => Vars.mods.getScripts().loadSound(path) +const readString = path => Vars.mods.scripts.readString(path) +const readBytes = path => Vars.mods.scripts.readBytes(path) +const loadMusic = path => Vars.mods.scripts.loadMusic(path) +const loadSound = path => Vars.mods.scripts.loadSound(path) -var scriptName = "base.js" -var modName = "none" +const readFile = (purpose, ext, cons) => Vars.mods.scripts.readFile(purpose, ext, cons); +const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons); +const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str); +const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes); + +let scriptName = "base.js" +let modName = "none" const print = text => log(modName + "/" + scriptName, text); -const extendContent = function(classType, name, params){ - return new JavaAdapter(classType, params, name) +//js 'extend(Base, ..., {})' = java 'new Base(...) {}' +function extend(/*Base, ..., def*/){ + const Base = arguments[0] + const def = arguments[arguments.length - 1] + //swap order from Base, def, ... to Base, ..., def + const args = [Base, def].concat(Array.from(arguments).splice(1, arguments.length - 2)) + + //forward constructor arguments to new JavaAdapter + const instance = JavaAdapter.apply(null, args) + //JavaAdapter only overrides functions; set fields too + for(var i in def){ + if(typeof(def[i]) != "function"){ + instance[i] = def[i] + } + } + return instance } -const extend = function(classType, params){ - return new JavaAdapter(classType, params) -} +//For backwards compatibility, use extend instead +const extendContent = extend; -//these are not sctrictly necessary, but are kept for edge cases +//these are not strictly necessary, but are kept for edge cases const run = method => new java.lang.Runnable(){run: method} const boolf = method => new Boolf(){get: method} const boolp = method => new Boolp(){get: method} @@ -68,6 +86,7 @@ importPackage(Packages.mindustry.entities) importPackage(Packages.mindustry.entities.abilities) importPackage(Packages.mindustry.entities.bullet) importPackage(Packages.mindustry.entities.comp) +importPackage(Packages.mindustry.entities.effect) importPackage(Packages.mindustry.entities.units) importPackage(Packages.mindustry.game) importPackage(Packages.mindustry.gen) @@ -82,6 +101,7 @@ importPackage(Packages.mindustry.maps.generators) importPackage(Packages.mindustry.maps.planet) importPackage(Packages.mindustry.net) importPackage(Packages.mindustry.type) +importPackage(Packages.mindustry.type.weather) importPackage(Packages.mindustry.ui) importPackage(Packages.mindustry.ui.dialogs) importPackage(Packages.mindustry.ui.fragments) @@ -128,6 +148,8 @@ const UnlockEvent = Packages.mindustry.game.EventType.UnlockEvent const StateChangeEvent = Packages.mindustry.game.EventType.StateChangeEvent const TileChangeEvent = Packages.mindustry.game.EventType.TileChangeEvent const GameOverEvent = Packages.mindustry.game.EventType.GameOverEvent +const UnitControlEvent = Packages.mindustry.game.EventType.UnitControlEvent +const PickupEvent = Packages.mindustry.game.EventType.PickupEvent const TapEvent = Packages.mindustry.game.EventType.TapEvent const ConfigEvent = Packages.mindustry.game.EventType.ConfigEvent const DepositEvent = Packages.mindustry.game.EventType.DepositEvent @@ -136,7 +158,10 @@ const SectorCaptureEvent = Packages.mindustry.game.EventType.SectorCaptureEvent const PlayerChatEvent = Packages.mindustry.game.EventType.PlayerChatEvent const ClientPreConnectEvent = Packages.mindustry.game.EventType.ClientPreConnectEvent const CommandIssueEvent = Packages.mindustry.game.EventType.CommandIssueEvent +const SchematicCreateEvent = Packages.mindustry.game.EventType.SchematicCreateEvent +const SectorLaunchEvent = Packages.mindustry.game.EventType.SectorLaunchEvent const LaunchItemEvent = Packages.mindustry.game.EventType.LaunchItemEvent +const SectorInvasionEvent = Packages.mindustry.game.EventType.SectorInvasionEvent const SectorLoseEvent = Packages.mindustry.game.EventType.SectorLoseEvent const WorldLoadEvent = Packages.mindustry.game.EventType.WorldLoadEvent const ClientLoadEvent = Packages.mindustry.game.EventType.ClientLoadEvent diff --git a/core/assets/shaders/atmosphere.frag b/core/assets/shaders/atmosphere.frag index cbb7c4ea21..f5f437f298 100644 --- a/core/assets/shaders/atmosphere.frag +++ b/core/assets/shaders/atmosphere.frag @@ -27,12 +27,12 @@ uniform vec3 u_rcampos; uniform mat4 u_invproj; uniform vec3 u_light; -vec2 rayIntersection(vec3 p, vec3 dir, float radius) { +vec2 rayIntersection(vec3 p, vec3 dir, float radius){ float b = dot(p, dir); float c = dot(p, p) - radius * radius; float d = b * b - c; - if (d < 0.0) { + if(d < 0.0){ return vec2(MAX, -MAX); } d = sqrt(d); @@ -43,7 +43,7 @@ vec2 rayIntersection(vec3 p, vec3 dir, float radius) { return vec2(near, far); } -float miePhase(float g, float c, float cc) { +float miePhase(float g, float c, float cc){ float gg = g * g; float a = (1.0 - gg) * (1.0 + cc); @@ -55,20 +55,20 @@ float miePhase(float g, float c, float cc) { return 1.5 * a / b; } -float rayleighPhase(float cc) { +float rayleighPhase(float cc){ return 0.75 * (1.0 + cc); } -float density(vec3 p) { +float density(vec3 p){ return exp(-(length(p) - u_innerRadius) * (4.0 / (u_outerRadius - u_innerRadius))); } -float optic(vec3 p, vec3 q) { +float optic(vec3 p, vec3 q){ vec3 step = (q - p) / fNumOutScatter; vec3 v = p + step * 0.5; float sum = 0.0; - for (int i = 0; i < numOutScatter; i++) { + for(int i = 0; i < numOutScatter; i++){ sum += density(v); v += step; } @@ -76,7 +76,7 @@ float optic(vec3 p, vec3 q) { return sum; } -vec3 inScatter(vec3 o, vec3 dir, vec2 e, vec3 l) { +vec3 inScatter(vec3 o, vec3 dir, vec2 e, vec3 l){ float len = (e.y - e.x) / fNumInScatter; vec3 step = dir * len; vec3 p = o + dir * e.x; @@ -115,4 +115,4 @@ void main(){ vec3 result = inScatter(eye, dir, e, l); gl_FragColor = vec4(result, 1.0); -} \ No newline at end of file +} diff --git a/core/assets/shaders/atmosphere.vert b/core/assets/shaders/atmosphere.vert index 6899e0f0f4..05081108d0 100644 --- a/core/assets/shaders/atmosphere.vert +++ b/core/assets/shaders/atmosphere.vert @@ -10,4 +10,4 @@ void main(){ v_position = a_position; v_model = u_model; gl_Position = u_projection*u_model*a_position; -} \ No newline at end of file +} diff --git a/core/assets/shaders/blockbuild.frag b/core/assets/shaders/blockbuild.frag index c2fb1b4044..0c8f301350 100644 --- a/core/assets/shaders/blockbuild.frag +++ b/core/assets/shaders/blockbuild.frag @@ -24,7 +24,7 @@ bool cont(vec2 T, vec2 v){ id(T + vec2(step, 0) * v, base) || id(T + vec2(-step, 0) * v, base)); } -void main() { +void main(){ vec2 t = v_texCoords.xy; diff --git a/core/assets/shaders/cubemap.frag b/core/assets/shaders/cubemap.frag index 3f9a760e94..d6567508e9 100644 --- a/core/assets/shaders/cubemap.frag +++ b/core/assets/shaders/cubemap.frag @@ -5,4 +5,4 @@ uniform samplerCube u_cubemap; void main(){ gl_FragColor = textureCube(u_cubemap, v_texCoords); -} \ No newline at end of file +} diff --git a/core/assets/shaders/cubemap.vert b/core/assets/shaders/cubemap.vert index 546cec8f46..1d5d04f518 100644 --- a/core/assets/shaders/cubemap.vert +++ b/core/assets/shaders/cubemap.vert @@ -9,4 +9,4 @@ const float SCALE = 50.0; void main(){ v_texCoords = a_position; gl_Position = u_proj * vec4(a_position * SCALE, 1.0); -} \ No newline at end of file +} diff --git a/core/assets/shaders/default.frag b/core/assets/shaders/default.frag index 93be3cffc9..1f67c593ea 100644 --- a/core/assets/shaders/default.frag +++ b/core/assets/shaders/default.frag @@ -6,4 +6,4 @@ uniform sampler2D u_texture; void main(){ vec4 c = texture2D(u_texture, v_texCoords); gl_FragColor = v_color * mix(c, vec4(v_mix_color.rgb, c.a), v_mix_color.a); -} \ No newline at end of file +} diff --git a/core/assets/shaders/planet.vert b/core/assets/shaders/planet.vert index 4723e2bfff..182fe68972 100755 --- a/core/assets/shaders/planet.vert +++ b/core/assets/shaders/planet.vert @@ -17,9 +17,9 @@ const float shinelen = 0.2; void main(){ vec3 norc = u_ambientColor * (diffuse + vec3(clamp((dot(a_normal, u_lightdir) + 1.0) / 2.0, 0.0, 1.0))); float shinedot = max((-dot(u_camdir, a_normal) - (1.0 - shinelen)) / shinelen, 0.0); - float shinyness = (1.0 - a_color.a) * pow(shinedot, shinefalloff); + float albedo = (1.0 - a_color.a) * pow(shinedot, shinefalloff); vec4 baseCol = vec4(a_color.rgb, 1.0); - v_col = mix(baseCol * vec4(norc, 1.0), vec4(1.0), shinyness * norc.r); + v_col = mix(baseCol * vec4(norc, 1.0), vec4(1.0), albedo * norc.r); gl_Position = u_proj * u_trans * a_position; } diff --git a/core/assets/shaders/planetgrid.vert b/core/assets/shaders/planetgrid.vert index 5dd54ffebc..9eca283160 100644 --- a/core/assets/shaders/planetgrid.vert +++ b/core/assets/shaders/planetgrid.vert @@ -7,7 +7,7 @@ uniform mat4 u_trans; varying vec4 v_col; varying vec4 v_position; -void main() { +void main(){ gl_Position = u_proj * u_trans * a_position; v_col = a_color; v_position = a_position; diff --git a/core/assets/shaders/slag.frag b/core/assets/shaders/slag.frag index f904d48dbf..c038baf292 100755 --- a/core/assets/shaders/slag.frag +++ b/core/assets/shaders/slag.frag @@ -29,4 +29,4 @@ void main(){ } gl_FragColor = color; -} \ No newline at end of file +} diff --git a/core/assets/shaders/space.frag b/core/assets/shaders/space.frag index 4b95cf7438..73045aa54b 100755 --- a/core/assets/shaders/space.frag +++ b/core/assets/shaders/space.frag @@ -1,6 +1,6 @@ #define HIGHP #define NSCALE 2700.0 -#define CAMSCALE (NSCALE*5.0) +#define CAMSCALE (NSCALE*10.0) uniform sampler2D u_texture; uniform sampler2D u_stars; @@ -20,4 +20,4 @@ void main(){ color.rgb = texture2D(u_stars, coords/NSCALE + vec2(-0.1, -0.1) + u_ccampos / CAMSCALE).rgb; gl_FragColor = color; -} \ No newline at end of file +} diff --git a/core/assets/shaders/tar.frag b/core/assets/shaders/tar.frag index ea2a3b3f1d..228eb15718 100644 --- a/core/assets/shaders/tar.frag +++ b/core/assets/shaders/tar.frag @@ -24,4 +24,4 @@ void main(){ } gl_FragColor = color; -} \ No newline at end of file +} diff --git a/core/assets/shaders/unitbuild.frag b/core/assets/shaders/unitbuild.frag index 147b27106f..d4657060da 100644 --- a/core/assets/shaders/unitbuild.frag +++ b/core/assets/shaders/unitbuild.frag @@ -30,7 +30,7 @@ bool cont(vec2 T, vec2 v){ id(T + vec2(step, -step) * v, base) || id(T + vec2(-step, step) * v, base)); } -void main() { +void main(){ vec2 coords = (v_texCoords.xy - u_uv) / (u_uv2 - u_uv); vec2 t = v_texCoords.xy; vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y); diff --git a/core/assets/shaders/water.frag b/core/assets/shaders/water.frag index f0c41ccd24..e7f4ee1016 100644 --- a/core/assets/shaders/water.frag +++ b/core/assets/shaders/water.frag @@ -34,4 +34,4 @@ void main(){ } gl_FragColor = vec4(color.rgb, 1.0); -} \ No newline at end of file +} diff --git a/core/assets/sounds/artillery.ogg b/core/assets/sounds/artillery.ogg index e3651f5ce1..d9f8b74d75 100644 Binary files a/core/assets/sounds/artillery.ogg and b/core/assets/sounds/artillery.ogg differ diff --git a/core/assets/sounds/bang.ogg b/core/assets/sounds/bang.ogg index afbd099e6f..29cde62552 100644 Binary files a/core/assets/sounds/bang.ogg and b/core/assets/sounds/bang.ogg differ diff --git a/core/assets/sounds/boom.ogg b/core/assets/sounds/boom.ogg index 4cce577fe9..19f41d80b2 100644 Binary files a/core/assets/sounds/boom.ogg and b/core/assets/sounds/boom.ogg differ diff --git a/core/assets/sounds/combustion.ogg b/core/assets/sounds/combustion.ogg new file mode 100644 index 0000000000..6aab153a47 Binary files /dev/null and b/core/assets/sounds/combustion.ogg differ diff --git a/core/assets/sounds/conveyor.ogg b/core/assets/sounds/conveyor.ogg index 9f989d70d0..67576b44a4 100644 Binary files a/core/assets/sounds/conveyor.ogg and b/core/assets/sounds/conveyor.ogg differ diff --git a/core/assets/sounds/cutter.ogg b/core/assets/sounds/cutter.ogg new file mode 100644 index 0000000000..313159006e Binary files /dev/null and b/core/assets/sounds/cutter.ogg differ diff --git a/core/assets/sounds/drill.ogg b/core/assets/sounds/drill.ogg index 6aab153a47..f21898b646 100644 Binary files a/core/assets/sounds/drill.ogg and b/core/assets/sounds/drill.ogg differ diff --git a/core/assets/sounds/empty.ogg b/core/assets/sounds/empty.ogg deleted file mode 100644 index 6c7ecbe8e0..0000000000 Binary files a/core/assets/sounds/empty.ogg and /dev/null differ diff --git a/core/assets/sounds/fire.ogg b/core/assets/sounds/fire.ogg index 0201ee8ea4..eb5ea8a770 100644 Binary files a/core/assets/sounds/fire.ogg and b/core/assets/sounds/fire.ogg differ diff --git a/core/assets/sounds/grinding.ogg b/core/assets/sounds/grinding.ogg new file mode 100644 index 0000000000..f78d2c4e67 Binary files /dev/null and b/core/assets/sounds/grinding.ogg differ diff --git a/core/assets/sounds/hum.ogg b/core/assets/sounds/hum.ogg new file mode 100644 index 0000000000..184504f3dd Binary files /dev/null and b/core/assets/sounds/hum.ogg differ diff --git a/core/assets/sounds/laserblast.ogg b/core/assets/sounds/laserblast.ogg new file mode 100644 index 0000000000..6df3b14284 Binary files /dev/null and b/core/assets/sounds/laserblast.ogg differ diff --git a/core/assets/sounds/lasercharge.ogg b/core/assets/sounds/lasercharge.ogg new file mode 100644 index 0000000000..7e50df3661 Binary files /dev/null and b/core/assets/sounds/lasercharge.ogg differ diff --git a/core/assets/sounds/lasercharge2.ogg b/core/assets/sounds/lasercharge2.ogg new file mode 100644 index 0000000000..2a737e5f63 Binary files /dev/null and b/core/assets/sounds/lasercharge2.ogg differ diff --git a/core/assets/sounds/lasershoot.ogg b/core/assets/sounds/lasershoot.ogg new file mode 100644 index 0000000000..d25c17a4cb Binary files /dev/null and b/core/assets/sounds/lasershoot.ogg differ diff --git a/core/assets/sounds/minebeam.ogg b/core/assets/sounds/minebeam.ogg new file mode 100644 index 0000000000..27f75a8531 Binary files /dev/null and b/core/assets/sounds/minebeam.ogg differ diff --git a/core/assets/sounds/mud.ogg b/core/assets/sounds/mud.ogg new file mode 100644 index 0000000000..8eb75cb67e Binary files /dev/null and b/core/assets/sounds/mud.ogg differ diff --git a/core/assets/sounds/noammo.ogg b/core/assets/sounds/noammo.ogg new file mode 100644 index 0000000000..4472dab237 Binary files /dev/null and b/core/assets/sounds/noammo.ogg differ diff --git a/core/assets/sounds/pew.ogg b/core/assets/sounds/pew.ogg index 0c1df7f711..6a15b963e3 100644 Binary files a/core/assets/sounds/pew.ogg and b/core/assets/sounds/pew.ogg differ diff --git a/core/assets/sounds/pew_.ogg b/core/assets/sounds/pew_.ogg new file mode 100644 index 0000000000..0c1df7f711 Binary files /dev/null and b/core/assets/sounds/pew_.ogg differ diff --git a/core/assets/sounds/place.ogg b/core/assets/sounds/place.ogg index ff1d05c211..29bcec7a9b 100644 Binary files a/core/assets/sounds/place.ogg and b/core/assets/sounds/place.ogg differ diff --git a/core/assets/sounds/plasmaboom.ogg b/core/assets/sounds/plasmaboom.ogg new file mode 100644 index 0000000000..fab2f3471d Binary files /dev/null and b/core/assets/sounds/plasmaboom.ogg differ diff --git a/core/assets/sounds/plasmadrop.ogg b/core/assets/sounds/plasmadrop.ogg new file mode 100644 index 0000000000..57bd0b8e27 Binary files /dev/null and b/core/assets/sounds/plasmadrop.ogg differ diff --git a/core/assets/sounds/pulse.ogg b/core/assets/sounds/pulse.ogg new file mode 100644 index 0000000000..6c135c8a07 Binary files /dev/null and b/core/assets/sounds/pulse.ogg differ diff --git a/core/assets/sounds/railgun.ogg b/core/assets/sounds/railgun.ogg new file mode 100644 index 0000000000..d8de298916 Binary files /dev/null and b/core/assets/sounds/railgun.ogg differ diff --git a/core/assets/sounds/rain.ogg b/core/assets/sounds/rain.ogg new file mode 100644 index 0000000000..ecf90ea73d Binary files /dev/null and b/core/assets/sounds/rain.ogg differ diff --git a/core/assets/sounds/sap.ogg b/core/assets/sounds/sap.ogg new file mode 100644 index 0000000000..9e73a8d516 Binary files /dev/null and b/core/assets/sounds/sap.ogg differ diff --git a/core/assets/sounds/shield.ogg b/core/assets/sounds/shield.ogg new file mode 100644 index 0000000000..b427a07286 Binary files /dev/null and b/core/assets/sounds/shield.ogg differ diff --git a/core/assets/sounds/shootSnap.ogg b/core/assets/sounds/shootSnap.ogg index fc692486a0..17826bb5c0 100644 Binary files a/core/assets/sounds/shootSnap.ogg and b/core/assets/sounds/shootSnap.ogg differ diff --git a/core/assets/sounds/smelter.ogg b/core/assets/sounds/smelter.ogg new file mode 100644 index 0000000000..86bbaf63de Binary files /dev/null and b/core/assets/sounds/smelter.ogg differ diff --git a/core/assets/sounds/spark.ogg b/core/assets/sounds/spark.ogg index ac61a476de..352e98c743 100644 Binary files a/core/assets/sounds/spark.ogg and b/core/assets/sounds/spark.ogg differ diff --git a/core/assets/sounds/splash.ogg b/core/assets/sounds/splash.ogg index 4b6e5eec53..59a77836c4 100644 Binary files a/core/assets/sounds/splash.ogg and b/core/assets/sounds/splash.ogg differ diff --git a/core/assets/sounds/spray.ogg b/core/assets/sounds/spray.ogg index 7bddeb6685..50a2049596 100644 Binary files a/core/assets/sounds/spray.ogg and b/core/assets/sounds/spray.ogg differ diff --git a/core/assets/sounds/steam.ogg b/core/assets/sounds/steam.ogg new file mode 100644 index 0000000000..9b65bac938 Binary files /dev/null and b/core/assets/sounds/steam.ogg differ diff --git a/core/assets/sounds/swish.ogg b/core/assets/sounds/swish.ogg new file mode 100644 index 0000000000..4b6e5eec53 Binary files /dev/null and b/core/assets/sounds/swish.ogg differ diff --git a/core/assets/sounds/techloop.ogg b/core/assets/sounds/techloop.ogg new file mode 100644 index 0000000000..125ac36718 Binary files /dev/null and b/core/assets/sounds/techloop.ogg differ diff --git a/core/assets/sounds/tractorbeam.ogg b/core/assets/sounds/tractorbeam.ogg new file mode 100644 index 0000000000..4c307c4e08 Binary files /dev/null and b/core/assets/sounds/tractorbeam.ogg differ diff --git a/core/assets/sounds/back.ogg b/core/assets/sounds/ui/back.ogg similarity index 100% rename from core/assets/sounds/back.ogg rename to core/assets/sounds/ui/back.ogg diff --git a/core/assets/sounds/message.ogg b/core/assets/sounds/ui/message.ogg similarity index 100% rename from core/assets/sounds/message.ogg rename to core/assets/sounds/ui/message.ogg diff --git a/core/assets/sounds/press.ogg b/core/assets/sounds/ui/press.ogg similarity index 100% rename from core/assets/sounds/press.ogg rename to core/assets/sounds/ui/press.ogg diff --git a/core/assets/sounds/unlock.ogg b/core/assets/sounds/ui/unlock.ogg similarity index 100% rename from core/assets/sounds/unlock.ogg rename to core/assets/sounds/ui/unlock.ogg diff --git a/core/assets/sounds/wind.ogg b/core/assets/sounds/wind.ogg new file mode 100644 index 0000000000..aeabe4802b Binary files /dev/null and b/core/assets/sounds/wind.ogg differ diff --git a/core/assets/sounds/wind2.ogg b/core/assets/sounds/wind2.ogg new file mode 100644 index 0000000000..3900ba35a1 Binary files /dev/null and b/core/assets/sounds/wind2.ogg differ diff --git a/core/assets/sounds/windhowl.ogg b/core/assets/sounds/windhowl.ogg new file mode 100644 index 0000000000..de7526a616 Binary files /dev/null and b/core/assets/sounds/windhowl.ogg differ diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index e8845aa072..35011521ca 100644 Binary files a/core/assets/sprites/block_colors.png and b/core/assets/sprites/block_colors.png differ diff --git a/core/assets/sprites/fallback/sprites.atlas b/core/assets/sprites/fallback/sprites.atlas index fd8aece5ae..46f844c44a 100644 --- a/core/assets/sprites/fallback/sprites.atlas +++ b/core/assets/sprites/fallback/sprites.atlas @@ -67,6 +67,13 @@ block-tetrative-reconstructor-full orig: 288, 288 offset: 0, 0 index: -1 +tetrative-reconstructor-icon-logic + rotate: false + xy: 1449, 1385 + size: 288, 288 + orig: 288, 288 + offset: 0, 0 + index: -1 cracks-9-0 rotate: false xy: 1449, 1095 @@ -248,531 +255,531 @@ size: 2048,2048 format: rgba8888 filter: nearest,nearest repeat: none -large-logic-display +interplanetary-accelerator rotate: false - xy: 1567, 102 - size: 192, 192 - orig: 192, 192 + xy: 1445, 1317 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +interplanetary-accelerator-team + rotate: false + xy: 1445, 1091 + size: 224, 224 + orig: 224, 224 offset: 0, 0 index: -1 exponential-reconstructor rotate: false - xy: 767, 1071 + xy: 993, 1317 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 exponential-reconstructor-top rotate: false - xy: 993, 1313 + xy: 993, 1091 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 factory-in-7 rotate: false - xy: 993, 1087 + xy: 1219, 1317 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 factory-out-7 rotate: false - xy: 1219, 1313 + xy: 1219, 1091 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 circle-shadow rotate: false - xy: 1620, 684 + xy: 1659, 709 size: 201, 201 orig: 201, 201 offset: 0, 0 index: -1 antumbra-outline rotate: false - xy: 719, 143 + xy: 941, 385 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-wreck0 rotate: false - xy: 941, 385 + xy: 941, 143 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-wreck1 rotate: false - xy: 937, 143 + xy: 993, 627 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-wreck2 rotate: false - xy: 1667, 1313 + xy: 1211, 627 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 block-exponential-reconstructor-full rotate: false - xy: 1823, 1797 + xy: 1823, 1801 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +exponential-reconstructor-icon-logic + rotate: false + xy: 1823, 1801 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +block-interplanetary-accelerator-full + rotate: false + xy: 1823, 1575 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +interplanetary-accelerator-icon-logic + rotate: false + xy: 1823, 1575 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 corvus-outline rotate: false - xy: 933, 1 + xy: 501, 41 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-wreck0 rotate: false - xy: 993, 945 + xy: 1159, 101 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-wreck1 rotate: false - xy: 985, 803 + xy: 717, 1 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-wreck2 rotate: false - xy: 969, 661 + xy: 933, 1 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 cracks-6-0 rotate: false - xy: 1367, 494 + xy: 1807, 107 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-1 rotate: false - xy: 1561, 490 + xy: 1809, 515 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-2 rotate: false - xy: 1755, 490 - size: 192, 192 - orig: 192, 192 - offset: 0, 0 - index: -1 -cracks-6-3 - rotate: false - xy: 1823, 693 - size: 192, 192 - orig: 192, 192 - offset: 0, 0 - index: -1 -cracks-6-4 - rotate: false - xy: 1373, 296 - size: 192, 192 - orig: 192, 192 - offset: 0, 0 - index: -1 -cracks-6-5 - rotate: false - xy: 1567, 296 - size: 192, 192 - orig: 192, 192 - offset: 0, 0 - index: -1 -cracks-6-6 - rotate: false - xy: 1761, 296 - size: 192, 192 - orig: 192, 192 - offset: 0, 0 - index: -1 -cracks-6-7 - rotate: false - xy: 1373, 102 + xy: 1809, 321 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-7-0 rotate: false - xy: 1823, 1571 + xy: 807, 1543 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-1 rotate: false - xy: 807, 1539 + xy: 1033, 1543 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-2 rotate: false - xy: 1033, 1539 + xy: 541, 1301 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-3 rotate: false - xy: 541, 1297 + xy: 541, 1075 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-4 rotate: false - xy: 541, 1071 + xy: 1259, 1543 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-5 rotate: false - xy: 1259, 1539 + xy: 1485, 1559 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-6 rotate: false - xy: 1485, 1555 + xy: 767, 1301 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-7 rotate: false - xy: 767, 1297 + xy: 767, 1075 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-8-0 rotate: false - xy: 565, 1765 + xy: 565, 1769 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 cracks-8-1 rotate: false - xy: 1, 559 + xy: 1, 563 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 cracks-8-2 rotate: false - xy: 283, 1297 + xy: 283, 1301 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 cracks-8-3 rotate: false - xy: 823, 1765 + xy: 823, 1769 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 cracks-8-4 rotate: false - xy: 1, 301 + xy: 1, 305 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 cracks-8-5 rotate: false - xy: 283, 1039 + xy: 283, 1043 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 cracks-8-6 rotate: false - xy: 1081, 1765 + xy: 1081, 1769 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 cracks-8-7 rotate: false - xy: 1, 43 + xy: 1, 47 size: 256, 256 orig: 256, 256 offset: 0, 0 index: -1 +interplanetary-accelerator-team-crux + rotate: false + xy: 541, 849 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +interplanetary-accelerator-team-sharded + rotate: false + xy: 767, 849 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 omura-wreck0 rotate: false - xy: 1, 1621 + xy: 1, 1625 size: 280, 400 orig: 280, 400 offset: 0, 0 index: -1 omura-wreck1 rotate: false - xy: 1, 1219 + xy: 1, 1223 size: 280, 400 orig: 280, 400 offset: 0, 0 index: -1 omura-wreck2 rotate: false - xy: 283, 1621 + xy: 283, 1625 size: 280, 400 orig: 280, 400 offset: 0, 0 index: -1 quad-outline rotate: false - xy: 541, 849 + xy: 1437, 869 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-wreck0 rotate: false - xy: 763, 849 + xy: 525, 627 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-wreck1 rotate: false - xy: 525, 627 + xy: 747, 627 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-wreck2 rotate: false - xy: 747, 627 + xy: 501, 405 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 reign-outline rotate: false - xy: 1661, 1171 + xy: 1377, 301 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 reign-wreck0 rotate: false - xy: 1441, 1033 + xy: 1375, 159 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 reign-wreck1 rotate: false - xy: 1657, 1029 + xy: 1375, 17 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 reign-wreck2 rotate: false - xy: 1219, 949 + xy: 1593, 443 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 sei-outline rotate: false - xy: 283, 797 + xy: 283, 801 size: 240, 240 orig: 240, 240 offset: 0, 0 index: -1 sei-wreck0 rotate: false - xy: 259, 555 + xy: 259, 559 size: 240, 240 orig: 240, 240 offset: 0, 0 index: -1 sei-wreck1 rotate: false - xy: 259, 313 + xy: 259, 317 size: 240, 240 orig: 240, 240 offset: 0, 0 index: -1 sei-wreck2 rotate: false - xy: 259, 71 + xy: 259, 75 size: 240, 240 orig: 240, 240 offset: 0, 0 index: -1 toxopid-cannon-outline rotate: false - xy: 1209, 727 + xy: 1671, 1115 size: 206, 220 orig: 206, 220 offset: 0, 0 index: -1 toxopid-leg-base rotate: false - xy: 283, 1555 + xy: 283, 1559 size: 270, 64 orig: 270, 64 offset: 0, 0 index: -1 unit-antumbra-full rotate: false - xy: 1155, 143 + xy: 1159, 385 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 unit-corvus-full rotate: false - xy: 1435, 891 + xy: 1593, 301 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 unit-omura-full rotate: false - xy: 1, 817 + xy: 1, 821 size: 280, 400 orig: 280, 400 offset: 0, 0 index: -1 unit-quad-full rotate: false - xy: 501, 405 + xy: 501, 183 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 unit-reign-full rotate: false - xy: 1651, 887 + xy: 1591, 159 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 unit-sei-full rotate: false - xy: 565, 1523 + xy: 565, 1527 size: 240, 240 orig: 240, 240 offset: 0, 0 index: -1 circle rotate: false - xy: 1417, 688 + xy: 1671, 912 size: 201, 201 orig: 201, 201 offset: 0, 0 index: -1 antumbra rotate: false - xy: 501, 163 + xy: 723, 385 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-cell rotate: false - xy: 723, 385 + xy: 723, 143 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 corvus rotate: false - xy: 501, 21 + xy: 1429, 727 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-cell rotate: false - xy: 717, 1 + xy: 1159, 243 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-weapon-heat rotate: false - xy: 1149, 1 + xy: 1429, 585 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 quad rotate: false - xy: 1219, 1091 + xy: 993, 869 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-cell rotate: false - xy: 1445, 1317 + xy: 1215, 869 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 reign rotate: false - xy: 1445, 1175 + xy: 1377, 443 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 sei rotate: false - xy: 1339, 1781 + xy: 1339, 1785 size: 240, 240 orig: 240, 240 offset: 0, 0 index: -1 sei-cell rotate: false - xy: 1581, 1781 + xy: 1581, 1785 size: 240, 240 orig: 240, 240 offset: 0, 0 index: -1 toxopid-cannon rotate: false - xy: 1159, 439 + xy: 1671, 1337 size: 206, 220 orig: 206, 220 offset: 0, 0 index: -1 -omura-cannon - rotate: false - xy: 1761, 17 - size: 192, 277 - orig: 192, 277 - offset: 0, 0 - index: -1 sprites3.png size: 2048,2048 @@ -781,2128 +788,2254 @@ filter: nearest,nearest repeat: none launch-pad rotate: false - xy: 813, 99 + xy: 945, 530 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +launch-pad-icon-logic + rotate: false + xy: 945, 530 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-large rotate: false - xy: 725, 1041 + xy: 1615, 898 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 launch-pad-light rotate: false - xy: 813, 1 + xy: 847, 432 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 force-projector rotate: false - xy: 1527, 1221 + xy: 651, 356 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +force-projector-icon-logic + rotate: false + xy: 651, 356 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 force-projector-top rotate: false - xy: 1625, 1193 + xy: 651, 258 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-dome rotate: false - xy: 1589, 1095 + xy: 1043, 216 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +overdrive-dome-icon-logic + rotate: false + xy: 1043, 216 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-dome-top rotate: false - xy: 1687, 1095 + xy: 1043, 118 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-loader rotate: false - xy: 1267, 529 + xy: 1571, 800 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-loader-icon-logic + rotate: false + xy: 1571, 800 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-unloader rotate: false - xy: 1231, 235 + xy: 1865, 710 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-unloader-icon-logic + rotate: false + xy: 1865, 710 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mass-driver-base rotate: false - xy: 1009, 5 + xy: 945, 236 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-conveyor rotate: false - xy: 1785, 1095 + xy: 1043, 20 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-conveyor-edge rotate: false - xy: 1589, 997 + xy: 1141, 506 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-conveyor-top rotate: false - xy: 1687, 997 + xy: 1239, 506 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-top rotate: false - xy: 1687, 997 + xy: 1239, 506 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router rotate: false - xy: 1785, 997 + xy: 1141, 408 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-edge rotate: false - xy: 1883, 1095 + xy: 1337, 506 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-over rotate: false - xy: 1883, 997 + xy: 1141, 310 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 blast-drill rotate: false - xy: 335, 1233 + xy: 1899, 1526 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rim rotate: false - xy: 335, 1103 + xy: 163, 541 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rotator rotate: false - xy: 465, 1233 + xy: 163, 411 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-top rotate: false - xy: 335, 973 + xy: 163, 281 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 laser-drill rotate: false - xy: 1491, 1025 + xy: 749, 244 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-rim rotate: false - xy: 813, 295 + xy: 749, 146 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-rotator rotate: false - xy: 911, 295 + xy: 749, 48 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-top rotate: false - xy: 813, 197 + xy: 847, 530 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor rotate: false - xy: 1205, 137 + xy: 945, 40 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-liquid rotate: false - xy: 1205, 39 + xy: 1043, 510 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-rotator rotate: false - xy: 1303, 137 + xy: 1043, 412 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-top rotate: false - xy: 1303, 39 + xy: 1043, 314 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 place-arrow rotate: false - xy: 1919, 1193 + xy: 1239, 408 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-bottom rotate: false - xy: 911, 197 + xy: 847, 334 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-liquid rotate: false - xy: 911, 99 + xy: 945, 432 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-top rotate: false - xy: 911, 1 + xy: 847, 236 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 1365, 847 + xy: 1435, 408 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +thermal-pump-icon-logic + rotate: false + xy: 1435, 408 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 hyper-processor rotate: false - xy: 1491, 1123 + xy: 749, 626 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +hyper-processor-icon-logic + rotate: false + xy: 749, 626 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +large-logic-display + rotate: false + xy: 389, 1852 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 +large-logic-display-icon-logic + rotate: false + xy: 389, 1852 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 logic-display rotate: false - xy: 1009, 201 + xy: 945, 334 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +logic-display-icon-logic + rotate: false + xy: 945, 334 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 battery-large rotate: false - xy: 1169, 921 + xy: 885, 824 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +battery-large-icon-logic + rotate: false + xy: 885, 824 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 battery-large-top rotate: false - xy: 1169, 823 + xy: 983, 824 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator rotate: false - xy: 1445, 1319 + xy: 553, 432 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +differential-generator-icon-logic + rotate: false + xy: 553, 432 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator-liquid rotate: false - xy: 1543, 1319 + xy: 553, 334 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator-top rotate: false - xy: 1641, 1389 + xy: 553, 236 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 impact-reactor rotate: false - xy: 595, 583 + xy: 1485, 1158 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-bottom rotate: false - xy: 595, 453 + xy: 1485, 1028 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-light rotate: false - xy: 585, 323 + xy: 1225, 898 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-0 rotate: false - xy: 585, 193 + xy: 1355, 898 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-1 rotate: false - xy: 585, 63 + xy: 1485, 898 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-2 rotate: false - xy: 725, 1301 + xy: 1615, 1158 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-3 rotate: false - xy: 725, 1171 + xy: 1615, 1028 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 solar-panel-large rotate: false - xy: 1883, 899 + xy: 1337, 310 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +solar-panel-large-icon-logic + rotate: false + xy: 1337, 310 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor rotate: false - xy: 1365, 749 + xy: 1239, 114 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +thorium-reactor-icon-logic + rotate: false + xy: 1239, 114 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-lights rotate: false - xy: 1365, 651 + xy: 1337, 212 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-top rotate: false - xy: 1365, 553 + xy: 1435, 310 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter rotate: false - xy: 1071, 725 + xy: 1847, 808 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +alloy-smelter-icon-logic + rotate: false + xy: 1847, 808 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-top rotate: false - xy: 1071, 627 + xy: 1945, 808 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-forge rotate: false - xy: 1267, 725 + xy: 1081, 706 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-forge-icon-logic + rotate: false + xy: 1081, 706 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 disassembler rotate: false - xy: 1739, 1389 + xy: 553, 138 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +disassembler-icon-logic + rotate: false + xy: 553, 138 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 disassembler-liquid rotate: false - xy: 1837, 1389 + xy: 553, 40 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 disassembler-spinner rotate: false - xy: 1641, 1291 + xy: 651, 650 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 multi-press rotate: false - xy: 1107, 137 + xy: 945, 138 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +multi-press-icon-logic + rotate: false + xy: 945, 138 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-crucible rotate: false - xy: 1687, 899 + xy: 1141, 114 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +silicon-crucible-icon-logic + rotate: false + xy: 1141, 114 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-crucible-top rotate: false - xy: 1785, 899 + xy: 1239, 212 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-foundation rotate: false - xy: 465, 583 + xy: 293, 151 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-foundation-team rotate: false - xy: 335, 453 + xy: 293, 21 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus rotate: false - xy: 1, 11 + xy: 1, 273 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-nucleus-team rotate: false - xy: 1421, 1887 + xy: 1, 111 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard rotate: false - xy: 1331, 1141 + xy: 1865, 612 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-shard-team rotate: false - xy: 1295, 1039 + xy: 885, 628 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 vault rotate: false - xy: 1463, 535 + xy: 1533, 310 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 vault-team rotate: false - xy: 1561, 801 + xy: 1435, 114 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-3 rotate: false - xy: 1169, 725 + xy: 885, 726 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-4 rotate: false - xy: 465, 1103 + xy: 163, 151 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 foreshadow-heat rotate: false - xy: 595, 713 + xy: 1355, 1028 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 meltdown-heat rotate: false - xy: 725, 781 + xy: 423, 411 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 ripple-heat rotate: false - xy: 1401, 39 + xy: 1141, 212 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 tsunami-liquid rotate: false - xy: 1463, 731 + xy: 1337, 114 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 tsunami-top rotate: false - xy: 1463, 633 + xy: 1435, 212 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 additive-reconstructor rotate: false - xy: 1099, 1019 + xy: 1949, 1298 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 additive-reconstructor-top rotate: false - xy: 1071, 921 + xy: 1949, 1102 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 air-factory rotate: false - xy: 1071, 823 + xy: 1949, 1004 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 factory-in-3 rotate: false - xy: 1739, 1291 + xy: 553, 650 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 factory-in-5 rotate: false - xy: 163, 170 + xy: 1747, 1722 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 factory-out-3 rotate: false - xy: 1837, 1291 + xy: 651, 552 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 factory-out-5 rotate: false - xy: 163, 8 + xy: 1251, 1560 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 factory-top-3 rotate: false - xy: 1429, 1221 + xy: 651, 454 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ground-factory rotate: false - xy: 1821, 1193 + xy: 651, 62 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 multiplicative-reconstructor rotate: false - xy: 389, 1745 + xy: 1413, 1560 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 multiplicative-reconstructor-top rotate: false - xy: 551, 1745 + xy: 1575, 1560 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 naval-factory rotate: false - xy: 1107, 39 + xy: 847, 40 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-gigantic rotate: false - xy: 985, 1313 + xy: 1853, 1396 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +scrap-wall-gigantic-icon-logic + rotate: false + xy: 1853, 1396 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-huge2 rotate: false - xy: 1491, 927 + xy: 1337, 408 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-huge3 rotate: false - xy: 1589, 899 + xy: 1533, 506 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thruster rotate: false - xy: 985, 1183 + xy: 335, 900 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 circle-end rotate: false - xy: 969, 852 + xy: 1745, 1133 size: 100, 199 orig: 100, 199 offset: 0, 0 index: -1 large-bomb rotate: false - xy: 1245, 1341 + xy: 433, 700 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 large-bomb-back rotate: false - xy: 855, 495 + xy: 579, 748 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 -laser-end +additive-reconstructor-icon-logic rotate: false - xy: 1945, 1543 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -minelaser-end - rotate: false - xy: 1951, 325 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -parallax-laser-end - rotate: false - xy: 1609, 303 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -arkyid-foot - rotate: false - xy: 1757, 319 - size: 70, 70 - orig: 70, 70 - offset: 0, 0 - index: -1 -arkyid-joint-base - rotate: false - xy: 1829, 319 - size: 70, 70 - orig: 70, 70 - offset: 0, 0 - index: -1 -arkyid-leg-base - rotate: false - xy: 725, 455 - size: 104, 64 - orig: 104, 64 - offset: 0, 0 - index: -1 -arkyid-outline - rotate: false - xy: 1067, 1443 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -arkyid-wreck0 - rotate: false - xy: 1197, 1443 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -arkyid-wreck1 - rotate: false - xy: 357, 1363 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -arkyid-wreck2 - rotate: false - xy: 487, 1363 - size: 128, 128 - orig: 128, 128 - offset: 0, 0 - index: -1 -artillery-mount-outline - rotate: false - xy: 1755, 247 - size: 70, 70 - orig: 70, 70 - offset: 0, 0 - index: -1 -atrax-outline - rotate: false - xy: 1519, 245 - size: 88, 64 - orig: 88, 64 - offset: 0, 0 - index: -1 -atrax-wreck0 - rotate: false - xy: 1499, 179 - size: 88, 64 - orig: 88, 64 - offset: 0, 0 - index: -1 -atrax-wreck1 - rotate: false - xy: 1499, 113 - size: 88, 64 - orig: 88, 64 - offset: 0, 0 - index: -1 -atrax-wreck2 - rotate: false - xy: 1499, 47 - size: 88, 64 - orig: 88, 64 - offset: 0, 0 - index: -1 -beam-weapon-outline - rotate: false - xy: 1827, 555 - size: 80, 80 - orig: 80, 80 + xy: 1949, 1200 + size: 96, 96 + orig: 96, 96 offset: 0, 0 index: -1 block-additive-reconstructor-full rotate: false - xy: 1169, 627 + xy: 1949, 1200 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +air-factory-icon-logic + rotate: false + xy: 1949, 906 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-air-factory-full rotate: false - xy: 1197, 1019 + xy: 1949, 906 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +arkyid-leg-base + rotate: false + xy: 1723, 1334 + size: 104, 64 + orig: 104, 64 + offset: 0, 0 + index: -1 +arkyid-outline + rotate: false + xy: 1333, 1288 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +arkyid-wreck0 + rotate: false + xy: 1463, 1288 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +arkyid-wreck1 + rotate: false + xy: 1593, 1288 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +arkyid-wreck2 + rotate: false + xy: 1909, 1656 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +atrax-outline + rotate: false + xy: 1631, 211 + size: 88, 64 + orig: 88, 64 + offset: 0, 0 + index: -1 +atrax-wreck0 + rotate: false + xy: 1631, 145 + size: 88, 64 + orig: 88, 64 + offset: 0, 0 + index: -1 +atrax-wreck1 + rotate: false + xy: 1631, 79 + size: 88, 64 + orig: 88, 64 + offset: 0, 0 + index: -1 +atrax-wreck2 + rotate: false + xy: 1621, 13 + size: 88, 64 + orig: 88, 64 + offset: 0, 0 + index: -1 +beam-weapon-outline + rotate: false + xy: 1963, 586 + size: 80, 80 + orig: 80, 80 + offset: 0, 0 + index: -1 +blast-drill-icon-logic + rotate: false + xy: 173, 671 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 block-blast-drill-full rotate: false - xy: 335, 843 + xy: 173, 671 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-core-foundation-full rotate: false - xy: 465, 973 + xy: 163, 21 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +core-foundation-icon-logic + rotate: false + xy: 163, 21 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-core-nucleus-full rotate: false - xy: 1, 335 + xy: 1, 597 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +core-nucleus-icon-logic + rotate: false + xy: 1, 597 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 block-core-shard-full rotate: false - xy: 1267, 921 + xy: 983, 726 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +core-shard-icon-logic + rotate: false + xy: 983, 726 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-cyclone-full rotate: false - xy: 1267, 823 + xy: 1081, 804 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cyclone-icon-logic + rotate: false + xy: 1081, 804 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-foreshadow-full rotate: false - xy: 335, 713 + xy: 303, 671 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +foreshadow-icon-logic + rotate: false + xy: 303, 671 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-fuse-full rotate: false - xy: 1267, 627 + xy: 1179, 800 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +fuse-icon-logic + rotate: false + xy: 1179, 800 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-ground-factory-full rotate: false - xy: 1035, 397 + xy: 1277, 800 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ground-factory-icon-logic + rotate: false + xy: 1277, 800 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-impact-reactor-full rotate: false - xy: 465, 843 + xy: 293, 541 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +impact-reactor-icon-logic + rotate: false + xy: 293, 541 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-laser-drill-full rotate: false - xy: 1071, 529 + xy: 1375, 800 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +laser-drill-icon-logic + rotate: false + xy: 1375, 800 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-liquid-tank-full rotate: false - xy: 1169, 529 + xy: 1473, 800 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +liquid-tank-icon-logic + rotate: false + xy: 1473, 800 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-mass-driver-full rotate: false - xy: 1133, 431 + xy: 1179, 702 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +mass-driver-icon-logic + rotate: false + xy: 1179, 702 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-meltdown-full rotate: false - xy: 335, 583 + xy: 293, 411 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +meltdown-icon-logic + rotate: false + xy: 293, 411 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-multiplicative-reconstructor-full rotate: false - xy: 1, 173 + xy: 1, 435 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +multiplicative-reconstructor-icon-logic + rotate: false + xy: 1, 435 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 block-naval-factory-full rotate: false - xy: 1231, 431 + xy: 1277, 702 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +naval-factory-icon-logic + rotate: false + xy: 1277, 702 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-oil-extractor-full rotate: false - xy: 1329, 431 + xy: 1375, 702 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +oil-extractor-icon-logic + rotate: false + xy: 1375, 702 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-payload-conveyor-full rotate: false - xy: 1133, 333 + xy: 1473, 702 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-conveyor-icon rotate: false - xy: 1133, 333 + xy: 1473, 702 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +payload-conveyor-icon-logic + rotate: false + xy: 1473, 702 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-payload-router-full rotate: false - xy: 1231, 333 + xy: 1571, 702 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-icon rotate: false - xy: 1231, 333 + xy: 1571, 702 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +payload-router-icon-logic + rotate: false + xy: 1571, 702 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-ripple-full rotate: false - xy: 1329, 333 + xy: 1669, 789 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ripple-icon-logic + rotate: false + xy: 1669, 789 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-scrap-wall-huge-full rotate: false - xy: 1035, 299 + xy: 1669, 691 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-huge1 rotate: false - xy: 1035, 299 + xy: 1669, 691 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +scrap-wall-huge-icon-logic + rotate: false + xy: 1669, 691 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-spectre-full rotate: false - xy: 465, 713 + xy: 293, 281 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +spectre-icon-logic + rotate: false + xy: 293, 281 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-tsunami-full rotate: false - xy: 1133, 235 + xy: 1767, 710 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +tsunami-icon-logic + rotate: false + xy: 1767, 710 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-vault-full rotate: false - xy: 1329, 235 + xy: 1767, 612 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +vault-icon-logic + rotate: false + xy: 1767, 612 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 bryde-outline rotate: false - xy: 675, 1573 + xy: 551, 1160 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-wreck0 rotate: false - xy: 817, 1573 + xy: 693, 1160 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-wreck1 rotate: false - xy: 959, 1573 + xy: 907, 1332 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-wreck2 rotate: false - xy: 1101, 1573 + xy: 1049, 1312 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 core-foundation-team-crux rotate: false - xy: 465, 453 + xy: 835, 1172 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-foundation-team-sharded rotate: false - xy: 325, 323 + xy: 965, 1182 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus-team-crux rotate: false - xy: 1583, 1887 + xy: 927, 1600 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-nucleus-team-sharded rotate: false - xy: 1745, 1887 + xy: 1099, 1742 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard-team-crux rotate: false - xy: 1393, 1043 + xy: 983, 628 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-shard-team-sharded rotate: false - xy: 1357, 1515 + xy: 1081, 608 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 corvus-foot rotate: false - xy: 1427, 289 + xy: 1631, 501 size: 90, 90 orig: 90, 90 offset: 0, 0 index: -1 -corvus-joint-base - rotate: false - xy: 1827, 247 - size: 70, 70 - orig: 70, 70 - offset: 0, 0 - index: -1 -toxopid-joint-base - rotate: false - xy: 1827, 247 - size: 70, 70 - orig: 70, 70 - offset: 0, 0 - index: -1 cracks-3-0 rotate: false - xy: 1455, 1515 + xy: 1179, 604 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-1 rotate: false - xy: 1553, 1515 + xy: 1277, 604 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-2 rotate: false - xy: 1651, 1487 + xy: 1375, 604 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-3 rotate: false - xy: 1749, 1487 + xy: 1473, 604 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-4 rotate: false - xy: 1847, 1487 + xy: 1571, 604 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-5 rotate: false - xy: 1347, 1417 + xy: 1669, 593 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-6 rotate: false - xy: 1347, 1319 + xy: 1767, 514 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-7 rotate: false - xy: 1445, 1417 + xy: 1865, 514 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-4-0 rotate: false - xy: 325, 193 + xy: 1095, 1162 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-1 rotate: false - xy: 455, 323 + xy: 965, 1052 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-2 rotate: false - xy: 325, 63 + xy: 835, 1042 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-3 rotate: false - xy: 455, 193 + xy: 1095, 1032 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-4 rotate: false - xy: 455, 63 + xy: 965, 922 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-5 rotate: false - xy: 595, 1233 + xy: 1095, 902 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-6 rotate: false - xy: 595, 1103 + xy: 1225, 1158 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-7 rotate: false - xy: 595, 973 + xy: 1225, 1028 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-5-0 rotate: false - xy: 195, 1466 + xy: 1271, 1884 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-1 rotate: false - xy: 173, 1304 + xy: 1433, 1884 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-2 rotate: false - xy: 173, 1142 + xy: 1595, 1884 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-3 rotate: false - xy: 173, 980 + xy: 1757, 1884 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-4 rotate: false - xy: 173, 818 + xy: 1089, 1580 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-5 rotate: false - xy: 173, 656 + xy: 1261, 1722 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-6 rotate: false - xy: 173, 494 + xy: 1423, 1722 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-7 rotate: false - xy: 163, 332 + xy: 1585, 1722 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 +cracks-6-3 + rotate: false + xy: 1, 1852 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 +cracks-6-4 + rotate: false + xy: 1, 1658 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 +cracks-6-5 + rotate: false + xy: 195, 1852 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 +cracks-6-6 + rotate: false + xy: 1, 1464 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 +cracks-6-7 + rotate: false + xy: 195, 1658 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 cyclone rotate: false - xy: 1543, 1417 + xy: 553, 530 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 foreshadow rotate: false - xy: 595, 843 + xy: 1355, 1158 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 fortress-leg rotate: false - xy: 325, 1 + xy: 1963, 524 size: 80, 60 orig: 80, 60 offset: 0, 0 index: -1 fortress-outline rotate: false - xy: 969, 606 + xy: 1745, 969 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-wreck0 rotate: false - xy: 1357, 1613 + xy: 1745, 887 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-wreck1 rotate: false - xy: 1459, 1613 + xy: 579, 850 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-wreck2 rotate: false - xy: 1561, 1613 + xy: 681, 850 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fuse rotate: false - xy: 1723, 1193 + xy: 651, 160 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -gamma-outline - rotate: false - xy: 1967, 105 - size: 68, 68 - orig: 68, 68 - offset: 0, 0 - index: -1 -gamma-wreck0 - rotate: false - xy: 1967, 35 - size: 68, 68 - orig: 68, 68 - offset: 0, 0 - index: -1 -horizon-outline - rotate: false - xy: 1837, 1687 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -horizon-wreck0 - rotate: false - xy: 1911, 1691 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -horizon-wreck1 - rotate: false - xy: 1867, 1613 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -horizon-wreck2 - rotate: false - xy: 1941, 1617 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -large-bullet-mount-outline - rotate: false - xy: 1679, 55 - size: 70, 97 - orig: 70, 97 - offset: 0, 0 - index: -1 large-laser-mount-outline rotate: false - xy: 715, 65 - size: 96, 192 - orig: 96, 192 - offset: 0, 0 - index: -1 -large-purple-mount-outline - rotate: false - xy: 1823, 148 - size: 70, 97 - orig: 70, 97 + xy: 749, 342 + size: 96, 140 + orig: 96, 140 offset: 0, 0 index: -1 mass-driver rotate: false - xy: 1009, 103 + xy: 847, 138 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mega-outline rotate: false - xy: 1245, 1239 + xy: 783, 724 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-wreck0 rotate: false - xy: 1229, 1137 + xy: 1847, 1294 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-wreck1 rotate: false - xy: 831, 393 + xy: 1847, 1192 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-wreck2 rotate: false - xy: 933, 393 + xy: 1847, 1090 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 meltdown rotate: false - xy: 725, 911 + xy: 423, 541 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 minke-outline rotate: false - xy: 1589, 142 + xy: 1813, 411 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-wreck0 rotate: false - xy: 1589, 39 + xy: 1903, 411 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-wreck1 rotate: false - xy: 1935, 1384 + xy: 1721, 306 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-wreck2 rotate: false - xy: 1757, 719 + xy: 1721, 203 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 omura-cannon-outline rotate: false - xy: 195, 1770 + xy: 389, 1573 size: 192, 277 orig: 192, 277 offset: 0, 0 index: -1 quasar-leg rotate: false - xy: 1937, 735 + xy: 1901, 247 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-outline rotate: false - xy: 1705, 481 + xy: 1896, 165 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-wreck0 rotate: false - xy: 1705, 399 + xy: 1893, 83 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-wreck1 rotate: false - xy: 1787, 473 + xy: 1885, 1 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-wreck2 rotate: false - xy: 1869, 473 + xy: 1967, 1 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 reign-leg rotate: false - xy: 357, 1493 + xy: 1061, 1454 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 reign-weapon-outline rotate: false - xy: 1742, 579 + xy: 1963, 668 size: 83, 138 orig: 83, 138 offset: 0, 0 index: -1 ripple rotate: false - xy: 1401, 137 + xy: 1435, 506 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 -risso-outline - rotate: false - xy: 1823, 68 - size: 70, 78 - orig: 70, 78 - offset: 0, 0 - index: -1 -risso-wreck0 - rotate: false - xy: 1895, 167 - size: 70, 78 - orig: 70, 78 - offset: 0, 0 - index: -1 -risso-wreck1 - rotate: false - xy: 1895, 87 - size: 70, 78 - orig: 70, 78 - offset: 0, 0 - index: -1 -risso-wreck2 - rotate: false - xy: 1895, 7 - size: 70, 78 - orig: 70, 78 - offset: 0, 0 - index: -1 scepter-leg rotate: false - xy: 855, 1183 + xy: 1723, 1400 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 vela-leg rotate: false - xy: 855, 1183 + xy: 1723, 1400 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scepter-outline rotate: false - xy: 195, 1628 + xy: 1, 1043 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-wreck0 rotate: false - xy: 389, 1907 + xy: 195, 1237 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-wreck1 rotate: false - xy: 1, 1207 + xy: 389, 1431 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-wreck2 rotate: false - xy: 561, 1907 + xy: 583, 1762 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 -sei-launcher-outline - rotate: false - xy: 1869, 391 - size: 80, 80 - orig: 80, 80 - offset: 0, 0 - index: -1 spectre rotate: false - xy: 855, 1053 + xy: 335, 1030 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spiroct-outline rotate: false - xy: 1757, 822 + xy: 1333, 37 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-wreck0 rotate: false - xy: 1561, 549 + xy: 1429, 37 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-wreck1 rotate: false - xy: 1853, 822 + xy: 1525, 37 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-wreck2 rotate: false - xy: 1427, 458 + xy: 335, 1160 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 toxopid-foot rotate: false - xy: 1523, 443 + xy: 1631, 409 size: 90, 90 orig: 90, 90 offset: 0, 0 index: -1 toxopid-leg rotate: false - xy: 1685, 1687 + xy: 1, 37 size: 150, 72 orig: 150, 72 offset: 0, 0 index: -1 toxopid-outline rotate: false - xy: 875, 1715 + xy: 173, 993 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-wreck0 rotate: false - xy: 1037, 1715 + xy: 173, 801 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-wreck1 rotate: false - xy: 1199, 1715 + xy: 389, 1239 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-wreck2 rotate: false - xy: 1361, 1695 + xy: 583, 1428 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 tsunami rotate: false - xy: 1463, 829 + xy: 1533, 408 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 unit-arkyid-full rotate: false - xy: 1115, 1313 + xy: 465, 1030 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 unit-atrax-full rotate: false - xy: 1935, 1318 + xy: 1721, 137 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 unit-bryde-full rotate: false - xy: 665, 1431 + xy: 1191, 1292 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 unit-fortress-full rotate: false - xy: 1115, 1117 + xy: 1847, 1008 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 -unit-horizon-full - rotate: false - xy: 1683, 325 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 unit-mega-full rotate: false - xy: 957, 495 + xy: 1847, 906 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 unit-minke-full rotate: false - xy: 1847, 719 + xy: 1811, 308 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 -unit-quasar-full - rotate: false - xy: 1951, 473 - size: 80, 80 - orig: 80, 80 - offset: 0, 0 - index: -1 -unit-risso-full - rotate: false - xy: 1967, 245 - size: 70, 78 - orig: 70, 78 - offset: 0, 0 - index: -1 unit-scepter-full rotate: false - xy: 1, 1065 + xy: 755, 1904 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 unit-spiroct-full rotate: false - xy: 1427, 381 + xy: 431, 1162 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 unit-toxopid-full rotate: false - xy: 1523, 1695 + xy: 745, 1428 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 unit-vela-full rotate: false - xy: 733, 1907 + xy: 1, 901 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 unit-zenith-full rotate: false - xy: 1243, 1601 + xy: 595, 1046 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 vault-team-crux rotate: false - xy: 1561, 703 + xy: 1533, 212 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 vault-team-sharded rotate: false - xy: 1659, 801 + xy: 1533, 114 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 vela-outline rotate: false - xy: 1, 781 + xy: 927, 1904 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-wreck0 rotate: false - xy: 1, 639 + xy: 755, 1620 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-wreck1 rotate: false - xy: 1249, 1907 + xy: 927, 1762 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-wreck2 rotate: false - xy: 1, 497 + xy: 1099, 1904 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 zenith-outline rotate: false - xy: 1115, 1199 + xy: 595, 932 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-wreck0 rotate: false - xy: 855, 825 + xy: 709, 932 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-wreck1 rotate: false - xy: 855, 711 + xy: 823, 928 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-wreck2 rotate: false - xy: 855, 597 + xy: 465, 802 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 arkyid rotate: false - xy: 807, 1443 + xy: 1919, 1916 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 arkyid-cell rotate: false - xy: 937, 1443 + xy: 1919, 1786 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 atrax rotate: false - xy: 1523, 377 + xy: 1631, 343 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 atrax-cell rotate: false - xy: 1519, 311 + xy: 1631, 277 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 bryde rotate: false - xy: 1907, 1907 + xy: 1369, 1418 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-cell rotate: false - xy: 1907, 1765 + xy: 1511, 1418 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 corvus-base rotate: false - xy: 1685, 1761 + xy: 907, 1474 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 fortress rotate: false - xy: 969, 770 + xy: 335, 818 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-cell rotate: false - xy: 969, 688 + xy: 1745, 1051 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 -gamma - rotate: false - xy: 1967, 175 - size: 68, 68 - orig: 68, 68 - offset: 0, 0 - index: -1 -horizon - rotate: false - xy: 1347, 1245 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 -horizon-cell - rotate: false - xy: 1951, 399 - size: 72, 72 - orig: 72, 72 - offset: 0, 0 - index: -1 mega rotate: false - xy: 1663, 1585 + xy: 681, 748 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-cell rotate: false - xy: 1765, 1585 + xy: 783, 826 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 minke rotate: false - xy: 1615, 446 + xy: 1723, 411 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-cell rotate: false - xy: 725, 651 + xy: 423, 281 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 -omura-cannon-heat - rotate: false - xy: 1, 1770 - size: 192, 277 - orig: 192, 277 - offset: 0, 0 - index: -1 quasar rotate: false - xy: 1909, 637 + xy: 1721, 55 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-base rotate: false - xy: 1909, 555 + xy: 1811, 86 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-cell rotate: false - xy: 1949, 817 + xy: 1803, 4 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 reign-base rotate: false - xy: 367, 1619 + xy: 551, 1302 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 reign-cell rotate: false - xy: 521, 1619 + xy: 705, 1302 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 -risso - rotate: false - xy: 1751, 68 - size: 70, 78 - orig: 70, 78 - offset: 0, 0 - index: -1 risso-cell rotate: false - xy: 1393, 945 + xy: 1239, 310 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scepter rotate: false - xy: 1, 1349 + xy: 583, 1904 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-base rotate: false - xy: 725, 521 + xy: 423, 151 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 vela-base rotate: false - xy: 725, 521 + xy: 423, 151 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scepter-cell rotate: false - xy: 855, 1313 + xy: 423, 21 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spiroct rotate: false - xy: 1561, 626 + xy: 1141, 37 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-cell rotate: false - xy: 1659, 724 + xy: 1237, 37 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 toxopid rotate: false - xy: 713, 1715 + xy: 1737, 1530 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-cell rotate: false - xy: 511, 1493 + xy: 1215, 1434 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 vela rotate: false - xy: 1, 923 + xy: 583, 1620 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-cell rotate: false - xy: 905, 1907 + xy: 755, 1762 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-weapon-heat rotate: false - xy: 1077, 1907 + xy: 1, 759 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 -artillery-mount - rotate: false - xy: 1683, 253 - size: 70, 70 - orig: 70, 70 - offset: 0, 0 - index: -1 beam-weapon rotate: false - xy: 1827, 637 + xy: 1901, 329 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 -large-bullet-mount - rotate: false - xy: 1679, 154 - size: 70, 97 - orig: 70, 97 - offset: 0, 0 - index: -1 large-laser-mount rotate: false - xy: 715, 259 - size: 96, 192 - orig: 96, 192 + xy: 749, 484 + size: 96, 140 + orig: 96, 140 offset: 0, 0 index: -1 -large-purple-mount +omura-cannon rotate: false - xy: 1751, 148 - size: 70, 97 - orig: 70, 97 + xy: 1, 1185 + size: 192, 277 + orig: 192, 277 offset: 0, 0 index: -1 omura-cannon-heat rotate: false - xy: 1, 1491 + xy: 195, 1379 size: 192, 277 orig: 192, 277 offset: 0, 0 index: -1 reign-weapon rotate: false - xy: 1657, 563 + xy: 1811, 168 size: 83, 138 orig: 83, 138 offset: 0, 0 index: -1 -sei-launcher - rotate: false - xy: 1787, 391 - size: 80, 80 - orig: 80, 80 - offset: 0, 0 - index: -1 zenith rotate: false - xy: 855, 939 + xy: 465, 916 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-cell rotate: false - xy: 985, 1069 + xy: 709, 1046 size: 112, 112 orig: 112, 112 offset: 0, 0 @@ -2915,4655 +3048,5978 @@ filter: nearest,nearest repeat: none launchpod rotate: false - xy: 1201, 891 + xy: 73, 135 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector rotate: false - xy: 339, 825 + xy: 141, 481 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +mend-projector-icon-logic + rotate: false + xy: 141, 481 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 405, 825 + xy: 207, 745 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender rotate: false - xy: 785, 95 + xy: 2015, 553 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mender-icon-logic + rotate: false + xy: 2015, 553 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-top rotate: false - xy: 785, 61 + xy: 1981, 519 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 471, 825 + xy: 207, 679 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +overdrive-projector-icon-logic + rotate: false + xy: 207, 679 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 537, 825 + xy: 207, 613 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shock-mine rotate: false - xy: 819, 163 + xy: 1839, 281 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-arrow rotate: false - xy: 425, 197 + xy: 1573, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 445, 61 + xy: 1607, 631 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +bridge-conveyor-icon-logic + rotate: false + xy: 1607, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 445, 27 + xy: 1641, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 462, 333 + xy: 1675, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 center rotate: false - xy: 462, 299 + xy: 1573, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-0 rotate: false - xy: 133, 495 + xy: 1403, 671 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-icon-logic + rotate: false + xy: 1403, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-armored-conveyor-full rotate: false - xy: 133, 495 + xy: 1403, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-1 rotate: false - xy: 133, 461 + xy: 1403, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-2 rotate: false - xy: 133, 427 + xy: 1437, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-3 rotate: false - xy: 167, 367 + xy: 1403, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-0 rotate: false - xy: 190, 333 + xy: 1437, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-1 rotate: false - xy: 190, 299 + xy: 1403, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-2 rotate: false - xy: 187, 265 + xy: 1437, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-3 rotate: false - xy: 187, 231 + xy: 1403, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-0 rotate: false - xy: 187, 197 + xy: 1437, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-1 rotate: false - xy: 201, 367 + xy: 1437, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-2 rotate: false - xy: 224, 333 + xy: 1403, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-3 rotate: false - xy: 224, 299 + xy: 1437, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-0 rotate: false - xy: 221, 265 + xy: 1399, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-1 rotate: false - xy: 221, 231 + xy: 1399, 433 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-2 rotate: false - xy: 221, 197 + xy: 1433, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-3 rotate: false - xy: 235, 367 + xy: 1399, 399 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-0 rotate: false - xy: 258, 333 + xy: 1433, 433 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-1 rotate: false - xy: 258, 299 + xy: 1433, 399 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-2 rotate: false - xy: 255, 265 + xy: 1399, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-3 rotate: false - xy: 255, 231 + xy: 1433, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 493, 231 + xy: 1709, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 493, 197 + xy: 1743, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 507, 367 + xy: 1777, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 513, 163 + xy: 1641, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 513, 129 + xy: 1675, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 513, 95 + xy: 1709, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 513, 61 + xy: 1743, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 513, 27 + xy: 1777, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 530, 333 + xy: 1811, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 530, 299 + xy: 1675, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 527, 265 + xy: 1709, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 527, 231 + xy: 1743, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 527, 197 + xy: 1777, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 541, 367 + xy: 1811, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 547, 163 + xy: 1709, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 547, 129 + xy: 1743, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 547, 95 + xy: 1777, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 547, 61 + xy: 1811, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 547, 27 + xy: 1743, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor rotate: false - xy: 847, 469 + xy: 1943, 451 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plastanium-conveyor-icon-logic + rotate: false + xy: 1943, 451 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-0 rotate: false - xy: 881, 463 + xy: 1909, 383 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-1 rotate: false - xy: 915, 463 + xy: 1943, 417 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-2 rotate: false - xy: 813, 447 + xy: 1977, 451 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-edge rotate: false - xy: 847, 435 + xy: 1943, 383 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-stack rotate: false - xy: 881, 429 + xy: 1977, 417 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 938, 293 + xy: 2011, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 938, 259 + xy: 2009, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 935, 225 + xy: 1371, 265 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 935, 191 + xy: 1405, 265 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 955, 157 + xy: 2009, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 955, 123 + xy: 1439, 263 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 955, 89 + xy: 1473, 263 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 955, 55 + xy: 873, 337 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 955, 21 + xy: 907, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 171, 709 + xy: 941, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 171, 675 + xy: 975, 333 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 171, 641 + xy: 1009, 323 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 171, 607 + xy: 1043, 323 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 171, 573 + xy: 1077, 313 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 205, 725 + xy: 331, 217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 205, 691 + xy: 365, 217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 205, 657 + xy: 399, 217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 205, 623 + xy: 433, 217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 205, 589 + xy: 329, 183 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cross rotate: false - xy: 581, 61 + xy: 1743, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 distributor rotate: false - xy: 541, 891 + xy: 75, 795 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +distributor-icon-logic + rotate: false + xy: 75, 795 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 inverted-sorter rotate: false - xy: 615, 95 + xy: 1705, 461 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +inverted-sorter-icon-logic + rotate: false + xy: 1705, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction rotate: false - xy: 717, 27 + xy: 1845, 553 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +junction-icon-logic + rotate: false + xy: 1845, 553 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 847, 571 + xy: 1981, 485 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +overflow-gate-icon-logic + rotate: false + xy: 1981, 485 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 881, 531 + xy: 1841, 383 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor-icon-logic + rotate: false + xy: 1841, 383 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 915, 531 + xy: 1875, 417 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 881, 497 + xy: 1909, 451 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 915, 497 + xy: 1875, 383 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router rotate: false - xy: 836, 265 + xy: 1875, 315 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +router-icon-logic + rotate: false + xy: 1875, 315 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter rotate: false - xy: 819, 95 + xy: 1941, 281 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sorter-icon-logic + rotate: false + xy: 1941, 281 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 underflow-gate rotate: false - xy: 273, 667 + xy: 363, 183 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +underflow-gate-icon-logic + rotate: false + xy: 363, 183 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 drill-top rotate: false - xy: 739, 891 + xy: 75, 597 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-liquid rotate: false - xy: 739, 891 + xy: 75, 597 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill rotate: false - xy: 1861, 891 + xy: 141, 745 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 1927, 891 + xy: 141, 679 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 207, 825 + xy: 141, 613 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill rotate: false - xy: 1131, 825 + xy: 273, 555 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 1197, 825 + xy: 339, 621 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 1263, 825 + xy: 405, 687 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor rotate: false - xy: 1923, 759 + xy: 603, 623 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 67, 697 + xy: 603, 557 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 67, 631 + xy: 603, 491 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 67, 565 + xy: 603, 425 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border rotate: false - xy: 241, 27 + xy: 1471, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-middle rotate: false - xy: 323, 197 + xy: 1499, 297 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-select rotate: false - xy: 391, 265 + xy: 1957, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 479, 95 + xy: 1675, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 439, 367 + xy: 1607, 665 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +bridge-conduit-icon-logic + rotate: false + xy: 1607, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 445, 163 + xy: 1641, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 445, 163 + xy: 1641, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 445, 129 + xy: 1539, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 445, 95 + xy: 1573, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 459, 197 + xy: 1709, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 473, 367 + xy: 1573, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 479, 163 + xy: 1607, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 479, 129 + xy: 1641, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 479, 129 + xy: 1641, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 479, 129 + xy: 1641, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 479, 61 + xy: 1709, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 479, 27 + xy: 1743, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 496, 333 + xy: 1607, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 496, 299 + xy: 1641, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 496, 299 + xy: 1641, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 493, 265 + xy: 1675, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 731, 265 + xy: 1947, 655 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-junction-icon-logic + rotate: false + xy: 1947, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate rotate: false - xy: 745, 367 + xy: 1845, 519 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate-top rotate: false - xy: 751, 163 + xy: 1879, 553 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 751, 129 + xy: 1913, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 751, 95 + xy: 1947, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 751, 61 + xy: 1981, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 779, 367 + xy: 1947, 553 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mechanical-pump-icon-logic + rotate: false + xy: 1947, 553 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump-liquid rotate: false - xy: 813, 617 + xy: 1981, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-liquid rotate: false - xy: 813, 617 + xy: 1981, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-pump-liquid rotate: false - xy: 813, 617 + xy: 1981, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 813, 549 + xy: 2015, 485 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conduit-icon-logic + rotate: false + xy: 2015, 485 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 847, 537 + xy: 1841, 451 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 813, 515 + xy: 1841, 417 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 847, 503 + xy: 1875, 451 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-cap rotate: false - xy: 813, 413 + xy: 1977, 383 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-0 rotate: false - xy: 847, 401 + xy: 2011, 417 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-1 rotate: false - xy: 813, 379 + xy: 2011, 383 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-2 rotate: false - xy: 881, 395 + xy: 1841, 349 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-3 rotate: false - xy: 915, 395 + xy: 1875, 349 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-4 rotate: false - xy: 847, 367 + xy: 1909, 349 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 847, 333 + xy: 1569, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 881, 327 + xy: 1603, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 915, 327 + xy: 1637, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 802, 311 + xy: 1671, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 1659, 825 + xy: 405, 489 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +rotary-pump-icon-logic + rotate: false + xy: 405, 489 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 logic-processor rotate: false - xy: 1267, 891 + xy: 73, 69 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +logic-processor-icon-logic + rotate: false + xy: 73, 69 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 memory-bank rotate: false - xy: 273, 825 + xy: 141, 547 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +memory-bank-icon-logic + rotate: false + xy: 141, 547 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 memory-cell rotate: false - xy: 785, 129 + xy: 1981, 553 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +memory-cell-icon-logic + rotate: false + xy: 1981, 553 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message rotate: false - xy: 785, 27 + xy: 2015, 519 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +message-icon-logic + rotate: false + xy: 2015, 519 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 micro-processor rotate: false - xy: 813, 583 + xy: 1845, 485 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +micro-processor-icon-logic + rotate: false + xy: 1845, 485 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 switch rotate: false - xy: 921, 89 + xy: 1975, 247 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +switch-icon-logic + rotate: false + xy: 1975, 247 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 switch-on rotate: false - xy: 921, 55 + xy: 1343, 299 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery rotate: false - xy: 255, 197 + xy: 1431, 331 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +battery-icon-logic + rotate: false + xy: 1431, 331 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-top rotate: false - xy: 241, 163 + xy: 1397, 306 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 459, 265 + xy: 1641, 631 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +combustion-generator-icon-logic + rotate: false + xy: 1641, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 459, 231 + xy: 1675, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 diode rotate: false - xy: 581, 27 + xy: 1535, 461 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +diode-icon-logic + rotate: false + xy: 1535, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 diode-arrow rotate: false - xy: 598, 333 + xy: 1535, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator rotate: false - xy: 609, 367 + xy: 1671, 461 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +illuminator-icon-logic + rotate: false + xy: 1671, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-top rotate: false - xy: 615, 163 + xy: 1637, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node rotate: false - xy: 881, 361 + xy: 1977, 349 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-node-icon-logic + rotate: false + xy: 1977, 349 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 1329, 825 + xy: 273, 489 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +power-node-large-icon-logic + rotate: false + xy: 273, 489 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source rotate: false - xy: 915, 361 + xy: 2011, 349 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-source-icon-logic + rotate: false + xy: 2011, 349 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void rotate: false - xy: 813, 345 + xy: 1535, 332 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-void-icon-logic + rotate: false + xy: 1535, 332 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 1725, 825 + xy: 141, 415 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +rtg-generator-icon-logic + rotate: false + xy: 141, 415 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 833, 231 + xy: 1909, 315 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 819, 129 + xy: 1907, 281 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +solar-panel-icon-logic + rotate: false + xy: 1907, 281 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 steam-generator rotate: false - xy: 1131, 759 + xy: 471, 621 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-cap rotate: false - xy: 1197, 759 + xy: 471, 555 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-top rotate: false - xy: 1263, 759 + xy: 471, 489 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-turbine0 rotate: false - xy: 1329, 759 + xy: 471, 423 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-turbine1 rotate: false - xy: 1395, 759 + xy: 537, 755 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-tower rotate: false - xy: 1461, 759 + xy: 537, 689 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +surge-tower-icon-logic + rotate: false + xy: 537, 689 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 1659, 759 + xy: 537, 491 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +thermal-generator-icon-logic + rotate: false + xy: 537, 491 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 blast-mixer rotate: false - xy: 1, 697 + xy: 815, 879 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +blast-mixer-icon-logic + rotate: false + xy: 815, 879 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 coal-centrifuge rotate: false - xy: 1, 103 + xy: 1343, 823 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +coal-centrifuge-icon-logic + rotate: false + xy: 1343, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluid-mixer-bottom rotate: false - xy: 1927, 957 + xy: 223, 885 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluid-mixer-liquid rotate: false - xy: 211, 891 + xy: 289, 885 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluid-mixer-top rotate: false - xy: 277, 891 + xy: 355, 885 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator rotate: false - xy: 343, 891 + xy: 421, 885 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 409, 891 + xy: 487, 887 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 475, 891 + xy: 553, 887 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 graphite-press rotate: false - xy: 871, 891 + xy: 75, 465 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +graphite-press-icon-logic + rotate: false + xy: 75, 465 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 incinerator rotate: false - xy: 615, 129 + xy: 1671, 427 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +incinerator-icon-logic + rotate: false + xy: 1671, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source rotate: false - xy: 700, 333 + xy: 1845, 689 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-source-icon-logic + rotate: false + xy: 1845, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void rotate: false - xy: 717, 61 + xy: 1947, 689 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-void-icon-logic + rotate: false + xy: 1947, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln rotate: false - xy: 937, 891 + xy: 73, 399 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +kiln-icon-logic + rotate: false + xy: 73, 399 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 1003, 891 + xy: 73, 333 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 1003, 891 + xy: 73, 333 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 liquid-source rotate: false - xy: 768, 299 + xy: 1913, 553 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-source-icon-logic + rotate: false + xy: 1913, 553 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-void rotate: false - xy: 765, 265 + xy: 1947, 587 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-void-icon-logic + rotate: false + xy: 1947, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter rotate: false - xy: 785, 163 + xy: 1947, 519 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +melter-icon-logic + rotate: false + xy: 1947, 519 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-weaver rotate: false - xy: 735, 825 + xy: 273, 753 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 801, 825 + xy: 339, 753 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 867, 825 + xy: 273, 687 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 933, 825 + xy: 405, 753 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +plastanium-compressor-icon-logic + rotate: false + xy: 405, 753 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 999, 825 + xy: 273, 621 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 802, 277 + xy: 1705, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 799, 243 + xy: 1739, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 1461, 825 + xy: 405, 621 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +pyratite-mixer-icon-logic + rotate: false + xy: 405, 621 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator rotate: false - xy: 471, 759 + xy: 205, 283 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +separator-icon-logic + rotate: false + xy: 205, 283 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 537, 759 + xy: 139, 151 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-spinner rotate: false - xy: 603, 759 + xy: 205, 217 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 669, 759 + xy: 139, 85 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +silicon-smelter-icon-logic + rotate: false + xy: 139, 85 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press rotate: false - xy: 735, 759 + xy: 205, 151 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame0 rotate: false - xy: 801, 759 + xy: 139, 19 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame1 rotate: false - xy: 867, 759 + xy: 205, 85 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame2 rotate: false - xy: 933, 759 + xy: 205, 19 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-liquid rotate: false - xy: 999, 759 + xy: 471, 753 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-top rotate: false - xy: 1065, 759 + xy: 471, 687 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +basalt-boulder1 + rotate: false + xy: 727, 646 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +basalt-boulder2 + rotate: false + xy: 727, 596 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 boulder1 rotate: false - xy: 1527, 709 + xy: 877, 771 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 boulder2 rotate: false - xy: 1577, 709 + xy: 777, 671 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dacite-boulder1 rotate: false - xy: 697, 651 + xy: 827, 571 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dacite-boulder2 rotate: false - xy: 747, 651 + xy: 877, 621 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-boulder1 rotate: false - xy: 870, 293 + xy: 1943, 315 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-boulder2 rotate: false - xy: 904, 293 + xy: 1977, 315 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder1 rotate: false - xy: 867, 191 + xy: 1771, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder2 rotate: false - xy: 901, 191 + xy: 1805, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-boulder1 rotate: false - xy: 1547, 509 + xy: 483, 255 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-boulder2 rotate: false - xy: 1597, 509 + xy: 1195, 771 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-cluster1 rotate: false - xy: 1317, 509 + xy: 1361, 597 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster2 rotate: false - xy: 1359, 509 + xy: 1361, 555 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster3 rotate: false - xy: 1401, 509 + xy: 1361, 513 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 container rotate: false - xy: 1069, 957 + xy: 1673, 833 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container-team rotate: false - xy: 1135, 957 + xy: 1739, 833 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unloader rotate: false - xy: 239, 599 + xy: 329, 115 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +unloader-icon-logic + rotate: false + xy: 329, 115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-center rotate: false - xy: 273, 633 + xy: 363, 149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc-heat rotate: false - xy: 133, 529 + xy: 1447, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-1 rotate: false - xy: 241, 129 + xy: 1481, 705 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-2 rotate: false - xy: 71, 767 + xy: 881, 879 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 hail-heat rotate: false - xy: 1945, 407 + xy: 1337, 723 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 1135, 891 + xy: 73, 201 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-heat rotate: false - xy: 1857, 825 + xy: 273, 423 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-heat rotate: false - xy: 904, 259 + xy: 1601, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 67, 433 + xy: 339, 357 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-top rotate: false - xy: 67, 367 + xy: 405, 357 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 command-center rotate: false - xy: 871, 957 + xy: 1409, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 command-center-team rotate: false - xy: 1, 37 + xy: 1475, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rally-point rotate: false - xy: 1527, 825 + xy: 339, 489 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-base rotate: false - xy: 836, 299 + xy: 1841, 315 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 resupply-point rotate: false - xy: 1593, 825 + xy: 405, 555 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +resupply-point-icon-logic + rotate: false + xy: 405, 555 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 564, 333 + xy: 1811, 597 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +copper-wall-icon-logic + rotate: false + xy: 1811, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large rotate: false - xy: 1333, 957 + xy: 1937, 823 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +copper-wall-large-icon-logic + rotate: false + xy: 1937, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door rotate: false - xy: 598, 299 + xy: 1569, 461 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +door-icon-logic + rotate: false + xy: 1569, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large rotate: false - xy: 607, 891 + xy: 75, 729 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +door-large-icon-logic + rotate: false + xy: 75, 729 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 673, 891 + xy: 75, 663 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-open rotate: false - xy: 595, 265 + xy: 1535, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 813, 481 + xy: 1909, 417 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-wall-icon-logic + rotate: false + xy: 1909, 417 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 669, 825 + xy: 207, 481 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +phase-wall-large-icon-logic + rotate: false + xy: 207, 481 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-wall rotate: false - xy: 915, 429 + xy: 2011, 451 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plastanium-wall-icon-logic + rotate: false + xy: 2011, 451 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-large rotate: false - xy: 1065, 825 + xy: 339, 687 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +plastanium-wall-large-icon-logic + rotate: false + xy: 339, 687 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large1 rotate: false - xy: 141, 771 + xy: 405, 423 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large2 rotate: false - xy: 207, 759 + xy: 139, 349 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large3 rotate: false - xy: 273, 759 + xy: 139, 283 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large4 rotate: false - xy: 339, 759 + xy: 205, 349 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall2 rotate: false - xy: 867, 225 + xy: 1635, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall3 rotate: false - xy: 901, 225 + xy: 1669, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall4 rotate: false - xy: 833, 197 + xy: 1703, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall5 rotate: false - xy: 833, 197 + xy: 1703, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 921, 123 + xy: 1941, 247 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-wall-icon-logic + rotate: false + xy: 1941, 247 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 1527, 759 + xy: 537, 623 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +surge-wall-large-icon-logic + rotate: false + xy: 537, 623 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 921, 21 + xy: 1337, 265 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thorium-wall-icon-logic + rotate: false + xy: 1337, 265 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 1725, 759 + xy: 537, 425 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +thorium-wall-large-icon-logic + rotate: false + xy: 537, 425 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titanium-wall rotate: false - xy: 239, 667 + xy: 329, 149 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-wall-icon-logic + rotate: false + xy: 329, 149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large rotate: false - xy: 1791, 759 + xy: 603, 755 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +titanium-wall-large-icon-logic + rotate: false + xy: 603, 755 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 bullet rotate: false - xy: 1993, 969 + xy: 1141, 767 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 821, 705 + xy: 669, 410 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 casing rotate: false - xy: 1987, 473 + xy: 1403, 705 size: 8, 16 orig: 8, 16 offset: 0, 0 index: -1 circle-mid rotate: false - xy: 975, 244 + xy: 2037, 770 size: 1, 199 orig: 1, 199 offset: 0, 0 index: -1 error rotate: false - xy: 1147, 659 + xy: 723, 396 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 laser rotate: false - xy: 1977, 709 + xy: 2043, 237 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 +laser-end + rotate: false + xy: 313, 951 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 +launch-arrow + rotate: false + xy: 1879, 587 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +transfer-arrow + rotate: false + xy: 1879, 587 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 minelaser rotate: false - xy: 1983, 709 + xy: 2043, 187 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 +minelaser-end + rotate: false + xy: 1, 565 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 missile rotate: false - xy: 133, 677 + xy: 1361, 447 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 missile-back rotate: false - xy: 133, 639 + xy: 1361, 409 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 parallax-laser rotate: false - xy: 975, 445 + xy: 1199, 829 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 +parallax-laser-end + rotate: false + xy: 387, 951 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 particle rotate: false - xy: 1275, 509 + xy: 1361, 639 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 scale_marker rotate: false - xy: 1191, 603 + xy: 1077, 769 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 shell rotate: false - xy: 133, 601 + xy: 1361, 371 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shell-back rotate: false - xy: 133, 563 + xy: 1359, 333 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 transfer rotate: false - xy: 981, 449 + xy: 1205, 829 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 -transfer-arrow - rotate: false - xy: 239, 633 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 white rotate: false - xy: 1197, 704 + xy: 1181, 950 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 +alpha-icon-logic + rotate: false + xy: 1379, 723 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 alpha-outline rotate: false - xy: 1027, 709 + xy: 603, 325 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-wreck0 rotate: false - xy: 1077, 709 + xy: 603, 275 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-wreck1 rotate: false - xy: 1127, 709 + xy: 553, 258 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-wreck2 rotate: false - xy: 1177, 709 + xy: 603, 225 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +antumbra-icon-logic + rotate: false + xy: 638, 391 + size: 28, 32 + orig: 28, 32 + offset: 0, 0 + index: -1 arc rotate: false - xy: 133, 367 + xy: 1413, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +arc-icon-logic + rotate: false + xy: 1413, 705 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-arc-full + rotate: false + xy: 1413, 705 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +arkyid-foot + rotate: false + xy: 461, 953 + size: 70, 70 + orig: 70, 70 + offset: 0, 0 + index: -1 +arkyid-icon-logic + rotate: false + xy: 1447, 705 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +arkyid-joint-base + rotate: false + xy: 1, 419 + size: 70, 70 + orig: 70, 70 + offset: 0, 0 + index: -1 arkyid-leg rotate: false - xy: 67, 132 + xy: 619, 895 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 +artillery-mount-outline + rotate: false + xy: 1, 347 + size: 70, 70 + orig: 70, 70 + offset: 0, 0 + index: -1 artillery-outline rotate: false - xy: 1277, 701 + xy: 727, 696 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 atrax-foot rotate: false - xy: 1945, 449 + xy: 1495, 781 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 +atrax-icon-logic + rotate: false + xy: 1397, 340 + size: 32, 23 + orig: 32, 23 + offset: 0, 0 + index: -1 atrax-joint rotate: false - xy: 175, 743 + xy: 2021, 997 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 atrax-leg rotate: false - xy: 137, 743 + xy: 927, 793 size: 36, 26 orig: 36, 26 offset: 0, 0 index: -1 atrax-leg-base rotate: false - xy: 133, 715 + xy: 1361, 485 size: 36, 26 orig: 36, 26 offset: 0, 0 index: -1 +beta-icon-logic + rotate: false + xy: 1431, 299 + size: 32, 30 + orig: 32, 30 + offset: 0, 0 + index: -1 beta-outline rotate: false - xy: 67, 20 + xy: 271, 189 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-wreck0 rotate: false - xy: 1989, 835 + xy: 619, 839 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-wreck1 rotate: false - xy: 1989, 779 + xy: 677, 870 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-wreck2 rotate: false - xy: 1989, 723 + xy: 391, 301 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 -block-arc-full +blast-compound-icon-logic rotate: false - xy: 241, 95 + xy: 1481, 739 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +item-blast-compound-medium + rotate: false + xy: 1481, 739 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-basalt-boulder-full + rotate: false + xy: 727, 496 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 block-basalt-full rotate: false - xy: 241, 61 + xy: 1471, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-boulder-full rotate: false - xy: 1377, 709 + xy: 777, 771 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-char-full rotate: false - xy: 269, 367 + xy: 1471, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-command-center-full rotate: false - xy: 141, 837 + xy: 947, 879 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +command-center-icon-logic + rotate: false + xy: 947, 879 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-conduit-full rotate: false - xy: 275, 163 + xy: 1471, 569 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +conduit-icon-logic + rotate: false + xy: 1471, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-container-full rotate: false - xy: 277, 957 + xy: 1013, 879 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +container-icon-logic + rotate: false + xy: 1013, 879 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-conveyor-full rotate: false - xy: 275, 129 + xy: 1471, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 275, 129 + xy: 1471, 535 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +conveyor-icon-logic + rotate: false + xy: 1471, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-craters-full rotate: false - xy: 275, 95 + xy: 1471, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cryofluid-mixer-full rotate: false - xy: 1, 631 + xy: 1079, 879 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cryofluid-mixer-icon-logic + rotate: false + xy: 1079, 879 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-cultivator-full rotate: false - xy: 343, 957 + xy: 1145, 879 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cultivator-icon-logic + rotate: false + xy: 1145, 879 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-dacite-boulder-full rotate: false - xy: 1427, 709 + xy: 827, 771 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-dacite-full rotate: false - xy: 275, 61 + xy: 1467, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dacite-wall-full rotate: false - xy: 275, 27 + xy: 1467, 433 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-metal-full rotate: false - xy: 292, 333 + xy: 1467, 399 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-full rotate: false - xy: 292, 299 + xy: 1467, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dirt-full rotate: false - xy: 289, 265 + xy: 1465, 331 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dirt-wall-full rotate: false - xy: 289, 231 + xy: 1465, 297 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dune-wall-full rotate: false - xy: 289, 197 + xy: 1505, 671 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-duo-full rotate: false - xy: 303, 367 + xy: 1505, 637 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +duo-icon-logic + rotate: false + xy: 1505, 637 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-grass-full rotate: false - xy: 309, 163 + xy: 1505, 603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hail-full rotate: false - xy: 309, 129 + xy: 1505, 569 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hail-icon-logic + rotate: false + xy: 1505, 569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hotrock-full rotate: false - xy: 309, 95 + xy: 1505, 535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-full rotate: false - xy: 309, 61 + xy: 1505, 501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-snow-full rotate: false - xy: 309, 27 + xy: 1501, 467 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-wall-full rotate: false - xy: 326, 333 + xy: 1501, 433 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-lancer-full rotate: false - xy: 1, 565 + xy: 1211, 889 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +lancer-icon-logic + rotate: false + xy: 1211, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-liquid-router-full rotate: false - xy: 326, 299 + xy: 1501, 399 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-icon-logic + rotate: false + xy: 1501, 399 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-magmarock-full rotate: false - xy: 323, 265 + xy: 1501, 365 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mechanical-drill-full rotate: false - xy: 409, 957 + xy: 1277, 889 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +mechanical-drill-icon-logic + rotate: false + xy: 1277, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-metal-floor-damaged-full rotate: false - xy: 323, 231 + xy: 1499, 331 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-moss-full rotate: false - xy: 337, 367 + xy: 2003, 931 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mud-full rotate: false - xy: 343, 163 + xy: 2003, 897 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-coal-full rotate: false - xy: 343, 129 + xy: 2003, 863 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-copper-full rotate: false - xy: 343, 95 + xy: 2003, 829 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-lead-full rotate: false - xy: 343, 61 + xy: 2003, 795 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-scrap-full rotate: false - xy: 343, 27 + xy: 2003, 761 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-thorium-full rotate: false - xy: 360, 333 + xy: 1515, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-titanium-full rotate: false - xy: 360, 299 + xy: 1549, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-parallax-full rotate: false - xy: 1, 499 + xy: 1343, 889 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +parallax-icon-logic + rotate: false + xy: 1343, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-pebbles-full rotate: false - xy: 357, 265 + xy: 1583, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-weaver-full rotate: false - xy: 475, 957 + xy: 1409, 889 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +phase-weaver-icon-logic + rotate: false + xy: 1409, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-plated-conduit-full rotate: false - xy: 357, 231 + xy: 1617, 733 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plated-conduit-icon-logic + rotate: false + xy: 1617, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pneumatic-drill-full rotate: false - xy: 1, 433 + xy: 1475, 889 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +pneumatic-drill-icon-logic + rotate: false + xy: 1475, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-pulse-conduit-full rotate: false - xy: 357, 197 + xy: 1651, 733 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-icon-logic + rotate: false + xy: 1651, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pulverizer-full rotate: false - xy: 371, 367 + xy: 1685, 733 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulverizer-icon-logic + rotate: false + xy: 1685, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-repair-point-full rotate: false - xy: 377, 163 + xy: 1719, 733 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +repair-point-icon-logic + rotate: false + xy: 1719, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-salt-wall-full rotate: false - xy: 377, 129 + xy: 1753, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-salvo-full rotate: false - xy: 541, 957 + xy: 1541, 899 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +salvo-icon-logic + rotate: false + xy: 1541, 899 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-sand-boulder-full rotate: false - xy: 377, 95 + xy: 1787, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-full rotate: false - xy: 377, 61 + xy: 1821, 733 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-wall-full rotate: false - xy: 377, 27 + xy: 1855, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scatter-full rotate: false - xy: 1, 367 + xy: 1607, 899 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +scatter-icon-logic + rotate: false + xy: 1607, 899 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-scorch-full rotate: false - xy: 394, 333 + xy: 1889, 723 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scorch-icon-logic + rotate: false + xy: 1889, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-full rotate: false - xy: 394, 299 + xy: 1923, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall1 rotate: false - xy: 394, 299 + xy: 1923, 723 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-icon-logic + rotate: false + xy: 1923, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-large-full rotate: false - xy: 607, 957 + xy: 1673, 899 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +scrap-wall-large-icon-logic + rotate: false + xy: 1673, 899 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-segment-full rotate: false - xy: 1, 301 + xy: 1739, 899 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +segment-icon-logic + rotate: false + xy: 1739, 899 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-shale-boulder-full rotate: false - xy: 391, 231 + xy: 1991, 723 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-full rotate: false - xy: 391, 197 + xy: 1275, 311 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-wall-full rotate: false - xy: 405, 367 + xy: 1309, 311 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shrubs-full rotate: false - xy: 411, 163 + xy: 1269, 277 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-boulder-full rotate: false - xy: 1477, 709 + xy: 777, 721 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snow-full rotate: false - xy: 411, 129 + xy: 1303, 277 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-wall-full rotate: false - xy: 411, 95 + xy: 1539, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-cluster-full rotate: false - xy: 1987, 431 + xy: 1295, 723 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-moss-full rotate: false - xy: 411, 61 + xy: 1539, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-press-full rotate: false - xy: 673, 957 + xy: 1805, 899 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +spore-press-icon-logic + rotate: false + xy: 1805, 899 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-spore-wall-full rotate: false - xy: 411, 27 + xy: 1573, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-steam-generator-full rotate: false - xy: 1, 235 + xy: 1871, 889 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +steam-generator-icon-logic + rotate: false + xy: 1871, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-stone-full rotate: false - xy: 428, 333 + xy: 1539, 631 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-stone-wall-full rotate: false - xy: 428, 299 + xy: 1573, 665 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-swarmer-full rotate: false - xy: 739, 957 + xy: 1937, 889 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +swarmer-icon-logic + rotate: false + xy: 1937, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-tendrils-full rotate: false - xy: 425, 265 + xy: 1607, 699 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-titanium-conveyor-full rotate: false - xy: 425, 231 + xy: 1539, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 425, 231 + xy: 1539, 597 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-icon-logic + rotate: false + xy: 1539, 597 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-water-extractor-full rotate: false - xy: 1, 169 + xy: 1211, 823 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +water-extractor-icon-logic + rotate: false + xy: 1211, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-wave-full rotate: false - xy: 805, 957 + xy: 1277, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +wave-icon-logic + rotate: false + xy: 1277, 823 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +bryde-icon-logic + rotate: false + xy: 1539, 529 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +coal-icon-logic + rotate: false + xy: 1607, 597 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-coal-medium + rotate: false + xy: 1607, 597 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 command-center-team-crux rotate: false - xy: 937, 957 + xy: 1541, 833 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 command-center-team-sharded rotate: false - xy: 1003, 957 + xy: 1607, 833 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container-team-crux rotate: false - xy: 1201, 957 + xy: 1805, 833 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container-team-sharded rotate: false - xy: 1267, 957 + xy: 1871, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +copper-icon-logic + rotate: false + xy: 1777, 563 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-copper-medium + rotate: false + xy: 1777, 563 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +corvus-icon-logic + rotate: false + xy: 363, 127 + size: 31, 20 + orig: 31, 20 + offset: 0, 0 + index: -1 corvus-joint rotate: false - xy: 67, 240 + xy: 271, 295 size: 60, 60 orig: 60, 60 offset: 0, 0 index: -1 +corvus-joint-base + rotate: false + xy: 605, 953 + size: 70, 70 + orig: 70, 70 + offset: 0, 0 + index: -1 +toxopid-joint-base + rotate: false + xy: 605, 953 + size: 70, 70 + orig: 70, 70 + offset: 0, 0 + index: -1 corvus-leg rotate: false - xy: 949, 495 + xy: 363, 57 size: 30, 68 orig: 30, 68 offset: 0, 0 index: -1 corvus-leg-base rotate: false - xy: 307, 635 + xy: 395, 61 size: 30, 64 orig: 30, 64 offset: 0, 0 index: -1 cracks-1-0 rotate: false - xy: 564, 299 + xy: 1777, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-1 rotate: false - xy: 561, 265 + xy: 1811, 563 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-2 rotate: false - xy: 561, 231 + xy: 1811, 529 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-3 rotate: false - xy: 561, 197 + xy: 1539, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-4 rotate: false - xy: 575, 367 + xy: 1573, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-5 rotate: false - xy: 581, 163 + xy: 1607, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-6 rotate: false - xy: 581, 129 + xy: 1641, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-7 rotate: false - xy: 581, 95 + xy: 1675, 495 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-2-0 rotate: false - xy: 1399, 957 + xy: 1541, 767 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-1 rotate: false - xy: 1465, 957 + xy: 1607, 767 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-2 rotate: false - xy: 1531, 957 + xy: 1673, 767 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-3 rotate: false - xy: 1597, 957 + xy: 1739, 767 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-4 rotate: false - xy: 1663, 957 + xy: 1805, 767 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-5 rotate: false - xy: 1729, 957 + xy: 1871, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-6 rotate: false - xy: 1795, 957 + xy: 1937, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-7 rotate: false - xy: 1861, 957 + xy: 157, 877 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +crawler-icon-logic + rotate: false + xy: 1709, 495 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 crawler-leg rotate: false - xy: 1777, 709 + xy: 877, 721 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-outline rotate: false - xy: 1827, 709 + xy: 777, 571 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-wreck0 rotate: false - xy: 1877, 709 + xy: 827, 621 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-wreck1 rotate: false - xy: 1927, 709 + xy: 877, 671 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-wreck2 rotate: false - xy: 647, 653 + xy: 777, 521 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +cryofluid-icon-logic + rotate: false + xy: 1777, 495 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-cryofluid-medium + rotate: false + xy: 1777, 495 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +dagger-icon-logic + rotate: false + xy: 1811, 495 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 dagger-leg rotate: false - xy: 897, 657 + xy: 877, 521 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-outline rotate: false - xy: 947, 659 + xy: 727, 446 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-wreck0 rotate: false - xy: 997, 659 + xy: 777, 471 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-wreck1 rotate: false - xy: 1047, 659 + xy: 827, 471 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-wreck2 rotate: false - xy: 1097, 659 + xy: 877, 471 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 duo rotate: false - xy: 595, 231 + xy: 1569, 427 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +eclipse-icon-logic + rotate: false + xy: 1603, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 eruption-outline rotate: false - xy: 1247, 643 + xy: 827, 413 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flamethrower-outline rotate: false - xy: 1397, 651 + xy: 977, 717 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 +flare-icon-logic + rotate: false + xy: 1569, 393 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 flare-outline rotate: false - xy: 1497, 659 + xy: 1027, 725 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flare-wreck0 rotate: false - xy: 1547, 659 + xy: 927, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flare-wreck1 rotate: false - xy: 1597, 659 + xy: 977, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flare-wreck2 rotate: false - xy: 1647, 659 + xy: 1027, 675 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +fortress-icon-logic + rotate: false + xy: 1535, 366 + size: 32, 25 + orig: 32, 25 + offset: 0, 0 + index: -1 +gamma-icon-logic + rotate: false + xy: 1603, 427 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +gamma-outline + rotate: false + xy: 1251, 955 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 +gamma-wreck0 + rotate: false + xy: 1321, 955 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 gamma-wreck1 rotate: false - xy: 1, 953 + xy: 1391, 955 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 gamma-wreck2 rotate: false - xy: 1, 883 + xy: 1461, 955 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 +graphite-icon-logic + rotate: false + xy: 1637, 461 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-graphite-medium + rotate: false + xy: 1637, 461 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 hail rotate: false - xy: 595, 197 + xy: 1603, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 heal-shotgun-weapon-outline rotate: false - xy: 875, 707 + xy: 536, 358 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 heal-weapon-mount-outline rotate: false - xy: 1797, 659 + xy: 1027, 625 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 heal-weapon-outline rotate: false - xy: 1847, 659 + xy: 927, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -item-blast-compound-large +horizon-icon-logic rotate: false - xy: 1987, 389 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -item-blast-compound-medium - rotate: false - xy: 615, 27 + xy: 1637, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +horizon-outline + rotate: false + xy: 165, 951 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 +horizon-wreck0 + rotate: false + xy: 1, 713 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 +horizon-wreck1 + rotate: false + xy: 239, 951 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 +horizon-wreck2 + rotate: false + xy: 1, 639 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 +item-blast-compound-large + rotate: false + xy: 1277, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 item-blast-compound-small rotate: false - xy: 1993, 891 + xy: 1507, 271 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-blast-compound-tiny rotate: false - xy: 2029, 455 + xy: 619, 821 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-blast-compound-xlarge rotate: false - xy: 1897, 659 + xy: 977, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-coal-large rotate: false - xy: 1797, 417 + xy: 1277, 639 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-coal-medium - rotate: false - xy: 632, 299 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 item-coal-small rotate: false - xy: 133, 401 + xy: 2021, 971 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-coal-tiny rotate: false - xy: 1923, 425 + xy: 927, 775 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-coal-xlarge rotate: false - xy: 1947, 659 + xy: 1027, 575 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-copper-large rotate: false - xy: 1839, 417 + xy: 1319, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-copper-medium - rotate: false - xy: 629, 231 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 item-copper-small rotate: false - xy: 2019, 891 + xy: 464, 191 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-copper-tiny rotate: false - xy: 1275, 575 + xy: 637, 821 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-copper-xlarge rotate: false - xy: 1997, 673 + xy: 927, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-graphite-large rotate: false - xy: 1881, 401 + xy: 1277, 597 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-graphite-medium - rotate: false - xy: 643, 367 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 item-graphite-small rotate: false - xy: 159, 401 + xy: 668, 384 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-graphite-tiny rotate: false - xy: 417, 683 + xy: 945, 775 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-graphite-xlarge rotate: false - xy: 1997, 623 + xy: 977, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-lead-large rotate: false - xy: 897, 565 + xy: 1319, 639 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-lead-medium rotate: false - xy: 649, 129 + xy: 1773, 461 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +lead-icon-logic + rotate: false + xy: 1773, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead-small rotate: false - xy: 273, 607 + xy: 694, 384 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-lead-tiny rotate: false - xy: 949, 347 + xy: 139, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-lead-xlarge rotate: false - xy: 1297, 601 + xy: 1027, 525 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-metaglass-large rotate: false - xy: 939, 565 + xy: 1277, 555 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-metaglass-medium rotate: false - xy: 649, 61 + xy: 1773, 427 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metaglass-icon-logic + rotate: false + xy: 1773, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass-small rotate: false - xy: 949, 469 + xy: 1507, 245 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-metaglass-tiny rotate: false - xy: 1085, 507 + xy: 157, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-metaglass-xlarge rotate: false - xy: 1347, 601 + xy: 977, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-phase-fabric-large rotate: false - xy: 981, 567 + xy: 1319, 597 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-phase-fabric-medium rotate: false - xy: 666, 333 + xy: 1773, 393 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-fabric-icon-logic + rotate: false + xy: 1773, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric-small rotate: false - xy: 981, 499 + xy: 1533, 243 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-phase-fabric-tiny rotate: false - xy: 2029, 437 + xy: 175, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-phase-fabric-xlarge rotate: false - xy: 1397, 601 + xy: 1027, 475 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-plastanium-large rotate: false - xy: 1023, 567 + xy: 1277, 513 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-plastanium-medium rotate: false - xy: 663, 265 + xy: 1807, 393 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plastanium-icon-logic + rotate: false + xy: 1807, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium-small rotate: false - xy: 339, 675 + xy: 524, 229 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-plastanium-tiny rotate: false - xy: 1923, 407 + xy: 193, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-plastanium-xlarge rotate: false - xy: 1447, 609 + xy: 927, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-pyratite-large rotate: false - xy: 1065, 567 + xy: 1319, 555 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-pyratite-medium rotate: false - xy: 663, 197 + xy: 1603, 359 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pyratite-icon-logic + rotate: false + xy: 1603, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite-small rotate: false - xy: 949, 443 + xy: 550, 232 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-pyratite-tiny rotate: false - xy: 1275, 557 + xy: 211, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-pyratite-xlarge rotate: false - xy: 1497, 609 + xy: 977, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-sand-large rotate: false - xy: 1107, 567 + xy: 1277, 471 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-sand-medium rotate: false - xy: 683, 163 + xy: 1671, 359 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sand-icon-logic + rotate: false + xy: 1671, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand-small rotate: false - xy: 1007, 499 + xy: 576, 232 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-sand-tiny rotate: false - xy: 417, 665 + xy: 229, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-sand-xlarge rotate: false - xy: 1547, 609 + xy: 1027, 425 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-scrap-large rotate: false - xy: 1149, 567 + xy: 1319, 513 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-scrap-medium rotate: false - xy: 683, 95 + xy: 1739, 359 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-icon-logic + rotate: false + xy: 1739, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap-small rotate: false - xy: 339, 649 + xy: 720, 370 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-scrap-tiny rotate: false - xy: 435, 683 + xy: 247, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-scrap-xlarge rotate: false - xy: 1597, 609 + xy: 1077, 715 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-silicon-large rotate: false - xy: 1191, 551 + xy: 1277, 429 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-silicon-medium rotate: false - xy: 683, 27 + xy: 1807, 359 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +silicon-icon-logic + rotate: false + xy: 1807, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon-small rotate: false - xy: 365, 675 + xy: 746, 370 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-silicon-tiny rotate: false - xy: 949, 329 + xy: 1227, 753 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-silicon-xlarge rotate: false - xy: 1647, 609 + xy: 1077, 665 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-spore-pod-large rotate: false - xy: 1233, 551 + xy: 1319, 471 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-spore-pod-medium rotate: false - xy: 697, 265 + xy: 1879, 689 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spore-pod-icon-logic + rotate: false + xy: 1879, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod-small rotate: false - xy: 949, 417 + xy: 524, 203 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-spore-pod-tiny rotate: false - xy: 1103, 507 + xy: 655, 821 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-spore-pod-xlarge rotate: false - xy: 1697, 609 + xy: 1077, 615 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-surge-alloy-large rotate: false - xy: 981, 525 + xy: 1277, 387 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-surge-alloy-medium rotate: false - xy: 697, 197 + xy: 1879, 655 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-alloy-icon-logic + rotate: false + xy: 1879, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy-small rotate: false - xy: 949, 391 + xy: 550, 206 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-surge-alloy-tiny rotate: false - xy: 2029, 419 + xy: 51, 32 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-surge-alloy-xlarge rotate: false - xy: 1747, 609 + xy: 1077, 565 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-thorium-large rotate: false - xy: 1023, 525 + xy: 1275, 345 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-thorium-medium rotate: false - xy: 717, 163 + xy: 1845, 587 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thorium-icon-logic + rotate: false + xy: 1845, 587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium-small rotate: false - xy: 1033, 499 + xy: 576, 206 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-thorium-tiny rotate: false - xy: 435, 665 + xy: 1515, 715 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-thorium-xlarge rotate: false - xy: 1797, 609 + xy: 1077, 515 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-titanium-large rotate: false - xy: 1065, 525 + xy: 1319, 429 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-titanium-medium rotate: false - xy: 717, 95 + xy: 1913, 655 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-icon-logic + rotate: false + xy: 1913, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium-small rotate: false - xy: 365, 649 + xy: 602, 199 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-titanium-tiny rotate: false - xy: 453, 683 + xy: 1377, 315 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-titanium-xlarge rotate: false - xy: 1847, 609 + xy: 1077, 465 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lancer rotate: false - xy: 1069, 891 + xy: 73, 267 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 large-artillery-outline rotate: false - xy: 1947, 591 + xy: 1027, 357 size: 48, 66 orig: 48, 66 offset: 0, 0 index: -1 +large-bullet-mount-outline + rotate: false + xy: 1, 149 + size: 70, 97 + orig: 70, 97 + offset: 0, 0 + index: -1 +large-purple-mount-outline + rotate: false + xy: 677, 926 + size: 70, 97 + orig: 70, 97 + offset: 0, 0 + index: -1 large-weapon-outline rotate: false - xy: 1447, 559 + xy: 1127, 715 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-cryofluid-large rotate: false - xy: 1107, 525 + xy: 1319, 387 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -liquid-cryofluid-medium - rotate: false - xy: 734, 299 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 liquid-cryofluid-small rotate: false - xy: 391, 675 + xy: 628, 199 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-cryofluid-tiny rotate: false - xy: 1121, 507 + xy: 427, 86 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-cryofluid-xlarge rotate: false - xy: 1497, 559 + xy: 1127, 665 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-oil-large rotate: false - xy: 1149, 525 + xy: 1317, 345 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-oil-medium rotate: false - xy: 731, 197 + xy: 2015, 689 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +oil-icon-logic + rotate: false + xy: 2015, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil-small rotate: false - xy: 949, 365 + xy: 397, 130 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-oil-tiny rotate: false - xy: 2029, 401 + xy: 51, 14 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-oil-xlarge rotate: false - xy: 1547, 559 + xy: 1127, 615 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-slag-large rotate: false - xy: 1191, 509 + xy: 1227, 297 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-slag-medium rotate: false - xy: 768, 333 + xy: 1879, 519 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +slag-icon-logic + rotate: false + xy: 1879, 519 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag-small rotate: false - xy: 1059, 499 + xy: 423, 130 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-slag-tiny rotate: false - xy: 453, 665 + xy: 427, 68 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-slag-xlarge rotate: false - xy: 1597, 559 + xy: 1127, 565 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-water-large rotate: false - xy: 1233, 509 + xy: 1361, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-water-medium rotate: false - xy: 765, 197 + xy: 2015, 621 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +water-icon-logic + rotate: false + xy: 2015, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water-small rotate: false - xy: 391, 649 + xy: 427, 104 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-water-tiny rotate: false - xy: 471, 683 + xy: 533, 288 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-water-xlarge rotate: false - xy: 1647, 559 + xy: 1127, 515 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +mace-icon-logic + rotate: false + xy: 1913, 519 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 mace-leg rotate: false - xy: 1531, 891 + xy: 289, 819 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-outline rotate: false - xy: 1597, 891 + xy: 355, 819 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-wreck0 rotate: false - xy: 1663, 891 + xy: 421, 819 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-wreck1 rotate: false - xy: 1729, 891 + xy: 487, 821 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-wreck2 rotate: false - xy: 1795, 891 + xy: 553, 821 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +mega-icon-logic + rotate: false + xy: 2015, 587 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +minke-icon-logic + rotate: false + xy: 467, 217 + size: 27, 32 + orig: 27, 32 + offset: 0, 0 + index: -1 missiles-mount-outline rotate: false - xy: 1797, 559 + xy: 1127, 365 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +mono-icon-logic + rotate: false + xy: 1879, 485 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 mono-outline rotate: false - xy: 1947, 541 + xy: 1177, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-wreck0 rotate: false - xy: 1997, 523 + xy: 1177, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-wreck1 rotate: false - xy: 847, 605 + xy: 1177, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-wreck2 rotate: false - xy: 897, 607 + xy: 1177, 517 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-purple-weapon-outline rotate: false - xy: 997, 609 + xy: 1177, 417 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-weapon-outline rotate: false - xy: 1097, 609 + xy: 1177, 317 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +nova-icon-logic + rotate: false + xy: 1913, 485 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 nova-leg rotate: false - xy: 1197, 593 + xy: 823, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 nova-outline rotate: false - xy: 125, 70 + xy: 677, 812 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-wreck0 rotate: false - xy: 125, 12 + xy: 669, 754 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-wreck1 rotate: false - xy: 183, 128 + xy: 669, 696 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-wreck2 rotate: false - xy: 183, 70 + xy: 669, 638 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 +oct-icon-logic + rotate: false + xy: 1947, 485 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +omura-icon-logic + rotate: false + xy: 2025, 727 + size: 22, 32 + orig: 22, 32 + offset: 0, 0 + index: -1 parallax rotate: false - xy: 603, 825 + xy: 207, 547 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +poly-icon-logic + rotate: false + xy: 1943, 349 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 poly-outline rotate: false - xy: 241, 701 + xy: 669, 464 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-wreck0 rotate: false - xy: 299, 701 + xy: 735, 821 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-wreck1 rotate: false - xy: 357, 701 + xy: 793, 821 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-wreck2 rotate: false - xy: 415, 701 + xy: 851, 821 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 +pulsar-icon-logic + rotate: false + xy: 1533, 303 + size: 32, 27 + orig: 32, 27 + offset: 0, 0 + index: -1 pulsar-leg rotate: false - xy: 1395, 825 + xy: 339, 555 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pulsar-outline rotate: false - xy: 1, 823 + xy: 1601, 965 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-wreck0 rotate: false - xy: 71, 903 + xy: 1671, 965 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-wreck1 rotate: false - xy: 141, 963 + xy: 1741, 965 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-wreck2 rotate: false - xy: 1, 763 + xy: 1811, 965 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 -repair-point +quad-icon-logic rotate: false - xy: 799, 209 + xy: 397, 156 + size: 31, 31 + orig: 31, 31 + offset: 0, 0 + index: -1 +quasar-icon-logic + rotate: false + xy: 1773, 325 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +reign-icon-logic + rotate: false + xy: 431, 195 + size: 31, 20 + orig: 31, 20 + offset: 0, 0 + index: -1 +repair-point + rotate: false + xy: 1807, 325 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +risso-icon-logic + rotate: false + xy: 329, 20 + size: 28, 32 + orig: 28, 32 + offset: 0, 0 + index: -1 +risso-outline + rotate: false + xy: 821, 945 + size: 70, 78 + orig: 70, 78 + offset: 0, 0 + index: -1 +risso-wreck0 + rotate: false + xy: 893, 945 + size: 70, 78 + orig: 70, 78 + offset: 0, 0 + index: -1 +risso-wreck1 + rotate: false + xy: 965, 945 + size: 70, 78 + orig: 70, 78 + offset: 0, 0 + index: -1 +risso-wreck2 + rotate: false + xy: 1037, 945 + size: 70, 78 + orig: 70, 78 + offset: 0, 0 + index: -1 salvo rotate: false - xy: 1791, 825 + xy: 207, 415 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter rotate: false - xy: 1923, 825 + xy: 339, 423 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +scepter-icon-logic + rotate: false + xy: 2011, 321 + size: 32, 26 + orig: 32, 26 + offset: 0, 0 + index: -1 scepter-weapon-outline rotate: false - xy: 589, 655 + xy: 1025, 775 size: 56, 102 orig: 56, 102 offset: 0, 0 index: -1 scorch rotate: false - xy: 870, 259 + xy: 1567, 291 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 segment rotate: false - xy: 405, 759 + xy: 139, 217 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +sei-icon-logic + rotate: false + xy: 1737, 291 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sei-launcher-outline + rotate: false + xy: 1, 861 + size: 80, 80 + orig: 80, 80 + offset: 0, 0 + index: -1 +shock-mine-icon-logic + rotate: false + xy: 1873, 281 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 small-basic-weapon-outline rotate: false - xy: 1347, 551 + xy: 977, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-mount-weapon-outline rotate: false - xy: 1447, 509 + xy: 383, 251 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spiroct-foot rotate: false - xy: 1897, 443 + xy: 1227, 339 size: 46, 46 orig: 46, 46 offset: 0, 0 index: -1 +spiroct-icon-logic + rotate: false + xy: 329, 54 + size: 31, 25 + orig: 31, 25 + offset: 0, 0 + index: -1 spiroct-joint rotate: false - xy: 819, 61 + xy: 1975, 281 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spiroct-leg rotate: false - xy: 1, 1 + xy: 1, 14 size: 48, 34 orig: 48, 34 offset: 0, 0 index: -1 spiroct-leg-base rotate: false - xy: 1647, 523 + xy: 1245, 787 size: 48, 34 orig: 48, 34 offset: 0, 0 index: -1 spiroct-weapon-outline rotate: false - xy: 1747, 501 + xy: 1345, 765 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 splash-0 rotate: false - xy: 819, 27 + xy: 1533, 269 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-1 rotate: false - xy: 853, 157 + xy: 1567, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-10 rotate: false - xy: 887, 21 + xy: 1873, 247 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-11 rotate: false - xy: 921, 157 + xy: 1907, 247 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-2 rotate: false - xy: 853, 123 + xy: 1601, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-3 rotate: false - xy: 887, 157 + xy: 1635, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-4 rotate: false - xy: 853, 89 + xy: 1669, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-5 rotate: false - xy: 887, 123 + xy: 1703, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-6 rotate: false - xy: 853, 55 + xy: 1737, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-7 rotate: false - xy: 887, 89 + xy: 1771, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-8 rotate: false - xy: 887, 55 + xy: 1805, 257 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-9 rotate: false - xy: 853, 21 + xy: 1839, 247 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer rotate: false - xy: 1593, 759 + xy: 537, 557 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +toxopid-icon-logic + rotate: false + xy: 496, 221 + size: 26, 32 + orig: 26, 32 + offset: 0, 0 + index: -1 unit-alpha-full rotate: false - xy: 1797, 509 + xy: 1395, 773 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-beta-full rotate: false - xy: 647, 703 + xy: 1083, 823 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 unit-crawler-full rotate: false - xy: 1847, 509 + xy: 1445, 773 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-dagger-full rotate: false - xy: 1647, 473 + xy: 1245, 737 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-flare-full rotate: false - xy: 1897, 491 + xy: 1227, 687 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-gamma-full rotate: false - xy: 71, 833 + xy: 1881, 955 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 +unit-horizon-full + rotate: false + xy: 1, 491 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 unit-mace-full rotate: false - xy: 1857, 759 + xy: 603, 689 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-mono-full rotate: false - xy: 1947, 491 + xy: 1227, 637 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-nova-full rotate: false - xy: 705, 701 + xy: 1141, 821 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 unit-poly-full rotate: false - xy: 763, 701 + xy: 1083, 765 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 unit-pulsar-full rotate: false - xy: 141, 903 + xy: 1951, 965 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 +unit-quasar-full + rotate: false + xy: 83, 943 + size: 80, 80 + orig: 80, 80 + offset: 0, 0 + index: -1 +unit-risso-full + rotate: false + xy: 1109, 945 + size: 70, 78 + orig: 70, 78 + offset: 0, 0 + index: -1 +vela-icon-logic + rotate: false + xy: 397, 189 + size: 32, 26 + orig: 32, 26 + offset: 0, 0 + index: -1 wave rotate: false - xy: 67, 499 + xy: 273, 357 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +zenith-icon-logic + rotate: false + xy: 329, 81 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 zenith-missiles-outline rotate: false - xy: 1847, 459 + xy: 1227, 387 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 615, 61 + xy: 1671, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal rotate: false - xy: 632, 333 + xy: 1705, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper rotate: false - xy: 629, 265 + xy: 1739, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite rotate: false - xy: 629, 197 + xy: 1705, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead rotate: false - xy: 649, 163 + xy: 1739, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass rotate: false - xy: 649, 95 + xy: 1739, 393 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 649, 27 + xy: 1807, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 666, 299 + xy: 1807, 427 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 663, 231 + xy: 1569, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand rotate: false - xy: 677, 367 + xy: 1637, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap rotate: false - xy: 683, 129 + xy: 1705, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 683, 61 + xy: 1773, 359 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod rotate: false - xy: 700, 299 + xy: 1845, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 697, 231 + xy: 1845, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 711, 367 + xy: 1913, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 717, 129 + xy: 1879, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid rotate: false - xy: 734, 333 + xy: 1913, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil rotate: false - xy: 731, 231 + xy: 1981, 689 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag rotate: false - xy: 751, 27 + xy: 2015, 655 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water rotate: false - xy: 765, 231 + xy: 1981, 621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blank rotate: false - xy: 799, 296 + xy: 720, 407 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 +circle-small + rotate: false + xy: 449, 305 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 shape-3 rotate: false - xy: 67, 302 + xy: 471, 358 size: 63, 63 orig: 63, 63 offset: 0, 0 index: -1 alpha rotate: false - xy: 927, 709 + xy: 588, 375 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-cell rotate: false - xy: 977, 709 + xy: 553, 308 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 atrax-base rotate: false - xy: 211, 957 + xy: 749, 879 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 beta rotate: false - xy: 67, 76 + xy: 333, 301 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-cell rotate: false - xy: 1327, 709 + xy: 727, 546 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler rotate: false - xy: 1627, 709 + xy: 827, 721 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-base rotate: false - xy: 1677, 709 + xy: 777, 621 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-cell rotate: false - xy: 1727, 709 + xy: 827, 671 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger rotate: false - xy: 797, 651 + xy: 827, 521 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 847, 655 + xy: 877, 571 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flare rotate: false - xy: 1447, 659 + xy: 927, 667 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 805, 891 + xy: 75, 531 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +gamma + rotate: false + xy: 1181, 955 + size: 68, 68 + orig: 68, 68 + offset: 0, 0 + index: -1 gamma-cell rotate: false - xy: 129, 244 + xy: 271, 131 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 +horizon + rotate: false + xy: 1, 787 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 +horizon-cell + rotate: false + xy: 83, 869 + size: 72, 72 + orig: 72, 72 + offset: 0, 0 + index: -1 mace rotate: false - xy: 1333, 891 + xy: 73, 3 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-base rotate: false - xy: 1399, 891 + xy: 157, 811 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-cell rotate: false - xy: 1465, 891 + xy: 223, 819 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mono rotate: false - xy: 1847, 559 + xy: 1127, 315 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-cell rotate: false - xy: 1897, 541 + xy: 1177, 717 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 nova rotate: false - xy: 129, 186 + xy: 271, 73 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-base rotate: false - xy: 1147, 609 + xy: 773, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 nova-cell rotate: false - xy: 125, 128 + xy: 271, 15 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly rotate: false - xy: 183, 12 + xy: 669, 580 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-cell rotate: false - xy: 132, 309 + xy: 669, 522 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 power-cell rotate: false - xy: 473, 701 + xy: 909, 821 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 pulsar rotate: false - xy: 71, 963 + xy: 1531, 965 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-base rotate: false - xy: 1247, 593 + xy: 877, 371 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulsar-cell rotate: false - xy: 67, 190 + xy: 271, 245 size: 58, 48 orig: 58, 48 offset: 0, 0 index: -1 +risso + rotate: false + xy: 749, 945 + size: 70, 78 + orig: 70, 78 + offset: 0, 0 + index: -1 vanguard rotate: false - xy: 1997, 473 + xy: 1227, 587 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vanguard-cell rotate: false - xy: 1697, 451 + xy: 1227, 537 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 artillery rotate: false - xy: 1227, 701 + xy: 727, 754 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 +artillery-mount + rotate: false + xy: 533, 953 + size: 70, 70 + orig: 70, 70 + offset: 0, 0 + index: -1 eruption rotate: false - xy: 1197, 643 + xy: 777, 413 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flakgun rotate: false - xy: 1297, 651 + xy: 877, 421 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flamethrower rotate: false - xy: 1347, 651 + xy: 927, 717 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 heal-shotgun-weapon rotate: false - xy: 1993, 917 + xy: 501, 306 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 heal-weapon rotate: false - xy: 1697, 659 + xy: 927, 567 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 heal-weapon-mount rotate: false - xy: 1747, 659 + xy: 977, 617 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 large-artillery rotate: false - xy: 1897, 591 + xy: 1077, 397 size: 48, 66 orig: 48, 66 offset: 0, 0 index: -1 +large-bullet-mount + rotate: false + xy: 1, 248 + size: 70, 97 + orig: 70, 97 + offset: 0, 0 + index: -1 +large-purple-mount + rotate: false + xy: 1, 50 + size: 70, 97 + orig: 70, 97 + offset: 0, 0 + index: -1 large-weapon rotate: false - xy: 1997, 573 + xy: 1077, 347 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles rotate: false - xy: 1697, 559 + xy: 1127, 465 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles-mount rotate: false - xy: 1747, 559 + xy: 1127, 415 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-purple-weapon rotate: false - xy: 947, 609 + xy: 1177, 467 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-weapon rotate: false - xy: 1047, 609 + xy: 1177, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scepter-weapon rotate: false - xy: 531, 655 + xy: 967, 775 size: 56, 102 orig: 56, 102 offset: 0, 0 index: -1 +sei-launcher + rotate: false + xy: 1, 943 + size: 80, 80 + orig: 80, 80 + offset: 0, 0 + index: -1 small-basic-weapon rotate: false - xy: 1297, 551 + xy: 927, 367 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-mount-weapon rotate: false - xy: 1397, 551 + xy: 333, 251 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-weapon rotate: false - xy: 1497, 509 + xy: 433, 251 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spiroct-weapon rotate: false - xy: 1697, 501 + xy: 1295, 765 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 weapon rotate: false - xy: 1747, 451 + xy: 1227, 487 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 zenith-missiles rotate: false - xy: 1797, 459 + xy: 1227, 437 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -11186,2261 +12642,2275 @@ filter: nearest,nearest repeat: none additive-reconstructor-icon-editor rotate: false - xy: 613, 763 + xy: 613, 711 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 air-factory-icon-editor rotate: false - xy: 1847, 925 + xy: 131, 35 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-icon-editor rotate: false - xy: 711, 763 + xy: 453, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 arc-icon-editor rotate: false - xy: 1667, 627 + xy: 1585, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-icon-editor rotate: false - xy: 423, 375 + xy: 1619, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +basalt-boulder-icon-editor + rotate: false + xy: 1985, 823 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 basalt-icon-editor rotate: false - xy: 423, 341 + xy: 1653, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-basalt1 rotate: false - xy: 423, 341 + xy: 1653, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-icon-editor rotate: false - xy: 423, 307 + xy: 1687, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large-icon-editor rotate: false - xy: 1945, 925 + xy: 711, 711 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 blast-drill-icon-editor rotate: false - xy: 1, 23 + xy: 1, 3 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-mixer-icon-editor rotate: false - xy: 1397, 827 + xy: 227, 293 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border-editor rotate: false - xy: 423, 273 + xy: 1721, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-forge-icon-editor rotate: false - xy: 809, 763 + xy: 809, 743 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-loader-icon-editor rotate: false - xy: 227, 281 + xy: 907, 743 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-unloader-icon-editor rotate: false - xy: 227, 183 + xy: 1005, 743 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 boulder-icon-editor rotate: false - xy: 1793, 843 + xy: 1137, 561 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conduit-icon-editor rotate: false - xy: 423, 239 + xy: 1755, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-icon-editor rotate: false - xy: 327, 81 + xy: 1789, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char-icon-editor rotate: false - xy: 361, 81 + xy: 1823, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char1 rotate: false - xy: 361, 81 + xy: 1823, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 clear-editor rotate: false - xy: 2043, 1020 + xy: 2041, 1000 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 cliff-icon-editor rotate: false - xy: 1009, 497 + xy: 1857, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal-centrifuge-icon-editor rotate: false - xy: 1463, 827 + xy: 227, 227 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 combustion-generator-icon-editor rotate: false - xy: 1043, 497 + xy: 1891, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 command-center-icon-editor rotate: false - xy: 1529, 827 + xy: 227, 161 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 conduit-icon-editor rotate: false - xy: 1077, 497 + xy: 1925, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 container-icon-editor rotate: false - xy: 1595, 827 + xy: 1137, 677 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 conveyor-icon-editor rotate: false - xy: 1111, 497 + xy: 1959, 609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-icon-editor rotate: false - xy: 1145, 497 + xy: 131, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large-icon-editor rotate: false - xy: 1661, 827 + xy: 1137, 611 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 core-foundation-icon-editor rotate: false - xy: 323, 409 + xy: 1131, 873 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus-icon-editor rotate: false - xy: 613, 861 + xy: 807, 841 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard-icon-editor rotate: false - xy: 517, 635 + xy: 549, 613 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 craters-icon-editor rotate: false - xy: 1179, 497 + xy: 165, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters1 rotate: false - xy: 1179, 497 + xy: 165, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cryofluid-mixer-icon-editor rotate: false - xy: 1727, 827 + xy: 293, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-icon-editor rotate: false - xy: 943, 501 + xy: 293, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cyclone-icon-editor rotate: false - xy: 131, 55 + xy: 549, 515 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 dacite-boulder-icon-editor rotate: false - xy: 1667, 711 + xy: 1335, 593 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dacite-icon-editor rotate: false - xy: 1213, 497 + xy: 425, 157 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dacite1 rotate: false - xy: 1213, 497 + xy: 425, 157 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dacite-wall-icon-editor rotate: false - xy: 1247, 497 + xy: 519, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-metal-icon-editor rotate: false - xy: 1281, 497 + xy: 459, 157 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-editor rotate: false - xy: 1315, 497 + xy: 519, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-1 rotate: false - xy: 1315, 497 + xy: 519, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-editor rotate: false - xy: 1349, 497 + xy: 1109, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-2 rotate: false - xy: 1349, 497 + xy: 1109, 415 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-editor rotate: false - xy: 649, 435 + xy: 1109, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-3 rotate: false - xy: 649, 435 + xy: 1109, 381 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-editor rotate: false - xy: 683, 435 + xy: 199, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-4 rotate: false - xy: 683, 435 + xy: 199, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-editor rotate: false - xy: 717, 435 + xy: 1995, 747 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-5 rotate: false - xy: 717, 435 + xy: 1995, 747 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-editor rotate: false - xy: 751, 435 + xy: 1995, 713 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-6 rotate: false - xy: 751, 435 + xy: 1995, 713 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-editor rotate: false - xy: 785, 435 + xy: 1995, 679 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand1 rotate: false - xy: 785, 435 + xy: 1995, 679 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-editor rotate: false - xy: 819, 435 + xy: 1995, 645 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-editor rotate: false - xy: 853, 435 + xy: 1139, 527 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-editor rotate: false - xy: 887, 435 + xy: 1139, 493 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-deepwater rotate: false - xy: 887, 435 + xy: 1139, 493 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator-icon-editor rotate: false - xy: 517, 537 + xy: 647, 613 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 diode-icon-editor rotate: false - xy: 395, 81 + xy: 1139, 459 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dirt-icon-editor rotate: false - xy: 1383, 497 + xy: 1143, 425 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dirt1 rotate: false - xy: 1383, 497 + xy: 1143, 425 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dirt-wall-icon-editor rotate: false - xy: 1793, 809 + xy: 1143, 391 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 disassembler-icon-editor rotate: false - xy: 325, 311 + xy: 647, 515 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 distributor-icon-editor rotate: false - xy: 1007, 729 + xy: 359, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-icon-editor rotate: false - xy: 1783, 775 + xy: 1335, 559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large-icon-editor rotate: false - xy: 1007, 663 + xy: 359, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dune-wall-icon-editor rotate: false - xy: 1717, 727 + xy: 1369, 559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-editor rotate: false - xy: 1717, 693 + xy: 1403, 559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-basalt2 rotate: false - xy: 1717, 659 + xy: 1437, 559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-basalt3 rotate: false - xy: 1701, 625 + xy: 1471, 559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char2 rotate: false - xy: 1735, 625 + xy: 1505, 559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char3 rotate: false - xy: 985, 463 + xy: 1539, 559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters2 rotate: false - xy: 1019, 463 + xy: 1585, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters3 rotate: false - xy: 1053, 463 + xy: 1619, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dacite2 rotate: false - xy: 1087, 463 + xy: 1653, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dacite3 rotate: false - xy: 1121, 463 + xy: 1687, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water1 rotate: false - xy: 1223, 463 + xy: 1789, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water2 rotate: false - xy: 1257, 463 + xy: 1823, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water3 rotate: false - xy: 1291, 463 + xy: 1857, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water1 rotate: false - xy: 1325, 463 + xy: 1891, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water2 rotate: false - xy: 1359, 463 + xy: 1925, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water3 rotate: false - xy: 1393, 463 + xy: 1959, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand2 rotate: false - xy: 1155, 463 + xy: 1721, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand3 rotate: false - xy: 1189, 463 + xy: 1755, 575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dirt2 rotate: false - xy: 1817, 775 + xy: 1173, 527 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dirt3 rotate: false - xy: 1851, 793 + xy: 1173, 493 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass1 rotate: false - xy: 1885, 793 + xy: 1173, 459 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass-icon-editor rotate: false - xy: 1885, 793 + xy: 1173, 459 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass2 rotate: false - xy: 1919, 793 + xy: 1177, 425 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass3 rotate: false - xy: 1953, 793 + xy: 1177, 391 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock1 rotate: false - xy: 1987, 793 + xy: 1207, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock-icon-editor rotate: false - xy: 1987, 793 + xy: 1207, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock2 rotate: false - xy: 1851, 759 + xy: 1241, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock3 rotate: false - xy: 1885, 759 + xy: 1207, 509 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow1 rotate: false - xy: 425, 205 + xy: 1241, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow-icon-editor rotate: false - xy: 425, 205 + xy: 1241, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow2 rotate: false - xy: 425, 171 + xy: 1275, 509 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow3 rotate: false - xy: 425, 137 + xy: 1275, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice1 rotate: false - xy: 1919, 759 + xy: 1275, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-icon-editor rotate: false - xy: 1919, 759 + xy: 1275, 543 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice2 rotate: false - xy: 1953, 759 + xy: 1207, 475 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice3 rotate: false - xy: 1987, 759 + xy: 1241, 509 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock1 rotate: false - xy: 429, 103 + xy: 1211, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock-icon-editor rotate: false - xy: 429, 103 + xy: 1211, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock2 rotate: false - xy: 429, 69 + xy: 1211, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock3 rotate: false - xy: 231, 51 + xy: 1245, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor rotate: false - xy: 265, 51 + xy: 1245, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-icon-editor rotate: false - xy: 265, 51 + xy: 1245, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-2 rotate: false - xy: 231, 17 + xy: 1279, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2-icon-editor rotate: false - xy: 231, 17 + xy: 1279, 441 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-3 rotate: false - xy: 265, 17 + xy: 1279, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3-icon-editor rotate: false - xy: 265, 17 + xy: 1279, 407 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-5 rotate: false - xy: 299, 47 + xy: 1211, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5-icon-editor rotate: false - xy: 299, 47 + xy: 1211, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged1 rotate: false - xy: 333, 47 + xy: 1245, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged-icon-editor rotate: false - xy: 333, 47 + xy: 1245, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged2 rotate: false - xy: 367, 47 + xy: 1279, 373 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged3 rotate: false - xy: 299, 13 + xy: 1143, 357 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss1 rotate: false - xy: 333, 13 + xy: 1177, 357 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss-icon-editor rotate: false - xy: 333, 13 + xy: 1177, 357 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss2 rotate: false - xy: 367, 13 + xy: 1211, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss3 rotate: false - xy: 401, 35 + xy: 1245, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-mud1 rotate: false - xy: 435, 35 + xy: 1279, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mud-icon-editor rotate: false - xy: 435, 35 + xy: 1279, 339 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-mud2 rotate: false - xy: 401, 1 + xy: 1309, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-mud3 rotate: false - xy: 435, 1 + xy: 1309, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal1 rotate: false - xy: 985, 429 + xy: 1343, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal2 rotate: false - xy: 1019, 429 + xy: 1343, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal3 rotate: false - xy: 1053, 429 + xy: 1377, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper1 rotate: false - xy: 1087, 429 + xy: 1377, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper2 rotate: false - xy: 1121, 429 + xy: 1411, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper3 rotate: false - xy: 1155, 429 + xy: 1411, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead1 rotate: false - xy: 1189, 429 + xy: 1445, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead2 rotate: false - xy: 1223, 429 + xy: 1445, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead3 rotate: false - xy: 1257, 429 + xy: 1479, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap1 rotate: false - xy: 1291, 429 + xy: 1479, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap2 rotate: false - xy: 1325, 429 + xy: 1513, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap3 rotate: false - xy: 1359, 429 + xy: 1513, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium1 rotate: false - xy: 1393, 429 + xy: 1547, 525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium2 rotate: false - xy: 457, 405 + xy: 1547, 491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium3 rotate: false - xy: 491, 405 + xy: 1313, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium1 rotate: false - xy: 457, 371 + xy: 1313, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium2 rotate: false - xy: 525, 405 + xy: 1347, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium3 rotate: false - xy: 457, 337 + xy: 1313, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles1 rotate: false - xy: 491, 371 + xy: 1347, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles2 rotate: false - xy: 559, 405 + xy: 1381, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles3 rotate: false - xy: 457, 303 + xy: 1313, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-salt rotate: false - xy: 491, 337 + xy: 1347, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-editor rotate: false - xy: 491, 337 + xy: 1347, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water1 rotate: false - xy: 491, 303 + xy: 1381, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water2 rotate: false - xy: 525, 337 + xy: 1415, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water3 rotate: false - xy: 559, 371 + xy: 1449, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand1 rotate: false - xy: 525, 371 + xy: 1381, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-editor rotate: false - xy: 525, 371 + xy: 1381, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand2 rotate: false - xy: 593, 405 + xy: 1415, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand3 rotate: false - xy: 457, 269 + xy: 1347, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale1 rotate: false - xy: 491, 269 + xy: 1381, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-editor rotate: false - xy: 491, 269 + xy: 1381, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale2 rotate: false - xy: 525, 303 + xy: 1415, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale3 rotate: false - xy: 559, 337 + xy: 1449, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-slag rotate: false - xy: 593, 371 + xy: 1483, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 slag-icon-editor rotate: false - xy: 593, 371 + xy: 1483, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow1 rotate: false - xy: 525, 269 + xy: 1415, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow2 rotate: false - xy: 559, 303 + xy: 1449, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow3 rotate: false - xy: 593, 337 + xy: 1483, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-space rotate: false - xy: 559, 269 + xy: 1517, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 space-icon-editor rotate: false - xy: 559, 269 + xy: 1517, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spawn rotate: false - xy: 593, 303 + xy: 1449, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss1 rotate: false - xy: 593, 269 + xy: 1483, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-editor rotate: false - xy: 593, 269 + xy: 1483, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss2 rotate: false - xy: 627, 401 + xy: 1517, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss3 rotate: false - xy: 627, 367 + xy: 1483, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone1 rotate: false - xy: 661, 401 + xy: 1517, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-editor rotate: false - xy: 661, 401 + xy: 1517, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone2 rotate: false - xy: 627, 333 + xy: 1517, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone3 rotate: false - xy: 661, 367 + xy: 1551, 457 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tainted-water rotate: false - xy: 695, 401 + xy: 1551, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-editor rotate: false - xy: 695, 401 + xy: 1551, 423 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tar rotate: false - xy: 627, 299 + xy: 1551, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-editor rotate: false - xy: 627, 299 + xy: 1551, 389 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils1 rotate: false - xy: 661, 333 + xy: 1551, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils2 rotate: false - xy: 695, 367 + xy: 1313, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils3 rotate: false - xy: 729, 401 + xy: 1347, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-water rotate: false - xy: 661, 299 + xy: 1381, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-editor rotate: false - xy: 661, 299 + xy: 1381, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 exponential-reconstructor-icon-editor rotate: false - xy: 1, 153 + xy: 1, 133 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 force-projector-icon-editor rotate: false - xy: 325, 213 + xy: 551, 417 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 foreshadow-icon-editor rotate: false - xy: 937, 893 + xy: 1261, 873 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 fuse-icon-editor rotate: false - xy: 615, 665 + xy: 649, 417 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 graphite-press-icon-editor rotate: false - xy: 1073, 729 + xy: 293, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ground-factory-icon-editor rotate: false - xy: 615, 567 + xy: 745, 613 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 hail-icon-editor rotate: false - xy: 695, 333 + xy: 1415, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hyper-processor-icon-editor rotate: false - xy: 713, 665 + xy: 745, 515 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ice-wall-icon-editor rotate: false - xy: 729, 367 + xy: 1449, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-icon-editor rotate: false - xy: 763, 401 + xy: 1483, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 impact-reactor-icon-editor rotate: false - xy: 1067, 893 + xy: 1391, 873 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 incinerator-icon-editor rotate: false - xy: 695, 299 + xy: 1517, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +interplanetary-accelerator-icon-editor + rotate: false + xy: 323, 487 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 inverted-sorter-icon-editor rotate: false - xy: 729, 333 + xy: 1551, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-editor rotate: false - xy: 763, 367 + xy: 1581, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-editor rotate: false - xy: 797, 401 + xy: 1581, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction-icon-editor rotate: false - xy: 729, 299 + xy: 1615, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln-icon-editor rotate: false - xy: 1007, 597 + xy: 359, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-editor rotate: false - xy: 1073, 663 + xy: 1203, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 large-logic-display-icon-editor rotate: false - xy: 323, 539 + xy: 613, 809 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 laser-drill-icon-editor rotate: false - xy: 713, 567 + xy: 747, 417 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-icon-editor rotate: false - xy: 811, 665 + xy: 843, 645 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-large-icon-editor rotate: false - xy: 1197, 893 + xy: 1521, 873 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 liquid-junction-icon-editor rotate: false - xy: 763, 333 + xy: 1615, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-editor rotate: false - xy: 797, 367 + xy: 1649, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-editor rotate: false - xy: 831, 401 + xy: 1649, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-icon-editor rotate: false - xy: 811, 567 + xy: 843, 547 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-void-icon-editor rotate: false - xy: 763, 299 + xy: 1683, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 logic-display-icon-editor rotate: false - xy: 229, 85 + xy: 941, 645 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 logic-processor-icon-editor rotate: false - xy: 1139, 729 + xy: 1203, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mass-driver-icon-editor rotate: false - xy: 327, 115 + xy: 941, 547 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-drill-icon-editor rotate: false - xy: 1073, 597 + xy: 1269, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-pump-icon-editor rotate: false - xy: 797, 333 + xy: 1683, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-icon-editor rotate: false - xy: 1327, 893 + xy: 1651, 873 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 melter-icon-editor rotate: false - xy: 831, 367 + xy: 1717, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 memory-bank-icon-editor rotate: false - xy: 1139, 663 + xy: 1269, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 memory-cell-icon-editor rotate: false - xy: 865, 401 + xy: 1717, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mend-projector-icon-editor rotate: false - xy: 1205, 729 + xy: 1335, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender-icon-editor rotate: false - xy: 797, 299 + xy: 1751, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message-icon-editor rotate: false - xy: 831, 333 + xy: 1751, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 micro-processor-icon-editor rotate: false - xy: 865, 367 + xy: 1785, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press-icon-editor rotate: false - xy: 453, 439 + xy: 845, 449 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 multiplicative-reconstructor-icon-editor rotate: false - xy: 775, 861 + xy: 969, 841 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 naval-factory-icon-editor rotate: false - xy: 551, 439 + xy: 943, 449 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-icon-editor rotate: false - xy: 649, 469 + xy: 1039, 645 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-dome-icon-editor rotate: false - xy: 747, 469 + xy: 1039, 547 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-projector-icon-editor rotate: false - xy: 1139, 597 + xy: 1335, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overflow-gate-icon-editor rotate: false - xy: 831, 299 + xy: 1785, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 parallax-icon-editor rotate: false - xy: 1205, 663 + xy: 1401, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 payload-conveyor-icon-editor rotate: false - xy: 845, 469 + xy: 1041, 449 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-icon-editor rotate: false - xy: 1847, 827 + xy: 1103, 743 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 pebbles-icon-editor rotate: false - xy: 865, 333 + xy: 1819, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-icon-editor rotate: false - xy: 865, 299 + xy: 1819, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-editor rotate: false - xy: 627, 265 + xy: 1853, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-editor rotate: false - xy: 661, 265 + xy: 1853, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large-icon-editor rotate: false - xy: 1271, 729 + xy: 1401, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-editor rotate: false - xy: 1205, 597 + xy: 1467, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pine-icon-editor rotate: false - xy: 1733, 777 + xy: 1385, 593 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 plastanium-compressor-icon-editor rotate: false - xy: 1271, 663 + xy: 1467, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-conveyor-icon-editor rotate: false - xy: 695, 265 + xy: 1887, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-icon-editor rotate: false - xy: 729, 265 + xy: 1887, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-large-icon-editor rotate: false - xy: 1271, 597 + xy: 1533, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plated-conduit-icon-editor rotate: false - xy: 763, 265 + xy: 1921, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-editor rotate: false - xy: 1337, 729 + xy: 1533, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-node-icon-editor rotate: false - xy: 797, 265 + xy: 1921, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-editor rotate: false - xy: 1337, 663 + xy: 1599, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source-icon-editor rotate: false - xy: 831, 265 + xy: 1955, 541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-editor rotate: false - xy: 865, 265 + xy: 1955, 507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-editor rotate: false - xy: 899, 401 + xy: 1585, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-editor rotate: false - xy: 899, 367 + xy: 1585, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-editor rotate: false - xy: 1337, 597 + xy: 1599, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-icon-editor rotate: false - xy: 899, 333 + xy: 1619, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 resupply-point-icon-editor rotate: false - xy: 1009, 531 + xy: 1665, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ripple-icon-editor rotate: false - xy: 1945, 827 + xy: 1201, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 rotary-pump-icon-editor rotate: false - xy: 1075, 531 + xy: 1665, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 router-icon-editor rotate: false - xy: 899, 299 + xy: 1585, 405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-editor rotate: false - xy: 1141, 531 + xy: 1731, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salt-wall-icon-editor rotate: false - xy: 899, 265 + xy: 1619, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-editor rotate: false - xy: 1207, 531 + xy: 1731, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sand-boulder-icon-editor rotate: false - xy: 459, 235 + xy: 1653, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-wall-icon-editor rotate: false - xy: 459, 201 + xy: 1585, 371 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-editor rotate: false - xy: 493, 235 + xy: 1619, 405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-editor rotate: false - xy: 1273, 531 + xy: 1797, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-icon-editor rotate: false - xy: 459, 167 + xy: 1653, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-editor rotate: false - xy: 1457, 893 + xy: 1781, 873 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-huge-icon-editor rotate: false - xy: 907, 763 + xy: 1299, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-icon-editor rotate: false - xy: 493, 201 + xy: 1687, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-editor rotate: false - xy: 1339, 531 + xy: 1797, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 segment-icon-editor rotate: false - xy: 1403, 761 + xy: 1863, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-icon-editor rotate: false - xy: 1403, 695 + xy: 1863, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shale-boulder-icon-editor rotate: false - xy: 527, 235 + xy: 1585, 337 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-wall-icon-editor rotate: false - xy: 493, 167 + xy: 1619, 371 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-editor rotate: false - xy: 527, 201 + xy: 1653, 405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-editor rotate: false - xy: 561, 235 + xy: 1687, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-crucible-icon-editor rotate: false - xy: 909, 665 + xy: 1397, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-smelter-icon-editor rotate: false - xy: 1469, 761 + xy: 1929, 709 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 snow-boulder-icon-editor rotate: false - xy: 1667, 661 + xy: 1435, 593 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-icon-editor rotate: false - xy: 527, 167 + xy: 1721, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-pine-icon-editor rotate: false - xy: 131, 5 + xy: 1485, 593 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-wall-icon-editor rotate: false - xy: 561, 201 + xy: 1619, 337 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-editor rotate: false - xy: 561, 167 + xy: 1653, 371 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-editor rotate: false - xy: 909, 567 + xy: 1495, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 sorter-icon-editor rotate: false - xy: 463, 133 + xy: 1687, 405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-editor rotate: false - xy: 463, 99 + xy: 1721, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spectre-icon-editor rotate: false - xy: 1587, 893 + xy: 1911, 873 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spore-cluster-icon-editor rotate: false - xy: 943, 459 + xy: 1985, 781 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-pine-icon-editor rotate: false - xy: 181, 5 + xy: 1535, 593 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-press-icon-editor rotate: false - xy: 1403, 629 + xy: 1929, 643 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-wall-icon-editor rotate: false - xy: 497, 133 + xy: 1755, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 steam-generator-icon-editor rotate: false - xy: 1469, 695 + xy: 453, 323 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 stone-wall-icon-editor rotate: false - xy: 497, 99 + xy: 1653, 337 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-editor rotate: false - xy: 1535, 761 + xy: 425, 257 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-wall-icon-editor rotate: false - xy: 531, 133 + xy: 1687, 371 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-editor rotate: false - xy: 1469, 629 + xy: 425, 191 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-editor rotate: false - xy: 1535, 695 + xy: 845, 383 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 switch-icon-editor rotate: false - xy: 531, 99 + xy: 1721, 405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tendrils-icon-editor rotate: false - xy: 565, 133 + xy: 1755, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tetrative-reconstructor-icon-editor rotate: false - xy: 323, 733 + xy: 323, 713 size: 288, 288 orig: 288, 288 offset: 0, 0 index: -1 thermal-generator-icon-editor rotate: false - xy: 1601, 761 + xy: 911, 383 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump-icon-editor rotate: false - xy: 1005, 795 + xy: 1593, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-icon-editor rotate: false - xy: 1103, 795 + xy: 1691, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-wall-icon-editor rotate: false - xy: 565, 99 + xy: 1789, 473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-editor rotate: false - xy: 1535, 629 + xy: 977, 383 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thruster-icon-editor rotate: false - xy: 1717, 893 + xy: 323, 357 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 titanium-conveyor-icon-editor rotate: false - xy: 469, 65 + xy: 1687, 337 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-editor rotate: false - xy: 469, 31 + xy: 1721, 371 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-editor rotate: false - xy: 1601, 695 + xy: 1043, 383 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 tsunami-icon-editor rotate: false - xy: 1201, 795 + xy: 1789, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 underflow-gate-icon-editor rotate: false - xy: 503, 65 + xy: 1755, 405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-editor rotate: false - xy: 503, 31 + xy: 1789, 439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-editor rotate: false - xy: 1299, 795 + xy: 1887, 775 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 water-extractor-icon-editor rotate: false - xy: 1667, 761 + xy: 1203, 577 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-icon-editor rotate: false - xy: 1601, 629 + xy: 1269, 577 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 white-tree-dead-icon-editor rotate: false - xy: 1, 701 + xy: 1, 681 size: 320, 320 orig: 320, 320 offset: 0, 0 index: -1 white-tree-icon-editor rotate: false - xy: 1, 379 + xy: 1, 359 size: 320, 320 orig: 320, 320 offset: 0, 0 @@ -13460,7 +14930,7 @@ alpha-bg index: -1 bar rotate: false - xy: 950, 175 + xy: 1455, 469 size: 27, 36 split: 9, 9, 9, 9 orig: 27, 36 @@ -13468,7 +14938,7 @@ bar index: -1 bar-top rotate: false - xy: 950, 213 + xy: 1455, 507 size: 27, 36 split: 9, 10, 9, 10 orig: 27, 36 @@ -13483,21 +14953,21 @@ block-additive-reconstructor-large index: -1 block-additive-reconstructor-medium rotate: false - xy: 1571, 647 + xy: 1185, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-additive-reconstructor-small rotate: false - xy: 2023, 789 + xy: 945, 160 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-additive-reconstructor-tiny rotate: false - xy: 1549, 553 + xy: 301, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13518,21 +14988,21 @@ block-air-factory-large index: -1 block-air-factory-medium rotate: false - xy: 1605, 647 + xy: 1219, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-air-factory-small rotate: false - xy: 1489, 399 + xy: 1081, 189 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-air-factory-tiny rotate: false - xy: 1009, 47 + xy: 319, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13546,28 +15016,28 @@ block-air-factory-xlarge index: -1 block-alloy-smelter-large rotate: false - xy: 651, 283 + xy: 501, 98 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-alloy-smelter-medium rotate: false - xy: 1639, 647 + xy: 1253, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-alloy-smelter-small rotate: false - xy: 950, 115 + xy: 1353, 179 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-alloy-smelter-tiny rotate: false - xy: 301, 1 + xy: 337, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13581,28 +15051,28 @@ block-alloy-smelter-xlarge index: -1 block-arc-large rotate: false - xy: 596, 191 + xy: 651, 241 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-arc-medium rotate: false - xy: 1825, 689 + xy: 1287, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-arc-small rotate: false - xy: 979, 204 + xy: 1421, 247 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-arc-tiny rotate: false - xy: 319, 1 + xy: 331, 598 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13616,28 +15086,28 @@ block-arc-xlarge index: -1 block-armored-conveyor-large rotate: false - xy: 646, 241 + xy: 696, 291 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-armored-conveyor-medium rotate: false - xy: 881, 571 + xy: 1321, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-armored-conveyor-small rotate: false - xy: 979, 178 + xy: 1455, 346 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-armored-conveyor-tiny rotate: false - xy: 337, 1 + xy: 1085, 571 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13649,7499 +15119,7569 @@ block-armored-conveyor-xlarge orig: 48, 48 offset: 0, 0 index: -1 -block-basalt-large +block-basalt-boulder-large rotate: false - xy: 701, 324 + xy: 551, 136 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-basalt-medium +block-basalt-boulder-medium rotate: false - xy: 915, 571 + xy: 1355, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-basalt-small +block-basalt-boulder-small rotate: false - xy: 979, 152 + xy: 1455, 320 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-basalt-tiny +block-basalt-boulder-tiny rotate: false - xy: 1403, 333 + xy: 1449, 146 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-basalt-xlarge +block-basalt-boulder-xlarge rotate: false xy: 51, 478 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-battery-large +block-basalt-large rotate: false - xy: 501, 74 + xy: 601, 174 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-battery-large-large +block-basalt-medium rotate: false - xy: 693, 282 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-battery-large-medium - rotate: false - xy: 877, 537 + xy: 1389, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-battery-large-small +block-basalt-small rotate: false - xy: 1455, 367 + xy: 1455, 294 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-battery-large-tiny +block-basalt-tiny rotate: false - xy: 331, 598 + xy: 2025, 856 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-battery-large-xlarge +block-basalt-xlarge rotate: false xy: 131, 558 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-battery-medium +block-battery-large rotate: false - xy: 911, 537 + xy: 543, 94 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-battery-large-large + rotate: false + xy: 593, 132 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-battery-large-medium + rotate: false + xy: 1071, 589 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-battery-small +block-battery-large-small rotate: false - xy: 1421, 346 + xy: 1455, 268 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-battery-tiny +block-battery-large-tiny rotate: false xy: 309, 672 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-battery-xlarge +block-battery-large-xlarge rotate: false xy: 181, 608 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-blast-drill-large +block-battery-medium rotate: false - xy: 688, 240 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-blast-drill-medium - rotate: false - xy: 877, 503 + xy: 1179, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-blast-drill-small +block-battery-small rotate: false - xy: 485, 6 + xy: 620, 5 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-blast-drill-tiny +block-battery-tiny rotate: false xy: 331, 580 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-blast-drill-xlarge +block-battery-xlarge rotate: false xy: 259, 769 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-blast-mixer-large +block-blast-drill-large rotate: false - xy: 451, 35 + xy: 585, 90 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-blast-mixer-medium +block-blast-drill-medium rotate: false - xy: 911, 503 + xy: 1213, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-blast-mixer-small +block-blast-drill-small rotate: false - xy: 1013, 325 + xy: 646, 5 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-blast-mixer-tiny +block-blast-drill-tiny rotate: false - xy: 1681, 345 + xy: 1553, 707 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-blast-mixer-xlarge +block-blast-drill-xlarge rotate: false xy: 1, 378 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-block-forge-large +block-blast-mixer-large rotate: false - xy: 493, 32 + xy: 501, 56 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-block-forge-medium +block-blast-mixer-medium rotate: false - xy: 877, 469 + xy: 1247, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-block-forge-small +block-blast-mixer-small rotate: false - xy: 1039, 325 + xy: 672, 5 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-block-forge-tiny +block-blast-mixer-tiny rotate: false xy: 355, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-block-forge-xlarge +block-blast-mixer-xlarge rotate: false xy: 51, 428 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-block-loader-large +block-block-forge-large rotate: false - xy: 401, 8 + xy: 543, 52 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-block-loader-medium +block-block-forge-medium rotate: false - xy: 911, 469 + xy: 1281, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-block-loader-small +block-block-forge-small rotate: false - xy: 1065, 325 + xy: 698, 5 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-block-loader-tiny +block-block-forge-tiny rotate: false xy: 373, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-block-loader-xlarge +block-block-forge-xlarge rotate: false xy: 181, 558 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-block-unloader-large +block-block-loader-large rotate: false - xy: 551, 91 + xy: 585, 48 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-block-unloader-medium +block-block-loader-medium rotate: false - xy: 877, 435 + xy: 1315, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-block-unloader-small +block-block-loader-small rotate: false - xy: 1091, 325 + xy: 724, 5 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-block-unloader-tiny +block-block-loader-tiny rotate: false - xy: 1421, 328 + xy: 391, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-block-unloader-xlarge +block-block-loader-xlarge rotate: false xy: 259, 719 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-boulder-large +block-block-unloader-large rotate: false - xy: 751, 536 + xy: 651, 199 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-boulder-medium +block-block-unloader-medium rotate: false - xy: 911, 435 + xy: 1349, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-boulder-small +block-block-unloader-small rotate: false - xy: 1117, 325 + xy: 1387, 192 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-boulder-tiny +block-block-unloader-tiny rotate: false - xy: 1403, 315 + xy: 409, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-boulder-xlarge +block-block-unloader-xlarge rotate: false xy: 1, 328 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-bridge-conduit-large +block-boulder-large rotate: false - xy: 751, 494 + xy: 494, 14 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-bridge-conduit-medium +block-boulder-medium rotate: false - xy: 877, 401 + xy: 1383, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-bridge-conduit-small +block-boulder-small rotate: false - xy: 1143, 325 + xy: 1447, 242 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-bridge-conduit-tiny +block-boulder-tiny rotate: false - xy: 1421, 310 + xy: 427, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-bridge-conduit-xlarge +block-boulder-xlarge rotate: false xy: 51, 378 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-bridge-conveyor-large +block-bridge-conduit-large rotate: false - xy: 793, 536 + xy: 536, 10 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-bridge-conveyor-medium +block-bridge-conduit-medium rotate: false - xy: 911, 401 + xy: 1423, 647 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-bridge-conveyor-small +block-bridge-conduit-small rotate: false - xy: 1169, 325 + xy: 1457, 669 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-bridge-conveyor-tiny +block-bridge-conduit-tiny rotate: false - xy: 1371, 307 + xy: 445, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-bridge-conveyor-xlarge +block-bridge-conduit-xlarge rotate: false xy: 259, 669 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-char-large +block-bridge-conveyor-large rotate: false - xy: 751, 452 + xy: 578, 6 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-char-medium +block-bridge-conveyor-medium rotate: false - xy: 1673, 647 + xy: 1417, 613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-char-small +block-bridge-conveyor-small rotate: false - xy: 1195, 325 + xy: 1483, 668 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-char-tiny +block-bridge-conveyor-tiny rotate: false - xy: 1373, 289 + xy: 463, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-char-xlarge +block-bridge-conveyor-xlarge rotate: false xy: 1, 278 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cliff-large +block-char-large rotate: false - xy: 793, 494 + xy: 643, 157 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cliff-medium +block-char-medium rotate: false - xy: 1707, 649 + xy: 881, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cliff-small +block-char-small rotate: false - xy: 1221, 325 + xy: 1509, 668 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cliff-tiny +block-char-tiny rotate: false - xy: 1373, 271 + xy: 1107, 6 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cliff-xlarge +block-char-xlarge rotate: false xy: 51, 328 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-coal-centrifuge-large +block-cliff-large rotate: false - xy: 835, 536 + xy: 635, 115 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-coal-centrifuge-medium +block-cliff-medium rotate: false - xy: 1741, 658 + xy: 915, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-coal-centrifuge-small +block-cliff-small rotate: false - xy: 1007, 299 + xy: 1141, 6 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-coal-centrifuge-tiny +block-cliff-tiny rotate: false - xy: 1373, 253 + xy: 1561, 677 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-coal-centrifuge-xlarge +block-cliff-xlarge rotate: false xy: 1, 228 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-combustion-generator-large +block-coal-centrifuge-large rotate: false - xy: 751, 410 + xy: 627, 73 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-combustion-generator-medium +block-coal-centrifuge-medium rotate: false - xy: 1909, 731 + xy: 949, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-combustion-generator-small +block-coal-centrifuge-small rotate: false - xy: 1033, 299 + xy: 1167, 6 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-combustion-generator-tiny +block-coal-centrifuge-tiny rotate: false - xy: 1373, 235 + xy: 1579, 677 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-combustion-generator-xlarge +block-coal-centrifuge-xlarge rotate: false xy: 51, 278 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-command-center-large +block-combustion-generator-large rotate: false - xy: 793, 452 + xy: 627, 31 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-command-center-medium +block-combustion-generator-medium rotate: false - xy: 1867, 709 + xy: 983, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-command-center-small +block-combustion-generator-small rotate: false - xy: 1059, 299 + xy: 1193, 6 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-command-center-tiny +block-combustion-generator-tiny rotate: false - xy: 1439, 323 + xy: 1597, 677 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-command-center-xlarge +block-combustion-generator-xlarge rotate: false xy: 1, 178 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-conduit-large +block-command-center-large rotate: false - xy: 835, 494 + xy: 751, 536 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-conduit-medium +block-command-center-medium rotate: false - xy: 1499, 597 + xy: 1017, 560 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-conduit-small +block-command-center-small rotate: false - xy: 1085, 299 + xy: 1319, 153 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-conduit-tiny +block-command-center-tiny rotate: false - xy: 1457, 323 + xy: 1615, 677 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-conduit-xlarge +block-command-center-xlarge rotate: false xy: 51, 228 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-container-large +block-conduit-large rotate: false - xy: 751, 368 + xy: 751, 494 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-container-medium +block-conduit-medium rotate: false - xy: 1951, 749 + xy: 877, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-container-small +block-conduit-small rotate: false - xy: 1111, 299 + xy: 1345, 153 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-container-tiny +block-conduit-tiny rotate: false - xy: 1475, 323 + xy: 1563, 659 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-container-xlarge +block-conduit-xlarge rotate: false xy: 1, 128 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-conveyor-large +block-container-large rotate: false - xy: 793, 410 + xy: 793, 536 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-conveyor-medium +block-container-medium rotate: false - xy: 1007, 589 + xy: 877, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-conveyor-small +block-container-small rotate: false - xy: 1137, 299 + xy: 1473, 242 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-conveyor-tiny +block-container-tiny rotate: false - xy: 1493, 323 + xy: 1563, 641 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-conveyor-xlarge +block-container-xlarge rotate: false xy: 51, 178 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-copper-wall-large +block-conveyor-large rotate: false - xy: 835, 452 + xy: 751, 452 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-copper-wall-large-large +block-conveyor-medium rotate: false - xy: 793, 368 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-copper-wall-large-medium - rotate: false - xy: 1041, 589 + xy: 911, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-copper-wall-large-small +block-conveyor-small rotate: false - xy: 1163, 299 + xy: 1209, 142 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-copper-wall-large-tiny +block-conveyor-tiny rotate: false - xy: 1439, 305 + xy: 1581, 659 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-copper-wall-large-xlarge +block-conveyor-xlarge rotate: false xy: 1, 78 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-copper-wall-medium +block-copper-wall-large rotate: false - xy: 1075, 589 + xy: 793, 494 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-copper-wall-large-large + rotate: false + xy: 835, 536 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-copper-wall-large-medium + rotate: false + xy: 877, 458 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-copper-wall-small +block-copper-wall-large-small rotate: false - xy: 1189, 299 + xy: 1209, 116 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-copper-wall-tiny +block-copper-wall-large-tiny rotate: false - xy: 1457, 305 + xy: 1563, 623 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-copper-wall-xlarge +block-copper-wall-large-xlarge rotate: false xy: 51, 128 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-core-foundation-large +block-copper-wall-medium rotate: false - xy: 835, 410 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-core-foundation-medium - rotate: false - xy: 1109, 589 + xy: 945, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-core-foundation-small +block-copper-wall-small rotate: false - xy: 1215, 299 + xy: 1209, 90 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-core-foundation-tiny +block-copper-wall-tiny rotate: false - xy: 1475, 305 + xy: 1599, 659 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-core-foundation-xlarge +block-copper-wall-xlarge rotate: false xy: 1, 28 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-core-nucleus-large +block-core-foundation-large rotate: false - xy: 835, 368 + xy: 751, 410 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-core-nucleus-medium +block-core-foundation-medium rotate: false - xy: 1143, 589 + xy: 911, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-core-nucleus-small +block-core-foundation-small rotate: false - xy: 1009, 273 + xy: 1209, 64 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-core-nucleus-tiny +block-core-foundation-tiny rotate: false - xy: 1493, 305 + xy: 1581, 641 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-core-nucleus-xlarge +block-core-foundation-xlarge rotate: false xy: 51, 78 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-core-shard-large +block-core-nucleus-large rotate: false - xy: 646, 199 + xy: 793, 452 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-core-shard-medium +block-core-nucleus-medium rotate: false - xy: 1177, 589 + xy: 877, 424 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-core-shard-small +block-core-nucleus-small rotate: false - xy: 1009, 247 + xy: 1209, 38 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-core-shard-tiny +block-core-nucleus-tiny rotate: false - xy: 2029, 661 + xy: 1563, 605 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-core-shard-xlarge +block-core-nucleus-xlarge rotate: false xy: 51, 28 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-craters-large +block-core-shard-large rotate: false - xy: 688, 198 + xy: 835, 494 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-craters-medium +block-core-shard-medium rotate: false - xy: 1211, 589 + xy: 979, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-craters-small +block-core-shard-small rotate: false - xy: 1035, 273 + xy: 1235, 145 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-craters-tiny +block-core-shard-tiny rotate: false - xy: 1365, 47 + xy: 1581, 623 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-craters-xlarge +block-core-shard-xlarge rotate: false xy: 857, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cryofluid-mixer-large +block-craters-large rotate: false - xy: 543, 49 + xy: 793, 410 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cryofluid-mixer-medium +block-craters-medium rotate: false - xy: 1245, 589 + xy: 945, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cryofluid-mixer-small +block-craters-small rotate: false - xy: 1035, 247 + xy: 1235, 119 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cryofluid-mixer-tiny +block-craters-tiny rotate: false - xy: 1365, 29 + xy: 1599, 641 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cryofluid-mixer-xlarge +block-craters-xlarge rotate: false xy: 907, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cultivator-large +block-cryofluid-mixer-large rotate: false - xy: 535, 7 + xy: 835, 452 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cultivator-medium +block-cryofluid-mixer-medium rotate: false - xy: 1279, 589 + xy: 911, 458 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cultivator-small +block-cryofluid-mixer-small rotate: false - xy: 1061, 273 + xy: 1261, 145 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cultivator-tiny +block-cryofluid-mixer-tiny rotate: false - xy: 1365, 11 + xy: 1563, 587 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cultivator-xlarge +block-cryofluid-mixer-xlarge rotate: false xy: 957, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cyclone-large +block-cultivator-large rotate: false - xy: 596, 149 + xy: 835, 410 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cyclone-medium +block-cultivator-medium rotate: false - xy: 1313, 589 + xy: 877, 390 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cyclone-small +block-cultivator-small rotate: false - xy: 1061, 247 + xy: 1235, 93 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cyclone-tiny +block-cultivator-tiny rotate: false - xy: 2030, 883 + xy: 1581, 605 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cyclone-xlarge +block-cultivator-xlarge rotate: false xy: 1007, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dacite-boulder-large +block-cyclone-large rotate: false - xy: 638, 157 + xy: 751, 368 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dacite-boulder-medium +block-cyclone-medium rotate: false - xy: 1347, 589 + xy: 1013, 526 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dacite-boulder-small +block-cyclone-small rotate: false - xy: 1087, 273 + xy: 1261, 119 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dacite-boulder-tiny +block-cyclone-tiny rotate: false - xy: 2030, 865 + xy: 1599, 623 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dacite-boulder-xlarge +block-cyclone-xlarge rotate: false xy: 1057, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dacite-large +block-dacite-boulder-large rotate: false - xy: 680, 156 + xy: 793, 368 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dacite-medium +block-dacite-boulder-medium rotate: false - xy: 1381, 589 + xy: 979, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dacite-small +block-dacite-boulder-small rotate: false - xy: 1087, 247 + xy: 1287, 145 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dacite-tiny +block-dacite-boulder-tiny rotate: false - xy: 1373, 217 + xy: 1563, 569 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dacite-wall-large - rotate: false - xy: 594, 107 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dacite-wall-medium - rotate: false - xy: 1415, 589 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-dacite-wall-small - rotate: false - xy: 1113, 273 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-dacite-wall-tiny - rotate: false - xy: 1697, 397 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-dacite-wall-xlarge +block-dacite-boulder-xlarge rotate: false xy: 1107, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dacite-xlarge +block-dacite-large + rotate: false + xy: 835, 368 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dacite-medium + rotate: false + xy: 945, 458 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dacite-small + rotate: false + xy: 1235, 67 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dacite-tiny + rotate: false + xy: 1581, 587 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dacite-wall-large + rotate: false + xy: 746, 326 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dacite-wall-medium + rotate: false + xy: 911, 424 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dacite-wall-small + rotate: false + xy: 1261, 93 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dacite-wall-tiny + rotate: false + xy: 1599, 605 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dacite-wall-xlarge rotate: false xy: 1157, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-metal-large - rotate: false - xy: 593, 65 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dark-metal-medium - rotate: false - xy: 949, 571 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-dark-metal-small - rotate: false - xy: 1113, 247 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-dark-metal-tiny - rotate: false - xy: 1697, 379 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-dark-metal-xlarge +block-dacite-xlarge rotate: false xy: 1207, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-1-large +block-dark-metal-large rotate: false - xy: 638, 115 + xy: 788, 326 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-1-medium +block-dark-metal-medium rotate: false - xy: 945, 537 + xy: 1013, 492 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-1-small +block-dark-metal-small rotate: false - xy: 1139, 273 + xy: 1287, 119 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-1-tiny +block-dark-metal-tiny rotate: false - xy: 1347, 209 + xy: 1563, 551 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-1-xlarge +block-dark-metal-xlarge rotate: false xy: 1257, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-2-large +block-dark-panel-1-large rotate: false - xy: 680, 114 + xy: 830, 326 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-2-medium +block-dark-panel-1-medium rotate: false - xy: 945, 503 + xy: 979, 458 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-2-small +block-dark-panel-1-small rotate: false - xy: 1139, 247 + xy: 1235, 41 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-2-tiny +block-dark-panel-1-tiny rotate: false - xy: 1343, 191 + xy: 1581, 569 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-2-xlarge +block-dark-panel-1-xlarge rotate: false xy: 1307, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-3-large +block-dark-panel-2-large rotate: false - xy: 743, 324 + xy: 738, 284 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-3-medium +block-dark-panel-2-medium rotate: false - xy: 945, 469 + xy: 945, 424 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-3-small +block-dark-panel-2-small rotate: false - xy: 1165, 273 + xy: 1261, 67 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-3-tiny +block-dark-panel-2-tiny rotate: false - xy: 1343, 173 + xy: 1599, 587 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-3-xlarge +block-dark-panel-2-xlarge rotate: false xy: 1357, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-4-large +block-dark-panel-3-large rotate: false - xy: 735, 282 + xy: 780, 284 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-4-medium +block-dark-panel-3-medium rotate: false - xy: 945, 435 + xy: 911, 390 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-4-small +block-dark-panel-3-small rotate: false - xy: 1165, 247 + xy: 1287, 93 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-4-tiny +block-dark-panel-3-tiny rotate: false - xy: 1343, 155 + xy: 1563, 533 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-4-xlarge +block-dark-panel-3-xlarge rotate: false xy: 1407, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-5-large +block-dark-panel-4-large rotate: false - xy: 730, 240 + xy: 822, 284 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-5-medium +block-dark-panel-4-medium rotate: false - xy: 945, 401 + xy: 1013, 458 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-5-small +block-dark-panel-4-small rotate: false - xy: 1191, 273 + xy: 1261, 41 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-5-tiny +block-dark-panel-4-tiny rotate: false - xy: 1343, 137 + xy: 1563, 515 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-5-xlarge +block-dark-panel-4-xlarge rotate: false xy: 1457, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-6-large +block-dark-panel-5-large rotate: false - xy: 730, 198 + xy: 696, 249 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-6-medium +block-dark-panel-5-medium rotate: false - xy: 1901, 697 + xy: 979, 424 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-6-small +block-dark-panel-5-small rotate: false - xy: 1191, 247 + xy: 1287, 67 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-6-tiny +block-dark-panel-5-tiny rotate: false - xy: 1343, 119 + xy: 1581, 551 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-6-xlarge +block-dark-panel-5-xlarge rotate: false xy: 1507, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-darksand-large +block-dark-panel-6-large rotate: false - xy: 722, 156 + xy: 693, 207 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-darksand-medium +block-dark-panel-6-medium rotate: false - xy: 1859, 675 + xy: 945, 390 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-darksand-small +block-dark-panel-6-small rotate: false - xy: 1217, 273 + xy: 1287, 41 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-darksand-tainted-water-large +block-dark-panel-6-tiny rotate: false - xy: 722, 114 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-darksand-tainted-water-medium - rotate: false - xy: 1893, 663 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-darksand-tainted-water-small - rotate: false - xy: 1217, 247 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-darksand-tainted-water-tiny - rotate: false - xy: 1655, 324 + xy: 1599, 569 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-darksand-tainted-water-xlarge +block-dark-panel-6-xlarge rotate: false xy: 1557, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-darksand-tiny +block-darksand-large rotate: false - xy: 1652, 306 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-darksand-water-large - rotate: false - xy: 785, 326 + xy: 738, 242 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-darksand-water-medium +block-darksand-medium rotate: false - xy: 1943, 715 + xy: 1013, 424 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-darksand-water-small +block-darksand-small rotate: false - xy: 1009, 221 + xy: 1313, 127 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-darksand-water-tiny +block-darksand-tainted-water-large rotate: false - xy: 1673, 324 + xy: 780, 242 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-darksand-tainted-water-medium + rotate: false + xy: 979, 390 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-darksand-tainted-water-small + rotate: false + xy: 1313, 101 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-darksand-tainted-water-tiny + rotate: false + xy: 1581, 533 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-darksand-water-xlarge +block-darksand-tainted-water-xlarge rotate: false xy: 1607, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-darksand-xlarge +block-darksand-tiny + rotate: false + xy: 1581, 515 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-darksand-water-large + rotate: false + xy: 822, 242 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-darksand-water-medium + rotate: false + xy: 1013, 390 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-darksand-water-small + rotate: false + xy: 1339, 127 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-darksand-water-tiny + rotate: false + xy: 1599, 551 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-darksand-water-xlarge rotate: false xy: 1657, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-deepwater-large - rotate: false - xy: 827, 326 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-deepwater-medium - rotate: false - xy: 1935, 681 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-deepwater-small - rotate: false - xy: 1035, 221 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-deepwater-tiny - rotate: false - xy: 1670, 306 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-deepwater-xlarge +block-darksand-xlarge rotate: false xy: 1707, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-differential-generator-large +block-deepwater-large rotate: false - xy: 577, 7 + xy: 735, 200 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-differential-generator-medium +block-deepwater-medium rotate: false - xy: 1927, 647 + xy: 914, 356 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-differential-generator-small +block-deepwater-small rotate: false - xy: 1061, 221 + xy: 1313, 75 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-differential-generator-tiny +block-deepwater-tiny rotate: false - xy: 1691, 327 + xy: 1599, 533 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-differential-generator-xlarge +block-deepwater-xlarge rotate: false xy: 1757, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-diode-large +block-differential-generator-large rotate: false - xy: 777, 282 + xy: 777, 200 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-diode-medium +block-differential-generator-medium rotate: false - xy: 1741, 624 + xy: 948, 356 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-diode-small +block-differential-generator-small rotate: false - xy: 1087, 221 + xy: 1339, 101 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-diode-tiny +block-differential-generator-tiny rotate: false - xy: 1511, 319 + xy: 1599, 515 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-diode-xlarge +block-differential-generator-xlarge rotate: false xy: 1807, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dirt-large +block-diode-large rotate: false - xy: 772, 240 + xy: 819, 200 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dirt-medium +block-diode-medium rotate: false - xy: 1707, 615 + xy: 982, 356 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dirt-small +block-diode-small rotate: false - xy: 1113, 221 + xy: 1313, 49 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dirt-tiny +block-diode-tiny rotate: false - xy: 1529, 319 + xy: 1588, 497 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dirt-wall-large - rotate: false - xy: 772, 198 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dirt-wall-medium - rotate: false - xy: 1741, 590 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-dirt-wall-small - rotate: false - xy: 1139, 221 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-dirt-wall-tiny - rotate: false - xy: 1547, 319 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-dirt-wall-xlarge +block-diode-xlarge rotate: false xy: 1857, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dirt-xlarge +block-dirt-large + rotate: false + xy: 693, 165 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dirt-medium + rotate: false + xy: 1016, 356 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dirt-small + rotate: false + xy: 1339, 75 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dirt-tiny + rotate: false + xy: 1588, 479 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dirt-wall-large + rotate: false + xy: 735, 158 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dirt-wall-medium + rotate: false + xy: 1105, 568 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dirt-wall-small + rotate: false + xy: 1339, 49 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dirt-wall-tiny + rotate: false + xy: 1588, 461 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dirt-wall-xlarge rotate: false xy: 1907, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-disassembler-large - rotate: false - xy: 764, 156 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-disassembler-medium - rotate: false - xy: 1993, 815 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-disassembler-small - rotate: false - xy: 1165, 221 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-disassembler-tiny - rotate: false - xy: 1511, 301 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-disassembler-xlarge +block-dirt-xlarge rotate: false xy: 1957, 975 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-distributor-large +block-disassembler-large rotate: false - xy: 764, 114 + xy: 777, 158 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-distributor-medium +block-disassembler-medium rotate: false - xy: 1989, 781 + xy: 1051, 555 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-distributor-small +block-disassembler-small rotate: false - xy: 1191, 221 + xy: 1219, 12 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-distributor-tiny +block-disassembler-tiny rotate: false - xy: 1529, 301 + xy: 1588, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-distributor-xlarge +block-disassembler-xlarge rotate: false xy: 345, 866 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-door-large +block-distributor-large rotate: false - xy: 819, 284 + xy: 819, 158 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-door-large-large - rotate: false - xy: 869, 326 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-door-large-medium - rotate: false - xy: 1985, 747 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-door-large-small - rotate: false - xy: 1217, 221 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-door-large-tiny - rotate: false - xy: 1547, 301 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-door-large-xlarge - rotate: false - xy: 395, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-door-medium - rotate: false - xy: 1977, 713 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-door-small - rotate: false - xy: 1005, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-door-tiny - rotate: false - xy: 1565, 307 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-door-xlarge - rotate: false - xy: 445, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-dune-wall-large - rotate: false - xy: 861, 284 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dune-wall-medium - rotate: false - xy: 1969, 679 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-dune-wall-small - rotate: false - xy: 1005, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-dune-wall-tiny - rotate: false - xy: 1583, 307 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-dune-wall-xlarge - rotate: false - xy: 495, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-duo-large - rotate: false - xy: 806, 156 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-duo-medium - rotate: false - xy: 1961, 645 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-duo-small - rotate: false - xy: 1031, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-duo-tiny - rotate: false - xy: 1601, 298 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-duo-xlarge - rotate: false - xy: 545, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-exponential-reconstructor-large - rotate: false - xy: 806, 114 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-exponential-reconstructor-medium - rotate: false - xy: 1775, 658 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-exponential-reconstructor-small - rotate: false - xy: 1031, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-exponential-reconstructor-tiny - rotate: false - xy: 1565, 289 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-exponential-reconstructor-xlarge - rotate: false - xy: 595, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-force-projector-large - rotate: false - xy: 903, 284 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-force-projector-medium - rotate: false - xy: 1775, 624 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-force-projector-small - rotate: false - xy: 1057, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-force-projector-tiny - rotate: false - xy: 1583, 289 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-force-projector-xlarge - rotate: false - xy: 645, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-foreshadow-large - rotate: false - xy: 821, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-foreshadow-medium - rotate: false - xy: 1775, 590 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-foreshadow-small - rotate: false - xy: 1057, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-foreshadow-tiny - rotate: false - xy: 1601, 280 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-foreshadow-xlarge - rotate: false - xy: 695, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-fuse-large - rotate: false - xy: 863, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-fuse-medium - rotate: false - xy: 1809, 655 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-fuse-small - rotate: false - xy: 1083, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-fuse-tiny - rotate: false - xy: 1619, 293 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-fuse-xlarge - rotate: false - xy: 101, 478 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-graphite-press-large - rotate: false - xy: 905, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-graphite-press-medium - rotate: false - xy: 1809, 621 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-graphite-press-small - rotate: false - xy: 1083, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-graphite-press-tiny - rotate: false - xy: 1619, 275 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-graphite-press-xlarge - rotate: false - xy: 101, 428 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-grass-large - rotate: false - xy: 947, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-grass-medium - rotate: false - xy: 1809, 587 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-grass-small - rotate: false - xy: 1109, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-grass-tiny - rotate: false - xy: 1361, 191 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-grass-xlarge - rotate: false - xy: 101, 378 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ground-factory-large - rotate: false - xy: 989, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ground-factory-medium - rotate: false - xy: 1843, 641 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ground-factory-small - rotate: false - xy: 1109, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ground-factory-tiny - rotate: false - xy: 1361, 173 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ground-factory-xlarge - rotate: false - xy: 101, 328 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-hail-large - rotate: false - xy: 1031, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-hail-medium - rotate: false - xy: 1843, 607 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-hail-small - rotate: false - xy: 1135, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-hail-tiny - rotate: false - xy: 1361, 155 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-hail-xlarge - rotate: false - xy: 101, 278 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-hotrock-large - rotate: false - xy: 1073, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-hotrock-medium - rotate: false - xy: 1843, 573 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-hotrock-small - rotate: false - xy: 1135, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-hotrock-tiny - rotate: false - xy: 1361, 137 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-hotrock-xlarge - rotate: false - xy: 101, 228 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-hyper-processor-large - rotate: false - xy: 1115, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-hyper-processor-medium - rotate: false - xy: 1877, 629 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-hyper-processor-small - rotate: false - xy: 1161, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-hyper-processor-tiny - rotate: false - xy: 1361, 119 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-hyper-processor-xlarge - rotate: false - xy: 101, 178 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ice-large - rotate: false - xy: 1157, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ice-medium - rotate: false - xy: 1877, 595 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ice-small - rotate: false - xy: 1161, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ice-snow-large - rotate: false - xy: 1199, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ice-snow-medium - rotate: false - xy: 1877, 561 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ice-snow-small - rotate: false - xy: 1187, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ice-snow-tiny - rotate: false - xy: 1366, 101 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ice-snow-xlarge - rotate: false - xy: 101, 128 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ice-tiny - rotate: false - xy: 1379, 199 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ice-wall-large - rotate: false - xy: 1241, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ice-wall-medium - rotate: false - xy: 1911, 613 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ice-wall-small - rotate: false - xy: 1187, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ice-wall-tiny - rotate: false - xy: 1379, 181 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ice-wall-xlarge - rotate: false - xy: 101, 78 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ice-xlarge - rotate: false - xy: 101, 28 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-illuminator-large - rotate: false - xy: 1283, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-illuminator-medium - rotate: false - xy: 1911, 579 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-illuminator-small - rotate: false - xy: 1213, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-illuminator-tiny - rotate: false - xy: 1379, 163 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-illuminator-xlarge - rotate: false - xy: 231, 608 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-impact-reactor-large - rotate: false - xy: 1325, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-impact-reactor-medium - rotate: false - xy: 1945, 611 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-impact-reactor-small - rotate: false - xy: 1213, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-impact-reactor-tiny - rotate: false - xy: 1379, 145 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-impact-reactor-xlarge - rotate: false - xy: 231, 558 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-incinerator-large - rotate: false - xy: 1367, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-incinerator-medium - rotate: false - xy: 1945, 577 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-incinerator-small - rotate: false - xy: 1005, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-incinerator-tiny - rotate: false - xy: 1379, 127 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-incinerator-xlarge - rotate: false - xy: 745, 866 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-inverted-sorter-large - rotate: false - xy: 1409, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-inverted-sorter-medium - rotate: false - xy: 1911, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-inverted-sorter-small - rotate: false - xy: 1031, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-inverted-sorter-tiny - rotate: false - xy: 1384, 109 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-inverted-sorter-xlarge - rotate: false - xy: 151, 508 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-item-source-large - rotate: false - xy: 1451, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-item-source-medium - rotate: false - xy: 1945, 543 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-item-source-small - rotate: false - xy: 1057, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-item-source-tiny - rotate: false - xy: 1384, 91 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-item-source-xlarge - rotate: false - xy: 151, 458 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-item-void-large - rotate: false - xy: 1493, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-item-void-medium - rotate: false - xy: 1979, 611 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-item-void-small - rotate: false - xy: 1083, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-item-void-tiny - rotate: false - xy: 1373, 73 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-item-void-xlarge - rotate: false - xy: 201, 508 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-junction-large - rotate: false - xy: 1535, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-junction-medium - rotate: false - xy: 1979, 577 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-junction-small - rotate: false - xy: 1109, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-junction-tiny - rotate: false - xy: 1391, 73 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-junction-xlarge - rotate: false - xy: 151, 408 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-kiln-large - rotate: false - xy: 1577, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-kiln-medium - rotate: false - xy: 1979, 543 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-kiln-small - rotate: false - xy: 1135, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-kiln-tiny - rotate: false - xy: 1383, 55 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-kiln-xlarge - rotate: false - xy: 201, 458 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-lancer-large - rotate: false - xy: 1619, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-lancer-medium - rotate: false - xy: 1995, 645 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-lancer-small - rotate: false - xy: 1161, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-lancer-tiny - rotate: false - xy: 1383, 37 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-lancer-xlarge - rotate: false - xy: 151, 358 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-large-logic-display-large - rotate: false - xy: 1661, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-large-logic-display-medium - rotate: false - xy: 2003, 679 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-large-logic-display-small - rotate: false - xy: 1187, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-large-logic-display-tiny - rotate: false - xy: 1383, 19 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-large-logic-display-xlarge - rotate: false - xy: 201, 408 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-laser-drill-large - rotate: false - xy: 1703, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-laser-drill-medium - rotate: false - xy: 2011, 713 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-laser-drill-small - rotate: false - xy: 1213, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-laser-drill-tiny - rotate: false - xy: 1383, 1 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-laser-drill-xlarge - rotate: false - xy: 151, 308 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-launch-pad-large - rotate: false - xy: 1745, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-launch-pad-large-large - rotate: false - xy: 1787, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-launch-pad-large-medium - rotate: false - xy: 2013, 611 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-launch-pad-large-small - rotate: false - xy: 979, 126 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-launch-pad-large-tiny - rotate: false - xy: 1401, 55 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-launch-pad-large-xlarge - rotate: false - xy: 201, 358 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-launch-pad-medium - rotate: false - xy: 2013, 577 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-launch-pad-small - rotate: false - xy: 976, 100 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-launch-pad-tiny - rotate: false - xy: 1401, 37 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-launch-pad-xlarge - rotate: false - xy: 151, 258 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-liquid-junction-large - rotate: false - xy: 1829, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-liquid-junction-medium - rotate: false - xy: 2013, 543 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-liquid-junction-small - rotate: false - xy: 1005, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-liquid-junction-tiny - rotate: false - xy: 1401, 19 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-liquid-junction-xlarge - rotate: false - xy: 201, 308 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-liquid-router-large - rotate: false - xy: 1871, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-liquid-router-medium - rotate: false - xy: 1536, 605 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-liquid-router-small - rotate: false - xy: 1031, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-liquid-router-tiny - rotate: false - xy: 1401, 1 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-liquid-router-xlarge - rotate: false - xy: 151, 208 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-liquid-source-large - rotate: false - xy: 1913, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-liquid-source-medium - rotate: false - xy: 1571, 613 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-liquid-source-small - rotate: false - xy: 1057, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-liquid-source-tiny - rotate: false - xy: 1703, 561 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-liquid-source-xlarge - rotate: false - xy: 201, 258 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-liquid-tank-large - rotate: false - xy: 1955, 933 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-liquid-tank-medium - rotate: false - xy: 1605, 613 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-liquid-tank-small - rotate: false - xy: 1083, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-liquid-tank-tiny - rotate: false - xy: 1721, 563 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-liquid-tank-xlarge - rotate: false - xy: 151, 158 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-liquid-void-large - rotate: false - xy: 845, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-liquid-void-medium - rotate: false - xy: 1639, 613 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-liquid-void-small - rotate: false - xy: 1109, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-liquid-void-tiny - rotate: false - xy: 1688, 306 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-liquid-void-xlarge - rotate: false - xy: 201, 208 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-logic-display-large - rotate: false - xy: 887, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-logic-display-medium - rotate: false - xy: 1673, 613 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-logic-display-small - rotate: false - xy: 1135, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-logic-display-tiny - rotate: false - xy: 1637, 288 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-logic-display-xlarge - rotate: false - xy: 151, 108 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-logic-processor-large - rotate: false - xy: 929, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-logic-processor-medium - rotate: false - xy: 1707, 581 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-logic-processor-small - rotate: false - xy: 1161, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-logic-processor-tiny - rotate: false - xy: 1655, 288 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-logic-processor-xlarge - rotate: false - xy: 201, 158 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-magmarock-large - rotate: false - xy: 971, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-magmarock-medium - rotate: false - xy: 1741, 556 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-magmarock-small - rotate: false - xy: 1187, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-magmarock-tiny - rotate: false - xy: 1673, 288 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-magmarock-xlarge - rotate: false - xy: 151, 58 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-mass-driver-large - rotate: false - xy: 1013, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-mass-driver-medium - rotate: false - xy: 1775, 556 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-mass-driver-small - rotate: false - xy: 1213, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-mass-driver-tiny - rotate: false - xy: 1691, 288 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-mass-driver-xlarge - rotate: false - xy: 201, 108 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-mechanical-drill-large - rotate: false - xy: 1055, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-mechanical-drill-medium - rotate: false - xy: 1809, 553 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-mechanical-drill-small - rotate: false - xy: 1002, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-mechanical-drill-tiny - rotate: false - xy: 1637, 270 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-mechanical-drill-xlarge - rotate: false - xy: 201, 58 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-mechanical-pump-large - rotate: false - xy: 1097, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-mechanical-pump-medium - rotate: false - xy: 1843, 539 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-mechanical-pump-small - rotate: false - xy: 1028, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-mechanical-pump-tiny - rotate: false - xy: 1655, 270 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-mechanical-pump-xlarge - rotate: false - xy: 251, 508 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-meltdown-large - rotate: false - xy: 1139, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-meltdown-medium - rotate: false - xy: 1877, 527 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-meltdown-small - rotate: false - xy: 1054, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-meltdown-tiny - rotate: false - xy: 1673, 270 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-meltdown-xlarge - rotate: false - xy: 251, 458 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-melter-large - rotate: false - xy: 1181, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-melter-medium - rotate: false - xy: 1911, 511 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-melter-small - rotate: false - xy: 1080, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-melter-tiny - rotate: false - xy: 1691, 270 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-melter-xlarge - rotate: false - xy: 251, 408 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-memory-bank-large - rotate: false - xy: 1223, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-memory-bank-medium - rotate: false - xy: 1945, 509 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-memory-bank-small - rotate: false - xy: 1106, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-memory-bank-tiny - rotate: false - xy: 1721, 545 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-memory-bank-xlarge - rotate: false - xy: 251, 358 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-memory-cell-large - rotate: false - xy: 1265, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-memory-cell-medium - rotate: false - xy: 1979, 509 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-memory-cell-small - rotate: false - xy: 1132, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-memory-cell-tiny - rotate: false - xy: 1739, 538 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-memory-cell-xlarge - rotate: false - xy: 251, 308 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-mend-projector-large - rotate: false - xy: 1307, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-mend-projector-medium - rotate: false - xy: 2013, 509 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-mend-projector-small - rotate: false - xy: 1158, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-mend-projector-tiny - rotate: false - xy: 1757, 538 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-mend-projector-xlarge - rotate: false - xy: 251, 258 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-mender-large - rotate: false - xy: 1349, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-mender-medium - rotate: false - xy: 1449, 576 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-mender-small - rotate: false - xy: 1184, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-mender-tiny - rotate: false - xy: 1775, 538 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-mender-xlarge - rotate: false - xy: 251, 208 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-message-large - rotate: false - xy: 1391, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-message-medium - rotate: false - xy: 1570, 579 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-message-small - rotate: false - xy: 1210, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-message-tiny - rotate: false - xy: 1705, 527 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-message-xlarge - rotate: false - xy: 251, 158 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-metal-floor-2-large - rotate: false - xy: 1433, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-metal-floor-2-medium - rotate: false - xy: 1604, 579 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-metal-floor-2-small - rotate: false - xy: 1009, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-metal-floor-2-tiny - rotate: false - xy: 1705, 509 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-metal-floor-2-xlarge - rotate: false - xy: 251, 108 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-metal-floor-3-large - rotate: false - xy: 1475, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-metal-floor-3-medium - rotate: false - xy: 1638, 579 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-metal-floor-3-small - rotate: false - xy: 1035, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-metal-floor-3-tiny - rotate: false - xy: 1704, 491 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-metal-floor-3-xlarge - rotate: false - xy: 251, 58 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-metal-floor-5-large - rotate: false - xy: 1517, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-metal-floor-5-medium - rotate: false - xy: 1672, 579 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-metal-floor-5-small - rotate: false - xy: 1061, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-metal-floor-5-tiny - rotate: false - xy: 1704, 473 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-metal-floor-5-xlarge - rotate: false - xy: 151, 8 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-metal-floor-damaged-large - rotate: false - xy: 1559, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-metal-floor-damaged-medium - rotate: false - xy: 636, 81 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-metal-floor-damaged-small - rotate: false - xy: 1087, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-metal-floor-damaged-tiny - rotate: false - xy: 1704, 455 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-metal-floor-damaged-xlarge - rotate: false - xy: 201, 8 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-metal-floor-large - rotate: false - xy: 1601, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-metal-floor-medium - rotate: false - xy: 670, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-metal-floor-small - rotate: false - xy: 1113, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-metal-floor-tiny - rotate: false - xy: 1704, 437 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-metal-floor-xlarge - rotate: false - xy: 251, 8 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-micro-processor-large - rotate: false - xy: 1643, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-micro-processor-medium - rotate: false - xy: 704, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-micro-processor-small - rotate: false - xy: 1139, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-micro-processor-tiny - rotate: false - xy: 1704, 419 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-micro-processor-xlarge - rotate: false - xy: 281, 619 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-moss-large - rotate: false - xy: 1685, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-moss-medium - rotate: false - xy: 738, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-moss-small - rotate: false - xy: 1165, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-moss-tiny - rotate: false - xy: 1715, 401 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-moss-xlarge - rotate: false - xy: 281, 569 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-mud-large - rotate: false - xy: 1727, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-mud-medium - rotate: false - xy: 772, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-mud-small - rotate: false - xy: 1191, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-mud-tiny - rotate: false - xy: 1715, 383 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-mud-xlarge - rotate: false - xy: 301, 519 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-multi-press-large - rotate: false - xy: 1769, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-multi-press-medium - rotate: false - xy: 806, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-multi-press-small - rotate: false - xy: 1217, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-multi-press-tiny - rotate: false - xy: 1715, 365 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-multi-press-xlarge - rotate: false - xy: 301, 469 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-multiplicative-reconstructor-large - rotate: false - xy: 1811, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-multiplicative-reconstructor-medium - rotate: false - xy: 635, 47 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-multiplicative-reconstructor-small - rotate: false - xy: 1447, 341 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-multiplicative-reconstructor-tiny - rotate: false - xy: 1723, 520 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-multiplicative-reconstructor-xlarge - rotate: false - xy: 301, 419 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-naval-factory-large - rotate: false - xy: 1853, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-naval-factory-medium - rotate: false - xy: 669, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-naval-factory-small - rotate: false - xy: 1236, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-naval-factory-tiny - rotate: false - xy: 1741, 520 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-naval-factory-xlarge - rotate: false - xy: 301, 369 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-oil-extractor-large - rotate: false - xy: 1895, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-oil-extractor-medium - rotate: false - xy: 703, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-oil-extractor-small - rotate: false - xy: 1243, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-oil-extractor-tiny - rotate: false - xy: 1759, 520 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-oil-extractor-xlarge - rotate: false - xy: 301, 319 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ore-coal-large - rotate: false - xy: 1937, 891 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-coal-medium - rotate: false - xy: 737, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-coal-small - rotate: false - xy: 1523, 545 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-coal-tiny - rotate: false - xy: 1777, 520 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-coal-xlarge - rotate: false - xy: 301, 269 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ore-copper-large - rotate: false - xy: 859, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-copper-medium - rotate: false - xy: 771, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-copper-small - rotate: false - xy: 1523, 519 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-copper-tiny - rotate: false - xy: 1723, 502 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-copper-xlarge - rotate: false - xy: 301, 219 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ore-lead-large - rotate: false - xy: 859, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-lead-medium - rotate: false - xy: 805, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-lead-small - rotate: false - xy: 1522, 493 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-lead-tiny - rotate: false - xy: 1741, 502 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-lead-xlarge - rotate: false - xy: 301, 169 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ore-scrap-large - rotate: false - xy: 901, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-scrap-medium - rotate: false - xy: 619, 13 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-scrap-small - rotate: false - xy: 1522, 467 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-scrap-tiny - rotate: false - xy: 1759, 502 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-scrap-xlarge - rotate: false - xy: 301, 119 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ore-thorium-large - rotate: false - xy: 859, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-thorium-medium - rotate: false - xy: 653, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-thorium-small - rotate: false - xy: 1522, 441 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-thorium-tiny - rotate: false - xy: 1777, 502 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-thorium-xlarge - rotate: false - xy: 301, 69 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ore-titanium-large - rotate: false - xy: 943, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ore-titanium-medium - rotate: false - xy: 687, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ore-titanium-small - rotate: false - xy: 1522, 415 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ore-titanium-tiny - rotate: false - xy: 1722, 484 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ore-titanium-xlarge - rotate: false - xy: 301, 19 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-overdrive-dome-large - rotate: false - xy: 901, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-overdrive-dome-medium - rotate: false - xy: 721, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-overdrive-dome-small - rotate: false - xy: 1515, 389 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-overdrive-dome-tiny - rotate: false - xy: 1722, 466 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-overdrive-dome-xlarge - rotate: false - xy: 795, 878 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-overdrive-projector-large - rotate: false - xy: 859, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-overdrive-projector-medium - rotate: false - xy: 755, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-overdrive-projector-small - rotate: false - xy: 1489, 373 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-overdrive-projector-tiny - rotate: false - xy: 1740, 484 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-overdrive-projector-xlarge - rotate: false - xy: 309, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-overflow-gate-large - rotate: false - xy: 985, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-overflow-gate-medium - rotate: false - xy: 789, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-overflow-gate-small - rotate: false - xy: 1515, 363 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-overflow-gate-tiny - rotate: false - xy: 1722, 448 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-overflow-gate-xlarge - rotate: false - xy: 309, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-parallax-large - rotate: false - xy: 943, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-parallax-medium - rotate: false - xy: 823, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-parallax-small - rotate: false - xy: 1241, 299 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-parallax-tiny - rotate: false - xy: 1740, 466 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-parallax-xlarge - rotate: false - xy: 359, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-payload-conveyor-large - rotate: false - xy: 901, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-payload-conveyor-medium - rotate: false - xy: 839, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-payload-conveyor-small - rotate: false - xy: 1247, 325 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-payload-conveyor-tiny - rotate: false - xy: 1758, 484 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-payload-conveyor-xlarge - rotate: false - xy: 309, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-payload-router-large - rotate: false - xy: 859, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-payload-router-medium - rotate: false - xy: 840, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-payload-router-small - rotate: false - xy: 1243, 273 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-payload-router-tiny - rotate: false - xy: 1722, 430 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-payload-router-xlarge - rotate: false - xy: 359, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-pebbles-large - rotate: false - xy: 1027, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-pebbles-medium - rotate: false - xy: 857, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-pebbles-small - rotate: false - xy: 1243, 247 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-pebbles-tiny - rotate: false - xy: 1740, 448 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-pebbles-xlarge - rotate: false - xy: 409, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-phase-conduit-large - rotate: false - xy: 985, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-phase-conduit-medium - rotate: false - xy: 873, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-phase-conduit-small - rotate: false - xy: 1243, 221 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-phase-conduit-tiny - rotate: false - xy: 1758, 466 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-phase-conduit-xlarge - rotate: false - xy: 359, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-phase-conveyor-large - rotate: false - xy: 943, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-phase-conveyor-medium - rotate: false - xy: 891, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-phase-conveyor-small - rotate: false - xy: 1239, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-phase-conveyor-tiny - rotate: false - xy: 1776, 484 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-phase-conveyor-xlarge - rotate: false - xy: 409, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-phase-wall-large - rotate: false - xy: 901, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-phase-wall-large-large - rotate: false - xy: 1069, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-phase-wall-large-medium - rotate: false - xy: 814, 248 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-phase-wall-large-small - rotate: false - xy: 1239, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-phase-wall-large-tiny - rotate: false - xy: 1740, 430 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-phase-wall-large-xlarge - rotate: false - xy: 459, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-phase-wall-medium - rotate: false - xy: 814, 214 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-phase-wall-small - rotate: false - xy: 1239, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-phase-wall-tiny - rotate: false - xy: 1758, 448 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-phase-wall-xlarge - rotate: false - xy: 409, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-phase-weaver-large - rotate: false - xy: 1027, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-phase-weaver-medium - rotate: false - xy: 848, 250 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-phase-weaver-small - rotate: false - xy: 1239, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-phase-weaver-tiny - rotate: false - xy: 1776, 466 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-phase-weaver-xlarge - rotate: false - xy: 459, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-pine-large - rotate: false - xy: 985, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-pine-medium - rotate: false - xy: 848, 216 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-pine-small - rotate: false - xy: 1273, 325 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-pine-tiny - rotate: false - xy: 1758, 430 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-pine-xlarge - rotate: false - xy: 509, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-plastanium-compressor-large - rotate: false - xy: 943, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-plastanium-compressor-medium - rotate: false - xy: 882, 250 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-plastanium-compressor-small - rotate: false - xy: 1267, 299 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-plastanium-compressor-tiny - rotate: false - xy: 1776, 448 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-plastanium-compressor-xlarge - rotate: false - xy: 459, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-plastanium-conveyor-large - rotate: false - xy: 901, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-plastanium-conveyor-medium - rotate: false - xy: 882, 216 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-plastanium-conveyor-small - rotate: false - xy: 1269, 273 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-plastanium-conveyor-tiny - rotate: false - xy: 1776, 430 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-plastanium-conveyor-xlarge - rotate: false - xy: 509, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-plastanium-wall-large - rotate: false - xy: 1111, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-plastanium-wall-large-large - rotate: false - xy: 1069, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-plastanium-wall-large-medium - rotate: false - xy: 916, 250 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-plastanium-wall-large-small - rotate: false - xy: 1269, 247 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-plastanium-wall-large-tiny - rotate: false - xy: 1733, 412 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-plastanium-wall-large-xlarge - rotate: false - xy: 559, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-plastanium-wall-medium - rotate: false - xy: 916, 216 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-plastanium-wall-small - rotate: false - xy: 1269, 221 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-plastanium-wall-tiny - rotate: false - xy: 1733, 394 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-plastanium-wall-xlarge - rotate: false - xy: 509, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-plated-conduit-large - rotate: false - xy: 1027, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-plated-conduit-medium - rotate: false - xy: 848, 182 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-plated-conduit-small - rotate: false - xy: 1265, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-plated-conduit-tiny - rotate: false - xy: 1751, 412 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-plated-conduit-xlarge - rotate: false - xy: 559, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-pneumatic-drill-large - rotate: false - xy: 985, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-pneumatic-drill-medium - rotate: false - xy: 848, 148 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-pneumatic-drill-small - rotate: false - xy: 1265, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-pneumatic-drill-tiny - rotate: false - xy: 1733, 376 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-pneumatic-drill-xlarge - rotate: false - xy: 609, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-power-node-large - rotate: false - xy: 943, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-power-node-large-large - rotate: false - xy: 1153, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-power-node-large-medium - rotate: false - xy: 848, 114 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-power-node-large-small - rotate: false - xy: 1265, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-power-node-large-tiny - rotate: false - xy: 1751, 394 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-power-node-large-xlarge - rotate: false - xy: 559, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-power-node-medium - rotate: false - xy: 874, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-power-node-small - rotate: false - xy: 1265, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-power-node-tiny - rotate: false - xy: 1769, 412 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-power-node-xlarge - rotate: false - xy: 609, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-power-source-large - rotate: false - xy: 1111, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-power-source-medium - rotate: false - xy: 882, 182 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-power-source-small - rotate: false - xy: 1262, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-power-source-tiny - rotate: false - xy: 1751, 376 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-power-source-xlarge - rotate: false - xy: 659, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-power-void-large - rotate: false - xy: 1069, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-power-void-medium - rotate: false - xy: 916, 182 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-power-void-small - rotate: false - xy: 1299, 325 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-power-void-tiny - rotate: false - xy: 1769, 394 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-power-void-xlarge - rotate: false - xy: 609, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-pulse-conduit-large - rotate: false - xy: 1027, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-pulse-conduit-medium - rotate: false - xy: 882, 148 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-pulse-conduit-small - rotate: false - xy: 1293, 299 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-pulse-conduit-tiny - rotate: false - xy: 1769, 376 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-pulse-conduit-xlarge - rotate: false - xy: 659, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-pulverizer-large - rotate: false - xy: 985, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-pulverizer-medium - rotate: false - xy: 882, 114 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-pulverizer-small - rotate: false - xy: 1295, 273 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-pulverizer-tiny - rotate: false - xy: 1733, 358 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-pulverizer-xlarge - rotate: false - xy: 709, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-pyratite-mixer-large - rotate: false - xy: 1195, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-pyratite-mixer-medium - rotate: false - xy: 916, 148 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-pyratite-mixer-small - rotate: false - xy: 1295, 247 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-pyratite-mixer-tiny - rotate: false - xy: 1751, 358 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-pyratite-mixer-xlarge - rotate: false - xy: 659, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-repair-point-large - rotate: false - xy: 1153, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-repair-point-medium - rotate: false - xy: 916, 114 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-repair-point-small - rotate: false - xy: 1295, 221 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-repair-point-tiny - rotate: false - xy: 1769, 358 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-repair-point-xlarge - rotate: false - xy: 709, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-resupply-point-large - rotate: false - xy: 1111, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-resupply-point-medium - rotate: false - xy: 908, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-resupply-point-small - rotate: false - xy: 1291, 195 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-resupply-point-tiny - rotate: false - xy: 1787, 412 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-resupply-point-xlarge - rotate: false - xy: 709, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-ripple-large - rotate: false - xy: 1069, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ripple-medium - rotate: false - xy: 907, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ripple-small - rotate: false - xy: 1291, 169 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ripple-tiny - rotate: false - xy: 1787, 394 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ripple-xlarge - rotate: false - xy: 759, 816 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-rotary-pump-large - rotate: false - xy: 1027, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-rotary-pump-medium - rotate: false - xy: 925, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-rotary-pump-small - rotate: false - xy: 1291, 143 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-rotary-pump-tiny - rotate: false - xy: 1787, 376 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-rotary-pump-xlarge - rotate: false - xy: 759, 766 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-router-large - rotate: false - xy: 1237, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-router-medium - rotate: false - xy: 941, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-router-small - rotate: false - xy: 1291, 117 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-router-tiny - rotate: false - xy: 1787, 358 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-router-xlarge - rotate: false - xy: 759, 716 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-rtg-generator-large - rotate: false - xy: 1195, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-rtg-generator-medium - rotate: false - xy: 942, 80 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-rtg-generator-small - rotate: false - xy: 1288, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-rtg-generator-tiny - rotate: false - xy: 1794, 484 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-rtg-generator-xlarge - rotate: false - xy: 809, 828 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-salt-large - rotate: false - xy: 1153, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-salt-medium - rotate: false - xy: 959, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-salt-small - rotate: false - xy: 1269, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-salt-tiny - rotate: false - xy: 1794, 466 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-salt-wall-large - rotate: false - xy: 1111, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-salt-wall-medium - rotate: false - xy: 975, 46 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-salt-wall-small - rotate: false - xy: 1325, 331 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-salt-wall-tiny - rotate: false - xy: 1794, 448 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-salt-wall-xlarge - rotate: false - xy: 809, 778 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-salt-xlarge - rotate: false - xy: 809, 728 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-salvo-large - rotate: false - xy: 1069, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-salvo-medium - rotate: false - xy: 993, 12 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-salvo-small - rotate: false - xy: 1351, 331 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-salvo-tiny - rotate: false - xy: 1794, 430 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-salvo-xlarge - rotate: false - xy: 809, 678 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-sand-boulder-large - rotate: false - xy: 1279, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-sand-boulder-medium - rotate: false - xy: 1533, 571 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-sand-boulder-small - rotate: false - xy: 1295, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-sand-boulder-tiny - rotate: false - xy: 1805, 412 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-sand-boulder-xlarge - rotate: false - xy: 331, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-sand-large - rotate: false - xy: 1237, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-sand-medium - rotate: false - xy: 1483, 563 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-sand-small - rotate: false - xy: 1377, 325 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-sand-tiny - rotate: false - xy: 1805, 394 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-sand-wall-large - rotate: false - xy: 1195, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-sand-wall-medium - rotate: false - xy: 1567, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-sand-wall-small - rotate: false - xy: 1314, 91 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-sand-wall-tiny - rotate: false - xy: 1805, 376 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-sand-wall-xlarge - rotate: false - xy: 331, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-sand-water-large - rotate: false - xy: 1153, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-sand-water-medium - rotate: false - xy: 1601, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-sand-water-small - rotate: false - xy: 1321, 65 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-sand-water-tiny - rotate: false - xy: 1805, 358 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-sand-water-xlarge - rotate: false - xy: 381, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-sand-xlarge - rotate: false - xy: 381, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-scatter-large - rotate: false - xy: 1111, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scatter-medium - rotate: false - xy: 1635, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-scatter-small - rotate: false - xy: 1549, 519 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-scatter-tiny - rotate: false - xy: 1391, 287 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-scatter-xlarge - rotate: false - xy: 431, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-scorch-large - rotate: false - xy: 1321, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scorch-medium - rotate: false - xy: 1669, 545 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-scorch-small - rotate: false - xy: 1548, 493 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-scorch-tiny - rotate: false - xy: 1391, 269 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-scorch-xlarge - rotate: false - xy: 431, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-scrap-wall-gigantic-large - rotate: false - xy: 1279, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scrap-wall-gigantic-medium - rotate: false - xy: 979, 537 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-scrap-wall-gigantic-small - rotate: false - xy: 1575, 519 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-scrap-wall-gigantic-tiny - rotate: false - xy: 1391, 251 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-scrap-wall-gigantic-xlarge - rotate: false - xy: 481, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-scrap-wall-huge-large - rotate: false - xy: 1237, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scrap-wall-huge-medium - rotate: false - xy: 979, 503 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-scrap-wall-huge-small - rotate: false - xy: 1548, 467 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-scrap-wall-huge-tiny - rotate: false - xy: 1391, 233 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-scrap-wall-huge-xlarge - rotate: false - xy: 481, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-scrap-wall-large - rotate: false - xy: 1195, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scrap-wall-large-large - rotate: false - xy: 1153, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-scrap-wall-large-medium - rotate: false - xy: 979, 469 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-scrap-wall-large-small - rotate: false - xy: 1574, 493 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-scrap-wall-large-tiny - rotate: false - xy: 1409, 292 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-scrap-wall-large-xlarge - rotate: false - xy: 531, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-scrap-wall-medium - rotate: false - xy: 979, 435 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-scrap-wall-small - rotate: false - xy: 1601, 519 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-scrap-wall-tiny - rotate: false - xy: 1409, 274 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-scrap-wall-xlarge - rotate: false - xy: 531, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-segment-large - rotate: false - xy: 1363, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-segment-medium - rotate: false - xy: 979, 401 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-segment-small - rotate: false - xy: 1548, 441 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-segment-tiny - rotate: false - xy: 1409, 256 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-segment-xlarge - rotate: false - xy: 581, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-separator-large - rotate: false - xy: 1321, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-separator-medium - rotate: false - xy: 1013, 555 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-separator-small - rotate: false - xy: 1574, 467 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-separator-tiny - rotate: false - xy: 1409, 238 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-separator-xlarge - rotate: false - xy: 581, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-shale-boulder-large - rotate: false - xy: 1279, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-shale-boulder-medium - rotate: false - xy: 1047, 555 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-shale-boulder-small - rotate: false - xy: 1600, 493 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-shale-boulder-tiny - rotate: false - xy: 1427, 287 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-shale-boulder-xlarge - rotate: false - xy: 631, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-shale-large - rotate: false - xy: 1237, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-shale-medium - rotate: false - xy: 1013, 521 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-shale-small - rotate: false - xy: 1627, 519 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-shale-tiny - rotate: false - xy: 1445, 287 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-shale-wall-large - rotate: false - xy: 1195, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-shale-wall-medium - rotate: false - xy: 1081, 555 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-shale-wall-small - rotate: false - xy: 1548, 415 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-shale-wall-tiny - rotate: false - xy: 1427, 269 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-shale-wall-xlarge - rotate: false - xy: 631, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-shale-xlarge - rotate: false - xy: 681, 666 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-shock-mine-large - rotate: false - xy: 1405, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-shock-mine-medium - rotate: false - xy: 1013, 487 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-shock-mine-small - rotate: false - xy: 1541, 389 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-shock-mine-tiny - rotate: false - xy: 1463, 287 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-shock-mine-xlarge - rotate: false - xy: 681, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-shrubs-large - rotate: false - xy: 1363, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-shrubs-medium +block-distributor-medium rotate: false xy: 1047, 521 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-shrubs-small +block-distributor-small rotate: false - xy: 1574, 441 + xy: 1245, 15 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-shrubs-tiny +block-distributor-tiny rotate: false - xy: 1427, 251 + xy: 1588, 425 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-shrubs-xlarge +block-distributor-xlarge rotate: false - xy: 731, 666 + xy: 395, 866 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-silicon-crucible-large +block-door-large rotate: false - xy: 1321, 765 + xy: 677, 115 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-silicon-crucible-medium +block-door-large-large rotate: false - xy: 1115, 555 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-silicon-crucible-small - rotate: false - xy: 1600, 467 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-silicon-crucible-tiny - rotate: false - xy: 1445, 269 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-silicon-crucible-xlarge - rotate: false - xy: 731, 616 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-silicon-smelter-large - rotate: false - xy: 1279, 723 + xy: 669, 73 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-silicon-smelter-medium - rotate: false - xy: 1013, 453 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-silicon-smelter-small - rotate: false - xy: 1626, 493 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-silicon-smelter-tiny - rotate: false - xy: 1481, 287 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-silicon-smelter-xlarge - rotate: false - xy: 781, 628 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-slag-large - rotate: false - xy: 1237, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-slag-medium +block-door-large-medium rotate: false xy: 1047, 487 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-slag-small +block-door-large-small rotate: false - xy: 1653, 519 + xy: 1271, 15 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-slag-tiny +block-door-large-tiny rotate: false - xy: 1445, 251 + xy: 1588, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-slag-xlarge +block-door-large-xlarge rotate: false - xy: 831, 628 + xy: 445, 866 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-snow-boulder-large - rotate: false - xy: 1447, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-snow-boulder-medium - rotate: false - xy: 1081, 521 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-snow-boulder-small - rotate: false - xy: 1541, 363 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-snow-boulder-tiny - rotate: false - xy: 1463, 269 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-snow-boulder-xlarge - rotate: false - xy: 781, 578 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-snow-large - rotate: false - xy: 1405, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-snow-medium - rotate: false - xy: 1149, 555 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-snow-pine-large - rotate: false - xy: 1363, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-snow-pine-medium - rotate: false - xy: 1013, 419 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-snow-pine-small - rotate: false - xy: 1574, 415 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-snow-pine-tiny - rotate: false - xy: 1463, 251 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-snow-pine-xlarge - rotate: false - xy: 831, 578 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-snow-small - rotate: false - xy: 1567, 389 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-snow-tiny - rotate: false - xy: 1481, 269 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-snow-wall-large - rotate: false - xy: 1321, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-snow-wall-medium +block-door-medium rotate: false xy: 1047, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-snow-wall-small +block-door-small rotate: false - xy: 1600, 441 + xy: 1297, 15 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-snow-wall-tiny +block-door-tiny rotate: false - xy: 1481, 251 + xy: 1588, 389 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-snow-wall-xlarge +block-door-xlarge rotate: false - xy: 351, 566 + xy: 495, 866 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-snow-xlarge +block-dune-wall-large rotate: false - xy: 351, 516 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-solar-panel-large - rotate: false - xy: 1279, 681 + xy: 669, 31 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-solar-panel-large-large - rotate: false - xy: 1489, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-solar-panel-large-medium - rotate: false - xy: 1081, 487 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-solar-panel-large-small - rotate: false - xy: 1626, 467 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-solar-panel-large-tiny - rotate: false - xy: 1427, 233 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-solar-panel-large-xlarge - rotate: false - xy: 401, 566 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-solar-panel-medium - rotate: false - xy: 1115, 521 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-solar-panel-small - rotate: false - xy: 1652, 493 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-solar-panel-tiny - rotate: false - xy: 1445, 233 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-solar-panel-xlarge - rotate: false - xy: 351, 466 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-sorter-large - rotate: false - xy: 1447, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-sorter-medium - rotate: false - xy: 1183, 555 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-sorter-small - rotate: false - xy: 1567, 363 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-sorter-tiny - rotate: false - xy: 1463, 233 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-sorter-xlarge - rotate: false - xy: 401, 516 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-space-large - rotate: false - xy: 1405, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-space-medium +block-dune-wall-medium rotate: false xy: 1047, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-space-small +block-dune-wall-small rotate: false - xy: 1600, 415 + xy: 1323, 23 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-space-tiny +block-dune-wall-tiny rotate: false - xy: 1481, 233 + xy: 1588, 371 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-space-xlarge +block-dune-wall-xlarge rotate: false - xy: 451, 566 + xy: 545, 866 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spawn-large +block-duo-large rotate: false - xy: 1363, 723 + xy: 719, 116 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spawn-medium +block-duo-medium + rotate: false + xy: 1699, 739 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-duo-small + rotate: false + xy: 1349, 23 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-duo-tiny + rotate: false + xy: 1617, 659 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-duo-xlarge + rotate: false + xy: 595, 866 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-exponential-reconstructor-large + rotate: false + xy: 761, 116 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-exponential-reconstructor-medium + rotate: false + xy: 1733, 739 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-exponential-reconstructor-small + rotate: false + xy: 1371, 153 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-exponential-reconstructor-tiny + rotate: false + xy: 1617, 641 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-exponential-reconstructor-xlarge + rotate: false + xy: 645, 866 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-force-projector-large + rotate: false + xy: 803, 116 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-force-projector-medium + rotate: false + xy: 1767, 739 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-force-projector-small + rotate: false + xy: 1365, 127 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-force-projector-tiny + rotate: false + xy: 1617, 623 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-force-projector-xlarge + rotate: false + xy: 695, 866 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-foreshadow-large + rotate: false + xy: 845, 116 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-foreshadow-medium + rotate: false + xy: 1801, 739 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-foreshadow-small + rotate: false + xy: 1365, 101 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-foreshadow-tiny + rotate: false + xy: 1617, 605 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-foreshadow-xlarge + rotate: false + xy: 101, 478 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-fuse-large + rotate: false + xy: 711, 73 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-fuse-medium + rotate: false + xy: 1835, 744 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-fuse-small + rotate: false + xy: 1365, 75 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-fuse-tiny + rotate: false + xy: 1617, 587 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-fuse-xlarge + rotate: false + xy: 101, 428 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-graphite-press-large + rotate: false + xy: 711, 31 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-graphite-press-medium + rotate: false + xy: 1909, 815 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-graphite-press-small + rotate: false + xy: 1365, 49 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-graphite-press-tiny + rotate: false + xy: 1617, 569 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-graphite-press-xlarge + rotate: false + xy: 101, 378 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-grass-large + rotate: false + xy: 753, 74 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-grass-medium + rotate: false + xy: 1943, 815 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-grass-small + rotate: false + xy: 1375, 23 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-grass-tiny + rotate: false + xy: 1617, 551 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-grass-xlarge + rotate: false + xy: 101, 328 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ground-factory-large + rotate: false + xy: 753, 32 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ground-factory-medium + rotate: false + xy: 1977, 815 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ground-factory-small + rotate: false + xy: 1413, 192 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ground-factory-tiny + rotate: false + xy: 1617, 533 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ground-factory-xlarge + rotate: false + xy: 101, 278 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-hail-large + rotate: false + xy: 795, 74 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-hail-medium + rotate: false + xy: 2011, 815 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-hail-small + rotate: false + xy: 1397, 166 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-hail-tiny + rotate: false + xy: 1617, 515 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-hail-xlarge + rotate: false + xy: 101, 228 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-hotrock-large + rotate: false + xy: 795, 32 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-hotrock-medium + rotate: false + xy: 1144, 576 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-hotrock-small + rotate: false + xy: 1423, 166 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-hotrock-tiny + rotate: false + xy: 1606, 497 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-hotrock-xlarge + rotate: false + xy: 101, 178 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-hyper-processor-large + rotate: false + xy: 837, 74 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-hyper-processor-medium + rotate: false + xy: 1867, 778 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-hyper-processor-small + rotate: false + xy: 1397, 140 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-hyper-processor-tiny + rotate: false + xy: 1606, 479 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-hyper-processor-xlarge + rotate: false + xy: 101, 128 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ice-large + rotate: false + xy: 837, 32 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ice-medium + rotate: false + xy: 1869, 744 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ice-small + rotate: false + xy: 1423, 140 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ice-snow-large + rotate: false + xy: 864, 284 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ice-snow-medium + rotate: false + xy: 1451, 613 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ice-snow-small + rotate: false + xy: 1391, 114 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ice-snow-tiny + rotate: false + xy: 1606, 461 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ice-snow-xlarge + rotate: false + xy: 101, 78 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ice-tiny + rotate: false + xy: 1606, 443 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ice-wall-large + rotate: false + xy: 864, 242 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ice-wall-medium + rotate: false + xy: 1901, 778 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ice-wall-small + rotate: false + xy: 1391, 88 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ice-wall-tiny + rotate: false + xy: 1606, 425 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ice-wall-xlarge + rotate: false + xy: 101, 28 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ice-xlarge + rotate: false + xy: 231, 608 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-illuminator-large + rotate: false + xy: 861, 200 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-illuminator-medium + rotate: false + xy: 1903, 744 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-illuminator-small + rotate: false + xy: 1417, 114 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-illuminator-tiny + rotate: false + xy: 1606, 407 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-illuminator-xlarge + rotate: false + xy: 231, 558 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-impact-reactor-large + rotate: false + xy: 861, 158 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-impact-reactor-medium + rotate: false + xy: 1935, 781 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-impact-reactor-small + rotate: false + xy: 1391, 62 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-impact-reactor-tiny + rotate: false + xy: 1606, 389 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-impact-reactor-xlarge + rotate: false + xy: 745, 866 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-incinerator-large + rotate: false + xy: 872, 326 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-incinerator-medium + rotate: false + xy: 1969, 781 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-incinerator-small + rotate: false + xy: 1417, 88 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-incinerator-tiny + rotate: false + xy: 1606, 371 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-incinerator-xlarge + rotate: false + xy: 151, 508 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-interplanetary-accelerator-large + rotate: false + xy: 887, 116 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-interplanetary-accelerator-medium + rotate: false + xy: 2003, 781 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-interplanetary-accelerator-small + rotate: false + xy: 1417, 62 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-interplanetary-accelerator-tiny + rotate: false + xy: 1635, 654 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-interplanetary-accelerator-xlarge + rotate: false + xy: 151, 458 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-inverted-sorter-large + rotate: false + xy: 879, 74 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-inverted-sorter-medium + rotate: false + xy: 1937, 747 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-inverted-sorter-small + rotate: false + xy: 1401, 36 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-inverted-sorter-tiny + rotate: false + xy: 1635, 636 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-inverted-sorter-xlarge + rotate: false + xy: 201, 508 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-item-source-large + rotate: false + xy: 879, 32 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-item-source-medium + rotate: false + xy: 1971, 747 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-item-source-small + rotate: false + xy: 1427, 36 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-item-source-tiny + rotate: false + xy: 1635, 618 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-item-source-xlarge + rotate: false + xy: 151, 408 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-item-void-large + rotate: false + xy: 906, 284 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-item-void-medium + rotate: false + xy: 2005, 747 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-item-void-small + rotate: false + xy: 1401, 10 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-item-void-tiny + rotate: false + xy: 1635, 600 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-item-void-xlarge + rotate: false + xy: 201, 458 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-junction-large + rotate: false + xy: 906, 242 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-junction-medium + rotate: false + xy: 1835, 710 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-junction-small + rotate: false + xy: 1427, 10 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-junction-tiny + rotate: false + xy: 1635, 582 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-junction-xlarge + rotate: false + xy: 151, 358 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-kiln-large + rotate: false + xy: 903, 200 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-kiln-medium + rotate: false + xy: 1869, 710 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-kiln-small + rotate: false + xy: 1421, 221 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-kiln-tiny + rotate: false + xy: 1635, 564 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-kiln-xlarge + rotate: false + xy: 201, 408 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-lancer-large + rotate: false + xy: 903, 158 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-lancer-medium + rotate: false + xy: 1903, 710 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-lancer-small + rotate: false + xy: 1447, 216 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-lancer-tiny + rotate: false + xy: 1635, 546 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-lancer-xlarge + rotate: false + xy: 151, 308 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-large-logic-display-large + rotate: false + xy: 929, 116 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-large-logic-display-medium + rotate: false + xy: 1937, 713 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-large-logic-display-small + rotate: false + xy: 1473, 216 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-large-logic-display-tiny + rotate: false + xy: 1635, 528 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-large-logic-display-xlarge + rotate: false + xy: 201, 358 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-laser-drill-large + rotate: false + xy: 921, 74 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-laser-drill-medium + rotate: false + xy: 1971, 713 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-laser-drill-small + rotate: false + xy: 1443, 114 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-laser-drill-tiny + rotate: false + xy: 1653, 654 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-laser-drill-xlarge + rotate: false + xy: 151, 258 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-launch-pad-large + rotate: false + xy: 921, 32 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-launch-pad-large-large + rotate: false + xy: 963, 74 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-launch-pad-large-medium + rotate: false + xy: 2005, 713 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-launch-pad-large-small + rotate: false + xy: 1443, 88 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-launch-pad-large-tiny + rotate: false + xy: 1653, 636 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-launch-pad-large-xlarge + rotate: false + xy: 201, 308 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-launch-pad-medium + rotate: false + xy: 948, 322 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-launch-pad-small + rotate: false + xy: 1443, 62 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-launch-pad-tiny + rotate: false + xy: 1653, 618 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-launch-pad-xlarge + rotate: false + xy: 151, 208 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-liquid-junction-large + rotate: false + xy: 963, 32 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-liquid-junction-medium + rotate: false + xy: 948, 288 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-liquid-junction-small + rotate: false + xy: 1453, 36 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-liquid-junction-tiny + rotate: false + xy: 1653, 600 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-liquid-junction-xlarge + rotate: false + xy: 201, 258 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-liquid-router-large + rotate: false + xy: 821, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-liquid-router-medium + rotate: false + xy: 982, 322 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-liquid-router-small + rotate: false + xy: 1453, 10 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-liquid-router-tiny + rotate: false + xy: 1653, 582 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-liquid-router-xlarge + rotate: false + xy: 151, 158 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-liquid-source-large + rotate: false + xy: 863, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-liquid-source-medium + rotate: false + xy: 948, 254 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-liquid-source-small + rotate: false + xy: 1485, 642 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-liquid-source-tiny + rotate: false + xy: 1653, 564 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-liquid-source-xlarge + rotate: false + xy: 201, 208 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-liquid-tank-large + rotate: false + xy: 905, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-liquid-tank-medium + rotate: false + xy: 1016, 322 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-liquid-tank-small + rotate: false + xy: 1485, 616 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-liquid-tank-tiny + rotate: false + xy: 1653, 546 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-liquid-tank-xlarge + rotate: false + xy: 151, 108 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-liquid-void-large + rotate: false + xy: 947, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-liquid-void-medium + rotate: false + xy: 982, 288 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-liquid-void-small + rotate: false + xy: 1511, 642 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-liquid-void-tiny + rotate: false + xy: 1653, 528 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-liquid-void-xlarge + rotate: false + xy: 201, 158 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-logic-display-large + rotate: false + xy: 989, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-logic-display-medium + rotate: false + xy: 1016, 288 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-logic-display-small + rotate: false + xy: 1511, 616 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-logic-display-tiny + rotate: false + xy: 1635, 510 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-logic-display-xlarge + rotate: false + xy: 151, 58 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-logic-processor-large + rotate: false + xy: 1031, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-logic-processor-medium + rotate: false + xy: 982, 254 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-logic-processor-small + rotate: false + xy: 1675, 676 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-logic-processor-tiny + rotate: false + xy: 1653, 510 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-logic-processor-xlarge + rotate: false + xy: 201, 108 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-magmarock-large + rotate: false + xy: 1073, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-magmarock-medium + rotate: false + xy: 1016, 254 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-magmarock-small + rotate: false + xy: 1701, 676 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-magmarock-tiny + rotate: false + xy: 1611, 353 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-magmarock-xlarge + rotate: false + xy: 201, 58 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-mass-driver-large + rotate: false + xy: 1115, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-mass-driver-medium + rotate: false + xy: 948, 220 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-mass-driver-small + rotate: false + xy: 1727, 679 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-mass-driver-tiny + rotate: false + xy: 1611, 335 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-mass-driver-xlarge + rotate: false + xy: 251, 508 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-mechanical-drill-large + rotate: false + xy: 1157, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-mechanical-drill-medium + rotate: false + xy: 982, 220 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-mechanical-drill-small + rotate: false + xy: 1753, 679 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-mechanical-drill-tiny + rotate: false + xy: 1611, 317 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-mechanical-drill-xlarge + rotate: false + xy: 251, 458 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-mechanical-pump-large + rotate: false + xy: 1199, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-mechanical-pump-medium + rotate: false + xy: 1016, 220 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-mechanical-pump-small + rotate: false + xy: 1779, 679 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-mechanical-pump-tiny + rotate: false + xy: 1611, 299 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-mechanical-pump-xlarge + rotate: false + xy: 251, 408 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-meltdown-large + rotate: false + xy: 1241, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-meltdown-medium + rotate: false + xy: 945, 186 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-meltdown-small + rotate: false + xy: 1805, 679 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-meltdown-tiny + rotate: false + xy: 1611, 281 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-meltdown-xlarge + rotate: false + xy: 251, 358 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-melter-large + rotate: false + xy: 1283, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-melter-medium + rotate: false + xy: 979, 186 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-melter-small + rotate: false + xy: 1831, 684 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-melter-tiny + rotate: false + xy: 1671, 658 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-melter-xlarge + rotate: false + xy: 251, 308 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-memory-bank-large + rotate: false + xy: 1325, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-memory-bank-medium + rotate: false + xy: 1013, 186 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-memory-bank-small + rotate: false + xy: 1857, 684 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-memory-bank-tiny + rotate: false + xy: 1689, 658 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-memory-bank-xlarge + rotate: false + xy: 251, 258 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-memory-cell-large + rotate: false + xy: 1367, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-memory-cell-medium + rotate: false + xy: 971, 152 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-memory-cell-small + rotate: false + xy: 1883, 684 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-memory-cell-tiny + rotate: false + xy: 1671, 640 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-memory-cell-xlarge + rotate: false + xy: 251, 208 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-mend-projector-large + rotate: false + xy: 1409, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-mend-projector-medium + rotate: false + xy: 1005, 152 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-mend-projector-small + rotate: false + xy: 1909, 684 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-mend-projector-tiny + rotate: false + xy: 1707, 658 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-mend-projector-xlarge + rotate: false + xy: 251, 158 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-mender-large + rotate: false + xy: 1451, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-mender-medium + rotate: false + xy: 971, 118 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-mender-small + rotate: false + xy: 1831, 658 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-mender-tiny + rotate: false + xy: 1671, 622 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-mender-xlarge + rotate: false + xy: 251, 108 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-message-large + rotate: false + xy: 1493, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-message-medium + rotate: false + xy: 1005, 118 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-message-small + rotate: false + xy: 1857, 658 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-message-tiny + rotate: false + xy: 1689, 640 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-message-xlarge + rotate: false + xy: 251, 58 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-metal-floor-2-large + rotate: false + xy: 1535, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-metal-floor-2-medium + rotate: false + xy: 1005, 84 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-metal-floor-2-small + rotate: false + xy: 1883, 658 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-metal-floor-2-tiny + rotate: false + xy: 1671, 604 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-metal-floor-2-xlarge + rotate: false + xy: 151, 8 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-metal-floor-3-large + rotate: false + xy: 1577, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-metal-floor-3-medium + rotate: false + xy: 1005, 50 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-metal-floor-3-small + rotate: false + xy: 1909, 658 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-metal-floor-3-tiny + rotate: false + xy: 1689, 622 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-metal-floor-3-xlarge + rotate: false + xy: 201, 8 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-metal-floor-5-large + rotate: false + xy: 1619, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-metal-floor-5-medium + rotate: false + xy: 1005, 16 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-metal-floor-5-small + rotate: false + xy: 1527, 697 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-metal-floor-5-tiny + rotate: false + xy: 1707, 640 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-metal-floor-5-xlarge + rotate: false + xy: 251, 8 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-metal-floor-damaged-large + rotate: false + xy: 1661, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-metal-floor-damaged-medium + rotate: false + xy: 1039, 152 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-metal-floor-damaged-small + rotate: false + xy: 1535, 671 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-metal-floor-damaged-tiny + rotate: false + xy: 1671, 586 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-metal-floor-damaged-xlarge + rotate: false + xy: 281, 619 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-metal-floor-large + rotate: false + xy: 1703, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-metal-floor-medium + rotate: false + xy: 1039, 118 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-metal-floor-small + rotate: false + xy: 1537, 645 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-metal-floor-tiny + rotate: false + xy: 1689, 604 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-metal-floor-xlarge + rotate: false + xy: 281, 569 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-micro-processor-large + rotate: false + xy: 1745, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-micro-processor-medium + rotate: false + xy: 1039, 84 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-micro-processor-small + rotate: false + xy: 1537, 619 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-micro-processor-tiny + rotate: false + xy: 1707, 622 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-micro-processor-xlarge + rotate: false + xy: 301, 519 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-moss-large + rotate: false + xy: 1787, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-moss-medium + rotate: false + xy: 1039, 50 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-moss-small + rotate: false + xy: 1937, 687 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-moss-tiny + rotate: false + xy: 1671, 568 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-moss-xlarge + rotate: false + xy: 301, 469 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-mud-large + rotate: false + xy: 1829, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-mud-medium + rotate: false + xy: 1039, 16 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-mud-small + rotate: false + xy: 1963, 687 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-mud-tiny + rotate: false + xy: 1689, 586 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-mud-xlarge + rotate: false + xy: 301, 419 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-multi-press-large + rotate: false + xy: 1871, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-multi-press-medium + rotate: false + xy: 1047, 186 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-multi-press-small + rotate: false + xy: 1989, 687 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-multi-press-tiny + rotate: false + xy: 1707, 604 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-multi-press-xlarge + rotate: false + xy: 301, 369 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-multiplicative-reconstructor-large + rotate: false + xy: 1913, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-multiplicative-reconstructor-medium + rotate: false + xy: 1073, 152 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-multiplicative-reconstructor-small + rotate: false + xy: 1935, 661 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-multiplicative-reconstructor-tiny + rotate: false + xy: 1671, 550 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-multiplicative-reconstructor-xlarge + rotate: false + xy: 301, 319 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-naval-factory-large + rotate: false + xy: 1955, 933 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-naval-factory-medium + rotate: false + xy: 1073, 118 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-naval-factory-small + rotate: false + xy: 1961, 661 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-naval-factory-tiny + rotate: false + xy: 1689, 568 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-naval-factory-xlarge + rotate: false + xy: 301, 269 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-oil-extractor-large + rotate: false + xy: 845, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-oil-extractor-medium + rotate: false + xy: 1073, 84 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-oil-extractor-small + rotate: false + xy: 1987, 661 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-oil-extractor-tiny + rotate: false + xy: 1707, 586 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-oil-extractor-xlarge + rotate: false + xy: 301, 219 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ore-coal-large + rotate: false + xy: 887, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ore-coal-medium + rotate: false + xy: 1073, 50 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ore-coal-small + rotate: false + xy: 2015, 687 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ore-coal-tiny + rotate: false + xy: 1671, 532 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ore-coal-xlarge + rotate: false + xy: 301, 169 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ore-copper-large + rotate: false + xy: 929, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ore-copper-medium + rotate: false + xy: 1073, 16 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ore-copper-small + rotate: false + xy: 2013, 661 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ore-copper-tiny + rotate: false + xy: 1689, 550 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ore-copper-xlarge + rotate: false + xy: 301, 119 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ore-lead-large + rotate: false + xy: 971, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ore-lead-medium + rotate: false + xy: 1573, 695 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ore-lead-small + rotate: false + xy: 1481, 346 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ore-lead-tiny + rotate: false + xy: 1707, 568 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ore-lead-xlarge + rotate: false + xy: 301, 69 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ore-scrap-large + rotate: false + xy: 1013, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ore-scrap-medium + rotate: false + xy: 1607, 695 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ore-scrap-small + rotate: false + xy: 1481, 320 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ore-scrap-tiny + rotate: false + xy: 1671, 514 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ore-scrap-xlarge + rotate: false + xy: 301, 19 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ore-thorium-large + rotate: false + xy: 1055, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ore-thorium-medium + rotate: false + xy: 1641, 698 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ore-thorium-small + rotate: false + xy: 1481, 294 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ore-thorium-tiny + rotate: false + xy: 1689, 532 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ore-thorium-xlarge + rotate: false + xy: 795, 878 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ore-titanium-large + rotate: false + xy: 1097, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ore-titanium-medium + rotate: false + xy: 1675, 702 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ore-titanium-small + rotate: false + xy: 1481, 268 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ore-titanium-tiny + rotate: false + xy: 1707, 550 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ore-titanium-xlarge + rotate: false + xy: 309, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-overdrive-dome-large + rotate: false + xy: 1139, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-overdrive-dome-medium + rotate: false + xy: 1709, 705 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-overdrive-dome-small + rotate: false + xy: 1499, 242 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-overdrive-dome-tiny + rotate: false + xy: 1689, 514 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-overdrive-dome-xlarge + rotate: false + xy: 309, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-overdrive-projector-large + rotate: false + xy: 1181, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-overdrive-projector-medium + rotate: false + xy: 1743, 705 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-overdrive-projector-small + rotate: false + xy: 1499, 216 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-overdrive-projector-tiny + rotate: false + xy: 1707, 532 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-overdrive-projector-xlarge + rotate: false + xy: 359, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-overflow-gate-large + rotate: false + xy: 1223, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-overflow-gate-medium + rotate: false + xy: 1777, 705 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-overflow-gate-small + rotate: false + xy: 1641, 672 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-overflow-gate-tiny + rotate: false + xy: 1707, 514 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-overflow-gate-xlarge + rotate: false + xy: 309, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-parallax-large + rotate: false + xy: 1265, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-parallax-medium + rotate: false + xy: 1081, 521 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-parallax-small + rotate: false + xy: 1727, 653 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-parallax-tiny + rotate: false + xy: 1725, 635 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-parallax-xlarge + rotate: false + xy: 359, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-payload-conveyor-large + rotate: false + xy: 1307, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-payload-conveyor-medium + rotate: false + xy: 1081, 487 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-payload-conveyor-small + rotate: false + xy: 1753, 653 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-payload-conveyor-tiny + rotate: false + xy: 1725, 617 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-payload-conveyor-xlarge + rotate: false + xy: 409, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-payload-router-large + rotate: false + xy: 1349, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-payload-router-medium rotate: false xy: 1081, 453 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spawn-small +block-payload-router-small rotate: false - xy: 1593, 389 + xy: 1779, 653 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spawn-tiny +block-payload-router-tiny rotate: false - xy: 1409, 220 + xy: 1743, 635 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spawn-xlarge +block-payload-router-xlarge rotate: false - xy: 351, 416 + xy: 359, 716 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spectre-large +block-pebbles-large rotate: false - xy: 1321, 681 + xy: 1391, 891 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spectre-medium - rotate: false - xy: 1115, 487 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-spectre-small - rotate: false - xy: 1626, 441 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-spectre-tiny - rotate: false - xy: 1427, 215 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-spectre-xlarge - rotate: false - xy: 401, 466 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-spore-cluster-large - rotate: false - xy: 1531, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-spore-cluster-medium - rotate: false - xy: 1149, 521 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-spore-cluster-small - rotate: false - xy: 1652, 467 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-spore-cluster-tiny - rotate: false - xy: 1445, 215 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-spore-cluster-xlarge - rotate: false - xy: 451, 516 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-spore-moss-large - rotate: false - xy: 1489, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-spore-moss-medium - rotate: false - xy: 1217, 555 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-spore-moss-small - rotate: false - xy: 1593, 363 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-spore-moss-tiny - rotate: false - xy: 1463, 215 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-spore-moss-xlarge - rotate: false - xy: 501, 566 - size: 48, 48 - orig: 48, 48 - offset: 0, 0 - index: -1 -block-spore-pine-large - rotate: false - xy: 1447, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-spore-pine-medium +block-pebbles-medium rotate: false xy: 1081, 419 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spore-pine-small +block-pebbles-small rotate: false - xy: 1626, 415 + xy: 1805, 653 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spore-pine-tiny +block-pebbles-tiny rotate: false - xy: 1481, 215 + xy: 1725, 599 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spore-pine-xlarge +block-pebbles-xlarge + rotate: false + xy: 409, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-phase-conduit-large + rotate: false + xy: 1433, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-phase-conduit-medium + rotate: false + xy: 1115, 534 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-phase-conduit-small + rotate: false + xy: 1831, 632 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-phase-conduit-tiny + rotate: false + xy: 1743, 617 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-phase-conduit-xlarge + rotate: false + xy: 459, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-phase-conveyor-large + rotate: false + xy: 1475, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-phase-conveyor-medium + rotate: false + xy: 1115, 500 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-phase-conveyor-small + rotate: false + xy: 1857, 632 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-phase-conveyor-tiny + rotate: false + xy: 1761, 635 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-phase-conveyor-xlarge + rotate: false + xy: 409, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-phase-wall-large + rotate: false + xy: 1517, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-phase-wall-large-large + rotate: false + xy: 1559, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-phase-wall-large-medium + rotate: false + xy: 1115, 466 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-phase-wall-large-small + rotate: false + xy: 1883, 632 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-phase-wall-large-tiny + rotate: false + xy: 1725, 581 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-phase-wall-large-xlarge + rotate: false + xy: 459, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-phase-wall-medium + rotate: false + xy: 1115, 432 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-phase-wall-small + rotate: false + xy: 1909, 632 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-phase-wall-tiny + rotate: false + xy: 1743, 599 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-phase-wall-xlarge + rotate: false + xy: 509, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-phase-weaver-large + rotate: false + xy: 1601, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-phase-weaver-medium + rotate: false + xy: 1149, 542 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-phase-weaver-small + rotate: false + xy: 1935, 635 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-phase-weaver-tiny + rotate: false + xy: 1761, 617 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-phase-weaver-xlarge + rotate: false + xy: 459, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-pine-large + rotate: false + xy: 1643, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-pine-medium + rotate: false + xy: 1149, 508 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-pine-small + rotate: false + xy: 1961, 635 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-pine-tiny + rotate: false + xy: 1779, 635 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-pine-xlarge + rotate: false + xy: 509, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-plastanium-compressor-large + rotate: false + xy: 1685, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-plastanium-compressor-medium + rotate: false + xy: 1149, 474 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-plastanium-compressor-small + rotate: false + xy: 1987, 635 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-plastanium-compressor-tiny + rotate: false + xy: 1725, 563 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-plastanium-compressor-xlarge + rotate: false + xy: 559, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-plastanium-conveyor-large + rotate: false + xy: 1727, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-plastanium-conveyor-medium + rotate: false + xy: 1149, 440 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-plastanium-conveyor-small + rotate: false + xy: 2013, 635 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-plastanium-conveyor-tiny + rotate: false + xy: 1743, 581 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-plastanium-conveyor-xlarge + rotate: false + xy: 509, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-plastanium-wall-large + rotate: false + xy: 1769, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-plastanium-wall-large-large + rotate: false + xy: 1811, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-plastanium-wall-large-medium + rotate: false + xy: 1115, 398 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-plastanium-wall-large-small + rotate: false + xy: 1537, 593 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-plastanium-wall-large-tiny + rotate: false + xy: 1761, 599 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-plastanium-wall-large-xlarge + rotate: false + xy: 559, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-plastanium-wall-medium + rotate: false + xy: 1149, 406 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-plastanium-wall-small + rotate: false + xy: 1935, 609 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-plastanium-wall-tiny + rotate: false + xy: 1779, 617 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-plastanium-wall-xlarge + rotate: false + xy: 609, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-plated-conduit-large + rotate: false + xy: 1853, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-plated-conduit-medium + rotate: false + xy: 1081, 385 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-plated-conduit-small + rotate: false + xy: 1961, 609 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-plated-conduit-tiny + rotate: false + xy: 1797, 635 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-plated-conduit-xlarge + rotate: false + xy: 559, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-pneumatic-drill-large + rotate: false + xy: 1895, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-pneumatic-drill-medium + rotate: false + xy: 1115, 364 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-pneumatic-drill-small + rotate: false + xy: 1987, 609 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-pneumatic-drill-tiny + rotate: false + xy: 1725, 545 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-pneumatic-drill-xlarge + rotate: false + xy: 609, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-power-node-large + rotate: false + xy: 1937, 891 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-power-node-large-large + rotate: false + xy: 859, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-power-node-large-medium + rotate: false + xy: 1149, 372 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-power-node-large-small + rotate: false + xy: 2013, 609 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-power-node-large-tiny + rotate: false + xy: 1743, 563 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-power-node-large-xlarge + rotate: false + xy: 659, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-power-node-medium + rotate: false + xy: 1081, 351 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-power-node-small + rotate: false + xy: 1485, 590 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-power-node-tiny + rotate: false + xy: 1761, 581 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-power-node-xlarge + rotate: false + xy: 609, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-power-source-large + rotate: false + xy: 859, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-power-source-medium + rotate: false + xy: 1115, 330 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-power-source-small + rotate: false + xy: 1511, 590 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-power-source-tiny + rotate: false + xy: 1779, 599 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-power-source-xlarge + rotate: false + xy: 659, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-power-void-large + rotate: false + xy: 901, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-power-void-medium + rotate: false + xy: 1149, 338 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-power-void-small + rotate: false + xy: 1485, 564 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-power-void-tiny + rotate: false + xy: 1797, 617 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-power-void-xlarge + rotate: false + xy: 709, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-pulse-conduit-large + rotate: false + xy: 859, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-pulse-conduit-medium + rotate: false + xy: 1081, 317 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-pulse-conduit-small + rotate: false + xy: 1511, 564 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-pulse-conduit-tiny + rotate: false + xy: 1725, 527 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-pulse-conduit-xlarge + rotate: false + xy: 659, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-pulverizer-large + rotate: false + xy: 943, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-pulverizer-medium + rotate: false + xy: 1115, 296 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-pulverizer-small + rotate: false + xy: 1537, 567 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-pulverizer-tiny + rotate: false + xy: 1743, 545 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-pulverizer-xlarge + rotate: false + xy: 709, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-pyratite-mixer-large + rotate: false + xy: 901, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-pyratite-mixer-medium + rotate: false + xy: 1149, 304 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-pyratite-mixer-small + rotate: false + xy: 1485, 538 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-pyratite-mixer-tiny + rotate: false + xy: 1761, 563 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-pyratite-mixer-xlarge + rotate: false + xy: 709, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-repair-point-large + rotate: false + xy: 859, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-repair-point-medium + rotate: false + xy: 1081, 283 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-repair-point-small + rotate: false + xy: 1511, 538 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-repair-point-tiny + rotate: false + xy: 1779, 581 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-repair-point-xlarge + rotate: false + xy: 759, 816 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-resupply-point-large + rotate: false + xy: 985, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-resupply-point-medium + rotate: false + xy: 1115, 262 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-resupply-point-small + rotate: false + xy: 1537, 541 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-resupply-point-tiny + rotate: false + xy: 1797, 599 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-resupply-point-xlarge + rotate: false + xy: 759, 766 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-ripple-large + rotate: false + xy: 943, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ripple-medium + rotate: false + xy: 1149, 270 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ripple-small + rotate: false + xy: 1484, 512 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ripple-tiny + rotate: false + xy: 1743, 527 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ripple-xlarge + rotate: false + xy: 759, 716 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-rotary-pump-large + rotate: false + xy: 901, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-rotary-pump-medium + rotate: false + xy: 1081, 249 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-rotary-pump-small + rotate: false + xy: 1484, 486 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-rotary-pump-tiny + rotate: false + xy: 1761, 545 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-rotary-pump-xlarge + rotate: false + xy: 809, 828 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-router-large + rotate: false + xy: 859, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-router-medium + rotate: false + xy: 1115, 228 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-router-small + rotate: false + xy: 1510, 512 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-router-tiny + rotate: false + xy: 1779, 563 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-router-xlarge + rotate: false + xy: 809, 778 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-rtg-generator-large + rotate: false + xy: 1027, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-rtg-generator-medium + rotate: false + xy: 1149, 236 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-rtg-generator-small + rotate: false + xy: 1484, 460 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-rtg-generator-tiny + rotate: false + xy: 1797, 581 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-rtg-generator-xlarge + rotate: false + xy: 809, 728 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-salt-large + rotate: false + xy: 985, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-salt-medium + rotate: false + xy: 1081, 215 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-salt-small + rotate: false + xy: 1510, 486 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-salt-tiny + rotate: false + xy: 1761, 527 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-salt-wall-large + rotate: false + xy: 943, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-salt-wall-medium + rotate: false + xy: 1115, 194 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-salt-wall-small + rotate: false + xy: 1484, 434 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-salt-wall-tiny + rotate: false + xy: 1779, 545 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-salt-wall-xlarge + rotate: false + xy: 809, 678 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-salt-xlarge + rotate: false + xy: 331, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-salvo-large + rotate: false + xy: 901, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-salvo-medium + rotate: false + xy: 1149, 202 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-salvo-small + rotate: false + xy: 1510, 460 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-salvo-tiny + rotate: false + xy: 1797, 563 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-salvo-xlarge + rotate: false + xy: 331, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-sand-boulder-large + rotate: false + xy: 1069, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-sand-boulder-medium + rotate: false + xy: 1107, 160 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-sand-boulder-small + rotate: false + xy: 1484, 408 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-sand-boulder-tiny + rotate: false + xy: 1779, 527 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-sand-boulder-xlarge + rotate: false + xy: 381, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-sand-large + rotate: false + xy: 1027, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-sand-medium + rotate: false + xy: 1107, 126 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-sand-small + rotate: false + xy: 1510, 434 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-sand-tiny + rotate: false + xy: 1797, 545 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-sand-wall-large + rotate: false + xy: 985, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-sand-wall-medium + rotate: false + xy: 1107, 92 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-sand-wall-small + rotate: false + xy: 1484, 382 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-sand-wall-tiny + rotate: false + xy: 1797, 527 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-sand-wall-xlarge + rotate: false + xy: 381, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-sand-water-large + rotate: false + xy: 943, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-sand-water-medium + rotate: false + xy: 1107, 58 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-sand-water-small + rotate: false + xy: 1510, 408 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-sand-water-tiny + rotate: false + xy: 1725, 509 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-sand-water-xlarge + rotate: false + xy: 431, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-sand-xlarge + rotate: false + xy: 431, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-scatter-large + rotate: false + xy: 901, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-scatter-medium + rotate: false + xy: 1107, 24 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-scatter-small + rotate: false + xy: 1510, 382 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-scatter-tiny + rotate: false + xy: 1743, 509 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-scatter-xlarge + rotate: false + xy: 481, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-scorch-large + rotate: false + xy: 1111, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-scorch-medium + rotate: false + xy: 1149, 168 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-scorch-small + rotate: false + xy: 1507, 356 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-scorch-tiny + rotate: false + xy: 1761, 509 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-scorch-xlarge + rotate: false + xy: 481, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-scrap-wall-gigantic-large + rotate: false + xy: 1069, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-scrap-wall-gigantic-medium + rotate: false + xy: 1141, 134 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-scrap-wall-gigantic-small + rotate: false + xy: 1507, 330 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-scrap-wall-gigantic-tiny + rotate: false + xy: 1779, 509 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-scrap-wall-gigantic-xlarge + rotate: false + xy: 531, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-scrap-wall-huge-large + rotate: false + xy: 1027, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-scrap-wall-huge-medium + rotate: false + xy: 1141, 100 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-scrap-wall-huge-small + rotate: false + xy: 1507, 304 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-scrap-wall-huge-tiny + rotate: false + xy: 1797, 509 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-scrap-wall-huge-xlarge + rotate: false + xy: 531, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-scrap-wall-large + rotate: false + xy: 985, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-scrap-wall-large-large + rotate: false + xy: 943, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-scrap-wall-large-medium + rotate: false + xy: 1141, 66 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-scrap-wall-large-small + rotate: false + xy: 1507, 278 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-scrap-wall-large-tiny + rotate: false + xy: 1624, 492 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-scrap-wall-large-xlarge + rotate: false + xy: 581, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-scrap-wall-medium + rotate: false + xy: 1141, 32 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-scrap-wall-small + rotate: false + xy: 1537, 515 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-scrap-wall-tiny + rotate: false + xy: 1642, 492 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-scrap-wall-xlarge + rotate: false + xy: 581, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-segment-large + rotate: false + xy: 1153, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-segment-medium + rotate: false + xy: 1175, 134 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-segment-small + rotate: false + xy: 1536, 489 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-segment-tiny + rotate: false + xy: 1624, 474 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-segment-xlarge + rotate: false + xy: 631, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-separator-large + rotate: false + xy: 1111, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-separator-medium + rotate: false + xy: 1175, 100 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-separator-small + rotate: false + xy: 1536, 463 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-separator-tiny + rotate: false + xy: 1642, 474 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-separator-xlarge + rotate: false + xy: 631, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-shale-boulder-large + rotate: false + xy: 1069, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-shale-boulder-medium + rotate: false + xy: 1175, 66 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-shale-boulder-small + rotate: false + xy: 1536, 437 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-shale-boulder-tiny + rotate: false + xy: 1624, 456 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-shale-boulder-xlarge + rotate: false + xy: 681, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-shale-large + rotate: false + xy: 1027, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-shale-medium + rotate: false + xy: 1175, 32 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-shale-small + rotate: false + xy: 1536, 411 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-shale-tiny + rotate: false + xy: 1642, 456 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-shale-wall-large + rotate: false + xy: 985, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-shale-wall-medium + rotate: false + xy: 1178, 576 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-shale-wall-small + rotate: false + xy: 1536, 385 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-shale-wall-tiny + rotate: false + xy: 1624, 438 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-shale-wall-xlarge + rotate: false + xy: 681, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-shale-xlarge + rotate: false + xy: 731, 666 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-shock-mine-large + rotate: false + xy: 1195, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-shock-mine-medium + rotate: false + xy: 1212, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-shock-mine-small + rotate: false + xy: 1533, 356 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-shock-mine-tiny + rotate: false + xy: 1642, 438 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-shock-mine-xlarge + rotate: false + xy: 731, 616 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-shrubs-large + rotate: false + xy: 1153, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-shrubs-medium + rotate: false + xy: 1246, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-shrubs-small + rotate: false + xy: 1533, 330 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-shrubs-tiny + rotate: false + xy: 1624, 420 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-shrubs-xlarge + rotate: false + xy: 781, 628 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-silicon-crucible-large + rotate: false + xy: 1111, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-silicon-crucible-medium + rotate: false + xy: 1280, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-silicon-crucible-small + rotate: false + xy: 1533, 304 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-silicon-crucible-tiny + rotate: false + xy: 1642, 420 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-silicon-crucible-xlarge + rotate: false + xy: 831, 628 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-silicon-smelter-large + rotate: false + xy: 1069, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-silicon-smelter-medium + rotate: false + xy: 1314, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-silicon-smelter-small + rotate: false + xy: 1533, 278 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-silicon-smelter-tiny + rotate: false + xy: 1624, 402 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-silicon-smelter-xlarge + rotate: false + xy: 781, 578 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-slag-large + rotate: false + xy: 1027, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-slag-medium + rotate: false + xy: 1348, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-slag-small + rotate: false + xy: 1525, 252 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-slag-tiny + rotate: false + xy: 1642, 402 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-slag-xlarge + rotate: false + xy: 831, 578 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-snow-boulder-large + rotate: false + xy: 1237, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-snow-boulder-medium + rotate: false + xy: 1382, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-snow-boulder-small + rotate: false + xy: 1525, 226 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-snow-boulder-tiny + rotate: false + xy: 1624, 384 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-snow-boulder-xlarge + rotate: false + xy: 351, 566 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-snow-large + rotate: false + xy: 1195, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-snow-medium + rotate: false + xy: 1416, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-snow-pine-large + rotate: false + xy: 1153, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-snow-pine-medium + rotate: false + xy: 1450, 579 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-snow-pine-small + rotate: false + xy: 1525, 200 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-snow-pine-tiny + rotate: false + xy: 1642, 384 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-snow-pine-xlarge + rotate: false + xy: 351, 516 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-snow-small + rotate: false + xy: 1551, 252 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-snow-tiny + rotate: false + xy: 1660, 492 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-snow-wall-large + rotate: false + xy: 1111, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-snow-wall-medium + rotate: false + xy: 1183, 542 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-snow-wall-small + rotate: false + xy: 1551, 226 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-snow-wall-tiny + rotate: false + xy: 1660, 474 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-snow-wall-xlarge + rotate: false + xy: 401, 566 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-snow-xlarge + rotate: false + xy: 351, 466 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-solar-panel-large + rotate: false + xy: 1069, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-solar-panel-large-large + rotate: false + xy: 1279, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-solar-panel-large-medium + rotate: false + xy: 1183, 508 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-solar-panel-large-small + rotate: false + xy: 1551, 200 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-solar-panel-large-tiny + rotate: false + xy: 1660, 456 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-solar-panel-large-xlarge + rotate: false + xy: 401, 516 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-solar-panel-medium + rotate: false + xy: 1183, 474 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-solar-panel-small + rotate: false + xy: 1449, 190 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-solar-panel-tiny + rotate: false + xy: 1660, 438 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-solar-panel-xlarge + rotate: false + xy: 451, 566 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-sorter-large + rotate: false + xy: 1237, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-sorter-medium + rotate: false + xy: 1183, 440 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-sorter-small + rotate: false + xy: 1449, 164 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-sorter-tiny + rotate: false + xy: 1660, 420 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-sorter-xlarge + rotate: false + xy: 351, 416 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-space-large + rotate: false + xy: 1195, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-space-medium + rotate: false + xy: 1183, 406 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-space-small + rotate: false + xy: 1475, 190 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-space-tiny + rotate: false + xy: 1660, 402 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-space-xlarge + rotate: false + xy: 401, 466 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-spawn-large + rotate: false + xy: 1153, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-spawn-medium + rotate: false + xy: 1183, 372 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-spawn-small + rotate: false + xy: 1475, 164 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-spawn-tiny + rotate: false + xy: 1660, 384 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-spawn-xlarge + rotate: false + xy: 451, 516 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-spectre-large + rotate: false + xy: 1111, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-spectre-medium + rotate: false + xy: 1183, 338 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-spectre-small + rotate: false + xy: 1469, 138 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-spectre-tiny + rotate: false + xy: 1678, 496 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-spectre-xlarge + rotate: false + xy: 501, 566 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-spore-cluster-large + rotate: false + xy: 1321, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-spore-cluster-medium + rotate: false + xy: 1183, 304 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-spore-cluster-small + rotate: false + xy: 1469, 112 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-spore-cluster-tiny + rotate: false + xy: 1696, 496 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-spore-cluster-xlarge rotate: false xy: 351, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spore-press-large +block-spore-moss-large rotate: false - xy: 1405, 723 + xy: 1279, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spore-press-medium +block-spore-moss-medium rotate: false - xy: 1115, 453 + xy: 1183, 270 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spore-press-small +block-spore-moss-small rotate: false - xy: 1619, 389 + xy: 1469, 86 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spore-press-tiny +block-spore-moss-tiny rotate: false - xy: 1499, 283 + xy: 1678, 478 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spore-press-xlarge +block-spore-moss-xlarge rotate: false xy: 401, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-spore-wall-large +block-spore-pine-large rotate: false - xy: 1363, 681 + xy: 1237, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-spore-wall-medium +block-spore-pine-medium rotate: false - xy: 1149, 487 + xy: 1183, 236 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-spore-wall-small +block-spore-pine-small rotate: false - xy: 1652, 441 + xy: 1495, 138 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-spore-wall-tiny +block-spore-pine-tiny rotate: false - xy: 1517, 283 + xy: 1696, 478 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-spore-wall-xlarge +block-spore-pine-xlarge rotate: false xy: 451, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-steam-generator-large +block-spore-press-large rotate: false - xy: 1573, 849 + xy: 1195, 723 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-steam-generator-medium +block-spore-press-medium rotate: false - xy: 1183, 521 + xy: 1183, 202 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-steam-generator-small +block-spore-press-small rotate: false - xy: 1619, 363 + xy: 1495, 112 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-steam-generator-tiny +block-spore-press-tiny rotate: false - xy: 1499, 265 + xy: 1678, 460 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-steam-generator-xlarge +block-spore-press-xlarge rotate: false xy: 501, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-stone-large +block-spore-wall-large rotate: false - xy: 1531, 807 + xy: 1153, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-stone-medium +block-spore-wall-medium rotate: false - xy: 1251, 555 + xy: 1183, 168 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-stone-small +block-spore-wall-small rotate: false - xy: 1652, 415 + xy: 1495, 86 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-stone-tiny +block-spore-wall-tiny rotate: false - xy: 1535, 283 + xy: 1696, 460 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-stone-wall-large - rotate: false - xy: 1489, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-stone-wall-medium - rotate: false - xy: 1115, 419 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-stone-wall-small - rotate: false - xy: 1645, 389 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-stone-wall-tiny - rotate: false - xy: 1499, 247 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-stone-wall-xlarge +block-spore-wall-xlarge rotate: false xy: 551, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-stone-xlarge +block-steam-generator-large + rotate: false + xy: 1363, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-steam-generator-medium + rotate: false + xy: 1217, 545 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-steam-generator-small + rotate: false + xy: 1479, 60 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-steam-generator-tiny + rotate: false + xy: 1678, 442 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-steam-generator-xlarge rotate: false xy: 351, 316 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-surge-tower-large +block-stone-large rotate: false - xy: 1447, 723 + xy: 1321, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-surge-tower-medium +block-stone-medium rotate: false - xy: 1149, 453 + xy: 1217, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-surge-tower-small +block-stone-small rotate: false - xy: 1645, 363 + xy: 1479, 34 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-surge-tower-tiny +block-stone-tiny rotate: false - xy: 1517, 265 + xy: 1696, 442 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-surge-tower-xlarge +block-stone-wall-large + rotate: false + xy: 1279, 765 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-stone-wall-medium + rotate: false + xy: 1251, 545 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-stone-wall-small + rotate: false + xy: 1479, 8 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-stone-wall-tiny + rotate: false + xy: 1678, 424 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-stone-wall-xlarge rotate: false xy: 401, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-surge-wall-large - rotate: false - xy: 1405, 681 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-surge-wall-large-large - rotate: false - xy: 1615, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-surge-wall-large-medium - rotate: false - xy: 1183, 487 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-surge-wall-large-small - rotate: false - xy: 1679, 519 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-surge-wall-large-tiny - rotate: false - xy: 1499, 229 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-surge-wall-large-xlarge +block-stone-xlarge rotate: false xy: 451, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-surge-wall-medium +block-surge-tower-large rotate: false - xy: 1217, 521 + xy: 1237, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-surge-tower-medium + rotate: false + xy: 1217, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-surge-wall-small +block-surge-tower-small rotate: false - xy: 1678, 493 + xy: 1505, 60 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-surge-wall-tiny +block-surge-tower-tiny rotate: false - xy: 1517, 247 + xy: 1696, 424 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-surge-wall-xlarge +block-surge-tower-xlarge rotate: false xy: 501, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-swarmer-large +block-surge-wall-large rotate: false - xy: 1573, 807 + xy: 1195, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-swarmer-medium +block-surge-wall-large-large rotate: false - xy: 1285, 555 + xy: 1405, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-surge-wall-large-medium + rotate: false + xy: 1251, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-swarmer-small +block-surge-wall-large-small rotate: false - xy: 1678, 467 + xy: 1505, 34 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-swarmer-tiny +block-surge-wall-large-tiny rotate: false - xy: 1535, 265 + xy: 1678, 406 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-swarmer-xlarge +block-surge-wall-large-xlarge rotate: false xy: 551, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-switch-large +block-surge-wall-medium rotate: false - xy: 1531, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-switch-medium - rotate: false - xy: 1149, 419 + xy: 1285, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-switch-small +block-surge-wall-small rotate: false - xy: 1678, 441 + xy: 1505, 8 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-switch-tiny +block-surge-wall-tiny rotate: false - xy: 1517, 229 + xy: 1696, 406 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-switch-xlarge +block-surge-wall-xlarge rotate: false xy: 601, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tainted-water-large +block-swarmer-large rotate: false - xy: 1489, 723 + xy: 1363, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tainted-water-medium +block-swarmer-medium rotate: false - xy: 1183, 453 + xy: 1217, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tainted-water-small +block-swarmer-small rotate: false - xy: 1678, 415 + xy: 1501, 174 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tainted-water-tiny +block-swarmer-tiny rotate: false - xy: 1535, 247 + xy: 1678, 388 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tainted-water-xlarge +block-swarmer-xlarge rotate: false xy: 351, 266 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tar-large +block-switch-large rotate: false - xy: 1447, 681 + xy: 1321, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tar-medium +block-switch-medium rotate: false - xy: 1217, 487 + xy: 1251, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tar-small +block-switch-small rotate: false - xy: 1671, 389 + xy: 1527, 174 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tar-tiny +block-switch-tiny rotate: false - xy: 1535, 229 + xy: 1696, 388 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tar-xlarge +block-switch-xlarge rotate: false xy: 401, 316 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tendrils-large +block-tainted-water-large rotate: false - xy: 1657, 849 + xy: 1279, 723 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tendrils-medium +block-tainted-water-medium rotate: false - xy: 1251, 521 + xy: 1285, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tendrils-small +block-tainted-water-small rotate: false - xy: 1671, 363 + xy: 1553, 174 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tendrils-tiny +block-tainted-water-tiny rotate: false - xy: 1499, 211 + xy: 1714, 491 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tendrils-xlarge +block-tainted-water-xlarge rotate: false xy: 451, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tetrative-reconstructor-large +block-tar-large rotate: false - xy: 1615, 807 + xy: 1237, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tetrative-reconstructor-medium +block-tar-medium rotate: false - xy: 1319, 555 + xy: 1319, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tetrative-reconstructor-small +block-tar-small rotate: false - xy: 1473, 341 + xy: 1521, 148 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tetrative-reconstructor-tiny +block-tar-tiny rotate: false - xy: 1517, 211 + xy: 1714, 473 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tetrative-reconstructor-xlarge +block-tar-xlarge rotate: false xy: 501, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thermal-generator-large +block-tendrils-large rotate: false - xy: 1573, 765 + xy: 1447, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thermal-generator-medium +block-tendrils-medium rotate: false - xy: 1183, 419 + xy: 1217, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thermal-generator-small +block-tendrils-small rotate: false - xy: 1319, 299 + xy: 1521, 122 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thermal-generator-tiny +block-tendrils-tiny rotate: false - xy: 1535, 211 + xy: 1732, 491 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thermal-generator-xlarge +block-tendrils-xlarge rotate: false xy: 551, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thermal-pump-large +block-tetrative-reconstructor-large rotate: false - xy: 1531, 723 + xy: 1405, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thermal-pump-medium +block-tetrative-reconstructor-medium rotate: false - xy: 1217, 453 + xy: 1251, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thermal-pump-small +block-tetrative-reconstructor-small rotate: false - xy: 1321, 273 + xy: 1547, 148 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thermal-pump-tiny +block-tetrative-reconstructor-tiny rotate: false - xy: 1553, 271 + xy: 1714, 455 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thermal-pump-xlarge +block-tetrative-reconstructor-xlarge rotate: false xy: 601, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thorium-reactor-large +block-thermal-generator-large rotate: false - xy: 1489, 681 + xy: 1363, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thorium-reactor-medium +block-thermal-generator-medium rotate: false - xy: 1251, 487 + xy: 1285, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thorium-reactor-small +block-thermal-generator-small rotate: false - xy: 1321, 247 + xy: 1521, 96 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thorium-reactor-tiny +block-thermal-generator-tiny rotate: false - xy: 1571, 271 + xy: 1732, 473 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thorium-reactor-xlarge +block-thermal-generator-xlarge rotate: false xy: 651, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thorium-wall-large +block-thermal-pump-large rotate: false - xy: 1699, 849 + xy: 1321, 723 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thorium-wall-large-large +block-thermal-pump-medium rotate: false - xy: 1657, 807 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-thorium-wall-large-medium - rotate: false - xy: 1285, 521 + xy: 1319, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thorium-wall-large-small +block-thermal-pump-small rotate: false - xy: 1321, 221 + xy: 1547, 122 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thorium-wall-large-tiny +block-thermal-pump-tiny rotate: false - xy: 1553, 253 + xy: 1750, 491 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thorium-wall-large-xlarge +block-thermal-pump-xlarge rotate: false xy: 351, 216 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thorium-wall-medium +block-thorium-reactor-large rotate: false - xy: 1353, 555 + xy: 1279, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-thorium-reactor-medium + rotate: false + xy: 1353, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thorium-wall-small +block-thorium-reactor-small rotate: false - xy: 1317, 195 + xy: 1547, 96 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thorium-wall-tiny +block-thorium-reactor-tiny rotate: false - xy: 1553, 235 + xy: 1714, 437 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thorium-wall-xlarge +block-thorium-reactor-xlarge rotate: false xy: 401, 266 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-thruster-large +block-thorium-wall-large rotate: false - xy: 1615, 765 + xy: 1489, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-thruster-medium +block-thorium-wall-large-large rotate: false - xy: 1217, 419 + xy: 1447, 807 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-thorium-wall-large-medium + rotate: false + xy: 1217, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-thruster-small +block-thorium-wall-large-small rotate: false - xy: 1317, 169 + xy: 1531, 70 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-thruster-tiny +block-thorium-wall-large-tiny rotate: false - xy: 1571, 253 + xy: 1732, 455 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-thruster-xlarge +block-thorium-wall-large-xlarge rotate: false xy: 451, 316 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-titanium-conveyor-large +block-thorium-wall-medium rotate: false - xy: 1573, 723 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-titanium-conveyor-medium - rotate: false - xy: 1251, 453 + xy: 1251, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-titanium-conveyor-small +block-thorium-wall-small rotate: false - xy: 1317, 143 + xy: 1531, 44 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-titanium-conveyor-tiny +block-thorium-wall-tiny rotate: false - xy: 1553, 217 + xy: 1750, 473 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-titanium-conveyor-xlarge +block-thorium-wall-xlarge rotate: false xy: 501, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-titanium-wall-large +block-thruster-large rotate: false - xy: 1531, 681 + xy: 1405, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-titanium-wall-large-large +block-thruster-medium rotate: false - xy: 1741, 849 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-titanium-wall-large-medium - rotate: false - xy: 1285, 487 + xy: 1285, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-titanium-wall-large-small +block-thruster-small rotate: false - xy: 1317, 117 + xy: 1531, 18 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-titanium-wall-large-tiny +block-thruster-tiny rotate: false - xy: 1571, 235 + xy: 1768, 491 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-titanium-wall-large-xlarge +block-thruster-xlarge rotate: false xy: 551, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-titanium-wall-medium +block-titanium-conveyor-large rotate: false - xy: 1319, 521 + xy: 1363, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-titanium-conveyor-medium + rotate: false + xy: 1319, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-titanium-wall-small +block-titanium-conveyor-small rotate: false - xy: 1345, 305 + xy: 1557, 70 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-titanium-wall-tiny +block-titanium-conveyor-tiny rotate: false - xy: 1571, 217 + xy: 1714, 419 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-titanium-wall-xlarge +block-titanium-conveyor-xlarge rotate: false xy: 601, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-tsunami-large +block-titanium-wall-large rotate: false - xy: 1699, 807 + xy: 1321, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-tsunami-medium +block-titanium-wall-large-large rotate: false - xy: 1387, 555 + xy: 1531, 849 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-titanium-wall-large-medium + rotate: false + xy: 1353, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-tsunami-small +block-titanium-wall-large-small rotate: false - xy: 1347, 279 + xy: 1557, 44 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-tsunami-tiny +block-titanium-wall-large-tiny rotate: false - xy: 1589, 262 + xy: 1732, 437 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-tsunami-xlarge +block-titanium-wall-large-xlarge rotate: false xy: 651, 516 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-underflow-gate-large +block-titanium-wall-medium rotate: false - xy: 1657, 765 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-underflow-gate-medium - rotate: false - xy: 1251, 419 + xy: 1387, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-underflow-gate-small +block-titanium-wall-small rotate: false - xy: 1347, 253 + xy: 1557, 18 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-underflow-gate-tiny +block-titanium-wall-tiny rotate: false - xy: 1589, 244 + xy: 1750, 455 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-underflow-gate-xlarge +block-titanium-wall-xlarge rotate: false xy: 701, 566 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-unloader-large +block-tsunami-large rotate: false - xy: 1615, 723 + xy: 1489, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-unloader-medium +block-tsunami-medium rotate: false - xy: 1285, 453 + xy: 1217, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-unloader-small +block-tsunami-small rotate: false - xy: 1347, 227 + xy: 1573, 148 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-unloader-tiny +block-tsunami-tiny rotate: false - xy: 1589, 226 + xy: 1768, 473 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-unloader-xlarge +block-tsunami-xlarge rotate: false xy: 351, 166 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-vault-large +block-underflow-gate-large rotate: false - xy: 1573, 681 + xy: 1447, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-vault-medium +block-underflow-gate-medium rotate: false - xy: 1319, 487 + xy: 1251, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-vault-small +block-underflow-gate-small rotate: false - xy: 1340, 91 + xy: 1573, 122 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-vault-tiny +block-underflow-gate-tiny rotate: false - xy: 1589, 208 + xy: 1786, 491 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-vault-xlarge +block-underflow-gate-xlarge rotate: false xy: 401, 216 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-water-extractor-large +block-unloader-large rotate: false - xy: 1783, 849 + xy: 1405, 723 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-water-extractor-medium +block-unloader-medium rotate: false - xy: 1353, 521 + xy: 1285, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-water-extractor-small +block-unloader-small rotate: false - xy: 1347, 65 + xy: 1573, 96 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-water-extractor-tiny +block-unloader-tiny rotate: false - xy: 1607, 257 + xy: 1714, 401 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-water-extractor-xlarge +block-unloader-xlarge rotate: false xy: 451, 266 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-water-large +block-vault-large rotate: false - xy: 1741, 807 + xy: 1363, 681 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-water-medium +block-vault-medium rotate: false - xy: 1285, 419 + xy: 1319, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-water-small +block-vault-small rotate: false - xy: 1027, 39 + xy: 1583, 70 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-water-tiny +block-vault-tiny rotate: false - xy: 1607, 239 + xy: 1732, 419 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-water-xlarge +block-vault-xlarge rotate: false xy: 501, 316 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-wave-large +block-water-extractor-large rotate: false - xy: 1699, 765 + xy: 1573, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-wave-medium +block-water-extractor-medium rotate: false - xy: 1319, 453 + xy: 1353, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-wave-small +block-water-extractor-small rotate: false - xy: 1027, 13 + xy: 1583, 44 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-wave-tiny +block-water-extractor-tiny rotate: false - xy: 1607, 221 + xy: 1750, 437 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-wave-xlarge +block-water-extractor-xlarge rotate: false xy: 551, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-white-tree-dead-large +block-water-large rotate: false - xy: 1657, 723 + xy: 1531, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-white-tree-dead-medium +block-water-medium rotate: false - xy: 1353, 487 + xy: 1387, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-white-tree-dead-small +block-water-small rotate: false - xy: 1053, 39 + xy: 1583, 18 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-white-tree-dead-tiny +block-water-tiny rotate: false - xy: 1607, 203 + xy: 1768, 455 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-white-tree-dead-xlarge +block-water-xlarge rotate: false xy: 601, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-white-tree-large +block-wave-large rotate: false - xy: 1615, 681 + xy: 1489, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-white-tree-medium +block-wave-medium rotate: false - xy: 1387, 521 + xy: 1421, 545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-white-tree-small +block-wave-small rotate: false - xy: 1053, 13 + xy: 1562, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-white-tree-tiny +block-wave-tiny rotate: false - xy: 1553, 199 + xy: 1786, 473 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-white-tree-xlarge +block-wave-xlarge rotate: false xy: 651, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +block-white-tree-dead-large + rotate: false + xy: 1447, 723 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-white-tree-dead-medium + rotate: false + xy: 1217, 307 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-white-tree-dead-small + rotate: false + xy: 1562, 463 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-white-tree-dead-tiny + rotate: false + xy: 1732, 401 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-white-tree-dead-xlarge + rotate: false + xy: 701, 516 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-white-tree-large + rotate: false + xy: 1405, 681 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-white-tree-medium + rotate: false + xy: 1251, 341 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-white-tree-small + rotate: false + xy: 1562, 437 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-white-tree-tiny + rotate: false + xy: 1750, 419 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-white-tree-xlarge + rotate: false + xy: 351, 116 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 button rotate: false - xy: 1273, 652 + xy: 919, 594 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21149,7 +22689,7 @@ button index: -1 button-disabled rotate: false - xy: 1007, 652 + xy: 1657, 736 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21157,7 +22697,7 @@ button-disabled index: -1 button-down rotate: false - xy: 1951, 812 + xy: 1867, 812 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21165,7 +22705,7 @@ button-down index: -1 button-edge-1 rotate: false - xy: 1007, 623 + xy: 1825, 778 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21173,7 +22713,7 @@ button-edge-1 index: -1 button-edge-2 rotate: false - xy: 1045, 652 + xy: 1489, 694 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21181,7 +22721,7 @@ button-edge-2 index: -1 button-edge-3 rotate: false - xy: 1951, 783 + xy: 837, 3 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21189,7 +22729,7 @@ button-edge-3 index: -1 button-edge-4 rotate: false - xy: 1045, 623 + xy: 875, 3 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21197,7 +22737,7 @@ button-edge-4 index: -1 button-right-disabled rotate: false - xy: 1045, 623 + xy: 875, 3 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21205,7 +22745,7 @@ button-right-disabled index: -1 button-edge-over-4 rotate: false - xy: 1083, 652 + xy: 913, 3 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21213,7 +22753,7 @@ button-edge-over-4 index: -1 button-over rotate: false - xy: 1083, 623 + xy: 951, 3 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21221,7 +22761,7 @@ button-over index: -1 button-red rotate: false - xy: 1121, 652 + xy: 881, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21229,7 +22769,7 @@ button-red index: -1 button-right rotate: false - xy: 1159, 623 + xy: 881, 594 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21237,7 +22777,7 @@ button-right index: -1 button-right-down rotate: false - xy: 1121, 623 + xy: 881, 623 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21245,7 +22785,7 @@ button-right-down index: -1 button-right-over rotate: false - xy: 1159, 652 + xy: 919, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21253,7 +22793,7 @@ button-right-over index: -1 button-select rotate: false - xy: 1079, 39 + xy: 1562, 411 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -21261,7 +22801,7 @@ button-select index: -1 button-square rotate: false - xy: 1235, 652 + xy: 995, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21269,7 +22809,7 @@ button-square index: -1 button-square-down rotate: false - xy: 1197, 652 + xy: 957, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21277,7 +22817,7 @@ button-square-down index: -1 button-square-over rotate: false - xy: 1197, 623 + xy: 919, 623 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21285,7 +22825,7 @@ button-square-over index: -1 button-trans rotate: false - xy: 1235, 623 + xy: 957, 623 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21293,49 +22833,49 @@ button-trans index: -1 check-disabled rotate: false - xy: 1319, 419 + xy: 1285, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-off rotate: false - xy: 1353, 453 + xy: 1319, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 1387, 487 + xy: 1353, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-disabled rotate: false - xy: 1353, 419 + xy: 1387, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 1387, 453 + xy: 1421, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 1387, 419 + xy: 1217, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 clear rotate: false - xy: 1565, 325 + xy: 795, 866 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -21349,7 +22889,7 @@ crater index: -1 cursor rotate: false - xy: 1319, 351 + xy: 1313, 165 size: 4, 4 orig: 4, 4 offset: 0, 0 @@ -21363,7 +22903,7 @@ discord-banner index: -1 flat-down-base rotate: false - xy: 1273, 623 + xy: 1033, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21378,7 +22918,7 @@ info-banner index: -1 inventory rotate: false - xy: 1105, 23 + xy: 1562, 369 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 @@ -21386,147 +22926,147 @@ inventory index: -1 item-blast-compound-icon rotate: false - xy: 1013, 385 + xy: 1251, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal-icon rotate: false - xy: 1047, 385 + xy: 1285, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper-icon rotate: false - xy: 1081, 385 + xy: 1319, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite-icon rotate: false - xy: 1115, 385 + xy: 1353, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead-icon rotate: false - xy: 1149, 385 + xy: 1387, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass-icon rotate: false - xy: 1183, 385 + xy: 1421, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric-icon rotate: false - xy: 1217, 385 + xy: 1217, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium-icon rotate: false - xy: 1251, 385 + xy: 1251, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite-icon rotate: false - xy: 1285, 385 + xy: 1285, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand-icon rotate: false - xy: 1319, 385 + xy: 1319, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap-icon rotate: false - xy: 1353, 385 + xy: 1353, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon-icon rotate: false - xy: 1387, 385 + xy: 1387, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod-icon rotate: false - xy: 1421, 542 + xy: 1421, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy-icon rotate: false - xy: 1421, 508 + xy: 1217, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium-icon rotate: false - xy: 1421, 474 + xy: 1251, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium-icon rotate: false - xy: 1421, 440 + xy: 1285, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid-icon rotate: false - xy: 1421, 406 + xy: 1319, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil-icon rotate: false - xy: 1421, 372 + xy: 1353, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag-icon rotate: false - xy: 1455, 529 + xy: 1387, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water-icon rotate: false - xy: 1455, 495 + xy: 1421, 409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 logic-node rotate: false - xy: 1455, 461 + xy: 1217, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -21547,7 +23087,7 @@ nomap index: -1 pane rotate: false - xy: 1311, 623 + xy: 957, 594 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21555,7 +23095,7 @@ pane index: -1 pane-2 rotate: false - xy: 1311, 652 + xy: 995, 623 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21563,7 +23103,7 @@ pane-2 index: -1 scroll rotate: false - xy: 1079, 2 + xy: 1559, 290 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -21586,14 +23126,14 @@ scroll-knob-horizontal-black index: -1 scroll-knob-vertical-black rotate: false - xy: 1131, 23 + xy: 1559, 327 size: 24, 40 orig: 24, 40 offset: 0, 0 index: -1 scroll-knob-vertical-thin rotate: false - xy: 1697, 228 + xy: 1815, 575 size: 12, 40 orig: 12, 40 offset: 0, 0 @@ -21607,42 +23147,42 @@ selection index: -1 slider rotate: false - xy: 1533, 621 + xy: 693, 273 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 945, 293 + xy: 1050, 350 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 976, 293 + xy: 1050, 310 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 2017, 901 + xy: 1050, 270 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-vertical rotate: false - xy: 1681, 342 + xy: 1235, 38 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 underline rotate: false - xy: 1425, 652 + xy: 1071, 623 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21650,7 +23190,7 @@ underline index: -1 underline-2 rotate: false - xy: 1349, 652 + xy: 1071, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21658,7 +23198,7 @@ underline-2 index: -1 underline-disabled rotate: false - xy: 1349, 623 + xy: 1033, 623 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21666,7 +23206,7 @@ underline-disabled index: -1 underline-red rotate: false - xy: 1387, 652 + xy: 995, 594 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21674,7 +23214,7 @@ underline-red index: -1 underline-white rotate: false - xy: 1387, 623 + xy: 1109, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21682,42 +23222,42 @@ underline-white index: -1 unit-alpha-large rotate: false - xy: 1825, 849 + xy: 1615, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-alpha-medium rotate: false - xy: 1455, 427 + xy: 1251, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-alpha-small rotate: false - xy: 1157, 39 + xy: 1585, 343 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-alpha-tiny rotate: false - xy: 1571, 199 + xy: 1768, 437 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-alpha-xlarge rotate: false - xy: 701, 516 + xy: 401, 166 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-antumbra-large rotate: false - xy: 1979, 891 + xy: 1951, 849 size: 36, 40 orig: 36, 40 offset: 0, 0 @@ -21731,182 +23271,182 @@ unit-antumbra-medium index: -1 unit-antumbra-small rotate: false - xy: 511, 6 + xy: 1811, 713 size: 21, 24 orig: 21, 24 offset: 0, 0 index: -1 unit-antumbra-tiny rotate: false - xy: 619, 47 + xy: 1125, 6 size: 14, 16 orig: 14, 16 offset: 0, 0 index: -1 unit-antumbra-xlarge rotate: false - xy: 551, 183 + xy: 651, 283 size: 43, 48 orig: 43, 48 offset: 0, 0 index: -1 unit-arkyid-large rotate: false - xy: 1783, 807 + xy: 1573, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-arkyid-medium rotate: false - xy: 1455, 393 + xy: 1285, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-arkyid-small rotate: false - xy: 1183, 39 + xy: 1585, 317 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-arkyid-tiny rotate: false - xy: 1589, 190 + xy: 1786, 455 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-arkyid-xlarge rotate: false - xy: 351, 116 + xy: 451, 216 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-atrax-large rotate: false - xy: 1741, 776 + xy: 753, 1 size: 40, 29 orig: 40, 29 offset: 0, 0 index: -1 unit-atrax-medium rotate: false - xy: 80, 3 + xy: 914, 331 size: 32, 23 orig: 32, 23 offset: 0, 0 index: -1 unit-atrax-small rotate: false - xy: 976, 81 + xy: 1457, 650 size: 24, 17 orig: 24, 17 offset: 0, 0 index: -1 unit-atrax-tiny rotate: false - xy: 1421, 576 + xy: 1379, 179 size: 16, 11 orig: 16, 11 offset: 0, 0 index: -1 unit-atrax-xlarge rotate: false - xy: 401, 180 + xy: 501, 280 size: 48, 34 orig: 48, 34 offset: 0, 0 index: -1 unit-beta-large rotate: false - xy: 1699, 725 + xy: 1531, 767 size: 40, 38 orig: 40, 38 offset: 0, 0 index: -1 unit-beta-medium rotate: false - xy: 877, 369 + xy: 1319, 275 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 unit-beta-small rotate: false - xy: 1209, 40 + xy: 1585, 292 size: 24, 23 orig: 24, 23 offset: 0, 0 index: -1 unit-beta-tiny rotate: false - xy: 1607, 186 + xy: 1583, 1 size: 16, 15 orig: 16, 15 offset: 0, 0 index: -1 unit-beta-xlarge rotate: false - xy: 451, 218 + xy: 551, 318 size: 48, 46 orig: 48, 46 offset: 0, 0 index: -1 unit-bryde-large rotate: false - xy: 1657, 681 + xy: 1489, 723 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-bryde-medium rotate: false - xy: 911, 367 + xy: 1353, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-bryde-small rotate: false - xy: 1235, 39 + xy: 1585, 266 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-bryde-tiny rotate: false - xy: 1625, 252 + xy: 1750, 401 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-bryde-xlarge rotate: false - xy: 501, 266 + xy: 601, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-corvus-large rotate: false - xy: 1867, 863 + xy: 1447, 695 size: 40, 26 orig: 40, 26 offset: 0, 0 index: -1 unit-corvus-medium rotate: false - xy: 1489, 507 + xy: 877, 368 size: 31, 20 orig: 31, 20 offset: 0, 0 index: -1 unit-corvus-small rotate: false - xy: 1105, 6 + xy: 1531, 1 size: 24, 15 orig: 24, 15 offset: 0, 0 @@ -21920,336 +23460,336 @@ unit-corvus-tiny index: -1 unit-corvus-xlarge rotate: false - xy: 551, 333 + xy: 651, 433 size: 48, 31 orig: 48, 31 offset: 0, 0 index: -1 unit-crawler-large rotate: false - xy: 1825, 807 + xy: 1657, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-crawler-medium rotate: false - xy: 945, 367 + xy: 1387, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-crawler-small rotate: false - xy: 1261, 39 + xy: 1577, 240 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-crawler-tiny rotate: false - xy: 1625, 234 + xy: 1768, 419 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-crawler-xlarge rotate: false - xy: 601, 366 + xy: 701, 466 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-dagger-large rotate: false - xy: 1741, 734 + xy: 1615, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-dagger-medium rotate: false - xy: 979, 367 + xy: 1421, 375 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-dagger-small rotate: false - xy: 1287, 39 + xy: 1577, 214 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-dagger-tiny rotate: false - xy: 1643, 252 + xy: 1786, 437 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-dagger-xlarge rotate: false - xy: 651, 416 + xy: 351, 66 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-eclipse-large rotate: false - xy: 1783, 765 + xy: 1531, 725 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-eclipse-medium rotate: false - xy: 911, 333 + xy: 1251, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-eclipse-small rotate: false - xy: 1313, 39 + xy: 1579, 188 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-eclipse-tiny rotate: false - xy: 1625, 216 + xy: 1768, 401 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-eclipse-xlarge rotate: false - xy: 701, 466 + xy: 401, 116 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-flare-large rotate: false - xy: 1699, 683 + xy: 1573, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-flare-medium rotate: false - xy: 945, 333 + xy: 1285, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-flare-small rotate: false - xy: 1339, 39 + xy: 1603, 240 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-flare-tiny rotate: false - xy: 1643, 234 + xy: 1786, 419 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-flare-xlarge rotate: false - xy: 351, 66 + xy: 451, 166 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-fortress-large rotate: false - xy: 443, 1 + xy: 1699, 857 size: 40, 32 orig: 40, 32 offset: 0, 0 index: -1 unit-fortress-medium rotate: false - xy: 114, 1 + xy: 80, 1 size: 32, 25 orig: 32, 25 offset: 0, 0 index: -1 unit-fortress-small rotate: false - xy: 1131, 2 + xy: 1603, 219 size: 24, 19 orig: 24, 19 offset: 0, 0 index: -1 unit-fortress-tiny rotate: false - xy: 1703, 547 + xy: 1579, 174 size: 16, 12 orig: 16, 12 offset: 0, 0 index: -1 unit-fortress-xlarge rotate: false - xy: 401, 140 + xy: 501, 240 size: 48, 38 orig: 48, 38 offset: 0, 0 index: -1 unit-gamma-large rotate: false - xy: 1867, 821 + xy: 1657, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-gamma-medium rotate: false - xy: 979, 333 + xy: 1319, 241 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-gamma-small rotate: false - xy: 1157, 13 + xy: 1605, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-gamma-tiny rotate: false - xy: 1661, 252 + xy: 1786, 401 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-gamma-xlarge rotate: false - xy: 451, 168 + xy: 551, 268 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-horizon-large rotate: false - xy: 1909, 849 + xy: 1615, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-horizon-medium rotate: false - xy: 1013, 351 + xy: 1353, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-horizon-small rotate: false - xy: 1183, 13 + xy: 1605, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-horizon-tiny rotate: false - xy: 1625, 198 + xy: 1714, 383 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-horizon-xlarge rotate: false - xy: 501, 216 + xy: 601, 316 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-mace-large rotate: false - xy: 1741, 692 + xy: 1699, 815 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-mace-medium rotate: false - xy: 1047, 351 + xy: 1387, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-mace-small rotate: false - xy: 1209, 14 + xy: 1599, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-mace-tiny rotate: false - xy: 1643, 216 + xy: 1732, 383 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-mace-xlarge rotate: false - xy: 551, 283 + xy: 651, 383 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-mega-large rotate: false - xy: 1783, 723 + xy: 1741, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-mega-medium rotate: false - xy: 1081, 351 + xy: 1421, 341 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-mega-small rotate: false - xy: 1235, 13 + xy: 1599, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-mega-tiny rotate: false - xy: 1661, 234 + xy: 1750, 383 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-mega-xlarge rotate: false - xy: 601, 316 + xy: 701, 416 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-minke-large rotate: false - xy: 1463, 610 + xy: 1989, 849 size: 34, 40 orig: 34, 40 offset: 0, 0 index: -1 unit-minke-medium rotate: false - xy: 950, 141 + xy: 1455, 435 size: 27, 32 orig: 27, 32 offset: 0, 0 @@ -22263,217 +23803,217 @@ unit-minke-small index: -1 unit-minke-tiny rotate: false - xy: 1793, 538 + xy: 989, 14 size: 13, 16 orig: 13, 16 offset: 0, 0 index: -1 unit-minke-xlarge rotate: false - xy: 551, 133 + xy: 451, 25 size: 41, 48 orig: 41, 48 offset: 0, 0 index: -1 unit-mono-large rotate: false - xy: 1825, 765 + xy: 1657, 765 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-mono-medium rotate: false - xy: 1115, 351 + xy: 1285, 171 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-mono-small rotate: false - xy: 1261, 13 + xy: 1625, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-mono-tiny rotate: false - xy: 1679, 252 + xy: 1768, 383 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-mono-xlarge rotate: false - xy: 651, 366 + xy: 401, 66 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-nova-large rotate: false - xy: 1867, 779 + xy: 1699, 773 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-nova-medium rotate: false - xy: 1149, 351 + xy: 1319, 207 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-nova-small rotate: false - xy: 1287, 13 + xy: 1625, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-nova-tiny rotate: false - xy: 1643, 198 + xy: 1786, 383 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-nova-xlarge rotate: false - xy: 701, 416 + xy: 451, 116 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-oct-large rotate: false - xy: 1909, 807 + xy: 1741, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-oct-medium rotate: false - xy: 1183, 351 + xy: 1353, 239 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-oct-small rotate: false - xy: 1313, 13 + xy: 1609, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-oct-tiny rotate: false - xy: 1661, 216 + xy: 1804, 491 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-oct-xlarge rotate: false - xy: 401, 90 + xy: 501, 190 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-omura-large rotate: false - xy: 950, 251 + xy: 1050, 228 size: 28, 40 orig: 28, 40 offset: 0, 0 index: -1 unit-omura-medium rotate: false - xy: 983, 572 + xy: 2025, 874 size: 22, 32 orig: 22, 32 offset: 0, 0 index: -1 unit-omura-small rotate: false - xy: 1679, 226 + xy: 1804, 465 size: 16, 24 orig: 16, 24 offset: 0, 0 index: -1 unit-omura-tiny rotate: false - xy: 1389, 307 + xy: 481, 7 size: 11, 16 orig: 11, 16 offset: 0, 0 index: -1 unit-omura-xlarge rotate: false - xy: 1501, 631 + xy: 1109, 602 size: 33, 48 orig: 33, 48 offset: 0, 0 index: -1 unit-poly-large rotate: false - xy: 1825, 723 + xy: 1783, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-poly-medium rotate: false - xy: 1217, 351 + xy: 1387, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-poly-small rotate: false - xy: 1339, 13 + xy: 1609, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-poly-tiny rotate: false - xy: 1661, 198 + xy: 1804, 447 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-poly-xlarge rotate: false - xy: 451, 118 + xy: 551, 218 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-pulsar-large rotate: false - xy: 1867, 743 + xy: 1573, 729 size: 40, 34 orig: 40, 34 offset: 0, 0 index: -1 unit-pulsar-medium rotate: false - xy: 1251, 356 + xy: 1047, 390 size: 32, 27 orig: 32, 27 offset: 0, 0 index: -1 unit-pulsar-small rotate: false - xy: 1499, 341 + xy: 1323, 1 size: 24, 20 orig: 24, 20 offset: 0, 0 index: -1 unit-pulsar-tiny rotate: false - xy: 1697, 364 + xy: 1611, 266 size: 16, 13 orig: 16, 13 offset: 0, 0 @@ -22487,252 +24027,252 @@ unit-pulsar-xlarge index: -1 unit-quad-large rotate: false - xy: 1909, 765 + xy: 1783, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-quad-medium rotate: false - xy: 1489, 474 + xy: 2016, 908 size: 31, 31 orig: 31, 31 offset: 0, 0 index: -1 unit-quad-small rotate: false - xy: 1525, 337 + xy: 1609, 37 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-quad-tiny rotate: false - xy: 1643, 181 + xy: 1804, 376 size: 15, 15 orig: 15, 15 offset: 0, 0 index: -1 unit-quad-xlarge rotate: false - xy: 501, 166 + xy: 601, 266 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-quasar-large rotate: false - xy: 881, 639 + xy: 1825, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-quasar-medium rotate: false - xy: 1285, 351 + xy: 1421, 307 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-quasar-small rotate: false - xy: 1551, 337 + xy: 1609, 11 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-quasar-tiny rotate: false - xy: 1679, 208 + xy: 1804, 429 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-quasar-xlarge rotate: false - xy: 551, 233 + xy: 651, 333 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-reign-large rotate: false - xy: 1783, 695 + xy: 795, 4 size: 40, 26 orig: 40, 26 offset: 0, 0 index: -1 unit-reign-medium rotate: false - xy: 1489, 452 + xy: 114, 6 size: 31, 20 orig: 31, 20 offset: 0, 0 index: -1 unit-reign-small rotate: false - xy: 1577, 346 + xy: 1557, 1 size: 24, 15 orig: 24, 15 offset: 0, 0 index: -1 unit-reign-tiny rotate: false - xy: 1157, 1 + xy: 1559, 278 size: 15, 10 orig: 15, 10 offset: 0, 0 index: -1 unit-reign-xlarge rotate: false - xy: 601, 283 + xy: 701, 383 size: 48, 31 orig: 48, 31 offset: 0, 0 index: -1 unit-risso-large rotate: false - xy: 1993, 849 + xy: 1979, 891 size: 35, 40 orig: 35, 40 offset: 0, 0 index: -1 unit-risso-medium rotate: false - xy: 2019, 747 + xy: 1455, 545 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 unit-risso-small rotate: false - xy: 1629, 311 + xy: 1635, 16 size: 21, 24 orig: 21, 24 offset: 0, 0 index: -1 unit-risso-tiny rotate: false - xy: 1517, 579 + xy: 1815, 635 size: 14, 16 orig: 14, 16 offset: 0, 0 index: -1 unit-risso-xlarge rotate: false - xy: 601, 233 + xy: 701, 333 size: 43, 48 orig: 43, 48 offset: 0, 0 index: -1 unit-scepter-large rotate: false - xy: 881, 605 + xy: 1741, 773 size: 40, 32 orig: 40, 32 offset: 0, 0 index: -1 unit-scepter-medium rotate: false - xy: 1319, 357 + xy: 1319, 179 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 unit-scepter-small rotate: false - xy: 1603, 342 + xy: 1349, 2 size: 24, 19 orig: 24, 19 offset: 0, 0 index: -1 unit-scepter-tiny rotate: false - xy: 1391, 218 + xy: 1635, 1 size: 16, 13 orig: 16, 13 offset: 0, 0 index: -1 unit-scepter-xlarge rotate: false - xy: 651, 325 + xy: 451, 75 size: 48, 39 orig: 48, 39 offset: 0, 0 index: -1 unit-sei-large rotate: false - xy: 923, 639 + xy: 1825, 807 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-sei-medium rotate: false - xy: 1489, 529 + xy: 1353, 205 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-sei-small rotate: false - xy: 1629, 337 + xy: 1635, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-sei-tiny rotate: false - xy: 1699, 346 + xy: 1804, 411 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-sei-xlarge rotate: false - xy: 701, 366 + xy: 501, 140 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-spiroct-large rotate: false - xy: 965, 648 + xy: 1615, 732 size: 40, 31 orig: 40, 31 offset: 0, 0 index: -1 unit-spiroct-medium rotate: false - xy: 1489, 425 + xy: 1387, 218 size: 31, 25 orig: 31, 25 offset: 0, 0 index: -1 unit-spiroct-small rotate: false - xy: 1655, 342 + xy: 1375, 2 size: 24, 19 orig: 24, 19 offset: 0, 0 index: -1 unit-spiroct-tiny rotate: false - xy: 2029, 647 + xy: 1245, 1 size: 15, 12 orig: 15, 12 offset: 0, 0 index: -1 unit-spiroct-xlarge rotate: false - xy: 401, 50 + xy: 551, 178 size: 48, 38 orig: 48, 38 offset: 0, 0 index: -1 unit-toxopid-large rotate: false - xy: 1536, 639 + xy: 1144, 610 size: 33, 40 orig: 33, 40 offset: 0, 0 @@ -22746,98 +24286,98 @@ unit-toxopid-medium index: -1 unit-toxopid-small rotate: false - xy: 2027, 823 + xy: 1658, 16 size: 20, 24 orig: 20, 24 offset: 0, 0 index: -1 unit-toxopid-tiny rotate: false - xy: 1717, 347 + xy: 1815, 617 size: 13, 16 orig: 13, 16 offset: 0, 0 index: -1 unit-toxopid-xlarge rotate: false - xy: 1951, 841 + xy: 1867, 841 size: 40, 48 orig: 40, 48 offset: 0, 0 index: -1 unit-vela-large rotate: false - xy: 923, 605 + xy: 1783, 773 size: 40, 32 orig: 40, 32 offset: 0, 0 index: -1 unit-vela-medium rotate: false - xy: 1353, 357 + xy: 1387, 245 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 unit-vela-small rotate: false - xy: 1577, 325 + xy: 1635, 68 size: 24, 19 orig: 24, 19 offset: 0, 0 index: -1 unit-vela-tiny rotate: false - xy: 814, 199 + xy: 1653, 1 size: 16, 13 orig: 16, 13 offset: 0, 0 index: -1 unit-vela-xlarge rotate: false - xy: 451, 77 + xy: 401, 25 size: 48, 39 orig: 48, 39 offset: 0, 0 index: -1 unit-zenith-large rotate: false - xy: 965, 606 + xy: 1909, 849 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-zenith-medium rotate: false - xy: 1387, 351 + xy: 1421, 273 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-zenith-small rotate: false - xy: 1603, 316 + xy: 1635, 42 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-zenith-tiny rotate: false - xy: 1625, 180 + xy: 1804, 393 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-zenith-xlarge rotate: false - xy: 501, 116 + xy: 601, 216 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wavepane rotate: false - xy: 1425, 623 + xy: 1033, 594 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -22845,7 +24385,7 @@ wavepane index: -1 white-pane rotate: false - xy: 1463, 652 + xy: 1147, 652 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -22853,14 +24393,14 @@ white-pane index: -1 whiteui rotate: false - xy: 821, 928 + xy: 746, 378 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 window-empty rotate: false - xy: 980, 230 + xy: 1455, 372 size: 27, 61 split: 4, 4, 2, 2 orig: 27, 61 diff --git a/core/assets/sprites/fallback/sprites2.png b/core/assets/sprites/fallback/sprites2.png index aa17fbbe89..0995568b05 100644 Binary files a/core/assets/sprites/fallback/sprites2.png and b/core/assets/sprites/fallback/sprites2.png differ diff --git a/core/assets/sprites/fallback/sprites3.png b/core/assets/sprites/fallback/sprites3.png index 05f78947ea..5c81c1eccb 100644 Binary files a/core/assets/sprites/fallback/sprites3.png and b/core/assets/sprites/fallback/sprites3.png differ diff --git a/core/assets/sprites/fallback/sprites4.png b/core/assets/sprites/fallback/sprites4.png index 45619c04fa..90298a2f7d 100644 Binary files a/core/assets/sprites/fallback/sprites4.png and b/core/assets/sprites/fallback/sprites4.png differ diff --git a/core/assets/sprites/fallback/sprites5.png b/core/assets/sprites/fallback/sprites5.png index 87ee3a7b46..15530aba49 100644 Binary files a/core/assets/sprites/fallback/sprites5.png and b/core/assets/sprites/fallback/sprites5.png differ diff --git a/core/assets/sprites/fallback/sprites7.png b/core/assets/sprites/fallback/sprites7.png index dd3d40dc80..779d61531f 100644 Binary files a/core/assets/sprites/fallback/sprites7.png and b/core/assets/sprites/fallback/sprites7.png differ diff --git a/core/assets/sprites/fallback/sprites8.png b/core/assets/sprites/fallback/sprites8.png index 212d169c38..c75d4e998d 100644 Binary files a/core/assets/sprites/fallback/sprites8.png and b/core/assets/sprites/fallback/sprites8.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 75be83066e..50eb7c4272 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -4,2018 +4,2529 @@ size: 4096,4096 format: rgba8888 filter: nearest,nearest repeat: none +interplanetary-accelerator + rotate: false + xy: 831, 221 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +interplanetary-accelerator-team + rotate: false + xy: 2757, 3339 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 launch-pad rotate: false - xy: 1951, 2545 + xy: 1553, 301 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +launch-pad-icon-logic + rotate: false + xy: 1553, 301 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-large rotate: false - xy: 1703, 3035 + xy: 1297, 1715 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 launch-pad-light rotate: false - xy: 2245, 2643 + xy: 1651, 399 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launchpod rotate: false - xy: 2013, 1618 + xy: 2551, 1987 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 force-projector rotate: false - xy: 2918, 2757 + xy: 1553, 933 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +force-projector-icon-logic + rotate: false + xy: 1553, 933 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 force-projector-top rotate: false - xy: 1657, 2643 + xy: 1553, 835 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mend-projector rotate: false - xy: 2029, 760 + xy: 2187, 1909 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +mend-projector-icon-logic + rotate: false + xy: 2187, 1909 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 2091, 1156 + xy: 2253, 1909 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender rotate: false - xy: 3323, 2187 + xy: 2081, 1124 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mender-icon-logic + rotate: false + xy: 2081, 1124 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-top rotate: false - xy: 2439, 812 + xy: 2119, 1183 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overdrive-dome rotate: false - xy: 2245, 2447 + xy: 1749, 443 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +overdrive-dome-icon-logic + rotate: false + xy: 1749, 443 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-dome-top rotate: false - xy: 2343, 2447 + xy: 1749, 345 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 2095, 1090 + xy: 2319, 1905 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +overdrive-projector-icon-logic + rotate: false + xy: 2319, 1905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 2095, 1024 + xy: 2385, 1905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shock-mine rotate: false - xy: 3585, 2319 + xy: 2326, 1545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-loader rotate: false - xy: 1899, 2937 + xy: 1421, 2333 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-loader-icon-logic + rotate: false + xy: 1421, 2333 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-unloader rotate: false - xy: 1644, 2741 + xy: 1533, 2011 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-unloader-icon-logic + rotate: false + xy: 1533, 2011 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 bridge-arrow rotate: false - xy: 2361, 1746 + xy: 2732, 1627 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 2361, 1576 + xy: 2054, 1430 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +bridge-conveyor-icon-logic + rotate: false + xy: 2054, 1430 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 2361, 1542 + xy: 2054, 1396 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 2279, 718 + xy: 3554, 2043 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 center rotate: false - xy: 2279, 684 + xy: 3622, 2043 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-0 rotate: false - xy: 1981, 1518 + xy: 2844, 2643 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +armored-conveyor-icon-logic + rotate: false + xy: 2844, 2643 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-armored-conveyor-full rotate: false - xy: 1981, 1518 + xy: 2844, 2643 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-1 rotate: false - xy: 1053, 8 + xy: 3104, 2565 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-2 rotate: false - xy: 2319, 1160 + xy: 3104, 2531 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-0-3 rotate: false - xy: 2277, 1076 + xy: 2517, 2011 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-0 rotate: false - xy: 1113, 2285 + xy: 3602, 2247 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-1 rotate: false - xy: 4005, 3587 + xy: 1740, 1326 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-2 rotate: false - xy: 1087, 8 + xy: 3770, 2101 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-1-3 rotate: false - xy: 2319, 1126 + xy: 2612, 1821 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-0 rotate: false - xy: 2277, 1042 + xy: 4055, 3587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-1 rotate: false - xy: 1113, 2251 + xy: 1774, 1326 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-2 rotate: false - xy: 4039, 3587 + xy: 2612, 1787 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-2-3 rotate: false - xy: 1121, 8 + xy: 2612, 1753 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-0 rotate: false - xy: 2277, 1008 + xy: 2612, 1719 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-1 rotate: false - xy: 1155, 8 + xy: 2612, 1685 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-2 rotate: false - xy: 2277, 974 + xy: 2646, 1763 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-3-3 rotate: false - xy: 1189, 8 + xy: 2680, 1763 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-0 rotate: false - xy: 2277, 940 + xy: 2646, 1729 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-1 rotate: false - xy: 2277, 906 + xy: 2714, 1763 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-2 rotate: false - xy: 1654, 3015 + xy: 2646, 1695 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-4-3 rotate: false - xy: 3559, 2622 + xy: 2680, 1729 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 2347, 642 + xy: 3860, 2010 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 2313, 608 + xy: 2664, 1593 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 2347, 608 + xy: 2698, 1593 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 2313, 574 + xy: 2732, 1593 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 2347, 574 + xy: 3894, 2058 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 2313, 540 + xy: 3894, 2024 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 2347, 540 + xy: 3928, 2058 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 2313, 506 + xy: 3928, 2024 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 2347, 506 + xy: 3962, 2058 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 2313, 472 + xy: 3962, 2024 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 2347, 472 + xy: 3996, 2057 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 2313, 438 + xy: 4030, 2057 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 2347, 438 + xy: 3996, 2023 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 2317, 404 + xy: 4030, 2023 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 2351, 404 + xy: 3894, 1990 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 2381, 710 + xy: 3928, 1990 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 2381, 676 + xy: 3962, 1990 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 2381, 642 + xy: 3996, 1989 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 2381, 608 + xy: 4030, 1989 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor rotate: false - xy: 3347, 2337 + xy: 2251, 1115 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plastanium-conveyor-icon-logic + rotate: false + xy: 2251, 1115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-0 rotate: false - xy: 3347, 2303 + xy: 2285, 1115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-1 rotate: false - xy: 3381, 2337 + xy: 2081, 1090 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-2 rotate: false - xy: 3381, 2303 + xy: 2115, 1081 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-edge rotate: false - xy: 3415, 2337 + xy: 2149, 1081 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-conveyor-stack rotate: false - xy: 3415, 2303 + xy: 2183, 1081 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 2511, 2109 + xy: 2582, 1549 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 2395, 2075 + xy: 2616, 1549 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 2395, 2041 + xy: 2548, 1519 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 2429, 2075 + xy: 2582, 1515 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 2395, 2007 + xy: 2616, 1515 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 2463, 2075 + xy: 2650, 1559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 2429, 2041 + xy: 2650, 1525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 2395, 1973 + xy: 2684, 1559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 2497, 2075 + xy: 2684, 1525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 2463, 2041 + xy: 2718, 1559 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 2429, 2007 + xy: 2718, 1525 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 2395, 1939 + xy: 2412, 1511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 2497, 2041 + xy: 2378, 1503 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 2463, 2007 + xy: 2446, 1501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 2429, 1973 + xy: 2480, 1501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 2395, 1905 + xy: 2514, 1501 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 2497, 2007 + xy: 2548, 1485 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 2463, 1973 + xy: 2582, 1481 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 2429, 1939 + xy: 2616, 1481 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cross rotate: false - xy: 3085, 2227 + xy: 2183, 1591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 distributor rotate: false - xy: 2845, 2331 + xy: 1917, 361 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +distributor-icon-logic + rotate: false + xy: 1917, 361 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 inverted-sorter rotate: false - xy: 3245, 2357 + xy: 2224, 1557 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +inverted-sorter-icon-logic + rotate: false + xy: 2224, 1557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction rotate: false - xy: 3211, 2283 + xy: 2221, 1353 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +junction-icon-logic + rotate: false + xy: 2221, 1353 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mass-driver-base rotate: false - xy: 2343, 2545 + xy: 1553, 7 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 2449, 710 + xy: 2115, 1149 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +overflow-gate-icon-logic + rotate: false + xy: 2115, 1149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 payload-conveyor rotate: false - xy: 2441, 2447 + xy: 1749, 247 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-conveyor-edge rotate: false - xy: 2539, 2447 + xy: 1749, 149 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-conveyor-top rotate: false - xy: 2637, 2643 + xy: 1749, 51 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-top rotate: false - xy: 2637, 2643 + xy: 1749, 51 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router rotate: false - xy: 2637, 2545 + xy: 1647, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-edge rotate: false - xy: 2637, 2447 + xy: 1745, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-over rotate: false - xy: 2735, 2647 + xy: 1843, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 2449, 540 + xy: 2285, 1149 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conveyor-icon-logic + rotate: false + xy: 2285, 1149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 2449, 506 + xy: 2115, 1115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 2449, 472 + xy: 2149, 1115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 2449, 438 + xy: 2183, 1115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router rotate: false - xy: 3493, 2201 + xy: 2514, 1603 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +router-icon-logic + rotate: false + xy: 2514, 1603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter rotate: false - xy: 3527, 2253 + xy: 2326, 1443 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sorter-icon-logic + rotate: false + xy: 2326, 1443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 underflow-gate rotate: false - xy: 2463, 1939 + xy: 2684, 1491 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +underflow-gate-icon-logic + rotate: false + xy: 2684, 1491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-drill rotate: false - xy: 1805, 1148 + xy: 3880, 2812 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rim rotate: false - xy: 3263, 3099 + xy: 3008, 2633 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-rotator rotate: false - xy: 3393, 3099 + xy: 3138, 2657 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-drill-top rotate: false - xy: 1899, 1018 + xy: 3268, 2657 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 drill-top rotate: false - xy: 2911, 2265 + xy: 1917, 163 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-liquid rotate: false - xy: 2911, 2265 + xy: 1917, 163 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 laser-drill rotate: false - xy: 1657, 2447 + xy: 1553, 497 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-rim rotate: false - xy: 1951, 2643 + xy: 1651, 595 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-rotator rotate: false - xy: 2049, 2643 + xy: 1553, 399 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 laser-drill-top rotate: false - xy: 2147, 2643 + xy: 1651, 497 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-drill rotate: false - xy: 2029, 1024 + xy: 2385, 1971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 2029, 958 + xy: 2451, 1971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 2029, 892 + xy: 2055, 1909 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 oil-extractor rotate: false - xy: 2539, 2545 + xy: 1749, 835 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-liquid rotate: false - xy: 1951, 2447 + xy: 1749, 737 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-rotator rotate: false - xy: 2049, 2447 + xy: 1749, 639 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-top rotate: false - xy: 2147, 2447 + xy: 1749, 541 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 pneumatic-drill rotate: false - xy: 2147, 430 + xy: 2715, 1797 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 2647, 2245 + xy: 1063, 3145 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 2713, 2249 + xy: 1129, 3145 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor rotate: false - xy: 2145, 1958 + xy: 2795, 2241 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 2145, 1892 + xy: 2861, 2241 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 2145, 1826 + xy: 2927, 2241 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 2145, 1760 + xy: 2993, 2241 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border rotate: false - xy: 2353, 1152 + xy: 2680, 1661 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-middle rotate: false - xy: 2379, 914 + xy: 2017, 1256 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-select rotate: false - xy: 1524, 2635 + xy: 4048, 2575 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 2279, 446 + xy: 2085, 1226 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 place-arrow rotate: false - xy: 2735, 2549 + xy: 1941, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 2361, 1712 + xy: 2047, 1566 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +bridge-conduit-icon-logic + rotate: false + xy: 2047, 1566 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 2361, 1678 + xy: 2054, 1532 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 2361, 1678 + xy: 2054, 1532 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 2361, 1644 + xy: 2054, 1498 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 2361, 1610 + xy: 2054, 1464 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 2279, 582 + xy: 2072, 1362 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 2279, 548 + xy: 2085, 1328 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 2279, 514 + xy: 2085, 1294 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 2279, 480 + xy: 2085, 1260 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 2279, 480 + xy: 2085, 1260 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 2279, 480 + xy: 2085, 1260 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 2313, 710 + xy: 3758, 2033 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 2347, 710 + xy: 3792, 2033 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 2313, 676 + xy: 3826, 2044 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 2347, 676 + xy: 3860, 2044 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 2347, 676 + xy: 3860, 2044 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 2313, 642 + xy: 3826, 2010 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 3313, 2289 + xy: 2221, 1319 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-junction-icon-logic + rotate: false + xy: 2221, 1319 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate rotate: false - xy: 3153, 2199 + xy: 2221, 1285 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-overflow-gate-top rotate: false - xy: 3187, 2249 + xy: 2255, 1319 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 3187, 2215 + xy: 2221, 1251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 3221, 2249 + xy: 2255, 1285 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 3221, 2215 + xy: 2255, 1251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-bottom rotate: false - xy: 2049, 2545 + xy: 1553, 203 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-liquid rotate: false - xy: 2147, 2545 + xy: 1651, 301 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-tank-top rotate: false - xy: 2343, 2643 + xy: 1553, 105 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 3187, 2181 + xy: 2289, 1285 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +mechanical-pump-icon-logic + rotate: false + xy: 2289, 1285 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump-liquid rotate: false - xy: 3221, 2181 + xy: 2289, 1251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-liquid rotate: false - xy: 3221, 2181 + xy: 2289, 1251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-pump-liquid rotate: false - xy: 3221, 2181 + xy: 2289, 1251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 2449, 676 + xy: 2149, 1149 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-conduit-icon-logic + rotate: false + xy: 2149, 1149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 2449, 642 + xy: 2183, 1149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 2449, 608 + xy: 2217, 1149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 2449, 574 + xy: 2251, 1149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-cap rotate: false - xy: 3449, 2303 + xy: 2251, 1081 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-0 rotate: false - xy: 3483, 2337 + xy: 2285, 1081 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-1 rotate: false - xy: 3483, 2303 + xy: 895, 2323 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-2 rotate: false - xy: 3357, 2269 + xy: 895, 2289 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-3 rotate: false - xy: 3357, 2235 + xy: 895, 2255 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plated-conduit-top-4 rotate: false - xy: 3391, 2269 + xy: 2412, 1613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 3391, 2201 + xy: 2967, 1763 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 3425, 2235 + xy: 2933, 1731 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 3459, 2269 + xy: 2967, 1729 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 3425, 2201 + xy: 3007, 1831 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 2079, 1882 + xy: 1981, 1087 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +rotary-pump-icon-logic + rotate: false + xy: 1981, 1087 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 3127, 2671 + xy: 2205, 2353 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +thermal-pump-icon-logic + rotate: false + xy: 2205, 2353 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 hyper-processor rotate: false - xy: 1853, 2643 + xy: 1651, 835 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +hyper-processor-icon-logic + rotate: false + xy: 1651, 835 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 large-logic-display rotate: false - xy: 1307, 1646 + xy: 1057, 683 + size: 192, 192 + orig: 192, 192 + offset: 0, 0 + index: -1 +large-logic-display-icon-logic + rotate: false + xy: 1057, 683 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 logic-display rotate: false - xy: 2245, 2545 + xy: 1651, 203 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +logic-display-icon-logic + rotate: false + xy: 1651, 203 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 logic-processor rotate: false - xy: 2013, 1552 + xy: 2617, 1987 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +logic-processor-icon-logic + rotate: false + xy: 2617, 1987 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 memory-bank rotate: false - xy: 2029, 826 + xy: 2121, 1909 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +memory-bank-icon-logic + rotate: false + xy: 2121, 1909 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 memory-cell rotate: false - xy: 3289, 2187 + xy: 2081, 1158 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +memory-cell-icon-logic + rotate: false + xy: 2081, 1158 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message rotate: false - xy: 2439, 778 + xy: 2153, 1183 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +message-icon-logic + rotate: false + xy: 2153, 1183 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 micro-processor rotate: false - xy: 2439, 744 + xy: 2187, 1183 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +micro-processor-icon-logic + rotate: false + xy: 2187, 1183 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 switch rotate: false - xy: 2409, 2109 + xy: 2548, 1553 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +switch-icon-logic + rotate: false + xy: 2548, 1553 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 switch-on rotate: false - xy: 2443, 2109 + xy: 2582, 1583 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery rotate: false - xy: 3593, 2622 + xy: 2680, 1695 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +battery-icon-logic + rotate: false + xy: 2680, 1695 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large rotate: false - xy: 1935, 1224 + xy: 1255, 2549 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +battery-large-icon-logic + rotate: false + xy: 1255, 2549 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 battery-large-top rotate: false - xy: 3231, 2989 + xy: 1255, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 battery-top rotate: false - xy: 2291, 80 + xy: 2714, 1729 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 2279, 650 + xy: 3690, 2043 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +combustion-generator-icon-logic + rotate: false + xy: 3690, 2043 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 2279, 616 + xy: 3724, 2043 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator rotate: false - xy: 2330, 2741 + xy: 1544, 1325 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +differential-generator-icon-logic + rotate: false + xy: 1544, 1325 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator-liquid rotate: false - xy: 2526, 2839 + xy: 1642, 1423 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 differential-generator-top rotate: false - xy: 2428, 2741 + xy: 1642, 1325 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 diode rotate: false - xy: 3085, 2193 + xy: 2088, 1557 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +diode-icon-logic + rotate: false + xy: 2088, 1557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 diode-arrow rotate: false - xy: 3119, 2267 + xy: 2088, 1523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator rotate: false - xy: 3279, 2391 + xy: 2122, 1455 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +illuminator-icon-logic + rotate: false + xy: 2122, 1455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-top rotate: false - xy: 3313, 2391 + xy: 2156, 1489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 impact-reactor rotate: false - xy: 3913, 3079 + xy: 3918, 2422 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-bottom rotate: false - xy: 1817, 1908 + xy: 3658, 2401 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-light rotate: false - xy: 1817, 1778 + xy: 3788, 2292 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-0 rotate: false - xy: 1817, 1648 + xy: 3918, 2292 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-1 rotate: false - xy: 1817, 1518 + xy: 1305, 2105 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-2 rotate: false - xy: 2143, 238 + xy: 1305, 1975 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 impact-reactor-plasma-3 rotate: false - xy: 2143, 108 + xy: 1305, 1845 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 power-node rotate: false - xy: 3357, 2201 + xy: 2865, 1757 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-node-icon-logic + rotate: false + xy: 2865, 1757 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 2779, 2249 + xy: 781, 13 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +power-node-large-icon-logic + rotate: false + xy: 781, 13 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source rotate: false - xy: 3391, 2235 + xy: 2899, 1757 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-source-icon-logic + rotate: false + xy: 2899, 1757 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void rotate: false - xy: 3425, 2269 + xy: 2933, 1765 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +power-void-icon-logic + rotate: false + xy: 2933, 1765 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 2079, 1816 + xy: 1985, 1021 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +rtg-generator-icon-logic + rotate: false + xy: 1985, 1021 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 3357, 2167 + xy: 3035, 1763 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 3527, 2287 + xy: 2326, 1477 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +solar-panel-icon-logic + rotate: false + xy: 2326, 1477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large rotate: false - xy: 3029, 2671 + xy: 2107, 2353 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +solar-panel-large-icon-logic + rotate: false + xy: 2107, 2353 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 steam-generator rotate: false - xy: 2213, 562 + xy: 2049, 163 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-cap rotate: false - xy: 2213, 496 + xy: 2049, 97 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-top rotate: false - xy: 2213, 430 + xy: 2049, 31 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-turbine0 rotate: false - xy: 2037, 2222 + xy: 2691, 2377 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 steam-generator-turbine1 rotate: false - xy: 2103, 2222 + xy: 2757, 2377 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-tower rotate: false - xy: 2027, 2156 + xy: 2691, 2311 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +surge-tower-icon-logic + rotate: false + xy: 2691, 2311 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 2159, 2156 + xy: 2889, 2307 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +thermal-generator-icon-logic + rotate: false + xy: 2889, 2307 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-reactor rotate: false - xy: 3029, 2573 + xy: 1729, 2255 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +thorium-reactor-icon-logic + rotate: false + xy: 1729, 2255 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-lights rotate: false - xy: 3029, 2475 + xy: 1729, 2157 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-top rotate: false - xy: 3127, 2573 + xy: 1827, 2255 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter rotate: false - xy: 1919, 1420 + xy: 1157, 2501 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +alloy-smelter-icon-logic + rotate: false + xy: 1157, 2501 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-top rotate: false - xy: 1935, 1322 + xy: 1157, 2403 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 blast-mixer rotate: false - xy: 1825, 2043 + xy: 1255, 2385 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +blast-mixer-icon-logic + rotate: false + xy: 1255, 2385 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-forge rotate: false - xy: 3281, 2695 + xy: 1451, 2431 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-forge-icon-logic + rotate: false + xy: 1451, 2431 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 coal-centrifuge rotate: false - xy: 3874, 2651 + xy: 2485, 2111 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +coal-centrifuge-icon-logic + rotate: false + xy: 2485, 2111 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluid-mixer-bottom rotate: false - xy: 3029, 2409 + xy: 1919, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluid-mixer-liquid rotate: false - xy: 3095, 2409 + xy: 1919, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cryofluid-mixer-top rotate: false - xy: 3373, 2371 + xy: 1919, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator rotate: false - xy: 3439, 2371 + xy: 1919, 559 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 2833, 2397 + xy: 1919, 493 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 2899, 2397 + xy: 1919, 427 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 disassembler rotate: false - xy: 2526, 2741 + xy: 1575, 1227 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +disassembler-icon-logic + rotate: false + xy: 1575, 1227 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 disassembler-liquid rotate: false - xy: 2624, 2839 + xy: 1575, 1129 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 disassembler-spinner rotate: false - xy: 2624, 2741 + xy: 1673, 1227 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 graphite-press rotate: false - xy: 2013, 1948 + xy: 1917, 31 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +graphite-press-icon-logic + rotate: false + xy: 1917, 31 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 incinerator rotate: false - xy: 3211, 2351 + xy: 2190, 1523 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +incinerator-icon-logic + rotate: false + xy: 2190, 1523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source rotate: false - xy: 2415, 472 + xy: 2276, 1387 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-source-icon-logic + rotate: false + xy: 2276, 1387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void rotate: false - xy: 3313, 2323 + xy: 2187, 1319 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-void-icon-logic + rotate: false + xy: 2187, 1319 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln rotate: false - xy: 2013, 1882 + xy: 2485, 2045 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +kiln-icon-logic + rotate: false + xy: 2485, 2045 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 2013, 1816 + xy: 2551, 2053 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 2013, 1816 + xy: 2551, 2053 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 liquid-source rotate: false - xy: 3289, 2255 + xy: 2187, 1217 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-source-icon-logic + rotate: false + xy: 2187, 1217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-void rotate: false - xy: 3289, 2221 + xy: 2221, 1217 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-void-icon-logic + rotate: false + xy: 2221, 1217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter rotate: false - xy: 3255, 2187 + xy: 2085, 1192 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +melter-icon-logic + rotate: false + xy: 2085, 1192 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press rotate: false - xy: 2539, 2643 + xy: 1651, 7 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +multi-press-icon-logic + rotate: false + xy: 1651, 7 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 phase-weaver rotate: false - xy: 2095, 826 + xy: 2583, 1921 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 2095, 760 + xy: 2517, 1855 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 2147, 694 + xy: 2583, 1855 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 2147, 628 + xy: 2649, 1863 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +plastanium-compressor-icon-logic + rotate: false + xy: 2649, 1863 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 2147, 562 + xy: 2715, 1863 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 3459, 2235 + xy: 3007, 1797 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 3459, 2201 + xy: 3001, 1763 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 2911, 2199 + xy: 913, 13 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +pyratite-mixer-icon-logic + rotate: false + xy: 913, 13 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator rotate: false - xy: 2099, 1222 + xy: 1985, 427 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +separator-icon-logic + rotate: false + xy: 1985, 427 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 2157, 1156 + xy: 1983, 361 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-spinner rotate: false - xy: 2161, 1090 + xy: 1983, 295 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-crucible rotate: false - xy: 2931, 2561 + xy: 1911, 2353 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +silicon-crucible-icon-logic + rotate: false + xy: 1911, 2353 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-crucible-top rotate: false - xy: 2931, 2463 + xy: 2009, 2353 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 2161, 1024 + xy: 1983, 229 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +silicon-smelter-icon-logic + rotate: false + xy: 1983, 229 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press rotate: false - xy: 2161, 958 + xy: 1983, 163 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame0 rotate: false - xy: 2161, 892 + xy: 1983, 97 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame1 rotate: false - xy: 2161, 826 + xy: 1983, 31 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame2 rotate: false - xy: 2161, 760 + xy: 2049, 361 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-liquid rotate: false - xy: 2213, 694 + xy: 2049, 295 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-top rotate: false - xy: 2213, 628 + xy: 2049, 229 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +basalt-boulder1 + rotate: false + xy: 2729, 2195 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +basalt-boulder2 + rotate: false + xy: 2012, 1850 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 boulder1 rotate: false - xy: 1604, 2999 + xy: 2062, 1809 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 boulder2 rotate: false - xy: 3796, 2610 + xy: 2162, 1859 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dacite-boulder1 rotate: false - xy: 2221, 2086 + xy: 2112, 1709 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dacite-boulder2 rotate: false - xy: 2211, 2036 + xy: 2162, 1759 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-boulder1 rotate: false - xy: 3391, 2167 + xy: 3035, 1729 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-boulder2 rotate: false - xy: 3425, 2167 + xy: 2319, 1149 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder1 rotate: false - xy: 3551, 2321 + xy: 2292, 1443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder2 rotate: false - xy: 3585, 2353 + xy: 2326, 1579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-boulder1 rotate: false - xy: 2315, 1286 + xy: 2949, 2041 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-boulder2 rotate: false - xy: 2357, 1486 + xy: 2899, 1941 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-cluster1 rotate: false - xy: 1641, 6 + xy: 2999, 2023 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster2 rotate: false - xy: 2277, 1152 + xy: 2999, 1981 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-cluster3 rotate: false - xy: 2277, 1110 + xy: 2999, 1939 size: 40, 40 orig: 40, 40 offset: 0, 0 @@ -2050,266 +2561,273 @@ white-tree-shadow index: -1 container rotate: false - xy: 4022, 2709 + xy: 2683, 2127 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container-team rotate: false - xy: 4006, 2643 + xy: 1885, 1549 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 core-foundation rotate: false - xy: 2017, 628 + xy: 3268, 2527 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-foundation-team rotate: false - xy: 2017, 498 + xy: 3398, 2527 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus rotate: false - xy: 1401, 460 + xy: 1410, 2627 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-nucleus-team rotate: false - xy: 1397, 298 + xy: 1582, 2761 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard rotate: false - xy: 1840, 2839 + xy: 1631, 2109 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-shard-team rotate: false - xy: 1742, 2741 + xy: 1631, 2011 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 unloader rotate: false - xy: 2429, 1905 + xy: 2718, 1491 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +unloader-icon-logic + rotate: false + xy: 2718, 1491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-center rotate: false - xy: 2395, 1837 + xy: 2412, 1477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault rotate: false - xy: 3323, 2511 + xy: 1729, 1961 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 vault-team rotate: false - xy: 3421, 2511 + xy: 2023, 2255 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 arc-heat rotate: false - xy: 2820, 2855 + xy: 3104, 2599 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-1 rotate: false - xy: 2291, 46 + xy: 2612, 1651 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-2 rotate: false - xy: 1895, 2212 + xy: 1923, 1954 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-3 rotate: false - xy: 3329, 3001 + xy: 1353, 2529 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-4 rotate: false - xy: 1899, 888 + xy: 3398, 2657 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 foreshadow-heat rotate: false - xy: 3783, 3079 + xy: 3788, 2422 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 hail-heat rotate: false - xy: 781, 1 + xy: 3709, 3033 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 2013, 1684 + xy: 2683, 2061 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 meltdown-heat rotate: false - xy: 1963, 3035 + xy: 1297, 1455 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 ripple-heat rotate: false - xy: 2833, 2659 + xy: 2137, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 salvo-heat rotate: false - xy: 2079, 1684 + xy: 1985, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-heat rotate: false - xy: 3493, 2167 + xy: 2319, 1081 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tsunami-liquid rotate: false - xy: 3225, 2597 + xy: 1925, 2255 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 tsunami-top rotate: false - xy: 3225, 2499 + xy: 1827, 2157 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 2145, 1628 + xy: 3125, 2221 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-top rotate: false - xy: 2145, 1562 + xy: 3191, 2163 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 additive-reconstructor rotate: false - xy: 2873, 3103 + xy: 3806, 2112 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 additive-reconstructor-top rotate: false - xy: 1559, 2571 + xy: 1427, 1747 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 air-factory rotate: false - xy: 1559, 2473 + xy: 1427, 1649 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 command-center rotate: false - xy: 3961, 2775 + xy: 2551, 2119 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 command-center-team rotate: false - xy: 3956, 2709 + xy: 2597, 2185 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 exponential-reconstructor rotate: false - xy: 1127, 3211 + xy: 2531, 3307 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 exponential-reconstructor-top rotate: false - xy: 2531, 3307 + xy: 831, 899 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 factory-in-3 rotate: false - xy: 2722, 2843 + xy: 1673, 1129 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 factory-in-5 rotate: false - xy: 1563, 608 + xy: 2068, 2741 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 factory-in-7 rotate: false - xy: 831, 899 + xy: 831, 673 size: 224, 224 orig: 224, 224 offset: 0, 0 @@ -2323,21 +2841,21 @@ factory-in-9 index: -1 factory-out-3 rotate: false - xy: 2722, 2745 + xy: 1575, 1031 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 factory-out-5 rotate: false - xy: 1563, 446 + xy: 2230, 2741 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 factory-out-7 rotate: false - xy: 831, 673 + xy: 831, 447 size: 224, 224 orig: 224, 224 offset: 0, 0 @@ -2351,56 +2869,63 @@ factory-out-9 index: -1 factory-top-3 rotate: false - xy: 2820, 2757 + xy: 1673, 1031 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ground-factory rotate: false - xy: 1755, 2643 + xy: 1553, 737 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 multiplicative-reconstructor rotate: false - xy: 1559, 284 + xy: 2392, 2741 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 multiplicative-reconstructor-top rotate: false - xy: 1559, 122 + xy: 2554, 2741 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 naval-factory rotate: false - xy: 2441, 2545 + xy: 1749, 933 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 rally-point rotate: false - xy: 2079, 2014 + xy: 979, 13 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-base rotate: false - xy: 3493, 2235 + xy: 2480, 1603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 resupply-point rotate: false - xy: 2079, 1948 + xy: 1981, 1153 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +resupply-point-icon-logic + rotate: false + xy: 1981, 1153 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2421,224 +2946,329 @@ tetrative-reconstructor-top index: -1 copper-wall rotate: false - xy: 2381, 574 + xy: 2096, 1625 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +copper-wall-icon-logic + rotate: false + xy: 2096, 1625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large rotate: false - xy: 2317, 2301 + xy: 1896, 1351 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +copper-wall-large-icon-logic + rotate: false + xy: 1896, 1351 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door rotate: false - xy: 3119, 2233 + xy: 2122, 1557 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +door-icon-logic + rotate: false + xy: 2122, 1557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large rotate: false - xy: 2911, 2331 + xy: 1917, 295 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +door-large-icon-logic + rotate: false + xy: 1917, 295 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 2845, 2265 + xy: 1917, 229 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-open rotate: false - xy: 3119, 2199 + xy: 2088, 1489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 2453, 404 + xy: 2217, 1115 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-wall-icon-logic + rotate: false + xy: 2217, 1115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 2095, 892 + xy: 2517, 1921 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +phase-wall-large-icon-logic + rotate: false + xy: 2517, 1921 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-wall rotate: false - xy: 3449, 2337 + xy: 2217, 1081 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plastanium-wall-icon-logic + rotate: false + xy: 2217, 1081 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-large rotate: false - xy: 2147, 496 + xy: 2649, 1797 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +plastanium-wall-large-icon-logic + rotate: false + xy: 2649, 1797 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-gigantic rotate: false - xy: 2613, 3035 + xy: 2962, 2373 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +scrap-wall-gigantic-icon-logic + rotate: false + xy: 2962, 2373 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-huge2 rotate: false - xy: 2833, 2463 + xy: 1715, 2353 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-huge3 rotate: false - xy: 2931, 2659 + xy: 1813, 2353 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-large1 rotate: false - xy: 2079, 1552 + xy: 1985, 757 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large2 rotate: false - xy: 2083, 1486 + xy: 1985, 691 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large3 rotate: false - xy: 2083, 1420 + xy: 1985, 625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large4 rotate: false - xy: 2099, 1354 + xy: 1985, 559 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall2 rotate: false - xy: 3517, 2355 + xy: 2292, 1579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall3 rotate: false - xy: 3517, 2321 + xy: 2292, 1545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall4 rotate: false - xy: 3551, 2355 + xy: 2292, 1511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall5 rotate: false - xy: 3551, 2355 + xy: 2292, 1511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 2375, 2109 + xy: 2514, 1535 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-wall-icon-logic + rotate: false + xy: 2514, 1535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 2093, 2156 + xy: 2757, 2311 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +surge-wall-large-icon-logic + rotate: false + xy: 2757, 2311 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 2477, 2109 + xy: 2616, 1583 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thorium-wall-icon-logic + rotate: false + xy: 2616, 1583 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 2155, 2090 + xy: 2955, 2307 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +thorium-wall-large-icon-logic + rotate: false + xy: 2955, 2307 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thruster rotate: false - xy: 2743, 2941 + xy: 1445, 1195 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 titanium-wall rotate: false - xy: 2395, 1871 + xy: 2650, 1491 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-wall-icon-logic + rotate: false + xy: 2650, 1491 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large rotate: false - xy: 2169, 2222 + xy: 3021, 2307 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +titanium-wall-large-icon-logic + rotate: false + xy: 3021, 2307 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 bullet rotate: false - xy: 4043, 3285 + xy: 2001, 1900 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 4043, 3231 + xy: 4010, 2813 size: 52, 52 orig: 52, 52 offset: 0, 0 index: -1 casing rotate: false - xy: 3517, 2303 + xy: 1572, 2771 size: 8, 16 orig: 8, 16 offset: 0, 0 index: -1 circle-end rotate: false - xy: 1440, 2754 + xy: 3434, 2326 size: 100, 199 orig: 100, 199 offset: 0, 0 @@ -2652,217 +3282,287 @@ circle-mid index: -1 circle-shadow rotate: false - xy: 1356, 2422 + xy: 3753, 3136 size: 201, 201 orig: 201, 201 offset: 0, 0 index: -1 error rotate: false - xy: 2211, 1636 + xy: 2312, 1805 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 large-bomb rotate: false - xy: 2189, 6 + xy: 3308, 2311 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 large-bomb-back rotate: false - xy: 2873, 2855 + xy: 3092, 2287 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 laser rotate: false - xy: 567, 93 + xy: 397, 2439 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 laser-end rotate: false - xy: 3299, 2425 + xy: 1822, 1467 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 +launch-arrow + rotate: false + xy: 2153, 1251 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +transfer-arrow + rotate: false + xy: 2153, 1251 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 minelaser rotate: false - xy: 2973, 3293 + xy: 3782, 2303 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 minelaser-end rotate: false - xy: 3373, 2437 + xy: 1822, 1393 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 missile rotate: false - xy: 1683, 10 + xy: 1217, 2609 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 missile-back rotate: false - xy: 1113, 2319 + xy: 1049, 1266 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 parallax-laser rotate: false - xy: 2751, 3257 + xy: 929, 2307 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 parallax-laser-end rotate: false - xy: 3447, 2437 + xy: 1822, 1319 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 particle rotate: false - xy: 1109, 2601 + xy: 2999, 2065 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 scale_marker rotate: false - xy: 1501, 1088 + xy: 1, 1 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 shell rotate: false - xy: 3967, 3583 + xy: 2009, 1562 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 shell-back rotate: false - xy: 2683, 2941 + xy: 4017, 3583 size: 36, 36 orig: 36, 36 offset: 0, 0 index: -1 transfer rotate: false - xy: 397, 2439 + xy: 397, 2389 size: 4, 48 orig: 4, 48 offset: 0, 0 index: -1 -transfer-arrow - rotate: false - xy: 2497, 1973 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 white rotate: false - xy: 3652, 2791 + xy: 2089, 2173 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 +additive-reconstructor-icon-logic + rotate: false + xy: 3904, 2092 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-additive-reconstructor-full + rotate: false + xy: 3904, 2092 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +air-factory-icon-logic + rotate: false + xy: 1427, 1551 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +block-air-factory-full + rotate: false + xy: 1427, 1551 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +alpha-icon-logic + rotate: false + xy: 1541, 1031 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 alpha-outline rotate: false - xy: 3225, 2719 + xy: 1525, 3115 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-wreck0 rotate: false - xy: 3323, 2645 + xy: 1749, 1 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-wreck1 rotate: false - xy: 2590, 2251 + xy: 2641, 2381 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-wreck2 rotate: false - xy: 3035, 2245 + xy: 2641, 2331 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +antumbra-icon-logic + rotate: false + xy: 3029, 2207 + size: 28, 32 + orig: 28, 32 + offset: 0, 0 + index: -1 antumbra-outline rotate: false - xy: 935, 2357 + xy: 2015, 3065 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-wreck0 rotate: false - xy: 895, 2115 + xy: 2233, 3065 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-wreck1 rotate: false - xy: 895, 1873 + xy: 2451, 3065 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-wreck2 rotate: false - xy: 895, 1631 + xy: 2669, 3065 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 arc rotate: false - xy: 1947, 1518 + xy: 2844, 2677 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +arc-icon-logic + rotate: false + xy: 1389, 100 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-arc-full + rotate: false + xy: 1389, 100 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arkyid-foot rotate: false - xy: 3652, 2605 + xy: 1073, 2599 size: 70, 70 orig: 70, 70 offset: 0, 0 index: -1 +arkyid-icon-logic + rotate: false + xy: 2649, 1953 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 arkyid-joint-base rotate: false - xy: 3601, 2533 + xy: 1145, 2599 size: 70, 70 orig: 70, 70 offset: 0, 0 index: -1 arkyid-leg rotate: false - xy: 1063, 3315 + xy: 2631, 2431 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -2876,42 +3576,42 @@ arkyid-leg-base index: -1 arkyid-outline rotate: false - xy: 3263, 3229 + xy: 3956, 3209 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 arkyid-wreck0 rotate: false - xy: 3393, 3229 + xy: 3750, 2812 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 arkyid-wreck1 rotate: false - xy: 1397, 6 + xy: 3956, 3079 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 arkyid-wreck2 rotate: false - xy: 1805, 1278 + xy: 3947, 2949 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 artillery-mount-outline rotate: false - xy: 3724, 2605 + xy: 1771, 1101 size: 70, 70 orig: 70, 70 offset: 0, 0 index: -1 artillery-outline rotate: false - xy: 4043, 3115 + xy: 3720, 2077 size: 48, 56 orig: 48, 56 offset: 0, 0 @@ -2923,282 +3623,380 @@ atrax-foot orig: 40, 40 offset: 0, 0 index: -1 +atrax-icon-logic + rotate: false + xy: 3104, 2506 + size: 32, 23 + orig: 32, 23 + offset: 0, 0 + index: -1 atrax-joint rotate: false - xy: 1317, 3183 + xy: 1519, 2403 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 atrax-leg rotate: false - xy: 1279, 3183 + xy: 1885, 1954 size: 36, 26 orig: 36, 26 offset: 0, 0 index: -1 atrax-leg-base rotate: false - xy: 1817, 1408 + xy: 2691, 2283 size: 36, 26 orig: 36, 26 offset: 0, 0 index: -1 atrax-outline rotate: false - xy: 1935, 1158 + xy: 691, 27 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 atrax-wreck0 rotate: false - xy: 3907, 3013 + xy: 91, 7 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 atrax-wreck1 rotate: false - xy: 691, 27 + xy: 181, 7 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 atrax-wreck2 rotate: false - xy: 91, 7 + xy: 1729, 1895 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 beam-weapon-outline rotate: false - xy: 3477, 2611 + xy: 4010, 2210 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 +beta-icon-logic + rotate: false + xy: 2495, 3775 + size: 32, 30 + orig: 32, 30 + offset: 0, 0 + index: -1 beta-outline rotate: false - xy: 2683, 2979 + xy: 1063, 3255 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-wreck0 rotate: false - xy: 3016, 2799 + xy: 3380, 2153 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-wreck1 rotate: false - xy: 3161, 2419 + xy: 3438, 2153 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-wreck2 rotate: false - xy: 2965, 2407 + xy: 3496, 2123 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 -block-additive-reconstructor-full +blast-compound-icon-logic rotate: false - xy: 3281, 2891 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -block-air-factory-full - rotate: false - xy: 3281, 2793 - size: 96, 96 - orig: 96, 96 - offset: 0, 0 - index: -1 -block-arc-full - rotate: false - xy: 2291, 12 + xy: 2714, 1695 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-basalt-full +item-blast-compound-medium rotate: false - xy: 2357, 1186 + xy: 2714, 1695 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-blast-drill-full +blast-drill-icon-logic rotate: false - xy: 1899, 758 + xy: 2878, 2633 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 +block-blast-drill-full + rotate: false + xy: 2878, 2633 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +block-basalt-boulder-full + rotate: false + xy: 2012, 1750 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-basalt-full + rotate: false + xy: 2646, 1661 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 block-boulder-full rotate: false - xy: 1001, 1131 + xy: 2012, 1700 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-char-full rotate: false - xy: 2353, 1118 + xy: 2714, 1661 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-command-center-full rotate: false - xy: 1961, 2212 + xy: 2023, 2112 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +command-center-icon-logic + rotate: false + xy: 2023, 2112 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-conduit-full rotate: false - xy: 2391, 1186 + xy: 2020, 1528 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +conduit-icon-logic + rotate: false + xy: 2020, 1528 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-container-full rotate: false - xy: 1895, 2146 + xy: 2021, 2046 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +container-icon-logic + rotate: false + xy: 2021, 2046 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-conveyor-full rotate: false - xy: 2387, 1152 + xy: 2020, 1494 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 2387, 1152 + xy: 2020, 1494 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +conveyor-icon-logic + rotate: false + xy: 2020, 1494 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-core-foundation-full rotate: false - xy: 1887, 628 + xy: 3528, 2657 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +core-foundation-icon-logic + rotate: false + xy: 3528, 2657 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-core-nucleus-full rotate: false - xy: 1423, 784 + xy: 887, 1142 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +core-nucleus-icon-logic + rotate: false + xy: 887, 1142 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 block-core-shard-full rotate: false - xy: 3379, 2903 + xy: 1451, 2529 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +core-shard-icon-logic + rotate: false + xy: 1451, 2529 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-craters-full rotate: false - xy: 2387, 1118 + xy: 2020, 1460 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-cryofluid-mixer-full rotate: false - xy: 1961, 2146 + xy: 2089, 2107 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cryofluid-mixer-icon-logic + rotate: false + xy: 2089, 2107 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-cultivator-full rotate: false - xy: 1891, 2080 + xy: 2155, 2107 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +cultivator-icon-logic + rotate: false + xy: 2155, 2107 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-cyclone-full rotate: false - xy: 3379, 2805 + xy: 1353, 2431 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +cyclone-icon-logic + rotate: false + xy: 1353, 2431 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-dacite-boulder-full rotate: false - xy: 3035, 2195 + xy: 2062, 1859 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-dacite-full rotate: false - xy: 2319, 1092 + xy: 2020, 1426 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dacite-wall-full rotate: false - xy: 2311, 1058 + xy: 2020, 1392 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dark-metal-full rotate: false - xy: 2311, 1024 + xy: 1195, 3135 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-darksand-full rotate: false - xy: 2311, 990 + xy: 3770, 2067 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dirt-full rotate: false - xy: 2311, 956 + xy: 3804, 2078 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dirt-wall-full rotate: false - xy: 2311, 922 + xy: 3838, 2078 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-dune-wall-full rotate: false - xy: 2353, 1084 + xy: 3500, 2292 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-duo-full rotate: false - xy: 2387, 1084 + xy: 2981, 1899 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +duo-icon-logic + rotate: false + xy: 2981, 1899 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3210,513 +4008,786 @@ block-exponential-reconstructor-full orig: 224, 224 offset: 0, 0 index: -1 +exponential-reconstructor-icon-logic + rotate: false + xy: 2837, 3581 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 block-foreshadow-full rotate: false - xy: 1887, 498 + xy: 3658, 2661 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +foreshadow-icon-logic + rotate: false + xy: 3658, 2661 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-fuse-full rotate: false - xy: 3379, 2707 + xy: 1549, 2501 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +fuse-icon-logic + rotate: false + xy: 1549, 2501 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-grass-full rotate: false - xy: 2345, 1050 + xy: 3015, 1905 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ground-factory-full rotate: false - xy: 3379, 2609 + xy: 1549, 2403 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ground-factory-icon-logic + rotate: false + xy: 1549, 2403 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-hail-full rotate: false - xy: 2345, 1016 + xy: 2562, 1621 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +hail-icon-logic + rotate: false + xy: 2562, 1621 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-hotrock-full rotate: false - xy: 2379, 1050 + xy: 2004, 1358 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-full rotate: false - xy: 2345, 982 + xy: 1983, 1324 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-snow-full rotate: false - xy: 2379, 1016 + xy: 1983, 1290 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ice-wall-full rotate: false - xy: 2345, 948 + xy: 1983, 1256 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-impact-reactor-full rotate: false - xy: 1887, 368 + xy: 3788, 2682 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 +impact-reactor-icon-logic + rotate: false + xy: 3788, 2682 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +block-interplanetary-accelerator-full + rotate: false + xy: 3063, 3581 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +interplanetary-accelerator-icon-logic + rotate: false + xy: 3063, 3581 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 block-lancer-full rotate: false - xy: 1957, 2080 + xy: 2221, 2107 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +lancer-icon-logic + rotate: false + xy: 2221, 2107 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-laser-drill-full rotate: false - xy: 1703, 2937 + xy: 1323, 2333 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +laser-drill-icon-logic + rotate: false + xy: 1323, 2333 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-liquid-router-full rotate: false - xy: 2379, 982 + xy: 1983, 1222 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-router-icon-logic + rotate: false + xy: 1983, 1222 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-liquid-tank-full rotate: false - xy: 1801, 2937 + xy: 1323, 2235 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +liquid-tank-icon-logic + rotate: false + xy: 1323, 2235 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-magmarock-full rotate: false - xy: 2379, 948 + xy: 2017, 1324 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mass-driver-full rotate: false - xy: 1997, 2937 + xy: 1421, 2235 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +mass-driver-icon-logic + rotate: false + xy: 1421, 2235 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-mechanical-drill-full rotate: false - xy: 1947, 2014 + xy: 2287, 2107 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +mechanical-drill-icon-logic + rotate: false + xy: 2287, 2107 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-meltdown-full rotate: false - xy: 1883, 238 + xy: 3918, 2682 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +meltdown-icon-logic + rotate: false + xy: 3918, 2682 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-metal-floor-damaged-full rotate: false - xy: 2345, 914 + xy: 2017, 1290 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-moss-full rotate: false - xy: 2311, 888 + xy: 2017, 1222 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-mud-full rotate: false - xy: 2277, 872 + xy: 2038, 1358 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-multiplicative-reconstructor-full rotate: false - xy: 1401, 622 + xy: 1582, 2923 + size: 160, 160 + orig: 160, 160 + offset: 0, 0 + index: -1 +multiplicative-reconstructor-icon-logic + rotate: false + xy: 1582, 2923 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 block-naval-factory-full rotate: false - xy: 2095, 2937 + xy: 1435, 2137 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +naval-factory-icon-logic + rotate: false + xy: 1435, 2137 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-oil-extractor-full rotate: false - xy: 2193, 2937 + xy: 1435, 2039 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +oil-extractor-icon-logic + rotate: false + xy: 1435, 2039 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-ore-coal-full rotate: false - xy: 2345, 880 + xy: 2051, 1324 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-copper-full rotate: false - xy: 2379, 880 + xy: 2051, 1290 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-lead-full rotate: false - xy: 2269, 838 + xy: 2051, 1256 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-scrap-full rotate: false - xy: 2269, 804 + xy: 2051, 1222 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-thorium-full rotate: false - xy: 2269, 770 + xy: 2047, 1188 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ore-titanium-full rotate: false - xy: 2311, 854 + xy: 2047, 1154 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-parallax-full rotate: false - xy: 1947, 1948 + xy: 2087, 2041 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +parallax-icon-logic + rotate: false + xy: 2087, 2041 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-payload-conveyor-full rotate: false - xy: 2291, 2937 + xy: 1435, 1941 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-conveyor-icon rotate: false - xy: 2291, 2937 + xy: 1435, 1941 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +payload-conveyor-icon-logic + rotate: false + xy: 1435, 1941 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-payload-router-full rotate: false - xy: 2389, 2937 + xy: 1519, 2305 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-icon rotate: false - xy: 2389, 2937 + xy: 1519, 2305 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +payload-router-icon-logic + rotate: false + xy: 1519, 2305 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-pebbles-full rotate: false - xy: 2345, 846 + xy: 2047, 1120 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-weaver-full rotate: false - xy: 1947, 1882 + xy: 2153, 2041 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +phase-weaver-icon-logic + rotate: false + xy: 2153, 2041 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-plated-conduit-full rotate: false - xy: 2379, 846 + xy: 2981, 1865 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plated-conduit-icon-logic + rotate: false + xy: 2981, 1865 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pneumatic-drill-full rotate: false - xy: 1947, 1816 + xy: 2219, 2041 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +pneumatic-drill-icon-logic + rotate: false + xy: 2219, 2041 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-pulse-conduit-full rotate: false - xy: 2303, 820 + xy: 3015, 1871 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulse-conduit-icon-logic + rotate: false + xy: 3015, 1871 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pulverizer-full rotate: false - xy: 2303, 786 + xy: 2973, 1831 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pulverizer-icon-logic + rotate: false + xy: 2973, 1831 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-repair-point-full rotate: false - xy: 2337, 812 + xy: 2973, 1797 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +repair-point-icon-logic + rotate: false + xy: 2973, 1797 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ripple-full rotate: false - xy: 2487, 2937 + xy: 1617, 2305 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +ripple-icon-logic + rotate: false + xy: 1617, 2305 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-salt-wall-full rotate: false - xy: 2371, 812 + xy: 4048, 2779 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-salvo-full rotate: false - xy: 1947, 1750 + xy: 2285, 2041 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +salvo-icon-logic + rotate: false + xy: 2285, 2041 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-sand-boulder-full rotate: false - xy: 2337, 778 + xy: 4048, 2745 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-full rotate: false - xy: 2371, 778 + xy: 4048, 2711 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-wall-full rotate: false - xy: 2303, 752 + xy: 4048, 2677 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scatter-full rotate: false - xy: 1947, 1684 + xy: 2353, 2103 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +scatter-icon-logic + rotate: false + xy: 2353, 2103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-scorch-full rotate: false - xy: 2337, 744 + xy: 4048, 2643 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scorch-icon-logic + rotate: false + xy: 4048, 2643 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-full rotate: false - xy: 2371, 744 + xy: 4048, 2609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall1 rotate: false - xy: 2371, 744 + xy: 4048, 2609 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-wall-icon-logic + rotate: false + xy: 4048, 2609 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-huge-full rotate: false - xy: 2585, 2937 + xy: 1533, 2207 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-huge1 rotate: false - xy: 2585, 2937 + xy: 1533, 2207 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +scrap-wall-huge-icon-logic + rotate: false + xy: 1533, 2207 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-scrap-wall-large-full rotate: false - xy: 1947, 1618 + xy: 2351, 2037 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +scrap-wall-large-icon-logic + rotate: false + xy: 2351, 2037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-segment-full rotate: false - xy: 1947, 1552 + xy: 2419, 2103 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +segment-icon-logic + rotate: false + xy: 2419, 2103 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-shale-boulder-full rotate: false - xy: 1638, 2965 + xy: 4048, 2541 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-full rotate: false - xy: 2575, 2159 + xy: 4048, 2507 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-wall-full rotate: false - xy: 2575, 2125 + xy: 4048, 2473 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shrubs-full rotate: false - xy: 2361, 2052 + xy: 4048, 2439 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-boulder-full rotate: false - xy: 1554, 2999 + xy: 2112, 1859 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snow-full rotate: false - xy: 2361, 2018 + xy: 4048, 2405 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-wall-full rotate: false - xy: 2361, 1984 + xy: 4048, 2371 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spectre-full rotate: false - xy: 1883, 108 + xy: 3138, 2527 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +spectre-icon-logic + rotate: false + xy: 3138, 2527 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 block-spore-cluster-full rotate: false - xy: 1891, 2038 + xy: 758, 3251 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-moss-full rotate: false - xy: 2361, 1950 + xy: 4048, 2337 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-press-full rotate: false - xy: 3829, 2792 + xy: 2417, 2037 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +spore-press-icon-logic + rotate: false + xy: 2417, 2037 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-spore-wall-full rotate: false - xy: 2361, 1916 + xy: 4048, 2303 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-steam-generator-full rotate: false - xy: 3895, 2783 + xy: 1847, 2 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +steam-generator-icon-logic + rotate: false + xy: 1847, 2 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-stone-full rotate: false - xy: 2361, 1882 + xy: 2596, 1617 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-stone-wall-full rotate: false - xy: 2361, 1848 + xy: 2630, 1617 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-swarmer-full rotate: false - xy: 3824, 2726 + xy: 2625, 2259 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +swarmer-icon-logic + rotate: false + xy: 2625, 2259 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-tendrils-full rotate: false - xy: 2361, 1814 + xy: 2664, 1627 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -3728,142 +4799,219 @@ block-tetrative-reconstructor-full orig: 288, 288 offset: 0, 0 index: -1 +tetrative-reconstructor-icon-logic + rotate: false + xy: 1, 1233 + size: 288, 288 + orig: 288, 288 + offset: 0, 0 + index: -1 block-titanium-conveyor-full rotate: false - xy: 2361, 1780 + xy: 2698, 1627 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 2361, 1780 + xy: 2698, 1627 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-conveyor-icon-logic + rotate: false + xy: 2698, 1627 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-tsunami-full rotate: false - xy: 1644, 2839 + xy: 1533, 2109 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +tsunami-icon-logic + rotate: false + xy: 1533, 2109 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-vault-full rotate: false - xy: 1742, 2839 + xy: 1631, 2207 + size: 96, 96 + orig: 96, 96 + offset: 0, 0 + index: -1 +vault-icon-logic + rotate: false + xy: 1631, 2207 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-water-extractor-full rotate: false - xy: 3890, 2717 + xy: 2465, 2177 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +water-extractor-icon-logic + rotate: false + xy: 2465, 2177 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-wave-full rotate: false - xy: 3808, 2660 + xy: 2531, 2185 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +wave-icon-logic + rotate: false + xy: 2531, 2185 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +bryde-icon-logic + rotate: false + xy: 3588, 2043 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 bryde-outline rotate: false - xy: 1663, 1124 + xy: 3040, 2787 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-wreck0 rotate: false - xy: 1757, 982 + xy: 3182, 2787 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-wreck1 rotate: false - xy: 1757, 840 + xy: 3324, 2787 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-wreck2 rotate: false - xy: 2979, 3217 + xy: 3466, 2787 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 +coal-icon-logic + rotate: false + xy: 3656, 2043 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-coal-medium + rotate: false + xy: 3656, 2043 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 command-center-team-crux rotate: false - xy: 3940, 2643 + xy: 2617, 2119 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 command-center-team-sharded rotate: false - xy: 4027, 2775 + xy: 2663, 2193 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container-team-crux rotate: false - xy: 2185, 2301 + xy: 1896, 1483 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 container-team-sharded rotate: false - xy: 2251, 2301 + xy: 1896, 1417 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +copper-icon-logic + rotate: false + xy: 2062, 1625 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-copper-medium + rotate: false + xy: 2062, 1625 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 core-foundation-team-crux rotate: false - xy: 2017, 368 + xy: 3528, 2527 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-foundation-team-sharded rotate: false - xy: 2013, 238 + xy: 3658, 2531 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus-team-crux rotate: false - xy: 1397, 136 + xy: 1572, 2599 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-nucleus-team-sharded rotate: false - xy: 1501, 2066 + xy: 1744, 2903 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard-team-crux rotate: false - xy: 1938, 2839 + xy: 1533, 1913 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 core-shard-team-sharded rotate: false - xy: 1840, 2741 + xy: 1631, 1913 size: 96, 96 orig: 96, 96 offset: 0, 0 @@ -3875,23 +5023,30 @@ corvus-foot orig: 90, 90 offset: 0, 0 index: -1 +corvus-icon-logic + rotate: false + xy: 725, 2921 + size: 31, 20 + orig: 31, 20 + offset: 0, 0 + index: -1 corvus-joint rotate: false - xy: 2147, 368 + xy: 1063, 3311 size: 60, 60 orig: 60, 60 offset: 0, 0 index: -1 corvus-joint-base rotate: false - xy: 3745, 2533 + xy: 1845, 1247 size: 70, 70 orig: 70, 70 offset: 0, 0 index: -1 toxopid-joint-base rotate: false - xy: 3745, 2533 + xy: 1845, 1247 size: 70, 70 orig: 70, 70 offset: 0, 0 @@ -3912,420 +5067,420 @@ corvus-leg-base index: -1 corvus-outline rotate: false - xy: 2757, 3201 + xy: 3105, 3213 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-wreck0 rotate: false - xy: 1016, 2927 + xy: 3321, 3213 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-wreck1 rotate: false - xy: 1016, 2785 + xy: 3321, 3071 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-wreck2 rotate: false - xy: 983, 2643 + xy: 3537, 3217 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 cracks-1-0 rotate: false - xy: 2381, 540 + xy: 2130, 1625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-1 rotate: false - xy: 2381, 506 + xy: 2164, 1625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-2 rotate: false - xy: 2381, 472 + xy: 2198, 1625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-3 rotate: false - xy: 2381, 438 + xy: 2232, 1625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-4 rotate: false - xy: 2385, 404 + xy: 2266, 1625 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-5 rotate: false - xy: 3587, 2421 + xy: 2300, 1613 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-6 rotate: false - xy: 3587, 2387 + xy: 2081, 1591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-1-7 rotate: false - xy: 3085, 2261 + xy: 2115, 1591 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cracks-2-0 rotate: false - xy: 2383, 2301 + xy: 1917, 1285 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-1 rotate: false - xy: 2449, 2301 + xy: 1917, 1219 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-2 rotate: false - xy: 2515, 2301 + xy: 1915, 1153 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-3 rotate: false - xy: 2581, 2301 + xy: 1915, 1087 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-4 rotate: false - xy: 2647, 2311 + xy: 1919, 1021 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-5 rotate: false - xy: 3521, 2389 + xy: 1919, 955 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-6 rotate: false - xy: 2713, 2315 + xy: 1919, 889 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-2-7 rotate: false - xy: 2779, 2315 + xy: 1919, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cracks-3-0 rotate: false - xy: 2036, 2839 + xy: 1525, 1815 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-1 rotate: false - xy: 1938, 2741 + xy: 1525, 1717 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-2 rotate: false - xy: 2134, 2839 + xy: 1623, 1815 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-3 rotate: false - xy: 2036, 2741 + xy: 1525, 1619 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-4 rotate: false - xy: 2232, 2839 + xy: 1623, 1717 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-5 rotate: false - xy: 2134, 2741 + xy: 1623, 1619 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-6 rotate: false - xy: 2330, 2839 + xy: 1525, 1521 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-3-7 rotate: false - xy: 2232, 2741 + xy: 1623, 1521 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 cracks-4-0 rotate: false - xy: 2013, 108 + xy: 3788, 2552 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-1 rotate: false - xy: 2973, 3087 + xy: 3918, 2552 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-2 rotate: false - xy: 3103, 3087 + xy: 1423, 856 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-3 rotate: false - xy: 3523, 3209 + xy: 1423, 726 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-4 rotate: false - xy: 3653, 3209 + xy: 1423, 596 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-5 rotate: false - xy: 3783, 3209 + xy: 1423, 466 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-6 rotate: false - xy: 3913, 3209 + xy: 1423, 336 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-4-7 rotate: false - xy: 3523, 3079 + xy: 1423, 206 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 cracks-5-0 rotate: false - xy: 1501, 1904 + xy: 1906, 2903 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-1 rotate: false - xy: 1501, 1742 + xy: 2068, 2903 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-2 rotate: false - xy: 1501, 1580 + xy: 2230, 2903 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-3 rotate: false - xy: 1501, 1418 + xy: 2392, 2903 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-4 rotate: false - xy: 1501, 1256 + xy: 2554, 2903 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-5 rotate: false - xy: 1501, 1094 + xy: 2716, 2903 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-6 rotate: false - xy: 1595, 932 + xy: 1744, 2741 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-5-7 rotate: false - xy: 1585, 770 + xy: 1906, 2741 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 cracks-6-0 rotate: false - xy: 1153, 2228 + xy: 3753, 2942 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-1 rotate: false - xy: 1347, 2228 + xy: 1111, 2041 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-2 rotate: false - xy: 1113, 2034 + xy: 1111, 1847 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-3 rotate: false - xy: 1113, 1840 + xy: 1103, 1653 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-4 rotate: false - xy: 1307, 2034 + xy: 1103, 1459 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-5 rotate: false - xy: 1113, 1646 + xy: 1090, 1265 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-6 rotate: false - xy: 1307, 1840 + xy: 1057, 1071 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-6-7 rotate: false - xy: 1113, 1452 + xy: 1057, 877 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 cracks-7-0 rotate: false - xy: 3063, 3581 + xy: 3289, 3581 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-1 rotate: false - xy: 3289, 3581 + xy: 3515, 3581 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-2 rotate: false - xy: 3515, 3581 + xy: 3741, 3581 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-3 rotate: false - xy: 3741, 3581 + xy: 1627, 3307 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-4 rotate: false - xy: 1627, 3307 + xy: 1853, 3307 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-5 rotate: false - xy: 1853, 3307 + xy: 2079, 3307 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-6 rotate: false - xy: 2079, 3307 + xy: 2305, 3307 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 cracks-7-7 rotate: false - xy: 2305, 3307 + xy: 1127, 3211 size: 224, 224 orig: 224, 224 offset: 0, 0 @@ -4442,86 +5597,121 @@ cracks-9-7 orig: 288, 288 offset: 0, 0 index: -1 +crawler-icon-logic + rotate: false + xy: 2149, 1591 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 crawler-leg rotate: false - xy: 2165, 1346 + xy: 2062, 1709 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-outline rotate: false - xy: 2165, 1296 + xy: 2162, 1809 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-wreck0 rotate: false - xy: 2165, 1246 + xy: 2112, 1759 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-wreck1 rotate: false - xy: 2235, 2186 + xy: 2262, 1859 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-wreck2 rotate: false - xy: 2225, 2136 + xy: 2212, 1809 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +cryofluid-icon-logic + rotate: false + xy: 2217, 1591 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +liquid-cryofluid-medium + rotate: false + xy: 2217, 1591 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 cyclone rotate: false - xy: 2428, 2839 + xy: 1544, 1423 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +dagger-icon-logic + rotate: false + xy: 2251, 1591 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 dagger-leg rotate: false - xy: 2211, 1886 + xy: 2212, 1759 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-outline rotate: false - xy: 2211, 1836 + xy: 2212, 1709 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-wreck0 rotate: false - xy: 2211, 1786 + xy: 2262, 1759 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-wreck1 rotate: false - xy: 2211, 1736 + xy: 2262, 1709 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-wreck2 rotate: false - xy: 2211, 1686 + xy: 2312, 1855 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 duo rotate: false - xy: 3211, 2385 + xy: 2122, 1523 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +eclipse-icon-logic + rotate: false + xy: 2156, 1557 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -4556,151 +5746,193 @@ eclipse-wreck2 index: -1 eruption-outline rotate: false - xy: 2267, 372 + xy: 2312, 1747 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flamethrower-outline rotate: false - xy: 2273, 206 + xy: 2412, 1797 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 +flare-icon-logic + rotate: false + xy: 2088, 1455 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 flare-outline rotate: false - xy: 2211, 1528 + xy: 2462, 1805 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flare-wreck0 rotate: false - xy: 2207, 1478 + xy: 2512, 1805 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flare-wreck1 rotate: false - xy: 2285, 2186 + xy: 2562, 1805 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flare-wreck2 rotate: false - xy: 2275, 2136 + xy: 2362, 1739 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 foreshadow rotate: false - xy: 3653, 3079 + xy: 1423, 76 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 +fortress-icon-logic + rotate: false + xy: 2595, 3538 + size: 32, 25 + orig: 32, 25 + offset: 0, 0 + index: -1 fortress-leg rotate: false - xy: 3829, 2940 + xy: 1721, 1524 size: 80, 60 orig: 80, 60 offset: 0, 0 index: -1 fortress-outline rotate: false - xy: 2649, 3225 + xy: 3536, 2281 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-wreck0 rotate: false - xy: 1440, 2672 + xy: 3638, 2319 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-wreck1 rotate: false - xy: 1985, 26 + xy: 3638, 2237 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-wreck2 rotate: false - xy: 2087, 26 + xy: 3206, 2331 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fuse rotate: false - xy: 1657, 2545 + xy: 1651, 933 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +gamma-icon-logic + rotate: false + xy: 2122, 1489 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 gamma-outline rotate: false - xy: 1817, 770 + xy: 1847, 398 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 gamma-wreck0 rotate: false - xy: 2617, 2377 + xy: 1847, 328 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 gamma-wreck1 rotate: false - xy: 1897, 2278 + xy: 1847, 258 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 gamma-wreck2 rotate: false - xy: 1967, 2278 + xy: 1847, 188 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 +graphite-icon-logic + rotate: false + xy: 2156, 1523 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +item-graphite-medium + rotate: false + xy: 2156, 1523 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 hail rotate: false - xy: 3245, 2391 + xy: 2190, 1557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 heal-shotgun-weapon-outline rotate: false - xy: 2820, 2889 + xy: 1575, 3311 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 heal-weapon-mount-outline rotate: false - xy: 2261, 1986 + xy: 2512, 1755 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 heal-weapon-outline rotate: false - xy: 2261, 1936 + xy: 2562, 1755 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +horizon-icon-logic + rotate: false + xy: 2088, 1421 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 horizon-outline rotate: false xy: 323, 2341 @@ -4710,371 +5942,399 @@ horizon-outline index: -1 horizon-wreck0 rotate: false - xy: 3993, 2841 + xy: 2551, 2251 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 horizon-wreck1 rotate: false - xy: 3734, 2682 + xy: 2391, 2169 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 horizon-wreck2 rotate: false - xy: 3225, 2425 + xy: 1811, 1541 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 +interplanetary-accelerator-team-crux + rotate: false + xy: 2983, 3355 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 +interplanetary-accelerator-team-sharded + rotate: false + xy: 3209, 3355 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 item-blast-compound-large rotate: false - xy: 2273, 1236 + xy: 1647, 2409 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-blast-compound-medium - rotate: false - xy: 3313, 2357 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 item-blast-compound-small rotate: false - xy: 693, 2331 + xy: 2690, 2715 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-blast-compound-tiny rotate: false - xy: 3187, 2283 + xy: 2088, 1403 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-blast-compound-xlarge rotate: false - xy: 2261, 1886 + xy: 2312, 1697 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-coal-large rotate: false - xy: 758, 3251 + xy: 2333, 2507 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-coal-medium - rotate: false - xy: 2325, 88 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 item-coal-small rotate: false - xy: 1601, 3441 + xy: 3040, 2929 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-coal-tiny rotate: false - xy: 1569, 3307 + xy: 2292, 1425 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-coal-xlarge rotate: false - xy: 2261, 1836 + xy: 2362, 1689 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-copper-large rotate: false - xy: 1016, 3073 + xy: 1195, 3169 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-copper-medium - rotate: false - xy: 2325, 20 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 item-copper-small rotate: false - xy: 691, 1 + xy: 1157, 2377 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-copper-tiny rotate: false - xy: 1151, 2625 + xy: 2360, 1595 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-copper-xlarge rotate: false - xy: 2261, 1786 + xy: 2412, 1697 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-graphite-large rotate: false - xy: 983, 2601 + xy: 1063, 3213 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -item-graphite-medium - rotate: false - xy: 2413, 1050 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 item-graphite-small rotate: false - xy: 3347, 2399 + xy: 1995, 2054 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-graphite-tiny rotate: false - xy: 1169, 2625 + xy: 2360, 1577 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-graphite-xlarge rotate: false - xy: 2261, 1736 + xy: 2462, 1705 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-lead-large rotate: false - xy: 1440, 2630 + xy: 1896, 1622 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-lead-medium rotate: false - xy: 2413, 982 + xy: 2190, 1455 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +lead-icon-logic + rotate: false + xy: 2190, 1455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead-small rotate: false - xy: 719, 2331 + xy: 691, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-lead-tiny rotate: false - xy: 4079, 3061 + xy: 2360, 1559 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-lead-xlarge rotate: false - xy: 2261, 1686 + xy: 2512, 1705 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-metaglass-large rotate: false - xy: 1063, 3215 + xy: 1962, 1358 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-metaglass-medium rotate: false - xy: 2413, 914 + xy: 2190, 1421 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +metaglass-icon-logic + rotate: false + xy: 2190, 1421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass-small rotate: false - xy: 1601, 3415 + xy: 1689, 2425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-metaglass-tiny rotate: false - xy: 4079, 3043 + xy: 2360, 1541 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-metaglass-xlarge rotate: false - xy: 2261, 1636 + xy: 2562, 1705 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-phase-fabric-large rotate: false - xy: 1554, 2957 + xy: 3554, 2137 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-phase-fabric-medium rotate: false - xy: 2413, 846 + xy: 2224, 1421 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +phase-fabric-icon-logic + rotate: false + xy: 2224, 1421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric-small rotate: false - xy: 717, 1 + xy: 693, 2331 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-phase-fabric-tiny rotate: false - xy: 4079, 3025 + xy: 2360, 1523 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-phase-fabric-xlarge rotate: false - xy: 2261, 1586 + xy: 2012, 1650 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-plastanium-large rotate: false - xy: 2273, 114 + xy: 1799, 9 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-plastanium-medium rotate: false - xy: 2405, 778 + xy: 2258, 1523 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +plastanium-icon-logic + rotate: false + xy: 2258, 1523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium-small rotate: false - xy: 3347, 2373 + xy: 3066, 2929 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-plastanium-tiny rotate: false - xy: 4079, 3007 + xy: 2360, 1505 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-plastanium-xlarge rotate: false - xy: 2261, 1536 + xy: 2062, 1659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-pyratite-large rotate: false - xy: 2273, 1194 + xy: 2931, 1841 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-pyratite-medium rotate: false - xy: 2415, 710 + xy: 2258, 1455 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +pyratite-icon-logic + rotate: false + xy: 2258, 1455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite-small rotate: false - xy: 745, 2331 + xy: 1183, 2377 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-pyratite-tiny rotate: false - xy: 1187, 2625 + xy: 2360, 1487 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-pyratite-xlarge rotate: false - xy: 2335, 2193 + xy: 2112, 1659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-sand-large rotate: false - xy: 2227, 850 + xy: 3740, 2311 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-sand-medium rotate: false - xy: 2415, 642 + xy: 2106, 1387 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +sand-icon-logic + rotate: false + xy: 2106, 1387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand-small rotate: false - xy: 1601, 3389 + xy: 717, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-sand-tiny rotate: false - xy: 4079, 2989 + xy: 2360, 1469 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-sand-xlarge rotate: false - xy: 2385, 2193 + xy: 2162, 1659 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -5088,578 +6348,676 @@ item-scrap-large index: -1 item-scrap-medium rotate: false - xy: 2415, 574 + xy: 2174, 1387 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +scrap-icon-logic + rotate: false + xy: 2174, 1387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap-small rotate: false - xy: 743, 1 + xy: 719, 2331 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-scrap-tiny rotate: false - xy: 2279, 752 + xy: 693, 2603 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-scrap-xlarge rotate: false - xy: 2435, 2193 + xy: 2212, 1659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-silicon-large rotate: false - xy: 1025, 2601 + xy: 3709, 2991 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-silicon-medium rotate: false - xy: 2415, 506 + xy: 2242, 1387 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +silicon-icon-logic + rotate: false + xy: 2242, 1387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon-small rotate: false - xy: 771, 2331 + xy: 1209, 2377 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-silicon-tiny rotate: false - xy: 3151, 2351 + xy: 3753, 3341 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-silicon-xlarge rotate: false - xy: 2485, 2193 + xy: 2262, 1659 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-spore-pod-large rotate: false - xy: 1482, 2630 + xy: 2333, 2465 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-spore-pod-medium rotate: false - xy: 2419, 404 + xy: 2119, 1319 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +spore-pod-icon-logic + rotate: false + xy: 2119, 1319 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod-small rotate: false - xy: 1601, 3363 + xy: 743, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-spore-pod-tiny rotate: false - xy: 693, 2603 + xy: 1744, 3067 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-spore-pod-xlarge rotate: false - xy: 2535, 2193 + xy: 2009, 1600 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-surge-alloy-large rotate: false - xy: 1596, 2957 + xy: 2931, 1799 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-surge-alloy-medium rotate: false - xy: 3177, 2335 + xy: 2119, 1285 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +surge-alloy-icon-logic + rotate: false + xy: 2119, 1285 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy-small rotate: false - xy: 797, 2331 + xy: 745, 2331 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-surge-alloy-tiny rotate: false - xy: 2595, 3547 + xy: 3945, 3863 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-surge-alloy-xlarge rotate: false - xy: 3161, 2369 + xy: 2312, 1647 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-thorium-large rotate: false - xy: 2315, 1194 + xy: 3740, 2269 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-thorium-medium rotate: false - xy: 3211, 2317 + xy: 2187, 1353 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +thorium-icon-logic + rotate: false + xy: 2187, 1353 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium-small rotate: false - xy: 1601, 3337 + xy: 771, 2331 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-thorium-tiny rotate: false - xy: 983, 2839 + xy: 3040, 2769 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-thorium-xlarge rotate: false - xy: 2215, 1428 + xy: 2362, 1639 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-titanium-large rotate: false - xy: 2227, 808 + xy: 758, 3167 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 item-titanium-medium rotate: false - xy: 3279, 2323 + xy: 2153, 1285 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +titanium-icon-logic + rotate: false + xy: 2153, 1285 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium-small rotate: false - xy: 823, 2331 + xy: 797, 2331 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-titanium-tiny rotate: false - xy: 1353, 3419 + xy: 3750, 2794 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-titanium-xlarge rotate: false - xy: 2215, 1378 + xy: 2412, 1647 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lancer rotate: false - xy: 2013, 1750 + xy: 2617, 2053 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 large-artillery-outline rotate: false - xy: 2215, 1242 + xy: 2512, 1637 size: 48, 66 orig: 48, 66 offset: 0, 0 index: -1 large-bullet-mount-outline rotate: false - xy: 1969, 2348 + xy: 1843, 1146 size: 70, 97 orig: 70, 97 offset: 0, 0 index: -1 large-laser-mount-outline rotate: false - xy: 1853, 2449 - size: 96, 192 - orig: 96, 192 + xy: 1651, 693 + size: 96, 140 + orig: 96, 140 offset: 0, 0 index: -1 large-purple-mount-outline rotate: false - xy: 2113, 2348 + xy: 1847, 948 size: 70, 97 orig: 70, 97 offset: 0, 0 index: -1 large-weapon-outline rotate: false - xy: 2257, 1478 + xy: 2779, 2191 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-cryofluid-large rotate: false - xy: 758, 3167 + xy: 3709, 2949 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -liquid-cryofluid-medium - rotate: false - xy: 3279, 2289 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 liquid-cryofluid-small rotate: false - xy: 849, 2331 + xy: 823, 2331 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-cryofluid-tiny rotate: false - xy: 1229, 876 + xy: 1238, 3079 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-cryofluid-xlarge rotate: false - xy: 2265, 1428 + xy: 2829, 2191 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-oil-large rotate: false - xy: 1067, 2601 + xy: 758, 3125 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-oil-medium rotate: false - xy: 3153, 2233 + xy: 2187, 1251 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +oil-icon-logic + rotate: false + xy: 2187, 1251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil-small rotate: false - xy: 1601, 3311 + xy: 849, 2331 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-oil-tiny rotate: false - xy: 1401, 786 + xy: 3638, 2509 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-oil-xlarge rotate: false - xy: 2265, 1378 + xy: 2879, 2191 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-slag-large rotate: false - xy: 2227, 766 + xy: 2999, 2149 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-slag-medium rotate: false - xy: 3255, 2221 + xy: 2153, 1217 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +slag-icon-logic + rotate: false + xy: 2153, 1217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag-small rotate: false - xy: 725, 2917 + xy: 1995, 2028 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-slag-tiny rotate: false - xy: 1663, 1106 + xy: 1353, 2629 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-slag-xlarge rotate: false - xy: 2265, 1328 + xy: 2929, 2191 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-water-large rotate: false - xy: 758, 3125 + xy: 2999, 2107 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 liquid-water-medium rotate: false - xy: 3323, 2221 + xy: 2289, 1353 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +water-icon-logic + rotate: false + xy: 2289, 1353 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water-small rotate: false - xy: 2495, 3781 + xy: 2021, 2020 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-water-tiny rotate: false - xy: 3945, 3863 + xy: 1549, 2609 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 liquid-water-xlarge rotate: false - xy: 2265, 1278 + xy: 2979, 2191 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +mace-icon-logic + rotate: false + xy: 2289, 1319 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 mace-leg rotate: false - xy: 2033, 1354 + xy: 2055, 1975 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-outline rotate: false - xy: 2033, 1288 + xy: 2121, 1975 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-wreck0 rotate: false - xy: 2033, 1222 + xy: 2187, 1975 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-wreck1 rotate: false - xy: 2025, 1156 + xy: 2253, 1975 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-wreck2 rotate: false - xy: 2029, 1090 + xy: 2319, 1971 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mass-driver rotate: false - xy: 2441, 2643 + xy: 1651, 105 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +mega-icon-logic + rotate: false + xy: 2289, 1217 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 mega-outline rotate: false - xy: 3179, 2871 + xy: 3398, 2209 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-wreck0 rotate: false - xy: 3077, 2769 + xy: 3500, 2179 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-wreck1 rotate: false - xy: 3179, 2769 + xy: 3602, 2135 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-wreck2 rotate: false - xy: 1542, 2853 + xy: 3704, 2135 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 meltdown rotate: false - xy: 1833, 3035 + xy: 1297, 1585 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 +minke-icon-logic + rotate: false + xy: 725, 2865 + size: 27, 32 + orig: 27, 32 + offset: 0, 0 + index: -1 minke-outline rotate: false - xy: 3477, 2796 + xy: 1721, 1689 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-wreck0 rotate: false - xy: 3567, 2899 + xy: 1721, 1586 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-wreck1 rotate: false - xy: 3477, 2693 + xy: 2121, 2173 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-wreck2 rotate: false - xy: 3567, 2796 + xy: 2211, 2173 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 missiles-mount-outline rotate: false - xy: 2311, 2036 + xy: 2799, 2141 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +mono-icon-logic + rotate: false + xy: 2221, 1183 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 mono-outline rotate: false - xy: 2311, 1886 + xy: 2849, 2141 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-wreck0 rotate: false - xy: 2311, 1836 + xy: 2749, 1991 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-wreck1 rotate: false - xy: 2311, 1786 + xy: 2799, 2041 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-wreck2 rotate: false - xy: 2311, 1736 + xy: 2849, 2091 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-purple-weapon-outline rotate: false - xy: 2311, 1636 + xy: 2749, 1941 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-weapon-outline rotate: false - xy: 2311, 1536 + xy: 2849, 2041 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +nova-icon-logic + rotate: false + xy: 2255, 1183 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 nova-leg rotate: false - xy: 2425, 2143 + xy: 2949, 2141 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 nova-outline rotate: false - xy: 1063, 3257 + xy: 1896, 1780 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-wreck0 rotate: false - xy: 2358, 2243 + xy: 1896, 1722 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-wreck1 rotate: false - xy: 2416, 2243 + xy: 1896, 1664 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-wreck2 rotate: false - xy: 2474, 2243 + xy: 1954, 1838 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 +oct-icon-logic + rotate: false + xy: 2289, 1183 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 oct-outline rotate: false xy: 403, 3695 @@ -5690,11 +7048,18 @@ oct-wreck2 index: -1 omura-cannon-outline rotate: false - xy: 1057, 894 + xy: 1251, 986 size: 192, 277 orig: 192, 277 offset: 0, 0 index: -1 +omura-icon-logic + rotate: false + xy: 3410, 2379 + size: 22, 32 + orig: 22, 32 + offset: 0, 0 + index: -1 omura-outline rotate: false xy: 291, 545 @@ -5725,301 +7090,357 @@ omura-wreck2 index: -1 parallax rotate: false - xy: 2095, 958 + xy: 2451, 1905 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +poly-icon-logic + rotate: false + xy: 2831, 1757 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 poly-outline rotate: false - xy: 1623, 3107 + xy: 1954, 1664 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-wreck0 rotate: false - xy: 2149, 1504 + xy: 3322, 2095 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-wreck1 rotate: false - xy: 2149, 1446 + xy: 3380, 2095 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-wreck2 rotate: false - xy: 1565, 3049 + xy: 3438, 2095 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 +pulsar-icon-logic + rotate: false + xy: 2047, 1091 + size: 32, 27 + orig: 32, 27 + offset: 0, 0 + index: -1 pulsar-leg rotate: false - xy: 2845, 2199 + xy: 847, 13 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pulsar-outline rotate: false - xy: 2037, 2288 + xy: 1354, 1265 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-wreck0 rotate: false - xy: 2107, 2288 + xy: 1847, 128 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-wreck1 rotate: false - xy: 1801, 2235 + xy: 1847, 68 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-wreck2 rotate: false - xy: 2687, 2387 + xy: 1389, 16 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 +quad-icon-logic + rotate: false + xy: 983, 2824 + size: 31, 31 + orig: 31, 31 + offset: 0, 0 + index: -1 quad-outline rotate: false - xy: 831, 7 + xy: 935, 2377 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-wreck0 rotate: false - xy: 2757, 3343 + xy: 1016, 2893 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-wreck1 rotate: false - xy: 2979, 3359 + xy: 1016, 2671 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-wreck2 rotate: false - xy: 3201, 3359 + xy: 1353, 3215 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 +quasar-icon-logic + rotate: false + xy: 3001, 1729 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 quasar-leg rotate: false - xy: 1307, 12 + xy: 2313, 2287 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-outline rotate: false - xy: 3519, 2529 + xy: 2385, 2407 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-wreck0 rotate: false - xy: 3997, 2997 + xy: 2467, 2407 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-wreck1 rotate: false - xy: 3993, 2915 + xy: 2549, 2407 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-wreck2 rotate: false - xy: 3829, 2858 + xy: 2395, 2325 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 +reign-icon-logic + rotate: false + xy: 725, 2899 + size: 31, 20 + orig: 31, 20 + offset: 0, 0 + index: -1 reign-leg rotate: false - xy: 1663, 1534 + xy: 2382, 2489 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 reign-outline rotate: false - xy: 1353, 3183 + xy: 2887, 2955 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 reign-weapon-outline rotate: false - xy: 3657, 2759 + xy: 1811, 1615 size: 83, 138 orig: 83, 138 offset: 0, 0 index: -1 reign-wreck0 rotate: false - xy: 1569, 3165 + xy: 3103, 2929 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 reign-wreck1 rotate: false - xy: 1785, 3165 + xy: 3319, 2929 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 reign-wreck2 rotate: false - xy: 2001, 3165 + xy: 935, 2235 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 repair-point rotate: false - xy: 3493, 2269 + xy: 2446, 1603 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ripple rotate: false - xy: 2735, 2451 + xy: 2039, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +risso-icon-logic + rotate: false + xy: 2748, 1763 + size: 28, 32 + orig: 28, 32 + offset: 0, 0 + index: -1 risso-outline rotate: false - xy: 2257, 2367 + xy: 1847, 788 size: 70, 78 orig: 70, 78 offset: 0, 0 index: -1 risso-wreck0 rotate: false - xy: 2329, 2367 + xy: 1847, 708 size: 70, 78 orig: 70, 78 offset: 0, 0 index: -1 risso-wreck1 rotate: false - xy: 2401, 2367 + xy: 1847, 628 size: 70, 78 orig: 70, 78 offset: 0, 0 index: -1 risso-wreck2 rotate: false - xy: 2473, 2367 + xy: 1847, 548 size: 70, 78 orig: 70, 78 offset: 0, 0 index: -1 salvo rotate: false - xy: 2079, 1750 + xy: 1985, 955 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter rotate: false - xy: 2079, 1618 + xy: 1985, 823 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +scepter-icon-logic + rotate: false + xy: 2757, 3311 + size: 32, 26 + orig: 32, 26 + offset: 0, 0 + index: -1 scepter-leg rotate: false - xy: 2483, 3035 + xy: 2832, 2373 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 vela-leg rotate: false - xy: 2483, 3035 + xy: 2832, 2373 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scepter-outline rotate: false - xy: 1251, 946 + xy: 1251, 702 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-weapon-outline rotate: false - xy: 2977, 2199 + xy: 1962, 1456 size: 56, 102 orig: 56, 102 offset: 0, 0 index: -1 scepter-wreck0 rotate: false - xy: 1057, 610 + xy: 1251, 560 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-wreck1 rotate: false - xy: 1053, 468 + xy: 1251, 418 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-wreck2 rotate: false - xy: 1053, 326 + xy: 1251, 276 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scorch rotate: false - xy: 3459, 2167 + xy: 2319, 1115 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 segment rotate: false - xy: 2099, 1288 + xy: 1985, 493 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +sei-icon-logic + rotate: false + xy: 2292, 1477 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 sei-launcher-outline rotate: false - xy: 3747, 2838 + xy: 2559, 2325 size: 80, 80 orig: 80, 80 offset: 0, 0 @@ -6052,184 +7473,198 @@ sei-wreck2 orig: 240, 240 offset: 0, 0 index: -1 +shock-mine-icon-logic + rotate: false + xy: 2326, 1511 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 small-basic-weapon-outline rotate: false - xy: 2307, 1486 + xy: 2899, 2041 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-mount-weapon-outline rotate: false - xy: 2315, 1386 + xy: 2849, 1941 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spectre rotate: false - xy: 2743, 3071 + xy: 1414, 1325 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spiroct-foot rotate: false - xy: 1609, 2425 + xy: 3740, 2353 size: 46, 46 orig: 46, 46 offset: 0, 0 index: -1 +spiroct-icon-logic + rotate: false + xy: 983, 2797 + size: 31, 25 + orig: 31, 25 + offset: 0, 0 + index: -1 spiroct-joint rotate: false - xy: 3527, 2219 + xy: 2310, 1409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spiroct-leg rotate: false - xy: 3323, 2609 + xy: 1525, 3079 size: 48, 34 orig: 48, 34 offset: 0, 0 index: -1 spiroct-leg-base rotate: false - xy: 4043, 3079 + xy: 3967, 3585 size: 48, 34 orig: 48, 34 offset: 0, 0 index: -1 spiroct-outline rotate: false - xy: 1801, 2295 + xy: 2121, 2276 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-weapon-outline rotate: false - xy: 2365, 1370 + xy: 2781, 1883 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 spiroct-wreck0 rotate: false - xy: 3523, 3002 + xy: 1827, 1982 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-wreck1 rotate: false - xy: 3619, 3002 + xy: 1925, 2080 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-wreck2 rotate: false - xy: 3715, 3002 + xy: 2023, 2178 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 splash-0 rotate: false - xy: 3527, 2185 + xy: 2344, 1409 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-1 rotate: false - xy: 3527, 2151 + xy: 2378, 1605 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-10 rotate: false - xy: 3595, 2183 + xy: 2446, 1535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-11 rotate: false - xy: 3595, 2149 + xy: 2480, 1535 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-2 rotate: false - xy: 3561, 2285 + xy: 2412, 1579 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-3 rotate: false - xy: 3561, 2251 + xy: 2378, 1571 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-4 rotate: false - xy: 3561, 2217 + xy: 2446, 1569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-5 rotate: false - xy: 3561, 2183 + xy: 2480, 1569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-6 rotate: false - xy: 3561, 2149 + xy: 2514, 1569 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-7 rotate: false - xy: 3595, 2285 + xy: 2548, 1587 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-8 rotate: false - xy: 3595, 2251 + xy: 2412, 1545 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 splash-9 rotate: false - xy: 3595, 2217 + xy: 2378, 1537 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer rotate: false - xy: 2089, 2090 + xy: 2823, 2307 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 toxopid-cannon-outline rotate: false - xy: 1232, 2625 + xy: 895, 1507 size: 206, 220 orig: 206, 220 offset: 0, 0 @@ -6241,6 +7676,13 @@ toxopid-foot orig: 90, 90 offset: 0, 0 index: -1 +toxopid-icon-logic + rotate: false + xy: 2334, 1613 + size: 26, 32 + orig: 26, 32 + offset: 0, 0 + index: -1 toxopid-leg rotate: false xy: 3945, 4023 @@ -6257,98 +7699,98 @@ toxopid-leg-base index: -1 toxopid-outline rotate: false - xy: 1725, 386 + xy: 2878, 2763 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-wreck0 rotate: false - xy: 1721, 194 + xy: 1734, 2549 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-wreck1 rotate: false - xy: 1721, 2 + xy: 1896, 2549 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-wreck2 rotate: false - xy: 1541, 2230 + xy: 2058, 2549 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 tsunami rotate: false - xy: 3127, 2475 + xy: 1729, 2059 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 unit-alpha-full rotate: false - xy: 2365, 1320 + xy: 2781, 1833 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-antumbra-full rotate: false - xy: 895, 1389 + xy: 2887, 3097 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 unit-arkyid-full rotate: false - xy: 2873, 2957 + xy: 1445, 1065 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 unit-atrax-full rotate: false - xy: 181, 7 + xy: 983, 2605 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 unit-beta-full rotate: false - xy: 3035, 2353 + xy: 1962, 1400 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 unit-bryde-full rotate: false - xy: 3121, 3217 + xy: 3608, 2791 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 unit-corvus-full rotate: false - xy: 2217, 3165 + xy: 895, 2093 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 unit-crawler-full rotate: false - xy: 2365, 1270 + xy: 2831, 1891 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-dagger-full rotate: false - xy: 2315, 1236 + xy: 2831, 1841 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -6362,63 +7804,63 @@ unit-eclipse-full index: -1 unit-flare-full rotate: false - xy: 2365, 1220 + xy: 2881, 1891 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-fortress-full rotate: false - xy: 1542, 2771 + xy: 3806, 2210 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 unit-gamma-full rotate: false - xy: 2757, 2381 + xy: 1459, 6 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 unit-horizon-full rotate: false - xy: 3521, 2455 + xy: 1771, 1245 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 unit-mace-full rotate: false - xy: 2145, 2024 + xy: 2729, 2245 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 unit-mega-full rotate: false - xy: 1542, 2669 + xy: 3908, 2190 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 unit-minke-full rotate: false - xy: 3657, 2899 + xy: 2301, 2173 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 unit-mono-full rotate: false - xy: 2227, 1142 + xy: 2881, 1841 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-nova-full rotate: false - xy: 3035, 2295 + xy: 3554, 2077 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -6439,49 +7881,49 @@ unit-omura-full index: -1 unit-poly-full rotate: false - xy: 3093, 2351 + xy: 3612, 2077 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 unit-pulsar-full rotate: false - xy: 1825, 2175 + xy: 1925, 2020 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 unit-quad-full rotate: false - xy: 3423, 3359 + xy: 1575, 3085 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 unit-quasar-full rotate: false - xy: 3742, 2756 + xy: 2395, 2243 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 unit-reign-full rotate: false - xy: 2433, 3165 + xy: 895, 1951 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 unit-risso-full rotate: false - xy: 2545, 2367 + xy: 1847, 468 size: 70, 78 orig: 70, 78 offset: 0, 0 index: -1 unit-scepter-full rotate: false - xy: 1053, 184 + xy: 1251, 134 size: 170, 140 orig: 170, 140 offset: 0, 0 @@ -6495,301 +7937,322 @@ unit-sei-full index: -1 unit-spiroct-full rotate: false - xy: 3811, 3002 + xy: 2217, 2276 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 unit-toxopid-full rotate: false - xy: 1663, 2038 + xy: 2220, 2549 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 unit-vela-full rotate: false - xy: 1053, 42 + xy: 1151, 2235 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 unit-zenith-full rotate: false - xy: 1279, 3069 + xy: 1047, 11 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 vault-team-crux rotate: false - xy: 1703, 2349 + xy: 1827, 2059 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 vault-team-sharded rotate: false - xy: 1703, 2251 + xy: 1925, 2157 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 +vela-icon-logic + rotate: false + xy: 1435, 1847 + size: 32, 26 + orig: 32, 26 + offset: 0, 0 + index: -1 vela-outline rotate: false - xy: 1229, 520 + xy: 1238, 2931 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-wreck0 rotate: false - xy: 1225, 236 + xy: 1238, 2647 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-wreck1 rotate: false - xy: 1225, 94 + xy: 1410, 2931 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-wreck2 rotate: false - xy: 1423, 946 + xy: 1410, 2789 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 wave rotate: false - xy: 2145, 1694 + xy: 3059, 2221 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 +zenith-icon-logic + rotate: false + xy: 2378, 1469 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 zenith-missiles-outline rotate: false - xy: 2227, 892 + xy: 2931, 1883 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 zenith-outline rotate: false - xy: 3003, 2973 + xy: 1238, 3097 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-wreck0 rotate: false - xy: 3117, 2973 + xy: 3092, 2389 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-wreck1 rotate: false - xy: 1527, 8 + xy: 3206, 2413 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-wreck2 rotate: false - xy: 1440, 2955 + xy: 3320, 2413 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 3279, 2357 + xy: 2122, 1421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal rotate: false - xy: 2315, 122 + xy: 2156, 1455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper rotate: false - xy: 2325, 54 + xy: 2190, 1489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite rotate: false - xy: 2590, 2217 + xy: 2224, 1523 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead rotate: false - xy: 2413, 1016 + xy: 2156, 1421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass rotate: false - xy: 2413, 948 + xy: 2224, 1489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 2413, 880 + xy: 2224, 1455 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 2405, 812 + xy: 2258, 1557 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 2405, 744 + xy: 2258, 1489 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand rotate: false - xy: 2415, 676 + xy: 2258, 1421 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap rotate: false - xy: 2415, 608 + xy: 2140, 1387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 2415, 540 + xy: 2208, 1387 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod rotate: false - xy: 2415, 438 + xy: 2119, 1353 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 3143, 2317 + xy: 2153, 1353 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 3177, 2301 + xy: 2153, 1319 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 3245, 2323 + xy: 2119, 1251 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid rotate: false - xy: 3245, 2289 + xy: 2187, 1285 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil rotate: false - xy: 3153, 2267 + xy: 2255, 1353 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag rotate: false - xy: 3255, 2255 + xy: 2119, 1217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water rotate: false - xy: 3323, 2255 + xy: 2255, 1217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blank rotate: false - xy: 3734, 2756 + xy: 1721, 1521 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 circle rotate: false - xy: 1153, 2422 + xy: 887, 1304 size: 201, 201 orig: 201, 201 offset: 0, 0 index: -1 +circle-small + rotate: false + xy: 1575, 3415 + size: 50, 50 + orig: 50, 50 + offset: 0, 0 + index: -1 shape-3 rotate: false - xy: 2235, 2236 + xy: 3257, 2144 size: 63, 63 orig: 63, 63 offset: 0, 0 index: -1 alpha rotate: false - xy: 781, 43 + xy: 1525, 3165 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alpha-cell rotate: false - xy: 1559, 2423 + xy: 507, 93 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 antumbra rotate: false - xy: 3645, 3339 + xy: 3879, 3339 size: 216, 240 orig: 216, 240 offset: 0, 0 index: -1 antumbra-cell rotate: false - xy: 3863, 3339 + xy: 1797, 3065 size: 216, 240 orig: 216, 240 offset: 0, 0 @@ -6810,49 +8273,49 @@ arkyid-cell index: -1 atrax rotate: false - xy: 1, 7 + xy: 1435, 1875 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 atrax-base rotate: false - xy: 1825, 2109 + xy: 1819, 1895 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 atrax-cell rotate: false - xy: 1001, 1181 + xy: 1, 7 size: 88, 64 orig: 88, 64 offset: 0, 0 index: -1 beta rotate: false - xy: 1507, 3127 + xy: 3322, 2153 size: 56, 54 orig: 56, 54 offset: 0, 0 index: -1 beta-cell rotate: false - xy: 3093, 2301 + xy: 2012, 1800 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bryde rotate: false - xy: 1663, 1266 + xy: 3945, 3881 size: 140, 140 orig: 140, 140 offset: 0, 0 index: -1 bryde-cell rotate: false - xy: 3945, 3881 + xy: 2690, 2443 size: 140, 140 orig: 140, 140 offset: 0, 0 @@ -6866,56 +8329,56 @@ corvus index: -1 corvus-base rotate: false - xy: 1663, 1912 + xy: 2382, 2615 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 corvus-cell rotate: false - xy: 887, 1247 + xy: 831, 79 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 corvus-weapon-heat rotate: false - xy: 1063, 3069 + xy: 3105, 3071 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 crawler rotate: false - xy: 3817, 2560 + xy: 2062, 1759 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-base rotate: false - xy: 3817, 2510 + xy: 2112, 1809 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-cell rotate: false - xy: 2165, 1396 + xy: 2212, 1859 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger rotate: false - xy: 2211, 1986 + xy: 2262, 1809 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 2211, 1936 + xy: 2162, 1709 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -6936,42 +8399,42 @@ eclipse-cell index: -1 flare rotate: false - xy: 2273, 156 + xy: 2462, 1855 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fortress rotate: false - xy: 1883, 26 + xy: 3536, 2445 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 2013, 2014 + xy: 1917, 97 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-cell rotate: false - xy: 1817, 1436 + xy: 3536, 2363 size: 100, 80 orig: 100, 80 offset: 0, 0 index: -1 gamma rotate: false - xy: 1747, 770 + xy: 1771, 1031 size: 68, 68 orig: 68, 68 offset: 0, 0 index: -1 gamma-cell rotate: false - xy: 1507, 3069 + xy: 1885, 1896 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -6985,91 +8448,91 @@ horizon index: -1 horizon-cell rotate: false - xy: 1641, 48 + xy: 2477, 2251 size: 72, 72 orig: 72, 72 offset: 0, 0 index: -1 mace rotate: false - xy: 2023, 2080 + xy: 2683, 1995 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-base rotate: false - xy: 2017, 1486 + xy: 2683, 1929 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mace-cell rotate: false - xy: 2017, 1420 + xy: 1989, 1954 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mega rotate: false - xy: 2975, 2855 + xy: 3194, 2229 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 mega-cell rotate: false - xy: 3077, 2871 + xy: 3296, 2209 size: 100, 100 orig: 100, 100 offset: 0, 0 index: -1 minke rotate: false - xy: 3477, 2899 + xy: 1721, 1792 size: 88, 101 orig: 88, 101 offset: 0, 0 index: -1 minke-cell rotate: false - xy: 2093, 3035 + xy: 1284, 1325 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 mono rotate: false - xy: 2311, 1986 + xy: 2749, 2041 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mono-cell rotate: false - xy: 2311, 1936 + xy: 2799, 2091 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 nova rotate: false - xy: 2300, 2243 + xy: 1943, 1896 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 nova-base rotate: false - xy: 2375, 2143 + xy: 2899, 2091 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 nova-cell rotate: false - xy: 2209, 372 + xy: 1896, 1838 size: 56, 56 orig: 56, 56 offset: 0, 0 @@ -7095,13 +8558,6 @@ omura orig: 280, 400 offset: 0, 0 index: -1 -omura-cannon-heat - rotate: false - xy: 1113, 1173 - size: 192, 277 - orig: 192, 277 - offset: 0, 0 - index: -1 omura-cell rotate: false xy: 291, 947 @@ -7111,140 +8567,140 @@ omura-cell index: -1 poly rotate: false - xy: 2532, 2243 + xy: 1954, 1780 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 poly-cell rotate: false - xy: 1565, 3107 + xy: 1954, 1722 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 power-cell rotate: false - xy: 1623, 3049 + xy: 3496, 2065 size: 56, 56 orig: 56, 56 offset: 0, 0 index: -1 pulsar rotate: false - xy: 2649, 3165 + xy: 1284, 1265 size: 68, 58 orig: 68, 58 offset: 0, 0 index: -1 pulsar-base rotate: false - xy: 2475, 2143 + xy: 2799, 1941 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulsar-cell rotate: false - xy: 507, 93 + xy: 1647, 2549 size: 58, 48 orig: 58, 48 offset: 0, 0 index: -1 quad rotate: false - xy: 831, 451 + xy: 3435, 3359 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quad-cell rotate: false - xy: 831, 229 + xy: 3657, 3359 size: 220, 220 orig: 220, 220 offset: 0, 0 index: -1 quasar rotate: false - xy: 3652, 2677 + xy: 1740, 1442 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-base rotate: false - xy: 3911, 2931 + xy: 1740, 1360 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 quasar-cell rotate: false - xy: 1225, 12 + xy: 2303, 2369 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 reign rotate: false - xy: 1385, 3325 + xy: 3537, 3075 size: 214, 140 orig: 214, 140 offset: 0, 0 index: -1 reign-base rotate: false - xy: 1663, 1786 + xy: 2536, 2615 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 reign-cell rotate: false - xy: 1663, 1660 + xy: 2690, 2585 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 risso rotate: false - xy: 2185, 2367 + xy: 1847, 868 size: 70, 78 orig: 70, 78 offset: 0, 0 index: -1 risso-cell rotate: false - xy: 2833, 2561 + xy: 2235, 2451 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scepter rotate: false - xy: 1057, 752 + xy: 1251, 844 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 scepter-base rotate: false - xy: 2223, 3035 + xy: 2844, 2503 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 vela-base rotate: false - xy: 2223, 3035 + xy: 2844, 2503 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scepter-cell rotate: false - xy: 2353, 3035 + xy: 2974, 2503 size: 128, 128 orig: 128, 128 offset: 0, 0 @@ -7265,287 +8721,287 @@ sei-cell index: -1 spiroct rotate: false - xy: 3427, 3022 + xy: 1427, 1474 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 spiroct-cell rotate: false - xy: 1801, 2372 + xy: 1445, 988 size: 94, 75 orig: 94, 75 offset: 0, 0 index: -1 toxopid rotate: false - xy: 1725, 578 + xy: 2716, 2711 size: 160, 190 orig: 160, 190 offset: 0, 0 index: -1 toxopid-cannon rotate: false - xy: 1232, 2847 + xy: 895, 1729 size: 206, 220 orig: 206, 220 offset: 0, 0 index: -1 toxopid-cell rotate: false - xy: 1663, 1408 + xy: 2536, 2489 size: 152, 124 orig: 152, 124 offset: 0, 0 index: -1 vanguard rotate: false - xy: 2227, 1092 + xy: 2949, 1933 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vanguard-cell rotate: false - xy: 2227, 1042 + xy: 2781, 1783 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vela rotate: false - xy: 1251, 804 + xy: 3537, 2933 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-cell rotate: false - xy: 1229, 662 + xy: 1353, 3073 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 vela-weapon-heat rotate: false - xy: 1225, 378 + xy: 1238, 2789 size: 170, 140 orig: 170, 140 offset: 0, 0 index: -1 artillery rotate: false - xy: 4043, 3173 + xy: 3670, 2077 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 artillery-mount rotate: false - xy: 3673, 2533 + xy: 1771, 1173 size: 70, 70 orig: 70, 70 offset: 0, 0 index: -1 beam-weapon rotate: false - xy: 3747, 2920 + xy: 4010, 2867 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 eruption rotate: false - xy: 2211, 1578 + xy: 2362, 1847 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 flakgun rotate: false - xy: 2273, 322 + xy: 2412, 1855 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 flamethrower rotate: false - xy: 2273, 264 + xy: 2362, 1789 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 heal-shotgun-weapon rotate: false - xy: 1251, 1121 + xy: 1575, 3363 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 heal-weapon rotate: false - xy: 2271, 2086 + xy: 2412, 1747 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 heal-weapon-mount rotate: false - xy: 2261, 2036 + xy: 2462, 1755 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 large-artillery rotate: false - xy: 2215, 1310 + xy: 2462, 1637 size: 48, 66 orig: 48, 66 offset: 0, 0 index: -1 large-bullet-mount rotate: false - xy: 1897, 2348 + xy: 4002, 2091 size: 70, 97 orig: 70, 97 offset: 0, 0 index: -1 large-laser-mount rotate: false - xy: 1755, 2449 - size: 96, 192 - orig: 96, 192 + xy: 1553, 595 + size: 96, 140 + orig: 96, 140 offset: 0, 0 index: -1 large-purple-mount rotate: false - xy: 2041, 2348 + xy: 1843, 1047 size: 70, 97 orig: 70, 97 offset: 0, 0 index: -1 large-weapon rotate: false - xy: 2223, 1192 + xy: 2562, 1655 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles rotate: false - xy: 2325, 2136 + xy: 2749, 2141 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 missiles-mount rotate: false - xy: 2321, 2086 + xy: 2749, 2091 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-purple-weapon rotate: false - xy: 2311, 1686 + xy: 2899, 2141 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mount-weapon rotate: false - xy: 2311, 1586 + xy: 2799, 1991 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omura-cannon rotate: false - xy: 1307, 1367 + xy: 1057, 404 size: 192, 277 orig: 192, 277 offset: 0, 0 index: -1 omura-cannon-heat rotate: false - xy: 1307, 1088 + xy: 1057, 125 size: 192, 277 orig: 192, 277 offset: 0, 0 index: -1 reign-weapon rotate: false - xy: 3567, 2656 + xy: 1811, 1755 size: 83, 138 orig: 83, 138 offset: 0, 0 index: -1 scepter-weapon rotate: false - xy: 2977, 2303 + xy: 1951, 1560 size: 56, 102 orig: 56, 102 offset: 0, 0 index: -1 sei-launcher rotate: false - xy: 3911, 2849 + xy: 2477, 2325 size: 80, 80 orig: 80, 80 offset: 0, 0 index: -1 small-basic-weapon rotate: false - xy: 2525, 2143 + xy: 2849, 1991 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-mount-weapon rotate: false - xy: 2315, 1436 + xy: 2949, 2091 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 small-weapon rotate: false - xy: 2315, 1336 + xy: 2899, 1991 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spiroct-weapon rotate: false - xy: 2365, 1428 + xy: 2949, 1983 size: 48, 56 orig: 48, 56 offset: 0, 0 index: -1 weapon rotate: false - xy: 2227, 992 + xy: 2831, 1791 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 zenith-missiles rotate: false - xy: 2227, 942 + xy: 2881, 1791 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 zenith rotate: false - xy: 1393, 3069 + xy: 1161, 11 size: 112, 112 orig: 112, 112 offset: 0, 0 index: -1 zenith-cell rotate: false - xy: 887, 1133 + xy: 1275, 20 size: 112, 112 orig: 112, 112 offset: 0, 0 @@ -11168,2261 +12624,2275 @@ filter: nearest,nearest repeat: none additive-reconstructor-icon-editor rotate: false - xy: 2297, 397 + xy: 2523, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 air-factory-icon-editor rotate: false - xy: 2395, 397 + xy: 2621, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 alloy-smelter-icon-editor rotate: false - xy: 2493, 397 + xy: 2719, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 arc-icon-editor rotate: false - xy: 4061, 461 + xy: 2771, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 armored-conveyor-icon-editor rotate: false - xy: 205, 9 + xy: 2771, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +basalt-boulder-icon-editor + rotate: false + xy: 2621, 339 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 basalt-icon-editor rotate: false - xy: 4061, 427 + xy: 2805, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-basalt1 rotate: false - xy: 4061, 427 + xy: 2805, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-icon-editor rotate: false - xy: 239, 9 + xy: 2805, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large-icon-editor rotate: false - xy: 2591, 397 + xy: 2817, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 blast-drill-icon-editor rotate: false - xy: 163, 43 + xy: 163, 35 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 blast-mixer-icon-editor rotate: false - xy: 1749, 299 + xy: 1631, 259 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 block-border-editor rotate: false - xy: 273, 9 + xy: 2839, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-forge-icon-editor rotate: false - xy: 2689, 397 + xy: 2915, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-loader-icon-editor rotate: false - xy: 2787, 397 + xy: 3013, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 block-unloader-icon-editor rotate: false - xy: 2885, 397 + xy: 3111, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 boulder-icon-editor rotate: false - xy: 1423, 185 + xy: 2555, 207 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conduit-icon-editor rotate: false - xy: 307, 9 + xy: 2839, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-icon-editor rotate: false - xy: 341, 9 + xy: 2873, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char-icon-editor rotate: false - xy: 375, 9 + xy: 2873, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char1 rotate: false - xy: 375, 9 + xy: 2873, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 clear-editor rotate: false - xy: 645, 202 + xy: 645, 194 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 cliff-icon-editor rotate: false - xy: 409, 9 + xy: 2907, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal-centrifuge-icon-editor rotate: false - xy: 1815, 299 + xy: 1631, 193 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 combustion-generator-icon-editor rotate: false - xy: 443, 9 + xy: 2907, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 command-center-icon-editor rotate: false - xy: 1881, 299 + xy: 1631, 127 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 conduit-icon-editor rotate: false - xy: 477, 9 + xy: 2941, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 container-icon-editor rotate: false - xy: 1947, 299 + xy: 1697, 259 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 conveyor-icon-editor rotate: false - xy: 511, 9 + xy: 2941, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-icon-editor rotate: false - xy: 1423, 151 + xy: 2975, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large-icon-editor rotate: false - xy: 2013, 299 + xy: 1697, 193 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 core-foundation-icon-editor rotate: false - xy: 1517, 365 + xy: 1743, 357 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 core-nucleus-icon-editor rotate: false - xy: 1, 11 + xy: 1, 3 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 core-shard-icon-editor rotate: false - xy: 2983, 397 + xy: 3209, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 craters-icon-editor rotate: false - xy: 1457, 151 + xy: 2975, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters1 rotate: false - xy: 1457, 151 + xy: 2975, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cryofluid-mixer-icon-editor rotate: false - xy: 2079, 299 + xy: 1697, 127 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cultivator-icon-editor rotate: false - xy: 2145, 299 + xy: 1763, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 cyclone-icon-editor rotate: false - xy: 3081, 397 + xy: 3307, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 dacite-boulder-icon-editor rotate: false - xy: 1473, 185 + xy: 2621, 289 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dacite-icon-editor rotate: false - xy: 1491, 151 + xy: 3009, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dacite1 rotate: false - xy: 1491, 151 + xy: 3009, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dacite-wall-icon-editor rotate: false - xy: 1337, 135 + xy: 3009, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-metal-icon-editor rotate: false - xy: 1371, 135 + xy: 3043, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-editor rotate: false - xy: 2277, 297 + xy: 3043, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-1 rotate: false - xy: 2277, 297 + xy: 3043, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-editor rotate: false - xy: 2311, 297 + xy: 3077, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-2 rotate: false - xy: 2311, 297 + xy: 3077, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-editor rotate: false - xy: 2345, 297 + xy: 3077, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-3 rotate: false - xy: 2345, 297 + xy: 3077, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-editor rotate: false - xy: 2379, 297 + xy: 3111, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-4 rotate: false - xy: 2379, 297 + xy: 3111, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-editor rotate: false - xy: 2413, 297 + xy: 3111, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-5 rotate: false - xy: 2413, 297 + xy: 3111, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-editor rotate: false - xy: 2447, 297 + xy: 3145, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dark-panel-6 rotate: false - xy: 2447, 297 + xy: 3145, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-editor rotate: false - xy: 2481, 297 + xy: 3145, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand1 rotate: false - xy: 2481, 297 + xy: 3145, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-editor rotate: false - xy: 2515, 297 + xy: 3179, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-editor rotate: false - xy: 2549, 297 + xy: 3179, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-editor rotate: false - xy: 2583, 297 + xy: 3213, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-deepwater rotate: false - xy: 2583, 297 + xy: 3213, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator-icon-editor rotate: false - xy: 3179, 397 + xy: 3405, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 diode-icon-editor rotate: false - xy: 2617, 297 + xy: 3213, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dirt-icon-editor rotate: false - xy: 2651, 297 + xy: 3247, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dirt1 rotate: false - xy: 2651, 297 + xy: 3247, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dirt-wall-icon-editor rotate: false - xy: 2685, 297 + xy: 3247, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 disassembler-icon-editor rotate: false - xy: 3277, 397 + xy: 3503, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 distributor-icon-editor rotate: false - xy: 2211, 299 + xy: 1763, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 door-icon-editor rotate: false - xy: 2719, 297 + xy: 3281, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large-icon-editor rotate: false - xy: 2297, 331 + xy: 1829, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 dune-wall-icon-editor rotate: false - xy: 2753, 297 + xy: 3281, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-editor rotate: false - xy: 2787, 297 + xy: 3315, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-basalt2 rotate: false - xy: 2821, 297 + xy: 3315, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-basalt3 rotate: false - xy: 2855, 297 + xy: 3349, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char2 rotate: false - xy: 2889, 297 + xy: 3349, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-char3 rotate: false - xy: 2923, 297 + xy: 3383, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters2 rotate: false - xy: 2957, 297 + xy: 3383, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-craters3 rotate: false - xy: 2991, 297 + xy: 3417, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dacite2 rotate: false - xy: 3025, 297 + xy: 3417, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dacite3 rotate: false - xy: 3059, 297 + xy: 3451, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water1 rotate: false - xy: 3161, 297 + xy: 3485, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water2 rotate: false - xy: 3195, 297 + xy: 3519, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-tainted-water3 rotate: false - xy: 3229, 297 + xy: 3519, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water1 rotate: false - xy: 3263, 297 + xy: 3553, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water2 rotate: false - xy: 3297, 297 + xy: 3553, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand-water3 rotate: false - xy: 3331, 297 + xy: 3587, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand2 rotate: false - xy: 3093, 297 + xy: 3451, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-darksand3 rotate: false - xy: 3127, 297 + xy: 3485, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dirt2 rotate: false - xy: 3365, 297 + xy: 3587, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-dirt3 rotate: false - xy: 3399, 297 + xy: 3621, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass1 rotate: false - xy: 3433, 297 + xy: 3621, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass-icon-editor rotate: false - xy: 3433, 297 + xy: 3621, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass2 rotate: false - xy: 3467, 297 + xy: 3655, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-grass3 rotate: false - xy: 3501, 297 + xy: 3655, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock1 rotate: false - xy: 3535, 297 + xy: 3689, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock-icon-editor rotate: false - xy: 3535, 297 + xy: 3689, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock2 rotate: false - xy: 3569, 297 + xy: 3689, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-hotrock3 rotate: false - xy: 3603, 297 + xy: 3723, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow1 rotate: false - xy: 3739, 297 + xy: 3791, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow-icon-editor rotate: false - xy: 3739, 297 + xy: 3791, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow2 rotate: false - xy: 3773, 297 + xy: 3791, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice-snow3 rotate: false - xy: 3807, 297 + xy: 3825, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice1 rotate: false - xy: 3637, 297 + xy: 3723, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-icon-editor rotate: false - xy: 3637, 297 + xy: 3723, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice2 rotate: false - xy: 3671, 297 + xy: 3757, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ice3 rotate: false - xy: 3705, 297 + xy: 3757, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock1 rotate: false - xy: 3841, 297 + xy: 3825, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock-icon-editor rotate: false - xy: 3841, 297 + xy: 3825, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock2 rotate: false - xy: 3875, 297 + xy: 3859, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-magmarock3 rotate: false - xy: 3909, 297 + xy: 3859, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor rotate: false - xy: 3943, 297 + xy: 3893, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-icon-editor rotate: false - xy: 3943, 297 + xy: 3893, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-2 rotate: false - xy: 3977, 297 + xy: 3893, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2-icon-editor rotate: false - xy: 3977, 297 + xy: 3893, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-3 rotate: false - xy: 4011, 297 + xy: 3927, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3-icon-editor rotate: false - xy: 4011, 297 + xy: 3927, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-5 rotate: false - xy: 4045, 297 + xy: 3927, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5-icon-editor rotate: false - xy: 4045, 297 + xy: 3927, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged1 rotate: false - xy: 1339, 101 + xy: 3961, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged-icon-editor rotate: false - xy: 1339, 101 + xy: 3961, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged2 rotate: false - xy: 1339, 67 + xy: 3961, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-metal-floor-damaged3 rotate: false - xy: 1373, 101 + xy: 3995, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss1 rotate: false - xy: 1373, 67 + xy: 3995, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss-icon-editor rotate: false - xy: 1373, 67 + xy: 3995, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss2 rotate: false - xy: 1339, 33 + xy: 4029, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-moss3 rotate: false - xy: 1373, 33 + xy: 4063, 355 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-mud1 rotate: false - xy: 915, 39 + xy: 4029, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mud-icon-editor rotate: false - xy: 915, 39 + xy: 4029, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-mud2 rotate: false - xy: 949, 39 + xy: 4063, 321 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-mud3 rotate: false - xy: 983, 39 + xy: 163, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal1 rotate: false - xy: 1017, 39 + xy: 197, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal2 rotate: false - xy: 1051, 39 + xy: 231, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-coal3 rotate: false - xy: 1085, 39 + xy: 265, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper1 rotate: false - xy: 1753, 265 + xy: 299, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper2 rotate: false - xy: 1753, 231 + xy: 333, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-copper3 rotate: false - xy: 1787, 265 + xy: 367, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead1 rotate: false - xy: 1787, 231 + xy: 401, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead2 rotate: false - xy: 1821, 265 + xy: 435, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-lead3 rotate: false - xy: 1821, 231 + xy: 469, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap1 rotate: false - xy: 1855, 265 + xy: 503, 1 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap2 rotate: false - xy: 1855, 231 + xy: 553, 33 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-scrap3 rotate: false - xy: 1889, 265 + xy: 587, 33 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium1 rotate: false - xy: 1889, 231 + xy: 651, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium2 rotate: false - xy: 1923, 265 + xy: 685, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-thorium3 rotate: false - xy: 1923, 231 + xy: 719, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium1 rotate: false - xy: 1957, 265 + xy: 753, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium2 rotate: false - xy: 1957, 231 + xy: 787, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-ore-titanium3 rotate: false - xy: 1991, 265 + xy: 821, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles1 rotate: false - xy: 1991, 231 + xy: 855, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles2 rotate: false - xy: 2025, 265 + xy: 889, 65 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-pebbles3 rotate: false - xy: 2025, 231 + xy: 1435, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-salt rotate: false - xy: 2059, 265 + xy: 1469, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-editor rotate: false - xy: 2059, 265 + xy: 1469, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water1 rotate: false - xy: 2127, 265 + xy: 1763, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water2 rotate: false - xy: 2127, 231 + xy: 1797, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand-water3 rotate: false - xy: 2161, 265 + xy: 1831, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand1 rotate: false - xy: 2059, 231 + xy: 1503, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-editor rotate: false - xy: 2059, 231 + xy: 1503, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand2 rotate: false - xy: 2093, 265 + xy: 1537, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-sand3 rotate: false - xy: 2093, 231 + xy: 1571, 63 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale1 rotate: false - xy: 2161, 231 + xy: 1865, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-editor rotate: false - xy: 2161, 231 + xy: 1865, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale2 rotate: false - xy: 2195, 265 + xy: 1899, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-shale3 rotate: false - xy: 2195, 231 + xy: 1933, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-slag rotate: false - xy: 2229, 265 + xy: 1967, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 slag-icon-editor rotate: false - xy: 2229, 265 + xy: 1967, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow1 rotate: false - xy: 2229, 231 + xy: 2001, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow2 rotate: false - xy: 2263, 263 + xy: 2035, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-snow3 rotate: false - xy: 2297, 263 + xy: 2069, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-space rotate: false - xy: 2331, 263 + xy: 2103, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 space-icon-editor rotate: false - xy: 2331, 263 + xy: 2103, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spawn rotate: false - xy: 2365, 263 + xy: 2137, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss1 rotate: false - xy: 2399, 263 + xy: 2171, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-editor rotate: false - xy: 2399, 263 + xy: 2171, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss2 rotate: false - xy: 2433, 263 + xy: 2205, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-spore-moss3 rotate: false - xy: 2467, 263 + xy: 2239, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone1 rotate: false - xy: 2501, 263 + xy: 2273, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-editor rotate: false - xy: 2501, 263 + xy: 2273, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone2 rotate: false - xy: 2535, 263 + xy: 2307, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-stone3 rotate: false - xy: 2569, 263 + xy: 2341, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tainted-water rotate: false - xy: 2603, 263 + xy: 2375, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-editor rotate: false - xy: 2603, 263 + xy: 2375, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tar rotate: false - xy: 2637, 263 + xy: 2409, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-editor rotate: false - xy: 2637, 263 + xy: 2409, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils1 rotate: false - xy: 2671, 263 + xy: 2443, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils2 rotate: false - xy: 2705, 263 + xy: 2477, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-tendrils3 rotate: false - xy: 2739, 263 + xy: 2511, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 editor-water rotate: false - xy: 2773, 263 + xy: 2621, 255 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-editor rotate: false - xy: 2773, 263 + xy: 2621, 255 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 exponential-reconstructor-icon-editor rotate: false - xy: 935, 269 + xy: 935, 261 size: 224, 224 orig: 224, 224 offset: 0, 0 index: -1 force-projector-icon-editor rotate: false - xy: 3375, 397 + xy: 3601, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 foreshadow-icon-editor rotate: false - xy: 293, 43 + xy: 293, 35 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 fuse-icon-editor rotate: false - xy: 3473, 397 + xy: 3699, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 graphite-press-icon-editor rotate: false - xy: 2363, 331 + xy: 1763, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ground-factory-icon-editor rotate: false - xy: 3571, 397 + xy: 3797, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 hail-icon-editor rotate: false - xy: 2807, 263 + xy: 2655, 255 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hyper-processor-icon-editor rotate: false - xy: 3669, 397 + xy: 3895, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 ice-wall-icon-editor rotate: false - xy: 2841, 263 + xy: 2689, 255 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 illuminator-icon-editor rotate: false - xy: 2875, 263 + xy: 2723, 255 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 impact-reactor-icon-editor rotate: false - xy: 1647, 365 + xy: 1873, 357 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 incinerator-icon-editor rotate: false - xy: 2909, 263 + xy: 2771, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 +interplanetary-accelerator-icon-editor + rotate: false + xy: 1161, 261 + size: 224, 224 + orig: 224, 224 + offset: 0, 0 + index: -1 inverted-sorter-icon-editor rotate: false - xy: 2943, 263 + xy: 2805, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-editor rotate: false - xy: 2977, 263 + xy: 2839, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-editor rotate: false - xy: 3011, 263 + xy: 2873, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction-icon-editor rotate: false - xy: 3045, 263 + xy: 2907, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln-icon-editor rotate: false - xy: 2429, 331 + xy: 1829, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-editor rotate: false - xy: 2495, 331 + xy: 1895, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 large-logic-display-icon-editor rotate: false - xy: 1161, 301 + xy: 1387, 293 size: 192, 192 orig: 192, 192 offset: 0, 0 index: -1 laser-drill-icon-editor rotate: false - xy: 3767, 397 + xy: 3993, 389 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-icon-editor rotate: false - xy: 3865, 397 + xy: 553, 67 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 launch-pad-large-icon-editor rotate: false - xy: 423, 43 + xy: 423, 35 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 liquid-junction-icon-editor rotate: false - xy: 3079, 263 + xy: 2941, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-editor rotate: false - xy: 3113, 263 + xy: 2975, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-editor rotate: false - xy: 3147, 263 + xy: 3009, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-icon-editor rotate: false - xy: 3963, 397 + xy: 651, 99 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 liquid-void-icon-editor rotate: false - xy: 3181, 263 + xy: 3043, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 logic-display-icon-editor rotate: false - xy: 553, 75 + xy: 749, 99 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 logic-processor-icon-editor rotate: false - xy: 2561, 331 + xy: 1829, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mass-driver-icon-editor rotate: false - xy: 651, 107 + xy: 847, 99 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 mechanical-drill-icon-editor rotate: false - xy: 2627, 331 + xy: 1895, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-pump-icon-editor rotate: false - xy: 3215, 263 + xy: 3077, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-icon-editor rotate: false - xy: 1777, 365 + xy: 2003, 357 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 melter-icon-editor rotate: false - xy: 3249, 263 + xy: 3111, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 memory-bank-icon-editor rotate: false - xy: 2693, 331 + xy: 1961, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 memory-cell-icon-editor rotate: false - xy: 3283, 263 + xy: 3145, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mend-projector-icon-editor rotate: false - xy: 2759, 331 + xy: 1895, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mender-icon-editor rotate: false - xy: 3317, 263 + xy: 3179, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 message-icon-editor rotate: false - xy: 3351, 263 + xy: 3213, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 micro-processor-icon-editor rotate: false - xy: 3385, 263 + xy: 3247, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press-icon-editor rotate: false - xy: 749, 107 + xy: 945, 163 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 multiplicative-reconstructor-icon-editor rotate: false - xy: 1355, 333 + xy: 1581, 325 size: 160, 160 orig: 160, 160 offset: 0, 0 index: -1 naval-factory-icon-editor rotate: false - xy: 847, 107 + xy: 1043, 163 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 oil-extractor-icon-editor rotate: false - xy: 945, 171 + xy: 1141, 163 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-dome-icon-editor rotate: false - xy: 1043, 171 + xy: 1239, 163 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 overdrive-projector-icon-editor rotate: false - xy: 2825, 331 + xy: 1961, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overflow-gate-icon-editor rotate: false - xy: 3419, 263 + xy: 3281, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 parallax-icon-editor rotate: false - xy: 2891, 331 + xy: 2027, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 payload-conveyor-icon-editor rotate: false - xy: 945, 73 + xy: 945, 65 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 payload-router-icon-editor rotate: false - xy: 1043, 73 + xy: 1043, 65 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 pebbles-icon-editor rotate: false - xy: 3453, 263 + xy: 3315, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-icon-editor rotate: false - xy: 3487, 263 + xy: 3349, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-editor rotate: false - xy: 3521, 263 + xy: 3383, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-editor rotate: false - xy: 3555, 263 + xy: 3417, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large-icon-editor rotate: false - xy: 2957, 331 + xy: 1961, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-editor rotate: false - xy: 3023, 331 + xy: 2027, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pine-icon-editor rotate: false - xy: 1553, 217 + xy: 2671, 339 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 plastanium-compressor-icon-editor rotate: false - xy: 3089, 331 + xy: 2093, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-conveyor-icon-editor rotate: false - xy: 3589, 263 + xy: 3451, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-icon-editor rotate: false - xy: 3623, 263 + xy: 3485, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-wall-large-icon-editor rotate: false - xy: 3155, 331 + xy: 2027, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plated-conduit-icon-editor rotate: false - xy: 3657, 263 + xy: 3519, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-editor rotate: false - xy: 3221, 331 + xy: 2093, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-node-icon-editor rotate: false - xy: 3691, 263 + xy: 3553, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-editor rotate: false - xy: 3287, 331 + xy: 2159, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-source-icon-editor rotate: false - xy: 3725, 263 + xy: 3587, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-editor rotate: false - xy: 3759, 263 + xy: 3621, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-editor rotate: false - xy: 3793, 263 + xy: 3655, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-editor rotate: false - xy: 3827, 263 + xy: 3689, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-editor rotate: false - xy: 3353, 331 + xy: 2093, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 repair-point-icon-editor rotate: false - xy: 3861, 263 + xy: 3723, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 resupply-point-icon-editor rotate: false - xy: 3419, 331 + xy: 2159, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 ripple-icon-editor rotate: false - xy: 1161, 203 + xy: 1141, 65 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 rotary-pump-icon-editor rotate: false - xy: 3485, 331 + xy: 2225, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 router-icon-editor rotate: false - xy: 3895, 263 + xy: 3757, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-editor rotate: false - xy: 3551, 331 + xy: 2159, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salt-wall-icon-editor rotate: false - xy: 3929, 263 + xy: 3791, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-editor rotate: false - xy: 3617, 331 + xy: 2225, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 sand-boulder-icon-editor rotate: false - xy: 3963, 263 + xy: 3825, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-wall-icon-editor rotate: false - xy: 3997, 263 + xy: 3859, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-editor rotate: false - xy: 4031, 263 + xy: 3893, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-editor rotate: false - xy: 3683, 331 + xy: 2291, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scorch-icon-editor rotate: false - xy: 2263, 229 + xy: 3927, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-editor rotate: false - xy: 1907, 365 + xy: 2133, 357 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 scrap-wall-huge-icon-editor rotate: false - xy: 1259, 203 + xy: 1239, 65 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 scrap-wall-icon-editor rotate: false - xy: 2297, 229 + xy: 3961, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-editor rotate: false - xy: 3749, 331 + xy: 2225, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 segment-icon-editor rotate: false - xy: 3815, 331 + xy: 2291, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-icon-editor rotate: false - xy: 3881, 331 + xy: 2357, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 shale-boulder-icon-editor rotate: false - xy: 2331, 229 + xy: 3995, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-wall-icon-editor rotate: false - xy: 2365, 229 + xy: 4029, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-editor rotate: false - xy: 2399, 229 + xy: 4063, 287 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-editor rotate: false - xy: 2433, 229 + xy: 1631, 93 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-crucible-icon-editor rotate: false - xy: 1141, 105 + xy: 1337, 163 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 silicon-smelter-icon-editor rotate: false - xy: 3947, 331 + xy: 2291, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 snow-boulder-icon-editor rotate: false - xy: 1603, 217 + xy: 2671, 289 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-icon-editor rotate: false - xy: 2467, 229 + xy: 1665, 93 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-pine-icon-editor rotate: false - xy: 1653, 217 + xy: 2721, 339 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-wall-icon-editor rotate: false - xy: 2501, 229 + xy: 1699, 93 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-editor rotate: false - xy: 2535, 229 + xy: 2605, 221 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-editor rotate: false - xy: 1239, 105 + xy: 1337, 65 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 sorter-icon-editor rotate: false - xy: 2569, 229 + xy: 2639, 221 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-editor rotate: false - xy: 2603, 229 + xy: 2673, 221 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spectre-icon-editor rotate: false - xy: 2037, 365 + xy: 2263, 357 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 spore-cluster-icon-editor rotate: false - xy: 163, 1 + xy: 2555, 165 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 spore-pine-icon-editor rotate: false - xy: 1703, 217 + xy: 2721, 289 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-press-icon-editor rotate: false - xy: 4013, 331 + xy: 2357, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-wall-icon-editor rotate: false - xy: 2637, 229 + xy: 2707, 221 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 steam-generator-icon-editor rotate: false - xy: 553, 9 + xy: 2423, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 stone-wall-icon-editor rotate: false - xy: 2671, 229 + xy: 2757, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-editor rotate: false - xy: 651, 41 + xy: 2357, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-wall-icon-editor rotate: false - xy: 2705, 229 + xy: 2791, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-editor rotate: false - xy: 717, 41 + xy: 2423, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-editor rotate: false - xy: 783, 41 + xy: 2423, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 switch-icon-editor rotate: false - xy: 2739, 229 + xy: 2825, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tendrils-icon-editor rotate: false - xy: 2773, 229 + xy: 2859, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tetrative-reconstructor-icon-editor rotate: false - xy: 645, 205 + xy: 645, 197 size: 288, 288 orig: 288, 288 offset: 0, 0 index: -1 thermal-generator-icon-editor rotate: false - xy: 849, 41 + xy: 2489, 291 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-pump-icon-editor rotate: false - xy: 1357, 235 + xy: 1435, 195 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-reactor-icon-editor rotate: false - xy: 1455, 235 + xy: 1435, 97 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 thorium-wall-icon-editor rotate: false - xy: 2807, 229 + xy: 2893, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-editor rotate: false - xy: 1141, 39 + xy: 2489, 225 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thruster-icon-editor rotate: false - xy: 2167, 365 + xy: 2393, 357 size: 128, 128 orig: 128, 128 offset: 0, 0 index: -1 titanium-conveyor-icon-editor rotate: false - xy: 2841, 229 + xy: 2927, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-editor rotate: false - xy: 2875, 229 + xy: 2961, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-editor rotate: false - xy: 1207, 39 + xy: 2489, 159 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 tsunami-icon-editor rotate: false - xy: 1553, 267 + xy: 1533, 195 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 underflow-gate-icon-editor rotate: false - xy: 2909, 229 + xy: 2995, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-editor rotate: false - xy: 2943, 229 + xy: 3029, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-editor rotate: false - xy: 1651, 267 + xy: 1533, 97 size: 96, 96 orig: 96, 96 offset: 0, 0 index: -1 water-extractor-icon-editor rotate: false - xy: 1273, 39 + xy: 2555, 323 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 wave-icon-editor rotate: false - xy: 1357, 169 + xy: 2555, 257 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 white-tree-dead-icon-editor rotate: false - xy: 1, 173 + xy: 1, 165 size: 320, 320 orig: 320, 320 offset: 0, 0 index: -1 white-tree-icon-editor rotate: false - xy: 323, 173 + xy: 323, 165 size: 320, 320 orig: 320, 320 offset: 0, 0 @@ -13442,7 +14912,7 @@ alpha-bg index: -1 bar rotate: false - xy: 2343, 150 + xy: 2975, 91 size: 27, 36 split: 9, 9, 9, 9 orig: 27, 36 @@ -13450,7 +14920,7 @@ bar index: -1 bar-top rotate: false - xy: 3550, 139 + xy: 3005, 167 size: 27, 36 split: 9, 10, 9, 10 orig: 27, 36 @@ -13458,28 +14928,28 @@ bar-top index: -1 block-additive-reconstructor-large rotate: false - xy: 1004, 371 + xy: 1059, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-additive-reconstructor-medium rotate: false - xy: 3587, 253 + xy: 3125, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-additive-reconstructor-small rotate: false - xy: 1605, 219 + xy: 1101, 162 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-additive-reconstructor-tiny rotate: false - xy: 881, 1 + xy: 3687, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13493,28 +14963,28 @@ block-additive-reconstructor-xlarge index: -1 block-air-factory-large rotate: false - xy: 1046, 371 + xy: 1101, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-air-factory-medium rotate: false - xy: 3621, 253 + xy: 3159, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-air-factory-small rotate: false - xy: 1731, 96 + xy: 2975, 65 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-air-factory-tiny rotate: false - xy: 309, 160 + xy: 3705, 1 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13528,28 +14998,28 @@ block-air-factory-xlarge index: -1 block-alloy-smelter-large rotate: false - xy: 1004, 329 + xy: 1143, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-alloy-smelter-medium rotate: false - xy: 3655, 253 + xy: 3193, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-alloy-smelter-small rotate: false - xy: 1731, 70 + xy: 1101, 136 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-alloy-smelter-tiny rotate: false - xy: 2169, 29 + xy: 3789, 395 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13563,28 +15033,28 @@ block-alloy-smelter-xlarge index: -1 block-arc-large rotate: false - xy: 1088, 371 + xy: 1185, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-arc-medium rotate: false - xy: 901, 155 + xy: 3227, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-arc-small rotate: false - xy: 1731, 44 + xy: 1127, 143 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-arc-tiny rotate: false - xy: 2187, 29 + xy: 3862, 357 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13598,28 +15068,28 @@ block-arc-xlarge index: -1 block-armored-conveyor-large rotate: false - xy: 1046, 329 + xy: 1227, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-armored-conveyor-medium rotate: false - xy: 935, 153 + xy: 3261, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-armored-conveyor-small rotate: false - xy: 3810, 245 + xy: 1101, 110 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-armored-conveyor-tiny rotate: false - xy: 2205, 29 + xy: 3935, 319 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -13631,4314 +15101,4384 @@ block-armored-conveyor-xlarge orig: 48, 48 offset: 0, 0 index: -1 -block-basalt-large +block-basalt-boulder-large rotate: false - xy: 1130, 371 + xy: 1269, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-basalt-medium +block-basalt-boulder-medium rotate: false - xy: 969, 153 + xy: 3295, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-basalt-small +block-basalt-boulder-small rotate: false - xy: 2372, 162 + xy: 1127, 117 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-basalt-tiny +block-basalt-boulder-tiny rotate: false - xy: 2223, 29 + xy: 309, 160 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-basalt-xlarge +block-basalt-boulder-xlarge rotate: false xy: 259, 257 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-battery-large +block-basalt-large rotate: false - xy: 1088, 329 + xy: 1311, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-battery-large-large +block-basalt-medium rotate: false - xy: 1172, 371 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-battery-large-medium - rotate: false - xy: 2639, 219 + xy: 3329, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-battery-large-small +block-basalt-small rotate: false - xy: 2372, 136 + xy: 1153, 143 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-battery-large-tiny +block-basalt-tiny rotate: false - xy: 2241, 29 + xy: 3789, 377 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-battery-large-xlarge +block-basalt-xlarge rotate: false xy: 181, 46 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-battery-medium +block-battery-large rotate: false - xy: 2673, 211 + xy: 1353, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-battery-large-large + rotate: false + xy: 1395, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-battery-large-medium + rotate: false + xy: 3363, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-battery-small +block-battery-large-small rotate: false - xy: 2398, 151 + xy: 1101, 84 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-battery-tiny +block-battery-large-tiny rotate: false - xy: 2259, 29 + xy: 3935, 301 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-battery-xlarge +block-battery-large-xlarge rotate: false xy: 259, 207 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-blast-drill-large +block-battery-medium rotate: false - xy: 1130, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-blast-drill-medium - rotate: false - xy: 2707, 211 + xy: 3397, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-blast-drill-small +block-battery-small rotate: false - xy: 2424, 151 + xy: 1153, 117 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-blast-drill-tiny +block-battery-tiny rotate: false - xy: 2277, 29 + xy: 3935, 283 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-blast-drill-xlarge +block-battery-xlarge rotate: false xy: 259, 157 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-blast-mixer-large +block-blast-drill-large rotate: false - xy: 1214, 371 + xy: 1437, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-blast-mixer-medium +block-blast-drill-medium rotate: false - xy: 2741, 224 + xy: 3431, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-blast-mixer-small +block-blast-drill-small rotate: false - xy: 2398, 125 + xy: 1127, 91 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-blast-mixer-tiny +block-blast-drill-tiny rotate: false - xy: 257, 2 + xy: 3935, 265 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-blast-mixer-xlarge +block-blast-drill-xlarge rotate: false xy: 857, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-block-forge-large +block-blast-mixer-large rotate: false - xy: 1172, 329 + xy: 1479, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-block-forge-medium +block-blast-mixer-medium rotate: false - xy: 2775, 224 + xy: 3465, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-block-forge-small +block-blast-mixer-small rotate: false - xy: 2424, 125 + xy: 1179, 143 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-block-forge-tiny +block-blast-mixer-tiny rotate: false - xy: 2384, 81 + xy: 3935, 247 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-block-forge-xlarge +block-blast-mixer-xlarge rotate: false xy: 907, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-block-loader-large +block-block-forge-large rotate: false - xy: 1256, 371 + xy: 1521, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-block-loader-medium +block-block-forge-medium rotate: false - xy: 2809, 224 + xy: 3499, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-block-loader-small +block-block-forge-small rotate: false - xy: 3825, 219 + xy: 1101, 58 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-block-loader-tiny +block-block-forge-tiny rotate: false - xy: 2402, 81 + xy: 3935, 229 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-block-loader-xlarge +block-block-forge-xlarge rotate: false xy: 957, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-block-unloader-large +block-block-loader-large rotate: false - xy: 1214, 329 + xy: 1563, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-block-unloader-medium +block-block-loader-medium rotate: false - xy: 2843, 224 + xy: 3533, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-block-unloader-small +block-block-loader-small rotate: false - xy: 3836, 245 + xy: 1179, 117 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-block-unloader-tiny +block-block-loader-tiny rotate: false - xy: 2420, 81 + xy: 3935, 211 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-block-unloader-xlarge +block-block-loader-xlarge rotate: false xy: 1007, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-boulder-large +block-block-unloader-large rotate: false - xy: 1298, 371 + xy: 1605, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-boulder-medium +block-block-unloader-medium rotate: false - xy: 2877, 224 + xy: 3567, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-boulder-small +block-block-unloader-small rotate: false - xy: 3825, 193 + xy: 1153, 91 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-boulder-tiny +block-block-unloader-tiny rotate: false - xy: 2438, 81 + xy: 3935, 193 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-boulder-xlarge +block-block-unloader-xlarge rotate: false xy: 1057, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-bridge-conduit-large +block-boulder-large rotate: false - xy: 1256, 329 + xy: 1647, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-bridge-conduit-medium +block-boulder-medium rotate: false - xy: 2911, 224 + xy: 3601, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-bridge-conduit-small +block-boulder-small rotate: false - xy: 3824, 167 + xy: 1127, 65 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-bridge-conduit-tiny +block-boulder-tiny rotate: false - xy: 2381, 63 + xy: 1863, 165 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-bridge-conduit-xlarge +block-boulder-xlarge rotate: false xy: 1107, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-bridge-conveyor-large +block-bridge-conduit-large rotate: false - xy: 1340, 371 + xy: 1689, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-bridge-conveyor-medium +block-bridge-conduit-medium rotate: false - xy: 2945, 224 + xy: 3635, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-bridge-conveyor-small +block-bridge-conduit-small rotate: false - xy: 3851, 219 + xy: 1101, 32 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-bridge-conveyor-tiny +block-bridge-conduit-tiny rotate: false - xy: 2381, 45 + xy: 1863, 147 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-bridge-conveyor-xlarge +block-bridge-conduit-xlarge rotate: false xy: 1157, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-char-large +block-bridge-conveyor-large rotate: false - xy: 1298, 329 + xy: 1731, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-char-medium +block-bridge-conveyor-medium rotate: false - xy: 2979, 224 + xy: 3669, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-char-small +block-bridge-conveyor-small rotate: false - xy: 3851, 193 + xy: 1179, 91 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-char-tiny +block-bridge-conveyor-tiny rotate: false - xy: 2399, 63 + xy: 1863, 129 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-char-xlarge +block-bridge-conveyor-xlarge rotate: false xy: 1207, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cliff-large +block-char-large rotate: false - xy: 1382, 371 + xy: 1773, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cliff-medium +block-char-medium rotate: false - xy: 3013, 224 + xy: 3703, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cliff-small +block-char-small rotate: false - xy: 3850, 167 + xy: 1153, 65 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cliff-tiny +block-char-tiny rotate: false - xy: 2381, 27 + xy: 3953, 312 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cliff-xlarge +block-char-xlarge rotate: false xy: 1257, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-coal-centrifuge-large +block-cliff-large rotate: false - xy: 1340, 329 + xy: 1815, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-coal-centrifuge-medium +block-cliff-medium rotate: false - xy: 3047, 224 + xy: 3737, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-coal-centrifuge-small +block-cliff-small rotate: false - xy: 3862, 245 + xy: 1127, 39 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-coal-centrifuge-tiny +block-cliff-tiny rotate: false - xy: 2399, 45 + xy: 3971, 312 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-coal-centrifuge-xlarge +block-cliff-xlarge rotate: false xy: 1307, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-combustion-generator-large +block-coal-centrifuge-large rotate: false - xy: 1424, 371 + xy: 1857, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-combustion-generator-medium +block-coal-centrifuge-medium rotate: false - xy: 3081, 224 + xy: 1463, 157 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-combustion-generator-small +block-coal-centrifuge-small rotate: false - xy: 3877, 219 + xy: 1179, 65 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-combustion-generator-tiny +block-coal-centrifuge-tiny rotate: false - xy: 2417, 63 + xy: 3953, 294 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-combustion-generator-xlarge +block-coal-centrifuge-xlarge rotate: false xy: 1357, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-command-center-large +block-combustion-generator-large rotate: false - xy: 1382, 329 + xy: 1899, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-command-center-medium +block-combustion-generator-medium rotate: false - xy: 3115, 224 + xy: 2101, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-command-center-small +block-combustion-generator-small rotate: false - xy: 3877, 193 + xy: 1153, 39 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-command-center-tiny +block-combustion-generator-tiny rotate: false - xy: 2381, 9 + xy: 3989, 312 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-command-center-xlarge +block-combustion-generator-xlarge rotate: false xy: 1407, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-conduit-large +block-command-center-large rotate: false - xy: 1466, 371 + xy: 1941, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-conduit-medium +block-command-center-medium rotate: false - xy: 3149, 224 + xy: 2135, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-conduit-small +block-command-center-small rotate: false - xy: 3876, 167 + xy: 1179, 39 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-conduit-tiny +block-command-center-tiny rotate: false - xy: 2399, 27 + xy: 3953, 276 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-conduit-xlarge +block-command-center-xlarge rotate: false xy: 1457, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-container-large +block-conduit-large rotate: false - xy: 1424, 329 + xy: 1983, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-container-medium +block-conduit-medium rotate: false - xy: 3183, 224 + xy: 2169, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-container-small +block-conduit-small rotate: false - xy: 3888, 245 + xy: 1205, 143 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-container-tiny +block-conduit-tiny rotate: false - xy: 2417, 45 + xy: 3971, 294 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-container-xlarge +block-conduit-xlarge rotate: false xy: 1507, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-conveyor-large +block-container-large rotate: false - xy: 1508, 371 + xy: 2025, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-conveyor-medium +block-container-medium rotate: false - xy: 3217, 224 + xy: 2203, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-conveyor-small +block-container-small rotate: false - xy: 3903, 219 + xy: 1205, 117 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-conveyor-tiny +block-container-tiny rotate: false - xy: 2435, 63 + xy: 3953, 258 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-conveyor-xlarge +block-container-xlarge rotate: false xy: 1557, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-copper-wall-large +block-conveyor-large rotate: false - xy: 1466, 329 + xy: 2067, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-copper-wall-large-large +block-conveyor-medium rotate: false - xy: 1550, 371 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-copper-wall-large-medium - rotate: false - xy: 3251, 224 + xy: 2237, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-copper-wall-large-small +block-conveyor-small rotate: false - xy: 3903, 193 + xy: 1205, 91 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-copper-wall-large-tiny +block-conveyor-tiny rotate: false - xy: 2399, 9 + xy: 3971, 276 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-copper-wall-large-xlarge +block-conveyor-xlarge rotate: false xy: 1607, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-copper-wall-medium +block-copper-wall-large rotate: false - xy: 3285, 224 + xy: 2109, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-copper-wall-large-large + rotate: false + xy: 2151, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-copper-wall-large-medium + rotate: false + xy: 2271, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-copper-wall-small +block-copper-wall-large-small rotate: false - xy: 3902, 167 + xy: 1205, 65 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-copper-wall-tiny +block-copper-wall-large-tiny rotate: false - xy: 2417, 27 + xy: 3989, 294 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-copper-wall-xlarge +block-copper-wall-large-xlarge rotate: false xy: 1657, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-core-foundation-large +block-copper-wall-medium rotate: false - xy: 1508, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-core-foundation-medium - rotate: false - xy: 3319, 224 + xy: 2305, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-core-foundation-small +block-copper-wall-small rotate: false - xy: 3914, 245 + xy: 1205, 39 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-core-foundation-tiny +block-copper-wall-tiny rotate: false - xy: 2435, 45 + xy: 3953, 240 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-core-foundation-xlarge +block-copper-wall-xlarge rotate: false xy: 1707, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-core-nucleus-large +block-core-foundation-large rotate: false - xy: 1592, 371 + xy: 2193, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-core-nucleus-medium +block-core-foundation-medium rotate: false - xy: 3353, 224 + xy: 2339, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-core-nucleus-small +block-core-foundation-small rotate: false - xy: 3929, 219 + xy: 3784, 287 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-core-nucleus-tiny +block-core-foundation-tiny rotate: false - xy: 2417, 9 + xy: 3971, 258 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-core-nucleus-xlarge +block-core-foundation-xlarge rotate: false xy: 1757, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-core-shard-large +block-core-nucleus-large rotate: false - xy: 1550, 329 + xy: 2235, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-core-shard-medium +block-core-nucleus-medium rotate: false - xy: 3387, 224 + xy: 2373, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-core-shard-small +block-core-nucleus-small rotate: false - xy: 3929, 193 + xy: 1101, 6 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-core-shard-tiny +block-core-nucleus-tiny rotate: false - xy: 2435, 27 + xy: 3989, 276 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-core-shard-xlarge +block-core-nucleus-xlarge rotate: false xy: 1807, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-craters-large +block-core-shard-large rotate: false - xy: 1634, 371 + xy: 2277, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-craters-medium +block-core-shard-medium rotate: false - xy: 1799, 211 + xy: 2407, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-craters-small +block-core-shard-small rotate: false - xy: 3928, 167 + xy: 1127, 13 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-craters-tiny +block-core-shard-tiny rotate: false - xy: 2435, 9 + xy: 3953, 222 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-craters-xlarge +block-core-shard-xlarge rotate: false xy: 1857, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cryofluid-mixer-large +block-craters-large rotate: false - xy: 1592, 329 + xy: 2319, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cryofluid-mixer-medium +block-craters-medium rotate: false - xy: 1833, 211 + xy: 2441, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cryofluid-mixer-small +block-craters-small rotate: false - xy: 3940, 245 + xy: 1153, 13 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cryofluid-mixer-tiny +block-craters-tiny rotate: false - xy: 2462, 107 + xy: 3971, 240 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cryofluid-mixer-xlarge +block-craters-xlarge rotate: false xy: 1907, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cultivator-large +block-cryofluid-mixer-large rotate: false - xy: 1676, 371 + xy: 2361, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cultivator-medium +block-cryofluid-mixer-medium rotate: false - xy: 1867, 211 + xy: 2475, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cultivator-small +block-cryofluid-mixer-small rotate: false - xy: 3955, 219 + xy: 1179, 13 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cultivator-tiny +block-cryofluid-mixer-tiny rotate: false - xy: 1809, 11 + xy: 3989, 258 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cultivator-xlarge +block-cryofluid-mixer-xlarge rotate: false xy: 1957, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-cyclone-large +block-cultivator-large rotate: false - xy: 1634, 329 + xy: 2403, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-cyclone-medium +block-cultivator-medium rotate: false - xy: 1901, 211 + xy: 2509, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-cyclone-small +block-cultivator-small rotate: false - xy: 3955, 193 + xy: 1205, 13 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-cyclone-tiny +block-cultivator-tiny rotate: false - xy: 1827, 11 + xy: 3953, 204 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-cyclone-xlarge +block-cultivator-xlarge rotate: false xy: 2007, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dacite-boulder-large +block-cyclone-large rotate: false - xy: 1718, 371 + xy: 2445, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dacite-boulder-medium +block-cyclone-medium rotate: false - xy: 1935, 211 + xy: 2543, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dacite-boulder-small +block-cyclone-small rotate: false - xy: 3954, 167 + xy: 3736, 160 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dacite-boulder-tiny +block-cyclone-tiny rotate: false - xy: 1845, 11 + xy: 3971, 222 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dacite-boulder-xlarge +block-cyclone-xlarge rotate: false xy: 2057, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dacite-large +block-dacite-boulder-large rotate: false - xy: 1676, 329 + xy: 2487, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dacite-medium +block-dacite-boulder-medium rotate: false - xy: 1969, 219 + xy: 2577, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dacite-small +block-dacite-boulder-small rotate: false - xy: 3966, 245 + xy: 3063, 177 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dacite-tiny +block-dacite-boulder-tiny rotate: false - xy: 1863, 11 + xy: 3989, 240 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dacite-wall-large - rotate: false - xy: 1760, 371 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dacite-wall-medium - rotate: false - xy: 2003, 211 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-dacite-wall-small - rotate: false - xy: 3981, 219 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-dacite-wall-tiny - rotate: false - xy: 1881, 11 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-dacite-wall-xlarge +block-dacite-boulder-xlarge rotate: false xy: 2107, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dacite-xlarge +block-dacite-large + rotate: false + xy: 2529, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dacite-medium + rotate: false + xy: 2611, 224 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dacite-small + rotate: false + xy: 3063, 151 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dacite-tiny + rotate: false + xy: 3971, 204 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dacite-wall-large + rotate: false + xy: 2571, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dacite-wall-medium + rotate: false + xy: 2645, 224 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dacite-wall-small + rotate: false + xy: 3089, 185 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dacite-wall-tiny + rotate: false + xy: 3989, 222 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dacite-wall-xlarge rotate: false xy: 2157, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-metal-large - rotate: false - xy: 1718, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dark-metal-medium - rotate: false - xy: 2037, 211 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-dark-metal-small - rotate: false - xy: 3981, 193 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-dark-metal-tiny - rotate: false - xy: 1899, 11 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-dark-metal-xlarge +block-dacite-xlarge rotate: false xy: 2207, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-1-large +block-dark-metal-large rotate: false - xy: 1802, 371 + xy: 2613, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-1-medium +block-dark-metal-medium rotate: false - xy: 2071, 211 + xy: 2679, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-1-small +block-dark-metal-small rotate: false - xy: 3980, 167 + xy: 3089, 159 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-1-tiny +block-dark-metal-tiny rotate: false - xy: 1917, 11 + xy: 3989, 204 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-1-xlarge +block-dark-metal-xlarge rotate: false xy: 2257, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-2-large +block-dark-panel-1-large rotate: false - xy: 1760, 329 + xy: 2655, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-2-medium +block-dark-panel-1-medium rotate: false - xy: 2105, 211 + xy: 2713, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-2-small +block-dark-panel-1-small rotate: false - xy: 3992, 245 + xy: 2975, 39 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-2-tiny +block-dark-panel-1-tiny rotate: false - xy: 1935, 11 + xy: 4007, 295 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-2-xlarge +block-dark-panel-1-xlarge rotate: false xy: 2307, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-3-large +block-dark-panel-2-large rotate: false - xy: 1844, 371 + xy: 2697, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-3-medium +block-dark-panel-2-medium rotate: false - xy: 2139, 211 + xy: 2747, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-3-small +block-dark-panel-2-small rotate: false - xy: 4018, 245 + xy: 3063, 125 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-3-tiny +block-dark-panel-2-tiny rotate: false - xy: 1953, 11 + xy: 4025, 295 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-3-xlarge +block-dark-panel-2-xlarge rotate: false xy: 2357, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-4-large +block-dark-panel-3-large rotate: false - xy: 1802, 329 + xy: 2739, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-4-medium +block-dark-panel-3-medium rotate: false - xy: 2173, 211 + xy: 2781, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-4-small +block-dark-panel-3-small rotate: false - xy: 4007, 219 + xy: 3089, 133 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-4-tiny +block-dark-panel-3-tiny rotate: false - xy: 1971, 11 + xy: 4007, 277 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-4-xlarge +block-dark-panel-3-xlarge rotate: false xy: 2407, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-5-large +block-dark-panel-4-large rotate: false - xy: 1886, 371 + xy: 2781, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-5-medium +block-dark-panel-4-medium rotate: false - xy: 2207, 211 + xy: 2815, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-5-small +block-dark-panel-4-small rotate: false - xy: 4007, 193 + xy: 3115, 185 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-5-tiny +block-dark-panel-4-tiny rotate: false - xy: 2169, 11 + xy: 4007, 259 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-5-xlarge +block-dark-panel-4-xlarge rotate: false xy: 2457, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dark-panel-6-large +block-dark-panel-5-large rotate: false - xy: 1844, 329 + xy: 2823, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dark-panel-6-medium +block-dark-panel-5-medium rotate: false - xy: 2241, 211 + xy: 2849, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dark-panel-6-small +block-dark-panel-5-small rotate: false - xy: 4006, 167 + xy: 3115, 159 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dark-panel-6-tiny +block-dark-panel-5-tiny rotate: false - xy: 2187, 11 + xy: 4025, 277 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dark-panel-6-xlarge +block-dark-panel-5-xlarge rotate: false xy: 2507, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-darksand-large +block-dark-panel-6-large rotate: false - xy: 1928, 371 + xy: 2865, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-darksand-medium +block-dark-panel-6-medium rotate: false - xy: 2275, 211 + xy: 2883, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-darksand-small +block-dark-panel-6-small rotate: false - xy: 4033, 219 + xy: 3115, 133 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-darksand-tainted-water-large +block-dark-panel-6-tiny rotate: false - xy: 1886, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-darksand-tainted-water-medium - rotate: false - xy: 2309, 211 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-darksand-tainted-water-small - rotate: false - xy: 4033, 193 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-darksand-tainted-water-tiny - rotate: false - xy: 2205, 11 + xy: 4007, 241 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-darksand-tainted-water-xlarge +block-dark-panel-6-xlarge rotate: false xy: 2557, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-darksand-tiny +block-darksand-large rotate: false - xy: 2223, 11 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-darksand-water-large - rotate: false - xy: 1970, 371 + xy: 2907, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-darksand-water-medium +block-darksand-medium rotate: false - xy: 1969, 185 + xy: 2917, 224 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-darksand-water-small +block-darksand-small rotate: false - xy: 4032, 167 + xy: 3141, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-darksand-water-tiny +block-darksand-tainted-water-large rotate: false - xy: 2241, 11 + xy: 2949, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-darksand-tainted-water-medium + rotate: false + xy: 1127, 169 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-darksand-tainted-water-small + rotate: false + xy: 3167, 193 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-darksand-tainted-water-tiny + rotate: false + xy: 4025, 259 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-darksand-water-xlarge +block-darksand-tainted-water-xlarge rotate: false xy: 2607, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-darksand-xlarge +block-darksand-tiny + rotate: false + xy: 4007, 223 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-darksand-water-large + rotate: false + xy: 2991, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-darksand-water-medium + rotate: false + xy: 1161, 169 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-darksand-water-small + rotate: false + xy: 3141, 167 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-darksand-water-tiny + rotate: false + xy: 4025, 241 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-darksand-water-xlarge rotate: false xy: 2657, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-deepwater-large - rotate: false - xy: 1928, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-deepwater-medium - rotate: false - xy: 2003, 177 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-deepwater-small - rotate: false - xy: 4059, 226 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-deepwater-tiny - rotate: false - xy: 2259, 11 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-deepwater-xlarge +block-darksand-xlarge rotate: false xy: 2707, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-differential-generator-large +block-deepwater-large rotate: false - xy: 2012, 371 + xy: 3033, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-differential-generator-medium +block-deepwater-medium rotate: false - xy: 2037, 177 + xy: 1195, 169 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-differential-generator-small +block-deepwater-small rotate: false - xy: 4059, 200 + xy: 3193, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-differential-generator-tiny +block-deepwater-tiny rotate: false - xy: 2277, 11 + xy: 4007, 205 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-differential-generator-xlarge +block-deepwater-xlarge rotate: false xy: 2757, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-diode-large +block-differential-generator-large rotate: false - xy: 1970, 329 + xy: 3075, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-diode-medium +block-differential-generator-medium rotate: false - xy: 2071, 177 + xy: 3771, 253 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-diode-small +block-differential-generator-small rotate: false - xy: 4059, 174 + xy: 3141, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-diode-tiny +block-differential-generator-tiny rotate: false - xy: 2295, 18 + xy: 4025, 223 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-diode-xlarge +block-differential-generator-xlarge rotate: false xy: 2807, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dirt-large +block-diode-large rotate: false - xy: 2054, 371 + xy: 3117, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-dirt-medium +block-diode-medium rotate: false - xy: 2105, 177 + xy: 2203, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dirt-small +block-diode-small rotate: false - xy: 4058, 148 + xy: 3167, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dirt-tiny +block-diode-tiny rotate: false - xy: 2462, 89 + xy: 4025, 205 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dirt-wall-large - rotate: false - xy: 2012, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dirt-wall-medium - rotate: false - xy: 2139, 177 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-dirt-wall-small - rotate: false - xy: 2445, 177 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-dirt-wall-tiny - rotate: false - xy: 2069, 8 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-dirt-wall-xlarge +block-diode-xlarge rotate: false xy: 2857, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dirt-xlarge +block-dirt-large + rotate: false + xy: 3159, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dirt-medium + rotate: false + xy: 2237, 190 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dirt-small + rotate: false + xy: 3219, 193 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dirt-tiny + rotate: false + xy: 1881, 159 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dirt-wall-large + rotate: false + xy: 3201, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-dirt-wall-medium + rotate: false + xy: 2271, 190 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-dirt-wall-small + rotate: false + xy: 3167, 141 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-dirt-wall-tiny + rotate: false + xy: 1881, 141 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-dirt-wall-xlarge rotate: false xy: 2907, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-disassembler-large - rotate: false - xy: 2096, 371 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-disassembler-medium - rotate: false - xy: 2173, 177 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-disassembler-small - rotate: false - xy: 2450, 151 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-disassembler-tiny - rotate: false - xy: 2087, 8 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-disassembler-xlarge +block-dirt-xlarge rotate: false xy: 2957, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-distributor-large +block-disassembler-large rotate: false - xy: 2054, 329 + xy: 3243, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-distributor-medium +block-disassembler-medium rotate: false - xy: 2207, 177 + xy: 2305, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-distributor-small +block-disassembler-small rotate: false - xy: 2450, 125 + xy: 3193, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-distributor-tiny +block-disassembler-tiny rotate: false - xy: 2453, 63 + xy: 1899, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-distributor-xlarge +block-disassembler-xlarge rotate: false xy: 3007, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-door-large +block-distributor-large rotate: false - xy: 2138, 371 + xy: 3285, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-door-large-large +block-distributor-medium rotate: false - xy: 2096, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-door-large-medium - rotate: false - xy: 2241, 177 + xy: 2339, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-door-large-small +block-distributor-small rotate: false - xy: 2471, 193 + xy: 3245, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-door-large-tiny +block-distributor-tiny rotate: false - xy: 2453, 45 + xy: 1899, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-door-large-xlarge +block-distributor-xlarge rotate: false xy: 3057, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-door-medium +block-door-large rotate: false - xy: 2275, 177 + xy: 3327, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-door-large-large + rotate: false + xy: 3369, 371 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-door-large-medium + rotate: false + xy: 2373, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-door-small +block-door-large-small rotate: false - xy: 2497, 185 + xy: 3193, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-door-tiny +block-door-large-tiny rotate: false - xy: 2453, 27 + xy: 1917, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-door-xlarge +block-door-large-xlarge rotate: false xy: 3107, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-dune-wall-large +block-door-medium rotate: false - xy: 2180, 371 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-dune-wall-medium - rotate: false - xy: 2309, 177 + xy: 2407, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-dune-wall-small +block-door-small rotate: false - xy: 2523, 185 + xy: 3219, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-dune-wall-tiny +block-door-tiny rotate: false - xy: 2453, 9 + xy: 1917, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-dune-wall-xlarge +block-door-xlarge rotate: false xy: 3157, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-duo-large +block-dune-wall-large rotate: false - xy: 2138, 329 + xy: 3411, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-duo-medium +block-dune-wall-medium rotate: false - xy: 881, 121 + xy: 2441, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-duo-small +block-dune-wall-small rotate: false - xy: 2549, 194 + xy: 3219, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-duo-tiny +block-dune-wall-tiny rotate: false - xy: 4047, 123 + xy: 1935, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-duo-xlarge +block-dune-wall-xlarge rotate: false xy: 3207, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-exponential-reconstructor-large +block-duo-large rotate: false - xy: 2222, 371 + xy: 3453, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-exponential-reconstructor-medium +block-duo-medium rotate: false - xy: 881, 87 + xy: 2475, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-exponential-reconstructor-small +block-duo-small rotate: false - xy: 2549, 168 + xy: 3245, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-exponential-reconstructor-tiny +block-duo-tiny rotate: false - xy: 4065, 130 + xy: 1935, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-exponential-reconstructor-xlarge +block-duo-xlarge rotate: false xy: 3257, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-force-projector-large +block-exponential-reconstructor-large rotate: false - xy: 2180, 329 + xy: 3495, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-force-projector-medium +block-exponential-reconstructor-medium rotate: false - xy: 881, 53 + xy: 2509, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-force-projector-small +block-exponential-reconstructor-small rotate: false - xy: 2575, 177 + xy: 3245, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-force-projector-tiny +block-exponential-reconstructor-tiny rotate: false - xy: 4047, 105 + xy: 1953, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-force-projector-xlarge +block-exponential-reconstructor-xlarge rotate: false xy: 3307, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-foreshadow-large +block-force-projector-large rotate: false - xy: 2264, 371 + xy: 3537, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-foreshadow-medium +block-force-projector-medium rotate: false - xy: 881, 19 + xy: 2543, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-foreshadow-small +block-force-projector-small rotate: false - xy: 2601, 177 + xy: 3271, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-foreshadow-tiny +block-force-projector-tiny rotate: false - xy: 4065, 112 + xy: 1971, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-foreshadow-xlarge +block-force-projector-xlarge rotate: false xy: 3357, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-fuse-large +block-foreshadow-large rotate: false - xy: 2222, 329 + xy: 3579, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-fuse-medium +block-foreshadow-medium rotate: false - xy: 915, 119 + xy: 2577, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-fuse-small +block-foreshadow-small rotate: false - xy: 2575, 151 + xy: 3271, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-fuse-tiny +block-foreshadow-tiny rotate: false - xy: 4065, 94 + xy: 1953, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-fuse-xlarge +block-foreshadow-xlarge rotate: false xy: 3407, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-graphite-press-large +block-fuse-large rotate: false - xy: 2306, 371 + xy: 3621, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-graphite-press-medium +block-fuse-medium rotate: false - xy: 915, 85 + xy: 2611, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-graphite-press-small +block-fuse-small rotate: false - xy: 2601, 151 + xy: 3271, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-graphite-press-tiny +block-fuse-tiny rotate: false - xy: 3809, 311 + xy: 1971, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-graphite-press-xlarge +block-fuse-xlarge rotate: false xy: 3457, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-grass-large +block-graphite-press-large rotate: false - xy: 2264, 329 + xy: 3663, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-grass-medium +block-graphite-press-medium rotate: false - xy: 949, 119 + xy: 2645, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-grass-small +block-graphite-press-small rotate: false - xy: 3581, 159 + xy: 3297, 195 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-grass-tiny +block-graphite-press-tiny rotate: false - xy: 2476, 175 + xy: 1881, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-grass-xlarge +block-graphite-press-xlarge rotate: false xy: 3507, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ground-factory-large +block-grass-large rotate: false - xy: 2348, 371 + xy: 3705, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ground-factory-medium +block-grass-medium rotate: false - xy: 915, 51 + xy: 2679, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ground-factory-small +block-grass-small rotate: false - xy: 3607, 159 + xy: 3297, 169 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ground-factory-tiny +block-grass-tiny rotate: false - xy: 2476, 157 + xy: 1899, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ground-factory-xlarge +block-grass-xlarge rotate: false xy: 3557, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-hail-large +block-ground-factory-large rotate: false - xy: 2306, 329 + xy: 3747, 371 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-hail-medium +block-ground-factory-medium rotate: false - xy: 949, 85 + xy: 2713, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-hail-small +block-ground-factory-small rotate: false - xy: 3633, 159 + xy: 3297, 143 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-hail-tiny +block-ground-factory-tiny rotate: false - xy: 2476, 139 + xy: 1917, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-hail-xlarge +block-ground-factory-xlarge rotate: false xy: 3607, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-hotrock-large +block-hail-large rotate: false - xy: 2390, 371 + xy: 1054, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-hotrock-medium +block-hail-medium rotate: false - xy: 949, 51 + xy: 2747, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-hotrock-small +block-hail-small rotate: false - xy: 3659, 159 + xy: 3323, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-hotrock-tiny +block-hail-tiny rotate: false - xy: 2494, 167 + xy: 1935, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-hotrock-xlarge +block-hail-xlarge rotate: false xy: 3657, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-hyper-processor-large +block-hotrock-large rotate: false - xy: 2348, 329 + xy: 1096, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-hyper-processor-medium +block-hotrock-medium rotate: false - xy: 915, 17 + xy: 2781, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-hyper-processor-small +block-hotrock-small rotate: false - xy: 3685, 157 + xy: 3349, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-hyper-processor-tiny +block-hotrock-tiny rotate: false - xy: 2512, 167 + xy: 1953, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-hyper-processor-xlarge +block-hotrock-xlarge rotate: false xy: 3707, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ice-large +block-hyper-processor-large rotate: false - xy: 2432, 371 + xy: 1138, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ice-medium +block-hyper-processor-medium rotate: false - xy: 949, 17 + xy: 2815, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ice-small +block-hyper-processor-small rotate: false - xy: 3579, 133 + xy: 3323, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ice-snow-large +block-hyper-processor-tiny rotate: false - xy: 2390, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-ice-snow-medium - rotate: false - xy: 983, 119 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-ice-snow-small - rotate: false - xy: 3605, 133 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-ice-snow-tiny - rotate: false - xy: 2494, 149 + xy: 1971, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ice-snow-xlarge +block-hyper-processor-xlarge rotate: false xy: 3757, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ice-tiny +block-ice-large rotate: false - xy: 2530, 167 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-ice-wall-large - rotate: false - xy: 2474, 371 + xy: 1180, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ice-wall-medium +block-ice-medium rotate: false - xy: 983, 85 + xy: 2849, 190 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ice-wall-small +block-ice-small rotate: false - xy: 3631, 133 + xy: 3375, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ice-wall-tiny +block-ice-snow-large rotate: false - xy: 2512, 149 + xy: 1222, 329 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ice-snow-medium + rotate: false + xy: 2883, 190 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ice-snow-small + rotate: false + xy: 3349, 167 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ice-snow-tiny + rotate: false + xy: 1989, 133 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ice-wall-xlarge +block-ice-snow-xlarge rotate: false xy: 3807, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ice-xlarge +block-ice-tiny + rotate: false + xy: 3953, 186 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ice-wall-large + rotate: false + xy: 1264, 329 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-ice-wall-medium + rotate: false + xy: 2917, 190 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-ice-wall-small + rotate: false + xy: 3401, 193 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-ice-wall-tiny + rotate: false + xy: 3971, 186 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-ice-wall-xlarge rotate: false xy: 3857, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-illuminator-large - rotate: false - xy: 2432, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-illuminator-medium - rotate: false - xy: 983, 51 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 -block-illuminator-small - rotate: false - xy: 3657, 133 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-illuminator-tiny - rotate: false - xy: 2530, 149 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -block-illuminator-xlarge +block-ice-xlarge rotate: false xy: 3907, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-impact-reactor-large +block-illuminator-large rotate: false - xy: 2516, 371 + xy: 1306, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-impact-reactor-medium +block-illuminator-medium rotate: false - xy: 983, 17 + xy: 1513, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-impact-reactor-small +block-illuminator-small rotate: false - xy: 3683, 131 + xy: 3375, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-impact-reactor-tiny +block-illuminator-tiny rotate: false - xy: 2548, 150 + xy: 3989, 186 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-impact-reactor-xlarge +block-illuminator-xlarge rotate: false xy: 3957, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-incinerator-large +block-impact-reactor-large rotate: false - xy: 2474, 329 + xy: 1348, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-incinerator-medium +block-impact-reactor-medium rotate: false - xy: 2741, 190 + xy: 1547, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-incinerator-small +block-impact-reactor-small rotate: false - xy: 1731, 185 + xy: 3427, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-incinerator-tiny +block-impact-reactor-tiny rotate: false - xy: 2494, 131 + xy: 4007, 187 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-incinerator-xlarge +block-impact-reactor-xlarge rotate: false xy: 4007, 463 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-inverted-sorter-large +block-incinerator-large rotate: false - xy: 2558, 371 + xy: 1390, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-inverted-sorter-medium +block-incinerator-medium rotate: false - xy: 2775, 190 + xy: 1581, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-inverted-sorter-small +block-incinerator-small rotate: false - xy: 1757, 205 + xy: 3401, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-inverted-sorter-tiny +block-incinerator-tiny rotate: false - xy: 2512, 131 + xy: 4025, 187 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-inverted-sorter-xlarge +block-incinerator-xlarge rotate: false xy: 345, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-item-source-large +block-interplanetary-accelerator-large rotate: false - xy: 2516, 329 + xy: 1432, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-item-source-medium +block-interplanetary-accelerator-medium rotate: false - xy: 2809, 190 + xy: 1615, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-item-source-small +block-interplanetary-accelerator-small rotate: false - xy: 1757, 96 + xy: 3453, 193 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-item-source-tiny +block-interplanetary-accelerator-tiny rotate: false - xy: 2530, 131 + xy: 3935, 175 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-item-source-xlarge +block-interplanetary-accelerator-xlarge rotate: false xy: 395, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-item-void-large +block-inverted-sorter-large rotate: false - xy: 2600, 371 + xy: 1474, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-item-void-medium +block-inverted-sorter-medium rotate: false - xy: 2843, 190 + xy: 1649, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-item-void-small +block-inverted-sorter-small rotate: false - xy: 1757, 70 + xy: 3427, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-item-void-tiny +block-inverted-sorter-tiny rotate: false - xy: 2548, 132 + xy: 3953, 168 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-item-void-xlarge +block-inverted-sorter-xlarge rotate: false xy: 445, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-junction-large +block-item-source-large rotate: false - xy: 2558, 329 + xy: 1516, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-junction-medium +block-item-source-medium rotate: false - xy: 2877, 190 + xy: 1683, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-junction-small +block-item-source-small rotate: false - xy: 1757, 44 + xy: 3453, 167 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-junction-tiny +block-item-source-tiny rotate: false - xy: 2566, 133 + xy: 3971, 168 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-junction-xlarge +block-item-source-xlarge rotate: false xy: 495, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-kiln-large +block-item-void-large rotate: false - xy: 2642, 371 + xy: 1558, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-kiln-medium +block-item-void-medium rotate: false - xy: 2911, 190 + xy: 1717, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-kiln-small +block-item-void-small rotate: false - xy: 3711, 145 + xy: 3323, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-kiln-tiny +block-item-void-tiny rotate: false - xy: 2584, 133 + xy: 3989, 168 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-kiln-xlarge +block-item-void-xlarge rotate: false xy: 545, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-lancer-large +block-junction-large rotate: false - xy: 2600, 329 + xy: 1600, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-lancer-medium +block-junction-medium rotate: false - xy: 2945, 190 + xy: 1751, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-lancer-small +block-junction-small rotate: false - xy: 3737, 145 + xy: 3349, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-lancer-tiny +block-junction-tiny rotate: false - xy: 2602, 133 + xy: 4007, 169 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-lancer-xlarge +block-junction-xlarge rotate: false xy: 595, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-large-logic-display-large +block-kiln-large rotate: false - xy: 2684, 371 + xy: 1642, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-large-logic-display-medium +block-kiln-medium rotate: false - xy: 2979, 190 + xy: 1785, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-large-logic-display-small +block-kiln-small rotate: false - xy: 3763, 145 + xy: 3375, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-large-logic-display-tiny +block-kiln-tiny rotate: false - xy: 2620, 133 + xy: 4025, 169 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-large-logic-display-xlarge +block-kiln-xlarge rotate: false xy: 645, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-laser-drill-large +block-lancer-large rotate: false - xy: 2642, 329 + xy: 1684, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-laser-drill-medium +block-lancer-medium rotate: false - xy: 3013, 190 + xy: 1819, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-laser-drill-small +block-lancer-small rotate: false - xy: 3789, 145 + xy: 3401, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-laser-drill-tiny +block-lancer-tiny rotate: false - xy: 1989, 11 + xy: 1863, 111 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-laser-drill-xlarge +block-lancer-xlarge rotate: false xy: 695, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-launch-pad-large +block-large-logic-display-large rotate: false - xy: 2726, 371 + xy: 1726, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-launch-pad-large-large +block-large-logic-display-medium rotate: false - xy: 2684, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-launch-pad-large-medium - rotate: false - xy: 3047, 190 + xy: 1853, 217 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-launch-pad-large-small +block-large-logic-display-small rotate: false - xy: 3815, 141 + xy: 3427, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-launch-pad-large-tiny +block-large-logic-display-tiny rotate: false - xy: 2007, 8 + xy: 1881, 105 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-launch-pad-large-xlarge +block-large-logic-display-xlarge rotate: false xy: 231, 96 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-launch-pad-medium +block-laser-drill-large rotate: false - xy: 3081, 190 + xy: 1768, 329 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-laser-drill-medium + rotate: false + xy: 1887, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-launch-pad-small +block-laser-drill-small rotate: false - xy: 3841, 141 + xy: 3453, 141 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-launch-pad-tiny +block-laser-drill-tiny rotate: false - xy: 2025, 8 + xy: 1899, 105 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-launch-pad-xlarge +block-laser-drill-xlarge rotate: false xy: 231, 46 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-liquid-junction-large +block-launch-pad-large rotate: false - xy: 2768, 371 + xy: 1810, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-liquid-junction-medium +block-launch-pad-large-large rotate: false - xy: 3115, 190 + xy: 1852, 329 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-launch-pad-large-medium + rotate: false + xy: 1921, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-liquid-junction-small +block-launch-pad-large-small rotate: false - xy: 3867, 141 + xy: 1421, 143 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-liquid-junction-tiny +block-launch-pad-large-tiny rotate: false - xy: 2043, 3 + xy: 1917, 105 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-liquid-junction-xlarge +block-launch-pad-large-xlarge rotate: false xy: 745, 354 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-liquid-router-large +block-launch-pad-medium rotate: false - xy: 2726, 329 - size: 40, 40 - orig: 40, 40 - offset: 0, 0 - index: -1 -block-liquid-router-medium - rotate: false - xy: 3149, 190 + xy: 1955, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-liquid-router-small +block-launch-pad-small rotate: false - xy: 3893, 141 + xy: 1837, 151 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-liquid-router-tiny +block-launch-pad-tiny rotate: false - xy: 3887, 312 + xy: 1935, 105 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-liquid-router-xlarge +block-launch-pad-xlarge rotate: false xy: 281, 107 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-liquid-source-large +block-liquid-junction-large rotate: false - xy: 2810, 371 + xy: 1894, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-liquid-source-medium +block-liquid-junction-medium rotate: false - xy: 3183, 190 + xy: 1989, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-liquid-source-small +block-liquid-junction-small rotate: false - xy: 3919, 141 + xy: 1837, 125 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-liquid-source-tiny +block-liquid-junction-tiny rotate: false - xy: 3887, 294 + xy: 1953, 105 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-liquid-source-xlarge +block-liquid-junction-xlarge rotate: false xy: 281, 57 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-liquid-tank-large +block-liquid-router-large rotate: false - xy: 2768, 329 + xy: 1936, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-liquid-tank-medium +block-liquid-router-medium rotate: false - xy: 3217, 190 + xy: 2023, 220 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-liquid-tank-small +block-liquid-router-small rotate: false - xy: 3945, 141 + xy: 3089, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-liquid-tank-tiny +block-liquid-router-tiny rotate: false - xy: 3887, 276 + xy: 1971, 105 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-liquid-tank-xlarge +block-liquid-router-xlarge rotate: false xy: 795, 366 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-liquid-void-large +block-liquid-source-large rotate: false - xy: 2852, 371 + xy: 1978, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-liquid-void-medium +block-liquid-source-medium rotate: false - xy: 3251, 190 + xy: 2057, 203 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-liquid-void-small +block-liquid-source-small rotate: false - xy: 3971, 141 + xy: 3115, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-liquid-void-tiny +block-liquid-source-tiny rotate: false - xy: 3905, 305 + xy: 1989, 115 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-liquid-void-xlarge +block-liquid-source-xlarge rotate: false xy: 309, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-logic-display-large +block-liquid-tank-large rotate: false - xy: 2810, 329 + xy: 2020, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-logic-display-medium +block-liquid-tank-medium rotate: false - xy: 3285, 190 + xy: 2023, 186 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-logic-display-small +block-liquid-tank-small rotate: false - xy: 3997, 141 + xy: 3141, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-logic-display-tiny +block-liquid-tank-tiny rotate: false - xy: 3923, 305 + xy: 1989, 97 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-logic-display-xlarge +block-liquid-tank-xlarge rotate: false xy: 309, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-logic-processor-large +block-liquid-void-large rotate: false - xy: 2894, 371 + xy: 2062, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-logic-processor-medium +block-liquid-void-medium rotate: false - xy: 3319, 190 + xy: 1989, 185 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-logic-processor-small +block-liquid-void-small rotate: false - xy: 4023, 141 + xy: 3167, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-logic-processor-tiny +block-liquid-void-tiny rotate: false - xy: 3941, 305 + xy: 3862, 339 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-logic-processor-xlarge +block-liquid-void-xlarge rotate: false xy: 359, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-magmarock-large +block-logic-display-large rotate: false - xy: 2852, 329 + xy: 2104, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-magmarock-medium +block-logic-display-medium rotate: false - xy: 3353, 190 + xy: 2057, 169 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-magmarock-small +block-logic-display-small rotate: false - xy: 3709, 119 + xy: 3193, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-magmarock-tiny +block-logic-display-tiny rotate: false - xy: 3905, 287 + xy: 3858, 321 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-magmarock-xlarge +block-logic-display-xlarge rotate: false xy: 309, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-mass-driver-large +block-logic-processor-large rotate: false - xy: 2936, 371 + xy: 2146, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-mass-driver-medium +block-logic-processor-medium rotate: false - xy: 3387, 190 + xy: 2091, 185 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-mass-driver-small +block-logic-processor-small rotate: false - xy: 3735, 119 + xy: 3219, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-mass-driver-tiny +block-logic-processor-tiny rotate: false - xy: 3923, 287 + xy: 1229, 196 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-mass-driver-xlarge +block-logic-processor-xlarge rotate: false xy: 359, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-mechanical-drill-large +block-magmarock-large rotate: false - xy: 2894, 329 + xy: 2188, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-mechanical-drill-medium +block-magmarock-medium rotate: false - xy: 1631, 222 + xy: 2023, 152 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-mechanical-drill-small +block-magmarock-small rotate: false - xy: 3761, 119 + xy: 3245, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-mechanical-drill-tiny +block-magmarock-tiny rotate: false - xy: 3941, 287 + xy: 1229, 178 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-mechanical-drill-xlarge +block-magmarock-xlarge rotate: false xy: 409, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-mechanical-pump-large +block-mass-driver-large rotate: false - xy: 2978, 371 + xy: 2230, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-mechanical-pump-medium +block-mass-driver-medium rotate: false - xy: 1665, 213 + xy: 2057, 135 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-mechanical-pump-small +block-mass-driver-small rotate: false - xy: 3787, 119 + xy: 3271, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-mechanical-pump-tiny +block-mass-driver-tiny rotate: false - xy: 3959, 295 + xy: 1247, 187 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-mechanical-pump-xlarge +block-mass-driver-xlarge rotate: false xy: 359, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-meltdown-large +block-mechanical-drill-large rotate: false - xy: 2936, 329 + xy: 2272, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-meltdown-medium +block-mechanical-drill-medium rotate: false - xy: 1699, 211 + xy: 2091, 151 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-meltdown-small +block-mechanical-drill-small rotate: false - xy: 3813, 115 + xy: 3297, 117 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-meltdown-tiny +block-mechanical-drill-tiny rotate: false - xy: 3977, 295 + xy: 1265, 187 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-meltdown-xlarge +block-mechanical-drill-xlarge rotate: false xy: 409, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-melter-large +block-mechanical-pump-large rotate: false - xy: 3020, 371 + xy: 2314, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-melter-medium +block-mechanical-pump-medium rotate: false - xy: 3421, 211 + xy: 2125, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-melter-small +block-mechanical-pump-small rotate: false - xy: 3839, 115 + xy: 3323, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-melter-tiny +block-mechanical-pump-tiny rotate: false - xy: 3959, 277 + xy: 1247, 169 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-melter-xlarge +block-mechanical-pump-xlarge rotate: false xy: 459, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-memory-bank-large +block-meltdown-large rotate: false - xy: 2978, 329 + xy: 2356, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-memory-bank-medium +block-meltdown-medium rotate: false - xy: 3455, 211 + xy: 2159, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-memory-bank-small +block-meltdown-small rotate: false - xy: 3865, 115 + xy: 3349, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-memory-bank-tiny +block-meltdown-tiny rotate: false - xy: 3977, 277 + xy: 1265, 169 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-memory-bank-xlarge +block-meltdown-xlarge rotate: false xy: 409, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-memory-cell-large +block-melter-large rotate: false - xy: 3062, 371 + xy: 2398, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-memory-cell-medium +block-melter-medium rotate: false - xy: 3421, 177 + xy: 2125, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-memory-cell-small +block-melter-small rotate: false - xy: 3891, 115 + xy: 3375, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-memory-cell-tiny +block-melter-tiny rotate: false - xy: 2471, 71 + xy: 1283, 185 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-memory-cell-xlarge +block-melter-xlarge rotate: false xy: 459, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-mend-projector-large +block-memory-bank-large rotate: false - xy: 3020, 329 + xy: 2440, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-mend-projector-medium +block-memory-bank-medium rotate: false - xy: 3455, 177 + xy: 2159, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-mend-projector-small +block-memory-bank-small rotate: false - xy: 3917, 115 + xy: 3401, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-mend-projector-tiny +block-memory-bank-tiny rotate: false - xy: 2471, 53 + xy: 1301, 185 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-mend-projector-xlarge +block-memory-bank-xlarge rotate: false xy: 509, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-mender-large +block-memory-cell-large rotate: false - xy: 3104, 371 + xy: 2482, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-mender-medium +block-memory-cell-medium rotate: false - xy: 2555, 220 + xy: 2193, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-mender-small +block-memory-cell-small rotate: false - xy: 3943, 115 + xy: 3427, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-mender-tiny +block-memory-cell-tiny rotate: false - xy: 2471, 35 + xy: 1319, 185 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-mender-xlarge +block-memory-cell-xlarge rotate: false xy: 459, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-message-large +block-mend-projector-large rotate: false - xy: 3062, 329 + xy: 2524, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-message-medium +block-mend-projector-medium rotate: false - xy: 2589, 203 + xy: 2227, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-message-small +block-mend-projector-small rotate: false - xy: 3969, 115 + xy: 3453, 115 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-message-tiny +block-mend-projector-tiny rotate: false - xy: 2471, 17 + xy: 1283, 167 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-message-xlarge +block-mend-projector-xlarge rotate: false xy: 509, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-metal-floor-2-large +block-mender-large rotate: false - xy: 3146, 371 + xy: 2566, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-metal-floor-2-medium +block-mender-medium rotate: false - xy: 2471, 219 + xy: 2261, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-metal-floor-2-small +block-mender-small rotate: false - xy: 3995, 115 + xy: 3141, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-metal-floor-2-tiny +block-mender-tiny rotate: false - xy: 2548, 114 + xy: 1301, 167 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-metal-floor-2-xlarge +block-mender-xlarge rotate: false xy: 559, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-metal-floor-3-large +block-message-large rotate: false - xy: 3104, 329 + xy: 2608, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-metal-floor-3-medium +block-message-medium rotate: false - xy: 2505, 211 + xy: 2295, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-metal-floor-3-small +block-message-small rotate: false - xy: 4021, 115 + xy: 3167, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-metal-floor-3-tiny +block-message-tiny rotate: false - xy: 2566, 115 + xy: 1319, 167 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-metal-floor-3-xlarge +block-message-xlarge rotate: false xy: 509, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-metal-floor-5-large +block-metal-floor-2-large rotate: false - xy: 3188, 371 + xy: 2650, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-metal-floor-5-medium +block-metal-floor-2-medium rotate: false - xy: 3552, 211 + xy: 2329, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-metal-floor-5-small +block-metal-floor-2-small rotate: false - xy: 1760, 179 + xy: 3193, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-metal-floor-5-tiny +block-metal-floor-2-tiny rotate: false - xy: 2584, 115 + xy: 1337, 157 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-metal-floor-5-xlarge +block-metal-floor-2-xlarge rotate: false xy: 559, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-metal-floor-damaged-large +block-metal-floor-3-large rotate: false - xy: 3146, 329 + xy: 2692, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-metal-floor-damaged-medium +block-metal-floor-3-medium rotate: false - xy: 3587, 219 + xy: 2363, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-metal-floor-damaged-small +block-metal-floor-3-small rotate: false - xy: 1760, 153 + xy: 3219, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-metal-floor-damaged-tiny +block-metal-floor-3-tiny rotate: false - xy: 2602, 115 + xy: 1355, 157 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-metal-floor-damaged-xlarge +block-metal-floor-3-xlarge rotate: false xy: 609, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-metal-floor-large +block-metal-floor-5-large rotate: false - xy: 3230, 371 + xy: 2734, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-metal-floor-medium +block-metal-floor-5-medium rotate: false - xy: 3621, 219 + xy: 2397, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-metal-floor-small +block-metal-floor-5-small rotate: false - xy: 1760, 127 + xy: 3245, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-metal-floor-tiny +block-metal-floor-5-tiny rotate: false - xy: 2620, 115 + xy: 3802, 201 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-metal-floor-xlarge +block-metal-floor-5-xlarge rotate: false xy: 559, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-micro-processor-large +block-metal-floor-damaged-large rotate: false - xy: 3188, 329 + xy: 2776, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-micro-processor-medium +block-metal-floor-damaged-medium rotate: false - xy: 3655, 219 + xy: 2431, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-micro-processor-small +block-metal-floor-damaged-small rotate: false - xy: 1786, 185 + xy: 3271, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-micro-processor-tiny +block-metal-floor-damaged-tiny rotate: false - xy: 2566, 97 + xy: 3820, 203 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-micro-processor-xlarge +block-metal-floor-damaged-xlarge rotate: false xy: 609, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-moss-large +block-metal-floor-large rotate: false - xy: 3272, 371 + xy: 2818, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-moss-medium +block-metal-floor-medium rotate: false - xy: 3689, 217 + xy: 2465, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-moss-small +block-metal-floor-small rotate: false - xy: 1786, 159 + xy: 3297, 91 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-moss-tiny +block-metal-floor-tiny rotate: false - xy: 2584, 97 + xy: 3838, 203 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-moss-xlarge +block-metal-floor-xlarge rotate: false xy: 659, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-mud-large +block-micro-processor-large rotate: false - xy: 3230, 329 + xy: 2860, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-mud-medium +block-micro-processor-medium rotate: false - xy: 3723, 205 + xy: 2499, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-mud-small +block-micro-processor-small rotate: false - xy: 1812, 185 + xy: 3323, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-mud-tiny +block-micro-processor-tiny rotate: false - xy: 2602, 97 + xy: 3856, 203 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-mud-xlarge +block-micro-processor-xlarge rotate: false xy: 609, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-multi-press-large +block-moss-large rotate: false - xy: 3314, 371 + xy: 2902, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-multi-press-medium +block-moss-medium rotate: false - xy: 3757, 205 + xy: 2533, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-multi-press-small +block-moss-small rotate: false - xy: 1812, 159 + xy: 3349, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-multi-press-tiny +block-moss-tiny rotate: false - xy: 2620, 97 + xy: 3057, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-multi-press-xlarge +block-moss-xlarge rotate: false xy: 659, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-multiplicative-reconstructor-large +block-mud-large rotate: false - xy: 3272, 329 + xy: 2944, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-multiplicative-reconstructor-medium +block-mud-medium rotate: false - xy: 993, 211 + xy: 2567, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-multiplicative-reconstructor-small +block-mud-small rotate: false - xy: 1786, 133 + xy: 3375, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-multiplicative-reconstructor-tiny +block-mud-tiny rotate: false - xy: 2627, 172 + xy: 3056, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-multiplicative-reconstructor-xlarge +block-mud-xlarge rotate: false xy: 709, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-naval-factory-large +block-multi-press-large rotate: false - xy: 3356, 371 + xy: 2986, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-naval-factory-medium +block-multi-press-medium rotate: false - xy: 1027, 211 + xy: 2601, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-naval-factory-small +block-multi-press-small rotate: false - xy: 1838, 185 + xy: 3401, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-naval-factory-tiny +block-multi-press-tiny rotate: false - xy: 2627, 154 + xy: 3053, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-naval-factory-xlarge +block-multi-press-xlarge rotate: false xy: 659, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-oil-extractor-large +block-multiplicative-reconstructor-large rotate: false - xy: 3314, 329 + xy: 3028, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-oil-extractor-medium +block-multiplicative-reconstructor-medium rotate: false - xy: 1061, 211 + xy: 2635, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-oil-extractor-small +block-multiplicative-reconstructor-small rotate: false - xy: 1838, 159 + xy: 3427, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-oil-extractor-tiny +block-multiplicative-reconstructor-tiny rotate: false - xy: 2638, 136 + xy: 3053, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-oil-extractor-xlarge +block-multiplicative-reconstructor-xlarge rotate: false xy: 709, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ore-coal-large +block-naval-factory-large rotate: false - xy: 3398, 371 + xy: 3070, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ore-coal-medium +block-naval-factory-medium rotate: false - xy: 1095, 211 + xy: 2669, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-coal-small +block-naval-factory-small rotate: false - xy: 1812, 133 + xy: 3453, 89 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ore-coal-tiny +block-naval-factory-tiny rotate: false - xy: 2638, 118 + xy: 3074, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ore-coal-xlarge +block-naval-factory-xlarge rotate: false xy: 709, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ore-copper-large +block-oil-extractor-large rotate: false - xy: 3356, 329 + xy: 3112, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ore-copper-medium +block-oil-extractor-medium rotate: false - xy: 1129, 211 + xy: 2703, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-copper-small +block-oil-extractor-small rotate: false - xy: 1864, 185 + xy: 3762, 160 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ore-copper-tiny +block-oil-extractor-tiny rotate: false - xy: 2638, 100 + xy: 3071, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ore-copper-xlarge +block-oil-extractor-xlarge rotate: false xy: 759, 304 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ore-lead-large +block-ore-coal-large rotate: false - xy: 3440, 371 + xy: 3154, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ore-lead-medium +block-ore-coal-medium rotate: false - xy: 1163, 211 + xy: 2737, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-lead-small +block-ore-coal-small rotate: false - xy: 1864, 159 + xy: 3788, 166 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ore-lead-tiny +block-ore-coal-tiny rotate: false - xy: 2638, 82 + xy: 3092, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ore-lead-xlarge +block-ore-coal-xlarge rotate: false xy: 759, 254 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ore-scrap-large +block-ore-copper-large rotate: false - xy: 3398, 329 + xy: 3196, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ore-scrap-medium +block-ore-copper-medium rotate: false - xy: 1197, 211 + xy: 2771, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-scrap-small +block-ore-copper-small rotate: false - xy: 1838, 133 + xy: 3034, 114 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ore-scrap-tiny +block-ore-copper-tiny rotate: false - xy: 2480, 96 + xy: 3071, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ore-scrap-xlarge +block-ore-copper-xlarge rotate: false xy: 759, 204 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ore-thorium-large +block-ore-lead-large rotate: false - xy: 3482, 371 + xy: 3238, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ore-thorium-medium +block-ore-lead-medium rotate: false - xy: 1231, 211 + xy: 2805, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-thorium-small +block-ore-lead-small rotate: false - xy: 1890, 185 + xy: 3060, 99 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ore-thorium-tiny +block-ore-lead-tiny rotate: false - xy: 2489, 78 + xy: 3089, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ore-thorium-xlarge +block-ore-lead-xlarge rotate: false xy: 809, 316 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-ore-titanium-large +block-ore-scrap-large rotate: false - xy: 3440, 329 + xy: 3280, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-ore-titanium-medium +block-ore-scrap-medium rotate: false - xy: 1265, 211 + xy: 2839, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-ore-titanium-small +block-ore-scrap-small rotate: false - xy: 1890, 159 + xy: 3567, 165 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-ore-titanium-tiny +block-ore-scrap-tiny rotate: false - xy: 2489, 60 + xy: 3110, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-ore-titanium-xlarge +block-ore-scrap-xlarge rotate: false xy: 809, 266 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-overdrive-dome-large +block-ore-thorium-large rotate: false - xy: 3524, 371 + xy: 3322, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-overdrive-dome-medium +block-ore-thorium-medium rotate: false - xy: 1299, 211 + xy: 2873, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-overdrive-dome-small +block-ore-thorium-small rotate: false - xy: 1864, 133 + xy: 3593, 159 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-overdrive-dome-tiny +block-ore-thorium-tiny rotate: false - xy: 2489, 42 + xy: 3089, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-overdrive-dome-xlarge +block-ore-thorium-xlarge rotate: false xy: 809, 216 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-overdrive-projector-large +block-ore-titanium-large rotate: false - xy: 3482, 329 + xy: 3364, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-overdrive-projector-medium +block-ore-titanium-medium rotate: false - xy: 1333, 211 + xy: 2907, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-overdrive-projector-small +block-ore-titanium-small rotate: false - xy: 1916, 185 + xy: 3619, 159 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-overdrive-projector-tiny +block-ore-titanium-tiny rotate: false - xy: 2489, 24 + xy: 3107, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-overdrive-projector-xlarge +block-ore-titanium-xlarge rotate: false xy: 809, 166 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-overflow-gate-large +block-overdrive-dome-large rotate: false - xy: 3566, 371 + xy: 3406, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-overflow-gate-medium +block-overdrive-dome-medium rotate: false - xy: 1367, 211 + xy: 2091, 117 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-overflow-gate-small +block-overdrive-dome-small rotate: false - xy: 1916, 159 + xy: 3479, 171 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-overflow-gate-tiny +block-overdrive-dome-tiny rotate: false - xy: 2498, 96 + xy: 3107, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-overflow-gate-xlarge +block-overdrive-dome-xlarge rotate: false xy: 281, 7 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-parallax-large +block-overdrive-projector-large rotate: false - xy: 3524, 329 + xy: 3448, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-parallax-medium +block-overdrive-projector-medium rotate: false - xy: 1401, 211 + xy: 2125, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-parallax-small +block-overdrive-projector-small rotate: false - xy: 1890, 133 + xy: 3505, 171 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-parallax-tiny +block-overdrive-projector-tiny rotate: false - xy: 2507, 78 + xy: 3125, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-parallax-xlarge +block-overdrive-projector-xlarge rotate: false xy: 331, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-payload-conveyor-large +block-overflow-gate-large rotate: false - xy: 3608, 371 + xy: 3490, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-payload-conveyor-medium +block-overflow-gate-medium rotate: false - xy: 1435, 211 + xy: 2159, 109 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-payload-conveyor-small +block-overflow-gate-small rotate: false - xy: 1942, 185 + xy: 3479, 145 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-payload-conveyor-tiny +block-overflow-gate-tiny rotate: false - xy: 2507, 60 + xy: 3125, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-payload-conveyor-xlarge +block-overflow-gate-xlarge rotate: false xy: 331, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-payload-router-large +block-parallax-large rotate: false - xy: 3566, 329 + xy: 3532, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-payload-router-medium +block-parallax-medium rotate: false - xy: 1469, 211 + xy: 2193, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-payload-router-small +block-parallax-small rotate: false - xy: 1942, 159 + xy: 3479, 119 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-payload-router-tiny +block-parallax-tiny rotate: false - xy: 2507, 42 + xy: 3143, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-payload-router-xlarge +block-parallax-xlarge rotate: false xy: 381, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-pebbles-large +block-payload-conveyor-large rotate: false - xy: 3650, 371 + xy: 3574, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-pebbles-medium +block-payload-conveyor-medium rotate: false - xy: 1503, 211 + xy: 2227, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-pebbles-small +block-payload-conveyor-small rotate: false - xy: 1916, 133 + xy: 3505, 145 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-pebbles-tiny +block-payload-conveyor-tiny rotate: false - xy: 2507, 24 + xy: 3143, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-pebbles-xlarge +block-payload-conveyor-xlarge rotate: false xy: 331, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phase-conduit-large +block-payload-router-large rotate: false - xy: 3608, 329 + xy: 3616, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-phase-conduit-medium +block-payload-router-medium rotate: false - xy: 1537, 211 + xy: 2261, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phase-conduit-small +block-payload-router-small rotate: false - xy: 1942, 133 + xy: 3479, 93 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phase-conduit-tiny +block-payload-router-tiny rotate: false - xy: 2516, 96 + xy: 3161, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phase-conduit-xlarge +block-payload-router-xlarge rotate: false xy: 381, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 -block-phase-conveyor-large +block-pebbles-large rotate: false - xy: 3650, 329 + xy: 3658, 329 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 -block-phase-conveyor-medium +block-pebbles-medium rotate: false - xy: 1571, 211 + xy: 2295, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 -block-phase-conveyor-small +block-pebbles-small rotate: false - xy: 1968, 159 + xy: 3505, 119 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 -block-phase-conveyor-tiny +block-pebbles-tiny rotate: false - xy: 2525, 78 + xy: 3161, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -block-phase-conveyor-xlarge +block-pebbles-xlarge rotate: false xy: 431, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 +block-phase-conduit-large + rotate: false + xy: 3700, 329 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-phase-conduit-medium + rotate: false + xy: 2329, 122 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-phase-conduit-small + rotate: false + xy: 3505, 93 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-phase-conduit-tiny + rotate: false + xy: 3179, 45 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-phase-conduit-xlarge + rotate: false + xy: 381, 54 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 +block-phase-conveyor-large + rotate: false + xy: 3742, 329 + size: 40, 40 + orig: 40, 40 + offset: 0, 0 + index: -1 +block-phase-conveyor-medium + rotate: false + xy: 2363, 122 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 +block-phase-conveyor-small + rotate: false + xy: 3531, 159 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 +block-phase-conveyor-tiny + rotate: false + xy: 3179, 27 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +block-phase-conveyor-xlarge + rotate: false + xy: 431, 104 + size: 48, 48 + orig: 48, 48 + offset: 0, 0 + index: -1 block-phase-wall-large rotate: false - xy: 959, 271 + xy: 1009, 230 size: 40, 40 orig: 40, 40 offset: 0, 0 @@ -17952,56 +19492,56 @@ block-phase-wall-large-large index: -1 block-phase-wall-large-medium rotate: false - xy: 1003, 177 + xy: 2397, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-wall-large-small rotate: false - xy: 1968, 133 + xy: 3531, 133 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-phase-wall-large-tiny rotate: false - xy: 2525, 60 + xy: 3197, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-phase-wall-large-xlarge rotate: false - xy: 381, 54 + xy: 481, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-phase-wall-medium rotate: false - xy: 1037, 177 + xy: 2431, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-wall-small rotate: false - xy: 1994, 151 + xy: 3531, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-phase-wall-tiny rotate: false - xy: 2525, 42 + xy: 3197, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-phase-wall-xlarge rotate: false - xy: 431, 104 + xy: 431, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -18015,28 +19555,28 @@ block-phase-weaver-large index: -1 block-phase-weaver-medium rotate: false - xy: 1071, 177 + xy: 2465, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-phase-weaver-small rotate: false - xy: 2020, 151 + xy: 3557, 139 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-phase-weaver-tiny rotate: false - xy: 2525, 24 + xy: 3215, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-phase-weaver-xlarge rotate: false - xy: 481, 154 + xy: 481, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -18050,3080 +19590,3080 @@ block-pine-large index: -1 block-pine-medium rotate: false - xy: 1105, 177 + xy: 2499, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pine-small rotate: false - xy: 2046, 151 + xy: 3557, 113 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-pine-tiny rotate: false - xy: 2534, 96 + xy: 3215, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-pine-xlarge rotate: false - xy: 431, 54 + xy: 531, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-plastanium-compressor-large rotate: false - xy: 3692, 335 + xy: 881, 129 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-plastanium-compressor-medium rotate: false - xy: 1139, 177 + xy: 2533, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-plastanium-compressor-small rotate: false - xy: 2072, 151 + xy: 3583, 133 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-plastanium-compressor-tiny rotate: false - xy: 2543, 78 + xy: 3233, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-plastanium-compressor-xlarge rotate: false - xy: 481, 104 + xy: 481, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-plastanium-conveyor-large rotate: false - xy: 909, 231 + xy: 881, 87 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-plastanium-conveyor-medium rotate: false - xy: 1173, 177 + xy: 2567, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-plastanium-conveyor-small rotate: false - xy: 2098, 151 + xy: 3609, 133 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-plastanium-conveyor-tiny rotate: false - xy: 2543, 60 + xy: 3233, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-plastanium-conveyor-xlarge rotate: false - xy: 531, 154 + xy: 531, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-plastanium-wall-large rotate: false - xy: 951, 229 + xy: 881, 45 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-plastanium-wall-large-large rotate: false - xy: 902, 189 + xy: 923, 131 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-plastanium-wall-large-medium rotate: false - xy: 1207, 177 + xy: 2601, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-plastanium-wall-large-small rotate: false - xy: 2124, 151 + xy: 3583, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-plastanium-wall-large-tiny rotate: false - xy: 2543, 42 + xy: 3251, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-plastanium-wall-large-xlarge rotate: false - xy: 481, 54 + xy: 581, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-plastanium-wall-medium rotate: false - xy: 1241, 177 + xy: 2635, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-plastanium-wall-small rotate: false - xy: 2150, 151 + xy: 3609, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-plastanium-wall-tiny rotate: false - xy: 2543, 24 + xy: 3251, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-plastanium-wall-xlarge rotate: false - xy: 531, 104 + xy: 531, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-plated-conduit-large rotate: false - xy: 944, 187 + xy: 923, 89 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-plated-conduit-medium rotate: false - xy: 1275, 177 + xy: 2669, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-plated-conduit-small rotate: false - xy: 2176, 151 + xy: 3531, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-plated-conduit-tiny rotate: false - xy: 2561, 79 + xy: 3269, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-plated-conduit-xlarge rotate: false - xy: 581, 154 + xy: 581, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-pneumatic-drill-large rotate: false - xy: 1004, 287 + xy: 923, 47 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-pneumatic-drill-medium rotate: false - xy: 1309, 177 + xy: 2703, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pneumatic-drill-small rotate: false - xy: 2202, 151 + xy: 3557, 87 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-pneumatic-drill-tiny rotate: false - xy: 2561, 61 + xy: 3269, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-pneumatic-drill-xlarge rotate: false - xy: 531, 54 + xy: 631, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-power-node-large rotate: false - xy: 1046, 287 + xy: 881, 3 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-power-node-large-large rotate: false - xy: 1088, 287 + xy: 923, 5 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-power-node-large-medium rotate: false - xy: 1343, 177 + xy: 2737, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-power-node-large-small rotate: false - xy: 2228, 151 + xy: 3583, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-power-node-large-tiny rotate: false - xy: 2579, 79 + xy: 3287, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-power-node-large-xlarge rotate: false - xy: 581, 104 + xy: 581, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-power-node-medium rotate: false - xy: 1377, 177 + xy: 2771, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-power-node-small rotate: false - xy: 2254, 151 + xy: 3609, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-power-node-tiny rotate: false - xy: 2561, 43 + xy: 3305, 47 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-power-node-xlarge rotate: false - xy: 631, 154 + xy: 631, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-power-source-large rotate: false - xy: 1130, 287 + xy: 959, 197 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-power-source-medium rotate: false - xy: 1411, 177 + xy: 2805, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-power-source-small rotate: false - xy: 2280, 151 + xy: 3557, 61 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-power-source-tiny rotate: false - xy: 2579, 61 + xy: 3287, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-power-source-xlarge rotate: false - xy: 581, 54 + xy: 681, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-power-void-large rotate: false - xy: 1172, 287 + xy: 1001, 188 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-power-void-medium rotate: false - xy: 1445, 177 + xy: 2839, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-power-void-small rotate: false - xy: 2306, 151 + xy: 3583, 55 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-power-void-tiny rotate: false - xy: 2597, 79 + xy: 3305, 29 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-power-void-xlarge rotate: false - xy: 631, 104 + xy: 631, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-pulse-conduit-large rotate: false - xy: 1214, 287 + xy: 1043, 188 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-pulse-conduit-medium rotate: false - xy: 1479, 177 + xy: 2873, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pulse-conduit-small rotate: false - xy: 1994, 125 + xy: 3609, 55 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-pulse-conduit-tiny rotate: false - xy: 2561, 25 + xy: 3323, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-pulse-conduit-xlarge rotate: false - xy: 681, 154 + xy: 681, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-pulverizer-large rotate: false - xy: 1256, 287 + xy: 1051, 230 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-pulverizer-medium rotate: false - xy: 1513, 177 + xy: 2907, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pulverizer-small rotate: false - xy: 2020, 125 + xy: 3635, 133 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-pulverizer-tiny rotate: false - xy: 2579, 43 + xy: 3341, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-pulverizer-xlarge rotate: false - xy: 631, 54 + xy: 731, 154 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-pyratite-mixer-large rotate: false - xy: 1298, 287 + xy: 1085, 188 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-pyratite-mixer-medium rotate: false - xy: 1547, 177 + xy: 2193, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-pyratite-mixer-small rotate: false - xy: 2046, 125 + xy: 3635, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-pyratite-mixer-tiny rotate: false - xy: 2597, 61 + xy: 3359, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-pyratite-mixer-xlarge rotate: false - xy: 681, 104 + xy: 681, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-repair-point-large rotate: false - xy: 1340, 287 + xy: 1054, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-repair-point-medium rotate: false - xy: 1581, 177 + xy: 2227, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-repair-point-small rotate: false - xy: 2072, 125 + xy: 3635, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-repair-point-tiny rotate: false - xy: 2615, 79 + xy: 3377, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-repair-point-xlarge rotate: false - xy: 731, 154 + xy: 731, 104 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-resupply-point-large rotate: false - xy: 1382, 287 + xy: 1096, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-resupply-point-medium rotate: false - xy: 1017, 143 + xy: 2261, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-resupply-point-small rotate: false - xy: 2098, 125 + xy: 3635, 55 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-resupply-point-tiny rotate: false - xy: 2579, 25 + xy: 3395, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-resupply-point-xlarge rotate: false - xy: 681, 54 + xy: 731, 54 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-ripple-large rotate: false - xy: 1424, 287 + xy: 1138, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-ripple-medium rotate: false - xy: 1017, 109 + xy: 2295, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-ripple-small rotate: false - xy: 2124, 125 + xy: 3645, 159 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-ripple-tiny rotate: false - xy: 2597, 43 + xy: 3413, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-ripple-xlarge rotate: false - xy: 731, 104 + xy: 331, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-rotary-pump-large rotate: false - xy: 1466, 287 + xy: 1180, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-rotary-pump-medium rotate: false - xy: 1051, 143 + xy: 2329, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-rotary-pump-small rotate: false - xy: 2150, 125 + xy: 3671, 159 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-rotary-pump-tiny rotate: false - xy: 2615, 61 + xy: 3431, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-rotary-pump-xlarge rotate: false - xy: 731, 54 + xy: 381, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-router-large rotate: false - xy: 1508, 287 + xy: 1222, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-router-medium rotate: false - xy: 1017, 75 + xy: 2363, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-router-small rotate: false - xy: 2176, 125 + xy: 3661, 133 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-router-tiny rotate: false - xy: 2597, 25 + xy: 3449, 45 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-router-xlarge rotate: false - xy: 331, 4 + xy: 431, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-rtg-generator-large rotate: false - xy: 1550, 287 + xy: 1264, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-rtg-generator-medium rotate: false - xy: 1051, 109 + xy: 2397, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-rtg-generator-small rotate: false - xy: 2202, 125 + xy: 3661, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-rtg-generator-tiny rotate: false - xy: 2615, 43 + xy: 3323, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-rtg-generator-xlarge rotate: false - xy: 381, 4 + xy: 481, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-salt-large rotate: false - xy: 1592, 287 + xy: 1306, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-salt-medium rotate: false - xy: 1085, 143 + xy: 2431, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-salt-small rotate: false - xy: 2228, 125 + xy: 3661, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-salt-tiny rotate: false - xy: 2615, 25 + xy: 3341, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-salt-wall-large rotate: false - xy: 1634, 287 + xy: 1348, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-salt-wall-medium rotate: false - xy: 1017, 41 + xy: 2465, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-salt-wall-small rotate: false - xy: 2254, 125 + xy: 3661, 55 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-salt-wall-tiny rotate: false - xy: 2633, 64 + xy: 3359, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-salt-wall-xlarge rotate: false - xy: 431, 4 + xy: 531, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-salt-xlarge rotate: false - xy: 481, 4 + xy: 581, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-salvo-large rotate: false - xy: 1676, 287 + xy: 1390, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-salvo-medium rotate: false - xy: 1051, 75 + xy: 2499, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-salvo-small rotate: false - xy: 2280, 125 + xy: 3697, 149 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-salvo-tiny rotate: false - xy: 2633, 46 + xy: 3377, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-salvo-xlarge rotate: false - xy: 531, 4 + xy: 631, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-sand-boulder-large rotate: false - xy: 1718, 287 + xy: 1432, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-sand-boulder-medium rotate: false - xy: 1085, 109 + xy: 2533, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-boulder-small rotate: false - xy: 2306, 125 + xy: 3687, 123 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-sand-boulder-tiny rotate: false - xy: 2633, 28 + xy: 3395, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-sand-boulder-xlarge rotate: false - xy: 581, 4 + xy: 681, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-sand-large rotate: false - xy: 1760, 287 + xy: 1474, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-sand-medium rotate: false - xy: 1119, 143 + xy: 2567, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-small rotate: false - xy: 2332, 124 + xy: 3687, 97 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-sand-tiny rotate: false - xy: 2489, 6 + xy: 3413, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-sand-wall-large rotate: false - xy: 1802, 287 + xy: 1516, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-sand-wall-medium rotate: false - xy: 1051, 41 + xy: 2601, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-wall-small rotate: false - xy: 1786, 107 + xy: 3687, 71 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-sand-wall-tiny rotate: false - xy: 2507, 6 + xy: 3431, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-sand-wall-xlarge rotate: false - xy: 631, 4 + xy: 731, 4 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-sand-water-large rotate: false - xy: 1844, 287 + xy: 1558, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-sand-water-medium rotate: false - xy: 1085, 75 + xy: 2635, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sand-water-small rotate: false - xy: 1812, 107 + xy: 3687, 45 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-sand-water-tiny rotate: false - xy: 2525, 6 + xy: 3449, 27 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-sand-water-xlarge rotate: false - xy: 681, 4 + xy: 781, 116 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-sand-xlarge rotate: false - xy: 731, 4 + xy: 781, 66 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-scatter-large rotate: false - xy: 1886, 287 + xy: 1600, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-scatter-medium rotate: false - xy: 1119, 109 + xy: 2669, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scatter-small rotate: false - xy: 1838, 107 + xy: 3713, 123 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-scatter-tiny rotate: false - xy: 2543, 6 + xy: 3305, 11 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-scatter-xlarge rotate: false - xy: 781, 116 + xy: 781, 16 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-scorch-large rotate: false - xy: 1928, 287 + xy: 1642, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-scorch-medium rotate: false - xy: 1153, 143 + xy: 2703, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scorch-small rotate: false - xy: 1864, 107 + xy: 3713, 97 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-scorch-tiny rotate: false - xy: 2561, 7 + xy: 3323, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-scorch-xlarge rotate: false - xy: 781, 66 + xy: 831, 116 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-scrap-wall-gigantic-large rotate: false - xy: 1970, 287 + xy: 1684, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-scrap-wall-gigantic-medium rotate: false - xy: 1085, 41 + xy: 2737, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-gigantic-small rotate: false - xy: 1890, 107 + xy: 3713, 71 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-scrap-wall-gigantic-tiny rotate: false - xy: 2579, 7 + xy: 3341, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-scrap-wall-gigantic-xlarge rotate: false - xy: 781, 16 + xy: 831, 66 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-scrap-wall-huge-large rotate: false - xy: 2012, 287 + xy: 1726, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-scrap-wall-huge-medium rotate: false - xy: 1119, 75 + xy: 2771, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-huge-small rotate: false - xy: 1916, 107 + xy: 3713, 45 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-scrap-wall-huge-tiny rotate: false - xy: 2597, 7 + xy: 3359, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-scrap-wall-huge-xlarge rotate: false - xy: 831, 116 + xy: 831, 16 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-scrap-wall-large rotate: false - xy: 2054, 287 + xy: 1768, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-scrap-wall-large-large rotate: false - xy: 2096, 287 + xy: 1810, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-scrap-wall-large-medium rotate: false - xy: 1153, 109 + xy: 2805, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-large-small rotate: false - xy: 1942, 107 + xy: 3739, 134 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-scrap-wall-large-tiny rotate: false - xy: 2615, 7 + xy: 3377, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-scrap-wall-large-xlarge rotate: false - xy: 831, 66 + xy: 859, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-scrap-wall-medium rotate: false - xy: 1187, 143 + xy: 2839, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-scrap-wall-small rotate: false - xy: 1968, 107 + xy: 3739, 108 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-scrap-wall-tiny rotate: false - xy: 2633, 10 + xy: 3395, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-scrap-wall-xlarge rotate: false - xy: 831, 16 + xy: 909, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-segment-large rotate: false - xy: 2138, 287 + xy: 1852, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-segment-medium rotate: false - xy: 1119, 41 + xy: 2873, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-segment-small rotate: false - xy: 1783, 81 + xy: 3739, 82 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-segment-tiny rotate: false - xy: 2651, 64 + xy: 3413, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-segment-xlarge rotate: false - xy: 859, 413 + xy: 959, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-separator-large rotate: false - xy: 2180, 287 + xy: 1894, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-separator-medium rotate: false - xy: 1153, 75 + xy: 2907, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-separator-small rotate: false - xy: 1783, 55 + xy: 3739, 56 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-separator-tiny rotate: false - xy: 2651, 46 + xy: 3431, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-separator-xlarge rotate: false - xy: 909, 413 + xy: 1009, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-shale-boulder-large rotate: false - xy: 2222, 287 + xy: 1936, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-shale-boulder-medium rotate: false - xy: 1187, 109 + xy: 1853, 183 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-boulder-small rotate: false - xy: 1809, 81 + xy: 3765, 134 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-shale-boulder-tiny rotate: false - xy: 2651, 28 + xy: 3449, 9 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-shale-boulder-xlarge rotate: false - xy: 959, 413 + xy: 1059, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-shale-large rotate: false - xy: 2264, 287 + xy: 1978, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-shale-medium rotate: false - xy: 1221, 143 + xy: 1887, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-small rotate: false - xy: 1809, 55 + xy: 3765, 108 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-shale-tiny rotate: false - xy: 2651, 10 + xy: 3467, 23 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-shale-wall-large rotate: false - xy: 2306, 287 + xy: 2020, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-shale-wall-medium rotate: false - xy: 1153, 41 + xy: 1921, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shale-wall-small rotate: false - xy: 1835, 81 + xy: 3765, 82 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-shale-wall-tiny rotate: false - xy: 2645, 201 + xy: 3485, 23 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-shale-wall-xlarge rotate: false - xy: 1009, 413 + xy: 1109, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-shale-xlarge rotate: false - xy: 1059, 413 + xy: 1159, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-shock-mine-large rotate: false - xy: 2348, 287 + xy: 2062, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-shock-mine-medium rotate: false - xy: 1187, 75 + xy: 1955, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shock-mine-small rotate: false - xy: 1835, 55 + xy: 3765, 56 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-shock-mine-tiny rotate: false - xy: 2627, 201 + xy: 3467, 5 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-shock-mine-xlarge rotate: false - xy: 1109, 413 + xy: 1209, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-shrubs-large rotate: false - xy: 2390, 287 + xy: 2104, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-shrubs-medium rotate: false - xy: 1221, 109 + xy: 1989, 151 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-shrubs-small rotate: false - xy: 1861, 81 + xy: 3791, 140 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-shrubs-tiny rotate: false - xy: 2645, 183 + xy: 3485, 5 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-shrubs-xlarge rotate: false - xy: 1159, 413 + xy: 1259, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-silicon-crucible-large rotate: false - xy: 2432, 287 + xy: 2146, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-silicon-crucible-medium rotate: false - xy: 1255, 143 + xy: 2023, 118 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-silicon-crucible-small rotate: false - xy: 1861, 55 + xy: 3791, 114 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-silicon-crucible-tiny rotate: false - xy: 2645, 165 + xy: 3503, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-silicon-crucible-xlarge rotate: false - xy: 1209, 413 + xy: 1309, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-silicon-smelter-large rotate: false - xy: 2474, 287 + xy: 2188, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-silicon-smelter-medium rotate: false - xy: 1187, 41 + xy: 2057, 101 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-silicon-smelter-small rotate: false - xy: 1887, 81 + xy: 3791, 88 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-silicon-smelter-tiny rotate: false - xy: 2663, 193 + xy: 3862, 303 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-silicon-smelter-xlarge rotate: false - xy: 1259, 413 + xy: 1359, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-slag-large rotate: false - xy: 2516, 287 + xy: 2230, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-slag-medium rotate: false - xy: 1221, 75 + xy: 2091, 83 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-slag-small rotate: false - xy: 1887, 55 + xy: 3791, 62 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-slag-tiny rotate: false - xy: 2681, 193 + xy: 3862, 285 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-slag-xlarge rotate: false - xy: 1309, 413 + xy: 1409, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snow-boulder-large rotate: false - xy: 2558, 287 + xy: 2272, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-snow-boulder-medium rotate: false - xy: 1255, 109 + xy: 2125, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-boulder-small rotate: false - xy: 1913, 81 + xy: 3739, 30 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-snow-boulder-tiny rotate: false - xy: 2663, 175 + xy: 4043, 292 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-snow-boulder-xlarge rotate: false - xy: 1359, 413 + xy: 1459, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snow-large rotate: false - xy: 2600, 287 + xy: 2314, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-snow-medium rotate: false - xy: 1289, 143 + xy: 2159, 75 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-pine-large rotate: false - xy: 2642, 287 + xy: 2356, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-snow-pine-medium rotate: false - xy: 1221, 41 + xy: 2193, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-pine-small rotate: false - xy: 1913, 55 + xy: 3765, 30 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-snow-pine-tiny rotate: false - xy: 2699, 193 + xy: 4043, 274 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-snow-pine-xlarge rotate: false - xy: 1409, 413 + xy: 1509, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snow-small rotate: false - xy: 1939, 81 + xy: 3791, 36 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-snow-tiny rotate: false - xy: 2681, 175 + xy: 4061, 292 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-snow-wall-large rotate: false - xy: 2684, 287 + xy: 2398, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-snow-wall-medium rotate: false - xy: 1255, 75 + xy: 2227, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-snow-wall-small rotate: false - xy: 1939, 55 + xy: 3791, 10 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-snow-wall-tiny rotate: false - xy: 2717, 193 + xy: 4079, 292 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-snow-wall-xlarge rotate: false - xy: 1459, 413 + xy: 1559, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-snow-xlarge rotate: false - xy: 1509, 413 + xy: 1609, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-solar-panel-large rotate: false - xy: 2726, 287 + xy: 2440, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-solar-panel-large-large rotate: false - xy: 2768, 287 + xy: 2482, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-solar-panel-large-medium rotate: false - xy: 1289, 109 + xy: 2261, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-solar-panel-large-small rotate: false - xy: 1965, 81 + xy: 3784, 345 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-solar-panel-large-tiny rotate: false - xy: 2699, 175 + xy: 4043, 256 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-solar-panel-large-xlarge rotate: false - xy: 1559, 413 + xy: 1659, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-solar-panel-medium rotate: false - xy: 1323, 143 + xy: 2295, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-solar-panel-small rotate: false - xy: 1965, 55 + xy: 3784, 319 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-solar-panel-tiny rotate: false - xy: 2717, 175 + xy: 4061, 274 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-solar-panel-xlarge rotate: false - xy: 1609, 413 + xy: 1709, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-sorter-large rotate: false - xy: 2810, 287 + xy: 2524, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-sorter-medium rotate: false - xy: 1255, 41 + xy: 2329, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-sorter-small rotate: false - xy: 1994, 99 + xy: 3810, 351 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-sorter-tiny rotate: false - xy: 2663, 157 + xy: 4079, 274 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-sorter-xlarge rotate: false - xy: 1659, 413 + xy: 1759, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-space-large rotate: false - xy: 2852, 287 + xy: 2566, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-space-medium rotate: false - xy: 1289, 75 + xy: 2363, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-space-small rotate: false - xy: 2020, 99 + xy: 3810, 325 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-space-tiny rotate: false - xy: 2681, 157 + xy: 4043, 238 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-space-xlarge rotate: false - xy: 1709, 413 + xy: 1809, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-spawn-large rotate: false - xy: 2894, 287 + xy: 2608, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spawn-medium rotate: false - xy: 1323, 109 + xy: 2397, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spawn-small rotate: false - xy: 2046, 99 + xy: 3810, 299 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-spawn-tiny rotate: false - xy: 2699, 157 + xy: 4061, 256 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-spawn-xlarge rotate: false - xy: 1759, 413 + xy: 1859, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-spectre-large rotate: false - xy: 2936, 287 + xy: 2650, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spectre-medium rotate: false - xy: 1357, 143 + xy: 2431, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spectre-small rotate: false - xy: 2072, 99 + xy: 3810, 273 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-spectre-tiny rotate: false - xy: 2717, 157 + xy: 4079, 256 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-spectre-xlarge rotate: false - xy: 1809, 413 + xy: 1909, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-spore-cluster-large rotate: false - xy: 2978, 287 + xy: 2692, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-cluster-medium rotate: false - xy: 1289, 41 + xy: 2465, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-cluster-small rotate: false - xy: 2098, 99 + xy: 3805, 247 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-spore-cluster-tiny rotate: false - xy: 2735, 172 + xy: 4043, 220 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-spore-cluster-xlarge rotate: false - xy: 1859, 413 + xy: 1959, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-spore-moss-large rotate: false - xy: 3020, 287 + xy: 2734, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-moss-medium rotate: false - xy: 1323, 75 + xy: 2499, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-moss-small rotate: false - xy: 2124, 99 + xy: 3805, 221 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-spore-moss-tiny rotate: false - xy: 2753, 172 + xy: 4061, 238 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-spore-moss-xlarge rotate: false - xy: 1909, 413 + xy: 2009, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-spore-pine-large rotate: false - xy: 3062, 287 + xy: 2776, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-pine-medium rotate: false - xy: 1357, 109 + xy: 2533, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-pine-small rotate: false - xy: 2150, 99 + xy: 3086, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-spore-pine-tiny rotate: false - xy: 2771, 172 + xy: 4079, 238 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-spore-pine-xlarge rotate: false - xy: 1959, 413 + xy: 2059, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-spore-press-large rotate: false - xy: 3104, 287 + xy: 2818, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-press-medium rotate: false - xy: 1391, 143 + xy: 2567, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-press-small rotate: false - xy: 2176, 99 + xy: 3112, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-spore-press-tiny rotate: false - xy: 2789, 172 + xy: 4043, 202 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-spore-press-xlarge rotate: false - xy: 2009, 413 + xy: 2109, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-spore-wall-large rotate: false - xy: 3146, 287 + xy: 2860, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-spore-wall-medium rotate: false - xy: 1323, 41 + xy: 2601, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-spore-wall-small rotate: false - xy: 2202, 99 + xy: 3831, 247 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-spore-wall-tiny rotate: false - xy: 2807, 172 + xy: 4061, 220 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-spore-wall-xlarge rotate: false - xy: 2059, 413 + xy: 2159, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-steam-generator-large rotate: false - xy: 3188, 287 + xy: 2902, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-steam-generator-medium rotate: false - xy: 1357, 75 + xy: 2635, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-steam-generator-small rotate: false - xy: 2228, 99 + xy: 3831, 221 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-steam-generator-tiny rotate: false - xy: 2825, 172 + xy: 4079, 220 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-steam-generator-xlarge rotate: false - xy: 2109, 413 + xy: 2209, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-stone-large rotate: false - xy: 3230, 287 + xy: 2944, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-stone-medium rotate: false - xy: 1391, 109 + xy: 2669, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-stone-small rotate: false - xy: 2254, 99 + xy: 3138, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-stone-tiny rotate: false - xy: 2843, 172 + xy: 4043, 184 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-stone-wall-large rotate: false - xy: 3272, 287 + xy: 2986, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-stone-wall-medium rotate: false - xy: 1425, 143 + xy: 2703, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-stone-wall-small rotate: false - xy: 2280, 99 + xy: 3164, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-stone-wall-tiny rotate: false - xy: 2861, 172 + xy: 4061, 202 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-stone-wall-xlarge rotate: false - xy: 2159, 413 + xy: 2259, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-stone-xlarge rotate: false - xy: 2209, 413 + xy: 2309, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-surge-tower-large rotate: false - xy: 3314, 287 + xy: 3028, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-surge-tower-medium rotate: false - xy: 1357, 41 + xy: 2737, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-surge-tower-small rotate: false - xy: 2306, 99 + xy: 3190, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-surge-tower-tiny rotate: false - xy: 2879, 172 + xy: 4079, 202 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-surge-tower-xlarge rotate: false - xy: 2259, 413 + xy: 2359, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-surge-wall-large rotate: false - xy: 3356, 287 + xy: 3070, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-surge-wall-large-large rotate: false - xy: 3398, 287 + xy: 3112, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-surge-wall-large-medium rotate: false - xy: 1391, 75 + xy: 2771, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-surge-wall-large-small rotate: false - xy: 2332, 98 + xy: 3216, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-surge-wall-large-tiny rotate: false - xy: 2897, 172 + xy: 4061, 184 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-surge-wall-large-xlarge rotate: false - xy: 2309, 413 + xy: 2409, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-surge-wall-medium rotate: false - xy: 1425, 109 + xy: 2805, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-surge-wall-small rotate: false - xy: 1991, 73 + xy: 3242, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-surge-wall-tiny rotate: false - xy: 2915, 172 + xy: 4079, 184 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-surge-wall-xlarge rotate: false - xy: 2359, 413 + xy: 2459, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-swarmer-large rotate: false - xy: 3440, 287 + xy: 3154, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-swarmer-medium rotate: false - xy: 1459, 143 + xy: 2839, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-swarmer-small rotate: false - xy: 2017, 73 + xy: 3268, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-swarmer-tiny rotate: false - xy: 2933, 172 + xy: 4043, 166 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-swarmer-xlarge rotate: false - xy: 2409, 413 + xy: 2509, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-switch-large rotate: false - xy: 3482, 287 + xy: 3196, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-switch-medium rotate: false - xy: 1391, 41 + xy: 2873, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-switch-small rotate: false - xy: 2043, 73 + xy: 3297, 65 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-switch-tiny rotate: false - xy: 2951, 172 + xy: 4061, 166 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-switch-xlarge rotate: false - xy: 2459, 413 + xy: 2559, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-tainted-water-large rotate: false - xy: 3524, 287 + xy: 3238, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-tainted-water-medium rotate: false - xy: 1425, 75 + xy: 2907, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-tainted-water-small rotate: false - xy: 2069, 73 + xy: 3323, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-tainted-water-tiny rotate: false - xy: 2969, 172 + xy: 4079, 166 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-tainted-water-xlarge rotate: false - xy: 2509, 413 + xy: 2609, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-tar-large rotate: false - xy: 3566, 287 + xy: 3280, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-tar-medium rotate: false - xy: 1459, 109 + xy: 1505, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-tar-small rotate: false - xy: 2095, 73 + xy: 3349, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-tar-tiny rotate: false - xy: 2987, 172 + xy: 2007, 100 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-tar-xlarge rotate: false - xy: 2559, 413 + xy: 2659, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-tendrils-large rotate: false - xy: 3608, 287 + xy: 3322, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-tendrils-medium rotate: false - xy: 1493, 143 + xy: 1539, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-tendrils-small rotate: false - xy: 2121, 73 + xy: 3375, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-tendrils-tiny rotate: false - xy: 3005, 172 + xy: 2025, 100 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-tendrils-xlarge rotate: false - xy: 2609, 413 + xy: 2709, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-tetrative-reconstructor-large rotate: false - xy: 3650, 287 + xy: 3364, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-tetrative-reconstructor-medium rotate: false - xy: 1425, 41 + xy: 1573, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-tetrative-reconstructor-small rotate: false - xy: 2147, 73 + xy: 3401, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-tetrative-reconstructor-tiny rotate: false - xy: 3023, 172 + xy: 2007, 82 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-tetrative-reconstructor-xlarge rotate: false - xy: 2659, 413 + xy: 2759, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-thermal-generator-large rotate: false - xy: 3692, 293 + xy: 3406, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-thermal-generator-medium rotate: false - xy: 1459, 75 + xy: 1607, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-thermal-generator-small rotate: false - xy: 2173, 73 + xy: 3427, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-thermal-generator-tiny rotate: false - xy: 3041, 172 + xy: 2025, 82 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-thermal-generator-xlarge rotate: false - xy: 2709, 413 + xy: 2809, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-thermal-pump-large rotate: false - xy: 3734, 323 + xy: 3448, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-thermal-pump-medium rotate: false - xy: 1493, 109 + xy: 1641, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-thermal-pump-small rotate: false - xy: 2199, 73 + xy: 3453, 63 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-thermal-pump-tiny rotate: false - xy: 3059, 172 + xy: 2043, 83 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-thermal-pump-xlarge rotate: false - xy: 2759, 413 + xy: 2859, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-thorium-reactor-large rotate: false - xy: 3734, 281 + xy: 3490, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-thorium-reactor-medium rotate: false - xy: 1527, 143 + xy: 1675, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-thorium-reactor-small rotate: false - xy: 2225, 73 + xy: 3479, 67 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-thorium-reactor-tiny rotate: false - xy: 3077, 172 + xy: 2061, 83 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-thorium-reactor-xlarge rotate: false - xy: 2809, 413 + xy: 2909, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-thorium-wall-large rotate: false - xy: 3692, 251 + xy: 3532, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-thorium-wall-large-large rotate: false - xy: 3734, 239 + xy: 3574, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-thorium-wall-large-medium rotate: false - xy: 1459, 41 + xy: 1709, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-thorium-wall-large-small rotate: false - xy: 2251, 73 + xy: 3505, 67 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-thorium-wall-large-tiny rotate: false - xy: 3095, 172 + xy: 1231, 151 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-thorium-wall-large-xlarge rotate: false - xy: 2859, 413 + xy: 2959, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-thorium-wall-medium rotate: false - xy: 1493, 75 + xy: 1743, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-thorium-wall-small rotate: false - xy: 2277, 73 + xy: 3531, 55 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-thorium-wall-tiny rotate: false - xy: 3113, 172 + xy: 1249, 151 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-thorium-wall-xlarge rotate: false - xy: 2909, 413 + xy: 3009, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-thruster-large rotate: false - xy: 1001, 245 + xy: 3616, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-thruster-medium rotate: false - xy: 1527, 109 + xy: 1777, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-thruster-small rotate: false - xy: 2303, 73 + xy: 3557, 35 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-thruster-tiny rotate: false - xy: 3131, 172 + xy: 1231, 133 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-thruster-xlarge rotate: false - xy: 2959, 413 + xy: 3059, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-titanium-conveyor-large rotate: false - xy: 1043, 245 + xy: 3658, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-titanium-conveyor-medium rotate: false - xy: 1561, 143 + xy: 1811, 177 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-titanium-conveyor-small rotate: false - xy: 2329, 72 + xy: 3583, 29 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-titanium-conveyor-tiny rotate: false - xy: 3149, 172 + xy: 1231, 115 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-titanium-conveyor-xlarge rotate: false - xy: 3009, 413 + xy: 3109, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-titanium-wall-large rotate: false - xy: 1085, 245 + xy: 3700, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-titanium-wall-large-large rotate: false - xy: 1127, 245 + xy: 3742, 287 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-titanium-wall-large-medium rotate: false - xy: 1493, 41 + xy: 1497, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-titanium-wall-large-small rotate: false - xy: 1991, 47 + xy: 3609, 29 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-titanium-wall-large-tiny rotate: false - xy: 3167, 172 + xy: 1249, 133 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-titanium-wall-large-xlarge rotate: false - xy: 3059, 413 + xy: 3159, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-titanium-wall-medium rotate: false - xy: 1527, 75 + xy: 1531, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-titanium-wall-small rotate: false - xy: 2017, 47 + xy: 3635, 29 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-titanium-wall-tiny rotate: false - xy: 3185, 172 + xy: 1231, 97 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-titanium-wall-xlarge rotate: false - xy: 3109, 413 + xy: 3209, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-tsunami-large rotate: false - xy: 1169, 245 + xy: 1093, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-tsunami-medium rotate: false - xy: 1561, 109 + xy: 1565, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-tsunami-small rotate: false - xy: 2043, 47 + xy: 3661, 29 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-tsunami-tiny rotate: false - xy: 3203, 172 + xy: 1231, 79 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-tsunami-xlarge rotate: false - xy: 3159, 413 + xy: 3259, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-underflow-gate-large rotate: false - xy: 1211, 245 + xy: 1135, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-underflow-gate-medium rotate: false - xy: 1527, 41 + xy: 1599, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-underflow-gate-small rotate: false - xy: 2069, 47 + xy: 3687, 19 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-underflow-gate-tiny rotate: false - xy: 3221, 172 + xy: 1249, 115 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-underflow-gate-xlarge rotate: false - xy: 3209, 413 + xy: 3309, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-unloader-large rotate: false - xy: 1253, 245 + xy: 1177, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-unloader-medium rotate: false - xy: 1561, 75 + xy: 1633, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-unloader-small rotate: false - xy: 2095, 47 + xy: 3713, 19 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-unloader-tiny rotate: false - xy: 3239, 172 + xy: 1231, 61 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-unloader-xlarge rotate: false - xy: 3259, 413 + xy: 3359, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-vault-large rotate: false - xy: 1295, 245 + xy: 1219, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-vault-medium rotate: false - xy: 1561, 41 + xy: 1667, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-vault-small rotate: false - xy: 2121, 47 + xy: 3739, 4 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-vault-tiny rotate: false - xy: 3257, 172 + xy: 1249, 97 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-vault-xlarge rotate: false - xy: 3309, 413 + xy: 3409, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-water-extractor-large rotate: false - xy: 1337, 245 + xy: 1261, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-water-extractor-medium rotate: false - xy: 1017, 7 + xy: 1701, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-water-extractor-small rotate: false - xy: 2147, 47 + xy: 3765, 4 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-water-extractor-tiny rotate: false - xy: 3275, 172 + xy: 1249, 79 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-water-extractor-xlarge rotate: false - xy: 3359, 413 + xy: 3459, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-water-large rotate: false - xy: 1379, 245 + xy: 1303, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-water-medium rotate: false - xy: 1051, 7 + xy: 1735, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-water-small rotate: false - xy: 2173, 47 + xy: 3005, 107 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-water-tiny rotate: false - xy: 3293, 172 + xy: 1231, 43 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-water-xlarge rotate: false - xy: 3409, 413 + xy: 3509, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-wave-large rotate: false - xy: 1421, 245 + xy: 1345, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-wave-medium rotate: false - xy: 1085, 7 + xy: 1769, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-wave-small rotate: false - xy: 2199, 47 + xy: 3004, 81 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-wave-tiny rotate: false - xy: 3311, 172 + xy: 1249, 61 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-wave-xlarge rotate: false - xy: 3459, 413 + xy: 3559, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-white-tree-dead-large rotate: false - xy: 1463, 245 + xy: 1387, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-white-tree-dead-medium rotate: false - xy: 1119, 7 + xy: 1803, 143 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-white-tree-dead-small rotate: false - xy: 2225, 47 + xy: 3001, 55 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-white-tree-dead-tiny rotate: false - xy: 3329, 172 + xy: 1231, 25 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-white-tree-dead-xlarge rotate: false - xy: 3509, 413 + xy: 3609, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 block-white-tree-large rotate: false - xy: 1505, 245 + xy: 1429, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 block-white-tree-medium rotate: false - xy: 1153, 7 + xy: 965, 163 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-white-tree-small rotate: false - xy: 2251, 47 + xy: 3001, 29 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-white-tree-tiny rotate: false - xy: 3347, 172 + xy: 1249, 43 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-white-tree-xlarge rotate: false - xy: 3559, 413 + xy: 3659, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 button rotate: false - xy: 2989, 258 + xy: 2527, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21195,7 +22735,7 @@ button-edge-over-4 index: -1 button-over rotate: false - xy: 4059, 281 + xy: 2185, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21203,7 +22743,7 @@ button-over index: -1 button-red rotate: false - xy: 4059, 252 + xy: 2223, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21211,7 +22751,7 @@ button-red index: -1 button-right rotate: false - xy: 2799, 258 + xy: 2337, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21219,7 +22759,7 @@ button-right index: -1 button-right-down rotate: false - xy: 2723, 258 + xy: 2261, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21227,7 +22767,7 @@ button-right-down index: -1 button-right-over rotate: false - xy: 2761, 258 + xy: 2299, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21235,7 +22775,7 @@ button-right-over index: -1 button-select rotate: false - xy: 2277, 47 + xy: 3479, 41 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -21243,7 +22783,7 @@ button-select index: -1 button-square rotate: false - xy: 2913, 258 + xy: 2451, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21251,7 +22791,7 @@ button-square index: -1 button-square-down rotate: false - xy: 2837, 258 + xy: 2375, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21259,7 +22799,7 @@ button-square-down index: -1 button-square-over rotate: false - xy: 2875, 258 + xy: 2413, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21267,7 +22807,7 @@ button-square-over index: -1 button-trans rotate: false - xy: 2951, 258 + xy: 2489, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21275,42 +22815,42 @@ button-trans index: -1 check-disabled rotate: false - xy: 1187, 7 + xy: 965, 129 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-off rotate: false - xy: 1221, 7 + xy: 965, 95 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 1255, 7 + xy: 965, 61 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-disabled rotate: false - xy: 1289, 7 + xy: 965, 27 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 1323, 7 + xy: 999, 154 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 1357, 7 + xy: 1033, 154 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -21324,14 +22864,14 @@ clear index: -1 crater rotate: false - xy: 1789, 1 + xy: 3479, 199 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 cursor rotate: false - xy: 2003, 247 + xy: 1881, 177 size: 4, 4 orig: 4, 4 offset: 0, 0 @@ -21345,7 +22885,7 @@ discord-banner index: -1 flat-down-base rotate: false - xy: 3027, 258 + xy: 2565, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21360,7 +22900,7 @@ info-banner index: -1 inventory rotate: false - xy: 3835, 271 + xy: 3505, 25 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 @@ -21368,147 +22908,147 @@ inventory index: -1 item-blast-compound-icon rotate: false - xy: 1391, 7 + xy: 999, 120 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-coal-icon rotate: false - xy: 1425, 7 + xy: 1067, 154 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-copper-icon rotate: false - xy: 1459, 7 + xy: 999, 86 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-graphite-icon rotate: false - xy: 1493, 7 + xy: 1033, 120 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-lead-icon rotate: false - xy: 1527, 7 + xy: 999, 52 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-metaglass-icon rotate: false - xy: 1561, 7 + xy: 1033, 86 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-phase-fabric-icon rotate: false - xy: 1595, 143 + xy: 1067, 120 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-plastanium-icon rotate: false - xy: 1595, 109 + xy: 1033, 52 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-pyratite-icon rotate: false - xy: 1595, 75 + xy: 1067, 86 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-sand-icon rotate: false - xy: 1595, 41 + xy: 1067, 52 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-scrap-icon rotate: false - xy: 1595, 7 + xy: 999, 18 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-silicon-icon rotate: false - xy: 1615, 177 + xy: 1033, 18 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-spore-pod-icon rotate: false - xy: 1629, 143 + xy: 1067, 18 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-surge-alloy-icon rotate: false - xy: 1629, 109 + xy: 2941, 156 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-thorium-icon rotate: false - xy: 1629, 75 + xy: 2941, 122 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-titanium-icon rotate: false - xy: 1629, 41 + xy: 2941, 88 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-cryofluid-icon rotate: false - xy: 1629, 7 + xy: 2941, 54 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-oil-icon rotate: false - xy: 1649, 179 + xy: 3090, 211 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-slag-icon rotate: false - xy: 1663, 145 + xy: 3125, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-water-icon rotate: false - xy: 1663, 111 + xy: 3159, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 logic-node rotate: false - xy: 1663, 77 + xy: 3193, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -21529,7 +23069,7 @@ nomap index: -1 pane rotate: false - xy: 3103, 258 + xy: 2641, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21537,7 +23077,7 @@ pane index: -1 pane-2 rotate: false - xy: 3065, 258 + xy: 2603, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21545,7 +23085,7 @@ pane-2 index: -1 scroll rotate: false - xy: 2303, 36 + xy: 3836, 273 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -21553,7 +23093,7 @@ scroll index: -1 scroll-horizontal rotate: false - xy: 3407, 261 + xy: 2945, 261 size: 35, 24 split: 6, 5, 10, 10 orig: 35, 24 @@ -21561,56 +23101,56 @@ scroll-horizontal index: -1 scroll-knob-horizontal-black rotate: false - xy: 859, 172 + xy: 1471, 261 size: 40, 24 orig: 40, 24 offset: 0, 0 index: -1 scroll-knob-vertical-black rotate: false - xy: 3861, 271 + xy: 3531, 13 size: 24, 40 orig: 24, 40 offset: 0, 0 index: -1 scroll-knob-vertical-thin rotate: false - xy: 3995, 271 + xy: 845, 379 size: 12, 40 orig: 12, 40 offset: 0, 0 index: -1 selection rotate: false - xy: 1001, 310 + xy: 821, 463 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 slider rotate: false - xy: 3689, 277 + xy: 3001, 81 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 3489, 197 + xy: 2951, 221 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 3520, 197 + xy: 2982, 205 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 3489, 157 + xy: 3013, 205 size: 29, 38 orig: 29, 38 offset: 0, 0 @@ -21624,7 +23164,7 @@ slider-vertical index: -1 underline rotate: false - xy: 3293, 258 + xy: 2831, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21632,7 +23172,7 @@ underline index: -1 underline-2 rotate: false - xy: 3141, 258 + xy: 2679, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21640,7 +23180,7 @@ underline-2 index: -1 underline-disabled rotate: false - xy: 3179, 258 + xy: 2717, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21648,7 +23188,7 @@ underline-disabled index: -1 underline-red rotate: false - xy: 3217, 258 + xy: 2755, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21656,7 +23196,7 @@ underline-red index: -1 underline-white rotate: false - xy: 3255, 258 + xy: 2793, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -21664,35 +23204,35 @@ underline-white index: -1 unit-alpha-large rotate: false - xy: 1547, 245 + xy: 1127, 203 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-alpha-medium rotate: false - xy: 1663, 43 + xy: 3227, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-alpha-small rotate: false - xy: 2329, 46 + xy: 3557, 9 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-alpha-tiny rotate: false - xy: 3365, 172 + xy: 1249, 25 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-alpha-xlarge rotate: false - xy: 3609, 413 + xy: 3709, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 @@ -21706,189 +23246,189 @@ unit-antumbra-large index: -1 unit-antumbra-medium rotate: false - xy: 3776, 271 + xy: 3044, 203 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 unit-antumbra-small rotate: false - xy: 257, 20 + xy: 2951, 195 size: 21, 24 orig: 21, 24 offset: 0, 0 index: -1 unit-antumbra-tiny rotate: false - xy: 2623, 219 + xy: 3723, 1 size: 14, 16 orig: 14, 16 offset: 0, 0 index: -1 unit-antumbra-xlarge rotate: false - xy: 959, 363 + xy: 909, 173 size: 43, 48 orig: 43, 48 offset: 0, 0 index: -1 unit-arkyid-large rotate: false - xy: 1589, 245 + xy: 1169, 203 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-arkyid-medium rotate: false - xy: 1663, 9 + xy: 3261, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-arkyid-small rotate: false - xy: 2358, 110 + xy: 3583, 3 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-arkyid-tiny rotate: false - xy: 3383, 172 + xy: 1231, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-arkyid-xlarge rotate: false - xy: 3659, 413 + xy: 3759, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-atrax-large rotate: false - xy: 1631, 256 + xy: 1211, 214 size: 40, 29 orig: 40, 29 offset: 0, 0 index: -1 unit-atrax-medium rotate: false - xy: 1683, 186 + xy: 965, 2 size: 32, 23 orig: 32, 23 offset: 0, 0 index: -1 unit-atrax-small rotate: false - xy: 1731, 25 + xy: 3609, 10 size: 24, 17 orig: 24, 17 offset: 0, 0 index: -1 unit-atrax-tiny rotate: false - xy: 2723, 245 + xy: 2185, 245 size: 16, 11 orig: 16, 11 offset: 0, 0 index: -1 unit-atrax-xlarge rotate: false - xy: 3709, 427 + xy: 3809, 427 size: 48, 34 orig: 48, 34 offset: 0, 0 index: -1 unit-beta-large rotate: false - xy: 1673, 247 + xy: 1253, 205 size: 40, 38 orig: 40, 38 offset: 0, 0 index: -1 unit-beta-medium rotate: false - xy: 3776, 239 + xy: 3295, 221 size: 32, 30 orig: 32, 30 offset: 0, 0 index: -1 unit-beta-small rotate: false - xy: 2358, 85 + xy: 3635, 4 size: 24, 23 orig: 24, 23 offset: 0, 0 index: -1 unit-beta-tiny rotate: false - xy: 881, 155 + xy: 1051, 1 size: 16, 15 orig: 16, 15 offset: 0, 0 index: -1 unit-beta-xlarge rotate: false - xy: 3759, 415 + xy: 3859, 415 size: 48, 46 orig: 48, 46 offset: 0, 0 index: -1 unit-bryde-large rotate: false - xy: 1715, 245 + xy: 1295, 203 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-bryde-medium rotate: false - xy: 3791, 205 + xy: 3329, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-bryde-small rotate: false - xy: 2355, 59 + xy: 3661, 3 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-bryde-tiny rotate: false - xy: 3401, 172 + xy: 1249, 7 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-bryde-xlarge rotate: false - xy: 3809, 413 + xy: 3909, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-corvus-large rotate: false - xy: 1757, 259 + xy: 1337, 217 size: 40, 26 orig: 40, 26 offset: 0, 0 index: -1 unit-corvus-medium rotate: false - xy: 1697, 1 + xy: 3703, 197 size: 31, 20 orig: 31, 20 offset: 0, 0 index: -1 unit-corvus-small rotate: false - xy: 3859, 313 + xy: 999, 1 size: 24, 15 orig: 24, 15 offset: 0, 0 @@ -21902,336 +23442,336 @@ unit-corvus-tiny index: -1 unit-corvus-xlarge rotate: false - xy: 3859, 430 + xy: 3959, 430 size: 48, 31 orig: 48, 31 offset: 0, 0 index: -1 unit-crawler-large rotate: false - xy: 1799, 245 + xy: 1379, 203 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-crawler-medium rotate: false - xy: 3825, 329 + xy: 3363, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-crawler-small rotate: false - xy: 2355, 33 + xy: 3857, 247 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-crawler-tiny rotate: false - xy: 2735, 154 + xy: 3820, 185 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-crawler-xlarge rotate: false - xy: 3909, 413 + xy: 4009, 413 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-dagger-large rotate: false - xy: 1841, 245 + xy: 1421, 203 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-dagger-medium rotate: false - xy: 1697, 152 + xy: 3397, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-dagger-small rotate: false - xy: 2329, 20 + xy: 3857, 221 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-dagger-tiny rotate: false - xy: 2753, 154 + xy: 3838, 185 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-dagger-xlarge rotate: false - xy: 3959, 413 + xy: 3959, 380 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-eclipse-large rotate: false - xy: 1883, 245 + xy: 1337, 175 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-eclipse-medium rotate: false - xy: 1697, 118 + xy: 3431, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-eclipse-small rotate: false - xy: 2355, 7 + xy: 3883, 349 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-eclipse-tiny rotate: false - xy: 2771, 154 + xy: 3856, 185 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-eclipse-xlarge rotate: false - xy: 4009, 413 + xy: 4009, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-flare-large rotate: false - xy: 1925, 245 + xy: 1379, 161 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-flare-medium rotate: false - xy: 1697, 84 + xy: 3465, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-flare-small rotate: false - xy: 2384, 99 + xy: 3909, 337 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-flare-tiny rotate: false - xy: 2789, 154 + xy: 3814, 167 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-flare-xlarge rotate: false - xy: 3859, 380 + xy: 3809, 377 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-fortress-large rotate: false - xy: 1967, 253 + xy: 1421, 169 size: 40, 32 orig: 40, 32 offset: 0, 0 index: -1 unit-fortress-medium rotate: false - xy: 1697, 57 + xy: 3499, 226 size: 32, 25 orig: 32, 25 offset: 0, 0 index: -1 unit-fortress-small rotate: false - xy: 1757, 23 + xy: 3883, 328 size: 24, 19 orig: 24, 19 offset: 0, 0 index: -1 unit-fortress-tiny rotate: false - xy: 2476, 125 + xy: 1, 2 size: 16, 12 orig: 16, 12 offset: 0, 0 index: -1 unit-fortress-xlarge rotate: false - xy: 3909, 373 + xy: 3859, 375 size: 48, 38 orig: 48, 38 offset: 0, 0 index: -1 unit-gamma-large rotate: false - xy: 2009, 245 + xy: 1513, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-gamma-medium rotate: false - xy: 1697, 23 + xy: 3533, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-gamma-small rotate: false - xy: 1783, 29 + xy: 3909, 311 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-gamma-tiny rotate: false - xy: 2807, 154 + xy: 3832, 167 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-gamma-xlarge rotate: false - xy: 3959, 363 + xy: 3909, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-horizon-large rotate: false - xy: 2051, 245 + xy: 1555, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-horizon-medium rotate: false - xy: 3586, 185 + xy: 3567, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-horizon-small rotate: false - xy: 2410, 99 + xy: 3883, 302 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-horizon-tiny rotate: false - xy: 2825, 154 + xy: 3850, 167 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-horizon-xlarge rotate: false - xy: 4009, 363 + xy: 3959, 330 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-mace-large rotate: false - xy: 2093, 245 + xy: 1597, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-mace-medium rotate: false - xy: 3620, 185 + xy: 3601, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-mace-small rotate: false - xy: 1809, 29 + xy: 3909, 285 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-mace-tiny rotate: false - xy: 2843, 154 + xy: 3817, 149 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-mace-xlarge rotate: false - xy: 3709, 377 + xy: 4009, 313 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-mega-large rotate: false - xy: 2135, 245 + xy: 1639, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-mega-medium rotate: false - xy: 3654, 185 + xy: 3635, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-mega-small rotate: false - xy: 2436, 99 + xy: 3883, 276 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-mega-tiny rotate: false - xy: 2861, 154 + xy: 3817, 131 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-mega-xlarge rotate: false - xy: 3759, 365 + xy: 859, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-minke-large rotate: false - xy: 3481, 245 + xy: 3019, 245 size: 34, 40 orig: 34, 40 offset: 0, 0 index: -1 unit-minke-medium rotate: false - xy: 3806, 271 + xy: 3005, 133 size: 27, 32 orig: 27, 32 offset: 0, 0 @@ -22245,385 +23785,385 @@ unit-minke-small index: -1 unit-minke-tiny rotate: false - xy: 4044, 253 + xy: 1447, 151 size: 13, 16 orig: 13, 16 offset: 0, 0 index: -1 unit-minke-xlarge rotate: false - xy: 859, 198 + xy: 1009, 272 size: 41, 48 orig: 41, 48 offset: 0, 0 index: -1 unit-mono-large rotate: false - xy: 2177, 245 + xy: 1681, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-mono-medium rotate: false - xy: 3688, 183 + xy: 3669, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-mono-small rotate: false - xy: 1835, 29 + xy: 3883, 250 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-mono-tiny rotate: false - xy: 2879, 154 + xy: 3835, 149 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-mono-xlarge rotate: false - xy: 3809, 363 + xy: 859, 313 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-nova-large rotate: false - xy: 2219, 245 + xy: 1723, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-nova-medium rotate: false - xy: 3722, 171 + xy: 3703, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-nova-small rotate: false - xy: 1861, 29 + xy: 3909, 259 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-nova-tiny rotate: false - xy: 2897, 154 + xy: 3817, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-nova-xlarge rotate: false - xy: 3859, 330 + xy: 859, 263 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-oct-large rotate: false - xy: 2261, 245 + xy: 1765, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-oct-medium rotate: false - xy: 3756, 171 + xy: 3737, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-oct-small rotate: false - xy: 1887, 29 + xy: 3883, 224 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-oct-tiny rotate: false - xy: 2915, 154 + xy: 3835, 131 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-oct-xlarge rotate: false - xy: 3909, 323 + xy: 909, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-omura-large rotate: false - xy: 3520, 155 + xy: 2975, 163 size: 28, 40 orig: 28, 40 offset: 0, 0 index: -1 unit-omura-medium rotate: false - xy: 1733, 211 + xy: 257, 12 size: 22, 32 orig: 22, 32 offset: 0, 0 index: -1 unit-omura-small rotate: false - xy: 2933, 146 + xy: 3817, 87 size: 16, 24 orig: 16, 24 offset: 0, 0 index: -1 unit-omura-tiny rotate: false - xy: 4084, 156 + xy: 3723, 157 size: 11, 16 orig: 11, 16 offset: 0, 0 index: -1 unit-omura-xlarge rotate: false - xy: 3517, 237 + xy: 3055, 237 size: 33, 48 orig: 33, 48 offset: 0, 0 index: -1 unit-poly-large rotate: false - xy: 2303, 245 + xy: 1807, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-poly-medium rotate: false - xy: 3790, 171 + xy: 3771, 219 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-poly-small rotate: false - xy: 1913, 29 + xy: 3909, 233 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-poly-tiny rotate: false - xy: 2951, 154 + xy: 3835, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-poly-xlarge rotate: false - xy: 3959, 313 + xy: 909, 313 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-pulsar-large rotate: false - xy: 2345, 251 + xy: 1849, 251 size: 40, 34 orig: 40, 34 offset: 0, 0 index: -1 unit-pulsar-medium rotate: false - xy: 2345, 222 + xy: 3499, 197 size: 32, 27 orig: 32, 27 offset: 0, 0 index: -1 unit-pulsar-small rotate: false - xy: 1763, 1 + xy: 3909, 211 size: 24, 20 orig: 24, 20 offset: 0, 0 index: -1 unit-pulsar-tiny rotate: false - xy: 1, 1 + xy: 1093, 230 size: 16, 13 orig: 16, 13 offset: 0, 0 index: -1 unit-pulsar-xlarge rotate: false - xy: 4009, 321 + xy: 859, 221 size: 48, 40 orig: 48, 40 offset: 0, 0 index: -1 unit-quad-large rotate: false - xy: 2387, 245 + xy: 1891, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-quad-medium rotate: false - xy: 3776, 332 + xy: 3736, 186 size: 31, 31 orig: 31, 31 offset: 0, 0 index: -1 unit-quad-small rotate: false - xy: 1939, 29 + xy: 3883, 198 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-quad-tiny rotate: false - xy: 3692, 396 + xy: 1069, 1 size: 15, 15 orig: 15, 15 offset: 0, 0 index: -1 unit-quad-xlarge rotate: false - xy: 4009, 271 + xy: 909, 263 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-quasar-large rotate: false - xy: 2429, 245 + xy: 1933, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-quasar-medium rotate: false - xy: 2343, 188 + xy: 3533, 185 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-quasar-small rotate: false - xy: 1965, 29 + xy: 3909, 185 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-quasar-tiny rotate: false - xy: 2969, 154 + xy: 3817, 69 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-quasar-xlarge rotate: false - xy: 859, 363 + xy: 959, 363 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-reign-large rotate: false - xy: 1757, 231 + xy: 1471, 233 size: 40, 26 orig: 40, 26 offset: 0, 0 index: -1 unit-reign-medium rotate: false - xy: 1730, 1 + xy: 3703, 175 size: 31, 20 orig: 31, 20 offset: 0, 0 index: -1 unit-reign-small rotate: false - xy: 1991, 30 + xy: 1025, 1 size: 24, 15 orig: 24, 15 offset: 0, 0 index: -1 unit-reign-tiny rotate: false - xy: 3734, 365 + xy: 3862, 273 size: 15, 10 orig: 15, 10 offset: 0, 0 index: -1 unit-reign-xlarge rotate: false - xy: 859, 330 + xy: 959, 330 size: 48, 31 orig: 48, 31 offset: 0, 0 index: -1 unit-risso-large rotate: false - xy: 3444, 245 + xy: 2982, 245 size: 35, 40 orig: 35, 40 offset: 0, 0 index: -1 unit-risso-medium rotate: false - xy: 3551, 177 + xy: 2975, 129 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 unit-risso-small rotate: false - xy: 2447, 219 + xy: 3935, 337 size: 21, 24 orig: 21, 24 offset: 0, 0 index: -1 unit-risso-tiny rotate: false - xy: 2539, 227 + xy: 3074, 219 size: 14, 16 orig: 14, 16 offset: 0, 0 index: -1 unit-risso-xlarge rotate: false - xy: 959, 313 + xy: 1009, 322 size: 43, 48 orig: 43, 48 offset: 0, 0 index: -1 unit-scepter-large rotate: false - xy: 2471, 253 + xy: 1975, 253 size: 40, 32 orig: 40, 32 offset: 0, 0 index: -1 unit-scepter-medium rotate: false - xy: 2379, 217 + xy: 3567, 191 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 unit-scepter-small rotate: false - xy: 2017, 26 + xy: 3031, 93 size: 24, 19 orig: 24, 19 offset: 0, 0 @@ -22637,84 +24177,84 @@ unit-scepter-tiny index: -1 unit-scepter-xlarge rotate: false - xy: 859, 289 + xy: 959, 289 size: 48, 39 orig: 48, 39 offset: 0, 0 index: -1 unit-sei-large rotate: false - xy: 2513, 245 + xy: 1463, 191 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-sei-medium rotate: false - xy: 2413, 211 + xy: 3601, 185 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-sei-small rotate: false - xy: 2043, 21 + xy: 3030, 67 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-sei-tiny rotate: false - xy: 2987, 154 + xy: 3835, 95 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-sei-xlarge rotate: false - xy: 909, 363 + xy: 859, 171 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unit-spiroct-large rotate: false - xy: 2555, 254 + xy: 2017, 254 size: 40, 31 orig: 40, 31 offset: 0, 0 index: -1 unit-spiroct-medium rotate: false - xy: 3776, 305 + xy: 3769, 192 size: 31, 25 orig: 31, 25 offset: 0, 0 index: -1 unit-spiroct-small rotate: false - xy: 2069, 26 + xy: 3027, 46 size: 24, 19 orig: 24, 19 offset: 0, 0 index: -1 unit-spiroct-tiny rotate: false - xy: 3692, 382 + xy: 3835, 81 size: 15, 12 orig: 15, 12 offset: 0, 0 index: -1 unit-spiroct-xlarge rotate: false - xy: 909, 323 + xy: 909, 223 size: 48, 38 orig: 48, 38 offset: 0, 0 index: -1 unit-toxopid-large rotate: false - xy: 3552, 245 + xy: 3090, 245 size: 33, 40 orig: 33, 40 offset: 0, 0 @@ -22728,42 +24268,42 @@ unit-toxopid-medium index: -1 unit-toxopid-small rotate: false - xy: 2147, 21 + xy: 3836, 323 size: 20, 24 orig: 20, 24 offset: 0, 0 index: -1 unit-toxopid-tiny rotate: false - xy: 899, 1 + xy: 2007, 133 size: 13, 16 orig: 13, 16 offset: 0, 0 index: -1 unit-toxopid-xlarge rotate: false - xy: 2597, 237 + xy: 2059, 237 size: 40, 48 orig: 40, 48 offset: 0, 0 index: -1 unit-vela-large rotate: false - xy: 2639, 253 + xy: 2101, 253 size: 40, 32 orig: 40, 32 offset: 0, 0 index: -1 unit-vela-medium rotate: false - xy: 2377, 189 + xy: 3635, 191 size: 32, 26 orig: 32, 26 offset: 0, 0 index: -1 unit-vela-small rotate: false - xy: 2095, 26 + xy: 3027, 25 size: 24, 19 orig: 24, 19 offset: 0, 0 @@ -22777,49 +24317,49 @@ unit-vela-tiny index: -1 unit-vela-xlarge rotate: false - xy: 859, 248 + xy: 1009, 372 size: 48, 39 orig: 48, 39 offset: 0, 0 index: -1 unit-zenith-large rotate: false - xy: 2681, 245 + xy: 2143, 245 size: 40, 40 orig: 40, 40 offset: 0, 0 index: -1 unit-zenith-medium rotate: false - xy: 2411, 177 + xy: 3669, 185 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unit-zenith-small rotate: false - xy: 2121, 21 + xy: 3836, 349 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 unit-zenith-tiny rotate: false - xy: 3005, 154 + xy: 3817, 51 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-zenith-xlarge rotate: false - xy: 909, 273 + xy: 959, 239 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wavepane rotate: false - xy: 3331, 258 + xy: 2869, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -22827,7 +24367,7 @@ wavepane index: -1 white-pane rotate: false - xy: 3369, 258 + xy: 2907, 258 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -22835,14 +24375,14 @@ white-pane index: -1 whiteui rotate: false - xy: 821, 416 + xy: 859, 166 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 window-empty rotate: false - xy: 1731, 122 + xy: 3034, 140 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 71293fe7a0..b5ee5dfea3 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/assets/sprites/sprites2.png b/core/assets/sprites/sprites2.png index 4a26e4dbe9..803ae731e6 100644 Binary files a/core/assets/sprites/sprites2.png and b/core/assets/sprites/sprites2.png differ diff --git a/core/assets/sprites/sprites4.png b/core/assets/sprites/sprites4.png index 20eed12539..55ce07e63a 100644 Binary files a/core/assets/sprites/sprites4.png and b/core/assets/sprites/sprites4.png differ diff --git a/core/assets/sprites/sprites5.png b/core/assets/sprites/sprites5.png index 2fe5605d60..cbf2bd9569 100644 Binary files a/core/assets/sprites/sprites5.png and b/core/assets/sprites/sprites5.png differ diff --git a/core/src/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java index 553c4ce2cc..3777da85c7 100644 --- a/core/src/mindustry/ClientLauncher.java +++ b/core/src/mindustry/ClientLauncher.java @@ -9,6 +9,7 @@ import arc.graphics.g2d.*; import arc.math.*; import arc.util.*; import arc.util.async.*; +import mindustry.ai.*; import mindustry.core.*; import mindustry.ctype.*; import mindustry.game.EventType.*; @@ -74,7 +75,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform Fonts.loadDefaultFont(); //load fallback atlas if max texture size is below 4096 - assets.load(new AssetDescriptor<>(Gl.getInt(Gl.maxTextureSize) >= 4096 ? "sprites/sprites.atlas" : "sprites/fallback/sprites.atlas", TextureAtlas.class)).loaded = t -> { + assets.load(new AssetDescriptor<>(Gl.getInt(Gl.maxTextureSize) >= 4096 ? "sprites/sprites.atlas" : "sprites/fallback/sprites.atlas", TextureAtlas.class)).loaded = t -> { atlas = (TextureAtlas)t; Fonts.mergeFontAtlas(atlas); }; @@ -103,6 +104,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform assets.load(schematics); assets.loadRun("contentinit", ContentLoader.class, () -> content.init(), () -> content.load()); + assets.loadRun("baseparts", BaseRegistry.class, () -> {}, () -> bases.load()); } @Override diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index 2cf07cbea6..e41b9a08b7 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -10,11 +10,10 @@ import arc.util.*; import arc.util.Log.*; import mindustry.ai.*; import mindustry.async.*; -import mindustry.audio.*; import mindustry.core.*; import mindustry.entities.*; -import mindustry.game.*; import mindustry.game.EventType.*; +import mindustry.game.*; import mindustry.gen.*; import mindustry.input.*; import mindustry.io.*; @@ -36,8 +35,8 @@ public class Vars implements Loadable{ public static boolean loadLocales = true; /** Whether the logger is loaded. */ public static boolean loadedLogger = false, loadedFileLogger = false; - /** Whether to show the cliff button in the editor*/ - public static boolean addCliffButton = false; + /** Whether to enable various experimental features (e.g. cliffs) */ + public static boolean experimental = false; /** Maximum extra padding around deployment schematics. */ public static final int maxLoadoutSchematicPad = 5; /** Maximum schematic size.*/ @@ -67,7 +66,7 @@ public class Vars implements Loadable{ /** URL of the github issue report template.*/ public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md"; /** list of built-in servers.*/ - public static final Seq defaultServers = Seq.with(); + public static final Seq defaultServers = Seq.with(); /** maximum distance between mine and core that supports automatic transferring */ public static final float mineTransferRange = 220f; /** max chat message length */ @@ -89,7 +88,7 @@ public class Vars implements Loadable{ /** duration of time between turns in ticks */ public static final float turnDuration = 2 * Time.toMinutes; /** chance of an invasion per turn, 1 = 100% */ - public static final float baseInvasionChance = 1f / 30f; + public static final float baseInvasionChance = 1f / 50f; /** how many turns have to pass before invasions start */ public static final int invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ @@ -187,8 +186,7 @@ public class Vars implements Loadable{ public static ContentLoader content; public static GameState state; public static EntityCollisions collisions; - public static DefaultWaves defaultWaves; - public static LoopControl loops; + public static Waves waves; public static Platform platform = new Platform(){}; public static Mods mods; public static Schematics schematics; @@ -235,6 +233,7 @@ public class Vars implements Loadable{ } Arrays.sort(locales, Structs.comparing(l -> l.getDisplayName(l), String.CASE_INSENSITIVE_ORDER)); + locales = Seq.with(locales).and(new Locale("router")).toArray(Locale.class); } Version.init(); @@ -255,8 +254,7 @@ public class Vars implements Loadable{ if(mods == null) mods = new Mods(); content = new ContentLoader(); - loops = new LoopControl(); - defaultWaves = new DefaultWaves(); + waves = new Waves(); collisions = new EntityCollisions(); world = new World(); universe = new Universe(); @@ -318,20 +316,25 @@ public class Vars implements Loadable{ settings.setAppName(appName); - Writer writer = settings.getDataDirectory().child("last_log.txt").writer(false); - LogHandler log = Log.logger; - //ignore it - Log.logger = (level, text) -> { - log.log(level, text); + try{ + Writer writer = settings.getDataDirectory().child("last_log.txt").writer(false); + LogHandler log = Log.logger; + //ignore it + Log.logger = (level, text) -> { + log.log(level, text); - try{ - writer.write("[" + Character.toUpperCase(level.name().charAt(0)) +"] " + Log.removeColors(text) + "\n"); - writer.flush(); - }catch(IOException e){ - e.printStackTrace(); - //ignore it - } - }; + try{ + writer.write("[" + Character.toUpperCase(level.name().charAt(0)) +"] " + Log.removeColors(text) + "\n"); + writer.flush(); + }catch(IOException e){ + e.printStackTrace(); + //ignore it + } + }; + }catch(Exception e){ + //handle log file not being found + Log.err(e); + } loadedFileLogger = true; } @@ -387,6 +390,11 @@ public class Vars implements Loadable{ Locale.setDefault(locale); Core.bundle = I18NBundle.createBundle(handle, locale); + + //router + if(locale.getDisplayName().equals("router")){ + bundle.debug("router"); + } } } } diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index 2c1fb11617..7900b6608c 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -1,5 +1,7 @@ package mindustry.ai; +import arc.*; +import arc.input.*; import arc.math.*; import arc.math.geom.*; import arc.struct.*; @@ -17,16 +19,18 @@ import mindustry.world.*; import mindustry.world.blocks.defense.*; import mindustry.world.blocks.production.*; import mindustry.world.blocks.storage.*; +import mindustry.world.blocks.storage.CoreBlock.*; import static mindustry.Vars.*; public class BaseAI{ private static final Vec2 axis = new Vec2(), rotator = new Vec2(); private static final float correctPercent = 0.5f; - private static final float step = 5; private static final int attempts = 4; private static final float emptyChance = 0.01f; - private static final int timerStep = 0, timerSpawn = 1; + private static final int timerStep = 0, timerSpawn = 1, timerRefreshPath = 2; + private static final int pathStep = 50; + private static final Seq tmpTiles = new Seq<>(); private static int correct = 0, incorrect = 0; @@ -36,6 +40,13 @@ public class BaseAI{ TeamData data; Interval timer = new Interval(4); + IntSet path = new IntSet(); + IntSet calcPath = new IntSet(); + @Nullable Tile calcTile; + boolean calculating, startedCalculating; + int calcCount = 0; + int totalCalcs = 0; + public BaseAI(TeamData data){ this.data = data; } @@ -53,8 +64,76 @@ public class BaseAI{ } } + //refresh path + if(!calculating && (timer.get(timerRefreshPath, 3f * Time.toMinutes) || !startedCalculating) && data.hasCore()){ + calculating = true; + startedCalculating = true; + calcPath.clear(); + } + + //didn't find tile in time + if(calculating && calcCount >= world.width() * world.height()){ + calculating = false; + calcCount = 0; + calcPath.clear(); + totalCalcs ++; + } + + //calculate path for units so schematics are not placed on it + if(calculating){ + if(calcTile == null){ + Vars.spawner.eachGroundSpawn((x, y) -> calcTile = world.tile(x, y)); + if(calcTile == null){ + calculating = false; + } + }else{ + var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore); + + int[][] weights = field.weights; + for(int i = 0; i < pathStep; i++){ + int minCost = Integer.MAX_VALUE; + int cx = calcTile.x, cy = calcTile.y; + boolean foundAny = false; + for(Point2 p : Geometry.d4){ + int nx = cx + p.x, ny = cy + p.y; + + Tile other = world.tile(nx, ny); + if(other != null && weights[nx][ny] < minCost && weights[nx][ny] != -1){ + minCost = weights[nx][ny]; + calcTile = other; + foundAny = true; + } + } + + //didn't find anything, break out of loop, this will trigger a clear later + if(!foundAny){ + calcCount = Integer.MAX_VALUE; + break; + } + + calcPath.add(calcTile.pos()); + + //found the end. + if(calcTile.build instanceof CoreBuild b && b.team == state.rules.defaultTeam){ + //clean up calculations and flush results + calculating = false; + calcCount = 0; + path.clear(); + path.addAll(calcPath); + calcPath.clear(); + calcTile = null; + totalCalcs ++; + + break; + } + + calcCount ++; + } + } + } + //only schedule when there's something to build. - if(data.blocks.isEmpty() && timer.get(timerStep, step)){ + if(totalCalcs > 0 && data.blocks.isEmpty() && timer.get(timerStep, Mathf.lerp(20f, 4f, data.team.rules().aiTier))){ if(!triedWalls){ tryWalls(); triedWalls = true; @@ -123,6 +202,13 @@ public class BaseAI{ if(!Build.validPlace(tile.block, data.team, realX, realY, tile.rotation)){ return false; } + Tile wtile = world.tile(realX, realY); + + //may intersect AI path + tmpTiles.clear(); + if(tile.block.solid && wtile != null && wtile.getLinkedTilesAs(tile.block, tmpTiles).contains(t -> path.contains(t.pos()))){ + return false; + } } //make sure at least X% of resource requirements are met @@ -191,7 +277,8 @@ public class BaseAI{ } } - if(any && Build.validPlace(wall, data.team, tile.x, tile.y, 0)){ + tmpTiles.clear(); + if(any && Build.validPlace(wall, data.team, tile.x, tile.y, 0) && !tile.getLinkedTilesAs(wall, tmpTiles).contains(t -> path.contains(t.pos()))){ data.blocks.add(new BlockPlan(tile.x, tile.y, (short)0, wall.id, null)); } } diff --git a/core/src/mindustry/ai/BaseRegistry.java b/core/src/mindustry/ai/BaseRegistry.java index 269b79d3bf..735e9162ef 100644 --- a/core/src/mindustry/ai/BaseRegistry.java +++ b/core/src/mindustry/ai/BaseRegistry.java @@ -82,7 +82,7 @@ public class BaseRegistry{ } schem.tiles.removeAll(s -> s.block.buildVisibility == BuildVisibility.sandboxOnly); - part.tier = schem.tiles.sumf(s -> Mathf.pow(s.block.buildCost / s.block.buildCostMultiplier, 1.2f)); + part.tier = schem.tiles.sumf(s -> Mathf.pow(s.block.buildCost / s.block.buildCostMultiplier, 1.4f)); if(part.core != null){ cores.add(part); @@ -99,7 +99,9 @@ public class BaseRegistry{ part.centerY = part.schematic.height/2; } - if(part.required != null) reqParts.get(part.required, Seq::new).add(part); + if(part.required != null && part.core == null){ + reqParts.get(part.required, Seq::new).add(part); + } }catch(IOException e){ throw new RuntimeException(e); diff --git a/core/src/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java index a75b0758ea..683d04cc78 100644 --- a/core/src/mindustry/ai/BlockIndexer.java +++ b/core/src/mindustry/ai/BlockIndexer.java @@ -56,18 +56,7 @@ public class BlockIndexer{ public BlockIndexer(){ Events.on(TileChangeEvent.class, event -> { - if(typeMap.get(event.tile.pos()) != null){ - TileIndex index = typeMap.get(event.tile.pos()); - for(BlockFlag flag : index.flags){ - getFlagged(index.team)[flag.ordinal()].remove(event.tile); - } - - if(index.flags.contains(BlockFlag.unitModifier)){ - updateCap(index.team); - } - } - process(event.tile); - updateQuadrant(event.tile); + updateIndices(event.tile); }); Events.on(WorldLoadEvent.class, event -> { @@ -111,6 +100,21 @@ public class BlockIndexer{ }); } + public void updateIndices(Tile tile){ + if(typeMap.get(tile.pos()) != null){ + TileIndex index = typeMap.get(tile.pos()); + for(BlockFlag flag : index.flags){ + getFlagged(index.team)[flag.ordinal()].remove(tile); + } + + if(index.flags.contains(BlockFlag.unitModifier)){ + updateCap(index.team); + } + } + process(tile); + updateQuadrant(tile); + } + private TileArray[] getFlagged(Team team){ return flagMap[team.id]; } @@ -208,16 +212,30 @@ public class BlockIndexer{ public Seq getEnemy(Team team, BlockFlag type){ returnArray.clear(); Seq data = state.teams.present; - for(int i = 0; i < data.size; i++){ - Team enemy = data.items[i].team; - if(enemy == team) continue; - TileArray set = getFlagged(enemy)[type.ordinal()]; - if(set != null){ - for(Tile tile : set){ - returnArray.add(tile); + //when team data is not initialized, scan through every team. this is terrible + if(data.isEmpty()){ + for(Team enemy : Team.all){ + if(enemy == team) continue; + TileArray set = getFlagged(enemy)[type.ordinal()]; + if(set != null){ + for(Tile tile : set){ + returnArray.add(tile); + } + } + } + }else{ + for(int i = 0; i < data.size; i++){ + Team enemy = data.items[i].team; + if(enemy == team) continue; + TileArray set = getFlagged(enemy)[type.ordinal()]; + if(set != null){ + for(Tile tile : set){ + returnArray.add(tile); + } } } } + return returnArray; } @@ -233,7 +251,7 @@ public class BlockIndexer{ for(int i = 0; i < activeTeams.size; i++){ Team enemy = activeTeams.items[i]; - if(enemy == team) continue; + if(enemy == team || team == Team.derelict) continue; Building entity = indexer.findTile(enemy, x, y, range, pred, true); if(entity != null){ @@ -262,10 +280,7 @@ public class BlockIndexer{ for(int ty = ry * quadrantSize; ty < (ry + 1) * quadrantSize && ty < world.height(); ty++){ Building e = world.build(tx, ty); - if(e == null) continue; - - if(e.team != team || !pred.get(e) || !e.block.targetable) - continue; + if(e == null || e.team != team || !pred.get(e) || !e.block.targetable || e.team == Team.derelict) continue; float ndst = e.dst2(x, y); if(ndst < range2 && (closest == null || @@ -312,6 +327,11 @@ public class BlockIndexer{ return null; } + /** Find the closest ore block relative to a position. */ + public Tile findClosestOre(Unit unit, Item item){ + return findClosestOre(unit.x, unit.y, item); + } + /** @return extra unit cap of a team. This is added onto the base value. */ public int getExtraUnits(Team team){ return unitCaps[team.id]; @@ -457,8 +477,8 @@ public class BlockIndexer{ } public static class TileArray implements Iterable{ - private Seq tiles = new Seq<>(false, 16); - private IntSet contained = new IntSet(); + Seq tiles = new Seq<>(false, 16); + IntSet contained = new IntSet(); public void add(Tile tile){ if(contained.add(tile.pos())){ diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index 78a596bb9d..392481b3ac 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -7,6 +7,7 @@ import arc.struct.*; import arc.util.*; import arc.util.async.*; import mindustry.annotations.Annotations.*; +import mindustry.content.*; import mindustry.core.*; import mindustry.game.EventType.*; import mindustry.game.*; @@ -86,6 +87,8 @@ public class Pathfinder implements Runnable{ tiles[tile.x][tile.y] = packTile(tile); } + preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); + start(); }); @@ -116,7 +119,7 @@ public class Pathfinder implements Runnable{ tile.getTeamID(), tile.solid(), tile.floor().isLiquid, - tile.staticDarkness() >= 2, + tile.staticDarkness() >= 2 || (tile.floor().solid && tile.block() == Blocks.air), nearLiquid, nearGround, nearSolid, @@ -350,13 +353,7 @@ public class Pathfinder implements Runnable{ threadList.add(path); //add to main thread's list of paths - Core.app.post(() -> { - mainList.add(path); - //TODO - //if(fieldMap[team.id] != null){ - // fieldMap[team.id].put(target, path); - //} - }); + Core.app.post(() -> mainList.add(path)); //fill with impassables by default for(int x = 0; x < world.width(); x++){ @@ -444,13 +441,12 @@ public class Pathfinder implements Runnable{ public void getPositions(IntSeq out){ out.add(Point2.pack(World.toTile(position.getX()), World.toTile(position.getY()))); } - } /** * Data for a flow field to some set of destinations. * Concrete subclasses must specify a way to fetch costs and destinations. - * */ + */ public static abstract class Flowfield{ /** Refresh rate in milliseconds. Return any number <= 0 to disable. */ protected int refreshRate; diff --git a/core/src/mindustry/ai/formations/Formation.java b/core/src/mindustry/ai/formations/Formation.java index 16db811b2f..db2ce02e14 100644 --- a/core/src/mindustry/ai/formations/Formation.java +++ b/core/src/mindustry/ai/formations/Formation.java @@ -17,10 +17,8 @@ import arc.struct.*; * @author davebaol */ public class Formation{ - /** A list of slots assignments. */ public Seq slotAssignments; - /** The anchor point of this formation. */ public Vec3 anchor; /** The formation pattern */ @@ -138,7 +136,6 @@ public class Formation{ * @return {@code false} if no more slots are available; {@code true} otherwise. */ public boolean addMember(FormationMember member){ - // Check if the pattern supports one more slot if(pattern.supportsSlots(slotAssignments.size + 1)){ // Add a new slot assignment diff --git a/core/src/mindustry/ai/formations/FreeSlotAssignmentStrategy.java b/core/src/mindustry/ai/formations/FreeSlotAssignmentStrategy.java index 35fd74f789..89e51054d2 100644 --- a/core/src/mindustry/ai/formations/FreeSlotAssignmentStrategy.java +++ b/core/src/mindustry/ai/formations/FreeSlotAssignmentStrategy.java @@ -16,8 +16,9 @@ public class FreeSlotAssignmentStrategy implements SlotAssignmentStrategy{ public void updateSlotAssignments(Seq assignments){ // A very simple assignment algorithm: we simply go through // each assignment in the list and assign sequential slot numbers - for(int i = 0; i < assignments.size; i++) + for(int i = 0; i < assignments.size; i++){ assignments.get(i).slotNumber = i; + } } @Override diff --git a/core/src/mindustry/ai/formations/SoftRoleSlotAssignmentStrategy.java b/core/src/mindustry/ai/formations/SoftRoleSlotAssignmentStrategy.java index f3f3c09bed..59c933c205 100644 --- a/core/src/mindustry/ai/formations/SoftRoleSlotAssignmentStrategy.java +++ b/core/src/mindustry/ai/formations/SoftRoleSlotAssignmentStrategy.java @@ -51,7 +51,6 @@ public class SoftRoleSlotAssignmentStrategy extends BoundedSlotAssignmentStrateg @Override public void updateSlotAssignments(Seq assignments){ - // Holds a list of member and slot data for each member. Seq memberData = new Seq<>(); @@ -125,7 +124,6 @@ public class SoftRoleSlotAssignmentStrategy extends BoundedSlotAssignmentStrateg // Some sensible action should be taken, such as reporting to the player. throw new ArcRuntimeException("SoftRoleSlotAssignmentStrategy cannot find valid slot assignment for member " + memberDatum.member); } - } static class CostAndSlot implements Comparable{ diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index c3558ca58a..a82a220070 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -14,21 +14,16 @@ import static mindustry.Vars.*; public class BuilderAI extends AIController{ float buildRadius = 1500; boolean found = false; - @Nullable Builderc following; + @Nullable Unit following; @Override public void updateMovement(){ - Builderc builder = (Builderc)unit; - - if(builder.moving()){ - builder.lookAt(builder.vel().angle()); - } if(target != null && shouldShoot()){ unit.lookAt(target); } - builder.updateBuilding(true); + unit.updateBuilding = true; if(following != null){ //try to follow and mimic someone @@ -36,21 +31,21 @@ public class BuilderAI extends AIController{ //validate follower if(!following.isValid() || !following.activelyBuilding()){ following = null; - builder.plans().clear(); + unit.plans.clear(); return; } //set to follower's first build plan, whatever that is - builder.plans().clear(); - builder.plans().addFirst(following.buildPlan()); + unit.plans.clear(); + unit.plans.addFirst(following.buildPlan()); } - if(builder.buildPlan() != null){ + if(unit.buildPlan() != null){ //approach request if building - BuildPlan req = builder.buildPlan(); + BuildPlan req = unit.buildPlan(); boolean valid = - (req.tile().build instanceof ConstructBuild && req.tile().bc().cblock == req.block) || + (req.tile() != null && req.tile().build instanceof ConstructBuild && req.tile().bc().cblock == req.block) || (req.breaking ? Build.validBreak(unit.team(), req.x, req.y) : Build.validPlace(req.block, unit.team(), req.x, req.y, req.rotation)); @@ -60,7 +55,7 @@ public class BuilderAI extends AIController{ moveTo(req.tile(), buildingRange - 20f); }else{ //discard invalid request - builder.plans().removeFirst(); + unit.plans.removeFirst(); } }else{ @@ -71,16 +66,16 @@ public class BuilderAI extends AIController{ Units.nearby(unit.team, unit.x, unit.y, buildRadius, u -> { if(found) return; - if(u instanceof Builderc b && u != unit && ((Builderc)u).activelyBuilding()){ - BuildPlan plan = b.buildPlan(); + if(u.canBuild() && u != unit && u.activelyBuilding()){ + BuildPlan plan = u.buildPlan(); Building build = world.build(plan.x, plan.y); if(build instanceof ConstructBuild cons){ float dist = Math.min(cons.dst(unit) - buildingRange, 0); //make sure you can reach the request in time - if(dist / unit.type.speed < cons.buildCost * 0.9f){ - following = b; + if(dist / unit.speed() < cons.buildCost * 0.9f){ + following = u; found = true; } } @@ -98,7 +93,7 @@ public class BuilderAI extends AIController{ blocks.removeFirst(); }else if(Build.validPlace(content.block(block.block), unit.team(), block.x, block.y, block.rotation)){ //it's valid. //add build request. - builder.addBuild(new BuildPlan(block.x, block.y, block.rotation, content.block(block.block), block.config)); + unit.addBuild(new BuildPlan(block.x, block.y, block.rotation, content.block(block.block), block.config)); //shift build plan to tail so next unit builds something else. blocks.addLast(blocks.removeFirst()); }else{ @@ -119,7 +114,7 @@ public class BuilderAI extends AIController{ public boolean useFallback(){ return state.rules.waves && unit.team == state.rules.waveTeam && !unit.team.rules().ai; } - + @Override public boolean shouldShoot(){ return !((Builderc)unit).isBuilding(); diff --git a/core/src/mindustry/ai/types/FlyingAI.java b/core/src/mindustry/ai/types/FlyingAI.java index 7262ae216a..bf7367731d 100644 --- a/core/src/mindustry/ai/types/FlyingAI.java +++ b/core/src/mindustry/ai/types/FlyingAI.java @@ -55,7 +55,7 @@ public class FlyingAI extends AIController{ vec.setAngle(Mathf.slerpDelta(unit.vel().angle(), vec.angle(), 0.6f)); } - vec.setLength(unit.type.speed); + vec.setLength(unit.speed()); unit.moveAt(vec); } diff --git a/core/src/mindustry/ai/types/FormationAI.java b/core/src/mindustry/ai/types/FormationAI.java index 3c5a2b99b4..2379b28e07 100644 --- a/core/src/mindustry/ai/types/FormationAI.java +++ b/core/src/mindustry/ai/types/FormationAI.java @@ -6,7 +6,6 @@ import arc.util.*; import mindustry.ai.formations.*; import mindustry.entities.units.*; import mindustry.gen.*; -import mindustry.type.*; import mindustry.world.blocks.storage.CoreBlock.*; public class FormationAI extends AIController implements FormationMember{ @@ -27,9 +26,8 @@ public class FormationAI extends AIController implements FormationMember{ @Override public void updateUnit(){ - UnitType type = unit.type; - if(leader.dead){ + if(leader == null || leader.dead){ unit.resetController(); return; } @@ -51,23 +49,23 @@ public class FormationAI extends AIController implements FormationMember{ Vec2 realtarget = vec.set(target); - float margin = 3f; + float margin = 4f; float speed = unit.realSpeed(); if(unit.dst(realtarget) <= margin){ - unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f); + //unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f); }else{ unit.moveAt(realtarget.sub(unit).limit(speed)); } - if(unit instanceof Minerc mine && leader instanceof Minerc com){ - if(mine.validMine(com.mineTile())){ - mine.mineTile(com.mineTile()); + if(unit.canMine() && leader.canMine()){ + if(leader.mineTile != null && unit.validMine(leader.mineTile)){ + unit.mineTile(leader.mineTile); CoreBuild core = unit.team.core(); - if(core != null && com.mineTile().drop() != null && unit.within(core, unit.type.range) && !unit.acceptsItem(com.mineTile().drop())){ + if(core != null && leader.mineTile.drop() != null && unit.within(core, unit.type.range) && !unit.acceptsItem(leader.mineTile.drop())){ if(core.acceptStack(unit.stack.item, unit.stack.amount, unit) > 0){ Call.transferItemTo(unit.stack.item, unit.stack.amount, unit.x, unit.y, core); @@ -75,14 +73,13 @@ public class FormationAI extends AIController implements FormationMember{ } } }else{ - mine.mineTile(null); + unit.mineTile(null); } - } - if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){ - build.clearBuilding(); - build.addBuild(com.buildPlan()); + if(unit.canBuild() && leader.canBuild() && leader.activelyBuilding()){ + unit.clearBuilding(); + unit.addBuild(leader.buildPlan()); } } diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index 1166c2ff96..d2f759150b 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -14,7 +14,7 @@ import static mindustry.Vars.*; public class LogicAI extends AIController{ /** Minimum delay between item transfers. */ - public static final float transferDelay = 60f * 3f; + public static final float transferDelay = 60f * 2f; /** Time after which the unit resets its controlled and reverts to a normal unit. */ public static final float logicControlTimeout = 10f * 60f; @@ -44,8 +44,8 @@ public class LogicAI extends AIController{ @Override protected void updateMovement(){ - if(itemTimer > 0) itemTimer -= Time.delta; - if(payTimer > 0) payTimer -= Time.delta; + if(itemTimer >= 0) itemTimer -= Time.delta; + if(payTimer >= 0) payTimer -= Time.delta; if(targetTimer > 0f){ targetTimer -= Time.delta; @@ -92,9 +92,7 @@ public class LogicAI extends AIController{ } } case stop -> { - if(unit instanceof Builderc build){ - build.clearBuilding(); - } + unit.clearBuilding(); } } @@ -104,9 +102,7 @@ public class LogicAI extends AIController{ //look where moving if there's nothing to aim at if(!shoot){ - if(unit.moving()){ - unit.lookAt(unit.vel().angle()); - } + unit.lookAt(unit.prefRotation()); }else if(unit.hasWeapons()){ //if there is, look at the object unit.lookAt(unit.mounts[0].aimX, unit.mounts[0].aimY); } diff --git a/core/src/mindustry/ai/types/MinerAI.java b/core/src/mindustry/ai/types/MinerAI.java index aa7d1403c5..97d8198bb2 100644 --- a/core/src/mindustry/ai/types/MinerAI.java +++ b/core/src/mindustry/ai/types/MinerAI.java @@ -17,21 +17,21 @@ public class MinerAI extends AIController{ protected void updateMovement(){ Building core = unit.closestCore(); - if(!(unit instanceof Minerc miner) || core == null) return; + if(!(unit.canMine()) || core == null) return; - if(miner.mineTile() != null && !miner.mineTile().within(unit, unit.type.range)){ - miner.mineTile(null); + if(unit.mineTile != null && !unit.mineTile.within(unit, unit.type.range)){ + unit.mineTile(null); } if(mining){ if(timer.get(timerTarget2, 60 * 4) || targetItem == null){ - targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && miner.canMine(i), i -> core.items.get(i)); + targetItem = unit.team.data().mineItems.min(i -> indexer.hasOre(i) && unit.canMine(i), i -> core.items.get(i)); } //core full of the target item, do nothing if(targetItem != null && core.acceptStack(targetItem, 1, unit) == 0){ unit.clearItem(); - miner.mineTile(null); + unit.mineTile(null); return; } @@ -39,15 +39,15 @@ public class MinerAI extends AIController{ if(unit.stack.amount >= unit.type.itemCapacity || (targetItem != null && !unit.acceptsItem(targetItem))){ mining = false; }else{ - if(retarget() && targetItem != null){ - ore = indexer.findClosestOre(unit.x, unit.y, targetItem); + if(timer.get(timerTarget, 60) && targetItem != null){ + ore = indexer.findClosestOre(unit, targetItem); } if(ore != null){ - moveTo(ore, unit.type.range / 2f); + moveTo(ore, unit.type.range / 2f, 20f); if(unit.within(ore, unit.type.range)){ - miner.mineTile(ore); + unit.mineTile = ore; } if(ore.block() != Blocks.air){ @@ -56,7 +56,7 @@ public class MinerAI extends AIController{ } } }else{ - miner.mineTile(null); + unit.mineTile = null; if(unit.stack.amount == 0){ mining = true; @@ -79,5 +79,4 @@ public class MinerAI extends AIController{ @Override protected void updateTargeting(){ } - } diff --git a/core/src/mindustry/ai/types/RepairAI.java b/core/src/mindustry/ai/types/RepairAI.java index 36504f908d..db20cc7d60 100644 --- a/core/src/mindustry/ai/types/RepairAI.java +++ b/core/src/mindustry/ai/types/RepairAI.java @@ -23,7 +23,7 @@ public class RepairAI extends AIController{ } if(target != null){ - if(!target.within(unit, unit.type.range * 0.65f) && target instanceof Building){ + if(!target.within(unit, unit.type.range * 0.65f) && target instanceof Building b && b.team == unit.team){ moveTo(target, unit.type.range * 0.65f); } @@ -36,12 +36,11 @@ public class RepairAI extends AIController{ Building target = Units.findDamagedTile(unit.team, unit.x, unit.y); if(target instanceof ConstructBuild) target = null; - + if(target == null){ super.updateTargeting(); }else{ this.target = target; } } - } diff --git a/core/src/mindustry/ai/types/SuicideAI.java b/core/src/mindustry/ai/types/SuicideAI.java index 0ef3ece228..1143f31675 100644 --- a/core/src/mindustry/ai/types/SuicideAI.java +++ b/core/src/mindustry/ai/types/SuicideAI.java @@ -31,7 +31,7 @@ public class SuicideAI extends GroundAI{ if(!Units.invalidateTarget(target, unit, unit.range()) && unit.hasWeapons()){ rotate = true; shoot = unit.within(target, unit.type.weapons.first().bullet.range() + - (target instanceof Building ? ((Building)target).block.size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f)); + (target instanceof Building b ? b.block.size * Vars.tilesize / 2f : ((Hitboxc)target).hitSize() / 2f)); if(unit.type.hasWeapons()){ unit.aimLook(Predict.intercept(unit, target, unit.type.weapons.first().bullet.speed)); @@ -65,10 +65,9 @@ public class SuicideAI extends GroundAI{ if(!blocked){ moveToTarget = true; //move towards target directly - unit.moveAt(vec.set(target).sub(unit).limit(unit.type.speed)); + unit.moveAt(vec.set(target).sub(unit).limit(unit.speed())); } } - } if(!moveToTarget){ diff --git a/core/src/mindustry/audio/LoopControl.java b/core/src/mindustry/audio/LoopControl.java deleted file mode 100644 index 65e3789463..0000000000 --- a/core/src/mindustry/audio/LoopControl.java +++ /dev/null @@ -1,61 +0,0 @@ -package mindustry.audio; - -import arc.*; -import arc.audio.*; -import arc.math.*; -import arc.math.geom.*; -import arc.struct.*; -import mindustry.*; - -public class LoopControl{ - private ObjectMap sounds = new ObjectMap<>(); - - public void play(Sound sound, Position pos, float volume){ - if(Vars.headless) return; - - float baseVol = sound.calcFalloff(pos.getX(), pos.getY()); - float vol = baseVol * volume; - - SoundData data = sounds.get(sound, SoundData::new); - data.volume += vol; - data.volume = Mathf.clamp(data.volume, 0f, 1f); - data.total += baseVol; - data.sum.add(pos.getX() * baseVol, pos.getY() * baseVol); - } - - public void update(){ - float avol = Core.settings.getInt("ambientvol", 100) / 100f; - - sounds.each((sound, data) -> { - data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.2f); - - boolean play = data.curVolume > 0.01f; - float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total); - if(data.soundID <= 0){ - if(play){ - data.soundID = sound.loop(data.curVolume, 1f, pan); - } - }else{ - if(data.curVolume <= 0.01f){ - sound.stop(); - data.soundID = -1; - return; - } - sound.setPan(data.soundID, pan, data.curVolume); - } - - data.volume = 0f; - data.total = 0f; - data.sum.setZero(); - }); - } - - private static class SoundData{ - float volume; - float total; - Vec2 sum = new Vec2(); - - int soundID; - float curVolume; - } -} diff --git a/core/src/mindustry/audio/MusicControl.java b/core/src/mindustry/audio/SoundControl.java similarity index 54% rename from core/src/mindustry/audio/MusicControl.java rename to core/src/mindustry/audio/SoundControl.java index 52358af758..bed176f972 100644 --- a/core/src/mindustry/audio/MusicControl.java +++ b/core/src/mindustry/audio/SoundControl.java @@ -2,45 +2,99 @@ package mindustry.audio; import arc.*; import arc.audio.*; +import arc.audio.Filters.*; +import arc.files.*; import arc.math.*; +import arc.math.geom.*; import arc.struct.*; import arc.util.*; +import mindustry.*; +import mindustry.content.*; import mindustry.game.EventType.*; import mindustry.gen.*; import static mindustry.Vars.*; -/** Controls playback of multiple music tracks.*/ -public class MusicControl{ - protected static final float finTime = 120f, foutTime = 120f, musicInterval = 60 * 60 * 3f, musicChance = 0.6f, musicWaveChance = 0.5f; +/** Controls playback of multiple audio tracks.*/ +public class SoundControl{ + protected static final float finTime = 120f, foutTime = 120f, musicInterval = 60 * 60 * 3f, musicChance = 0.6f, musicWaveChance = 0.46f; /** normal, ambient music, plays at any time */ public Seq ambientMusic = Seq.with(); /** darker music, used in times of conflict */ public Seq darkMusic = Seq.with(); + /** music used explicitly after boss spawns */ + public Seq bossMusic = Seq.with(); protected Music lastRandomPlayed; - protected Interval timer = new Interval(); + protected Interval timer = new Interval(4); protected @Nullable Music current; protected float fade; protected boolean silenced; - public MusicControl(){ + protected AudioBus uiBus = new AudioBus(); + protected boolean wasPlaying; + protected AudioFilter filter = new BiquadFilter(){{ + set(0, 500, 1); + }}; + + protected ObjectMap sounds = new ObjectMap<>(); + + public SoundControl(){ Events.on(ClientLoadEvent.class, e -> reload()); //only run music 10 seconds after a wave spawns - Events.on(WaveEvent.class, e -> Time.run(60f * 10f, () -> { - if(Mathf.chance(musicWaveChance)){ + Events.on(WaveEvent.class, e -> Time.run(Mathf.random(8f, 15f) * 60f, () -> { + boolean boss = state.rules.spawns.contains(group -> group.getSpawned(state.wave - 2) > 0 && group.effect == StatusEffects.boss); + + if(boss){ + playOnce(bossMusic.random(lastRandomPlayed)); + }else if(Mathf.chance(musicWaveChance)){ playRandom(); } })); + + setupFilters(); + } + + protected void setupFilters(){ + Core.audio.soundBus.setFilter(0, filter); + Core.audio.soundBus.setFilterParam(0, Filters.paramWet, 0f); } protected void reload(){ current = null; fade = 0f; - ambientMusic = Seq.with(Musics.game1, Musics.game3, Musics.game4, Musics.game6); - darkMusic = Seq.with(Musics.game2, Musics.game5, Musics.game7); + ambientMusic = Seq.with(Musics.game1, Musics.game3, Musics.game6, Musics.game8, Musics.game9); + darkMusic = Seq.with(Musics.game2, Musics.game5, Musics.game7, Musics.game4); + bossMusic = Seq.with(Musics.boss1, Musics.boss2, Musics.game2, Musics.game5); + + //setup UI bus for all sounds that are in the UI folder + for(var sound : Core.assets.getAll(Sound.class, new Seq<>())){ + var file = Fi.get(Core.assets.getAssetFileName(sound)); + if(file.parent().name().equals("ui")){ + sound.setBus(uiBus); + } + } + } + + public void loop(Sound sound, float volume){ + if(Vars.headless) return; + + loop(sound, Core.camera.position, volume); + } + + public void loop(Sound sound, Position pos, float volume){ + if(Vars.headless) return; + + float baseVol = sound.calcFalloff(pos.getX(), pos.getY()); + float vol = baseVol * volume; + + SoundData data = sounds.get(sound, SoundData::new); + data.volume += vol; + data.volume = Mathf.clamp(data.volume, 0f, 1f); + data.total += baseVol; + data.sum.add(pos.getX() * baseVol, pos.getY() * baseVol); } public void stop(){ @@ -54,6 +108,32 @@ public class MusicControl{ /** Update and play the right music track.*/ public void update(){ + boolean paused = state.isGame() && Core.scene.hasDialog(); + boolean playing = state.isGame(); + + //check if current track is finished + if(current != null && !current.isPlaying()){ + current = null; + fade = 0f; + } + + //fade the lowpass filter in/out, poll every 30 ticks just in case performance is an issue + if(timer.get(1, 30f)){ + Core.audio.soundBus.fadeFilterParam(0, Filters.paramWet, paused ? 1f : 0f, 0.4f); + } + + //play/stop ordinary effects + if(playing != wasPlaying){ + wasPlaying = playing; + + if(playing){ + Core.audio.soundBus.play(); + setupFilters(); + }else{ + Core.audio.soundBus.stop(); + } + } + if(state.isMenu()){ silenced = false; if(ui.planet.isShown()){ @@ -78,10 +158,46 @@ public class MusicControl{ } } } + + updateLoops(); + } + + protected void updateLoops(){ + //clear loops when in menu + if(!state.isGame()){ + sounds.clear(); + return; + } + + float avol = Core.settings.getInt("ambientvol", 100) / 100f; + + sounds.each((sound, data) -> { + data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.2f); + + boolean play = data.curVolume > 0.01f; + float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total); + if(data.soundID <= 0 || !Core.audio.isPlaying(data.soundID)){ + if(play){ + data.soundID = sound.loop(data.curVolume, 1f, pan); + Core.audio.protect(data.soundID, true); + } + }else{ + if(data.curVolume <= 0.001f){ + sound.stop(); + data.soundID = -1; + return; + } + Core.audio.set(data.soundID, pan, data.curVolume); + } + + data.volume = 0f; + data.total = 0f; + data.sum.setZero(); + }); } /** Plays a random track.*/ - protected void playRandom(){ + public void playRandom(){ if(isDark()){ playOnce(darkMusic.random(lastRandomPlayed)); }else{ @@ -170,12 +286,6 @@ public class MusicControl{ current = music; current.setVolume(1f); current.setLooping(false); - current.setCompletionListener(m -> { - if(current == m){ - current = null; - fade = 0f; - } - }); current.play(); } @@ -187,4 +297,13 @@ public class MusicControl{ protected void silence(){ play(null); } + + protected static class SoundData{ + float volume; + float total; + Vec2 sum = new Vec2(); + + int soundID; + float curVolume; + } } diff --git a/core/src/mindustry/audio/SoundLoop.java b/core/src/mindustry/audio/SoundLoop.java index 99d6837251..d10eb02214 100644 --- a/core/src/mindustry/audio/SoundLoop.java +++ b/core/src/mindustry/audio/SoundLoop.java @@ -1,5 +1,6 @@ package mindustry.audio; +import arc.*; import arc.audio.*; import arc.math.*; import arc.util.*; @@ -18,7 +19,7 @@ public class SoundLoop{ } public void update(float x, float y, boolean play){ - if(baseVolume < 0) return; + if(baseVolume <= 0) return; if(id < 0){ if(play){ @@ -31,18 +32,19 @@ public class SoundLoop{ }else{ volume = Mathf.clamp(volume - fadeSpeed * Time.delta); if(volume <= 0.001f){ - sound.stop(id); + Core.audio.stop(id); id = -1; return; } } - sound.setPan(id, sound.calcPan(x, y), sound.calcVolume(x, y) * volume * baseVolume); + + Core.audio.set(id, sound.calcPan(x, y), sound.calcVolume(x, y) * volume * baseVolume); } } public void stop(){ if(id != -1){ - sound.stop(id); + Core.audio.stop(id); id = -1; volume = baseVolume = -1; } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 1ab4e13252..b6f8e76b14 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -39,8 +39,8 @@ public class Blocks implements ContentList{ //environment air, spawn, cliff, deepwater, water, taintedWater, tar, slag, stone, craters, charr, sand, darksand, dirt, mud, ice, snow, darksandTaintedWater, space, dacite, stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster, - iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, shaleBoulder, sandBoulder, daciteBoulder, grass, salt, - metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, basalt, magmarock, hotrock, snowWall, boulder, snowBoulder, saltWall, + iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, grass, salt, + metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, basalt, magmarock, hotrock, snowWall, saltWall, darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal, pebbles, tendrils, @@ -89,7 +89,7 @@ public class Blocks implements ContentList{ message, switchBlock, microProcessor, logicProcessor, hyperProcessor, largeLogicDisplay, logicDisplay, memoryCell, memoryBank, //campaign - launchPad, launchPadLarge, + launchPad, launchPadLarge, interplanetaryAccelerator, //misc experimental blockForge, blockLoader, blockUnloader; @@ -102,6 +102,8 @@ public class Blocks implements ContentList{ { alwaysReplace = true; hasShadow = false; + useColor = false; + wall = this; } @Override public void drawBase(Tile tile){} @@ -172,12 +174,14 @@ public class Blocks implements ContentList{ isLiquid = true; cacheLayer = CacheLayer.water; albedo = 0.5f; + attributes.set(Attribute.spores, 0.15f); }}; darksandTaintedWater = new ShallowLiquid("darksand-tainted-water"){{ speedMultiplier = 0.75f; statusDuration = 60f; albedo = 0.5f; + attributes.set(Attribute.spores, 0.1f); }}; sandWater = new ShallowLiquid("sand-water"){{ @@ -284,6 +288,10 @@ public class Blocks implements ContentList{ attributes.set(Attribute.water, 1f); cacheLayer = CacheLayer.mud; albedo = 0.35f; + walkSound = Sounds.mud; + walkSoundVolume = 0.08f; + walkSoundPitchMin = 0.4f; + walkSoundPitchMax = 0.5f; }}; ((ShallowLiquid)darksandTaintedWater).set(Blocks.taintedWater, Blocks.darksand); @@ -318,6 +326,11 @@ public class Blocks implements ContentList{ attributes.set(Attribute.water, 0.3f); }}; + shale = new Floor("shale"){{ + variants = 3; + attributes.set(Attribute.oil, 1f); + }}; + stoneWall = new StaticWall("stone-wall"){{ variants = 2; }}; @@ -326,15 +339,6 @@ public class Blocks implements ContentList{ variants = 2; }}; - boulder = new Boulder("boulder"){{ - variants = 2; - }}; - - snowBoulder = new Boulder("snow-boulder"){{ - variants = 2; - snow.asFloor().decoration = ice.asFloor().decoration = iceSnow.asFloor().decoration = this; - }}; - dirtWall = new StaticWall("dirt-wall"){{ variants = 2; }}; @@ -364,6 +368,12 @@ public class Blocks implements ContentList{ saltWall = new StaticWall("salt-wall"); + shrubs = new StaticWall("shrubs"); + + shaleWall = new StaticWall("shale-wall"){{ + variants = 2; + }}; + sporePine = new StaticTree("spore-pine"){{ variants = 0; }}; @@ -376,8 +386,6 @@ public class Blocks implements ContentList{ variants = 0; }}; - shrubs = new StaticWall("shrubs"); - whiteTreeDead = new TreeBlock("white-tree-dead"); whiteTree = new TreeBlock("white-tree"); @@ -386,13 +394,13 @@ public class Blocks implements ContentList{ variants = 3; }}; - shale = new Floor("shale"){{ - variants = 3; - attributes.set(Attribute.oil, 1f); + boulder = new Boulder("boulder"){{ + variants = 2; }}; - shaleWall = new StaticWall("shale-wall"){{ + snowBoulder = new Boulder("snow-boulder"){{ variants = 2; + snow.asFloor().decoration = ice.asFloor().decoration = iceSnow.asFloor().decoration = salt.asFloor().decoration = this; }}; shaleBoulder = new Boulder("shale-boulder"){{ @@ -407,6 +415,10 @@ public class Blocks implements ContentList{ variants = 2; }}; + basaltBoulder = new Boulder("basalt-boulder"){{ + variants = 2; + }}; + moss = new Floor("moss"){{ variants = 3; attributes.set(Attribute.spores, 0.15f); @@ -528,7 +540,7 @@ public class Blocks implements ContentList{ hasLiquids = false; flameColor = Color.valueOf("ffef99"); - consumes.items(new ItemStack(Items.coal, 1), new ItemStack(Items.sand, 2)); + consumes.items(with(Items.coal, 1, Items.sand, 2)); consumes.power(0.50f); }}; @@ -544,7 +556,7 @@ public class Blocks implements ContentList{ itemCapacity = 30; boostScale = 0.15f; - consumes.items(new ItemStack(Items.coal, 4), new ItemStack(Items.sand, 6), new ItemStack(Items.pyratite, 1)); + consumes.items(with(Items.coal, 4, Items.sand, 6, Items.pyratite, 1)); consumes.power(4f); }}; @@ -557,7 +569,7 @@ public class Blocks implements ContentList{ hasPower = hasItems = true; flameColor = Color.valueOf("ffc099"); - consumes.items(new ItemStack(Items.lead, 1), new ItemStack(Items.sand, 1)); + consumes.items(with(Items.lead, 1, Items.sand, 1)); consumes.power(0.60f); }}; @@ -588,7 +600,10 @@ public class Blocks implements ContentList{ hasPower = true; drawer = new DrawWeave(); - consumes.items(new ItemStack(Items.thorium, 4), new ItemStack(Items.sand, 10)); + ambientSound = Sounds.techloop; + ambientSoundVolume = 0.02f; + + consumes.items(with(Items.thorium, 4, Items.sand, 10)); consumes.power(5f); itemCapacity = 20; }}; @@ -602,7 +617,7 @@ public class Blocks implements ContentList{ hasPower = true; consumes.power(4f); - consumes.items(new ItemStack(Items.copper, 3), new ItemStack(Items.lead, 4), new ItemStack(Items.titanium, 2), new ItemStack(Items.silicon, 3)); + consumes.items(with(Items.copper, 3, Items.lead, 4, Items.titanium, 2, Items.silicon, 3)); }}; cryofluidMixer = new LiquidConverter("cryofluid-mixer"){{ @@ -623,17 +638,6 @@ public class Blocks implements ContentList{ consumes.liquid(Liquids.water, 0.2f); }}; - blastMixer = new GenericCrafter("blast-mixer"){{ - requirements(Category.crafting, with(Items.lead, 30, Items.titanium, 20)); - hasItems = true; - hasPower = true; - outputItem = new ItemStack(Items.blastCompound, 1); - size = 2; - - consumes.items(new ItemStack(Items.pyratite, 1), new ItemStack(Items.sporePod, 1)); - consumes.power(0.40f); - }}; - pyratiteMixer = new GenericSmelter("pyratite-mixer"){{ requirements(Category.crafting, with(Items.copper, 50, Items.lead, 25)); flameColor = Color.clear; @@ -644,7 +648,18 @@ public class Blocks implements ContentList{ size = 2; consumes.power(0.20f); - consumes.items(new ItemStack(Items.coal, 1), new ItemStack(Items.lead, 2), new ItemStack(Items.sand, 2)); + consumes.items(with(Items.coal, 1, Items.lead, 2, Items.sand, 2)); + }}; + + blastMixer = new GenericCrafter("blast-mixer"){{ + requirements(Category.crafting, with(Items.lead, 30, Items.titanium, 20)); + hasItems = true; + hasPower = true; + outputItem = new ItemStack(Items.blastCompound, 1); + size = 2; + + consumes.items(with(Items.pyratite, 1, Items.sporePod, 1)); + consumes.power(0.40f); }}; melter = new GenericCrafter("melter"){{ @@ -716,6 +731,8 @@ public class Blocks implements ContentList{ updateEffect = Fx.pulverizeSmall; hasItems = hasPower = true; drawer = new DrawRotator(); + ambientSound = Sounds.grinding; + ambientSoundVolume = 0.025f; consumes.item(Items.scrap, 1); consumes.power(0.50f); @@ -912,7 +929,7 @@ public class Blocks implements ContentList{ size = 3; phaseRadiusBoost = 80f; radius = 101.7f; - breakage = 750f; + shieldHealth = 750f; cooldownNormal = 1.5f; cooldownLiquid = 1.2f; cooldownBrokenBase = 0.35f; @@ -1140,7 +1157,7 @@ public class Blocks implements ContentList{ }}; battery = new Battery("battery"){{ - requirements(Category.power, with(Items.copper, 4, Items.lead, 20)); + requirements(Category.power, with(Items.copper, 5, Items.lead, 20)); consumes.powerBuffered(4000f); }}; @@ -1154,6 +1171,9 @@ public class Blocks implements ContentList{ requirements(Category.power, with(Items.copper, 25, Items.lead, 15)); powerProduction = 1f; itemDuration = 120f; + + ambientSound = Sounds.smelter; + ambientSoundVolume = 0.03f; }}; thermalGenerator = new ThermalGenerator("thermal-generator"){{ @@ -1162,6 +1182,8 @@ public class Blocks implements ContentList{ generateEffect = Fx.redgeneratespark; size = 2; floating = true; + ambientSound = Sounds.hum; + ambientSoundVolume = 0.06f; }}; steamGenerator = new BurnerGenerator("steam-generator"){{ @@ -1171,6 +1193,9 @@ public class Blocks implements ContentList{ consumes.liquid(Liquids.water, 0.1f); hasLiquids = true; size = 2; + + ambientSound = Sounds.smelter; + ambientSoundVolume = 0.05f; }}; differentialGenerator = new SingleTypeGenerator("differential-generator"){{ @@ -1180,6 +1205,8 @@ public class Blocks implements ContentList{ hasLiquids = true; hasItems = true; size = 3; + ambientSound = Sounds.steam; + ambientSoundVolume = 0.03f; consumes.item(Items.pyratite).optional(true, false); consumes.liquid(Liquids.cryofluid, 0.1f); @@ -1189,22 +1216,24 @@ public class Blocks implements ContentList{ requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 25, Items.plastanium, 75, Items.thorium, 50)); size = 2; powerProduction = 4.5f; - itemDuration = 60 * 18f; + itemDuration = 60 * 15f; }}; solarPanel = new SolarGenerator("solar-panel"){{ requirements(Category.power, with(Items.lead, 10, Items.silicon, 15)); - powerProduction = 0.07f; + powerProduction = 0.08f; }}; largeSolarPanel = new SolarGenerator("solar-panel-large"){{ requirements(Category.power, with(Items.lead, 100, Items.silicon, 145, Items.phaseFabric, 15)); size = 3; - powerProduction = 0.95f; + powerProduction = 1f; }}; thoriumReactor = new NuclearReactor("thorium-reactor"){{ requirements(Category.power, with(Items.lead, 300, Items.silicon, 200, Items.graphite, 150, Items.thorium, 150, Items.metaglass, 50)); + ambientSound = Sounds.hum; + ambientSoundVolume = 0.24f; size = 3; health = 700; itemDuration = 360f; @@ -1220,6 +1249,9 @@ public class Blocks implements ContentList{ health = 900; powerProduction = 130f; itemDuration = 140f; + ambientSound = Sounds.pulse; + ambientSoundVolume = 0.07f; + consumes.power(25f); consumes.item(Items.blastCompound); consumes.liquid(Liquids.cryofluid, 0.25f); @@ -1326,7 +1358,7 @@ public class Blocks implements ContentList{ //region storage coreShard = new CoreBlock("core-shard"){{ - requirements(Category.effect, BuildVisibility.hidden, with(Items.copper, 2000, Items.lead, 1000)); + requirements(Category.effect, BuildVisibility.editorOnly, with(Items.copper, 1000, Items.lead, 800)); alwaysUnlocked = true; unitType = UnitTypes.alpha; @@ -1400,7 +1432,7 @@ public class Blocks implements ContentList{ restitution = 0.03f; range = 100; shootCone = 15f; - ammoUseEffect = Fx.shellEjectSmall; + ammoUseEffect = Fx.casing1; health = 250; inaccuracy = 2f; rotateSpeed = 10f; @@ -1460,7 +1492,7 @@ public class Blocks implements ContentList{ inaccuracy = 1f; shootCone = 10f; health = 260; - shootSound = Sounds.artillery; + shootSound = Sounds.bang; }}; wave = new LiquidTurret("wave"){{ @@ -1480,7 +1512,7 @@ public class Blocks implements ContentList{ shootEffect = Fx.shootLiquid; range = 110f; health = 250 * size * size; - shootSound = Sounds.splash; + flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher); }}; lancer = new ChargeTurret("lancer"){{ @@ -1541,10 +1573,10 @@ public class Blocks implements ContentList{ hasPower = true; size = 2; - force = 5f; - scaledForce = 5.5f; - range = 160f; - damage = 0.4f; + force = 8f; + scaledForce = 7f; + range = 230f; + damage = 0.3f; health = 160 * size * size; rotateSpeed = 10; @@ -1589,7 +1621,7 @@ public class Blocks implements ContentList{ shootShake = 1f; burstSpacing = 3f; shots = 4; - ammoUseEffect = Fx.shellEjectBig; + ammoUseEffect = Fx.casing2; health = 240 * size * size; shootSound = Sounds.shootBig; }}; @@ -1628,7 +1660,6 @@ public class Blocks implements ContentList{ shootEffect = Fx.shootLiquid; range = 190f; health = 250 * size * size; - shootSound = Sounds.splash; }}; fuse = new ItemTurret("fuse"){{ @@ -1650,17 +1681,19 @@ public class Blocks implements ContentList{ float brange = range + 10f; ammo( - Items.thorium, new ShrapnelBulletType(){{ - length = brange; - damage = 105f; - ammoMultiplier = 5f; - }}, Items.titanium, new ShrapnelBulletType(){{ length = brange; damage = 66f; ammoMultiplier = 4f; width = 17f; reloadMultiplier = 1.3f; + }}, + Items.thorium, new ShrapnelBulletType(){{ + length = brange; + damage = 105f; + ammoMultiplier = 5f; + toColor = Pal.thoriumPink; + shootEffect = smokeEffect = Fx.thoriumShoot; }} ); }}; @@ -1681,7 +1714,7 @@ public class Blocks implements ContentList{ inaccuracy = 12f; reloadTime = 60f; ammoEjectBack = 5f; - ammoUseEffect = Fx.shellEjectBig; + ammoUseEffect = Fx.casing3Double; ammoPerShot = 2; cooldown = 0.03f; velocityInaccuracy = 0.2f; @@ -1738,8 +1771,7 @@ public class Blocks implements ContentList{ rotateSpeed = 2.5f; reloadTime = 200f; - restitution = 0.2f; - ammoUseEffect = Fx.shellEjectBig; + ammoUseEffect = Fx.casing3Double; recoilAmount = 5f; restitution = 0.009f; cooldown = 0.009f; @@ -1747,13 +1779,13 @@ public class Blocks implements ContentList{ shots = 1; size = 4; shootCone = 2f; - shootSound = Sounds.shootBig; + shootSound = Sounds.railgun; unitSort = (u, x, y) -> -u.maxHealth; - coolantMultiplier = 0.09f; + coolantMultiplier = 0.2f; health = 150 * size * size; - consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 2f)).update(false).optional(true, true); + coolantUsage = 1f; consumes.powerCond(10f, TurretBuild::isActive); }}; @@ -1768,7 +1800,7 @@ public class Blocks implements ContentList{ reloadTime = 6f; coolantMultiplier = 0.5f; restitution = 0.1f; - ammoUseEffect = Fx.shellEjectBig; + ammoUseEffect = Fx.casing3; range = 200f; inaccuracy = 3f; recoilAmount = 3f; @@ -1781,7 +1813,7 @@ public class Blocks implements ContentList{ shootSound = Sounds.shootBig; health = 160 * size * size; - consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 2f)).update(false).optional(true, true); + coolantUsage = 1f; }}; meltdown = new LaserTurret("meltdown"){{ @@ -1797,8 +1829,8 @@ public class Blocks implements ContentList{ shootDuration = 220f; powerUse = 17f; shootSound = Sounds.laserbig; - activeSound = Sounds.beam; - activeSoundVolume = 2f; + loopSound = Sounds.beam; + loopSoundVolume = 2f; shootType = new ContinuousLaserBulletType(70){{ length = 200f; @@ -1987,9 +2019,9 @@ public class Blocks implements ContentList{ illuminator = new LightBlock("illuminator"){{ requirements(Category.effect, BuildVisibility.lightingOnly, with(Items.graphite, 12, Items.silicon, 8)); - brightness = 0.67f; - radius = 140f; - consumes.power(0.06f); + brightness = 0.75f; + radius = 120f; + consumes.power(0.05f); }}; //endregion @@ -1998,6 +2030,12 @@ public class Blocks implements ContentList{ //looked up by name, no ref needed new LegacyMechPad("legacy-mech-pad"); new LegacyUnitFactory("legacy-unit-factory"); + new LegacyUnitFactory("legacy-unit-factory-air"){{ + replacement = Blocks.airFactory; + }}; + new LegacyUnitFactory("legacy-unit-factory-ground"){{ + replacement = Blocks.groundFactory; + }}; //endregion //region campaign @@ -2013,7 +2051,6 @@ public class Blocks implements ContentList{ //TODO remove launchPadLarge = new LaunchPad("launch-pad-large"){{ - //requirements(Category.effect, BuildVisibility.campaignOnly, with(Items.titanium, 200, Items.silicon, 150, Items.lead, 250, Items.plastanium, 75)); size = 4; itemCapacity = 300; launchTime = 60f * 35; @@ -2021,6 +2058,15 @@ public class Blocks implements ContentList{ consumes.power(6f); }}; + interplanetaryAccelerator = new Accelerator("interplanetary-accelerator"){{ + requirements(Category.effect, BuildVisibility.campaignOnly, with(Items.copper, 16000, Items.silicon, 11000, Items.thorium, 13000, Items.titanium, 12000, Items.surgeAlloy, 6000, Items.phaseFabric, 5000)); + researchCostMultiplier = 0.1f; + size = 7; + hasPower = true; + consumes.power(10f); + buildCostMultiplier = 0.5f; + }}; + //endregion campaign //region logic @@ -2033,7 +2079,7 @@ public class Blocks implements ContentList{ }}; microProcessor = new LogicBlock("micro-processor"){{ - requirements(Category.logic, with(Items.copper, 80, Items.lead, 50, Items.silicon, 50)); + requirements(Category.logic, with(Items.copper, 80, Items.lead, 50, Items.silicon, 30)); instructionsPerTick = 2; @@ -2041,7 +2087,7 @@ public class Blocks implements ContentList{ }}; logicProcessor = new LogicBlock("logic-processor"){{ - requirements(Category.logic, with(Items.lead, 320, Items.silicon, 100, Items.graphite, 60, Items.thorium, 50)); + requirements(Category.logic, with(Items.lead, 320, Items.silicon, 60, Items.graphite, 60, Items.thorium, 50)); instructionsPerTick = 8; @@ -2051,7 +2097,7 @@ public class Blocks implements ContentList{ }}; hyperProcessor = new LogicBlock("hyper-processor"){{ - requirements(Category.logic, with(Items.lead, 450, Items.silicon, 150, Items.thorium, 75, Items.surgeAlloy, 50)); + requirements(Category.logic, with(Items.lead, 450, Items.silicon, 130, Items.thorium, 75, Items.surgeAlloy, 50)); consumes.liquid(Liquids.cryofluid, 0.08f); hasLiquids = true; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index e2d42c0ef0..c7fa47a62b 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -30,18 +30,33 @@ public class Bullets implements ContentList{ missileExplosive, missileIncendiary, missileSurge, //standard - standardCopper, standardDense, standardThorium, standardHoming, standardIncendiary, standardMechSmall, - standardGlaive, standardDenseBig, standardThoriumBig, standardIncendiaryBig, + standardCopper, standardDense, standardThorium, standardHoming, standardIncendiary, + standardDenseBig, standardThoriumBig, standardIncendiaryBig, //liquid waterShot, cryoShot, slagShot, oilShot, heavyWaterShot, heavyCryoShot, heavySlagShot, heavyOilShot, //environment, misc. - damageLightning, damageLightningGround, fireball, basicFlame, pyraFlame, driverBolt, healBullet, healBulletBig, frag; + damageLightning, damageLightningGround, fireball, basicFlame, pyraFlame, driverBolt, healBullet, healBulletBig; @Override public void load(){ + //lightning bullets need to be initialized first. + damageLightning = new BulletType(0.0001f, 0f){{ + lifetime = Fx.lightning.lifetime; + hitEffect = Fx.hitLancer; + despawnEffect = Fx.none; + status = StatusEffects.shocked; + statusDuration = 10f; + hittable = false; + }}; + + //this is just a copy of the damage lightning bullet that doesn't damage air units + damageLightningGround = new BulletType(0.0001f, 0f){}; + JsonIO.copy(damageLightning, damageLightningGround); + damageLightningGround.collidesAir = false; + artilleryDense = new ArtilleryBulletType(3f, 20, "shell"){{ hitEffect = Fx.flakExplosion; knockback = 0.8f; @@ -102,6 +117,7 @@ public class Bullets implements ContentList{ status = StatusEffects.burning; frontColor = Pal.lightishOrange; backColor = Pal.lightOrange; + makeFire = true; trailEffect = Fx.incendTrail; }}; @@ -265,6 +281,7 @@ public class Bullets implements ContentList{ homingPower = 0.08f; splashDamageRadius = 20f; splashDamage = 20f; + makeFire = true; hitEffect = Fx.blastExplosion; status = StatusEffects.burning; }}; @@ -278,6 +295,7 @@ public class Bullets implements ContentList{ splashDamage = 25f; hitEffect = Fx.blastExplosion; despawnEffect = Fx.blastExplosion; + lightningDamage = 10; lightning = 2; lightningLength = 10; }}; @@ -323,27 +341,11 @@ public class Bullets implements ContentList{ frontColor = Pal.lightishOrange; backColor = Pal.lightOrange; status = StatusEffects.burning; + makeFire = true; inaccuracy = 3f; lifetime = 60f; }}; - standardGlaive = new BasicBulletType(4f, 7.5f, "bullet"){{ - width = 10f; - height = 12f; - frontColor = Color.valueOf("feb380"); - backColor = Color.valueOf("ea8878"); - status = StatusEffects.burning; - lifetime = 60f; - }}; - - standardMechSmall = new BasicBulletType(4f, 9, "bullet"){{ - width = 11f; - height = 14f; - lifetime = 40f; - inaccuracy = 5f; - despawnEffect = Fx.hitBulletSmall; - }}; - standardDenseBig = new BasicBulletType(7f, 55, "bullet"){{ width = 15f; height = 21f; @@ -356,6 +358,7 @@ public class Bullets implements ContentList{ shootEffect = Fx.shootBig; pierceCap = 2; pierceBuilding = true; + knockback = 0.7f; }}; standardIncendiaryBig = new BasicBulletType(7f, 60, "bullet"){{ @@ -365,24 +368,12 @@ public class Bullets implements ContentList{ backColor = Pal.lightOrange; status = StatusEffects.burning; shootEffect = Fx.shootBig; + makeFire = true; pierceCap = 2; pierceBuilding = true; + knockback = 0.7f; }}; - damageLightning = new BulletType(0.0001f, 0f){{ - lifetime = Fx.lightning.lifetime; - hitEffect = Fx.hitLancer; - despawnEffect = Fx.none; - status = StatusEffects.shocked; - statusDuration = 10f; - hittable = false; - }}; - - //this is just a copy of the damage lightning bullet that doesn't damage air units - damageLightningGround = new BulletType(0.0001f, 0f){}; - JsonIO.copy(damageLightning, damageLightningGround); - damageLightningGround.collidesAir = false; - healBullet = new LaserBoltBulletType(5.2f, 13){{ healPercent = 3f; collidesTeam = true; @@ -437,7 +428,7 @@ public class Bullets implements ContentList{ } }; - basicFlame = new BulletType(3.35f, 15f){{ + basicFlame = new BulletType(3.35f, 16f){{ ammoMultiplier = 3f; hitSize = 7f; lifetime = 18f; @@ -452,7 +443,7 @@ public class Bullets implements ContentList{ hittable = false; }}; - pyraFlame = new BulletType(3.35f, 22f){{ + pyraFlame = new BulletType(3.35f, 25f){{ ammoMultiplier = 4f; hitSize = 7f; lifetime = 18f; @@ -489,9 +480,9 @@ public class Bullets implements ContentList{ knockback = 1.7f; puddleSize = 8f; drag = 0.001f; - ammoMultiplier = 2f; + ammoMultiplier = 0.4f; statusDuration = 60f * 4f; - damage = 0.1f; + damage = 0.2f; }}; heavyCryoShot = new LiquidBulletType(Liquids.cryofluid){{ @@ -500,9 +491,9 @@ public class Bullets implements ContentList{ knockback = 1.3f; puddleSize = 8f; drag = 0.001f; - ammoMultiplier = 2f; + ammoMultiplier = 0.4f; statusDuration = 60f * 4f; - damage = 0.1f; + damage = 0.2f; }}; heavySlagShot = new LiquidBulletType(Liquids.slag){{ @@ -510,9 +501,9 @@ public class Bullets implements ContentList{ speed = 4f; knockback = 1.3f; puddleSize = 8f; - damage = 5f; + damage = 4.75f; drag = 0.001f; - ammoMultiplier = 2f; + ammoMultiplier = 0.4f; statusDuration = 60f * 4f; }}; @@ -522,19 +513,11 @@ public class Bullets implements ContentList{ knockback = 1.3f; puddleSize = 8f; drag = 0.001f; - ammoMultiplier = 2f; + ammoMultiplier = 0.4f; statusDuration = 60f * 4f; - damage = 0.1f; + damage = 0.2f; }}; driverBolt = new MassDriverBolt(); - - frag = new BasicBulletType(5f, 8, "bullet"){{ - width = 8f; - height = 9f; - shrinkY = 0.5f; - lifetime = 50f; - drag = 0.04f; - }}; } } diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 5d0c45348d..ef2973f19e 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -257,33 +257,33 @@ public class Fx{ randLenVectors(e.id, 9, 3 + 20f * e.finpow(), (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.4f); }); - }).ground(), + }).layer(Layer.debris), unitLand = new Effect(30, e -> { color(Tmp.c1.set(e.color).mul(1.1f)); randLenVectors(e.id, 6, 17f * e.finpow(), (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.3f); }); - }).ground(), + }).layer(Layer.debris), unitLandSmall = new Effect(30, e -> { color(Tmp.c1.set(e.color).mul(1.1f)); randLenVectors(e.id, (int)(6 * e.rotation), 12f * e.finpow() * e.rotation, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.1f); }); - }).ground(), + }).layer(Layer.debris), unitPickup = new Effect(18, e -> { color(Pal.lightishGray); stroke(e.fin() * 2f); Lines.poly(e.x, e.y, 4, 13f * e.fout()); - }).ground(), + }).layer(Layer.debris), landShock = new Effect(12, e -> { color(Pal.lancerLaser); stroke(e.fout() * 3f); Lines.poly(e.x, e.y, 12, 20f * e.fout()); - }).ground(), + }).layer(Layer.debris), pickup = new Effect(18, e -> { color(Pal.lightishGray); @@ -389,7 +389,6 @@ public class Fx{ float ang = Mathf.angle(x, y); lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f); }); - }), hitBulletBig = new Effect(13, e -> { @@ -400,7 +399,6 @@ public class Fx{ float ang = Mathf.angle(x, y); lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1.5f); }); - }), hitFlameSmall = new Effect(14, e -> { @@ -411,7 +409,6 @@ public class Fx{ float ang = Mathf.angle(x, y); lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f); }); - }), hitLiquid = new Effect(16, e -> { @@ -420,7 +417,6 @@ public class Fx{ randLenVectors(e.id, 5, e.fin() * 15f, e.rotation, 60f, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 2f); }); - }), hitLancer = new Effect(12, e -> { @@ -431,7 +427,6 @@ public class Fx{ float ang = Mathf.angle(x, y); lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f); }); - }), hitMeltdown = new Effect(12, e -> { @@ -442,7 +437,6 @@ public class Fx{ float ang = Mathf.angle(x, y); lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f); }); - }), hitMeltHeal = new Effect(12, e -> { @@ -453,7 +447,6 @@ public class Fx{ float ang = Mathf.angle(x, y); lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f); }); - }), instBomb = new Effect(15f, 100f, e -> { @@ -553,8 +546,8 @@ public class Fx{ }), flakExplosion = new Effect(20, e -> { - color(Pal.bulletYellow); + e.scaled(6, i -> { stroke(3f * i.fout()); Lines.circle(e.x, e.y, 3f + i.fin() * 10f); @@ -572,12 +565,11 @@ public class Fx{ randLenVectors(e.id + 1, 4, 1f + 23f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f); }); - }), plasticExplosion = new Effect(24, e -> { - color(Pal.plastaniumFront); + e.scaled(7, i -> { stroke(3f * i.fout()); Lines.circle(e.x, e.y, 3f + i.fin() * 24f); @@ -595,12 +587,11 @@ public class Fx{ randLenVectors(e.id + 1, 4, 1f + 25f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f); }); - }), plasticExplosionFlak = new Effect(28, e -> { - color(Pal.plastaniumFront); + e.scaled(7, i -> { stroke(3f * i.fout()); Lines.circle(e.x, e.y, 3f + i.fin() * 34f); @@ -618,12 +609,11 @@ public class Fx{ randLenVectors(e.id + 1, 4, 1f + 30f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f); }); - }), blastExplosion = new Effect(22, e -> { - color(Pal.missileYellow); + e.scaled(6, i -> { stroke(3f * i.fout()); Lines.circle(e.x, e.y, 3f + i.fin() * 15f); @@ -641,12 +631,11 @@ public class Fx{ randLenVectors(e.id + 1, 4, 1f + 23f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f); }); - }), sapExplosion = new Effect(25, e -> { - color(Pal.sapBullet); + e.scaled(6, i -> { stroke(3f * i.fout()); Lines.circle(e.x, e.y, 3f + i.fin() * 80f); @@ -664,12 +653,11 @@ public class Fx{ randLenVectors(e.id + 1, 8, 1f + 60f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f); }); - }), massiveExplosion = new Effect(30, e -> { - color(Pal.missileYellow); + e.scaled(7, i -> { stroke(3f * i.fout()); Lines.circle(e.x, e.y, 4f + i.fin() * 30f); @@ -687,7 +675,6 @@ public class Fx{ randLenVectors(e.id + 1, 6, 1f + 29f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 4f); }); - }), artilleryTrail = new Effect(50, e -> { @@ -712,8 +699,8 @@ public class Fx{ }), flakExplosionBig = new Effect(30, e -> { - color(Pal.bulletYellowBack); + e.scaled(6, i -> { stroke(3f * i.fout()); Lines.circle(e.x, e.y, 3f + i.fin() * 25f); @@ -731,7 +718,6 @@ public class Fx{ randLenVectors(e.id + 1, 4, 1f + 23f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f); }); - }), burning = new Effect(35f, e -> { @@ -740,7 +726,6 @@ public class Fx{ randLenVectors(e.id, 3, 2f + e.fin() * 7f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.1f + e.fout() * 1.4f); }); - }), fire = new Effect(50f, e -> { @@ -761,7 +746,6 @@ public class Fx{ randLenVectors(e.id, 1, 2f + e.fin() * 7f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f); }); - }), steam = new Effect(35f, e -> { @@ -770,7 +754,6 @@ public class Fx{ randLenVectors(e.id, 2, 2f + e.fin() * 7f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f); }); - }), fireballsmoke = new Effect(25f, e -> { @@ -779,7 +762,6 @@ public class Fx{ randLenVectors(e.id, 1, 2f + e.fin() * 7f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f); }); - }), ballfire = new Effect(25f, e -> { @@ -788,7 +770,6 @@ public class Fx{ randLenVectors(e.id, 2, 2f + e.fin() * 7f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f); }); - }), freezing = new Effect(40f, e -> { @@ -797,7 +778,6 @@ public class Fx{ randLenVectors(e.id, 2, 1f + e.fin() * 2f, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 1.2f); }); - }), melting = new Effect(40f, e -> { @@ -806,7 +786,6 @@ public class Fx{ randLenVectors(e.id, 2, 1f + e.fin() * 3f, (x, y) -> { Fill.circle(e.x + x, e.y + y, .2f + e.fout() * 1.2f); }); - }), wet = new Effect(80f, e -> { @@ -815,7 +794,7 @@ public class Fx{ Fill.circle(e.x, e.y, e.fout() * 1f); }), - + muddy = new Effect(80f, e -> { color(Color.valueOf("432722")); alpha(Mathf.clamp(e.fin() * 2f)); @@ -829,7 +808,6 @@ public class Fx{ randLenVectors(e.id, 2, 1f + e.fin() * 2f, (x, y) -> { Fill.square(e.x + x, e.y + y, e.fslope() * 1.1f, 45f); }); - }), sporeSlowed = new Effect(40f, e -> { @@ -844,7 +822,6 @@ public class Fx{ randLenVectors(e.id, 2, 1f + e.fin() * 2f, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 1f); }); - }), overdriven = new Effect(20f, e -> { @@ -853,7 +830,6 @@ public class Fx{ randLenVectors(e.id, 2, 1f + e.fin() * 2f, (x, y) -> { Fill.square(e.x + x, e.y + y, e.fout() * 2.3f + 0.5f); }); - }), overclocked = new Effect(50f, e -> { @@ -962,7 +938,6 @@ public class Fx{ randLenVectors(e.id + 1, 9, 1f + 23f * e.finpow(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f); }); - }), blockExplosionSmoke = new Effect(30, e -> { @@ -972,7 +947,6 @@ public class Fx{ Fill.circle(e.x + x, e.y + y, e.fout() * 3f); Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f); }); - }), shootSmall = new Effect(8, e -> { @@ -1002,7 +976,6 @@ public class Fx{ randLenVectors(e.id, 5, e.finpow() * 6f, e.rotation, 20f, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f); }); - }), shootBig = new Effect(9, e -> { @@ -1025,7 +998,6 @@ public class Fx{ randLenVectors(e.id, 8, e.finpow() * 19f, e.rotation, 10f, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 2f + 0.2f); }); - }), shootBigSmoke2 = new Effect(18f, e -> { @@ -1034,7 +1006,6 @@ public class Fx{ randLenVectors(e.id, 9, e.finpow() * 23f, e.rotation, 20f, (x, y) -> { Fill.circle(e.x + x, e.y + y, e.fout() * 2.4f + 0.2f); }); - }), shootSmallFlame = new Effect(32f, 80f, e -> { @@ -1043,7 +1014,6 @@ public class Fx{ randLenVectors(e.id, 8, e.finpow() * 60f, e.rotation, 10f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.5f); }); - }), shootPyraFlame = new Effect(33f, 80f, e -> { @@ -1052,7 +1022,6 @@ public class Fx{ randLenVectors(e.id, 10, e.finpow() * 70f, e.rotation, 10f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.6f); }); - }), shootLiquid = new Effect(40f, 80f, e -> { @@ -1061,69 +1030,104 @@ public class Fx{ randLenVectors(e.id, 6, e.finpow() * 60f, e.rotation, 11f, (x, y) -> { Fill.circle(e.x + x, e.y + y, 0.5f + e.fout() * 2.5f); }); - }), - shellEjectSmall = new Effect(30f, e -> { + casing1 = new Effect(30f, e -> { color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin()); + alpha(e.fout(0.3f)); float rot = Math.abs(e.rotation) + 90f; - - int i = Mathf.sign(e.rotation); + int i = -Mathf.sign(e.rotation); float len = (2f + e.finpow() * 6f) * i; float lr = rot + e.fin() * 30f * i; - Fill.rect(e.x + trnsx(lr, len) + Mathf.randomSeedRange(e.id + i + 7, 3f * e.fin()), - e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), - 1f, 2f, rot + e.fin() * 50f * i); + Fill.rect( + e.x + trnsx(lr, len) + Mathf.randomSeedRange(e.id + i + 7, 3f * e.fin()), + e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), + 1f, 2f, rot + e.fin() * 50f * i + ); - }).ground(400f), + }).layer(Layer.bullet), - shellEjectMedium = new Effect(34f, e -> { + casing2 = new Effect(34f, e -> { color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin()); - float rot = e.rotation + 90f; + alpha(e.fout(0.5f)); + float rot = Math.abs(e.rotation) + 90f; + int i = -Mathf.sign(e.rotation); + float len = (2f + e.finpow() * 10f) * i; + float lr = rot + e.fin() * 20f * i; + rect(Core.atlas.find("casing"), + e.x + trnsx(lr, len) + Mathf.randomSeedRange(e.id + i + 7, 3f * e.fin()), + e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), + 2f, 3f, rot + e.fin() * 50f * i + ); + }).layer(Layer.bullet), + + casing3 = new Effect(40f, e -> { + color(Pal.lightOrange, Pal.lightishGray, Pal.lightishGray, e.fin()); + alpha(e.fout(0.5f)); + float rot = Math.abs(e.rotation) + 90f; + int i = -Mathf.sign(e.rotation); + float len = (4f + e.finpow() * 9f) * i; + float lr = rot + Mathf.randomSeedRange(e.id + i + 6, 20f * e.fin()) * i; + + rect(Core.atlas.find("casing"), + e.x + trnsx(lr, len) + Mathf.randomSeedRange(e.id + i + 7, 3f * e.fin()), + e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), + 2.5f, 4f, + rot + e.fin() * 50f * i + ); + }).layer(Layer.bullet), + + casing4 = new Effect(45f, e -> { + color(Pal.lightOrange, Pal.lightishGray, Pal.lightishGray, e.fin()); + alpha(e.fout(0.5f)); + float rot = Math.abs(e.rotation) + 90f; + int i = -Mathf.sign(e.rotation); + float len = (4f + e.finpow() * 9f) * i; + float lr = rot + Mathf.randomSeedRange(e.id + i + 6, 20f * e.fin()) * i; + + rect(Core.atlas.find("casing"), + e.x + trnsx(lr, len) + Mathf.randomSeedRange(e.id + i + 7, 3f * e.fin()), + e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), + 3f, 6f, + rot + e.fin() * 50f * i + ); + }).layer(Layer.bullet), + + casing2Double = new Effect(34f, e -> { + color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin()); + alpha(e.fout(0.5f)); + float rot = Math.abs(e.rotation) + 90f; for(int i : Mathf.signs){ float len = (2f + e.finpow() * 10f) * i; float lr = rot + e.fin() * 20f * i; rect(Core.atlas.find("casing"), e.x + trnsx(lr, len) + Mathf.randomSeedRange(e.id + i + 7, 3f * e.fin()), e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), - 2f, 3f, rot); + 2f, 3f, rot + e.fin() * 50f * i + ); } - color(Color.lightGray, Color.gray, e.fin()); + }).layer(Layer.bullet), + + casing3Double = new Effect(40f, e -> { + color(Pal.lightOrange, Pal.lightishGray, Pal.lightishGray, e.fin()); + alpha(e.fout(0.5f)); + float rot = Math.abs(e.rotation) + 90f; for(int i : Mathf.signs){ - float ex = e.x, ey = e.y, fout = e.fout(); - randLenVectors(e.id, 4, 1f + e.finpow() * 11f, e.rotation + 90f * i, 20f, (x, y) -> { - Fill.circle(ex + x, ey + y, fout * 1.5f); - }); - } - - }).ground(400f), - - shellEjectBig = new Effect(22f, e -> { - color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin()); - float rot = e.rotation + 90f; - for(int i : Mathf.signs){ - float len = (4f + e.finpow() * 8f) * i; + float len = (4f + e.finpow() * 9f) * i; float lr = rot + Mathf.randomSeedRange(e.id + i + 6, 20f * e.fin()) * i; + rect(Core.atlas.find("casing"), e.x + trnsx(lr, len) + Mathf.randomSeedRange(e.id + i + 7, 3f * e.fin()), e.y + trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()), 2.5f, 4f, - rot + e.fin() * 30f * i + Mathf.randomSeedRange(e.id + i + 9, 40f * e.fin())); + rot + e.fin() * 50f * i + ); } - color(Color.lightGray); - - for(int i : Mathf.signs){ - float ex = e.x, ey = e.y, fout = e.fout(); - randLenVectors(e.id, 4, -e.finpow() * 15f, e.rotation + 90f * i, 25f, (x, y) -> { - Fill.circle(ex + x, ey + y, fout * 2f); - }); - } - - }).ground(400f), + }).layer(Layer.bullet), railShoot = new Effect(24f, e -> { e.scaled(10f, b -> { @@ -1161,7 +1165,6 @@ public class Fx{ for(int i : Mathf.signs){ Drawf.tri(e.x, e.y, 4f * e.fout(), 29f, e.rotation + 90f * i); } - }), lancerLaserShootSmoke = new Effect(26f, e -> { @@ -1171,7 +1174,6 @@ public class Fx{ randLenVectors(e.id, 7, length, e.rotation, 0f, (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fout() * 9f); }); - }), lancerLaserCharge = new Effect(38f, e -> { @@ -1180,7 +1182,6 @@ public class Fx{ randLenVectors(e.id, 2, 1f + 20f * e.fout(), e.rotation, 120f, (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 3f + 1f); }); - }), lancerLaserChargeBegin = new Effect(60f, e -> { @@ -1197,7 +1198,6 @@ public class Fx{ randLenVectors(e.id, 2, 1f + 20f * e.fout(), e.rotation, 120f, (x, y) -> { Drawf.tri(e.x + x, e.y + y, e.fslope() * 3f + 1, e.fslope() * 3f + 1, Mathf.angle(x, y)); }); - }), sparkShoot = new Effect(12f, e -> { @@ -1207,7 +1207,6 @@ public class Fx{ randLenVectors(e.id, 7, 25f * e.finpow(), e.rotation, 3f, (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 5f + 0.5f); }); - }), lightningShoot = new Effect(12f, e -> { @@ -1217,7 +1216,15 @@ public class Fx{ randLenVectors(e.id, 7, 25f * e.finpow(), e.rotation, 50f, (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 5f + 2f); }); + }), + thoriumShoot = new Effect(12f, e -> { + color(Color.white, Pal.thoriumPink, e.fin()); + stroke(e.fout() * 1.2f + 0.5f); + + randLenVectors(e.id, 7, 25f * e.finpow(), e.rotation, 50f, (x, y) -> { + lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 5f + 2f); + }); }), reactorsmoke = new Effect(17, e -> { @@ -1328,21 +1335,21 @@ public class Fx{ Fill.square(e.x + x, e.y + y, e.fout() * 2.5f + 0.5f, 45); }); }), - + pulverizeSmall = new Effect(30, e -> { randLenVectors(e.id, 3, e.fin() * 5f, (x, y) -> { color(Pal.stoneGray); Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45); }); }), - + pulverizeMedium = new Effect(30, e -> { randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> { color(Pal.stoneGray); Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45); }); }), - + producesmoke = new Effect(12, e -> { randLenVectors(e.id, 8, 4f + e.fin() * 18f, (x, y) -> { color(Color.white, Pal.accent, e.fin()); @@ -1357,21 +1364,21 @@ public class Fx{ Fill.circle(e.x + x, e.y + y, 0.5f + fout * 4f); }); }), - + smeltsmoke = new Effect(15, e -> { randLenVectors(e.id, 6, 4f + e.fin() * 5f, (x, y) -> { color(Color.white, e.color, e.fin()); Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45); }); }), - + formsmoke = new Effect(40, e -> { randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> { color(Pal.plasticSmoke, Color.lightGray, e.fin()); Fill.square(e.x + x, e.y + y, 0.2f + e.fout() * 2f, 45); }); }), - + blastsmoke = new Effect(26, e -> { randLenVectors(e.id, 12, 1f + e.fin() * 23f, (x, y) -> { float size = 2f + e.fout() * 6f; @@ -1379,7 +1386,7 @@ public class Fx{ Fill.circle(e.x + x, e.y + y, size/2f); }); }), - + lava = new Effect(18, e -> { randLenVectors(e.id, 3, 1f + e.fin() * 10f, (x, y) -> { float size = e.fslope() * 4f; @@ -1387,50 +1394,58 @@ public class Fx{ Fill.circle(e.x + x, e.y + y, size/2f); }); }), - + dooropen = new Effect(10, e -> { stroke(e.fout() * 1.6f); Lines.square(e.x, e.y, tilesize / 2f + e.fin() * 2f); }), - + doorclose = new Effect(10, e -> { stroke(e.fout() * 1.6f); Lines.square(e.x, e.y, tilesize / 2f + e.fout() * 2f); }), + dooropenlarge = new Effect(10, e -> { stroke(e.fout() * 1.6f); Lines.square(e.x, e.y, tilesize + e.fin() * 2f); }), + doorcloselarge = new Effect(10, e -> { stroke(e.fout() * 1.6f); Lines.square(e.x, e.y, tilesize + e.fout() * 2f); }), + purify = new Effect(10, e -> { color(Color.royal, Color.gray, e.fin()); stroke(2f); Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6); }), + purifyoil = new Effect(10, e -> { color(Color.black, Color.gray, e.fin()); stroke(2f); Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6); }), + purifystone = new Effect(10, e -> { color(Color.orange, Color.gray, e.fin()); stroke(2f); Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6); }), + generate = new Effect(11, e -> { color(Color.orange, Color.yellow, e.fin()); stroke(1f); Lines.spikes(e.x, e.y, e.fin() * 5f, 2, 8); }), + mine = new Effect(20, e -> { randLenVectors(e.id, 6, 3f + e.fin() * 6f, (x, y) -> { color(e.color, Color.lightGray, e.fin()); Fill.square(e.x + x, e.y + y, e.fout() * 2f, 45); }); }), + mineBig = new Effect(30, e -> { randLenVectors(e.id, 6, 4f + e.fin() * 8f, (x, y) -> { color(e.color, Color.lightGray, e.fin()); @@ -1444,12 +1459,14 @@ public class Fx{ Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45); }); }), + smelt = new Effect(20, e -> { randLenVectors(e.id, 6, 2f + e.fin() * 5f, (x, y) -> { color(Color.white, e.color, e.fin()); Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45); }); }), + teleportActivate = new Effect(50, e -> { color(e.color); @@ -1463,8 +1480,8 @@ public class Fx{ randLenVectors(e.id, 30, 4f + 40f * e.fin(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f); }); - }), + teleport = new Effect(60, e -> { color(e.color); stroke(e.fin() * 2f); @@ -1473,8 +1490,8 @@ public class Fx{ randLenVectors(e.id, 20, 6f + 20f * e.fout(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f); }); - }), + teleportOut = new Effect(20, e -> { color(e.color); stroke(e.fout() * 2f); @@ -1483,7 +1500,6 @@ public class Fx{ randLenVectors(e.id, 20, 4f + 20f * e.fin(), (x, y) -> { lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 4f + 1f); }); - }), ripple = new Effect(30, e -> { @@ -1492,7 +1508,7 @@ public class Fx{ color(Tmp.c1.set(e.color).mul(1.5f)); stroke(e.fout() * 1.4f); Lines.circle(e.x, e.y, (2f + e.fin() * 4f) * e.rotation); - }).ground(), + }).layer(Layer.debris), bubble = new Effect(20, e -> { color(Tmp.c1.set(e.color).shiftValue(0.1f)); @@ -1567,7 +1583,6 @@ public class Fx{ float radius = unit.hitSize() * 1.3f; - e.scaled(16f, c -> { color(Pal.shield); stroke(c.fout() * 2f + 0.1f); diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index e07203313c..9450c441da 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -9,6 +9,7 @@ import mindustry.type.*; public class Planets implements ContentList{ public static Planet sun, + //tantros, serpulo; @Override @@ -32,10 +33,21 @@ public class Planets implements ContentList{ ); }}; + /*tantros = new Planet("tantros", sun, 2, 0.8f){{ + generator = new TantrosPlanetGenerator(); + meshLoader = () -> new HexMesh(this, 4); + atmosphereColor = Color.valueOf("3db899"); + startSector = 10; + atmosphereRadIn = -0.01f; + atmosphereRadOut = 0.3f; + }};*/ + serpulo = new Planet("serpulo", sun, 3, 1){{ generator = new SerpuloPlanetGenerator(); meshLoader = () -> new HexMesh(this, 6); atmosphereColor = Color.valueOf("3c1b8f"); + atmosphereRadIn = 0.02f; + atmosphereRadOut = 0.3f; startSector = 15; }}; } diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index e516bab740..75583b19bf 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -8,15 +8,16 @@ import static mindustry.content.Planets.*; public class SectorPresets implements ContentList{ public static SectorPreset groundZero, - craters, frozenForest, ruinousShores, stainedMountains, tarFields, fungalPass, - saltFlats, overgrowth, - desolateRift, nuclearComplex; + craters, biomassFacility, frozenForest, ruinousShores, windsweptIslands, stainedMountains, tarFields, + fungalPass, extractionOutpost, saltFlats, overgrowth, + impact0078, desolateRift, nuclearComplex, planetaryTerminal; @Override public void load(){ groundZero = new SectorPreset("groundZero", serpulo, 15){{ alwaysUnlocked = true; + addStartingItems = true; captureWave = 10; difficulty = 1; }}; @@ -30,42 +31,68 @@ public class SectorPresets implements ContentList{ difficulty = 2; }}; + biomassFacility = new SectorPreset("biomassFacility", serpulo, 81){{ + captureWave = 20; + difficulty = 3; + }}; + craters = new SectorPreset("craters", serpulo, 18){{ captureWave = 20; difficulty = 2; }}; - ruinousShores = new SectorPreset("ruinousShores", serpulo, 19){{ + ruinousShores = new SectorPreset("ruinousShores", serpulo, 213){{ captureWave = 30; difficulty = 3; }}; + windsweptIslands = new SectorPreset("windsweptIslands", serpulo, 246){{ + captureWave = 30; + difficulty = 4; + }}; + stainedMountains = new SectorPreset("stainedMountains", serpulo, 20){{ captureWave = 30; difficulty = 3; }}; - fungalPass = new SectorPreset("fungalPass", serpulo, 21){{ - difficulty = 4; + extractionOutpost = new SectorPreset("extractionOutpost", serpulo, 165){{ + difficulty = 5; + useAI = false; }}; - overgrowth = new SectorPreset("overgrowth", serpulo, 22){{ + fungalPass = new SectorPreset("fungalPass", serpulo, 21){{ + difficulty = 4; + useAI = false; + }}; + + overgrowth = new SectorPreset("overgrowth", serpulo, 134){{ difficulty = 5; + useAI = false; }}; tarFields = new SectorPreset("tarFields", serpulo, 23){{ - captureWave = 50; + captureWave = 40; difficulty = 5; }}; + impact0078 = new SectorPreset("impact0078", serpulo, 227){{ + captureWave = 45; + difficulty = 7; + }}; + desolateRift = new SectorPreset("desolateRift", serpulo, 123){{ - captureWave = 40; + captureWave = 30; difficulty = 8; }}; nuclearComplex = new SectorPreset("nuclearComplex", serpulo, 130){{ - captureWave = 60; + captureWave = 50; difficulty = 7; }}; + + planetaryTerminal = new SectorPreset("planetaryTerminal", serpulo, 93){{ + difficulty = 10; + }}; } } diff --git a/core/src/mindustry/content/StatusEffects.java b/core/src/mindustry/content/StatusEffects.java index 4cdfadec76..c07a990f2b 100644 --- a/core/src/mindustry/content/StatusEffects.java +++ b/core/src/mindustry/content/StatusEffects.java @@ -6,6 +6,8 @@ import arc.math.*; import mindustry.ctype.*; import mindustry.game.EventType.*; import mindustry.type.*; +import mindustry.graphics.*; + import static mindustry.Vars.*; @@ -18,6 +20,7 @@ public class StatusEffects implements ContentList{ none = new StatusEffect("none"); burning = new StatusEffect("burning"){{ + color = Pal.lightFlame; damage = 0.12f; //over 8 seconds, this would be 60 damage effect = Fx.burning; @@ -32,6 +35,7 @@ public class StatusEffects implements ContentList{ }}; freezing = new StatusEffect("freezing"){{ + color = Color.valueOf("6ecdec"); speedMultiplier = 0.6f; healthMultiplier = 0.8f; effect = Fx.freezing; @@ -47,10 +51,12 @@ public class StatusEffects implements ContentList{ }}; unmoving = new StatusEffect("unmoving"){{ + color = Pal.gray; speedMultiplier = 0.001f; }}; slow = new StatusEffect("slow"){{ + color = Pal.lightishGray; speedMultiplier = 0.4f; }}; @@ -63,7 +69,7 @@ public class StatusEffects implements ContentList{ init(() -> { trans(shocked, ((unit, time, newTime, result) -> { unit.damagePierce(14f); - if(unit.team() == state.rules.waveTeam){ + if(unit.team == state.rules.waveTeam){ Events.fire(Trigger.shock); } result.set(this, time); @@ -80,6 +86,7 @@ public class StatusEffects implements ContentList{ }}; melting = new StatusEffect("melting"){{ + color = Color.valueOf("ffa166"); speedMultiplier = 0.8f; healthMultiplier = 0.8f; damage = 0.3f; @@ -92,6 +99,7 @@ public class StatusEffects implements ContentList{ }}; sapped = new StatusEffect("sapped"){{ + color = Pal.sap; speedMultiplier = 0.7f; healthMultiplier = 0.8f; effect = Fx.sapped; @@ -99,12 +107,14 @@ public class StatusEffects implements ContentList{ }}; sporeSlowed = new StatusEffect("spore-slowed"){{ + color = Pal.spore; speedMultiplier = 0.8f; effect = Fx.sapped; effectChance = 0.04f; }}; tarred = new StatusEffect("tarred"){{ + color = Color.valueOf("313131"); speedMultiplier = 0.6f; effect = Fx.oily; @@ -115,6 +125,7 @@ public class StatusEffects implements ContentList{ }}; overdrive = new StatusEffect("overdrive"){{ + color = Pal.accent; healthMultiplier = 0.95f; speedMultiplier = 1.15f; damageMultiplier = 1.4f; @@ -124,6 +135,7 @@ public class StatusEffects implements ContentList{ }}; overclock = new StatusEffect("overclock"){{ + color = Pal.accent; speedMultiplier = 1.15f; damageMultiplier = 1.15f; reloadMultiplier = 1.25f; @@ -132,20 +144,27 @@ public class StatusEffects implements ContentList{ }}; shielded = new StatusEffect("shielded"){{ + color = Pal.accent; healthMultiplier = 3f; }}; boss = new StatusEffect("boss"){{ + color = Pal.health; permanent = true; - damageMultiplier = 2f; - healthMultiplier = 2f; + damageMultiplier = 1.3f; + healthMultiplier = 1.5f; }}; - shocked = new StatusEffect("shocked"); + shocked = new StatusEffect("shocked"){{ + color = Pal.lancerLaser; + }}; - blasted = new StatusEffect("blasted"); + blasted = new StatusEffect("blasted"){{ + color = Color.valueOf("ff795e"); + }}; corroded = new StatusEffect("corroded"){{ + color = Pal.plastanium; damage = 0.1f; }}; } diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 6118ca7b74..59a89d427e 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -11,7 +11,6 @@ import static mindustry.content.Blocks.*; import static mindustry.content.SectorPresets.craters; import static mindustry.content.SectorPresets.*; import static mindustry.content.UnitTypes.*; -import static mindustry.type.ItemStack.*; public class TechTree implements ContentList{ static ObjectMap map = new ObjectMap<>(); @@ -30,7 +29,10 @@ public class TechTree implements ContentList{ node(junction, () -> { node(router, () -> { - node(launchPad, () -> { + node(launchPad, Seq.with(new SectorComplete(extractionOutpost)), () -> { + node(interplanetaryAccelerator, Seq.with(new SectorComplete(planetaryTerminal)), () -> { + + }); }); node(distributor); @@ -40,15 +42,15 @@ public class TechTree implements ContentList{ node(underflowGate); }); }); - node(container, () -> { + node(container, Seq.with(new SectorComplete(biomassFacility)), () -> { node(unloader); - node(vault, () -> { + node(vault, Seq.with(new SectorComplete(stainedMountains)), () -> { }); }); node(itemBridge, () -> { - node(titaniumConveyor, () -> { + node(titaniumConveyor, Seq.with(new SectorComplete(craters)), () -> { node(phaseConveyor, () -> { node(massDriver, () -> { @@ -88,7 +90,7 @@ public class TechTree implements ContentList{ node(bridgeConduit); - node(pulseConduit, () -> { + node(pulseConduit, Seq.with(new SectorComplete(windsweptIslands)), () -> { node(phaseConduit, () -> { }); @@ -108,185 +110,153 @@ public class TechTree implements ContentList{ }); }); - node(Items.coal, with(Items.lead, 3000), () -> { - node(Items.graphite, with(Items.coal, 1000), () -> { + node(graphitePress, () -> { + node(pneumaticDrill, Seq.with(new SectorComplete(frozenForest)), () -> { + node(cultivator, Seq.with(new SectorComplete(biomassFacility)), () -> { - node(graphitePress, () -> { - node(Items.titanium, with(Items.graphite, 6000, Items.copper, 10000, Items.lead, 10000), () -> { - node(pneumaticDrill, () -> { - node(Items.sporePod, with(Items.coal, 5000, Items.graphite, 5000, Items.lead, 5000), () -> { - node(cultivator, () -> { + }); - }); - }); + node(laserDrill, () -> { + node(blastDrill, Seq.with(new SectorComplete(nuclearComplex)), () -> { - node(Items.thorium, with(Items.titanium, 10000, Items.lead, 15000, Items.copper, 30000), () -> { - node(laserDrill, () -> { - node(blastDrill, () -> { - - }); - - node(waterExtractor, () -> { - node(oilExtractor, () -> { - - }); - }); - }); - }); - }); }); - node(Items.pyratite, with(Items.coal, 6000, Items.lead, 10000, Items.sand, 5000), () -> { - node(pyratiteMixer, () -> { - node(Items.blastCompound, with(Items.pyratite, 3000, Items.sporePod, 3000), () -> { - node(blastMixer, () -> { + node(waterExtractor, () -> { + node(oilExtractor, () -> { - }); - }); }); }); - - node(Items.silicon, with(Items.coal, 4000, Items.sand, 4000), () -> { - node(siliconSmelter, () -> { - - node(Liquids.oil, with(Items.coal, 8000, Items.pyratite, 6000, Items.sand, 20000), () -> { - node(sporePress, () -> { - node(coalCentrifuge, () -> { - node(multiPress, () -> { - node(siliconCrucible, () -> { - - }); - }); - }); - - node(Items.plastanium, with(Items.titanium, 10000, Items.silicon, 10000), () -> { - node(plastaniumCompressor, () -> { - node(Items.phaseFabric, with(Items.thorium, 15000, Items.sand, 30000, Items.silicon, 5000), () -> { - node(phaseWeaver, () -> { - - }); - }); - }); - }); - }); - }); - - node(Items.metaglass, with(Items.sand, 6000, Items.lead, 10000), () -> { - node(kiln, () -> { - node(incinerator, () -> { - node(Items.scrap, with(Items.copper, 20000, Items.sand, 10000), () -> { - node(Liquids.slag, with(Items.scrap, 4000), () -> { - node(melter, () -> { - node(Items.surgeAlloy, with(Items.thorium, 20000, Items.silicon, 30000, Items.lead, 40000), () -> { - node(surgeSmelter, () -> { - - }); - }); - - node(separator, () -> { - node(pulverizer, () -> { - node(disassembler, () -> { - - }); - }); - }); - - node(Liquids.cryofluid, with(Items.titanium, 8000, Items.metaglass, 5000), () -> { - node(cryofluidMixer, () -> { - - }); - }); - }); - }); - }); - }); - }); - }); - - node(microProcessor, () -> { - node(switchBlock, () -> { - node(message, () -> { - node(logicDisplay, () -> { - node(largeLogicDisplay, () -> { - - }); - }); - - node(memoryCell, () -> { - node(memoryBank, () -> { - - }); - }); - }); - - node(logicProcessor, () -> { - node(hyperProcessor, () -> { - - }); - }); - }); - }); - }); - }); - - node(illuminator, () -> { - }); }); }); + node(pyratiteMixer, () -> { + node(blastMixer, () -> { - node(combustionGenerator, () -> { - node(powerNode, () -> { - node(powerNodeLarge, () -> { - node(diode, () -> { - node(surgeTower, () -> { + }); + }); + + node(siliconSmelter, () -> { + + node(sporePress, () -> { + node(coalCentrifuge, () -> { + node(multiPress, () -> { + node(siliconCrucible, () -> { }); }); }); - node(battery, () -> { - node(batteryLarge, () -> { + node(plastaniumCompressor, Seq.with(new SectorComplete(windsweptIslands)), () -> { + node(phaseWeaver, Seq.with(new SectorComplete(tarFields)), () -> { }); }); + }); - node(mender, () -> { - node(mendProjector, () -> { - node(forceProjector, () -> { - node(overdriveProjector, () -> { - node(overdriveDome, () -> { + node(kiln, Seq.with(new SectorComplete(craters)), () -> { + node(incinerator, () -> { + node(melter, () -> { + node(surgeSmelter, () -> { + + }); + + node(separator, () -> { + node(pulverizer, () -> { + node(disassembler, () -> { }); }); }); - node(repairPoint, () -> { + node(cryofluidMixer, () -> { }); }); }); + }); - node(steamGenerator, () -> { - node(thermalGenerator, () -> { - node(differentialGenerator, () -> { - node(thoriumReactor, Seq.with(new Research(Liquids.cryofluid)), () -> { - node(impactReactor, () -> { + node(microProcessor, () -> { + node(switchBlock, () -> { + node(message, () -> { + node(logicDisplay, () -> { + node(largeLogicDisplay, () -> { - }); + }); + }); - node(rtgGenerator, () -> { + node(memoryCell, () -> { + node(memoryBank, () -> { + + }); + }); + }); + + node(logicProcessor, () -> { + node(hyperProcessor, () -> { + + }); + }); + }); + }); + }); + + node(illuminator, () -> { + + }); + }); + + + node(combustionGenerator, Seq.with(new Research(Items.coal)), () -> { + node(powerNode, () -> { + node(powerNodeLarge, () -> { + node(diode, () -> { + node(surgeTower, () -> { + + }); + }); + }); + + node(battery, () -> { + node(batteryLarge, () -> { + + }); + }); + + node(mender, () -> { + node(mendProjector, () -> { + node(forceProjector, Seq.with(new SectorComplete(impact0078)), () -> { + node(overdriveProjector, Seq.with(new SectorComplete(impact0078)), () -> { + node(overdriveDome, Seq.with(new SectorComplete(impact0078)), () -> { + + }); + }); + }); + + node(repairPoint, () -> { + + }); + }); + }); + + node(steamGenerator, Seq.with(new SectorComplete(craters)), () -> { + node(thermalGenerator, () -> { + node(differentialGenerator, () -> { + node(thoriumReactor, Seq.with(new Research(Liquids.cryofluid)), () -> { + node(impactReactor, () -> { + + }); + + node(rtgGenerator, () -> { - }); }); }); }); }); + }); - node(solarPanel, () -> { - node(largeSolarPanel, () -> { + node(solarPanel, () -> { + node(largeSolarPanel, () -> { - }); }); }); }); @@ -321,12 +291,11 @@ public class TechTree implements ContentList{ }); node(scatter, () -> { - node(hail, () -> { - + node(hail, Seq.with(new SectorComplete(craters)), () -> { node(salvo, () -> { node(swarmer, () -> { node(cyclone, () -> { - node(spectre, () -> { + node(spectre, Seq.with(new SectorComplete(nuclearComplex)), () -> { }); }); @@ -356,8 +325,8 @@ public class TechTree implements ContentList{ }); node(lancer, () -> { - node(foreshadow, () -> { - node(meltdown, () -> { + node(meltdown, () -> { + node(foreshadow, () -> { }); }); @@ -436,7 +405,7 @@ public class TechTree implements ContentList{ }); }); - node(navalFactory, () -> { + node(navalFactory, Seq.with(new SectorComplete(ruinousShores)), () -> { node(risso, () -> { node(minke, () -> { node(bryde, () -> { @@ -451,10 +420,11 @@ public class TechTree implements ContentList{ }); }); - node(additiveReconstructor, () -> { - node(multiplicativeReconstructor, () -> { + node(additiveReconstructor, Seq.with(new SectorComplete(biomassFacility)), () -> { + node(multiplicativeReconstructor, Seq.with(new SectorComplete(overgrowth)), () -> { node(exponentialReconstructor, () -> { node(tetrativeReconstructor, () -> { + }); }); }); @@ -479,30 +449,71 @@ public class TechTree implements ContentList{ new Research(kiln), new Research(mechanicalPump) ), () -> { - - node(tarFields, Seq.with( + node(windsweptIslands, Seq.with( new SectorComplete(ruinousShores), - new Research(coalCentrifuge), - new Research(conduit), - new Research(wave) + new Research(pneumaticDrill), + new Research(hail), + new Research(siliconSmelter), + new Research(steamGenerator) ), () -> { - node(desolateRift, Seq.with( - new SectorComplete(tarFields), - new Research(thermalGenerator), - new Research(thoriumReactor) + node(tarFields, Seq.with( + new SectorComplete(windsweptIslands), + new Research(coalCentrifuge), + new Research(conduit), + new Research(wave) + ), () -> { + //TODO change positions? + node(impact0078, Seq.with( + new SectorComplete(tarFields), + new Research(Items.thorium), + new Research(coreFoundation) + ), () -> { + node(desolateRift, Seq.with( + new SectorComplete(impact0078), + new Research(thermalGenerator), + new Research(thoriumReactor) + ), () -> { + node(planetaryTerminal, Seq.with( + new SectorComplete(desolateRift), + new SectorComplete(nuclearComplex), + new SectorComplete(overgrowth), + new SectorComplete(extractionOutpost), + new SectorComplete(saltFlats), + new Research(risso), + new Research(minke), + new Research(bryde), + new Research(spectre), + new Research(launchPad), + new Research(impactReactor), + new Research(additiveReconstructor), + new Research(exponentialReconstructor) + ), () -> { + + }); + }); + }); + }); + + node(extractionOutpost, Seq.with( + new SectorComplete(stainedMountains), + new SectorComplete(windsweptIslands), + new Research(groundFactory), + new Research(nova), + new Research(airFactory), + new Research(mono) ), () -> { }); - }); - node(saltFlats, Seq.with( - new SectorComplete(ruinousShores), - new Research(groundFactory), - new Research(airFactory), - new Research(door), - new Research(waterExtractor) - ), () -> { + node(saltFlats, Seq.with( + new SectorComplete(windsweptIslands), + new Research(groundFactory), + new Research(airFactory), + new Research(door), + new Research(waterExtractor) + ), () -> { + }); }); }); @@ -511,6 +522,7 @@ public class TechTree implements ContentList{ new SectorComplete(fungalPass), new Research(cultivator), new Research(sporePress), + new Research(additiveReconstructor), new Research(UnitTypes.mace), new Research(UnitTypes.flare) ), () -> { @@ -518,25 +530,90 @@ public class TechTree implements ContentList{ }); }); - node(stainedMountains, Seq.with( + node(biomassFacility, Seq.with( new SectorComplete(frozenForest), - new Research(pneumaticDrill), new Research(powerNode), - new Research(steamGenerator) + new Research(steamGenerator), + new Research(scatter), + new Research(graphitePress) ), () -> { - node(fungalPass, Seq.with( - new SectorComplete(stainedMountains), - new Research(groundFactory), - new Research(door), + node(stainedMountains, Seq.with( + new SectorComplete(biomassFacility), + new Research(pneumaticDrill), new Research(siliconSmelter) ), () -> { - node(nuclearComplex, Seq.with( - new SectorComplete(fungalPass), - new Research(thermalGenerator), - new Research(laserDrill) + node(fungalPass, Seq.with( + new SectorComplete(stainedMountains), + new Research(groundFactory), + new Research(door), + new Research(siliconSmelter) ), () -> { + node(nuclearComplex, Seq.with( + new SectorComplete(fungalPass), + new Research(thermalGenerator), + new Research(laserDrill) + ), () -> { + + }); + }); + }); + }); + }); + }); + + nodeProduce(Items.copper, () -> { + nodeProduce(Liquids.water, () -> { + + }); + + nodeProduce(Items.lead, () -> { + nodeProduce(Items.titanium, () -> { + nodeProduce(Liquids.cryofluid, () -> { + + }); + + nodeProduce(Items.thorium, () -> { + nodeProduce(Items.surgeAlloy, () -> { }); + + nodeProduce(Items.phaseFabric, () -> { + + }); + }); + }); + + nodeProduce(Items.metaglass, () -> { + + }); + }); + + nodeProduce(Items.sand, () -> { + nodeProduce(Items.scrap, () -> { + nodeProduce(Liquids.slag, () -> { + + }); + }); + + nodeProduce(Items.coal, () -> { + nodeProduce(Items.graphite, () -> { + nodeProduce(Items.silicon, () -> { + + }); + }); + + nodeProduce(Items.pyratite, () -> { + nodeProduce(Items.blastCompound, () -> { + + }); + }); + + nodeProduce(Items.sporePod, () -> { + + }); + + nodeProduce(Liquids.oil, () -> { + }); }); }); @@ -583,6 +660,14 @@ public class TechTree implements ContentList{ return node(block, () -> {}); } + static TechNode nodeProduce(UnlockableContent content, Seq objectives, Runnable children){ + return node(content, content.researchRequirements(), objectives.and(new Produce(content)), children); + } + + static TechNode nodeProduce(UnlockableContent content, Runnable children){ + return nodeProduce(content, new Seq<>(), children); + } + @Nullable public static TechNode get(UnlockableContent content){ return map.get(content); @@ -605,8 +690,6 @@ public class TechTree implements ContentList{ public final ItemStack[] finishedRequirements; /** Extra objectives needed to research this. */ public Seq objectives = new Seq<>(); - /** Time required to research this content, in seconds. */ - public float time; /** Nodes that depend on this node. */ public final Seq children = new Seq<>(); @@ -617,7 +700,6 @@ public class TechTree implements ContentList{ this.content = content; this.requirements = requirements; this.depth = parent == null ? 0 : parent.depth + 1; - this.time = Seq.with(requirements).mapFloat(i -> i.item.cost * i.amount).sum() * 10; this.finishedRequirements = new ItemStack[requirements.length]; //load up the requirements that have been finished if settings are available @@ -632,6 +714,14 @@ public class TechTree implements ContentList{ all.add(this); } + /** Resets finished requirements and saves. */ + public void reset(){ + for(ItemStack stack : finishedRequirements){ + stack.amount = 0; + } + save(); + } + /** Removes this node from the tech tree. */ public void remove(){ all.remove(this); diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 03937d09eb..ed54cf324f 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -17,11 +17,13 @@ import static mindustry.Vars.*; public class UnitTypes implements ContentList{ //region definitions + //(the wall of shame - should fix the legacy stuff eventually...) + //mech public static @EntityDef({Unitc.class, Mechc.class}) UnitType mace, dagger, crawler, fortress, scepter, reign; - //mech + builder + miner - public static @EntityDef({Unitc.class, Mechc.class, Builderc.class, Minerc.class}) UnitType nova, pulsar, quasar; + //mech + public static @EntityDef(value = {Unitc.class, Mechc.class}, legacy = true) UnitType nova, pulsar, quasar; //mech public static @EntityDef({Unitc.class, Mechc.class}) UnitType vela; @@ -29,29 +31,29 @@ public class UnitTypes implements ContentList{ //legs public static @EntityDef({Unitc.class, Legsc.class}) UnitType corvus, atrax; - //legs + building - public static @EntityDef({Unitc.class, Legsc.class, Builderc.class}) UnitType spiroct, arkyid, toxopid; + //legs + public static @EntityDef(value = {Unitc.class, Legsc.class}, legacy = true) UnitType spiroct, arkyid, toxopid; - //air (no special traits) + //air public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra; - //air + mining - public static @EntityDef({Unitc.class, Minerc.class}) UnitType mono; + //air + public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType mono; - //air + building + mining - public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType poly; + //air + public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType poly; - //air + building + mining + payload - public static @EntityDef({Unitc.class, Builderc.class, Minerc.class, Payloadc.class}) UnitType mega; + //air + payload + public static @EntityDef({Unitc.class, Payloadc.class}) UnitType mega; - //air + building + payload - public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class}) UnitType quad; + //air + payload + public static @EntityDef(value = {Unitc.class, Payloadc.class}, legacy = true) UnitType quad; - //air + building + payload - public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class, AmmoDistributec.class}) UnitType oct; + //air + payload + ammo distribution + public static @EntityDef({Unitc.class, Payloadc.class, AmmoDistributec.class}) UnitType oct; - //air + building + mining - public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType alpha, beta, gamma; + //air + public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType alpha, beta, gamma; //water public static @EntityDef({Unitc.class, WaterMovec.class}) UnitType risso, minke, bryde, sei, omura; @@ -74,7 +76,7 @@ public class UnitTypes implements ContentList{ x = 4f; y = 2f; top = false; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; bullet = Bullets.standardCopper; }}); }}; @@ -111,7 +113,7 @@ public class UnitTypes implements ContentList{ }}; fortress = new UnitType("fortress"){{ - speed = 0.38f; + speed = 0.39f; hitSize = 13f; rotateSpeed = 3f; targetAir = false; @@ -126,7 +128,7 @@ public class UnitTypes implements ContentList{ reload = 60f; recoil = 4f; shake = 2f; - ejectEffect = Fx.shellEjectMedium; + ejectEffect = Fx.casing2; shootSound = Sounds.artillery; bullet = new ArtilleryBulletType(2f, 8, "shell"){{ hitEffect = Fx.blastExplosion; @@ -136,7 +138,7 @@ public class UnitTypes implements ContentList{ collides = true; collidesTiles = true; splashDamageRadius = 24f; - splashDamage = 38f; + splashDamage = 45f; backColor = Pal.bulletYellowBack; frontColor = Pal.bulletYellow; }}; @@ -165,8 +167,8 @@ public class UnitTypes implements ContentList{ reload = 45f; recoil = 5f; shake = 2f; - ejectEffect = Fx.shellEjectBig; - shootSound = Sounds.artillery; + ejectEffect = Fx.casing3; + shootSound = Sounds.bang; shots = 3; inaccuracy = 3f; shotDelay = 4f; @@ -189,7 +191,7 @@ public class UnitTypes implements ContentList{ x = 8.5f; y = 6f; rotate = true; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; bullet = Bullets.standardCopper; }}, new Weapon("mount-weapon"){{ @@ -197,7 +199,7 @@ public class UnitTypes implements ContentList{ x = 8.5f; y = -7f; rotate = true; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; bullet = Bullets.standardCopper; }} @@ -225,8 +227,8 @@ public class UnitTypes implements ContentList{ reload = 9f; recoil = 5f; shake = 2f; - ejectEffect = Fx.shellEjectBig; - shootSound = Sounds.artillery; + ejectEffect = Fx.casing4; + shootSound = Sounds.bang; bullet = new BasicBulletType(13f, 60){{ pierce = true; @@ -271,7 +273,7 @@ public class UnitTypes implements ContentList{ boostMultiplier = 1.5f; speed = 0.55f; hitSize = 8f; - health = 110f; + health = 120f; buildSpeed = 0.8f; armor = 1f; commandLimit = 8; @@ -287,8 +289,14 @@ public class UnitTypes implements ContentList{ alternate = false; ejectEffect = Fx.none; recoil = 2f; - bullet = Bullets.healBullet; - shootSound = Sounds.pew; + shootSound = Sounds.lasershoot; + + bullet = new LaserBoltBulletType(5.2f, 14){{ + healPercent = 5f; + collidesTeam = true; + backColor = Pal.heal; + frontColor = Color.white; + }}; }}); }}; @@ -297,7 +305,7 @@ public class UnitTypes implements ContentList{ boostMultiplier = 1.6f; speed = 0.7f; hitSize = 10f; - health = 300f; + health = 320f; buildSpeed = 0.9f; armor = 4f; @@ -323,7 +331,7 @@ public class UnitTypes implements ContentList{ spacing = 0f; ejectEffect = Fx.none; recoil = 2.5f; - shootSound = Sounds.pew; + shootSound = Sounds.spark; bullet = new LightningBulletType(){{ lightningColor = hitColor = Pal.heal; @@ -331,6 +339,19 @@ public class UnitTypes implements ContentList{ lightningLength = 7; lightningLengthRand = 7; shootEffect = Fx.shootHeal; + //Does not actually do anything; Just here to make stats work + healPercent = 2f; + + lightningType = new BulletType(0.0001f, 0f){{ + lifetime = Fx.lightning.lifetime; + hitEffect = Fx.hitLancer; + despawnEffect = Fx.none; + status = StatusEffects.shocked; + statusDuration = 10f; + hittable = false; + healPercent = 2f; + collidesTeam = true; + }}; }}; }}); }}; @@ -367,11 +388,13 @@ public class UnitTypes implements ContentList{ shootSound = Sounds.laser; bullet = new LaserBulletType(){{ - damage = 40f; + damage = 45f; recoil = 1f; sideAngle = 45f; sideWidth = 1f; sideLength = 70f; + healPercent = 10f; + collidesTeam = true; colors = new Color[]{Pal.heal.cpy().a(0.4f), Pal.heal, Color.white}; }}; }}); @@ -398,6 +421,7 @@ public class UnitTypes implements ContentList{ armor = 7f; canBoost = true; landShake = 4f; + immunities = ObjectSet.with(StatusEffects.burning); commandLimit = 8; @@ -410,14 +434,16 @@ public class UnitTypes implements ContentList{ firstShotDelay = Fx.greenLaserChargeSmall.lifetime - 1f; - reload = 320f; + reload = 160f; recoil = 0f; - shootSound = Sounds.laser; + chargeSound = Sounds.lasercharge2; + shootSound = Sounds.beam; continuous = true; cooldownTime = 200f; - bullet = new ContinuousLaserBulletType(20){{ - length = 150f; + bullet = new ContinuousLaserBulletType(){{ + damage = 23f; + length = 160f; hitEffect = Fx.hitMeltHeal; drawSize = 420f; lifetime = 160f; @@ -427,10 +453,14 @@ public class UnitTypes implements ContentList{ shootEffect = Fx.greenLaserChargeSmall; - incendChance = 0.05f; + incendChance = 0.075f; incendSpread = 5f; incendAmount = 1; + //constant healing + healPercent = 1f; + collidesTeam = true; + colors = new Color[]{Pal.heal.cpy().a(.2f), Pal.heal.cpy().a(.5f), Pal.heal.cpy().mul(1.2f), Color.white}; }}; @@ -443,7 +473,6 @@ public class UnitTypes implements ContentList{ mineTier = 1; hitSize = 29f; health = 18000f; - buildSpeed = 1.7f; armor = 9f; landShake = 1.5f; rotateSpeed = 1.5f; @@ -468,6 +497,9 @@ public class UnitTypes implements ContentList{ drawShields = false; weapons.add(new Weapon("corvus-weapon"){{ + shootSound = Sounds.laserblast; + chargeSound = Sounds.lasercharge; + soundPitchMin = 1f; top = false; mirror = false; shake = 14f; @@ -475,7 +507,6 @@ public class UnitTypes implements ContentList{ x = y = 0; reload = 350f; recoil = 0f; - shootSound = Sounds.laser; cooldownTime = 350f; @@ -485,7 +516,7 @@ public class UnitTypes implements ContentList{ bullet = new LaserBulletType(){{ length = 460f; - damage = 550f; + damage = 560f; width = 75f; lifetime = 65f; @@ -501,6 +532,9 @@ public class UnitTypes implements ContentList{ shootEffect = Fx.greenLaserCharge; + healPercent = 25f; + collidesTeam = true; + sideAngle = 15f; sideWidth = 0f; sideLength = 0f; @@ -585,7 +619,7 @@ public class UnitTypes implements ContentList{ drag = 0.4f; hitSize = 12f; rotateSpeed = 3f; - health = 760; + health = 800; immunities = ObjectSet.with(StatusEffects.burning, StatusEffects.melting); legCount = 6; legLength = 13f; @@ -608,15 +642,15 @@ public class UnitTypes implements ContentList{ ejectEffect = Fx.none; recoil = 2f; rotate = true; - shootSound = Sounds.flame; + shootSound = Sounds.sap; x = 8.5f; y = -1.5f; bullet = new SapBulletType(){{ - sapStrength = 0.3f; + sapStrength = 0.4f; length = 75f; - damage = 15; + damage = 18; shootEffect = Fx.shootSmall; hitColor = color = Color.valueOf("bf92f9"); despawnEffect = Fx.none; @@ -631,11 +665,12 @@ public class UnitTypes implements ContentList{ rotate = true; x = 4f; y = 3f; + shootSound = Sounds.sap; bullet = new SapBulletType(){{ - sapStrength = 0.65f; + sapStrength = 0.8f; length = 40f; - damage = 13; + damage = 15; shootEffect = Fx.shootSmall; hitColor = color = Color.valueOf("bf92f9"); despawnEffect = Fx.none; @@ -667,6 +702,7 @@ public class UnitTypes implements ContentList{ rippleScale = 2f; legSpeed = 0.2f; ammoType = AmmoTypes.power; + buildSpeed = 1f; legSplashDamage = 32; legSplashRange = 30; @@ -677,9 +713,9 @@ public class UnitTypes implements ContentList{ groundLayer = Layer.legUnit; BulletType sapper = new SapBulletType(){{ - sapStrength = 0.83f; + sapStrength = 0.85f; length = 55f; - damage = 34; + damage = 37; shootEffect = Fx.shootSmall; hitColor = color = Color.valueOf("bf92f9"); despawnEffect = Fx.none; @@ -695,6 +731,7 @@ public class UnitTypes implements ContentList{ y = 8f; rotate = true; bullet = sapper; + shootSound = Sounds.sap; }}, new Weapon("spiroct-weapon"){{ reload = 15f; @@ -702,6 +739,7 @@ public class UnitTypes implements ContentList{ y = 6f; rotate = true; bullet = sapper; + shootSound = Sounds.sap; }}, new Weapon("spiroct-weapon"){{ reload = 23f; @@ -709,6 +747,7 @@ public class UnitTypes implements ContentList{ y = 0f; rotate = true; bullet = sapper; + shootSound = Sounds.sap; }}, new Weapon("large-purple-mount"){{ y = -7f; @@ -717,8 +756,8 @@ public class UnitTypes implements ContentList{ reload = 45; shake = 3f; rotateSpeed = 2f; - ejectEffect = Fx.shellEjectSmall; - shootSound = Sounds.shootBig; + ejectEffect = Fx.casing1; + shootSound = Sounds.artillery; rotate = true; occlusion = 8f; recoil = 3f; @@ -766,6 +805,7 @@ public class UnitTypes implements ContentList{ rippleScale = 3f; legSpeed = 0.19f; ammoType = AmmoTypes.powerHigh; + buildSpeed = 1f; legSplashDamage = 80; legSplashRange = 60; @@ -783,7 +823,7 @@ public class UnitTypes implements ContentList{ reload = 30; shake = 4f; rotateSpeed = 2f; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; shootSound = Sounds.shootBig; rotate = true; occlusion = 12f; @@ -815,8 +855,8 @@ public class UnitTypes implements ContentList{ shake = 10f; recoil = 10f; rotateSpeed = 1f; - ejectEffect = Fx.shellEjectBig; - shootSound = Sounds.shootBig; + ejectEffect = Fx.casing3; + shootSound = Sounds.artillery; rotate = true; occlusion = 30f; @@ -875,20 +915,29 @@ public class UnitTypes implements ContentList{ health = 75; engineOffset = 5.5f; range = 140f; + targetAir = false; + commandLimit = 4; weapons.add(new Weapon(){{ y = 0f; x = 2f; reload = 13f; - ejectEffect = Fx.shellEjectSmall; - bullet = Bullets.standardCopper; - shootSound = Sounds.shoot; + ejectEffect = Fx.casing1; + bullet = new BasicBulletType(2.5f, 9){{ + width = 7f; + height = 9f; + lifetime = 45f; + shootEffect = Fx.shootSmall; + smokeEffect = Fx.shootSmallSmoke; + ammoMultiplier = 2; + }}; + shootSound = Sounds.pew; }}); }}; horizon = new UnitType("horizon"){{ - health = 350; - speed = 2f; + health = 340; + speed = 1.7f; accel = 0.08f; drag = 0.016f; flying = true; @@ -897,20 +946,21 @@ public class UnitTypes implements ContentList{ engineOffset = 7.8f; range = 140f; faceTarget = false; - armor = 4f; + armor = 3f; targetFlag = BlockFlag.factory; + commandLimit = 5; weapons.add(new Weapon(){{ minShootVelocity = 0.75f; x = 3f; shootY = 0f; - reload = 11f; + reload = 12f; shootCone = 180f; ejectEffect = Fx.none; inaccuracy = 15f; ignoreRotation = true; shootSound = Sounds.none; - bullet = new BombBulletType(28f, 25f){{ + bullet = new BombBulletType(27f, 25f){{ width = 10f; height = 14f; hitEffect = Fx.flakExplosion; @@ -945,6 +995,7 @@ public class UnitTypes implements ContentList{ shots = 2; inaccuracy = 5f; velocityRnd = 0.2f; + shootSound = Sounds.missile; bullet = new MissileBulletType(3f, 12){{ width = 8f; @@ -1002,10 +1053,10 @@ public class UnitTypes implements ContentList{ y = 8f; x = 17f; reload = 20f; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; rotateSpeed = 8f; bullet = missiles; - shootSound = Sounds.shoot; + shootSound = Sounds.missile; rotate = true; occlusion = 6f; }}, @@ -1014,9 +1065,9 @@ public class UnitTypes implements ContentList{ x = 17f; reload = 35; rotateSpeed = 8f; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; bullet = missiles; - shootSound = Sounds.shoot; + shootSound = Sounds.missile; rotate = true; occlusion = 6f; }}, @@ -1027,7 +1078,7 @@ public class UnitTypes implements ContentList{ reload = 12; shake = 1f; rotateSpeed = 2f; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; shootSound = Sounds.shootBig; rotate = true; occlusion = 8f; @@ -1097,7 +1148,7 @@ public class UnitTypes implements ContentList{ y = 27f; rotateSpeed = 2f; reload = 9f; - shootSound = Sounds.flame; + shootSound = Sounds.shoot; occlusion = 7f; rotate = true; recoil = 0.5f; @@ -1108,7 +1159,7 @@ public class UnitTypes implements ContentList{ y = -13f; x = 20f; reload = 12f; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; rotateSpeed = 7f; shake = 1f; shootSound = Sounds.shoot; @@ -1127,7 +1178,7 @@ public class UnitTypes implements ContentList{ flying = true; drag = 0.06f; accel = 0.12f; - speed = 1.1f; + speed = 1.5f; health = 100; engineSize = 1.8f; engineOffset = 5.7f; @@ -1154,7 +1205,6 @@ public class UnitTypes implements ContentList{ engineOffset = 6.5f; hitSize = 8f; lowAltitude = true; - isCounted = false; ammoType = AmmoTypes.power; @@ -1170,7 +1220,7 @@ public class UnitTypes implements ContentList{ reload = 30f; ejectEffect = Fx.none; recoil = 2f; - shootSound = Sounds.pew; + shootSound = Sounds.missile; shots = 1; velocityRnd = 0.5f; inaccuracy = 15f; @@ -1186,6 +1236,7 @@ public class UnitTypes implements ContentList{ smokeEffect = Fx.hitLaser; hitEffect = despawnEffect = Fx.hitLaser; frontColor = Color.white; + hitSound = Sounds.none; healPercent = 5.5f; collidesTeam = true; @@ -1199,9 +1250,10 @@ public class UnitTypes implements ContentList{ defaultController = RepairAI::new; mineTier = 3; + mineSpeed = 4f; health = 500; armor = 5f; - speed = 2.3f; + speed = 2.5f; accel = 0.06f; drag = 0.017f; lowAltitude = true; @@ -1211,12 +1263,13 @@ public class UnitTypes implements ContentList{ hitSize = 15f; engineSize = 3f; payloadCapacity = (2 * 2) * tilePayload; - buildSpeed = 2.5f; + buildSpeed = 2.6f; ammoType = AmmoTypes.power; weapons.add( new Weapon("heal-weapon-mount"){{ + shootSound = Sounds.lasershoot; reload = 25f; x = 8f; y = -6f; @@ -1224,6 +1277,7 @@ public class UnitTypes implements ContentList{ bullet = Bullets.healBulletBig; }}, new Weapon("heal-weapon-mount"){{ + shootSound = Sounds.lasershoot; reload = 15f; x = 4f; y = 5f; @@ -1260,6 +1314,9 @@ public class UnitTypes implements ContentList{ reload = 55f; minShootVelocity = 0.01f; + soundPitchMin = 1f; + shootSound = Sounds.plasmadrop; + bullet = new BasicBulletType(){{ sprite = "large-bomb"; width = height = 120/4f; @@ -1271,9 +1328,10 @@ public class UnitTypes implements ContentList{ frontColor = Color.white; mixColorTo = Color.white; + hitSound = Sounds.plasmaboom; + shootCone = 180f; ejectEffect = Fx.none; - shootSound = Sounds.none; despawnShake = 4f; collidesAir = false; @@ -1291,7 +1349,7 @@ public class UnitTypes implements ContentList{ collides = false; healPercent = 15f; - splashDamage = 320f; + splashDamage = 240f; splashDamageRadius = 120f; }}; }}); @@ -1342,7 +1400,7 @@ public class UnitTypes implements ContentList{ shootY = 4f; y = 1.5f; rotate = true; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; bullet = Bullets.standardCopper; }}); @@ -1352,7 +1410,8 @@ public class UnitTypes implements ContentList{ x = 0f; y = -5f; rotate = true; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; + shootSound = Sounds.missile; bullet = new MissileBulletType(2.7f, 12, "missile"){{ width = 8f; height = 8f; @@ -1398,7 +1457,8 @@ public class UnitTypes implements ContentList{ rotate = true; rotateSpeed = 5f; inaccuracy = 10f; - ejectEffect = Fx.shellEjectSmall; + ejectEffect = Fx.casing1; + shootSound = Sounds.shoot; bullet = Bullets.flakLead; }}); @@ -1410,8 +1470,9 @@ public class UnitTypes implements ContentList{ inaccuracy = 2f; rotateSpeed = 2f; shake = 1.5f; - ejectEffect = Fx.shellEjectMedium; - bullet = Bullets.artilleryIncendiary; + ejectEffect = Fx.casing2; + shootSound = Sounds.bang; + bullet = Bullets.artilleryDense; }}); }}; @@ -1446,7 +1507,8 @@ public class UnitTypes implements ContentList{ shots = 1; inaccuracy = 3f; - ejectEffect = Fx.shellEjectBig; + ejectEffect = Fx.casing3; + shootSound = Sounds.artillery; bullet = new ArtilleryBulletType(3.2f, 12){{ trailMult = 0.8f; @@ -1485,6 +1547,7 @@ public class UnitTypes implements ContentList{ shotDelay = 3f; inaccuracy = 5f; velocityRnd = 0.1f; + shootSound = Sounds.missile; ejectEffect = Fx.none; bullet = new MissileBulletType(2.7f, 12){{ @@ -1543,11 +1606,11 @@ public class UnitTypes implements ContentList{ inaccuracy = 7f; ejectEffect = Fx.none; shake = 3f; - shootSound = Sounds.shootBig; + shootSound = Sounds.missile; xRand = 8f; shotDelay = 1f; - bullet = new MissileBulletType(4.2f, 30){{ + bullet = new MissileBulletType(4.2f, 40){{ homingPower = 0.12f; width = 8f; height = 8f; @@ -1555,8 +1618,8 @@ public class UnitTypes implements ContentList{ drag = -0.003f; homingRange = 80f; keepVelocity = false; - splashDamageRadius = 30f; - splashDamage = 35f; + splashDamageRadius = 35f; + splashDamage = 45f; lifetime = 56f; trailColor = Pal.bulletYellowBack; backColor = Pal.bulletYellowBack; @@ -1569,7 +1632,7 @@ public class UnitTypes implements ContentList{ }}); weapons.add(new Weapon("large-bullet-mount"){{ - reload = 80f; + reload = 60f; cooldownTime = 90f; x = 70f/4f; y = -66f/4f; @@ -1579,12 +1642,12 @@ public class UnitTypes implements ContentList{ shake = 2f; recoil = 3f; occlusion = 12f; - ejectEffect = Fx.shellEjectBig; + ejectEffect = Fx.casing3; shots = 3; shotDelay = 4f; inaccuracy = 1f; - bullet = new BasicBulletType(7f, 50){{ + bullet = new BasicBulletType(7f, 55){{ width = 13f; height = 19f; shootEffect = Fx.shootBig; @@ -1624,14 +1687,15 @@ public class UnitTypes implements ContentList{ shake = 6f; recoil = 10.5f; occlusion = 50f; + shootSound = Sounds.railgun; shots = 1; ejectEffect = Fx.none; bullet = new RailBulletType(){{ shootEffect = Fx.railShoot; - speed = 67f; - lifetime = 8f; + length = 500; + updateEffectSeg = 60f; pierceEffect = Fx.railHit; updateEffect = Fx.railTrail; hitEffect = Fx.massiveExplosion; @@ -1650,7 +1714,7 @@ public class UnitTypes implements ContentList{ isCounted = false; flying = true; - mineSpeed = 6f; + mineSpeed = 6.5f; mineTier = 1; buildSpeed = 0.5f; drag = 0.05f; @@ -1662,12 +1726,14 @@ public class UnitTypes implements ContentList{ engineOffset = 6f; hitSize = 8f; commandLimit = 3; + alwaysUnlocked = true; weapons.add(new Weapon("small-basic-weapon"){{ reload = 17f; x = 2.75f; y = 1f; top = false; + ejectEffect = Fx.casing1; bullet = new BasicBulletType(2.5f, 10){{ width = 7f; @@ -1675,7 +1741,7 @@ public class UnitTypes implements ContentList{ lifetime = 60f; shootEffect = Fx.shootSmall; smokeEffect = Fx.shootSmallSmoke; - tileDamageMultiplier = 0.03f; + tileDamageMultiplier = 0.02f; }}; }}); }}; @@ -1698,7 +1764,7 @@ public class UnitTypes implements ContentList{ hitSize = 9f; rotateShooting = false; lowAltitude = true; - commandLimit = 5; + commandLimit = 4; weapons.add(new Weapon("small-mount-weapon"){{ top = false; @@ -1709,6 +1775,7 @@ public class UnitTypes implements ContentList{ shots = 2; shotDelay = 4f; spacing = 0f; + ejectEffect = Fx.casing1; bullet = new BasicBulletType(3f, 10){{ width = 7f; @@ -1716,7 +1783,7 @@ public class UnitTypes implements ContentList{ lifetime = 60f; shootEffect = Fx.shootSmall; smokeEffect = Fx.shootSmallSmoke; - tileDamageMultiplier = 0.03f; + tileDamageMultiplier = 0.02f; }}; }}); }}; @@ -1736,8 +1803,8 @@ public class UnitTypes implements ContentList{ itemCapacity = 70; health = 220f; engineOffset = 6f; - hitSize = 10f; - commandLimit = 7; + hitSize = 11f; + commandLimit = 5; weapons.add(new Weapon("small-mount-weapon"){{ top = false; @@ -1748,6 +1815,7 @@ public class UnitTypes implements ContentList{ spacing = 2f; inaccuracy = 3f; shotDelay = 3f; + ejectEffect = Fx.casing1; bullet = new BasicBulletType(3.5f, 10){{ width = 6.5f; @@ -1755,7 +1823,7 @@ public class UnitTypes implements ContentList{ lifetime = 70f; shootEffect = Fx.shootSmall; smokeEffect = Fx.shootSmallSmoke; - tileDamageMultiplier = 0.03f; + tileDamageMultiplier = 0.02f; homingPower = 0.04f; }}; }}); @@ -1771,6 +1839,7 @@ public class UnitTypes implements ContentList{ health = 1; rotateSpeed = 360f; itemCapacity = 0; + commandLimit = 0; } @Override diff --git a/core/src/mindustry/content/Weathers.java b/core/src/mindustry/content/Weathers.java index b120b7ef2b..86dac06f7b 100644 --- a/core/src/mindustry/content/Weathers.java +++ b/core/src/mindustry/content/Weathers.java @@ -3,6 +3,7 @@ package mindustry.content; import arc.graphics.*; import arc.util.*; import mindustry.ctype.*; +import mindustry.gen.*; import mindustry.type.*; import mindustry.type.weather.*; import mindustry.world.meta.*; @@ -18,20 +19,30 @@ public class Weathers implements ContentList{ @Override public void load(){ snow = new ParticleWeather("snow"){{ + particleRegion = "particle"; sizeMax = 13f; sizeMin = 2.6f; density = 1200f; attrs.set(Attribute.light, -0.15f); + + sound = Sounds.windhowl; + soundVol = 0f; + soundVolOscMag = 1.5f; + soundVolOscScl = 1100f; + soundVolMin = 0.02f; }}; rain = new RainWeather("rain"){{ attrs.set(Attribute.light, -0.2f); attrs.set(Attribute.water, 0.2f); status = StatusEffects.wet; + sound = Sounds.rain; + soundVol = 0.25f; }}; sandstorm = new ParticleWeather("sandstorm"){{ color = noiseColor = Color.valueOf("f7cba4"); + particleRegion = "particle"; drawNoise = true; useWindVector = true; sizeMax = 140f; @@ -39,16 +50,18 @@ public class Weathers implements ContentList{ minAlpha = 0f; maxAlpha = 0.2f; density = 1500f; - baseSpeed = 6.1f; + baseSpeed = 5.4f; attrs.set(Attribute.light, -0.1f); attrs.set(Attribute.water, -0.1f); - opacityMultiplier = 0.8f; + opacityMultiplier = 0.5f; force = 0.1f; + sound = Sounds.wind; + soundVol = 0.3f; }}; sporestorm = new ParticleWeather("sporestorm"){{ color = noiseColor = Color.valueOf("7457ce"); - particleRegion = "circle"; + particleRegion = "circle-small"; drawNoise = true; statusGround = false; useWindVector = true; @@ -61,8 +74,10 @@ public class Weathers implements ContentList{ attrs.set(Attribute.spores, 1f); attrs.set(Attribute.light, -0.15f); status = StatusEffects.sporeSlowed; - opacityMultiplier = 0.85f; + opacityMultiplier = 0.75f; force = 0.1f; + sound = Sounds.wind; + soundVol = 0.3f; }}; fog = new ParticleWeather("fog"){{ diff --git a/core/src/mindustry/core/ContentLoader.java b/core/src/mindustry/core/ContentLoader.java index 975bc4d1f8..b7c0fbd0e0 100644 --- a/core/src/mindustry/core/ContentLoader.java +++ b/core/src/mindustry/core/ContentLoader.java @@ -160,8 +160,8 @@ public class ContentLoader{ public void removeLast(){ if(lastAdded != null && contentMap[lastAdded.getContentType().ordinal()].peek() == lastAdded){ contentMap[lastAdded.getContentType().ordinal()].pop(); - if(lastAdded instanceof MappableContent){ - contentNameMap[lastAdded.getContentType().ordinal()].remove(((MappableContent)lastAdded).name); + if(lastAdded instanceof MappableContent c){ + contentNameMap[lastAdded.getContentType().ordinal()].remove(c.name); } } } diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 3d904c1826..cd1768b25c 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -11,6 +11,7 @@ import arc.struct.*; import arc.util.*; import mindustry.audio.*; import mindustry.content.*; +import mindustry.content.TechTree.*; import mindustry.core.GameState.*; import mindustry.entities.*; import mindustry.game.EventType.*; @@ -21,6 +22,7 @@ import mindustry.input.*; import mindustry.io.*; import mindustry.io.SaveIO.*; import mindustry.maps.Map; +import mindustry.net.*; import mindustry.type.*; import mindustry.ui.dialogs.*; import mindustry.world.*; @@ -41,8 +43,7 @@ import static mindustry.Vars.*; */ public class Control implements ApplicationListener, Loadable{ public Saves saves; - public MusicControl music; - public Tutorial tutorial; + public SoundControl sound; public InputHandler input; private Interval timer = new Interval(2); @@ -51,15 +52,11 @@ public class Control implements ApplicationListener, Loadable{ public Control(){ saves = new Saves(); - tutorial = new Tutorial(); - music = new MusicControl(); + sound = new SoundControl(); Events.on(StateChangeEvent.class, event -> { if((event.from == State.playing && event.to == State.menu) || (event.from == State.menu && event.to != State.menu)){ Time.runTask(5f, platform::updateRPC); - for(Sound sound : assets.getAll(Sound.class, new Seq<>())){ - sound.stop(); - } } }); @@ -88,7 +85,6 @@ public class Control implements ApplicationListener, Loadable{ Events.on(ResetEvent.class, event -> { player.reset(); - tutorial.reset(); hiscore = false; saves.resetSave(); @@ -130,6 +126,14 @@ public class Control implements ApplicationListener, Loadable{ Events.on(UnlockEvent.class, e -> ui.hudfrag.showUnlock(e.content)); + Events.on(UnlockEvent.class, e -> { + checkAutoUnlocks(); + }); + + Events.on(SectorCaptureEvent.class, e -> { + checkAutoUnlocks(); + }); + Events.on(BlockBuildEndEvent.class, e -> { if(e.team == player.team()){ if(e.breaking){ @@ -156,8 +160,8 @@ public class Control implements ApplicationListener, Loadable{ Events.on(GameOverEvent.class, e -> { if(state.isCampaign() && !net.client() && !headless){ - //delete the save, it is gone. - if(saves.getCurrent() != null && !state.rules.tutorial){ + //save gameover sate immediately + if(saves.getCurrent() != null){ saves.getCurrent().save(); } } @@ -178,9 +182,18 @@ public class Control implements ApplicationListener, Loadable{ app.post(() -> ui.hudfrag.showLand()); renderer.zoomIn(Fx.coreLand.lifetime); app.post(() -> Fx.coreLand.at(core.getX(), core.getY(), 0, core.block)); + camera.position.set(core); + player.set(core); + Time.run(Fx.coreLand.lifetime, () -> { Fx.launch.at(core); Effect.shake(5f, 5f, core); + + if(state.isCampaign()){ + ui.announce("[accent]" + state.rules.sector.name() + "\n" + + (state.rules.sector.info.resources.any() ? "[lightgray]" + bundle.get("sectors.resources") + "[white] " + + state.rules.sector.info.resources.toString(" ", u -> u.emoji()) : ""), 5); + } }); }); @@ -204,6 +217,17 @@ public class Control implements ApplicationListener, Loadable{ saves.load(); } + /** Automatically unlocks things with no requirements. */ + void checkAutoUnlocks(){ + if(net.client()) return; + + for(TechNode node : TechTree.all){ + if(!node.content.unlocked() && node.requirements.length == 0 && !node.objectives.contains(o -> !o.complete())){ + node.content.unlock(); + } + } + } + void createPlayer(){ player = Player.create(); player.name = Core.settings.getString("name"); @@ -253,18 +277,26 @@ public class Control implements ApplicationListener, Loadable{ } public void playSector(@Nullable Sector origin, Sector sector){ + playSector(origin, sector, new WorldReloader()); + } + + void playSector(@Nullable Sector origin, Sector sector, WorldReloader reloader){ ui.loadAnd(() -> { + if(saves.getCurrent() != null && state.isGame()){ + control.saves.getCurrent().save(); + control.saves.resetSave(); + } + ui.planet.hide(); SaveSlot slot = sector.save; sector.planet.setLastSector(sector); if(slot != null && !clearSectors){ try{ - net.reset(); + reloader.begin(); slot.load(); slot.setAutosave(true); state.rules.sector = sector; - state.secinfo = state.rules.sector.info; //if there is no base, simulate a new game and place the right loadout at the spawn position if(state.rules.defaultTeam.cores().isEmpty()){ @@ -275,15 +307,19 @@ public class Control implements ApplicationListener, Loadable{ sector.save = null; slot.delete(); //play again - playSector(origin, sector); + playSector(origin, sector, reloader); return; } //reset wave so things are more fair state.wave = 1; - //kill all units, since they should be dead anwyay + //reset win wave?? + state.rules.winWave = state.rules.attackMode ? -1 : sector.preset != null ? sector.preset.captureWave : 40; + + //kill all units, since they should be dead anyway Groups.unit.clear(); + Groups.fire.clear(); Tile spawn = world.tile(sector.info.spawnPosition); Schematics.placeLaunchLoadout(spawn.x, spawn.y); @@ -292,10 +328,12 @@ public class Control implements ApplicationListener, Loadable{ player.set(spawn.x * tilesize, spawn.y * tilesize); camera.position.set(player); + Events.fire(new SectorLaunchEvent(sector)); Events.fire(Trigger.newGame); } state.set(State.playing); + reloader.end(); }catch(SaveException e){ Log.err(e); @@ -306,78 +344,21 @@ public class Control implements ApplicationListener, Loadable{ } ui.planet.hide(); }else{ - net.reset(); - logic.reset(); + reloader.begin(); world.loadSector(sector); state.rules.sector = sector; //assign origin when launching - state.secinfo.origin = origin; - state.secinfo.destination = origin; + sector.info.origin = origin; + sector.info.destination = origin; logic.play(); control.saves.saveSector(sector); + Events.fire(new SectorLaunchEvent(sector)); Events.fire(Trigger.newGame); + reloader.end(); } }); } - public void playTutorial(){ - ui.showInfo("@indev.notready"); - //TODO implement - //ui.showInfo("death"); - /* - Zone zone = Zones.groundZero; - ui.loadAnd(() -> { - logic.reset(); - net.reset(); - - world.beginMapLoad(); - - world.resize(zone.generator.width, zone.generator.height); - zone.generator.generate(world.tiles); - - Tile coreb = null; - - out: - for(int x = 0; x < world.width(); x++){ - for(int y = 0; y < world.height(); y++){ - if(world.rawTile(x, y).block() instanceof CoreBlock){ - coreb = world.rawTile(x, y); - break out; - } - } - } - - Geometry.circle(coreb.x, coreb.y, 10, (cx, cy) -> { - Tile tile = world.ltile(cx, cy); - if(tile != null && tile.team() == state.rules.defaultTeam && !(tile.block() instanceof CoreBlock)){ - tile.remove(); - } - }); - - Geometry.circle(coreb.x, coreb.y, 5, (cx, cy) -> world.tile(cx, cy).clearOverlay()); - - world.endMapLoad(); - - zone.rules.get(state.rules); - //TODO assign zone!! - //state.rules.zone = zone; - for(Building core : state.teams.playerCores()){ - for(ItemStack stack : zone.getStartingItems()){ - core.items.add(stack.item, stack.amount); - } - } - Building core = state.teams.playerCores().first(); - core.items.clear(); - - logic.play(); - state.rules.waveTimer = false; - state.rules.waveSpacing = 60f * 30; - state.rules.buildCostMultiplier = 0.3f; - state.rules.tutorial = true; - Events.fire(Trigger.newGame); - });*/ - } - public boolean isHighScore(){ return hiscore; } @@ -389,11 +370,15 @@ public class Control implements ApplicationListener, Loadable{ try{ SaveIO.save(control.saves.getCurrent().file); Log.info("Saved on exit."); - }catch(Throwable e){ - e.printStackTrace(); + }catch(Throwable t){ + Log.err(t); } } + for(Music music : assets.getAll(Music.class, new Seq<>())){ + music.stop(); + } + content.dispose(); net.dispose(); Musics.dispose(); @@ -403,13 +388,15 @@ public class Control implements ApplicationListener, Loadable{ @Override public void pause(){ - wasPaused = state.is(State.paused); - if(state.is(State.playing)) state.set(State.paused); + if(settings.getBool("backgroundpause", true)){ + wasPaused = state.is(State.paused); + if(state.is(State.playing)) state.set(State.paused); + } } @Override public void resume(){ - if(state.is(State.paused) && !wasPaused){ + if(state.is(State.paused) && !wasPaused && settings.getBool("backgroundpause", true)){ state.set(State.playing); } } @@ -418,19 +405,6 @@ public class Control implements ApplicationListener, Loadable{ public void init(){ platform.updateRPC(); - //just a regular reminder - if(!OS.prop("user.name").equals("anuke") && !OS.hasEnv("iknowwhatimdoing")){ - app.post(() -> app.post(() -> { - ui.showStartupInfo("@indev.popup"); - })); - } - - //play tutorial on start - //TODO no tutorial right now - if(!settings.getBool("playedtutorial", false)){ - //Core.app.post(() -> Core.app.post(this::playTutorial)); - } - //display UI scale changed dialog if(Core.settings.getBool("uiscalechanged", false)){ Core.app.post(() -> Core.app.post(() -> { @@ -463,10 +437,6 @@ public class Control implements ApplicationListener, Loadable{ dialog.show(); })); } - - if(android){ - Sounds.empty.loop(0f, 1f, 0f); - } } @Override @@ -484,8 +454,7 @@ public class Control implements ApplicationListener, Loadable{ input.updateState(); - music.update(); - loops.update(); + sound.update(); if(Core.input.keyTap(Binding.fullscreen)){ boolean full = settings.getBool("fullscreen"); @@ -500,15 +469,17 @@ public class Control implements ApplicationListener, Loadable{ if(state.isGame()){ input.update(); - if(state.rules.tutorial){ - tutorial.update(); - } - //auto-update rpc every 5 seconds if(timer.get(0, 60 * 5)){ platform.updateRPC(); } + //unlock core items + var core = state.rules.defaultTeam.core(); + if(!net.client() && core != null && state.isCampaign()){ + core.items.each((i, a) -> i.unlock()); + } + if(Core.input.keyTap(Binding.pause) && !scene.hasDialog() && !scene.hasKeyboard() && !ui.restart.isShown() && (state.is(State.paused) || state.is(State.playing))){ state.set(state.is(State.playing) ? State.paused : State.playing); } diff --git a/core/src/mindustry/core/GameState.java b/core/src/mindustry/core/GameState.java index 41f14074c8..3eed5e0164 100644 --- a/core/src/mindustry/core/GameState.java +++ b/core/src/mindustry/core/GameState.java @@ -26,8 +26,6 @@ public class GameState{ public GameStats stats = new GameStats(); /** Global attributes of the environment, calculated by weather. */ public Attributes envAttrs = new Attributes(); - /** Sector information. Only valid in the campaign. */ - public SectorInfo secinfo = new SectorInfo(); /** Team data. Gets reset every new game. */ public Teams teams = new Teams(); /** Number of enemies in the game; only used clientside in servers. */ @@ -71,7 +69,7 @@ public class GameState{ } public boolean isPaused(){ - return (is(State.paused) && !net.active()) || (gameOver && !net.active()) || (serverPaused && !isMenu()); + return (is(State.paused) && !net.active()) || (gameOver && (!net.active() || isCampaign())) || (serverPaused && !isMenu()); } public boolean isPlaying(){ diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index a96ea101a9..5f6bd2c1a9 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -34,7 +34,6 @@ public class Logic implements ApplicationListener{ Events.on(BlockDestroyEvent.class, event -> { //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 un-rebuildables, for obvious reasons; also skip client since they can't modify these requests if(tile.build == null || !tile.block().rebuildable || net.client()) return; @@ -55,15 +54,14 @@ public class Logic implements ApplicationListener{ } }); - Events.on(LaunchItemEvent.class, e -> state.secinfo.handleItemExport(e.stack)); - //when loading a 'damaged' sector, propagate the damage Events.on(SaveLoadEvent.class, e -> { if(state.isCampaign()){ - state.secinfo.write(); + SectorInfo info = state.rules.sector.info; + info.write(); //how much wave time has passed - int wavesPassed = state.secinfo.wavesPassed; + int wavesPassed = info.wavesPassed; //wave has passed, remove all enemies, they are assumed to be dead if(wavesPassed > 0){ @@ -81,13 +79,20 @@ public class Logic implements ApplicationListener{ state.wavetime = state.rules.waveSpacing; SectorDamage.applyCalculatedDamage(); + + //make sure damaged buildings are counted + for(Tile tile : world.tiles){ + if(tile.build != null && tile.build.damaged()){ + indexer.notifyTileDamaged(tile.build); + } + } } //reset values - state.secinfo.damage = 0f; - state.secinfo.wavesPassed = 0; - state.secinfo.hasCore = true; - state.secinfo.secondsPassed = 0; + info.damage = 0f; + info.wavesPassed = 0; + info.hasCore = true; + info.secondsPassed = 0; state.rules.sector.saveInfo(); } @@ -96,9 +101,13 @@ public class Logic implements ApplicationListener{ Events.on(WorldLoadEvent.class, e -> { //enable infinite ammo for wave team by default state.rules.waveTeam.rules().infiniteAmmo = true; + if(state.isCampaign()){ - //enable building AI - state.rules.waveTeam.rules().ai = true; + //enable building AI on campaign unless the preset disables it + if(!(state.getSector().preset != null && !state.getSector().preset.useAI)){ + state.rules.waveTeam.rules().ai = true; + } + state.rules.waveTeam.rules().aiTier = state.getSector().threat; state.rules.waveTeam.rules().infiniteResources = true; } @@ -113,6 +122,30 @@ public class Logic implements ApplicationListener{ } }); + Events.on(SectorCaptureEvent.class, e -> { + if(!net.client() && e.sector == state.getSector() && e.sector.isBeingPlayed()){ + for(Tile tile : world.tiles){ + //convert all blocks to neutral, randomly killing them + if(tile.isCenter() && tile.build != null && tile.build.team == state.rules.waveTeam){ + Building b = tile.build; + Time.run(Mathf.random(0f, 60f * 6f), () -> { + Call.setTeam(b, Team.derelict); + if(Mathf.chance(0.25)){ + b.kill(); + } + }); + } + } + + //kill all units + Groups.unit.each(u -> { + if(u.team == state.rules.waveTeam){ + Time.run(Mathf.random(0f, 60f * 5f), u::kill); + } + }); + } + }); + } /** Adds starting items, resets wave time, and sets state to playing. */ @@ -181,37 +214,21 @@ public class Logic implements ApplicationListener{ //if there's a "win" wave and no enemies are present, win automatically if(state.rules.waves && (state.enemies == 0 && state.rules.winWave > 0 && state.wave >= state.rules.winWave && !spawner.isSpawning()) || (state.rules.attackMode && state.rules.waveTeam.cores().isEmpty())){ - //the sector has been conquered - waves get disabled - state.rules.waves = false; - //disable attack mode - state.rules.attackMode = false; - //fire capture event - Events.fire(new SectorCaptureEvent(state.rules.sector)); - - //save, just in case - if(!headless){ - control.saves.saveSector(state.rules.sector); - } + Call.sectorCapture(); } }else{ if(!state.rules.attackMode && state.teams.playerCores().size == 0 && !state.gameOver){ state.gameOver = true; Events.fire(new GameOverEvent(state.rules.waveTeam)); }else if(state.rules.attackMode){ - Team alive = null; + //count # of teams alive + int countAlive = state.teams.getActive().count(TeamData::hasCore); - for(TeamData team : state.teams.getActive()){ - if(team.hasCore()){ - if(alive != null){ - return; - } - alive = team.team; - } - } - - if(alive != null && !state.gameOver){ - Events.fire(new GameOverEvent(alive)); + if((countAlive <= 1 || (!state.rules.pvp && state.rules.defaultTeam.core() == null)) && !state.gameOver){ + //find team that won + TeamData left = state.teams.getActive().find(TeamData::hasCore); + Events.fire(new GameOverEvent(left == null ? Team.derelict : left.team)); state.gameOver = true; } } @@ -234,6 +251,24 @@ public class Logic implements ApplicationListener{ } } + @Remote(called = Loc.server) + public static void sectorCapture(){ + //the sector has been conquered - waves get disabled + state.rules.waves = false; + //disable attack mode + state.rules.attackMode = false; + + if(state.rules.sector == null) return; + + //fire capture event + Events.fire(new SectorCaptureEvent(state.rules.sector)); + + //save, just in case + if(!headless && !net.client()){ + control.saves.saveSector(state.rules.sector); + } + } + @Remote(called = Loc.both) public static void updateGameOver(Team winner){ state.gameOver = true; @@ -252,7 +287,7 @@ public class Logic implements ApplicationListener{ if(!(content instanceof UnlockableContent u)) return; state.rules.researched.add(u.name); - ui.hudfrag.showUnlock(u); + Events.fire(new UnlockEvent(u)); } @Override @@ -279,7 +314,7 @@ public class Logic implements ApplicationListener{ state.teams.updateTeamStats(); if(state.isCampaign()){ - state.secinfo.update(); + state.rules.sector.info.update(); } if(state.isCampaign()){ @@ -325,5 +360,4 @@ public class Logic implements ApplicationListener{ public boolean isWaitingWave(){ return (state.rules.waitEnemies || (state.wave >= state.rules.winWave && state.rules.winWave > 0)) && state.enemies > 0; } - } diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 3c6214fd85..841e7e42a7 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -21,6 +21,7 @@ import mindustry.net.Administration.*; import mindustry.net.Net.*; import mindustry.net.*; import mindustry.net.Packets.*; +import mindustry.ui.*; import mindustry.world.*; import mindustry.world.modules.*; @@ -32,7 +33,7 @@ import static mindustry.Vars.*; public class NetClient implements ApplicationListener{ private static final float dataTimeout = 60 * 18; private static final float playerSyncTime = 2; - public final static float viewScale = 2f; + public static final float viewScale = 2f; private long ping; private Interval timer = new Interval(5); @@ -234,7 +235,7 @@ public class NetClient implements ApplicationListener{ ui.join.connect(ip, port); } - + @Remote(targets = Loc.client) public static void ping(Player player, long time){ Call.pingResponse(player.con, time); @@ -293,6 +294,13 @@ public class NetClient implements ApplicationListener{ setHudText(message); } + @Remote(variants = Variant.both) + public static void announce(String message){ + if(message == null) return; + + ui.announce(message); + } + @Remote(variants = Variant.both) public static void infoMessage(String message){ if(message == null) return; @@ -315,15 +323,15 @@ public class NetClient implements ApplicationListener{ } @Remote(variants = Variant.both, unreliable = true) - public static void onEffect(Effect effect, float x, float y, float rotation, Color color){ + public static void effect(Effect effect, float x, float y, float rotation, Color color){ if(effect == null) return; effect.at(x, y, rotation, color); } @Remote(variants = Variant.both) - public static void onEffectReliable(Effect effect, float x, float y, float rotation, Color color){ - onEffect(effect, x, y, rotation, color); + public static void effectReliable(Effect effect, float x, float y, float rotation, Color color){ + effect(effect, x, y, rotation, color); } @Remote(variants = Variant.both) @@ -332,6 +340,13 @@ public class NetClient implements ApplicationListener{ ui.showInfoToast(message, duration); } + + @Remote(variants = Variant.both) + public static void warningToast(int unicode, String text){ + if(text == null || Fonts.icon.getData().getGlyph((char)unicode) == null) return; + + ui.hudfrag.showToast(Fonts.getGlyph(Fonts.icon, (char)unicode), text); + } @Remote(variants = Variant.both) public static void setRules(Rules rules){ @@ -433,7 +448,7 @@ public class NetClient implements ApplicationListener{ tile.build.readAll(Reads.get(input), tile.build.version()); } }catch(Exception e){ - e.printStackTrace(); + Log.err(e); } } @@ -564,19 +579,19 @@ public class NetClient implements ApplicationListener{ BuildPlan[] requests = null; if(player.isBuilder()){ //limit to 10 to prevent buffer overflows - int usedRequests = Math.min(player.builder().plans().size, 10); + int usedRequests = Math.min(player.unit().plans().size, 10); int totalLength = 0; //prevent buffer overflow by checking config length for(int i = 0; i < usedRequests; i++){ - BuildPlan plan = player.builder().plans().get(i); - if(plan.config instanceof byte[]){ - int length = ((byte[])plan.config).length; + BuildPlan plan = player.unit().plans().get(i); + if(plan.config instanceof byte[] b){ + int length = b.length; totalLength += length; } - if(totalLength > 2048){ + if(totalLength > 1024){ usedRequests = i + 1; break; } @@ -584,7 +599,7 @@ public class NetClient implements ApplicationListener{ requests = new BuildPlan[usedRequests]; for(int i = 0; i < usedRequests; i++){ - requests[i] = player.builder().plans().get(i); + requests[i] = player.unit().plans().get(i); } } @@ -598,9 +613,9 @@ public class NetClient implements ApplicationListener{ unit.x, unit.y, player.unit().aimX(), player.unit().aimY(), unit.rotation, - unit instanceof Mechc ? ((Mechc)unit).baseRotation() : 0, + unit instanceof Mechc m ? m.baseRotation() : 0, unit.vel.x, unit.vel.y, - player.miner().mineTile(), + player.unit().mineTile, player.boosting, player.shooting, ui.chatfrag.shown(), control.input.isBuilding, requests, Core.camera.position.x, Core.camera.position.y, diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index 00f0bc78e8..5c4c12dea1 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -41,7 +41,7 @@ public class NetServer implements ApplicationListener{ private static final Vec2 vector = new Vec2(); private static final Rect viewport = new Rect(); /** If a player goes away of their server-side coordinates by this distance, they get teleported back. */ - private static final float correctDist = 16f; + private static final float correctDist = tilesize * 8f; public final Administration admins = new Administration(); public final CommandHandler clientCommands = new CommandHandler("/"); @@ -164,7 +164,7 @@ public class NetServer implements ApplicationListener{ info.id = packet.uuid; admins.save(); Call.infoMessage(con, "You are not whitelisted here."); - Log.info("&lcDo &lywhitelist-add @&lc to whitelist the player &lb'@'", packet.uuid, packet.name); + info("&lcDo &lywhitelist-add @&lc to whitelist the player &lb'@'", packet.uuid, packet.name); con.kick(KickReason.whitelist); return; } @@ -226,8 +226,8 @@ public class NetServer implements ApplicationListener{ writeBuffer.reset(); player.write(outputBuffer); }catch(Throwable t){ - t.printStackTrace(); con.kick(KickReason.nameEmpty); + err(t); return; } @@ -248,10 +248,10 @@ public class NetServer implements ApplicationListener{ try{ RemoteReadServer.readPacket(packet.reader(), packet.type, con.player); }catch(ValidateException e){ - Log.debug("Validation failed for '@': @", e.player, e.getMessage()); + debug("Validation failed for '@': @", e.player, e.getMessage()); }catch(RuntimeException e){ if(e.getCause() instanceof ValidateException v){ - Log.debug("Validation failed for '@': @", v.player, v.getMessage()); + debug("Validation failed for '@': @", v.player, v.getMessage()); }else{ throw e; } @@ -305,7 +305,7 @@ public class NetServer implements ApplicationListener{ player.sendMessage("[scarlet]You must be admin to use this command."); return; } - + Groups.player.each(Player::admin, a -> a.sendMessage(args[0], player, "[#" + Pal.adminChat.toString() + "]" + NetClient.colorizeName(player.id, player.name))); }); @@ -418,7 +418,7 @@ public class NetServer implements ApplicationListener{ VoteSession session = new VoteSession(currentlyKicking, found); session.vote(player, 1); - vtime.reset(); + vtime.reset(); currentlyKicking[0] = session; } }else{ @@ -493,7 +493,7 @@ public class NetServer implements ApplicationListener{ data.stream = new ByteArrayInputStream(stream.toByteArray()); player.con.sendStream(data); - Log.debug("Packed @ bytes of world data.", stream.size()); + debug("Packed @ bytes of world data.", stream.size()); } public void addPacketHandler(String type, Cons2 handler){ @@ -505,7 +505,7 @@ public class NetServer implements ApplicationListener{ } public static void onDisconnect(Player player, String reason){ - //singleplayer multiplayer wierdness + //singleplayer multiplayer weirdness if(player.con == null){ player.remove(); return; @@ -519,7 +519,7 @@ public class NetServer implements ApplicationListener{ } String message = Strings.format("&lb@&fi&lk has disconnected. &fi&lk[&lb@&fi&lk] (@)", player.name, player.uuid(), reason); - if(Config.showConnectMessages.bool()) Log.info(message); + if(Config.showConnectMessages.bool()) info(message); } player.remove(); @@ -539,7 +539,7 @@ public class NetServer implements ApplicationListener{ public static void serverPacketUnreliable(Player player, String type, String contents){ serverPacketReliable(player, type, contents); } - + private static boolean invalid(float f){ return Float.isInfinite(f) || Float.isNaN(f); } @@ -600,8 +600,8 @@ public class NetServer implements ApplicationListener{ player.unit().aim(pointerX, pointerY); if(player.isBuilder()){ - player.builder().clearBuilding(); - player.builder().updateBuilding(building); + player.unit().clearBuilding(); + player.unit().updateBuilding(building); if(requests != null){ for(BuildPlan req : requests){ @@ -625,14 +625,12 @@ public class NetServer implements ApplicationListener{ con.rejectedRequests.add(req); continue; } - player.builder().plans().addLast(req); + player.unit().plans().addLast(req); } } } - if(player.isMiner()){ - player.miner().mineTile(mining); - } + player.unit().mineTile = mining; con.rejectedRequests.clear(); @@ -640,12 +638,12 @@ public class NetServer implements ApplicationListener{ Unit unit = player.unit(); long elapsed = Time.timeSinceMillis(con.lastReceivedClientTime); - float maxSpeed = ((player.unit().type.canBoost && player.unit().isFlying()) ? player.unit().type.boostMultiplier : 1f) * player.unit().type.speed; + float maxSpeed = unit.realSpeed(); if(unit.isGrounded()){ maxSpeed *= unit.floorSpeedMultiplier(); } - float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.1f; + float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.2f; //ignore the position if the player thinks they're dead, or the unit is wrong boolean ignorePosition = dead || unit.id != unitID; @@ -702,15 +700,14 @@ public class NetServer implements ApplicationListener{ @Remote(targets = Loc.client, called = Loc.server) public static void adminRequest(Player player, Player other, AdminAction action){ - if(!player.admin){ - Log.warn("ACCESS DENIED: Player @ / @ attempted to perform admin action '@' on '@' without proper security access.", + warn("ACCESS DENIED: Player @ / @ attempted to perform admin action '@' on '@' without proper security access.", player.name, player.con.address, action.name(), other == null ? null : other.name); return; } if(other == null || ((other.admin && !player.isLocal()) && other != player)){ - Log.warn("@ attempted to perform admin action on nonexistant or admin player.", player.name); + warn("@ attempted to perform admin action on nonexistant or admin player.", player.name); return; } @@ -722,10 +719,10 @@ public class NetServer implements ApplicationListener{ netServer.admins.banPlayerIP(other.con.address); netServer.admins.banPlayerID(other.con.uuid); other.kick(KickReason.banned); - Log.info("&lc@ has banned @.", player.name, other.name); + info("&lc@ has banned @.", player.name, other.name); }else if(action == AdminAction.kick){ other.kick(KickReason.kick); - Log.info("&lc@ has kicked @.", player.name, other.name); + info("&lc@ has kicked @.", player.name, other.name); }else if(action == AdminAction.trace){ TraceInfo info = new TraceInfo(other.con.address, other.uuid(), other.con.modclient, other.con.mobile); if(player.con != null){ @@ -733,7 +730,7 @@ public class NetServer implements ApplicationListener{ }else{ NetClient.traceInfo(other, info); } - Log.info("&lc@ has requested trace info of @.", player.name, other.name); + info("&lc@ has requested trace info of @.", player.name, other.name); } } @@ -748,7 +745,7 @@ public class NetServer implements ApplicationListener{ if(Config.showConnectMessages.bool()){ Call.sendMessage("[accent]" + player.name + "[accent] has connected."); String message = Strings.format("&lb@&fi&lk has connected. &fi&lk[&lb@&fi&lk]", player.name, player.uuid()); - Log.info(message); + info(message); } if(!Config.motd.string().equalsIgnoreCase("off")){ @@ -773,7 +770,6 @@ public class NetServer implements ApplicationListener{ @Override public void update(){ - if(!headless && !closing && net.server() && state.isMenu()){ closing = true; ui.loadfrag.show("@server.closing"); @@ -799,7 +795,7 @@ public class NetServer implements ApplicationListener{ net.host(Config.port.num()); info("Opened a server on port @.", 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."); + 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); @@ -915,7 +911,6 @@ public class NetServer implements ApplicationListener{ } String checkColor(String str){ - for(int i = 1; i < str.length(); i++){ if(str.charAt(i) == ']'){ String color = str.substring(1, i); @@ -941,7 +936,6 @@ public class NetServer implements ApplicationListener{ } void sync(){ - try{ Groups.player.each(p -> !p.isLocal(), player -> { if(player.con == null || !player.con.isConnected()){ @@ -965,7 +959,7 @@ public class NetServer implements ApplicationListener{ } }catch(IOException e){ - e.printStackTrace(); + Log.err(e); } } diff --git a/core/src/mindustry/core/Platform.java b/core/src/mindustry/core/Platform.java index 7eae8136c0..1e77fbbe61 100644 --- a/core/src/mindustry/core/Platform.java +++ b/core/src/mindustry/core/Platform.java @@ -117,9 +117,10 @@ public interface Platform{ * @param cons Selection listener * @param open Whether to open or save files * @param extension File extension to filter + * @param title The title of the native dialog */ - default void showFileChooser(boolean open, String extension, Cons cons){ - new FileChooser(open ? "@open" : "@save", file -> file.extEquals(extension), open, file -> { + default void showFileChooser(boolean open, String title, String extension, Cons cons){ + new FileChooser(title, file -> file.extEquals(extension), open, file -> { if(!open){ cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension)); }else{ @@ -128,6 +129,10 @@ public interface Platform{ }).show(); } + default void showFileChooser(boolean open, String extension, Cons cons){ + showFileChooser(open, open ? "@open": "@save", extension, cons); + } + /** * Show a file chooser for multiple file types. * @param cons Selection listener diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 47b7500e10..bdc9b77601 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -27,10 +27,11 @@ public class Renderer implements ApplicationListener{ public final Pixelator pixelator = new Pixelator(); public PlanetRenderer planets; + public @Nullable Bloom bloom; public FrameBuffer effectBuffer = new FrameBuffer(); public float laserOpacity = 1f; - private Bloom bloom; + //TODO unused private FxProcessor fx = new FxProcessor(); private Color clearColor = new Color(0f, 0f, 0f, 1f); private float targetscale = Scl.scl(4); @@ -53,7 +54,7 @@ public class Renderer implements ApplicationListener{ public void init(){ planets = new PlanetRenderer(); - if(settings.getBool("bloom")){ + if(settings.getBool("bloom", !ios)){ setupBloom(); } } @@ -120,10 +121,6 @@ public class Renderer implements ApplicationListener{ @Override public void resize(int width, int height){ - if(settings.getBool("bloom")){ - setupBloom(); - } - fx.resize(width, height); } @@ -142,9 +139,9 @@ public class Renderer implements ApplicationListener{ } bloom = new Bloom(true); }catch(Throwable e){ - e.printStackTrace(); settings.put("bloom", false); ui.showErrorMessage("@error.bloom"); + Log.err(e); } } @@ -239,6 +236,7 @@ public class Renderer implements ApplicationListener{ } if(bloom != null){ + bloom.resize(graphics.getWidth() / 4, graphics.getHeight() / 4); Draw.draw(Layer.bullet - 0.01f, bloom::capture); Draw.draw(Layer.effect + 0.01f, bloom::render); } @@ -366,5 +364,4 @@ public class Renderer implements ApplicationListener{ buffer.dispose(); } - } diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index f0a4757966..4437bb4d48 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -42,6 +42,7 @@ public class UI implements ApplicationListener, Loadable{ public MinimapFragment minimapfrag; public PlayerListFragment listfrag; public LoadingFragment loadfrag; + public HintsFragment hints; public WidgetGroup menuGroup, hudGroup; @@ -104,7 +105,7 @@ public class UI implements ApplicationListener, Loadable{ Tooltips.getInstance().textProvider = text -> new Tooltip(t -> t.background(Styles.black5).margin(4f).add(text)); Core.settings.setErrorHandler(e -> { - e.printStackTrace(); + Log.err(e); Core.app.post(() -> showErrorMessage("Failed to access local storage.\nSettings will not be saved.")); }); @@ -140,12 +141,6 @@ public class UI implements ApplicationListener, Loadable{ } } - //draw overlay for buttons - if(state.rules.tutorial){ - control.tutorial.draw(); - Draw.flush(); - } - Events.fire(Trigger.uiDrawEnd); } @@ -156,6 +151,7 @@ public class UI implements ApplicationListener, Loadable{ menufrag = new MenuFragment(); hudfrag = new HudFragment(); + hints = new HintsFragment(); chatfrag = new ChatFragment(); minimapfrag = new MinimapFragment(); listfrag = new PlayerListFragment(); @@ -328,20 +324,21 @@ public class UI implements ApplicationListener, Loadable{ /** Shows a label in the world. This label is behind everything. Does not fade. */ public void showLabel(String info, float duration, float worldx, float worldy){ - Table table = new Table(); - table.setFillParent(true); + var table = new Table(Styles.black3).margin(4); table.touchable = Touchable.disabled; table.update(() -> { if(state.isMenu()) table.remove(); + Vec2 v = Core.camera.project(worldx, worldy); + table.setPosition(v.x, v.y, Align.center); }); table.actions(Actions.delay(duration), Actions.remove()); - table.align(Align.center).table(Styles.black3, t -> t.margin(4).add(info).style(Styles.outlineLabel)).update(t -> { - Vec2 v = Core.camera.project(worldx, worldy); - t.setPosition(v.x, v.y, Align.center); - }); + table.add(info).style(Styles.outlineLabel); + table.pack(); table.act(0f); //make sure it's at the back Core.scene.root.addChildAt(0, table); + + table.getChildren().first().act(0f); } public void showInfo(String info){ @@ -356,6 +353,7 @@ public class UI implements ApplicationListener, Loadable{ hide(); listener.run(); }).size(110, 50).pad(4); + closeOnBack(); }}.show(); } @@ -364,6 +362,7 @@ public class UI implements ApplicationListener, Loadable{ getCell(cont).growX(); cont.margin(15).add(info).width(400f).wrap().get().setAlignment(Align.left); buttons.button("@ok", this::hide).size(110, 50).pad(4); + closeOnBack(); }}.show(); } @@ -378,6 +377,7 @@ public class UI implements ApplicationListener, Loadable{ cont.add(text).pad(2f).growX().wrap().get().setAlignment(Align.center); cont.row(); cont.button("@ok", this::hide).size(120, 50).pad(4); + closeOnBack(); }}.show(); } @@ -388,7 +388,7 @@ public class UI implements ApplicationListener, Loadable{ public void showException(String text, Throwable exc){ loadfrag.hide(); new Dialog(""){{ - String message = Strings.getFinalMesage(exc); + String message = Strings.getFinalMessage(exc); setFillParent(true); cont.margin(15); @@ -405,6 +405,7 @@ public class UI implements ApplicationListener, Loadable{ cont.button("@ok", this::hide).size(110, 50).fillX().left(); cont.row(); cont.add(col).colspan(2).pad(2); + closeOnBack(); }}.show(); } @@ -420,6 +421,7 @@ public class UI implements ApplicationListener, Loadable{ cont.add(text).width(400f).wrap().get().setAlignment(align, align); cont.row(); buttons.button("@ok", this::hide).size(110, 50).pad(4); + closeOnBack(); }}.show(); } @@ -427,6 +429,7 @@ public class UI implements ApplicationListener, Loadable{ new Dialog(titleText){{ cont.margin(15).add(text).width(400f).wrap().left().get().setAlignment(Align.left, Align.left); buttons.button("@ok", this::hide).size(110, 50).pad(4); + closeOnBack(); }}.show(); } @@ -436,6 +439,7 @@ public class UI implements ApplicationListener, Loadable{ titleTable.row(); titleTable.image().color(Pal.accent).height(3f).growX().pad(2f); buttons.button("@ok", this::hide).size(110, 50).pad(4); + closeOnBack(); }}.show(); } @@ -487,13 +491,20 @@ public class UI implements ApplicationListener, Loadable{ dialog.show(); } + /** Display text in the middle of the screen, then fade out. */ public void announce(String text){ - Table t = new Table(); + announce(text, 3); + } + + /** Display text in the middle of the screen, then fade out. */ + public void announce(String text, float duration){ + Table t = new Table(Styles.black3); t.touchable = Touchable.disabled; - t.background(Styles.black3).margin(8f) - .add(text).style(Styles.outlineLabel).labelAlign(Align.center); + t.margin(8f).add(text).style(Styles.outlineLabel).labelAlign(Align.center); t.update(() -> t.setPosition(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f, Align.center)); - t.actions(Actions.fadeOut(3, Interp.pow4In), Actions.remove()); + t.actions(Actions.fadeOut(duration, Interp.pow4In), Actions.remove()); + t.pack(); + t.act(0.1f); Core.scene.add(t); } @@ -511,7 +522,7 @@ public class UI implements ApplicationListener, Loadable{ //TODO move? - public static String formatAmount(long number){ + public static String formatAmount(int number){ if(number >= 1_000_000_000){ return Strings.fixed(number / 1_000_000_000f, 1) + "[gray]" + Core.bundle.get("unit.billions") + "[]"; }else if(number >= 1_000_000){ diff --git a/core/src/mindustry/core/Version.java b/core/src/mindustry/core/Version.java index c2744700a4..bfde8ab511 100644 --- a/core/src/mindustry/core/Version.java +++ b/core/src/mindustry/core/Version.java @@ -46,6 +46,10 @@ public class Version{ } } + public static String buildString(){ + return build < 0 ? "custom" : build + (revision == 0 ? "" : "." + revision); + } + /** get menu version without colors */ public static String combined(){ if(build == -1){ diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 60beec266b..c4819ed222 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -200,8 +200,8 @@ public class World{ for(Tile tile : tiles){ //remove legacy blocks; they need to stop existing - if(tile.block() instanceof LegacyBlock){ - tile.remove(); + if(tile.block() instanceof LegacyBlock l){ + l.removeSelf(tile); continue; } @@ -445,7 +445,6 @@ public class World{ int err = dx - dy; int e2; while(true){ - if(cons.accept(x0, y0)) return true; if(x0 == x1 && y0 == y1) return false; diff --git a/core/src/mindustry/ctype/UnlockableContent.java b/core/src/mindustry/ctype/UnlockableContent.java index 9020cd0ff1..7848882206 100644 --- a/core/src/mindustry/ctype/UnlockableContent.java +++ b/core/src/mindustry/ctype/UnlockableContent.java @@ -20,10 +20,14 @@ public abstract class UnlockableContent extends MappableContent{ public Stats stats = new Stats(); /** Localized, formal name. Never null. Set to internal name if not found in bundle. */ public String localizedName; - /** Localized description. May be null. */ - public @Nullable String description; + /** Localized description & details. May be null. */ + public @Nullable String description, details; /** Whether this content is always unlocked in the tech tree. */ public boolean alwaysUnlocked = false; + /** Whether to show the description in the research dialog preview. */ + public boolean inlineDescription = true; + /** Special logic icon ID. */ + public int iconId = 0; /** Icons by Cicon ID.*/ protected TextureRegion[] cicons = new TextureRegion[Cicon.all.length]; /** Unlock state. Loaded from settings. Do not modify outside of the constructor. */ @@ -34,6 +38,7 @@ public abstract class UnlockableContent extends MappableContent{ this.localizedName = Core.bundle.get(getContentType() + "." + this.name + ".name", this.name); this.description = Core.bundle.getOrNull(getContentType() + "." + this.name + ".description"); + this.details = Core.bundle.getOrNull(getContentType() + "." + this.name + ".details"); this.unlocked = Core.settings != null && Core.settings.getBool(this.name + "-unlocked", false); } @@ -49,7 +54,7 @@ public abstract class UnlockableContent extends MappableContent{ } } - /** Intializes stats on demand. Should only be called once. Only called before something is displayed. */ + /** Initializes stats on demand. Should only be called once. Only called before something is displayed. */ public void setStats(){ } @@ -74,9 +79,11 @@ public abstract class UnlockableContent extends MappableContent{ cicons[icon.ordinal()] = Core.atlas.find(getContentType().name() + "-" + name + "-" + icon.name(), Core.atlas.find(getContentType().name() + "-" + name + "-full", + Core.atlas.find(name + "-" + icon.name(), + Core.atlas.find(name + "-full", Core.atlas.find(name, Core.atlas.find(getContentType().name() + "-" + name, - Core.atlas.find(name + "1"))))); + Core.atlas.find(name + "1"))))))); } return cicons[icon.ordinal()]; } @@ -113,7 +120,7 @@ public abstract class UnlockableContent extends MappableContent{ } /** Unlocks this content, but does not fire any events. */ - public void quiteUnlock(){ + public void quietUnlock(){ if(!unlocked()){ unlocked = true; Core.settings.put(name + "-unlocked", true); @@ -121,10 +128,18 @@ public abstract class UnlockableContent extends MappableContent{ } public boolean unlocked(){ - if(net.client()) return state.rules.researched.contains(name); + if(net != null && net.client()) return alwaysUnlocked || state.rules.researched.contains(name); return unlocked || alwaysUnlocked; } + /** Locks this content again. */ + public void clearUnlock(){ + if(unlocked){ + unlocked = false; + Core.settings.put(name + "-unlocked", false); + } + } + /** @return whether this content is unlocked, or the player is in a custom (non-campaign) game. */ public boolean unlockedNow(){ return unlocked() || !state.isCampaign(); diff --git a/core/src/mindustry/editor/DrawOperation.java b/core/src/mindustry/editor/DrawOperation.java index 7910de4892..53134663ea 100755 --- a/core/src/mindustry/editor/DrawOperation.java +++ b/core/src/mindustry/editor/DrawOperation.java @@ -13,7 +13,7 @@ public class DrawOperation{ private MapEditor editor; private LongSeq array = new LongSeq(); - public DrawOperation(MapEditor editor) { + public DrawOperation(MapEditor editor){ this.editor = editor; } @@ -37,7 +37,7 @@ public class DrawOperation{ } } - private void updateTile(int i) { + private void updateTile(int i){ long l = array.get(i); array.set(i, TileOp.get(TileOp.x(l), TileOp.y(l), TileOp.type(l), getTile(editor.tile(TileOp.x(l), TileOp.y(l)), TileOp.type(l)))); setTile(editor.tile(TileOp.x(l), TileOp.y(l)), TileOp.type(l), TileOp.value(l)); diff --git a/core/src/mindustry/editor/EditorTile.java b/core/src/mindustry/editor/EditorTile.java index f735bd790c..e4be334888 100644 --- a/core/src/mindustry/editor/EditorTile.java +++ b/core/src/mindustry/editor/EditorTile.java @@ -50,9 +50,19 @@ public class EditorTile extends Tile{ return; } - op(OpType.block, block.id); - if(rotation != 0) op(OpType.rotation, (byte)rotation); - if(team != Team.derelict) op(OpType.team, (byte)team.id); + if(!isCenter()){ + EditorTile cen = (EditorTile)build.tile; + cen.op(OpType.rotation, (byte)build.rotation); + cen.op(OpType.team, (byte)build.team.id); + cen.op(OpType.block, block.id); + update(); + }else{ + if(build != null) op(OpType.rotation, (byte)build.rotation); + if(build != null) op(OpType.team, (byte)build.team.id); + op(OpType.block, block.id); + + } + super.setBlock(type, team, rotation); } @@ -66,6 +76,8 @@ public class EditorTile extends Tile{ if(getTeamID() == team.id) return; op(OpType.team, (byte)getTeamID()); super.setTeam(team); + + getLinkedTiles(t -> ui.editor.editor.renderer.updatePoint(t.x, t.y)); } @Override diff --git a/core/src/mindustry/editor/MapEditor.java b/core/src/mindustry/editor/MapEditor.java index 1c33964e08..c460d7c042 100644 --- a/core/src/mindustry/editor/MapEditor.java +++ b/core/src/mindustry/editor/MapEditor.java @@ -137,7 +137,7 @@ public class MapEditor{ if(isFloor){ tile.setFloor(drawBlock.asFloor()); - }else{ + }else if(!(tile.block().isMultiblock() && !drawBlock.isMultiblock())){ if(drawBlock.rotate && tile.build != null && tile.build.rotation != rotation){ addTileOp(TileOp.get(tile.x, tile.y, (byte)OpType.rotation.ordinal(), (byte)rotation)); } @@ -157,7 +157,7 @@ public class MapEditor{ boolean hasOverlap(int x, int y){ Tile tile = world.tile(x, y); //allow direct replacement of blocks of the same size - if(tile != null && tile.isCenter() && tile.block() != drawBlock && tile.block().size == drawBlock.size){ + if(tile != null && tile.isCenter() && tile.block() != drawBlock && tile.block().size == drawBlock.size && tile.x == x && tile.y == y){ return false; } @@ -168,12 +168,10 @@ public class MapEditor{ for(int dy = 0; dy < drawBlock.size; dy++){ int worldx = dx + offsetx + x; int worldy = dy + offsety + y; - if(!(worldx == x && worldy == y)){ - Tile other = world.tile(worldx, worldy); + Tile other = world.tile(worldx, worldy); - if(other != null && other.block().isMultiblock()){ - return true; - } + if(other != null && other.block().isMultiblock()){ + return true; } } } diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index dfad7c03ab..91927a0630 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -42,6 +42,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ private MapGenerateDialog generateDialog; private ScrollPane pane; private BaseDialog menu; + private Table blockSelection; private Rules lastSavedRules; private boolean saved = false; private boolean shownWithMap = false; @@ -258,6 +259,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ Groups.unit.clear(); Groups.build.clear(); logic.play(); + + if(player.team().core() == null){ + player.set(world.width() * tilesize/2f, world.height() * tilesize/2f); + player.unit(UnitTypes.alpha.spawn(player.team(), player.x, player.y)); + } }); } @@ -565,7 +571,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ }).growX().top(); } - if(addCliffButton){ + if(experimental){ mid.row(); mid.table(t -> { @@ -660,9 +666,9 @@ public class MapEditorDialog extends Dialog implements Disposable{ ui.showConfirm("@confirm", "@editor.unsaved", this::hide); } - private void addBlockSelection(Table table){ - Table content = new Table(); - pane = new ScrollPane(content); + private void addBlockSelection(Table cont){ + blockSelection = new Table(); + pane = new ScrollPane(blockSelection); pane.setFadeScrollBars(false); pane.setOverscroll(true, false); pane.exited(() -> { @@ -670,9 +676,22 @@ public class MapEditorDialog extends Dialog implements Disposable{ Core.scene.setScrollFocus(view); } }); - ButtonGroup group = new ButtonGroup<>(); - int i = 0; + cont.table(search -> { + search.image(Icon.zoom).padRight(8); + search.field("", this::rebuildBlockSelection) + .name("editor/search").maxTextLength(maxNameLength).get().setMessageText("@players.search"); + }).pad(-2); + cont.row(); + cont.table(Tex.underline, extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); + cont.row(); + cont.add(pane).expandY().top().left(); + + rebuildBlockSelection(""); + } + + private void rebuildBlockSelection(String searchText){ + blockSelection.clear(); blocksOut.clear(); blocksOut.addAll(Vars.content.blocks()); @@ -686,28 +705,32 @@ public class MapEditorDialog extends Dialog implements Disposable{ return Integer.compare(b1.id, b2.id); }); + int i = 0; + for(Block block : blocksOut){ TextureRegion region = block.icon(Cicon.medium); - if(!Core.atlas.isFound(region) || !block.inEditor || (block.buildVisibility == BuildVisibility.debugOnly)) continue; + if(!Core.atlas.isFound(region) || !block.inEditor + || block.buildVisibility == BuildVisibility.debugOnly + || (!searchText.isEmpty() && !block.localizedName.toLowerCase().contains(searchText.toLowerCase())) + ) continue; ImageButton button = new ImageButton(Tex.whiteui, Styles.clearTogglei); button.getStyle().imageUp = new TextureRegionDrawable(region); button.clicked(() -> editor.drawBlock = block); button.resizeImage(8 * 4f); button.update(() -> button.setChecked(editor.drawBlock == block)); - group.add(button); - content.add(button).size(50f); + blockSelection.add(button).size(50f).tooltip(block.localizedName); + + if(i == 0) editor.drawBlock = block; if(++i % 4 == 0){ - content.row(); + blockSelection.row(); } } - group.getButtons().get(2).setChecked(true); - - table.table(Tex.underline, extra -> extra.labelWrap(() -> editor.drawBlock.localizedName).width(200f).center()).growX(); - table.row(); - table.add(pane).growY().fillX(); + if(i == 0){ + blockSelection.add("@none").color(Color.lightGray).padLeft(80f).padTop(10f); + } } } diff --git a/core/src/mindustry/editor/MapGenerateDialog.java b/core/src/mindustry/editor/MapGenerateDialog.java index c0292cbf74..f6a87f77b1 100644 --- a/core/src/mindustry/editor/MapGenerateDialog.java +++ b/core/src/mindustry/editor/MapGenerateDialog.java @@ -29,7 +29,8 @@ public class MapGenerateDialog extends BaseDialog{ private final Prov[] filterTypes = new Prov[]{ NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new, RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new, - BlendFilter::new, MirrorFilter::new, ClearFilter::new, CoreSpawnFilter::new, EnemySpawnFilter::new + BlendFilter::new, MirrorFilter::new, ClearFilter::new, CoreSpawnFilter::new, + EnemySpawnFilter::new, SpawnPathFilter::new }; private final MapEditor editor; private final boolean applied; @@ -44,9 +45,8 @@ public class MapGenerateDialog extends BaseDialog{ private AsyncExecutor executor = new AsyncExecutor(1); private AsyncResult result; boolean generating; - private GenTile returnTile = new GenTile(); - private GenTile[][] buffer1, buffer2; + private long[] buffer1, buffer2; private Cons> applier; CachedTile ctile = new CachedTile(){ //nothing. @@ -54,6 +54,11 @@ public class MapGenerateDialog extends BaseDialog{ protected void changeBuild(Team team, Prov entityprov, int rotation){ } + + @Override + public void setBlock(Block type, Team team, int rotation, Prov entityprov){ + this.block = type; + } }; /** @param applied whether or not to use the applied in-game mode. */ @@ -65,7 +70,7 @@ public class MapGenerateDialog extends BaseDialog{ shown(this::setup); addCloseButton(); if(applied){ - buttons.button("@editor.apply", () -> { + buttons.button("@editor.apply", Icon.ok, () -> { ui.loadAnd(() -> { apply(); hide(); @@ -78,14 +83,14 @@ public class MapGenerateDialog extends BaseDialog{ update(); }).size(160f, 64f); } - buttons.button("@editor.randomize", () -> { + buttons.button("@editor.randomize", Icon.refresh, () -> { for(GenerateFilter filter : filters){ filter.randomize(); } update(); }).size(160f, 64f); - buttons.button("@add", Icon.add, this::showAdd).height(64f).width(140f); + buttons.button("@add", Icon.add, this::showAdd).height(64f).width(150f); if(!applied){ hidden(this::apply); @@ -107,38 +112,36 @@ public class MapGenerateDialog extends BaseDialog{ /** Applies the specified filters to the editor. */ public void applyToEditor(Seq filters){ //writeback buffer - GenTile[][] writeTiles = new GenTile[editor.width()][editor.height()]; - - for(int x = 0; x < editor.width(); x++){ - for(int y = 0; y < editor.height(); y++){ - writeTiles[x][y] = new GenTile(); - } - } + long[] writeTiles = new long[editor.width() * editor.height()]; for(GenerateFilter filter : filters){ input.begin(filter, editor.width(), editor.height(), editor::tile); + //write to buffer for(int x = 0; x < editor.width(); x++){ for(int y = 0; y < editor.height(); y++){ Tile tile = editor.tile(x, y); - input.apply(x, y, tile.floor(), tile.block(), tile.overlay()); + input.apply(x, y, tile.block(), tile.floor(), tile.overlay()); filter.apply(input); - writeTiles[x][y].set(input.floor, input.block, input.ore, tile.team()); + writeTiles[x + y*world.width()] = PackTile.get(input.block.id, input.floor.id, input.overlay.id); } } editor.load(() -> { //read from buffer back into tiles - for(int x = 0; x < editor.width(); x++){ - for(int y = 0; y < editor.height(); y++){ - Tile tile = editor.tile(x, y); - GenTile write = writeTiles[x][y]; + for(int i = 0; i < editor.width() * editor.height(); i++){ + Tile tile = world.tiles.geti(i); + long write = writeTiles[i]; - tile.setFloor((Floor)content.block(write.floor)); - tile.setBlock(content.block(write.block)); - tile.setTeam(Team.get(write.team)); - tile.setOverlay(content.block(write.ore)); + Block block = content.block(PackTile.block(write)), floor = content.block(PackTile.floor(write)), overlay = content.block(PackTile.overlay(write)); + + //don't mess up synthetic stuff. + if(!tile.synthetic() && !block.synthetic()){ + tile.setBlock(block); } + + tile.setFloor((Floor)floor); + tile.setOverlay(overlay); } }); } @@ -201,15 +204,8 @@ public class MapGenerateDialog extends BaseDialog{ rebuildFilters(); } - GenTile[][] create(){ - GenTile[][] out = new GenTile[editor.width() / scaling][editor.height() / scaling]; - - for(int x = 0; x < out.length; x++){ - for(int y = 0; y < out[0].length; y++){ - out[x][y] = new GenTile(); - } - } - return out; + long[] create(){ + return new long[(editor.width() / scaling) * (editor.height() / scaling)]; } void rebuildFilters(){ @@ -295,7 +291,7 @@ public class MapGenerateDialog extends BaseDialog{ for(Prov gen : filterTypes){ GenerateFilter filter = gen.get(); - if((!applied && filter.isBuffered()) || (filter.isPost() && applied)) continue; + if((filter.isPost() && applied)) continue; selection.cont.button(filter.name(), () -> { filters.add(filter); @@ -317,9 +313,15 @@ public class MapGenerateDialog extends BaseDialog{ selection.show(); } - GenTile dset(Tile tile){ - returnTile.set(tile); - return returnTile; + long pack(Tile tile){ + return PackTile.get(tile.blockID(), tile.floorID(), tile.overlayID()); + } + + Tile unpack(long tile){ + ctile.setFloor((Floor)content.block(PackTile.floor(tile))); + ctile.setBlock(content.block(PackTile.block(tile))); + ctile.setOverlay(content.block(PackTile.overlay(tile))); + return ctile; } void apply(){ @@ -350,6 +352,7 @@ public class MapGenerateDialog extends BaseDialog{ result = executor.submit(() -> { try{ + int w = pixmap.getWidth(); world.setGenerating(true); generating = true; @@ -357,24 +360,24 @@ public class MapGenerateDialog extends BaseDialog{ //write to buffer1 for reading for(int px = 0; px < pixmap.getWidth(); px++){ for(int py = 0; py < pixmap.getHeight(); py++){ - buffer1[px][py].set(editor.tile(px * scaling, py * scaling)); + buffer1[px + py*w] = pack(editor.tile(px * scaling, py * scaling)); } } } for(GenerateFilter filter : copy){ - input.begin(filter, editor.width(), editor.height(), (x, y) -> buffer1[Mathf.clamp(x / scaling, 0, pixmap.getWidth()-1)][Mathf.clamp(y / scaling, 0, pixmap.getHeight()-1)].tile()); + input.begin(filter, editor.width(), editor.height(), (x, y) -> unpack(buffer1[Mathf.clamp(x / scaling, 0, pixmap.getWidth()-1) + w* Mathf.clamp(y / scaling, 0, pixmap.getHeight()-1)])); //read from buffer1 and write to buffer2 pixmap.each((px, py) -> { int x = px * scaling, y = py * scaling; - GenTile tile = buffer1[px][py]; - input.apply(x, y, content.block(tile.floor), content.block(tile.block), content.block(tile.ore)); + long tile = buffer1[px + py * w]; + input.apply(x, y, content.block(PackTile.block(tile)), content.block(PackTile.floor(tile)), content.block(PackTile.overlay(tile))); filter.apply(input); - buffer2[px][py].set(input.floor, input.block, input.ore, Team.get(tile.team)); + buffer2[px + py * w] = PackTile.get(input.block.id, input.floor.id, input.overlay.id); }); - pixmap.each((px, py) -> buffer1[px][py].set(buffer2[px][py])); + pixmap.each((px, py) -> buffer1[px + py*w] = buffer2[px + py*w]); } for(int px = 0; px < pixmap.getWidth(); px++){ @@ -383,10 +386,10 @@ public class MapGenerateDialog extends BaseDialog{ //get result from buffer1 if there's filters left, otherwise get from editor directly if(filters.isEmpty()){ Tile tile = editor.tile(px * scaling, py * scaling); - color = MapIO.colorFor(tile.floor(), tile.block(), tile.overlay(), Team.derelict); + color = MapIO.colorFor(tile.block(), tile.floor(), tile.overlay(), Team.derelict); }else{ - GenTile tile = buffer1[px][py]; - color = MapIO.colorFor(content.block(tile.floor), content.block(tile.block), content.block(tile.ore), Team.derelict); + long tile = buffer1[px + py*w]; + color = MapIO.colorFor(content.block(PackTile.block(tile)), content.block(PackTile.floor(tile)), content.block(PackTile.overlay(tile)), Team.derelict); } pixmap.draw(px, pixmap.getHeight() - 1 - py, color); } @@ -401,44 +404,9 @@ public class MapGenerateDialog extends BaseDialog{ }); }catch(Exception e){ generating = false; - e.printStackTrace(); + Log.err(e); } world.setGenerating(false); }); } - - private class GenTile{ - public byte team; - public short block, floor, ore; - - GenTile(){ - } - - public void set(Block floor, Block wall, Block ore, Team team){ - this.floor = floor.id; - this.block = wall.id; - this.ore = (!floor.asFloor().hasSurface() && ore.asFloor().needsSurface) ? 0 : ore.id; - this.team = (byte)team.id; - } - - public void set(GenTile other){ - this.floor = other.floor; - this.block = other.block; - this.ore = other.ore; - this.team = other.team; - } - - public GenTile set(Tile other){ - set(other.floor(), other.block(), other.overlay(), other.team()); - return this; - } - - Tile tile(){ - ctile.setFloor((Floor)content.block(floor)); - ctile.setBlock(content.block(block)); - ctile.setOverlay(content.block(ore)); - ctile.setTeam(Team.get(team)); - return ctile; - } - } } diff --git a/core/src/mindustry/editor/MapResizeDialog.java b/core/src/mindustry/editor/MapResizeDialog.java index b3e190b020..afb0356bfa 100644 --- a/core/src/mindustry/editor/MapResizeDialog.java +++ b/core/src/mindustry/editor/MapResizeDialog.java @@ -8,7 +8,7 @@ import arc.util.*; import mindustry.ui.dialogs.*; public class MapResizeDialog extends BaseDialog{ - private static final int minSize = 50, maxSize = 500, increment = 50; + public static int minSize = 50, maxSize = 500, increment = 50; int width, height; public MapResizeDialog(MapEditor editor, Intc2 cons){ diff --git a/core/src/mindustry/editor/MapView.java b/core/src/mindustry/editor/MapView.java index a54c0f49b8..4db21dec66 100644 --- a/core/src/mindustry/editor/MapView.java +++ b/core/src/mindustry/editor/MapView.java @@ -321,7 +321,7 @@ public class MapView extends Element implements GestureListener{ } private boolean active(){ - return Core.scene.getKeyboardFocus() != null + return Core.scene != null && Core.scene.getKeyboardFocus() != null && Core.scene.getKeyboardFocus().isDescendantOf(ui.editor) && ui.editor.isShown() && tool == EditorTool.zoom && Core.scene.hit(Core.input.mouse().x, Core.input.mouse().y, true) == this; diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index 2436c62c2a..e908e7d934 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -81,7 +81,7 @@ public class WaveGraph extends Table{ for(int i = 0; i < values.length; i++){ float sum = 0; for(UnitType type : used.orderedItems()){ - sum += type.health * values[i][type.id]; + sum += (type.health) * values[i][type.id]; } float cx = graphX + i*spacing, cy = 2f + graphY + sum * (graphH - 4f) / maxHealth; @@ -160,7 +160,7 @@ public class WaveGraph extends Table{ used.add(spawn.type); } max = Math.max(max, values[index][spawn.type.id]); - healthsum += spawned * spawn.type.health; + healthsum += spawned * (spawn.type.health); sum += spawned; } maxTotal = Math.max(maxTotal, sum); diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index d5b957e143..a98d03a923 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -1,7 +1,6 @@ package mindustry.editor; import arc.*; -import arc.input.*; import arc.math.*; import arc.scene.event.*; import arc.scene.ui.*; @@ -35,15 +34,9 @@ public class WaveInfoDialog extends BaseDialog{ super("@waves.title"); shown(this::setup); - hidden(() -> { - state.rules.spawns = groups; - }); + hidden(() -> state.rules.spawns = groups); - keyDown(key -> { - if(key == KeyCode.escape || key == KeyCode.back){ - Core.app.post(this::hide); - } - }); + addCloseListener(); onResize(this::setup); addCloseButton(); @@ -71,7 +64,7 @@ public class WaveInfoDialog extends BaseDialog{ }).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty()); dialog.cont.row(); dialog.cont.button("@settings.reset", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> { - groups = JsonIO.copy(defaultWaves.get()); + groups = JsonIO.copy(waves.get()); buildGroups(); dialog.hide(); })); @@ -101,6 +94,14 @@ public class WaveInfoDialog extends BaseDialog{ view(1); } }); + + if(experimental){ + buttons.button("Random", Icon.refresh, () -> { + groups.clear(); + groups = Waves.generate(1f / 10f); + updateWaves(); + }).width(200f); + } } void view(int amount){ @@ -124,7 +125,7 @@ public class WaveInfoDialog extends BaseDialog{ } void setup(){ - groups = JsonIO.copy(state.rules.spawns.isEmpty() ? defaultWaves.get() : state.rules.spawns); + groups = JsonIO.copy(state.rules.spawns.isEmpty() ? waves.get() : state.rules.spawns); cont.clear(); cont.stack(new Table(Tex.clear, main -> { @@ -159,7 +160,7 @@ public class WaveInfoDialog extends BaseDialog{ t.margin(0).defaults().pad(3).padLeft(5f).growX().left(); t.button(b -> { b.left(); - b.image(group.type.icon(mindustry.ui.Cicon.medium)).size(32f).padRight(3); + b.image(group.type.icon(Cicon.medium)).size(32f).padRight(3).scaling(Scaling.fit); b.add(group.type.localizedName).color(Pal.accent); b.add().growX(); @@ -262,7 +263,7 @@ public class WaveInfoDialog extends BaseDialog{ if(type.isHidden()) continue; p.button(t -> { t.left(); - t.image(type.icon(Cicon.medium)).size(40f).padRight(2f); + t.image(type.icon(Cicon.medium)).size(8 * 4).scaling(Scaling.fit).padRight(2f); t.add(type.localizedName); }, () -> { lastType = type; diff --git a/core/src/mindustry/entities/Damage.java b/core/src/mindustry/entities/Damage.java index b6c9abe807..a3dd3913f1 100644 --- a/core/src/mindustry/entities/Damage.java +++ b/core/src/mindustry/entities/Damage.java @@ -25,6 +25,7 @@ public class Damage{ private static Rect rect = new Rect(); private static Rect hitrect = new Rect(); private static Vec2 tr = new Vec2(); + private static Seq units = new Seq<>(); private static GridBits bits = new GridBits(30, 30); private static IntQueue propagation = new IntQueue(); private static IntSet collidedBlocks = new IntSet(); @@ -115,10 +116,18 @@ public class Damage{ tr.trns(angle, length); Intc2 collider = (cx, cy) -> { Building tile = world.build(cx, cy); - if(tile != null && !collidedBlocks.contains(tile.pos()) && tile.team != team && tile.collide(hitter)){ - tile.collision(hitter); - collidedBlocks.add(tile.pos()); - hitter.type.hit(hitter, tile.x, tile.y); + boolean collide = tile != null && collidedBlocks.add(tile.pos()); + + if(hitter.damage > 0){ + if(collide && tile.team != team && tile.collide(hitter)){ + tile.collision(hitter); + hitter.type.hit(hitter, tile.x, tile.y); + } + + //try to heal the tile + if(collide && hitter.type.collides(hitter, tile)){ + hitter.type.hitTile(hitter, tile, tile.health, false); + } } }; @@ -155,20 +164,27 @@ public class Damage{ rect.height += expand * 2; Cons cons = e -> { - if(!e.checkTarget(hitter.type.collidesAir, hitter.type.collidesGround)) return; - e.hitbox(hitrect); Vec2 vec = Geometry.raycastRect(x, y, x2, y2, hitrect.grow(expand * 2)); - if(vec != null){ + if(vec != null && hitter.damage > 0){ effect.at(vec.x, vec.y); e.collision(hitter, vec.x, vec.y); hitter.collision(e, vec.x, vec.y); } }; - Units.nearbyEnemies(team, rect, cons); + units.clear(); + + Units.nearbyEnemies(team, rect, u -> { + if(u.checkTarget(hitter.type.collidesAir, hitter.type.collidesGround)){ + units.add(u); + } + }); + + units.sort(u -> u.dst2(hitter)); + units.each(cons); } /** @@ -402,8 +418,7 @@ public class Damage{ } @Struct - static - class PropCellStruct{ + static class PropCellStruct{ byte x; byte y; short damage; diff --git a/core/src/mindustry/entities/Effect.java b/core/src/mindustry/entities/Effect.java index 920729e608..6fa163b074 100644 --- a/core/src/mindustry/entities/Effect.java +++ b/core/src/mindustry/entities/Effect.java @@ -21,35 +21,46 @@ public class Effect{ private static final EffectContainer container = new EffectContainer(); private static final Seq all = new Seq<>(); - public final int id; - public final Cons renderer; - public final float lifetime; - /** Clip size. */ - public float size; + private boolean initialized; - public boolean ground; - public float groundDuration; + public final int id; + + public Cons renderer = e -> {}; + public float lifetime = 50f; + /** Clip size. */ + public float clip; + + public float layer = Layer.effect; + public float layerDuration; public Effect(float life, float clipsize, Cons renderer){ this.id = all.size; this.lifetime = life; this.renderer = renderer; - this.size = clipsize; + this.clip = clipsize; all.add(this); } public Effect(float life, Cons renderer){ - this(life,50f, renderer); + this(life, 50f, renderer); } - public Effect ground(){ - ground = true; + //for custom implementations + public Effect(){ + this.id = all.size; + all.add(this); + } + + public void init(){} + + public Effect layer(float l){ + layer = l; return this; } - public Effect ground(float duration){ - ground = true; - this.groundDuration = duration; + public Effect layer(float l, float duration){ + layer = l; + this.layerDuration = duration; return this; } @@ -87,14 +98,18 @@ public class Effect{ public float render(int id, Color color, float life, float lifetime, float rotation, float x, float y, Object data){ container.set(id, color, life, lifetime, rotation, x, y, data); - Draw.z(ground ? Layer.debris : Layer.effect); + Draw.z(layer); Draw.reset(); - renderer.get(container); + render(container); Draw.reset(); return container.lifetime; } + public void render(EffectContainer e){ + renderer.get(e); + } + public static @Nullable Effect get(int id){ return id >= all.size || id < 0 ? null : all.get(id); } @@ -122,9 +137,14 @@ public class Effect{ if(headless || effect == Fx.none) return; if(Core.settings.getBool("effects")){ Rect view = Core.camera.bounds(Tmp.r1); - Rect pos = Tmp.r2.setSize(effect.size).setCenter(x, y); + Rect pos = Tmp.r2.setSize(effect.clip).setCenter(x, y); if(view.overlaps(pos)){ + if(!effect.initialized){ + effect.initialized = true; + effect.init(); + } + EffectState entity = EffectState.create(); entity.effect = effect; entity.rotation = rotation; @@ -209,4 +229,4 @@ public class Effect{ } } -} \ No newline at end of file +} diff --git a/core/src/mindustry/entities/EntityCollisions.java b/core/src/mindustry/entities/EntityCollisions.java index b4139991a4..3425314810 100644 --- a/core/src/mindustry/entities/EntityCollisions.java +++ b/core/src/mindustry/entities/EntityCollisions.java @@ -115,7 +115,6 @@ public class EntityCollisions{ @SuppressWarnings("unchecked") public void updatePhysics(EntityGroup group){ - QuadTree tree = group.tree(); tree.clear(); @@ -141,7 +140,6 @@ public class EntityCollisions{ } private void checkCollide(Hitboxc a, Hitboxc b){ - a.hitbox(this.r1); b.hitbox(this.r2); @@ -218,7 +216,6 @@ public class EntityCollisions{ @SuppressWarnings("unchecked") public void collide(EntityGroup groupa){ - groupa.each(solid -> { solid.hitbox(r1); r1.x += (solid.lastX() - solid.getX()); diff --git a/core/src/mindustry/entities/EntityGroup.java b/core/src/mindustry/entities/EntityGroup.java index 2135d9d6aa..6553e72d44 100644 --- a/core/src/mindustry/entities/EntityGroup.java +++ b/core/src/mindustry/entities/EntityGroup.java @@ -4,6 +4,7 @@ import arc.*; import arc.func.*; import arc.math.geom.*; import arc.struct.*; +import arc.util.*; import mindustry.gen.*; import java.util.*; @@ -93,6 +94,7 @@ public class EntityGroup implements Iterable{ return map != null; } + @Nullable public T getByID(int id){ if(map == null) throw new RuntimeException("Mapping is not enabled for group " + id + "!"); return map.get(id); @@ -183,16 +185,21 @@ public class EntityGroup implements Iterable{ array.each(Entityc::remove); array.clear(); - if(map != null) - map.clear(); + if(map != null) map.clear(); clearing = false; } + @Nullable public T find(Boolf pred){ return array.find(pred); } + @Nullable + public T first(){ + return array.first(); + } + @Override public Iterator iterator(){ return array.iterator(); diff --git a/core/src/mindustry/entities/GroupDefs.java b/core/src/mindustry/entities/GroupDefs.java index 60bdbb5fd3..3ddef67d65 100644 --- a/core/src/mindustry/entities/GroupDefs.java +++ b/core/src/mindustry/entities/GroupDefs.java @@ -11,5 +11,6 @@ class GroupDefs{ @GroupDef(value = Buildingc.class) G build; @GroupDef(value = Syncc.class, mapping = true) G sync; @GroupDef(value = Drawc.class) G draw; + @GroupDef(value = Firec.class) G fire; @GroupDef(value = WeatherStatec.class) G weather; } diff --git a/core/src/mindustry/entities/Lightning.java b/core/src/mindustry/entities/Lightning.java index 2d647bfb1e..61f42f2e72 100644 --- a/core/src/mindustry/entities/Lightning.java +++ b/core/src/mindustry/entities/Lightning.java @@ -4,6 +4,7 @@ import arc.graphics.*; import arc.math.*; import arc.math.geom.*; import arc.struct.*; +import arc.util.*; import mindustry.content.*; import mindustry.core.*; import mindustry.entities.bullet.*; @@ -33,16 +34,16 @@ public class Lightning{ createLightningInternal(bullet, lastSeed++, bullet.team, color, damage, x, y, targetAngle, length); } - private static void createLightningInternal(Bullet hitter, int seed, Team team, Color color, float damage, float x, float y, float rotation, int length){ + private static void createLightningInternal(@Nullable Bullet hitter, int seed, Team team, Color color, float damage, float x, float y, float rotation, int length){ random.setSeed(seed); hit.clear(); - BulletType bulletType = hitter != null && !hitter.type.collidesAir ? Bullets.damageLightningGround : Bullets.damageLightning; + BulletType hitCreate = hitter == null || hitter.type.lightningType == null ? Bullets.damageLightning : hitter.type.lightningType; Seq lines = new Seq<>(); bhit = false; for(int i = 0; i < length / 2; i++){ - bulletType.create(null, team, x, y, 0f, damage, 1f, 1f, hitter); + hitCreate.create(null, team, x, y, 0f, damage, 1f, 1f, hitter); lines.add(new Vec2(x + Mathf.range(3f), y + Mathf.range(3f))); if(lines.size > 1){ diff --git a/core/src/mindustry/entities/Predict.java b/core/src/mindustry/entities/Predict.java index 03c41e5778..4186ef4bbb 100644 --- a/core/src/mindustry/entities/Predict.java +++ b/core/src/mindustry/entities/Predict.java @@ -53,13 +53,13 @@ public class Predict{ public static Vec2 intercept(Position src, Position dst, float v){ float ddx = 0, ddy = 0; - if(dst instanceof Hitboxc){ - ddx += ((Hitboxc)dst).deltaX(); - ddy += ((Hitboxc)dst).deltaY(); + if(dst instanceof Hitboxc h){ + ddx += h.deltaX(); + ddy += h.deltaY(); } - if(src instanceof Hitboxc){ - ddx -= ((Hitboxc)src).deltaX()/(Time.delta); - ddy -= ((Hitboxc)src).deltaY()/(Time.delta); + if(src instanceof Hitboxc h){ + ddx -= h.deltaX()/(Time.delta); + ddy -= h.deltaY()/(Time.delta); } return intercept(src.getX(), src.getY(), dst.getX(), dst.getY(), ddx, ddy, v); } diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index e4591a0ed0..cd602327a6 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -197,7 +197,7 @@ public class Units{ cdist = 0f; nearbyEnemies(team, x - range, y - range, range*2f, range*2f, e -> { - if(e.dead() || !predicate.get(e)) return; + if(e.dead() || !predicate.get(e) || e.team == Team.derelict) return; float dst2 = e.dst2(x, y); if(dst2 < range*range && (result == null || dst2 < cdist)){ diff --git a/core/src/mindustry/entities/abilities/MoveLightningAbility.java b/core/src/mindustry/entities/abilities/MoveLightningAbility.java new file mode 100644 index 0000000000..17d3eaa23a --- /dev/null +++ b/core/src/mindustry/entities/abilities/MoveLightningAbility.java @@ -0,0 +1,46 @@ +package mindustry.entities.abilities; + +import arc.graphics.*; +import arc.math.*; +import arc.util.*; +import arc.audio.*; +import mindustry.content.*; +import mindustry.entities.*; +import mindustry.gen.*; + +public class MoveLightningAbility extends Ability{ + //Lightning damage + public float damage = 35f; + //Chance of firing every tick. Set >= 1 to always fire lightning every tick at max speed. + public float chance = 0.15f; + //Length of the lightning + public int length = 12; + //Speeds for when to start lightninging and when to stop getting faster + public float minSpeed = 0.8f, maxSpeed = 1.2f; + //Lightning color + public Color color = Color.valueOf("a9d8ff"); + + public Effect shootEffect = Fx.sparkShoot; + public Sound shootSound = Sounds.spark; + + MoveLightningAbility(){} + + public MoveLightningAbility(float damage, int length, float chance, float minSpeed, float maxSpeed, Color color){ + this.damage = damage; + this.length = length; + this.chance = chance; + this.minSpeed = minSpeed; + this.maxSpeed = maxSpeed; + this.color = color; + } + + @Override + public void update(Unit unit){ + float scl = Mathf.clamp((unit.vel().len() - minSpeed) / (maxSpeed - minSpeed)); + if(Mathf.chance(Time.delta * chance * scl)){ + shootEffect.at(unit.x, unit.y, unit.rotation, color); + Lightning.create(unit.team, color, damage, unit.x + unit.vel.x, unit.y + unit.vel.y, unit.rotation, length); + shootSound.at(unit); + } + } +} diff --git a/core/src/mindustry/entities/abilities/StatusFieldAbility.java b/core/src/mindustry/entities/abilities/StatusFieldAbility.java index 857cfde5cf..a1bf47d408 100644 --- a/core/src/mindustry/entities/abilities/StatusFieldAbility.java +++ b/core/src/mindustry/entities/abilities/StatusFieldAbility.java @@ -28,7 +28,6 @@ public class StatusFieldAbility extends Ability{ timer += Time.delta; if(timer >= reload){ - Units.nearby(unit.team, unit.x, unit.y, range, other -> { other.apply(effect, duration); }); diff --git a/core/src/mindustry/entities/abilities/UnitSpawnAbility.java b/core/src/mindustry/entities/abilities/UnitSpawnAbility.java index 95eb3bcf5b..422a02bbba 100644 --- a/core/src/mindustry/entities/abilities/UnitSpawnAbility.java +++ b/core/src/mindustry/entities/abilities/UnitSpawnAbility.java @@ -12,6 +12,8 @@ import mindustry.graphics.*; import mindustry.type.*; import mindustry.ui.*; +import static mindustry.Vars.*; + public class UnitSpawnAbility extends Ability{ public UnitType type; public float spawnTime = 60f, spawnX, spawnY; @@ -31,10 +33,9 @@ public class UnitSpawnAbility extends Ability{ @Override public void update(Unit unit){ - timer += Time.delta; + timer += Time.delta * state.rules.unitBuildSpeedMultiplier; if(timer >= spawnTime && Units.canCreate(unit.team, type)){ - float x = unit.x + Angles.trnsx(unit.rotation, spawnY, spawnX), y = unit.y + Angles.trnsy(unit.rotation, spawnY, spawnX); spawnEffect.at(x, y); Unit u = type.create(unit.team); diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 8e06cf466e..f3d09de8ed 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -79,8 +79,10 @@ public abstract class BulletType extends Content{ public boolean backMove = true; /** Bullet range override. */ public float range = -1f; - /** Heal Bullet Percent **/ + /** % of block health healed **/ public float healPercent = 0f; + /** whether to make fire on impact */ + public boolean makeFire = false; //additional effects @@ -114,6 +116,8 @@ public abstract class BulletType extends Content{ public float lightningDamage = -1; public float lightningCone = 360f; public float lightningAngle = 0f; + /** The bullet created at lightning points. */ + public @Nullable BulletType lightningType = null; public float weaveScale = 1f; public float weaveMag = -1f; @@ -157,15 +161,18 @@ public abstract class BulletType extends Content{ return healPercent <= 0.001f || tile.team != bullet.team || tile.healthf() < 1f; } - public void hitTile(Bullet b, Building tile, float initialHealth){ - if(status == StatusEffects.burning) { - Fires.create(tile.tile); + /** If direct is false, this is an indirect hit and the tile was already damaged. + * TODO this is a mess. */ + public void hitTile(Bullet b, Building build, float initialHealth, boolean direct){ + if(makeFire && build.team != b.team){ + Fires.create(build.tile); } - hit(b); - if(healPercent > 0f && tile.team == b.team && !(tile.block instanceof ConstructBlock)){ - Fx.healBlockFull.at(tile.x, tile.y, tile.block.size, Pal.heal); - tile.heal(healPercent / 100f * tile.maxHealth()); + if(healPercent > 0f && build.team == b.team && !(build.block instanceof ConstructBlock)){ + Fx.healBlockFull.at(build.x, build.y, build.block.size, Pal.heal); + build.heal(healPercent / 100f * build.maxHealth()); + }else if(build.team != b.team && direct){ + hit(b); } } @@ -202,21 +209,21 @@ public abstract class BulletType extends Content{ Damage.createIncend(x, y, incendSpread, incendAmount); } - if(splashDamageRadius > 0){ + if(splashDamageRadius > 0 && !b.absorbed){ Damage.damage(b.team, x, y, splashDamageRadius, splashDamage * b.damageMultiplier(), collidesAir, collidesGround); if(status != StatusEffects.none){ Damage.status(b.team, x, y, splashDamageRadius, status, statusDuration, collidesAir, collidesGround); } - - if(healPercent > 0f) { - indexer.eachBlock(b.team, x, y, splashDamageRadius, other -> other.damaged(), other -> { + + if(healPercent > 0f){ + indexer.eachBlock(b.team, x, y, splashDamageRadius, Building::damaged, other -> { Fx.healBlockFull.at(other.x, other.y, other.block.size, Pal.heal); other.heal(healPercent / 100f * other.maxHealth()); }); } - if(status == StatusEffects.burning) { + if(makeFire){ indexer.eachBlock(null, x, y, splashDamageRadius, other -> other.team != b.team, other -> { Fires.create(other.tile); }); @@ -247,13 +254,9 @@ public abstract class BulletType extends Content{ } public void init(Bullet b){ - if(pierceCap >= 1) { - pierce = true; - //pierceBuilding is not enabled by default, because a bullet may want to *not* pierce buildings - } - if(killShooter && b.owner() instanceof Healthc){ - ((Healthc)b.owner()).kill(); + if(killShooter && b.owner() instanceof Healthc h){ + h.kill(); } if(instantDisappear){ @@ -280,6 +283,18 @@ public abstract class BulletType extends Content{ } } + @Override + public void init(){ + if(pierceCap >= 1){ + pierce = true; + //pierceBuilding is not enabled by default, because a bullet may want to *not* pierce buildings + } + + if(lightningType == null){ + lightningType = !collidesAir ? Bullets.damageLightningGround : Bullets.damageLightning; + } + } + @Override public ContentType getContentType(){ return ContentType.bullet; diff --git a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java index 4c52105b26..3e570c6309 100644 --- a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java +++ b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java @@ -13,6 +13,8 @@ public class ContinuousLaserBulletType extends BulletType{ public float length = 220f; public float shake = 1f; public float fadeTime = 16f; + public float lightStroke = 40f; + public float spaceMag = 35f; public Color[] colors = {Color.valueOf("ec745855"), Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.white}; public float[] tscales = {1f, 0.7f, 0.5f, 0.2f}; public float[] strokes = {2f, 1.5f, 1f, 0.3f}; @@ -28,15 +30,15 @@ public class ContinuousLaserBulletType extends BulletType{ hitSize = 4; drawSize = 420f; lifetime = 16f; - keepVelocity = false; - pierce = true; - hittable = false; hitColor = colors[2]; - collidesTiles = false; incendAmount = 1; incendSpread = 5; incendChance = 0.4f; lightColor = Color.orange; + keepVelocity = false; + collides = false; + pierce = true; + hittable = false; absorbable = false; } @@ -85,7 +87,7 @@ public class ContinuousLaserBulletType extends BulletType{ for(int s = 0; s < colors.length; s++){ Draw.color(Tmp.c1.set(colors[s]).mul(1f + Mathf.absin(Time.time(), 1f, 0.1f))); for(int i = 0; i < tscales.length; i++){ - Tmp.v1.trns(b.rotation() + 180f, (lenscales[i] - 1f) * 35f); + Tmp.v1.trns(b.rotation() + 180f, (lenscales[i] - 1f) * spaceMag); Lines.stroke((width + Mathf.absin(Time.time(), oscScl, oscMag)) * fout * strokes[s] * tscales[i]); Lines.lineAngle(b.x + Tmp.v1.x, b.y + Tmp.v1.y, b.rotation(), baseLen * lenscales[i], false); } @@ -93,7 +95,7 @@ public class ContinuousLaserBulletType extends BulletType{ Tmp.v1.trns(b.rotation(), baseLen * 1.1f); - Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, 40, lightColor, 0.7f); + Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, lightStroke, lightColor, 0.7f); Draw.reset(); } diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index 6d43baf95c..25e8fbfb67 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -23,16 +23,17 @@ public class LaserBulletType extends BulletType{ public LaserBulletType(float damage){ super(0.01f, damage); - keepVelocity = false; hitEffect = Fx.hitLancer; despawnEffect = Fx.none; shootEffect = Fx.hitLancer; smokeEffect = Fx.none; - collides = false; hitSize = 4; lifetime = 16f; + keepVelocity = false; + collides = false; pierce = true; hittable = false; + absorbable = false; } public LaserBulletType(){ diff --git a/core/src/mindustry/entities/bullet/LightningBulletType.java b/core/src/mindustry/entities/bullet/LightningBulletType.java index dbfbcc0301..585737f758 100644 --- a/core/src/mindustry/entities/bullet/LightningBulletType.java +++ b/core/src/mindustry/entities/bullet/LightningBulletType.java @@ -26,6 +26,11 @@ public class LightningBulletType extends BulletType{ return (lightningLength + lightningLengthRand/2f) * 6f; } + @Override + public float estimateDPS(){ + return super.estimateDPS() * Math.max(lightningLength / 4f, 1); + } + @Override public void draw(Bullet b){ } diff --git a/core/src/mindustry/entities/bullet/RailBulletType.java b/core/src/mindustry/entities/bullet/RailBulletType.java index 8265f35e8b..dfc6f8d0ae 100644 --- a/core/src/mindustry/entities/bullet/RailBulletType.java +++ b/core/src/mindustry/entities/bullet/RailBulletType.java @@ -1,5 +1,7 @@ package mindustry.entities.bullet; +import arc.math.geom.*; +import arc.util.*; import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; @@ -15,36 +17,54 @@ public class RailBulletType extends BulletType{ /** Multiplier of damage decreased per health pierced. */ public float pierceDamageFactor = 1f; + public float length = 100f; + + public float updateEffectSeg = 20f; + public RailBulletType(){ pierceBuilding = true; pierce = true; reflectable = false; hitEffect = Fx.none; despawnEffect = Fx.none; + collides = false; + lifetime = 1f; + } + + @Override + public float range(){ + return length; } void handle(Bullet b, Posc pos, float initialHealth){ float sub = initialHealth*pierceDamageFactor; - if(sub >= b.damage){ - //cause a despawn - b.remove(); + if(b.damage <= 0){ + b.fdata = Math.min(b.fdata, b.dst(pos)); + return; + } + + if(b.damage > 0){ + pierceEffect.at(pos.getX(), pos.getY(), b.rotation()); + + hitEffect.at(pos.getX(), pos.getY()); } //subtract health from each consecutive pierce b.damage -= Math.min(b.damage, sub); - - if(b.damage > 0){ - pierceEffect.at(pos.getX(), pos.getY(), b.rotation()); - } - - hitEffect.at(pos.getX(), pos.getY()); } @Override - public void update(Bullet b){ - if(b.timer(1, 0.9f)){ - updateEffect.at(b.x, b.y, b.rotation()); + public void init(Bullet b){ + super.init(b); + + b.fdata = length; + Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false); + float resultLen = b.fdata; + + Vec2 nor = Tmp.v1.set(b.vel).nor(); + for(float i = 0; i <= resultLen; i += updateEffectSeg){ + updateEffect.at(b.x + nor.x * i, b.y + nor.y * i, b.rotation()); } } @@ -54,7 +74,7 @@ public class RailBulletType extends BulletType{ } @Override - public void hitTile(Bullet b, Building tile, float initialHealth){ - handle(b, tile, initialHealth); + public void hitTile(Bullet b, Building build, float initialHealth, boolean direct){ + handle(b, build, initialHealth); } } diff --git a/core/src/mindustry/entities/bullet/SapBulletType.java b/core/src/mindustry/entities/bullet/SapBulletType.java index 5eb1d1e294..9d05a37e9a 100644 --- a/core/src/mindustry/entities/bullet/SapBulletType.java +++ b/core/src/mindustry/entities/bullet/SapBulletType.java @@ -19,7 +19,8 @@ public class SapBulletType extends BulletType{ public SapBulletType(){ speed = 0.0001f; despawnEffect = Fx.none; - pierce = true; + pierce = false; + collides = false; hitSize = 0f; hittable = false; hitEffect = Fx.hitLiquid; @@ -62,17 +63,15 @@ public class SapBulletType extends BulletType{ if(target != null){ float result = Math.min(target.health(), damage); - if(b.owner instanceof Healthc){ - ((Healthc)b.owner).heal(result * sapStrength); + if(b.owner instanceof Healthc h){ + h.heal(result * sapStrength); } } if(target instanceof Hitboxc hit){ - hit.collision(b, hit.x(), hit.y()); b.collision(hit, hit.x(), hit.y()); }else if(target instanceof Building tile){ - if(tile.collide(b)){ tile.collision(b); hit(b, tile.x, tile.y); diff --git a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java index 01a7ad2d7e..236ede8887 100644 --- a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java +++ b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java @@ -24,9 +24,11 @@ public class ShrapnelBulletType extends BulletType{ shootEffect = smokeEffect = Fx.lightningShoot; lifetime = 10f; despawnEffect = Fx.none; - pierce = true; keepVelocity = false; + collides = false; + pierce = true; hittable = false; + absorbable = false; } @Override diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 0ef4d8bed0..12fd9e8029 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -13,6 +13,7 @@ import mindustry.entities.units.*; import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.*; import mindustry.world.blocks.ConstructBlock.*; @@ -22,20 +23,24 @@ import java.util.*; import static mindustry.Vars.*; @Component -abstract class BuilderComp implements Unitc{ +abstract class BuilderComp implements Posc, Teamc, Rotc{ static final Vec2[] vecs = new Vec2[]{new Vec2(), new Vec2(), new Vec2(), new Vec2()}; @Import float x, y, rotation; + @Import UnitType type; - @SyncLocal Queue plans = new Queue<>(); + @SyncLocal Queue plans = new Queue<>(1); @SyncLocal transient boolean updateBuilding = true; + public boolean canBuild(){ + return type.buildSpeed > 0; + } + @Override public void update(){ - if(!updateBuilding) return; + if(!updateBuilding || !canBuild()) return; float finalPlaceDst = state.rules.infiniteResources ? Float.MAX_VALUE : buildingRange; - boolean infinite = state.rules.infiniteResources || team().rules().infiniteResources; Iterator it = plans.iterator(); @@ -69,10 +74,6 @@ abstract class BuilderComp implements Unitc{ Tile tile = world.tile(current.x, current.y); - if(within(tile, finalPlaceDst)){ - lookAt(angleTo(tile)); - } - if(!(tile.block() instanceof ConstructBlock)){ if(!current.initialized && !current.breaking && Build.validPlace(current.block, team(), current.x, current.y, current.rotation)){ boolean hasAll = infinite || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item)); @@ -107,9 +108,9 @@ abstract class BuilderComp implements Unitc{ ConstructBuild entity = tile.bc(); if(current.breaking){ - entity.deconstruct(self(), core, 1f / entity.buildCost * Time.delta * type().buildSpeed * state.rules.buildSpeedMultiplier); + entity.deconstruct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * state.rules.buildSpeedMultiplier); }else{ - entity.construct(self(), core, 1f / entity.buildCost * Time.delta * type().buildSpeed * state.rules.buildSpeedMultiplier, current.config); + entity.construct(self(), core, 1f / entity.buildCost * Time.delta * type.buildSpeed * state.rules.buildSpeedMultiplier, current.config); } current.stuck = Mathf.equal(current.progress, entity.progress); @@ -166,6 +167,8 @@ abstract class BuilderComp implements Unitc{ /** Add another build requests to the queue, if it doesn't exist there yet. */ void addBuild(BuildPlan place, boolean tail){ + if(!canBuild()) return; + BuildPlan replace = null; for(BuildPlan request : plans){ if(request.x == place.x && request.y == place.y){ @@ -188,6 +191,10 @@ abstract class BuilderComp implements Unitc{ } boolean activelyBuilding(){ + //not actively building when not near the build plan + if(isBuilding() && !within(buildPlan(), state.rules.infiniteResources ? Float.MAX_VALUE : buildingRange)){ + return false; + } return isBuilding() && updateBuilding; } @@ -197,9 +204,8 @@ abstract class BuilderComp implements Unitc{ return plans.size == 0 ? null : plans.first(); } - @Override public void draw(){ - if(!isBuilding() || !updateBuilding) return; + if(!isBuilding() || !updateBuilding || !canBuild()) return; //TODO check correctness Draw.z(Layer.flyingUnit); diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 84b6160d25..fca91f0417 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -29,6 +29,7 @@ import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.blocks.*; import mindustry.world.blocks.ConstructBlock.*; import mindustry.world.blocks.environment.*; import mindustry.world.blocks.payloads.*; @@ -106,8 +107,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, this.block = block; this.team = team; - if(block.activeSound != Sounds.none){ - sound = new SoundLoop(block.activeSound, block.activeSoundVolume); + if(block.loopSound != Sounds.none){ + sound = new SoundLoop(block.loopSound, block.loopSoundVolume); } health = block.health; @@ -518,6 +519,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, public void dumpLiquid(Liquid liquid){ int dump = this.cdump; + if(!net.client() && state.isCampaign() && team == state.rules.defaultTeam) liquid.unlock(); + for(int i = 0; i < proximity.size; i++){ incrementDump(proximity.size); Building other = proximity.get((i + dump) % proximity.size); @@ -617,6 +620,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, */ public void offload(Item item){ int dump = this.cdump; + if(!net.client() && state.isCampaign() && team == state.rules.defaultTeam) item.unlock(); for(int i = 0; i < proximity.size; i++){ incrementDump(proximity.size); @@ -780,7 +784,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } /** @return whether this block should play its idle sound.*/ - public boolean shouldIdleSound(){ + public boolean shouldAmbientSound(){ return shouldConsume(); } @@ -869,7 +873,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, public void placed(){ if(net.client()) return; - if((block.consumesPower && !block.outputsPower) || (!block.consumesPower && block.outputsPower)){ + if(block.consumesPower || block.outputsPower){ int range = 10; tempTiles.clear(); Geometry.circle(tileX(), tileY(), range, (x, y) -> { @@ -1118,7 +1122,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, /** Returns whether or not a hand cursor should be shown over this block. */ public Cursor getCursor(){ - return block.configurable ? SystemCursor.hand : SystemCursor.arrow; + return block.configurable && team == player.team() ? SystemCursor.hand : SystemCursor.arrow; } /** @@ -1225,6 +1229,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } + /** @return ambient sound volume scale. */ + public float ambientVolume(){ + return efficiency(); + } + //endregion //region overrides @@ -1285,6 +1294,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, case powerNetStored -> power == null ? 0 : power.graph.getLastPowerStored(); case powerNetCapacity -> power == null ? 0 : power.graph.getLastCapacity(); case enabled -> enabled ? 1 : 0; + case controlled -> this instanceof ControlBlock c ? c.isControlled() ? 1 : 0 : 0; case payloadCount -> getPayload() != null ? 1 : 0; default -> 0; }; @@ -1319,7 +1329,14 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, @Override public void control(LAccess type, Object p1, double p2, double p3, double p4){ - + //don't execute configure instructions as the client + if(type == LAccess.configure && block.logicConfigurable && !net.client()){ + //change config only if it's new + Object prev = senseObject(LAccess.config); + if(prev != p1){ + configureAny(p1); + } + } } @Override @@ -1341,6 +1358,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, @Final @Override public void update(){ + if(state.isEditor()) return; + timeScaleDuration -= Time.delta; if(timeScaleDuration <= 0f || !block.canOverdrive){ timeScale = 1f; @@ -1354,12 +1373,18 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } } - if(sound != null){ - sound.update(x, y, shouldActiveSound()); + if(team == Team.derelict){ + enabled = false; } - if(block.idleSound != Sounds.none && shouldIdleSound()){ - loops.play(block.idleSound, self(), block.idleSoundVolume); + if(!headless){ + if(sound != null){ + sound.update(x, y, shouldActiveSound()); + } + + if(block.ambientSound != Sounds.none && shouldAmbientSound()){ + control.sound.loop(block.ambientSound, self(), block.ambientSoundVolume * ambientVolume()); + } } if(enabled || !block.noUpdateDisabled){ diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index 5a08710762..318f66facd 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -1,5 +1,6 @@ package mindustry.entities.comp; +import arc.*; import arc.func.*; import arc.graphics.g2d.*; import arc.math.*; @@ -9,10 +10,12 @@ import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.core.*; import mindustry.entities.bullet.*; +import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.world.blocks.defense.Wall.*; import static mindustry.Vars.*; @@ -27,6 +30,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw Object data; BulletType type; float fdata; + transient boolean absorbed; @Override public void getCollisions(Cons consumer){ @@ -64,6 +68,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw @Override public void absorb(){ + absorbed = true; remove(); } @@ -104,6 +109,10 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw } type.hitEntity(self(), other, health); + + if(owner instanceof WallBuild && player != null && team != player.team() && other instanceof Unit unit && unit.dead){ + Events.fire(Trigger.phaseDeflectHit); + } } @Override @@ -133,7 +142,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw } } - type.hitTile(self(), tile, health); + type.hitTile(self(), tile, health, true); return !type.pierceBuilding; } @@ -142,7 +151,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw }); } - if(type.pierceCap != -1 && collided.size >= type.pierceCap) { + if(type.pierceCap != -1 && collided.size >= type.pierceCap){ remove(); } } diff --git a/core/src/mindustry/entities/comp/CommanderComp.java b/core/src/mindustry/entities/comp/CommanderComp.java index 2fe2bf83a0..0ce8d60d10 100644 --- a/core/src/mindustry/entities/comp/CommanderComp.java +++ b/core/src/mindustry/entities/comp/CommanderComp.java @@ -29,9 +29,14 @@ abstract class CommanderComp implements Entityc, Posc{ transient float minFormationSpeed; public void update(){ + if(controlling.isEmpty()){ + formation = null; + } + if(formation != null){ formation.anchor.set(x, y, 0); formation.updateSlots(); + controlling.removeAll(u -> u.dead || !(u.controller() instanceof FormationAI ai && ai.leader == self())); } } @@ -64,6 +69,8 @@ abstract class CommanderComp implements Entityc, Posc{ } }); + if(units.isEmpty()) return; + //sort by hitbox size, then by distance units.sort(Structs.comps(Structs.comparingFloat(u -> -u.hitSize), Structs.comparingFloat(u -> u.dst2(this)))); units.truncate(type.commandLimit); diff --git a/core/src/mindustry/entities/comp/EffectStateComp.java b/core/src/mindustry/entities/comp/EffectStateComp.java index 776a696049..7238ea0728 100644 --- a/core/src/mindustry/entities/comp/EffectStateComp.java +++ b/core/src/mindustry/entities/comp/EffectStateComp.java @@ -22,6 +22,6 @@ abstract class EffectStateComp implements Posc, Drawc, Timedc, Rotc, Childc{ @Replace public float clipSize(){ - return effect.size; + return effect.clip; } } diff --git a/core/src/mindustry/entities/comp/FireComp.java b/core/src/mindustry/entities/comp/FireComp.java index 84fcb6b3b5..43fc3cdae9 100644 --- a/core/src/mindustry/entities/comp/FireComp.java +++ b/core/src/mindustry/entities/comp/FireComp.java @@ -34,8 +34,8 @@ abstract class FireComp implements Timedc, Posc, Firec, Syncc{ Fx.fireSmoke.at(x + Mathf.range(4f), y + Mathf.range(4f)); } - if(Mathf.chance(0.001 * Time.delta)){ - Sounds.fire.at(this); + if(!headless){ + control.sound.loop(Sounds.fire, this, 0.07f); } time = Mathf.clamp(time + Time.delta, 0, lifetime()); diff --git a/core/src/mindustry/entities/comp/FlyingComp.java b/core/src/mindustry/entities/comp/FlyingComp.java index 0c8c2f0277..be7b003baa 100644 --- a/core/src/mindustry/entities/comp/FlyingComp.java +++ b/core/src/mindustry/entities/comp/FlyingComp.java @@ -75,10 +75,14 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{ wasFlying = isFlying(); } - if(!hovering && isGrounded() && floor.isLiquid){ + if(!hovering && isGrounded()){ if((splashTimer += Mathf.dst(deltaX(), deltaY())) >= (7f + hitSize()/8f)){ floor.walkEffect.at(x, y, hitSize() / 8f, floor.mapColor); splashTimer = 0f; + + if(!(this instanceof WaterMovec)){ + floor.walkSound.at(x, y, Mathf.random(floor.walkSoundPitchMin, floor.walkSoundPitchMax), floor.walkSoundVolume); + } } } diff --git a/core/src/mindustry/entities/comp/LaunchCoreComp.java b/core/src/mindustry/entities/comp/LaunchCoreComp.java index 7283a9e220..4f642c8493 100644 --- a/core/src/mindustry/entities/comp/LaunchCoreComp.java +++ b/core/src/mindustry/entities/comp/LaunchCoreComp.java @@ -73,4 +73,4 @@ abstract class LaunchCoreComp implements Drawc, Timedc{ Fx.rocketSmokeLarge.at(cx() + Mathf.range(r), cy() + Mathf.range(r), fin()); } } -} \ No newline at end of file +} diff --git a/core/src/mindustry/entities/comp/LegsComp.java b/core/src/mindustry/entities/comp/LegsComp.java index e6022ed91e..8ddb4793e4 100644 --- a/core/src/mindustry/entities/comp/LegsComp.java +++ b/core/src/mindustry/entities/comp/LegsComp.java @@ -112,6 +112,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ Floor floor = Vars.world.floorWorld(l.base.x, l.base.y); if(floor.isLiquid){ floor.walkEffect.at(l.base.x, l.base.y, type.rippleScale, floor.mapColor); + floor.walkSound.at(x, y, 1f, floor.walkSoundVolume); }else{ Fx.unitLandSmall.at(l.base.x, l.base.y, type.rippleScale, floor.mapColor); } diff --git a/core/src/mindustry/entities/comp/MechComp.java b/core/src/mindustry/entities/comp/MechComp.java index 94bb380c96..2d6f7441b6 100644 --- a/core/src/mindustry/entities/comp/MechComp.java +++ b/core/src/mindustry/entities/comp/MechComp.java @@ -39,7 +39,7 @@ abstract class MechComp implements Posc, Flyingc, Hitboxc, Unitc, Mechc, Elevati float lastExtend = walkExtension; - if(extendScl < lastExtend && base % 2f > 1f){ + if(extendScl < lastExtend && base % 2f > 1f && !isFlying()){ int side = -Mathf.sign(extend); float width = hitSize / 2f * side, length = type.mechStride * 1.35f; diff --git a/core/src/mindustry/entities/comp/MinerComp.java b/core/src/mindustry/entities/comp/MinerComp.java index 764e6ed4d3..9368918d8c 100644 --- a/core/src/mindustry/entities/comp/MinerComp.java +++ b/core/src/mindustry/entities/comp/MinerComp.java @@ -16,8 +16,8 @@ import mindustry.world.*; import static mindustry.Vars.*; @Component -abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{ - @Import float x, y, rotation; +abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc{ + @Import float x, y, rotation, hitSize; @Import UnitType type; transient float mineTimer; @@ -28,16 +28,24 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{ } public boolean offloadImmediately(){ - return isPlayer(); + return this.self().isPlayer(); } boolean mining(){ - return mineTile != null && !(((Object)this) instanceof Builderc && ((Builderc)(Object)this).activelyBuilding()); + return mineTile != null && !this.self().activelyBuilding(); + } + + public boolean validMine(Tile tile, boolean checkDst){ + return !(tile == null || tile.block() != Blocks.air || (!within(tile.worldx(), tile.worldy(), miningRange) && checkDst) + || tile.drop() == null || !canMine(tile.drop())); } public boolean validMine(Tile tile){ - return !(tile == null || tile.block() != Blocks.air || !within(tile.worldx(), tile.worldy(), miningRange) - || tile.drop() == null || !canMine(tile.drop())); + return validMine(tile, true); + } + + public boolean canMine(){ + return type.mineSpeed > 0 && type.mineTier >= 0; } @Override @@ -59,7 +67,6 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{ mineTimer = 0f; }else if(mining()){ Item item = mineTile.drop(); - lookAt(angleTo(mineTile.worldx(), mineTile.worldy())); mineTimer += Time.delta *type.mineSpeed; if(Mathf.chance(0.06 * Time.delta)){ @@ -85,14 +92,16 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{ } } - + if(!headless){ + control.sound.loop(type.mineSound, this, type.mineSoundVolume); + } } } @Override public void draw(){ if(!mining()) return; - float focusLen = 4f + Mathf.absin(Time.time(), 1.1f, 0.5f); + float focusLen = hitSize / 2f + Mathf.absin(Time.time(), 1.1f, 0.5f); float swingScl = 12f, swingMag = tilesize / 8f; float flashScl = 0.3f; diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index e2945d08f7..c89dc2b10b 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -1,5 +1,6 @@ package mindustry.entities.comp; +import arc.*; import arc.math.*; import arc.struct.*; import arc.util.*; @@ -8,6 +9,7 @@ import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.core.*; import mindustry.entities.*; +import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; @@ -52,12 +54,14 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{ if(Vars.net.client()){ Vars.netClient.clearRemovedEntity(unit.id); } + Events.fire(new PickupEvent(self(), unit)); } void pickup(Building tile){ tile.tile.remove(); payloads.add(new BuildPayload(tile)); Fx.unitPickup.at(tile); + Events.fire(new PickupEvent(self(), tile)); } boolean dropLastPayload(){ diff --git a/core/src/mindustry/entities/comp/PlayerComp.java b/core/src/mindustry/entities/comp/PlayerComp.java index 736a1b68e5..0f8236377c 100644 --- a/core/src/mindustry/entities/comp/PlayerComp.java +++ b/core/src/mindustry/entities/comp/PlayerComp.java @@ -28,7 +28,7 @@ import static mindustry.Vars.*; @EntityDef(value = {Playerc.class}, serialize = false) @Component(base = true) abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Drawc{ - static final float deathDelay = 30f; + static final float deathDelay = 60f; @Import float x, y; @@ -48,11 +48,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra transient float textFadeTime; public boolean isBuilder(){ - return unit instanceof Builderc; - } - - public boolean isMiner(){ - return unit instanceof Minerc; + return unit.canBuild(); } public @Nullable CoreBuild closestCore(){ @@ -78,6 +74,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra team = state.rules.defaultTeam; admin = typing = false; textFadeTime = 0f; + x = y = 0f; if(!dead()){ unit.controller(unit.type.createController()); unit = Nulls.unit; @@ -129,7 +126,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra } }else if(core != null){ //have a small delay before death to prevent the camera from jumping around too quickly - //(this is not for balance) + //(this is not for balance, it just looks better this way) deathTimer += Time.delta; if(deathTimer >= deathDelay){ //request spawn - this happens serverside only @@ -163,14 +160,6 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra return unit; } - public Minerc miner(){ - return !(unit instanceof Minerc) ? Nulls.miner : (Minerc)unit; - } - - public Builderc builder(){ - return !(unit instanceof Builderc) ? Nulls.builder : (Builderc)unit; - } - public void unit(Unit unit){ if(unit == null) throw new IllegalArgumentException("Unit cannot be null. Use clearUnit() instead."); if(this.unit == unit) return; diff --git a/core/src/mindustry/entities/comp/ShieldComp.java b/core/src/mindustry/entities/comp/ShieldComp.java index 274286b801..d4a1ec7e4b 100644 --- a/core/src/mindustry/entities/comp/ShieldComp.java +++ b/core/src/mindustry/entities/comp/ShieldComp.java @@ -22,9 +22,9 @@ abstract class ShieldComp implements Healthc, Posc{ @Replace @Override public void damage(float amount){ - amount /= healthMultiplier; //apply armor amount = Math.max(amount - armor, minArmorDamage * amount); + amount /= healthMultiplier; hitTime = 1f; diff --git a/core/src/mindustry/entities/comp/StatusComp.java b/core/src/mindustry/entities/comp/StatusComp.java index fcce0d0a02..c4ea7be07a 100644 --- a/core/src/mindustry/entities/comp/StatusComp.java +++ b/core/src/mindustry/entities/comp/StatusComp.java @@ -114,13 +114,14 @@ abstract class StatusComp implements Posc, Flyingc{ StatusEntry entry = statuses.get(index++); entry.time = Math.max(entry.time - Time.delta, 0); - applied.set(entry.effect.id); - if(entry.time <= 0 && !entry.effect.permanent){ + if(entry.effect == null || (entry.time <= 0 && !entry.effect.permanent)){ Pools.free(entry); index --; statuses.remove(index); }else{ + applied.set(entry.effect.id); + speedMultiplier *= entry.effect.speedMultiplier; healthMultiplier *= entry.effect.healthMultiplier; damageMultiplier *= entry.effect.damageMultiplier; diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index ca85eacd07..aa02f25022 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -1,6 +1,7 @@ package mindustry.entities.comp; import arc.*; +import arc.func.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; @@ -8,6 +9,7 @@ import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import mindustry.ai.*; +import mindustry.ai.types.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.core.*; @@ -29,12 +31,13 @@ import mindustry.world.blocks.payloads.*; import static mindustry.Vars.*; @Component(base = true) -abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Commanderc, Displayable, Senseable, Ranged{ +abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Commanderc, Displayable, Senseable, Ranged, Minerc, Builderc{ @Import boolean hovering, dead; - @Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo; + @Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, minFormationSpeed; @Import Team team; @Import int id; + @Import @Nullable Tile mineTile; private UnitController controller; UnitType type; @@ -66,9 +69,33 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I return type.hasWeapons(); } + public float speed(){ + float strafePenalty = isGrounded() || !isPlayer() ? 1f : Mathf.lerp(1f, type.strafePenalty, Angles.angleDist(vel().angle(), rotation) / 180f); + //limit speed to minimum formation speed to preserve formation + return (isCommanding() ? minFormationSpeed * 0.98f : type.speed) * strafePenalty; + } + /** @return speed with boost multipliers factored in. */ public float realSpeed(){ - return Mathf.lerp(1f, type.canBoost ? type.boostMultiplier : 1f, elevation) * type.speed; + return Mathf.lerp(1f, type.canBoost ? type.boostMultiplier : 1f, elevation) * speed(); + } + + /** Iterates through this unit and everything it is controlling. */ + public void eachGroup(Cons cons){ + cons.get(self()); + controlling().each(cons); + } + + /** @return where the unit wants to look at. */ + public float prefRotation(){ + if(activelyBuilding()){ + return angleTo(buildPlan()); + }else if(mineTile() != null){ + return angleTo(mineTile()); + }else if(moving()){ + return vel().angle(); + } + return rotation; } @Override @@ -97,7 +124,11 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I case shooting -> isShooting() ? 1 : 0; case shootX -> World.conv(aimX()); case shootY -> World.conv(aimY()); + case mining -> mining() ? 1 : 0; + case mineX -> mining() ? mineTile.x : -1; + case mineY -> mining() ? mineTile.y : -1; case flag -> flag; + case controlled -> controller instanceof LogicAI || controller instanceof Player ? 1 : 0; case payloadCount -> self() instanceof Payloadc pay ? pay.payloads().size : 0; default -> 0; }; @@ -230,12 +261,14 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void add(){ + team.data().updateCount(type, 1); //check if over unit cap if(count() > cap() && !spawnedByCore && !dead){ Call.unitCapDeath(self()); team.data().updateCount(type, -1); } + } @Override @@ -352,7 +385,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I } //remove units spawned by the core - if(spawnedByCore && !isPlayer()){ + if(spawnedByCore && !isPlayer() && !dead){ Call.unitDespawn(self()); } } diff --git a/core/src/mindustry/entities/comp/WeaponsComp.java b/core/src/mindustry/entities/comp/WeaponsComp.java index dec0105c14..b919f6fee1 100644 --- a/core/src/mindustry/entities/comp/WeaponsComp.java +++ b/core/src/mindustry/entities/comp/WeaponsComp.java @@ -4,6 +4,7 @@ import arc.math.*; import arc.math.geom.*; import arc.util.*; import mindustry.annotations.Annotations.*; +import mindustry.audio.*; import mindustry.entities.*; import mindustry.entities.bullet.*; import mindustry.entities.units.*; @@ -23,8 +24,8 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ /** weapon mount array, never null */ @SyncLocal WeaponMount[] mounts = {}; - @ReadOnly transient float aimX, aimY; @ReadOnly transient boolean isRotate; + transient float aimX, aimY; boolean isShooting; float ammo; @@ -116,11 +117,20 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ }else{ mount.bullet.rotation(weaponRotation + 90); mount.bullet.set(shootX, shootY); + mount.reload = weapon.reload; vel.add(Tmp.v1.trns(rotation + 180f, mount.bullet.type.recoil)); + if(weapon.shootSound != Sounds.none && !headless){ + if(mount.sound == null) mount.sound = new SoundLoop(weapon.shootSound, 1f); + mount.sound.update(x, y, true); + } } }else{ //heat decreases when not firing mount.heat = Math.max(mount.heat - Time.delta * reloadMultiplier / mount.weapon.cooldownTime, 0); + + if(mount.sound != null){ + mount.sound.update(x, y, false); + } } //flip weapon shoot side for alternating weapons at half reload @@ -152,7 +162,7 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ mount.reload <= 0.0001f && //reload has to be 0 Angles.within(weapon.rotate ? mount.rotation : this.rotation, mount.targetRotation, mount.weapon.shootCone) //has to be within the cone ){ - shoot(mount, shootX, shootY, mount.aimX, mount.aimY, shootAngle, Mathf.sign(weapon.x)); + shoot(mount, shootX, shootY, mount.aimX, mount.aimY, mountX, mountY, shootAngle, Mathf.sign(weapon.x)); mount.reload = weapon.reload; @@ -162,13 +172,13 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ } } - private void shoot(WeaponMount mount, float x, float y, float aimX, float aimY, float rotation, int side){ + private void shoot(WeaponMount mount, float x, float y, float aimX, float aimY, float mountX, float mountY, float rotation, int side){ Weapon weapon = mount.weapon; float baseX = this.x, baseY = this.y; boolean delay = weapon.firstShotDelay + weapon.shotDelay > 0f; - (delay ? weapon.chargeSound : weapon.shootSound).at(x, y, Mathf.random(0.8f, 1.0f)); + (delay ? weapon.chargeSound : weapon.continuous ? Sounds.none : weapon.shootSound).at(x, y, Mathf.random(weapon.soundPitchMin, weapon.soundPitchMax)); BulletType ammo = weapon.bullet; float lifeScl = ammo.scaleVelocity ? Mathf.clamp(Mathf.dst(x, y, aimX, aimY) / ammo.range()) : 1f; @@ -195,7 +205,9 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ vel.add(Tmp.v1.trns(rotation + 180f, ammo.recoil)); Effect.shake(weapon.shake, weapon.shake, x, y); mount.heat = 1f; - weapon.shootSound.at(x, y, Mathf.random(0.8f, 1.0f)); + if(!weapon.continuous){ + weapon.shootSound.at(x, y, Mathf.random(weapon.soundPitchMin, weapon.soundPitchMax)); + } }); }else{ vel.add(Tmp.v1.trns(rotation + 180f, ammo.recoil)); @@ -203,7 +215,7 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{ mount.heat = 1f; } - weapon.ejectEffect.at(x, y, rotation * side); + weapon.ejectEffect.at(mountX, mountY, rotation * side); ammo.shootEffect.at(x, y, rotation, parentize ? this : null); ammo.smokeEffect.at(x, y, rotation, parentize ? this : null); apply(weapon.shootStatus, weapon.shootStatusDuration); diff --git a/core/src/mindustry/entities/effect/MultiEffect.java b/core/src/mindustry/entities/effect/MultiEffect.java new file mode 100644 index 0000000000..c1b0e7e6d4 --- /dev/null +++ b/core/src/mindustry/entities/effect/MultiEffect.java @@ -0,0 +1,32 @@ +package mindustry.entities.effect; + +import mindustry.entities.*; + +/** Renders multiple particle effects at once. */ +public class MultiEffect extends Effect{ + public Effect[] effects = {}; + + public MultiEffect(){ + clip = 100f; + } + + public MultiEffect(Effect... effects){ + this(); + this.effects = effects; + } + + @Override + public void init(){ + for(Effect f : effects){ + clip = Math.max(clip, f.clip); + } + } + + @Override + public void render(EffectContainer e){ + for(Effect f : effects){ + e.scaled(f.lifetime, f::render); + clip = Math.max(clip, f.clip); + } + } +} diff --git a/core/src/mindustry/entities/effect/ParticleEffect.java b/core/src/mindustry/entities/effect/ParticleEffect.java new file mode 100644 index 0000000000..f38fc00603 --- /dev/null +++ b/core/src/mindustry/entities/effect/ParticleEffect.java @@ -0,0 +1,55 @@ +package mindustry.entities.effect; + +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.util.*; +import mindustry.entities.*; + +/** The most essential effect class. Can create particles in various shapes. */ +public class ParticleEffect extends Effect{ + public Color colorFrom = Color.white.cpy(), colorTo = Color.white.cpy(); + public int particles = 6; + public float cone = 180f, length = 20f, baseLength = 0f; + public Interp interp = Interp.linear; + + //region only + public float sizeFrom = 2f, sizeTo = 0f; + public String region = "circle"; + + //line only + public boolean line; + public float strokeFrom = 2f, strokeTo = 0f, lenFrom = 4f, lenTo = 2f; + + private @Nullable TextureRegion tex; + + @Override + public void init(){ + clip = Math.max(clip, length + Math.max(sizeFrom, sizeTo)); + } + + @Override + public void render(EffectContainer e){ + if(tex == null) tex = Core.atlas.find(region); + + float rawfin = e.fin(); + float fin = e.fin(interp); + float rad = interp.apply(sizeFrom, sizeTo, rawfin) * 2; + + Draw.color(colorFrom, colorTo, fin); + + if(line){ + Lines.stroke(interp.apply(strokeFrom, strokeTo, rawfin)); + float len = interp.apply(lenFrom, lenTo, rawfin); + + Angles.randLenVectors(e.id, particles, length * fin + baseLength, e.rotation, cone, (x, y) -> { + Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), len); + }); + }else{ + Angles.randLenVectors(e.id, particles, length * fin + baseLength, e.rotation, cone, (x, y) -> { + Draw.rect(tex, e.x + x, e.y + y, rad, rad); + }); + } + } +} diff --git a/core/src/mindustry/entities/effect/WaveEffect.java b/core/src/mindustry/entities/effect/WaveEffect.java new file mode 100644 index 0000000000..88ff7391d2 --- /dev/null +++ b/core/src/mindustry/entities/effect/WaveEffect.java @@ -0,0 +1,33 @@ +package mindustry.entities.effect; + +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import mindustry.entities.*; + +/** Effect that renders a basic shockwave. */ +public class WaveEffect extends Effect{ + public Color colorFrom = Color.white.cpy(), colorTo = Color.white.cpy(); + public float sizeFrom = 0f, sizeTo = 100f; + public int sides = -1; + public float rotation = 0f; + public float strokeFrom = 2f, strokeTo = 0f; + public Interp interp = Interp.linear; + + @Override + public void init(){ + clip = Math.max(clip, Math.max(sizeFrom, sizeTo) + Math.max(strokeFrom, strokeTo)); + } + + @Override + public void render(EffectContainer e){ + float fin = e.fin(); + float ifin = e.fin(interp); + + Draw.color(colorFrom, colorTo, ifin); + Lines.stroke(interp.apply(strokeFrom, strokeTo, fin)); + + float rad = interp.apply(sizeFrom, sizeTo, fin); + Lines.poly(e.x, e.y, sides <= 0 ? Lines.circleVertices(rad) : sides, rad, rotation + e.rotation); + } +} diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index ca005fe25d..40d509b116 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -15,9 +15,7 @@ import static mindustry.Vars.*; public class AIController implements UnitController{ protected static final Vec2 vec = new Vec2(); - protected static final int timerTarget = 0; - protected static final int timerTarget2 = 1; - protected static final int timerTarget3 = 2; + protected static final int timerTarget = 0, timerTarget2 = 1, timerTarget3 = 2; protected Unit unit; protected Interval timer = new Interval(4); @@ -61,13 +59,10 @@ public class AIController implements UnitController{ } protected void updateVisuals(){ - if(unit.isFlying()){ unit.wobble(); - if(unit.moving()){ - unit.lookAt(unit.vel.angle()); - } + unit.lookAt(unit.prefRotation()); } } @@ -95,7 +90,7 @@ public class AIController implements UnitController{ if(tile == targetTile || (costType == Pathfinder.costWater && !targetTile.floor().isLiquid)) return; - unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.type.speed)); + unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.speed())); } protected void updateWeapons(){ @@ -112,6 +107,8 @@ public class AIController implements UnitController{ target = null; } + unit.isShooting = false; + for(int i = 0; i < targets.length; i++){ WeaponMount mount = unit.mounts[i]; Weapon weapon = mount.weapon; @@ -143,6 +140,12 @@ public class AIController implements UnitController{ mount.shoot = shoot; mount.rotate = shoot; + + unit.isShooting |= shoot; + if(shoot){ + unit.aimX = mount.aimX; + unit.aimY = mount.aimY; + } } } @@ -160,7 +163,7 @@ public class AIController implements UnitController{ } protected boolean retarget(){ - return timer.get(timerTarget, 30); + return timer.get(timerTarget, 40); } protected Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ @@ -176,7 +179,7 @@ public class AIController implements UnitController{ } protected void circle(Position target, float circleLength){ - circle(target, circleLength, unit.type.speed); + circle(target, circleLength, unit.speed()); } protected void circle(Position target, float circleLength, float speed){ diff --git a/core/src/mindustry/entities/units/BuildPlan.java b/core/src/mindustry/entities/units/BuildPlan.java index 9d8e98a05f..16ec45cb07 100644 --- a/core/src/mindustry/entities/units/BuildPlan.java +++ b/core/src/mindustry/entities/units/BuildPlan.java @@ -9,7 +9,7 @@ import mindustry.world.*; import static mindustry.Vars.*; /** Class for storing build requests. Can be either a place or remove request. */ -public class BuildPlan{ +public class BuildPlan implements Position{ /** Position and rotation of this request. */ public int x, y, rotation; /** Block being placed. If null, this is a breaking request.*/ @@ -127,11 +127,11 @@ public class BuildPlan{ } public float drawx(){ - return x*tilesize + block.offset; + return x*tilesize + (block == null ? 0 : block.offset); } public float drawy(){ - return y*tilesize + block.offset; + return y*tilesize + (block == null ? 0 : block.offset); } public @Nullable Tile tile(){ @@ -142,6 +142,16 @@ public class BuildPlan{ return world.build(x, y); } + @Override + public float getX(){ + return drawx(); + } + + @Override + public float getY(){ + return drawy(); + } + @Override public String toString(){ return "BuildRequest{" + diff --git a/core/src/mindustry/entities/units/WeaponMount.java b/core/src/mindustry/entities/units/WeaponMount.java index 80bf713f20..e5f61679c7 100644 --- a/core/src/mindustry/entities/units/WeaponMount.java +++ b/core/src/mindustry/entities/units/WeaponMount.java @@ -1,6 +1,7 @@ package mindustry.entities.units; import arc.util.*; +import mindustry.audio.*; import mindustry.gen.*; import mindustry.type.*; @@ -25,6 +26,8 @@ public class WeaponMount{ public boolean side; /** current bullet for continuous weapons */ public @Nullable Bullet bullet; + /** sound loop for continuous weapons */ + public @Nullable SoundLoop sound; public WeaponMount(Weapon weapon){ this.weapon = weapon; diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 1ab946c4ac..43ae282d4c 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -17,14 +17,12 @@ public class EventType{ phaseDeflectHit, impactPower, thoriumReactorOverheat, - itemLaunch, fireExtinguish, newGame, tutorialComplete, flameAmmo, turretCool, enablePixelation, - drown, exclusionDeath, suicideBomb, openWiki, @@ -96,6 +94,22 @@ public class EventType{ } } + public static class SectorLaunchEvent{ + public final Sector sector; + + public SectorLaunchEvent(Sector sector){ + this.sector = sector; + } + } + + public static class SchematicCreateEvent{ + public final Schematic schematic; + + public SchematicCreateEvent(Schematic schematic){ + this.schematic = schematic; + } + } + public static class CommandIssueEvent{ public final Building tile; public final UnitCommand command; @@ -187,6 +201,34 @@ public class EventType{ } } + public static class PickupEvent{ + public final Unit carrier; + public final @Nullable Unit unit; + public final @Nullable Building build; + + public PickupEvent(Unit carrier, Unit unit){ + this.carrier = carrier; + this.unit = unit; + this.build = null; + } + + public PickupEvent(Unit carrier, Building build){ + this.carrier = carrier; + this.build = build; + this.unit = null; + } + } + + public static class UnitControlEvent{ + public final Player player; + public final @Nullable Unit unit; + + public UnitControlEvent(Player player, @Nullable Unit unit){ + this.player = player; + this.unit = unit; + } + } + public static class GameOverEvent{ public final Team winner; diff --git a/core/src/mindustry/game/GameStats.java b/core/src/mindustry/game/GameStats.java index 8108f2ddad..19d404c802 100644 --- a/core/src/mindustry/game/GameStats.java +++ b/core/src/mindustry/game/GameStats.java @@ -22,37 +22,12 @@ public class GameStats{ /** Friendly buildings destroyed. */ public int buildingsDestroyed; - //TODO fix - public RankResult calculateRank(Sector zone, boolean launched){ + //unused + public RankResult calculateRank(Sector sector){ float score = 0; - //TODO implement wave/attack mode based score - /* - if(launched && zone.getRules().attackMode){ - score += 3f; - }else if(wavesLasted >= zone.conditionWave){ - //each new launch period adds onto the rank 'points' - score += (float)((wavesLasted - zone.conditionWave) / zone.launchPeriod + 1) * 1.2f; - }*/ - - //TODO implement - int capacity = 3000;//zone.loadout.findCore().itemCapacity; - - //weigh used fractions - float frac = 0f; - Seq obtainable = zone.save == null ? new Seq<>() : zone.info.resources.select(i -> i instanceof Item).as(); - for(Item item : obtainable){ - frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size; - } - - score += frac * 1.6f; - - if(!launched){ - score *= 0.5f; - } - - int rankIndex = Mathf.clamp((int)(score), 0, Rank.values().length - 1); - Rank rank = Rank.values()[rankIndex]; + int rankIndex = Mathf.clamp((int)score, 0, Rank.all.length - 1); + Rank rank = Rank.all[rankIndex]; String sign = Math.abs((rankIndex + 0.5f) - score) < 0.2f || rank.name().contains("S") ? "" : (rankIndex + 0.5f) < score ? "-" : "+"; return new RankResult(rank, sign); @@ -70,6 +45,8 @@ public class GameStats{ } public enum Rank{ - F, D, C, B, A, S, SS + F, D, C, B, A, S, SS; + + public static final Rank[] all = values(); } } diff --git a/core/src/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java index 7fc844a180..acf7fad876 100644 --- a/core/src/mindustry/game/Objectives.java +++ b/core/src/mindustry/game/Objectives.java @@ -28,6 +28,26 @@ public class Objectives{ } } + public static class Produce implements Objective{ + public UnlockableContent content; + + public Produce(UnlockableContent content){ + this.content = content; + } + + protected Produce(){} + + @Override + public boolean complete(){ + return content.unlocked(); + } + + @Override + public String display(){ + return Core.bundle.format("requirement.produce", content.emoji() + " " + content.localizedName); + } + } + public static class SectorComplete extends SectorObjective{ public SectorComplete(SectorPreset zone){ @@ -38,7 +58,7 @@ public class Objectives{ @Override public boolean complete(){ - return preset.sector.save != null && preset.sector.save.meta.wave >= preset.captureWave; + return preset.sector.save != null && !preset.sector.isAttacked() && preset.sector.hasBase(); } @Override diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 2a927cc59b..c91a3fcb7f 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -32,8 +32,6 @@ public class Rules{ public boolean attackMode = false; /** Whether this is the editor gamemode. */ 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; /** Whether reactors can explode and damage other blocks. */ @@ -105,7 +103,7 @@ public class Rules{ /** Whether to use building AI. */ public boolean ai; /** TODO Tier of blocks/designs that the AI uses for building. [0, 1]*/ - public float aiTier = 0f; + public float aiTier = 1f; /** Whether, when AI is enabled, ships should be spawned from the core. */ public boolean aiCoreSpawn = true; /** If true, blocks don't require power or resources. */ diff --git a/core/src/mindustry/game/Saves.java b/core/src/mindustry/game/Saves.java index fcebb28a8f..c832f86471 100644 --- a/core/src/mindustry/game/Saves.java +++ b/core/src/mindustry/game/Saves.java @@ -77,7 +77,6 @@ public class Saves{ } public void update(){ - if(current != null && state.isGame() && !(state.isPaused() && Core.scene.hasDialog())){ if(lastTimestamp != 0){ @@ -86,15 +85,15 @@ public class Saves{ lastTimestamp = Time.millis(); } - if(state.isGame() && !state.gameOver && current != null && current.isAutosave() && !state.rules.tutorial){ + if(state.isGame() && !state.gameOver && current != null && current.isAutosave()){ time += Time.delta; if(time > Core.settings.getInt("saveinterval") * 60){ saving = true; try{ current.save(); - }catch(Throwable e){ - e.printStackTrace(); + }catch(Throwable t){ + Log.err(t); } Time.runTask(3f, () -> saving = false); @@ -218,7 +217,7 @@ public class Saves{ previewFile().writePNG(renderer.minimap.getPixmap()); requestedPreview = false; }catch(Throwable t){ - t.printStackTrace(); + Log.err(t); } }); } @@ -335,6 +334,9 @@ public class Saves{ } public void delete(){ + if(SaveIO.backupFileFor(file).exists()){ + SaveIO.backupFileFor(file).delete(); + } file.delete(); saves.remove(this, true); if(this == current){ diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 20fe7c36c4..7cd51ecec4 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -33,6 +33,7 @@ import mindustry.world.blocks.power.*; import mindustry.world.blocks.production.*; import mindustry.world.blocks.sandbox.*; import mindustry.world.blocks.storage.*; +import mindustry.world.meta.*; import java.io.*; import java.util.zip.*; @@ -107,13 +108,10 @@ public class Schematics implements Loadable{ if(shadowBuffer == null){ Core.app.post(() -> shadowBuffer = new FrameBuffer(maxSchematicSize + padding + 8, maxSchematicSize + padding + 8)); } - - //load base schematics - bases.load(); } private void loadLoadouts(){ - Seq.with(Loadouts.basicShard, Loadouts.basicFoundation, Loadouts.basicNucleus).each(s -> checkLoadout(s,false)); + Seq.with(Loadouts.basicShard, Loadouts.basicFoundation, Loadouts.basicNucleus).each(s -> checkLoadout(s, false)); } public void overwrite(Schematic target, Schematic newSchematic){ @@ -132,6 +130,7 @@ public class Schematics implements Loadable{ try{ write(newSchematic, target.file); }catch(Exception e){ + Log.err("Failed to overwrite schematic '@' (@)", newSchematic.name(), target.file); Log.err(e); ui.showException(e); } @@ -152,6 +151,7 @@ public class Schematics implements Loadable{ return s; }catch(Throwable e){ + Log.err("Failed to read schematic from file '@'", file); Log.err(e); } return null; @@ -187,6 +187,7 @@ public class Schematics implements Loadable{ try{ return getBuffer(schematic).getTexture(); }catch(Throwable t){ + Log.err("Failed to get preview for schematic '@' (@)", schematic.name(), schematic.file); Log.err(t); errored.add(schematic); return errorTexture; @@ -280,7 +281,7 @@ public class Schematics implements Loadable{ /** Creates an array of build requests from a schematic's data, centered on the provided x+y coordinates. */ public Seq toRequests(Schematic schem, int x, int y){ return schem.tiles.map(t -> new BuildPlan(t.x + x - schem.width/2, t.y + y - schem.height/2, t.rotation, t.block, t.config).original(t.x, t.y, schem.width, schem.height)) - .removeAll(s -> !s.block.isVisible() || !s.block.unlockedNow()); + .removeAll(s -> (!s.block.isVisible() && !(s.block instanceof CoreBlock)) || !s.block.unlockedNow()); } /** @return all the valid loadouts for a specific core type. */ @@ -288,12 +289,18 @@ public class Schematics implements Loadable{ return loadouts.get(block, Seq::new); } + public ObjectMap> getLoadouts(){ + return loadouts; + } + /** Checks a schematic for deployment validity and adds it to the cache. */ private void checkLoadout(Schematic s, boolean validate){ Stile core = s.tiles.find(t -> t.block instanceof CoreBlock); + int cores = s.tiles.count(t -> t.block instanceof CoreBlock); //make sure a core exists, and that the schematic is small enough. - if(core == null || (validate && (s.width > core.block.size + maxLoadoutSchematicPad *2 || s.height > core.block.size + maxLoadoutSchematicPad *2))) return; + if(core == null || (validate && (s.width > core.block.size + maxLoadoutSchematicPad *2 || s.height > core.block.size + maxLoadoutSchematicPad *2 + || s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly || !t.block.unlocked()) || cores > 1))) return; //place in the cache loadouts.get((CoreBlock)core.block, Seq::new).add(s); @@ -347,7 +354,7 @@ public class Schematics implements Loadable{ for(int cy = y; cy <= y2; cy++){ Building linked = world.build(cx, cy); - if(linked != null && linked.block.isVisible() && !(linked.block instanceof ConstructBlock)){ + if(linked != null && (linked.block.isVisible() || linked.block() instanceof CoreBlock) && !(linked.block instanceof ConstructBlock)){ int top = linked.block.size/2; int bot = linked.block.size % 2 == 1 ? -linked.block.size/2 : -(linked.block.size - 1)/2; minx = Math.min(linked.tileX() + bot, minx); @@ -376,7 +383,7 @@ public class Schematics implements Loadable{ Building tile = world.build(cx, cy); if(tile != null && !counted.contains(tile.pos()) && !(tile.block instanceof ConstructBlock) - && (tile.block.isVisible() || (tile.block instanceof CoreBlock))){ + && (tile.block.isVisible() || tile.block instanceof CoreBlock)){ Object config = tile.config(); tiles.add(new Stile(tile.block, tile.tileX() + offsetX, tile.tileY() + offsetY, config, (byte)tile.rotation)); @@ -411,13 +418,27 @@ public class Schematics implements Loadable{ } public static void placeLoadout(Schematic schem, int x, int y, Team team, Block resource){ + placeLoadout(schem, x, y, team, resource, true); + } + + public static void placeLoadout(Schematic schem, int x, int y, Team team, Block resource, boolean check){ Stile coreTile = schem.tiles.find(s -> s.block instanceof CoreBlock); + Seq seq = new Seq<>(); if(coreTile == null) throw new IllegalArgumentException("Loadout schematic has no core tile!"); 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; + //check for blocks that are in the way. + if(check && !(st.block instanceof CoreBlock)){ + seq.clear(); + tile.getLinkedTilesAs(st.block, seq); + if(seq.contains(t -> !t.block().alwaysReplace && !t.synthetic())){ + return; + } + } + tile.setBlock(st.block, team, st.rotation); Object config = st.config; diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 3b2b4df3dd..e8aa42262b 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -43,8 +43,12 @@ public class SectorInfo{ public boolean waves = true; /** Whether attack mode is enabled here. */ public boolean attack = false; + /** Whether this sector has any enemy spawns. */ + public boolean hasSpawns = true; /** Wave # from state */ public int wave = 1, winWave = -1; + /** Waves this sector can survive if under attack. Based on wave in info. <0 means uncalculated. */ + public int wavesSurvived = -1; /** Time between waves. */ public float waveSpacing = 60 * 60 * 2; /** Damage dealt to sector. */ @@ -57,6 +61,12 @@ public class SectorInfo{ public float secondsPassed; /** Display name. */ public @Nullable String name; + /** Displayed icon. */ + public @Nullable String icon; + /** Version of generated waves. When it doesn't match, new waves are generated. */ + public int waveVersion = -1; + /** Whether this sector was indicated to the player or not. */ + public boolean shown = false; /** Special variables for simulation. */ public float sumHealth, sumRps, sumDps, waveHealthBase, waveHealthSlope, waveDpsBase, waveDpsSlope; @@ -118,12 +128,17 @@ public class SectorInfo{ state.rules.winWave = winWave; state.rules.attackMode = attack; + //assign new wave patterns when the version changes + if(waveVersion != Waves.waveVersion && state.rules.sector.preset == null){ + state.rules.spawns = Waves.generate(state.rules.sector.threat); + } + CoreBuild entity = state.rules.defaultTeam.core(); if(entity != null){ entity.items.clear(); entity.items.add(items); //ensure capacity. - entity.items.each((i, a) -> entity.items.set(i, Math.min(a, entity.storageCapacity))); + entity.items.each((i, a) -> entity.items.set(i, Mathf.clamp(a, 0, entity.storageCapacity))); } } @@ -143,6 +158,7 @@ public class SectorInfo{ spawnPosition = entity.pos(); } + waveVersion = Waves.waveVersion; waveSpacing = state.rules.waveSpacing; wave = state.wave; winWave = state.rules.winWave; @@ -154,9 +170,9 @@ public class SectorInfo{ secondsPassed = 0; wavesPassed = 0; damage = 0; + hasSpawns = spawner.countSpawns() > 0; if(state.rules.sector != null){ - state.rules.sector.info = this; state.rules.sector.saveInfo(); } @@ -201,8 +217,7 @@ public class SectorInfo{ } //get item delta - //TODO is preventing negative production a good idea? - int delta = Math.max(ent == null ? 0 : coreItemCounts[item.id], 0); + int delta = coreItemCounts[item.id]; //store means stat.means.add(delta); diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 6a2972f074..da5edfd0db 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -133,10 +133,10 @@ public class Teams{ private void count(Unit unit){ unit.team.data().updateCount(unit.type, 1); - if(unit instanceof Payloadc){ - ((Payloadc)unit).payloads().each(p -> { - if(p instanceof UnitPayload){ - count(((UnitPayload)p).unit); + if(unit instanceof Payloadc payloadc){ + payloadc.payloads().each(p -> { + if(p instanceof UnitPayload payload){ + count(payload.unit); } }); } @@ -261,11 +261,12 @@ public class Teams{ } public void updateCount(UnitType type, int amount){ + if(type == null) return; unitCount = Math.max(amount + unitCount, 0); if(typeCounts == null || typeCounts.length <= type.id){ typeCounts = new int[Vars.content.units().size]; } - typeCounts [type.id] = Math.max(amount + typeCounts [type.id], 0); + typeCounts[type.id] = Math.max(amount + typeCounts[type.id], 0); } public QuadTree tree(){ diff --git a/core/src/mindustry/game/Tutorial.java b/core/src/mindustry/game/Tutorial.java deleted file mode 100644 index d3e5bae56c..0000000000 --- a/core/src/mindustry/game/Tutorial.java +++ /dev/null @@ -1,308 +0,0 @@ -package mindustry.game; - -import arc.*; -import arc.func.*; -import arc.graphics.g2d.*; -import arc.math.*; -import arc.scene.*; -import arc.scene.ui.*; -import arc.scene.ui.layout.*; -import arc.struct.*; -import arc.util.*; -import mindustry.content.*; -import mindustry.game.EventType.*; -import mindustry.gen.*; -import mindustry.graphics.*; -import mindustry.type.*; -import mindustry.world.*; - -import static mindustry.Vars.*; - -/** Handles tutorial state. */ -public class Tutorial{ - private static final int mineCopper = 18; - private static final int blocksToBreak = 3, blockOffset = -6; - - ObjectSet events = new ObjectSet<>(); - ObjectIntMap blocksPlaced = new ObjectIntMap<>(); - int sentence; - public TutorialStage stage = TutorialStage.values()[0]; - - public Tutorial(){ - Events.on(BlockBuildEndEvent.class, event -> { - if(!event.breaking){ - blocksPlaced.increment(event.tile.block(), 1); - } - }); - - Events.on(LineConfirmEvent.class, event -> events.add("lineconfirm")); - Events.on(TurretAmmoDeliverEvent.class, event -> events.add("ammo")); - Events.on(CoreItemDeliverEvent.class, event -> events.add("coreitem")); - Events.on(BlockInfoEvent.class, event -> events.add("blockinfo")); - Events.on(DepositEvent.class, event -> events.add("deposit")); - Events.on(WithdrawEvent.class, event -> events.add("withdraw")); - - Events.on(ClientLoadEvent.class, e -> { - for(TutorialStage stage : TutorialStage.values()){ - stage.load(); - } - }); - } - - /** update tutorial state, transition if needed */ - public void update(){ - if(stage.done.get() && !canNext()){ - next(); - }else{ - stage.update(); - } - } - - /** draw UI overlay */ - public void draw(){ - if(!Core.scene.hasDialog()){ - stage.draw(); - } - } - - /** Resets tutorial state. */ - public void reset(){ - stage = TutorialStage.values()[0]; - stage.begin(); - blocksPlaced.clear(); - events.clear(); - sentence = 0; - } - - /** Goes on to the next tutorial step. */ - public void next(){ - stage = TutorialStage.values()[Mathf.clamp(stage.ordinal() + 1, 0, TutorialStage.values().length)]; - stage.begin(); - blocksPlaced.clear(); - events.clear(); - sentence = 0; - } - - public boolean canNext(){ - return sentence + 1 < stage.sentences.size; - } - - public void nextSentence(){ - if(canNext()){ - sentence ++; - } - } - - public boolean canPrev(){ - return sentence > 0; - } - - public void prevSentence(){ - if(canPrev()){ - sentence --; - } - } - - public enum TutorialStage{ - intro( - line -> Core.bundle.format(line, item(Items.copper), mineCopper), - () -> item(Items.copper) >= mineCopper - ), - drill(() -> placed(Blocks.mechanicalDrill, 1)){ - void draw(){ - outline("category-production"); - outline("block-mechanical-drill"); - outline("confirmplace"); - } - }, - blockinfo(() -> event("blockinfo")){ - void draw(){ - outline("category-production"); - outline("block-mechanical-drill"); - outline("blockinfo"); - } - }, - conveyor(() -> placed(Blocks.conveyor, 2) && event("lineconfirm") && event("coreitem")){ - void draw(){ - outline("category-distribution"); - outline("block-conveyor"); - } - }, - turret(() -> placed(Blocks.duo, 1)){ - void draw(){ - outline("category-turret"); - outline("block-duo"); - } - }, - drillturret(() -> event("ammo")), - pause(() -> state.isPaused()){ - void draw(){ - if(mobile){ - outline("pause"); - } - } - }, - unpause(() -> !state.isPaused()){ - void draw(){ - if(mobile){ - outline("pause"); - } - } - }, - breaking(TutorialStage::blocksBroken){ - void begin(){ - placeBlocks(); - } - - void draw(){ - if(mobile){ - outline("breakmode"); - } - } - }, - withdraw(() -> event("withdraw")){ - void begin(){ - state.teams.playerCores().first().items.add(Items.copper, 10); - } - }, - deposit(() -> event("deposit")), - waves(() -> state.wave > 2 && state.enemies <= 0 && !spawner.isSpawning()){ - void begin(){ - state.rules.waveTimer = true; - logic.runWave(); - } - - void update(){ - if(state.wave > 2){ - state.rules.waveTimer = false; - } - } - }, - launch(() -> false){ - void begin(){ - state.rules.waveTimer = false; - state.wave = 5; - - //end tutorial, never show it again - Events.fire(Trigger.tutorialComplete); - Core.settings.put("playedtutorial", true); - } - - void draw(){ - outline("waves"); - } - },; - - protected String line = ""; - protected final Func text; - protected Seq sentences; - protected final Boolp done; - - TutorialStage(Func text, Boolp done){ - this.text = text; - this.done = done; - } - - TutorialStage(Boolp done){ - this(line -> line, done); - } - - /** displayed tutorial stage text.*/ - public String text(){ - if(sentences == null){ - load(); - } - String line = sentences.get(control.tutorial.sentence); - return line.contains("{") ? text.get(line) : line; - } - - void load(){ - this.line = Core.bundle.has("tutorial." + name() + ".mobile") && mobile ? "tutorial." + name() + ".mobile" : "tutorial." + name(); - this.sentences = Seq.select(Core.bundle.get(line).split("\n"), s -> !s.isEmpty()); - } - - /** called every frame when this stage is active.*/ - void update(){ - - } - - /** called when a stage begins.*/ - void begin(){ - - } - - /** called when a stage needs to draw itself, usually over highlighted UI elements. */ - void draw(){ - - } - - //utility - - static void placeBlocks(){ - Building core = state.teams.playerCores().first(); - for(int i = 0; i < blocksToBreak; i++){ - world.tile(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(){ - Building core = state.teams.playerCores().first(); - - for(int i = 0; i < blocksToBreak; i++){ - if(world.tile(core.tile.x + blockOffset, core.tile.y + i).block() == Blocks.scrapWall){ - return false; - } - } - return true; - } - - static boolean event(String name){ - return control.tutorial.events.contains(name); - } - - static boolean placed(Block block, int amount){ - return placed(block) >= amount; - } - - static int placed(Block block){ - return control.tutorial.blocksPlaced.get(block, 0); - } - - static int item(Item item){ - return state.rules.defaultTeam.data().noCores() ? 0 : state.rules.defaultTeam.core().items.get(item); - } - - static boolean toggled(String name){ - Element element = Core.scene.findVisible(name); - if(element instanceof Button){ - return ((Button)element).isChecked(); - } - return false; - } - - static void outline(String name){ - Element element = Core.scene.findVisible(name); - if(element != null && !toggled(name)){ - element.localToStageCoordinates(Tmp.v1.setZero()); - float sin = Mathf.sin(11f, Scl.scl(4f)); - Lines.stroke(Scl.scl(7f), Pal.place); - Lines.rect(Tmp.v1.x - sin, Tmp.v1.y - sin, element.getWidth() + sin*2, element.getHeight() + sin*2); - - float size = Math.max(element.getWidth(), element.getHeight()) + Mathf.absin(11f/2f, Scl.scl(18f)); - float angle = Angles.angle(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f, Tmp.v1.x + element.getWidth()/2f, Tmp.v1.y + element.getHeight()/2f); - Tmp.v2.trns(angle + 180f, size*1.4f); - float fs = Scl.scl(40f); - float fs2 = Scl.scl(56f); - - Draw.color(Pal.gray); - Drawf.tri(Tmp.v1.x + element.getWidth()/2f + Tmp.v2.x, Tmp.v1.y + element.getHeight()/2f + Tmp.v2.y, fs2, fs2, angle); - Draw.color(Pal.place); - Tmp.v2.setLength(Tmp.v2.len() - Scl.scl(4)); - Drawf.tri(Tmp.v1.x + element.getWidth()/2f + Tmp.v2.x, Tmp.v1.y + element.getHeight()/2f + Tmp.v2.y, fs, fs, angle); - Draw.reset(); - } - } - } - -} diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 9b1064a791..1b0b1fc10b 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -21,15 +21,22 @@ public class Universe{ private int turn; private float turnCounter; - private Schematic lastLoadout; + private @Nullable Schematic lastLoadout; private ItemSeq lastLaunchResources = new ItemSeq(); public Universe(){ load(); + //load legacy research + Events.on(ClientLoadEvent.class, e -> { + if(Core.settings.has("unlocks")){ + LegacyIO.readResearch(); + } + }); + //update base coverage on capture Events.on(SectorCaptureEvent.class, e -> { - if(state.isCampaign()){ + if(!net.client() && state.isCampaign()){ state.getSector().planet.updateBaseCoverage(); } }); @@ -84,7 +91,7 @@ public class Universe{ if(state.hasSector()){ //update sector light float light = state.getSector().getLight(); - float alpha = Mathf.clamp(Mathf.map(light, 0f, 0.8f, 0.1f, 1f)); + float alpha = Mathf.clamp(Mathf.map(light, 0f, 0.8f, 0.2f, 1f)); //assign and map so darkness is not 100% dark state.rules.ambientLight.a = 1f - alpha; @@ -92,6 +99,15 @@ public class Universe{ } } + public void clearLoadoutInfo(){ + lastLoadout = null; + lastLaunchResources = new ItemSeq(); + Core.settings.remove("launch-resources-seq"); + Core.settings.remove("lastloadout-core-shard"); + Core.settings.remove("lastloadout-core-nucleus"); + Core.settings.remove("lastloadout-core-foundation"); + } + public ItemSeq getLaunchResources(){ lastLaunchResources = Core.settings.getJson("launch-resources-seq", ItemSeq.class, ItemSeq::new); return lastLaunchResources; @@ -141,8 +157,11 @@ public class Universe{ //increment seconds passed for this sector by the time that just passed with this turn if(!sector.isBeingPlayed()){ - //increment time - sector.info.secondsPassed += turnDuration/60f; + + //increment time if attacked + if(sector.isAttacked()){ + sector.info.secondsPassed += turnDuration/60f; + } int wavesPassed = (int)(sector.info.secondsPassed*60f / sector.info.waveSpacing); boolean attacked = sector.info.waves; @@ -194,10 +213,10 @@ public class Universe{ } //queue random invasions - if(!sector.isAttacked() && turn > invasionGracePeriod){ + if(!sector.isAttacked() && turn > invasionGracePeriod && sector.info.hasSpawns){ //invasion chance depends on # of nearby bases - if(Mathf.chance(baseInvasionChance * sector.near().count(Sector::hasEnemyBase))){ - int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : 0) + Mathf.random(2, 5) * 5; + if(Mathf.chance(baseInvasionChance * Math.min(sector.near().count(Sector::hasEnemyBase), 1))){ + int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 5) * 5; //assign invasion-related things if(sector.isBeingPlayed()){ @@ -261,11 +280,6 @@ public class Universe{ private void load(){ seconds = Core.settings.getInt("utimei"); turn = Core.settings.getInt("turn"); - - if(Core.settings.has("unlocks")){ - LegacyIO.readResearch(); - Core.settings.remove("unlocks"); - } } } diff --git a/core/src/mindustry/game/DefaultWaves.java b/core/src/mindustry/game/Waves.java similarity index 79% rename from core/src/mindustry/game/DefaultWaves.java rename to core/src/mindustry/game/Waves.java index d33af5a41a..586fb285c1 100644 --- a/core/src/mindustry/game/DefaultWaves.java +++ b/core/src/mindustry/game/Waves.java @@ -9,7 +9,9 @@ import mindustry.type.*; import static mindustry.content.UnitTypes.*; -public class DefaultWaves{ +public class Waves{ + public static final int waveVersion = 3; + private Seq spawns; public Seq get(){ @@ -39,7 +41,7 @@ public class DefaultWaves{ unitScaling = 1.7f; spacing = 2; max = 4; - shieldScaling = 15f; + shieldScaling = 25f; }}, new SpawnGroup(pulsar){{ @@ -62,7 +64,7 @@ public class DefaultWaves{ unitScaling = 1; unitAmount = 4; spacing = 2; - shieldScaling = 10f; + shieldScaling = 20f; max = 14; }}, @@ -79,7 +81,8 @@ public class DefaultWaves{ spacing = 3; unitScaling = 1; max = 10; - shieldScaling = 10f; + shieldScaling = 30f; + shields = 100; effect = StatusEffects.overdrive; }}, @@ -178,7 +181,7 @@ public class DefaultWaves{ unitAmount = 2; unitScaling = 3; spacing = 4; - shieldScaling = 20; + shieldScaling = 30; }}, new SpawnGroup(atrax){{ @@ -186,7 +189,7 @@ public class DefaultWaves{ unitAmount = 4; unitScaling = 1; spacing = 3; - shieldScaling = 5f; + shieldScaling = 10f; }}, new SpawnGroup(scepter){{ @@ -194,7 +197,7 @@ public class DefaultWaves{ unitAmount = 1; unitScaling = 1; spacing = 30; - shieldScaling = 10f; + shieldScaling = 30f; }}, new SpawnGroup(reign){{ @@ -202,7 +205,7 @@ public class DefaultWaves{ unitAmount = 1; unitScaling = 1; spacing = 40; - shieldScaling = 20f; + shieldScaling = 30f; }}, new SpawnGroup(antumbra){{ @@ -210,7 +213,7 @@ public class DefaultWaves{ unitAmount = 1; unitScaling = 1; spacing = 40; - shieldScaling = 20f; + shieldScaling = 30f; }}, new SpawnGroup(vela){{ @@ -218,7 +221,7 @@ public class DefaultWaves{ unitAmount = 1; unitScaling = 1; spacing = 30; - shieldScaling = 20f; + shieldScaling = 30f; }}, new SpawnGroup(corvus){{ @@ -236,7 +239,7 @@ public class DefaultWaves{ unitScaling = 3; spacing = 4; shields = 40f; - shieldScaling = 20f; + shieldScaling = 30f; }}, new SpawnGroup(toxopid){{ @@ -252,20 +255,17 @@ public class DefaultWaves{ return spawns == null ? new Seq<>() : spawns; } - //TODO move elsewhere public static Seq generate(float difficulty){ - return generate(new Rand(), difficulty); + //apply power curve to make starting sectors easier + return generate(Mathf.pow(difficulty, 1.12f), new Rand(), false); } - //TODO move elsewhere - public static Seq generate(Rand rand, float difficulty){ + public static Seq generate(float difficulty, Rand rand, boolean attack){ UnitType[][] species = { {dagger, mace, fortress, scepter, reign}, {nova, pulsar, quasar, vela, corvus}, {crawler, atrax, spiroct, arkyid, toxopid}, - //{risso, minke, bryde, sei, omura}, //questionable choices - {poly, poly, mega, quad, quad}, - {flare, horizon, zenith, antumbra, eclipse} + {flare, horizon, zenith, rand.chance(0.5) ? quad : antumbra, rand.chance(0.1) ? quad : eclipse} }; //required progression: @@ -277,6 +277,7 @@ public class DefaultWaves{ int cap = 150; float shieldStart = 30, shieldsPerWave = 20 + difficulty*30f; + float[] scaling = {1, 1, 1.5f, 3f, 4f}; Intc createProgression = start -> { //main sequence @@ -285,18 +286,19 @@ public class DefaultWaves{ for(int i = start; i < cap;){ int f = i; - int next = rand.random(8, 16); + int next = rand.random(8, 16) + (int)Mathf.lerp(4f, 0f, difficulty) + curTier * 4; float shieldAmount = Math.max((i - shieldStart) * shieldsPerWave, 0); int space = start == 0 ? 1 : rand.random(1, 2); + int ctier = curTier; //main progression out.add(new SpawnGroup(curSpecies[Math.min(curTier, curSpecies.length - 1)]){{ - unitAmount = f == 0 ? 1 : 10; + unitAmount = f == start ? 1 : 6 / (int)scaling[ctier]; begin = f; end = f + next >= cap ? never : f + next; - max = 14; - unitScaling = rand.random(1f, 3f); + max = 13; + unitScaling = (difficulty < 0.4f ? rand.random(2.5f, 4f) : rand.random(1f, 4f)) * scaling[ctier]; shields = shieldAmount; shieldScaling = shieldsPerWave; spacing = space; @@ -304,18 +306,18 @@ public class DefaultWaves{ //extra progression that tails out, blends in out.add(new SpawnGroup(curSpecies[Math.min(curTier, curSpecies.length - 1)]){{ - unitAmount = 6; - begin = f + next; - end = f + next + rand.random(8, 12); - max = 11; - unitScaling = rand.random(2f); - spacing = rand.random(2, 3); - shields = shieldAmount; + unitAmount = 3 / (int)scaling[ctier]; + begin = f + next - 1; + end = f + next + rand.random(6, 10); + max = 6; + unitScaling = rand.random(1f, 2f); + spacing = rand.random(2, 4); + shields = shieldAmount/2f; shieldScaling = shieldsPerWave; }}); - i += next; - if(curTier < 3 || rand.chance(0.2)){ + i += next + 1; + if(curTier < 3 || (rand.chance(0.05) && difficulty > 0.8)){ curTier ++; } @@ -331,18 +333,20 @@ public class DefaultWaves{ createProgression.get(0); - int step = 5 + rand.random(3); + int step = 5 + rand.random(5); while(step <= cap){ createProgression.get(step); - step += (int)(rand.random(13, 25) * Mathf.lerp(1f, 0.5f, difficulty)); + step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty)); } - int bossWave = (int)(rand.random(30, 60) * Mathf.lerp(1f, 0.7f, difficulty)); + int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.5f, difficulty)); int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty)); + int bossTier = difficulty < 0.5 ? 3 : 4; + //main boss progression - out.add(new SpawnGroup(Structs.random(species)[4]){{ + out.add(new SpawnGroup(Structs.random(species)[bossTier]){{ unitAmount = 1; begin = bossWave; spacing = bossSpacing; @@ -354,7 +358,7 @@ public class DefaultWaves{ }}); //alt boss progression - out.add(new SpawnGroup(Structs.random(species)[4]){{ + out.add(new SpawnGroup(Structs.random(species)[bossTier]){{ unitAmount = 1; begin = bossWave + rand.random(3, 5) * bossSpacing; spacing = bossSpacing; @@ -368,7 +372,7 @@ public class DefaultWaves{ int finalBossStart = 120 + rand.random(30); //final boss waves - out.add(new SpawnGroup(Structs.random(species)[4]){{ + out.add(new SpawnGroup(Structs.random(species)[bossTier]){{ unitAmount = 1; begin = finalBossStart; spacing = bossSpacing/2; @@ -380,7 +384,7 @@ public class DefaultWaves{ }}); //final boss waves (alt) - out.add(new SpawnGroup(Structs.random(species)[4]){{ + out.add(new SpawnGroup(Structs.random(species)[bossTier]){{ unitAmount = 1; begin = finalBossStart + 15; spacing = bossSpacing/2; @@ -391,6 +395,21 @@ public class DefaultWaves{ effect = StatusEffects.boss; }}); + //add megas to heal the base. + if(attack && difficulty >= 0.5){ + int amount = Mathf.random(1, 3 + (int)(difficulty*2)); + + for(int i = 0; i < amount; i++){ + int wave = Mathf.random(3, 20); + out.add(new SpawnGroup(mega){{ + unitAmount = 1; + begin = wave; + end = wave; + max = 16; + }}); + } + } + //shift back waves on higher difficulty for a harder start int shift = Math.max((int)(difficulty * 15 - 5), 0); diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index afe2e3182b..a5a78811f5 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -23,7 +23,7 @@ public class BlockRenderer implements Disposable{ public static final int crackRegions = 8, maxCrackSize = 9; private static final int initialRequests = 32 * 32; - private static final int expandr = 9; + private static final int expandr = 10; private static final Color shadowColor = new Color(0, 0, 0, 0.71f); public final FloorRenderer floor = new FloorRenderer(); @@ -293,7 +293,7 @@ public class BlockRenderer implements Disposable{ entity.drawLight(); }else if(tile.block().emitLight){ tile.block().drawEnvironmentLight(tile); - }else if(tile.floor().emitLight){ + }else if(tile.floor().emitLight && !tile.block().solid && world.getDarkness(tile.x, tile.y) < 3){ //only draw floor light under non-solid blocks tile.floor().drawEnvironmentLight(tile); } } diff --git a/core/src/mindustry/graphics/CacheLayer.java b/core/src/mindustry/graphics/CacheLayer.java index b0273799e4..01ef5e5bff 100644 --- a/core/src/mindustry/graphics/CacheLayer.java +++ b/core/src/mindustry/graphics/CacheLayer.java @@ -62,20 +62,10 @@ public enum CacheLayer{ endShader(Shaders.space); } }, - normal(5), - walls(3); + normal, + walls; public static final CacheLayer[] all = values(); - /** Capacity multiplier. */ - public final int capacity; - - CacheLayer(){ - this(2); - } - - CacheLayer(int capacity){ - this.capacity = capacity; - } public void begin(){ diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index f1d45bebc3..b8d1f1e522 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -51,7 +51,7 @@ public class Drawf{ } private static boolean allowLight(Team team){ - return team == Team.derelict || team == Vars.player.team() || state.rules.enemyLights; + return renderer != null && (team == Team.derelict || team == Vars.player.team() || state.rules.enemyLights); } public static void selected(Building tile, Color color){ @@ -136,16 +136,24 @@ public class Drawf{ Draw.reset(); } - public static void square(float x, float y, float radius, Color color){ + public static void square(float x, float y, float radius, float rotation, Color color){ Lines.stroke(3f, Pal.gray); - Lines.square(x, y, radius + 1f, 45); + Lines.square(x, y, radius + 1f, rotation); Lines.stroke(1f, color); - Lines.square(x, y, radius + 1f, 45); + Lines.square(x, y, radius + 1f, rotation); Draw.reset(); } + public static void square(float x, float y, float radius, float rotation){ + square(x, y, radius, rotation, Pal.accent); + } + + public static void square(float x, float y, float radius, Color color){ + square(x, y, radius, 45, color); + } + public static void square(float x, float y, float radius){ - square(x, y, radius, Pal.accent); + square(x, y, radius, 45); } public static void arrow(float x, float y, float x2, float y2, float length, float radius){ diff --git a/core/src/mindustry/graphics/FloorRenderer.java b/core/src/mindustry/graphics/FloorRenderer.java index a3b7ff21c8..3e8d4e1fcb 100644 --- a/core/src/mindustry/graphics/FloorRenderer.java +++ b/core/src/mindustry/graphics/FloorRenderer.java @@ -32,7 +32,8 @@ public class FloorRenderer implements Disposable{ /**Queues up a cache change for a tile. Only runs in render loop. */ public void recacheTile(Tile tile){ - recacheSet.add(Point2.pack(tile.x / chunksize, tile.y / chunksize)); + //currently a no-op + //recacheSet.add(Point2.pack(tile.x / chunksize, tile.y / chunksize)); } public void drawFloor(){ @@ -216,7 +217,6 @@ public class FloorRenderer implements Disposable{ } Core.batch = current; - cbatch.reserve(layer.capacity * chunksize * chunksize); chunk[layer.ordinal()] = cbatch.endCache(); } diff --git a/core/src/mindustry/graphics/InverseKinematics.java b/core/src/mindustry/graphics/InverseKinematics.java index a920dc6527..133eae78ff 100644 --- a/core/src/mindustry/graphics/InverseKinematics.java +++ b/core/src/mindustry/graphics/InverseKinematics.java @@ -26,4 +26,4 @@ public class InverseKinematics{ return dist > 0 && dist < lengthA; } -} \ No newline at end of file +} diff --git a/core/src/mindustry/graphics/LightRenderer.java b/core/src/mindustry/graphics/LightRenderer.java index 0a05c7409b..ebf1cf9187 100644 --- a/core/src/mindustry/graphics/LightRenderer.java +++ b/core/src/mindustry/graphics/LightRenderer.java @@ -198,4 +198,4 @@ public class LightRenderer{ lights.clear(); } -} \ No newline at end of file +} diff --git a/core/src/mindustry/graphics/LoadRenderer.java b/core/src/mindustry/graphics/LoadRenderer.java index 35674837d6..ca66e601bf 100644 --- a/core/src/mindustry/graphics/LoadRenderer.java +++ b/core/src/mindustry/graphics/LoadRenderer.java @@ -48,7 +48,7 @@ public class LoadRenderer implements Disposable{ new Bar("s_proc#", OS.cores / 16f, OS.cores < 4), new Bar("c_aprog", () -> assets != null, () -> assets.getProgress(), () -> false), new Bar("g_vtype", graphics.getGLVersion().type == Type.GLES ? 0.5f : 1f, graphics.getGLVersion().type == Type.GLES), - new Bar("s_mem#", () -> true, () -> Core.app.getJavaHeap() / 1024f / 1024f / 200f, () -> Core.app.getJavaHeap() > 1024*1024*110), + new Bar("s_mem#", () -> true, () -> Core.app.getJavaHeap() / 1024f / 1024f / 200f, () -> Core.app.getJavaHeap() > 1024 * 1024 * 110), new Bar("v_ver#", () -> Version.build != 0, () -> Version.build == -1 ? 0.3f : (Version.build - 103f) / 10f, () -> !Version.modifier.equals("release")), new Bar("s_osv", OS.isWindows ? 0.35f : OS.isLinux ? 0.9f : OS.isMac ? 0.5f : 0.2f, OS.isMac), new Bar("v_worlds#", () -> Vars.control != null && Vars.control.saves != null, () -> Vars.control.saves.getSaveSlots().size / 30f, () -> Vars.control.saves.getSaveSlots().size > 30), @@ -463,7 +463,7 @@ public class LoadRenderer implements Disposable{ Font font = assets.get("tech"); font.setColor(Pal.accent); Draw.color(Color.black); - font.draw(red + "[[[[ " + key + " ]]\n"+orange+"<" + Version.modifier + " " + (Version.build == 0 ? " [init]" : Version.build == -1 ? " custom" : " " + Version.build) + ">", w/2f, h/2f + 110*s, Align.center); + font.draw(red + "[[[[ " + key + " ]]\n" + orange + "<" + Version.modifier + " " + (Version.build == 0 ? "[init]" : Version.buildString()) + ">", w/2f, h/2f + 110*s, Align.center); } Draw.flush(); diff --git a/core/src/mindustry/graphics/MenuRenderer.java b/core/src/mindustry/graphics/MenuRenderer.java index 2899efcdba..87ab169670 100644 --- a/core/src/mindustry/graphics/MenuRenderer.java +++ b/core/src/mindustry/graphics/MenuRenderer.java @@ -244,7 +244,7 @@ public class MenuRenderer implements Disposable{ float size = Math.max(icon.width, icon.height) * Draw.scl * 1.6f; flyers((x, y) -> { - Draw.rect(flyerType.region, x - 12f, y - 13f, flyerRot - 90); + Draw.rect(icon, x - 12f, y - 13f, flyerRot - 90); }); flyers((x, y) -> { @@ -264,7 +264,7 @@ public class MenuRenderer implements Disposable{ (engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f)) / 2f); Draw.color(); - Draw.rect(flyerType.region, x, y, flyerRot - 90); + Draw.rect(icon, x, y, flyerRot - 90); }); } diff --git a/core/src/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java index 1c34b4424e..b3c39bfa27 100644 --- a/core/src/mindustry/graphics/MinimapRenderer.java +++ b/core/src/mindustry/graphics/MinimapRenderer.java @@ -158,7 +158,7 @@ public class MinimapRenderer implements Disposable{ private int colorFor(Tile tile){ if(tile == null) return 0; int bc = tile.block().minimapColor(tile); - Color color = Tmp.c1.set(bc == 0 ? MapIO.colorFor(tile.floor(), tile.block(), tile.overlay(), tile.team()) : bc); + Color color = Tmp.c1.set(bc == 0 ? MapIO.colorFor(tile.block(), tile.floor(), tile.overlay(), tile.team()) : bc); color.mul(1f - Mathf.clamp(world.getDarkness(tile.x, tile.y) / 4f)); return color.rgba(); diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index 9bb3a95fa3..6cc1a1a851 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -28,7 +28,7 @@ public class OverlayRenderer{ if(player.dead()) return; if(player.isBuilder()){ - player.builder().drawBuildRequests(); + player.unit().drawBuildRequests(); } input.drawBottom(); @@ -36,7 +36,7 @@ public class OverlayRenderer{ public void drawTop(){ - if(!player.dead()){ + if(!player.dead() && ui.hudfrag.shown){ if(Core.settings.getBool("playerindicators")){ for(Player player : Groups.player){ if(Vars.player != player && Vars.player.team() == player.team()){ @@ -154,7 +154,7 @@ public class OverlayRenderer{ input.drawOverSelect(); - if(ui.hudfrag.blockfrag.hover() instanceof Unit unit && unit.controller() instanceof LogicAI ai && ai.controller instanceof Building build){ + if(ui.hudfrag.blockfrag.hover() instanceof Unit unit && unit.controller() instanceof LogicAI ai && ai.controller instanceof Building build && build.isValid()){ Drawf.square(build.x, build.y, build.block.size * tilesize/2f + 2f); if(!unit.within(build, unit.hitSize * 2f)){ Drawf.arrow(unit.x, unit.y, build.x, build.y, unit.hitSize *2f, 4f); @@ -171,7 +171,7 @@ public class OverlayRenderer{ Draw.reset(); Building tile = world.buildWorld(v.x, v.y); - if(tile != null && tile.interactable(player.team()) && tile.acceptStack(player.unit().item(), player.unit().stack.amount, player.unit()) > 0 && player.within(tile, itemTransferRange)){ + if(input.canDropItem() && tile != null && tile.interactable(player.team()) && tile.acceptStack(player.unit().item(), player.unit().stack.amount, player.unit()) > 0 && player.within(tile, itemTransferRange)){ Lines.stroke(3f, Pal.gray); Lines.square(tile.x, tile.y, tile.block.size * tilesize / 2f + 3 + Mathf.absin(Time.time(), 5f, 1f)); Lines.stroke(1f, Pal.place); diff --git a/core/src/mindustry/graphics/Pal.java b/core/src/mindustry/graphics/Pal.java index 8bb3cd9e70..1b2b10ff94 100644 --- a/core/src/mindustry/graphics/Pal.java +++ b/core/src/mindustry/graphics/Pal.java @@ -5,6 +5,8 @@ import arc.graphics.*; public class Pal{ public static Color + thoriumPink = Color.valueOf("f9a3c7"), + items = Color.valueOf("2ea756"), command = Color.valueOf("eab678"), @@ -96,5 +98,11 @@ public class Pal{ plasticSmoke = Color.valueOf("f1e479"), - adminChat = Color.valueOf("ff4000"); + adminChat = Color.valueOf("ff4000"), + + logicBlocks = Color.valueOf("d4816b"), + logicControl = Color.valueOf("6bb2b2"), + logicOperations = Color.valueOf("877bad"), + logicIo = Color.valueOf("a08a8a"), + logicUnits = Color.valueOf("c7b59d"); } diff --git a/core/src/mindustry/graphics/Shaders.java b/core/src/mindustry/graphics/Shaders.java index cefb7b1bab..fbe0404b9f 100644 --- a/core/src/mindustry/graphics/Shaders.java +++ b/core/src/mindustry/graphics/Shaders.java @@ -71,8 +71,8 @@ public class Shaders{ setUniformf("u_rcampos", Tmp.v31.set(camera.position).sub(planet.position)); setUniformf("u_light", planet.getLightNormal()); setUniformf("u_color", planet.atmosphereColor.r, planet.atmosphereColor.g, planet.atmosphereColor.b); - setUniformf("u_innerRadius", planet.radius + 0.02f); - setUniformf("u_outerRadius", planet.radius * 1.3f); + setUniformf("u_innerRadius", planet.radius + planet.atmosphereRadIn); + setUniformf("u_outerRadius", planet.radius + planet.atmosphereRadOut); setUniformMatrix4("u_model", planet.getTransform(mat).val); setUniformMatrix4("u_projection", camera.combined.val); diff --git a/core/src/mindustry/graphics/g3d/MeshBuilder.java b/core/src/mindustry/graphics/g3d/MeshBuilder.java index dc26cec9f5..89668e2858 100644 --- a/core/src/mindustry/graphics/g3d/MeshBuilder.java +++ b/core/src/mindustry/graphics/g3d/MeshBuilder.java @@ -77,8 +77,6 @@ public class MeshBuilder{ if(c.length > 5){ verts(c[0].v, c[4].v, c[5].v, nor, color); - }else{ - verts(c[0].v, c[3].v, c[4].v, nor, color); } } @@ -105,6 +103,7 @@ public class MeshBuilder{ private static Mesh end(){ Mesh last = mesh; + last.getVerticesBuffer().limit(last.getVerticesBuffer().position()); mesh = null; return last; } diff --git a/core/src/mindustry/graphics/g3d/PlanetGrid.java b/core/src/mindustry/graphics/g3d/PlanetGrid.java index 380f937658..9b72970087 100644 --- a/core/src/mindustry/graphics/g3d/PlanetGrid.java +++ b/core/src/mindustry/graphics/g3d/PlanetGrid.java @@ -188,23 +188,23 @@ public class PlanetGrid{ } static int pos(Ptile t, Ptile n){ - for(int i = 0; i < t.edgeCount; i++) - if(t.tiles[i] == n) - return i; + for(int i = 0; i < t.edgeCount; i++){ + if(t.tiles[i] == n) return i; + } return -1; } static int pos(Ptile t, Corner c){ - for(int i = 0; i < t.edgeCount; i++) - if(t.corners[i] == c) - return i; + for(int i = 0; i < t.edgeCount; i++){ + if(t.corners[i] == c) return i; + } return -1; } static int pos(Corner c, Corner n){ - for(int i = 0; i < 3; i++) - if(c.corners[i] == n) - return i; + for(int i = 0; i < 3; i++){ + if(c.corners[i] == n) return i; + } return -1; } diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 405d668333..46fcef4edf 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -18,10 +18,10 @@ import mindustry.type.*; public class PlanetRenderer implements Disposable{ public static final float outlineRad = 1.17f, camLength = 4f; public static final Color - outlineColor = Pal.accent.cpy().a(1f), - hoverColor = Pal.accent.cpy().a(0.5f), - borderColor = Pal.accent.cpy().a(0.3f), - shadowColor = new Color(0, 0, 0, 0.7f); + outlineColor = Pal.accent.cpy().a(1f), + hoverColor = Pal.accent.cpy().a(0.5f), + borderColor = Pal.accent.cpy().a(0.3f), + shadowColor = new Color(0, 0, 0, 0.7f); private static final Seq points = new Seq<>(); @@ -57,6 +57,7 @@ public class PlanetRenderer implements Disposable{ camPos.set(0, 0f, camLength); projector.setScaling(1f / 150f); cam.fov = 60f; + cam.far = 150f; } /** Render the entire planet scene to the screen. */ @@ -93,13 +94,15 @@ public class PlanetRenderer implements Disposable{ renderPlanet(solarSystem); + renderTransparent(solarSystem); + endBloom(); Events.fire(Trigger.universeDrawEnd); Gl.enable(Gl.blend); - irenderer.renderProjections(); + irenderer.renderProjections(planet); Gl.disable(Gl.cullFace); Gl.disable(Gl.depthTest); @@ -119,17 +122,27 @@ public class PlanetRenderer implements Disposable{ public void renderPlanet(Planet planet){ if(!planet.visible()) return; - + //render planet at offsetted position in the world planet.draw(cam.combined, planet.getTransform(mat)); renderOrbit(planet); + for(Planet child : planet.children){ + renderPlanet(child); + } + } + + public void renderTransparent(Planet planet){ + if(!planet.visible()) return; + if(planet.isLandable() && planet == this.planet){ renderSectors(planet); } if(planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){ + Gl.depthMask(false); + Blending.additive.apply(); Shaders.atmosphere.camera = cam; @@ -140,10 +153,12 @@ public class PlanetRenderer implements Disposable{ atmosphere.render(Shaders.atmosphere, Gl.triangles); Blending.normal.apply(); + + Gl.depthMask(true); } for(Planet child : planet.children){ - renderPlanet(child); + renderTransparent(child); } } @@ -152,7 +167,7 @@ public class PlanetRenderer implements Disposable{ Vec3 center = planet.parent.position; float radius = planet.orbitRadius; - int points = (int)(radius * 50); + int points = (int)(radius * 10); Angles.circleVectors(points, radius, (cx, cy) -> batch.vertex(Tmp.v32.set(center).add(cx, 0, cy), Pal.gray)); batch.flush(Gl.lineLoop); } @@ -177,17 +192,23 @@ public class PlanetRenderer implements Disposable{ } public void drawArc(Planet planet, Vec3 a, Vec3 b){ + drawArc(planet, a, b, Pal.accent, Color.clear, 1f); + } + public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length){ + drawArc(planet, a, b, from, to, length, 80f, 25); + } + + public void drawArc(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount){ Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f); - avg.setLength(planet.radius*2f); + avg.setLength(planet.radius*(1f+length)); points.clear(); points.addAll(Tmp.v33.set(b).setLength(outlineRad), Tmp.v31, Tmp.v34.set(a).setLength(outlineRad)); Tmp.bz3.set(points); - float points = 25; - for(int i = 0; i < points + 1; i++){ - float f = i / points; - Tmp.c1.set(Pal.accent).lerp(Color.clear, (f+Time.globalTime()/80f)%1f); + for(int i = 0; i < pointCount + 1; i++){ + float f = i / (float)pointCount; + Tmp.c1.set(from).lerp(to, (f+Time.globalTime()/timeScale)%1f); batch.color(Tmp.c1); batch.vertex(Tmp.bz3.valueAt(Tmp.v32, f)); @@ -312,6 +333,6 @@ public class PlanetRenderer implements Disposable{ public interface PlanetInterfaceRenderer{ void renderSectors(Planet planet); - void renderProjections(); + void renderProjections(Planet planet); } } diff --git a/core/src/mindustry/input/Binding.java b/core/src/mindustry/input/Binding.java index 75655412cb..0f1ecd4339 100644 --- a/core/src/mindustry/input/Binding.java +++ b/core/src/mindustry/input/Binding.java @@ -58,6 +58,8 @@ public enum Binding implements KeyBind{ fullscreen(KeyCode.f11), pause(KeyCode.space), minimap(KeyCode.m), + research(KeyCode.b), + planet_map(KeyCode.n), toggle_menus(KeyCode.c), screenshot(KeyCode.p), toggle_power_lines(KeyCode.f5), diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 049853c864..ddc84131ba 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -43,11 +43,11 @@ public class DesktopInput extends InputHandler{ /** Whether player is currently deleting removal requests. */ public boolean deleting = false, shouldShoot = false, panning = false; /** Mouse pan speed. */ - public float panScale = 0.005f, panSpeed = 4.5f, panBoostSpeed = 9f; + public float panScale = 0.005f, panSpeed = 4.5f, panBoostSpeed = 11f; @Override public void buildUI(Group group){ - + //respawn hints group.fill(t -> { t.visible(() -> Core.settings.getBool("hints") && ui.hudfrag.shown && !player.dead() && !player.unit().spawnedByCore() && !(Core.settings.getBool("hints") && lastSchematic != null && !selectRequests.isEmpty())); t.bottom(); @@ -57,12 +57,13 @@ public class DesktopInput extends InputHandler{ }).margin(6f); }); + //building hints group.fill(t -> { t.bottom(); t.visible(() -> { - t.color.a = Mathf.lerpDelta(t.color.a, player.builder().isBuilding() ? 1f : 0f, 0.15f); + t.color.a = Mathf.lerpDelta(t.color.a, player.unit().isBuilding() ? 1f : 0f, 0.15f); - return Core.settings.getBool("hints") && selectRequests.isEmpty() && t.color.a > 0.01f; + return ui.hudfrag.shown && Core.settings.getBool("hints") && selectRequests.isEmpty() && t.color.a > 0.01f; }); t.touchable(() -> t.color.a < 0.1f ? Touchable.disabled : Touchable.childrenOnly); t.table(Styles.black6, b -> { @@ -75,8 +76,9 @@ public class DesktopInput extends InputHandler{ }).margin(10f); }); + //schematic controls group.fill(t -> { - t.visible(() -> lastSchematic != null && !selectRequests.isEmpty()); + t.visible(() -> ui.hudfrag.shown && lastSchematic != null && !selectRequests.isEmpty()); t.bottom(); t.table(Styles.black6, b -> { b.defaults().left(); @@ -184,7 +186,7 @@ public class DesktopInput extends InputHandler{ boolean panCam = false; float camSpeed = (!Core.input.keyDown(Binding.boost) ? panSpeed : panBoostSpeed) * Time.delta; - if(input.keyDown(Binding.pan)){ + if(input.keyDown(Binding.pan) && !scene.hasField() && !scene.hasDialog()){ panCam = true; panning = true; } @@ -194,7 +196,7 @@ public class DesktopInput extends InputHandler{ } //TODO awful UI state checking code - if(((player.dead() || state.isPaused()) && !ui.chatfrag.shown()) && (!scene.hasField() && !scene.hasDialog())){ + if(((player.dead() || state.isPaused()) && !ui.chatfrag.shown()) && !scene.hasField() && !scene.hasDialog()){ if(input.keyDown(Binding.mouse_move)){ panCam = true; } @@ -235,8 +237,10 @@ public class DesktopInput extends InputHandler{ player.shooting = false; } - if(state.isGame() && Core.input.keyTap(Binding.minimap) && !scene.hasDialog() && !(scene.getKeyboardFocus() instanceof TextField)){ - ui.minimapfrag.toggle(); + if(state.isGame() && !scene.hasDialog() && !(scene.getKeyboardFocus() instanceof TextField)){ + if(Core.input.keyTap(Binding.minimap)) ui.minimapfrag.toggle(); + if(Core.input.keyTap(Binding.planet_map) && state.isCampaign()) ui.planet.toggle(); + if(Core.input.keyTap(Binding.research) && state.isCampaign()) ui.research.toggle(); } if(state.isMenu() || Core.scene.hasDialog()) return; @@ -279,7 +283,7 @@ public class DesktopInput extends InputHandler{ if(isPlacing() && mode == placing){ updateLine(selectX, selectY); - }else if(!selectRequests.isEmpty()){ + }else if(!selectRequests.isEmpty() && !ui.chatfrag.shown()){ rotateRequests(selectRequests, Mathf.sign(Core.input.axisTap(Binding.rotate))); } } @@ -291,7 +295,7 @@ public class DesktopInput extends InputHandler{ cursorType = cursor.build.getCursor(); } - if(isPlacing() || !selectRequests.isEmpty()){ + if((isPlacing() && player.isBuilder()) || !selectRequests.isEmpty()){ cursorType = SystemCursor.hand; } @@ -345,6 +349,10 @@ public class DesktopInput extends InputHandler{ ui.schematics.show(); }).tooltip("@schematics"); + table.button(Icon.book, Styles.clearPartiali, () -> { + ui.database.show(); + }).tooltip("@database"); + table.button(Icon.tree, Styles.clearPartiali, () -> { ui.research.show(); }).visible(() -> state.isCampaign()).tooltip("@research"); @@ -352,8 +360,6 @@ public class DesktopInput extends InputHandler{ table.button(Icon.map, Styles.clearPartiali, () -> { ui.planet.show(); }).visible(() -> state.isCampaign()).tooltip("@planetmap"); - - table.add(); } void pollInput(){ @@ -365,7 +371,7 @@ public class DesktopInput extends InputHandler{ int rawCursorX = World.toTile(Core.input.mouseWorld().x), rawCursorY = World.toTile(Core.input.mouseWorld().y); // automatically pause building if the current build queue is empty - if(Core.settings.getBool("buildautopause") && isBuilding && !player.builder().isBuilding()){ + if(Core.settings.getBool("buildautopause") && isBuilding && !player.unit().isBuilding()){ isBuilding = false; buildWasAutoPaused = true; } @@ -382,12 +388,12 @@ public class DesktopInput extends InputHandler{ schematicY += shiftY; } - if(Core.input.keyTap(Binding.deselect)){ - player.miner().mineTile(null); + if(Core.input.keyTap(Binding.deselect) && !isPlacing()){ + player.unit().mineTile = null; } if(Core.input.keyTap(Binding.clear_building)){ - player.builder().clearBuilding(); + player.unit().clearBuilding(); } if(Core.input.keyTap(Binding.schematic_select) && !Core.scene.hasKeyboard() && mode != breaking){ @@ -400,7 +406,6 @@ public class DesktopInput extends InputHandler{ ui.schematics.hide(); }else{ ui.schematics.show(); - ui.schematics.focusSearchField(); } } @@ -480,8 +485,8 @@ public class DesktopInput extends InputHandler{ deleting = true; }else if(selected != null){ //only begin shooting if there's no cursor event - if(!tileTapped(selected.build) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && (player.builder().plans().size == 0 || !player.builder().updateBuilding()) && !droppingItem && - !tryBeginMine(selected) && player.miner().mineTile() == null && !Core.scene.hasKeyboard()){ + if(!tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && !tileTapped(selected.build) && !player.unit().activelyBuilding() && !droppingItem && + !tryBeginMine(selected) && player.unit().mineTile == null && !Core.scene.hasKeyboard()){ player.shooting = shouldShoot; } }else if(!Core.scene.hasKeyboard()){ //if it's out of bounds, shooting is just fine @@ -506,7 +511,7 @@ public class DesktopInput extends InputHandler{ if(Core.input.keyDown(Binding.select) && mode == none && !isPlacing() && deleting){ BuildPlan req = getRequest(cursorX, cursorY); if(req != null && req.breaking){ - player.builder().plans().remove(req); + player.unit().plans().remove(req); } }else{ deleting = false; @@ -547,7 +552,7 @@ public class DesktopInput extends InputHandler{ if(sreq != null){ if(getRequest(sreq.x, sreq.y, sreq.block.size, sreq) != null){ - player.builder().plans().remove(sreq, true); + player.unit().plans().remove(sreq, true); } sreq = null; } @@ -601,16 +606,7 @@ public class DesktopInput extends InputHandler{ boolean omni = unit.type.omniMovement; boolean ground = unit.isGrounded(); - float strafePenalty = ground ? 1f : Mathf.lerp(1f, unit.type.strafePenalty, Angles.angleDist(unit.vel().angle(), unit.rotation()) / 180f); - float baseSpeed = unit.type.speed; - - //limit speed to minimum formation speed to preserve formation - if(unit.isCommanding()){ - //add a tiny multiplier to let units catch up just in case - baseSpeed = unit.minFormationSpeed * 0.95f; - } - - float speed = baseSpeed * Mathf.lerp(1f, unit.type.canBoost ? unit.type.boostMultiplier : 1f, unit.elevation) * strafePenalty; + float speed = unit.realSpeed(); float xa = Core.input.axis(Binding.move_x); float ya = Core.input.axis(Binding.move_y); boolean boosted = (unit instanceof Mechc && unit.isFlying()); @@ -626,9 +622,7 @@ public class DesktopInput extends InputHandler{ if(aimCursor){ unit.lookAt(mouseAngle); }else{ - if(!movement.isZero()){ - unit.lookAt(unit.vel.isZero() ? movement.angle() : unit.vel.angle()); - } + unit.lookAt(unit.prefRotation()); } if(omni){ @@ -649,7 +643,6 @@ public class DesktopInput extends InputHandler{ //update payload input if(unit instanceof Payloadc){ - if(Core.input.keyTap(Binding.pickupCargo)){ tryPickupPayload(); } @@ -660,7 +653,7 @@ public class DesktopInput extends InputHandler{ } //update commander unit - if(Core.input.keyTap(Binding.command)){ + if(Core.input.keyTap(Binding.command) && unit.type.commandLimit > 0){ Call.unitCommand(player); } } diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 99103da3d7..c2ab8423c9 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -46,14 +46,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ final static float playerSelectRange = mobile ? 17f : 11f; /** Maximum line length. */ final static int maxLength = 100; - final static Vec2 stackTrns = new Vec2(); final static Rect r1 = new Rect(), r2 = new Rect(); - final static Seq units = new Seq<>(); - /** Distance on the back from where items originate. */ - final static float backTrns = 3f; public final OverlayFragment frag = new OverlayFragment(); + public Interval controlInterval = new Interval(); public @Nullable Block block; public boolean overrideLineRotation; public int rotation; @@ -87,7 +84,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ to.addItem(item, removed); for(int j = 0; j < Mathf.clamp(removed / 3, 1, 8); j++){ - Time.run(j * 3f, () -> Call.transferItemEffect(item, build.x, build.y, to)); + Time.run(j * 3f, () -> transferItemEffect(item, build.x, build.y, to)); } } @@ -100,7 +97,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ @Remote(called = Loc.server, unreliable = true) public static void transferItemTo(Item item, int amount, float x, float y, Building build){ if(build == null || build.items == null) return; - for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){ + for(int i = 0; i < Mathf.clamp(amount / 5, 1, 8); i++){ Time.run(i * 3, () -> createItemTransfer(item, amount, x, y, build, () -> {})); } build.items.add(item, amount); @@ -126,29 +123,53 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ @Remote(called = Loc.server, targets = Loc.both, forward = true) public static void requestItem(Player player, Building tile, Item item, int amount){ if(player == null || tile == null || !tile.interactable(player.team()) || !player.within(tile, buildingRange) || player.dead()) return; - amount = Math.min(player.unit().maxAccepted(item), amount); - int fa = amount; - - if(amount == 0) return; if(net.server() && (!Units.canInteract(player, tile) || !netServer.admins.allowAction(player, ActionType.withdrawItem, tile.tile(), action -> { action.item = item; - action.itemAmount = fa; - }))) throw new ValidateException(player, "Player cannot request items."); - - int removed = tile.removeStack(item, amount); - - player.unit().addItem(item, removed); - Events.fire(new WithdrawEvent(tile, player, item, amount)); - for(int j = 0; j < Mathf.clamp(removed / 3, 1, 8); j++){ - Time.run(j * 3f, () -> Call.transferItemEffect(item, tile.x, tile.y, player.unit())); + action.itemAmount = amount; + }))){ + throw new ValidateException(player, "Player cannot request items."); } + + //remove item for every controlling unit + player.unit().eachGroup(unit -> { + Call.takeItems(tile, item, unit.maxAccepted(item), unit); + + if(unit == player.unit()){ + Events.fire(new WithdrawEvent(tile, player, item, amount)); + } + }); + } + + @Remote(targets = Loc.both, forward = true, called = Loc.server) + public static void transferInventory(Player player, Building tile){ + if(player == null || tile == null || !player.within(tile, buildingRange) || tile.items == null || player.dead()) return; + + if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, tile) || + !netServer.admins.allowAction(player, ActionType.depositItem, tile.tile, action -> { + action.itemAmount = player.unit().stack.amount; + action.item = player.unit().item(); + }))){ + throw new ValidateException(player, "Player cannot transfer an item."); + } + + //deposit for every controlling unit + player.unit().eachGroup(unit -> { + Item item = unit.item(); + int accepted = tile.acceptStack(item, unit.stack.amount, unit); + + Call.transferItemTo(unit, item, accepted, unit.x, unit.y, tile); + + if(unit == player.unit()){ + Events.fire(new DepositEvent(tile, player, item, accepted)); + } + }); } @Remote(variants = Variant.one) public static void removeQueueBlock(int x, int y, boolean breaking){ - player.builder().removeBuild(x, y, breaking); + player.unit().removeBuild(x, y, breaking); } @Remote(targets = Loc.both, called = Loc.server) @@ -276,37 +297,6 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ tile.noSleep(); } - @Remote(targets = Loc.both, forward = true, called = Loc.server) - public static void transferInventory(Player player, Building tile){ - if(player == null || tile == null || !player.within(tile, buildingRange) || tile.items == null || player.dead()) return; - - if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, tile) || - !netServer.admins.allowAction(player, ActionType.depositItem, tile.tile, action -> { - action.itemAmount = player.unit().stack.amount; - action.item = player.unit().item(); - }))){ - throw new ValidateException(player, "Player cannot transfer an item."); - } - - Item item = player.unit().item(); - int amount = player.unit().stack.amount; - int accepted = tile.acceptStack(item, amount, player.unit()); - player.unit().stack.amount -= accepted; - - Core.app.post(() -> Events.fire(new DepositEvent(tile, player, item, accepted))); - - tile.getStackOffset(item, stackTrns); - tile.handleStack(item, accepted, player.unit()); - - createItemTransfer( - item, - amount, - player.x + Angles.trnsx(player.unit().rotation + 180f, backTrns), player.y + Angles.trnsy(player.unit().rotation + 180f, backTrns), - new Vec2(tile.x + stackTrns.x, tile.y + stackTrns.y), - () -> {} - ); - } - @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void tileConfig(@Nullable Player player, Building tile, @Nullable Object value){ if(tile == null) return; @@ -329,8 +319,13 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public static void unitControl(Player player, @Nullable Unit unit){ if(player == null) return; + //make sure player is allowed to control the unit + if(net.server() && !netServer.admins.allowAction(player, ActionType.control, action -> action.unit = unit)){ + throw new ValidateException(player, "Player cannot control a unit."); + } + //clear player unit when they possess a core - if((unit instanceof BlockUnitc && ((BlockUnitc)unit).tile() instanceof CoreBuild)){ + if(unit instanceof BlockUnitc block && block.tile() instanceof CoreBuild build){ Fx.spawn.at(player); if(net.client()){ control.input.controlledType = null; @@ -338,8 +333,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ player.clearUnit(); player.deathTimer = 61f; - ((CoreBuild)((BlockUnitc)unit).tile()).requestSpawn(player); - + build.requestSpawn(player); }else if(unit == null){ //just clear the unit (is this used?) player.clearUnit(); //make sure it's AI controlled, so players can't overwrite each other @@ -353,6 +347,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Fx.unitSpirit.at(player.x, player.y, 0f, unit); } } + + Events.fire(new UnitControlEvent(player, unit)); } @Remote(targets = Loc.both, called = Loc.both, forward = true) @@ -369,6 +365,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public static void unitCommand(Player player){ if(player == null || player.dead() || !(player.unit() instanceof Commanderc commander)) return; + //make sure player is allowed to make the command + if(net.server() && !netServer.admins.allowAction(player, ActionType.command, action -> {})){ + throw new ValidateException(player, "Player cannot command a unit."); + } + if(commander.isCommanding()){ commander.clearCommand(); }else if(player.unit().type.commandLimit > 0){ @@ -382,7 +383,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public Eachable allRequests(){ return cons -> { - for(BuildPlan request : player.builder().plans()) cons.get(request); + for(BuildPlan request : player.unit().plans()) cons.get(request); for(BuildPlan request : selectRequests) cons.get(request); for(BuildPlan request : lineRequests) cons.get(request); }; @@ -400,7 +401,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ player.typing = ui.chatfrag.shown(); if(player.isBuilder()){ - player.builder().updateBuilding(isBuilding); + player.unit().updateBuilding(isBuilding); } if(player.shooting && !wasShooting && player.unit().hasWeapons() && state.rules.unitAmmo && player.unit().ammo <= 0){ @@ -417,7 +418,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type == controlledType && !u.dead); if(unit != null){ - Call.unitControl(player, unit); + //only trying controlling once a second to prevent packet spam + if(!net.client() || controlInterval.get(0, 70f)){ + Call.unitControl(player, unit); + } } } } @@ -542,6 +546,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ schematics.add(lastSchematic); ui.showInfoFade("@schematic.saved"); ui.schematics.showInfo(lastSchematic); + Events.fire(new SchematicCreateEvent(lastSchematic)); } }); } @@ -648,7 +653,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ return r2.overlaps(r1); }; - for(BuildPlan req : player.builder().plans()){ + for(BuildPlan req : player.unit().plans()){ if(test.get(req)) return req; } @@ -673,7 +678,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Draw.color(Pal.remove); Lines.stroke(1f); - for(BuildPlan req : player.builder().plans()){ + for(BuildPlan req : player.unit().plans()){ if(req.breaking) continue; if(req.bounds(Tmp.r2).overlaps(Tmp.r1)){ drawBreaking(req); @@ -735,7 +740,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ for(BuildPlan req : requests){ if(req.block != null && validPlace(req.x, req.y, req.block, req.rotation)){ BuildPlan copy = req.copy(); - player.builder().addBuild(copy); + player.unit().addBuild(copy); } } } @@ -773,7 +778,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ /** Remove everything from the queue in a selection. */ protected void removeSelection(int x1, int y1, int x2, int y2, boolean flush){ - removeSelection(x1, y1, x2, y2, false, maxLength); + removeSelection(x1, y1, x2, y2, flush, maxLength); } /** Remove everything from the queue in a selection. */ @@ -799,7 +804,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ //remove build requests Tmp.r1.set(result.x * tilesize, result.y * tilesize, (result.x2 - result.x) * tilesize, (result.y2 - result.y) * tilesize); - Iterator it = player.builder().plans().iterator(); + Iterator it = player.unit().plans().iterator(); while(it.hasNext()){ BuildPlan req = it.next(); if(!req.breaking && req.bounds(Tmp.r2).overlaps(Tmp.r1)){ @@ -920,7 +925,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ boolean tryBeginMine(Tile tile){ if(canMine(tile)){ //if a block is clicked twice, reset it - player.miner().mineTile(player.miner().mineTile() == tile ? null : tile); + player.unit().mineTile = player.unit().mineTile == tile ? null : tile; return true; } return false; @@ -928,10 +933,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ boolean canMine(Tile tile){ return !Core.scene.hasMouse() - && tile.drop() != null && player.miner().canMine(tile.drop()) - && !(tile.floor().playerUnmineable && tile.overlay().itemDrop == null) - && player.unit().acceptsItem(tile.drop()) - && tile.block() == Blocks.air && player.dst(tile.worldx(), tile.worldy()) <= miningRange; + && tile.drop() != null + && player.unit().validMine(tile) + && !(tile.floor().playerUnmineable && tile.overlay().itemDrop == null) + && player.unit().acceptsItem(tile.drop()) + && tile.block() == Blocks.air; } /** Returns the tile at the specified MOUSE coordinates. */ @@ -980,7 +986,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } public @Nullable Unit selectedUnit(){ - Unit unit = Units.closest(player.team(), Core.input.mouseWorld().x, Core.input.mouseWorld().y, 40f, u -> u.isAI()); + Unit unit = Units.closest(player.team(), Core.input.mouseWorld().x, Core.input.mouseWorld().y, 40f, Unitc::isAI); if(unit != null){ unit.hitbox(Tmp.r1); Tmp.r1.grow(6f); @@ -1038,7 +1044,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } public boolean canShoot(){ - return block == null && !onConfigurable() && !isDroppingItem() && !(player.builder().updateBuilding() && player.builder().isBuilding()) && + return block == null && !onConfigurable() && !isDroppingItem() && !player.unit().activelyBuilding() && !(player.unit() instanceof Mechc && player.unit().isFlying()); } @@ -1050,6 +1056,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ return droppingItem; } + public boolean canDropItem(){ + return droppingItem && !canTapPlayer(Core.input.mouseWorldX(), Core.input.mouseWorldY()); + } + public void tryDropItems(@Nullable Building tile, float x, float y){ if(!droppingItem || player.unit().stack.amount <= 0 || canTapPlayer(x, y) || state.isPaused() ){ droppingItem = false; @@ -1084,7 +1094,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } public boolean validPlace(int x, int y, Block type, int rotation, BuildPlan ignore){ - for(BuildPlan req : player.builder().plans()){ + for(BuildPlan req : player.unit().plans()){ if(req != ignore && !req.breaking && req.block.bounds(req.x, req.y, Tmp.r1).overlaps(type.bounds(x, y, Tmp.r2)) @@ -1102,15 +1112,15 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public void placeBlock(int x, int y, Block block, int rotation){ BuildPlan req = getRequest(x, y); if(req != null){ - player.builder().plans().remove(req); + player.unit().plans().remove(req); } - player.builder().addBuild(new BuildPlan(x, y, rotation, block, block.nextConfig())); + player.unit().addBuild(new BuildPlan(x, y, rotation, block, block.nextConfig())); } public void breakBlock(int x, int y){ Tile tile = world.tile(x, y); if(tile != null && tile.build != null) tile = tile.build.tile; - player.builder().addBuild(new BuildPlan(tile.x, tile.y)); + player.unit().addBuild(new BuildPlan(tile.x, tile.y)); } public void drawArrow(Block block, int x, int y, int rotation){ @@ -1156,7 +1166,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ if(block instanceof PowerNode){ Seq skip = new Seq<>(); - + for(int i = 1; i < points.size; i++){ int overlaps = 0; Point2 point = points.get(i); @@ -1196,7 +1206,14 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ line.x = point.x; line.y = point.y; if(!overrideLineRotation || diagonal){ - line.rotation = next != null ? Tile.relativeTo(point.x, point.y, next.x, next.y) : baseRotation; + if(next != null){ + line.rotation = Tile.relativeTo(point.x, point.y, next.x, next.y); + }else if(block.conveyorPlacement && i > 0){ + Point2 prev = points.get(i - 1); + line.rotation = Tile.relativeTo(prev.x, prev.y, point.x, point.y); + }else{ + line.rotation = baseRotation; + } }else{ line.rotation = rotation; } diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 63df6c151b..8baf077073 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -79,16 +79,13 @@ public class MobileInput extends InputHandler implements GestureListener{ Unit unit = Units.closestEnemy(player.team(), x, y, 20f, u -> !u.dead); if(unit != null){ - player.miner().mineTile(null); + player.unit().mineTile = null; target = unit; }else{ Building tile = world.buildWorld(x, y); - if(tile != null && player.team().isEnemy(tile.team)){ - player.miner().mineTile(null); - target = tile; - }else if(tile != null && player.unit().type.canHeal && tile.team == player.team() && tile.damaged()){ - player.miner().mineTile(null); + if((tile != null && player.team().isEnemy(tile.team) && tile.team != Team.derelict) || (tile != null && player.unit().type.canHeal && tile.team == player.team() && tile.damaged())){ + player.unit().mineTile = null; target = tile; } } @@ -117,7 +114,7 @@ public class MobileInput extends InputHandler implements GestureListener{ } } - for(BuildPlan req : player.builder().plans()){ + for(BuildPlan req : player.unit().plans()){ Tile other = world.tile(req.x, req.y); if(other == null || req.breaking) continue; @@ -205,7 +202,7 @@ public class MobileInput extends InputHandler implements GestureListener{ boolean arrow = block != null && block.rotate; i.getImage().setRotationOrigin(!arrow ? 0 : rotation * 90, Align.center); - i.getStyle().imageUp = arrow ? Icon.right : Icon.paste; + i.getStyle().imageUp = arrow ? Icon.right : Icon.copy; i.setChecked(!arrow && schematicMode); }); @@ -222,10 +219,10 @@ public class MobileInput extends InputHandler implements GestureListener{ BuildPlan copy = request.copy(); if(other == null){ - player.builder().addBuild(copy); + player.unit().addBuild(copy); }else if(!other.breaking && other.x == request.x && other.y == request.y && other.block.size == request.block.size){ - player.builder().plans().remove(other); - player.builder().addBuild(copy); + player.unit().plans().remove(other); + player.unit().addBuild(copy); } } @@ -248,14 +245,14 @@ public class MobileInput extends InputHandler implements GestureListener{ Boolp schem = () -> lastSchematic != null && !selectRequests.isEmpty(); group.fill(t -> { - t.visible(() -> (player.builder().isBuilding() || block != null || mode == breaking || !selectRequests.isEmpty()) && !schem.get()); + t.visible(() -> (player.unit().isBuilding() || block != null || mode == breaking || !selectRequests.isEmpty()) && !schem.get()); t.bottom().left(); t.button("@cancel", Icon.cancel, () -> { - player.builder().clearBuilding(); + player.unit().clearBuilding(); selectRequests.clear(); mode = none; block = null; - }).width(155f).margin(12f); + }).width(155f).height(50f).margin(12f); }); group.fill(t -> { @@ -327,7 +324,6 @@ public class MobileInput extends InputHandler implements GestureListener{ @Override public void drawTop(){ - //draw schematic selection if(mode == schematicSelect){ drawSelection(lineStartX, lineStartY, lastLineX, lastLineY, Vars.maxSchematicSize); @@ -613,7 +609,7 @@ public class MobileInput extends InputHandler implements GestureListener{ //reset payload target payloadTarget = null; //apply command on double tap when own unit is tapped - if(Mathf.within(worldx, worldy, player.unit().x, player.unit().y, player.unit().hitSize * 0.6f + 8f)){ + if(!player.dead() && Mathf.within(worldx, worldy, player.unit().x, player.unit().y, player.unit().hitSize * 0.6f + 8f) && player.unit().type.commandLimit > 0){ Call.unitCommand(player); }else{ //control a unit/block @@ -855,17 +851,8 @@ public class MobileInput extends InputHandler implements GestureListener{ targetPos.set(Core.camera.position); float attractDst = 15f; - float strafePenalty = legs ? 1f : Mathf.lerp(1f, type.strafePenalty, Angles.angleDist(unit.vel.angle(), unit.rotation) / 180f); - float baseSpeed = unit.type.speed; - - //limit speed to minimum formation speed to preserve formation - if(unit.isCommanding()){ - //add a tiny multiplier to let units catch up just in case - baseSpeed = unit.minFormationSpeed * 0.98f; - } - - float speed = baseSpeed * Mathf.lerp(1f, type.canBoost ? type.boostMultiplier : 1f, unit.elevation) * strafePenalty; + float speed = unit.realSpeed(); float range = unit.hasWeapons() ? unit.range() : 0f; float bulletSpeed = unit.hasWeapons() ? type.weapons.first().bullet.speed : 0f; float mouseAngle = unit.angleTo(unit.aimX(), unit.aimY()); @@ -874,9 +861,7 @@ public class MobileInput extends InputHandler implements GestureListener{ if(aimCursor){ unit.lookAt(mouseAngle); }else{ - if(unit.moving()){ - unit.lookAt(unit.vel.angle()); - } + unit.lookAt(unit.prefRotation()); } if(payloadTarget != null && unit instanceof Payloadc pay){ @@ -906,7 +891,7 @@ public class MobileInput extends InputHandler implements GestureListener{ if(player.within(targetPos, attractDst)){ movement.setZero(); - unit.vel.approachDelta(Vec2.ZERO, type.speed * type.accel / 2f); + unit.vel.approachDelta(Vec2.ZERO, unit.speed() * type.accel / 2f); } float expansion = 3f; @@ -929,7 +914,7 @@ public class MobileInput extends InputHandler implements GestureListener{ } //update shooting if not building + not mining - if(!player.builder().isBuilding() && player.miner().mineTile() == null){ + if(!player.unit().isBuilding() && player.unit().mineTile == null){ //autofire targeting if(manualShooting){ @@ -948,7 +933,9 @@ public class MobileInput extends InputHandler implements GestureListener{ } } - unit.aim(Tmp.v1.trns(unit.rotation, 1000f).add(unit)); + //when not shooting, aim at mouse cursor + //this may be a bad idea, aiming for a point far in front could work better, test it out + unit.aim(Core.input.mouseWorldX(), Core.input.mouseWorldY()); }else{ Vec2 intercept = Predict.intercept(unit, target, bulletSpeed); diff --git a/core/src/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java index d2c3eb7d41..1d713f7f75 100644 --- a/core/src/mindustry/input/Placement.java +++ b/core/src/mindustry/input/Placement.java @@ -188,7 +188,6 @@ public class Placement{ * @param maxLength maximum length of area */ public static NormalizeResult normalizeArea(int tilex, int tiley, int endx, int endy, int rotation, boolean snap, int maxLength){ - if(snap){ if(Math.abs(tilex - endx) > Math.abs(tiley - endy)){ endy = tiley; diff --git a/core/src/mindustry/io/MapIO.java b/core/src/mindustry/io/MapIO.java index f88ebf9a37..18f6a712bd 100644 --- a/core/src/mindustry/io/MapIO.java +++ b/core/src/mindustry/io/MapIO.java @@ -80,20 +80,13 @@ public class MapIO{ @Override public void setBlock(Block type){ super.setBlock(type); - int c = colorFor(Blocks.air, block(), Blocks.air, team()); + + int c = colorFor(block(), Blocks.air, Blocks.air, team()); if(c != black){ walls.draw(x, floors.getHeight() - 1 - y, c); floors.draw(x, floors.getHeight() - 1 - y + 1, shade); } } - - @Override - public void setTeam(Team team){ - super.setTeam(team); - if(block instanceof CoreBlock){ - map.teams.add(team.id); - } - } }; ver.region("content", stream, counter, ver::readContentHeader); @@ -107,6 +100,27 @@ public class MapIO{ world.setGenerating(false); } + @Override + public void onReadBuilding(){ + //read team colors + if(tile.build != null){ + int c = tile.build.team.color.rgba8888(); + int size = tile.block().size; + int offsetx = -(size - 1) / 2; + int offsety = -(size - 1) / 2; + for(int dx = 0; dx < size; dx++){ + for(int dy = 0; dy < size; dy++){ + int drawx = tile.x + dx + offsetx, drawy = tile.y + dy + offsety; + walls.draw(drawx, floors.getHeight() - 1 - drawy, c); + } + } + + if(tile.build.block instanceof CoreBlock){ + map.teams.add(tile.build.team.id); + } + } + } + @Override public Tile tile(int index){ tile.x = (short)(index % map.width); @@ -119,7 +133,7 @@ public class MapIO{ if(overlayID != 0){ floors.draw(x, floors.getHeight() - 1 - y, colorFor(Blocks.air, Blocks.air, content.block(overlayID), Team.derelict)); }else{ - floors.draw(x, floors.getHeight() - 1 - y, colorFor(content.block(floorID), Blocks.air, Blocks.air, Team.derelict)); + floors.draw(x, floors.getHeight() - 1 - y, colorFor(Blocks.air, content.block(floorID), Blocks.air, Team.derelict)); } if(content.block(overlayID) == Blocks.spawn){ map.spawns ++; @@ -141,17 +155,17 @@ public class MapIO{ for(int x = 0; x < pixmap.getWidth(); x++){ for(int y = 0; y < pixmap.getHeight(); y++){ Tile tile = tiles.getn(x, y); - pixmap.draw(x, pixmap.getHeight() - 1 - y, colorFor(tile.floor(), tile.block(), tile.overlay(), tile.team())); + pixmap.draw(x, pixmap.getHeight() - 1 - y, colorFor(tile.block(), tile.floor(), tile.overlay(), tile.team())); } } return pixmap; } - public static int colorFor(Block floor, Block wall, Block ore, Team team){ + public static int colorFor(Block wall, Block floor, Block overlay, Team team){ if(wall.synthetic()){ return team.color.rgba(); } - return (wall.solid ? wall.mapColor : ore == Blocks.air ? floor.mapColor : ore.mapColor).rgba(); + return (wall.solid ? wall.mapColor : !overlay.useColor ? floor.mapColor : overlay.mapColor).rgba(); } public static Pixmap writeImage(Tiles tiles){ diff --git a/core/src/mindustry/io/SaveFileReader.java b/core/src/mindustry/io/SaveFileReader.java index 0aef1a19df..69e1ea67cc 100644 --- a/core/src/mindustry/io/SaveFileReader.java +++ b/core/src/mindustry/io/SaveFileReader.java @@ -2,6 +2,7 @@ package mindustry.io; import arc.struct.*; import arc.struct.ObjectMap.*; +import arc.util.*; import arc.util.io.*; import mindustry.world.*; @@ -23,12 +24,12 @@ public abstract class SaveFileReader{ "spirit-factory", "legacy-unit-factory", "phantom-factory", "legacy-unit-factory", "wraith-factory", "legacy-unit-factory", - "ghoul-factory", "legacy-unit-factory", - "revenant-factory", "legacy-unit-factory", + "ghoul-factory", "legacy-unit-factory-air", + "revenant-factory", "legacy-unit-factory-air", "dagger-factory", "legacy-unit-factory", "crawler-factory", "legacy-unit-factory", - "titan-factory", "legacy-unit-factory", - "fortress-factory", "legacy-unit-factory", + "titan-factory", "legacy-unit-factory-ground", + "fortress-factory", "legacy-unit-factory-ground", "mass-conveyor", "payload-conveyor", "vestige", "scepter", @@ -60,9 +61,11 @@ public abstract class SaveFileReader{ protected final DataOutputStream dataBytesSmall = new DataOutputStream(byteOutputSmall); protected int lastRegionLength; + protected @Nullable CounterInputStream currCounter; - protected void region(String name, DataInput stream, CounterInputStream counter, IORunner cons) throws IOException{ + public void region(String name, DataInput stream, CounterInputStream counter, IORunner cons) throws IOException{ counter.resetCount(); + this.currCounter = counter; int length; try{ length = readChunk(stream, cons); @@ -70,12 +73,12 @@ public abstract class SaveFileReader{ throw new IOException("Error reading region \"" + name + "\".", e); } - if(length != counter.count() - 4){ - throw new IOException("Error reading region \"" + name + "\": read length mismatch. Expected: " + length + "; Actual: " + (counter.count() - 4)); + if(length != counter.count - 4){ + throw new IOException("Error reading region \"" + name + "\": read length mismatch. Expected: " + length + "; Actual: " + (counter.count - 4)); } } - protected void region(String name, DataOutput stream, IORunner cons) throws IOException{ + public void region(String name, DataOutput stream, IORunner cons) throws IOException{ try{ writeChunk(stream, cons); }catch(Throwable e){ @@ -153,7 +156,7 @@ public abstract class SaveFileReader{ public abstract void write(DataOutputStream stream) throws IOException; - protected interface IORunner{ + public interface IORunner{ void accept(T stream) throws IOException; } } diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index b76a5156e8..76e3b1cc5c 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -72,7 +72,7 @@ public abstract class SaveVersion extends SaveFileReader{ public void writeMeta(DataOutput stream, StringMap tags) throws IOException{ //prepare campaign data for writing if(state.isCampaign()){ - state.secinfo.prepare(); + state.rules.sector.info.prepare(); state.rules.sector.saveInfo(); } @@ -107,14 +107,9 @@ public abstract class SaveVersion extends SaveFileReader{ state.wavetime = map.getFloat("wavetime", state.rules.waveSpacing); state.stats = JsonIO.read(GameStats.class, map.get("stats", "{}")); state.rules = JsonIO.read(Rules.class, map.get("rules", "{}")); - if(state.rules.spawns.isEmpty()) state.rules.spawns = defaultWaves.get(); + if(state.rules.spawns.isEmpty()) state.rules.spawns = waves.get(); lastReadBuild = map.getInt("build", -1); - //load in sector info - if(state.rules.sector != null){ - state.secinfo = state.rules.sector.info; - } - if(!headless){ Tmp.v1.tryFromString(map.get("viewpos")); Core.camera.position.set(Tmp.v1); @@ -268,6 +263,8 @@ public abstract class SaveVersion extends SaveFileReader{ //skip the entity region, as the entity and its IO code are now gone skipChunk(stream, true); } + + context.onReadBuilding(); } }else if(hadData){ tile.setBlock(block); diff --git a/core/src/mindustry/io/TypeIO.java b/core/src/mindustry/io/TypeIO.java index 2c2c19dcfc..5eb9467e3c 100644 --- a/core/src/mindustry/io/TypeIO.java +++ b/core/src/mindustry/io/TypeIO.java @@ -333,7 +333,7 @@ public class TypeIO{ //1: prev controller was not a player, carry on //2: prev controller was a player, so replace this controller with *anything else* //...since AI doesn't update clientside it doesn't matter - return (!(prev instanceof AIController) || (prev instanceof FormationAI)) ? new GroundAI() : prev; + return (!(prev instanceof AIController) || (prev instanceof FormationAI) || (prev instanceof LogicAI)) ? new GroundAI() : prev; } } diff --git a/core/src/mindustry/io/legacy/LegacyIO.java b/core/src/mindustry/io/legacy/LegacyIO.java index 0bb84f3fc7..9ca0533855 100644 --- a/core/src/mindustry/io/legacy/LegacyIO.java +++ b/core/src/mindustry/io/legacy/LegacyIO.java @@ -2,6 +2,7 @@ package mindustry.io.legacy; import arc.*; import arc.struct.*; +import arc.util.*; import mindustry.*; import mindustry.ctype.*; import mindustry.ui.dialogs.JoinDialog.*; @@ -70,15 +71,14 @@ public class LegacyIO{ String name = stream.readUTF(); Content out = Vars.content.getByName(type, name); if(out instanceof UnlockableContent u){ - u.unlock(); + u.quietUnlock(); } } } } } }catch(Exception e){ - e.printStackTrace(); + Log.err(e); } } - } diff --git a/core/src/mindustry/io/legacy/LegacySaveVersion.java b/core/src/mindustry/io/legacy/LegacySaveVersion.java index a511868356..bb7d7eff11 100644 --- a/core/src/mindustry/io/legacy/LegacySaveVersion.java +++ b/core/src/mindustry/io/legacy/LegacySaveVersion.java @@ -26,7 +26,6 @@ public abstract class LegacySaveVersion extends SaveVersion{ if(!generating) context.begin(); try{ - context.resize(width, height); //read floor and create tiles first @@ -85,6 +84,8 @@ public abstract class LegacySaveVersion extends SaveVersion{ }catch(Throwable e){ throw new IOException("Failed to read tile entity of block: " + block, e); } + + context.onReadBuilding(); }else{ int consecutives = stream.readUnsignedByte(); diff --git a/core/src/mindustry/logic/DataType.java b/core/src/mindustry/logic/DataType.java deleted file mode 100644 index 49090d69f6..0000000000 --- a/core/src/mindustry/logic/DataType.java +++ /dev/null @@ -1,24 +0,0 @@ -package mindustry.logic; - -import arc.graphics.*; -import mindustry.graphics.*; - -/** The types of data a node field can be. */ -public enum DataType{ - /** A double. Used for integer calculations as well. */ - number(Pal.place), - /** Any type of content, e.g. item. */ - content(Color.cyan), - /** A building of a tile. */ - building(Pal.items), - /** A unit on the map. */ - unit(Pal.health), - /** Java string */ - string(Color.royal); - - public final Color color; - - DataType(Color color){ - this.color = color; - } -} \ No newline at end of file diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index 0d678554d1..ab1d7ca687 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -27,9 +27,13 @@ public enum LAccess{ shootX, shootY, shooting, + mineX, + mineY, + mining, team, type, flag, + controlled, name, config, payloadCount, @@ -38,12 +42,13 @@ public enum LAccess{ //values with parameters are considered controllable enabled("to"), //"to" is standard for single parameter access shoot("x", "y", "shoot"), - shootp(true, "unit", "shoot") - - ; + shootp(true, "unit", "shoot"), + configure(true, 30, "to"); public final String[] params; public final boolean isObj; + /** Tick cooldown between invocations. */ + public float cooldown = -1; public static final LAccess[] all = values(), @@ -59,4 +64,10 @@ public enum LAccess{ this.params = params; isObj = obj; } + + LAccess(boolean obj, float cooldown, String... params){ + this.params = params; + this.cooldown = cooldown; + isObj = obj; + } } diff --git a/core/src/mindustry/logic/LAssembler.java b/core/src/mindustry/logic/LAssembler.java index 57c2004320..e06927cca2 100644 --- a/core/src/mindustry/logic/LAssembler.java +++ b/core/src/mindustry/logic/LAssembler.java @@ -14,12 +14,13 @@ import mindustry.world.*; /** "Compiles" a sequence of statements into instructions. */ public class LAssembler{ public static ObjectMap> customParsers = new ObjectMap<>(); + public static final int maxTokenLength = 40; private int lastVar; /** Maps names to variable IDs. */ - ObjectMap vars = new ObjectMap<>(); + public ObjectMap vars = new ObjectMap<>(); /** All instructions to be executed. */ - LInstruction[] instructions; + public LInstruction[] instructions; public LAssembler(){ //instruction counter @@ -96,16 +97,18 @@ public class LAssembler{ if(data == null || data.isEmpty()) return new Seq<>(); Seq statements = new Seq<>(); - String[] lines = data.split("[;\n]+"); + String[] lines = data.split("\n"); int index = 0; for(String line : lines){ //comments - if(line.startsWith("#")) continue; + if(line.startsWith("#") || line.isEmpty()) continue; + //remove trailing semicolons in case someone adds them in for no reason + if(line.endsWith(";")) line = line.substring(0, line.length() - 1); if(index++ > max) break; line = line.replace("\t", "").trim(); - + try{ String[] arr; @@ -120,7 +123,7 @@ public class LAssembler{ if(c == '"'){ inString = !inString; }else if(c == ' ' && !inString){ - tokens.add(line.substring(lastIdx, i)); + tokens.add(line.substring(lastIdx, Math.min(i, lastIdx + maxTokenLength))); lastIdx = i + 1; } } diff --git a/core/src/mindustry/logic/LCanvas.java b/core/src/mindustry/logic/LCanvas.java index e16aab6621..92c8f61d53 100644 --- a/core/src/mindustry/logic/LCanvas.java +++ b/core/src/mindustry/logic/LCanvas.java @@ -18,14 +18,17 @@ import mindustry.graphics.*; import mindustry.ui.*; public class LCanvas extends Table{ + public static final int maxJumpsDrawn = 100; //ew static variables static LCanvas canvas; - DragLayout statements; + public DragLayout statements; + public ScrollPane pane; + public Group jumps; StatementElem dragging; - ScrollPane pane; - Group jumps; + StatementElem hovered; float targetWidth; + int jumpCount = 0; public LCanvas(){ canvas = this; @@ -69,18 +72,24 @@ public class LCanvas extends Table{ } } - void add(LStatement statement){ + @Override + public void draw(){ + jumpCount = 0; + super.draw(); + } + + public void add(LStatement statement){ statements.addChild(new StatementElem(statement)); } - String save(){ + public String save(){ Seq st = statements.getChildren().as().map(s -> s.st); st.each(LStatement::saveUI); return LAssembler.write(st); } - void load(String asm){ + public void load(String asm){ jumps.clear(); Seq statements = LAssembler.read(asm); @@ -97,10 +106,23 @@ public class LCanvas extends Table{ this.statements.layout(); } + StatementElem checkHovered(){ + Element e = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); + if(e != null){ + while(e != null && !(e instanceof StatementElem)){ + e = e.parent; + } + } + if(e == null || isDescendantOf(e)) return null; + return (StatementElem)e; + } + @Override public void act(float delta){ super.act(delta); + hovered = checkHovered(); + if(Core.input.isTouched()){ float y = Core.input.mouseY(); float dst = Math.min(y - this.y, Core.graphics.getHeight() - y); @@ -239,14 +261,14 @@ public class LCanvas extends Table{ } public class StatementElem extends Table{ - LStatement st; + public LStatement st; public StatementElem(LStatement st){ this.st = st; st.elem = this; background(Tex.whitePane); - setColor(st.category().color); + setColor(st.color()); margin(0f); touchable = Touchable.enabled; @@ -261,7 +283,7 @@ public class LCanvas extends Table{ t.add().growX(); t.button(Icon.copy, Styles.logici, () -> { - }).padRight(6).get().tapped(() -> copy()); + }).padRight(6).get().tapped(this::copy); t.button(Icon.cancel, Styles.logici, () -> { remove(); @@ -319,7 +341,7 @@ public class LCanvas extends Table{ marginBottom(7); } - void copy(){ + public void copy(){ LStatement copy = st.copy(); if(copy != null){ StatementElem s = new StatementElem(copy); @@ -351,9 +373,8 @@ public class LCanvas extends Table{ boolean selecting; float mx, my; ClickListener listener; - StatementElem hovered; - JumpCurve curve; + public JumpCurve curve; public JumpButton(Prov getter, Cons setter){ super(Tex.logicNode, Styles.colori); @@ -380,7 +401,7 @@ public class LCanvas extends Table{ @Override public void touchUp(InputEvent event, float x, float y, int pointer, KeyCode code){ localToStageCoordinates(Tmp.v1.set(x, y)); - StatementElem elem = hovered(); + StatementElem elem = canvas.hovered; if(elem != null && !isDescendantOf(elem)){ setter.get(elem); @@ -403,13 +424,6 @@ public class LCanvas extends Table{ curve = new JumpCurve(this); } - @Override - public void act(float delta){ - super.act(delta); - - hovered = hovered(); - } - @Override protected void setScene(Scene stage){ super.setScene(stage); @@ -420,21 +434,10 @@ public class LCanvas extends Table{ canvas.jumps.addChild(curve); } } - - StatementElem hovered(){ - Element e = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); - if(e != null){ - while(e != null && !(e instanceof StatementElem)){ - e = e.parent; - } - } - if(e == null || isDescendantOf(e)) return null; - return (StatementElem)e; - } } public static class JumpCurve extends Element{ - JumpButton button; + public JumpButton button; public JumpCurve(JumpButton button){ this.button = button; @@ -451,7 +454,13 @@ public class LCanvas extends Table{ @Override public void draw(){ - Element hover = button.to.get() == null && button.selecting ? button.hovered : button.to.get(); + canvas.jumpCount ++; + + if(canvas.jumpCount > maxJumpsDrawn && !button.selecting && !button.listener.isOver()){ + return; + } + + Element hover = button.to.get() == null && button.selecting ? canvas.hovered : button.to.get(); boolean draw = false; Vec2 t = Tmp.v1, r = Tmp.v2; @@ -483,19 +492,33 @@ public class LCanvas extends Table{ } } - void drawCurve(float x, float y, float x2, float y2){ + public void drawCurve(float x, float y, float x2, float y2){ Lines.stroke(4f, button.color); Draw.alpha(parentAlpha); float dist = 100f; + //square jumps + if(false){ + float len = Scl.scl(Mathf.randomSeed(hashCode(), 10, 50)); + + float maxX = Math.max(x, x2) + len; + + Lines.beginLine(); + Lines.linePoint(x, y); + Lines.linePoint(maxX, y); + Lines.linePoint(maxX, y2); + Lines.linePoint(x2, y2); + Lines.endLine(); + return; + } + Lines.curve( x, y, x + dist, y, x2 + dist, y2, x2, y2, - Math.max(20, (int)(Mathf.dst(x, y, x2, y2) / 6)) - ); + Math.max(18, (int)(Mathf.dst(x, y, x2, y2) / 6))); } } } diff --git a/core/src/mindustry/logic/LCategory.java b/core/src/mindustry/logic/LCategory.java deleted file mode 100644 index 849e2f64bd..0000000000 --- a/core/src/mindustry/logic/LCategory.java +++ /dev/null @@ -1,18 +0,0 @@ -package mindustry.logic; - -import arc.graphics.*; -import mindustry.graphics.*; - -public enum LCategory{ - blocks(Pal.accentBack), - control(Color.cyan.cpy().shiftSaturation(-0.6f).mul(0.7f)), - operations(Pal.place.cpy().shiftSaturation(-0.5f).mul(0.7f)), - io(Pal.remove.cpy().shiftSaturation(-0.5f).mul(0.7f)), - units(Pal.bulletYellowBack.cpy().shiftSaturation(-0.3f).mul(0.8f)); - - public final Color color; - - LCategory(Color color){ - this.color = color; - } -} \ No newline at end of file diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index be029c2305..244746ef81 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -15,6 +15,7 @@ import mindustry.game.Teams.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; +import mindustry.world.blocks.logic.*; import mindustry.world.blocks.logic.LogicDisplay.*; import mindustry.world.blocks.logic.MemoryBlock.*; import mindustry.world.blocks.logic.MessageBlock.*; @@ -31,15 +32,15 @@ public class LExecutor{ //special variables public static final int - varCounter = 0, - varTime = 1, - varUnit = 2, - varThis = 3; + varCounter = 0, + varTime = 1, + varUnit = 2, + varThis = 3; public static final int - maxGraphicsBuffer = 256, - maxDisplayBuffer = 1024, - maxTextBuffer = 256; + maxGraphicsBuffer = 256, + maxDisplayBuffer = 1024, + maxTextBuffer = 256; public LInstruction[] instructions = {}; public Var[] vars = {}; @@ -60,8 +61,9 @@ public class LExecutor{ vars[varTime].numval = Time.millis(); //reset to start - if(vars[varCounter].numval >= instructions.length - || vars[varCounter].numval < 0) vars[varCounter].numval = 0; + if(vars[varCounter].numval >= instructions.length || vars[varCounter].numval < 0){ + vars[varCounter].numval = 0; + } if(vars[varCounter].numval < instructions.length){ instructions[(int)(vars[varCounter].numval++)].run(this); @@ -83,9 +85,9 @@ public class LExecutor{ dest.constant = var.constant; - if(var.value instanceof Number){ + if(var.value instanceof Number number){ dest.isobj = false; - dest.numval = ((Number)var.value).doubleValue(); + dest.numval = number.doubleValue(); }else{ dest.isobj = true; dest.objval = var.value; @@ -97,7 +99,7 @@ public class LExecutor{ public @Nullable Building building(int index){ Object o = vars[index].objval; - return vars[index].isobj && o instanceof Building ? (Building)o : null; + return vars[index].isobj && o instanceof Building building ? building : null; } public @Nullable Object obj(int index){ @@ -197,11 +199,14 @@ public class LExecutor{ //bind to the next unit exec.setconst(varUnit, seq.get(index)); } - index ++; + index++; }else{ //no units of this type found exec.setconst(varUnit, null); } + }else if(exec.obj(type) instanceof Unit u && u.team == exec.team){ + //bind to specific unit object + exec.setconst(varUnit, u); }else{ exec.setconst(varUnit, null); } @@ -223,6 +228,7 @@ public class LExecutor{ this.outX = outX; this.outY = outY; this.outFound = outFound; + this.outBuild = outBuild; } public UnitLocateI(){ @@ -245,7 +251,7 @@ public class LExecutor{ switch(locate){ case ore -> { if(exec.obj(ore) instanceof Item item){ - res = indexer.findClosestOre(unit.x, unit.y, item); + res = indexer.findClosestOre(unit, item); } } case building -> { @@ -272,8 +278,9 @@ public class LExecutor{ cache.found = false; exec.setnum(outFound, 0); } - exec.setobj(outFound, res != null && res.build != null && res.build.team == exec.team ? res.build : null); + exec.setobj(outBuild, res != null && res.build != null && res.build.team == exec.team ? cache.build = res.build : null); }else{ + exec.setobj(outBuild, cache.build); exec.setbool(outFound, cache.found); exec.setnum(outX, cache.x); exec.setnum(outY, cache.y); @@ -284,20 +291,22 @@ public class LExecutor{ static class Cache{ float x, y; boolean found; + Building build; } } /** Controls the unit based on some parameters. */ public static class UnitControlI implements LInstruction{ public LUnitControl type = LUnitControl.move; - public int p1, p2, p3, p4; + public int p1, p2, p3, p4, p5; - public UnitControlI(LUnitControl type, int p1, int p2, int p3, int p4){ + public UnitControlI(LUnitControl type, int p1, int p2, int p3, int p4, int p5){ this.type = type; this.p1 = p1; this.p2 = p2; this.p3 = p3; this.p4 = p4; + this.p5 = p5; } public UnitControlI(){ @@ -312,13 +321,8 @@ public class LExecutor{ ((LogicAI)unit.controller()).controller = exec.building(varThis); //clear old state - if(unit instanceof Minerc miner){ - miner.mineTile(null); - } - - if(unit instanceof Builderc builder){ - builder.clearBuilding(); - } + unit.mineTile = null; + unit.clearBuilding(); return (LogicAI)unit.controller(); } @@ -348,12 +352,8 @@ public class LExecutor{ //stop mining/building if(type == LUnitControl.stop){ - if(unit instanceof Minerc miner){ - miner.mineTile(null); - } - if(unit instanceof Builderc build){ - build.clearBuilding(); - } + unit.mineTile = null; + unit.clearBuilding(); } } case within -> { @@ -381,8 +381,8 @@ public class LExecutor{ } case mine -> { Tile tile = world.tileWorld(x1, y1); - if(unit instanceof Minerc miner){ - miner.mineTile(miner.validMine(tile) ? tile : null); + if(unit.canMine()){ + unit.mineTile = unit.validMine(tile) ? tile : null; } } case payDrop -> { @@ -423,25 +423,25 @@ public class LExecutor{ } } case build -> { - if(unit instanceof Builderc builder && exec.obj(p3) instanceof Block block){ + if(unit.canBuild() && exec.obj(p3) instanceof Block block){ int x = World.toTile(x1), y = World.toTile(y1); int rot = exec.numi(p4); //reset state of last request when necessary - if(ai.plan.x != x || ai.plan.y != y || ai.plan.block != block || builder.plans().isEmpty()){ + if(ai.plan.x != x || ai.plan.y != y || ai.plan.block != block || unit.plans.isEmpty()){ ai.plan.progress = 0; ai.plan.initialized = false; ai.plan.stuck = false; } ai.plan.set(x, y, rot, block); - ai.plan.config = null; + ai.plan.config = exec.obj(p5) instanceof Content c ? c : null; - builder.clearBuilding(); + unit.clearBuilding(); if(ai.plan.tile() != null){ - builder.updateBuilding(true); - builder.addBuild(ai.plan); + unit.updateBuilding = true; + unit.addBuild(ai.plan); } } } @@ -462,9 +462,8 @@ public class LExecutor{ if(ai.itemTimer > 0) return; Building build = exec.building(p1); - int amount = exec.numi(p2); - int dropped = Math.min(unit.stack.amount, amount); - if(build != null && dropped > 0 && unit.within(build, logicItemTransferRange)){ + int dropped = Math.min(unit.stack.amount, exec.numi(p2)); + if(build != null && build.isValid() && dropped > 0 && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){ int accepted = build.acceptStack(unit.item(), dropped, unit); if(accepted > 0){ Call.transferItemTo(unit, unit.item(), accepted, unit.x, unit.y, build); @@ -478,7 +477,7 @@ public class LExecutor{ Building build = exec.building(p1); int amount = exec.numi(p3); - if(build != null && exec.obj(p2) instanceof Item item && unit.within(build, logicItemTransferRange)){ + if(build != null && build.isValid() && build.items != null && exec.obj(p2) instanceof Item item && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){ int taken = Math.min(build.items.get(item), Math.min(amount, unit.maxAccepted(item))); if(taken > 0){ @@ -498,6 +497,7 @@ public class LExecutor{ public int target; public LAccess type = LAccess.enabled; public int p1, p2, p3, p4; + public Interval timer = new Interval(1); public ControlI(LAccess type, int target, int p1, int p2, int p3, int p4){ this.type = type; @@ -513,7 +513,7 @@ public class LExecutor{ @Override public void run(LExecutor exec){ Object obj = exec.obj(target); - if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id)){ + if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id) && (type.cooldown <= 0 || timer.get(type.cooldown))){ if(type.isObj){ b.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4)); }else{ @@ -819,9 +819,15 @@ public class LExecutor{ //graphics on headless servers are useless. if(Vars.headless) return; + int num1 = exec.numi(p1); + + if(type == LogicDisplay.commandImage){ + num1 = exec.obj(p1) instanceof UnlockableContent u ? u.iconId : 0; + } + //add graphics calls, cap graphics buffer size if(exec.graphicsBuffer.size < maxGraphicsBuffer){ - exec.graphicsBuffer.add(DisplayCmd.get(type, exec.numi(x), exec.numi(y), exec.numi(p1), exec.numi(p2), exec.numi(p3), exec.numi(p4))); + exec.graphicsBuffer.add(DisplayCmd.get(type, exec.numi(x), exec.numi(y), num1, exec.numi(p2), exec.numi(p3), exec.numi(p4))); } } } @@ -872,10 +878,11 @@ public class LExecutor{ if(v.isobj && value != 0){ String strValue = v.objval == null ? "null" : - v.objval instanceof String ? (String)v.objval : + v.objval instanceof String s ? s : + v.objval instanceof MappableContent content ? content.name : v.objval instanceof Content ? "[content]" : - v.objval instanceof Building ? "[building]" : - v.objval instanceof Unit ? "[unit]" : + v.objval instanceof Building build ? build.block.name : + v.objval instanceof Unit unit ? unit.type.name : "[object]"; exec.textBuffer.append(strValue); diff --git a/core/src/mindustry/logic/LStatement.java b/core/src/mindustry/logic/LStatement.java index 9fdc6407ef..bf8637ac63 100644 --- a/core/src/mindustry/logic/LStatement.java +++ b/core/src/mindustry/logic/LStatement.java @@ -2,6 +2,7 @@ package mindustry.logic; import arc.*; import arc.func.*; +import arc.graphics.*; import arc.math.*; import arc.scene.*; import arc.scene.actions.*; @@ -21,7 +22,7 @@ public abstract class LStatement{ public transient @Nullable StatementElem elem; public abstract void build(Table table); - public abstract LCategory category(); + public abstract Color color(); public abstract LInstruction build(LAssembler builder); public LStatement copy(){ @@ -39,7 +40,7 @@ public abstract class LStatement{ protected Cell field(Table table, String value, Cons setter){ return table.field(value, Styles.nodeField, setter) - .size(144f, 40f).pad(2f).color(table.color).addInputDialog(); + .size(144f, 40f).pad(2f).color(table.color).maxTextLength(LAssembler.maxTokenLength).addInputDialog(); } protected Cell fields(Table table, String desc, String value, Cons setter){ diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 517d53bcc6..f7f5d2ea4f 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -8,6 +8,7 @@ import arc.scene.ui.layout.*; import mindustry.*; import mindustry.annotations.Annotations.*; import mindustry.gen.*; +import mindustry.graphics.*; import mindustry.logic.LCanvas.*; import mindustry.logic.LExecutor.*; import mindustry.type.*; @@ -29,8 +30,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.control; + public Color color(){ + return Pal.logicControl; } @Override @@ -47,8 +48,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.operations; + public Color color(){ + return Pal.logicOperations; } @Override @@ -79,8 +80,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.io; + public Color color(){ + return Pal.logicIo; } @Override @@ -111,8 +112,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.io; + public Color color(){ + return Pal.logicIo; } @Override @@ -143,6 +144,12 @@ public class LStatements{ if(type == GraphicsType.color){ p2 = "255"; } + + if(type == GraphicsType.image){ + p1 = "@copper"; + p2 = "32"; + p3 = "0"; + } rebuild(table); }, 2, cell -> cell.size(100, 50))); }, Styles.logict, () -> {}).size(90, 40).color(table.color).left().padLeft(2); @@ -205,6 +212,15 @@ public class LStatements{ fields(s, "x3", p3, v -> p3 = v); fields(s, "y3", p4, v -> p4 = v); } + case image -> { + fields(s, "x", x, v -> x = v); + fields(s, "y", y, v -> y = v); + row(s); + fields(s, "image", p1, v -> p1 = v); + fields(s, "size", p2, v -> p2 = v); + row(s); + fields(s, "rotation", p3, v -> p3 = v); + } } }).expand().left(); } @@ -218,8 +234,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.io; + public Color color(){ + return Pal.logicIo; } @Override @@ -243,8 +259,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.io; + public Color color(){ + return Pal.logicIo; } } @@ -259,8 +275,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.blocks; + public Color color(){ + return Pal.logicBlocks; } @Override @@ -280,8 +296,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.blocks; + public Color color(){ + return Pal.logicBlocks; } @Override @@ -304,8 +320,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.blocks; + public Color color(){ + return Pal.logicBlocks; } @Override @@ -357,8 +373,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.blocks; + public Color color(){ + return Pal.logicBlocks; } @Override @@ -428,8 +444,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.blocks; + public Color color(){ + return Pal.logicBlocks; } @Override @@ -531,8 +547,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.blocks; + public Color color(){ + return Pal.logicBlocks; } @Override @@ -556,8 +572,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.operations; + public Color color(){ + return Pal.logicOperations; } @Override @@ -614,8 +630,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.operations; + public Color color(){ + return Pal.logicOperations; } } @@ -632,8 +648,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.control; + public Color color(){ + return Pal.logicControl; } } @@ -697,8 +713,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.control; + public Color color(){ + return Pal.logicControl; } } @@ -735,8 +751,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.units; + public Color color(){ + return Pal.logicUnits; } @Override @@ -748,7 +764,7 @@ public class LStatements{ @RegisterStatement("ucontrol") public static class UnitControlStatement extends LStatement{ public LUnitControl type = LUnitControl.move; - public String p1 = "0", p2 = "0", p3 = "0", p4 = "0"; + public String p1 = "0", p2 = "0", p3 = "0", p4 = "0", p5 = "0"; @Override public void build(Table table){ @@ -777,20 +793,24 @@ public class LStatements{ int c = 0; for(int i = 0; i < type.params.length; i++){ - fields(table, type.params[i], i == 0 ? p1 : i == 1 ? p2 : i == 2 ? p3 : p4, i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : i == 2 ? v -> p3 = v : v -> p4 = v).width(110f); + fields(table, type.params[i], i == 0 ? p1 : i == 1 ? p2 : i == 2 ? p3 : i == 3 ? p4 : p5, i == 0 ? v -> p1 = v : i == 1 ? v -> p2 = v : i == 2 ? v -> p3 = v : i == 3 ? v -> p4 = v : v -> p5 = v).width(100f); if(++c % 2 == 0) row(table); + + if(i == 3){ + table.row(); + } } } @Override - public LCategory category(){ - return LCategory.units; + public Color color(){ + return Pal.logicUnits; } @Override public LInstruction build(LAssembler builder){ - return new UnitControlI(type, builder.var(p1), builder.var(p2), builder.var(p3), builder.var(p4)); + return new UnitControlI(type, builder.var(p1), builder.var(p2), builder.var(p3), builder.var(p4), builder.var(p5)); } } @@ -804,8 +824,8 @@ public class LStatements{ } @Override - public LCategory category(){ - return LCategory.units; + public Color color(){ + return Pal.logicUnits; } @Override @@ -861,7 +881,7 @@ public class LStatements{ table.table(ts -> { ts.color.set(table.color); - field(ts, ore, str -> ore = str); + fields(ts, ore, str -> ore = str); ts.button(b -> { b.image(Icon.pencilSmall); @@ -905,14 +925,16 @@ public class LStatements{ table.add(" found ").left(); fields(table, outFound, str -> outFound = str); - table.add(" building ").left(); - fields(table, outBuild, str -> outBuild = str); + if(locate != LLocate.ore){ + table.add(" building ").left(); + fields(table, outBuild, str -> outBuild = str); + } } @Override - public LCategory category(){ - return LCategory.units; + public Color color(){ + return Pal.logicUnits; } @Override diff --git a/core/src/mindustry/logic/LUnitControl.java b/core/src/mindustry/logic/LUnitControl.java index b4c7f8254c..41f00da025 100644 --- a/core/src/mindustry/logic/LUnitControl.java +++ b/core/src/mindustry/logic/LUnitControl.java @@ -14,7 +14,7 @@ public enum LUnitControl{ payTake("takeUnits"), mine("x", "y"), flag("value"), - build("x", "y", "block", "rotation"), + build("x", "y", "block", "rotation", "config"), getBlock("x", "y", "type", "building"), within("x", "y", "radius", "result"); diff --git a/core/src/mindustry/logic/LogicDialog.java b/core/src/mindustry/logic/LogicDialog.java index 44fcddd2c0..51b6468c77 100644 --- a/core/src/mindustry/logic/LogicDialog.java +++ b/core/src/mindustry/logic/LogicDialog.java @@ -11,7 +11,7 @@ import mindustry.ui.dialogs.*; import static mindustry.Vars.*; public class LogicDialog extends BaseDialog{ - LCanvas canvas; + public LCanvas canvas; Cons consumer = s -> {}; public LogicDialog(){ @@ -21,9 +21,11 @@ public class LogicDialog extends BaseDialog{ canvas = new LCanvas(); shouldPause = true; - addCloseButton(); - buttons.getCells().first().width(170f); + addCloseListener(); + + buttons.defaults().size(160f, 64f); + buttons.button("@back", Icon.left, this::hide).name("back"); buttons.button("@edit", Icon.edit, () -> { BaseDialog dialog = new BaseDialog("@editor.export"); @@ -51,7 +53,7 @@ public class LogicDialog extends BaseDialog{ dialog.addCloseButton(); dialog.show(); - }).width(170f); + }).name("edit"); buttons.button("@add", Icon.add, () -> { BaseDialog dialog = new BaseDialog("@add"); @@ -63,7 +65,7 @@ public class LogicDialog extends BaseDialog{ if(example instanceof InvalidStatement || example.hidden()) continue; TextButtonStyle style = new TextButtonStyle(Styles.cleart); - style.fontColor = example.category().color; + style.fontColor = example.color(); style.font = Fonts.outline; t.button(example.name(), style, () -> { @@ -75,13 +77,13 @@ public class LogicDialog extends BaseDialog{ }); dialog.addCloseButton(); dialog.show(); - }).width(170f).disabled(t -> canvas.statements.getChildren().size >= LExecutor.maxInstructions); + }).disabled(t -> canvas.statements.getChildren().size >= LExecutor.maxInstructions); - add(canvas).grow(); + add(canvas).grow().name("canvas"); row(); - add(buttons).growX(); + add(buttons).growX().name("canvas"); hidden(() -> consumer.get(canvas.save())); diff --git a/core/src/mindustry/logic/LogicOp.java b/core/src/mindustry/logic/LogicOp.java index 40d02a8345..658a7cdeb8 100644 --- a/core/src/mindustry/logic/LogicOp.java +++ b/core/src/mindustry/logic/LogicOp.java @@ -10,25 +10,28 @@ public enum LogicOp{ div("/", (a, b) -> a / b), idiv("//", (a, b) -> Math.floor(a / b)), mod("%", (a, b) -> a % b), + pow("^", Math::pow), + equal("==", (a, b) -> Math.abs(a - b) < 0.000001 ? 1 : 0, (a, b) -> Structs.eq(a, b) ? 1 : 0), notEqual("not", (a, b) -> Math.abs(a - b) < 0.000001 ? 0 : 1, (a, b) -> !Structs.eq(a, b) ? 1 : 0), + land("and", (a, b) -> a != 0 && b != 0 ? 1 : 0), lessThan("<", (a, b) -> a < b ? 1 : 0), lessThanEq("<=", (a, b) -> a <= b ? 1 : 0), greaterThan(">", (a, b) -> a > b ? 1 : 0), greaterThanEq(">=", (a, b) -> a >= b ? 1 : 0), - pow("^", Math::pow), + shl("<<", (a, b) -> (long)a << (long)b), shr(">>", (a, b) -> (long)a >> (long)b), or("or", (a, b) -> (long)a | (long)b), - and("and", (a, b) -> (long)a & (long)b), + and("b-and", (a, b) -> (long)a & (long)b), xor("xor", (a, b) -> (long)a ^ (long)b), + not("flip", a -> ~(long)(a)), + max("max", Math::max), min("min", Math::min), atan2("atan2", (x, y) -> Mathf.atan2((float)x, (float)y) * Mathf.radDeg), dst("dst", (x, y) -> Mathf.dst((float)x, (float)y)), noise("noise", LExecutor.noise::rawNoise2D), - - not("not", a -> ~(long)(a)), abs("abs", a -> Math.abs(a)), log("log", Math::log), log10("log10", Math::log10), @@ -38,9 +41,7 @@ public enum LogicOp{ floor("floor", Math::floor), ceil("ceil", Math::ceil), sqrt("sqrt", Math::sqrt), - rand("rand", d -> Mathf.rand.nextDouble() * d), - - ; + rand("rand", d -> Mathf.rand.nextDouble() * d); public static final LogicOp[] all = values(); diff --git a/core/src/mindustry/maps/Map.java b/core/src/mindustry/maps/Map.java index 0fdc818139..1f9ab65cdd 100644 --- a/core/src/mindustry/maps/Map.java +++ b/core/src/mindustry/maps/Map.java @@ -70,11 +70,11 @@ public class Map implements Comparable, Publishable{ } public Fi previewFile(){ - return Vars.mapPreviewDirectory.child((workshop ? file.parent().name() : file.nameWithoutExtension()) + ".png"); + return Vars.mapPreviewDirectory.child((workshop ? file.parent().name() : file.nameWithoutExtension()) + "_v2.png"); } public Fi cacheFile(){ - return Vars.mapPreviewDirectory.child(workshop ? file.parent().name() + "-workshop-cache.dat" : file.nameWithoutExtension() + "-cache.dat"); + return Vars.mapPreviewDirectory.child(workshop ? file.parent().name() + "-workshop-cache.dat" : file.nameWithoutExtension() + "-cache_v2.dat"); } public void setHighScore(int score){ @@ -101,7 +101,7 @@ public class Map implements Comparable, Publishable{ //this replacement is a MASSIVE hack but it fixes some incorrect overwriting of team-specific rules. //may need to be tweaked later Rules result = JsonIO.read(Rules.class, base, tags.get("rules", "{}").replace("teams:{2:{infiniteAmmo:true}},", "")); - if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get(); + if(result.spawns.isEmpty()) result.spawns = Vars.waves.get(); return result; }catch(Exception e){ //error reading rules. ignore? diff --git a/core/src/mindustry/maps/Maps.java b/core/src/mindustry/maps/Maps.java index fdd964408f..cd4020a07a 100644 --- a/core/src/mindustry/maps/Maps.java +++ b/core/src/mindustry/maps/Maps.java @@ -29,7 +29,7 @@ import static mindustry.Vars.*; public class Maps{ /** List of all built-in maps. Filenames only. */ - private static String[] defaultMapNames = {"maze", "fortress", "labyrinth", "islands", "tendrils", "caldera", "wasteland", "shattered", "fork", "triad", "mudFlats", "moltenLake", "veins", "glacier"}; + private static String[] defaultMapNames = {"maze", "fortress", "labyrinth", "islands", "tendrils", "caldera", "wasteland", "shattered", "fork", "triad", "mudFlats", "moltenLake", "archipelago", "debrisField", "veins", "glacier"}; /** Maps tagged as PvP */ static final String[] pvpMaps = {"veins", "glacier"}; /** All maps stored in an ordered array. */ @@ -302,6 +302,14 @@ public class Maps{ flooronto = Blocks.sand; block = Blocks.sandBoulder; }}, + new ScatterFilter(){{ + flooronto = Blocks.darksand; + block = Blocks.basaltBoulder; + }}, + new ScatterFilter(){{ + flooronto = Blocks.basalt; + block = Blocks.basaltBoulder; + }}, new ScatterFilter(){{ flooronto = Blocks.dacite; block = Blocks.daciteBoulder; diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index eaa42a8293..1fce5590e9 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -21,14 +21,30 @@ import mindustry.world.blocks.storage.*; import static mindustry.Vars.*; public class SectorDamage{ + public static final int maxRetWave = 30, maxWavesSimulated = 50; + //direct damage is for testing only private static final boolean direct = false, rubble = true; - private static final int maxWavesSimulated = 50; /** @return calculated capture progress of the enemy */ public static float getDamage(SectorInfo info){ + return getDamage(info, info.wavesPassed); + } + + /** @return calculated capture progress of the enemy */ + public static float getDamage(SectorInfo info, int wavesPassed){ + return getDamage(info, wavesPassed, false); + } + + /** @return maximum waves survived, up to maxRetWave. */ + public static int getWavesSurvived(SectorInfo info){ + return (int)getDamage(info, maxRetWave, true); + } + + /** @return calculated capture progress of the enemy if retWave if false, otherwise return the maximum waves survived as int. + * if it survives all the waves, returns maxRetWave. */ + public static float getDamage(SectorInfo info, int wavesPassed, boolean retWave){ float health = info.sumHealth; - int wavesPassed = info.wavesPassed; int wave = info.wave; float waveSpace = info.waveSpacing; @@ -39,7 +55,7 @@ public class SectorDamage{ int waveEnd = wave + wavesPassed; //do not simulate every single wave if there's too many - if(wavesPassed > maxWavesSimulated){ + if(wavesPassed > maxWavesSimulated && !retWave){ waveBegin = waveEnd - maxWavesSimulated; } @@ -59,9 +75,14 @@ public class SectorDamage{ float timeDestroyEnemy = dps <= 0.0001f ? Float.POSITIVE_INFINITY : enemyHealth / dps; //if dps == 0, this is infinity float timeDestroyBase = health / (enemyDps - rps); //if regen > enemyDps this is negative + //regenerating faster than the base can be damaged + if(timeDestroyBase < 0) continue; + //sector is lost, enemy took too long. if(timeDestroyEnemy > timeDestroyBase){ health = 0f; + //return current wave if simulating + if(retWave) return i - waveBegin; break; } @@ -76,19 +97,24 @@ public class SectorDamage{ } } + //survived everything + if(retWave){ + return maxRetWave; + } + return 1f - Mathf.clamp(health / info.sumHealth); } /** Applies wave damage based on sector parameters. */ public static void applyCalculatedDamage(){ //calculate base damage fraction - float damage = getDamage(state.secinfo); + float damage = getDamage(state.rules.sector.info); //scaled damage has a power component to make it seem a little more realistic (as systems fail, enemy capturing gets easier and easier) - float scaled = Mathf.pow(damage, 1.5f); + float scaled = Mathf.pow(damage, 1.6f); //apply damage to units - float unitDamage = damage * state.secinfo.sumHealth; + float unitDamage = damage * state.rules.sector.info.sumHealth; Tile spawn = spawner.getFirstSpawn(); //damage only units near the spawn point @@ -114,7 +140,7 @@ public class SectorDamage{ } } - if(state.secinfo.wavesPassed > 0){ + if(state.rules.sector.info.wavesPassed > 0){ //simply remove each block in the spawner range if a wave passed for(Tile spawner : spawner.getSpawns()){ spawner.circle((int)(state.rules.dropZoneRadius / tilesize), tile -> { @@ -207,7 +233,7 @@ public class SectorDamage{ //first, calculate the total health of blocks in the path //radius around the path that gets counted - int radius = 7; + int radius = 8; IntSet counted = new IntSet(); for(Tile t : sparse2){ @@ -245,7 +271,7 @@ public class SectorDamage{ } if(build.block instanceof ForceProjector f){ - sumHealth += f.breakage * e; + sumHealth += f.shieldHealth * e; sumRps += 1f * e; } } @@ -278,7 +304,7 @@ public class SectorDamage{ var reg = new LinearRegression(); Seq waveDps = new Seq<>(), waveHealth = new Seq<>(); - for(int wave = state.wave, i = 0; i < 3; wave += (1 + i++)){ + for(int wave = state.wave; wave < state.wave + 10; wave ++){ float sumWaveDps = 0f, sumWaveHealth = 0f; //first wave has to take into account current dps @@ -309,13 +335,12 @@ public class SectorDamage{ info.waveDpsSlope = reg.slope; //enemy units like to aim for a lot of non-essential things, so increase resulting health slightly - info.sumHealth = sumHealth * 1.2f; + info.sumHealth = sumHealth * 1.3f; //players tend to have longer range units/turrets, so assume DPS is higher - info.sumDps = sumDps * 1.5f; + info.sumDps = sumDps * 1.3f; info.sumRps = sumRps; - //finally, find an equation to put it all together and produce a 0-1 number - //due to the way most defenses are structured, this number will likely need a ^4 power or so + info.wavesSurvived = getWavesSurvived(info); } public static void apply(float fraction){ @@ -408,54 +433,57 @@ public class SectorDamage{ float falloff = (damage) / (Math.max(tiles.width, tiles.height) * Mathf.sqrt2); int peak = 0; - //phase two: propagate the damage - while(!frontier.isEmpty()){ - peak = Math.max(peak, frontier.size); - Tile tile = frontier.removeFirst(); - float currDamage = values[tile.x][tile.y] - falloff; + if(damage > 0.1f){ + //phase two: propagate the damage + while(!frontier.isEmpty()){ + peak = Math.max(peak, frontier.size); + Tile tile = frontier.removeFirst(); + float currDamage = values[tile.x][tile.y] - falloff; - for(int i = 0; i < 4; i++){ - int cx = tile.x + Geometry.d4x[i], cy = tile.y + Geometry.d4y[i]; + for(int i = 0; i < 4; i++){ + int cx = tile.x + Geometry.d4x[i], cy = tile.y + Geometry.d4y[i]; - //propagate to new tiles - if(tiles.in(cx, cy) && values[cx][cy] < currDamage){ - Tile other = tiles.getn(cx, cy); - float resultDamage = currDamage; + //propagate to new tiles + if(tiles.in(cx, cy) && values[cx][cy] < currDamage){ + Tile other = tiles.getn(cx, cy); + float resultDamage = currDamage; - //damage the tile if it's not friendly - if(other.build != null && other.team() != state.rules.waveTeam){ - resultDamage -= other.build.health(); + //damage the tile if it's not friendly + if(other.build != null && other.team() != state.rules.waveTeam){ + resultDamage -= other.build.health(); - if(direct){ - other.build.damage(currDamage); - }else{ //indirect damage happens at game load time - other.build.health -= currDamage; - //don't kill the core! - if(other.block() instanceof CoreBlock) other.build.health = Math.max(other.build.health, 1f); + if(direct){ + other.build.damage(currDamage); + }else{ //indirect damage happens at game load time + other.build.health -= currDamage; + //don't kill the core! + if(other.block() instanceof CoreBlock) other.build.health = Math.max(other.build.health, 1f); - //remove the block when destroyed - if(other.build.health < 0){ - //rubble - if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){ - Effect.rubble(other.build.x, other.build.y, other.block().size); + //remove the block when destroyed + if(other.build.health < 0){ + //rubble + if(rubble && !other.floor().solid && !other.floor().isLiquid && Mathf.chance(0.4)){ + Effect.rubble(other.build.x, other.build.y, other.block().size); + } + + other.build.addPlan(false); + other.remove(); } - - other.build.addPlan(false); - other.remove(); } + + }else if(other.solid() && !other.synthetic()){ //skip damage propagation through solid blocks + continue; } - }else if(other.solid() && !other.synthetic()){ //skip damage propagation through solid blocks - continue; - } - - if(resultDamage > 0 && values[cx][cy] < resultDamage){ - frontier.addLast(other); - values[cx][cy] = resultDamage; + if(resultDamage > 0 && values[cx][cy] < resultDamage){ + frontier.addLast(other); + values[cx][cy] = resultDamage; + } } } } } + } static float cost(Tile tile){ diff --git a/core/src/mindustry/maps/filters/ClearFilter.java b/core/src/mindustry/maps/filters/ClearFilter.java index 3769d7f77d..4da2564a79 100644 --- a/core/src/mindustry/maps/filters/ClearFilter.java +++ b/core/src/mindustry/maps/filters/ClearFilter.java @@ -11,7 +11,7 @@ public class ClearFilter extends GenerateFilter{ @Override public FilterOption[] options(){ - return Structs.arr(new BlockOption("block", () -> block, b -> block = b, wallsOnly)); + return Structs.arr(new BlockOption("block", () -> block, b -> block = b, b -> oresOnly.get(b) || wallsOnly.get(b))); } @Override @@ -20,5 +20,9 @@ public class ClearFilter extends GenerateFilter{ if(in.block == block){ in.block = Blocks.air; } + + if(in.overlay == block){ + in.overlay = Blocks.air; + } } } diff --git a/core/src/mindustry/maps/filters/DistortFilter.java b/core/src/mindustry/maps/filters/DistortFilter.java index 32c8f18a14..daedca1765 100644 --- a/core/src/mindustry/maps/filters/DistortFilter.java +++ b/core/src/mindustry/maps/filters/DistortFilter.java @@ -26,6 +26,6 @@ public class DistortFilter extends GenerateFilter{ in.floor = tile.floor(); if(!tile.block().synthetic() && !in.block.synthetic()) in.block = tile.block(); - in.ore = tile.overlay(); + in.overlay = tile.overlay(); } } diff --git a/core/src/mindustry/maps/filters/FilterOption.java b/core/src/mindustry/maps/filters/FilterOption.java index dedebfe713..1a867d8dee 100644 --- a/core/src/mindustry/maps/filters/FilterOption.java +++ b/core/src/mindustry/maps/filters/FilterOption.java @@ -20,9 +20,10 @@ public abstract class FilterOption{ public static final Boolf floorsOnly = b -> (b instanceof Floor && !(b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full)); public static final Boolf wallsOnly = b -> (!b.synthetic() && !(b instanceof Floor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full)) && b.inEditor; public static final Boolf floorsOptional = b -> b == Blocks.air || ((b instanceof Floor && !(b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full))); - public static final Boolf wallsOptional = b -> b == Blocks.air || ((!b.synthetic() && !(b instanceof Floor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full))); + public static final Boolf wallsOptional = b -> (b == Blocks.air || ((!b.synthetic() && !(b instanceof Floor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full)))) && b.inEditor; public static final Boolf wallsOresOptional = b -> b == Blocks.air || (((!b.synthetic() && !(b instanceof Floor)) || (b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full))) && b.inEditor; - public static final Boolf oresOnly = b -> b instanceof OverlayFloor && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full)); + public static final Boolf oresOnly = b -> b instanceof OverlayFloor && !headless && Core.atlas.isFound(b.icon(Cicon.full)); + public static final Boolf oresFloorsOptional = b -> (b instanceof Floor) && !headless && Core.atlas.isFound(b.icon(Cicon.full)); public static final Boolf anyOptional = b -> (floorsOnly.get(b) || wallsOnly.get(b) || oresOnly.get(b) || b == Blocks.air) && b.inEditor; public abstract void build(Table table); @@ -89,14 +90,14 @@ public abstract class FilterOption{ @Override public void build(Table table){ table.button(b -> b.image(supplier.get().icon(Cicon.small)).update(i -> ((TextureRegionDrawable)i.getDrawable()) - .setRegion(supplier.get() == Blocks.air ? Icon.block.getRegion() : supplier.get().icon(Cicon.small))).size(8 * 3), () -> { + .setRegion(supplier.get() == Blocks.air ? Icon.none.getRegion() : supplier.get().icon(Cicon.small))).size(8 * 3), () -> { BaseDialog dialog = new BaseDialog(""); dialog.setFillParent(false); int i = 0; for(Block block : Vars.content.blocks()){ if(!filter.get(block)) continue; - dialog.cont.image(block == Blocks.air ? Icon.block.getRegion() : block.icon(Cicon.medium)).size(8 * 4).pad(3).get().clicked(() -> { + dialog.cont.image(block == Blocks.air ? Icon.none.getRegion() : block.icon(Cicon.medium)).size(8 * 4).pad(3).get().clicked(() -> { consumer.get(block); dialog.hide(); changed.run(); diff --git a/core/src/mindustry/maps/filters/GenerateFilter.java b/core/src/mindustry/maps/filters/GenerateFilter.java index c884d5296e..6d7a00f3a9 100644 --- a/core/src/mindustry/maps/filters/GenerateFilter.java +++ b/core/src/mindustry/maps/filters/GenerateFilter.java @@ -5,7 +5,10 @@ import arc.math.*; import arc.scene.ui.*; import arc.util.*; import arc.util.noise.*; +import mindustry.*; +import mindustry.annotations.Annotations.*; import mindustry.content.*; +import mindustry.gen.*; import mindustry.world.*; public abstract class GenerateFilter{ @@ -15,15 +18,42 @@ public abstract class GenerateFilter{ public void apply(Tiles tiles, GenerateInput in){ this.in = in; - for(Tile tile : tiles){ - in.apply(tile.x, tile.y, tile.floor(), tile.block(), tile.overlay()); - apply(); - tile.setFloor(in.floor.asFloor()); - tile.setOverlay(!in.floor.asFloor().hasSurface() ? Blocks.air : in.ore); + if(isBuffered()){ + //buffer of tiles used, each tile packed into a long struct + long[] buffer = new long[tiles.width * tiles.height]; - if(!tile.block().synthetic() && !in.block.synthetic()){ - tile.setBlock(in.block); + //save to buffer + for(int i = 0; i < tiles.width * tiles.height; i++){ + Tile tile = tiles.geti(i); + buffer[i] = PackTile.get(tile.blockID(), tile.floorID(), tile.overlayID()); + } + + for(int i = 0; i < tiles.width * tiles.height; i++){ + Tile tile = tiles.geti(i); + long b = buffer[i]; + + in.apply(tile.x, tile.y, Vars.content.block(PackTile.block(b)), Vars.content.block(PackTile.floor(b)), Vars.content.block(PackTile.overlay(b))); + apply(); + + tile.setFloor(in.floor.asFloor()); + tile.setOverlay(!in.floor.asFloor().hasSurface() && in.overlay.asFloor().needsSurface ? Blocks.air : in.overlay); + + if(!tile.block().synthetic() && !in.block.synthetic()){ + tile.setBlock(in.block); + } + } + }else{ + for(Tile tile : tiles){ + in.apply(tile.x, tile.y, tile.block(), tile.floor(), tile.overlay()); + apply(); + + tile.setFloor(in.floor.asFloor()); + tile.setOverlay(!in.floor.asFloor().hasSurface() && in.overlay.asFloor().needsSurface ? Blocks.air : in.overlay); + + if(!tile.block().synthetic() && !in.block.synthetic()){ + tile.setBlock(in.block); + } } } } @@ -89,16 +119,16 @@ public abstract class GenerateFilter{ public int x, y, width, height; /** output parameters */ - public Block floor, block, ore; + public Block floor, block, overlay; Simplex noise = new Simplex(); RidgedPerlin pnoise = new RidgedPerlin(0, 1); TileProvider buffer; - public void apply(int x, int y, Block floor, Block block, Block ore){ + public void apply(int x, int y, Block block, Block floor, Block overlay){ this.floor = floor; this.block = block; - this.ore = ore; + this.overlay = overlay; this.x = x; this.y = y; } @@ -119,4 +149,9 @@ public abstract class GenerateFilter{ Tile get(int x, int y); } } + + @Struct + class PackTileStruct{ + short block, floor, overlay; + } } diff --git a/core/src/mindustry/maps/filters/MirrorFilter.java b/core/src/mindustry/maps/filters/MirrorFilter.java index 8d2e22bdbe..3ebdb45a71 100644 --- a/core/src/mindustry/maps/filters/MirrorFilter.java +++ b/core/src/mindustry/maps/filters/MirrorFilter.java @@ -39,7 +39,7 @@ public class MirrorFilter extends GenerateFilter{ if(!tile.block().synthetic()){ in.block = tile.block(); } - in.ore = tile.overlay(); + in.overlay = tile.overlay(); } } diff --git a/core/src/mindustry/maps/filters/NoiseFilter.java b/core/src/mindustry/maps/filters/NoiseFilter.java index 2953d3ca2e..63e98e3ad9 100644 --- a/core/src/mindustry/maps/filters/NoiseFilter.java +++ b/core/src/mindustry/maps/filters/NoiseFilter.java @@ -9,7 +9,7 @@ import static mindustry.maps.filters.FilterOption.*; public class NoiseFilter extends GenerateFilter{ float scl = 40, threshold = 0.5f, octaves = 3f, falloff = 0.5f; - Block floor = Blocks.stone, block = Blocks.stoneWall; + Block floor = Blocks.stone, block = Blocks.stoneWall, target = Blocks.air; @Override public FilterOption[] options(){ @@ -18,7 +18,8 @@ public class NoiseFilter extends GenerateFilter{ new SliderOption("threshold", () -> threshold, f -> threshold = f, 0f, 1f), new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f), new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f), - new BlockOption("floor", () -> floor, b -> floor = b, floorsOnly), + new BlockOption("target", () -> target, b -> target = b, anyOptional), + new BlockOption("floor", () -> floor, b -> floor = b, floorsOptional), new BlockOption("wall", () -> block, b -> block = b, wallsOptional) ); } @@ -27,9 +28,9 @@ public class NoiseFilter extends GenerateFilter{ public void apply(){ float noise = noise(in.x, in.y, scl, 1f, octaves, falloff); - if(noise > threshold){ - in.floor = floor; - if(in.block != Blocks.air) in.block = block; + if(noise > threshold && (target == Blocks.air || in.floor == target || in.block == target)){ + if(floor != Blocks.air) in.floor = floor; + if(block != Blocks.air && in.block != Blocks.air) in.block = block; } } } diff --git a/core/src/mindustry/maps/filters/OreFilter.java b/core/src/mindustry/maps/filters/OreFilter.java index 491bbf0123..7a2ff3ed38 100644 --- a/core/src/mindustry/maps/filters/OreFilter.java +++ b/core/src/mindustry/maps/filters/OreFilter.java @@ -9,7 +9,7 @@ import static mindustry.maps.filters.FilterOption.*; public class OreFilter extends GenerateFilter{ public float scl = 23, threshold = 0.81f, octaves = 2f, falloff = 0.3f; - public Block ore = Blocks.oreCopper; + public Block ore = Blocks.oreCopper, target = Blocks.air; @Override public FilterOption[] options(){ @@ -18,7 +18,8 @@ public class OreFilter extends GenerateFilter{ new SliderOption("threshold", () -> threshold, f -> threshold = f, 0f, 1f), new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f), new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f), - new BlockOption("ore", () -> ore, b -> ore = b, oresOnly) + new BlockOption("ore", () -> ore, b -> ore = b, oresOnly), + new BlockOption("target", () -> target, b -> target = b, oresFloorsOptional) ); } @@ -26,8 +27,8 @@ public class OreFilter extends GenerateFilter{ public void apply(){ float noise = noise(in.x, in.y, scl, 1f, octaves, falloff); - if(noise > threshold && in.ore != Blocks.spawn){ - in.ore = ore; + if(noise > threshold && in.overlay != Blocks.spawn && (target == Blocks.air || in.floor == target || in.overlay == target) && in.floor.asFloor().hasSurface()){ + in.overlay = ore; } } } diff --git a/core/src/mindustry/maps/filters/OreMedianFilter.java b/core/src/mindustry/maps/filters/OreMedianFilter.java index c9fd8d91c6..27a10548af 100644 --- a/core/src/mindustry/maps/filters/OreMedianFilter.java +++ b/core/src/mindustry/maps/filters/OreMedianFilter.java @@ -29,14 +29,14 @@ public class OreMedianFilter extends GenerateFilter{ @Override public void apply(){ - if(in.ore == Blocks.spawn) return; + if(in.overlay == Blocks.spawn) return; int cx = (in.x / 2) * 2; int cy = (in.y / 2) * 2; - if(in.ore != Blocks.air){ - if(!(in.tile(cx + 1, cy).overlay() == in.ore && in.tile(cx, cy).overlay() == in.ore && in.tile(cx + 1, cy + 1).overlay() == in.ore && in.tile(cx, cy + 1).overlay() == in.ore && + if(in.overlay != Blocks.air){ + if(!(in.tile(cx + 1, cy).overlay() == in.overlay && in.tile(cx, cy).overlay() == in.overlay && in.tile(cx + 1, cy + 1).overlay() == in.overlay && in.tile(cx, cy + 1).overlay() == in.overlay && !in.tile(cx + 1, cy).block().isStatic() && !in.tile(cx, cy).block().isStatic() && !in.tile(cx + 1, cy + 1).block().isStatic() && !in.tile(cx, cy + 1).block().isStatic())){ - in.ore = Blocks.air; + in.overlay = Blocks.air; } } @@ -58,6 +58,6 @@ public class OreMedianFilter extends GenerateFilter{ int index = Math.min((int)(blocks.size * percentile), blocks.size - 1); int overlay = blocks.get(index); - in.ore = Vars.content.block(overlay); + in.overlay = Vars.content.block(overlay); } } diff --git a/core/src/mindustry/maps/filters/ScatterFilter.java b/core/src/mindustry/maps/filters/ScatterFilter.java index 4b90275b1f..9cc809eeed 100644 --- a/core/src/mindustry/maps/filters/ScatterFilter.java +++ b/core/src/mindustry/maps/filters/ScatterFilter.java @@ -7,7 +7,7 @@ import mindustry.world.*; import static mindustry.maps.filters.FilterOption.*; public class ScatterFilter extends GenerateFilter{ - protected float chance = 0.014f; + protected float chance = 0.013f; protected Block flooronto = Blocks.air, floor = Blocks.air, block = Blocks.air; @Override @@ -27,7 +27,7 @@ public class ScatterFilter extends GenerateFilter{ if(!block.isOverlay()){ in.block = block; }else{ - in.ore = block; + in.overlay = block; } } diff --git a/core/src/mindustry/maps/filters/SpawnPathFilter.java b/core/src/mindustry/maps/filters/SpawnPathFilter.java new file mode 100644 index 0000000000..8384024186 --- /dev/null +++ b/core/src/mindustry/maps/filters/SpawnPathFilter.java @@ -0,0 +1,64 @@ +package mindustry.maps.filters; + +import arc.math.*; +import arc.struct.*; +import arc.util.*; +import mindustry.*; +import mindustry.ai.*; +import mindustry.content.*; +import mindustry.maps.filters.FilterOption.*; +import mindustry.world.*; +import mindustry.world.blocks.storage.*; + +import static mindustry.Vars.*; + +/** Selects X spawns from the spawn pool.*/ +public class SpawnPathFilter extends GenerateFilter{ + int radius = 3; + + @Override + public FilterOption[] options(){ + return Structs.arr( + new SliderOption("radius", () -> radius, f -> radius = (int)f, 1, 20).display() + ); + } + + @Override + public void apply(Tiles tiles, GenerateInput in){ + Tile core = null; + var spawns = new Seq(); + + for(Tile tile : tiles){ + if(tile.overlay() == Blocks.spawn){ + spawns.add(tile); + } + if(tile.block() instanceof CoreBlock && tile.team() != Vars.state.rules.waveTeam){ + core = tile; + } + } + + if(core != null && spawns.any()){ + for(var spawn : spawns){ + var path = Astar.pathfind(core.x, core.y, spawn.x, spawn.y, t -> t.solid() ? 100 : 1, Astar.manhattan, tile -> !tile.floor().isDeep()); + for(var tile : path){ + for(int x = -radius; x <= radius; x++){ + for(int y = -radius; y <= radius; y++){ + int wx = tile.x + x, wy = tile.y + y; + if(Structs.inBounds(wx, wy, world.width(), world.height()) && Mathf.within(x, y, radius)){ + Tile other = tiles.getn(wx, wy); + if(!other.synthetic()){ + other.setBlock(Blocks.air); + } + } + } + } + } + } + } + } + + @Override + public boolean isPost(){ + return true; + } +} diff --git a/core/src/mindustry/maps/filters/TerrainFilter.java b/core/src/mindustry/maps/filters/TerrainFilter.java index cc0ba82b54..e5da12a52f 100644 --- a/core/src/mindustry/maps/filters/TerrainFilter.java +++ b/core/src/mindustry/maps/filters/TerrainFilter.java @@ -10,7 +10,7 @@ import static mindustry.maps.filters.FilterOption.*; public class TerrainFilter extends GenerateFilter{ float scl = 40, threshold = 0.9f, octaves = 3f, falloff = 0.5f, magnitude = 1f, circleScl = 2.1f; - Block floor = Blocks.stone, block = Blocks.stoneWall; + Block floor = Blocks.air, block = Blocks.stoneWall; @Override public FilterOption[] options(){ @@ -21,7 +21,7 @@ public class TerrainFilter extends GenerateFilter{ new SliderOption("circle-scale", () -> circleScl, f -> circleScl = f, 0f, 3f), new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f), new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f), - new BlockOption("floor", () -> floor, b -> floor = b, floorsOnly), + new BlockOption("floor", () -> floor, b -> floor = b, floorsOptional), new BlockOption("wall", () -> block, b -> block = b, wallsOnly) ); } @@ -30,13 +30,12 @@ public class TerrainFilter extends GenerateFilter{ public void apply(){ float noise = noise(in.x, in.y, scl, magnitude, octaves, falloff) + Mathf.dst((float)in.x / in.width, (float)in.y / in.height, 0.5f, 0.5f) * circleScl; - in.floor = floor; - in.ore = Blocks.air; + if(floor != Blocks.air){ + in.floor = floor; + } if(noise >= threshold){ in.block = block; - }else{ - in.block = Blocks.air; } } } diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java index 3a28078f74..8a5bf215ab 100644 --- a/core/src/mindustry/maps/generators/BaseGenerator.java +++ b/core/src/mindustry/maps/generators/BaseGenerator.java @@ -5,6 +5,7 @@ import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.*; +import mindustry.ai.*; import mindustry.ai.BaseRegistry.*; import mindustry.content.*; import mindustry.game.*; @@ -13,6 +14,7 @@ import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.defense.*; +import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.power.*; import mindustry.world.blocks.production.*; import mindustry.world.meta.*; @@ -22,7 +24,7 @@ import static mindustry.Vars.*; public class BaseGenerator{ private static final Vec2 axis = new Vec2(), rotator = new Vec2(); - private static final int range = 180; + private static final int range = 160; private Tiles tiles; private Team team; @@ -38,29 +40,26 @@ public class BaseGenerator{ Mathf.rand.setSeed(sector.id); - //TODO limit base size - float costBudget = 1000; - - Seq wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == 1 && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); - Seq wallsLarge = content.blocks().select(b -> b instanceof Wall && b.size == 2 && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); + Seq wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == 1 && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); + Seq wallsLarge = content.blocks().select(b -> b instanceof Wall && b.size == 2 && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); //sort by cost for correct fraction wallsSmall.sort(b -> b.buildCost); wallsLarge.sort(b -> b.buildCost); - //TODO proper difficulty selection - float bracket = difficulty; float bracketRange = 0.2f; + float baseChance = Mathf.lerp(0.7f, 1.9f, difficulty); int wallAngle = 70; //180 for full coverage - double resourceChance = 0.5; - double nonResourceChance = 0.0005; - BasePart coreschem = bases.cores.getFrac(bracket); + double resourceChance = 0.5 * baseChance; + double nonResourceChance = 0.0005 * baseChance; + BasePart coreschem = bases.cores.getFrac(difficulty); + int passes = difficulty < 0.4 ? 1 : difficulty < 0.8 ? 2 : 3; - Block wall = wallsSmall.getFrac(bracket), wallLarge = wallsLarge.getFrac(bracket); + Block wall = wallsSmall.getFrac(difficulty), wallLarge = wallsLarge.getFrac(difficulty); for(Tile tile : cores){ tile.clearOverlay(); - Schematics.placeLoadout(coreschem.schematic, tile.x, tile.y, team, coreschem.required instanceof Item ? bases.ores.get((Item)coreschem.required) : Blocks.oreCopper); + Schematics.placeLoadout(coreschem.schematic, tile.x, tile.y, team, coreschem.required instanceof Item ? bases.ores.get((Item)coreschem.required) : Blocks.oreCopper, false); //fill core with every type of item (even non-material) Building entity = tile.build; @@ -69,20 +68,22 @@ public class BaseGenerator{ } } - //random schematics - pass(tile -> { - if(!tile.block().alwaysReplace) return; + for(int i = 0; i < passes; i++){ + //random schematics + pass(tile -> { + if(!tile.block().alwaysReplace) return; - if(((tile.overlay().asFloor().itemDrop != null || (tile.drop() != null && Mathf.chance(nonResourceChance))) + if(((tile.overlay().asFloor().itemDrop != null || (tile.drop() != null && Mathf.chance(nonResourceChance))) || (tile.floor().liquidDrop != null && Mathf.chance(nonResourceChance * 2))) && Mathf.chance(resourceChance)){ - Seq parts = bases.forResource(tile.drop() != null ? tile.drop() : tile.floor().liquidDrop); - if(!parts.isEmpty()){ - tryPlace(parts.getFrac(bracket + Mathf.range(bracketRange)), tile.x, tile.y, team); + Seq parts = bases.forResource(tile.drop() != null ? tile.drop() : tile.floor().liquidDrop); + if(!parts.isEmpty()){ + tryPlace(parts.getFrac(difficulty + Mathf.range(bracketRange)), tile.x, tile.y, team); + } + }else if(Mathf.chance(nonResourceChance)){ + tryPlace(bases.parts.getFrac(difficulty + Mathf.range(bracketRange)), tile.x, tile.y, team); } - }else if(Mathf.chance(nonResourceChance)){ - tryPlace(bases.parts.getFrac(bracket + Mathf.range(bracketRange)), tile.x, tile.y, team); - } - }); + }); + } //replace walls with the correct type (disabled) if(false) @@ -100,6 +101,15 @@ public class BaseGenerator{ if(tile.block().alwaysReplace){ boolean any = false; + for(Point2 p : Geometry.d4){ + Tile o = tiles.get(tile.x + p.x, tile.y + p.y); + + //do not block payloads + if(o != null && (o.block() instanceof PayloadConveyor || o.block() instanceof PayloadAcceptor)){ + return; + } + } + for(Point2 p : Geometry.d8){ if(Angles.angleDist(Angles.angle(p.x, p.y), spawn.angleTo(tile)) > wallAngle){ continue; @@ -137,13 +147,22 @@ public class BaseGenerator{ } }); } + + //clear path for ground units + for(Tile tile : cores){ + Astar.pathfind(tile, spawn, t -> t.team() == state.rules.waveTeam && !t.within(tile, 25f * 8) ? 100000 : t.floor().hasSurface() ? 1 : 10, t -> !t.block().isStatic()).each(t -> { + if(t.team() == state.rules.waveTeam && !t.within(tile, 25f * 8)){ + t.setBlock(Blocks.air); + } + }); + } } public void postGenerate(){ if(tiles == null) return; for(Tile tile : tiles){ - if(tile.isCenter() && tile.block() instanceof PowerNode){ + if(tile.isCenter() && tile.block() instanceof PowerNode && tile.team() == state.rules.waveTeam){ tile.build.placed(); } } diff --git a/core/src/mindustry/maps/generators/BasicGenerator.java b/core/src/mindustry/maps/generators/BasicGenerator.java index e20350e6d3..1ef6d31297 100644 --- a/core/src/mindustry/maps/generators/BasicGenerator.java +++ b/core/src/mindustry/maps/generators/BasicGenerator.java @@ -248,7 +248,7 @@ public abstract class BasicGenerator implements WorldGenerator{ for(int x = -rad; x <= rad; x++){ for(int y = -rad; y <= rad; y++){ int wx = cx + x, wy = cy + y; - if(Structs.inBounds(wx, wy, width, height) && Mathf.dst(x, y, 0, 0) <= rad){ + if(Structs.inBounds(wx, wy, width, height) && Mathf.within(x, y, rad)){ Tile other = tiles.getn(wx, wy); other.setBlock(Blocks.air); } diff --git a/core/src/mindustry/maps/generators/FileMapGenerator.java b/core/src/mindustry/maps/generators/FileMapGenerator.java index dab00370ed..ebebd03877 100644 --- a/core/src/mindustry/maps/generators/FileMapGenerator.java +++ b/core/src/mindustry/maps/generators/FileMapGenerator.java @@ -14,9 +14,11 @@ import static mindustry.Vars.*; public class FileMapGenerator implements WorldGenerator{ public final Map map; + public final SectorPreset preset; - public FileMapGenerator(String mapName){ + public FileMapGenerator(String mapName, SectorPreset preset){ this.map = maps != null ? maps.loadInternalMap(mapName) : null; + this.preset = preset; } @Override @@ -56,6 +58,10 @@ public class FileMapGenerator implements WorldGenerator{ if(tile.isCenter() && tile.block() instanceof CoreBlock && tile.team() == state.rules.defaultTeam && !anyCores){ Schematics.placeLaunchLoadout(tile.x, tile.y); anyCores = true; + + if(preset.addStartingItems){ + tile.build.items.add(state.rules.loadout); + } } } diff --git a/core/src/mindustry/maps/generators/PlanetGenerator.java b/core/src/mindustry/maps/generators/PlanetGenerator.java index 2f0bd37058..d1cfe30bf5 100644 --- a/core/src/mindustry/maps/generators/PlanetGenerator.java +++ b/core/src/mindustry/maps/generators/PlanetGenerator.java @@ -11,6 +11,7 @@ import mindustry.world.*; public abstract class PlanetGenerator extends BasicGenerator implements HexMesher{ protected IntSeq ints = new IntSeq(); protected Sector sector; + protected Simplex noise = new Simplex(); /** Should generate sector bases for a planet. */ public void generateSector(Sector sector){ @@ -19,12 +20,17 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe boolean any = false; float noise = Noise.snoise3(tile.v.x, tile.v.y, tile.v.z, 0.001f, 0.5f); - if(noise > 0.028){ + if(noise > 0.027){ any = true; } if(noise < 0.15){ for(Ptile other : tile.tiles){ + //no sectors near start sector! + if(sector.planet.getSector(other).id == sector.planet.startSector){ + return; + } + if(sector.planet.getSector(other).generateEnemyBase){ any = false; break; @@ -41,6 +47,12 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe } + @Override + protected float noise(float x, float y, double octaves, double falloff, double scl, double mag){ + Vec3 v = sector.rect.project(x, y); + return (float)noise.octaveNoise3D(octaves, falloff, 1f / scl, v.x, v.y, v.z) * (float)mag; + } + public void generate(Tiles tiles, Sector sec){ this.tiles = tiles; this.sector = sec; diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index 7e2b5e9aaa..b19e3229f0 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -10,13 +10,14 @@ import mindustry.ai.*; import mindustry.ai.BaseRegistry.*; import mindustry.content.*; import mindustry.game.*; +import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.maps.generators.*; +import mindustry.type.*; import mindustry.world.*; import static mindustry.Vars.*; public class SerpuloPlanetGenerator extends PlanetGenerator{ - Simplex noise = new Simplex(); RidgedPerlin rid = new RidgedPerlin(1, 2); BaseGenerator basegen = new BaseGenerator(); float scl = 5f; @@ -60,6 +61,43 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ return (Mathf.pow((float)noise.octaveNoise3D(7, 0.5f, 1f/3f, position.x, position.y, position.z), 2.3f) + waterOffset) / (1f + waterOffset); } + @Override + public void generateSector(Sector sector){ + + //these always have bases + if(sector.id == 154 || sector.id == 0){ + sector.generateEnemyBase = true; + return; + } + + Ptile tile = sector.tile; + + boolean any = false; + float poles = Math.abs(tile.v.y); + float noise = Noise.snoise3(tile.v.x, tile.v.y, tile.v.z, 0.001f, 0.58f); + + if(noise + poles/7.1 > 0.12 && poles > 0.23){ + any = true; + } + + if(noise < 0.16){ + for(Ptile other : tile.tiles){ + var osec = sector.planet.getSector(other); + + //no sectors near start sector! + if( + osec.id == sector.planet.startSector || //near starting sector + osec.generateEnemyBase && poles < 0.85 || //near other base + (sector.preset != null && noise < 0.11) //near preset + ){ + return; + } + } + } + + sector.generateEnemyBase = any; + } + @Override public float getHeight(Vec3 position){ float height = rawHeight(position); @@ -159,7 +197,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ //check positions on the map to place the player spawn. this needs to be in the corner of the map Room spawn = null; Seq enemies = new Seq<>(); - int enemySpawns = rand.chance(0.3) ? 2 : 1; + int enemySpawns = rand.random(1, Math.max((int)(sector.threat * 4), 1)); int offset = rand.nextInt(360); float length = width/2.55f - rand.random(13, 23); int angleStep = 5; @@ -232,9 +270,13 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ ores.add(Blocks.oreThorium); } + if(rand.chance(0.25)){ + ores.add(Blocks.oreScrap); + } + FloatSeq frequencies = new FloatSeq(); for(int i = 0; i < ores.size; i++){ - frequencies.add(rand.random(-0.09f, 0.01f) - i * 0.01f); + frequencies.add(rand.random(-0.1f, 0.01f) - i * 0.01f + poles * 0.04f); } pass((x, y) -> { @@ -250,6 +292,10 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ break; } } + + if(ore == Blocks.oreScrap && rand.chance(0.33)){ + floor = Blocks.metalFloorDamaged; + } }); trimDark(); @@ -277,7 +323,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ //hotrock tweaks if(floor == Blocks.hotrock){ - if(rand.chance(0.3)){ + if(Math.abs(0.5f - noise(x - 90, y, 4, 0.8, 80)) > 0.035){ floor = Blocks.basalt; }else{ ore = Blocks.air; @@ -292,6 +338,15 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ floor = Blocks.magmarock; } } + }else if(floor != Blocks.basalt && floor != Blocks.ice && floor.asFloor().hasSurface()){ + float noise = noise(x + 782, y, 5, 0.75f, 260f, 1f); + if(noise > 0.72f){ + floor = noise > 0.78f ? Blocks.taintedWater : (floor == Blocks.sand ? Blocks.sandWater : Blocks.darksandTaintedWater); + ore = Blocks.air; + }else if(noise > 0.67f){ + floor = (floor == Blocks.sand ? floor : Blocks.darksand); + ore = Blocks.air; + } } if(rand.chance(0.0075)){ @@ -326,7 +381,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ } }); - float difficulty = sector.baseCoverage; + float difficulty = sector.threat; ints.clear(); ints.ensureCapacity(width * height / 4); @@ -417,10 +472,13 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ state.rules.winWave = sector.info.winWave = 10 + 5 * (int)Math.max(difficulty * 10, 1); } - state.rules.waves = sector.info.waves = true; + float waveTimeDec = 0.4f; - //TODO better waves - state.rules.spawns = DefaultWaves.generate(difficulty); + state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f) / 0.8f); + state.rules.waves = sector.info.waves = true; + state.rules.enemyCoreBuildRadius = 600f; + + state.rules.spawns = Waves.generate(difficulty, new Rand(), state.rules.attackMode); } @Override diff --git a/core/src/mindustry/maps/planet/TantrosPlanetGenerator.java b/core/src/mindustry/maps/planet/TantrosPlanetGenerator.java new file mode 100644 index 0000000000..934291dab8 --- /dev/null +++ b/core/src/mindustry/maps/planet/TantrosPlanetGenerator.java @@ -0,0 +1,21 @@ +package mindustry.maps.planet; + +import arc.graphics.*; +import arc.math.*; +import arc.math.geom.*; +import mindustry.maps.generators.*; + +public class TantrosPlanetGenerator extends PlanetGenerator{ + Color c1 = Color.valueOf("5057a6"), c2 = Color.valueOf("272766"), out = new Color(); + + @Override + public float getHeight(Vec3 position){ + return 0; + } + + @Override + public Color getColor(Vec3 position){ + float depth = (float)noise.octaveNoise3D(2, 0.56, 1.7f, position.x, position.y, position.z) / 2f; + return c1.write(out).lerp(c2, Mathf.clamp(Mathf.round(depth, 0.15f))).a(0.6f); + } +} diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 0d88d01034..5f2bbdb637 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -2,11 +2,14 @@ package mindustry.mod; import arc.*; import arc.assets.*; +import arc.assets.loaders.*; +import arc.assets.loaders.SoundLoader.*; import arc.audio.*; import arc.files.*; import arc.func.*; import arc.graphics.*; import arc.graphics.g2d.*; +import arc.math.*; import arc.mock.*; import arc.struct.*; import arc.util.*; @@ -19,6 +22,7 @@ import mindustry.content.TechTree.*; import mindustry.ctype.*; import mindustry.entities.*; import mindustry.entities.bullet.*; +import mindustry.entities.effect.*; import mindustry.game.*; import mindustry.game.Objectives.*; import mindustry.gen.*; @@ -33,15 +37,27 @@ import mindustry.world.draw.*; import mindustry.world.meta.*; import java.lang.reflect.*; +import java.util.*; @SuppressWarnings("unchecked") public class ContentParser{ private static final boolean ignoreUnknownFields = true; ObjectMap, ContentType> contentTypes = new ObjectMap<>(); ObjectSet> implicitNullable = ObjectSet.with(TextureRegion.class, TextureRegion[].class, TextureRegion[][].class); + ObjectMap sounds = new ObjectMap<>(); ObjectMap, FieldParser> classParsers = new ObjectMap<>(){{ - put(Effect.class, (type, data) -> field(Fx.class, data)); + put(Effect.class, (type, data) -> { + if(data.isString()){ + return field(Fx.class, data); + } + Class bc = data.has("type") ? resolve(data.getString("type"), "mindustry.entities.effect") : ParticleEffect.class; + data.remove("type"); + Effect result = make(bc); + readFields(result, data); + return result; + }); + put(Interp.class, (type, data) -> field(Interp.class, data)); put(Schematic.class, (type, data) -> { Object result = fieldOpt(Loadouts.class, data); if(result != null){ @@ -77,16 +93,16 @@ public class ContentParser{ }); put(Sound.class, (type, data) -> { if(fieldOpt(Sounds.class, data) != null) return fieldOpt(Sounds.class, data); - if(Vars.headless) return new MockSound(); + if(Vars.headless) return new Sound(); String name = "sounds/" + data.asString(); - String path = Vars.tree.get(name + ".ogg").exists() && !Vars.ios ? name + ".ogg" : name + ".mp3"; + String path = Vars.tree.get(name + ".ogg").exists() ? name + ".ogg" : name + ".mp3"; - if(Core.assets.contains(path, Sound.class)) return Core.assets.get(path, Sound.class); - ModLoadingSound sound = new ModLoadingSound(); - AssetDescriptor desc = Core.assets.load(path, Sound.class); - desc.loaded = result -> sound.sound = (Sound)result; + if(sounds.containsKey(path)) return ((SoundParameter)sounds.get(path).params).sound; + var sound = new Sound(); + AssetDescriptor desc = Core.assets.load(path, Sound.class, new SoundParameter(sound)); desc.errored = Throwable::printStackTrace; + sounds.put(path, desc); return sound; }); put(Objectives.Objective.class, (type, data) -> { @@ -252,7 +268,13 @@ public class ContentParser{ UnitType unit; if(locate(ContentType.unit, name) == null){ unit = new UnitType(mod + "-" + name); - unit.constructor = Reflect.cons(resolve(Strings.capitalize(getType(value)), "mindustry.gen")); + var typeVal = value.get("type"); + + if(typeVal != null && !typeVal.isString()){ + throw new RuntimeException("Unit '" + name + "' has an incorrect type. Types must be strings."); + } + + unit.constructor = unitType(typeVal); }else{ unit = locate(ContentType.unit, name); } @@ -295,7 +317,7 @@ public class ContentParser{ group.type = unit; } - Vars.defaultWaves.get().addAll(groups); + Vars.waves.get().addAll(groups); } readFields(unit, value, true); @@ -322,6 +344,18 @@ public class ContentParser{ //ContentType.sector, parser(ContentType.sector, SectorPreset::new) ); + private Prov unitType(JsonValue value){ + if(value == null) return UnitEntity::create; + return switch(value.asString()){ + case "flying" -> UnitEntity::create; + case "mech" -> MechUnit::create; + case "legs" -> LegsUnit::create; + case "naval" -> UnitWaterMove::create; + case "payload" -> PayloadUnit::create; + default -> throw new RuntimeException("Invalid unit type: '" + value + "'. Must be 'flying/mech/legs/naval/payload'."); + }; + } + private String getString(JsonValue value, String key){ if(value.has(key)){ return value.getString(key); @@ -569,7 +603,9 @@ public class ContentParser{ if(field.field.getType().isPrimitive()) return; if(!field.field.isAnnotationPresent(Nullable.class) && field.field.get(object) == null && !implicitNullable.contains(field.field.getType())){ - throw new RuntimeException("'" + field.field.getName() + "' in " + object.getClass().getSimpleName() + " is missing!"); + throw new RuntimeException("'" + field.field.getName() + "' in " + + ((object.getClass().isAnonymousClass() ? object.getClass().getSuperclass() : object.getClass()).getSimpleName()) + + " is missing! Object = " + object + ", field = (" + field.field.getName() + " = " + field.field.get(object) + ")"); } }catch(Exception e){ throw new RuntimeException(e); diff --git a/core/src/mindustry/mod/ModLoadingMusic.java b/core/src/mindustry/mod/ModLoadingMusic.java deleted file mode 100644 index 9b51031783..0000000000 --- a/core/src/mindustry/mod/ModLoadingMusic.java +++ /dev/null @@ -1,78 +0,0 @@ -package mindustry.mod; - -import arc.audio.*; -import arc.mock.*; - -public class ModLoadingMusic implements Music{ - public Music music = new MockMusic(); - - @Override - public void play(){ - music.play(); - } - - @Override - public void pause(){ - music.pause(); - } - - @Override - public void stop(){ - music.stop(); - } - - @Override - public boolean isPlaying(){ - return music.isPlaying(); - } - - @Override - public boolean isLooping(){ - return music.isLooping(); - } - - @Override - public void setLooping(boolean isLooping){ - music.setLooping(isLooping); - } - - @Override - public float getVolume(){ - return music.getVolume(); - } - - @Override - public void setVolume(float volume){ - music.setVolume(volume); - } - - @Override - public void setPan(float pan, float volume){ - music.setPan(pan, volume); - } - - @Override - public float getPosition(){ - return music.getPosition(); - } - - @Override - public void setPosition(float position){ - music.setPosition(position); - } - - @Override - public void dispose(){ - music.dispose(); - } - - @Override - public void setCompletionListener(OnCompletionListener listener){ - music.setCompletionListener(listener); - } - - @Override - public boolean isDisposed(){ - return music.isDisposed(); - } -} diff --git a/core/src/mindustry/mod/ModLoadingSound.java b/core/src/mindustry/mod/ModLoadingSound.java deleted file mode 100644 index 543b75c154..0000000000 --- a/core/src/mindustry/mod/ModLoadingSound.java +++ /dev/null @@ -1,134 +0,0 @@ -package mindustry.mod; - -import arc.audio.*; -import arc.math.geom.*; -import arc.mock.*; - -public class ModLoadingSound implements Sound{ - public Sound sound = new MockSound(); - - @Override - public float calcPan(float x, float y){ - return sound.calcPan(x, y); - } - - @Override - public float calcVolume(float x, float y){ - return sound.calcVolume(x, y); - } - - @Override - public float calcFalloff(float x, float y){ - return sound.calcFalloff(x, y); - } - - @Override - public int at(float x, float y, float pitch){ - return sound.at(x, y, pitch); - } - - @Override - public int at(float x, float y){ - return sound.at(x, y); - } - - @Override - public int at(Position pos){ - return sound.at(pos); - } - - @Override - public int at(Position pos, float pitch){ - return sound.at(pos, pitch); - } - - @Override - public int play(){ - return sound.play(); - } - - @Override - public int play(float volume){ - return sound.play(volume); - } - - @Override - public int play(float volume, float pitch, float pan){ - return sound.play(volume, pitch, pan); - } - - @Override - public int loop(){ - return sound.loop(); - } - - @Override - public int loop(float volume){ - return sound.loop(volume); - } - - @Override - public int loop(float volume, float pitch, float pan){ - return sound.loop(volume, pitch, pan); - } - - @Override - public void stop(){ - sound.stop(); - } - - @Override - public void pause(){ - sound.pause(); - } - - @Override - public void resume(){ - sound.resume(); - } - - @Override - public void dispose(){ - sound.dispose(); - } - - @Override - public void stop(int soundId){ - sound.stop(soundId); - } - - @Override - public void pause(int soundId){ - sound.pause(soundId); - } - - @Override - public void resume(int soundId){ - sound.resume(soundId); - } - - @Override - public void setLooping(int soundId, boolean looping){ - sound.setLooping(soundId, looping); - } - - @Override - public void setPitch(int soundId, float pitch){ - sound.setPitch(soundId, pitch); - } - - @Override - public void setVolume(int soundId, float volume){ - sound.setVolume(soundId, volume); - } - - @Override - public void setPan(int soundId, float pan, float volume){ - sound.setPan(soundId, pan, volume); - } - - @Override - public boolean isDisposed(){ - return sound.isDisposed(); - } -} diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index a596f3e7ae..0930cf1a60 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -134,7 +134,7 @@ public class Mods implements Loadable{ }catch(IOException e){ Core.app.post(() -> { Log.err("Error packing images for mod: @", mod.meta.name); - e.printStackTrace(); + Log.err(e); if(!headless) ui.showException(e); }); break; @@ -629,7 +629,7 @@ public class Mods implements Loadable{ } //make sure the main class exists before loading it; if it doesn't just don't put it there - if(mainFile.exists() && Core.settings.getBool("mod-" + meta.name.toLowerCase().replace(" ", "-") + "-enabled", true)){ + if(mainFile.exists() && Core.settings.getBool("mod-" + baseName + "-enabled", true)){ //mobile versions don't support class mods if(ios){ throw new IllegalArgumentException("Java class mods are not supported on iOS."); @@ -830,7 +830,7 @@ public class Mods implements Loadable{ /** Mod metadata information.*/ public static class ModMeta{ - public String name, displayName, author, description, version, main, minGameVersion = "0"; + public String name, displayName, author, description, version, main, minGameVersion = "0", repo; public Seq dependencies = Seq.with(); /** Hidden mods are only server-side or client-side, and do not support adding new content. */ public boolean hidden; diff --git a/core/src/mindustry/mod/Scripts.java b/core/src/mindustry/mod/Scripts.java index f372586863..6ae9631da1 100644 --- a/core/src/mindustry/mod/Scripts.java +++ b/core/src/mindustry/mod/Scripts.java @@ -2,9 +2,11 @@ package mindustry.mod; import arc.*; import arc.assets.*; +import arc.assets.loaders.MusicLoader.*; +import arc.assets.loaders.SoundLoader.*; import arc.audio.*; import arc.files.*; -import arc.mock.*; +import arc.func.*; import arc.struct.*; import arc.util.*; import arc.util.Log.*; @@ -22,7 +24,7 @@ public class Scripts implements Disposable{ private final Seq blacklist = Seq.with(".net.", "java.net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk", "runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system", ".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream", "org."); - private final Seq whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "mindustry.gen.", "mindustry.logic.", "mindustry.async.", "saveio"); + private final Seq whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "mindustry.gen.", "mindustry.logic.", "mindustry.async.", "saveio", "systemcursor"); private final Context context; private final Scriptable scope; private boolean errored; @@ -87,33 +89,67 @@ public class Scripts implements Disposable{ } public Sound loadSound(String soundName){ - if(Vars.headless) return new MockSound(); + if(Vars.headless) return new Sound(); String name = "sounds/" + soundName; - String path = Vars.tree.get(name + ".ogg").exists() && !Vars.ios ? name + ".ogg" : name + ".mp3"; + String path = Vars.tree.get(name + ".ogg").exists() ? name + ".ogg" : name + ".mp3"; - if(Core.assets.contains(path, Sound.class)) return Core.assets.get(path, Sound.class); - ModLoadingSound sound = new ModLoadingSound(); - AssetDescriptor desc = Core.assets.load(path, Sound.class); - desc.loaded = result -> sound.sound = (Sound)result; + var sound = new Sound(); + AssetDescriptor desc = Core.assets.load(path, Sound.class, new SoundParameter(sound)); desc.errored = Throwable::printStackTrace; return sound; } public Music loadMusic(String soundName){ - if(Vars.headless) return new MockMusic(); + if(Vars.headless) return new Music(); String name = "music/" + soundName; - String path = Vars.tree.get(name + ".ogg").exists() && !Vars.ios ? name + ".ogg" : name + ".mp3"; + String path = Vars.tree.get(name + ".ogg").exists() ? name + ".ogg" : name + ".mp3"; - if(Core.assets.contains(path, Music.class)) return Core.assets.get(path, Music.class); - ModLoadingMusic sound = new ModLoadingMusic(); - AssetDescriptor desc = Core.assets.load(path, Music.class); - desc.loaded = result -> sound.music = (Music)result; + var music = new Music(); + AssetDescriptor desc = Core.assets.load(path, Music.class, new MusicParameter(music)); desc.errored = Throwable::printStackTrace; - return sound; + return music; + } + + /** Ask the user to select a file to read for a certain purpose like "Please upload a sprite" */ + public void readFile(String purpose, String ext, Cons cons){ + selectFile(true, purpose, ext, fi -> cons.get(fi.readString())); + } + + /** readFile but for a byte[] */ + public void readBinFile(String purpose, String ext, Cons cons){ + selectFile(true, purpose, ext, fi -> cons.get(fi.readBytes())); + } + + /** Ask the user to write a file. */ + public void writeFile(String purpose, String ext, String contents){ + if(contents == null) contents = ""; + final String fContents = contents; + selectFile(false, purpose, ext, fi -> fi.writeString(fContents)); + } + + /** writeFile but for a byte[] */ + public void writeBinFile(String purpose, String ext, byte[] contents){ + if(contents == null) contents = new byte[0]; + final byte[] fContents = contents; + selectFile(false, purpose, ext, fi -> fi.writeBytes(fContents)); + } + + private void selectFile(boolean open, String purpose, String ext, Cons cons){ + purpose = purpose.startsWith("@") ? Core.bundle.get(purpose.substring(1)) : purpose; + //add purpose and extension at the top + String title = Core.bundle.get(open ? "open" : "save") + " - " + purpose + " (." + ext + ")"; + Vars.platform.showFileChooser(open, title, ext, fi -> { + try{ + cons.get(fi); + }catch(Exception e){ + Log.err("Failed to select file '@' for a mod", fi); + Log.err(e); + } + }); } //endregion diff --git a/core/src/mindustry/net/Administration.java b/core/src/mindustry/net/Administration.java index ccf5f76755..b7d0c451e9 100644 --- a/core/src/mindustry/net/Administration.java +++ b/core/src/mindustry/net/Administration.java @@ -12,8 +12,6 @@ import mindustry.gen.*; import mindustry.type.*; import mindustry.world.*; -import java.io.*; - import static mindustry.Vars.*; import static mindustry.game.EventType.*; @@ -142,11 +140,18 @@ public class Administration{ /** @return whether this action is allowed by the action filters. */ public boolean allowAction(Player player, ActionType type, Tile tile, Cons setter){ + return allowAction(player, type, action -> setter.get(action.set(player, type, tile))); + } + + /** @return whether this action is allowed by the action filters. */ + public boolean allowAction(Player player, ActionType type, Cons setter){ //some actions are done by the server (null player) and thus are always allowed if(player == null) return true; PlayerAction act = Pools.obtain(PlayerAction.class, PlayerAction::new); - setter.get(act.set(player, type, tile)); + act.player = player; + act.type = type; + setter.get(act); for(ActionFilter filter : actionFilters){ if(!filter.allow(act)){ Pools.free(act); @@ -249,8 +254,7 @@ public class Administration{ public boolean unbanPlayerID(String id){ PlayerInfo info = getCreateInfo(id); - if(!info.banned) - return false; + if(!info.banned) return false; info.banned = false; bannedIPs.removeAll(info.ips, false); @@ -299,8 +303,6 @@ public class Administration{ 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(); @@ -443,111 +445,11 @@ public class Administration{ @SuppressWarnings("unchecked") private void load(){ - if(!loadLegacy()){ - //load default data - playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::new); - bannedIPs = Core.settings.getJson("ip-bans", Seq.class, Seq::new); - whitelist = Core.settings.getJson("whitelist-ids", Seq.class, Seq::new); - subnetBans = Core.settings.getJson("banned-subnets", Seq.class, Seq::new); - }else{ - //save over loaded legacy data - save(); - Log.info("Loaded legacy (5.0) server data."); - } - } - - private boolean loadLegacy(){ - try{ - byte[] info = Core.settings.getBytes("player-info"); - byte[] ips = Core.settings.getBytes("banned-ips"); - byte[] whitelist = Core.settings.getBytes("whitelisted"); - byte[] subnet = Core.settings.getBytes("subnet-bans"); - - if(info != null){ - DataInputStream d = new DataInputStream(new ByteArrayInputStream(info)); - int size = d.readInt(); - if(size != 0){ - d.readUTF(); - d.readUTF(); - - for(int i = 0; i < size; i++){ - String mapKey = d.readUTF(); - - PlayerInfo data = new PlayerInfo(); - - data.id = d.readUTF(); - data.lastName = d.readUTF(); - data.lastIP = d.readUTF(); - int ipsize = d.readInt(); - if(ipsize != 0){ - d.readUTF(); - for(int j = 0; j < ipsize; j++){ - data.ips.add(d.readUTF()); - } - } - - int namesize = d.readInt(); - if(namesize != 0){ - d.readUTF(); - for(int j = 0; j < ipsize; j++){ - data.names.add(d.readUTF()); - } - } - //ips, names... - data.adminUsid = d.readUTF(); - data.timesKicked = d.readInt(); - data.timesJoined = d.readInt(); - data.banned = d.readBoolean(); - data.admin = d.readBoolean(); - data.lastKicked = d.readLong(); - - playerInfo.put(mapKey, data); - } - } - Core.settings.remove("player-info"); - } - - if(ips != null){ - DataInputStream d = new DataInputStream(new ByteArrayInputStream(ips)); - int size = d.readInt(); - if(size != 0){ - d.readUTF(); - for(int i = 0; i < size; i++){ - bannedIPs.add(d.readUTF()); - } - } - Core.settings.remove("banned-ips"); - } - - if(whitelist != null){ - DataInputStream d = new DataInputStream(new ByteArrayInputStream(whitelist)); - int size = d.readInt(); - if(size != 0){ - d.readUTF(); - for(int i = 0; i < size; i++){ - this.whitelist.add(d.readUTF()); - } - } - Core.settings.remove("whitelisted"); - } - - if(subnet != null){ - DataInputStream d = new DataInputStream(new ByteArrayInputStream(subnet)); - int size = d.readInt(); - if(size != 0){ - d.readUTF(); - for(int i = 0; i < size; i++){ - subnetBans.add(d.readUTF()); - } - } - Core.settings.remove("subnet-bans"); - } - - return info != null || ips != null || whitelist != null || subnet != null; - }catch(Throwable e){ - e.printStackTrace(); - } - return false; + //load default data + playerInfo = Core.settings.getJson("player-data", ObjectMap.class, ObjectMap::new); + bannedIPs = Core.settings.getJson("ip-bans", Seq.class, Seq::new); + whitelist = Core.settings.getJson("whitelist-ids", Seq.class, Seq::new); + subnetBans = Core.settings.getJson("banned-subnets", Seq.class, Seq::new); } /** Server configuration definition. Each config value can be a string, boolean or number. */ @@ -578,8 +480,7 @@ public class Administration{ autosaveAmount("The maximum amount of autosaves. Older ones get replaced.", 10), autosaveSpacing("Spacing between autosaves in seconds.", 60 * 5), debug("Enable debug logging", false, () -> { - LogLevel level = debug() ? LogLevel.debug : LogLevel.info; - Log.level = level; + Log.level = debug() ? LogLevel.debug : LogLevel.info; }); public static final Config[] all = values(); @@ -699,7 +600,7 @@ public class Administration{ public static class PlayerAction implements Poolable{ public Player player; public ActionType type; - public Tile tile; + public @Nullable Tile tile; /** valid for block placement events only */ public @Nullable Block block; @@ -712,6 +613,9 @@ public class Administration{ public @Nullable Item item; public int itemAmount; + /** valid for unit-type events only, and even in that case may be null. */ + public @Nullable Unit unit; + public PlayerAction set(Player player, ActionType type, Tile tile){ this.player = player; this.type = type; @@ -719,6 +623,13 @@ public class Administration{ return this; } + public PlayerAction set(Player player, ActionType type, Unit unit){ + this.player = player; + this.type = type; + this.unit = unit; + return this; + } + @Override public void reset(){ item = null; @@ -728,11 +639,12 @@ public class Administration{ type = null; tile = null; block = null; + unit = null; } } public enum ActionType{ - breakBlock, placeBlock, rotate, configure, withdrawItem, depositItem + breakBlock, placeBlock, rotate, configure, withdrawItem, depositItem, control, command } } diff --git a/core/src/mindustry/net/BeControl.java b/core/src/mindustry/net/BeControl.java index a30308ed52..a15ada94bc 100644 --- a/core/src/mindustry/net/BeControl.java +++ b/core/src/mindustry/net/BeControl.java @@ -45,7 +45,7 @@ public class BeControl{ }, updateInterval, updateInterval); } - if(System.getProperties().contains("becopy")){ + if(System.getProperties().containsKey("becopy")){ try{ Fi dest = Fi.get(System.getProperty("becopy")); Fi self = Fi.get(BeControl.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index 0bf782600e..dc7431d0d4 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -57,7 +57,7 @@ public class Net{ t = t.getCause(); } - String baseError = Strings.getFinalMesage(e); + String baseError = Strings.getFinalMessage(e); String error = baseError == null ? "" : baseError.toLowerCase(); String type = t.getClass().toString().toLowerCase(); @@ -254,8 +254,9 @@ public class Net{ }else if(clientListeners.get(object.getClass()) != null){ if(clientLoaded || ((object instanceof Packet) && ((Packet)object).isImportant())){ - if(clientListeners.get(object.getClass()) != null) + if(clientListeners.get(object.getClass()) != null){ clientListeners.get(object.getClass()).get(object); + } Pools.free(object); }else if(!((object instanceof Packet) && ((Packet)object).isUnimportant())){ packetQueue.add(object); @@ -273,8 +274,9 @@ public class Net{ public void handleServerReceived(NetConnection connection, Object object){ if(serverListeners.get(object.getClass()) != null){ - if(serverListeners.get(object.getClass()) != null) + if(serverListeners.get(object.getClass()) != null){ serverListeners.get(object.getClass()).get(connection, object); + } Pools.free(object); }else{ Log.err("Unhandled packet type: '@'!", object.getClass()); diff --git a/core/src/mindustry/net/ServerGroup.java b/core/src/mindustry/net/ServerGroup.java new file mode 100644 index 0000000000..15bd8fa4d3 --- /dev/null +++ b/core/src/mindustry/net/ServerGroup.java @@ -0,0 +1,28 @@ +package mindustry.net; + +import arc.*; + +public class ServerGroup{ + public String name; + public String[] addresses; + + public ServerGroup(String name, String[] addresses){ + this.name = name; + this.addresses = addresses; + } + + public ServerGroup(){ + } + + public boolean hidden(){ + return Core.settings.getBool(key() + "-hidden", false); + } + + public void setHidden(boolean hidden){ + Core.settings.put(key() + "-hidden", hidden); + } + + String key(){ + return "server-" + (name.isEmpty() ? addresses.length == 0 ? "" : addresses[0] : name); + } +} diff --git a/core/src/mindustry/net/WorldReloader.java b/core/src/mindustry/net/WorldReloader.java new file mode 100644 index 0000000000..23515aae87 --- /dev/null +++ b/core/src/mindustry/net/WorldReloader.java @@ -0,0 +1,59 @@ +package mindustry.net; + +import arc.struct.*; +import arc.struct.Seq.*; +import mindustry.gen.*; + +import static mindustry.Vars.*; + +/** Handles player state for sending to every connected player*/ +public class WorldReloader{ + Seq players = new Seq<>(); + boolean wasServer = false; + boolean began = false; + + /** Begins reloading the world. Sends world begin packets to each user and stores player state. + * If the current client is not a server, this resets state and disconnects. */ + public void begin(){ + //don't begin twice + if(began) return; + + if(wasServer = net.server()){ + players.clear(); + + for(Player p : Groups.player){ + if(p.isLocal()) continue; + + players.add(p); + p.clearUnit(); + } + + logic.reset(); + + Call.worldDataBegin(); + }else{ + net.reset(); + logic.reset(); + } + + began = true; + } + + /** Ends reloading the world. Sends world data to each player. + * If the current client was not a server, does nothing.*/ + public void end(){ + if(wasServer){ + for(Player p : players){ + if(p.con == null) continue; + + boolean wasAdmin = p.admin; + p.reset(); + p.admin = wasAdmin; + if(state.rules.pvp){ + p.team(netServer.assignTeam(p, new SeqIterable<>(players))); + } + netServer.sendWorldData(p); + } + } + } +} diff --git a/core/src/mindustry/type/ItemSeq.java b/core/src/mindustry/type/ItemSeq.java index 49055fb5b9..4fb7409796 100644 --- a/core/src/mindustry/type/ItemSeq.java +++ b/core/src/mindustry/type/ItemSeq.java @@ -21,6 +21,12 @@ public class ItemSeq implements Iterable, Serializable{ stacks.each(this::add); } + public void checkNegative(){ + for(int i = 0; i < values.length; i++){ + if(values[i] < 0) values[i] = 0; + } + } + public ItemSeq copy(){ ItemSeq out = new ItemSeq(); out.total = total; @@ -49,6 +55,12 @@ public class ItemSeq implements Iterable, Serializable{ return out; } + public void min(int number){ + for(Item item : Vars.content.items()){ + set(item, Math.min(get(item), number)); + } + } + public boolean has(Item item){ return values[item.id] > 0; } @@ -127,7 +139,7 @@ public class ItemSeq implements Iterable, Serializable{ @Override public String toString(){ - return JsonIO.write(this); + return JsonIO.print(JsonIO.write(this)); } @Override diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 4550ae6805..b1cb5f8a26 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -18,7 +18,7 @@ import static mindustry.Vars.*; public class Planet extends UnlockableContent{ /** Default spacing between planet orbits in world units. */ - private static final float orbitSpacing = 8f; + private static final float orbitSpacing = 9f; /** intersect() temp var. */ private static final Vec3 intersectResult = new Vec3(); /** Mesh used for rendering. Created on load() - will be null on the server! */ @@ -33,6 +33,8 @@ public class Planet extends UnlockableContent{ public Seq sectors; /** Radius of this planet's sphere. Does not take into account sattelites. */ public float radius; + /** Atmosphere radius adjustment parameters. */ + public float atmosphereRadIn = 0, atmosphereRadOut = 0.3f; /** Orbital radius around the sun. Do not change unless you know exactly what you are doing.*/ public float orbitRadius; /** Total radius of this planet and all its children. */ @@ -51,6 +53,8 @@ public class Planet extends UnlockableContent{ public int startSector = 0; /** Whether the bloom render effect is enabled. */ public boolean bloom = false; + /** Whether this planet is displayed. */ + public boolean visible = true; /** For suns, this is the color that shines on other planets. Does nothing for children. */ public Color lightColor = Color.white.cpy(); /** Atmosphere tint for landable planets. */ @@ -183,10 +187,10 @@ public class Planet extends UnlockableContent{ } if(sector.hasEnemyBase()){ - sum += 2f; + sum += 2.5f; } - sector.baseCoverage = sector.preset == null ? Mathf.clamp(sum / 5f) : Mathf.clamp(sector.preset.difficulty / 10f); + sector.threat = sector.preset == null ? Math.min(sum / 5f, 1.5f) : Mathf.clamp(sector.preset.difficulty / 10f); } } @@ -264,7 +268,7 @@ public class Planet extends UnlockableContent{ } public boolean visible(){ - return true; + return visible; } public void draw(Mat3D projection, Mat3D transform){ diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index 975c8b82c8..e923468c30 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -2,6 +2,9 @@ package mindustry.type; import arc.*; import arc.func.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.*; @@ -9,14 +12,14 @@ import mindustry.*; import mindustry.game.Saves.*; import mindustry.game.*; import mindustry.graphics.g3d.PlanetGrid.*; +import mindustry.ui.*; import mindustry.world.modules.*; import static mindustry.Vars.*; /** A small section of a planet. */ public class Sector{ - private static final Seq tmpSeq1 = new Seq<>(), tmpSeq2 = new Seq<>(), tmpSeq3 = new Seq<>(); - private static final ObjectSet tmpSet = new ObjectSet<>(); + private static final Seq tmpSeq1 = new Seq<>(); public final SectorRect rect; public final Plane plane; @@ -29,7 +32,7 @@ public class Sector{ public SectorInfo info = new SectorInfo(); /** Number 0-1 indicating the difficulty based on nearby bases. */ - public float baseCoverage; + public float threat; public boolean generateEnemyBase; public Sector(Planet planet, Ptile tile){ @@ -40,17 +43,6 @@ public class Sector{ this.id = tile.id; } - /** @return a copy of the items in this sector - may be core items, or stored data. */ - public ItemSeq getItems(){ - if(isBeingPlayed()){ - ItemSeq out = new ItemSeq(); - if(state.rules.defaultTeam.core() != null) out.add(state.rules.defaultTeam.core().items); - return out; - }else{ - return info.items; - } - } - public Seq near(){ tmpSeq1.clear(); for(Ptile tile : tile.tiles){ @@ -66,6 +58,15 @@ public class Sector{ } } + /** Displays threat as a formatted string. */ + public String displayThreat(){ + float step = 0.25f; + String color = Tmp.c1.set(Color.white).lerp(Color.scarlet, Mathf.round(threat, step)).toString(); + String[] threats = {"low", "medium", "high", "extreme", "eradication"}; + int index = Math.min((int)(threat / step), threats.length - 1); + return "[#" + color + "]" + Core.bundle.get("threat." + threats[index]); + } + /** @return whether this sector can be landed on at all. * Only sectors adjacent to non-wave sectors can be landed on. */ public boolean unlocked(){ @@ -80,6 +81,12 @@ public class Sector{ info = Core.settings.getJson(planet.name + "-s-" + id + "-info", SectorInfo.class, SectorInfo::new); } + /** Removes any sector info. */ + public void clearInfo(){ + info = new SectorInfo(); + Core.settings.remove(planet.name + "-s-" + id + "-info"); + } + public float getProductionScale(){ return Math.max(1f - info.damage, 0); } @@ -91,12 +98,12 @@ public class Sector{ /** @return whether the player has a base here. */ public boolean hasBase(){ - return save != null && info.hasCore; + return save != null && info.hasCore && !(Vars.state.isGame() && Vars.state.rules.sector == this && state.gameOver); } /** @return whether the enemy has a generated base here. */ public boolean hasEnemyBase(){ - return generateEnemyBase && (save == null || info.waves); + return ((generateEnemyBase && preset == null) || (preset != null && preset.captureWave == 0)) && (save == null || info.attack); } public boolean isBeingPlayed(){ @@ -105,7 +112,7 @@ public class Sector{ } public String name(){ - if(preset != null) return preset.localizedName; + if(preset != null && info.name == null) return preset.localizedName; return info.name == null ? id + "" : info.name; } @@ -114,6 +121,11 @@ public class Sector{ saveInfo(); } + @Nullable + public TextureRegion icon(){ + return info.icon == null ? null : Fonts.getLargeIcon(info.icon); + } + public boolean isCaptured(){ return save != null && !info.waves; } @@ -165,6 +177,7 @@ public class Sector{ } }else if(hasBase()){ items.each((item, amount) -> info.items.add(item, Math.min(info.storageCapacity - info.items.get(item), amount))); + info.items.checkNegative(); saveInfo(); } } @@ -175,7 +188,7 @@ public class Sector{ //for sectors being played on, add items directly if(isBeingPlayed()){ - count.add(state.rules.defaultTeam.items()); + if(state.rules.defaultTeam.core() != null) count.add(state.rules.defaultTeam.items()); }else{ //add items already present count.add(info.items); @@ -185,7 +198,7 @@ public class Sector{ } public String toString(){ - return planet.name + "#" + id; + return planet.name + "#" + id + " (" + name() + ")"; } /** Projects this sector onto a 4-corner square for use in map gen. diff --git a/core/src/mindustry/type/SectorPreset.java b/core/src/mindustry/type/SectorPreset.java index 0e9b90fb30..997e014c63 100644 --- a/core/src/mindustry/type/SectorPreset.java +++ b/core/src/mindustry/type/SectorPreset.java @@ -15,15 +15,18 @@ public class SectorPreset extends UnlockableContent{ public int captureWave = 0; public Cons rules = rules -> rules.winWave = captureWave; + public boolean useAI = true; /** Difficulty, 0-10. */ public float difficulty; + public boolean addStartingItems = false; public SectorPreset(String name, Planet planet, int sector){ super(name); - this.generator = new FileMapGenerator(name); + this.generator = new FileMapGenerator(name, this); this.planet = planet; sector %= planet.sectors.size; this.sector = planet.sectors.get(sector); + inlineDescription = false; planet.preset(sector, this); } @@ -35,7 +38,7 @@ public class SectorPreset extends UnlockableContent{ @Override public boolean isHidden(){ - return true; + return description == null; } @Override diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 8a2d274b44..a83f6532ae 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -80,7 +80,9 @@ public class UnitType extends UnlockableContent{ public int ammoCapacity = -1; public AmmoType ammoType = AmmoTypes.copper; public int mineTier = -1; - public float buildSpeed = 1f, mineSpeed = 1f; + public float buildSpeed = -1f, mineSpeed = 1f; + public Sound mineSound = Sounds.minebeam; + public float mineSoundVolume = 0.6f; /** This is a VERY ROUGH estimate of unit DPS. */ public float dpsEstimate = -1; @@ -199,10 +201,9 @@ public class UnitType extends UnlockableContent{ stats.add(Stat.health, health); stats.add(Stat.speed, speed); - stats.add(Stat.itemCapacity, health); + stats.add(Stat.itemCapacity, itemCapacity); stats.add(Stat.range, (int)(maxRange / tilesize), StatUnit.blocks); stats.add(Stat.commandLimit, commandLimit); - //TODO abilities, maybe try something like DPS if(abilities.any()){ var unique = new ObjectSet(); @@ -214,16 +215,26 @@ public class UnitType extends UnlockableContent{ } } - if(inst instanceof Minerc && mineTier >= 1){ + stats.add(Stat.flying, flying); + + if(!flying){ + stats.add(Stat.canBoost, canBoost); + } + + if(mineTier >= 1){ stats.addPercent(Stat.mineSpeed, mineSpeed); stats.add(Stat.mineTier, new BlockFilterValue(b -> b instanceof Floor f && f.itemDrop != null && f.itemDrop.hardness <= mineTier && !f.playerUnmineable)); } - if(inst instanceof Builderc){ + if(buildSpeed > 0){ stats.addPercent(Stat.buildSpeed, buildSpeed); } if(inst instanceof Payloadc){ stats.add(Stat.payloadCapacity, (payloadCapacity / (tilesize * tilesize)), StatUnit.blocksSquared); } + + if(weapons.any()){ + stats.add(Stat.weapons, new WeaponListValue(this, weapons)); + } } @CallSuper @@ -243,7 +254,7 @@ public class UnitType extends UnlockableContent{ singleTarget = weapons.size <= 1; if(itemCapacity < 0){ - itemCapacity = Math.max(Mathf.round(hitSize * 4, 10), 10); + itemCapacity = Math.max(Mathf.round((int)(hitSize * 4.3), 10), 10); } //set up default range @@ -317,7 +328,7 @@ public class UnitType extends UnlockableContent{ //suicide enemy if(weapons.contains(w -> w.bullet.killShooter)){ //scale down DPS to be insignificant - dpsEstimate /= 100f; + dpsEstimate /= 20f; } } } @@ -349,12 +360,12 @@ public class UnitType extends UnlockableContent{ ItemStack[] stacks = null; //calculate costs based on reconstructors or factories found - Block rec = content.blocks().find(b -> b instanceof Reconstructor && ((Reconstructor)b).upgrades.contains(u -> u[1] == this)); + Block rec = content.blocks().find(b -> b instanceof Reconstructor re && re.upgrades.contains(u -> u[1] == this)); - if(rec != null && rec.consumes.has(ConsumeType.item) && rec.consumes.get(ConsumeType.item) instanceof ConsumeItems){ - stacks = ((ConsumeItems)rec.consumes.get(ConsumeType.item)).items; + if(rec != null && rec.consumes.has(ConsumeType.item) && rec.consumes.get(ConsumeType.item) instanceof ConsumeItems ci){ + stacks = ci.items; }else{ - UnitFactory factory = (UnitFactory)content.blocks().find(u -> u instanceof UnitFactory && ((UnitFactory)u).plans.contains(p -> p.unit == this)); + UnitFactory factory = (UnitFactory)content.blocks().find(u -> u instanceof UnitFactory uf && uf.plans.contains(p -> p.unit == this)); if(factory != null){ stacks = factory.plans.find(p -> p.unit == this).requirements; } @@ -363,7 +374,7 @@ public class UnitType extends UnlockableContent{ if(stacks != null){ ItemStack[] out = new ItemStack[stacks.length]; for(int i = 0; i < out.length; i++){ - out[i] = new ItemStack(stacks[i].item, UI.roundAmount((int)(Math.pow(stacks[i].amount, 1) * 50))); + out[i] = new ItemStack(stacks[i].item, UI.roundAmount((int)(Math.pow(stacks[i].amount, 1.1) * 50))); } return out; diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 2038374ad5..348e70b7b2 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -50,7 +50,7 @@ public class Weapon{ public float x = 5f, y = 0f; /** random spread on the X axis */ public float xRand = 0f; - /** radius of occlusion drawn under the weapon; <0 to diable */ + /** radius of occlusion drawn under the weapon; <0 to disable */ public float occlusion = -1f; /** fraction of velocity that is random */ public float velocityRnd = 0f; @@ -62,6 +62,8 @@ public class Weapon{ public float shootCone = 5f; /** ticks to cool down the heat region */ public float cooldownTime = 20f; + /** random sound pitch range */ + public float soundPitchMin = 0.8f, soundPitchMax = 1f; /** whether shooter rotation is ignored when shooting. */ public boolean ignoreRotation = false; /** min velocity required for this weapon to shoot */ @@ -73,7 +75,7 @@ public class Weapon{ /** sound used for weapons that have a delay */ public Sound chargeSound = Sounds.none; /** sound played when there is nothing to shoot */ - public Sound noAmmoSound = Sounds.click; + public Sound noAmmoSound = Sounds.noammo; /** displayed region (autoloaded) */ public TextureRegion region; /** heat region, must be same size as region (optional) */ diff --git a/core/src/mindustry/type/Weather.java b/core/src/mindustry/type/Weather.java index 4d17ab7c0e..9daaf11087 100644 --- a/core/src/mindustry/type/Weather.java +++ b/core/src/mindustry/type/Weather.java @@ -1,12 +1,14 @@ package mindustry.type; import arc.*; +import arc.audio.*; import arc.func.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; import arc.util.*; +import arc.util.noise.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.ctype.*; @@ -22,6 +24,9 @@ public abstract class Weather extends UnlockableContent{ public float duration = 9f * Time.toMinutes; public float opacityMultiplier = 1f; public Attributes attrs = new Attributes(); + public Sound sound = Sounds.none; + public float soundVol = 0.1f, soundVolMin = 0f; + public float soundVolOscMag = 0f, soundVolOscScl = 20f; //internals public Rand rand = new Rand(); @@ -83,6 +88,11 @@ public abstract class Weather extends UnlockableContent{ state.effectTimer -= Time.delta; } } + + if(!headless && sound != Sounds.none){ + float noise = soundVolOscMag > 0 ? (float)Math.abs(Noise.rawNoise(Time.time() / soundVolOscScl)) * soundVolOscMag : 0; + control.sound.loop(sound, Math.max((soundVol + noise) * state.opacity, soundVolMin)); + } } public void drawOver(WeatherState state){ diff --git a/core/src/mindustry/type/weather/ParticleWeather.java b/core/src/mindustry/type/weather/ParticleWeather.java index 060e9cbe62..b8e5b6e8ba 100644 --- a/core/src/mindustry/type/weather/ParticleWeather.java +++ b/core/src/mindustry/type/weather/ParticleWeather.java @@ -34,7 +34,7 @@ public class ParticleWeather extends Weather{ //load noise texture //TODO mod support - if(drawNoise){ + if(drawNoise && Core.assets != null){ Core.assets.load("sprites/" + noisePath + ".png", Texture.class); } } @@ -74,7 +74,7 @@ public class ParticleWeather extends Weather{ float sspeed = 1f, sscl = 1f, salpha = 1f, offset = 0f; Color col = Tmp.c1.set(noiseColor); for(int i = 0; i < noiseLayers; i++){ - drawNoise(noise, noiseColor, noiseScale * sscl, state.opacity * salpha * opacityMultiplier, baseSpeed * sspeed, state.intensity, windx, windy, offset); + drawNoise(noise, noiseColor, noiseScale * sscl, state.opacity * salpha * opacityMultiplier, sspeed * (useWindVector ? 1f : baseSpeed), state.intensity, windx, windy, offset); sspeed *= noiseLayerSpeedM; salpha *= noiseLayerAlphaM; sscl *= noiseLayerSclM; diff --git a/core/src/mindustry/ui/Bar.java b/core/src/mindustry/ui/Bar.java index d58ad53c37..8e3bd511de 100644 --- a/core/src/mindustry/ui/Bar.java +++ b/core/src/mindustry/ui/Bar.java @@ -31,9 +31,13 @@ public class Bar extends Element{ this.fraction = fraction; lastValue = value = Mathf.clamp(fraction.get()); update(() -> { - this.name = name.get(); - this.blinkColor.set(color.get()); - setColor(color.get()); + try{ + this.name = name.get(); + this.blinkColor.set(color.get()); + setColor(color.get()); + }catch(Exception e){ //getting the fraction may involve referring to invalid data + this.name = ""; + } }); } @@ -62,7 +66,13 @@ public class Bar extends Element{ public void draw(){ if(fraction == null) return; - float computed = Mathf.clamp(fraction.get()); + float computed; + try{ + computed = Mathf.clamp(fraction.get()); + }catch(Exception e){ //getting the fraction may involve referring to invalid data + computed = 0f; + } + if(lastValue > computed){ blink = 1f; lastValue = computed; diff --git a/core/src/mindustry/ui/Fonts.java b/core/src/mindustry/ui/Fonts.java index cbc0100943..91c7873f2d 100644 --- a/core/src/mindustry/ui/Fonts.java +++ b/core/src/mindustry/ui/Fonts.java @@ -22,21 +22,33 @@ import arc.scene.style.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; +import mindustry.*; import mindustry.core.*; +import mindustry.ctype.*; +import mindustry.gen.*; import java.util.*; public class Fonts{ private static final String mainFont = "fonts/font.woff"; + private static final ObjectSet unscaled = ObjectSet.with("iconLarge"); private static ObjectIntMap unicodeIcons = new ObjectIntMap<>(); private static ObjectMap stringIcons = new ObjectMap<>(); + private static ObjectMap largeIcons = new ObjectMap<>(); + private static TextureRegion[] iconTable; + private static int lastCid; public static Font def; public static Font outline; public static Font chat; public static Font icon; + public static Font iconLarge; public static Font tech; + public static TextureRegion logicIcon(int id){ + return iconTable[id]; + } + public static int getUnicode(String content){ return unicodeIcons.get(content, 0); } @@ -59,6 +71,7 @@ public class Fonts{ } public static void loadFonts(){ + largeIcons.clear(); FreeTypeFontParameter param = fontParameter(); Core.assets.load("default", Font.class, new FreeTypeFontLoaderParameter(mainFont, param)).loaded = f -> Fonts.def = (Font)f; @@ -68,6 +81,25 @@ public class Fonts{ incremental = true; characters = "\0"; }})).loaded = f -> Fonts.icon = (Font)f; + Core.assets.load("iconLarge", Font.class, new FreeTypeFontLoaderParameter("fonts/icon.ttf", new FreeTypeFontParameter(){{ + size = 48; + incremental = false; + characters = "\0" + Iconc.all; + borderWidth = 5f; + borderColor = Color.darkGray; + }})).loaded = f -> Fonts.iconLarge = (Font)f; + } + + public static TextureRegion getLargeIcon(String name){ + return largeIcons.get(name, () -> { + var region = new TextureRegion(); + int code = Iconc.codes.get(name, '\uF8D4'); + var glyph = iconLarge.getData().getGlyph((char)code); + if(glyph == null) return Core.atlas.find("error"); + region.set(iconLarge.getRegion().texture); + region.set(glyph.u, glyph.v2, glyph.u2, glyph.v); + return region; + }); } public static void loadContentIcons(){ @@ -97,7 +129,7 @@ public class Fonts{ glyph.srcX = 0; glyph.srcY = 0; glyph.width = size; - glyph.height = size; + glyph.height = (int)((float)region.height / region.width * size); glyph.u = region.u; glyph.v = region.v2; glyph.u2 = region.u2; @@ -111,6 +143,19 @@ public class Fonts{ fonts.each(f -> f.getData().setGlyph(ch, glyph)); } } + + iconTable = new TextureRegion[512]; + iconTable[0] = Core.atlas.find("error"); + lastCid = 1; + + Vars.content.each(c -> { + if(c instanceof UnlockableContent u){ + TextureRegion region = Core.atlas.find(u.name + "-icon-logic"); + if(region.found()){ + iconTable[u.iconId = lastCid++] = region; + } + } + }); } /** Called from a static context for use in the loading screen.*/ @@ -129,7 +174,8 @@ public class Fonts{ parameter.fontParameters.borderWidth = Scl.scl(2f); parameter.fontParameters.spaceX -= parameter.fontParameters.borderWidth; } - if(!scaled.contains(parameter.fontParameters)){ + + if(!scaled.contains(parameter.fontParameters) && !unscaled.contains(fileName)){ parameter.fontParameters.size = (int)(Scl.scl(parameter.fontParameters.size)); scaled.add(parameter.fontParameters); } diff --git a/core/src/mindustry/ui/ItemImage.java b/core/src/mindustry/ui/ItemImage.java index fb26769c98..437360829e 100644 --- a/core/src/mindustry/ui/ItemImage.java +++ b/core/src/mindustry/ui/ItemImage.java @@ -3,6 +3,7 @@ package mindustry.ui; import arc.graphics.g2d.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; +import mindustry.core.*; import mindustry.type.*; public class ItemImage extends Stack{ @@ -16,7 +17,7 @@ public class ItemImage extends Stack{ add(new Table(t -> { t.left().bottom(); - t.add(amount + ""); + t.add(amount > 1000 ? UI.formatAmount(amount) : amount + ""); t.pack(); })); } @@ -38,7 +39,7 @@ public class ItemImage extends Stack{ if(stack.amount != 0){ add(new Table(t -> { t.left().bottom(); - t.add(stack.amount + "").style(Styles.outlineLabel); + t.add(stack.amount > 1000 ? UI.formatAmount(stack.amount) : stack.amount + "").style(Styles.outlineLabel); t.pack(); })); } diff --git a/core/src/mindustry/ui/Styles.java b/core/src/mindustry/ui/Styles.java index 802a18004b..6b47d6d0b3 100644 --- a/core/src/mindustry/ui/Styles.java +++ b/core/src/mindustry/ui/Styles.java @@ -26,8 +26,8 @@ public class Styles{ //TODO all these names are inconsistent and not descriptive public static Drawable black, black9, black8, black6, black3, black5, none, flatDown, flatOver; public static ButtonStyle defaultb, waveb; - public static TextButtonStyle defaultt, squaret, nodet, cleart, discordt, infot, clearPartialt, clearTogglet, clearToggleMenut, togglet, transt, fullTogglet, logict; - public static ImageButtonStyle defaulti, nodei, righti, emptyi, emptytogglei, selecti, logici, geni, colori, cleari, clearFulli, clearPartiali, clearPartial2i, clearTogglei, clearTransi, clearToggleTransi, clearTogglePartiali; + public static TextButtonStyle defaultt, squaret, nodet, cleart, discordt, nonet, infot, clearPartialt, clearTogglet, clearToggleMenut, togglet, transt, fullTogglet, logict; + public static ImageButtonStyle defaulti, nodei, righti, emptyi, emptytogglei, selecti, logici, geni, colori, accenti, cleari, clearFulli, clearPartiali, clearPartial2i, clearTogglei, clearTransi, clearToggleTransi, clearTogglePartiali; public static ScrollPaneStyle defaultPane, horizontalPane, smallPane; public static KeybindDialogStyle defaultKeybindDialog; public static SliderStyle defaultSlider, vSlider; @@ -86,6 +86,13 @@ public class Styles{ up = buttonOver; over = buttonDown; }}; + nonet = new TextButtonStyle(){{ + font = Fonts.outline; + fontColor = Color.lightGray; + overFontColor = Pal.accent; + disabledFontColor = Color.gray; + up = none; + }}; cleart = new TextButtonStyle(){{ over = flatOver; font = Fonts.def; @@ -213,6 +220,11 @@ public class Styles{ //imageDownColor = Pal.accent; imageUpColor = Color.white; }}; + accenti = new ImageButtonStyle(){{ + //imageDownColor = Pal.accent; + imageUpColor = Color.lightGray; + imageDownColor = Color.white; + }}; cleari = new ImageButtonStyle(){{ down = flatOver; up = black; diff --git a/core/src/mindustry/ui/dialogs/BaseDialog.java b/core/src/mindustry/ui/dialogs/BaseDialog.java index b180763f86..b99b164ca4 100644 --- a/core/src/mindustry/ui/dialogs/BaseDialog.java +++ b/core/src/mindustry/ui/dialogs/BaseDialog.java @@ -1,7 +1,6 @@ package mindustry.ui.dialogs; import arc.*; -import arc.input.*; import arc.scene.ui.*; import arc.util.*; import mindustry.core.GameState.*; @@ -53,15 +52,15 @@ public class BaseDialog extends Dialog{ }); } + public void addCloseListener(){ + closeOnBack(); + } + @Override public void addCloseButton(){ buttons.defaults().size(210f, 64f); buttons.button("@back", Icon.left, this::hide).size(210f, 64f); - keyDown(key -> { - if(key == KeyCode.escape || key == KeyCode.back){ - Core.app.post(this::hide); - } - }); + addCloseListener(); } } diff --git a/core/src/mindustry/ui/dialogs/ContentInfoDialog.java b/core/src/mindustry/ui/dialogs/ContentInfoDialog.java index 89cf556cb1..b076d4b766 100644 --- a/core/src/mindustry/ui/dialogs/ContentInfoDialog.java +++ b/core/src/mindustry/ui/dialogs/ContentInfoDialog.java @@ -1,6 +1,5 @@ package mindustry.ui.dialogs; -import arc.graphics.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; @@ -36,16 +35,21 @@ public class ContentInfoDialog extends BaseDialog{ table.row(); - table.image().height(3).color(Color.lightGray).pad(8).padLeft(0).padRight(0).fillX(); - - table.row(); - if(content.description != null){ - table.add(content.displayDescription()).padLeft(5).padRight(5).width(400f).wrap().fillX(); + var any = content.stats.toMap().size > 0; + + if(any){ + table.add("@category.purpose").color(Pal.accent).fillX().padTop(10); + table.row(); + } + + table.add("[lightgray]" + content.displayDescription()).wrap().fillX().padLeft(any ? 10 : 0).width(500f).padTop(any ? 0 : 10).left(); table.row(); - table.image().height(3).color(Color.lightGray).pad(8).padLeft(0).padRight(0).fillX(); - table.row(); + if(!content.stats.useCategories && any){ + table.add("@category.general").fillX().color(Pal.accent); + table.row(); + } } Stats stats = content.stats; @@ -76,6 +80,11 @@ public class ContentInfoDialog extends BaseDialog{ } } + if(content.details != null){ + table.add("[gray]" + content.details).pad(6).padTop(20).width(400f).wrap().fillX(); + table.row(); + } + ScrollPane pane = new ScrollPane(table); cont.add(pane); diff --git a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java index 42fac7be72..4d6a4483f9 100644 --- a/core/src/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/mindustry/ui/dialogs/CustomRulesDialog.java @@ -134,7 +134,7 @@ public class CustomRulesDialog extends BaseDialog{ check("@rules.waves", b -> rules.waves = b, () -> rules.waves); check("@rules.wavetimer", b -> rules.waveTimer = b, () -> rules.waveTimer); check("@rules.waitForWaveToEnd", b -> rules.waitEnemies = b, () -> rules.waitEnemies); - number("@rules.wavespacing", false, f -> rules.waveSpacing = f * 60f, () -> rules.waveSpacing / 60f, () -> true); + number("@rules.wavespacing", false, f -> rules.waveSpacing = f * 60f, () -> rules.waveSpacing / 60f, () -> true, 1, Float.MAX_VALUE); number("@rules.dropzoneradius", false, f -> rules.dropZoneRadius = f * tilesize, () -> rules.dropZoneRadius / tilesize, () -> true); title("@rules.title.resourcesbuilding"); @@ -142,7 +142,7 @@ public class CustomRulesDialog extends BaseDialog{ check("@rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions); check("@rules.schematic", b-> rules.schematicsAllowed = b, () -> rules.schematicsAllowed); number("@rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources); - number("@rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier); + number("@rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier, 0.00001f, 10000f); number("@rules.deconstructrefundmultiplier", false, f -> rules.deconstructRefundMultiplier = f, () -> rules.deconstructRefundMultiplier, () -> !rules.infiniteResources); number("@rules.blockhealthmultiplier", f -> rules.blockHealthMultiplier = f, () -> rules.blockHealthMultiplier); number("@rules.blockdamagemultiplier", f -> rules.blockDamageMultiplier = f, () -> rules.blockDamageMultiplier); @@ -162,7 +162,7 @@ public class CustomRulesDialog extends BaseDialog{ check("@rules.unitammo", b -> rules.unitAmmo = b, () -> rules.unitAmmo); number("@rules.unithealthmultiplier", f -> rules.unitHealthMultiplier = f, () -> rules.unitHealthMultiplier); number("@rules.unitdamagemultiplier", f -> rules.unitDamageMultiplier = f, () -> rules.unitDamageMultiplier); - number("@rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier); + number("@rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier, 0.00001f, 100f); title("@rules.title.enemy"); check("@rules.attack", b -> rules.attackMode = b, () -> rules.attackMode); @@ -189,10 +189,22 @@ public class CustomRulesDialog extends BaseDialog{ } void number(String text, Floatc cons, Floatp prov){ - number(text, false, cons, prov, () -> true); + number(text, false, cons, prov, () -> true, 0, Float.MAX_VALUE); + } + + void number(String text, Floatc cons, Floatp prov, float min, float max){ + number(text, false, cons, prov, () -> true, min, max); } void number(String text, boolean integer, Floatc cons, Floatp prov, Boolp condition){ + number(text, integer, cons, prov, condition, 0, Float.MAX_VALUE); + } + + void number(String text, Floatc cons, Floatp prov, Boolp condition){ + number(text, false, cons, prov, condition, 0, Float.MAX_VALUE); + } + + void number(String text, boolean integer, Floatc cons, Floatp prov, Boolp condition, float min, float max){ main.table(t -> { t.left(); t.add(text).left().padRight(5) @@ -200,7 +212,7 @@ public class CustomRulesDialog extends BaseDialog{ t.field((integer ? (int)prov.get() : prov.get()) + "", s -> cons.get(Strings.parseFloat(s))) .padRight(100f) .update(a -> a.setDisabled(!condition.get())) - .valid(Strings::canParsePositiveFloat).width(120f).left().addInputDialog(); + .valid(f -> Strings.canParsePositiveFloat(f) && Strings.parseFloat(f) >= min && Strings.parseFloat(f) <= max).width(120f).left().addInputDialog(); }).padTop(0); main.row(); } diff --git a/core/src/mindustry/ui/dialogs/DatabaseDialog.java b/core/src/mindustry/ui/dialogs/DatabaseDialog.java index 1a718e318a..3b78fd80f1 100644 --- a/core/src/mindustry/ui/dialogs/DatabaseDialog.java +++ b/core/src/mindustry/ui/dialogs/DatabaseDialog.java @@ -57,7 +57,7 @@ public class DatabaseDialog extends BaseDialog{ UnlockableContent unlock = (UnlockableContent)array.get(i); Image image = unlocked(unlock) ? new Image(unlock.icon(Cicon.medium)).setScaling(Scaling.fit) : new Image(Icon.lock, Pal.gray); - list.add(image).size(8*4).pad(3); + list.add(image).size(8 * 4).pad(3); ClickListener listener = new ClickListener(); image.addListener(listener); if(!Vars.mobile && unlocked(unlock)){ diff --git a/core/src/mindustry/ui/dialogs/FileChooser.java b/core/src/mindustry/ui/dialogs/FileChooser.java index 555df63e33..c755585b12 100644 --- a/core/src/mindustry/ui/dialogs/FileChooser.java +++ b/core/src/mindustry/ui/dialogs/FileChooser.java @@ -51,11 +51,7 @@ public class FileChooser extends BaseDialog{ ok.fireClick(); }); - keyDown(key -> { - if(key == KeyCode.escape || key == KeyCode.back){ - Core.app.post(this::hide); - } - }); + addCloseListener(); } private void setupWidgets(){ diff --git a/core/src/mindustry/ui/dialogs/GameOverDialog.java b/core/src/mindustry/ui/dialogs/GameOverDialog.java index ceea590826..8c69756a3c 100644 --- a/core/src/mindustry/ui/dialogs/GameOverDialog.java +++ b/core/src/mindustry/ui/dialogs/GameOverDialog.java @@ -1,8 +1,8 @@ package mindustry.ui.dialogs; import arc.*; +import mindustry.core.GameState.*; import mindustry.game.EventType.*; -import mindustry.game.GameStats.*; import mindustry.game.*; import mindustry.type.*; import mindustry.ui.*; @@ -16,6 +16,8 @@ public class GameOverDialog extends BaseDialog{ super("@gameover"); setFillParent(true); shown(this::rebuild); + + Events.on(ResetEvent.class, e -> hide()); } public void show(Team winner){ @@ -29,13 +31,13 @@ public class GameOverDialog extends BaseDialog{ } void rebuild(){ - title.setText("@gameover"); + title.setText(state.isCampaign() ? "@sector.curlost" : "@gameover"); buttons.clear(); cont.clear(); buttons.margin(10); - if(state.rules.pvp){ + if(state.rules.pvp && winner != null){ cont.add(Core.bundle.format("gameover.pvp", winner.localized())).pad(6); buttons.button("@menu", () -> { hide(); @@ -50,52 +52,51 @@ public class GameOverDialog extends BaseDialog{ cont.pane(t -> { t.margin(13f); t.left().defaults().left(); - t.add(Core.bundle.format("stat.wave", state.stats.wavesLasted)); - t.row(); - t.add(Core.bundle.format("stat.enemiesDestroyed", state.stats.enemyUnitsDestroyed)); - t.row(); - t.add(Core.bundle.format("stat.built", state.stats.buildingsBuilt)); - t.row(); - t.add(Core.bundle.format("stat.destroyed", state.stats.buildingsDestroyed)); - t.row(); - t.add(Core.bundle.format("stat.deconstructed", state.stats.buildingsDeconstructed)); - t.row(); + t.add(Core.bundle.format("stat.wave", state.stats.wavesLasted)).row(); + t.add(Core.bundle.format("stat.enemiesDestroyed", state.stats.enemyUnitsDestroyed)).row(); + t.add(Core.bundle.format("stat.built", state.stats.buildingsBuilt)).row(); + t.add(Core.bundle.format("stat.destroyed", state.stats.buildingsDestroyed)).row(); + t.add(Core.bundle.format("stat.deconstructed", state.stats.buildingsDeconstructed)).row(); if(control.saves.getCurrent() != null){ - t.add(Core.bundle.format("stat.playtime", control.saves.getCurrent().getPlayTime())); - t.row(); + t.add(Core.bundle.format("stat.playtime", control.saves.getCurrent().getPlayTime())).row(); } if(state.isCampaign() && !state.stats.itemsDelivered.isEmpty()){ - t.add("@stat.delivered"); - t.row(); + t.add("@stat.delivered").row(); for(Item item : content.items()){ if(state.stats.itemsDelivered.get(item, 0) > 0){ t.table(items -> { items.add(" [lightgray]" + state.stats.itemsDelivered.get(item, 0)); items.image(item.icon(Cicon.small)).size(8 * 3).pad(4); - }).left(); - t.row(); + }).left().row(); } } } - if(state.hasSector()){ - RankResult result = state.stats.calculateRank(state.getSector(), true); - t.add(Core.bundle.format("stat.rank", result.rank + result.modifier)); - t.row(); + if(state.isCampaign() && net.client()){ + t.add("@gameover.waiting").padTop(20f).row(); } + }).pad(12); if(state.isCampaign()){ - buttons.button("@continue", () -> { - hide(); - logic.reset(); - ui.planet.show(); - }).size(130f, 60f); + if(net.client()){ + buttons.button("@gameover.disconnect", () -> { + logic.reset(); + net.reset(); + hide(); + state.set(State.menu); + }).size(170f, 60f); + }else{ + buttons.button("@continue", () -> { + hide(); + ui.planet.show(); + }).size(170f, 60f); + } }else{ buttons.button("@menu", () -> { hide(); logic.reset(); - }).size(130f, 60f); + }).size(140f, 60f); } } } diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index aa4d9c22c8..f3d200f08a 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -31,6 +31,7 @@ public class JoinDialog extends BaseDialog{ Table hosts = new Table(); int totalHosts; int refreshes; + boolean showHidden; public JoinDialog(){ super("@joingame"); @@ -252,9 +253,9 @@ public class JoinDialog extends BaseDialog{ hosts.clear(); - section("@servers.local", local); - section("@servers.remote", remote); - section("@servers.global", global); + section("@servers.local", local, false); + section("@servers.remote", remote, false); + section("@servers.global", global, true); ScrollPane pane = new ScrollPane(hosts); pane.setFadeScrollBars(false); @@ -302,12 +303,21 @@ public class JoinDialog extends BaseDialog{ }); } - void section(String label, Table servers){ + void section(String label, Table servers, boolean eye){ Collapser coll = new Collapser(servers, Core.settings.getBool("collapsed-" + label, false)); coll.setDuration(0.1f); hosts.table(name -> { name.add(label).pad(10).growX().left().color(Pal.accent); + + if(eye){ + name.button(Icon.eyeSmall, Styles.emptyi, () -> { + showHidden = !showHidden; + refreshGlobal(); + }).update(i -> i.getStyle().imageUp = (showHidden ? Icon.eyeSmall : Icon.eyeOffSmall)) + .size(40f).right().padRight(3).tooltip("@servers.showhidden"); + } + name.button(Icon.downOpen, Styles.emptyi, () -> { coll.toggle(false); Core.settings.put("collapsed-" + label, coll.isCollapsed()); @@ -334,17 +344,62 @@ public class JoinDialog extends BaseDialog{ global.clear(); global.background(null); - for(String host : defaultServers){ - String resaddress = host.contains(":") ? host.split(":")[0] : host; - int resport = host.contains(":") ? Strings.parseInt(host.split(":")[1]) : port; - net.pingHost(resaddress, resport, res -> { - if(refreshes != cur) return; - res.port = resport; - addGlobalHost(res); - }, e -> {}); + for(ServerGroup group : defaultServers){ + boolean hidden = group.hidden(); + if(hidden && !showHidden){ + continue; + } + + //table containing all groups + global.table(g -> { + for(String address : group.addresses){ + String resaddress = address.contains(":") ? address.split(":")[0] : address; + int resport = address.contains(":") ? Strings.parseInt(address.split(":")[1]) : port; + net.pingHost(resaddress, resport, res -> { + if(refreshes != cur) return; + res.port = resport; + + //add header + if(g.getChildren().isEmpty()){ + g.table(head -> { + if(!group.name.isEmpty()){ + head.add(group.name).color(Color.lightGray).padRight(4); + } + head.image().height(3f).growX().color(Color.lightGray); + + //button for showing/hiding servers + ImageButton[] image = {null}; + image[0] = head.button(hidden ? Icon.eyeOffSmall : Icon.eyeSmall, Styles.accenti, () -> { + group.setHidden(!group.hidden()); + image[0].getStyle().imageUp = group.hidden() ? Icon.eyeOffSmall : Icon.eyeSmall; + if(group.hidden() && !showHidden){ + g.remove(); + } + }).size(40f).get(); + image[0].addListener(new Tooltip(t -> t.background(Styles.black6).margin(4).label(() -> !group.hidden() ? "@server.shown" : "@server.hidden"))); + }).width(targetWidth()).padBottom(-2).row(); + } + + addGlobalHost(res, g); + + g.margin(5f); + g.pack(); + }, e -> {}); + } + }).row(); } } + void addGlobalHost(Host host, Table container){ + global.background(null); + float w = targetWidth(); + + container.button(b -> buildServer(host, b), Styles.cleart, () -> { + Events.fire(new ClientPreConnectEvent(host)); + safeConnect(host.address, host.port, host.version); + }).width(w).row(); + } + void finishLocalHosts(){ if(totalHosts == 0){ local.clear(); @@ -367,26 +422,10 @@ public class JoinDialog extends BaseDialog{ local.row(); - TextButton button = local.button("", Styles.cleart, () -> { + local.button(b -> buildServer(host, b), Styles.cleart, () -> { Events.fire(new ClientPreConnectEvent(host)); safeConnect(host.address, host.port, host.version); - }).width(w).pad(5f).get(); - button.clearChildren(); - buildServer(host, button); - } - - void addGlobalHost(Host host){ - global.background(null); - float w = targetWidth(); - - global.row(); - - TextButton button = global.button("", Styles.cleart, () -> { - Events.fire(new ClientPreConnectEvent(host)); - safeConnect(host.address, host.port, host.version); - }).width(w).pad(5f).get(); - button.clearChildren(); - buildServer(host, button); + }).width(w); } public void connect(String ip, int port){ @@ -439,11 +478,21 @@ public class JoinDialog extends BaseDialog{ //get servers Core.net.httpGet(becontrol.active() ? serverJsonBeURL : serverJsonV6URL, result -> { try{ + Jval val = Jval.read(result.getResultAsString()); Core.app.post(() -> { try{ defaultServers.clear(); - val.asArray().each(child -> defaultServers.add(child.getString("address", ""))); + val.asArray().each(child -> { + String name = child.getString("name", ""); + String[] addresses; + if(child.has("addresses") || (child.has("address") && child.get("address").isArray())){ + addresses = (child.has("addresses") ? child.get("addresses") : child.get("address")).asArray().map(Jval::asString).toArray(String.class); + }else{ + addresses = new String[]{child.getString("address", "")}; + } + defaultServers.add(new ServerGroup(name, addresses)); + }); Log.info("Fetched @ global servers.", defaultServers.size); }catch(Throwable ignored){ Log.err("Failed to parse community servers."); @@ -491,4 +540,4 @@ public class JoinDialog extends BaseDialog{ public Server(){ } } -} \ No newline at end of file +} diff --git a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java index 62db818bf7..c8ea27ae97 100644 --- a/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java +++ b/core/src/mindustry/ui/dialogs/LaunchLoadoutDialog.java @@ -2,7 +2,6 @@ package mindustry.ui.dialogs; import arc.*; import arc.func.*; -import arc.input.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; @@ -37,16 +36,19 @@ public class LaunchLoadoutDialog extends BaseDialog{ buttons.defaults().size(160f, 64f); buttons.button("@back", Icon.left, this::hide); - keyDown(key -> { - if(key == KeyCode.escape || key == KeyCode.back){ - Core.app.post(this::hide); - } - }); + addCloseListener(); - ItemSeq sitems = sector.getItems(); + ItemSeq sitems = sector.items(); //updates sum requirements Runnable update = () -> { + int cap = selected.findCore().itemCapacity; + + //cap resources based on core type + ItemSeq resources = universe.getLaunchResources(); + resources.min(cap); + universe.updateLaunchResources(resources); + total.clear(); selected.requirements().each(total::add); universe.getLaunchResources().each(total::add); @@ -61,10 +63,10 @@ public class LaunchLoadoutDialog extends BaseDialog{ ItemSeq launches = universe.getLaunchResources(); for(ItemStack s : total){ - table.image(s.item.icon(Cicon.small)).left(); + table.image(s.item.icon(Cicon.small)).left().size(Cicon.small.size); int as = schems.get(s.item), al = launches.get(s.item); - String amountStr = "[lightgray]" + (al + " + [accent]" + as + "[lightgray]"); + String amountStr = (al + as) + "[gray] (" + (al + " + " + as + ")"); table.add( sitems.has(s.item, s.amount) ? amountStr : @@ -84,7 +86,7 @@ public class LaunchLoadoutDialog extends BaseDialog{ ItemSeq stacks = universe.getLaunchResources(); Seq out = stacks.toSeq(); - loadout.show(core.itemCapacity, out, UnlockableContent::unlocked, out::clear, () -> {}, () -> { + loadout.show(selected.findCore().itemCapacity, out, UnlockableContent::unlocked, out::clear, () -> {}, () -> { universe.updateLaunchResources(new ItemSeq(out)); update.run(); rebuildItems.run(); @@ -101,25 +103,35 @@ public class LaunchLoadoutDialog extends BaseDialog{ ButtonGroup