diff --git a/android/build.gradle b/android/build.gradle index 491aaf0a5a..202558c172 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript{ } dependencies{ - classpath 'com.android.tools.build:gradle:3.4.1' + classpath 'com.android.tools.build:gradle:3.4.2' } } diff --git a/android/ic_launcher-web.png b/android/ic_launcher-web.png index 658c1fd713..e511ce80dc 100644 Binary files a/android/ic_launcher-web.png and b/android/ic_launcher-web.png differ diff --git a/android/res/drawable/ic_launcher_background.png b/android/res/drawable/ic_launcher_background.png index 8e013ea019..d9a289a404 100644 Binary files a/android/res/drawable/ic_launcher_background.png and b/android/res/drawable/ic_launcher_background.png differ diff --git a/android/res/drawable/ic_launcher_foreground.png b/android/res/drawable/ic_launcher_foreground.png index 7adbf4e2c5..8192c19a30 100644 Binary files a/android/res/drawable/ic_launcher_foreground.png and b/android/res/drawable/ic_launcher_foreground.png differ diff --git a/android/res/mipmap-hdpi/ic_launcher.png b/android/res/mipmap-hdpi/ic_launcher.png index f4d594a423..111f1301ff 100644 Binary files a/android/res/mipmap-hdpi/ic_launcher.png and b/android/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/res/mipmap-hdpi/ic_launcher_background.png b/android/res/mipmap-hdpi/ic_launcher_background.png index 4a792ac88c..b590990117 100644 Binary files a/android/res/mipmap-hdpi/ic_launcher_background.png and b/android/res/mipmap-hdpi/ic_launcher_background.png differ diff --git a/android/res/mipmap-hdpi/ic_launcher_foreground.png b/android/res/mipmap-hdpi/ic_launcher_foreground.png index f4bace551a..532913af1b 100644 Binary files a/android/res/mipmap-hdpi/ic_launcher_foreground.png and b/android/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/res/mipmap-hdpi/ic_launcher_round.png b/android/res/mipmap-hdpi/ic_launcher_round.png index ffd1c7fca6..b294bb71d3 100644 Binary files a/android/res/mipmap-hdpi/ic_launcher_round.png and b/android/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/android/res/mipmap-mdpi/ic_launcher.png b/android/res/mipmap-mdpi/ic_launcher.png index 4071a357a3..43a09e4dd3 100644 Binary files a/android/res/mipmap-mdpi/ic_launcher.png and b/android/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/res/mipmap-mdpi/ic_launcher_background.png b/android/res/mipmap-mdpi/ic_launcher_background.png index 50c0775712..aa3687defe 100644 Binary files a/android/res/mipmap-mdpi/ic_launcher_background.png and b/android/res/mipmap-mdpi/ic_launcher_background.png differ diff --git a/android/res/mipmap-mdpi/ic_launcher_foreground.png b/android/res/mipmap-mdpi/ic_launcher_foreground.png index 10c2324cba..ef9662943f 100644 Binary files a/android/res/mipmap-mdpi/ic_launcher_foreground.png and b/android/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/res/mipmap-mdpi/ic_launcher_round.png b/android/res/mipmap-mdpi/ic_launcher_round.png index 5b314cf65f..b453bff4ea 100644 Binary files a/android/res/mipmap-mdpi/ic_launcher_round.png and b/android/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/android/res/mipmap-xhdpi/ic_launcher.png b/android/res/mipmap-xhdpi/ic_launcher.png index f76fa1cd09..b5624655ab 100644 Binary files a/android/res/mipmap-xhdpi/ic_launcher.png and b/android/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/res/mipmap-xhdpi/ic_launcher_background.png b/android/res/mipmap-xhdpi/ic_launcher_background.png index 6b4646a1c2..67381b3c90 100644 Binary files a/android/res/mipmap-xhdpi/ic_launcher_background.png and b/android/res/mipmap-xhdpi/ic_launcher_background.png differ diff --git a/android/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/res/mipmap-xhdpi/ic_launcher_foreground.png index 34f6137a4d..d08ce02845 100644 Binary files a/android/res/mipmap-xhdpi/ic_launcher_foreground.png and b/android/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/res/mipmap-xhdpi/ic_launcher_round.png b/android/res/mipmap-xhdpi/ic_launcher_round.png index 260458750c..98a4e2e20f 100644 Binary files a/android/res/mipmap-xhdpi/ic_launcher_round.png and b/android/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/android/res/mipmap-xxhdpi/ic_launcher.png b/android/res/mipmap-xxhdpi/ic_launcher.png index cde10344a7..ea3afe0e17 100644 Binary files a/android/res/mipmap-xxhdpi/ic_launcher.png and b/android/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/res/mipmap-xxhdpi/ic_launcher_background.png b/android/res/mipmap-xxhdpi/ic_launcher_background.png index bfda7fa416..74f320071a 100644 Binary files a/android/res/mipmap-xxhdpi/ic_launcher_background.png and b/android/res/mipmap-xxhdpi/ic_launcher_background.png differ diff --git a/android/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/res/mipmap-xxhdpi/ic_launcher_foreground.png index 637925a18a..1f4c911fde 100644 Binary files a/android/res/mipmap-xxhdpi/ic_launcher_foreground.png and b/android/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/res/mipmap-xxhdpi/ic_launcher_round.png b/android/res/mipmap-xxhdpi/ic_launcher_round.png index 8d00a8c395..c7671e3168 100644 Binary files a/android/res/mipmap-xxhdpi/ic_launcher_round.png and b/android/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/android/res/mipmap-xxxhdpi/ic_launcher.png b/android/res/mipmap-xxxhdpi/ic_launcher.png index db23766b64..772c78f87d 100644 Binary files a/android/res/mipmap-xxxhdpi/ic_launcher.png and b/android/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/res/mipmap-xxxhdpi/ic_launcher_background.png b/android/res/mipmap-xxxhdpi/ic_launcher_background.png index 96b6c95fbd..382e4de2e6 100644 Binary files a/android/res/mipmap-xxxhdpi/ic_launcher_background.png and b/android/res/mipmap-xxxhdpi/ic_launcher_background.png differ diff --git a/android/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/res/mipmap-xxxhdpi/ic_launcher_foreground.png index e8739f65cf..4da2f6e102 100644 Binary files a/android/res/mipmap-xxxhdpi/ic_launcher_foreground.png and b/android/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/res/mipmap-xxxhdpi/ic_launcher_round.png index f3f3aaa547..2979014e5f 100644 Binary files a/android/res/mipmap-xxxhdpi/ic_launcher_round.png and b/android/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 28426c356d..4792bd6d89 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -16,7 +16,7 @@ import io.anuke.arc.backends.android.surfaceview.AndroidApplicationConfiguration import io.anuke.arc.files.FileHandle; import io.anuke.arc.function.Consumer; import io.anuke.arc.function.Predicate; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.arc.util.Strings; import io.anuke.arc.util.serialization.Base64Coder; import io.anuke.mindustry.core.Platform; @@ -34,6 +34,7 @@ public class AndroidLauncher extends AndroidApplication{ public static final int PERMISSION_REQUEST_CODE = 1; boolean doubleScaleTablets = true; FileChooser chooser; + Runnable permCallback; @Override protected void onCreate(Bundle savedInstanceState){ @@ -66,6 +67,24 @@ public class AndroidLauncher extends AndroidApplication{ } } + @Override + public void requestExternalPerms(Runnable callback){ + if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && + checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){ + callback.run(); + }else{ + permCallback = callback; + ArrayList perms = new ArrayList<>(); + if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ + perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); + } + if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ + perms.add(Manifest.permission.READ_EXTERNAL_STORAGE); + } + requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE); + } + } + @Override public void shareFile(FileHandle file){ } @@ -96,7 +115,7 @@ public class AndroidLauncher extends AndroidApplication{ @Override public void endForceLandscape(){ - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); } @Override @@ -106,7 +125,7 @@ public class AndroidLauncher extends AndroidApplication{ }; if(doubleScaleTablets && isTablet(this.getContext())){ - Unit.dp.addition = 0.5f; + UnitScl.dp.addition = 0.5f; } config.hideStatusBar = true; @@ -123,7 +142,11 @@ public class AndroidLauncher extends AndroidApplication{ if(i != PackageManager.PERMISSION_GRANTED) return; } if(chooser != null){ - chooser.show(); + Core.app.post(chooser::show); + } + if(permCallback != null){ + Core.app.post(permCallback); + permCallback = null; } } } diff --git a/annotations/src/main/java/io/anuke/annotations/Annotations.java b/annotations/src/main/java/io/anuke/annotations/Annotations.java index 1d5b62ed46..d964f85401 100644 --- a/annotations/src/main/java/io/anuke/annotations/Annotations.java +++ b/annotations/src/main/java/io/anuke/annotations/Annotations.java @@ -25,7 +25,7 @@ public class Annotations{ } /** Indicates that a method return or field cannot be null.*/ - @Target({ElementType.METHOD, ElementType.FIELD}) + @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface NonNull{ diff --git a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java new file mode 100644 index 0000000000..f8a3c7c34e --- /dev/null +++ b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java @@ -0,0 +1,97 @@ +package io.anuke.annotations; + +import com.squareup.javapoet.*; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.tools.Diagnostic.Kind; +import javax.tools.StandardLocation; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public class AssetsAnnotationProcessor extends AbstractProcessor{ + /** Name of the base package to put all the generated classes. */ + private static final String packageName = "io.anuke.mindustry.gen"; + private int round; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv){ + super.init(processingEnv); + //put all relevant utils into utils class + Utils.typeUtils = processingEnv.getTypeUtils(); + Utils.elementUtils = processingEnv.getElementUtils(); + Utils.filer = processingEnv.getFiler(); + Utils.messager = processingEnv.getMessager(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv){ + if(round++ != 0) return false; //only process 1 round + + try{ + + String path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no") + .toUri().toURL().toString().substring(System.getProperty("os.name").contains("Windows") ? 6 : "file:".length())) + .getParent().getParent().getParent().getParent().getParent().getParent().toString(); + + process("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound", "newSound"); + process("Musics", path + "/assets/music", "io.anuke.arc.audio.Music", "newMusic"); + + return true; + }catch(Exception e){ + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + @Override + public Set getSupportedAnnotationTypes() { + return Collections.singleton("*"); + } + + void process(String classname, String path, String rtype, String loadMethod) throws Exception{ + TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC); + MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); + MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC); + + HashSet names = new HashSet<>(); + Files.list(Paths.get(path)).forEach(p -> { + String fname = p.getFileName().toString(); + String name = p.getFileName().toString(); + name = name.substring(0, name.indexOf(".")); + + if(names.contains(name)){ + Utils.messager.printMessage(Kind.ERROR, "Duplicate file name: " + p.toString() + "!"); + }else{ + names.add(name); + } + + if(SourceVersion.isKeyword(name)){ + name = name + "s"; + } + + load.addStatement(name + " = io.anuke.arc.Core.audio."+loadMethod+"(io.anuke.arc.Core.files.internal($S))", path.substring(path.lastIndexOf("/") + 1) + "/" + fname); + dispose.addStatement(name + ".dispose()"); + dispose.addStatement(name + " = null"); + type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); + //cons.consume(type, fname, name); + }); + + if(classname.equals("Sounds")){ + type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); + } + + type.addMethod(load.build()); + type.addMethod(dispose.build()); + JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer); + } +} diff --git a/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor index 5954bfccb9..0094bb0b52 100644 --- a/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor +++ b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -1,4 +1,5 @@ io.anuke.annotations.RemoteMethodAnnotationProcessor io.anuke.annotations.SerializeAnnotationProcessor io.anuke.annotations.StructAnnotationProcessor -io.anuke.annotations.CallSuperAnnotationProcessor \ No newline at end of file +io.anuke.annotations.CallSuperAnnotationProcessor +io.anuke.annotations.AssetsAnnotationProcessor \ No newline at end of file diff --git a/core/assets-raw/sprites/blocks/drills/drill-top.png b/core/assets-raw/sprites/blocks/drills/drill-top.png new file mode 100644 index 0000000000..dade4f64a3 Binary files /dev/null and b/core/assets-raw/sprites/blocks/drills/drill-top.png differ diff --git a/core/assets-raw/sprites/blocks/drills/laser-drill-rotator.png b/core/assets-raw/sprites/blocks/drills/laser-drill-rotator.png index 44aa88d6b8..e2e1189386 100644 Binary files a/core/assets-raw/sprites/blocks/drills/laser-drill-rotator.png and b/core/assets-raw/sprites/blocks/drills/laser-drill-rotator.png differ diff --git a/core/assets-raw/sprites/blocks/drills/laser-drill.png b/core/assets-raw/sprites/blocks/drills/laser-drill.png index 95cbc0a8e0..f80542e411 100644 Binary files a/core/assets-raw/sprites/blocks/drills/laser-drill.png and b/core/assets-raw/sprites/blocks/drills/laser-drill.png differ diff --git a/core/assets-raw/sprites/blocks/environment/coal1.png b/core/assets-raw/sprites/blocks/environment/coal1.png index a65216e00d..3caf5ed1b5 100644 Binary files a/core/assets-raw/sprites/blocks/environment/coal1.png and b/core/assets-raw/sprites/blocks/environment/coal1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/copper3.png b/core/assets-raw/sprites/blocks/environment/copper3.png index 47128d4f81..c2f1a903ed 100644 Binary files a/core/assets-raw/sprites/blocks/environment/copper3.png and b/core/assets-raw/sprites/blocks/environment/copper3.png differ diff --git a/core/assets-raw/sprites/blocks/environment/darksand2.png b/core/assets-raw/sprites/blocks/environment/darksand2.png index 2ee445aba9..978f2d22d1 100644 Binary files a/core/assets-raw/sprites/blocks/environment/darksand2.png and b/core/assets-raw/sprites/blocks/environment/darksand2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/lead1.png b/core/assets-raw/sprites/blocks/environment/lead1.png index ea20a9261d..75b71b0f8d 100644 Binary files a/core/assets-raw/sprites/blocks/environment/lead1.png and b/core/assets-raw/sprites/blocks/environment/lead1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/lead2.png b/core/assets-raw/sprites/blocks/environment/lead2.png index 7741575e00..b61a3a5cfb 100644 Binary files a/core/assets-raw/sprites/blocks/environment/lead2.png and b/core/assets-raw/sprites/blocks/environment/lead2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/lead3.png b/core/assets-raw/sprites/blocks/environment/lead3.png index c7e5ab676a..87360e6656 100644 Binary files a/core/assets-raw/sprites/blocks/environment/lead3.png and b/core/assets-raw/sprites/blocks/environment/lead3.png differ diff --git a/core/assets-raw/sprites/blocks/environment/salt.png b/core/assets-raw/sprites/blocks/environment/salt.png index df9fd72915..f6cde0093c 100644 Binary files a/core/assets-raw/sprites/blocks/environment/salt.png and b/core/assets-raw/sprites/blocks/environment/salt.png differ diff --git a/core/assets-raw/sprites/blocks/environment/sand2.png b/core/assets-raw/sprites/blocks/environment/sand2.png index 2d6b23f129..c13afa2030 100644 Binary files a/core/assets-raw/sprites/blocks/environment/sand2.png and b/core/assets-raw/sprites/blocks/environment/sand2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/snow1.png b/core/assets-raw/sprites/blocks/environment/snow1.png index 39f893df24..b33b1194c0 100644 Binary files a/core/assets-raw/sprites/blocks/environment/snow1.png and b/core/assets-raw/sprites/blocks/environment/snow1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/snow2.png b/core/assets-raw/sprites/blocks/environment/snow2.png index 3d1a76608d..d4d28874a5 100644 Binary files a/core/assets-raw/sprites/blocks/environment/snow2.png and b/core/assets-raw/sprites/blocks/environment/snow2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/snow3.png b/core/assets-raw/sprites/blocks/environment/snow3.png index c52f98cdae..b1eeb60dd2 100644 Binary files a/core/assets-raw/sprites/blocks/environment/snow3.png and b/core/assets-raw/sprites/blocks/environment/snow3.png differ diff --git a/core/assets-raw/sprites/blocks/environment/thorium1.png b/core/assets-raw/sprites/blocks/environment/thorium1.png index ce0de1271c..6c69abda01 100644 Binary files a/core/assets-raw/sprites/blocks/environment/thorium1.png and b/core/assets-raw/sprites/blocks/environment/thorium1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/thorium2.png b/core/assets-raw/sprites/blocks/environment/thorium2.png index 9372bf6f81..5995079270 100644 Binary files a/core/assets-raw/sprites/blocks/environment/thorium2.png and b/core/assets-raw/sprites/blocks/environment/thorium2.png differ diff --git a/core/assets-raw/sprites/blocks/environment/titanium1.png b/core/assets-raw/sprites/blocks/environment/titanium1.png index 9ba087608a..4cfd1bf647 100644 Binary files a/core/assets-raw/sprites/blocks/environment/titanium1.png and b/core/assets-raw/sprites/blocks/environment/titanium1.png differ diff --git a/core/assets-raw/sprites/blocks/environment/titanium2.png b/core/assets-raw/sprites/blocks/environment/titanium2.png index c6add6ad54..60e9d13134 100644 Binary files a/core/assets-raw/sprites/blocks/environment/titanium2.png and b/core/assets-raw/sprites/blocks/environment/titanium2.png differ diff --git a/core/assets-raw/sprites/blocks/liquid/liquid-tank-liquid.png b/core/assets-raw/sprites/blocks/liquid/liquid-tank-liquid.png index 6ce6c746da..3e7b0e032e 100644 Binary files a/core/assets-raw/sprites/blocks/liquid/liquid-tank-liquid.png and b/core/assets-raw/sprites/blocks/liquid/liquid-tank-liquid.png differ diff --git a/core/assets-raw/sprites/blocks/turrets/duo.png b/core/assets-raw/sprites/blocks/turrets/duo.png index efcdb60832..c9717775d6 100644 Binary files a/core/assets-raw/sprites/blocks/turrets/duo.png and b/core/assets-raw/sprites/blocks/turrets/duo.png differ diff --git a/core/assets-raw/sprites/ui/button-edge-over-4.9.png b/core/assets-raw/sprites/ui/button-edge-over-4.9.png new file mode 100644 index 0000000000..92c520676a Binary files /dev/null and b/core/assets-raw/sprites/ui/button-edge-over-4.9.png differ diff --git a/core/assets-raw/sprites/ui/button-square-down.9.png b/core/assets-raw/sprites/ui/button-square-down.9.png new file mode 100644 index 0000000000..44f9870ac6 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-square-down.9.png differ diff --git a/core/assets-raw/sprites/ui/button-square-over.9.png b/core/assets-raw/sprites/ui/button-square-over.9.png new file mode 100644 index 0000000000..4bdc6aa350 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-square-over.9.png differ diff --git a/core/assets-raw/sprites/ui/button-square.9.png b/core/assets-raw/sprites/ui/button-square.9.png new file mode 100644 index 0000000000..a137425df9 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-square.9.png differ diff --git a/core/assets-raw/sprites/ui/button-trans.9.png b/core/assets-raw/sprites/ui/button-trans.9.png new file mode 100644 index 0000000000..39d840e1a2 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-trans.9.png differ diff --git a/core/assets-raw/sprites/units/crawler-leg.png b/core/assets-raw/sprites/units/crawler-leg.png index 68e76d7f8d..af1a7636e9 100644 Binary files a/core/assets-raw/sprites/units/crawler-leg.png and b/core/assets-raw/sprites/units/crawler-leg.png differ diff --git a/core/assets-raw/sprites/units/power-cell.png b/core/assets-raw/sprites/units/power-cell.png index dfbc73a20b..04a09f93f3 100644 Binary files a/core/assets-raw/sprites/units/power-cell.png and b/core/assets-raw/sprites/units/power-cell.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 7c86cd8ce2..ce45c658e4 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -74,9 +74,9 @@ server.kicked.nameEmpty = Your chosen name is invalid. server.kicked.idInUse = You are already on this server! Connecting with two accounts is not permitted. server.kicked.customClient = This server does not support custom builds. Download an official version. server.kicked.gameover = Game over! -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. +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 Game +hostserver = Host Multiplayer Game hostserver.mobile = Host\nGame host = Host hosting = [accent]Opening server... @@ -157,7 +157,10 @@ cancel = Cancel openlink = Open Link copylink = Copy Link back = Back +classic.export = Export Classic Data +classic.export.text = Classic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? quit.confirm = Are you sure you want to quit? +quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] loading = [accent]Loading... saving = [accent]Saving... wave = [accent]Wave {0} @@ -174,8 +177,8 @@ custom = Custom builtin = Built-In map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone! map.random = [accent]Random Map -map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor. -map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-blue[] cores to this map in the editor. +map.nospawn = This map does not have any cores for the player to spawn in! Add a[accent] orange[] core to this map in the editor. +map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor. map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor. map.invalid = Error loading map: corrupted or invalid map file. editor.brush = Brush @@ -216,7 +219,7 @@ editor.errorsave = Error saving file:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported. editor.errorheader = This map file is either not valid or corrupt. -editor.errorname = Map has no name defined. +editor.errorname = Map has no name defined. Are you trying to load a save file? editor.update = Update editor.randomize = Randomize editor.apply = Apply @@ -268,6 +271,7 @@ filters.empty = [lightgray]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise filter.median = Median +filter.oremedian = Ore Median filter.blend = Blend filter.defaultores = Default Ores filter.ore = Ore @@ -308,6 +312,7 @@ ping = Ping: {0}ms language.restart = Please restart your game for the language settings to take effect. settings = Settings tutorial = Tutorial +tutorial.retake = Re-Take Tutorial editor = Editor mapeditor = Map Editor donate = Donate @@ -322,8 +327,9 @@ bestwave = [lightgray]Best Wave: {0} launch = < LAUNCH > launch.title = Launch Successful launch.next = [lightgray]next opportunity at wave {0} -launch.unable = [scarlet]Unable to LAUNCH.[] {0} Enemies. +launch.unable2 = [scarlet]Unable to LAUNCH.[] launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. +launch.skip.confirm = If you skip now, you will not be able to launch until later waves. uncover = Uncover configure = Configure Loadout configure.locked = [lightgray]Unlock configuring loadout: Wave {0}. @@ -361,18 +367,20 @@ zone.tarFields.name = Tar Fields zone.saltFlats.name = Salt Flats zone.impact0078.name = Impact 0078 zone.crags.name = Crags +zone.fungalPass.name = Fungal Pass zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contains them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. zone.impact0078.description = zone.crags.description = @@ -429,6 +437,7 @@ blocks.shots = Shots blocks.reload = Shots/Second blocks.ammo = Ammo +bar.drilltierreq = Better Drill Required bar.drillspeed = Drill Speed: {0}/s bar.efficiency = Efficiency: {0}% bar.powerbalance = Power: {0}/s @@ -836,9 +845,10 @@ block.container.name = Container block.launch-pad.name = Launch Pad block.launch-pad-large.name = Large Launch Pad team.blue.name = blue -team.red.name = red +team.crux.name = red +team.sharded.name = orange team.orange.name = orange -team.none.name = gray +team.derelict.name = derelict team.green.name = green team.purple.name = purple unit.spirit.name = Spirit Repair Drone @@ -856,27 +866,27 @@ unit.chaos-array.name = Chaos Array unit.eradicator.name = Eradicator unit.lich.name = Lich unit.reaper.name = Reaper -tutorial.begin = Your mission here is to eradicate the[lightgray] enemy[].\n\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this. -tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nPlace one on a copper vein. -tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core. -tutorial.morecopper = More copper is required.\n\nEither mine it manually, or place more drills. -tutorial.turret = Defensive structures must be built to repel the[lightgray] enemy[].\nBuild a duo turret near your base. -tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill next to the turret to supply it with mined copper. -tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend your core for 2 waves. Build more turrets. -tutorial.lead = More ores are available. Explore and mine[accent] lead[].\n\nDrag from your unit to the core to transfer resources. -tutorial.smelter = Copper and lead are weak metals.\nSuperior[accent] Dense Alloy[] can be created in a smelter.\n\nBuild one. -tutorial.densealloy = The smelter will now produce alloy.\nGet some.\nImprove the production if necessary. -tutorial.siliconsmelter = The core will now create a[accent] spirit drone[] for mining and repairing blocks.\n\nFactories for other units can be created with [accent] silicon.\nMake a silicon smelter. -tutorial.silicondrill = Silicon requires[accent] coal[] and[accent] sand[].\nStart by making drills. -tutorial.generator = This technology requires power.\nCreate a[accent] combustion generator[] for it. -tutorial.generatordrill = Combustion generators need fuel.\nFuel it with coal from a drill. -tutorial.node = Power requires transport.\nCreate a[accent] power node[] next to your combustion generator to transfer its power. -tutorial.nodelink = Power can be transferred through contacting power blocks and generators, or by linked power nodes.\n\nLink power by tapping the node and selecting the generator and silicon smelter. -tutorial.silicon = Silicon is being produced. Get some.\n\nImproving the production system is advised. -tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will be used to create attack mechs. -tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. -tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. -tutorial.battle = The[lightgray] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. +tutorial.next = [lightgray] +tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper +tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\n[accent]Right-click[] to stop building. +tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement. +tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[] +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.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered +tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered +tutorial.turret = Defensive structures must be built to repel the[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 resources can then be used to research new technology.\n\n[accent]Press the launch button. + item.copper.description = The most basic structural material. Used extensively in all types of blocks. item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. @@ -897,7 +907,7 @@ item.pyratite.description = An extremely flammable substance used in incendiary 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 head capacity. Extensively used as a coolant. +liquid.cryofluid.description = An inert, non-corrosive liquid created from water and titanium. Has extremely high heat capacity. Extensively used as coolant. mech.alpha-mech.description = The standard control mech. Based on a Dagger unit, with upgraded armor and building capabilities. Has more damage output than a Dart ship. mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons. mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can heal allies in a radius with its repair ability. @@ -924,7 +934,7 @@ block.kiln.description = Smelts sand and lead into the compound known as metagla 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.cryofluidmixer.description = Mixes water and fine titanium titanium powder into cryofluid. Essential for thorium reactor usage. +block.cryofluidmixer.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. @@ -953,7 +963,7 @@ block.door-large.description = A large door. Can be opened and closed by tapping 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.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 requires coolant to prevent overheating. Phase fabric can be used to increase shield size. +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. @@ -961,7 +971,7 @@ block.junction.description = Acts as a bridge for two crossing conveyor belts. U block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. block.sorter.description = Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right. -block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. +block.router.description = Accepts items, then outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.\n\n[scarlet]Never use next to production inputs, as they will get clogged by output.[] block.distributor.description = An advanced router. Splits items to up to 7 other directions equally. block.overflow-gate.description = A combination splitter and router. Only outputs to the left and right if the front path is blocked. 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. @@ -975,7 +985,7 @@ block.liquid-tank.description = Stores a large amount of liquids. Use for creati 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.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. +block.power-node.description = Transmits power to connected nodes. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = An advanced power node with greater range and more connections. block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit. @@ -983,13 +993,13 @@ block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning flammable materials, such as coal. block.thermal-generator.description = Generates power when placed in hot locations. block.turbine-generator.description = An advanced combustion generator. More efficient, but requires additional water for generating steam. -block.differential-generator.description = Generates large amount of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +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.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 copper, lead and coal. +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.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. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index b40685d38e..3ddb50d654 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -4,6 +4,7 @@ contributors = Překladatelé a Sponzoři discord = Připoj se k Mindustry na Discordu! link.discord.description = Oficiální Mindustry chatroom na Discordu! link.github.description = Zdrojový kód hry +link.changelog.description = List of update changes link.dev-builds.description = Nestabilní verze vývoje hry link.trello.description = Oficiální Trello board pro plánované funkce link.itch.io.description = itch.io stránka pro stažení PC nebo webové verze @@ -32,7 +33,6 @@ level.mode = Herní mód: showagain = Znovu neukazovat ! coreattack = < Jádro je pod útokem! > nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent -outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} database = Core Database savegame = Uložit hru loadgame = Načíst hru @@ -95,7 +95,6 @@ server.admins = Admini server.admins.none = Žádní admini nebyli nalezeni. server.add = Přidat server server.delete = Jsi si jistý že chceš smazat tento server? -server.hostname = Hostitel: {0} server.edit = Upravit server server.outdated = [crimson]Zastaralý server![] server.outdated.client = [crimson]Zastaralý klient![] @@ -156,13 +155,6 @@ openlink = Otevřít Odkaz copylink = Zkopírovat Odkaz back = Zpět quit.confirm = Jsi si jistý že chceš ukončit ? -changelog.title = Záznam změn -changelog.loading = Načítání záznamu změn... -changelog.error.android = [accent]Berte v potaz že záznam změn někdy nefunguje na Android 4.4 a níž!\nJe to kvůli interní chybě v systému Android. -changelog.error.ios = [accent]Záznam změn nění aktuálně podporován v systému IOS. -changelog.error = [scarlet]Chyba v načítání záznamu změn!\nZkontrolujte své připojení k internetu. -changelog.current = [yellow][[Aktuální verze] -changelog.latest = [accent][[nejnovější verze] loading = [accent]Načítám... saving = [accent]Ukládám... wave = [accent]Vlna {0} @@ -192,7 +184,9 @@ editor.author = Autor: editor.description = Popis: editor.waves = Waves: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Waves waves.remove = Remove waves.never = @@ -207,13 +201,13 @@ waves.copy = Copy to Clipboard waves.load = Load from Clipboard waves.invalid = Invalid waves in clipboard. waves.copied = Waves copied. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Edit... editor.name = Jméno: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Týmy -editor.elevation = Výška editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Jméno mapy: editor.overwrite = [accent]Varování!\nToto přepíše již existující mapu. editor.overwrite.confirm = [scarlet]Varování![] Mapa s tímto jménem již existuje. Jsi si jistý že ji chceš přepsat? editor.selectmap = Vyber mapu k načtení: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Ore filter.rivernoise = River Noise +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Scatter filter.terrain = Terrain filter.option.scale = Scale @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Šířka: height = Výška: menu = Hlavní menu play = Hrát +campaign = Campaign load = Načíst save = Uložit fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Add... boss.health = Boss Health connectfail = [crimson]Nepovedlo se připojení k serveru:\n\n[accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Již připojeno. error.mapnotfound = Soubor mapy nebyl nalezen! error.io = Network I/O error. error.any = neznámá chyba sítě. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Jazyk settings.reset = nastavit výchozí settings.rebind = Přenastavit @@ -346,12 +383,14 @@ no = Ne info.title = Informace error.title = [crimson]Objevila se chyba error.crashtitle = Objevila se chyba +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Kapacita energie blocks.powershot = Energie na výstřel +blocks.damage = Damage blocks.targetsair = Zaměřuje vzdušné jednotky blocks.targetsground = Targets Ground blocks.itemsmoved = Move Speed @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.indicators.name = Indikátor pro spojence setting.autotarget.name = Automaticky zaměřuje +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = žádný setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = Trénink setting.difficulty.easy = lehká @@ -456,7 +497,11 @@ setting.mutesound.name = Ztišit zvuky setting.crashreport.name = Poslat anonymní spis o zhroucení hry setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Přenastavit klávesy +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Všeobecné category.view.name = Pohled category.multiplayer.name = Multiplayer @@ -505,6 +550,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves +rules.attack = Attack Mode rules.enemyCheat = Infinite AI Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = jednotky content.block.name = Blocks content.mech.name = Mechy item.copper.name = Měď -item.copper.description = Užitečný strukturální materiál. Používá se rozsáhle v ostatních typech bloků. item.lead.name = Olovo -item.lead.description = Základní počáteční materiál. Požívá se rozsáhle v elektronice a v blocích pro transport tekutin. item.coal.name = Uhlí -item.coal.description = Běžné a snadno dostupné palivo, pochází z Ostravy. item.graphite.name = Graphite item.titanium.name = Titánium -item.titanium.description = Vzácný, velice lehký kov, používá se rozsáhle v trasportu tekutin, vrtech a letounech. item.thorium.name = Thorium -item.thorium.description = Hustý, radioaktivní materiál, používá se jako strukturální podpora a jako nuklearní palivo. item.silicon.name = Křemík -item.silicon.description = Extrémně užitečný polovodič, aplikuje se v solárních panelech a v komplexní elektronice. item.plastanium.name = Plastanium -item.plastanium.description = Lehký, kujný materiál, používá se v pokročilém letectví a jako fragmentační střelivo. item.phase-fabric.name = Fázová tkanina -item.phase-fabric.description = Skoro beztížná substance používaná v pokročilé elektronice a v sebeopravné technologii. item.surge-alloy.name = Impulzní slitina -item.surge-alloy.description = Pokročilá slitina s unikátními elektronickými vlastnostmi. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Písek -item.sand.description = Běžný materiál rozšířeně používaný v spalování slitin. item.blast-compound.name = Výbušná směs -item.blast-compound.description = Těkavá směs používaná v bombácha a výbušninách. Dá se spalovat ale jako palivo se nedoporučuje. item.pyratite.name = Pyratite -item.pyratite.description = Extrémně vznětlivá substance, používá ve vznětovém střelivu. item.metaglass.name = Metaglass -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = Voda liquid.slag.name = Slag liquid.oil.name = Ropa @@ -570,31 +601,23 @@ liquid.cryofluid.name = Cryofluid mech.alpha-mech.name = Alfa mech.alpha-mech.weapon = Těžký Opakovač mech.alpha-mech.ability = Roj dronů -mech.alpha-mech.description = Standartní mech. Má slušnou rychlost a poškození; Může vytvořit až 3 drony Pro zvýšenou ofenzivní způsobilost. mech.delta-mech.name = Delta mech.delta-mech.weapon = Obloukový generátor mech.delta-mech.ability = Průtok -mech.delta-mech.description = Rychlý, Lehce obrněný mech vytvořený pro udeř a uteč akce. Působí malé poškození vůči struktůrám, ale může zneškodnit velkou skupinu nepřátelských jednotek velmi rychle svýmy elektro-obloukovými zbraněmi mech.tau-mech.name = Tau mech.tau-mech.weapon = Restruktní Laser mech.tau-mech.ability = Opravná dávka -mech.tau-mech.description = Podpůrný mech. Léčí spojenecké stavby a jednotky střelbou do nich. Může léčit i spojence ve svém poli působení. mech.omega-mech.name = Omega mech.omega-mech.weapon = Rojové střely mech.omega-mech.ability = Obrněná Konfigurace -mech.omega-mech.description = Objemný a velice dovře obrněný mech, určen pro útok v přední linii. Jeho schopnost obrnění blokuje až 90% příchozího poškození. mech.dart-ship.name = Šipka mech.dart-ship.weapon = Opakovač -mech.dart-ship.description = Standartní loď. Poměrně rychlý a lehký, má malou ofenzívu a pomalou rychlost těžení. mech.javelin-ship.name = Oštěp -mech.javelin-ship.description = Loď stylu udeř a uteč. Zpočátku pomalý ale umí akcelerovat do obrovské rychlosti a létat u nepřátelských základen a působit značné škody svými elektrickými zbraněmi a raketami. mech.javelin-ship.weapon = Dávka Raket mech.javelin-ship.ability = Výbojový Posilovač mech.trident-ship.name = Trojzubec -mech.trident-ship.description = Těžký bombardér. Docela dobře obrněný. mech.trident-ship.weapon = Bombová zátoka mech.glaive-ship.name = Glaiva -mech.glaive-ship.description = Obrovská, Dobře obrněná střelecká loď. Vybavena zápalným opakovačem. Dobrá akcelerace a maximální rychlost. mech.glaive-ship.weapon = Plamenný Opakovač item.explosiveness = [LIGHT_GRAY]Výbušnost: {0}% item.flammability = [LIGHT_GRAY]Zápalnost: {0}% @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Kapacita teploty: {0} liquid.viscosity = [LIGHT_GRAY]Viskozita: {0} liquid.temperature = [LIGHT_GRAY]Teplota: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Rock block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0} [LIGHT_GRAY](Constructing) @@ -702,9 +726,7 @@ block.junction.name = Křižovatka block.router.name = Směrovač block.distributor.name = Distributor block.sorter.name = Dělička -block.sorter.description = Třídí předměty. Jestli je předmět shodný s výběrem, je mu dovoleno projít. Naopak neshodné předměty jsou vypuštěny do prava nebo do leva. block.overflow-gate.name = Brána přetečení -block.overflow-gate.description = Kombinace distributoru a děličky která má výstup do leva nebo do prava jen pokud je přední strana zablokovaná. block.silicon-smelter.name = Silicon Smelter block.phase-weaver.name = Tkalcovna pro fázovou tkaninu block.pulverizer.name = Rozmělňovač @@ -756,6 +778,7 @@ block.blast-mixer.name = Výbušninový mixér block.solar-panel.name = Solární panel block.solar-panel-large.name = Velký solární panel block.oil-extractor.name = Ropný Extraktor +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Továrna na Spirit Drony block.phantom-factory.name = Továrna na Fantom Drony block.wraith-factory.name = Továrna na Wraithy @@ -794,7 +817,6 @@ block.spectre.name = Spektr block.meltdown.name = Meltdown block.container.name = Kontejnér block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = modrá team.red.name = červená @@ -803,20 +825,14 @@ team.none.name = šedá team.green.name = zelená team.purple.name = fialová unit.spirit.name = Spirit Dron -unit.spirit.description = Startovní dron. Standartně se objevuje u jádra. Automaticky těží rudy a opravuje stavby. +unit.draug.name = Draug Miner Drone unit.phantom.name = Fantom Dron -unit.phantom.description = Pokročilý dron. Automaticky těží rudy a opravuje stavby. Podstatně víc efektivní než Spirit dron. unit.dagger.name = Dagger -unit.dagger.description = Základní pozemní jednotka. Efektivní ve velkém počtu. unit.crawler.name = Crawler unit.titan.name = Titán -unit.titan.description = Pokročilá, obrněná pozemní jednotka. Útočí jak na pozemní tak vzdušné nepřátelské jednotky. unit.ghoul.name = Ghůl Bombardér -unit.ghoul.description = Těžký, kobercový bombardér. unit.wraith.name = Bojovník Wraith -unit.wraith.description = Rychlý, udeř a uteč stíhací letoun. unit.fortress.name = Pevnost -unit.fortress.description = Težká, pozemní artilérní jednotka. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Postav[accent] Továrnu na Dagger mechy.[]\n\nToto bude tutorial.router = Továrny potřebujou k provozu materiál.\nPolož na dopravník směrovač pro oddělení části nákladu k továrně. tutorial.dagger = Propoj energetické uzly s továrnou.\nJakmile jsou požadavky splněny, Mechy se začnou stavět.\n\nPokládej vrty, generátory a dopravníky dle libosti. tutorial.battle = [LIGHT_GRAY] Nepřítel[] prozradil lokaci svého jádra.\nZnič ho svými bojovými jednotkami. +item.copper.description = Užitečný strukturální materiál. Používá se rozsáhle v ostatních typech bloků. +item.lead.description = Základní počáteční materiál. Požívá se rozsáhle v elektronice a v blocích pro transport tekutin. +item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Běžný materiál rozšířeně používaný v spalování slitin. +item.coal.description = Běžné a snadno dostupné palivo, pochází z Ostravy. +item.titanium.description = Vzácný, velice lehký kov, používá se rozsáhle v trasportu tekutin, vrtech a letounech. +item.thorium.description = Hustý, radioaktivní materiál, používá se jako strukturální podpora a jako nuklearní palivo. +item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. +item.silicon.description = Extrémně užitečný polovodič, aplikuje se v solárních panelech a v komplexní elektronice. +item.plastanium.description = Lehký, kujný materiál, používá se v pokročilém letectví a jako fragmentační střelivo. +item.phase-fabric.description = Skoro beztížná substance používaná v pokročilé elektronice a v sebeopravné technologii. +item.surge-alloy.description = Pokročilá slitina s unikátními elektronickými vlastnostmi. +item.spore-pod.description = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = Těkavá směs používaná v bombácha a výbušninách. Dá se spalovat ale jako palivo se nedoporučuje. +item.pyratite.description = Extrémně vznětlivá substance, používá ve vznětovém střelivu. +liquid.water.description = Nejčastěji se používá ke chlazení a zpracování odpadu. +liquid.slag.description = 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 = Může být spálen, vybouchnout nebo použit jako chlazení. +liquid.cryofluid.description = Nejefektivnější tekutina pro chlazení. +mech.alpha-mech.description = Standartní mech. Má slušnou rychlost a poškození; Může vytvořit až 3 drony Pro zvýšenou ofenzivní způsobilost. +mech.delta-mech.description = Rychlý, Lehce obrněný mech vytvořený pro udeř a uteč akce. Působí malé poškození vůči struktůrám, ale může zneškodnit velkou skupinu nepřátelských jednotek velmi rychle svýmy elektro-obloukovými zbraněmi +mech.tau-mech.description = Podpůrný mech. Léčí spojenecké stavby a jednotky střelbou do nich. Může léčit i spojence ve svém poli působení. +mech.omega-mech.description = Objemný a velice dovře obrněný mech, určen pro útok v přední linii. Jeho schopnost obrnění blokuje až 90% příchozího poškození. +mech.dart-ship.description = Standartní loď. Poměrně rychlý a lehký, má malou ofenzívu a pomalou rychlost těžení. +mech.javelin-ship.description = Loď stylu udeř a uteč. Zpočátku pomalý ale umí akcelerovat do obrovské rychlosti a létat u nepřátelských základen a působit značné škody svými elektrickými zbraněmi a raketami. +mech.trident-ship.description = Těžký bombardér. Docela dobře obrněný. +mech.glaive-ship.description = Obrovská, Dobře obrněná střelecká loď. Vybavena zápalným opakovačem. Dobrá akcelerace a maximální rychlost. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = Startovní dron. Standartně se objevuje u jádra. Automaticky těží rudy a opravuje stavby. +unit.phantom.description = Pokročilý dron. Automaticky těží rudy a opravuje stavby. Podstatně víc efektivní než Spirit dron. +unit.dagger.description = Základní pozemní jednotka. Efektivní ve velkém počtu. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Pokročilá, obrněná pozemní jednotka. Útočí jak na pozemní tak vzdušné nepřátelské jednotky. +unit.fortress.description = Težká, pozemní artilérní jednotka. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Rychlý, udeř a uteč stíhací letoun. +unit.ghoul.description = Těžký, kobercový bombardér. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = Redukuje písek s vysoce čistým koksem za účelem výroby křemíku. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produkuje plastánium za pomocí titánia a ropy. +block.phase-weaver.description = Produkuje fázovou tkaninu z radioaktivního thoria a velkého množství písku. +block.alloy-smelter.description = Produkuje impulzní slitinu z titánia, olova, křemíku a mědi. +block.cryofluidmixer.description = Kombinuje vodu a titánium do cryofluid, která je více efektivní pro chlazení. +block.blast-mixer.description = Používá ropu k přeměně pyratitu do méně hořlavé ale více explozivní těkavé směsi. +block.pyratite-mixer.description = Míchá uhlí, olovo a písek do velice hořlavého pyratitu. +block.melter.description = Taví kámen při velice vysokých teplotách na lávu. +block.separator.description = Vystaví kámen velkému tlaku vody k získání různých materiálů obsažené v kameni. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Drtí kámen na písek. Užitečné když se v oblasti nenalézá písek. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Zbaví tě přebytku předmětů. +block.power-void.description = Prázdnota pro veškerou energii vstupující do něj. Jen pro Sandbox. +block.power-source.description = Nekonečný zdroj energie. Jen pro Sandbox. +block.item-source.description = Nekonečný zdroj předmětů. Jen pro Sandbox. +block.item-void.description = Likviduje jakéhokoliv vstupní předmět bež použití energie. Jen pro Sandbox. +block.liquid-source.description = Nekonečný zdroj tekutin. Jen pro Sandbox. block.copper-wall.description = Levný defenzivní blok.\nUžitečný k obraně tvého jádra a střílen v prvotních vlnách nepřátel. block.copper-wall-large.description = Levný defenzivní blok.\nUžitečný k obraně tvého jádra a střílen v prvotních vlnách nepřátel.\nZabírá více polí. +block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies. +block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles. block.thorium-wall.description = Sílný defenzivní blok.\nDobrá obrana vůči nepřátelům. block.thorium-wall-large.description = Sílný defenzivní blok.\nDobrá obrana vůči nepřátelům..\nZabírá více polí. block.phase-wall.description = Né tak silná jako zeď Thoria ale odráží nepřátelské projektily dokud nejsou moc silné. @@ -854,54 +936,45 @@ block.surge-wall.description = Nejsilnější defenzivní blok.\nMá malou šanc block.surge-wall-large.description = Nejsilnější defenzivní blok.\nMá malou šanci vystřelit elektrický paprsek vůči útočníkovi.\nZabírá více polí. block.door.description = Malé dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz. block.door-large.description = Velké dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz.\nZabírá více polí. +block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency. block.mend-projector.description = Kontinuálně léčí bloky ve poli svého působení. block.overdrive-projector.description = Zrychluje funkce blízkých struktůr jako jsou vrty a dopravníky. block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, chrání jednotky a budovy uvnitř sebe vůči střelám. block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Skoro neviditelné nepřáteli. -block.duo.description = Malá, levná střílna. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = Malá střílna, která střílí elektřinu v náhodném oblouku po nepřátelských jednotkách. -block.hail.description = Malá artilérní střílna. -block.lancer.description = Středně velká střílna, která střílí nabité elektrické paprsky. -block.wave.description = Středně vělká, rychle pálící střílna, která střílí krystalizované bubliny. -block.salvo.description = Středně velká střílna, která střílí v salvách. -block.swarmer.description = Středně velká střílna, která střílí rakety v dávkách. -block.ripple.description = Velká artilérní střílna, která vystřelí několik projektilů najednou. -block.cyclone.description = Velká rychle pálící střílna. -block.fuse.description = Velká střílna, která střílí paprsky krátkého dosahu. -block.spectre.description = Velká střílna, která vystřelí dva mocné projektily naráz. -block.meltdown.description = Velká střílna, která vystřelí mocný paprsek dalekého dosahu. block.conveyor.description = Základní blok přepravy předmětů. Nese předměty kupředu a automaticky plní střílny nebo bloky výroby do kterých směřují. dá se otáčet do různých směrů. block.titanium-conveyor.description = Pokročilý blok přepravy předmětů. Nese předměty rychleji jak standartní dopravníky. -block.phase-conveyor.description = Pokročilý blok přepravy předmětů. Využívá energii k přepravě od jednoho bodu k druhému po velice dlouhé vzdálenosti. block.junction.description = Chová se jako most pro dva křížící se pásy dopravníků. Užitečný při situaci kdy dva rozdílné dopravníky dopravují dva rozdílné materiálny na rozdílné místa. +block.bridge-conveyor.description = Pokročilý blok přepravy předmětů. Dovoluje transport předmětů až přez tři pole jakéhokoliv terénu nebo budovy. +block.phase-conveyor.description = Pokročilý blok přepravy předmětů. Využívá energii k přepravě od jednoho bodu k druhému po velice dlouhé vzdálenosti. +block.sorter.description = Třídí předměty. Jestli je předmět shodný s výběrem, je mu dovoleno projít. Naopak neshodné předměty jsou vypuštěny do prava nebo do leva. +block.router.description = Příijmá předměty z jednoho směru a posílá je rovnoměrně do zbylých tří směrů. Užitečný při rozdělení jednoho zdroje směřující do různých cílů. +block.distributor.description = Pokročilý směrovač, který z libovolného počtu vstupů vytvoří libovolný počet výstupu a rozdělí přísun předmětů rovnoměrně do každého z nich, obdoba Multiplexeru a Demultiplexeru. +block.overflow-gate.description = Kombinace distributoru a děličky která má výstup do leva nebo do prava jen pokud je přední strana zablokovaná. block.mass-driver.description = Ultimátní blok přepravy předmětů. Sbírá několik druhů předmětů a vystřelí je k dalšímu hromadnému distributoru přes veliké vzdálenosti. -block.silicon-smelter.description = Redukuje písek s vysoce čistým koksem za účelem výroby křemíku. -block.plastanium-compressor.description = Produkuje plastánium za pomocí titánia a ropy. -block.phase-weaver.description = Produkuje fázovou tkaninu z radioaktivního thoria a velkého množství písku. -block.alloy-smelter.description = Produkuje impulzní slitinu z titánia, olova, křemíku a mědi. -block.pulverizer.description = Drtí kámen na písek. Užitečné když se v oblasti nenalézá písek. -block.pyratite-mixer.description = Míchá uhlí, olovo a písek do velice hořlavého pyratitu. -block.blast-mixer.description = Používá ropu k přeměně pyratitu do méně hořlavé ale více explozivní těkavé směsi. -block.cryofluidmixer.description = Kombinuje vodu a titánium do cryofluid, která je více efektivní pro chlazení. -block.melter.description = Taví kámen při velice vysokých teplotách na lávu. -block.incinerator.description = Zbaví tě přebytku předmětů. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Vystaví kámen velkému tlaku vody k získání různých materiálů obsažené v kameni. +block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžaduje nergii k provozu. +block.rotary-pump.description = Pokročilá pumpa která, zdvojnásobuje přísun tekutin za použití energie. +block.thermal-pump.description = Ultimátní pumpa. Trojnásobně rychlejší než mechanická pumpa a jediná pumpa která dokáže pracovat s lávou. +block.conduit.description = Základní blok přepravy tekutin. Funguje jako dopravník, ale na tekutiny, chápeš ne ? Užívá se s extraktory, pumpami nebo jiným potrubím. +block.pulse-conduit.description = Pokročilý blok přepravy tekutin. Přepravuje tekutiny rychleji a více než standartní potrubí. +block.liquid-router.description = Příjmá tekutiny z jednoho směru a vypouští je rovnoměrně do zbylých tří směrů. Dokáže uložit na krátkou dobu nějaký obsah tekutin. Užitečný při rozdělení jednoho zdroje směřující do různých cílů. +block.liquid-tank.description = Uloží velké množství tekutin. Použíj ho pro vyrovnávací zásoby vody když je příděl nestabilní nebo jako záložní chlazení pro generátory. +block.liquid-junction.description = Chová se jako most pro dvě křížící se potrubí. Užitečný v situacích když dvě rozdílné potrubí nesou rozdílný obsah na rozdílná místa. +block.bridge-conduit.description = Pokročilý blok přepravy tekutin. Dovoluje transportovat tekutiny až přez tři pole jakéhokoliv terénu nebo budovy. +block.phase-conduit.description = Pokročilý blok přepravy tekutin. Používá energii k teleportu tekutin do druhého bodu přez několik polí. block.power-node.description = Vysílá energii mezi propojenými uzly. Dokáže se propojit až se čtyřmi uzly či stavbami najednou. Uzel bude dostávat zásobu energie a bude ji distribuovat mezi připojené bloky. block.power-node-large.description = Má větší dosah než standartní energetický uzel and a dokáže propojit až 6 staveb nebo uzly. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Ukládá energii kdykoliv kdy je nadbytek ,poskytuje energii kdykolik když je pokles energie v síti, tak dlouho doku zbývá kapacita. block.battery-large.description = Uloží více energie než standartní baterie. block.combustion-generator.description = Generuje energii spalováním ropy nebo jinných hořlavých materiálů. -block.turbine-generator.description = Více efektivní než spalovací generátor, ale vyžaduje dodatečný přísun vody. block.thermal-generator.description = Generuje obrovské množství energie z lávy. +block.turbine-generator.description = Více efektivní než spalovací generátor, ale vyžaduje dodatečný přísun vody. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = Rádioizotopní Termoelektrický Generátor nevyžaduje chlazení, za to generuje méně energie než Thoriový generátor. block.solar-panel.description = Poskytuje malé množství energie ze slunce. block.solar-panel-large.description = Poskytuje mnohem lepší zdroj energie než standartní solární panel, za to je mnohem nákladnější na stavbu. block.thorium-reactor.description = Generuje obrovské množství energie z radioaktivního thoria. Vyžaduje konstantní chlazení. Způsobí velikou explozi je-li zásobován nedostatečným množstvím chlazení. Výstup energie závisí na plnosti obsahu generátoru, základní generování energie se aktivuje při poloviční kapacitě. -block.rtg-generator.description = Rádioizotopní Termoelektrický Generátor nevyžaduje chlazení, za to generuje méně energie než Thoriový generátor. -block.unloader.description = Vykládá předměty z kontejnéru, trezoru nebo jádra na dopravník nebo přímo do produktivních bloků. Druh předmětu pro vykládání lze měti kliknutím na odbavovač. -block.container.description = Ukládá malé množství předmětů každého typu. Připojené kontejnéry, trezory nebo jádra se budou chovat jako samostatné skladovací jednotky. [LIGHT_GRAY] Odbavovač[] lze použít pro odbavení předmětů z kontejnéru. -block.vault.description = Ukládá velké množství předmětů každého typu. Připojené kontejnéry, trezory nebo jádra se budou chovat jako samostatné skladovací jednotky. [LIGHT_GRAY] Odbavovač[] lže použít pro odbavení předmětů z trezoru. +block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. block.mechanical-drill.description = Levný vrt. Při položení na vhodné pole, natrvalo a pomalu produkuje materiál na který byl položen. block.pneumatic-drill.description = Vylepšený vrt, který je rychlejší a je schopen zpracovat trdší materiály za pomocí tlaku. block.laser-drill.description = Dovoluje vrtat ještě rychleji díky laserové technologii, požaduje energii k provozu. Dodatečně, dokáže vrtat žíly radioaktivního thoria. @@ -909,39 +982,43 @@ block.blast-drill.description = Ultimátní vrt, vyžaduje velké množství ene block.water-extractor.description = Extrahuje vodu ze země. Vhodný k použití když se v oblasti nenachází zdroj vody. block.cultivator.description = Kultivuje půdu vodou za účelem získání biohmoty. block.oil-extractor.description = Vyžaduje velké množství energie na extrakci ropy z písku. Použíj ho když se v oblasti nenachází žádný zdroj ropy. -block.trident-ship-pad.description = Zanech zde své aktuální plavidlo a změň ho do docela dobře obrněného těžkého bombardéru.\nPoužíj ho poklikáním když se nacházíš nad ním. -block.javelin-ship-pad.description = Zanech zde své aktuální plavidlo a změn ho na silný a rychlý stíhač s bleskovými zbraněmi.\nPoužíj ho poklikáním když se nacházíš nad ním. -block.glaive-ship-pad.description = Zanech zde své aktuální plavidlo a změn ho na velkou, dobře obrněnou střeleckou loď.\nPoužíj ho poklikáním když se nacházíš nad ním. -block.tau-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na na podpůrného mecha, který léčí spojenecké budovy a jednotky.\nPoužíj ho poklikáním když se nacházíš nad ním. -block.delta-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na rychlého, lehce obrněného mecha určeného pro udeř a uteč operace.\nPoužíj ho poklikáním když se nacházíš nad ním. -block.omega-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na objemného dobře obrněného mecha, určeného pro útok v přední linii.\nPoužíj ho poklikáním když se nacházíš nad ním. +block.core-shard.description = The first iteration of the core capsule. Once destroyed, all contact to the region is lost. Do not let this happen. +block.core-foundation.description = The second version of the core. Better armored. Stores more resources. +block.core-nucleus.description = The third and final iteration of the core capsule. Extremely well armored. Stores massive amounts of resources. +block.vault.description = Ukládá velké množství předmětů každého typu. Připojené kontejnéry, trezory nebo jádra se budou chovat jako samostatné skladovací jednotky. [LIGHT_GRAY] Odbavovač[] lže použít pro odbavení předmětů z trezoru. +block.container.description = Ukládá malé množství předmětů každého typu. Připojené kontejnéry, trezory nebo jádra se budou chovat jako samostatné skladovací jednotky. [LIGHT_GRAY] Odbavovač[] lze použít pro odbavení předmětů z kontejnéru. +block.unloader.description = Vykládá předměty z kontejnéru, trezoru nebo jádra na dopravník nebo přímo do produktivních bloků. Druh předmětu pro vykládání lze měti kliknutím na odbavovač. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = Malá, levná střílna. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = Malá artilérní střílna. +block.wave.description = Středně vělká, rychle pálící střílna, která střílí krystalizované bubliny. +block.lancer.description = Středně velká střílna, která střílí nabité elektrické paprsky. +block.arc.description = Malá střílna, která střílí elektřinu v náhodném oblouku po nepřátelských jednotkách. +block.swarmer.description = Středně velká střílna, která střílí rakety v dávkách. +block.salvo.description = Středně velká střílna, která střílí v salvách. +block.fuse.description = Velká střílna, která střílí paprsky krátkého dosahu. +block.ripple.description = Velká artilérní střílna, která vystřelí několik projektilů najednou. +block.cyclone.description = Velká rychle pálící střílna. +block.spectre.description = Velká střílna, která vystřelí dva mocné projektily naráz. +block.meltdown.description = Velká střílna, která vystřelí mocný paprsek dalekého dosahu. +block.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produkuje lehké drony, kteří teží minerály a opravují budovy block.phantom-factory.description = Produkuje pokročilé drony kteří jsou podstatně efektivnější jak spirit droni. block.wraith-factory.description = Produkuje rychlé, udeř a uteč stíhače. block.ghoul-factory.description = Produkuje těžké kobercové bombardéry. +block.revenant-factory.description = Produkuje vzdušné, težké laserové stíhače.. block.dagger-factory.description = Produkuje standartní pozemní jednotky. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produkuje pokročilé, orněné pozemní jednotky. block.fortress-factory.description = Produkuje těžké artilérní, pozmení jednotky. -block.revenant-factory.description = Produkuje vzdušné, težké laserové stíhače.. block.repair-point.description = Kontinuálně léčí nejbližší budovy a jednotky. -block.conduit.description = Základní blok přepravy tekutin. Funguje jako dopravník, ale na tekutiny, chápeš ne ? Užívá se s extraktory, pumpami nebo jiným potrubím. -block.pulse-conduit.description = Pokročilý blok přepravy tekutin. Přepravuje tekutiny rychleji a více než standartní potrubí. -block.phase-conduit.description = Pokročilý blok přepravy tekutin. Používá energii k teleportu tekutin do druhého bodu přez několik polí. -block.liquid-router.description = Příjmá tekutiny z jednoho směru a vypouští je rovnoměrně do zbylých tří směrů. Dokáže uložit na krátkou dobu nějaký obsah tekutin. Užitečný při rozdělení jednoho zdroje směřující do různých cílů. -block.liquid-tank.description = Uloží velké množství tekutin. Použíj ho pro vyrovnávací zásoby vody když je příděl nestabilní nebo jako záložní chlazení pro generátory. -block.liquid-junction.description = Chová se jako most pro dvě křížící se potrubí. Užitečný v situacích když dvě rozdílné potrubí nesou rozdílný obsah na rozdílná místa. -block.bridge-conduit.description = Pokročilý blok přepravy tekutin. Dovoluje transportovat tekutiny až přez tři pole jakéhokoliv terénu nebo budovy. -block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžaduje nergii k provozu. -block.rotary-pump.description = Pokročilá pumpa která, zdvojnásobuje přísun tekutin za použití energie. -block.thermal-pump.description = Ultimátní pumpa. Trojnásobně rychlejší než mechanická pumpa a jediná pumpa která dokáže pracovat s lávou. -block.router.description = Příijmá předměty z jednoho směru a posílá je rovnoměrně do zbylých tří směrů. Užitečný při rozdělení jednoho zdroje směřující do různých cílů. -block.distributor.description = Pokročilý směrovač, který z libovolného počtu vstupů vytvoří libovolný počet výstupu a rozdělí přísun předmětů rovnoměrně do každého z nich, obdoba Multiplexeru a Demultiplexeru. -block.bridge-conveyor.description = Pokročilý blok přepravy předmětů. Dovoluje transport předmětů až přez tři pole jakéhokoliv terénu nebo budovy. -block.item-source.description = Nekonečný zdroj předmětů. Jen pro Sandbox. -block.liquid-source.description = Nekonečný zdroj tekutin. Jen pro Sandbox. -block.item-void.description = Likviduje jakéhokoliv vstupní předmět bež použití energie. Jen pro Sandbox. -block.power-source.description = Nekonečný zdroj energie. Jen pro Sandbox. -block.power-void.description = Prázdnota pro veškerou energii vstupující do něj. Jen pro Sandbox. -liquid.water.description = Nejčastěji se používá ke chlazení a zpracování odpadu. -liquid.oil.description = Může být spálen, vybouchnout nebo použit jako chlazení. -liquid.cryofluid.description = Nejefektivnější tekutina pro chlazení. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na rychlého, lehce obrněného mecha určeného pro udeř a uteč operace.\nPoužíj ho poklikáním když se nacházíš nad ním. +block.tau-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na na podpůrného mecha, který léčí spojenecké budovy a jednotky.\nPoužíj ho poklikáním když se nacházíš nad ním. +block.omega-mech-pad.description = Zanech zde své aktuální plavidlo a změn ho na objemného dobře obrněného mecha, určeného pro útok v přední linii.\nPoužíj ho poklikáním když se nacházíš nad ním. +block.javelin-ship-pad.description = Zanech zde své aktuální plavidlo a změn ho na silný a rychlý stíhač s bleskovými zbraněmi.\nPoužíj ho poklikáním když se nacházíš nad ním. +block.trident-ship-pad.description = Zanech zde své aktuální plavidlo a změň ho do docela dobře obrněného těžkého bombardéru.\nPoužíj ho poklikáním když se nacházíš nad ním. +block.glaive-ship-pad.description = Zanech zde své aktuální plavidlo a změn ho na velkou, dobře obrněnou střeleckou loď.\nPoužíj ho poklikáním když se nacházíš nad ním. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index ee5a45f580..f5c047f326 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -4,6 +4,7 @@ contributors = Übersetzer und Mitwirkende discord = Trete dem Mindustry Discord bei! link.discord.description = Der offizielle Mindustry Discord Chatroom link.github.description = Quellcode des Spiels +link.changelog.description = List of update changes link.dev-builds.description = Entwicklungs-Builds (instabil) link.trello.description = Offizielles Trello Board für geplante Features link.itch.io.description = itch.io Seite mit Downloads und der Web-Version des Spiels @@ -32,7 +33,6 @@ level.mode = Spielmodus: showagain = Nächstes mal nicht mehr anzeigen coreattack = < Die Basis wird angegriffen! > nearpoint = [[ [scarlet]SOFORT DEN DROP POINT VERLASSEN[] ]\nVernichtung droht -outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} database = Core Database savegame = Spiel speichern loadgame = Spiel laden @@ -95,7 +95,6 @@ server.admins = Admins server.admins.none = Keine Admins gefunden! server.add = Server hinzufügen server.delete = Bist du dir sicher, dass du diesen Server löschen möchtest? -server.hostname = Host: {0} server.edit = Server bearbeiten server.outdated = [crimson]Veralteter Server![] server.outdated.client = [crimson]Veralteter Client![] @@ -156,13 +155,6 @@ openlink = Link öffnen copylink = Kopiere Link back = Zurück quit.confirm = Willst du wirklich aufhören? -changelog.title = Changelog -changelog.loading = Lade Änderungshistorie... -changelog.error.android = [accent]Beachte: Die Änderungshistorie funktioniert manchmal nicht auf Android 4.4 (und älter)!\nDies liegt an einem Android bug. -changelog.error.ios = [accent]Die Änderungshistorie wird aktuell nicht von IOS unterstützt. -changelog.error = [scarlet]Fehler beim Laden der Änderungshistorie!\nPrüfe deine Internetverbindung. -changelog.current = [yellow][[Current version] -changelog.latest = [accent][[Latest version] loading = [accent]Wird geladen ... saving = [accent]Speichere... wave = [accent]Welle {0} @@ -192,7 +184,9 @@ editor.author = Autor: editor.description = Beschreibung: editor.waves = Wellen: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Wellen waves.remove = Entfernen waves.never = @@ -207,13 +201,13 @@ waves.copy = Aus der Zwischenablage kopieren waves.load = Aus der Zwischenablage laden waves.invalid = Ungültige Wellen in der Zwischenablage. waves.copied = Wellen kopiert. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Bearbeiten... editor.name = Name: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Teams -editor.elevation = Höhe editor.errorload = Fehler beim laden der Datei:\n[accent]{0} editor.errorsave = Fehler beim speichern der Datei:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Karten Name editor.overwrite = [accent] Warnung! Dies überschreibt eine vorhandene Karte. editor.overwrite.confirm = [scarlet]Warnung![] Eine Karte mit diesem Namen existiert bereits. Bist du sicher, dass du sie überschreiben willst? editor.selectmap = Wähle eine Karte zum Laden: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Erz filter.rivernoise = River Noise +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Scatter filter.terrain = Terrain filter.option.scale = Scale @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wand filter.option.ore = Erz filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Breite: height = Höhe: menu = Menü play = Spielen +campaign = Campaign load = Laden save = Speichern fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet. zone.requirement.complete = Welle {0} erreicht:\n{1} Anforderungen der Zone erfüllt. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Hinzufügen... boss.health = Boss Health connectfail = [crimson] Verbindung zum Server konnte nicht hergestellt werden: [accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Bereits verbunden. error.mapnotfound = Kartendatei nicht gefunden! error.io = Network I/O error. error.any = Unbekannter Netzwerkfehler. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Sprache settings.reset = Auf Standard zurücksetzen settings.rebind = Zuweisen @@ -346,12 +383,14 @@ no = Nein info.title = [accent]Info error.title = [crimson] Ein Fehler ist aufgetreten error.crashtitle = Ein Fehler ist aufgetreten! +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Kapazität blocks.powershot = Stromverbrauch/Schuss +blocks.damage = Damage blocks.targetsair = Visiert Luft Einheiten an blocks.targetsground = Visiert Boden Einheiten an blocks.itemsmoved = Bewegungsgeschwindigkeit @@ -427,9 +466,11 @@ setting.animatedshields.name = Animierte Schilde setting.antialias.name = Antialias[LIGHT_GRAY] (benötigt Neustart)[] setting.indicators.name = Ally Indicators setting.autotarget.name = Auto-Zielauswahl +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = kein setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = Training setting.difficulty.easy = Leicht @@ -456,7 +497,11 @@ setting.mutesound.name = Audioeffekte stummschalten setting.crashreport.name = Anonyme Absturzberichte senden setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Tasten zuweisen +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Allgemein category.view.name = Ansicht category.multiplayer.name = Mehrspieler @@ -505,6 +550,7 @@ mode.custom = Angepasste Regeln rules.infiniteresources = Unbegrenzte Ressourcen rules.wavetimer = Wellen Timer rules.waves = Wellen +rules.attack = Attack Mode rules.enemyCheat = Unbegrenzte Ressourcen für KI rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Einheiten content.block.name = Blocks content.mech.name = Mechs item.copper.name = Kupfer -item.copper.description = Ein nützliches Material. Wird in allen Arten von Blöcken verwendet. item.lead.name = Blei -item.lead.description = Ein grundliegendes Material. Häufig in Elektronik und Flüssigkeits-Transport-Blöcken verwendet. item.coal.name = Kohle -item.coal.description = Ein sehr häufiger vorkommender Kraftstoff. item.graphite.name = Graphite item.titanium.name = Titan -item.titanium.description = Ein seltenes, sehr leichtes Metall. Häufig in Flüssigkeits-Transport-Blöcken, Abbauanlagen und Flugzeugen verwendet. item.thorium.name = Uran -item.thorium.description = Ein dichtes radioaktives Metall, welches als strukturelle Unterstützung und nuklearer Kraftstoff verwendet wird. item.silicon.name = Silizium -item.silicon.description = Ein sehr nützlicher Halbleiter. Findet Anwendung in Solaranlagen und komplexer Elektronik. item.plastanium.name = Plastanium -item.plastanium.description = Ein leichtes dehnbares Material welches in Flugzeugen und Splittermunition verwendet wird. item.phase-fabric.name = Phasengewebe -item.phase-fabric.description = Eine nahezu gewichtslose Substanz, die in fortgeschrittener Elektronik und in selbstreparierender Technologie verwendet wird. item.surge-alloy.name = Spannungsstoß-Legierung -item.surge-alloy.description = Eine fortgeschrittene Legierung mit einzigartigen elektrischen Eigenschaften. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Sand -item.sand.description = Ein gängiges Material, welches häufig in geschmolzener Form, flüssig oder als Legierung verwendet wird. item.blast-compound.name = Explosive Mischung -item.blast-compound.description = Eine flüchtige Mischung, die in Bomben und Sprengstoffen Verwendung findet. Es besteht die Möglichkeit, es als Treibstoff zu verwenden, aber dies ist nicht empfehlenswert. item.pyratite.name = Pyratit -item.pyratite.description = Eine extrem leicht entflammbare Substanz. Findet Verwendeung in Brandwaffen. item.metaglass.name = Metaglass -item.metaglass.description = Eine super harte Glasmischung. Wird zur Verteilung und Lagerung von Flüssigkeiten benutzt. item.scrap.name = Scrap -item.scrap.description = Überreste alter Gebäude und Einheiten. Enthalten Spuren verschiedenster Metalle. liquid.water.name = Wasser liquid.slag.name = Slag liquid.oil.name = Öl @@ -570,31 +601,23 @@ liquid.cryofluid.name = Kryoflüssigkeit mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Schwerer Mehrlader mech.alpha-mech.ability = Drohnenschwarm -mech.alpha-mech.description = Der Standard-Mech. Ist angemessen schnell und hat ordentlich Schaden. Kann für erweiterte offensive Fähigkeiten bis zu 3 Drohnen erzeugen. mech.delta-mech.name = Delta mech.delta-mech.weapon = Lichtbogen-Generator mech.delta-mech.ability = Entladen -mech.delta-mech.description = Ein schneller, leicht gepanzerter Mech, der für Überfälle gemacht wurde. Verursacht wenig Schaden gegen Gebäude aber tötet Gruppen von Gegnern durch seine Lichtbogen-Waffen. mech.tau-mech.name = Tau mech.tau-mech.weapon = Restrukturierlaser mech.tau-mech.ability = Reparatursalve -mech.tau-mech.description = Der Support Mech. Kann Blöcke durch Schüsse heilen. Kann Feuer löschen und verbündete in seinem Aktionsradius heilen. mech.omega-mech.name = Omega mech.omega-mech.weapon = Raketenschwarm mech.omega-mech.ability = Rüstungskonfiguration -mech.omega-mech.description = Ein klobiger und gut gepanzerter Mech, der für den Angriff an der Front entwickelt wurde. Seine Rüstungsfähigkeit ermöglicht es ihm, 90% des Schadens abzuwehren. mech.dart-ship.name = Dart mech.dart-ship.weapon = Mehrlader -mech.dart-ship.description = Das Standard-Schiff. Einigermaßen schnell und leicht. Hat nur wenig Offensivkraft und geringe Erzabbaugeschwindigkeit. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = Ein Schiff für Überfälle. Anfänglich träge, kann es auf hohe Geschwindigkeiten beschleunigen um an gegnerischen Aussenposten vorbei zu fliegen und dabei mit seinen Blitzwaffen und Raketen große Mengen an Schaden verursachen. mech.javelin-ship.weapon = Raketensalve mech.javelin-ship.ability = Statische Entladung mech.trident-ship.name = Trident -mech.trident-ship.description = Ein schwerer Bomber, solide gepanzert. mech.trident-ship.weapon = Bombenschacht mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Ein großes, gut gepanzertes Gunship. Ausgerüstet mit einer Brandwaffe. Gute Beschleunigung und maximale Geschwindigkeit. mech.glaive-ship.weapon = Flammen-Mehrlader item.explosiveness = [LIGHT_GRAY]Explosivität: {0} item.flammability = [LIGHT_GRAY]Entflammbarkeit: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Wärmekapazität: {0} liquid.viscosity = [LIGHT_GRAY]Viskosität: {0} liquid.temperature = [LIGHT_GRAY]Temperatur: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Gras block.salt.name = Salz block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Gestein block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moos @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Schmelzt Sand und Blei zu metaglass. Erfordert kleine Mengen Energie. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0}\n[LIGHT_GRAY](Constructing) @@ -702,9 +726,7 @@ block.junction.name = Kreuzung block.router.name = Verteiler block.distributor.name = Großer Verteiler block.sorter.name = Sortierer -block.sorter.description = Sortiert Materialien. Wenn ein Gegenstand der Auswahl entspricht, darf er vorbei. Andernfalls wird er links oder rechts ausgegeben. block.overflow-gate.name = Überlauftor -block.overflow-gate.description = Ein Verteiler, der nur Materialien nach links oder rechts ausgibt, falls der Weg gerade aus blockiert ist. block.silicon-smelter.name = Silizium-Schmelzer block.phase-weaver.name = Phasenweber block.pulverizer.name = Pulverisierer @@ -756,6 +778,7 @@ block.blast-mixer.name = Sprengmixer block.solar-panel.name = Solar Panel block.solar-panel-large.name = Großes Solar Panel block.oil-extractor.name = Oil Extraktor +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Spirit-Drohnenfabrik block.phantom-factory.name = Phantom-Drohnenfabrik block.wraith-factory.name = Wraith Fighter-Fabrik @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Container block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = Blau team.red.name = Rot @@ -803,20 +825,14 @@ team.none.name = Grau team.green.name = Grün team.purple.name = Lila unit.spirit.name = Spirit Drohne -unit.spirit.description = Die anfängliche Drohne. Sie wird gewöhnlich in der Basis Erz ab, sammelt Materialien und repariert Blöcke. +unit.draug.name = Draug Miner Drone unit.phantom.name = Phantom Drohne -unit.phantom.description = Eine fortgeschrittene Drohne. Baut automatisch Erz ab, sammelt Materialien und repariert Blöcke. Deutlich effizienter als die Drohne. unit.dagger.name = Dagger -unit.dagger.description = Eine Standard-Bodeneinheit. Nützlich in Schwärmen. unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = Eine fortgeschrittene gepanzerte Bodeneinheit. Greift sowohl Boden- als auch Luftziele an. unit.ghoul.name = Ghoul Bomber -unit.ghoul.description = Ein schwerer Flächenbomber. unit.wraith.name = Wraith Fighter -unit.wraith.description = Eine schneller Abfangjäger. unit.fortress.name = Fortress -unit.fortress.description = Eine schwere Artillerie-Bodeneinheit. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Konstruiere eine Dagger Mech Fabrik.\n\n Diese wird ver tutorial.router = Fabriken benötigen Ressourcen um zu funktionieren.\n Platziere ein Router um Materialien auf Transportbändern aufzuteilen. tutorial.dagger = Verbinde die Fabrik mit einem Stromknoten. Wenn alle Voraussetzungen gegeben sind, beginnt die Fabrik Mechs zu konstruieren.\n\n Platziere mehr Bohrer und Transportbänder um die Versorgung der Fabrik zu sichern. tutorial.battle = Der[LIGHT_GRAY] Gegner[] hat seinen Kern offenbart.\nZerstöre ihn mit deiner Einheit und den Dagger Mechs. +item.copper.description = Ein nützliches Material. Wird in allen Arten von Blöcken verwendet. +item.lead.description = Ein grundliegendes Material. Häufig in Elektronik und Flüssigkeits-Transport-Blöcken verwendet. +item.metaglass.description = Eine super harte Glasmischung. Wird zur Verteilung und Lagerung von Flüssigkeiten benutzt. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Ein gängiges Material, welches häufig in geschmolzener Form, flüssig oder als Legierung verwendet wird. +item.coal.description = Ein sehr häufiger vorkommender Kraftstoff. +item.titanium.description = Ein seltenes, sehr leichtes Metall. Häufig in Flüssigkeits-Transport-Blöcken, Abbauanlagen und Flugzeugen verwendet. +item.thorium.description = Ein dichtes radioaktives Metall, welches als strukturelle Unterstützung und nuklearer Kraftstoff verwendet wird. +item.scrap.description = Überreste alter Gebäude und Einheiten. Enthalten Spuren verschiedenster Metalle. +item.silicon.description = Ein sehr nützlicher Halbleiter. Findet Anwendung in Solaranlagen und komplexer Elektronik. +item.plastanium.description = Ein leichtes dehnbares Material welches in Flugzeugen und Splittermunition verwendet wird. +item.phase-fabric.description = Eine nahezu gewichtslose Substanz, die in fortgeschrittener Elektronik und in selbstreparierender Technologie verwendet wird. +item.surge-alloy.description = Eine fortgeschrittene Legierung mit einzigartigen elektrischen Eigenschaften. +item.spore-pod.description = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = Eine flüchtige Mischung, die in Bomben und Sprengstoffen Verwendung findet. Es besteht die Möglichkeit, es als Treibstoff zu verwenden, aber dies ist nicht empfehlenswert. +item.pyratite.description = Eine extrem leicht entflammbare Substanz. Findet Verwendeung in Brandwaffen. +liquid.water.description = Wird überlicherweise zum Kühlen von Maschinen und zur Müllverarbeitung verwendet. +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 = Kann verbrannt, zum explodieren gebracht, oder als Kühlung verwendet werden. +liquid.cryofluid.description = Die effizienteste Flüssigkeit, um Dinge herunter zu kühlen. +mech.alpha-mech.description = Der Standard-Mech. Ist angemessen schnell und hat ordentlich Schaden. Kann für erweiterte offensive Fähigkeiten bis zu 3 Drohnen erzeugen. +mech.delta-mech.description = Ein schneller, leicht gepanzerter Mech, der für Überfälle gemacht wurde. Verursacht wenig Schaden gegen Gebäude aber tötet Gruppen von Gegnern durch seine Lichtbogen-Waffen. +mech.tau-mech.description = Der Support Mech. Kann Blöcke durch Schüsse heilen. Kann Feuer löschen und verbündete in seinem Aktionsradius heilen. +mech.omega-mech.description = Ein klobiger und gut gepanzerter Mech, der für den Angriff an der Front entwickelt wurde. Seine Rüstungsfähigkeit ermöglicht es ihm, 90% des Schadens abzuwehren. +mech.dart-ship.description = Das Standard-Schiff. Einigermaßen schnell und leicht. Hat nur wenig Offensivkraft und geringe Erzabbaugeschwindigkeit. +mech.javelin-ship.description = Ein Schiff für Überfälle. Anfänglich träge, kann es auf hohe Geschwindigkeiten beschleunigen um an gegnerischen Aussenposten vorbei zu fliegen und dabei mit seinen Blitzwaffen und Raketen große Mengen an Schaden verursachen. +mech.trident-ship.description = Ein schwerer Bomber, solide gepanzert. +mech.glaive-ship.description = Ein großes, gut gepanzertes Gunship. Ausgerüstet mit einer Brandwaffe. Gute Beschleunigung und maximale Geschwindigkeit. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = Die anfängliche Drohne. Sie wird gewöhnlich in der Basis Erz ab, sammelt Materialien und repariert Blöcke. +unit.phantom.description = Eine fortgeschrittene Drohne. Baut automatisch Erz ab, sammelt Materialien und repariert Blöcke. Deutlich effizienter als die Drohne. +unit.dagger.description = Eine Standard-Bodeneinheit. Nützlich in Schwärmen. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Eine fortgeschrittene gepanzerte Bodeneinheit. Greift sowohl Boden- als auch Luftziele an. +unit.fortress.description = Eine schwere Artillerie-Bodeneinheit. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Eine schneller Abfangjäger. +unit.ghoul.description = Ein schwerer Flächenbomber. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = Reduziert Sand mit hochreinem Kohlenstoff, um Silizium zu produzieren. +block.kiln.description = Schmelzt Sand und Blei zu metaglass. Erfordert kleine Mengen Energie. +block.plastanium-compressor.description = Produziert Plastanium aus Öl und Titan. +block.phase-weaver.description = Produziert Phasengewebe aus radioaktivem Thorium und großen Mengen an Sand. +block.alloy-smelter.description = Verarbeitet Titan, Blei, Silizium und Kupfer zu einer Stromstoßlegierung. +block.cryofluidmixer.description = Verarbeitet Wasser mit Titan zu einer Kryoflüssigkeit, die viel effizienter kühlt. +block.blast-mixer.description = Verwendet Öl, um Pyratit in eine weniger enzündliche aber explosivee Mischung umzuwandeln. +block.pyratite-mixer.description = Vermischt Kohle, Blei und Sand zu hochentzündlichem Pyratit. +block.melter.description = Erhitzt Stein auf extrem hohe Temperaturen, um Lava zu erhalten. +block.separator.description = Setzt Stein Wasserdruck aus, um verschiedene Mineralien im Stein freizulegen. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Zertrümmert Stein zu Sand. Nützlich, wenn kein natürlicher Sand verfügbar ist. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Vernichtet beliebige überschüssige Materialien oder Flüssigkeiten. +block.power-void.description = Verschlingt den kompletten übrigen Strom. Nur im Sandkasten verfügbar. +block.power-source.description = Erzeugt unendlich viel Strom. Nur im Sandkasten verfügbar. +block.item-source.description = Produziert unendlich items. Nur im Sandkasten verfügbar. +block.item-void.description = Zerstört Materialien, die hereingegeben werden, ohne Strom zu verbrauchen. Nur im Sandkasten verfügbar. +block.liquid-source.description = Produziert unendlich Flüssigkeiten. Nur im Sandkasten verfügbar. block.copper-wall.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen. block.copper-wall-large.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen.\nBenötigt mehrere Kacheln. +block.titanium-wall.description = 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.thorium-wall.description = Ein starker Verteidigungsblock.\nGuter Schutz vor Feinden. block.thorium-wall-large.description = Ein starker Verteidigungsblock.\nGuter Schutz vor Feinden.\nBenötigt mehrere Kacheln. block.phase-wall.description = Nicht so stark wie eine Thorium-Mauer, aber reflektiert Schüsse bis zu einer gewissen Stärke. @@ -854,54 +936,45 @@ block.surge-wall.description = Der stärkste Verteidigungsblock.\nHat eine klein block.surge-wall-large.description = Der stärkste Verteidigungsblock.\nHat eine kleine Chance, bei einem Schuss einen Lichtbogen in Richtung angreifer auszulösen.\nBenötigt mehrere Kacheln. block.door.description = Eine kleine Tür, die durch darauf tippen geöffnet und geschlossen werden kann.\nGegner können durch geöffnete Türen schießen und laufen. block.door-large.description = Eine kleine Tür, die durch darauf tippen geöffnet und geschlossen werden kann.\nGegner können durch geöffnete Türen schießen und laufen.\nBenötigt mehrere Kacheln. +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 = Heilt zyklisch Blöcke in seiner Umgebung. block.overdrive-projector.description = Erhöht die Geschwindigkeit von nahegelegenen Blöcken wie Bohrer und Förderbänder. block.force-projector.description = Erzeugt ein sechseckiges Kraftfeld um sich selbst, durch das Blöcke und Einheiten vor Schaden beschützt werden. block.shock-mine.description = Beschädigt Gegner, die auf die Mine laufen. Für Gegener schwer zu sehen. -block.duo.description = Ein kleiner, günstiger Geschützturm. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = Ein kleiner Geschützturm, der Lichtbögen in Richtung des Gegners schießt. -block.hail.description = Ein kleiner Artillerie-Geschützturm. -block.lancer.description = Ein mittelgroßer Geschützturm, der sich auflädt und Elektrizitätsstrahlen verschießt. -block.wave.description = Ein mittelgroßer Geschützturm, der flüssige Kugeln verschießt. -block.salvo.description = Ein mittelgroßer Geschützturm, der Schüsse in Salven abfeuert. -block.swarmer.description = Ein mittelgroßer Geschützturm, der Raketenschwärme abfeuert. -block.ripple.description = Ein großer Artillerie-Geschützturm, der mehrere Schüsse gleichzeitig abfeuert. -block.cyclone.description = Ein großer Schnellfeuer-Geschützturm. -block.fuse.description = Ein großer Geschützturm, der starke Strahlen mit kurzer Reichweite abfeuert. -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.conveyor.description = Basis-Transportblock. Bewegt Materialien vorwärts und lädt sie automatisch in Geschütztürme oder Verarbeitungsanlagen. Rotierbar. block.titanium-conveyor.description = Verbesserter Transportblock. Bewegt Materialien schneller als Standard-Förderbänder. -block.phase-conveyor.description = Verbesserter Transportblock. Verwendet Strom, um Materialien zu einem verbundenen Phasen-Förderband über mehrere Kacheln zu teleportieren. block.junction.description = Fungiert als Brücke zwischen zwei kreuzenden Förderbändern. Nützlich, wenn zwei verschiedene Förderbänder sich kreuzen, aber unterschiedliche Materialien verwenden. +block.bridge-conveyor.description = Verbesserter Transportblock. Erlaubt es, Materialien über bis zu 3 Kacheln beliebigen Terrains oder Inhalts zu transportieren. +block.phase-conveyor.description = Verbesserter Transportblock. Verwendet Strom, um Materialien zu einem verbundenen Phasen-Förderband über mehrere Kacheln zu teleportieren. +block.sorter.description = Sortiert Materialien. Wenn ein Gegenstand der Auswahl entspricht, darf er vorbei. Andernfalls wird er links oder rechts ausgegeben. +block.router.description = Akzeptiert Materialien aus einer Richtung und leitet sie gleichmäßig in bis zu drei andere Richtungen weiter. Nützlich, wenn die Materialien aus einer Richtung an mehrere Empfänger verteilt werden sollen. +block.distributor.description = Ein weiterentwickelter Router, der Materialien in bis zu sieben Richtungen gleichmäßig verteilt. +block.overflow-gate.description = Ein Verteiler, der nur Materialien nach links oder rechts ausgibt, falls der Weg gerade aus blockiert ist. block.mass-driver.description = Ultimativer Transportblock. Sammelt mehrere Materialien und schießt sie zu einem verbundenen Massenbeschleuniger über eine große Reichweite. -block.silicon-smelter.description = Reduziert Sand mit hochreinem Kohlenstoff, um Silizium zu produzieren. -block.plastanium-compressor.description = Produziert Plastanium aus Öl und Titan. -block.phase-weaver.description = Produziert Phasengewebe aus radioaktivem Thorium und großen Mengen an Sand. -block.alloy-smelter.description = Verarbeitet Titan, Blei, Silizium und Kupfer zu einer Stromstoßlegierung. -block.pulverizer.description = Zertrümmert Stein zu Sand. Nützlich, wenn kein natürlicher Sand verfügbar ist. -block.pyratite-mixer.description = Vermischt Kohle, Blei und Sand zu hochentzündlichem Pyratit. -block.blast-mixer.description = Verwendet Öl, um Pyratit in eine weniger enzündliche aber explosivee Mischung umzuwandeln. -block.cryofluidmixer.description = Verarbeitet Wasser mit Titan zu einer Kryoflüssigkeit, die viel effizienter kühlt. -block.melter.description = Erhitzt Stein auf extrem hohe Temperaturen, um Lava zu erhalten. -block.incinerator.description = Vernichtet beliebige überschüssige Materialien oder Flüssigkeiten. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Setzt Stein Wasserdruck aus, um verschiedene Mineralien im Stein freizulegen. +block.mechanical-pump.description = Eine günstige, langsame Punkte, die keine Strom benötigt. +block.rotary-pump.description = Eine fortgeschrittene Pumpe, die mithilfe von Strom doppelt so schnell pumpt. +block.thermal-pump.description = Die ultimative Pumpe, dreimal so schnell wie eine mechanische Pumpe und die einzige Pumpe, die Lava fördern kann. +block.conduit.description = Standard Flüssigkeits-Transportblock. Funktioniert wie ein Förderband, nur für Flüssigkeiten. Wird am Besten mit Extraktoren, Pumpen oder anderen Kanälen benutzt. +block.pulse-conduit.description = Verbesserter Flüssigkeits-Transportblock. Transportiert Flüssigkeiten schneller und speichert mehr als Standard Kanäle. +block.liquid-router.description = Akzeptiert Flüssigkeiten aus einer Richtung und verteilt sie an bis zu drei andere Richtungen weiter. Nützlich, um Flüssigkeiten aus einer Quelle an mehrere Empfänger zu verteilen. +block.liquid-tank.description = Speichert eine große Menge an Flüssigkeiten. Verwende es als Puffer, wenn Angebot und Nachfrage an einer Flüssigkeit schwanken. +block.liquid-junction.description = Fungiert als Brücke über zwei kreuzende Kanäle. Nützlich in Situationen, in denen sich zwei Kanäle mit verschiedenen Flüssigkeiten kreuzen. +block.bridge-conduit.description = Verbesserter Flüssigkeits-Transportblock. Erlaubt es, Flüssigkeiten über bis zu 3 Kacheln beliebigen Terrains oder Inhalts zu transportieren. +block.phase-conduit.description = Verbesserter Flüssigkeits-Transportblock. Verwendet Strom, um Flüssigkeiten zu einem verbundenen Phasenkanal zu teleportieren. block.power-node.description = Überträgt Strom zu verbundenen Knoten. Bis zu vier Stromquellen, -verbraucher oder -knoten können verbunden werden. Der Knoten erhält Strom von benachbarten Knoten und gibt Strom benachbarte Blöcke weiter. block.power-node-large.description = Hat einen größeren Radius als der normale Stromknoten und verbindet bis zu sechs Stromquellen, -verbraucher oder -knoten. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Speichert Strom, solange ein Überschuss besteht, und gibt ihn bei Knappheit ab, solange Kapazität vorhanden ist. block.battery-large.description = Speichert sehr viel mehr Strom als eine normale Batterie. block.combustion-generator.description = Generiert Stromg, indem Öl oder entzündliche Materialien verbrannt werden. -block.turbine-generator.description = Effizienter als ein Verbrennungsgenerator, benötigt jedoch zusätzlich Wasser. block.thermal-generator.description = Erzeugt große Mengen Strom aus Lava. +block.turbine-generator.description = Effizienter als ein Verbrennungsgenerator, benötigt jedoch zusätzlich Wasser. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = Ein Radioisotopengenerator, der keine Kühlung benötigt, aber weniger Strom als ein Thorium-Reaktor liefert. block.solar-panel.description = Erzeugt kleine Mengen an Strom aus Sonnenenergie. block.solar-panel-large.description = Erzeugt viel mehr Strom als ein normales Solar Panel, ist aber auch sehr viel teurer in der Anschaffung. block.thorium-reactor.description = Erzeugt riesige Mengen Strom aus radioaktivem Thorium. Benötigt konstante Kühlung. Explodiert verheerend, wenn unzureichende Mengen an Kühlung vorhanden sind. -block.rtg-generator.description = Ein Radioisotopengenerator, der keine Kühlung benötigt, aber weniger Strom als ein Thorium-Reaktor liefert. -block.unloader.description = Entlädt Materialien aus einem Container, Tresor oder einer Basis auf ein Förderband oder direkt in einen benachbarten Block. Der Typ des auszuladenden Materials kann durch darauf tippen verändert werden. -block.container.description = Speichert eine kleine Menge an Materialien pro Typ. Benachbarte Container, Tresore und Basen werden zu einem Behälter zusammengefasst. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen. -block.vault.description = Speichert eine große Menge an Materialien pro Typ. Benachbarte Container, Tresore und Basen werden zu einem Behälter zusammengefasst. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen. +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 = Ein günstiger Bohrer. Wenn er auf passende Kacheln gesetzt wird, baut er unbegrenzt Erze des entsprechenden Typs mit geringer Geschwindigkeit ab. block.pneumatic-drill.description = Ein verbesserter Bohrer, der schneller ist und in der Lage ist, härtere Erze abzubauen, indem er von Luftdruck gebrauch macht. block.laser-drill.description = Erlaubt es, durch Lasertechnologie noch schneller zu bohren, benötigt aber Strom. Erlaubt zusätzlich das Abbauen von radioaktivem Thorium. @@ -909,39 +982,43 @@ block.blast-drill.description = Der ultimative Bohrer. Benötigt große Mengen a block.water-extractor.description = Extrahiert Wasser aus dem Boden. Verwende ihn, wenn es keinen See in der Nähe gibt. block.cultivator.description = Kultiviert den Boden mit Wasser, um Biomasse zu erzeugen. block.oil-extractor.description = Verwendet große Mengen an Strom, um Öl aus Sand zu extrahieren. Verwende ihn, wenn es keine direkte Ölquelle gibt. -block.trident-ship-pad.description = Wechsle in einen massiv gepanzerten schweren Bomber.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. -block.javelin-ship-pad.description = Wechsle in einen starken und schnellen Abfangjäger mit Blitz-Waffen.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. -block.glaive-ship-pad.description = Wechsle in ein großes, gut gepanzertes Kampfflugzeug.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. -block.tau-mech-pad.description = Wechsle in einen Support-Mech, der befreundete Blöcke und Einheiten heilen kann.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. -block.delta-mech-pad.description = Wechsle in einen schnellen, leicht gepanzerten Mech, der für Überfälle gemacht ist.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. -block.omega-mech-pad.description = Wechsle in einen klobigen und gut gepanzerten Mech, der für Frontangriffe gemacht ist.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. +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 = Speichert eine große Menge an Materialien pro Typ. Benachbarte Container, Tresore und Basen werden zu einem Behälter zusammengefasst. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen. +block.container.description = Speichert eine kleine Menge an Materialien pro Typ. Benachbarte Container, Tresore und Basen werden zu einem Behälter zusammengefasst. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen. +block.unloader.description = Entlädt Materialien aus einem Container, Tresor oder einer Basis auf ein Förderband oder direkt in einen benachbarten Block. Der Typ des auszuladenden Materials kann durch darauf tippen verändert werden. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = Ein kleiner, günstiger Geschützturm. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = Ein kleiner Artillerie-Geschützturm. +block.wave.description = Ein mittelgroßer Geschützturm, der flüssige Kugeln verschießt. +block.lancer.description = Ein mittelgroßer Geschützturm, der sich auflädt und Elektrizitätsstrahlen verschießt. +block.arc.description = Ein kleiner Geschützturm, der Lichtbögen in Richtung des Gegners schießt. +block.swarmer.description = Ein mittelgroßer Geschützturm, der Raketenschwärme abfeuert. +block.salvo.description = Ein mittelgroßer Geschützturm, der Schüsse in Salven abfeuert. +block.fuse.description = Ein großer Geschützturm, der starke Strahlen mit kurzer Reichweite abfeuert. +block.ripple.description = Ein großer Artillerie-Geschützturm, der mehrere Schüsse gleichzeitig abfeuert. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produziert leichte Drohnen, die Erz abbauen und Blöcke reparieren können. block.phantom-factory.description = Produziert erweiterte Drohnen, die deutlich effizienter sind als Spirit-Drohnen. block.wraith-factory.description = Produziert schnelle Abfangjäger. block.ghoul-factory.description = Produziert schwere Flächenbomber. +block.revenant-factory.description = Produziert schwere Laser-Bodeneinheiten. block.dagger-factory.description = Produziert Standard-Bodeneinheiten. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produziert fortgeschrittene, gepanzerte Bodeneinheiten. block.fortress-factory.description = Produziert schwere Artillerie-Bodeneinheiten. -block.revenant-factory.description = Produziert schwere Laser-Bodeneinheiten. block.repair-point.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung. -block.conduit.description = Standard Flüssigkeits-Transportblock. Funktioniert wie ein Förderband, nur für Flüssigkeiten. Wird am Besten mit Extraktoren, Pumpen oder anderen Kanälen benutzt. -block.pulse-conduit.description = Verbesserter Flüssigkeits-Transportblock. Transportiert Flüssigkeiten schneller und speichert mehr als Standard Kanäle. -block.phase-conduit.description = Verbesserter Flüssigkeits-Transportblock. Verwendet Strom, um Flüssigkeiten zu einem verbundenen Phasenkanal zu teleportieren. -block.liquid-router.description = Akzeptiert Flüssigkeiten aus einer Richtung und verteilt sie an bis zu drei andere Richtungen weiter. Nützlich, um Flüssigkeiten aus einer Quelle an mehrere Empfänger zu verteilen. -block.liquid-tank.description = Speichert eine große Menge an Flüssigkeiten. Verwende es als Puffer, wenn Angebot und Nachfrage an einer Flüssigkeit schwanken. -block.liquid-junction.description = Fungiert als Brücke über zwei kreuzende Kanäle. Nützlich in Situationen, in denen sich zwei Kanäle mit verschiedenen Flüssigkeiten kreuzen. -block.bridge-conduit.description = Verbesserter Flüssigkeits-Transportblock. Erlaubt es, Flüssigkeiten über bis zu 3 Kacheln beliebigen Terrains oder Inhalts zu transportieren. -block.mechanical-pump.description = Eine günstige, langsame Punkte, die keine Strom benötigt. -block.rotary-pump.description = Eine fortgeschrittene Pumpe, die mithilfe von Strom doppelt so schnell pumpt. -block.thermal-pump.description = Die ultimative Pumpe, dreimal so schnell wie eine mechanische Pumpe und die einzige Pumpe, die Lava fördern kann. -block.router.description = Akzeptiert Materialien aus einer Richtung und leitet sie gleichmäßig in bis zu drei andere Richtungen weiter. Nützlich, wenn die Materialien aus einer Richtung an mehrere Empfänger verteilt werden sollen. -block.distributor.description = Ein weiterentwickelter Router, der Materialien in bis zu sieben Richtungen gleichmäßig verteilt. -block.bridge-conveyor.description = Verbesserter Transportblock. Erlaubt es, Materialien über bis zu 3 Kacheln beliebigen Terrains oder Inhalts zu transportieren. -block.item-source.description = Produziert unendlich items. Nur im Sandkasten verfügbar. -block.liquid-source.description = Produziert unendlich Flüssigkeiten. Nur im Sandkasten verfügbar. -block.item-void.description = Zerstört Materialien, die hereingegeben werden, ohne Strom zu verbrauchen. Nur im Sandkasten verfügbar. -block.power-source.description = Erzeugt unendlich viel Strom. Nur im Sandkasten verfügbar. -block.power-void.description = Verschlingt den kompletten übrigen Strom. Nur im Sandkasten verfügbar. -liquid.water.description = Wird überlicherweise zum Kühlen von Maschinen und zur Müllverarbeitung verwendet. -liquid.oil.description = Kann verbrannt, zum explodieren gebracht, oder als Kühlung verwendet werden. -liquid.cryofluid.description = Die effizienteste Flüssigkeit, um Dinge herunter zu kühlen. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Wechsle in einen schnellen, leicht gepanzerten Mech, der für Überfälle gemacht ist.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. +block.tau-mech-pad.description = Wechsle in einen Support-Mech, der befreundete Blöcke und Einheiten heilen kann.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. +block.omega-mech-pad.description = Wechsle in einen klobigen und gut gepanzerten Mech, der für Frontangriffe gemacht ist.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. +block.javelin-ship-pad.description = Wechsle in einen starken und schnellen Abfangjäger mit Blitz-Waffen.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. +block.trident-ship-pad.description = Wechsle in einen massiv gepanzerten schweren Bomber.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. +block.glaive-ship-pad.description = Wechsle in ein großes, gut gepanzertes Kampfflugzeug.\nVerwende das Pad, indem du doppelt darauf tippst, während du darauf bist. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index fb185a2d6d..cac68fda24 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -4,6 +4,7 @@ contributors = Translators and Contributors discord = ¡Únete al Discord de Mindustry! link.discord.description = La sala oficial del Discord de Mindustry link.github.description = Código fuente del juego +link.changelog.description = List of update changes link.dev-builds.description = Versiones de desarrollo inestable 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 @@ -32,7 +33,6 @@ level.mode = Modo de juego: showagain = No mostrar otra vez en la próxima sesión coreattack = < ¡El núcleo está bajo ataque! > nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent -outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} database = Core Database savegame = Guardar Partida loadgame = Cargar Partida @@ -95,7 +95,6 @@ server.admins = Administradores server.admins.none = ¡Ningún administrador ha sido encontrado! server.add = Agregar Servidor server.delete = ¿Estás seguro de querer borrar este servidor? -server.hostname = Anfitrión: {0} server.edit = Editar Servidor server.outdated = [crimson]¡Servidor desactualizado![] server.outdated.client = [crimson]¡Cliente desactualizado![] @@ -156,13 +155,6 @@ openlink = Abrir Enlace copylink = Copiar Enlace back = Atrás quit.confirm = ¿Estás seguro de querer salir de la partida? -changelog.title = Registro de Parches -changelog.loading = Consiguiendo el registro de parches... -changelog.error.android = [accent]¡Nota: el registro de parches a veces no funciona en Android 4.4 o inferior!\nEsto es por un error interno de Android. -changelog.error.ios = [accent]El registro de parches no está actualmente soportado para iOS. -changelog.error = [scarlet]¡Error consiguiendo el registro de parches!Comprueba tu conexión a Internet. -changelog.current = [yellow][[Versión actual] -changelog.latest = [accent][[Última version] loading = [accent]Cargando... saving = [accent]Guardando... wave = [accent]Horda {0} @@ -192,7 +184,9 @@ editor.author = Autor: editor.description = Descripción: editor.waves = Waves: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Waves waves.remove = Remove waves.never = @@ -207,13 +201,13 @@ waves.copy = Copy to Clipboard waves.load = Load from Clipboard waves.invalid = Invalid waves in clipboard. waves.copied = Waves copied. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Edit... editor.name = Nombre: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Equipos -editor.elevation = Elevación editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Nombre del Mapa: editor.overwrite = [accent]¡Advertencia!\nEsto sobrescribe un mapa ya existente. editor.overwrite.confirm = [scarlet]¡Advertencia![] Un mapa con ese nombre ya existe. ¿Estás seguro de querer sobrescribirlo? editor.selectmap = Selecciona un mapa para cargar: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Ore filter.rivernoise = River Noise +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Scatter filter.terrain = Terrain filter.option.scale = Scale @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Ancho: height = Alto: menu = Menu play = Jugar +campaign = Campaign load = Cargar save = Guardar fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Add... boss.health = Boss Health connectfail = [crimson]Ha fallado la conexión con el servidor: [accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Ya estás conectado. error.mapnotfound = ¡Archivo de mapa no encontrado! error.io = Network I/O error. error.any = Error de red desconocido. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Lenguaje settings.reset = Reiniciar por los de defecto settings.rebind = Reasignar @@ -346,12 +383,14 @@ no = No info.title = [accent]Información error.title = [crimson]Un error ha ocurrido. error.crashtitle = Un error ha ocurrido. +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Capacidad de Energía blocks.powershot = Energía/Disparo +blocks.damage = Damage blocks.targetsair = Apunta al Aire blocks.targetsground = Targets Ground blocks.itemsmoved = Move Speed @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.indicators.name = Ally Indicators setting.autotarget.name = Auto apuntado +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Máx FPS setting.fpscap.none = Nada setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = entrenamiento setting.difficulty.easy = fácil @@ -456,7 +497,11 @@ setting.mutesound.name = Silenciar Sonido setting.crashreport.name = Enviar informes de fallos anónimos setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Reasignar Teclas +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = Visión category.multiplayer.name = Multijugador @@ -505,6 +550,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves +rules.attack = Attack Mode rules.enemyCheat = Infinite AI Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Unidades content.block.name = Blocks content.mech.name = Mecanoides item.copper.name = Cobre -item.copper.description = Un útil material estructural. Usado extensivamente en todo tipo de bloques. item.lead.name = Plomo -item.lead.description = Un material básico. Usado extensivamente en electrónicos y bloques de transferencia de líquidos. item.coal.name = Carbón -item.coal.description = Un combustible común y preparado para ser quemado. item.graphite.name = Graphite item.titanium.name = Titanio -item.titanium.description = Un metal raro super ligero usado extensivamente en transportación de liquidos, taladros y aeronaves. item.thorium.name = Torio -item.thorium.description = Un metal radiactivo, muy denso usado en soporte de estructuras y combustible nuclear. item.silicon.name = Silicona -item.silicon.description = Un semiconductor muy útil, se usa para paneles solares y muchos electrónicos complejos. item.plastanium.name = Plastanio -item.plastanium.description = Un material dúctil, ligero usado en aeronaves y proyectiles de fragmentación. item.phase-fabric.name = Tejido de fase -item.phase-fabric.description = Una sustancia casi sin peso usada en electrónica avanzada y en tecnología autoreparadora. item.surge-alloy.name = Surge Alloy -item.surge-alloy.description = Una aleación avanzada con propiedades eléctricas únicas. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Arena -item.sand.description = Un material común que es usado extensivamente en la fundición, para alear y como fundente. item.blast-compound.name = Compuesto Explosivo -item.blast-compound.description = Un compuesto volatil usado en bombas y explosivos. Aunque se puede quemar como combustible, esto no es recomendable. item.pyratite.name = Pirotita -item.pyratite.description = Una sustancia extremadamente inflamable usada en armas incendiarias. item.metaglass.name = Metaglass -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = Agua liquid.slag.name = Slag liquid.oil.name = Petróleo @@ -570,31 +601,23 @@ liquid.cryofluid.name = Criogénico mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Repetidor Pesado mech.alpha-mech.ability = Enjambre de Drones -mech.alpha-mech.description = El mecanoide estándar. Tiene velocidad y daño decentes, puede crear hasta 3 drones para poder ofensivo incremenado. mech.delta-mech.name = Delta mech.delta-mech.weapon = Generador de arco mech.delta-mech.ability = Descarga -mech.delta-mech.description = Un mecanoide rápido y ligeramente armado para ataques de ataque y retirada. Hace poco daño a estructuras, pero puede eliminar rápidamente a grandes grupos de unidades con sus armas de arco eléctrico. mech.tau-mech.name = Tau mech.tau-mech.weapon = Láser de reestructuración mech.tau-mech.ability = Repair Burst -mech.tau-mech.description = El mecanoide de soporte. Repara bloques aliados disparándolos. Puede extinguir el fuego y reparar aliados en un rango con su habilidad de reparación. mech.omega-mech.name = Omega mech.omega-mech.weapon = Enjambre de misiles mech.omega-mech.ability = Armored Configuration -mech.omega-mech.description = Un mecanoide grande y bien armado, hecho para asaltos en primera línea. Su habilidad de armadura puede bloquear hasta el 90% del daño que recibe. mech.dart-ship.name = Dardo mech.dart-ship.weapon = Repetidor -mech.dart-ship.description = La nave normal. Bastante ligera y rápida, pero tiene poca capacidad ofensiva y baja velocidad minado. mech.javelin-ship.name = Jabalina -mech.javelin-ship.description = Una nave de ataque y retirada. Aunque inicialmente lento, puede acelerar a altas velocidades y volar sobre puestos enemigos, causando gran daño con su habilidad de rayos y misiles. mech.javelin-ship.weapon = Ráfaga de misiles mech.javelin-ship.ability = Discharge Booster mech.trident-ship.name = Tridente -mech.trident-ship.description = Un bombardero pesado. Razonablemente bien equipado. mech.trident-ship.weapon = Bomb Bay mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Una nave pistolera grande y bien armada. Equipada con un repetidor incendiario. Buena aceleración y velocidad máxima. mech.glaive-ship.weapon = Flame Repeater item.explosiveness = [LIGHT_GRAY]Explosividad: {0} item.flammability = [LIGHT_GRAY]Inflamabilidad: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0} liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Rock block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0}\n[LIGHT_GRAY](Construyendo) @@ -702,9 +726,7 @@ block.junction.name = Cruce block.router.name = Enrutador block.distributor.name = Distribuidor block.sorter.name = Clasificador -block.sorter.description = Clasifica objetos. Si un objeto es igual al seleccionado, pasará al frente. Si no, el objeto saldrá por la izquierda y la derecha. block.overflow-gate.name = Compuerta de Desborde -block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena. block.silicon-smelter.name = Horno para Silicona block.phase-weaver.name = Tejedor de Fase block.pulverizer.name = Pulverizador @@ -756,6 +778,7 @@ block.blast-mixer.name = Mezclador de Explosivos block.solar-panel.name = Panel Solar block.solar-panel-large.name = Panel Solar Grande block.oil-extractor.name = Extractor de Petróleo +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Fábrica de Drones Espíritu block.phantom-factory.name = Fábrica de Drones Fantasmales block.wraith-factory.name = Fábrica de Wraith Fighter @@ -794,7 +817,6 @@ block.spectre.name = Espectro block.meltdown.name = Meltdown block.container.name = Contenedor block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = Azul team.red.name = Rojo @@ -803,20 +825,14 @@ team.none.name = Gris team.green.name = Verde team.purple.name = Púrpura unit.spirit.name = Dron Espíritu -unit.spirit.description = El dron del comienzo. Aparece en el núcleo por defecto. Mina automáticamente minerales, recoge objetos y repara bloques. +unit.draug.name = Draug Miner Drone unit.phantom.name = Dron Fantasmal -unit.phantom.description = Un dron avanzado. Mina automáticamente minerales, recoge objetos y repra bloques. Bastante más efectivo que un dron normal. unit.dagger.name = Daga -unit.dagger.description = Una unidad de terreno. Útil con enjambres. unit.crawler.name = Crawler unit.titan.name = Titán -unit.titan.description = Una unidad blindada de terreno, avanzada. Ataca blancos de aire y de terreno. unit.ghoul.name = Ghoul Bomber -unit.ghoul.description = Una unidad bombardera pesada. Usa compuesto explosivo o pirotita como munición. unit.wraith.name = Wraith Fighter -unit.wraith.description = Una unidad interceptora rápida. unit.fortress.name = Fortress -unit.fortress.description = Una unidad terrestre pesada de artillería. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construye una[accent] dagger mech factory[].\n\nEsto se tutorial.router = Las fábricas necesitan recursos para funcionar.\nCrea un enrutador para separar recursos del transportador. tutorial.dagger = Conecta nodos de energía a la fábrica.\nUna vez las necesidades se cumplan, una unidad será creada.\n\nCrea taladros, generadores y transportadores según necesites. tutorial.battle = El[LIGHT_GRAY] enemy[] ha revelado su núcleo.\nDestrúyelo con tu nave y tus unidades de combate. +item.copper.description = Un útil material estructural. Usado extensivamente en todo tipo de bloques. +item.lead.description = Un material básico. Usado extensivamente en electrónicos y bloques de transferencia de líquidos. +item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Un material común que es usado extensivamente en la fundición, para alear y como fundente. +item.coal.description = Un combustible común y preparado para ser quemado. +item.titanium.description = Un metal raro super ligero usado extensivamente en transportación de liquidos, taladros y aeronaves. +item.thorium.description = Un metal radiactivo, muy denso usado en soporte de estructuras y combustible nuclear. +item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. +item.silicon.description = Un semiconductor muy útil, se usa para paneles solares y muchos electrónicos complejos. +item.plastanium.description = Un material dúctil, ligero usado en aeronaves y proyectiles de fragmentación. +item.phase-fabric.description = Una sustancia casi sin peso usada en electrónica avanzada y en tecnología autoreparadora. +item.surge-alloy.description = Una aleación avanzada con propiedades eléctricas únicas. +item.spore-pod.description = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = Un compuesto volatil usado en bombas y explosivos. Aunque se puede quemar como combustible, esto no es recomendable. +item.pyratite.description = Una sustancia extremadamente inflamable usada en armas incendiarias. +liquid.water.description = Usado comúnmente para enfriar máquinas y para procesar residuos. +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 = Puede ser quemado, explotado o como un enfriador. +liquid.cryofluid.description = El líquido más eficiente pra enfriar las cosas. +mech.alpha-mech.description = El mecanoide estándar. Tiene velocidad y daño decentes, puede crear hasta 3 drones para poder ofensivo incremenado. +mech.delta-mech.description = Un mecanoide rápido y ligeramente armado para ataques de ataque y retirada. Hace poco daño a estructuras, pero puede eliminar rápidamente a grandes grupos de unidades con sus armas de arco eléctrico. +mech.tau-mech.description = El mecanoide de soporte. Repara bloques aliados disparándolos. Puede extinguir el fuego y reparar aliados en un rango con su habilidad de reparación. +mech.omega-mech.description = Un mecanoide grande y bien armado, hecho para asaltos en primera línea. Su habilidad de armadura puede bloquear hasta el 90% del daño que recibe. +mech.dart-ship.description = La nave normal. Bastante ligera y rápida, pero tiene poca capacidad ofensiva y baja velocidad minado. +mech.javelin-ship.description = Una nave de ataque y retirada. Aunque inicialmente lento, puede acelerar a altas velocidades y volar sobre puestos enemigos, causando gran daño con su habilidad de rayos y misiles. +mech.trident-ship.description = Un bombardero pesado. Razonablemente bien equipado. +mech.glaive-ship.description = Una nave pistolera grande y bien armada. Equipada con un repetidor incendiario. Buena aceleración y velocidad máxima. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = El dron del comienzo. Aparece en el núcleo por defecto. Mina automáticamente minerales, recoge objetos y repara bloques. +unit.phantom.description = Un dron avanzado. Mina automáticamente minerales, recoge objetos y repra bloques. Bastante más efectivo que un dron normal. +unit.dagger.description = Una unidad de terreno. Útil con enjambres. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Una unidad blindada de terreno, avanzada. Ataca blancos de aire y de terreno. +unit.fortress.description = Una unidad terrestre pesada de artillería. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Una unidad interceptora rápida. +unit.ghoul.description = Una unidad bombardera pesada. Usa compuesto explosivo o pirotita como munición. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = Reduce arena con coque de alta pureza para producir silicona. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produce plastanio con aceite y titanio. +block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. +block.alloy-smelter.description = Produce "surge alloy" con titanio, plomo, silicona y cobre. +block.cryofluidmixer.description = Combina agua y titanio en líquido criogénico que es mucho más eficiente para enfriar. +block.blast-mixer.description = Usa aceite para transformar pirotita en un objeto menos inflamable pero más explosivo: compuesto explosivo. +block.pyratite-mixer.description = Mezcla carbón, plomo y arena en pirotita altamente inflamable. +block.melter.description = Calienta piedra a temperaturas muy altas para obtener lava. +block.separator.description = Expone piedra a la presión del agua para obtener diversos minerales contenidos en la piedra. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Despedaza la piedra en arena. Útil cuando no hay arena natural. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Se deshace de cualquier líquido u objeto excesivo. +block.power-void.description = Elimina toda la energía que se le da. Solo en sandbox. +block.power-source.description = Da energía infinita. Solo en sandbox. +block.item-source.description = Da objetos infinitos. Solo en sandbox. +block.item-void.description = Destruye cuanquier objeto que va a él sin necesitar energía. Solo en sandbox. +block.liquid-source.description = Da líquido infinito. Solo en sandbox. block.copper-wall.description = Un bloque defensivo barato.\nÚtil para defneder e núcleo y las torres en las primeras hordas. block.copper-wall-large.description = Un bloque defensivo barato.\nÚtil para defneder e núcleo y las torres en las primeras hordas.\nOcupa múltiples casillas. +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.thorium-wall.description = Un bloque defensivo fuerte.\nBuena protección contra enemigos. block.thorium-wall-large.description = Un bloque defensivo fuerte.\nBuena protección contra enemigos.\nOcupa múltiples casillas. block.phase-wall.description = No es tan fuerte como un muro de torio pero rebota balas al enemigo si no son demasiado fuertes. @@ -854,54 +936,45 @@ block.surge-wall.description = El bloque defensivo más fuerte.\nTiene una peque block.surge-wall-large.description = El bloque defensivo más fuerte.\nTiene una pequeña probabilidad de disparar rayos al atacante.\nOcupa múltiplies casillas. block.door.description = Una puerta pequeña que puede ser abierta y cerrada tocándola.\nSi está abirta, los enemigos pueden moverse y disparar a través de ella.\nOcupa múltiples casillas. block.door-large.description = Una puerta grande que puede ser abierta y cerrada tocándola.\nSi está abirta, los enemigos pueden moverse y disparar a través de ella.\nOcupa múltiples casillas. +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 = Regenera edificios cercanos periódcamente. block.overdrive-projector.description = Aumenta la velocidad de edificios cercanos como taladros y transportadores. block.force-projector.description = Crea un área de fuerza hexagonal alrededor de él, protegiendo edificios y unidades dentro de él del daño de las balas. block.shock-mine.description = Daña enemigos que pisan a mina. Casi invisible al enemigo. -block.duo.description = Una torre pequeña y barata. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = Una torre pequeña que disapra electricidad en un arco aleatorio al enemigo. -block.hail.description = Una torre de artillería pequeña. -block.lancer.description = Una torre de tamaño mediano que dispara rayos cargados eléctricamente. -block.wave.description = Una torre de tamaño mediano que dispara burbujas de líquido. -block.salvo.description = Una torre de tramaño mediano que dispara balas en salvos. -block.swarmer.description = Una torre de tamaño mediano que dispara misiles en grupo. -block.ripple.description = Una torre de artillería grande que dispara varios disparos simultáneamente. -block.cyclone.description = Una torre de disparo rápido grande. -block.fuse.description = Una torre grande que dispara rayos poderosos de corto alcance. -block.spectre.description = Una torre grande que dispara dos balas poderosas de una vez. -block.meltdown.description = Una torre grande que dispara rayos poderosos de largo alcance. block.conveyor.description = Bloque de transporte básico. Mueve objetos hacia adelante y los deposita automáticamente en torres o fábricas. Rotable. block.titanium-conveyor.description = Bloque de transporte avanzado. Mueve objetos más rápido que los transportadores estándar. -block.phase-conveyor.description = Bloque de transporte avanzado. Usa energía para transportar objetos a otro transportador de fase conectado por varias casillas. block.junction.description = Actúa como puente para dos transportadores que se cruzan. Útil en situaciones con dos diferentes transportadores transportando diferentes materiales a diferentes lugares. +block.bridge-conveyor.description = Bloque avanado de transporte. Puede transportar objetos por encima hasta 3 casillas de cualquier terreno o construcción. +block.phase-conveyor.description = Bloque de transporte avanzado. Usa energía para transportar objetos a otro transportador de fase conectado por varias casillas. +block.sorter.description = Clasifica objetos. Si un objeto es igual al seleccionado, pasará al frente. Si no, el objeto saldrá por la izquierda y la derecha. +block.router.description = Acepta objetos de una dirección y deja objetos equitativamente en hasta 3 direcciones diferentes. Útil para dividir los materiales de una fuente de recursos a múltiples objetivos. +block.distributor.description = Un enrutador avanzado que distribuye objetos equitativamente en hasta otras 7 direcciones. +block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena. block.mass-driver.description = El mejor bloque de transorte. Recoge varios objetos y los dispara a otro conductor de masa en un largo rango. -block.silicon-smelter.description = Reduce arena con coque de alta pureza para producir silicona. -block.plastanium-compressor.description = Produce plastanio con aceite y titanio. -block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. -block.alloy-smelter.description = Produce "surge alloy" con titanio, plomo, silicona y cobre. -block.pulverizer.description = Despedaza la piedra en arena. Útil cuando no hay arena natural. -block.pyratite-mixer.description = Mezcla carbón, plomo y arena en pirotita altamente inflamable. -block.blast-mixer.description = Usa aceite para transformar pirotita en un objeto menos inflamable pero más explosivo: compuesto explosivo. -block.cryofluidmixer.description = Combina agua y titanio en líquido criogénico que es mucho más eficiente para enfriar. -block.melter.description = Calienta piedra a temperaturas muy altas para obtener lava. -block.incinerator.description = Se deshace de cualquier líquido u objeto excesivo. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Expone piedra a la presión del agua para obtener diversos minerales contenidos en la piedra. +block.mechanical-pump.description = Una bomba barata con extracción lenta, pero sin uso de energía. +block.rotary-pump.description = Una bomba avanzada que duplica la velocidad usando energía. +block.thermal-pump.description = La mejor bomba. Tres veces más rápido que la bomba mecánica, y la única bomba que puede extraer lava. +block.conduit.description = Bloque de transporte de líquidos básico. Funciona como un transportador, pero con líquidos. Usado con bombas, extractores u otros conductos. +block.pulse-conduit.description = Bloque de transporte de líquidos avanzado. Transporta líquidos más rápidamente y almacena más que los conductos estándar. +block.liquid-router.description = Acepta líquidos de una dirección y los deja en hasta 3 direcciones equitativamente. También puede amacenar cierta capacidad de líquido. Útil para dividir los líquidos de una fuente a varios objetivos. +block.liquid-tank.description = Almacena una gran cantidad de líquidos. Úsalo para crear almacenes cuando no hay una demanda constante de materiales o para asegurarse de enfriar bloques vitales. +block.liquid-junction.description = Actúa como un puente para dos condusctos que se cruzan. Útil en situaciones en las que hay dos conductos con líquidos diferentes a diferentes lugares. +block.bridge-conduit.description = Bloque avanzado de transporte de líquidos. Permite transportar líquidos por encima hasta 3 casillas de cualquier terreno o construcción. +block.phase-conduit.description = Bloque de transporte de líquidos avanzado. Usa energía para transportar líquidos a otro conducto de fase conectado por varias casillas. block.power-node.description = Transmite energía a nodos conectados, conecta hasta cuatro fuentes de energía, edificios que usan energía o nodos. El nodo obtendrá o transmitirá energía de cualquier bloque adyacente. block.power-node-large.description = Tiene un radio más amplio que el nodo de energía y conecta hasta seis fuentes de energía, edificios que usan energía o nodos. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Guarda energía cuando hay abundancia y proporciona energía cuando hay escasez de energía mientras la batería tenga energía. block.battery-large.description = Almacena mucha más energía que una batería normal. block.combustion-generator.description = Genera energía quemando aceite o matteriales inflamables. -block.turbine-generator.description = Más eficiente que un generador de combustión, pero requiere agua adicional. block.thermal-generator.description = Genera una gran cantidad de energía con la lava. +block.turbine-generator.description = Más eficiente que un generador de combustión, pero requiere agua adicional. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = Un generador radioisótropo termoeléctrico que no necesita enfriamiento pero proporciona menos energía que un reactor de torio. block.solar-panel.description = Proporciona una pequeña cantidad de energía procedente del sol. block.solar-panel-large.description = Genera un mucho mejor suministro de energía que un panel solar estándar, pero también es mucho más caro de construir. block.thorium-reactor.description = Genera grandes cantidades de energía del torio altamente radioactivo. Necesita enfriamiento constante. Explotará violentamente si no se le aporta suficiente enfriamiento. -block.rtg-generator.description = Un generador radioisótropo termoeléctrico que no necesita enfriamiento pero proporciona menos energía que un reactor de torio. -block.unloader.description = Descarga objetos de un contenedor, almacén o el núcleo a un transportador o directamente a un bloque adyacente. El tipo de objeto descargado puede ser cambiado tocando el descagador. -block.container.description = Almacena una pequeña cantidad de objetos. Úsalo para crear almacenes cuando no hay una demanda constante de materales. Un [LIGHT_GRAY] unloader[] puede usarse para obtener objetos del contenedor. -block.vault.description = Almacena una gran cantidad de objetos. Úsalo para crear almacenes cuando no hay una demanda constante de materales. Un [LIGHT_GRAY] unloader[] puede usarse para obtener objetos del almacén. +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 = Un taladro barato. Cuando es colocado en casillas apropiadas, extrae objetos lentamente de forma indefinida. block.pneumatic-drill.description = Un taladro mejorado que es más rápido y puede obtener minerales más duros usando la presión. block.laser-drill.description = Permite obtener minerales incluso más rápido con la tecnología láser, pero requiere energía. Además, se puede obtener torio radioactivo con este taladro. @@ -909,39 +982,43 @@ block.blast-drill.description = El mejor taladro. Requiere grandes cantidades de block.water-extractor.description = Extrae agua de la tierra. Úsalo cuando no haya lagos cercanos. block.cultivator.description = Cultiva la tierra para obtener biomateria. block.oil-extractor.description = Usa grandes cantidades de energía para extraer aceite de la arena. Úsalo cuando no hay fuentes directas de aceite cerca. -block.trident-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea bombardera pesada.\nUsa el pad tocándolo dos veces mientras estás en él. -block.javelin-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea fuerte y rápida interceptora con arma eléctrica.\nUsa el pad tocándolo dos veces mientras estás en él. -block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él. -block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él. -block.delta-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide rápido y ligero hecho para ataques de emboscada y retirada.\nUsa el pad tocándolo dos veces mientras estás en él. -block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él. +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 = Almacena una gran cantidad de objetos. Úsalo para crear almacenes cuando no hay una demanda constante de materales. Un [LIGHT_GRAY] unloader[] puede usarse para obtener objetos del almacén. +block.container.description = Almacena una pequeña cantidad de objetos. Úsalo para crear almacenes cuando no hay una demanda constante de materales. Un [LIGHT_GRAY] unloader[] puede usarse para obtener objetos del contenedor. +block.unloader.description = Descarga objetos de un contenedor, almacén o el núcleo a un transportador o directamente a un bloque adyacente. El tipo de objeto descargado puede ser cambiado tocando el descagador. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = Una torre pequeña y barata. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = Una torre de artillería pequeña. +block.wave.description = Una torre de tamaño mediano que dispara burbujas de líquido. +block.lancer.description = Una torre de tamaño mediano que dispara rayos cargados eléctricamente. +block.arc.description = Una torre pequeña que disapra electricidad en un arco aleatorio al enemigo. +block.swarmer.description = Una torre de tamaño mediano que dispara misiles en grupo. +block.salvo.description = Una torre de tramaño mediano que dispara balas en salvos. +block.fuse.description = Una torre grande que dispara rayos poderosos de corto alcance. +block.ripple.description = Una torre de artillería grande que dispara varios disparos simultáneamente. +block.cyclone.description = Una torre de disparo rápido grande. +block.spectre.description = Una torre grande que dispara dos balas poderosas de una vez. +block.meltdown.description = Una torre grande que dispara rayos poderosos de largo alcance. +block.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques. block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu. block.wraith-factory.description = Produce unidades aéreas rápidas e interceptoras. block.ghoul-factory.description = Produce unidades bombarderas pesadas. +block.revenant-factory.description = Produce unidades terrestres láser pesadas. block.dagger-factory.description = Produce unidades terrestres básicas. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produce unidades terrestres avanzadas. block.fortress-factory.description = Produce unidades terrestres de artillería pesada. -block.revenant-factory.description = Produce unidades terrestres láser pesadas. block.repair-point.description = Repara la unidad dañada más cercana a su alrededor. -block.conduit.description = Bloque de transporte de líquidos básico. Funciona como un transportador, pero con líquidos. Usado con bombas, extractores u otros conductos. -block.pulse-conduit.description = Bloque de transporte de líquidos avanzado. Transporta líquidos más rápidamente y almacena más que los conductos estándar. -block.phase-conduit.description = Bloque de transporte de líquidos avanzado. Usa energía para transportar líquidos a otro conducto de fase conectado por varias casillas. -block.liquid-router.description = Acepta líquidos de una dirección y los deja en hasta 3 direcciones equitativamente. También puede amacenar cierta capacidad de líquido. Útil para dividir los líquidos de una fuente a varios objetivos. -block.liquid-tank.description = Almacena una gran cantidad de líquidos. Úsalo para crear almacenes cuando no hay una demanda constante de materiales o para asegurarse de enfriar bloques vitales. -block.liquid-junction.description = Actúa como un puente para dos condusctos que se cruzan. Útil en situaciones en las que hay dos conductos con líquidos diferentes a diferentes lugares. -block.bridge-conduit.description = Bloque avanzado de transporte de líquidos. Permite transportar líquidos por encima hasta 3 casillas de cualquier terreno o construcción. -block.mechanical-pump.description = Una bomba barata con extracción lenta, pero sin uso de energía. -block.rotary-pump.description = Una bomba avanzada que duplica la velocidad usando energía. -block.thermal-pump.description = La mejor bomba. Tres veces más rápido que la bomba mecánica, y la única bomba que puede extraer lava. -block.router.description = Acepta objetos de una dirección y deja objetos equitativamente en hasta 3 direcciones diferentes. Útil para dividir los materiales de una fuente de recursos a múltiples objetivos. -block.distributor.description = Un enrutador avanzado que distribuye objetos equitativamente en hasta otras 7 direcciones. -block.bridge-conveyor.description = Bloque avanado de transporte. Puede transportar objetos por encima hasta 3 casillas de cualquier terreno o construcción. -block.item-source.description = Da objetos infinitos. Solo en sandbox. -block.liquid-source.description = Da líquido infinito. Solo en sandbox. -block.item-void.description = Destruye cuanquier objeto que va a él sin necesitar energía. Solo en sandbox. -block.power-source.description = Da energía infinita. Solo en sandbox. -block.power-void.description = Elimina toda la energía que se le da. Solo en sandbox. -liquid.water.description = Usado comúnmente para enfriar máquinas y para procesar residuos. -liquid.oil.description = Puede ser quemado, explotado o como un enfriador. -liquid.cryofluid.description = El líquido más eficiente pra enfriar las cosas. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide rápido y ligero hecho para ataques de emboscada y retirada.\nUsa el pad tocándolo dos veces mientras estás en él. +block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él. +block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él. +block.javelin-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea fuerte y rápida interceptora con arma eléctrica.\nUsa el pad tocándolo dos veces mientras estás en él. +block.trident-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea bombardera pesada.\nUsa el pad tocándolo dos veces mientras estás en él. +block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index d62de4ef6e..8ca1bedd86 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -4,6 +4,7 @@ contributors = Traducteurs et contributeurs discord = Rejoignez le discord de Mindustry link.discord.description = Le discord officiel de Mindustry! link.github.description = Code source du jeu. +link.changelog.description = List of update changes link.dev-builds.description = Versions instables du jeu. link.trello.description = Trello officiel pour les futurs ajouts . link.itch.io.description = Page itch.io avec le lien du téléchargement pour PC et la version web . @@ -32,7 +33,6 @@ level.mode = Mode de jeu : showagain = Ne pas montrer la prochaine fois coreattack = [scarlet] nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente -outofbounds = [[ HORS LIMITES ]\n[]auto-destruction dans {0} database = Base de données savegame = Sauvegarder la partie loadgame = Charger la partie @@ -95,7 +95,6 @@ server.admins = Administrateurs server.admins.none = Pas d'administrateurs trouvés! server.add = Ajouter un serveur server.delete = Êtes-vous sûr de supprimer ce serveur ? -server.hostname = Héberger: {0} server.edit = Modifier le serveur server.outdated = [crimson]Serveur obsolète![] server.outdated.client = [crimson]Client obsolète![] @@ -156,13 +155,6 @@ openlink = Ouvrir le lien copylink = Copier le lien back = Retour quit.confirm = Êtes-vous sûr de partir? -changelog.title = Notes de mise à jour -changelog.loading = Récupération des notes de mise à jour... -changelog.error.android = [accent]Remarquez que les notes de mise à jour peuvent ne pas marcher sur Android 4.4 et inférieur!\nC'est dû à un bug interne d'Android . -changelog.error.ios = [accent]Les notes de mise à jour ne sont pas suppporté sur iOS. -changelog.error = [scarlet]Erreur lors de la récupération des notes de mises à jour!\nVérifiez votre connexion internet. -changelog.current = [yellow][[Version actuelle] -changelog.latest = [accent][[Dernière version] loading = [accent]Chargement... saving = [accent]Sauvegarde... wave = [accent]Vague {0} @@ -192,7 +184,9 @@ editor.author = Auteur: editor.description = Description: editor.waves = Vagues: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Vagues waves.remove = Remove waves.never = jamais @@ -207,13 +201,13 @@ waves.copy = Copier dans le Presse-papiers waves.load = Coller depuis le Presse-papiers waves.invalid = Vagues invalides dans le Presse-papiers. waves.copied = Vagues copiées +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Modifier... editor.name = Nom: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Équipe -editor.elevation = Élevation editor.errorload = Erreur lors du chargement du fichier:\n[accent]{0} editor.errorsave = Erreur lors de la sauvegarde du fichier:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Nom de la carte²: editor.overwrite = [accent]Attention !\nCeci réécrit une carte existante . editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire? editor.selectmap = Séléctionnez une carte: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]Aucun filtre! Ajoutez-en un avec les boutons ci-dessous. filter.distort = Déformation filter.noise = Bruit +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Minerai filter.rivernoise = Bruit des rivières +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Dispersement filter.terrain = Terrain filter.option.scale = Gamme @@ -265,8 +279,10 @@ filter.option.threshold = Seuil filter.option.circle-scale = Gamme du cercle filter.option.octaves = Octaves filter.option.falloff = Diminution +filter.option.angle = Angle filter.option.block = Bloc filter.option.floor = Sol +filter.option.flooronto = Target Floor filter.option.wall = Mur filter.option.ore = Minerai filter.option.floor2 = Sol secondaire @@ -277,6 +293,7 @@ width = Largeur: height = Hauteur: menu = Menu play = Jouer +campaign = Campaign load = Charger save = Sauvegarder fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} Débloquée. zone.requirement.complete = Vague {0} atteinte:\n{1} Exigences de la zone complétées zone.config.complete = Vague {0} atteinte:\nConfiguration du transfert débloquée. zone.resources = Ressources détectées: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Ajouter... boss.health = Vie du BOSS connectfail = [crimson]Échec de la connexion au serveur : [accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Déjà connecté. error.mapnotfound = Fichier de la carte introuvable! error.io = Erreur de Réseau (I/O) error.any = Erreur réseau inconnue. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Première Bataille zone.desertWastes.name = Desert Wastes zone.craters.name = Les Cratères @@ -328,6 +349,22 @@ zone.desolateRift.name = Fissure abandonnée zone.nuclearComplex.name = Complexe nucléaire zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Langage settings.reset = Valeur par défaut. settings.rebind = Réattribuer @@ -346,12 +383,14 @@ no = Non info.title = Info error.title = [crimson]Une erreur s'est produite error.crashtitle = Une erreur s'est produite +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Capacité d'énergie blocks.powershot = Énergie/Tir +blocks.damage = Damage blocks.targetsair = Cible les unités aériennes blocks.targetsground = Cible les unités terrestres blocks.itemsmoved = Vitesse de Déplacement @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (demande le redémarrage de l'appareil)[] setting.indicators.name = Indicateurs pour les alliés setting.autotarget.name = Visée automatique +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = Aucun setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Autoriser le placement des blocs en diagonal setting.difficulty.training = Entraînement setting.difficulty.easy = Facile @@ -456,7 +497,11 @@ setting.mutesound.name = Couper les SFX setting.crashreport.name = Envoyer un rapport de crash anonyme setting.chatopacity.name = Opacité du chat setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Paramétrer les touches +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Général category.view.name = Voir category.multiplayer.name = Multijoueur @@ -505,6 +550,7 @@ mode.custom = Règles personnalisées rules.infiniteresources = Ressources infinies rules.wavetimer = Minuterie pour les vagues rules.waves = Vagues +rules.attack = Attack Mode rules.enemyCheat = Infinite AI Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Unités content.block.name = Blocks content.mech.name = Méchas item.copper.name = Cuivre -item.copper.description = Un matériau de construction utile. Utilisé intensivement dans tout les blocs. item.lead.name = Plomb -item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et pour le transport de blocs. item.coal.name = Charbon -item.coal.description = Un carburant commun et facile à obtenir. item.graphite.name = Graphite item.titanium.name = Titane -item.titanium.description = Un métal rare super-léger largement utilisé dans le transport de liquides et d'objets ainsi que dans les foreuses de haut-niveau et l'aviation. item.thorium.name = Thorium -item.thorium.description = Un métal dense et radioactif utilisé comme support structurel et comme carburant nucléaire. item.silicon.name = Silicone -item.silicon.description = Un matériau semi-conducteur extrêmement utile, avec des utilisations dans les panneaux solaires et dans beaucoup d'autre composants électroniques complexes. item.plastanium.name = Plastanium -item.plastanium.description = Un matériau léger et docile utilisé dans l'aviation avancée et dans les munitions à fragmentation. item.phase-fabric.name = Tissu phasé -item.phase-fabric.description = Une substance au poids quasiment inexistant utilisé pour l'électronique avancé et la technologie auto-réparatrice. item.surge-alloy.name = Alliage superchargé -item.surge-alloy.description = Un alliage avancé avec des propriétés électriques avancées. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Sable -item.sand.description = Un matériau commun utilisé largement dans la fonte, à la fois dans l'alliage et comme un flux. item.blast-compound.name = Mélange explosif -item.blast-compound.description = Un composé volatile utilisé dans les bombes et les explosifs. Bien qu'il puisse être utilisé comme carburant, ce n'est pas conseillé. item.pyratite.name = Pyratite -item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires. item.metaglass.name = Métavitre -item.metaglass.description = Un composé de vitre super-résistant. Utilisé largement pour le transport et le stockage de liquides. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = Eau liquid.slag.name = Slag liquid.oil.name = Pétrole @@ -570,31 +601,23 @@ liquid.cryofluid.name = Liquide cryogénique mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Fusil automatique mech.alpha-mech.ability = Essaim de drone -mech.alpha-mech.description = Le mécha standard. À une vitesse et des dégâts décents; Il peut aussi créer jusqu'à 3 drones pour infliger des dégâts supplémentaires. mech.delta-mech.name = Delta mech.delta-mech.weapon = Arc électrique mech.delta-mech.ability = Décharge -mech.delta-mech.description = Un mécha rapide, avec une armure légère, fait pour des tactiques de harcèlements. Il inflige, par contre, peu de dégâts aux structures, néanmoins il peut tuer de grand groupes d'ennemis très rapidement avec ses arcs électriques. mech.tau-mech.name = Tau mech.tau-mech.weapon = Laser restructurant mech.tau-mech.ability = Explosion réparante -mech.tau-mech.description = Un mécha de support. Soigne les blocs alliés en tirant dessus. Il peut aussi éteindre les feux et soigner ses alliés en zone avec sa compétence. mech.omega-mech.name = Omega mech.omega-mech.weapon = Essaim de missiles auto-guidés mech.omega-mech.ability = Armure -mech.omega-mech.description = Un mécha cuirassé et large fait pour les assauts frontaux. Sa compétence "Armure" lui permet de bloquer 90% des dégâts. mech.dart-ship.name = Dard mech.dart-ship.weapon = Pistolet automatique -mech.dart-ship.description = Le vaisseau standard. Raisonnablement rapide et léger. Il a néanmoins peu d'attaque et une faible vitesse de minage. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = Un vaisseau qui, bien que lent au départ, peut accélerer pour atteindre de très grandes vitesses et voler jusqu'aux avant-postes ennemis, faisant d'énormes dégâts avec ses arc électriques obtenus à vitesse maximum et ses missiles. mech.javelin-ship.weapon = Missiles explosifs autoguidés mech.javelin-ship.ability = Décharge de propulseur mech.trident-ship.name = Trident -mech.trident-ship.description = Un bombardier lourd raisonnablement cuirassé. mech.trident-ship.weapon = Largage de bombes mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Equipé avec un fusil automatique à munitions incendiaires. Il a aussi une bonne accéleration ainsi qu'une bonne vitesse maximale. mech.glaive-ship.weapon = Fusil automatique incendiaire item.explosiveness = [LIGHT_GRAY]Explosivité: {0} item.flammability = [LIGHT_GRAY]Inflammabilité: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Vitesse de construction: {0}% liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique: {0} liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} liquid.temperature = [LIGHT_GRAY]Température: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Herbe block.salt.name = Sel block.saltrocks.name = Roches de sel @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Roche block.snowrock.name = Roches de neige +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Mousse @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0}\n[LIGHT_GRAY](En Construction) @@ -702,9 +726,7 @@ block.junction.name = Jonction block.router.name = [accent]routeur[] block.distributor.name = Distributeur block.sorter.name = Trieur -block.sorter.description = Trie les articles. Si un article rcorrespond à la sélection, il peut passer. Autrement, l'article est distribué vers la gauche ou la droite. block.overflow-gate.name = Barrière de Débordement -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.silicon-smelter.name = Fonderie de Silicone block.phase-weaver.name = Tisseur à Phase block.pulverizer.name = Pulvérisateur @@ -756,6 +778,7 @@ 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 d'huile +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Usine de "Drones spirituels" block.phantom-factory.name = Usine de "Drones fantômes" block.wraith-factory.name = Usine de "Combattants spectraux" @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Conteneur block.launch-pad.name = Plateforme de lancement -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Grande plateforme de lancement team.blue.name = Bleu team.red.name = Rouge @@ -803,20 +825,14 @@ team.none.name = Gris team.green.name = Vert team.purple.name = Violet unit.spirit.name = Drone spirituel -unit.spirit.description = L'unité de soutien de départ. Apparaît dans la base par défaut. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. +unit.draug.name = Draug Miner Drone unit.phantom.name = Drone Fantôme -unit.phantom.description = Une unité de soutien avancée. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. Bien plus efficace qu'un drone spirituel. unit.dagger.name = Poignard -unit.dagger.description = Une unité terrestre basiquee. Utile en armée. unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = Une unité terrestre cuirassée avancée. Attaque les unités terrestres comme aériennes. unit.ghoul.name = Bombardier goule -unit.ghoul.description = Un bombardier lourd . Utilise de la pyratite ou des explosifs comme munitions. unit.wraith.name = Combattant spectral -unit.wraith.description = Une unité volante rapide harcelant les ennemis .Utilise du plomb comme munitions. unit.fortress.name = Forteresse -unit.fortress.description = Une unité terrestre d'artillerie lourde . unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construire [accent]une usine de "Poignards" []est recom tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets. tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire. tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base .\nDétruisez la avec votre unité et des méchas "Poignard". +item.copper.description = Un matériau de construction utile. Utilisé intensivement dans tout les blocs. +item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et pour le transport de blocs. +item.metaglass.description = Un composé de vitre super-résistant. Utilisé largement pour le transport et le stockage de liquides. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Un matériau commun utilisé largement dans la fonte, à la fois dans l'alliage et comme un flux. +item.coal.description = Un carburant commun et facile à obtenir. +item.titanium.description = Un métal rare super-léger largement utilisé dans le transport de liquides et d'objets ainsi que dans les foreuses de haut-niveau et l'aviation. +item.thorium.description = Un métal dense et radioactif utilisé comme support structurel et comme carburant nucléaire. +item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. +item.silicon.description = Un matériau semi-conducteur extrêmement utile, avec des utilisations dans les panneaux solaires et dans beaucoup d'autre composants électroniques complexes. +item.plastanium.description = Un matériau léger et docile utilisé dans l'aviation avancée et dans les munitions à fragmentation. +item.phase-fabric.description = Une substance au poids quasiment inexistant utilisé pour l'électronique avancé et la technologie auto-réparatrice. +item.surge-alloy.description = Un alliage avancé avec des propriétés électriques avancées. +item.spore-pod.description = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = Un composé volatile utilisé dans les bombes et les explosifs. Bien qu'il puisse être utilisé comme carburant, ce n'est pas conseillé. +item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires. +liquid.water.description = Couramment utilisé pour le refroidissement et le traitement des déchets. +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 = Peut être brûlé, utilisé comme explosif ou comme liquide de refroidissement. +liquid.cryofluid.description = Le liquide de refroidissement le plus efficace. +mech.alpha-mech.description = Le mécha standard. À une vitesse et des dégâts décents; Il peut aussi créer jusqu'à 3 drones pour infliger des dégâts supplémentaires. +mech.delta-mech.description = Un mécha rapide, avec une armure légère, fait pour des tactiques de harcèlements. Il inflige, par contre, peu de dégâts aux structures, néanmoins il peut tuer de grand groupes d'ennemis très rapidement avec ses arcs électriques. +mech.tau-mech.description = Un mécha de support. Soigne les blocs alliés en tirant dessus. Il peut aussi éteindre les feux et soigner ses alliés en zone avec sa compétence. +mech.omega-mech.description = Un mécha cuirassé et large fait pour les assauts frontaux. Sa compétence "Armure" lui permet de bloquer 90% des dégâts. +mech.dart-ship.description = Le vaisseau standard. Raisonnablement rapide et léger. Il a néanmoins peu d'attaque et une faible vitesse de minage. +mech.javelin-ship.description = Un vaisseau qui, bien que lent au départ, peut accélerer pour atteindre de très grandes vitesses et voler jusqu'aux avant-postes ennemis, faisant d'énormes dégâts avec ses arc électriques obtenus à vitesse maximum et ses missiles. +mech.trident-ship.description = Un bombardier lourd raisonnablement cuirassé. +mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Equipé avec un fusil automatique à munitions incendiaires. Il a aussi une bonne accéleration ainsi qu'une bonne vitesse maximale. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = L'unité de soutien de départ. Apparaît dans la base par défaut. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. +unit.phantom.description = Une unité de soutien avancée. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. Bien plus efficace qu'un drone spirituel. +unit.dagger.description = Une unité terrestre basiquee. Utile en armée. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Une unité terrestre cuirassée avancée. Attaque les unités terrestres comme aériennes. +unit.fortress.description = Une unité terrestre d'artillerie lourde . +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Une unité volante rapide harcelant les ennemis .Utilise du plomb comme munitions. +unit.ghoul.description = Un bombardier lourd . Utilise de la pyratite ou des explosifs comme munitions. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = Utilise du sable, du charbon et de l'énergie afin de produire du silicone. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane. +block.phase-weaver.description = Produit du tissu phasé à partir de thorium et de grandes quantités de sable. +block.alloy-smelter.description = Produit un alliage superchargé à l'aide de titane de plomb de silicone et de cuivre. +block.cryofluidmixer.description = Combine de l'eau et du titane en un liquide cryogénique bien plus efficace pour refroidir. +block.blast-mixer.description = Utilise du pétrole pour transformer la pyratite en un mélange explosif moins inflammable mais plus explosif que la pyratite. +block.pyratite-mixer.description = Mélange charbon, plomb et sable en l'hautement inflammable pyratite. +block.melter.description = chauffe de la pierre à de très hautes températures pour obtenir de la lave. +block.separator.description = Expose la pierre à de l'eau sous pression afin d'obtenir différents minéraux contenus dansla pierre. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Écrase la pierre pour en faire du sable. Utile quand il y a un manque de sable naturel. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Permet de se débarasser de n'importe quel objet ou liquide en exces . +block.power-void.description = Supprime toute l'énergie allant à l'intérieur.Bac à sable uniquement +block.power-source.description = Produit de l'énergie à l'infini. Bac à sable uniquement. +block.item-source.description = Produit des objets à l'infini. Bac à sable uniquement . +block.item-void.description = Désintègre n'importe quel objet qui va à l'intérieur sans utiliser d'énergie. Bac à sable uniquement. +block.liquid-source.description = Source de liquide infinie . Bac à sable uniquement. block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles dans les premières lors des premières vagues. block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles dans les premières lors des premières vagues.\nFait du 2 sur 2. +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.thorium-wall.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les ennemis. block.thorium-wall-large.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les ennemis.\nFait du 2 sur 2. block.phase-wall.description = Moins puissant qu'un mur en Thorium mais déviera les balles sauf si elles sont trop puissantes. @@ -854,54 +936,45 @@ block.surge-wall.description = Le plus puissant bloc défensif .\nA une faible c block.surge-wall-large.description = Le plus puissant bloc défensif .\nA une faible chance de créer des éclairs vers les ennemis .\nFait du 2 sur 2. block.door.description = Une petite porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte les ennemis peuvent tirer et passer à travers. block.door-large.description = Une large porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte les ennemis peuvent tirer et passer à travers.\nFait du 2 sur 2. +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 = Soigne périodiquement les batiments autour de lui. block.overdrive-projector.description = Accélère les batiments autour de lui, notamment les foreuses et les convoyeurs. block.force-projector.description = Crée un champ de force hexagonal autour de lui qui protège les batiments et les unités à l'intérieur de prendre des dégâts à cause des balles. block.shock-mine.description = Blesse les ennemis qui marchent dessus. Quasiment invisble pour l'ennemi. -block.duo.description = une petite tourelle avec un coût faible . -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = une petite tourelle tirant des arcs électrques vers les ennemis. -block.hail.description = une petite tourelle d'artillerie. -block.lancer.description = une tourelle de taille moyenne tirant des rayons chargés en électricité. -block.wave.description = une tourelle de taille moyenne tirant rapidement des bulles de liquide . -block.salvo.description = une tourelle de taille moyenne qui tire par salves. -block.swarmer.description = une tourelle de taille moyenne qui tire des missiles qui se dispersent. -block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs tirs simultanément. -block.cyclone.description = Une grande tourelle tirant rapidement ... très rapidement . -block.fuse.description = Une grande tourelle qui tire de puissants rayons lasers avec une faible portée. -block.spectre.description = Une grande tourelle qui tire deux puissantes balles simultanément. -block.meltdown.description = Une grande tourelle tirant de puissants rayons lasers avec une grande portée. block.conveyor.description = Convoyeur basique servant à transporter des objets. Les objets déplacés en avant sont automatiquement déposés dans les tourelles ou les batiments. Peut être tourné. block.titanium-conveyor.description = Convoyeur avancé . Déplace les objets plus rapidement que les convoyeurs standards. -block.phase-conveyor.description = convoyeur très avancé . Utilise de l'énergie pour téléporter des objets à un convoyeur phasé connecté jusqu'à une longue distance . block.junction.description = Agit comme un pont pour deux ligne de convoyeurs se croisant. Utile lorsque deux différents convoyeurs déplacent différents matériaux à différents endroits. +block.bridge-conveyor.description = bloc de transport avancé permettant de traverser jusqu'à 3 blocs de n'importe quel terrain ou batiment. +block.phase-conveyor.description = convoyeur très avancé . Utilise de l'énergie pour téléporter des objets à un convoyeur phasé connecté jusqu'à une longue distance . +block.sorter.description = Trie les articles. Si un article rcorrespond à la sélection, il peut passer. Autrement, l'article est distribué vers la gauche ou la droite. +block.router.description = Accepte les objets depuis une ou plus directions et le renvoie dans n'importe quelle direction. Utile pour séparer une chaîne de convoyeurs en plusieurs.[accent]Le seul et l'Unique[] +block.distributor.description = Un routeur avancé qui sépare les objets jusqu'à 7 autres directions équitablement. +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.mass-driver.description = Batiment de transport d'objet [accent]ultime[]. Collecte un grand nombre d'objets puis les tire à un autre transporteur de masse sur une très longue distance. -block.silicon-smelter.description = Utilise du sable, du charbon et de l'énergie afin de produire du silicone. -block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane. -block.phase-weaver.description = Produit du tissu phasé à partir de thorium et de grandes quantités de sable. -block.alloy-smelter.description = Produit un alliage superchargé à l'aide de titane de plomb de silicone et de cuivre. -block.pulverizer.description = Écrase la pierre pour en faire du sable. Utile quand il y a un manque de sable naturel. -block.pyratite-mixer.description = Mélange charbon, plomb et sable en l'hautement inflammable pyratite. -block.blast-mixer.description = Utilise du pétrole pour transformer la pyratite en un mélange explosif moins inflammable mais plus explosif que la pyratite. -block.cryofluidmixer.description = Combine de l'eau et du titane en un liquide cryogénique bien plus efficace pour refroidir. -block.melter.description = chauffe de la pierre à de très hautes températures pour obtenir de la lave. -block.incinerator.description = Permet de se débarasser de n'importe quel objet ou liquide en exces . -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Expose la pierre à de l'eau sous pression afin d'obtenir différents minéraux contenus dansla pierre. +block.mechanical-pump.description = Une pompe de faible prix pompant lentement, mais ne consomme pas d'énergie. +block.rotary-pump.description = Une pompe avancée qui double sa vitesse en utilisant de l'énergie. +block.thermal-pump.description = La pompe ultime . Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave. +block.conduit.description = tuyau basique permettant le transport de liquide . Marche comme un convoyeur mais avec les liquides. Utile si utilisé avec des extracteurs, des pompes ou d'autres conduits. +block.pulse-conduit.description = tuyau avancé permettant le transport de liquide . Transporte les liquides plus rapidement et en stocke plus que les tuyaux standards. +block.liquid-router.description = Accepte les liquide en une direction et les rejete de tout les côtés équitablement. Peut aussi stocker une certaine quantité de liquide. Utile pour envoyer un liquide à plusieurs endroits. +block.liquid-tank.description = Stocke une grande quantité de liquides . Utile pour réguler la sortie quand la demande est inconstante ou comme sécurité pour refroidir des batiments important. +block.liquid-junction.description = Agit comme une intersection pour deux conduits se croisant.Utile si deux conduits amènent différents liquides à différents endroits. +block.bridge-conduit.description = bloc de transport de liquide avancé . Permet le transport de liquides jusqu'à 3 blocs de n'importe quel terrain ou batiment . +block.phase-conduit.description = tuyau très avancé permettant le transport de liquide. Utilise de l'énergie pour téléporter les liquides à un autre tuyau phasé sur une longue distance. block.power-node.description = Transmet l'énergie aux transmetteurs énergétiques connectés . Jusqu'à quatre sources d'énergie, consommateurs ou transmetteurs peuvent être connectés. Le transmetteur recevra de l'énergie ou le transmettra à n'importe quel batiment adjacent. block.power-node-large.description = A un plus grand rayon que le transmetteur énergétique standard et jusqu'à six sources d'énergie, consommateurs ou transmetteurs peuvent être connectés. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stocke l'énergie quand elle est en abondance et le distribue si il y a trop peu d'énergie tant qu'il lui reste de l'énergie. block.battery-large.description = Stocke bien plus d'énergie qu'une batterie normale. block.combustion-generator.description = Génère de l'énergie en brûlant du pétrole ou des matériaux inflammables. -block.turbine-generator.description = Plus efficace qu'un générateur à combustion, mais requiert de l'eau . block.thermal-generator.description = Génère une grande quantité d'énergie à partir de lave . +block.turbine-generator.description = Plus efficace qu'un générateur à combustion, mais requiert de l'eau . +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = Un générateur thermo-électrique à radioisotope qui ne demande pas de refroidissement mais produit moins d'énergie qu'un réacteur à Thorium. block.solar-panel.description = Génère une faible quantité d'énergie . block.solar-panel-large.description = Génère bien plus d'énergie qu'un panneau solaire standard, Mais est aussi bien plus cher à construire. block.thorium-reactor.description = Génère énormément d'énergie à l'aide de la radioactivité du thorium. Requiert néanmoins un refroidissement constant. Explosera violemment en cas de surchauffe. -block.rtg-generator.description = Un générateur thermo-électrique à radioisotope qui ne demande pas de refroidissement mais produit moins d'énergie qu'un réacteur à Thorium. -block.unloader.description = Décharge des objets depuis des conteneurs, coffres-forts ou de la base sur un convoyeur ou directement dans un bloc adjacent . Le type d'objet peut être changé en appuyant sur le déchargeur. -block.container.description = Stocke un petit nombre d'objet . Utile pour réguler le flux d'objet quand la demande de matériaux est inconstante.un [LIGHT_GRAY] déchargeur[] peut être utilisé pour récupérer des objets depuis le conteneur. -block.vault.description = Stocke un grand nombre d'objets. Utile pour réguler le flux d'objet quand la demande de matériaux est inconstante.un [LIGHT_GRAY] déchargeur[] peut être utilisé pour récupérer des objets depuis le coffre-fort. +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 = Une foreuse de faible coût. Si elle est placée sur à un endroit approprié, produit des matériaux lentement à l'infini. block.pneumatic-drill.description = Une foreuse amélioré plus rapide et capable de forer des matériaux plus dur grâce à l'usage de vérins à air comprimé. block.laser-drill.description = Permet de forer bien plus vite grâce à la technologie laser, cela demande néanmoins de l'énergie . Additionnellement, le thorium, un matériau radioactif, peut-être récupéré avec cette foreuse. @@ -909,39 +982,43 @@ block.blast-drill.description = La Foreuse ultime . Demande une grande quantité block.water-extractor.description = Extrait l'eau des nappes phréatiques. Utile quand il n'y a pas d'eau à proximité. block.cultivator.description = Cultive le sol avec de l'eau afin d'obtenir de la biomasse. block.oil-extractor.description = Utilise une grande quantité d'énergie afin d'extraire du pétrole du sable . Utile quand il n'y a pas de lacs de pétrole à proximité. -block.trident-ship-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un bombardier lourd raisonnablement cuirassé .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. -block.javelin-ship-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un intercepteur rapide et puissant avec des armes électriques.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. -block.glaive-ship-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un large vaisseau cuirassé .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. -block.tau-mech-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un mécha de support qui peut soigner les batiments et unités alliées.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. -block.delta-mech-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un mécha rapide mais peu résistant fait pour les stratégies de harcèlement.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. -block.omega-mech-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un mécha cuirassé et large, fait pour les assauts frontaux .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. +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 = Stocke un grand nombre d'objets. Utile pour réguler le flux d'objet quand la demande de matériaux est inconstante.un [LIGHT_GRAY] déchargeur[] peut être utilisé pour récupérer des objets depuis le coffre-fort. +block.container.description = Stocke un petit nombre d'objet . Utile pour réguler le flux d'objet quand la demande de matériaux est inconstante.un [LIGHT_GRAY] déchargeur[] peut être utilisé pour récupérer des objets depuis le conteneur. +block.unloader.description = Décharge des objets depuis des conteneurs, coffres-forts ou de la base sur un convoyeur ou directement dans un bloc adjacent . Le type d'objet peut être changé en appuyant sur le déchargeur. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = une petite tourelle avec un coût faible . +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = une petite tourelle d'artillerie. +block.wave.description = une tourelle de taille moyenne tirant rapidement des bulles de liquide . +block.lancer.description = une tourelle de taille moyenne tirant des rayons chargés en électricité. +block.arc.description = une petite tourelle tirant des arcs électrques vers les ennemis. +block.swarmer.description = une tourelle de taille moyenne qui tire des missiles qui se dispersent. +block.salvo.description = une tourelle de taille moyenne qui tire par salves. +block.fuse.description = Une grande tourelle qui tire de puissants rayons lasers avec une faible portée. +block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs tirs simultanément. +block.cyclone.description = Une grande tourelle tirant rapidement ... très rapidement . +block.spectre.description = Une grande tourelle qui tire deux puissantes balles simultanément. +block.meltdown.description = Une grande tourelle tirant de puissants rayons lasers avec une grande portée. +block.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produit des petits drones qui réparent les batiments et minent des matériaux. block.phantom-factory.description = Produit des drones avancés qui sont bien plus efficaces que les drones spirituels. block.wraith-factory.description = Produit des intercepteurs rapides qui harcèlent l'ennemi. block.ghoul-factory.description = Produit des bombardiers lourds. +block.revenant-factory.description = Produit des unités terrestres lourdes avec des lasers. block.dagger-factory.description = Produit des unités terrestres basiques. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produit des unités terrestres avancées et cuirassées. block.fortress-factory.description = Produit des unités terrestres d'artillerie lourde . -block.revenant-factory.description = Produit des unités terrestres lourdes avec des lasers. block.repair-point.description = Soigne en continu l'unité blessée la plus proche tant qu'elle est à sa portée. -block.conduit.description = tuyau basique permettant le transport de liquide . Marche comme un convoyeur mais avec les liquides. Utile si utilisé avec des extracteurs, des pompes ou d'autres conduits. -block.pulse-conduit.description = tuyau avancé permettant le transport de liquide . Transporte les liquides plus rapidement et en stocke plus que les tuyaux standards. -block.phase-conduit.description = tuyau très avancé permettant le transport de liquide. Utilise de l'énergie pour téléporter les liquides à un autre tuyau phasé sur une longue distance. -block.liquid-router.description = Accepte les liquide en une direction et les rejete de tout les côtés équitablement. Peut aussi stocker une certaine quantité de liquide. Utile pour envoyer un liquide à plusieurs endroits. -block.liquid-tank.description = Stocke une grande quantité de liquides . Utile pour réguler la sortie quand la demande est inconstante ou comme sécurité pour refroidir des batiments important. -block.liquid-junction.description = Agit comme une intersection pour deux conduits se croisant.Utile si deux conduits amènent différents liquides à différents endroits. -block.bridge-conduit.description = bloc de transport de liquide avancé . Permet le transport de liquides jusqu'à 3 blocs de n'importe quel terrain ou batiment . -block.mechanical-pump.description = Une pompe de faible prix pompant lentement, mais ne consomme pas d'énergie. -block.rotary-pump.description = Une pompe avancée qui double sa vitesse en utilisant de l'énergie. -block.thermal-pump.description = La pompe ultime . Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave. -block.router.description = Accepte les objets depuis une ou plus directions et le renvoie dans n'importe quelle direction. Utile pour séparer une chaîne de convoyeurs en plusieurs.[accent]Le seul et l'Unique[] -block.distributor.description = Un routeur avancé qui sépare les objets jusqu'à 7 autres directions équitablement. -block.bridge-conveyor.description = bloc de transport avancé permettant de traverser jusqu'à 3 blocs de n'importe quel terrain ou batiment. -block.item-source.description = Produit des objets à l'infini. Bac à sable uniquement . -block.liquid-source.description = Source de liquide infinie . Bac à sable uniquement. -block.item-void.description = Désintègre n'importe quel objet qui va à l'intérieur sans utiliser d'énergie. Bac à sable uniquement. -block.power-source.description = Produit de l'énergie à l'infini. Bac à sable uniquement. -block.power-void.description = Supprime toute l'énergie allant à l'intérieur.Bac à sable uniquement -liquid.water.description = Couramment utilisé pour le refroidissement et le traitement des déchets. -liquid.oil.description = Peut être brûlé, utilisé comme explosif ou comme liquide de refroidissement. -liquid.cryofluid.description = Le liquide de refroidissement le plus efficace. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un mécha rapide mais peu résistant fait pour les stratégies de harcèlement.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. +block.tau-mech-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un mécha de support qui peut soigner les batiments et unités alliées.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. +block.omega-mech-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un mécha cuirassé et large, fait pour les assauts frontaux .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. +block.javelin-ship-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un intercepteur rapide et puissant avec des armes électriques.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. +block.trident-ship-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un bombardier lourd raisonnablement cuirassé .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. +block.glaive-ship-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un large vaisseau cuirassé .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus. diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index 212a8a2db5..882ac251f7 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -4,6 +4,7 @@ contributors = Traducteurs et contributeurs discord = Rejoignez le discord de Mindustry ! link.discord.description = Le discord officiel de Mindustry link.github.description = Code source du jeu +link.changelog.description = List of update changes link.dev-builds.description = Versions instables de développement link.trello.description = Planning Trello officiel pour les fonctionnalités planifiées. link.itch.io.description = Page web itch.io avec les versions ordinateurs téléchargeables et la version web @@ -32,7 +33,6 @@ level.mode = Mode de jeu: showagain = Ne plus montrer la prochaine fois. coreattack = nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente -outofbounds = [[ HORS LIMITES ]\n[]auto-destruction dans {0} database = Base de données savegame = Sauvegarder la partie loadgame = Charger la partie @@ -95,7 +95,6 @@ server.admins = Administrateurs server.admins.none = Aucun administrateurs trouvé ! server.add = Ajouter un serveur server.delete = Êtes-vous sûr de vouloir supprimer ce serveur ? -server.hostname = Hôte: {0} server.edit = Modifier le serveur server.outdated = [crimson]Serveur obsolète ![] server.outdated.client = [crimson]Client obsolète ![] @@ -156,13 +155,6 @@ openlink = Ouvrir le lien copylink = Copier le lien back = Retour quit.confirm = Êtes-vous sûr de vouloir quitter? -changelog.title = Notes de mise à jour -changelog.loading = Récupération des notes de mise à jour... -changelog.error.android = [accent]Notez que les notes de mise à jour ne marchent pas, certaines fois, sur Android 4.4 et versions antérieures!\nCeci est dû à un bug interne à Android. -changelog.error.ios = [accent]Les notes de mise à jour ne sont actuellement pas supportée sur IOS. -changelog.error = [scarlet]Erreur lors de la récupération des notes de mises à jour!\nVérifiez votre connexion internet. -changelog.current = [yellow][[Version actuelle] -changelog.latest = [accent][[Dernière version] loading = [accent]Chargement... saving = [accent]Sauvegarde... wave = [accent]Vague {0} @@ -192,7 +184,9 @@ editor.author = Auteur: editor.description = Description: editor.waves = Vagues: editor.rules = Règles: +editor.generation = Generation: editor.ingame = Modifier en jeu +editor.newmap = New Map waves.title = Vagues waves.remove = Retirer waves.never = @@ -207,13 +201,13 @@ waves.copy = Copier dans le Presse-papiers waves.load = Coller depuis le Presse-papiers waves.invalid = Vagues invalides dans le Presse-papiers. waves.copied = Vagues copiées. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Modifier... editor.name = Nom: editor.spawn = Ajouter une unité editor.removeunit = Retirer l'unité editor.teams = Équipes -editor.elevation = Élévation editor.errorload = Erreur lors du chargement du fichier:\n[accent]{0} editor.errorsave = Erreur lors de la sauvegarde du fichier:\n[accent]{0} editor.errorimage = C'est une image, pas une carte. Ne changez pas les extensions en espérant que cela fonctionne.\n\nSi vous souhaitez importer une carte, utilisez le bouton "importer une carte" dans l'éditeur. @@ -251,11 +245,31 @@ editor.mapname = Nom de la carte: editor.overwrite = [accent]Attention!\nCela écrasera une carte existante. editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire? editor.selectmap = Sélectionnez une carte à charger: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]Aucun filtre! Ajoutez-en un avec les boutons ci-dessous. filter.distort = Déformation filter.noise = Bruit +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Minerai filter.rivernoise = Bruit des rivières +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Dispersement filter.terrain = Terrain filter.option.scale = Échelle @@ -265,8 +279,10 @@ filter.option.threshold = Seuil filter.option.circle-scale = Échelle du cercle filter.option.octaves = Octaves filter.option.falloff = Diminution +filter.option.angle = Angle filter.option.block = Bloc filter.option.floor = Sol +filter.option.flooronto = Target Floor filter.option.wall = Mur filter.option.ore = Minerai filter.option.floor2 = Sol secondaire @@ -277,6 +293,7 @@ width = Largeur: height = Hauteur: menu = Menu play = Jouer +campaign = Campaign load = Charger save = Sauvegarder fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} Débloquée. zone.requirement.complete = Vague {0} atteinte:\n{1} Exigences de la zone complétées zone.config.complete = Vague {0} atteinte:\nConfiguration du transfert débloquée. zone.resources = Ressources détectées: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Ajouter... boss.health = Vie du BOSS connectfail = [crimson]Échec de la connexion au serveur: [accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Déjà connecté. error.mapnotfound = Fichier de carte introuvable ! error.io = Network I/O error. error.any = Erreur réseau inconnue. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Première Bataille zone.desertWastes.name = Déchets du désert zone.craters.name = Les Cratères @@ -328,6 +349,22 @@ zone.desolateRift.name = Fissure abandonnée zone.nuclearComplex.name = Complexe nucléaire zone.overgrowth.name = Surcroissance zone.tarFields.name = Champs de goudron +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Langage settings.reset = Valeur par défaut. settings.rebind = Réatttribuer @@ -346,12 +383,14 @@ no = Non info.title = Info error.title = [crimson]Une erreur s'est produite error.crashtitle = Une erreur s'est produite +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Ressource(s) requise(s) blocks.output = Ressource(s) produite(s) blocks.booster = Booster block.unknown = [LIGHT_GRAY]Inconnu blocks.powercapacity = Capacité d'énergie blocks.powershot = Énergie/Tir +blocks.damage = Damage blocks.targetsair = Cible les unités aériennes blocks.targetsground = Cible les unités terrestres blocks.itemsmoved = Vitesse de déplacement @@ -427,9 +466,11 @@ setting.animatedshields.name = Boucliers Animés setting.antialias.name = Antialias[LIGHT_GRAY] (demande le redémarrage de l'appareil)[] setting.indicators.name = Indicateurs d'alliés setting.autotarget.name = Visée automatique +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = Vide setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Autoriser le placement des blocs en diagonal setting.difficulty.training = Entraînement setting.difficulty.easy = Facile @@ -456,7 +497,11 @@ setting.mutesound.name = Couper les SFX setting.crashreport.name = Envoyer des rapports d'incident anonymement. setting.chatopacity.name = Opacité du tchat setting.playerchat.name = Afficher le tchat en jeu +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Paramétrer les touches +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Général category.view.name = Voir category.multiplayer.name = Multijoueur @@ -505,6 +550,7 @@ mode.custom = Règles personnalisées rules.infiniteresources = Ressources infinies rules.wavetimer = Temps de vague rules.waves = Vague +rules.attack = Attack Mode rules.enemyCheat = Ressources infinies pour l'IA rules.unitdrops = Uniter Drops rules.unitbuildspeedmultiplier = Multiplicateur de vitesse de création d'unités @@ -533,36 +579,21 @@ content.unit.name = Unités content.block.name = Blocs content.mech.name = Mécha item.copper.name = Cuivre -item.copper.description = Un matériau de construction utile. Utilisé intensivement dans tout les blocs. item.lead.name = Plomb -item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et pour le transport de blocs. item.coal.name = Charbon -item.coal.description = Un carburant commun et facile à obtenir. item.graphite.name = Graphite item.titanium.name = Titane -item.titanium.description = Un métal rare super-léger largement utilisé dans le transport de liquides et d'objets ainsi que dans les foreuses de haut-niveau et l'aviation item.thorium.name = Thorium -item.thorium.description = Un métal dense, et radioactif utilisé comme support structurel et comme carburant nucléaire. item.silicon.name = Silicone -item.silicon.description = Un matériau semi-conducteur extrêmement utile, avec des utilisations dans les panneaux solaires et beaucoup d'autre composants électroniques complexes. item.plastanium.name = Plastanium -item.plastanium.description = Un matériau léger et docile utilisé dans l'aviation avancée et dans les munitions à fragmentation. item.phase-fabric.name = Phase Fabric -item.phase-fabric.description = Une substance presque en apesanteur utilisée dans l'électronique de pointe et la technologie autoréparable. item.surge-alloy.name = Alliage superchargé -item.surge-alloy.description = Un alliage avancé aux propriétés électriques uniques. item.spore-pod.name = Bulbe sporifère -item.spore-pod.description = Utilisé pour l'obtention d'huile, d'explosifs et de carburants item.sand.name = Sable -item.sand.description = Un matériau commun utilisé largement dans la fonte, à la fois dans l'alliage et comme un flux. item.blast-compound.name = Mélange explosif -item.blast-compound.description = Un composé volatile utilisé dans les bombes et les explosifs. Bien qu'il puisse être utilisé comme carburant, ce n'est pas conseillé. item.pyratite.name = Pyratite -item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires. item.metaglass.name = Métaverre -item.metaglass.description = Un composé de verre très résistant. Utilisation intensive pour la distribution et le stockage de liquides. item.scrap.name = Ferraille -item.scrap.description = Restes de vieilles structures et unités. Contient des traces de nombreux métaux différents. liquid.water.name = Eau liquid.slag.name = Scorie liquid.oil.name = Pétrole @@ -570,31 +601,23 @@ liquid.cryofluid.name = Liquide Cryogénique mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Fusil automatique mech.alpha-mech.ability = Essaim de drone -mech.alpha-mech.description = Le mécha standard. A une vitesse et des dégâts décents; Il peut aussi créer jusqu'à 3 drones pour des faire des dégâts supplémentaires. mech.delta-mech.name = Delta mech.delta-mech.weapon = Arc électrique mech.delta-mech.ability = Décharge -mech.delta-mech.description = Un mécha rapide avec une armure légère fait pour des tactiques de harcèlements. Il fait par contre peu de dégâts au structures, néanmoins il peut tuer de grand groupes d'ennemis très rapidement avec ses arcs électriques. mech.tau-mech.name = Tau mech.tau-mech.weapon = Laser restructurant mech.tau-mech.ability = Explosion réparante -mech.tau-mech.description = Le support technique. Soigne les blocs alliés en leur tirant dessus. Peut soigner les alliés dans un rayon grâce à sa capacité de réparation. mech.omega-mech.name = Oméga mech.omega-mech.weapon = Essaim de missiles auto-guidés mech.omega-mech.ability = Armure -mech.omega-mech.description = Un mécha cuirassé et large fait pour les assauts frontaux. Sa compétence "Armure" lui permet de bloquer 90% des dégâts. mech.dart-ship.name = Dard mech.dart-ship.weapon = Pistolet automatique -mech.dart-ship.description = Le vaisseau standard. Raisonnablement rapide et léger, il a néanmoins peu d'attaque et une faible vitesse de minage. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = Un vaisseau qui bien que lent au départ peut accélerer pour atteindre de très grandes vitesses et voler jusqu'au avant-postes ennemis, faisant d'énormes dégâts avec ses arc électriques obtenus à vitesse maximum et ses missiles. mech.javelin-ship.weapon = Missiles explosifs autoguidés mech.javelin-ship.ability = Décharge de propulseur mech.trident-ship.name = Trident -mech.trident-ship.description = Un bombardier lourd raisonnablement cuirassé mech.trident-ship.weapon = Largage de bombe mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Equipé avec un fusil automatique à munitions incendiaires. Il a aussi une bonne accéleration ainsi qu'une bonne vitesse maximale. mech.glaive-ship.weapon = Fusil automatique incendiaire item.explosiveness = [LIGHT_GRAY]Explosivité: {0} item.flammability = [LIGHT_GRAY]Inflammabilité: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0} liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} liquid.temperature = [LIGHT_GRAY]Température: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Herbe block.salt.name = Sel block.saltrocks.name = Roches de sel @@ -621,6 +645,7 @@ block.spore-pine.name = Pin sporifère block.sporerocks.name = Roche sporifère block.rock.name = Roche block.snowrock.name = Roche enneigée +block.snow-pine.name = Snow Pine block.shale.name = Schiste block.shale-boulder.name = Rocher de schiste block.moss.name = Mousse @@ -633,7 +658,6 @@ 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.description = Fait fondre le sable et le plomb en métaverre. Nécessite de petites quantités d'énergie. block.graphite-press.name = Presse à graphite block.multi-press.name = Multi-Presse block.constructing = {0}\n[LIGHT_GRAY](En construction) @@ -702,9 +726,7 @@ block.junction.name = Junction block.router.name = Routeur block.distributor.name = [accent]Distributeur[] block.sorter.name = Trieur -block.sorter.description = Trie les articles. Si un article correspond à la sélection, il peut passer. Autrement, l'article est distribué vers la gauche ou la droite. block.overflow-gate.name = Barrière de Débordement -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.silicon-smelter.name = Fonderie de silicone block.phase-weaver.name = Tisseur à phase block.pulverizer.name = Pulvérisateur @@ -756,6 +778,7 @@ 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.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Usine de "Drones spirituels" block.phantom-factory.name = Usine de "Drones fantômes" block.wraith-factory.name = Usine de "Combattants spectraux" @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Conteneur block.launch-pad.name = Rampe de lancement -block.launch-pad.description = Lance des lots d'articles sans qu'il soit nécessaire de procéder à un lancement de base. Inachevé. block.launch-pad-large.name = Grande rampe de lancement team.blue.name = Bleu team.red.name = Rouge @@ -803,20 +825,14 @@ team.none.name = Gris team.green.name = Vert team.purple.name = Violet unit.spirit.name = Drone spirituel -unit.spirit.description = L'unité de soutien de départ. Apparaît dans la base par défaut. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. +unit.draug.name = Draug Miner Drone unit.phantom.name = Drone Fantôme -unit.phantom.description = Une unité de soutien avancée. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. Bien plus efficace qu'un drone spirituel. unit.dagger.name = Poignard -unit.dagger.description = Une unité terrestre de base. Utile en essaims. unit.crawler.name = Chenille unit.titan.name = Titan -unit.titan.description = Une unité terrestre cuirassée avancée. Utilise de l'alliage lourd pour munition. Attaque les unités aérinnes comme terrestres. unit.ghoul.name = Bombardier goule -unit.ghoul.description = Un bombardier lourd. Utilise de la pyratite ou des explosifs comme munitions. unit.wraith.name = Combattant spectral -unit.wraith.description = Une unité volante rapide harcelant les ennemis. Utilise du plomb comme munitions. unit.fortress.name = Forteresse -unit.fortress.description = Une unité terrestre d'artillerie lourde. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construire [accent]une usine de "Poignards" []est recom tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets. tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire. tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base.\nDétruisez la avec votre unité et des méchas "Poignard". +item.copper.description = Un matériau de construction utile. Utilisé intensivement dans tout les blocs. +item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et pour le transport de blocs. +item.metaglass.description = Un composé de verre très résistant. Utilisation intensive pour la distribution et le stockage de liquides. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Un matériau commun utilisé largement dans la fonte, à la fois dans l'alliage et comme un flux. +item.coal.description = Un carburant commun et facile à obtenir. +item.titanium.description = Un métal rare super-léger largement utilisé dans le transport de liquides et d'objets ainsi que dans les foreuses de haut-niveau et l'aviation +item.thorium.description = Un métal dense, et radioactif utilisé comme support structurel et comme carburant nucléaire. +item.scrap.description = Restes de vieilles structures et unités. Contient des traces de nombreux métaux différents. +item.silicon.description = Un matériau semi-conducteur extrêmement utile, avec des utilisations dans les panneaux solaires et beaucoup d'autre composants électroniques complexes. +item.plastanium.description = Un matériau léger et docile utilisé dans l'aviation avancée et dans les munitions à fragmentation. +item.phase-fabric.description = Une substance presque en apesanteur utilisée dans l'électronique de pointe et la technologie autoréparable. +item.surge-alloy.description = Un alliage avancé aux propriétés électriques uniques. +item.spore-pod.description = Utilisé pour l'obtention d'huile, d'explosifs et de carburants +item.blast-compound.description = Un composé volatile utilisé dans les bombes et les explosifs. Bien qu'il puisse être utilisé comme carburant, ce n'est pas conseillé. +item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires. +liquid.water.description = Couramment utilisé pour les machines de refroidissement et le traitement des déchets. +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 = Peut être brûlé, explosé ou utilisé comme liquide de refroidissement. +liquid.cryofluid.description = Le liquide de refroidissement le plus efficace. +mech.alpha-mech.description = Le mécha standard. A une vitesse et des dégâts décents; Il peut aussi créer jusqu'à 3 drones pour des faire des dégâts supplémentaires. +mech.delta-mech.description = Un mécha rapide avec une armure légère fait pour des tactiques de harcèlements. Il fait par contre peu de dégâts au structures, néanmoins il peut tuer de grand groupes d'ennemis très rapidement avec ses arcs électriques. +mech.tau-mech.description = Le support technique. Soigne les blocs alliés en leur tirant dessus. Peut soigner les alliés dans un rayon grâce à sa capacité de réparation. +mech.omega-mech.description = Un mécha cuirassé et large fait pour les assauts frontaux. Sa compétence "Armure" lui permet de bloquer 90% des dégâts. +mech.dart-ship.description = Le vaisseau standard. Raisonnablement rapide et léger, il a néanmoins peu d'attaque et une faible vitesse de minage. +mech.javelin-ship.description = Un vaisseau qui bien que lent au départ peut accélerer pour atteindre de très grandes vitesses et voler jusqu'au avant-postes ennemis, faisant d'énormes dégâts avec ses arc électriques obtenus à vitesse maximum et ses missiles. +mech.trident-ship.description = Un bombardier lourd raisonnablement cuirassé +mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Equipé avec un fusil automatique à munitions incendiaires. Il a aussi une bonne accéleration ainsi qu'une bonne vitesse maximale. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = L'unité de soutien de départ. Apparaît dans la base par défaut. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. +unit.phantom.description = Une unité de soutien avancée. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. Bien plus efficace qu'un drone spirituel. +unit.dagger.description = Une unité terrestre de base. Utile en essaims. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Une unité terrestre cuirassée avancée. Utilise de l'alliage lourd pour munition. Attaque les unités aérinnes comme terrestres. +unit.fortress.description = Une unité terrestre d'artillerie lourde. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Une unité volante rapide harcelant les ennemis. Utilise du plomb comme munitions. +unit.ghoul.description = Un bombardier lourd. Utilise de la pyratite ou des explosifs comme munitions. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = Réduit le sable avec du coke* très pur afin de produire du silicium. (*Coke produit à partir de charbon:REF) +block.kiln.description = Fait fondre le sable et le plomb en métaverre. Nécessite de petites quantités d'énergie. +block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane. +block.phase-weaver.description = Produit un tissu de phase à partir de thorium radioactif et de grandes quantités de sable. +block.alloy-smelter.description = Produit un alliage de surtension à partir de titane, plomb, silicium et cuivre. +block.cryofluidmixer.description = L'eau et le titane combinés forment un fluide cryo beaucoup plus efficace pour le refroidissement. +block.blast-mixer.description = Utilise du pétrole pour transformer la pyratite en un composé explosif moins inflammable mais plus explosif. +block.pyratite-mixer.description = Mélange le charbon, le plomb et le sable en pyratite hautement inflammable. +block.melter.description = Chauffe la pierre à des températures très élevées pour obtenir de la lave. +block.separator.description = Exposer la pierre à la pression de l'eau afin d'obtenir différents minéraux contenus dans la pierre. +block.spore-press.description = Comprime les gousses de spores en huile. +block.pulverizer.description = Brise la pierre en sable. Utile en cas de manque de sable naturel. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Se débarrasse de tout article ou liquide en excès. +block.power-void.description = Annule toute l'énergie qui y est introduite. Bac à sable seulement. +block.power-source.description = Débit infini d'énergie. Bac à sable seulement. +block.item-source.description = Sort infiniment les articles. Bac à sable seulement. +block.item-void.description = Détruit tous les objets qui y entrent sans utiliser d'énergie. Bac à sable seulement. +block.liquid-source.description = Débit infini de liquides. Bac à sable seulement. block.copper-wall.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues. block.copper-wall-large.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.\nS'étend sur plusieurs tuiles. +block.titanium-wall.description = 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.thorium-wall.description = Un puissant bloc défensif.\nBonne protection contre les ennemis. block.thorium-wall-large.description = Un puissant bloc défensif.\nBonne protection contre les ennemis.\nS'étend sur plusieurs tuiles. block.phase-wall.description = Pas aussi fort qu'un mur de thorium, mais détournera les balles à moins qu'elles ne soient trop puissantes. @@ -854,54 +936,45 @@ block.surge-wall.description = Le bloc défensif le plus puissant.\nPeu de chanc block.surge-wall-large.description = Le bloc défensif le plus puissant.\nPeu de chances de déclencher des éclairs en direction de l'attaquant.\nS'étend sur plusieurs tuiles. block.door.description = Une petite porte qui peut être ouverte et fermée en tapotant dessus.\nSi elle est ouverte, les ennemis peuvent tirer et se déplacer. block.door-large.description = Une grande porte qui peut être ouverte et fermée en tapotant dessus.\nSi elle est ouverte, les ennemis peuvent tirer et se déplacer.\nS'étend sur plusieurs tuiles. +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 = Guérit périodiquement les bâtiments situés à proximité. block.overdrive-projector.description = Augmente la vitesse des bâtiments à proximité, comme les foreuses et les convoyeurs. block.force-projector.description = Crée un champ de force hexagonal autour de lui-même, protégeant les bâtiments et les unités internes des dommages causés par les balles. block.shock-mine.description = Endommage les ennemis qui marchent sur la mine. Presque invisible à l'ennemi. -block.duo.description = Une petite tourelle pas chère. -block.scatter.description = Une tourelle anti-air de taille moyenne. Pulvérise des amas de plomb ou de ferraille sur les unités ennemies. -block.arc.description = Une petite tourelle qui tire de l'électricité dans un arc au hasard vers l'ennemi. -block.hail.description = Une petite tourelle d'artillerie. -block.lancer.description = Une tourelle de taille moyenne qui tire des faisceaux d’électricité chargés. -block.wave.description = Une tourelle de taille moyenne à tir rapide qui tire des bulles de liquide. -block.salvo.description = Une tourelle de taille moyenne qui tire des coups de salves. -block.swarmer.description = Une tourelle de taille moyenne qui tire des missiles éclatés. -block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs coups simultanément. -block.cyclone.description = Une grande tourelle à tir rapide. -block.fuse.description = Une grande tourelle qui tire de puissants faisceaux à courte portée. -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.conveyor.description = Bloc de transport d'articles standard.\nDéplace les objets et les déposes automatiquement dans des tourelles ou des usines. Rotatif. block.titanium-conveyor.description = Bloc de transport d'articles avancé.\nDéplace les articles plus rapidement que les convoyeurs standard. -block.phase-conveyor.description = Bloc de transport d'articles avancé.\nUtilise le pouvoir de téléporter des articles vers un convoyeur de phase connecté sur plusieurs carreaux. block.junction.description = Agit comme un pont pour deux bandes transporteuses qui se croisent.\nUtile dans les situations avec deux convoyeurs différents transportant des matériaux différents à des endroits différents. +block.bridge-conveyor.description = Bloc de transport d'articles avancé. Permet de transporter des objets sur plus de 3 tuiles de n'importe quel terrain ou bâtiment. +block.phase-conveyor.description = Bloc de transport d'articles avancé.\nUtilise le pouvoir de téléporter des articles vers un convoyeur de phase connecté sur plusieurs carreaux. +block.sorter.description = Trie les articles. Si un article correspond à la sélection, il peut passer. Autrement, l'article est distribué vers la gauche ou la droite. +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.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.silicon-smelter.description = Réduit le sable avec du coke* très pur afin de produire du silicium. (*Coke produit à partir de charbon:REF) -block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane. -block.phase-weaver.description = Produit un tissu de phase à partir de thorium radioactif et de grandes quantités de sable. -block.alloy-smelter.description = Produit un alliage de surtension à partir de titane, plomb, silicium et cuivre. -block.pulverizer.description = Brise la pierre en sable. Utile en cas de manque de sable naturel. -block.pyratite-mixer.description = Mélange le charbon, le plomb et le sable en pyratite hautement inflammable. -block.blast-mixer.description = Utilise du pétrole pour transformer la pyratite en un composé explosif moins inflammable mais plus explosif. -block.cryofluidmixer.description = L'eau et le titane combinés forment un fluide cryo beaucoup plus efficace pour le refroidissement. -block.melter.description = Chauffe la pierre à des températures très élevées pour obtenir de la lave. -block.incinerator.description = Se débarrasse de tout article ou liquide en excès. -block.spore-press.description = Comprime les gousses de spores en huile. -block.separator.description = Exposer la pierre à la pression de l'eau afin d'obtenir différents minéraux contenus dans la pierre. +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. +block.thermal-pump.description = La pompe ultime. Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave. +block.conduit.description = Bloc de transport liquide de base. Fonctionne comme un convoyeur, mais avec des liquides. Utilisation optimale avec des extracteurs, des pompes ou d’autres conduits. +block.pulse-conduit.description = Bloc de transport de liquide avancé. Transporte les liquides plus rapidement et stocke plus que des conduits standard. +block.liquid-router.description = Accepte les liquides d'une direction et les envoie dans 3 autres directions de manière égale. Peut également stocker une certaine quantité de liquide. Utile pour séparer les liquides d'une source à plusieurs cibles. +block.liquid-tank.description = Stocke une grande quantité de liquides. Utilisez-le pour créer des tampons en cas de demande non constante de matériaux ou comme protection pour le refroidissement des blocs vitaux. +block.liquid-junction.description = Agit comme un pont pour deux conduits de croisement. Utile dans les situations avec deux conduits différents transportant des liquides différents à des endroits différents. +block.bridge-conduit.description = Bloc de transport de liquide avancé. Permet de transporter des liquides jusqu'à 3 tuiles de n'importe quel terrain ou bâtiment. +block.phase-conduit.description = Bloc de transport de liquide avancé. Utilise le pouvoir de téléporter des liquides vers un conduit de phase connecté sur plusieurs carreaux. block.power-node.description = Transmet la puissance à des noeuds connectés. Il est possible de connecter jusqu'à quatre sources d'alimentation, puits ou nœuds.\nLe nœud recevra de l’alimentation ou fournira l’alimentation à tous les blocs adjacents. block.power-node-large.description = Son rayon d'action est supérieur à celui du nœud d'alimentation et peut être connecté à six sources d'alimentation, puits ou nœuds au maximum. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stocke l’énergie chaque fois qu’il ya abondance et en cas de pénurie, tant qu’il reste de la capacité. block.battery-large.description = Stocke beaucoup plus d'énergie qu'une batterie ordinaire. block.combustion-generator.description = Génère de l'énergie en brûlant du pétrole ou des matériaux inflammables. -block.turbine-generator.description = Plus efficace qu'un générateur de combustion, mais nécessite de l'eau supplémentaire. block.thermal-generator.description = Génère une grande quantité d'énergie grâce à la lave. +block.turbine-generator.description = Plus efficace qu'un générateur de combustion, mais nécessite de l'eau supplémentaire. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = Générateur thermoélectrique à radio-isotopes ne nécessitant pas de refroidissement mais fournissant moins d'énergie qu'un réacteur à thorium. block.solar-panel.description = Fournit une petite quantité d'énergie grâce au soleil. block.solar-panel-large.description = Fournit une bien meilleure alimentation qu'un panneau solaire standard, mais coûte également beaucoup plus cher à construire. block.thorium-reactor.description = Génère d'énormes quantités d'énergie à partir de thorium hautement radioactif. Nécessite un refroidissement constant.\nExplose violemment si des quantités insuffisantes de liquide de refroidissement ne sont pas fournies. -block.rtg-generator.description = Générateur thermoélectrique à radio-isotopes ne nécessitant pas de refroidissement mais fournissant moins d'énergie qu'un réacteur à thorium. -block.unloader.description = Décharge des articles d'un conteneur, d'une chambre forte ou d'un noyau sur un convoyeur ou directement dans un bloc adjacent.\nLe type d'élément à décharger peut être modifié en tapotant sur le déchargeur. -block.container.description = Stocke une petite quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [LIGHT_GRAY]Un déchargeur[] peut être utilisé pour récupérer des éléments du conteneur. -block.vault.description = Stocke une grande quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [LIGHT_GRAY]Un déchargeur[] peut être utilisé pour récupérer des éléments du coffre-fort. +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 = Un extracteur bon marché. Lorsqu'il est placé sur des carreaux appropriés, les objets sortent à un rythme lent et indéfiniment. block.pneumatic-drill.description = Un extracteur améliorée, plus rapide et capable de traiter des matériaux plus durs en utilisant la pression atmosphérique. block.laser-drill.description = Permet de forer encore plus rapidement grâce à la technologie laser, mais nécessite de l'énergie. De plus, le thorium radioactif peut être récupéré avec cet extracteur. @@ -909,39 +982,43 @@ block.blast-drill.description = L'extracteur ultime. Nécessite de grandes quant block.water-extractor.description = Extrait l'eau du sol. Utilisez-le quand il n'y a pas de lac à proximité. block.cultivator.description = Cultiver le sol avec de l'eau afin d'obtenir du biomatter. block.oil-extractor.description = Utilise de grandes quantités d'énergie pour extraire le pétrole du sable. Utilisez-le lorsqu'il n'y a pas de source directe de pétrole à proximité. -block.trident-ship-pad.description = Quittez votre vaisseau actuel et changez-vous en un bombardier lourd raisonnablement bien blindé.\nUtilisez la plate-forme en tapotant deux fois dessus. -block.javelin-ship-pad.description = Quittez votre vaisseau actuel et changez-vous en un intercepteur puissant et rapide doté d’armes légères.\nUtilisez la plate-forme en tapotant deux fois dessus. -block.glaive-ship-pad.description = Quittez votre vaisseau actuel et changez-vous en un grand vaisseau de combat bien blindé.\nUtilisez la plate-forme en tapotant deux fois dessus. -block.tau-mech-pad.description = Quittez votre vaisseau actuel et changez-vous en un centre de support capable de soigner les bâtiments et unités amis.\nUtilisez la plate-forme en tapotant deux fois dessus. -block.delta-mech-pad.description = Quittez votre vaisseau actuel et changez-vous en un méchant rapide, légèrement blindé, conçu pour les attaques à la volée.\nUtilisez la plate-forme en tapotant deux fois dessus. -block.omega-mech-pad.description = Quittez votre vaisseau actuel et changez-vous en un mech encombrant et bien blindé, conçu pour les assauts de première ligne.\nUtilisez la plate-forme en tapotant deux fois dessus. +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 = Stocke une grande quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [LIGHT_GRAY]Un déchargeur[] peut être utilisé pour récupérer des éléments du coffre-fort. +block.container.description = Stocke une petite quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [LIGHT_GRAY]Un déchargeur[] peut être utilisé pour récupérer des éléments du conteneur. +block.unloader.description = Décharge des articles d'un conteneur, d'une chambre forte ou d'un noyau sur un convoyeur ou directement dans un bloc adjacent.\nLe type d'élément à décharger peut être modifié en tapotant sur le déchargeur. +block.launch-pad.description = Lance des lots d'articles sans qu'il soit nécessaire de procéder à un lancement de base. Inachevé. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = Une petite tourelle pas chère. +block.scatter.description = Une tourelle anti-air de taille moyenne. Pulvérise des amas de plomb ou de ferraille sur les unités ennemies. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = Une petite tourelle d'artillerie. +block.wave.description = Une tourelle de taille moyenne à tir rapide qui tire des bulles de liquide. +block.lancer.description = Une tourelle de taille moyenne qui tire des faisceaux d’électricité chargés. +block.arc.description = Une petite tourelle qui tire de l'électricité dans un arc au hasard vers l'ennemi. +block.swarmer.description = Une tourelle de taille moyenne qui tire des missiles éclatés. +block.salvo.description = Une tourelle de taille moyenne qui tire des coups de salves. +block.fuse.description = Une grande tourelle qui tire de puissants faisceaux à courte portée. +block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs coups simultanément. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produit des drones légers qui extraient du minerai et réparent des blocs. block.phantom-factory.description = Produit des unités de drones avancées qui sont nettement plus efficaces qu'un drone spirituel. block.wraith-factory.description = Produit des intercepteurs rapides qui harcèlent l'ennemi. block.ghoul-factory.description = Produit des tapis de bombardiers lourds. +block.revenant-factory.description = Produit des unités terrestres laser lourdes. block.dagger-factory.description = Produit des unités terrestres de base. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produit des unités terrestres avancées et blindées. block.fortress-factory.description = Produit des unités terrestres d'artillerie lourde. -block.revenant-factory.description = Produit des unités terrestres laser lourdes. block.repair-point.description = Soigne en permanence l'unité endommagée la plus proche à proximité. -block.conduit.description = Bloc de transport liquide de base. Fonctionne comme un convoyeur, mais avec des liquides. Utilisation optimale avec des extracteurs, des pompes ou d’autres conduits. -block.pulse-conduit.description = Bloc de transport de liquide avancé. Transporte les liquides plus rapidement et stocke plus que des conduits standard. -block.phase-conduit.description = Bloc de transport de liquide avancé. Utilise le pouvoir de téléporter des liquides vers un conduit de phase connecté sur plusieurs carreaux. -block.liquid-router.description = Accepte les liquides d'une direction et les envoie dans 3 autres directions de manière égale. Peut également stocker une certaine quantité de liquide. Utile pour séparer les liquides d'une source à plusieurs cibles. -block.liquid-tank.description = Stocke une grande quantité de liquides. Utilisez-le pour créer des tampons en cas de demande non constante de matériaux ou comme protection pour le refroidissement des blocs vitaux. -block.liquid-junction.description = Agit comme un pont pour deux conduits de croisement. Utile dans les situations avec deux conduits différents transportant des liquides différents à des endroits différents. -block.bridge-conduit.description = Bloc de transport de liquide avancé. Permet de transporter des liquides jusqu'à 3 tuiles de n'importe quel terrain ou bâtiment. -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. -block.thermal-pump.description = La pompe ultime. Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave. -block.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.bridge-conveyor.description = Bloc de transport d'articles avancé. Permet de transporter des objets sur plus de 3 tuiles de n'importe quel terrain ou bâtiment. -block.item-source.description = Sort infiniment les articles. Bac à sable seulement. -block.liquid-source.description = Débit infini de liquides. Bac à sable seulement. -block.item-void.description = Détruit tous les objets qui y entrent sans utiliser d'énergie. Bac à sable seulement. -block.power-source.description = Débit infini d'énergie. Bac à sable seulement. -block.power-void.description = Annule toute l'énergie qui y est introduite. Bac à sable seulement. -liquid.water.description = Couramment utilisé pour les machines de refroidissement et le traitement des déchets. -liquid.oil.description = Peut être brûlé, explosé ou utilisé comme liquide de refroidissement. -liquid.cryofluid.description = Le liquide de refroidissement le plus efficace. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Quittez votre vaisseau actuel et changez-vous en un méchant rapide, légèrement blindé, conçu pour les attaques à la volée.\nUtilisez la plate-forme en tapotant deux fois dessus. +block.tau-mech-pad.description = Quittez votre vaisseau actuel et changez-vous en un centre de support capable de soigner les bâtiments et unités amis.\nUtilisez la plate-forme en tapotant deux fois dessus. +block.omega-mech-pad.description = Quittez votre vaisseau actuel et changez-vous en un mech encombrant et bien blindé, conçu pour les assauts de première ligne.\nUtilisez la plate-forme en tapotant deux fois dessus. +block.javelin-ship-pad.description = Quittez votre vaisseau actuel et changez-vous en un intercepteur puissant et rapide doté d’armes légères.\nUtilisez la plate-forme en tapotant deux fois dessus. +block.trident-ship-pad.description = Quittez votre vaisseau actuel et changez-vous en un bombardier lourd raisonnablement bien blindé.\nUtilisez la plate-forme en tapotant deux fois dessus. +block.glaive-ship-pad.description = Quittez votre vaisseau actuel et changez-vous en un grand vaisseau de combat bien blindé.\nUtilisez la plate-forme en tapotant deux fois dessus. diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index f346a1f211..0d44ae0d4a 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -4,6 +4,7 @@ contributors = Translator dan Kontributor discord = Bergabung di Discord Mindustry! link.discord.description = Discord Mindustry resmi link.github.description = Sumber kode permainan +link.changelog.description = List of update changes link.dev-builds.description = Bentuk pengembangan (kurang stabil) link.trello.description = Papan Trello resmi untuk fitur terencana link.itch.io.description = Halaman itch.io dengan PC download dan versi web @@ -15,7 +16,6 @@ screenshot.invalid = Peta terlalu besar, tidak cukp memori untuk menangkap layar gameover = Permainan Habis gameover.pvp = Tim[accent] {0}[] menang! highscore = [accent]Rekor Baru! - stat.wave = Gelombang Terkalahkan:[accent] {0} stat.enemiesDestroyed = Musuh Terhancurkan:[accent] {0} stat.built = Jumlah Blok yang Dibangun:[accent] {0} @@ -23,10 +23,8 @@ stat.destroyed = Jumlah Blok Dihancurkan Musuh:[accent] {0} stat.deconstructed = Jumlah Blok Dihancurkan Pemain:[accent] {0} stat.delivered = Sumber Daya yang Diluncurkan: stat.rank = Nilai Akhir: [accent]{0} - placeline = Anda telah memilih sebuah blok.\nAnda bisa[accent] menaruhnya berjejeran[] dengan[accent] menekan layar beberapa saat[] dan menarik jarimu ke arah yang dituju.\n\n[scarlet]Cobalah. removearea = Anda telah memilih mode penghancuran.\nAnda bisa[accent] menghancurkan blok dalam sebuah kotak[] dengan[accent] menekan layar beberapa saat[] dan menarik jarimu sampai membentuk sebuah area.\n\n[scarlet]Cobalah. - launcheditems = [accent]Sumber Daya map.delete = Apakah Anda yakin ingin menghapus peta "[accent]{0}[]"? level.highscore = Nilai Tertinggi: [accent]{0} @@ -35,7 +33,6 @@ level.mode = Mode Permainan: showagain = Jangkan tampilkan lagi di sesi berikutnya coreattack = < Inti sedang diserang! > nearpoint = [[ [scarlet]TINGGALKAN TITIK JATUH SEGERA[] ]\npenghancuran akan terjadi -outofbounds = [[ MELEBIHI BATAS ]\n[]penghancuran diri di {0} database = Basis Data Inti savegame = Simpan Permainan loadgame = Muat Permainan @@ -47,6 +44,7 @@ none = minimap = Peta Kecil close = Tutup quit = Keluar +maps = Maps continue = Lanjutkan maps.none = [LIGHT_GRAY]Tidak ketemu peta! about.button = Tentang @@ -55,6 +53,7 @@ noname = Pilih[accent] nama pemain[] dahulu. filename = Nama File: unlocked = Konten baru terbuka! completed = [accent]Terselesaikan +techtree = Tech Tree research.list = [LIGHT_GRAY]Penelitian: research = Penelitian researched = [LIGHT_GRAY]{0} telah diteliti. @@ -96,7 +95,6 @@ server.admins = Admin server.admins.none = Tidak ada admin! server.add = Tambahkan Server server.delete = Anda yakin ingin menghapus server ini? -server.hostname = Host: {0} server.edit = Sunting Server server.outdated = [crimson]Server Kadaluarsa![] server.outdated.client = [crimson]Client Kadaluarsa![] @@ -157,13 +155,6 @@ openlink = Buka Tautan copylink = Salin Tautan back = Kembali quit.confirm = Apakah Anda yakin ingin keluar? -changelog.title = Changelog -changelog.loading = Mendapatkan changelog... -changelog.error.android = [accent]Perlu diingat bahwa terkadang changelog tidak bekerja di Android 4.4 dan kebawah!\nDikarenakan Internal Android bug. -changelog.error.ios = [accent]Changelog saat ini tidak didukung iOS. -changelog.error = [scarlet]Error mendapatkan changelog!\nCek koneksi internetmu. -changelog.current = [yellow][[Versi Sekarang] -changelog.latest = [accent][[Versi Terbaru] loading = [accent]Memuat... saving = [accent]Menyimpan... wave = [accent]Gelombang {0} @@ -193,7 +184,9 @@ editor.author = Pencipta: editor.description = Deskripsi: editor.waves = Gelombang: editor.rules = Peraturan: +editor.generation = Generation: editor.ingame = Sunting Dalam Permainan +editor.newmap = New Map waves.title = Gelombang waves.remove = Hapus waves.never = @@ -208,13 +201,13 @@ waves.copy = Salin ke Papan klip waves.load = Tempel dari Papan klip waves.invalid = Gelombang tidak valid di papan klip. waves.copied = Gelombang tersalin. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Sunting... editor.name = Nama: editor.spawn = Munculkan Unit editor.removeunit = Hapus Unit editor.teams = Tim -editor.elevation = Ketinggian editor.errorload = Error memuat file:\n[accent]{0} editor.errorsave = Error menyimpan file:\n[accent]{0} editor.errorimage = Itu gambar biasa, bukan peta. Jangan merubah ekstensi dan megharapkan akan berhasil.\n\nJika anda ingin mengimpor peta "Legacy", gunakan tombol 'impor peta legacy ' di penyunting. @@ -252,11 +245,31 @@ editor.mapname = Nama Peta: editor.overwrite = [accent]Peringatan!\nIni menindih peta yang telah ada. editor.overwrite.confirm = [scarlet]Peringatan![] Peta dengan nama ini sudah ada. Yakin ingin menindihnya? editor.selectmap = Pilih peta untuk dimuat: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]Tidak ada filter! Tambahkan dengan tombol dibawah. filter.distort = Rusakkan filter.noise = Kebisingan +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Sumber Daya filter.rivernoise = Kebisingan Sugnai +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Penebaran filter.terrain = Lahan filter.option.scale = Ukuran @@ -266,8 +279,10 @@ filter.option.threshold = Ambang filter.option.circle-scale = Ukuran Lingkaran filter.option.octaves = Oktaf filter.option.falloff = Kemerosotan +filter.option.angle = Angle filter.option.block = Blok filter.option.floor = Lantai +filter.option.flooronto = Target Floor filter.option.wall = Dinding filter.option.ore = Sumber Daya filter.option.floor2 = Lantai Sekunder @@ -278,6 +293,7 @@ width = Lebar: height = Tinggi: menu = Menu play = Bermain +campaign = Campaign load = Memuat save = Simpan fps = FPS: {0} @@ -289,7 +305,6 @@ tutorial = Tutorial editor = Penyunting mapeditor = Penyunting Peta donate = Donasi - abandon = Tinggalkan abandon.text = Zona ini dan semua sumber daya didalamnya akan berada di tangan musuh. locked = Dikunci @@ -309,9 +324,11 @@ zone.unlocked = [LIGHT_GRAY]{0} terbuka. zone.requirement.complete = Gelombang {0} terselesaikan:\nPersyaratan zona {1} tercapai. zone.config.complete = Gelombang {0} terselesaikan:\nkonfigurasi muatan terbuka. zone.resources = Sumber Daya Terdeteksi: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Menambahkan... boss.health = Darah Boss - connectfail = [crimson]Gagal menyambung ke server:\n\n[accent]{0} error.unreachable = Server tak terjangkau.\nApakah alamatnya benar? error.invalidaddress = Alamat tidak valid. @@ -321,7 +338,7 @@ error.alreadyconnected = Sudah tersambung. error.mapnotfound = File peta tidak ditemaukan! error.io = Error jaringan I/O. error.any = Jaringan error tidak diketahui. - +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Titik Nol zone.desertWastes.name = Gurun Gersang zone.craters.name = Kawah @@ -332,7 +349,22 @@ zone.desolateRift.name = Retakan Terpencil zone.nuclearComplex.name = Kompleks Produksi Nuklir zone.overgrowth.name = Pertumbuhan zone.tarFields.name = Lahan Ter - +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Bahasa settings.reset = Atur ulang ke Default (standar) settings.rebind = Rebind @@ -351,12 +383,14 @@ no = Tidak info.title = Info error.title = [crimson]Sebuah error telah terjadi error.crashtitle = Sebuah error telah terjadi +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Masukan blocks.output = Pengeluaran blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Kapasitas Tenaga blocks.powershot = Tenaga/Tembakan +blocks.damage = Damage blocks.targetsair = Menargetkan Udara blocks.targetsground = Menargetkan Darat blocks.itemsmoved = Kecepatan Gerak @@ -383,7 +417,6 @@ blocks.inaccuracy = Jarak Melenceng blocks.shots = Tembakan blocks.reload = Tembakan/Detik blocks.ammo = Amunisi - bar.drillspeed = Kecepatan Bor: {0}/s bar.efficiency = Daya Guna: {0}% bar.powerbalance = Tenaga: {0}/s @@ -395,7 +428,6 @@ bar.heat = Panas bar.power = Tenaga bar.progress = Perkembangan Pembangunan bar.spawned = Unit: {0}/{1} - bullet.damage = [stat]{0}[lightgray] kekuatan (dmg) bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] kotak bullet.incendiary = [stat]pembakar @@ -407,7 +439,6 @@ bullet.freezing = [stat]membeku bullet.tarred = [stat]tar bullet.multiplier = [stat]{0}[lightgray]x multiplikasi amunisi bullet.reload = [stat]{0}[lightgray]x rasio menembak - unit.blocks = blok unit.powersecond = unit tenaga/detik unit.liquidsecond = unit zat cair/detik @@ -435,9 +466,11 @@ setting.animatedshields.name = Animasi Lindungan setting.antialias.name = Antialiasi[LIGHT_GRAY] (membutuhkan restart)[] setting.indicators.name = Indikasi Musuh/Teman Lain setting.autotarget.name = Auto-Target +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Maks FPS setting.fpscap.none = Tidak Ada setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Selalu Penaruhan Diagonal setting.difficulty.training = Latihan setting.difficulty.easy = Mudah @@ -464,7 +497,11 @@ setting.mutesound.name = Diamkan Suara setting.crashreport.name = Laporkan Masalah setting.chatopacity.name = Jelas-Beningnya Chat setting.playerchat.name = Tunjukkan Chat dalam Permainan +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Rebind Kunci +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Umum category.view.name = Melihat category.multiplayer.name = Bermain Bersama @@ -513,7 +550,8 @@ mode.custom = Pengaturan Modifikasi rules.infiniteresources = Sumber Daya Tak Terbatas rules.wavetimer = Pengaturan Waktu Gelombang rules.waves = Gelombang -rules.enemyCheat = Sumber Daya A.I Musuh (Tim Merah) Tak Terbatas +rules.attack = Attack Mode +rules.enemyCheat = Sumber Daya A.I Musuh (Tim Merah) Tak Terbatas rules.unitdrops = Munculnya Unit rules.unitbuildspeedmultiplier = Multiplikasi Kecepatan Munculnya Unit rules.unithealthmultiplier = Multiplikasi Darah Unit @@ -541,36 +579,21 @@ content.unit.name = Unit content.block.name = Blok content.mech.name = Robot item.copper.name = Tembaga -item.copper.description = Bahan struktur yang berguna. Digunakan di semua tipe blok. item.lead.name = Timah -item.lead.description = Bahan dasar di awal permainan. Digunakan di elektronik dan blok transportasi zat cair. item.coal.name = Batu Bara -item.coal.description = Bahan Bakar umum. item.graphite.name = Grafit item.titanium.name = Titanium -item.titanium.description = Logam langka yang super-ringan digunakan di transportasi zat cair, bor dan pesawat terbang. item.thorium.name = Thorium -item.thorium.description = Logam yang padat dan radioaktif, sebagai bantuan struktur ban bahan bakar nuklir. item.silicon.name = Silikon -item.silicon.description = Semikonduktor yang sangat berguna, penerapan di panel surya dan banyak benda electronik. item.plastanium.name = Plastanium -item.plastanium.description = Bahan yang ringan dan elastis, digunakan di pesawat terbang canggih dan amunisi kepingan. item.phase-fabric.name = Kain Phase -item.phase-fabric.description = Zat yang hampir tidak ada bobot ini digunakan di elektronik canggih dan teknologi reparasi. item.surge-alloy.name = Paduan Surge -item.surge-alloy.description = Paduan canggih dengan properti listrik yang unik. item.spore-pod.name = Spora Polong -item.spore-pod.description = Digunakan untuk produksi oli, bahan peledak dan bahan bakar. item.sand.name = Pasir -item.sand.description = Bahan umum yang digunakan di berbagai peleburan item.blast-compound.name = Senyawa Peledak -item.blast-compound.description = Senyawa yang digunakan di bom dan peledak lainnya. Bisa dipakai untuk bahan bakar, tetapi tidak disarankan. item.pyratite.name = Pyratite -item.pyratite.description = Zat yang mudah dibakar ini digunakan di senjata pembakar. item.metaglass.name = Kaca Meta -item.metaglass.description = Kaca yang super-kuat. Digunakan untuk distribusi zar cair dan penyimpanan. item.scrap.name = Kepingan -item.scrap.description = Peninggalan bangunan dan unit tua. mengandung beberapa zat logam. liquid.water.name = Air liquid.slag.name = Ampas liquid.oil.name = Oli @@ -578,31 +601,23 @@ liquid.cryofluid.name = Cryofluid mech.alpha-mech.name = Alfa mech.alpha-mech.weapon = Repeater Berat mech.alpha-mech.ability = Regenerasi -mech.alpha-mech.description = Robot standar. Mempunyai kecepatan dan kekuatan yang sedang. mech.delta-mech.name = Delta mech.delta-mech.weapon = Generator Arca mech.delta-mech.ability = Kekuatan Listrik -mech.delta-mech.description = Robot baja yang cepat dan ringan, dibuat untuk serangan tabrak-lari. Tidak kuat melawan bangunan, tapi bisa membunuh grup musuh dengan cepat memakai senjata petirnya. mech.tau-mech.name = Tao mech.tau-mech.weapon = Laser Pemulih mech.tau-mech.ability = Perbaikan Konstan -mech.tau-mech.description = Robot support. Menyembuhkan blok teman dengan menembaknya. Bisa menyembuhkan teman di sekitarnya. mech.omega-mech.name = Omega mech.omega-mech.weapon = Misil Berkelompok mech.omega-mech.ability = Konfigurasi Berbaja -mech.omega-mech.description = Robot yang besar dan berbaja, Dibuat untuk serangan baris depan. Kekuatan bajanya bisa memantulkan 90% pukulan lawan. mech.dart-ship.name = Dart mech.dart-ship.weapon = Bertubi-Tubi -mech.dart-ship.description = Pesawat starndar. cpeat dan ringan, tetapi mempunyai sedikit tenaga dan penambang yang pelan. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = Pesawat tabrak-lari. Walaupun pelan, bisa dipercepat sekencang kilat, memiliki kekuatan yang besar dengan kemampuan listrik dan misilnya. mech.javelin-ship.weapon = Misil Bertubi-tubi mech.javelin-ship.ability = Booster Listrik mech.trident-ship.name = Trident -mech.trident-ship.description = Pengebom kelas berat. Berbaja kuat. mech.trident-ship.weapon = Lahan Bom mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Pesawat tempur yang besar nan kuat. Memiliki senjata pembakar. Kecepatan yang bagus. mech.glaive-ship.weapon = Repeater Api item.explosiveness = [LIGHT_GRAY]Tingkat Keledakan: {0}% item.flammability = [LIGHT_GRAY]Tingkat Kebakaran: {0}% @@ -619,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Kecepatan Membangun: {0}% liquid.heatcapacity = [LIGHT_GRAY]Kapasitas Panas: {0} liquid.viscosity = [LIGHT_GRAY]Kelekatan: {0} liquid.temperature = [LIGHT_GRAY]Suhu: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Rumput block.salt.name = Garam block.saltrocks.name = Batu Garam @@ -629,6 +645,7 @@ block.spore-pine.name = Cemara Spora block.sporerocks.name = Batu Spora block.rock.name = Batu block.snowrock.name = Batu Salju +block.snow-pine.name = Snow Pine block.shale.name = Serpihan block.shale-boulder.name = Serpihan Batu Besar block.moss.name = Lumut @@ -641,7 +658,6 @@ block.scrap-wall-huge.name = Dinding Kepingan Besar 2 block.scrap-wall-gigantic.name = Dinding Kepingan Besar 3 block.thruster.name = Pendorong block.kiln.name = Kiln -block.kiln.description = Membakar pasir dan timah menjadi kaca meta. Membutuhkan Listrik. block.graphite-press.name = Pencetak Grafit block.multi-press.name = Multi-Cetak block.constructing = {0} [LIGHT_GRAY](Konstruksi) @@ -710,9 +726,7 @@ block.junction.name = Simpangan block.router.name = Pengarah block.distributor.name = Distributor block.sorter.name = Penyortir -block.sorter.description = Memilah Item. Jika item cocok dengan seleksi, itemnya diperbolehkan lewat. Jika Tidak, item akan dikeluarkan dari kiri dan/atau kanan. block.overflow-gate.name = Gerbang Meluap -block.overflow-gate.description = Kombinasi antara pemisah dan penyortir yang hanya mengeluarkan item ke kiri dan/atau ke kanan jika bagian depan tertutup. block.silicon-smelter.name = Pelebur Silikon block.phase-weaver.name = Pengrajut Phase block.pulverizer.name = Penyemprot @@ -764,6 +778,7 @@ block.blast-mixer.name = Mixer Peledak block.solar-panel.name = Panel Surya block.solar-panel-large.name = Panel Surya Besar block.oil-extractor.name = Pegekstrak Oli +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Pabrik Drone Spirit block.phantom-factory.name = Pabrik Drone Phantom block.wraith-factory.name = Pabrik Penyerang Wraith @@ -802,7 +817,6 @@ block.spectre.name = Iblis block.meltdown.name = Pelampiasan block.container.name = Kontainer block.launch-pad.name = Pad Peluncur -block.launch-pad.description = Meluncurkan beberapa item tanpa meninggalkan base. block.launch-pad-large.name = Pad Peluncur Besar team.blue.name = biru team.red.name = merah @@ -811,20 +825,14 @@ team.none.name = abu-abu team.green.name = hijau team.purple.name = ungu unit.spirit.name = Drone Spirit -unit.spirit.description = unit pemulaan. muncul di inti secara standar. Menambang sumber daya dan memperbaiki blok. +unit.draug.name = Draug Miner Drone unit.phantom.name = Drone Phantom -unit.phantom.description = unit canggih. Menambang sumber daya dan memperbaiki blok. Lebih efektif dari drone spirit. unit.dagger.name = Dagger -unit.dagger.description = Unit darat dasar. Berguna di kelompok. unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = Unit darat berbaja yang canggih ini menyerang target darat dan udara. unit.ghoul.name = Pengebom Ghoul -unit.ghoul.description = Pengebom kelas berat. unit.wraith.name = Penyerang Wraith -unit.wraith.description = Unit tabrak-lari yang cepat. unit.fortress.name = Fortress -unit.fortress.description = Unit meriam darat kelas berat. unit.revenant.name = Revenant unit.eruptor.name = Peletus unit.chaos-array.name = Satuan Kekacauan @@ -852,8 +860,74 @@ tutorial.daggerfactory = Bangun[accent] pabrik robot "dagger".[]\n\nIni akan ber tutorial.router = Pabrik butuh sumber daya untuk berfungsi.\nBuatlah pengalih untuk mengalihkan pengantar sumber daya. tutorial.dagger = Sambungkan tiang listrik ke pabrik.\nSaat kebutuhan dicapai, robot akan diciptakan.\n\nBuatlah bor, generator dan pengantar secukupnya. tutorial.battle = [LIGHT_GRAY] musuh[] telah mengungkapkan inti mereka.\nHancurkan dengan unitmu dan robot dagger. +item.copper.description = Bahan struktur yang berguna. Digunakan di semua tipe blok. +item.lead.description = Bahan dasar di awal permainan. Digunakan di elektronik dan blok transportasi zat cair. +item.metaglass.description = Kaca yang super-kuat. Digunakan untuk distribusi zar cair dan penyimpanan. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Bahan umum yang digunakan di berbagai peleburan +item.coal.description = Bahan Bakar umum. +item.titanium.description = Logam langka yang super-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.silicon.description = Semikonduktor yang sangat berguna, penerapan di panel surya dan banyak benda electronik. +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 oli, bahan peledak dan bahan bakar. +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. +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 = Bisa dibakar, diledakkan atau sebagai pendigin. +liquid.cryofluid.description = Zat cair paling efisien untuk mendinginkan hal-hal. +mech.alpha-mech.description = Robot standar. Mempunyai kecepatan dan kekuatan yang sedang. +mech.delta-mech.description = Robot baja yang cepat dan ringan, dibuat untuk serangan tabrak-lari. Tidak kuat melawan bangunan, tapi bisa membunuh grup musuh dengan cepat memakai senjata petirnya. +mech.tau-mech.description = Robot support. Menyembuhkan blok teman dengan menembaknya. Bisa menyembuhkan teman di sekitarnya. +mech.omega-mech.description = Robot yang besar dan berbaja, Dibuat untuk serangan baris depan. Kekuatan bajanya bisa memantulkan 90% pukulan lawan. +mech.dart-ship.description = Pesawat starndar. cpeat dan ringan, tetapi mempunyai sedikit tenaga dan penambang yang pelan. +mech.javelin-ship.description = Pesawat tabrak-lari. Walaupun pelan, bisa dipercepat sekencang kilat, memiliki kekuatan yang besar dengan kemampuan listrik dan misilnya. +mech.trident-ship.description = Pengebom kelas berat. Berbaja kuat. +mech.glaive-ship.description = Pesawat tempur yang besar nan kuat. Memiliki senjata pembakar. Kecepatan yang bagus. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = unit pemulaan. muncul di inti secara standar. Menambang sumber daya dan memperbaiki blok. +unit.phantom.description = unit canggih. Menambang sumber daya dan memperbaiki blok. Lebih efektif dari drone spirit. +unit.dagger.description = Unit darat dasar. Berguna di kelompok. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Unit darat berbaja yang canggih ini menyerang target darat dan udara. +unit.fortress.description = Unit meriam darat kelas berat. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Unit tabrak-lari yang cepat. +unit.ghoul.description = Pengebom kelas berat. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = Mengubah pasir dengan batu bara untuk memproduksi silikon. +block.kiln.description = Membakar pasir dan timah menjadi kaca meta. Membutuhkan Listrik. +block.plastanium-compressor.description = Memproduksi plastanium dari oli dan titanium. +block.phase-weaver.description = Memproduksi kain phase dari thorium dan banyak pasir. +block.alloy-smelter.description = Memproduksi paduan surge dari titanium, timah, silikon dan tembaga. +block.cryofluidmixer.description = Mencampur air dan titanium menjadi cryofluid yang lebih efisien untuk pendingin. +block.blast-mixer.description = Menggunakan oli 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. +block.separator.description = Mengekstrak logam-logam berguna dari terak. +block.spore-press.description = Menekan pod spora menjadi oli. +block.pulverizer.description = Menghancurkan kepingan menjadi pasir. Berguna jika tidak ada pasir disekitar. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Menghancurkan item atau zat cair sisa. +block.power-void.description = Menghilangkan semua tenaga yang masuk kedalamnya. Sandbox eksklusif. +block.power-source.description = Menghasilkan tenaga tak terbatas. Sandbox eksklusif. +block.item-source.description = Mengeluarkan item tak terhingga. Sandbox eksklusif. +block.item-void.description = Menghancurkan item apa saja tanpa penggunaan tenaga. Sandbox eksklusif. +block.liquid-source.description = Mengeluarkan zat cair tak terhingga. Sandbox eksklusif. block.copper-wall.description = Blok pelindung murah.\nBerguna untuk melindungi inti dan menara di beberapa gelombang awal. block.copper-wall-large.description = Blok pelindung murah.\nBerguna untuk melindungi inti dan menara di beberapa gelombang awal.\nSebesar 4 blok. +block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies. +block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles. block.thorium-wall.description = Blok pelindung yang kuat.\npelindung bagus dari musuh. block.thorium-wall-large.description = Blok pelindung yang kuat.\npelindung bagus dari musuh.\nSebesar 4 blok. block.phase-wall.description = Tidak sekuat dinding thorium tetapi akan memantulkan peluru senjata jika tidak terlalu kuat. @@ -862,54 +936,45 @@ block.surge-wall.description = Blok pelindung terkuat.\nMempunyai kemungkinan un block.surge-wall-large.description = Blok pelindung terkuat.\nMempunyai kemungkinan untuk menyetrum penyerang. \nSebesar 4 blok. block.door.description = Pintu kecil yang bisa dibuka-tutup dengan menekannya.\nJika dibuka, musuh bisa masuk dan menembak. block.door-large.description = Pintu kecil yang bisa dibuka-tutup dengan menekannya.\nJika dibuka, musuh bisa masuk dan menembak.\nSebesar 4 blok. +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 = menyembuhkan blok di sekelilingnya secara berkala. block.overdrive-projector.description = Menambah kecepatan bangunan sekitar, seperti bor dan pengantar. block.force-projector.description = Membentuk medan gaya berbentuk segi enam disekitar, melindungi bangunan dan unit didalamnya dari tembakan. block.shock-mine.description = Mencedera musuh yang menginjak ranjau. Hampir tak kasat mata kepada musuh. -block.duo.description = menara yang murah nan kecil. Berguna melawan unit darat. -block.scatter.description = Menara Anti-Udara berukuran sedang. Melempar gumpalan timah atau kepingan ke unit musuh. -block.arc.description = Menara kecil jarak dekat ini menembak listrik secara acak ke arah musuh. -block.hail.description = Menara meriam kecil. -block.lancer.description = Menara ukuran sedang yang menembak sinar listrik. -block.wave.description = Menara penembak beruntun ukuran sedang yang menembak gelembung air. -block.salvo.description = Menara ukuran sedang yang menembak pelurunya secara serentak. -block.swarmer.description = Menara ukuran sedang yang menembak misil bertubi-tubi. -block.ripple.description = Menara meriam besar yang menembak beberapa peluru sekaligus. -block.cyclone.description = Menara Penembak Beruntun Besar. -block.fuse.description = Menara besar ini menembak sinar pendek yang kuat. -block.spectre.description = Menara besar yang menembak dua peluru kuat sekaligus\. -block.meltdown.description = Menara besar ini menembak sinar panjang yang kuat. block.conveyor.description = Blok transportasi dasar. Memindahkan item ke menara ataupun pabrik. Bisa Diputar. block.titanium-conveyor.description = Blok transportasi canggih. Memindahkan item lebih cepat daripada pengantar biasa. -block.phase-conveyor.description = Blok transportasi canggih. Menggunakan tenaga untuk teleportasi item ke sambungan pengantar phase melewati beberapa blok. block.junction.description = Berguna seperti jembatan untuk dua pengantar yang bersimpangan. Berguna di situasi dimana dua pengantar berbeda membawa bahan berbeda ke lokasi yang berbeda. +block.bridge-conveyor.description = Blok Transportasi Item Canggih. bisa memindahkan item hingga 3 blok panjang melewati apapun lapangan atau bangunan. +block.phase-conveyor.description = Blok transportasi canggih. Menggunakan tenaga untuk teleportasi item ke sambungan pengantar phase melewati beberapa blok. +block.sorter.description = Memilah Item. Jika item cocok dengan seleksi, itemnya diperbolehkan lewat. Jika Tidak, item akan dikeluarkan dari kiri dan/atau kanan. +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.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.mass-driver.description = Blok item transportasi tercanggih. Membawa beberapa item dan menembaknya ke driver massal lainnya dari arah yang jauh. -block.silicon-smelter.description = Mengubah pasir dengan batu bara untuk memproduksi silikon. -block.plastanium-compressor.description = Memproduksi plastanium dari oli dan titanium. -block.phase-weaver.description = Memproduksi kain phase dari thorium dan banyak pasir. -block.alloy-smelter.description = Memproduksi paduan surge dari titanium, timah, silikon dan tembaga. -block.pulverizer.description = Menghancurkan kepingan menjadi pasir. Berguna jika tidak ada pasir disekitar. -block.pyratite-mixer.description = Mencampur batu bara, timah dan pasir menjadi pyratite yang sangat mudah terbakar. -block.blast-mixer.description = Menggunakan oli untuk membentuk pyratite menjadi senyawa peledak yang kurang mudah terbakar tetapi lebih eksplosif. -block.cryofluidmixer.description = Mencampur air dan titanium menjadi cryofluid yang lebih efisien untuk pendingin. -block.melter.description = Melelehkan kepingan menjadi terak untuk proses selanjutnya atau digunakan menara. -block.incinerator.description = Menghancurkan item atau zat cair sisa. -block.spore-press.description = Menekan pod spora menjadi oli. -block.separator.description = Mengekstrak logam-logam berguna dari terak. +block.mechanical-pump.description = Pompa murah dengan pengeluaran yang pelan, tetapi tidak mengkonsumsi tenaga. +block.rotary-pump.description = Pompa canggih yang kecepatannya dua kali lipat jika menggunakan tenaga. +block.thermal-pump.description = Pompa Tercanggih. +block.conduit.description = Blok Transportasi Zat Cair Umum. Bekerja Seperti Pengantar, tetapi untuk zat cair. +block.pulse-conduit.description = Blok Transportasi Zat Cair Canggih. Memindahkan dan menyimpan zat cair lebih cepat dan banyak daripada saluran biasa. +block.liquid-router.description = Menerima zat cair dari satu arah dan mengeluarkannya ke 3 arah yang sama. Bisa juga menyimpan sejumlah zat cair. Berguna untuk memisahkan zat cair dari satu sumber ke target yang banyak. +block.liquid-tank.description = Menyimpan jumlah zat cair yang banyak. Gunakan sebagai penyangga ketika kebutuhan zat cair tidak konstan atau sebagai penjaga untuk mendinginkan blok yang vital. +block.liquid-junction.description = Berguna seperti jembatan untuk dua saluran yang bersimpangan. Berguna di situasi dimana dua saluran berbeda membawa zat cair berbeda ke lokasi yang berbeda. +block.bridge-conduit.description = Blok Transportasi Zat Cair Canggih. bisa memindahkan zat cair hingga 3 blok panjang melewati apapun lapangan atau bangunan. +block.phase-conduit.description = Blok Transportasi Zat Cair Canggih. Menggunakan listrik untuk teleportasi zat zair ke saluran phase yang terhubung dari jarak jauh. block.power-node.description = Membawa tenaga ke tiang tersambung. hingga empat sumber listrik, sambungan atau tiang lainnya yang bisa disambung. Tiang akan mendapatkan atau memberi tenaga ke/dari blok yang disambung. block.power-node-large.description = Mempunyai radius lebih besar dari tiang listrik biasa dan bisa menyambung hingga enam to up to six sumber listrik, sambungan atau tiang lainnya. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Menyimpan tenaga jika ada kelimpahan dan memberikan tenaga jika ada kekurangan, asalkan ada kapasitas tersisa. block.battery-large.description = Menyimpan lebih banyak tenaga daripada baterai biasa. block.combustion-generator.description = Menghasilkan tenaga dengan membakar oli atau pembakar. -block.turbine-generator.description = Lebih efisien daripada generator pembakar, tetapi membutuhkan tambahan air. block.thermal-generator.description = Menghasilkan tenaga disaat ditaruh di lokasi yang panas. +block.turbine-generator.description = Lebih efisien daripada generator pembakar, tetapi membutuhkan tambahan air. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = Generator yang tidak membutuhkan pendiginan tetapi lebih memberi sedikit tenaga daripada reaktor thorium. block.solar-panel.description = Menghasilkan jumlah tenaga kecil dari matahari. block.solar-panel-large.description = Menghasilkan lebih banyak tenaga dari panel surya biasa, tapi lebih mahal untuk dibangun. block.thorium-reactor.description = Menghasilkan tenaga yang besar dari konsumsi thorium. Membutuhkan pendinginan konstan. Akan meledak jika tidak cukup pendingin . Pengeluaran tenaga tergantung kepenuhan. -block.rtg-generator.description = Generator yang tidak membutuhkan pendiginan tetapi lebih memberi sedikit tenaga daripada reaktor thorium. -block.unloader.description = Mengeluarkan item dari kontainer, vault atau inti kedalam pengantar atau langsung ke blok yang dituju. Tipe item yang dimuat bisa diganti dengan mengetuk pembongkar muatan. -block.container.description = Menyimpan semua tipe item. [LIGHT_GRAY] pembongkar muatan[] bisa digunakan untuk mengeluarkan item dari kontainer. -block.vault.description = Menyimpan semua tipe item berkuantitas besar. [LIGHT_GRAY] pembongkar muatan[] bisa digunakan untuk mengeluarkan item dari vault. +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 = Bor murah. Saat ditaruh ditempat yang sesuai, mengeluarkan item dengan pelan tanpa batas. block.pneumatic-drill.description = Bor lebih cepat dari bor mekanik dan bisa memproses bahan lebih keras dengan menggunakan tekanan udara. block.laser-drill.description = Mengebor lebih cepat lewat teknologi laser, tapi membutuhkan tenaga. Bisa menambang thorium dengan bor ini. @@ -917,39 +982,43 @@ 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 pod siap diolah. block.oil-extractor.description = Menggunakan tenaga cukup besar untuk mengekstrak oli dari pasir. Gunakan jika tidak ada sumber oli disekitar. -block.trident-ship-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi pengebom kelas berat.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. -block.javelin-ship-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi Pencegat yang kuat dan cepat dengan kekuatan listrik.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. -block.glaive-ship-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi Pesawat tempur berbaja.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. -block.tau-mech-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi robot pemulih yang bisa memulihkan bangunan dan unit.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. -block.delta-mech-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi robot cepat untuk serangan tabrak-lari.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. -block.omega-mech-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi robot besar dan berbaja, digunakan untuk serangan baris depan.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. +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 = Menyimpan semua tipe item berkuantitas besar. [LIGHT_GRAY] pembongkar muatan[] bisa digunakan untuk mengeluarkan item dari vault. +block.container.description = Menyimpan semua tipe item. [LIGHT_GRAY] pembongkar muatan[] bisa digunakan untuk mengeluarkan item dari kontainer. +block.unloader.description = Mengeluarkan item dari kontainer, vault atau inti kedalam pengantar atau langsung ke blok yang dituju. Tipe item yang dimuat bisa diganti dengan mengetuk pembongkar muatan. +block.launch-pad.description = Meluncurkan beberapa item tanpa meninggalkan base. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = menara yang murah nan kecil. Berguna melawan unit darat. +block.scatter.description = Menara Anti-Udara berukuran sedang. Melempar gumpalan timah atau kepingan ke unit musuh. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = Menara meriam kecil. +block.wave.description = Menara penembak beruntun ukuran sedang yang menembak gelembung air. +block.lancer.description = Menara ukuran sedang yang menembak sinar listrik. +block.arc.description = Menara kecil jarak dekat ini menembak listrik secara acak ke arah musuh. +block.swarmer.description = Menara ukuran sedang yang menembak misil bertubi-tubi. +block.salvo.description = Menara ukuran sedang yang menembak pelurunya secara serentak. +block.fuse.description = Menara besar ini menembak sinar pendek yang kuat. +block.ripple.description = Menara meriam besar yang menembak beberapa peluru sekaligus. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Memproduksi drone ringan yang menambang sumber daya dan memulih blok. block.phantom-factory.description = Memproduksi drone canggih yang lebih efektif dibandingkan drone spirit. block.wraith-factory.description = Memproduksi unit tabrak-lari yang cepat. block.ghoul-factory.description = Memproduksi pengebom kelas berat. +block.revenant-factory.description = Memproduksi unit laser udara kelas berat. block.dagger-factory.description = Memproduksi unit darat dasar. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Memproduksi unit darat canggih. block.fortress-factory.description = Memproduksi unit meriam darat kelas berat. -block.revenant-factory.description = Memproduksi unit laser udara kelas berat. block.repair-point.description = Terus menerus memulihkan unit terluka disekitar. -block.conduit.description = Blok Transportasi Zat Cair Umum. Bekerja Seperti Pengantar, tetapi untuk zat cair. -block.pulse-conduit.description = Blok Transportasi Zat Cair Canggih. Memindahkan dan menyimpan zat cair lebih cepat dan banyak daripada saluran biasa. -block.phase-conduit.description = Blok Transportasi Zat Cair Canggih. Menggunakan listrik untuk teleportasi zat zair ke saluran phase yang terhubung dari jarak jauh. -block.liquid-router.description = Menerima zat cair dari satu arah dan mengeluarkannya ke 3 arah yang sama. Bisa juga menyimpan sejumlah zat cair. Berguna untuk memisahkan zat cair dari satu sumber ke target yang banyak. -block.liquid-tank.description = Menyimpan jumlah zat cair yang banyak. Gunakan sebagai penyangga ketika kebutuhan zat cair tidak konstan atau sebagai penjaga untuk mendinginkan blok yang vital. -block.liquid-junction.description = Berguna seperti jembatan untuk dua saluran yang bersimpangan. Berguna di situasi dimana dua saluran berbeda membawa zat cair berbeda ke lokasi yang berbeda. -block.bridge-conduit.description = Blok Transportasi Zat Cair Canggih. bisa memindahkan zat cair hingga 3 blok panjang melewati apapun lapangan atau bangunan. -block.mechanical-pump.description = Pompa murah dengan pengeluaran yang pelan, tetapi tidak mengkonsumsi tenaga. -block.rotary-pump.description = Pompa canggih yang kecepatannya dua kali lipat jika menggunakan tenaga. -block.thermal-pump.description = Pompa Tercanggih. -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.distributor.description = Pemisah canggih yang memisah item ke 7 arah berbeda bersamaan. -block.bridge-conveyor.description = Blok Transportasi Item Canggih. bisa memindahkan item hingga 3 blok panjang melewati apapun lapangan atau bangunan. -block.item-source.description = Mengeluarkan item tak terhingga. Sandbox eksklusif. -block.liquid-source.description = Mengeluarkan zat cair tak terhingga. Sandbox eksklusif. -block.item-void.description = Menghancurkan item apa saja tanpa penggunaan tenaga. Sandbox eksklusif. -block.power-source.description = Menghasilkan tenaga tak terbatas. Sandbox eksklusif. -block.power-void.description = Menghilangkan semua tenaga yang masuk kedalamnya. Sandbox eksklusif. -liquid.water.description = Umumnya digunakan untuk mendinginkan mesin-mesin dan pendaur ulang. -liquid.oil.description = Bisa dibakar, diledakkan atau sebagai pendigin. -liquid.cryofluid.description = Zat cair paling efisien untuk mendinginkan hal-hal. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi robot cepat untuk serangan tabrak-lari.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. +block.tau-mech-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi robot pemulih yang bisa memulihkan bangunan dan unit.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. +block.omega-mech-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi robot besar dan berbaja, digunakan untuk serangan baris depan.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. +block.javelin-ship-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi Pencegat yang kuat dan cepat dengan kekuatan listrik.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. +block.trident-ship-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi pengebom kelas berat.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. +block.glaive-ship-pad.description = Tinggalkan kapalmu sekarang dan berubah menjadi Pesawat tempur berbaja.\nGunakan pad dengan menekan dua kali sambil berdiri didalamnya. diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 92e7fd5fe1..bbeacb640e 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -4,6 +4,7 @@ contributors = Translators and Contributors discord = Unisciti sul server discord di mindustry! link.discord.description = la chatroom ufficiale del server discord di Mindustry link.github.description = Codice sorgente del gioco +link.changelog.description = List of update changes link.dev-builds.description = Build di sviluppo versioni instabili link.trello.description = Scheda ufficiale trello per funzionalità pianificate link.itch.io.description = pagina di itch.io con download per PC e versione web @@ -32,7 +33,6 @@ level.mode = Modalità di gioco: showagain = non mostrare più coreattack = < Il nucleo è sotto attacco! > nearpoint = [[ [scarlet]LACIA LA ZONA NEMICA IMMEDIATAMENTE[] ]\nautodistruzione imminente -outofbounds = [[ SEI FUORI DAL MONDO ]\n[]Auto-distruzione in {0} database = Database nucleo savegame = Salva loadgame = Carica @@ -95,7 +95,6 @@ server.admins = Amministratori server.admins.none = Nessun amministratore trovato! server.add = Aggiungi server server.delete = Sei sicuro di voler eliminare questo server? -server.hostname = Host: {0} server.edit = Modifica server server.outdated = [crimson]Server obsoleto![] server.outdated.client = [crimson]Client obsoleto![] @@ -156,13 +155,6 @@ openlink = Apri Link copylink = Copia link back = Indietro quit.confirm = Sei sicuro di voler uscire? -changelog.title = Registro modifiche -changelog.loading = Ottenendo il registro delle modifiche ... -changelog.error.android = [accent]Nota che il registro delle modifiche non funziona su Android 4.4 e versioni precedenti! Ciò è dovuto a un bug interno di Android. -changelog.error.ios = [accent]Il registro delle modifiche non è ancora supportato su IoS -changelog.error = [scarlet]Errore durante il recupero del registro delle modifiche! Controlla la tua connessione Internet. -changelog.current = [yellow][[Current version] -changelog.latest = [accent][[Latest version] loading = [accent]Caricamento in corso ... saving = [accent]Salvando . . . wave = [accent]Ondata {0} @@ -192,7 +184,9 @@ editor.author = Autore: editor.description = Descrizione: editor.waves = Ondate: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Ondate waves.remove = Rimuovi waves.never = @@ -207,13 +201,13 @@ waves.copy = Copia negli appunti waves.load = Caica dagli appunti waves.invalid = Onde dagli appunti non valide. waves.copied = Onde copiate. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Modifica... editor.name = Nome: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Squadre -editor.elevation = Elevazione editor.errorload = Errore nel caricamento di:\n[accent]{0} editor.errorsave = Errore nel salvataggio di:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Nome Mappa: editor.overwrite = [Accent]Attenzione!\nQuesto sovrascrive una mappa esistente. editor.overwrite.confirm = [scarlet]Attenzione![] Una mappa con questo nome esiste già. Sei sicuro di volerla sovrascrivere? editor.selectmap = Seleziona una mappa da caricare: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Modifica filter.noise = Interferenza +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Minerali filter.rivernoise = Interferenze a fiume +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Dispersione filter.terrain = Terreno filter.option.scale = Scala @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Larghezza: height = Altezza: menu = Menu play = Gioca +campaign = Campaign load = Carica save = Salva fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Add... boss.health = Boss Health connectfail = [crimson] Impossibile connettersi al server: [accent] {0} @@ -318,6 +338,7 @@ error.alreadyconnected = Already connected. error.mapnotfound = Map file not found! error.io = Network I/O error. error.any = Unkown network error. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Lingua settings.reset = Resetta Alle Impostazioni Predefinite settings.rebind = Reimposta @@ -346,12 +383,14 @@ no = No info.title = [accent] Info error.title = [crimson]Si è verificato un errore error.crashtitle = Si è verificato un errore +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Capacità Energetica blocks.powershot = Danno/Colpo +blocks.damage = Damage blocks.targetsair = Attacca nemici aerei blocks.targetsground = Targets Ground blocks.itemsmoved = Move Speed @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.indicators.name = Ally Indicators setting.autotarget.name = Auto-Target +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Limite FPS setting.fpscap.none = Niente setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = training setting.difficulty.easy = facile @@ -456,7 +497,11 @@ setting.mutesound.name = Togli suoni setting.crashreport.name = Send Anonymous Crash Reports setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Configurazione Tasti +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Generale category.view.name = Visualizzazione category.multiplayer.name = Multigiocatore @@ -505,6 +550,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves +rules.attack = Attack Mode rules.enemyCheat = Infinite AI Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Units content.block.name = Blocks content.mech.name = Mech item.copper.name = Rame -item.copper.description = Una utile materiale styrutturale. Molto usato in tutti i blocchi. item.lead.name = Piombo -item.lead.description = Un materiale base, molto usato nei blocchi di trasporto. item.coal.name = carbone -item.coal.description = Un carburante comune e facilmente ottenibile. item.graphite.name = Graphite item.titanium.name = titanio -item.titanium.description = Un raro metallo super leggero usato ampiamente nel trasporto di liquidi, trapani e navi. item.thorium.name = Torio -item.thorium.description = Un materiale denso e radioattivo, utilizzato nella costruzione di strutture e come carburante del reattore nucleare. item.silicon.name = Silicio -item.silicon.description = Un semiconduttore molto utile che viene utilizzato nei pannelli solari e nei macchinari elettronici. item.plastanium.name = Plastaniu -item.plastanium.description = Un materiale leggero e duttile, utilizzato nelle navi avanzete e come munizione. item.phase-fabric.name = Phase Fabric -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.surge-alloy.name = Surge Alloy -item.surge-alloy.description = An advanced alloy with unique electrical properties. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = sabbia -item.sand.description = Un materiale base che viene altamente usato nei processi di fusione, Sia come lega che come lubrificante. item.blast-compound.name = Polvere esplosiva -item.blast-compound.description = Un composto altamente volatile, utilizzato nella produzione di bombe ed esplosivi. Può essere utilizzato come combustibile anche se non è consigliato. item.pyratite.name = Pirite -item.pyratite.description = Una sostanza molto infiammabile che viene utilizzata nelle armi a fuoco. item.metaglass.name = Metaglass -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = acqua liquid.slag.name = Slag liquid.oil.name = petrolio @@ -570,31 +601,23 @@ liquid.cryofluid.name = criogenium mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Ripetitore pesante mech.alpha-mech.ability = Orda di droni -mech.alpha-mech.description = Il mech standard. È abbastanza veloce e produce abbastanza danni; può anche generare 3 droni per aumentare il suo danno complessivo. mech.delta-mech.name = Delta mech.delta-mech.weapon = Generatore di fulmini mech.delta-mech.ability = Scarica -mech.delta-mech.description = Un veloce, poco armato mech fatto per giocare a tocca e fuga con il nemico. Fa poco danno alle strutture, ma può uccidere un gran nummero di nemici grazie alle sue armi ad alto voltaggio. mech.tau-mech.name = Tau mech.tau-mech.weapon = Laser ricostruttore mech.tau-mech.ability = Ripara esplosioni -mech.tau-mech.description = Un mach di supporto. Cura i blocchi danneggiati sparandogli contro. Può spegnere fuochi e curare i compagni di squadra. mech.omega-mech.name = Omega mech.omega-mech.weapon = SCiame di missili mech.omega-mech.ability = Configurazione armata -mech.omega-mech.description = Un ingombrante e ben armato mech, fatto per stare in prima linea. La sue difese possono bloccare fino al 90% dei danni. mech.dart-ship.name = Dart mech.dart-ship.weapon = Ripetitore -mech.dart-ship.description = Una navicella standard. Molto veloce e leggera, ma può minare pochi blocchi e ha scarse potenzialità nella difesa. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = Una navetta da tocca e fuga. Anche se inizialmente lenta, può accellerare ad alte velocità e voloare sopra gli avamposti dei nemici, può provocare molti danni ai nemici tramite l'utilizzo di fulmini o missili. mech.javelin-ship.weapon = Missili esplosivi mech.javelin-ship.ability = Discharge Booster mech.trident-ship.name = Tridente -mech.trident-ship.description = Un bombardiere pesante. Giùstamente ben protetto. mech.trident-ship.weapon = Valle delle bombe mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Una grande e ben armata macchina da guerra. Equipaggiato con ripetitore di fiamma e con alta accellerazione e velocità massima. mech.glaive-ship.weapon = Ripetitore di fiamma item.explosiveness = [LIGHT_GRAY]Esplosività: {0} item.flammability = [LIGHT_GRAY]Infiammabilità: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Capacità calorifica: {0} liquid.viscosity = [LIGHT_GRAY]Viscosità: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Rock block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0}\n[LIGHT_GRAY](Constructing) @@ -702,9 +726,7 @@ block.junction.name = Incrocio block.router.name = router block.distributor.name = Mega router block.sorter.name = Filtro -block.sorter.description = Divide gli oggetti. Se l'oggetto corrisponde a quello selezionato, Può passare. Altrimenti viene espulso sui lati. block.overflow-gate.name = splitter per eccesso -block.overflow-gate.description = Una combinazione di un divisore e di un router , che distribuisce sui suoi lati se la via centrale è bloccata. block.silicon-smelter.name = Fonderia per silicio block.phase-weaver.name = Tessitore di fase block.pulverizer.name = Polverizzatore @@ -756,6 +778,7 @@ block.blast-mixer.name = Mixer poleri block.solar-panel.name = Pannello solare block.solar-panel-large.name = Pannrllo solare 3x3 block.oil-extractor.name = Estrattore petrolio +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Spirit Drone Factory block.phantom-factory.name = Phantom Drone Factory block.wraith-factory.name = Wraith Fighter Factory @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Container block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = blue team.red.name = red @@ -803,20 +825,14 @@ team.none.name = gray team.green.name = green team.purple.name = purple unit.spirit.name = Spirit Drone -unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. +unit.draug.name = Draug Miner Drone unit.phantom.name = Phantom Drone -unit.phantom.description = An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. unit.dagger.name = Pericolo -unit.dagger.description = Un unità terrena base, molto più efficiente se in branco. unit.crawler.name = Crawler unit.titan.name = Titano -unit.titan.description = Un'unità di terra corazzata avanzata. Utilizza carburo come munizione. Attacca sia bersagli terrestri che aerei. unit.ghoul.name = Ghoul Bomber -unit.ghoul.description = A heavy carpet bomber. Uses blast compound or pyratite as ammo. unit.wraith.name = Wraith Fighter -unit.wraith.description = A fast, hit-and-run interceptor unit. unit.fortress.name = Fortress -unit.fortress.description = A heavy artillery ground unit. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. +item.copper.description = Una utile materiale styrutturale. Molto usato in tutti i blocchi. +item.lead.description = Un materiale base, molto usato nei blocchi di trasporto. +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.sand.description = Un materiale base che viene altamente usato nei processi di fusione, Sia come lega che come lubrificante. +item.coal.description = Un carburante comune e facilmente ottenibile. +item.titanium.description = Un raro metallo super leggero usato ampiamente nel trasporto di liquidi, trapani e navi. +item.thorium.description = Un materiale denso e radioattivo, utilizzato nella costruzione di strutture e come carburante del reattore nucleare. +item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. +item.silicon.description = Un semiconduttore molto utile che viene utilizzato nei pannelli solari e nei macchinari elettronici. +item.plastanium.description = Un materiale leggero e duttile, utilizzato nelle navi avanzete e come munizione. +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 = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = Un composto altamente volatile, utilizzato nella produzione di bombe ed esplosivi. Può essere utilizzato come combustibile anche se non è consigliato. +item.pyratite.description = Una sostanza molto infiammabile che viene utilizzata nelle armi a fuoco. +liquid.water.description = 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 = Can be burnt, exploded or used as a coolant. +liquid.cryofluid.description = The most efficient liquid for cooling things down. +mech.alpha-mech.description = Il mech standard. È abbastanza veloce e produce abbastanza danni; può anche generare 3 droni per aumentare il suo danno complessivo. +mech.delta-mech.description = Un veloce, poco armato mech fatto per giocare a tocca e fuga con il nemico. Fa poco danno alle strutture, ma può uccidere un gran nummero di nemici grazie alle sue armi ad alto voltaggio. +mech.tau-mech.description = Un mach di supporto. Cura i blocchi danneggiati sparandogli contro. Può spegnere fuochi e curare i compagni di squadra. +mech.omega-mech.description = Un ingombrante e ben armato mech, fatto per stare in prima linea. La sue difese possono bloccare fino al 90% dei danni. +mech.dart-ship.description = Una navicella standard. Molto veloce e leggera, ma può minare pochi blocchi e ha scarse potenzialità nella difesa. +mech.javelin-ship.description = Una navetta da tocca e fuga. Anche se inizialmente lenta, può accellerare ad alte velocità e voloare sopra gli avamposti dei nemici, può provocare molti danni ai nemici tramite l'utilizzo di fulmini o missili. +mech.trident-ship.description = Un bombardiere pesante. Giùstamente ben protetto. +mech.glaive-ship.description = Una grande e ben armata macchina da guerra. Equipaggiato con ripetitore di fiamma e con alta accellerazione e velocità massima. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. +unit.phantom.description = An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. +unit.dagger.description = Un unità terrena base, molto più efficiente se in branco. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Un'unità di terra corazzata avanzata. Utilizza carburo come munizione. Attacca sia bersagli terrestri che aerei. +unit.fortress.description = A heavy artillery ground unit. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = A fast, hit-and-run interceptor unit. +unit.ghoul.description = A heavy carpet bomber. Uses blast compound or pyratite as ammo. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 highly pure coke in order to produce silicon. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produces plastanium from oil and titanium. +block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. +block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. +block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. +block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. +block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. +block.melter.description = Heats up stone to very high temperatures to obtain lava. +block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Gets rid of any excess item or liquid. +block.power-void.description = Voids all power inputted into it. 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 which go into it without using power. Sandbox only. +block.liquid-source.description = Infinitely outputs 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.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. @@ -854,54 +936,45 @@ block.surge-wall.description = The strongest defensive block.\nHas a small chanc block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\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 = Periodically heals buildings in its vicinity. block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.duo.description = A small, cheap turret. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. -block.hail.description = A small artillery turret. -block.lancer.description = A medium-sized turret which shoots charged electricity beams. -block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. -block.salvo.description = A medium-sized turret which fires shots in salvos. -block.swarmer.description = A medium-sized turret which shoots burst missiles. -block.ripple.description = A large artillery turret which fires several shots simultaneously. -block.cyclone.description = A large rapid fire turret. -block.fuse.description = A large turret which shoots powerful short-range beams. -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.conveyor.description = Basic item transport block. Moved items forward and automatically deposits them into turrets or crafters. Rotatable. block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. 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 = Divide gli oggetti. Se l'oggetto corrisponde a quello selezionato, Può passare. Altrimenti viene espulso sui lati. +block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. +block.distributor.description = An advanced router which splits items to up to 7 other directions equally. +block.overflow-gate.description = Una combinazione di un divisore e di un router , che distribuisce sui suoi lati se la via centrale è bloccata. block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. -block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon. -block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. -block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. -block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. -block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. -block.melter.description = Heats up stone to very high temperatures to obtain lava. -block.incinerator.description = Gets rid of any excess item or liquid. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. +block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. +block.rotary-pump.description = An advanced pump which doubles up speed by using power. +block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. +block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. +block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. +block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. +block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. +block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. +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.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left. block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning oil or flammable materials. -block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.thermal-generator.description = Generates a large amount of power from lava. +block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build. block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. -block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. -block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. -block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. -block.vault.description = Stores a large amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +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. block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. @@ -909,39 +982,43 @@ block.blast-drill.description = The ultimate drill. Requires large amounts of po block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.cultivator.description = Cultivates the soil with water in order to obtain biomatter. block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby. -block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. -block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. -block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. -block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. -block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. -block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +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. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. +block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = A small artillery turret. +block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. +block.lancer.description = A medium-sized turret which shoots charged electricity beams. +block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. +block.swarmer.description = A medium-sized turret which shoots burst missiles. +block.salvo.description = A medium-sized turret which fires shots in salvos. +block.fuse.description = A large turret which shoots powerful short-range beams. +block.ripple.description = A large artillery turret which fires several shots simultaneously. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.ghoul-factory.description = Produces heavy carpet bombers. +block.revenant-factory.description = Produces heavy laser ground units. block.dagger-factory.description = Produces basic ground units. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produces advanced, armored ground units. block.fortress-factory.description = Produces heavy artillery ground units. -block.revenant-factory.description = Produces heavy laser ground units. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. -block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. -block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. -block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. -block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. -block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. -block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. -block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. -block.rotary-pump.description = An advanced pump which doubles up speed by using power. -block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. -block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. -block.distributor.description = An advanced router which splits items to up to 7 other directions equally. -block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. -block.item-source.description = Infinitely outputs items. Sandbox only. -block.liquid-source.description = Infinitely outputs liquids. Sandbox only. -block.item-void.description = Destroys any items which go into it without using power. Sandbox only. -block.power-source.description = Infinitely outputs power. Sandbox only. -block.power-void.description = Voids all power inputted into it. Sandbox only. -liquid.water.description = Commonly used for cooling machines and waste processing. -liquid.oil.description = Can be burnt, exploded or used as a coolant. -liquid.cryofluid.description = The most efficient liquid for cooling things down. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. +block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. +block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. +block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. +block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 3bdc536779..6723d2f603 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -4,6 +4,7 @@ contributors = 翻訳や協力してくださった方々 discord = DiscordのMindustryに参加! link.discord.description = Mindustryの公式Discordグループ link.github.description = このゲームのソースコード +link.changelog.description = List of update changes link.dev-builds.description = 不安定な開発版 link.trello.description = 公式 Trelloボード で実装予定の機能をチェック link.itch.io.description = itch.io でPC版のダウンロードやweb版で遊ぼう @@ -32,7 +33,6 @@ level.mode = ゲームモード: showagain = 次回以降表示しない coreattack = < コアが攻撃を受けています! > nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲滅されます -outofbounds = [[ 区域外 ]\n[]自爆まであと {0} 秒 database = コアデーターベース savegame = 保存 loadgame = 読み込む @@ -95,7 +95,6 @@ server.admins = 管理者 server.admins.none = 管理者はいません! server.add = サーバーを追加 server.delete = サーバーを削除してもよろしいですか? -server.hostname = ホスト: {0} server.edit = サーバーを編集 server.outdated = [crimson]古いサーバーです![] server.outdated.client = [crimson]古いクライアントです![] @@ -156,13 +155,6 @@ openlink = リンクを開く copylink = リンクをコピー back = 戻る quit.confirm = 終了してもよろしいですか? -changelog.title = 変更履歴 -changelog.loading = 変更履歴を取得中... -changelog.error.android = [accent]変更履歴はAndroid4.4または、それ以下では動作しない場合があります!\nこれはAndroidの内部バグによるものです。 -changelog.error.ios = [accent]変更履歴はiOSに対応していません。 -changelog.error = [scarlet]変更履歴を取得できませんでした!\nインターネット接続を確認してください。 -changelog.current = [yellow][[現在のバージョン] -changelog.latest = [accent][[最新版] loading = [accent]読み込み中... saving = [accent]保存中... wave = [accent]ウェーブ {0} @@ -192,7 +184,9 @@ editor.author = 作者: editor.description = 説明: editor.waves = ウェーブ: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = ウェーブ waves.remove = 削除 waves.never = <永久> @@ -207,13 +201,13 @@ waves.copy = クリップボードにコピー waves.load = クリップボードから読み込む waves.invalid = クリップボードのウェーブは無効なウェーブです。 waves.copied = ウェーブをコピーしました。 +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY]<デフォルト> edit = 編集... editor.name = 名前: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = チーム -editor.elevation = 標高 editor.errorload = ファイルの読み込みエラー:\n[accent]{0} editor.errorsave = ファイルの保存エラー:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = マップ名: editor.overwrite = [accent]警告!\nすでに存在するマップを上書きします。 editor.overwrite.confirm = [scarlet]警告![] すでに同じ名前のマップが存在します。上書きしてもよろしいですか? editor.selectmap = 読み込むマップを選択: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]フィルターが設定されていません! 下のボタンからフィルターを追加してください。 filter.distort = ゆがみ filter.noise = ノイズ +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = 鉱石 filter.rivernoise = リバーノイズ +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = 分散 filter.terrain = 地形 filter.option.scale = スケール @@ -265,8 +279,10 @@ filter.option.threshold = スレッシュホールド filter.option.circle-scale = サークルスケール filter.option.octaves = オクターブ filter.option.falloff = フォールオフ +filter.option.angle = Angle filter.option.block = ブロック filter.option.floor = 地面 +filter.option.flooronto = Target Floor filter.option.wall = 壁 filter.option.ore = 鉱石 filter.option.floor2 = 2番目の地面 @@ -277,6 +293,7 @@ width = 幅: height = 高さ: menu = メニュー play = プレイ +campaign = Campaign load = 読み込む save = 保存 fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} がアンロックされました. zone.requirement.complete = ウェーブ {0} を達成:\n{1} の開放条件を達成しました。 zone.config.complete = ウェーブ {0} を達成:\n積荷の設定が解除されました。 zone.resources = 発見した資源: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = 追加... boss.health = ボスのHP connectfail = [crimson]サーバーへの接続できませんでした:\n\n[accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = すでに接続されています。 error.mapnotfound = マップファイルが見つかりません! error.io = ネットワークエラーです。 error.any = 不明なネットワークエラーです。 +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = グラウンド · ゼロ zone.desertWastes.name = デザート · ウェーツ zone.craters.name = ザ · クレーター @@ -328,6 +349,22 @@ zone.desolateRift.name = ディサレット · リフト zone.nuclearComplex.name = ニュークリア · プロダクション · コンプレックス zone.overgrowth.name = オーバーグロウス zone.tarFields.name = ター · フィールズ +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = 言語 settings.reset = デフォルトにリセット settings.rebind = 再設定 @@ -346,12 +383,14 @@ no = いいえ info.title = 情報 error.title = [crimson]エラーが発生しました error.crashtitle = エラーが発生しました +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = 搬入 blocks.output = 搬出 blocks.booster = ブースト block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = 電力容量 blocks.powershot = 電力/ショット +blocks.damage = Damage blocks.targetsair = 対空攻撃 blocks.targetsground = 対地攻撃 blocks.itemsmoved = 輸送速度 @@ -427,9 +466,11 @@ setting.animatedshields.name = シールドのアニメーション setting.antialias.name = アンチエイリアス[LIGHT_GRAY] (再起動が必要)[] setting.indicators.name = 敵/味方の方角表示 setting.autotarget.name = オートターゲット +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = 最大FPS setting.fpscap.none = なし setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = 常に斜め設置 setting.difficulty.training = トレーニング setting.difficulty.easy = イージー @@ -456,7 +497,11 @@ setting.mutesound.name = 効果音をミュート setting.crashreport.name = 匿名でクラッシュレポートを送信する setting.chatopacity.name = チャットの透明度 setting.playerchat.name = ゲーム内にチャットを表示 +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = キーバインドを再設定 +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = 一般 category.view.name = 表示 category.multiplayer.name = マルチプレイ @@ -505,6 +550,7 @@ mode.custom = カスタムルール rules.infiniteresources = 資源の無限化 rules.wavetimer = ウェーブの自動進行 rules.waves = ウェーブ +rules.attack = Attack Mode rules.enemyCheat = 敵の資源の無限化 rules.unitdrops = ユニットの戦利品 rules.unitbuildspeedmultiplier = ユニットの製造速度倍率 @@ -533,36 +579,21 @@ content.unit.name = ユニット content.block.name = ブロック content.mech.name = 機体 item.copper.name = 銅 -item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。 item.lead.name = 鉛 -item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。 item.coal.name = 石炭 -item.coal.description = 一般的で有用な燃料です。 item.graphite.name = 黒鉛 item.titanium.name = チタン -item.titanium.description = 希少で非常に軽量な金属です。液体輸送やドリル、航空機などで使われます。 item.thorium.name = トリウム -item.thorium.description = 放射性を持つ高密度な金属です。建造物の支えや核燃料として使われます。 item.silicon.name = シリコン -item.silicon.description = 非常に有用な半導体でソーラーパネルや多くの複雑な機械に応用できます。 item.plastanium.name = プラスタニウム -item.plastanium.description = 軽量で伸縮性のある材料です。高度な航空機や分散型の弾薬として使用されます。 item.phase-fabric.name = フェーズファイバー -item.phase-fabric.description = 極めて軽量な素材です。高度な機械や自己修復技術に使用されます。 item.surge-alloy.name = サージ合金 -item.surge-alloy.description = 電気的特性を持った特殊な合金です。 item.spore-pod.name = 胞子ポッド -item.spore-pod.description = 石油や爆薬、燃料への転換として使用されます。 item.sand.name = 砂 -item.sand.description = 合金や融剤など広く使用されている一般的な材料です。 item.blast-compound.name = 爆発性化合物 -item.blast-compound.description = 爆弾や爆発物に使われる揮発性の化合物です。燃料として燃やすこともできますが、お勧めしません。 item.pyratite.name = ピラタイト -item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。 item.metaglass.name = メタガラス -item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。 item.scrap.name = スクラップ -item.scrap.description = 昔の建造物やユニットの残骸です。様々な種類の金属が微量に含まれています。 liquid.water.name = 水 liquid.slag.name = スラグ liquid.oil.name = 石油 @@ -570,31 +601,23 @@ liquid.cryofluid.name = 冷却水 mech.alpha-mech.name = アルファ mech.alpha-mech.weapon = 重機関砲 mech.alpha-mech.ability = 再生 -mech.alpha-mech.description = 一般的な機体です。十分な速度と攻撃性能です。 mech.delta-mech.name = デルタ mech.delta-mech.weapon = 電撃砲 mech.delta-mech.ability = 放電 -mech.delta-mech.description = 突撃攻撃が可能な素早く軽量化された機体です。建造物にはダメージをほとんど与えられませんが、電撃によって多くの敵に攻撃することができます。 mech.tau-mech.name = タウ mech.tau-mech.weapon = 再構築レーザー mech.tau-mech.ability = リペアバースト -mech.tau-mech.description = 支援型機体です。攻撃を受けた味方のブロックを修復します。修復能力によって周辺の味方を修復します。 mech.omega-mech.name = オメガ mech.omega-mech.weapon = ロケット弾 mech.omega-mech.ability = 特殊装甲 -mech.omega-mech.description = 最前線での攻撃向けに作られた大型機体です。特殊装甲によってダメージの90%を防ぐことができます。 mech.dart-ship.name = ダーツ mech.dart-ship.weapon = 機関砲 -mech.dart-ship.description = 一般的な機体です。軽く高速で使いやすいですが、攻撃能力はほとんどなく採掘速度も遅いのが難点です。 mech.javelin-ship.name = ジャベリン -mech.javelin-ship.description = 突撃攻撃型の機体です。最初の速度は遅いですが、敵基地が近づくと飛行能力が飛躍的に高まり、電撃やミサイルで大きなダメージを与えることができます。 mech.javelin-ship.weapon = バーストミサイル mech.javelin-ship.ability = 放電ブースター mech.trident-ship.name = トライデント -mech.trident-ship.description = 強力な爆撃機です。強固な装甲を有しています。 mech.trident-ship.weapon = 爆弾 mech.glaive-ship.name = グライブ -mech.glaive-ship.description = 重武装された大型攻撃機です。焼夷弾が装備され、機体の中でも優れた加速と最高速度を有しています。 mech.glaive-ship.weapon = 焼夷弾 item.explosiveness = [LIGHT_GRAY]爆発性: {0}% item.flammability = [LIGHT_GRAY]可燃性: {0}% @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]建設速度: {0}% liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0} liquid.viscosity = [LIGHT_GRAY]粘度: {0} liquid.temperature = [LIGHT_GRAY]温度: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = 草 block.salt.name = 岩塩氷河 block.saltrocks.name = 岩塩 @@ -621,6 +645,7 @@ block.spore-pine.name = 胞子の松の木 block.sporerocks.name = 胞子の岩 block.rock.name = 岩 block.snowrock.name = 雪の積もった岩 +block.snow-pine.name = Snow Pine block.shale.name = 泥板岩 block.shale-boulder.name = 泥板岩の丸石 block.moss.name = コケ @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = とても大きなスクラップの壁 block.scrap-wall-gigantic.name = 巨大なスクラップの壁 block.thruster.name = スラスター block.kiln.name = 溶解炉 -block.kiln.description = 砂と鉛を溶かしてメタガラスを生成します。少量の電力が必要です。 block.graphite-press.name = 黒鉛圧縮機 block.multi-press.name = マルチ圧縮機 block.constructing = {0}\n[LIGHT_GRAY](建設中) @@ -702,9 +726,7 @@ block.junction.name = ジャンクション block.router.name = ルーター block.distributor.name = ディストリビューター block.sorter.name = ソーター -block.sorter.description = アイテムを分別して搬出します。設定したアイテムは通過させます。他のアイテムが搬入されると側面にアイテムを搬出します。 block.overflow-gate.name = オーバーフローゲート -block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合に左右にアイテムを搬出します。 block.silicon-smelter.name = シリコン溶鉱炉 block.phase-weaver.name = フェーズ織機 block.pulverizer.name = 粉砕機 @@ -756,6 +778,7 @@ block.blast-mixer.name = 化合物ミキサー block.solar-panel.name = ソーラーパネル block.solar-panel-large.name = 大型ソーラーパネル block.oil-extractor.name = 石油抽出機 +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = スピリットドローン製造機 block.phantom-factory.name = ファントムドローン製造機 block.wraith-factory.name = レースファイター製造機 @@ -794,7 +817,6 @@ block.spectre.name = スペクター block.meltdown.name = メルトダウン block.container.name = コンテナー block.launch-pad.name = 発射台 -block.launch-pad.description = コアを発射することなく、沢山のアイテムを発射します。まだ未完成だよ。 block.launch-pad-large.name = 大型発射台 team.blue.name = ブルー team.red.name = レッド @@ -803,20 +825,14 @@ team.none.name = グレー team.green.name = グリーン team.purple.name = パープル unit.spirit.name = スピリットドローン -unit.spirit.description = 手軽なドローンユニットです。最初からコアに出現します。鉱石の採掘やブロックの修理を自動で行います。 +unit.draug.name = Draug Miner Drone unit.phantom.name = ファントムドローン -unit.phantom.description = 高度な小型ドローンユニットです。自動で鉱石の採掘やブロックの修理をします。スピリットドローンを遥かに凌ぐ性能を誇ります。 unit.dagger.name = ダガー -unit.dagger.description = 基本的な地上ユニットです。集団になると便利に使えます。 unit.crawler.name = クローラー unit.titan.name = タイタン -unit.titan.description = 高度な武装地上ユニットです。空と地上の両方の敵に攻撃を行います。 unit.ghoul.name = グール爆撃機 -unit.ghoul.description = 重爆撃機です。 unit.wraith.name = レースファイター -unit.wraith.description = 高速で突撃攻撃が可能な迎撃ユニットです。 unit.fortress.name = フォートレス -unit.fortress.description = 砲撃型の地上ユニットです。 unit.revenant.name = レベナント unit.eruptor.name = ユーロター unit.chaos-array.name = ケアスアレー @@ -844,8 +860,74 @@ tutorial.daggerfactory = [accent]ダガーユニット製造機[]を作りまし tutorial.router = 生産機には電力が必要です。\nコンベアーから資源を分けるためにルーターを作りましょう。 tutorial.dagger = 電源ノードを生産機に接続しましょう。\n要件が揃うと、ユニットを作り始めます。\n\n必要に応じて、ドリルや発電機、コンベアーを増やしましょう。 tutorial.battle = [LIGHT_GRAY]敵[]のコアが見つかりました。\nユニットやダガー機で敵の基地を破壊しましょう。 +item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。 +item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。 +item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。 +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +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 = 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 = 燃焼させたり、爆発させたり、冷却水としても使用される液体です。 +liquid.cryofluid.description = 冷却に特化した液体です。 +mech.alpha-mech.description = 一般的な機体です。十分な速度と攻撃性能です。 +mech.delta-mech.description = 突撃攻撃が可能な素早く軽量化された機体です。建造物にはダメージをほとんど与えられませんが、電撃によって多くの敵に攻撃することができます。 +mech.tau-mech.description = 支援型機体です。攻撃を受けた味方のブロックを修復します。修復能力によって周辺の味方を修復します。 +mech.omega-mech.description = 最前線での攻撃向けに作られた大型機体です。特殊装甲によってダメージの90%を防ぐことができます。 +mech.dart-ship.description = 一般的な機体です。軽く高速で使いやすいですが、攻撃能力はほとんどなく採掘速度も遅いのが難点です。 +mech.javelin-ship.description = 突撃攻撃型の機体です。最初の速度は遅いですが、敵基地が近づくと飛行能力が飛躍的に高まり、電撃やミサイルで大きなダメージを与えることができます。 +mech.trident-ship.description = 強力な爆撃機です。強固な装甲を有しています。 +mech.glaive-ship.description = 重武装された大型攻撃機です。焼夷弾が装備され、機体の中でも優れた加速と最高速度を有しています。 +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = 手軽なドローンユニットです。最初からコアに出現します。鉱石の採掘やブロックの修理を自動で行います。 +unit.phantom.description = 高度な小型ドローンユニットです。自動で鉱石の採掘やブロックの修理をします。スピリットドローンを遥かに凌ぐ性能を誇ります。 +unit.dagger.description = 基本的な地上ユニットです。集団になると便利に使えます。 +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = 高度な武装地上ユニットです。空と地上の両方の敵に攻撃を行います。 +unit.fortress.description = 砲撃型の地上ユニットです。 +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = 高速で突撃攻撃が可能な迎撃ユニットです。 +unit.ghoul.description = 重爆撃機です。 +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = 石炭と砂からシリコンを製造します。 +block.kiln.description = 砂と鉛を溶かしてメタガラスを生成します。少量の電力が必要です。 +block.plastanium-compressor.description = オイルとチタンからプラスタニウムを製造します。 +block.phase-weaver.description = 放射性トリウムと多量の砂からフェーズファイバーを製造します。 +block.alloy-smelter.description = チタンや鉛、シリコン、銅からサージ合金を製造します。 +block.cryofluidmixer.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 = Solidifes oil into chunks of coal. +block.incinerator.description = 不要なアイテムや液体を焼却します。 +block.power-void.description = 入力されたすべての電力を破棄します。サンドボックスのみ。 +block.power-source.description = 無限に電力を出力します。サンドボックスのみ。 +block.item-source.description = アイテムを無限に搬出します。サンドボックスのみ。 +block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスのみ。 +block.liquid-source.description = 液体を無限に搬出します。サンドボックスのみ。 block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに有用です。 +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.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。 block.thorium-wall-large.description = 強化された大型防壁ブロックです。\n敵からの保護により強固です。 block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。 @@ -854,54 +936,45 @@ block.surge-wall.description = 最も硬い防壁ブロックです。\nたま block.surge-wall-large.description = 最も硬い大型防壁ブロックです。\nたまに攻撃されると敵に電撃を与えます。 block.door.description = 小さなドアブロックです。タップすることで開閉することができます。\nただし、ドアが開いている場合、弾や敵も通過できます。 block.door-large.description = 大型のドアブロックです。タップすることで開閉することができます。\nただし、ドアが開いている場合、弾や敵も通過できます。 +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 = 定期的に周辺のブロックを修復します。 block.overdrive-projector.description = ドリルやコンベアなど、近くの施設の効率を向上させます。 block.force-projector.description = 周囲に六角形の力場を作り出し、内部の建造物やユニットなどを守ります。 block.shock-mine.description = 踏んだ敵にダメージを与えます。敵に見えることはありません。 -block.duo.description = 小さく安価なターレットです。 -block.scatter.description = 中規模の対空型ターレットです。敵に鉛またはスクラップの塊を分散するように発射させます。 -block.arc.description = 小型の電撃型ターレットです。敵に向かってランダムな半円状に電撃を放ちます。 -block.hail.description = 小型の砲撃型ターレットです。 -block.lancer.description = チャージビームを放つ中型のターレットです。 -block.wave.description = バブルの連射攻撃をする中型のターレットです。 -block.salvo.description = 一斉に攻撃を行う中型のターレットです。 -block.swarmer.description = バーストミサイルで攻撃する中型ターレットです。 -block.ripple.description = 同時に複数ショットを発射する大型ターレットです。 -block.cyclone.description = 大型の連射型ターレットです。 -block.fuse.description = 短距離攻撃が得意な大型のターレットです。 -block.spectre.description = 一度に2発の強力な弾を放つ大型のターレットです。 -block.meltdown.description = 強力な長距離攻撃が可能な大型のターレットです。 block.conveyor.description = 一般的なアイテム輸送ブロックです。アイテムを前方に移動し、自動的にターレットや機械などに搬入します。回転させることができます。 block.titanium-conveyor.description = 改良されたアイテム輸送ブロックです。通常のコンベアーよりも速くアイテムを輸送します。 -block.phase-conveyor.description = 改良されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。 block.junction.description = 十字に交差したコンベアーをそれぞれ前方に搬出します。コンベアーで複雑な構造を組み立てるときに便利です。 +block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所にアイテムを輸送することができます。 +block.phase-conveyor.description = 改良されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。 +block.sorter.description = アイテムを分別して搬出します。設定したアイテムは通過させます。他のアイテムが搬入されると側面にアイテムを搬出します。 +block.router.description = 搬入したアイテムをほかの3方向に均等に搬出します。一つの資源から複数に分ける際などに使われます。 +block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向に均等に分けて搬出します。 +block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合に左右にアイテムを搬出します。 block.mass-driver.description = 長距離の輸送が可能な上位アイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。 -block.silicon-smelter.description = 石炭と砂からシリコンを製造します。 -block.plastanium-compressor.description = オイルとチタンからプラスタニウムを製造します。 -block.phase-weaver.description = 放射性トリウムと多量の砂からフェーズファイバーを製造します。 -block.alloy-smelter.description = チタンや鉛、シリコン、銅からサージ合金を製造します。 -block.pulverizer.description = 石を砕いて砂にします。自然の砂がない場合に有用です。 -block.pyratite-mixer.description = 石炭、鉛、砂から燃えやすいピラタイトを製造します。 -block.blast-mixer.description = 可燃性のピラタイトを石油を使用してさらに爆発性化合物にします。 -block.cryofluidmixer.description = 水とチタンから冷却に効率的な冷却水を製造します。 -block.melter.description = 石を熱で溶かして溶岩を生成します。 -block.incinerator.description = 不要なアイテムや液体を焼却します。 -block.spore-press.description = 胞子ポッドを石油に圧縮します。 -block.separator.description = 石を水圧で砕き、石に含まれる様々な鉱石を回収します。 +block.mechanical-pump.description = 安価なポンプです。搬出速度は遅いですが、電力を使わず使用できます。 +block.rotary-pump.description = 高度なポンプです。電力を使用して2倍速く搬出することができます。 +block.thermal-pump.description = 最高性能のポンプです。 +block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。 +block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速く、たくさんのアイテムを輸送することができます。 +block.liquid-router.description = 搬入したアイテムをほかの3方向に均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。 +block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。 +block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。 +block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。 +block.phase-conduit.description = 高度な液体輸送ブロックです。電力を使用して、液体を他の離れたフェーズパイプに転送することができます。 block.power-node.description = 電力ノード間で電力の送電を行います。最大で4つの電力源やノードなどに接続できます。隣接するブロックから電力の送電や供給を行います。 block.power-node-large.description = 巨大な電力ノードです。最大で6つの電力源やノードに接続できます。 +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = 余分な電力の充電して、貯めておくことができます。必要があれば、溜まった電力を供給します。 block.battery-large.description = 通常のバッテリーよりもたくさんの電力を溜めておくことができます。 block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。 -block.turbine-generator.description = 水を使って火力発電機より効率的に発電します。 block.thermal-generator.description = 溶岩から大量の電力を発電します。 +block.turbine-generator.description = 水を使って火力発電機より効率的に発電します。 +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。 block.solar-panel.description = 太陽光から少量の電力を発電します。 block.solar-panel-large.description = 高価な建設費と引き換えに、通常のソーラーパネルより大量の電力を発電することができます。 block.thorium-reactor.description = 高い放射性を持ったトリウムから大量の電力を発電します。これには一定の冷却が必要です。冷却が不十分な場合、大きな爆発が発生します。 -block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。 -block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。 -block.container.description = 各種類のアイテムを少量ずつ保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。 [LIGHT_GRAY]搬出機[]を使って、コンテナーからアイテムを搬出できます。 -block.vault.description = 各種類のアイテムを大量に保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。[LIGHT_GRAY]搬出機[]を使って、ボールトからアイテムを搬出できます。 +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 = 安価なドリルです。採掘可能な鉱脈に設置すると、アイテムを採掘して搬出します。 block.pneumatic-drill.description = より速く採掘できるように改良されたドリルです。また、より硬い鉱石も採掘することができます。 block.laser-drill.description = 電力を使用したレーザー技術でより速く採掘することができます。また、放射性のトリウムを回収することができます。 @@ -909,39 +982,43 @@ block.blast-drill.description = 上位のドリルです。大量の電力が必 block.water-extractor.description = 地面から水を汲み上げます。近くに湖がない場合に有用です。 block.cultivator.description = 胞子の小さな集まりを工業用ポッドに培養します。 block.oil-extractor.description = 大量の電力を使用して、砂から石油を回収します。近くに油田がない場合に有用です。 -block.trident-ship-pad.description = 機体を重装備の爆撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.javelin-ship-pad.description = 機体を高速で強力な電撃砲を搭載した迎撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.glaive-ship-pad.description = 機体を重装備の大型攻撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.tau-mech-pad.description = 機体を味方の建造物やユニットの修復が可能な支援型機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.delta-mech-pad.description = 機体を高速で突撃攻撃に向いた軽装備の機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 -block.omega-mech-pad.description = 機体を最前線での戦闘に向いた重装備の機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 +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 = 各種類のアイテムを大量に保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。[LIGHT_GRAY]搬出機[]を使って、ボールトからアイテムを搬出できます。 +block.container.description = 各種類のアイテムを少量ずつ保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。 [LIGHT_GRAY]搬出機[]を使って、コンテナーからアイテムを搬出できます。 +block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。 +block.launch-pad.description = コアを発射することなく、沢山のアイテムを発射します。まだ未完成だよ。 +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = 小さく安価なターレットです。 +block.scatter.description = 中規模の対空型ターレットです。敵に鉛またはスクラップの塊を分散するように発射させます。 +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +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 = 一度に2発の強力な弾を放つ大型のターレットです。 +block.meltdown.description = 強力な長距離攻撃が可能な大型のターレットです。 +block.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = 鉱石の採掘やブロックの修復を行う小型のドローンユニットのスピリットを製造します。 block.phantom-factory.description = スピリットドローンの性能を遥かに凌ぐ上位のドローンユニットのファントムドローンを製造します。 block.wraith-factory.description = 高速で突撃攻撃が可能な迎撃ユニットのレースファイターを製造します。 block.ghoul-factory.description = 大型爆撃機のグールを製造します。 +block.revenant-factory.description = 大型のレーザー航空ユニットのレベナントを製造します。 block.dagger-factory.description = 基本的な地上ユニットのダガーを製造します。 +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = 高度な武装地上ユニットのタイタンを製造します。 block.fortress-factory.description = 大型の砲撃地上ユニットのフォートレスを製造します。 -block.revenant-factory.description = 大型のレーザー航空ユニットのレベナントを製造します。 block.repair-point.description = 近くの負傷したユニットを修復します。 -block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。 -block.pulse-conduit.description = 高度な液体輸送ブロックです。通常のパイプより速く、たくさんのアイテムを輸送することができます。 -block.phase-conduit.description = 高度な液体輸送ブロックです。電力を使用して、液体を他の離れたフェーズパイプに転送することができます。 -block.liquid-router.description = 搬入したアイテムをほかの3方向に均等に搬出します。液体の漏れを防ぐことができます。一つの資源から複数に分ける際などに使われます。 -block.liquid-tank.description = 大量の液体を保管しておくことができます。需要が不安定な製造設備や重要な施設の冷却水の予備などとして使用されます。 -block.liquid-junction.description = パイプを他のパイプと交差できるようにします。それぞれ搬入した液体を前方に搬出します。パイプで複雑な構造を組み立てるときなどに使われます。 -block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に液体を輸送することができます。 -block.mechanical-pump.description = 安価なポンプです。搬出速度は遅いですが、電力を使わず使用できます。 -block.rotary-pump.description = 高度なポンプです。電力を使用して2倍速く搬出することができます。 -block.thermal-pump.description = 最高性能のポンプです。 -block.router.description = 搬入したアイテムをほかの3方向に均等に搬出します。一つの資源から複数に分ける際などに使われます。 -block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向に均等に分けて搬出します。 -block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所にアイテムを輸送することができます。 -block.item-source.description = アイテムを無限に搬出します。サンドボックスのみ。 -block.liquid-source.description = 液体を無限に搬出します。サンドボックスのみ。 -block.item-void.description = 電力を必要とせずにアイテムを廃棄します。サンドボックスのみ。 -block.power-source.description = 無限に電力を出力します。サンドボックスのみ。 -block.power-void.description = 入力されたすべての電力を破棄します。サンドボックスのみ。 -liquid.water.description = 機械の冷却や廃棄物の処理など幅広く使われている液体です。 -liquid.oil.description = 燃焼させたり、爆発させたり、冷却水としても使用される液体です。 -liquid.cryofluid.description = 冷却に特化した液体です。 +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = 機体を高速で突撃攻撃に向いた軽装備の機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 +block.tau-mech-pad.description = 機体を味方の建造物やユニットの修復が可能な支援型機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 +block.omega-mech-pad.description = 機体を最前線での戦闘に向いた重装備の機体に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 +block.javelin-ship-pad.description = 機体を高速で強力な電撃砲を搭載した迎撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 +block.trident-ship-pad.description = 機体を重装備の爆撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 +block.glaive-ship-pad.description = 機体を重装備の大型攻撃機に乗り換えます。\n整備台に乗ってダブルタップすることで使用することができます。 diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 622824b7bb..1595564cec 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -4,6 +4,7 @@ contributors = 번역 및 기여자들 discord = Mindustry Discord 에 참여 해 보세요! link.discord.description = 공식 Mindustry Discord 채팅방 link.github.description = 게임 소스코드 +link.changelog.description = 새로 추가된 것들 link.dev-builds.description = 불안정한 개발 빌드들 link.trello.description = 다음 출시될 기능들을 게시한 공식 Trello 보드 link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트 @@ -15,6 +16,7 @@ screenshot.invalid = 맵이 너무 커서 스크린샷을 찍을 메모리가 gameover = 게임 오버 gameover.pvp = [accent]{0}[] 팀이 승리했습니다! highscore = [accent]최고점수 달성! + stat.wave = 웨이브 성공:[accent]{0} stat.enemiesDestroyed = 파괴한 적 수:[accent]{0} stat.built = 건설한 건물 수:[accent]{0} @@ -22,22 +24,24 @@ stat.destroyed = 파괴된 건물 수:[accent]{0} stat.deconstructed = 파괴한 건물 수:[accent]{0} stat.delivered = 획득한 자원: stat.rank = 최종 기록: [accent]{0} + placeline = 블록을 선택하셨습니다.\n][accent]몇초간 설치 시작지점을 누르고[] 원하는 방향을 향해 드래그 하면 [accent]일렬로[] 설치할 수 있습니다.\n한번 해 보세요. removearea = 블록 제거모드를 선택하셨습니다.\n[accent]몇초간 제거 시작지점을 누르고[] 원하는 구역 끝을 향해 드래그 하면 [accent]직사각형[] 안에 있는 모든 건물을 제거할 수 있습니다.\n한번 해 보세요. -launcheditems = [accent]출격 아이템 + +launcheditems = [accent]창고 map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?\n level.highscore = 최고 점수: [accent]{0} level.select = 맵 선택 level.mode = 게임 모드 : showagain = 다음 세션에서 이 메세지를 표시하지 않습니다 coreattack = < 코어가 공격받고 있습니다! > -nearpoint = [[ [scarlet]드롭 지점에서 나가세요[] ]\n적 스폰시 건물 및 유닛 파괴 -database = 코어 데이터베이스 +nearpoint = [[ [scarlet]적 생성 구역에서 나가세요[] ]\n적 생성시 구역 내 건물 및 유닛 파괴 +database = 코어 기록보관소 savegame = 게임 저장 loadgame = 게임 불러오기 -joingame = 멀티플레이 +joingame = 서버 접속 addplayers = 플레이어 추가/제거 -customgame = 커스텀 게임 +customgame = 사용자 정의 게임 newgame = 새 게임 none = <없음> minimap = 미니맵 @@ -48,11 +52,11 @@ continue = 계속하기 maps.none = [LIGHT_GRAY]맵을 찾을 수 없습니다! about.button = 정보 name = 이름 : -noname = 먼저 [accent] 플레이어 이름[] 을 설정하세요. +noname = 먼저 [accent] 유저 이름[] 을 설정하세요. filename = 파일 이름 : -unlocked = 새 블록 잠금 해제됨 +unlocked = 새 건물 잠금 해제됨 completed = [accent]연구됨 -techtree = 기술 트리 +techtree = 연구 기록 research.list = [LIGHT_GRAY]연구: research = 연구 researched = [LIGHT_GRAY]{0}연구됨. @@ -61,16 +65,16 @@ players.single = 현재 {0}명만 있음. server.closing = [accent]서버 닫는중... server.kicked.kick = 서버에서 추방되었습니다! server.kicked.serverClose = 서버 종료됨. -server.kicked.clientOutdated = 오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요! +server.kicked.clientOutdated = 오래된 버전의 게임입니다! 게임을 업데이트 하세요! server.kicked.serverOutdated = 오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요! server.kicked.banned = 서버 규칙 위반으로 인해, 이제 당신은 영원히 이 서버를 플레이 하실 수 없습니다. server.kicked.recentKick = 방금 추방처리 되었습니다.\n잠시 기다린 후에 접속 해 주세요. server.kicked.nameInUse = 이 닉네임이 이미 서버에서 사용중입니다. -server.kicked.nameEmpty = 닉네임에는 반드시 영어 또는 숫자가 있어야 합니다. +server.kicked.nameEmpty = 닉네임에는 반드시 알파벳 또는 숫자가 있어야 합니다. server.kicked.idInUse = 이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다. server.kicked.customClient = 이 서버는 직접 빌드한 버전을 지원하지 않습니다. 공식 버전을 사용하세요. -server.kicked.gameover = 게임 오버! -host.info = [accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 포트를 사용합니다.\n[LIGHT_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 해야 합니다.\n\n[LIGHT_GRAY]참고: LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요. +server.kicked.gameover = 코어가 파괴되었습니다... +host.info = [accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 포트를 사용합니다.\n[LIGHT_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 하시거나 Vpn을 사용하셔야 합니다.\n\n[LIGHT_GRAY]참고: LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요. join.info = 여기서 [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원됩니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속할려면 서버장에게 IP를 요청해야 합니다. hostserver = 서버 열기 hostserver.mobile = 서버\n열기 @@ -85,7 +89,7 @@ trace = 플레이어 정보 보기 trace.playername = 이름: [accent]{0} trace.ip = IP: [accent]{0}{0} trace.id = 고유 ID: [accent]{0} -trace.mobile = 모바일 클라이언트: [accent]{0} +trace.mobile = 모바일 접속 유무: [accent]{0} trace.modclient = 수정된 클라이언트: [accent]{0} invalidid = 잘못된 클라이언트 ID 입니다! 버그 보고서를 제출 해 주세요. server.bans = 차단된 유저 @@ -94,12 +98,11 @@ server.admins = 관리자 server.admins.none = 관리자가 없습니다! server.add = 서버 추가 server.delete = 이 서버를 삭제 하시겠습니까? -server.hostname = 호스트: {0} server.edit = 서버 수정 server.outdated = [crimson]서버 버전이 낮습니다![] server.outdated.client = [crimson]클라이언트 버전이 낮습니다![] server.version = [lightgray]서버 버전: {0} {1} -server.custombuild = [yellow]커스텀 서버 +server.custombuild = [yellow]사용자 정의 서버 confirmban = 이 플레이어를 차단하시겠습니까? confirmkick = 정말로 이 플레이어를 추방시키겠습니까? confirmunban = 이 플레이어를 차단해제 하시겠습니까? @@ -149,19 +152,12 @@ confirm = 확인 delete = 삭제 ok = OK open = 열기 -customize = 커스텀마이징 +customize = 맞춤설정 cancel = 취소 openlink = 링크 열기 copylink = 링크 복사 back = 뒤로가기 quit.confirm = 정말로 종료하시겠습니까? -changelog.title = 변경사항 -changelog.loading = 변경사항 가져오는중... -changelog.error.android = [accent]게임 변경사항은 가끔 Android 4.4 이하에서 작동하지 않습니다. 이것은 내부 Android 버그 때문입니다. -changelog.error.ios = [accent]현재 iOS에서는 변경 사항을 지원하지 않습니다. -changelog.error = [scarlet]게임 변경사항을 가져오는 중 오류가 발생했습니다!\n인터넷 연결을 확인하십시오. -changelog.current = [yellow][[현재 버전] -changelog.latest = [accent][[최신 버전] loading = [accent]불러오는중... saving = [accent]저장중... wave = [accent]웨이브 {0} @@ -174,13 +170,13 @@ wave.enemy = [LIGHT_GRAY]{0} 마리 남음 loadimage = 사진 불러오기 saveimage = 사진 저장 unknown = 알 수 없음 -custom = 커스텀 +custom = 사용자 정의 builtin = 기본맵 map.delete.confirm = 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! map.random = [accent]랜덤 맵 -map.nospawn = 이 맵에 플레이어가 스폰 할 코어가 없습니다! 맵 편집기에서 [ROYAL]파란색[]코어를 맵에 추가하세요. -map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [SCARLET]파란색 팀이 아닌[] 코어를 추가하세요. -map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적의 코어가 없습니다! 에디터에서 [SCARLET] 빨간팀[] 코어를 맵에 추가하세요. +map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 맵 편집기에서 [ROYAL]노랑색 팀[]코어를 맵에 추가하세요. +map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [ROYAL]파란색 팀이 아닌[] 코어를 추가하세요. +map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적의 코어가 없습니다! 에디터에서 [ROYAL] 빨강색 팀[] 코어를 맵에 추가하세요. map.invalid = 파일이 잘못되었거나 손상되어 맵을 열 수 없습니다. editor.brush = 브러쉬 editor.openin = 편집기 열기 @@ -191,24 +187,25 @@ editor.author = 만든이: editor.description = 설명: editor.waves = 웨이브: editor.rules = 규칙: +editor.generation = 맵 생성 설정: editor.ingame = 인게임 편집 waves.title = 웨이브 waves.remove = 삭제 -waves.never = <절대> +waves.never = 여기까지 유닛생성 waves.every = 매 waves.waves = 웨이브마다 -waves.perspawn = 스폰. +waves.perspawn = 생성 waves.to = 부터 -waves.boss = 이 몹은 보스임. +waves.boss = 이 유닛을 보스로 설정 waves.preview = 미리보기 -waves.edit = 편집... +waves.edit = 편집 waves.copy = 클립보드로 복사 waves.load = 클립보드에서 불러오기 waves.invalid = 클립보드의 잘못된 웨이브 데이터 waves.copied = 웨이브 복사됨 wave.none = 적이 설정되지 않음.\n빈 웨이브 설정값은 자동으로 기본 웨이브 설정값으로 바뀝니다. editor.default = [LIGHT_GRAY]<기본값> -edit = 편집... +edit = 편집 editor.name = 이름: editor.spawn = 유닛 생성 editor.removeunit = 유닛 삭제 @@ -228,7 +225,7 @@ editor.resize = 맵 크기조정 editor.loadmap = 맵 불러오기 editor.savemap = 맵 저장 editor.saved = 저장됨! -editor.save.noname = 지도에 이름이 없습니다! 메뉴 -> '맵 정보' 에서 설정하세요. +editor.save.noname = 맵에 이름이 없습니다! 메뉴 -> '맵 정보' 에서 설정하세요. editor.save.overwrite = 이 맵의 이름은 기존에 있던 맵을 덮어씁니다! '맵 정보' 메뉴에서 다른 이름을 선택하세요. editor.import.exists = [scarlet]맵을 불러올 수 없음: [] 기존에 있던 '{0}' 맵이 이미 존재합니다! editor.import = 가져오기 @@ -251,6 +248,7 @@ editor.mapname = 맵 이름: editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다. editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까? editor.selectmap = 불러올 맵 선택: + toolmode.replace = 재배치 toolmode.replace.description = 블록을 배치합니다. toolmode.replaceall = 모두 재배치 @@ -265,32 +263,44 @@ toolmode.fillteams = 팀 채우기 toolmode.fillteams.description = 블록 대신 팀 건물로 채웁니다. toolmode.drawteams = 팀 그리기 toolmode.drawteams.description = 블록 대신 팀 건물을 배치합니다. + filters.empty = [LIGHT_GRAY]필터가 없습니다!! 아래 버튼을 눌러 추가하세요. filter.distort = 왜곡 -filter.noise = 노이즈 +filter.noise = 맵 전체에 타일 혹은 블럭 뿌리기 +filter.median = 중앙값 +filter.oremedian = 자원 중앙값 +filter.blend = 벽 주위에 타일 설치 +filter.defaultores = 기본 자원값 추가 filter.ore = 자원 -filter.rivernoise = 협곡 노이즈 -filter.scatter = 뿌리기 +filter.rivernoise = 협곡 +filter.mirror = 반사형 맵 설정 +filter.clear = 블럭 전부 지우기 +filter.option.ignore = 무시하는타일 +filter.scatter = 타일에 타일혹은 블럭 뿌리기 filter.terrain = 지형 filter.option.scale = 스케일 -filter.option.chance = 기회 +filter.option.chance = 배치 횟수 filter.option.mag = 규모 filter.option.threshold = 한계점 filter.option.circle-scale = 둥근 크기 filter.option.octaves = 옥타보스 -filter.option.falloff = 절벽 +filter.option.falloff = 경사 +filter.option.angle = 각도 filter.option.block = 블록 filter.option.floor = 바닥 +filter.option.flooronto = 대상이 되는 바닥 filter.option.wall = 벽 filter.option.ore = 자원 filter.option.floor2 = 2번째 바닥 filter.option.threshold2 = 2번째 한계점 filter.option.radius = 반경 filter.option.percentile = 백분위수 + width = 넓이: height = 높이: menu = 메뉴 play = 플레이 +campaign = 캠페인 load = 불러오기 save = 저장 fps = FPS: {0} @@ -302,8 +312,9 @@ tutorial = 게임 방법 editor = 편집기 mapeditor = 맵 편집기 donate = 기부 + abandon = 포기 -abandon.text = 이 구역과 모든 자원이 적에게 빼앗길 것입니다. +abandon.text = 이 구역의 모든 자원이 적에게 빼앗길 것입니다. locked = 잠김 complete = [LIGHT_GRAY]완료: zone.requirement = 지역 {1} 에서 웨이브 {0} 달성 @@ -314,15 +325,19 @@ launch.title = 출격 성공 launch.next = [LIGHT_GRAY]다음 출격기회는 {0} 단계에서 나타납니다. launch.unable = [scarlet]출격할 수 없습니다.[] {0}마리 남음. launch.confirm = 출격하게 되면 모든 자원이 코어로 들어갑니다.\n또한 성공하기 전까지 기지로 돌아갈 수 없습니다. -uncover = 털어넣기 -configure = 로드아웃 설정 -configure.locked = {0} 단계에서 로드아웃을 설정할 수 있음. -zone.unlocked = [LIGHT_GRAY] 잠금 해제됨. -zone.requirement.complete = 웨이브 {0} 달성:\n{1} 지역 요구사항이 충족됨. -zone.config.complete = 웨이브 {0} 달성:\n로드아웃 설정 잠금 해제됨. -zone.resources = 자원 감지됨: +uncover = 구역 개방 +configure = 코어 시작자원 설정 +configure.locked = {0} 단계에서 시작자원 설정 잠금이 해제됩니다. +zone.unlocked = [LIGHT_GRAY] 잠금 해제되었습니다! +zone.requirement.complete = 웨이브 {0} 달성:\n{1} 지역 요구사항이 충족되었습니다! +zone.config.complete = 웨이브 {0} 달성:\n시작자원 설정 기능이 해금되었습니다! +zone.resources = 자원이 감지되었습니다 : +zone.objective = [lightgray]게임 모드: [accent]{0} +zone.objective.survival = 생존 +zone.objective.attack = 적 코어 파괴 add = 추가... boss.health = 보스 체력 + connectfail = [crimson]{0}[accent] 서버에 연결하지 못했습니다.[] error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요? error.invalidaddress = 잘못된 주소입니다. @@ -332,21 +347,42 @@ error.alreadyconnected = 이미 접속중입니다. error.mapnotfound = 맵 파일을 찾을 수 없습니다! error.io = 네트워크 I/O 오류. error.any = 알 수 없는 네트워크 오류. -zone.groundZero.name = 그라운드 제로 +error.bloom = 블룸 그래픽 효과를 적용하지 못했습니다.\n당신의 기기가 이 기능을 지원하지 않는 것일 수도 있습니다. + +zone.groundZero.name = 전초기지 zone.desertWastes.name = 쓰레기 사막 -zone.craters.name = 분화구 +zone.craters.name = 크레이터 zone.frozenForest.name = 얼어붙은 숲 -zone.ruinousShores.name = 파멸의 기슭 +zone.ruinousShores.name = 파괴된 해안가 zone.stainedMountains.name = 얼룩진 산맥 -zone.desolateRift.name = 황량한 강 +zone.desolateRift.name = 황폐한 협곡 zone.nuclearComplex.name = 핵 생산 단지 -zone.overgrowth.name = 과성장 지역 -zone.tarFields.name = 타르 지역 -zone.saltFlats.name = 갯벌 +zone.overgrowth.name = 과성장 지대 +zone.tarFields.name = 타르 벌판 +zone.saltFlats.name = 소금 사막 +zone.impact0078.name = Impact 0078 +zone.crags.name = 협곡 +zone.fungalPass.name = 포자 지대 + +zone.groundZero.description = 이 장소는 다시 시작하기에 최적의 환경을 지닌 장소입니다. 적은 수준의 위협이 있으며 자원의 양은 적습니다.\n가능한 한 많은 양의 구리와 납을 수집하십시오.\n출격합시다! +zone.frozenForest.description = 이 지역도 산과 가까운 지역입니다 포자들이 흩뿌려져 있으며 극한의 추위도 포자룰 막을 수 있을거 같지 않습니다.\n전력을 통해서 모험을 시작하십시오 화력 발전소를 짓고 수리드론을 사용하는 법을 배우십시오. +zone.desertWastes.description = 이 황무지는 끝을 알수 없을 정도로 광활합니다 그리고 십자가 형태의 버려진 구조물이 존재합니다.\n석탄이 존재하며 이를 화력발전에 쓰거나 흑연정제에 쓰십시오.\n\n[LOYAL]이 지역에서의 착륙장소는 확실하지 않습니다. +zone.saltFlats.description = 이 소금 사막은 매우 척박하여 자원이 거의 없습니다.\n하지만 자원이 희소한 이곳에서도 적들의 요새가 발견되었습니다.그들을 사막의 모래로 만들어버리십시오. +zone.craters.description = 물이 가득한 이 크레이터에는 옛 전쟁의 유물들이 쌓여있습니다.\n이곳을 다시 점령해 강화유리를 제작하고 물을 끌어올려 포탑과 드릴에 공급하여 더 좋은 효율로 방어선을 강화하십시오. +zone.ruinousShores.description = 이 지역은 과거 해안방어기지로 사용되었습니다.\n그러나 지금은 기본구조물만 남아있으니 이 지역을 어서 신속히 수리하여 외부로 세력을 확장한뒤 잃어버린 기술을 다시 회수하십시오. +zone.stainedMountains.description = 더 안쪽에는 포자에 오염된 산맥이 있지만, 이 곳은 포자에 오염되지 않았습니다.\n이 지역에서 티타늄을 채굴하고 이 것을 어떻게 사용하는지 배우십시오.\n\n적들은 이 곳에서 더 강력합니다. 더 강한 유닛들이 나올 때까지 시간을 낭비하지 마십시오. +zone.overgrowth.description = 이 곳은 포자들의 근원과 가까이에 있는 과성장 지대입니다. 적이 이 곳에 전초기지를 설립했습니다. 디거를 생산해 적의 코어를 박살내 우리가 잃어버린 것들을 되돌려받으십시오! +zone.tarFields.description = 산지와 사막 사이에 위치한 석유 생산지의 외곽 지역이며, 사용 가능한 타르가 매장되어 있는 희귀한 지역 중 하나입니다. 버려진 지역이기는 하나 이곳에는 위험한 적군들이 있습니다. 그들을 과소평가하지 마십시오.\n\n[lightgray]석유 생산기술을 익히는 것이 도움이 될 것입니다. +zone.desolateRift.description = 극도로 위험한 지역입니다. 자원은 풍부하지만 사용 가능한 공간은 거의 없습니다. 코어 파괴의 위험성이 높으니 가능한 빨리 떠나십시오. 또한 적의 공격 딜레이가 길다고 안심하지 마십시오. +zone.nuclearComplex.description = 과거 토륨의 생산, 연구와 처리를 위해 운영되었던 시설입니다. 금은 축소되어 폐허로 전락했으며, 다수의 적이 배치되어 있는 지역입니다. 그들은 끊임없이 당신을 공격할 것입니다.\n\n[lightgray]토륨의 다양한 사용법을 연구하고 익히십시오. +zone.fungalPass.description = 고산지대과 포자지대 사이의 지역입니다. 소규모의 적 정찰기지가 있으니 디거와 크롤러를 이용해 적의 코어를 파괴하십시오. +zone.impact0078.description = [ROYAL]죄송합니다. 아직 설명이 준비되지 않았습니다. +zone.crags.description = [ROYAL]죄송합니다. 아직 설명이 준비되지 않았습니다. + settings.language = 언어 settings.reset = 설정 초기화 settings.rebind = 키 재설정 -settings.controls = 컨트롤 +settings.controls = 조작 settings.game = 게임 settings.sound = 소리 settings.graphics = 그래픽 @@ -361,12 +397,14 @@ no = 아니오 info.title = [accent]정보 error.title = [crimson]오류가 발생했습니다. error.crashtitle = 오류가 발생했습니다. +attackpvponly = [scarlet]오직 Pvp/공격 모드에서만 사용가능합니다. blocks.input = 입력 blocks.output = 출력 blocks.booster = 가속 block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = 전력 용량 blocks.powershot = 1발당 전력 소모량 +blocks.damage = Damage blocks.targetsair = 공중공격 가능 blocks.targetsground = 지상공격 가능 blocks.itemsmoved = 이동 속도 @@ -385,6 +423,7 @@ blocks.speedincrease = 속도 증가 blocks.range = 사거리 blocks.drilltier = 드릴 blocks.drillspeed = 기본 드릴 속도 +blocks.drilltierreq = 더 높은 티어의 드릴이 요구됨. blocks.boosteffect = 가속 효과 blocks.maxunits = 최대 활성유닛 blocks.health = 체력 @@ -393,28 +432,31 @@ blocks.inaccuracy = 오차각 blocks.shots = 발포 횟수 blocks.reload = 재장전 blocks.ammo = 탄약 -bar.drillspeed = Drill Speed: {0}/s -bar.efficiency = 효율성: {0}% -bar.powerbalance = 전력: {0}/s -bar.poweramount = 전력: {0} -bar.poweroutput = 전력 출력: {0} + +bar.drillspeed = 채광 속도 : {0}/s +bar.efficiency = 효율성 : {0}% +bar.powerbalance = 전력 : {0}/s +bar.poweramount = 전력 : {0} +bar.poweroutput = 전력 출력 : {0} bar.items = 아이템: {0} bar.liquid = 액체 bar.heat = 발열 bar.power = 전력 bar.progress = 건설 진행 bar.spawned = 유닛: {0}/{1} + bullet.damage = [stat]{0}[lightgray] 데미지 bullet.splashdamage = [stat]{0}[lightgray] 범위 데미지 ~[stat] {1}[lightgray] 타일 bullet.incendiary = [stat]방화 bullet.homing = [stat]유도탄 -bullet.shock = [stat]충격탄 +bullet.shock = [stat] bullet.frag = [stat]파편 bullet.knockback = [stat]{0}[lightgray] 넉백 bullet.freezing = [stat]동결 bullet.tarred = [stat]타르 -bullet.multiplier = [stat]{0}[lightgray]x 탄약 배율 +bullet.multiplier = [stat]{0}[lightgray]x 탄약 소모율 bullet.reload = [stat]{0}[lightgray]x 사격 속도 + unit.blocks = 블록 unit.powersecond = 전력/초 unit.liquidsecond = 액체/초 @@ -442,9 +484,11 @@ setting.animatedshields.name = 움직이는 보호막 setting.antialias.name = 안티 에일리어싱[LIGHT_GRAY] (재시작 필요)[] setting.indicators.name = 아군/적 인디게이터 표시 setting.autotarget.name = 자동 조준 +setting.keyboard.name = 마우스+키보드 조작 setting.fpscap.name = 최대 FPS setting.fpscap.none = 없음 setting.fpscap.text = {0}FPS +setting.uiscale.name = UI 스케일링[lightgray] (재시작 요구됨)[] setting.swapdiagonal.name = 항상 대각선 설치 setting.difficulty.training = 훈련 setting.difficulty.easy = 쉬움 @@ -471,7 +515,11 @@ setting.mutesound.name = 소리 끄기 setting.crashreport.name = 오류 보고서 보내기 setting.chatopacity.name = 채팅 투명도 setting.playerchat.name = 인게임 채팅 표시 +uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 스케일을 확인하세요.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = 조작키 설정 +keybinds.mobile = [scarlet]여기 대부분의 키들은 모바일에서 작동하지 않습니다. 기본적인 것들만 지원됩니다. category.general.name = 일반 category.view.name = 보기 category.multiplayer.name = 멀티플레이 @@ -480,8 +528,8 @@ command.retreat = 후퇴 command.patrol = 순찰 keybind.gridMode.name = 블록 선택 keybind.gridModeShift.name = 카테고리 선택 -keybind.press = 키를 누르세요... -keybind.press.axis = 축 또는 키를 누르세요... +keybind.press = 키를 누르세요. +keybind.press.axis = 축 또는 키를 누르세요. keybind.screenshot.name = 맵 스크린샷 keybind.move_x.name = 오른쪽/왼쪽 이동 keybind.move_y.name = 위 / 아래 중간 @@ -515,14 +563,15 @@ mode.sandbox.description = 무한한 자원을 가지고 자유롭게 다음 단 mode.pvp.name = PvP mode.pvp.description = 실제 플레이어와 PvP를 합니다. 맵에 적어도 2개의 다른 색상 코어가 있어야 합니다. mode.attack.name = 공격 -mode.attack.description = 적 기지를 파괴하세요. 웨이브가 없습니다. 맵에 빨간팀 코어가 있어야 플레이 가능합니다. -mode.custom = 커스텀 규칙 +mode.attack.description = 적 기지를 파괴하세요. 맵에 빨간팀 코어가 있어야 플레이 가능합니다. +mode.custom = 사용자 정의 규칙 + rules.infiniteresources = 무한 자원 rules.wavetimer = 웨이브 타이머 rules.waves = 웨이브 rules.attack = 공격 모드 -rules.enemyCheat = 무한 AI 자원 -rules.unitdrops = 유닛 드롭 +rules.enemyCheat = 무한한 적 자원 +rules.unitdrops = 유닛 처치시 자원 약탈 rules.unitbuildspeedmultiplier = 유닛 제조속도 배수 rules.unithealthmultiplier = 유닛 체력 배수 rules.playerhealthmultiplier = 플레이어 체력 배수 @@ -543,75 +592,52 @@ rules.title.resourcesbuilding = 자원 & 건축 rules.title.player = 플레이어들 rules.title.enemy = 적 rules.title.unit = 유닛 + content.item.name = 아이템 content.liquid.name = 액체 content.unit.name = 유닛 content.block.name = 블록 content.mech.name = 기체 item.copper.name = 구리 -item.copper.description = 모든 종류의 블록에서 광범위하게 사용되는 자원입니다. item.lead.name = 납 -item.lead.description = 쉽게 구할 수 있으며, 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. item.coal.name = 석탄 -item.coal.description = 흔하고 쉽게 구할 수 있는 연료. item.graphite.name = 흑연 -item.graphite.description = 탄약 및 전기 절연에 사용되는 광물질화 탄소. item.titanium.name = 티타늄 -item.titanium.description = 파이프 재료나 고급 드릴, 비행기/기체 등에서 재료로 사용되는 자원입니다. item.thorium.name = 토륨 -item.thorium.description = 건물의 재료, 터렛의 탄약 또는 핵연료로 사용되는 방사성 금속입니다. item.silicon.name = 실리콘 -item.silicon.description = 매우 유용한 반도체로, 기체를 만들거나 태양 전지판 등 전자 건물에 사용할 수 있습니다. item.plastanium.name = 플라스터늄 -item.plastanium.description = 고급 항공기 및 분열 탄약에 사용되는 가벼운 연성 재료. -item.phase-fabric.name = 위상 패브릭 -item.phase-fabric.description = 최첨단 전자 제품과 자기수리 기술에 사용되는 거의 무중력에 가까운 물질입니다. +item.phase-fabric.name = 현상 구조체 item.surge-alloy.name = 서지 합금 -item.surge-alloy.description = 독특한 전기 특성을 가진 고급 합금입니다. item.spore-pod.name = 포자 포드 -item.spore-pod.description = 석유, 폭발물 및 연료로 전환하는데 사용됩니다. item.sand.name = 모래 -item.sand.description = 고밀도 합금 제작이나 제련시 이 광물을 사용하여 소모 재료를 줄이는 등 광범위하게 사용되는 일반적인 재료입니다. -item.blast-compound.name = 폭발 화합물 -item.blast-compound.description = 터렛 및 건설의 재료로 사용되는 휘발성 폭발물.\n연료로도 사용할 수 있지만, 별로 추천하지는 않습니다. -item.pyratite.name = 피라타이트 -item.pyratite.description = 폭발성을 가진 재료로, 주로 터렛의 탄약으로 사용됩니다. -item.metaglass.name = 메타유리 -item.metaglass.description = 초강력 유리 화합물. 액체 분배 및 저장에 광범위하게 사용됩니다. -item.scrap.name = 조각 -item.scrap.description = 오래된 건물과 유닛의 남은 잔해. 미량의 많은 금속이 포함되어 있습니다. +item.blast-compound.name = 폭발물 +item.pyratite.name = 파이라타이트 +item.metaglass.name = 강화유리 +item.scrap.name = 고철 liquid.water.name = 물 liquid.slag.name = 광재 -liquid.oil.name = 석유 -liquid.cryofluid.name = 냉각유체 +liquid.oil.name = 타르 +liquid.cryofluid.name = 냉각수 mech.alpha-mech.name = 알파 mech.alpha-mech.weapon = 중무장 소총 mech.alpha-mech.ability = 회복 -mech.alpha-mech.description = 표준 기체.\n적절한 속도와 공격력을 갖추고 있습니다. mech.delta-mech.name = 델타 -mech.delta-mech.weapon = 전격 생산기 +mech.delta-mech.weapon = 전격 충전기 mech.delta-mech.ability = 충전 -mech.delta-mech.description = 빠르게 이동하는 적을 처치하기 위한 가벼운 기체.\n구조물에는 거의 피해를 주지 않지만, 전격 무기를 사용하여 많은 적군을 매우 빠르게 죽일 수 있습니다. mech.tau-mech.name = 타우 mech.tau-mech.weapon = 건물 수리총 -mech.tau-mech.ability = 유닛 치료 -mech.tau-mech.description = 지원형 기체.\n총을 발사하여 건물을 치료하고 회복 능력 사용으로 화재를 진압하거나, 반경 내 아군을 치유시킵니다. +mech.tau-mech.ability = 유닛 치료 파동 mech.omega-mech.name = 오메가 mech.omega-mech.weapon = 전방 유도미사일 mech.omega-mech.ability = 방어모드 -mech.omega-mech.description = 지상 기체 최종판이자 건물 파괴용으로 적합한 부피가 크고 튼튼한 기체.\n방어 모드는 최대 90% 의 피해를 줄일 수 있습니다. mech.dart-ship.name = 다트 mech.dart-ship.weapon = 소총 -mech.dart-ship.description = 표준 비행선.\n빠르고 가볍지만 공격력이 거의 없고 채광 속도가 느립니다. -mech.javelin-ship.name = 재블린 -mech.javelin-ship.description = 치고 빠지는 공격을 위한 비행선.\n처음에는 느리지만, 가속도가 붙어 엄청난 속도로 미사일 피해를 입힐 수 있으며, 전격 능력을 사용할 수 있습니다. +mech.javelin-ship.name = 재블린 mech.javelin-ship.weapon = 유도 미사일 mech.javelin-ship.ability = 가속 전격 생성기 mech.trident-ship.name = 삼지창 -mech.trident-ship.description = 대형 공중 폭격기.\n당연하게도 엄청 단단합니다. mech.trident-ship.weapon = 폭탄 저장고 mech.glaive-ship.name = 글레브 -mech.glaive-ship.description = 크고 잘 무장된 총을 가진 비행선.\n방화용 리피터가 장착되어 있으며, 가속도와 최대속도가 높습니다. mech.glaive-ship.weapon = 방화총 item.explosiveness = [LIGHT_GRAY]폭발성: {0} item.flammability = [LIGHT_GRAY]인화성: {0} @@ -628,16 +654,19 @@ mech.buildspeed = [LIGHT_GRAY]건설 속도: {0}% liquid.heatcapacity = [LIGHT_GRAY]발열 용량: {0} liquid.viscosity = [LIGHT_GRAY]점도: {0} liquid.temperature = [LIGHT_GRAY]온도: {0} + +block.sand-boulder.name = 사암 block.grass.name = 잔디 block.salt.name = 소금 block.saltrocks.name = 소금 바위 block.pebbles.name = 조약돌 block.tendrils.name = 덩굴 block.sandrocks.name = 모래 바위 -block.spore-pine.name = 포자 소나무 +block.spore-pine.name = 포자 덮인 소나무 block.sporerocks.name = 포자 바위 -block.rock.name = 바위 -block.snowrock.name = 눈바위 +block.rock.name = 돌 +block.snowrock.name = 눈덩이 +block.snow-pine.name = 눈 덮인 소나무 block.shale.name = 이판암 block.shale-boulder.name = 둥근 이판암 block.moss.name = 이끼 @@ -648,9 +677,8 @@ block.scrap-wall.name = 조각벽 block.scrap-wall-large.name = 큰 조각벽 block.scrap-wall-huge.name = 거대한 조각 벽 block.scrap-wall-gigantic.name = 엄청나게 큰 조각 벽 -block.thruster.name = 트릭스터 +block.thruster.name = 반동 block.kiln.name = 가마 -block.kiln.description = 모래를 녹여서 메타유리로 만듭니다. 소량의 전력이 필요합니다. block.graphite-press.name = 흑연 압축기 block.multi-press.name = 다중 압축기 block.constructing = {0} [LIGHT_GRAY](만드는중) @@ -661,16 +689,16 @@ block.core-nucleus.name = 코어-핵 block.deepwater.name = 깊은물 block.water.name = 물 block.tainted-water.name = 오염된 물 -block.darksand-tainted-water.name = 검은 모래로 오염된 물 -block.tar.name = 타르 -block.stone.name = 돌 +block.darksand-tainted-water.name = 오염된 젖은 검은 모래 +block.tar.name = 석유 +block.stone.name = 바위 block.sand.name = 모래 block.darksand.name = 검은 모래 block.ice.name = 얼음 block.snow.name = 눈 -block.craters.name = 크레이터 -block.sand-water.name = 젖은모래 -block.darksand-water.name = 검은모래물 +block.craters.name = 구덩이 +block.sand-water.name = 젖은 모래 +block.darksand-water.name = 젖은 검은모래 block.char.name = 숯 block.holostone.name = 홀로스톤 block.ice-snow.name = 얼음눈 @@ -698,18 +726,18 @@ block.ignarock.name = 얼은 바위 block.hotrock.name = 뜨거운 바위 block.magmarock.name = 마그마 바위 block.cliffs.name = 절벽 -block.copper-wall.name = 구리벽 -block.copper-wall-large.name = 큰 구리벽 +block.copper-wall.name = 구리 벽 +block.copper-wall-large.name = 대형 구리 벽 block.titanium-wall.name = 티타늄 벽 block.titanium-wall-large.name = 대형 티타늄 벽 -block.phase-wall.name = 상직물벽 -block.phase-wall-large.name = 큰 상직물벽 -block.thorium-wall.name = 토륨벽 -block.thorium-wall-large.name = 대형 토륨벽 +block.phase-wall.name = 위상 벽 +block.phase-wall-large.name = 대형 메타 벽 +block.thorium-wall.name = 토륨 벽 +block.thorium-wall-large.name = 대형 토륨 벽 block.door.name = 문 block.door-large.name = 대형문 block.duo.name = 듀오 -block.scorch.name = 스코어치 +block.scorch.name = 스코치 block.scatter.name = 스캐터 block.hail.name = 헤일 block.lancer.name = 랜서 @@ -719,17 +747,15 @@ block.junction.name = 교차기 block.router.name = 분배기 block.distributor.name = 대형 분배기 block.sorter.name = 필터 -block.sorter.description = 아이템을 넣어서 필터에 설정된 아이템일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 통과합니다. block.overflow-gate.name = 오버플로 게이트 -block.overflow-gate.description = 정면으로 가는 자원이 막히면 옆으로 출력하고, 그렇지 않으면 계속 정면으로 출력합니다. block.silicon-smelter.name = 실리콘 제련소 -block.phase-weaver.name = 상직물 합성기 +block.phase-weaver.name = 현상구조체 합성기 block.pulverizer.name = 분쇄기 block.cryofluidmixer.name = 냉각수 제조기 block.melter.name = 융해기 block.incinerator.name = 소각로 block.spore-press.name = 포자 압축기 -block.separator.name = 셉터 +block.separator.name = 원심 분리기 block.coal-centrifuge.name = 석탄 원심분리기 block.power-node.name = 전력 노드 block.power-node-large.name = 대형 전력 노드 @@ -767,25 +793,25 @@ block.salvo.name = 살보 block.ripple.name = 립플 block.phase-conveyor.name = 위상 컨베이어 block.bridge-conveyor.name = 터널 컨베이어 -block.plastanium-compressor.name = 플라스터늄 압축기 -block.pyratite-mixer.name = 피라타이트 혼합기 +block.plastanium-compressor.name = 플라스 압축기 +block.pyratite-mixer.name = 파이라타이트 혼합기 block.blast-mixer.name = 폭발물 혼합기 block.solar-panel.name = 태양 전지판 block.solar-panel-large.name = 대형 태양 전지판 block.oil-extractor.name = 석유 추출기 -block.draug-factory.name = 드라우그 광부 드론 공장 -block.spirit-factory.name = 스피릿 수리 드론 공장 -block.phantom-factory.name = 팬텀 건설 드론 공장 +block.draug-factory.name = 광부 드론 공장 +block.spirit-factory.name = 수리 드론 공장 +block.phantom-factory.name = 건설 드론 공장 block.wraith-factory.name = 유령 전투기 공장 block.ghoul-factory.name = 구울 폭격기 공장 block.dagger-factory.name = 디거 기체 공장 block.crawler-factory.name = 크롤러 기체 공장 block.titan-factory.name = 타이탄 기체 공장 block.fortress-factory.name = 포트리스 기체 공장 -block.revenant-factory.name = 레비넌트 전투기 공장 +block.revenant-factory.name = 망령 전함 공장 block.repair-point.name = 수리 지점 block.pulse-conduit.name = 퓨즈 파이프 -block.phase-conduit.name = 상직물 파이프 +block.phase-conduit.name = 위상 파이프 block.liquid-router.name = 액체 분배기 block.liquid-tank.name = 물탱크 block.liquid-junction.name = 액체 교차기 @@ -812,33 +838,27 @@ block.spectre.name = 스펙터 block.meltdown.name = 멜트다운 block.container.name = 컨테이너 block.launch-pad.name = 발사대 -block.launch-pad.description = 출격할 필요 없이 아이템을 수송시킵시다. block.launch-pad-large.name = 큰 출격 패드 -team.blue.name = 블루팀 -team.red.name = 레드팀 -team.orange.name = 오렌지팀 -team.none.name = 공기팀 -team.green.name = 그린팀 -team.purple.name = 보라색팀 -unit.spirit.name = 스피릿 수리 드론 -unit.spirit.description = 블록을 자동으로 수리합니다. -unit.phantom.name = 팬텀 건설 드론 -unit.phantom.description = 첨단 드론 유닛. 플레이어의 건설을 도와줍니다. +team.blue.name = 파랑색 팀 +team.crux.name = 빨강색 팀 +team.sharded.name = 주황색 팀 +team.orange.name = 주황색 팀 +team.derelict.name = 버려진 팀 +team.green.name = 초록색 팀 +team.purple.name = 보라색 팀 +unit.spirit.name = 정령 수리 드론 +unit.draug.name = 영혼 채광 +unit.phantom.name = 환영 건설 드론 unit.dagger.name = 디거 -unit.dagger.description = 기본 지상 유닛입니다.\n플레이어 기체처럼 드론을 소환하지는 않습니다. -unit.crawler.name = 크롤러 +unit.crawler.name = 자폭자 unit.titan.name = 타이탄 -unit.titan.description = 고급 지상 유닛입니다.\n원거리 총 대신에 근접 화염 방사기를 가지고 있으며, 지상과 공중 둘다 공격할 수 있습니다. unit.ghoul.name = 구울 폭격기 -unit.ghoul.description = 무겁고 튼튼한 지상 폭격기 입니다.\n주로 적 건물로 이동하여 엄청난 폭격을 가합니다. unit.wraith.name = 유령 전투기 -unit.wraith.description = 적 핵심 건물 및 유닛을 집중적으로 공격하는 방식을 사용하는 전투기 입니다. unit.fortress.name = 포트리스 -unit.fortress.description = 중포 지상 유닛.\n높은 공격력을 가진 총과 높은 체력을 가지고 있습니다. -unit.revenant.name = 레비넌트 -unit.eruptor.name = 이럽터 -unit.chaos-array.name = 카오스 배열 -unit.eradicator.name = 짭멸 +unit.revenant.name = 망령 전함 +unit.eruptor.name = 분화자 +unit.chaos-array.name = 혼돈 배열 +unit.eradicator.name = 박멸 unit.lich.name = 리치 unit.reaper.name = 사신 tutorial.begin = 플레이어의 주요 목표는 [LIGHT_GRAY]적군[]을 제거하는 것입니다.\n\n이 게임은 [accent]구리를 채광[]하는 것으로 시작합니다.\n이것을 하기 위해 플레이어의 중심부 근처에 있는 구리 광맥을 누르세요. @@ -862,104 +882,166 @@ tutorial.daggerfactory = 이[accent] 디거 기체 공장[]은\n\n공격하는 tutorial.router = 공장을 작동시키기 위해 자원이 필요합니다.\n컨베이어에 운반되고 있는 자원을 분할할 분배기를 만드세요. tutorial.dagger = 전력 노드를 공장에 연결하세요.\n일단 요구 사항이 충족되면 기체 생산을 시작합니다.\n\n필요에 따라 드릴 및 발전기, 컨베이어를 더 많이 만들 수 있습니다. tutorial.battle = [LIGHT_GRAY]적[]의 코어가 드러났습니다.\n당신의 부대와 디거를 사용하여 파괴하세요. -block.copper-wall.description = 싸구려 방어블록.\n처음에 몇번 웨이브에서 건물과 터렛을 보호하는 데 유용함. -block.copper-wall-large.description = 싸구려 방어블록.\n처음에 몇번 웨이브에서 건물과 터렛을 보호하는 데 유용함.\n4개를 합친 블록입니다. -block.thorium-wall.description = 강력한 방어블록.\n적 공격으로부터 좋은 보호를 할 수 있습니다. -block.thorium-wall-large.description = 강력한 방어블록.\n적 공격으로부터 좋은 보호를 할 수 있습니다.\n4개를 합친 블록입니다. -block.phase-wall.description = 토륨 벽만큼 강하지 않지만 벽을 향해 날아오는 총알이 너무 강력하지 않으면 총알을 튕겨냅니다. -block.phase-wall-large.description = 토륨 벽만큼 강하지 않지만 벽을 향해 날아오는 총알이 너무 강력하지 않으면 총알을 튕겨냅니다.\n4개를 합친 블록입니다. -block.surge-wall.description = 최강 방어블록.\n공격을 받으면 낮은 확률로 공격자에게 전격 공격을 합니다. -block.surge-wall-large.description = 최강 방어블록.\n공격을 받으면 낮은 확률로 공격자에게 전격 공격을 합니다.\n4개를 합친 블록입니다. -block.door.description = 눌러서 열고 닫을 수 있는 작은 문.\n만약 문이 열리면, 적들은 총을 쏘며 문을 통과할 수 있습니다. -block.door-large.description = 누르는 것으로 여닫을 수 있는 큰 문.\n만약 문이 열리면, 적들은 총을 쏘며 문을 통과할 수 있습니다.\n4개를 합친 블록입니다. -block.mend-projector.description = 주변 건물을 주기적으로 치료합니다. -block.overdrive-projector.description = 드릴과 컨베이어와 같은 인근 건물의 속도를 높여줍니다. -block.force-projector.description = 총알에게서 내부의 건물과 유닛을 보호하면서 그 주위에 육각형 보호막을 만듭니다. -block.shock-mine.description = 지뢰를 밟는 적에게 피해를 줍니다. 적에게는 거의 보이지 않습니다. -block.duo.description = 작고 싼 터렛. -block.scatter.description = 중형 대공 터렛. 납이나 고철 덩어리를 적에게 쏩니다. -block.arc.description = 적을 향해 무작위 각도로 전기를 쏘는 작은 터렛. -block.hail.description = 작은 포병 터렛. -block.lancer.description = 충전된 전기빔을 쏘는 중형 터렛. -block.wave.description = 액체를 뿜는 중간 크기의 속화 터렛. -block.salvo.description = 일제히 사격을 하는 중형 터렛. -block.swarmer.description = 유도 미사일을 발사하는 중형 터렛. -block.ripple.description = 여러 발의 사격을 동시에 하는 대형 포대. -block.cyclone.description = 대형 초고속 사격 터렛. -block.fuse.description = 강력한 단거리 빔을 쏘는 대형 터렛. -block.spectre.description = 한 번에 두 발의 강력한 총알을 쏘는 대형 터렛. -block.meltdown.description = 강력한 장거리 빔을 쏘는 대형 터렛. -block.conveyor.description = 기본 아이템 수송 블록. 아이템을 앞으로 이동시켜 자동으로 터렛이나 건물에 넣어줍니다. 회전식. -block.titanium-conveyor.description = 고급 아이템 운송 블록. 표준 컨베이어보다 아이템을 더 빨리 이동시킨다. -block.phase-conveyor.description = 고급품 수송 블록. 여러 타일을 통해 아이템을 연결된 위상 컨베이어로 텔레포트하기 위해 전력을 사용합니다. -block.junction.description = 2개의 컨베이어 벨트를 교차시키는 다리 역할을 합니다. 서로 다른 재료를 다른 장소로 운반하는 두 개의 다른 컨베이어의 상황에서 유용합니다. -block.mass-driver.description = 최강 아이템 수송 블록. 몇 가지 아이템을 모아 장거리에서 또 다른 매스 드라이버에게 발사합니다. -block.silicon-smelter.description = 고순도 석탄으로 모래를 줄여 실리콘을 생산합니다. -block.plastanium-compressor.description = 석유와 티타늄으로 플라스타늄을 생산합니다. -block.phase-weaver.description = 방사능 토륨과 많은 량의 모래에서 상직물을 생산합니다. -block.alloy-smelter.description = 티타늄, 납, 실리콘, 구리로부터 서지 합금을 생산합니다. -block.pulverizer.description = 모래로 을 부숩니다. 천연 모래가 부족할 때 유용합니다. -block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 피라타이트로 만듭니다. -block.blast-mixer.description = 기름을 사용하여 피라타이트를 인화성은 떨어지지만 폭발성은 높은 폭발성 화합물로 변환시킵니다. -block.cryofluidmixer.description = 물과 티타늄을 냉각에 훨씬 더 효과적인 냉동액으로 결합시킵니다. -block.melter.description = 고철을 녹여 더 많은 처리나 터렛의 사용을 위해 광재에 녹입니다. -block.incinerator.description = 불필요한 아이템을 소각시켜 줄 수 있는 건물입니다. -block.spore-press.description = 포자 포드를 석유로 바꿔줍니다. -block.separator.description = 돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다. -block.power-node.description = 전원을 연결된 노드로 전송합니다. 최대 4개의 동력원, 싱크 또는 노드를 연결할 수 있습니다. 노드는 인접한 블록으로부터 전원을 공급하거나 공급받을 수 있습니다. -block.power-node-large.description = 생성된 전력를 다른 건물로 전달하기 위한 건물이며, 일반 노드보다 더 많은 전력을 이동시킬 수 있습니다. -block.battery.description = 전력 생산량에 여유가 있을경우, 생산된 잉여 전력을 여기에 저장합니다. -block.battery-large.description = 일반 배터리보다 훨씬 많은 량의 전력을 저장합니다. -block.combustion-generator.description = 기름이나 인화성 물질을 태워 전력을 발생시킵니다. -block.turbine-generator.description = 화력 발전기보다 효율적이지만, 추가 액체가 필요합니다. -block.thermal-generator.description = 뜨거운 위치에 건설하면 전력을 생산합니다. -block.solar-panel.description = 태양으로부터 소량의 전력을 공급합니다. -block.solar-panel-large.description = 일반 태양 전지판보다 훨씬 나은 전력을 공급하지만, 건축비도 훨씬 비쌉니다. -block.thorium-reactor.description = 고방사능 토륨으로부터 막대한 양의 전력을 발생시킵니다. 지속적인 냉각이 필요하며 냉각제의 양이 부족하면 크게 폭발합니다. 전력 출력은 최대 용량에서 기본 전력을 발생시키는 완전성에 따라 결정됩니다. -block.rtg-generator.description = 냉각은 필요 없지만 토륨 원자로에 비해 전력을 적게 공급하는 방사성 동위원소 열전 발생기. -block.unloader.description = 컨테이너, 금고 또는 코어에서 인접한 블록으로 아이템을 출하합니다. 출하시킬 아이템의 종류는 언로더를 눌러 지정할 수 있습니다. -block.container.description = 각종 소량의 자원을 저장할 수 있습니다.[LIGHT_GRAY]언로더[]를 사용하여 컨테이너에서 물건을 회수할 수 있습니다. -block.vault.description = 각종 대량의 자원을 저장할 수 있습니다.[LIGHT_GRAY]언로더[]를 사용하여 금고에서 물건을 회수할 수 있습니다. -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.trident-ship-pad.description = 지금 타고있는 배를 떠나 잘 무장된 중폭격기로 갈아타세요.\n누르거나 클릭하여 이 기체로 바꿉니다. -block.javelin-ship-pad.description = 지금 타고있는 배를 떠나 전격 무기와 강력하고 빠른 요격체로 변신합니다.\n누르거나 클릭하여 이 기체로 바꿉니다. -block.glaive-ship-pad.description = 지금 타고있는 배를 떠나 크고 잘 무장된 기체로 갈아타세요.\n누르거나 클릭하여 이 기체로 바꿉니다. -block.tau-mech-pad.description = 지금 타고있는 배를 떠나 아군 건물이나 유닛을 치료할 수 있는 지원형 기체로 갈아타세요.\n누르거나 클릭하여 이 기체로 바꿉니다. -block.delta-mech-pad.description = 지금 타고있는 배를 떠나 뺑소니 공격을 위해 만들어진 빠르고 가벼운 기체로 갈아타세요.\n누르거나 클릭하여 이 기체로 바꿉니다. -block.omega-mech-pad.description = 지금 타고있는 배를 떠나 최전방 공격을 위해 만든 부피가 크고 잘 무장된 기체로 갈아타세요.\n누르거나 클릭하여 이 기체로 바꿉니다. -block.spirit-factory.description = 광석을 채굴하고 블록을 수리하는 경량 드론을 생산합니다. -block.phantom-factory.description = 스피릿 드론보다 훨씬 효과적인 첨단 드론 유닛을 생산합니다. -block.wraith-factory.description = 빠른 뺑소니 요격기 유닛을 생산합니다. -block.ghoul-factory.description = 중탄두 폭격기를 생산합니다. -block.dagger-factory.description = 기본 지상 유닛을 생산합니다. -block.titan-factory.description = 첨단 장갑 지상부대를 생산합니다. -block.fortress-factory.description = 중대포 지상부대를 생산합니다. -block.revenant-factory.description = 중량의 레이저 포대를 가진 공중부대를 생산합니다. -block.repair-point.description = 주변에서 가장 가까운 손상된 유닛을 지속적으로 치료합니다. -block.conduit.description = 일반 파이프.\n액체가 지나갈 수 있도록 해 줍니다. -block.pulse-conduit.description = 고급 액체 수송블록. 일반 파이프보다 액체 운송 속도가 빠릅니다. -block.phase-conduit.description = 고급 액체 수송블록. 물을 먼거리로 순간이동 시켜 주는 장치입니다. -block.liquid-router.description = 물펌프를 다른 방향으로 분배할 수 있게 하는 블럭입니다. -block.liquid-tank.description = 액체 종류를 저장할 수 있는 물탱크 입니다. -block.liquid-junction.description = 물펌프와 다른 물펌프를 서로 교차시키게 할 수 있는 블럭입니다. -block.bridge-conduit.description = 다리와 다리 사이를 연결하여 액체가 지나갈 수 있게 해 줍니다.\n주로 다리 사이에 지나갈 수 없는 장애물이 있을 때 사용합니다. -block.mechanical-pump.description = 느린 속도로 물을 퍼올리는 펌프입니다. 대신 전력이 필요없습니다. -block.rotary-pump.description = 일반 물 펌프보다 더 빠른 속도로 물을 끌어올릴 수 있는 펌프입니다. -block.thermal-pump.description = 최고의 펌프. -block.router.description = 한 방향에서 아이템을 널은 후 최대 3개의 다른 방향으로 균등하게 출력합니다. 재료를 한곳에서 여러 개의 목표로 분할하는 데 유용합니다. -block.distributor.description = 아이템을 최대 7개의 다른 방향으로 똑같이 분할하는 고급 분배기. -block.bridge-conveyor.description = 고급 자원 수송 블록.\n지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다. -block.item-source.description = 자원을 선택하면 그 자원이 무한하게 생성되는 블록입니다. 샌드박스 전용. -block.liquid-source.description = 무한한 액체를 출력해냅니다. 샌드박스 전용. -block.item-void.description = 아이템을 사라지게 만듭니다. 샌드박스 전용. -block.power-source.description = 무한한 전력을 공급해주는 블록입니다. 샌드박스 전용. -block.power-void.description = 설정된 아이템을 계속해서 출력하는 블록입니다. -liquid.water.description = 일반적으로 냉각기와 폐기물 처리에 사용된다. + +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 = 터렛 및 건설의 재료로 사용되는 휘발성 폭발물.\n연료로도 사용할 수 있지만, 별로 추천하지는 않습니다. +item.pyratite.description = 인화성을 가진 재료로, 주로 터렛의 탄약으로 사용됩니다. +liquid.water.description = 여러 포탑을 가속하는데에 사용할 수 있고, 파도와 멜트다운의 탄약으로도 사용되며 여러 공장에서도 사용되는 무구한 가능성을 가진 액체입니다. +liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아있습니다. 셉터를 이용해 다른 광물들로 분리하거나 탄약으로 사용해 적 부대를 향해 살포할 수 있습니다. liquid.oil.description = 연소, 폭발 또는 냉각제로 사용될 수 있다. liquid.cryofluid.description = 건물을 냉각시키는데 가장 효과적인 액체. +mech.alpha-mech.description = 표준 기체.\n적절한 속도와 공격력을 갖추고 있습니다. +mech.delta-mech.description = 빠르게 이동하는 적을 처치하기 위한 가벼운 기체.\n구조물에는 거의 피해를 주지 않지만, 전격 무기를 사용하여 많은 적군을 매우 빠르게 죽일 수 있습니다. +mech.tau-mech.description = 지원형 기체.\n총을 발사하여 건물을 치료하고 회복 능력 사용으로 화재를 진압하거나, 반경 내 아군을 치유시킵니다. +mech.omega-mech.description = 지상 기체 최종판이자 건물 파괴용으로 적합한 부피가 크고 튼튼한 기체.\n방어 모드는 최대 90% 의 피해를 줄일 수 있습니다. +mech.dart-ship.description = 표준 비행선.\n빠르고 가볍지만 공격력이 거의 없고 채광 속도가 느립니다. +mech.javelin-ship.description = 치고 빠지는 공격을 위한 비행선.\n처음에는 느리지만, 가속도가 붙어 엄청난 속도로 미사일 피해를 입힐 수 있으며, 전격 능력을 사용할 수 있습니다. +mech.trident-ship.description = 대형 공중 폭격능력과 빠른 건설능력을 가진 폭격기.\n당연하게도 엄청 단단합니다. +mech.glaive-ship.description = 크고 잘 무장된 총을 가진 비행선.\n방화용 리피터가 장착되어 있으며, 가속도와 최대속도가 높습니다. +unit.draug.description = 가장 기본적인 채굴 드론입니다 저렴하게 생산 가능하며 자동으로 구리와 납을 캐내 가까운 코어에 저장합니다. +unit.spirit.description = 블록을 자동으로 수리합니다. +unit.phantom.description = 첨단 드론 유닛. 플레이어의 건설을 도와줍니다. +unit.dagger.description = 기본 지상 유닛입니다.\n플레이어 기체처럼 드론을 소환하지는 않습니다. +unit.crawler.description = 지상 유닛. 적이 가까이에 있으면 폭발합니다. +unit.titan.description = 고급 지상 유닛입니다.\n원거리 총 대신에 근접 화염 방사기를 가지고 있으며, 지상과 공중 둘다 공격할 수 있습니다. +unit.ghoul.description = 무겁고 튼튼한 지상 폭격기 입니다.\n주로 적 건물로 이동하여 엄청난 폭격을 가합니다. +unit.wraith.description = 적 핵심 건물 및 유닛을 집중적으로 공격하는 방식을 사용하는 전투기 입니다. +unit.fortress.description = 중포 지상 유닛.\n높은 공격력을 가진 총과 높은 체력을 가지고 있습니다. +unit.revenant.description = 플래이어가 생산가능한 최종 공중 전투기. 폭발물을 쓰는 스웜 포탑과 같은 무기를 사용합니다. +unit.eruptor.description = 지상 유닛. 광재를 넣은 파도와 같은 무기를 장착했습니다. +unit.chaos-array.description = 지상 중간보스 유닛. 설금을 넣은 사이클론과 같은 무기를 장착했습니다. +unit.eradicator.description = 지상 최종보스 유닛. 토륨을 넣은 스펙터와 같은 무기를 장착했습니다. +unit.lich.description = 공중 중간보스 유닛. 리치와 같은 무기를 장착했으나 공격속도가 좀 더 빠릅니다. +unit.reaper.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.cryofluidmixer.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 = 이어져있는 건물의 전기를 모두 없앱니다.\n샌드박스에서만 건설가능. +block.power-source.description = 무한한 전력을 공급해주는 블록입니다.\n샌드박스에서만 건설가능. +block.item-source.description = 자원을 선택하면 그 자원이 무한하게 생성되는 블록입니다.\n샌드박스에서만 건설가능. +block.item-void.description = 자원을 사라지게 만듭니다.\n샌드박스에서만 건설가능. +block.liquid-source.description = 무한한 액체를 출력해냅니다.\n샌드박스에서만 건설가능. +block.copper-wall.description = 게임 시작 초기에 방어용으로 적합합니다. +block.copper-wall-large.description = 구리 벽 4개를 뭉친 블럭입니다. +block.titanium-wall.description = 흑연이 생산될 즈음에 사용하기 적합합니다. +block.titanium-wall-large.description = 티타늄 벽 4개를 뭉친 블럭입니다. +block.thorium-wall.description = 쉬운 생산이 가능한 마지막 방어벽입니다. +block.thorium-wall-large.description = 토륨 벽 4개를 뭉친 블럭입니다. +block.phase-wall.description = 토륨 벽만큼 강하지 않지만 벽을 향해 날아오는 총알이 너무 강력하지 않으면 총알을 튕겨냅니다. +block.phase-wall-large.description = 위상 벽 4개를 뭉친 블럭입니다. +block.surge-wall.description = 공격을 받으면 낮은 확률로 공격자에게 전격 공격을 합니다. +block.surge-wall-large.description = 설금 벽 4개를 뭉친 블럭입니다. +block.door.description = 눌러서 열고 닫을 수 있는 문.\n만약 문이 열리면, 적들은 총을 쏘며 문을 통과할 수 있습니다. +block.door-large.description = 문 4개를 뭉친 블럭입니다. +block.mender.description = 주변 블록들을 주기적으로 치료합니다. +block.mend-projector.description = 주변 블록들을 수리기보다 더 넓은 범위, 더 많은 회복량, 더 빠른 속도로 수리합니다. +block.overdrive-projector.description = 드릴과 컨베이어와 같은 인근 건물의 속도를 높여줍니다. +block.force-projector.description = 육각형 보호막을 만들고, 내구도가 다 닳기 전까지 보호막 내로 들어오는 모든 공격을 방어합니다. +block.shock-mine.description = 지뢰를 밟는 적에게 피해를 줍니다. 적에게는 거의 보이지 않습니다. 일단 설치 완료된 후에는 적 유닛이 공격하지 않습니다. 그러나 지뢰가 있는 곳은 피해가니 주의하세요. +block.conveyor.description = 기본 자원 수송 레일. 자원을 배치된 방향을 따라 이동시켜 자동으로 건물에 넣어줍니다. +block.titanium-conveyor.description = 고급 자원 수송 레일. 기본 컨베이어보다 자원을 더 빨리 이동시킵니다. +block.junction.description = 2개의 컨베이어 벨트를 교차시키는 다리 역할을 합니다. 서로 다른 재료를 다른 장소로 운반하는 두 개의 다른 컨베이어의 상황에서 유용합니다. +block.bridge-conveyor.description = 자원 수송 블록.\n지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다. +block.phase-conveyor.description = 고급 자원 수송 블록.\n지형이나 건물을 넘어 최대 11개 타일을 건너뛰고 자원을 운송할 수 있습니다. 전기를 사용하고, 기본 터널 컨베이어보다 빠릅니다. +block.sorter.description = 자원을 넣어서 필터에 설정된 자원일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 이동시킵니다. +block.router.description = 한 방향에서 자원을 넣을 시 최대 3개의 방향으로 균등하게 내보냅니다. 자원을 한곳에서 여러 방향으로 분배하는 데 유용합니다. +block.distributor.description = 자원을 최대 7개의 다른 방향으로 균등하게 분베하는 고급 분배기. +block.overflow-gate.description = 평소에는 자원의 들어온 방향으로 자원을 통과시키지만, 정면이 자원이 꽉차거나 다른 사유로 막힐 시 옆으로 자원을 내보냅니다. +block.mass-driver.description = 자원 수송 포탑\n자원을 모아 전기를 사용하여 또 다른 매스 드라이버로 발사합니다.\n[ROYAL]받을 때도 전기를 사용합니다. +block.mechanical-pump.description = 느린 속도로 물을 퍼올리나 전기를 사용하지 않는 펌프입니다. +block.rotary-pump.description = 전기를 사용해 빠른 속도로 물을 끌어올릴 수 있는 펌프입니다.\n\n[ROYAL]타일당 물을 퍼올리는 속도가 가장 빠릅니다. +block.thermal-pump.description = 3x3범위의 액체타일에서 액체를 빠르게 퍼올리나 타일당 퍼올리는 속도는 동력 펌프보다 느립니다. +block.conduit.description = 기본 파이프\n액체를 배치된 방향으로 느리게 운송합니다. +block.pulse-conduit.description = 고급 파이프\n기본 파이프보다 액체 운송 속도가 빠릅니다. +block.liquid-router.description = 액체를 다른 방향으로 분배할 수 있게 하는 블럭입니다. +block.liquid-tank.description = 액체를 저장할 수 있는 물탱크 입니다. +block.liquid-junction.description = 교차기와 같은 기능을 하나 자원 대신에 액체를 교차시킵니다. +block.bridge-conduit.description = 액체 수송블록\n다리와 다리 사이를 연결하여 액체가 지나갈 수 있게 해 줍니다.\n\n주로 중간에 파이프 설치를 막는 장애물이 있을 때 사용합니다. +block.phase-conduit.description = 고급 액체 수송블록\n전기를 사용하여 같은 줄의 먼 거리에 있는 다른 위상 파이프로 액체를 전달합니다. +block.power-node.description = 전기을 연결된 대상과 연동시킵니다.\n최대 20개의 대상을 연결할 수 있습니다. 노드는 붙어있는 블록으로부터 전기가 연동됩니다. +block.power-node-large.description = 전기를 연결된 대상과 연동시킵니다.\n최대 30개의 대상을 연결시킬 수 있고, 범위도 더 넓습니다. +block.surge-tower.description = 전기를 연결된 대상과 연동시킵니다.\n2개의 대상만 연결시킬 수 있지만 대신에 범위가 매우 넓습니다. +block.battery.description = 전력 생산량에 여유가 있을경우, 생산된 잉여 전력을 여기에 저장합니다.\n\n[ROYAL]이것을 이용해 한순간에 많은 전력을 사용하는 포탑들을 보조가능합니다. +block.battery-large.description = 일반 배터리보다 훨씬 많은 량의 전력을 저장합니다.\n\n[ROYAL]임시 전력을 만들어서 냉각기에 전기가 부족해 원자로 폭발이 일어나는 것을 막아보는 것은 어떨까요? +block.combustion-generator.description = 인화성 물질을 태워 소량의 전력을 생산합니다. +block.thermal-generator.description = 건설가능한 열이 있는 타일 위에 건설하면 전력을 생산합니다.\n\n[ROYAL]용암 웅덩이 혹은 열기지대에서 무한정 열을 발산합니다. +block.turbine-generator.description = 화력 발전기보다 효율적이지만, 액체가 추가적으로 필요합니다.\n\n[ROYAL]3*2<7.8 +block.differential-generator.description = 냉각수와 파이라타이트의 온도 차를 이용해 안정적으로 원자로에 버금가는 양의 전기를 생산합니다. +block.rtg-generator.description = 방사성동위원소 열전기 발전기\n토륨또는 현상 구조체를 사용하며, 냉각이 필요없는 발전을 하지만 토륨 원자로에 비해 발전량이 매우 적습니다. +block.solar-panel.description = 태양광으로 극소량의 전기을 생산합니다. +block.solar-panel-large.description = 일반 태양 전지판보다 훨씬 나은 발전량이 많지만, 건축비도 훨씬 비쌉니다. +block.thorium-reactor.description = 토륨을 이용해 막대한 양의 전기를 생산합니다. 지속적인 냉각이 필요하며 냉각제의 양이 부족하면 크게 폭발합니다.\n\n[LOYAL]폭발로 인한 피해를 버틸 수 있는 건물은 없습니다. +block.impact-reactor.description = 최첨단 발전기\n폭발물과 냉각수를 이용해 최고의 효율로 매우 많은 양의 전기를 생산할 수 있습니다. 발전을 시작하는데 전기가 필요하며 발전기를 가동하는데 시간이 많이 걸립니다.\n[LOYAL]오버드라이브 프로젝터로 10000이상의 전기를 생산할 수 있으며, 가동중에 전기가 끊기면 가동을 다시 해야되기 때문에 창고,물탱크,배터리 등을 주위에 설치하고 나서 가동하는 것을 추천합니다. +block.mechanical-drill.description = 싸구려 드릴. 적절한 타일 위에 놓였을때 매우 느린 속도로 계속 채광합니다.\n\n[ROYAL]구리와 납은 광부 드론으로 대체가 가능합니다. +block.pneumatic-drill.description = 기압을 이용하여 보다 빠르게 단단한 물질을 채광할 수 있는 향상된 드릴.\n\n[ROYAL]전기를 사용하지 않는 드릴이라도 물과 오버드라이브를 이용하여 가속할 수 있습니다. +block.laser-drill.description = 토륨을 채광할 수 있는 고급 드릴입니다. 전력과 물을 공급하여 빠른 속도로 채광할 수 있습니다.\n\n[ROYAL]드릴아래에 배치된 광물타일의 비율에 따라 채광량이 달라집니다. +block.blast-drill.description = 최상위 드릴입니다. 많은량의 전력이 필요합니다.\n\n[ROYAL]물추출기 하나면 충분합니다. +block.water-extractor.description = 땅에서 물을 추출합니다. 근처에 호수가 없을 때 사용하세요.\n\n[ROYAL]물추출기의 효율이 달라지는 타일이 있습니다. +block.cultivator.description = 소량의 포자를 산업용으로 사용가능한 포자로 배양하는 건물입니다. +block.oil-extractor.description = 대량의 전력과 물을 사용하여 모래에서 기름을 추출합니다. 근처에 직접적인 석유 공급원이 없을때 사용하세요.\n\n[LOYAL]모래 또는 고철을 이용하여 +block.core-shard.description = 코어의 1단계 형태입니다.\n이것이 파괴되면 플레이하고 있는 지역과의 연결이 끊어지니 적의 공격에 파괴되지 않도록 주의하세요.\n[ROYAL]연결이 끊긴다는 말은 게임오버와 일맥상통합니다. +block.core-foundation.description = 코어의 2단계 형태입니다.\n첫 번째 코어보다 더 튼튼하고 더 많은 자원을 저장할 수 있습니다.\n\n[ROYAL]크기도 좀 더 큽니다. +block.core-nucleus.description = 코어의 3단계이자 마지막 형태입니다.\n최고로 튼튼하며 막대한 양의 자원들을 저장할 수 있습니다. +block.vault.description = 각종 대량의 자원을 저장할 수 있습니다.[LIGHT_GRAY]언로더[]를 사용하여 금고에서 물건을 회수할 수 있습니다. +block.container.description = 각종 소량의 자원을 저장할 수 있습니다.[LIGHT_GRAY]언로더[]를 사용하여 컨테이너에서 자원을 회수할 수 있습니다. +block.unloader.description = 컨테이너, 창고 또는 코어에서 인접한 블록으로 자원을 출하합니다. 출하시킬 자원의 종류는 언로더를 눌러 지정할 수 있습니다. +block.launch-pad.description = 출격할 필요 없이 자원을 수송시킵시다. +block.launch-pad-large.description = 출격 패드의 강화버전\n더 많은 자원을 더 자주 출격시킵니다.\n\n[ROYAL]크기도 더 크다죠 +block.duo.description = 소형 포탑입니다.\n가장 기본적인 포탑으로 약한 탄환을 발사합니다. +block.scatter.description = 중형 대공 포탑입니다. 납이나 고철 덩어리를 적에게 쏩니다. +block.scorch.description = 화염방사포탑. 사거리가 짧기 때문인지 지상유닛 상대로는 최고의 공격력을 보여줍니다. +block.hail.description = 소형 포탑입니다.\n장거리로 포탄을 발사합니다. +block.wave.description = 중형 포탑입니다. 대상에게 포탑에 공급된 액체를 발사합니다. 물또는 냉각수가 공급되면 자동으로 불을 끕니다. +block.lancer.description = 중형 포탑입니다.\n적을 레이저로 관통합니다. +block.arc.description = 소형 포탑입니다.\n적을 전기로 지집니다. +block.swarmer.description = 중형 포탑입니다.\n지상과 공중 적 모두를 공격하는 유도 미사일 포탑입니다. +block.salvo.description = 중형 포탑입니다.\n3연발 탄환을 발사합니다. +block.ripple.description = 대형 포탑입니다.\n여러 발의 사격을 동시에 합니다. +block.cyclone.description = 대형 포탑입니다.\n초고속으로 사격합니다. +block.fuse.description = 대형 포탑입니다.\n강력한 단거리 빔을 쏩니다. +block.spectre.description = 초대형 포탑입니다.\n한 번에 두 발의 강력한 총알을 쏩니다. +block.meltdown.description = 초대형 포탑.\n장거리의 강력한 열광선을 발사합니다. +block.draug-factory.description = 구리와 납을 캐는 채광 드론을 생산합니다.\n\n[ROYAL]이 드론은 영혼을 가지고 있습니다. +block.spirit-factory.description = 블록을 수리하는 수리 드론을 생산합니다.\n\n[ROYAL]드론에도 정령이 있다죠. +block.phantom-factory.description = 건설을 도와주는 빌더 드론을 생산합니다.\n\n[ROYAL]당신의 환영입니다. +block.wraith-factory.description = 빠른 뺑소니 요격기 유닛을 생산합니다.\n\n[ROYAL]?:저거 안죽어요??\n??:님 인터넷을 확인해보셈\n?:아 왠지 기체가 이상한 곳을 조준하더라.. +block.ghoul-factory.description = 중탄두 폭격기를 생산합니다.\n\n[ROYAL]적 위를 유령처럼 맴돕니다. +block.revenant-factory.description = 중량의 폭발물 스웜 포대를 가진 전함을 생산합니다.\n\n[ROYAL]캠페인과 사용자 정의 게임에서 ai가 다른 대표적인 유닛이라죠. +block.crawler-factory.description = 자폭하는 지상 유닛을 생산합니다.\n\n[ROYAL] +block.dagger-factory.description = 기본 지상 유닛을 생산합니다.\n\n[ROYAL]원래대로라면 대거라 읽어야 되지만 총을 쏜다는 것이 이상하기도 해서 한국 커뮤니티에서는 그냥 디거라 부른다죠. 그게 좀 더 입에 붙잖아요? +block.titan-factory.description = 화염방사기를 장착한 지상유닛를 생산합니다.\n\n[ROYAL]최강이 될 수도, 최약이 될 수도 있습니다. +block.fortress-factory.description = 중대포 지상유닛를 생산합니다. +block.repair-point.description = 주변에서 가장 가까운 손상된 유닛을 지속적으로 치료합니다.\n\n[ROYAL]이 것으로 플래이어는 지속적인 교전이 가능해집니다. +block.dart-mech-pad.description = 기본적인 공격용 지상 기체로 전환할 수 있습니다.\n눌러서 변신하세요.\n\n[ROYAL]한 번 더 눌러서 기본 공중 기체로 전환가능합니다. +block.delta-mech-pad.description = 전격 무기와 천둥의 특수능력을 가진 기체로 전환할 수 있습니다.\n눌러서 전환하세요.\n\n[ROYAL]공중으로 날았다가 착지하는 것으로 특수능력의 발현이 가능합니다. +block.tau-mech-pad.description = 수리의 능력을 가진 지원형 기체로 전환할 수 있습니다.\n눌러서 전환하세요.\n\n[ROYAL]주변에 피해를 입은 유닛이 있다면 수리의 파동을 발산합니다. +block.omega-mech-pad.description = 포탑과의 전투가 용이하고 기체중에서 가장 단단한 기체로 전환할 수 있습니다.\n눌러서 전환하세요.\n\n[ROYAL]교전시에 지상에 착지한 상태라면 방어모드에 진입해 90퍼센트의 피해를 흡수합니다. +block.javelin-ship-pad.description = 전격 무기와 강력하고 번개의 특수능력을 가진 빠른 요격체로 전환할 수 있습니다.\n눌러서 전환하세요.\n\n[ROYAL]최고 속도에 도달하면 주변을 번개로 지져버립니다. +block.trident-ship-pad.description = 잘 무장된 중폭격기로 전환이 가능합니다.\n눌러서 전환하세요.\n\n[ROYAL]적들의 위에서 폭격하기 때문에 비전투 건물이나 실드를 파괴할 때 용이합니다. 더해서 건물 건설 속도가 가장 빠릅니다. +block.glaive-ship-pad.description = 방화기를 장착한 전투기로 전환이 가능합니다.\n누르거나 클릭하여 이 기체로 바꿉니다.\n\n[ROYAL]컨트롤하기 가장 적합한 기체입니다. diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 0d40e6a7a1..7415af20b5 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -4,6 +4,7 @@ contributors = Vertalers en Medewerkers discord = Word lid van de Mindustry Discord! link.discord.description = De officiële Mindustry discord chatroom link.github.description = Game broncode +link.changelog.description = List of update changes link.dev-builds.description = Onstabiele ontwikkeling builds link.trello.description = Officiële trello-bord voor geplande functies link.itch.io.description = itch.io pagina met pc-downloads en webversie @@ -32,7 +33,6 @@ level.mode = Spelmodus: showagain = Don't show again next session coreattack = < Core is under attack! > nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent -outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} database = Core Database savegame = Save Game loadgame = Load Game @@ -95,7 +95,6 @@ server.admins = Admins server.admins.none = No admins found! server.add = Add Server server.delete = Are you sure you want to delete this server? -server.hostname = Host: {0} server.edit = Edit Server server.outdated = [crimson]Outdated Server![] server.outdated.client = [crimson]Outdated Client![] @@ -156,13 +155,6 @@ openlink = Open Link copylink = Copy Link back = Back quit.confirm = Are you sure you want to quit? -changelog.title = Changelog -changelog.loading = Getting changelog... -changelog.error.android = [accent]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug. -changelog.error.ios = [accent]The changelog is currently not supported in iOS. -changelog.error = [scarlet]Error getting changelog!\nCheck your internet connection. -changelog.current = [yellow][[Current version] -changelog.latest = [accent][[Latest version] loading = [accent]Loading... saving = [accent]Saving... wave = [accent]Wave {0} @@ -192,7 +184,9 @@ editor.author = Author: editor.description = Description: editor.waves = Waves: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Waves waves.remove = Remove waves.never = @@ -207,13 +201,13 @@ waves.copy = Copy to Clipboard waves.load = Load from Clipboard waves.invalid = Invalid waves in clipboard. waves.copied = Waves copied. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Edit... editor.name = Name: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Teams -editor.elevation = Elevation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Map Name: editor.overwrite = [accent]Warning!\nThis overwrites an existing map. editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? editor.selectmap = Select a map to load: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Ore filter.rivernoise = River Noise +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Scatter filter.terrain = Terrain filter.option.scale = Scale @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Width: height = Height: menu = Menu play = Play +campaign = Campaign load = Load save = Save fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Add... boss.health = Boss Health connectfail = [crimson]Failed to connect to server:\n\n[accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Already connected. error.mapnotfound = Map file not found! error.io = Network I/O error. error.any = Unknown network error. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Language settings.reset = Reset to Defaults settings.rebind = Rebind @@ -346,12 +383,14 @@ no = No info.title = Info error.title = [crimson]An error has occured error.crashtitle = An error has occured +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Power Capacity blocks.powershot = Power/Shot +blocks.damage = Damage blocks.targetsair = Targets Air blocks.targetsground = Targets Ground blocks.itemsmoved = Move Speed @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.indicators.name = Ally Indicators setting.autotarget.name = Auto-Target +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = None setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = training setting.difficulty.easy = easy @@ -456,7 +497,11 @@ setting.mutesound.name = Mute Sound setting.crashreport.name = Send Anonymous Crash Reports setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Rebind Keys +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = View category.multiplayer.name = Multiplayer @@ -505,6 +550,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves +rules.attack = Attack Mode rules.enemyCheat = Infinite AI Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Units content.block.name = Blocks content.mech.name = Mechs item.copper.name = Copper -item.copper.description = A useful structure material. Used extensively in all types of blocks. item.lead.name = Lead -item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. item.coal.name = Coal -item.coal.description = A common and readily available fuel. item.graphite.name = Graphite item.titanium.name = Titanium -item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft. item.thorium.name = Thorium -item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel. item.silicon.name = Silicon -item.silicon.description = An extremely useful semiconductor, with applications in solar panels and many complex electronics. item.plastanium.name = Plastanium -item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition. item.phase-fabric.name = Phase Fabric -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.surge-alloy.name = Surge Alloy -item.surge-alloy.description = An advanced alloy with unique electrical properties. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Sand -item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux. item.blast-compound.name = Blast Compound -item.blast-compound.description = A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised. item.pyratite.name = Pyratite -item.pyratite.description = An extremely flammable substance used in incendiary weapons. item.metaglass.name = Metaglass -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = Water liquid.slag.name = Slag liquid.oil.name = Oil @@ -570,31 +601,23 @@ liquid.cryofluid.name = Cryofluid mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Heavy Repeater mech.alpha-mech.ability = Drone Swarm -mech.alpha-mech.description = The standard mech. Has decent speed and damage output; can create up to 3 drones for increased offensive capability. mech.delta-mech.name = Delta mech.delta-mech.weapon = Arc Generator mech.delta-mech.ability = Discharge -mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons. mech.tau-mech.name = Tau mech.tau-mech.weapon = Restruct Laser mech.tau-mech.ability = Repair Burst -mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can heal allies in a radius with its repair ability. mech.omega-mech.name = Omega mech.omega-mech.weapon = Swarm Missiles mech.omega-mech.ability = Armored Configuration -mech.omega-mech.description = A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage. mech.dart-ship.name = Dart mech.dart-ship.weapon = Repeater -mech.dart-ship.description = The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles. mech.javelin-ship.weapon = Burst Missiles mech.javelin-ship.ability = Discharge Booster mech.trident-ship.name = Trident -mech.trident-ship.description = A heavy bomber. Reasonably well armored. mech.trident-ship.weapon = Bomb Bay mech.glaive-ship.name = Glaive -mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed. mech.glaive-ship.weapon = Flame Repeater item.explosiveness = [LIGHT_GRAY]Explosiveness: {0}% item.flammability = [LIGHT_GRAY]Flammability: {0}% @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Rock block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0} [LIGHT_GRAY](Constructing) @@ -702,9 +726,7 @@ block.junction.name = Junction block.router.name = Router block.distributor.name = Distributor block.sorter.name = Sorter -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.overflow-gate.name = Overflow Gate -block.overflow-gate.description = A combination splitter and router that only outputs to the left and right if the front path is blocked. block.silicon-smelter.name = Silicon Smelter block.phase-weaver.name = Phase Weaver block.pulverizer.name = Pulverizer @@ -756,6 +778,7 @@ block.blast-mixer.name = Blast Mixer block.solar-panel.name = Solar Panel block.solar-panel-large.name = Large Solar Panel block.oil-extractor.name = Oil Extractor +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Spirit Drone Factory block.phantom-factory.name = Phantom Drone Factory block.wraith-factory.name = Wraith Fighter Factory @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Container block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = blue team.red.name = red @@ -803,20 +825,14 @@ team.none.name = gray team.green.name = green team.purple.name = purple unit.spirit.name = Spirit Drone -unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores and repairs blocks. +unit.draug.name = Draug Miner Drone unit.phantom.name = Phantom Drone -unit.phantom.description = An advanced drone unit. Automatically mines ores and repairs blocks. Significantly more effective than a spirit drone. unit.dagger.name = Dagger -unit.dagger.description = A basic ground unit. Useful in swarms. unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = An advanced, armored ground unit. Attacks both ground and air targets. unit.ghoul.name = Ghoul Bomber -unit.ghoul.description = A heavy carpet bomber. unit.wraith.name = Wraith Fighter -unit.wraith.description = A fast, hit-and-run interceptor unit. unit.fortress.name = Fortress -unit.fortress.description = A heavy artillery ground unit. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. +item.copper.description = A useful structure material. Used extensively in all types of blocks. +item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. +item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +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. +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, with applications in solar panels and many complex electronics. +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 = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised. +item.pyratite.description = An extremely flammable substance used in incendiary weapons. +liquid.water.description = 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 = Can be burnt, exploded or used as a coolant. +liquid.cryofluid.description = The most efficient liquid for cooling things down. +mech.alpha-mech.description = The standard mech. Has decent speed and damage output; can create up to 3 drones for increased offensive capability. +mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons. +mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can heal allies in a radius with its repair ability. +mech.omega-mech.description = A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage. +mech.dart-ship.description = The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed. +mech.javelin-ship.description = A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles. +mech.trident-ship.description = A heavy bomber. Reasonably well armored. +mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores and repairs blocks. +unit.phantom.description = An advanced drone unit. Automatically mines ores and repairs blocks. Significantly more effective than a spirit drone. +unit.dagger.description = A basic ground unit. Useful in swarms. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = An advanced, armored ground unit. Attacks both ground and air targets. +unit.fortress.description = A heavy artillery ground unit. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = A fast, hit-and-run interceptor unit. +unit.ghoul.description = A heavy carpet bomber. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 highly pure coal in order to produce silicon. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produces plastanium from oil and titanium. +block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. +block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. +block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. +block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive 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 turrets. +block.separator.description = Extracts useful minerals from slag. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Gets rid of any excess item or liquid. +block.power-void.description = Voids all power inputted into it. 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 which go into it without using power. Sandbox only. +block.liquid-source.description = Infinitely outputs 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.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. @@ -854,54 +936,45 @@ block.surge-wall.description = The strongest defensive block.\nHas a small chanc block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\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 = Periodically heals blocks in its vicinity. block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.duo.description = A small, cheap turret. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. -block.hail.description = A small artillery turret. -block.lancer.description = A medium-sized turret which shoots charged electricity beams. -block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. -block.salvo.description = A medium-sized turret which fires shots in salvos. -block.swarmer.description = A medium-sized turret which shoots burst missiles. -block.ripple.description = A large artillery turret which fires several shots simultaneously. -block.cyclone.description = A large rapid fire turret. -block.fuse.description = A large turret which shoots powerful short-range beams. -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.conveyor.description = Basic item transport block. Moves items forward and automatically deposits them into turrets or crafters. Rotatable. block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. 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.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. +block.distributor.description = An advanced router which splits items to up to 7 other directions equally. +block.overflow-gate.description = A combination splitter and router that only outputs to the left and right if the front path is blocked. block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. -block.silicon-smelter.description = Reduces sand with highly pure coal in order to produce silicon. -block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. -block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. -block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. -block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. -block.melter.description = Melts down scrap into slag for further processing or usage in turrets. -block.incinerator.description = Gets rid of any excess item or liquid. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Extracts useful minerals from slag. +block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. +block.rotary-pump.description = An advanced pump which doubles up speed by using power. +block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. +block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. +block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. +block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. +block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. +block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. +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.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left. block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning oil or flammable materials. -block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.thermal-generator.description = Generates power when placed in hot locations. +block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build. block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. Power output depends on fullness, with base power generated at half capacity. -block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. -block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. -block.container.description = Stores a small amount of items of each type. Adjacent containers, vaults and cores will be treated as a single storage unit. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. -block.vault.description = Stores a large amount of items of each type. Adjacent containers, vaults and cores will be treated as a single storage unit. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +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. block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. @@ -909,39 +982,43 @@ block.blast-drill.description = The ultimate drill. Requires large amounts of po block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.cultivator.description = Cultivates spores with water in order to obtain biomatter. block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby. -block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. -block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. -block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. -block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. -block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. -block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +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. Adjacent containers, vaults and cores will be treated as a single storage unit. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +block.container.description = Stores a small amount of items of each type. Adjacent containers, vaults and cores will be treated as a single storage unit. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. +block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = A small artillery turret. +block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. +block.lancer.description = A medium-sized turret which shoots charged electricity beams. +block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. +block.swarmer.description = A medium-sized turret which shoots burst missiles. +block.salvo.description = A medium-sized turret which fires shots in salvos. +block.fuse.description = A large turret which shoots powerful short-range beams. +block.ripple.description = A large artillery turret which fires several shots simultaneously. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.ghoul-factory.description = Produces heavy carpet bombers. +block.revenant-factory.description = Produces heavy laser air units. block.dagger-factory.description = Produces basic ground units. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produces advanced, armored ground units. block.fortress-factory.description = Produces heavy artillery ground units. -block.revenant-factory.description = Produces heavy laser air units. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. -block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. -block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. -block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. -block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. -block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. -block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. -block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. -block.rotary-pump.description = An advanced pump which doubles up speed by using power. -block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. -block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. -block.distributor.description = An advanced router which splits items to up to 7 other directions equally. -block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. -block.item-source.description = Infinitely outputs items. Sandbox only. -block.liquid-source.description = Infinitely outputs liquids. Sandbox only. -block.item-void.description = Destroys any items which go into it without using power. Sandbox only. -block.power-source.description = Infinitely outputs power. Sandbox only. -block.power-void.description = Voids all power inputted into it. Sandbox only. -liquid.water.description = Commonly used for cooling machines and waste processing. -liquid.oil.description = Can be burnt, exploded or used as a coolant. -liquid.cryofluid.description = The most efficient liquid for cooling things down. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. +block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. +block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. +block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. +block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties index a1b20b8171..f724a3bde2 100644 --- a/core/assets/bundles/bundle_nl_BE.properties +++ b/core/assets/bundles/bundle_nl_BE.properties @@ -4,6 +4,7 @@ contributors = Vertalers en medewerkers discord = Sluit je aan bij de Mindustry discord server! link.discord.description = De officiële Mindustry discord chatroom link.github.description = Broncode +link.changelog.description = List of update changes link.dev-builds.description = Onstabiele versies link.trello.description = Officiële Trello voor geplande toevoegingen. link.itch.io.description = Itch.io pagina met de PC downloads en online versie @@ -32,7 +33,6 @@ level.mode = Speelmode: showagain = Toon dit volgende keer niet meer. coreattack = < Kern wordt aangevallen! > nearpoint = [[ [scarlet]VERLAAT dit gebied onmiddelijk[] ]\nDirecte vernietiging... -outofbounds = [[ BUITEN HET SPEELBAAR GEBIED]\n[]Zelfvernietiging in {0} database = Kern Database savegame = opslaan loadgame = openen @@ -95,7 +95,6 @@ server.admins = Administrators server.admins.none = Geen Administrators gevonden! server.add = Voeg server toe server.delete = Ben je zeker dat je deze sever wil verwijderen? -server.hostname = Host: {0} server.edit = Bewerk Server server.outdated = [crimson]Verouderde Server![] server.outdated.client = [crimson]Verouderde Client![] @@ -156,13 +155,6 @@ openlink = Open Link copylink = Copy Link back = Back quit.confirm = Are you sure you want to quit? -changelog.title = Changelog -changelog.loading = Getting changelog... -changelog.error.android = [accent]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug. -changelog.error.ios = [accent]The changelog is currently not supported in iOS. -changelog.error = [scarlet]Error getting changelog!\nCheck your internet connection. -changelog.current = [yellow][[Current version] -changelog.latest = [accent][[Latest version] loading = [accent]Loading... saving = [accent]Saving... wave = [accent]Wave {0} @@ -192,7 +184,9 @@ editor.author = Author: editor.description = Description: editor.waves = Waves: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Waves waves.remove = Remove waves.never = @@ -207,13 +201,13 @@ waves.copy = Copy to Clipboard waves.load = Load from Clipboard waves.invalid = Invalid waves in clipboard. waves.copied = Waves copied. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Edit... editor.name = Name: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Teams -editor.elevation = Elevation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Map Name: editor.overwrite = [accent]Warning!\nThis overwrites an existing map. editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? editor.selectmap = Select a map to load: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Ore filter.rivernoise = River Noise +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Scatter filter.terrain = Terrain filter.option.scale = Scale @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Width: height = Height: menu = Menu play = Play +campaign = Campaign load = Load save = Save fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Add... boss.health = Boss Health connectfail = [crimson]Failed to connect to server:\n\n[accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Already connected. error.mapnotfound = Map file not found! error.io = Network I/O error. error.any = Unknown network error. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Language settings.reset = Reset to Defaults settings.rebind = Rebind @@ -346,12 +383,14 @@ no = No info.title = Info error.title = [crimson]An error has occured error.crashtitle = An error has occured +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Power Capacity blocks.powershot = Power/Shot +blocks.damage = Damage blocks.targetsair = Targets Air blocks.targetsground = Targets Ground blocks.itemsmoved = Move Speed @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.indicators.name = Enemy/Ally Indicators setting.autotarget.name = Auto-Target +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = None setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = training setting.difficulty.easy = easy @@ -456,7 +497,11 @@ setting.mutesound.name = Mute Sound setting.crashreport.name = Send Anonymous Crash Reports setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Rebind Keys +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = View category.multiplayer.name = Multiplayer @@ -505,6 +550,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves +rules.attack = Attack Mode rules.enemyCheat = Infinite AI (Red Team) Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Units content.block.name = Blocks content.mech.name = Mechs item.copper.name = Copper -item.copper.description = A useful structure material. Used extensively in all types of blocks. item.lead.name = Lead -item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. item.coal.name = Coal -item.coal.description = A common and readily available fuel. item.graphite.name = Graphite item.titanium.name = Titanium -item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft. item.thorium.name = Thorium -item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel. item.silicon.name = Silicon -item.silicon.description = An extremely useful semiconductor, with applications in solar panels and many complex electronics. item.plastanium.name = Plastanium -item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition. item.phase-fabric.name = Phase Fabric -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.surge-alloy.name = Surge Alloy -item.surge-alloy.description = An advanced alloy with unique electrical properties. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Sand -item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux. item.blast-compound.name = Blast Compound -item.blast-compound.description = A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised. item.pyratite.name = Pyratite -item.pyratite.description = An extremely flammable substance used in incendiary weapons. item.metaglass.name = Metaglass -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = Water liquid.slag.name = Slag liquid.oil.name = Oil @@ -570,31 +601,23 @@ liquid.cryofluid.name = Cryofluid mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Heavy Repeater mech.alpha-mech.ability = Regeneration -mech.alpha-mech.description = The standard mech. Has decent speed and damage output. mech.delta-mech.name = Delta mech.delta-mech.weapon = Arc Generator mech.delta-mech.ability = Discharge -mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons. mech.tau-mech.name = Tau mech.tau-mech.weapon = Restruct Laser mech.tau-mech.ability = Repair Burst -mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can heal allies in a radius with its repair ability. mech.omega-mech.name = Omega mech.omega-mech.weapon = Swarm Missiles mech.omega-mech.ability = Armored Configuration -mech.omega-mech.description = A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage. mech.dart-ship.name = Dart mech.dart-ship.weapon = Repeater -mech.dart-ship.description = The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles. mech.javelin-ship.weapon = Burst Missiles mech.javelin-ship.ability = Discharge Booster mech.trident-ship.name = Trident -mech.trident-ship.description = A heavy bomber. Reasonably well armored. mech.trident-ship.weapon = Bomb Bay mech.glaive-ship.name = Glaive -mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed. mech.glaive-ship.weapon = Flame Repeater item.explosiveness = [LIGHT_GRAY]Explosiveness: {0}% item.flammability = [LIGHT_GRAY]Flammability: {0}% @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Rock block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0} [LIGHT_GRAY](Constructing) @@ -702,9 +726,7 @@ block.junction.name = Junction block.router.name = Router block.distributor.name = Distributor block.sorter.name = Sorter -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.overflow-gate.name = Overflow Gate -block.overflow-gate.description = A combination splitter and router that only outputs to the left and right if the front path is blocked. block.silicon-smelter.name = Silicon Smelter block.phase-weaver.name = Phase Weaver block.pulverizer.name = Pulverizer @@ -756,6 +778,7 @@ block.blast-mixer.name = Blast Mixer block.solar-panel.name = Solar Panel block.solar-panel-large.name = Large Solar Panel block.oil-extractor.name = Oil Extractor +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Spirit Drone Factory block.phantom-factory.name = Phantom Drone Factory block.wraith-factory.name = Wraith Fighter Factory @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Container block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = blue team.red.name = red @@ -803,20 +825,14 @@ team.none.name = gray team.green.name = green team.purple.name = purple unit.spirit.name = Spirit Drone -unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores and repairs blocks. +unit.draug.name = Draug Miner Drone unit.phantom.name = Phantom Drone -unit.phantom.description = An advanced drone unit. Automatically mines ores and repairs blocks. Significantly more effective than a spirit drone. unit.dagger.name = Dagger -unit.dagger.description = A basic ground unit. Useful in swarms. unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = An advanced, armored ground unit. Attacks both ground and air targets. unit.ghoul.name = Ghoul Bomber -unit.ghoul.description = A heavy carpet bomber. unit.wraith.name = Wraith Fighter -unit.wraith.description = A fast, hit-and-run interceptor unit. unit.fortress.name = Fortress -unit.fortress.description = A heavy artillery ground unit. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. +item.copper.description = A useful structure material. Used extensively in all types of blocks. +item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. +item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +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. +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, with applications in solar panels and many complex electronics. +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 = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised. +item.pyratite.description = An extremely flammable substance used in incendiary weapons. +liquid.water.description = 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 = Can be burnt, exploded or used as a coolant. +liquid.cryofluid.description = The most efficient liquid for cooling things down. +mech.alpha-mech.description = The standard mech. Has decent speed and damage output. +mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons. +mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can heal allies in a radius with its repair ability. +mech.omega-mech.description = A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage. +mech.dart-ship.description = The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed. +mech.javelin-ship.description = A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles. +mech.trident-ship.description = A heavy bomber. Reasonably well armored. +mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores and repairs blocks. +unit.phantom.description = An advanced drone unit. Automatically mines ores and repairs blocks. Significantly more effective than a spirit drone. +unit.dagger.description = A basic ground unit. Useful in swarms. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = An advanced, armored ground unit. Attacks both ground and air targets. +unit.fortress.description = A heavy artillery ground unit. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = A fast, hit-and-run interceptor unit. +unit.ghoul.description = A heavy carpet bomber. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 highly pure coal in order to produce silicon. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produces plastanium from oil and titanium. +block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. +block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. +block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. +block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive 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 turrets. +block.separator.description = Extracts useful minerals from slag. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Crushes scrap into sand. Useful when there is a lack of natural sand. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Gets rid of any excess item or liquid. +block.power-void.description = Voids all power inputted into it. 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 which go into it without using power. Sandbox only. +block.liquid-source.description = Infinitely outputs 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.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. @@ -854,54 +936,45 @@ block.surge-wall.description = The strongest defensive block.\nHas a small chanc block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\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 = Periodically heals blocks in its vicinity. block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.duo.description = A small, cheap turret. Useful against ground units. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = A small close-range turret which shoots electricity in a random arc towards the enemy. -block.hail.description = A small artillery turret. -block.lancer.description = A medium-sized turret which shoots charged electricity beams. -block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. -block.salvo.description = A medium-sized turret which fires shots in salvos. -block.swarmer.description = A medium-sized turret which shoots burst missiles. -block.ripple.description = A large artillery turret which fires several shots simultaneously. -block.cyclone.description = A large rapid fire turret. -block.fuse.description = A large turret which shoots powerful short-range beams. -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.conveyor.description = Basic item transport block. Moves items forward and automatically deposits them into turrets or crafters. Rotatable. block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. 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.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. +block.distributor.description = An advanced router which splits items to up to 7 other directions equally. +block.overflow-gate.description = A combination splitter and router that only outputs to the left and right if the front path is blocked. block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. -block.silicon-smelter.description = Reduces sand with highly pure coal in order to produce silicon. -block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. -block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. -block.pulverizer.description = Crushes scrap into sand. Useful when there is a lack of natural sand. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. -block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. -block.melter.description = Melts down scrap into slag for further processing or usage in turrets. -block.incinerator.description = Gets rid of any excess item or liquid. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Extracts useful minerals from slag. +block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. +block.rotary-pump.description = An advanced pump which doubles up speed by using power. +block.thermal-pump.description = The ultimate pump. +block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. +block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. +block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. +block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. +block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. +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.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left. block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning oil or flammable materials. -block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.thermal-generator.description = Generates power when placed in hot locations. +block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build. block.thorium-reactor.description = Generates huge amounts of power from highly radioactive 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.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. -block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. -block.container.description = Stores a small amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. -block.vault.description = Stores a large amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +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. block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. @@ -909,39 +982,43 @@ block.blast-drill.description = The ultimate drill. Requires large amounts of po block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.cultivator.description = Cultivates tiny concentrations of spores into industry-ready pods. block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby. -block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. -block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. -block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. -block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. -block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. -block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +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[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +block.container.description = Stores a small amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. +block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = A small, cheap turret. Useful against ground units. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = A small artillery turret. +block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. +block.lancer.description = A medium-sized turret which shoots charged electricity beams. +block.arc.description = A small close-range turret which shoots electricity in a random arc towards the enemy. +block.swarmer.description = A medium-sized turret which shoots burst missiles. +block.salvo.description = A medium-sized turret which fires shots in salvos. +block.fuse.description = A large turret which shoots powerful short-range beams. +block.ripple.description = A large artillery turret which fires several shots simultaneously. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.ghoul-factory.description = Produces heavy carpet bombers. +block.revenant-factory.description = Produces heavy laser air units. block.dagger-factory.description = Produces basic ground units. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produces advanced, armored ground units. block.fortress-factory.description = Produces heavy artillery ground units. -block.revenant-factory.description = Produces heavy laser air units. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. -block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. -block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. -block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. -block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. -block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. -block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. -block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. -block.rotary-pump.description = An advanced pump which doubles up speed by using power. -block.thermal-pump.description = The ultimate pump. -block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. -block.distributor.description = An advanced router which splits items to up to 7 other directions equally. -block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. -block.item-source.description = Infinitely outputs items. Sandbox only. -block.liquid-source.description = Infinitely outputs liquids. Sandbox only. -block.item-void.description = Destroys any items which go into it without using power. Sandbox only. -block.power-source.description = Infinitely outputs power. Sandbox only. -block.power-void.description = Voids all power inputted into it. Sandbox only. -liquid.water.description = Commonly used for cooling machines and waste processing. -liquid.oil.description = Can be burnt, exploded or used as a coolant. -liquid.cryofluid.description = The most efficient liquid for cooling things down. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. +block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. +block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. +block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. +block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 623210a1d7..1f1b30aeef 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -4,6 +4,7 @@ contributors = Tłumacze i pomocnicy discord = Odwiedź nasz serwer Discord! link.discord.description = Oficjalny serwer Discord Mindustry link.github.description = Kod Gry +link.changelog.description = List of update changes 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 @@ -32,7 +33,6 @@ level.mode = Tryb gry: showagain = Nie pokazuj tego więcej coreattack = < Rdzeń jest atakowany! > nearpoint = [[ [scarlet]OPUŚĆ PUNKT ZRZUTU NATYCHMIAST[] ]\n unicestwienie nadchodzi -outofbounds = [[ POZA GRANICAMI ]\n[]samozniszcenie za {0} sekund database = Centralna baza danych savegame = Zapisz Grę loadgame = Wczytaj grę @@ -95,7 +95,6 @@ server.admins = Admini server.admins.none = Nie znaleziono adminów! server.add = Dodaj serwer server.delete = Czy na pewno chcesz usunąć ten serwer? -server.hostname = Host: {0} server.edit = Edytuj serwer server.outdated = [crimson]Przestarzały serwer![] server.outdated.client = [crimson]Przestarzały klient![] @@ -156,13 +155,6 @@ openlink = Otwórz link copylink = Kopiuj link back = Wróć quit.confirm = Czy na pewno chcesz wyjść? -changelog.title = Lista Zmian -changelog.loading = Pobieranie listy zmian... -changelog.error.android = [accent]Notka: lista zmian czasami nie działa na Androidzie 4.4 i w dół!\nJest to spowodowane przez błąd Androida. -changelog.error.ios = [accent]Lista zmian nie jest wspierana przez IOS. -changelog.error = [scarlet]Błąd podczas pobierania listy zmian!\nSprawdź połączenie z internetem. -changelog.current = [yellow][[Twoja wersja] -changelog.latest = [accent][[Najnowsza wersja] loading = [accent]Ładowanie... saving = [accent]Zapisywanie... wave = [accent]Fala {0} @@ -192,7 +184,9 @@ editor.author = Autor: editor.description = Opis: editor.waves = Fale: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edytuj w grze +editor.newmap = New Map waves.title = Fale waves.remove = Usuń waves.never = @@ -214,7 +208,6 @@ editor.name = Nazwa: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Drużyny -editor.elevation = Poziom terenu editor.errorload = Błąd podczas ładowania pliku:\n[accent]{0} editor.errorsave = Błąd podczas zapisywania pliku:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -252,7 +245,6 @@ editor.mapname = Nazwa mapy: editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy. editor.overwrite.confirm = [scarlet]Uwaga![] Mapa pod tą nazwą już istnieje. Jesteś pewny, że chcesz ją nadpisać? editor.selectmap = Wybierz mapę do załadowania: - toolmode.replace = Replace toolmode.replace.description = Draws only on solid blocks. toolmode.replaceall = Replace All @@ -270,8 +262,14 @@ toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]Brak filtrów! Dodaj jeden za pomocą przycisku poniżej. filter.distort = Distort filter.noise = Szum +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Ruda filter.rivernoise = Szum rzeki +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Zozprosz filter.terrain = Teren filter.option.scale = Skala @@ -281,19 +279,21 @@ filter.option.threshold = Próg filter.option.circle-scale = Skala koła filter.option.octaves = Oktawy filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Blok filter.option.floor = Podłoga +filter.option.flooronto = Target Floor filter.option.wall = Ściana filter.option.ore = Ruda filter.option.floor2 = Druga podłoga filter.option.threshold2 = Secondary Threshold filter.option.radius = Zasięg filter.option.percentile = Percentile - width = Szerokość: height = Wysokość: menu = Menu play = Graj +campaign = Campaign load = Wczytaj save = Zapisz fps = FPS: {0} @@ -324,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]Strefa {0} odblokowana. zone.requirement.complete = Fala {0} osiągnięta:\n{1} Wymagania strefy zostały spełnione. zone.config.complete = Fala {0} osiągnięta:\nKonfiguracja ładunku odblokowana. zone.resources = Wykryte Zasoby: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Dodaj... boss.health = Boss Health connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0} @@ -335,6 +338,7 @@ error.alreadyconnected = Jesteś już połączony. error.mapnotfound = Plik mapy nie został znaleziony! error.io = Błąd siecowy I/O. error.any = Nieznany błąd sieci. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Wybuch Lądowy zone.desertWastes.name = Desert Wastes zone.craters.name = Kratery @@ -346,6 +350,21 @@ zone.nuclearComplex.name = Centrum Wyrobu Jądrowego zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields zone.saltFlats.name = Salt Flats [scarlet][[WIP] +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Język settings.reset = Przywróć domyślne settings.rebind = Zmień @@ -364,12 +383,14 @@ no = Nie ma mowy! info.title = Informacje error.title = [crimson]Wystąpił błąd error.crashtitle = Wystąpił błąd +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Wejście blocks.output = Wyjście blocks.booster = Wzmacniacz block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Pojemność mocy blocks.powershot = moc/strzał +blocks.damage = Damage blocks.targetsair = Namierzanie wrogów powietrznych blocks.targetsground = Namierzanie wrogów lądowych blocks.itemsmoved = Prędkość poruszania się @@ -445,9 +466,11 @@ setting.animatedshields.name = Animowana Tarcza setting.antialias.name = Antialias[LIGHT_GRAY] (wymaga restartu)[] setting.indicators.name = Wskaźniki Przyjaciół setting.autotarget.name = Automatyczne Celowanie +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Maksymalny FPS setting.fpscap.none = Nieograniczone setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Pozwala na ukośne stawianie setting.difficulty.training = trening setting.difficulty.easy = łatwy @@ -474,7 +497,11 @@ setting.mutesound.name = Wycisz dźwięki setting.crashreport.name = Wysyłaj anonimowo dane o crashu gry setting.chatopacity.name = Przezroczystość czatu setting.playerchat.name = Wyświetlaj czat w grze +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Zmień +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Ogólne category.view.name = Wyświetl category.multiplayer.name = Multiplayer @@ -523,6 +550,7 @@ mode.custom = Własny tryb rules.infiniteresources = Nieskończone zasoby rules.wavetimer = Zegar fal rules.waves = Fale +rules.attack = Attack Mode rules.enemyCheat = Nieskończone zasoby komputera-przeciwnika (czerwonego zespołu) rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Mnożnik Prędkości Tworzenia Jednostek @@ -551,37 +579,21 @@ content.unit.name = Jednostki content.block.name = Klocki content.mech.name = Mechs item.copper.name = Miedź -item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji. item.lead.name = Ołów -item.lead.description = Podstawowy matriał. Używany w przesyle przemiotów i płynów. Nie jest on przypadkiem szkodliwy? item.coal.name = Węgiel -item.coal.description = Zwykły i łatwo dostępny materiał energetyczny. item.graphite.name = Grafit -item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. item.titanium.name = Tytan -item.titanium.description = Rzadki i bardzo lekki materiał. Używany w bardzo zaawansowanym przewodnictwie, wiertłach i samolotach. Poczuj się jak Tytan! item.thorium.name = Uran -item.thorium.description = Zwarty i radioaktywny materiał używany w struktucrach i paliwie nuklearnym. Nie trzymaj go w rękach! item.silicon.name = Krzem -item.silicon.description = Niesamowicie przydatny półprzewodnk uźywany w panelach słonecznych i skomplikowanej elektronice. Nie, w Dolinie Krzemowej już nie ma krzemu. item.plastanium.name = Plastan -item.plastanium.description = Lekki i plastyczny materiał używany w amunicji odłamkowej i samolotach. Używany też w klockach LEGO (dlatego są niezniszczalne)! item.phase-fabric.name = Włókno Fazowe -item.phase-fabric.description = Niewiarygodnie lekkie włókno używane w zaawansowanej elektronice i technologii samo-naprawiającej się. item.surge-alloy.name = Energetyczny Stop -item.surge-alloy.description = Zaawansowany materiał z niesłychanymi wartościami energetycznymi. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Piasek -item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne. item.blast-compound.name = Wybuchowy związek -item.blast-compound.description = Lotny związek używany w pirotechnice. Może być używany jako materiał energetyczny, ale nie polecam. BOOOM! item.pyratite.name = Piratian -item.pyratite.description = Niesamowicie palny związek używany w zbrojeniu. Nielegalny w 9 państwach. item.metaglass.name = Metaszkło -item.metaglass.description = Niesamowite silne szkło. Szeroko używane w transporcie i przechowywaniu płynów. item.scrap.name = Resztki -item.scrap.description = Pozostałości starych budynków i jednostek. Składa się z małej ilości wszystkiego. liquid.water.name = Woda liquid.slag.name = Slag liquid.oil.name = Ropa @@ -589,31 +601,23 @@ liquid.cryofluid.name = Lodociecz mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Ciężki Karabin mech.alpha-mech.ability = Chmara Dronòw -mech.alpha-mech.description = Standardowy mech. Średnia broń i prędkość, leć potrafi stworzyć trzy małe drony do walki. mech.delta-mech.name = Delta mech.delta-mech.weapon = Generator Piorunów mech.delta-mech.ability = Rozładunek -mech.delta-mech.description = Szybki i wrażliwy mech stworzony do szybkih ataków i ucieczki. Budynką robi prawie nic, leć jest wstanie szybko rozwalić grupę wrogich jednostek piorunami. mech.tau-mech.name = Tau mech.tau-mech.weapon = Laser Odbudowy mech.tau-mech.ability = Wybuch Naprawy -mech.tau-mech.description = Mech pomocny. Naprawia budynki drużyny, strzelając w nie. Potrafi wygasić niedalekie pożary i uleczyć bliskich przyjaciół. mech.omega-mech.name = Omega mech.omega-mech.weapon = Rakiety Chmarowe mech.omega-mech.ability = Układ Obronny -mech.omega-mech.description = Duży i silny mech, zaprojektowany na ataki. Jego zdolność pozwala mu na zablokowanie do 90% zagrożeń. mech.dart-ship.name = Strzałka mech.dart-ship.weapon = Karabin -mech.dart-ship.description = Standardowy statek. Lekki i szybki, ale jest kiepski jak chodzi o walkę i kopanie. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = Statek do ataku i szybkiej ucieczki. Zaczyna powoli, ale przyspiesza do wielkiej prędkości. Przy tej prędkości, może przelecieć koło wrogiej bazy i atakować piorunami czy rakietami. mech.javelin-ship.weapon = Seria Rakiet mech.javelin-ship.ability = Dopalacze Prądowe mech.trident-ship.name = Trójząb -mech.trident-ship.description = Ciężki bombowiec. Dobrze uzbrojony. mech.trident-ship.weapon = Wnęka bombowa mech.glaive-ship.name = Glewia -mech.glaive-ship.description = Duży, uzbrojony statek. Dobra prędkość i przyspieszenie. Ma ognisty karabin. mech.glaive-ship.weapon = Zapalający Karabin item.explosiveness = [LIGHT_GRAY]Wybuchowość: {0} item.flammability = [LIGHT_GRAY]Palność: {0} @@ -630,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Wytrzymałość na przegrzewanie: {0} liquid.viscosity = [LIGHT_GRAY]Lepkość: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Trawa block.salt.name = Sól block.saltrocks.name = Skały Solne @@ -640,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Skały block.snowrock.name = Skały śnieżne +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Mech @@ -652,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Wypalarka -block.kiln.description = Stapia ołów i piasek na metaszkło. Wymaga małej ilości energii. block.graphite-press.name = Grafitowa Prasa block.multi-press.name = Multi-Prasa block.constructing = {0} [LIGHT_GRAY](Budowa) @@ -721,9 +726,7 @@ block.junction.name = Węzeł block.router.name = Rozdzielacz block.distributor.name = Dystrybutor block.sorter.name = Sortownik -block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki. block.overflow-gate.name = Brama Przeciwprzepełnieniowa -block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona block.silicon-smelter.name = Huta Krzemu block.phase-weaver.name = Fazowa Fabryka block.pulverizer.name = Rozkruszacz @@ -814,7 +817,6 @@ block.spectre.name = Huragan block.meltdown.name = Meltdown block.container.name = Kontener block.launch-pad.name = Skocznia -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Duża skocznia team.blue.name = niebieski team.red.name = czerwony @@ -824,20 +826,13 @@ team.green.name = zielony team.purple.name = fioletowy unit.spirit.name = Duch unit.draug.name = Draug Miner Drone -unit.spirit.description = Początkowy dron. Rdzeń zawsze tworzy jeden. Wydobywa surowce, naprawia budynki oraz pomaga przy budowie. unit.phantom.name = Widmo -unit.phantom.description = Zaawansowany dron. Wydobywa surowce, naprawia budynki oraz pomaga przy budowie szybciej niż dron Duch. unit.dagger.name = Nóż -unit.dagger.description = Podstawowy mech lądowy. Sam jest słaby, lecz przydatny w dużych ilościach. unit.crawler.name = Pełzak unit.titan.name = Tytan -unit.titan.description = Bardziej zaawansowany mech lądowy. Atakuje cele lądowe i niebne. unit.ghoul.name = Upiór -unit.ghoul.description = Ciężki bombowiec. unit.wraith.name = Zjawa -unit.wraith.description = Szybka jednostka do ataku i ucieczki. unit.fortress.name = Fortreca -unit.fortress.description = Wielka jednostka artyleryjna lądowa. unit.revenant.name = Potwór unit.eruptor.name = Wysadzać unit.chaos-array.name = Kolejka Chaosu @@ -847,7 +842,7 @@ unit.reaper.name = Żeniec tutorial.begin = Twoją misją jest zniszczenie[LIGHT_GRAY] wrogów[].\n\nZacznij od[accent] wydobycia miedzi[]. Kliknij na rudę miedzi w pobliżu swojego rdzenia, aby to zrobić. tutorial.drill = Kopanie ręcznie nie jest efektywne.\n[accent]Wiertła []mogą kopać automatycznie.\nPostaw je na rudzie miedzi. tutorial.conveyor = [accent]Transportery[] są używane do przenoszenia przedmiotów do rdzenia.\nZrób linię z transporterów z wiertła do rdzenia. -tutorial.morecopper = Potrzebne jest więcej miedzi!\n\Kop ręcznie, albo postaw więcej wierteł. +tutorial.morecopper = Potrzebne jest więcej miedzi!\nKop ręcznie, albo postaw więcej wierteł. tutorial.turret = Struktury obronne muszą być wybudowane, aby odpychać [LIGHT_GRAY] wrogów[].\nZbuduj podwójne działko niedaleko swojej bazy. tutorial.drillturret = Podwójne działko wymaga[accent] miedzi []jako amunicji, aby strzelać.\nPostaw wiertło obok działka, aby zaopatrzyć je w miedź. tutorial.waves = The[LIGHT_GRAY] Wrogowie[] nadciągają.\n\nObroń swój rdzeń przez dwie fale. Wybuduj więcej działek. @@ -865,8 +860,74 @@ tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. +item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji. +item.lead.description = Podstawowy matriał. Używany w przesyle przemiotów i płynów. Nie jest on przypadkiem szkodliwy? +item.metaglass.description = Niesamowite silne szkło. Szeroko używane w transporcie i przechowywaniu płynów. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne. +item.coal.description = Zwykły i łatwo dostępny materiał energetyczny. +item.titanium.description = Rzadki i bardzo lekki materiał. Używany w bardzo zaawansowanym przewodnictwie, wiertłach i samolotach. Poczuj się jak Tytan! +item.thorium.description = Zwarty i radioaktywny materiał używany w struktucrach i paliwie nuklearnym. Nie trzymaj go w rękach! +item.scrap.description = Pozostałości starych budynków i jednostek. Składa się z małej ilości wszystkiego. +item.silicon.description = Niesamowicie przydatny półprzewodnk uźywany w panelach słonecznych i skomplikowanej elektronice. Nie, w Dolinie Krzemowej już nie ma krzemu. +item.plastanium.description = Lekki i plastyczny materiał używany w amunicji odłamkowej i samolotach. Używany też w klockach LEGO (dlatego są niezniszczalne)! +item.phase-fabric.description = Niewiarygodnie lekkie włókno używane w zaawansowanej elektronice i technologii samo-naprawiającej się. +item.surge-alloy.description = Zaawansowany materiał z niesłychanymi wartościami energetycznymi. +item.spore-pod.description = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = Lotny związek używany w pirotechnice. Może być używany jako materiał energetyczny, ale nie polecam. BOOOM! +item.pyratite.description = Niesamowicie palny związek używany w zbrojeniu. Nielegalny w 9 państwach. +liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów. +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 = Może się palić, eksplodować lub być używana do schładzania. +liquid.cryofluid.description = Najefektywniejsza ciecz do schładzania budowli. +mech.alpha-mech.description = Standardowy mech. Średnia broń i prędkość, leć potrafi stworzyć trzy małe drony do walki. +mech.delta-mech.description = Szybki i wrażliwy mech stworzony do szybkih ataków i ucieczki. Budynką robi prawie nic, leć jest wstanie szybko rozwalić grupę wrogich jednostek piorunami. +mech.tau-mech.description = Mech pomocny. Naprawia budynki drużyny, strzelając w nie. Potrafi wygasić niedalekie pożary i uleczyć bliskich przyjaciół. +mech.omega-mech.description = Duży i silny mech, zaprojektowany na ataki. Jego zdolność pozwala mu na zablokowanie do 90% zagrożeń. +mech.dart-ship.description = Standardowy statek. Lekki i szybki, ale jest kiepski jak chodzi o walkę i kopanie. +mech.javelin-ship.description = Statek do ataku i szybkiej ucieczki. Zaczyna powoli, ale przyspiesza do wielkiej prędkości. Przy tej prędkości, może przelecieć koło wrogiej bazy i atakować piorunami czy rakietami. +mech.trident-ship.description = Ciężki bombowiec. Dobrze uzbrojony. +mech.glaive-ship.description = Duży, uzbrojony statek. Dobra prędkość i przyspieszenie. Ma ognisty karabin. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = Początkowy dron. Rdzeń zawsze tworzy jeden. Wydobywa surowce, naprawia budynki oraz pomaga przy budowie. +unit.phantom.description = Zaawansowany dron. Wydobywa surowce, naprawia budynki oraz pomaga przy budowie szybciej niż dron Duch. +unit.dagger.description = Podstawowy mech lądowy. Sam jest słaby, lecz przydatny w dużych ilościach. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Bardziej zaawansowany mech lądowy. Atakuje cele lądowe i niebne. +unit.fortress.description = Wielka jednostka artyleryjna lądowa. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Szybka jednostka do ataku i ucieczki. +unit.ghoul.description = Ciężki bombowiec. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 highly pure coal in order to produce silicon. +block.kiln.description = Stapia ołów i piasek na metaszkło. Wymaga małej ilości energii. +block.plastanium-compressor.description = Produces plastanium from oil and titanium. +block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. +block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. +block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. +block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive 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 turrets. +block.separator.description = Extracts useful minerals from slag. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Crushes scrap into sand. Useful when there is a lack of natural sand. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Gets rid of any excess item or liquid. +block.power-void.description = Niszczy całą energię wprowadzoną do tego bloku. Dostępny tylko w trybie sandbox. +block.power-source.description = Wydziela prąd w nieskończoność. Dostępny tylko w trybie sandbox. +block.item-source.description = Wydziela przedmioty w nieskończoność. Dostępny tylko w trybie sandbox. +block.item-void.description = Niszczy wszystkie przedmioty, które idą do tego bloku, który nie wymaga prądu. Dostępny tylko w trybie sandbox. +block.liquid-source.description = Wydziela ciecz w nieskończoność. Dostępny tylko w trybie sandbox. block.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.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. @@ -875,54 +936,45 @@ block.surge-wall.description = The strongest defensive block.\nHas a small chanc block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\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 = Periodically heals blocks in its vicinity. block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.duo.description = A small, cheap turret. Useful against ground units. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = A small close-range turret which shoots electricity in a random arc towards the enemy. -block.hail.description = A small artillery turret. -block.lancer.description = A medium-sized turret which shoots charged electricity beams. -block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. -block.salvo.description = A medium-sized turret which fires shots in salvos. -block.swarmer.description = A medium-sized turret which shoots burst missiles. -block.ripple.description = A large artillery turret which fires several shots simultaneously. -block.cyclone.description = A large rapid fire turret. -block.fuse.description = A large turret which shoots powerful short-range beams. -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.conveyor.description = Basic item transport block. Moves items forward and automatically deposits them into turrets or crafters. Rotatable. block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. 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 = Zaawansowany blok transportujący. Pozwala na przenoszenie przedmiotów nawet do 3 bloków na każdym terenie, przez każdy budynek. +block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. +block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki. +block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów. +block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków. +block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. -block.silicon-smelter.description = Reduces sand with highly pure coal in order to produce silicon. -block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. -block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. -block.pulverizer.description = Crushes scrap into sand. Useful when there is a lack of natural sand. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. -block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. -block.melter.description = Melts down scrap into slag for further processing or usage in turrets. -block.incinerator.description = Gets rid of any excess item or liquid. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Extracts useful minerals from slag. +block.mechanical-pump.description = Tania pompa o niskiej przepustowości. Nie wymaga prądu. +block.rotary-pump.description = Zaawansowana pompa, dwukrotnie większa przepustowość od mechanicznej pompy. Wymaga prądu. +block.thermal-pump.description = Najlepsza pompa. Trzy razy szybsza od mechanicznej pompy i jedyna, która może wypompować lawę. +block.conduit.description = Podstawowy blok do przenoszenia cieczy. Działa jak transporter, ale na ciecze. Najlepiej używać z ekstraktorami wody, pompami lub innymi rurami. +block.pulse-conduit.description = Zaawansowany blok do przenoszenia cieczy. Transportuje je szybciej i magazynuje więcej niż standardowe rury. +block.liquid-router.description = Akceptuje płyny z jednego kierunku i wyprowadza je do trzech innych kierunków jednakowo. Może również przechowywać pewną ilość płynu. Przydatne do dzielenia płynów z jednego źródła na wiele celów. +block.liquid-tank.description = Magazynuje ogromne ilości cieczy. Użyj go do stworzenia buforu, gdy występuje różne zapotrzebowanie na materiały lub jako zabezpieczenie dla chłodzenia ważnych bloków. +block.liquid-junction.description = Działa jak most dla dwóch krzyżujących się rur. Przydatne w sytuacjach, kiedy dwie rury mają różne ciecze do różnych lokacji. +block.bridge-conduit.description = Zaawansowany blok przenoszący ciecze. Pozwala na przenoszenie cieczy nawet do 3 bloków na każdym terenie, przez każdy budynek. +block.phase-conduit.description = Zaawansowany blok do przenoszenia cieczy. Używa prądu, aby przenieść ciecz do połączonego transportera fazowego przez kilka bloków. block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left. block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning oil or flammable materials. -block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.thermal-generator.description = Generates power when placed in hot locations. +block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build. block.thorium-reactor.description = Generates huge amounts of power from highly radioactive 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.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. -block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. -block.container.description = Stores a small amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. -block.vault.description = Stores a large amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +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. block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. @@ -930,39 +982,43 @@ block.blast-drill.description = The ultimate drill. Requires large amounts of po block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.cultivator.description = Cultivates tiny concentrations of spores into industry-ready pods. block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby. -block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. -block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. -block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. -block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. -block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. -block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +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[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +block.container.description = Stores a small amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. +block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = A small, cheap turret. Useful against ground units. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = A small artillery turret. +block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. +block.lancer.description = A medium-sized turret which shoots charged electricity beams. +block.arc.description = A small close-range turret which shoots electricity in a random arc towards the enemy. +block.swarmer.description = A medium-sized turret which shoots burst missiles. +block.salvo.description = A medium-sized turret which fires shots in salvos. +block.fuse.description = A large turret which shoots powerful short-range beams. +block.ripple.description = A large artillery turret which fires several shots simultaneously. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.ghoul-factory.description = Produces heavy carpet bombers. +block.revenant-factory.description = Produces heavy laser air units. block.dagger-factory.description = Produces basic ground units. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produces advanced, armored ground units. block.fortress-factory.description = Produces heavy artillery ground units. -block.revenant-factory.description = Produces heavy laser air units. block.repair-point.description = Bez przerw ulecza najbliższą zniszczoną jednostkę w jego zasięgu. -block.conduit.description = Podstawowy blok do przenoszenia cieczy. Działa jak transporter, ale na ciecze. Najlepiej używać z ekstraktorami wody, pompami lub innymi rurami. -block.pulse-conduit.description = Zaawansowany blok do przenoszenia cieczy. Transportuje je szybciej i magazynuje więcej niż standardowe rury. -block.phase-conduit.description = Zaawansowany blok do przenoszenia cieczy. Używa prądu, aby przenieść ciecz do połączonego transportera fazowego przez kilka bloków. -block.liquid-router.description = Akceptuje płyny z jednego kierunku i wyprowadza je do trzech innych kierunków jednakowo. Może również przechowywać pewną ilość płynu. Przydatne do dzielenia płynów z jednego źródła na wiele celów. -block.liquid-tank.description = Magazynuje ogromne ilości cieczy. Użyj go do stworzenia buforu, gdy występuje różne zapotrzebowanie na materiały lub jako zabezpieczenie dla chłodzenia ważnych bloków. -block.liquid-junction.description = Działa jak most dla dwóch krzyżujących się rur. Przydatne w sytuacjach, kiedy dwie rury mają różne ciecze do różnych lokacji. -block.bridge-conduit.description = Zaawansowany blok przenoszący ciecze. Pozwala na przenoszenie cieczy nawet do 3 bloków na każdym terenie, przez każdy budynek. -block.mechanical-pump.description = Tania pompa o niskiej przepustowości. Nie wymaga prądu. -block.rotary-pump.description = Zaawansowana pompa, dwukrotnie większa przepustowość od mechanicznej pompy. Wymaga prądu. -block.thermal-pump.description = Najlepsza pompa. Trzy razy szybsza od mechanicznej pompy i jedyna, która może wypompować lawę. -block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów. -block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków. -block.bridge-conveyor.description = Zaawansowany blok transportujący. Pozwala na przenoszenie przedmiotów nawet do 3 bloków na każdym terenie, przez każdy budynek. -block.item-source.description = Wydziela przedmioty w nieskończoność. Dostępny tylko w trybie sandbox. -block.liquid-source.description = Wydziela ciecz w nieskończoność. Dostępny tylko w trybie sandbox. -block.item-void.description = Niszczy wszystkie przedmioty, które idą do tego bloku, który nie wymaga prądu. Dostępny tylko w trybie sandbox. -block.power-source.description = Wydziela prąd w nieskończoność. Dostępny tylko w trybie sandbox. -block.power-void.description = Niszczy całą energię wprowadzoną do tego bloku. Dostępny tylko w trybie sandbox. -liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów. -liquid.oil.description = Może się palić, eksplodować lub być używana do schładzania. -liquid.cryofluid.description = Najefektywniejsza ciecz do schładzania budowli. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. +block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. +block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. +block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. +block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 0c32fa22d9..e062e9ee4a 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -4,6 +4,7 @@ contributors = Tradutores e contribuidores discord = Junte-se ao Discord do Mindustry! (Lá nós falamos em inglês) link.discord.description = O discord oficial do Mindustry link.github.description = Codigo fonte do jogo. +link.changelog.description = List of update changes link.dev-builds.description = Desenvolvimentos Instaveis link.trello.description = Trello Oficial para Updates Planejados link.itch.io.description = Pagina da Itch.io com os Downloads @@ -32,7 +33,6 @@ level.mode = Modo de Jogo: showagain = Não mostrar na proxima sessão coreattack = < O núcleo está sobre ataque! > nearpoint = [[ [scarlet]SAIA DO PONTO DE SPAWN IMEDIATAMENTE[] ]\nANIQUILAÇÃO IMINENTE -outofbounds = [[ OUT OF BOUNDS ]\n[]auto destruição em {0} database = banco do núcleo savegame = Salvar Jogo loadgame = Carregar Jogo @@ -95,7 +95,6 @@ server.admins = Administradores server.admins.none = Nenhum administrador encontrado! server.add = Adicionar servidor server.delete = Certeza que quer deletar o servidor? -server.hostname = Hospedar: {0} server.edit = Editar servidor server.outdated = [crimson]Servidor desatualizado![] server.outdated.client = [crimson]Cliente desatualizado![] @@ -156,13 +155,6 @@ openlink = Abrir Link copylink = Copiar link back = Voltar quit.confirm = Você tem certeza que quer sair? -changelog.title = registro de Mudanças -changelog.loading = Coletando o registro... -changelog.error.android = [accent]Note que o registro as vezes Funciona no android 4.4 e abaixo!\nIsso é por causa de um erro interno no sistema android. -changelog.error.ios = [accent]A registro não é suportada no IOS. -changelog.error = [scarlet]Erro ao coletar o registro!\nCheque a Conexão com a internet. -changelog.current = [yellow][[Primeira versão] -changelog.latest = [accent][[Ultima versão] loading = [accent]Carregando... saving = [accent]Salvando... wave = [accent]Horda {0} @@ -192,7 +184,9 @@ editor.author = Autor: editor.description = Descrição: editor.waves = Ondas: editor.rules = Regras: +editor.generation = Generation: editor.ingame = Editar em-jogo +editor.newmap = New Map waves.title = Hordas waves.remove = Remover waves.never = @@ -207,13 +201,13 @@ waves.copy = Copiar para área de transferência waves.load = carregar da área de transferência waves.invalid = Ondas inválidas na área de transferência. waves.copied = Ondas copiadas. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Editar... editor.name = Nome: editor.spawn = Criar unidade editor.removeunit = Remover unidade editor.teams = Time -editor.elevation = Elevação editor.errorload = Erro carregando arquivo:\n[accent]{0} editor.errorsave = Erro salvando arquivo:\n[accent]{0} editor.errorimage = Isso é uma imagem, Não um mapa. Não vá por aí mudando extensões esperando que funcione.\n\nSe você quer importar um mapa legacy, Use o botão 'Importar mapa legacy'no editor. @@ -251,11 +245,31 @@ editor.mapname = Nome do Mapa: editor.overwrite = [accent]Aviso!\nIsso Subistitui um mapa existente. editor.overwrite.confirm = [scarlet]Aviso![] Um mapa com esse nome já existe. Tem certeza que deseja substituir? editor.selectmap = Selecione uma mapa para carregar: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]Sem filtro! Adicione um usando o botão abaixo. filter.distort = Distorcedor filter.noise = Ruído +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Minério filter.rivernoise = Ruído para rios +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Dispersão filter.terrain = Terreno filter.option.scale = Escala @@ -265,8 +279,10 @@ filter.option.threshold = Margem filter.option.circle-scale = Escala de círculo filter.option.octaves = Oitavas filter.option.falloff = Caída +filter.option.angle = Angle filter.option.block = Bloco filter.option.floor = Chão +filter.option.flooronto = Target Floor filter.option.wall = Parede filter.option.ore = Minério filter.option.floor2 = Chão secundário @@ -277,6 +293,7 @@ width = Largura: height = Altura: menu = Menu play = Jogar +campaign = Campaign load = Carregar save = Salvar fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} Desbloqueado. zone.requirement.complete = Onda {0} alcançada:\n{1} Requerimentos da zona alcançada. zone.config.complete = Onda {0} Alcançada:\nLoadout config desbloqueado. zone.resources = Recursos detectados: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Adicionar... boss.health = Saúde do chefe connectfail = [crimson]Falha ao entrar no servidor: [accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Já conectado. error.mapnotfound = Arquivo de mapa não encontrado! error.io = Erro I/O de internet. error.any = Erro de rede desconhecido. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Marco zero zone.desertWastes.name = Perdas do Deserto zone.craters.name = As crateras @@ -328,6 +349,22 @@ zone.desolateRift.name = Fenda desolada zone.nuclearComplex.name = Complexo de construção nuclear zone.overgrowth.name = SobreCrescido zone.tarFields.name = Campos de Tar +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Linguagem settings.reset = Restaurar Padrões settings.rebind = Religar @@ -346,12 +383,14 @@ no = Não info.title = [accent]Informação error.title = [crimson]Ocorreu um Erro. error.crashtitle = Ocorreu um Erro +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Entrada blocks.output = Saida blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Capacidade de Energia blocks.powershot = Energia/tiro +blocks.damage = Damage blocks.targetsair = Mirar no ar blocks.targetsground = Mirar no chão blocks.itemsmoved = Velocidade de movimento @@ -427,9 +466,11 @@ setting.animatedshields.name = Escudos animados setting.antialias.name = Antialias[LIGHT_GRAY] (Requer recomeço)[] setting.indicators.name = Indicador de aliados setting.autotarget.name = Alvo automatico +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = FPS Maximo setting.fpscap.none = Nenhum setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Sempre colocação diagnoal setting.difficulty.training = Treinamento setting.difficulty.easy = Fácil @@ -456,7 +497,11 @@ setting.mutesound.name = Desligar Som setting.crashreport.name = Enviar denuncias de crash anonimas setting.chatopacity.name = Opacidade do chat setting.playerchat.name = Mostrar chat em-jogo +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Refazer teclas +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = Geral category.view.name = Ver category.multiplayer.name = Multijogador @@ -505,6 +550,7 @@ mode.custom = Regras personalizadas rules.infiniteresources = Recursos infinitos rules.wavetimer = Tempo de horda rules.waves = Hordas +rules.attack = Attack Mode rules.enemyCheat = Recursos de IA Infinitos rules.unitdrops = Unidade solta rules.unitbuildspeedmultiplier = Multiplicador de velocidade de criação de unidade @@ -533,36 +579,21 @@ content.unit.name = Unidades content.block.name = Blocos content.mech.name = Mecas item.copper.name = Cobre -item.copper.description = Um material de estrutura util. Usado extensivamente em Maioria dos blocos. item.lead.name = Chumbo -item.lead.description = Material de começo basico. usado intensivamente em Blocos de transporte de liquidos e eletronicos. item.coal.name = Carvão -item.coal.description = Combustivel pronto. item.graphite.name = Graphite item.titanium.name = Titânio -item.titanium.description = Um Material raro super leve, metal usado intensivamente na transportação de líquidos, Brocas e Aeronaves. item.thorium.name = Urânio -item.thorium.description = Um metal denso e radioativo, Usado como suporte material e combustivel nuclear. item.silicon.name = Sílicio -item.silicon.description = Condutor extremamente importante,Com aplicação em paneis solares e dispositivos complexos. item.plastanium.name = Plastanio -item.plastanium.description = Leve, Material dutil Usado em aeronaves Avançadas E munição de fragmentação. item.phase-fabric.name = Fabrica fase -item.phase-fabric.description = Uma substancia quase sem peso Usado em eletronica avançada E tecnologia de auto-reparo. item.surge-alloy.name = Liga de surto -item.surge-alloy.description = Uma liga com propriedades unicas eletricas. item.spore-pod.name = Pod de esporos -item.spore-pod.description = Usado em conversão para oleo, Combustivel e explosivos. item.sand.name = Areia -item.sand.description = Um material comum Que é usado intensivamente em derretimento, Tanto em ligas como fluxo. item.blast-compound.name = Composto de explosão -item.blast-compound.description = Um composto volatil usado em bombas em bombas em explosivos. Enquanto pode ser queimado como combustivel, Isso não é recomendado. item.pyratite.name = piratita -item.pyratite.description = Substancia extremamente inflamavel usado em armas incendiarias. item.metaglass.name = Metavidro -item.metaglass.description = Composto de vidro super-Resistente. Extensivamente usado Para distribuição de líquido e armazem. item.scrap.name = Sucata -item.scrap.description = Pedaços remanescentes de estruturas e unidades destruidas.. Contem traços de diferentes metais. liquid.water.name = Água liquid.slag.name = Slag liquid.oil.name = Petróleo @@ -570,31 +601,23 @@ liquid.cryofluid.name = Crio Fluido mech.alpha-mech.name = Alfa mech.alpha-mech.weapon = Repetidor pesado mech.alpha-mech.ability = Onda de drones -mech.alpha-mech.description = O meca padrão. Tem uma saida de dano e velocidade decente; Pode criar até 3 drones Para capacidades ofensivas aumentadas. mech.delta-mech.name = Delta mech.delta-mech.weapon = Gerador Arc mech.delta-mech.ability = Descarga -mech.delta-mech.description = Um meca rapido, De baixa armadura Feito for para ataques rapidos. Da pouco dano as estruturas, Mas pode matar grandes grupos de unidades inimigas muito rapidamente Com sua arma ARC. mech.tau-mech.name = Tau mech.tau-mech.weapon = Laser restruturador mech.tau-mech.ability = Tiro reparador -mech.tau-mech.description = O meca de suporte. Conserta blocos aliados Atirando neles. Pode extinguir o fogo e consertar aliados em uma distancia Com sua habilidade de consertar. mech.omega-mech.name = Omega mech.omega-mech.weapon = Onda de missies mech.omega-mech.ability = Configuração Armadurada -mech.omega-mech.description = Um meca volumoso e bem armadurado, Feito para assaltos da primeira linha. Sua habilidade de armadura Pode bloquear 90% de dano. mech.dart-ship.name = Dardo mech.dart-ship.weapon = Repetidor -mech.dart-ship.description = Nave padrão. Consideravelmente leve e rapido, Tem pouca capacidade ofensiva E baixa velocidade de mineração. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = Uma nave de espinhos de atacar e correr. Quando inicialmente lento, pode acelerar a altas velocidades e voar até bases inimigas, Dando altas quantidades de dano Com seus raios e habilidades. mech.javelin-ship.weapon = Ondas de misseis mech.javelin-ship.ability = Acelerador de explosão mech.trident-ship.name = Tridente -mech.trident-ship.description = Um bombardeiro pesado. Consideravelmente bem armadurado. mech.trident-ship.weapon = Carga de bombas mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Uma nave armada, bem armadurada. Com um repetidor incendario equipado. Boa aceleração e maxima velocidade. mech.glaive-ship.weapon = Repetidor de fogo item.explosiveness = [LIGHT_GRAY]Explosividade: {0} item.flammability = [LIGHT_GRAY]Inflamabilidade: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Velocidade de construção: {0}% liquid.heatcapacity = [LIGHT_GRAY]Capacidade de aquecimento: {0} liquid.viscosity = [LIGHT_GRAY]Viscosidade: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grama block.salt.name = Sal block.saltrocks.name = Pedras De Sal @@ -621,6 +645,7 @@ block.spore-pine.name = Pinheiro de esporo block.sporerocks.name = Pedras de esporo block.rock.name = Pedra block.snowrock.name = Pedra de gelo +block.snow-pine.name = Snow Pine block.shale.name = Xisto block.shale-boulder.name = Pedra de xisto block.moss.name = Musgo @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Parede de sucata Maior block.scrap-wall-gigantic.name = Muro de sucata gigante block.thruster.name = Propulsor block.kiln.name = Kiln -block.kiln.description = Derrete chumbo e areia em Metavidro. Requer pequenas quantidades de energia. block.graphite-press.name = Prensa de grafite block.multi-press.name = Multi-Prensa block.constructing = {0}\n[LIGHT_GRAY](Construindo) @@ -702,9 +726,7 @@ block.junction.name = Junção block.router.name = Roteador block.distributor.name = Distribuidor block.sorter.name = Ordenador -block.sorter.description = [interact]Aperte no bloco para configurar[] block.overflow-gate.name = Portão Sobrecarregado -block.overflow-gate.description = Uma combinação de roteador e divisor Que apenas manda para a esquerda e Direita se a frente estiver bloqueada. block.silicon-smelter.name = Fundidora de silicio block.phase-weaver.name = Palheta de fase block.pulverizer.name = Pulverizador @@ -756,6 +778,7 @@ block.blast-mixer.name = Misturador de Explosão block.solar-panel.name = Painel Solar block.solar-panel-large.name = Painel Solar Grande block.oil-extractor.name = Extrator de Óleo +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Fabrica de Drone Spirit block.phantom-factory.name = Fabrica de Drone Phantom block.wraith-factory.name = Fabrica de Drone Wraith @@ -794,7 +817,6 @@ block.spectre.name = Espectra block.meltdown.name = Derreter block.container.name = Container block.launch-pad.name = Plataforma de lançamento -block.launch-pad.description = Lança montes de itens sem qualquer necessidade de um lançamento de nucleo. Não completo. block.launch-pad-large.name = Plataforma de lançamento grande team.blue.name = Azul team.red.name = Vermelho @@ -803,20 +825,14 @@ team.none.name = Cinza team.green.name = Verde team.purple.name = Roxo unit.spirit.name = Drone Spirit -unit.spirit.description = A unidade de drone inicial. Ele nasce no core por padrão. Minera minérios automaticamente, Coleta itens e repara blocos. +unit.draug.name = Draug Miner Drone unit.phantom.name = Drone Phantom -unit.phantom.description = Uma unidade de drone avançada. Minera minérios automaticamente, Coleta itens e repara blocos automaticamente. Significantemente mais efetiva. unit.dagger.name = Dagger -unit.dagger.description = Unidade terrestre basica, Forte em grupos. unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = Uma unidade armadurada terreste avancada. Usa carbide como munição. Ataca ambas as unidades de Aereas e terrestres. unit.ghoul.name = Bombardeiro Ghoul -unit.ghoul.description = Um bombardeiro pesado. Usa composto de explosão Ou piratite como munição. unit.wraith.name = Lutador Wraith -unit.wraith.description = Uma unidade rapida, Interceptadora de bater e correr. unit.fortress.name = Fortaleza -unit.fortress.description = Uma unidade pesada de artilharia terrestre. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Arraia do caos @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construa uma[accent] Fabrica do meca Dagger.[]\n\nIsso tutorial.router = Fabricas precisam de recursos pra construir\nCrie um roteador para espalhadar recursos da esteira. tutorial.dagger = Ligue os nodos de energia a fabrica.\nQuando os requerimentos forem alcançados, Um meca vai ser criado.\n\nCrie mais mineradoras, geradoras e esteiras se necessario. tutorial.battle = O[LIGHT_GRAY] Inimigo[] revelou seu core.\nDestrua com sua unidade e Dagger's. +item.copper.description = Um material de estrutura util. Usado extensivamente em Maioria dos blocos. +item.lead.description = Material de começo basico. usado intensivamente em Blocos de transporte de liquidos e eletronicos. +item.metaglass.description = Composto de vidro super-Resistente. Extensivamente usado Para distribuição de líquido e armazem. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = Um material comum Que é usado intensivamente em derretimento, Tanto em ligas como fluxo. +item.coal.description = Combustivel pronto. +item.titanium.description = Um Material raro super leve, metal usado intensivamente na transportação de líquidos, Brocas e Aeronaves. +item.thorium.description = Um metal denso e radioativo, Usado como suporte material e combustivel nuclear. +item.scrap.description = Pedaços remanescentes de estruturas e unidades destruidas.. Contem traços de diferentes metais. +item.silicon.description = Condutor extremamente importante,Com aplicação em paneis solares e dispositivos complexos. +item.plastanium.description = Leve, Material dutil Usado em aeronaves Avançadas E munição de fragmentação. +item.phase-fabric.description = Uma substancia quase sem peso Usado em eletronica avançada E tecnologia de auto-reparo. +item.surge-alloy.description = Uma liga com propriedades unicas eletricas. +item.spore-pod.description = Usado em conversão para oleo, Combustivel e explosivos. +item.blast-compound.description = Um composto volatil usado em bombas em bombas em explosivos. Enquanto pode ser queimado como combustivel, Isso não é recomendado. +item.pyratite.description = Substancia extremamente inflamavel usado em armas incendiarias. +liquid.water.description = Comumente usado em resfriamento e no processo de perda. +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 = Pode ser queimado, explodido ou usado como resfriador. +liquid.cryofluid.description = A maneira mais eficiente de resfriar qualquer coisa. +mech.alpha-mech.description = O meca padrão. Tem uma saida de dano e velocidade decente; Pode criar até 3 drones Para capacidades ofensivas aumentadas. +mech.delta-mech.description = Um meca rapido, De baixa armadura Feito for para ataques rapidos. Da pouco dano as estruturas, Mas pode matar grandes grupos de unidades inimigas muito rapidamente Com sua arma ARC. +mech.tau-mech.description = O meca de suporte. Conserta blocos aliados Atirando neles. Pode extinguir o fogo e consertar aliados em uma distancia Com sua habilidade de consertar. +mech.omega-mech.description = Um meca volumoso e bem armadurado, Feito para assaltos da primeira linha. Sua habilidade de armadura Pode bloquear 90% de dano. +mech.dart-ship.description = Nave padrão. Consideravelmente leve e rapido, Tem pouca capacidade ofensiva E baixa velocidade de mineração. +mech.javelin-ship.description = Uma nave de espinhos de atacar e correr. Quando inicialmente lento, pode acelerar a altas velocidades e voar até bases inimigas, Dando altas quantidades de dano Com seus raios e habilidades. +mech.trident-ship.description = Um bombardeiro pesado. Consideravelmente bem armadurado. +mech.glaive-ship.description = Uma nave armada, bem armadurada. Com um repetidor incendario equipado. Boa aceleração e maxima velocidade. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = A unidade de drone inicial. Ele nasce no core por padrão. Minera minérios automaticamente, Coleta itens e repara blocos. +unit.phantom.description = Uma unidade de drone avançada. Minera minérios automaticamente, Coleta itens e repara blocos automaticamente. Significantemente mais efetiva. +unit.dagger.description = Unidade terrestre basica, Forte em grupos. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = Uma unidade armadurada terreste avancada. Usa carbide como munição. Ataca ambas as unidades de Aereas e terrestres. +unit.fortress.description = Uma unidade pesada de artilharia terrestre. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = Uma unidade rapida, Interceptadora de bater e correr. +unit.ghoul.description = Um bombardeiro pesado. Usa composto de explosão Ou piratite como munição. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = Reduz areia a coque altamente puro Para fazer silicio. +block.kiln.description = Derrete chumbo e areia em Metavidro. Requer pequenas quantidades de energia. +block.plastanium-compressor.description = Produz plastanio para usando oleo e titanio. +block.phase-weaver.description = Produz tecido de fase de torio radioativo e grandes quantidades de areia. +block.alloy-smelter.description = Produz liga de surge de titanio, chumbo, silicio e cobre. +block.cryofluidmixer.description = Combina agua e titanio em cryo fluido que é mais eficiente em esfriar. +block.blast-mixer.description = Usa oleo em Transformar piratite em composto de explosão menos inflamavel mas mais explosivo +block.pyratite-mixer.description = Mistura carvão, Cobre e areia em piratite altamente inflamavel +block.melter.description = Aquece pedra em altas temperaturas para fazer lava. +block.separator.description = Expos pedra em agua em pressão para ter varios mineiras contendo na pedra. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Esmaga pedra em areia. Util quando esta em falta de areia natural. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Se livra de itens em excesso ou liquidos. +block.power-void.description = Destroi qualquer energia que entre dentro. Apenas caixa de areia. +block.power-source.description = Infinitivamente da energia. Apenas caixa de areia. +block.item-source.description = Infinivamente da itens. Apenas caixa de areia. +block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia. +block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia. block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o core e torres no começo. block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o core e torres no começo.\nOcupa multiplos espaços. +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.thorium-wall.description = A strong defensive block.\nBoa proteção contra inimigos. block.thorium-wall-large.description = Um bloco grande e defensivo.\nBoa proteção contra inimigos.\nOcupa multiplos espaços. block.phase-wall.description = Não tão forte quanto a parede de torio Mas vai defletir balas a menos que seja muito forte. @@ -854,54 +936,45 @@ block.surge-wall.description = O bloco defensivo mais forte.\nQue tem uma pequen block.surge-wall-large.description = O bloco defensivo mais forte.\nQue tem uma pequena chance de lancar um raio Contra o atacante.\nOcupa multiplos espaços block.door.description = Uma pequena porta que pode ser aberta o fechada quando voce clica.\nSe aberta, Os inimigos podem atirar e passar. block.door-large.description = Uma grande porta que pode ser aberta o fechada quando voce clica.\nSe aberta, Os inimigos podem atirar e passar..\nOcupa multiplos espaços. +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 = Periodicamente conserta as construções. block.overdrive-projector.description = Aumenta a velocidade de unidades proximas de geradores e esteiras. block.force-projector.description = Cria um campo de forca hexagonal em volta de si mesmo, Protegendo construções e unidades dentro de dano por balas. block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo. -block.duo.description = Uma torre pequena e barata. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = Uma pequena torre que atira eletricidade em um pequeno arc aleatoriamente no inimigo. -block.hail.description = Uma pequena torre de artilharia. -block.lancer.description = Uma torre de Tamanho-Medio que atira raios de eletricidade. -block.wave.description = Uma torre que Tamanho medio que atira bolhas. -block.salvo.description = Uma torre media que da tiros em salvos. -block.swarmer.description = Uma torre media que atira ondas de misseis. -block.ripple.description = Uma grande torre que atira simultaneamente. -block.cyclone.description = Uma grande torre de tiro rapido. -block.fuse.description = Uma torre grande que atira raios de curta distancia poderosos. -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.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente Em torres ou construtores. Rotacionavel. block.titanium-conveyor.description = Bloco de transporte de item avancado. Move itens mais rapidos que esteiras padrões. -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.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.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 avancada 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. block.mass-driver.description = Bloco de transporte de itens supremo. Coleta itens severos e atira eles em outro mass driver de uma longa distancia. -block.silicon-smelter.description = Reduz areia a coque altamente puro Para fazer silicio. -block.plastanium-compressor.description = Produz plastanio para usando oleo e titanio. -block.phase-weaver.description = Produz tecido de fase de torio radioativo e grandes quantidades de areia. -block.alloy-smelter.description = Produz liga de surge de titanio, chumbo, silicio e cobre. -block.pulverizer.description = Esmaga pedra em areia. Util quando esta em falta de areia natural. -block.pyratite-mixer.description = Mistura carvão, Cobre e areia em piratite altamente inflamavel -block.blast-mixer.description = Usa oleo em Transformar piratite em composto de explosão menos inflamavel mas mais explosivo -block.cryofluidmixer.description = Combina agua e titanio em cryo fluido que é mais eficiente em esfriar. -block.melter.description = Aquece pedra em altas temperaturas para fazer lava. -block.incinerator.description = Se livra de itens em excesso ou liquidos. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Expos pedra em agua em pressão para ter varios mineiras contendo na pedra. +block.mechanical-pump.description = Uma bomba barata mais saida de liquidos lenta, Sem consumo de energia. +block.rotary-pump.description = Uma bomba avancada que duplica a velocidade da saida de liquida usando energia. +block.thermal-pump.description = A melhor bomba. Trez vezes mais rapida que a bomba mecanica e a unica bomba capaz de pegar lava. +block.conduit.description = Bloco de transporte de liquido basico. Funciona como a esteira, Mas com liquidos. Melhor usado com extratores, Bombas ou condutos. +block.pulse-conduit.description = Bloco avancado de transporte de liquido. Transporta liquidos mais rapido E armazena mais que os condutos padrões. +block.liquid-router.description = Aceita liquidos de uma direcão e os joga em 3 direções igualmente. Pode armazenar uma certa quantidade de liquido. Util para espalhar liquidosd a fonte para multiplos alvos. +block.liquid-tank.description = Armazena grandes quantidades de liquido. Use quando a demanda de materiais não for constante ou para guardar itens para resfriar blocos vitais. +block.liquid-junction.description = Age como uma ponte para dois canos que se cruzam. Util em situações que tem dois condutos carregando liquidos diferentes até localizações diferentes. +block.bridge-conduit.description = Bloco de transporte de liquidos avancados. Possibilita o transporte de liquido sobre 3 blocos acima de construções ou paredes +block.phase-conduit.description = Bloco avancado de transporte de liquido. Usa energia para teleportar liquidos conduto de fase sobre uma distancia severa. block.power-node.description = Transmite poder em nodos. Maximo de 4 fontes de energia, sinks ou nodos podem ser conectados. Os nodos vão receber energia de ou dar energia para qualquer bloco adjacente. block.power-node-large.description = Tem um raio maior que o nodo de energia e pode conectar até 6 fontes de energia, sinks ou nodos. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Guarda energia sempre que tiver em abundancia e da energia sempre que precisar enquanto tiver capacidade. block.battery-large.description = Guarda muito mais energia que uma beteria comum block.combustion-generator.description = Gera poder usando combustivel ou oleo. -block.turbine-generator.description = Mais eficiente que o gerador de Combustão, Mas requer agua adicional. block.thermal-generator.description = Gera uma quantidade grande de energia usando lava. +block.turbine-generator.description = Mais eficiente que o gerador de Combustão, Mas requer agua adicional. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos Que não precisa de refriamento Mas da muito mais energia que o reator de torio. block.solar-panel.description = Gera pequenas quantidades de energia do sol. block.solar-panel-large.description = Da muito mais energia que o painel solar comum, Mas sua produção é mais cara. block.thorium-reactor.description = Gera altas quantidades de energia do torio radioativo. Requer resfriamento constante. Vai explodir violentamente Se resfriamento insuficiente for fornecido. -block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos Que não precisa de refriamento Mas da muito mais energia que o reator de torio. -block.unloader.description = Descarrega itens de um container, Descarrega em uma esteira ou diretamente em um bloco adjacente. O tipo de item que pode ser descarregado pode ser mudado clicando no descarregador. -block.container.description = Carrega uma baixa quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[LIGHT_GRAY] Descarregador[] pode ser usado para recuperar esses itens do container. -block.vault.description = Carrega uma alta quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[LIGHT_GRAY] Descarregador[] pode ser usado para recuperar esses itens do container. +block.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 = Uma mineradoura barata. Quando colocado em blocos apropriados, retira itens em um ritmo lento e indefinitavamente. block.pneumatic-drill.description = Uma mineradora improvisada que é mais rapida e capaz de processar mateirais mais duros usando a pressao do ar block.laser-drill.description = Possibilita a mineração ainda mais rapida usando tecnologia a laser, Mas requer poder adcionalmente torio radioativo pode ser recuperado com essa mineradora @@ -909,39 +982,43 @@ block.blast-drill.description = A melhor mineradora. Requer muita energia. block.water-extractor.description = Extrai agua do chão. Use quando não tive nenhum lago proximo block.cultivator.description = Cultiva o solo com agua para pegar bio materia. block.oil-extractor.description = Usa altas quantidades de energia Para extrair oleo da areia. Use quando não tiver fontes de oleo por perto -block.trident-ship-pad.description = Deixe sua atual embarcação e mude para um bombardeiro resionavelmente bem armadurado.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. -block.javelin-ship-pad.description = Deixe sua atual embarcação e mude para um interceptador forte e rapido com armas de raio.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. -block.glaive-ship-pad.description = Deixe sua atual embarcação e mude para grande, bem armadurada nave de combate.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. -block.tau-mech-pad.description = Deixe sua atual embarcação e mude para o meca de suporte que pode consertar construções aliadas e unidades.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. -block.delta-mech-pad.description = Deixe sua atual embarcação e mude para o rapido, Levemente armadurado meca feito para ataques rapidos.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. -block.omega-mech-pad.description = Deixe sua atual embarcação e mude para o volumoso e bem armadurado meca feito para ataques da primeira linha.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. +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 = Carrega uma alta quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[LIGHT_GRAY] Descarregador[] pode ser usado para recuperar esses itens do container. +block.container.description = Carrega uma baixa quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[LIGHT_GRAY] Descarregador[] pode ser usado para recuperar esses itens do container. +block.unloader.description = Descarrega itens de um container, Descarrega em uma esteira ou diretamente em um bloco adjacente. O tipo de item que pode ser descarregado pode ser mudado clicando no descarregador. +block.launch-pad.description = Lança montes de itens sem qualquer necessidade de um lançamento de nucleo. Não completo. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = Uma torre pequena e barata. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = Uma pequena torre de artilharia. +block.wave.description = Uma torre que Tamanho medio que atira bolhas. +block.lancer.description = Uma torre de Tamanho-Medio que atira raios de eletricidade. +block.arc.description = Uma pequena torre que atira eletricidade em um pequeno arc aleatoriamente no inimigo. +block.swarmer.description = Uma torre media que atira ondas de misseis. +block.salvo.description = Uma torre media que da tiros em salvos. +block.fuse.description = Uma torre grande que atira raios de curta distancia poderosos. +block.ripple.description = Uma grande torre que atira simultaneamente. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produz drones leves que mineram e reparam blocos. block.phantom-factory.description = Produz unidades de drone avancadas Que são significativamente mais efetivos que um drone spirit. block.wraith-factory.description = produz unidades interceptor de ataque rapido. block.ghoul-factory.description = Produz bombardeiros pesados. +block.revenant-factory.description = Produz unidades laser, pesadas e terrestres. block.dagger-factory.description = Produz unidades terrestres. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produz unidades avancadas, armaduradas e terrestres. block.fortress-factory.description = Produz unidades terrestres pesadas de artilharia. -block.revenant-factory.description = Produz unidades laser, pesadas e terrestres. block.repair-point.description = Continuamente repara a unidade danificada mais proxima. -block.conduit.description = Bloco de transporte de liquido basico. Funciona como a esteira, Mas com liquidos. Melhor usado com extratores, Bombas ou condutos. -block.pulse-conduit.description = Bloco avancado de transporte de liquido. Transporta liquidos mais rapido E armazena mais que os condutos padrões. -block.phase-conduit.description = Bloco avancado de transporte de liquido. Usa energia para teleportar liquidos conduto de fase sobre uma distancia severa. -block.liquid-router.description = Aceita liquidos de uma direcão e os joga em 3 direções igualmente. Pode armazenar uma certa quantidade de liquido. Util para espalhar liquidosd a fonte para multiplos alvos. -block.liquid-tank.description = Armazena grandes quantidades de liquido. Use quando a demanda de materiais não for constante ou para guardar itens para resfriar blocos vitais. -block.liquid-junction.description = Age como uma ponte para dois canos que se cruzam. Util em situações que tem dois condutos carregando liquidos diferentes até localizações diferentes. -block.bridge-conduit.description = Bloco de transporte de liquidos avancados. Possibilita o transporte de liquido sobre 3 blocos acima de construções ou paredes -block.mechanical-pump.description = Uma bomba barata mais saida de liquidos lenta, Sem consumo de energia. -block.rotary-pump.description = Uma bomba avancada que duplica a velocidade da saida de liquida usando energia. -block.thermal-pump.description = A melhor bomba. Trez vezes mais rapida que a bomba mecanica e a unica bomba capaz de pegar lava. -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 avancada que espalhas os itens em 7 outras direções igualmente. -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.item-source.description = Infinivamente da itens. Apenas caixa de areia. -block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia. -block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia. -block.power-source.description = Infinitivamente da energia. Apenas caixa de areia. -block.power-void.description = Destroi qualquer energia que entre dentro. Apenas caixa de areia. -liquid.water.description = Comumente usado em resfriamento e no processo de perda. -liquid.oil.description = Pode ser queimado, explodido ou usado como resfriador. -liquid.cryofluid.description = A maneira mais eficiente de resfriar qualquer coisa. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Deixe sua atual embarcação e mude para o rapido, Levemente armadurado meca feito para ataques rapidos.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. +block.tau-mech-pad.description = Deixe sua atual embarcação e mude para o meca de suporte que pode consertar construções aliadas e unidades.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. +block.omega-mech-pad.description = Deixe sua atual embarcação e mude para o volumoso e bem armadurado meca feito para ataques da primeira linha.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. +block.javelin-ship-pad.description = Deixe sua atual embarcação e mude para um interceptador forte e rapido com armas de raio.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. +block.trident-ship-pad.description = Deixe sua atual embarcação e mude para um bombardeiro resionavelmente bem armadurado.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. +block.glaive-ship-pad.description = Deixe sua atual embarcação e mude para grande, bem armadurada nave de combate.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 60cf3abe6b..652ad8f0a8 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -96,7 +96,6 @@ server.admins = Администраторы server.admins.none = Администраторов нет! server.add = Добавить сервер server.delete = Вы действительно хотите удалить этот сервер? -server.hostname = Хост: {0} server.edit = Редактировать сервер server.outdated = [crimson]Устаревший сервер![] server.outdated.client = [crimson]Устаревший клиент![] @@ -590,21 +589,21 @@ content.unit.name = Боевые единицы content.block.name = Блоки content.mech.name = Мехи item.copper.name = Медь -tem.lead.name = Свинец -tem.coal.name = Уголь -tem.graphite.name = Графит -tem.titanium.name = Титан -tem.thorium.name = Торий -tem.silicon.name = Кремний -tem.plastanium.name = Пластиний -tem.phase-fabric.name = Фазовая ткань -tem.surge-alloy.name = Кинетический сплав -tem.spore-pod.name = Споровой стручок -tem.sand.name = Песок -tem.blast-compound.name = Взрывная смесь -tem.pyratite.name = Пиротит -tem.metaglass.name = Метастекло -tem.scrap.name = Металлолом +item.lead.name = Свинец +item.coal.name = Уголь +item.graphite.name = Графит +item.titanium.name = Титан +item.thorium.name = Торий +item.silicon.name = Кремний +item.plastanium.name = Пластиний +item.phase-fabric.name = Фазовая ткань +item.surge-alloy.name = Кинетический сплав +item.spore-pod.name = Споровой стручок +item.sand.name = Песок +item.blast-compound.name = Взрывная смесь +item.pyratite.name = Пиротит +item.metaglass.name = Метастекло +item.scrap.name = Металлолом iquid.water.name = Вода liquid.slag.name = Шлак liquid.oil.name = Нефть @@ -612,10 +611,10 @@ liquid.cryofluid.name = Криогенная жидкость mech.alpha-mech.name = Альфа mech.alpha-mech.weapon = Тяжёлый пулемёт mech.alpha-mech.ability = Регенерация -ech.delta-mech.name = Дельта +mech.delta-mech.name = Дельта mech.delta-mech.weapon = Дуговой генератор mech.delta-mech.ability = Разряд -ech.tau-mech.name = Тау +mech.tau-mech.name = Тау mech.tau-mech.weapon = Восстановительный лазер mech.tau-mech.ability = Регенирирующая вспышка mech.omega-mech.name = Омега @@ -645,6 +644,7 @@ mech.buildspeed = [LIGHT_GRAY]Скорость строительства: {0}% liquid.heatcapacity = [LIGHT_GRAY]Теплоёмкость: {0} liquid.viscosity = [LIGHT_GRAY]Вязкость: {0} liquid.temperature = [LIGHT_GRAY]Температура: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Трава block.sand-boulder.name = Песочный валун block.salt.name = Соль diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index 03a0ec0d8e..11fbefa9aa 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -4,6 +4,7 @@ contributors = Translators and Contributors discord = Mindustry'in Discord'una katilin! link.discord.description = Orjinal Mindustry'in Discord Konusma Odasi link.github.description = Oyunun Kodu +link.changelog.description = List of update changes link.dev-builds.description = Bitirilmemis Yapim Surumu link.trello.description = Planlanmis Hersey icin Tablo link.itch.io.description = Bilgisayar ve Site versiyonunun bulundugu Site @@ -32,7 +33,6 @@ level.mode = Oyun Modu: showagain = Don't show again next session coreattack = < Cekirdek Saldiri altinda! > nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent -outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} database = Core Database savegame = Oyunu kaydet loadgame = Devam et @@ -95,7 +95,6 @@ server.admins = Yetkililer server.admins.none = Yetkili bulunamadi! server.add = Oyun ekle server.delete = Oyunu silmek istedigine emin misin? -server.hostname = Oyun yarat: {0} server.edit = Oyunu ayarla server.outdated = [crimson]Eski Oyun![] server.outdated.client = [crimson]eski islemci![] @@ -156,13 +155,6 @@ openlink = Linki ac copylink = Linki kopyala back = Geri don quit.confirm = Cikmak istedigine emin misin? -changelog.title = Degisimler -changelog.loading = Degisimler yukleniyor... -changelog.error.android = [accent]Not: Degisimler bazen androidde calismaz.\nBu bir degistirilemez sorundan kaynakli. -changelog.error.ios = [accent]Degisimler IOS'da su anda desteklenmiyor. -changelog.error = [scarlet]Degisimler alinamadi.\nInternet baglantini kontrol et -changelog.current = [yellow][[Current version] -changelog.latest = [accent][[Latest version] loading = [accent]Yukleniyor... saving = [accent]Kaydediliyor... wave = [accent]Dalga {0} @@ -192,7 +184,9 @@ editor.author = Yapimci: editor.description = Yorum: editor.waves = Waves: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Waves waves.remove = Remove waves.never = @@ -207,13 +201,13 @@ waves.copy = Copy to Clipboard waves.load = Load from Clipboard waves.invalid = Invalid waves in clipboard. waves.copied = Waves copied. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Edit... editor.name = isim: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Takimlar -editor.elevation = Yukseklik editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Harita ismi: editor.overwrite = [accent]Dikkat et!\nBu bir haritanin uzerinden cececek. editor.overwrite.confirm = [scarlet]uyari![] bu isimde bir harita zaten var. Uzerinden gececek misin? editor.selectmap = Yukleyecek bir harita sec: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Ore filter.rivernoise = River Noise +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Scatter filter.terrain = Terrain filter.option.scale = Scale @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Genislik: height = Yukseklik: menu = Menu play = Oyna +campaign = Campaign load = Yukle save = Kaydet fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Add... boss.health = Boss Health connectfail = [crimson]Su Oyuna baglanilamadi: [accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = Already connected. error.mapnotfound = Map file not found! error.io = Network I/O error. error.any = Unkown network error. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Dil settings.reset = ilk ayarlara geri al settings.rebind = Geri al @@ -346,12 +383,14 @@ no = Hayir info.title = [accent]Bilgi error.title = [crimson]Bir hata olustu error.crashtitle = Bir hata olustu +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Guc kapasitesi blocks.powershot = Guc/Saldiri hizi +blocks.damage = Damage blocks.targetsair = Havayi hedef alir mi? blocks.targetsground = Targets Ground blocks.itemsmoved = Move Speed @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.indicators.name = Ally Indicators setting.autotarget.name = Auto-Target +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = Yok setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = training setting.difficulty.easy = kolay @@ -456,7 +497,11 @@ setting.mutesound.name = Sesi kapat setting.crashreport.name = Send Anonymous Crash Reports setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Tuslari ayarla +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = Goster category.multiplayer.name = Cok oyunculu @@ -505,6 +550,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves +rules.attack = Attack Mode rules.enemyCheat = Infinite AI Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Units content.block.name = Blocks content.mech.name = Robotlar item.copper.name = Bakir -item.copper.description = ise yayar bir materyal. Kazma makineleriyle yada tasimayla alinabilir. item.lead.name = Kursun -item.lead.description = Basit bir baslangic materyali. sivi tasimada kullanilabilir. item.coal.name = Komur -item.coal.description = Yaygin bir yakit. item.graphite.name = Graphite item.titanium.name = Titanyum -item.titanium.description = Nadir ve hafif bir materyal. Hava araclarinda, Kazma makinelerinde ve sivi tasima tuplerinde kullanilir. item.thorium.name = Toryum -item.thorium.description = Nukleer yakit olarak kullanilan sert ve nukleer bir materyal. item.silicon.name = Silikon -item.silicon.description = Gunes panellerinde ve gelismis materallerde kullanilan bir materyal item.plastanium.name = Plastanyum -item.plastanium.description = hafif bir madde, hava makinelerinde ve silahlara kursun olarak kullanilir. item.phase-fabric.name = Phase Fabric -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.surge-alloy.name = Kabarma karisimi -item.surge-alloy.description = An advanced alloy with unique electrical properties. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = Kum -item.sand.description = karistirma maddesi olark kullanilan yaygin bir madde. item.blast-compound.name = patlama birlesimi -item.blast-compound.description = Bombalar ve patlayicilarda kullanilabilir. Yakit olarak kullanilmasi tavsiye edilmez. item.pyratite.name = Pyratite -item.pyratite.description = Yakici silahlar icin yakici bir madde. item.metaglass.name = Metaglass -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = Su liquid.slag.name = Slag liquid.oil.name = Benzin @@ -570,31 +601,23 @@ liquid.cryofluid.name = kriyo sivisi mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Agir plazma silahi mech.alpha-mech.ability = Pervaneli savunma -mech.alpha-mech.description = Standart Robot. Kendisine yardim etmesi icin 3 adet dron cikartabilir mech.delta-mech.name = Delta mech.delta-mech.weapon = Arc jenaratoru mech.delta-mech.ability = Sarz cekici -mech.delta-mech.description = vur kac icin yapilmis olan hizli bir makine. duvarlara az hasar verir ama gruplari temizlemesiyle bilinir. mech.tau-mech.name = Tau mech.tau-mech.weapon = Yok edici Lazer mech.tau-mech.ability = Tamircinin patlamasi -mech.tau-mech.description = Destek bir robot. alaninin icindeki herseyi tamir edebilir mech.omega-mech.name = Omega mech.omega-mech.weapon = Solucan roketler mech.omega-mech.ability = Zirhli Yok edici -mech.omega-mech.description = Tank ve hasar vurucu bir robot. Zirhi ona %90 hasari engellemesini saglayan bir kalkan verir. mech.dart-ship.name = Dart mech.dart-ship.weapon = Tarayici -mech.dart-ship.description = Var olan en hizli robot. guclu bir vurkacci mech.javelin-ship.name = Javelin -mech.javelin-ship.description = vur kac tipindeki bir unit. bir anda buyuk bir hasara sebep olabilir mech.javelin-ship.weapon = Patlayici roketler mech.javelin-ship.ability = sarz calici mech.trident-ship.name = Trident -mech.trident-ship.description = Bir bombaci. Guzel bir zirha sahip mech.trident-ship.weapon = mini atomlar mech.glaive-ship.name = Glaive -mech.glaive-ship.description = Guzel, buyuk bir unit. Hiz limiti ve kapesitesi iyidir mech.glaive-ship.weapon = Orman yakici item.explosiveness = [LIGHT_GRAY]Patlayicilik: {0} item.flammability = [LIGHT_GRAY]Yanbilirlik: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]isinma kapasitesi: {0} liquid.viscosity = [LIGHT_GRAY]Yari sivilik: {0} liquid.temperature = [LIGHT_GRAY]isi: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Rock block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0}\n[LIGHT_GRAY](Constructing) @@ -702,9 +726,7 @@ block.junction.name = ayirici block.router.name = dagitici block.distributor.name = yayici block.sorter.name = secici -block.sorter.description = esyalari secer. rengi ayni olan esya ileriden, digerleri sagdan ve soldan devam eder block.overflow-gate.name = Kapali dagatici -block.overflow-gate.description = sadece saga ve sola dagatir. onu kapalidir block.silicon-smelter.name = Silikon eritici block.phase-weaver.name = Dokumaci block.pulverizer.name = pulvarizor @@ -756,6 +778,7 @@ block.blast-mixer.name = Patlayici karistiricisi block.solar-panel.name = gunes paneli block.solar-panel-large.name = genis gunes paneli block.oil-extractor.name = benzin ayirici +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Spirit Drone Factory block.phantom-factory.name = Phantom Drone Factory block.wraith-factory.name = Wraith Fighter Factory @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Container block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = blue team.red.name = red @@ -803,20 +825,14 @@ team.none.name = gray team.green.name = green team.purple.name = purple unit.spirit.name = Spirit Drone -unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. +unit.draug.name = Draug Miner Drone unit.phantom.name = Phantom Drone -unit.phantom.description = An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. unit.dagger.name = Dagger -unit.dagger.description = basit bir zemin uniti unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = havaya sikabilen, gelismis bir unit unit.ghoul.name = Ghoul Bomber -unit.ghoul.description = A heavy carpet bomber. Uses blast compound or pyratite as ammo. unit.wraith.name = Wraith Fighter -unit.wraith.description = A fast, hit-and-run interceptor unit. unit.fortress.name = Fortress -unit.fortress.description = A heavy artillery ground unit. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. +item.copper.description = ise yayar bir materyal. Kazma makineleriyle yada tasimayla alinabilir. +item.lead.description = Basit bir baslangic materyali. sivi tasimada kullanilabilir. +item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +item.sand.description = karistirma maddesi olark kullanilan yaygin bir madde. +item.coal.description = Yaygin bir yakit. +item.titanium.description = Nadir ve hafif bir materyal. Hava araclarinda, Kazma makinelerinde ve sivi tasima tuplerinde kullanilir. +item.thorium.description = Nukleer yakit olarak kullanilan sert ve nukleer bir materyal. +item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. +item.silicon.description = Gunes panellerinde ve gelismis materallerde kullanilan bir materyal +item.plastanium.description = hafif bir madde, hava makinelerinde ve silahlara kursun olarak kullanilir. +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 = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = Bombalar ve patlayicilarda kullanilabilir. Yakit olarak kullanilmasi tavsiye edilmez. +item.pyratite.description = Yakici silahlar icin yakici bir madde. +liquid.water.description = 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 = Can be burnt, exploded or used as a coolant. +liquid.cryofluid.description = The most efficient liquid for cooling things down. +mech.alpha-mech.description = Standart Robot. Kendisine yardim etmesi icin 3 adet dron cikartabilir +mech.delta-mech.description = vur kac icin yapilmis olan hizli bir makine. duvarlara az hasar verir ama gruplari temizlemesiyle bilinir. +mech.tau-mech.description = Destek bir robot. alaninin icindeki herseyi tamir edebilir +mech.omega-mech.description = Tank ve hasar vurucu bir robot. Zirhi ona %90 hasari engellemesini saglayan bir kalkan verir. +mech.dart-ship.description = Var olan en hizli robot. guclu bir vurkacci +mech.javelin-ship.description = vur kac tipindeki bir unit. bir anda buyuk bir hasara sebep olabilir +mech.trident-ship.description = Bir bombaci. Guzel bir zirha sahip +mech.glaive-ship.description = Guzel, buyuk bir unit. Hiz limiti ve kapesitesi iyidir +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. +unit.phantom.description = An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. +unit.dagger.description = basit bir zemin uniti +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = havaya sikabilen, gelismis bir unit +unit.fortress.description = A heavy artillery ground unit. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = A fast, hit-and-run interceptor unit. +unit.ghoul.description = A heavy carpet bomber. Uses blast compound or pyratite as ammo. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 highly pure coke in order to produce silicon. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produces plastanium from oil and titanium. +block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. +block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. +block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. +block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. +block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. +block.melter.description = Heats up stone to very high temperatures to obtain lava. +block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Gets rid of any excess item or liquid. +block.power-void.description = Voids all power inputted into it. 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 which go into it without using power. Sandbox only. +block.liquid-source.description = Infinitely outputs 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.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. @@ -854,54 +936,45 @@ block.surge-wall.description = The strongest defensive block.\nHas a small chanc block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\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 = Periodically heals buildings in its vicinity. block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.duo.description = A small, cheap turret. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. -block.hail.description = A small artillery turret. -block.lancer.description = A medium-sized turret which shoots charged electricity beams. -block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. -block.salvo.description = A medium-sized turret which fires shots in salvos. -block.swarmer.description = A medium-sized turret which shoots burst missiles. -block.ripple.description = A large artillery turret which fires several shots simultaneously. -block.cyclone.description = A large rapid fire turret. -block.fuse.description = A large turret which shoots powerful short-range beams. -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.conveyor.description = Basic item transport block. Moved items forward and automatically deposits them into turrets or crafters. Rotatable. block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. 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 = esyalari secer. rengi ayni olan esya ileriden, digerleri sagdan ve soldan devam eder +block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. +block.distributor.description = An advanced router which splits items to up to 7 other directions equally. +block.overflow-gate.description = sadece saga ve sola dagatir. onu kapalidir block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. -block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon. -block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. -block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. -block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. -block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. -block.melter.description = Heats up stone to very high temperatures to obtain lava. -block.incinerator.description = Gets rid of any excess item or liquid. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. +block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. +block.rotary-pump.description = An advanced pump which doubles up speed by using power. +block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. +block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. +block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. +block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. +block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. +block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. +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.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left. block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning oil or flammable materials. -block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.thermal-generator.description = Generates a large amount of power from lava. +block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build. block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. -block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. -block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. -block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. -block.vault.description = Stores a large amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +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. block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. @@ -909,39 +982,43 @@ block.blast-drill.description = The ultimate drill. Requires large amounts of po block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.cultivator.description = Cultivates the soil with water in order to obtain biomatter. block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby. -block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. -block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. -block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. -block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. -block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. -block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +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. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. +block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = A small artillery turret. +block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. +block.lancer.description = A medium-sized turret which shoots charged electricity beams. +block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. +block.swarmer.description = A medium-sized turret which shoots burst missiles. +block.salvo.description = A medium-sized turret which fires shots in salvos. +block.fuse.description = A large turret which shoots powerful short-range beams. +block.ripple.description = A large artillery turret which fires several shots simultaneously. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.ghoul-factory.description = Produces heavy carpet bombers. +block.revenant-factory.description = Produces heavy laser ground units. block.dagger-factory.description = Produces basic ground units. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produces advanced, armored ground units. block.fortress-factory.description = Produces heavy artillery ground units. -block.revenant-factory.description = Produces heavy laser ground units. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. -block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. -block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. -block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. -block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. -block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. -block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. -block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. -block.rotary-pump.description = An advanced pump which doubles up speed by using power. -block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. -block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. -block.distributor.description = An advanced router which splits items to up to 7 other directions equally. -block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. -block.item-source.description = Infinitely outputs items. Sandbox only. -block.liquid-source.description = Infinitely outputs liquids. Sandbox only. -block.item-void.description = Destroys any items which go into it without using power. Sandbox only. -block.power-source.description = Infinitely outputs power. Sandbox only. -block.power-void.description = Voids all power inputted into it. Sandbox only. -liquid.water.description = Commonly used for cooling machines and waste processing. -liquid.oil.description = Can be burnt, exploded or used as a coolant. -liquid.cryofluid.description = The most efficient liquid for cooling things down. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. +block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. +block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. +block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. +block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 7aea9e7b65..dce426ac8b 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -4,6 +4,7 @@ contributors = Translators and Contributors discord = Mindustry Discord'una katılın! link.discord.description = Resmi Mindustry Discord iletişim kanalı link.github.description = Oyunun kaynak kodu +link.changelog.description = List of update changes link.dev-builds.description = Geliştirme altında olan sürüm link.trello.description = Planlanan özellikler için resmi Trello Bülteni link.itch.io.description = PC yüklemeleri ve web sürümü ile itch.io sayfası @@ -32,7 +33,6 @@ level.mode = Oyun Modu showagain = Bunu gene gosterme coreattack = < Cekirdek saldiri altinda! > nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent -outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} database = Core Database savegame = Oyunu Kaydet loadgame = Oyunu yükle @@ -95,7 +95,6 @@ server.admins = Yöneticiler server.admins.none = Yönetici bulunamadı! server.add = Sunucu ekle server.delete = Bu sunucuyu silmek istediğinizden emin misiniz? -server.hostname = Sun server.edit = Sunucuyu Düzenle server.outdated = [crimson] Eski Sunucu! server.outdated.client = [crimson] Eski Alıcı! @@ -156,13 +155,6 @@ openlink = Linki aç copylink = Bağlantıyı kopyala back = Geri quit.confirm = Çıkmak istediğinden emin misin? -changelog.title = Değişiklik listesi -changelog.loading = Değişiklik listesi yükleniyor -changelog.error.android = [turuncu] Android'da olan hata nedeniyle değişiklik listesi görüntülenemiyor. -changelog.error.ios = [accent]The changelog is currently not supported in iOS. -changelog.error = [scarlet] Değişiklik listesi alma hatası! İnternet bağlantınızı kontrol edin. -changelog.current = [sarı] [[Güncel versiyon] -changelog.latest = [turuncu] [[Son sürüm] loading = [Vurgu] Yükleniyor ... saving = [accent]Saving... wave = [turuncu] Dalga {0} @@ -192,7 +184,9 @@ editor.author = Author: editor.description = Description: editor.waves = Waves: editor.rules = Rules: +editor.generation = Generation: editor.ingame = Edit In-Game +editor.newmap = New Map waves.title = Waves waves.remove = Remove waves.never = @@ -207,13 +201,13 @@ waves.copy = Copy to Clipboard waves.load = Load from Clipboard waves.invalid = Invalid waves in clipboard. waves.copied = Waves copied. +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY] edit = Edit... editor.name = Name: editor.spawn = Spawn Unit editor.removeunit = Remove Unit editor.teams = Teams -editor.elevation = Elevation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. @@ -251,11 +245,31 @@ editor.mapname = Harita Adı editor.overwrite = [Vurgu] Uyarı! Bu mevcut bir haritanın üzerine yazar. editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? editor.selectmap = Yüklenecek bir harita seçin: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filter.distort = Distort filter.noise = Noise +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = Ore filter.rivernoise = River Noise +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = Scatter filter.terrain = Terrain filter.option.scale = Scale @@ -265,8 +279,10 @@ filter.option.threshold = Threshold filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff +filter.option.angle = Angle filter.option.block = Block filter.option.floor = Floor +filter.option.flooronto = Target Floor filter.option.wall = Wall filter.option.ore = Ore filter.option.floor2 = Secondary Floor @@ -277,6 +293,7 @@ width = Genişliği: height = Boy: menu = Menü play = Oyna +campaign = Campaign load = Yükle save = Kaydet fps = FPS: {0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.resources = Resources Detected: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = Add... boss.health = Boss Health connectfail = [crimson] Sunucuya bağlanılamadı: [accent] {0} @@ -318,6 +338,7 @@ error.alreadyconnected = Already connected. error.mapnotfound = Map file not found! error.io = Network I/O error. error.any = Unkown network error. +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = Ground Zero zone.desertWastes.name = Desert Wastes zone.craters.name = The Craters @@ -328,6 +349,22 @@ zone.desolateRift.name = Desolate Rift zone.nuclearComplex.name = Nuclear Production Complex zone.overgrowth.name = Overgrowth zone.tarFields.name = Tar Fields +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = Dil settings.reset = Varsayılanlara Dön settings.rebind = Rebind @@ -346,12 +383,14 @@ no = No info.title = [Vurgu] Bilgi error.title = [crimson] Bir hata oluştu error.crashtitle = Bir hata oluştu +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = Input blocks.output = Output blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Güç kapasitesi blocks.powershot = Güç / atış +blocks.damage = Damage blocks.targetsair = Targets Air blocks.targetsground = Targets Ground blocks.itemsmoved = Move Speed @@ -427,9 +466,11 @@ setting.animatedshields.name = Animated Shields setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.indicators.name = Ally Indicators setting.autotarget.name = Auto-Target +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = Max FPS setting.fpscap.none = None setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = Always Diagonal Placement setting.difficulty.training = training setting.difficulty.easy = kolay @@ -456,7 +497,11 @@ setting.mutesound.name = Sesi kapat setting.crashreport.name = Send Anonymous Crash Reports setting.chatopacity.name = Chat Opacity setting.playerchat.name = Display In-Game Chat +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = Tuşları yeniden ayarla +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = View category.multiplayer.name = Multiplayer @@ -505,6 +550,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.wavetimer = Wave Timer rules.waves = Waves +rules.attack = Attack Mode rules.enemyCheat = Infinite AI Resources rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier @@ -533,36 +579,21 @@ content.unit.name = Units content.block.name = Blocks content.mech.name = Mechs item.copper.name = Copper -item.copper.description = A useful structure material. Used extensively in all types of blocks. item.lead.name = Lead -item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. item.coal.name = kömür -item.coal.description = A common and readily available fuel. item.graphite.name = Graphite item.titanium.name = titanyum -item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft. item.thorium.name = Thorium -item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel. item.silicon.name = Silicon -item.silicon.description = An extremely useful semiconductor, with applications in solar panels and many complex electronics. item.plastanium.name = Plastanium -item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition. item.phase-fabric.name = Phase Fabric -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.surge-alloy.name = Surge Alloy -item.surge-alloy.description = An advanced alloy with unique electrical properties. item.spore-pod.name = Spore Pod -item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.sand.name = kum -item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux. item.blast-compound.name = Blast Compound -item.blast-compound.description = A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised. item.pyratite.name = Pyratite -item.pyratite.description = An extremely flammable substance used in incendiary weapons. item.metaglass.name = Metaglass -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. item.scrap.name = Scrap -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. liquid.water.name = su liquid.slag.name = Slag liquid.oil.name = petrol @@ -570,31 +601,23 @@ liquid.cryofluid.name = Cryofluid mech.alpha-mech.name = Alpha mech.alpha-mech.weapon = Heavy Repeater mech.alpha-mech.ability = Drone Swarm -mech.alpha-mech.description = The standard mech. Has decent speed and damage output; can create up to 3 drones for increased offensive capability. mech.delta-mech.name = Delta mech.delta-mech.weapon = Arc Generator mech.delta-mech.ability = Discharge -mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons. mech.tau-mech.name = Tau mech.tau-mech.weapon = Restruct Laser mech.tau-mech.ability = Repair Burst -mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can extinguish fires and heal allies in a radius with its repair ability. mech.omega-mech.name = Omega mech.omega-mech.weapon = Swarm Missiles mech.omega-mech.ability = Armored Configuration -mech.omega-mech.description = A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage. mech.dart-ship.name = Dart mech.dart-ship.weapon = Repeater -mech.dart-ship.description = The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed. mech.javelin-ship.name = Javelin -mech.javelin-ship.description = A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles. mech.javelin-ship.weapon = Burst Missiles mech.javelin-ship.ability = Discharge Booster mech.trident-ship.name = Trident -mech.trident-ship.description = A heavy bomber. Reasonably well armored. mech.trident-ship.weapon = Bomb Bay mech.glaive-ship.name = Glaive -mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed. mech.glaive-ship.weapon = Flame Repeater item.explosiveness = [LIGHT_GRAY]Explosiveness: {0} item.flammability = [LIGHT_GRAY]Flammability: {0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Grass block.salt.name = Salt block.saltrocks.name = Salt Rocks @@ -621,6 +645,7 @@ block.spore-pine.name = Spore Pine block.sporerocks.name = Spore Rocks block.rock.name = Rock block.snowrock.name = Snow Rock +block.snow-pine.name = Snow Pine block.shale.name = Shale block.shale-boulder.name = Shale Boulder block.moss.name = Moss @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.thruster.name = Thruster block.kiln.name = Kiln -block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.graphite-press.name = Graphite Press block.multi-press.name = Multi-Press block.constructing = {0}\n[LIGHT_GRAY](Constructing) @@ -702,9 +726,7 @@ block.junction.name = Kavşak noktası block.router.name = yönlendirici block.distributor.name = Distributor block.sorter.name = ayrıştırıcı -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.overflow-gate.name = Overflow Gate -block.overflow-gate.description = A combination splitter and router that only outputs to the left and right if the front path is blocked. block.silicon-smelter.name = Silicon Smelter block.phase-weaver.name = Phase Weaver block.pulverizer.name = Pulverizer @@ -756,6 +778,7 @@ block.blast-mixer.name = Blast Mixer block.solar-panel.name = Solar Panel block.solar-panel-large.name = Large Solar Panel block.oil-extractor.name = Oil Extractor +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = Spirit Drone Factory block.phantom-factory.name = Phantom Drone Factory block.wraith-factory.name = Wraith Fighter Factory @@ -794,7 +817,6 @@ block.spectre.name = Spectre block.meltdown.name = Meltdown block.container.name = Container block.launch-pad.name = Launch Pad -block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad-large.name = Large Launch Pad team.blue.name = blue team.red.name = red @@ -803,20 +825,14 @@ team.none.name = gray team.green.name = green team.purple.name = purple unit.spirit.name = Spirit Drone -unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. +unit.draug.name = Draug Miner Drone unit.phantom.name = Phantom Drone -unit.phantom.description = An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. unit.dagger.name = Dagger -unit.dagger.description = A basic ground unit. Useful in swarms. unit.crawler.name = Crawler unit.titan.name = Titan -unit.titan.description = An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. unit.ghoul.name = Ghoul Bomber -unit.ghoul.description = A heavy carpet bomber. Uses blast compound or pyratite as ammo. unit.wraith.name = Wraith Fighter -unit.wraith.description = A fast, hit-and-run interceptor unit. unit.fortress.name = Fortress -unit.fortress.description = A heavy artillery ground unit. unit.revenant.name = Revenant unit.eruptor.name = Eruptor unit.chaos-array.name = Chaos Array @@ -844,8 +860,74 @@ tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. +item.copper.description = A useful structure material. Used extensively in all types of blocks. +item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. +item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +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. +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, with applications in solar panels and many complex electronics. +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 = Used for conversion into oil, explosives and fuel. +item.blast-compound.description = A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised. +item.pyratite.description = An extremely flammable substance used in incendiary weapons. +liquid.water.description = 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 = Can be burnt, exploded or used as a coolant. +liquid.cryofluid.description = The most efficient liquid for cooling things down. +mech.alpha-mech.description = The standard mech. Has decent speed and damage output; can create up to 3 drones for increased offensive capability. +mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons. +mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can extinguish fires and heal allies in a radius with its repair ability. +mech.omega-mech.description = A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage. +mech.dart-ship.description = The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed. +mech.javelin-ship.description = A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles. +mech.trident-ship.description = A heavy bomber. Reasonably well armored. +mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed. +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. +unit.phantom.description = An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. +unit.dagger.description = A basic ground unit. Useful in swarms. +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets. +unit.fortress.description = A heavy artillery ground unit. +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = A fast, hit-and-run interceptor unit. +unit.ghoul.description = A heavy carpet bomber. Uses blast compound or pyratite as ammo. +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 highly pure coke in order to produce silicon. +block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. +block.plastanium-compressor.description = Produces plastanium from oil and titanium. +block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. +block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. +block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. +block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. +block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. +block.melter.description = Heats up stone to very high temperatures to obtain lava. +block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. +block.spore-press.description = Compresses spore pods into oil. +block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. +block.coal-centrifuge.description = Solidifes oil into chunks of coal. +block.incinerator.description = Gets rid of any excess item or liquid. +block.power-void.description = Voids all power inputted into it. 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 which go into it without using power. Sandbox only. +block.liquid-source.description = Infinitely outputs 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.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. @@ -854,54 +936,45 @@ block.surge-wall.description = The strongest defensive block.\nHas a small chanc block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\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 = Periodically heals buildings in its vicinity. block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.duo.description = A small, cheap turret. -block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. -block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. -block.hail.description = A small artillery turret. -block.lancer.description = A medium-sized turret which shoots charged electricity beams. -block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. -block.salvo.description = A medium-sized turret which fires shots in salvos. -block.swarmer.description = A medium-sized turret which shoots burst missiles. -block.ripple.description = A large artillery turret which fires several shots simultaneously. -block.cyclone.description = A large rapid fire turret. -block.fuse.description = A large turret which shoots powerful short-range beams. -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.conveyor.description = Basic item transport block. Moved items forward and automatically deposits them into turrets or crafters. Rotatable. block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. 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.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. +block.distributor.description = An advanced router which splits items to up to 7 other directions equally. +block.overflow-gate.description = A combination splitter and router that only outputs to the left and right if the front path is blocked. block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. -block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon. -block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. -block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. -block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. -block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. -block.melter.description = Heats up stone to very high temperatures to obtain lava. -block.incinerator.description = Gets rid of any excess item or liquid. -block.spore-press.description = Compresses spore pods into oil. -block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. +block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. +block.rotary-pump.description = An advanced pump which doubles up speed by using power. +block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. +block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. +block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. +block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. +block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. +block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. +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.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes. +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left. block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning oil or flammable materials. -block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.thermal-generator.description = Generates a large amount of power from lava. +block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build. block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. -block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. -block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. -block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. -block.vault.description = Stores a large amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +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. block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. @@ -909,39 +982,43 @@ block.blast-drill.description = The ultimate drill. Requires large amounts of po block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.cultivator.description = Cultivates the soil with water in order to obtain biomatter. block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby. -block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. -block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. -block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. -block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. -block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. -block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +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. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. +block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. +block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader. +block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +block.hail.description = A small artillery turret. +block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. +block.lancer.description = A medium-sized turret which shoots charged electricity beams. +block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. +block.swarmer.description = A medium-sized turret which shoots burst missiles. +block.salvo.description = A medium-sized turret which fires shots in salvos. +block.fuse.description = A large turret which shoots powerful short-range beams. +block.ripple.description = A large artillery turret which fires several shots simultaneously. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.ghoul-factory.description = Produces heavy carpet bombers. +block.revenant-factory.description = Produces heavy laser ground units. block.dagger-factory.description = Produces basic ground units. +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = Produces advanced, armored ground units. block.fortress-factory.description = Produces heavy artillery ground units. -block.revenant-factory.description = Produces heavy laser ground units. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. -block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. -block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. -block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. -block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. -block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. -block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. -block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. -block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. -block.rotary-pump.description = An advanced pump which doubles up speed by using power. -block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. -block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. -block.distributor.description = An advanced router which splits items to up to 7 other directions equally. -block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. -block.item-source.description = Infinitely outputs items. Sandbox only. -block.liquid-source.description = Infinitely outputs liquids. Sandbox only. -block.item-void.description = Destroys any items which go into it without using power. Sandbox only. -block.power-source.description = Infinitely outputs power. Sandbox only. -block.power-void.description = Voids all power inputted into it. Sandbox only. -liquid.water.description = Commonly used for cooling machines and waste processing. -liquid.oil.description = Can be burnt, exploded or used as a coolant. -liquid.cryofluid.description = The most efficient liquid for cooling things down. +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. +block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it. +block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it. +block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it. +block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it. +block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it. diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index ed6dccbdc5..d8eb770353 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -96,7 +96,6 @@ server.admins = Адміністратори server.admins.none = Адміністраторів нема! server.add = Додати сервер server.delete = Ви впевнені, що хочете видалити цей сервер? -server.hostname = Хост: {0} server.edit = Редагувати сервер server.outdated = [crimson]Застарілий сервер![] server.outdated.client = [crimson]Застарілий клієнт![] @@ -645,6 +644,7 @@ mech.buildspeed = [LIGHT_GRAY]Швидкість будування: {0}% liquid.heatcapacity = [LIGHT_GRAY]Теплоємність: {0} liquid.viscosity = [LIGHT_GRAY]В’язкість: {0} liquid.temperature = [LIGHT_GRAY]Температура: {0} +block.sand-boulder.name = Sand Boulder block.grass.name = Трава block.sand-boulder.name = Пісочний валун block.salt.name = Сіль @@ -1027,4 +1027,4 @@ block.tau-mech-pad.description = Забезпечує перетворення block.omega-mech-pad.description = Забезпечує перетворення в тяжкоброньований ракетний мех.\nВикористовуйте, натискаючи, стоячи на ньому. block.javelin-ship-pad.description = Забезпечує перетворення в швидкий, легкоброньований перехоплювач.\nВикористовуйте, натискаючи, стоячи на ньому. block.trident-ship-pad.description = Забезпечує перетворення в тяжкий бомбардувальник.\nВикористовуйте, натискаючи, стоячи на ньому. -block.glaive-ship-pad.description = Забезпечує перетворення в великий, добреброньований корабель.\nВикористовуйте, натискаючи, стоячи на ньому. +block.glaive-ship-pad.description = Забезпечує перетворення в великий, добреброньований корабель.\nВикористовуйте, натискаючи, стоячи на ньому. \ No newline at end of file diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index bc965c8fb5..94e0930b97 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -4,6 +4,7 @@ contributors = 译者和贡献者 discord = 加入 Mindustry 的 Discord! link.discord.description = 官方 Mindustry Discord 聊天室 link.github.description = 游戏源码 +link.changelog.description = List of update changes link.dev-builds.description = 不稳定开发版 link.trello.description = Trello board 上的官方计划表 link.itch.io.description = PC版下载和网页版(itch.io) @@ -32,7 +33,6 @@ level.mode = 游戏模式: showagain = 下次不再显示 coreattack = < 核心正在受到攻击!> nearpoint = [[ [scarlet]立即离开敌人出生点[] ]\n将被全部清除 -outofbounds = [[ 超出边界 ]\n[]{0}秒后自毁 database = 核心数据库 savegame = 保存游戏 loadgame = 载入游戏 @@ -48,7 +48,7 @@ maps = 地图 continue = 继续 maps.none = [LIGHT_GRAY]没有找到地图! about.button = 关于 -name = 名字: +name = 名字: noname = 先取一个[accent]玩家名[]。 filename = 文件名: unlocked = 新方块已解锁! @@ -95,7 +95,6 @@ server.admins = 管理员 server.admins.none = 没有找到管理员! server.add = 添加服务器 server.delete = 你确定要删除这个服务器吗? -server.hostname = 主机:{0} server.edit = 编辑服务器 server.outdated = [crimson]过旧的服务器![] server.outdated.client = [crimson]过旧的客户端![] @@ -121,7 +120,7 @@ save.new = 新存档 save.overwrite = 你确定你要覆盖这个存档位吗? overwrite = 覆盖 save.none = 没有存档被找到! -saveload = [accent]正在保存... +saveload = [accent]正在保存…… savefail = 保存失败! save.delete.confirm = 你确定你要删除这个存档吗? save.delete = 删除 @@ -156,13 +155,6 @@ openlink = 打开链接 copylink = 复制链接 back = 返回 quit.confirm = 你确定你想要退出? -changelog.title = 更新日志 -changelog.loading = 正在获取更新日志…… -changelog.error.android = [accent]注意更新日志有时在安卓 4.4 以下不工作。\n这是安卓系统内部的一个bug。 -changelog.error.ios = [accent]更新日志当前在iOS中不被支持。 -changelog.error = [scarlet]获取更新日志失败!\n请检查你的网络。 -changelog.current = [yellow][[当前版本] -changelog.latest = [accent][[最新版本] loading = [accent]加载中…… saving = [accent]保存中…… wave = [accent]波次 {0} @@ -191,8 +183,10 @@ editor.mapinfo = 地图信息 editor.author = 作者: editor.description = 描述: editor.waves = 波数: -editor.rules = Rules: -editor.ingame = Edit In-Game +editor.rules = 规则: +editor.generation = Generation: +editor.ingame = 游戏内编辑 +editor.newmap = New Map waves.title = 波数 waves.remove = 移除 waves.never = <永不> @@ -207,18 +201,18 @@ waves.copy = 复制到剪贴板 waves.load = 从剪贴板读取 waves.invalid = 剪贴板中无效的波次信息。 waves.copied = 波次信息已复制。 +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY]<默认> edit = 编辑…… editor.name = 名称: -editor.spawn = Spawn Unit -editor.removeunit = Remove Unit +editor.spawn = 生成单位 +editor.removeunit = 移除单位 editor.teams = 队伍 -editor.elevation = 高度 editor.errorload = 读取文件时出现错误:\n[accent]{0} editor.errorsave = 保存文件时出现错误:\n[accent]{0} -editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. -editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported. -editor.errorheader = This map file is either not valid or corrupt. +editor.errorimage = 这是一幅画,不是地图。不要更改文件的扩展名来让他工作。\n\n如果你想导入地图,请在编辑器中使用“导入地图”这一按钮。 +editor.errorlegacy = 此地图太旧,而旧的地图格式不再受支持了。 +editor.errorheader = 此地图文件已失效或损坏。 editor.errorname = 地图没有被定义的名称。 editor.update = 更新 editor.randomize = 随机化 @@ -251,11 +245,31 @@ editor.mapname = 地图名称: editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。 editor.overwrite.confirm = [scarlet]警告![]存在同名地图。你确定你想要覆盖? editor.selectmap = 选择一个地图加载: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]没有过滤器(filters)!用下方的按钮添加一个。 filter.distort = 扭曲程度 filter.noise = 噪音(Noise) +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = 矿石数量 filter.rivernoise = 河流噪音(River Noise) +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = 分散程度 filter.terrain = 地形 filter.option.scale = 规模大小 @@ -265,8 +279,10 @@ filter.option.threshold = 门槛?(Threshold) filter.option.circle-scale = 圈规模?(Circle Scale) filter.option.octaves = 八度?(Octaves) filter.option.falloff = 减少?(Falloff) +filter.option.angle = Angle filter.option.block = 方块 filter.option.floor = 地面 +filter.option.flooronto = Target Floor filter.option.wall = 墙 filter.option.ore = 矿石 filter.option.floor2 = 第二地面?(Secondary Floor) @@ -277,6 +293,7 @@ width = 宽度: height = 高度: menu = 菜单 play = 开始游戏 +campaign = Campaign load = 载入游戏 save = 保存 fps = FPS: {0} @@ -287,7 +304,7 @@ settings = 设置 tutorial = 教程 editor = 编辑器 mapeditor = 地图编辑器 -donate = 捐赠 +donate = 打赏 abandon = 放弃 abandon.text = 这个区域和它的所有资源会被敌人重置。 locked = 已被锁定 @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0} 已解锁。 zone.requirement.complete = 已达到第{0}波。\n达到解锁{1}的需求。 zone.config.complete = 已达到第{0}波。\n允许携带发射的资源进入此地区。 zone.resources = 地图中的资源: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = 添加 boss.health = BOSS 生命值 connectfail = [crimson]服务器连接失败:[accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = 已连接。 error.mapnotfound = 找不到地图文件! error.io = 网络 I/O 错误。 error.any = 未知网络错误。 +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = 零号地区 zone.desertWastes.name = 沙漠废物 zone.craters.name = 陨石带 @@ -328,6 +349,22 @@ zone.desolateRift.name = 荒芜裂谷 zone.nuclearComplex.name = 核裂变 zone.overgrowth.name = 增生区 zone.tarFields.name = 石油田 +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = 语言 settings.reset = 恢复默认 settings.rebind = 重新绑定 @@ -346,12 +383,14 @@ no = 不 info.title = [accent]详情 error.title = [crimson]发生了一个错误 error.crashtitle = 发生了一个错误 +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = 输入 blocks.output = 输出 blocks.booster = 加成物品/液体 block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = 能量容量 blocks.powershot = 能量/发射 +blocks.damage = Damage blocks.targetsair = 攻击空中单位 blocks.targetsground = 攻击地面单位 blocks.itemsmoved = 移动速度 @@ -373,7 +412,7 @@ blocks.drillspeed = 基础钻探速度 blocks.boosteffect = 加成影响 blocks.maxunits = 最大单位数量 blocks.health = 生命值 -blocks.buildtime = Build Time +blocks.buildtime = 建造时间 blocks.inaccuracy = 误差 blocks.shots = 发射数 blocks.reload = 重新装弹 @@ -421,15 +460,17 @@ category.shooting = 发射 category.optional = 可选的增强物品 setting.landscape.name = 锁定横屏 setting.shadows.name = 影子 -setting.linear.name = Linear Filtering +setting.linear.name = 线性滤波 setting.animatedwater.name = 流动的水 setting.animatedshields.name = 动态画面 setting.antialias.name = 抗锯齿[LIGHT_GRAY] (需要重新启动)[] setting.indicators.name = 队友指示器 setting.autotarget.name = 自动发射 +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = FPS限制 setting.fpscap.none = 无 setting.fpscap.text = {0} FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = 总是自动铺设 setting.difficulty.training = 训练 setting.difficulty.easy = 简单 @@ -443,7 +484,7 @@ setting.sensitivity.name = 控制器灵敏度 setting.saveinterval.name = 自动保存间隔 setting.seconds = {0} 秒 setting.fullscreen.name = 全屏 -setting.borderlesswindow.name = Borderless Window[LIGHT_GRAY] (may require restart) +setting.borderlesswindow.name = 全屏化[LIGHT_GRAY] (可能需要重启) setting.fps.name = 显示 FPS setting.vsync.name = 帧同步 setting.lasers.name = 显示能量射线 @@ -456,7 +497,11 @@ setting.mutesound.name = 静音 setting.crashreport.name = 发送匿名崩溃报告 setting.chatopacity.name = 聊天界面透明度 setting.playerchat.name = 显示游戏内聊天界面 +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = 重新绑定按键 +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = 普通 category.view.name = 查看 category.multiplayer.name = 多人 @@ -494,17 +539,18 @@ keybind.drop_unit.name = 掉落单位 keybind.zoom_minimap.name = 小地图缩放 mode.help.title = 模式说明 mode.survival.name = 生存 -mode.survival.description = 正常的游戏模式,有限的资源和自动波次。 +mode.survival.description = 正常的游戏模式,有限的资源和自动波次。 mode.sandbox.name = 沙盒 mode.sandbox.description = 无限的资源,不会自动生成敌人。 mode.pvp.name = PvP mode.pvp.description = 和本地玩家对战。 mode.attack.name = 攻击 -mode.attack.description = 没有波数,但是有摧毁敌人基地的任务。 +mode.attack.description = 没有波数,但是有摧毁敌人基地的任务。 mode.custom = 自定义模式 rules.infiniteresources = 无限资源 rules.wavetimer = 波次计时器 rules.waves = 波次 +rules.attack = Attack Mode rules.enemyCheat = 敌人无限资源 rules.unitdrops = 敌人出生点 rules.unitbuildspeedmultiplier = 单位生产速度倍数 @@ -533,36 +579,21 @@ content.unit.name = 部队 content.block.name = 块 content.mech.name = 机甲 item.copper.name = 铜 -item.copper.description = 一种有用的结构材料。在各种类型的方块中广泛使用。 item.lead.name = 铅 -item.lead.description = 一种基本的起始材料。被广泛用于电子设备和液体运输方块。 item.coal.name = 煤 -item.coal.description = 一种常见并容易获得的燃料。 item.graphite.name = 石墨 item.titanium.name = 钛 -item.titanium.description = 一种罕见的超轻金属,被广泛运用于液体运输、钻头和飞机。 item.thorium.name = 钍 -item.thorium.description = 一种致密的放射性金属,用作结构支撑和核燃料。 item.silicon.name = 硅 -item.silicon.description = 一种非常有用的半导体,被用于太阳能电池板和很多复杂的电子设备。 item.plastanium.name = 塑钢 -item.plastanium.description = 一种轻质,可延展的材料,用于高级的飞机和碎片弹药。 item.phase-fabric.name = 相织物 -item.phase-fabric.description = 一种接近0重量的物质,用于先进的电子技术和自我修复技术。 item.surge-alloy.name = 巨浪合金 -item.surge-alloy.description = 一种具有独特电气性能的高级合金。 item.spore-pod.name = 孢子荚 -item.spore-pod.description = 一种用于制造石油,炸药及燃料的生物质。 item.sand.name = 沙 -item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。 item.blast-compound.name = 爆炸混合物 -item.blast-compound.description = 一种用于炸弹和炸药的挥发性混合物。虽然它可以作为燃料燃烧,但不建议这样做。 item.pyratite.name = 硫 -item.pyratite.description = 一种燃烧武器中使用的极易燃物质。 item.metaglass.name = 钢化玻璃 -item.metaglass.description = 一种超级强硬的复合玻璃。通常用来传送和收藏液体 item.scrap.name = 废料 -item.scrap.description = 一种废弃的建筑物及废弃单位的残骸,富含多种金属元素。 liquid.water.name = 水 liquid.slag.name = 岩浆 liquid.oil.name = 石油 @@ -570,31 +601,23 @@ liquid.cryofluid.name = 冷冻液 mech.alpha-mech.name = 阿尔法 mech.alpha-mech.weapon = 重型机枪 mech.alpha-mech.ability = 无人机群 -mech.alpha-mech.description = 标准的机甲。具有不错的速度和伤害输出,可以制造多达 3 架无人机以提高进攻能力。 mech.delta-mech.name = 德尔塔 mech.delta-mech.weapon = 电弧发电机 mech.delta-mech.ability = 放电 -mech.delta-mech.description = 一种快速,轻便的机甲,一击即退。对结构造成的伤害很小,但可以用弧形闪电武器很快杀死大量敌方单位。 mech.tau-mech.name = 医疗机 mech.tau-mech.weapon = 重构激光 mech.tau-mech.ability = 修复 -mech.tau-mech.description = 后勤机甲。治疗友军。可以熄灭火焰并治疗一定范围内的友军。 mech.omega-mech.name = 欧米茄 mech.omega-mech.weapon = 导弹群 mech.omega-mech.ability = 配置装甲 -mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达90%的伤害。 mech.dart-ship.name = 飞镖 mech.dart-ship.weapon = 机枪 -mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。 mech.javelin-ship.name = 标枪 -mech.javelin-ship.description = 一艘一击即退的攻击船。虽然最初很慢,但它可以加速到很快的速度,并飞过敌人的前哨,利用其闪电能力和导弹造成大量伤害。 mech.javelin-ship.weapon = 爆裂导弹 mech.javelin-ship.ability = 放电助推器 mech.trident-ship.name = 三叉戟 -mech.trident-ship.description = 一种重型轰炸机。有厚装甲。 mech.trident-ship.weapon = 炸弹 mech.glaive-ship.name = 阔剑 -mech.glaive-ship.description = 一种大型,装甲厚重的武装直升机。配备燃烧机枪。有优秀的加速能力和最快的速度。 mech.glaive-ship.weapon = 火焰机枪 item.explosiveness = [LIGHT_GRAY]爆炸性:{0} item.flammability = [LIGHT_GRAY]易燃性:{0} @@ -611,16 +634,18 @@ mech.buildspeed = [LIGHT_GRAY]建造速度:{0}% liquid.heatcapacity = [LIGHT_GRAY]热容量:{0} liquid.viscosity = [LIGHT_GRAY]粘度:{0} liquid.temperature = [LIGHT_GRAY]温度:{0} +block.sand-boulder.name = Sand Boulder block.grass.name = 草地 block.salt.name = 盐碱地 -block.saltrocks.name = Salt Rocks -block.pebbles.name = Pebbles -block.tendrils.name = Tendrils +block.saltrocks.name = 盐碱岩石 +block.pebbles.name = 鹅卵石 +block.tendrils.name = 卷须 block.sandrocks.name = 沙岩块 block.spore-pine.name = 孢子树 block.sporerocks.name = 孢子岩石 block.rock.name = 岩石 block.snowrock.name = 雪岩石 +block.snow-pine.name = Snow Pine block.shale.name = 页岩地 block.shale-boulder.name = 页岩巨石 block.moss.name = 苔藓地 @@ -633,9 +658,8 @@ block.scrap-wall-huge.name = 巨型废墙 block.scrap-wall-gigantic.name = 超巨型废墙 block.thruster.name = 助力器 block.kiln.name = 熔炉 -block.kiln.description = 将铅和沙子熔炼成钢化玻璃,需要少量电力。 block.graphite-press.name = 石墨压缩机 -block.multi-press.name = 大型石墨压缩机 +block.multi-press.name = 多重压缩机 block.constructing = {0}\n[LIGHT_GRAY](建造中) block.spawn.name = 敌人出生点 block.core-shard.name = 小型核心 @@ -702,9 +726,7 @@ block.junction.name = 连接点 block.router.name = 路由器 block.distributor.name = 分配器 block.sorter.name = 分类器 -block.sorter.description = 对物品进行分类。如果物品与所选种类,则允许其通过。否则,物品将从左边和右边输出。 block.overflow-gate.name = 溢流门 -block.overflow-gate.description = 分离器和路由器的组合,如果前面被挡住,则向从左和右输出。 block.silicon-smelter.name = 硅冶炼厂 block.phase-weaver.name = 相织布编织器 block.pulverizer.name = 粉碎机 @@ -727,7 +749,7 @@ block.mechanical-drill.name = 机械钻头 block.pneumatic-drill.name = 气动钻头 block.laser-drill.name = 激光钻头 block.water-extractor.name = 抽水机 -block.cultivator.name = 耕种机 +block.cultivator.name = 培养机 block.dart-mech-pad.name = 飞镖 机甲平台 block.delta-mech-pad.name = 德尔塔 机甲平台 block.javelin-ship-pad.name = 标枪 机甲平台 @@ -756,6 +778,7 @@ block.blast-mixer.name = 爆炸混合器 block.solar-panel.name = 太阳能电池 block.solar-panel-large.name = 大型太阳能电池 block.oil-extractor.name = 石油钻井 +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = 轻型无人机工厂 block.phantom-factory.name = 鬼怪无人机工厂 block.wraith-factory.name = 幻影战机工厂 @@ -794,7 +817,6 @@ block.spectre.name = 幽灵 block.meltdown.name = 熔毁 block.container.name = 容器 block.launch-pad.name = 发射台 -block.launch-pad.description = 不通过核心发射物体。尚未完成。 block.launch-pad-large.name = 大型发射台 team.blue.name = 蓝 team.red.name = 红 @@ -803,20 +825,14 @@ team.none.name = 灰 team.green.name = 绿 team.purple.name = 紫 unit.spirit.name = 轻型无人机 -unit.spirit.description = 初始无人机。默认情况下在内核中生成。自动开采矿石,收集物品和修理块。 +unit.draug.name = Draug Miner Drone unit.phantom.name = 鬼怪无人机 -unit.phantom.description = 一种先进的无人机单位。自动开采矿石,收集物品和修理块。比初始无人机有效得多。 unit.dagger.name = 尖刀 -unit.dagger.description = 基础的地面单位,在蜂群中很有用。 unit.crawler.name = 爬行者 unit.titan.name = 泰坦 -unit.titan.description = 高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位. unit.ghoul.name = 食尸鬼轰炸机 -unit.ghoul.description = 重型地毯轰炸机。用爆炸化合物或黄铁矿作为弹药。 unit.wraith.name = 幻影战机 -unit.wraith.description = 一种快速,打了就跑的截击机。 unit.fortress.name = 堡垒 -unit.fortress.description = 一种重炮地面部队。 unit.revenant.name = 亡魂 unit.eruptor.name = 暴君 unit.chaos-array.name = 混沌者 @@ -844,8 +860,74 @@ tutorial.daggerfactory = 建造一个[accent] 尖刀机甲工厂.[]\n\n它可以 tutorial.router = 工厂需要资源来运作.\n造一个路由器来分发传送资源. tutorial.dagger = 链接能源节点到工厂.\n一旦需求满足, 将会制作一个机甲.\n\n根据需要制作更多的钻头,发电机,传送带. tutorial.battle = [LIGHT_GRAY] 敌人[] 的核心已经暴露。\n用你的尖刀机甲摧毁它。 +item.copper.description = 一种有用的结构材料。在各种类型的方块中广泛使用。 +item.lead.description = 一种基本的起始材料。被广泛用于电子设备和液体运输方块。 +item.metaglass.description = 一种超级强硬的复合玻璃。通常用来传送和收藏液体 +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +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 = 一种接近0重量的物质,用于先进的电子技术和自我修复技术。 +item.surge-alloy.description = 一种具有独特电气性能的高级合金。 +item.spore-pod.description = 一种用于制造石油,炸药及燃料的生物质。 +item.blast-compound.description = 一种用于炸弹和炸药的挥发性混合物。虽然它可以作为燃料燃烧,但不建议这样做。 +item.pyratite.description = 一种燃烧武器中使用的极易燃物质。 +liquid.water.description = 通常用于冷却和废物处理。 +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 = 可以燃烧,爆炸或用作冷却液。 +liquid.cryofluid.description = 用于降温的最有效液体。 +mech.alpha-mech.description = 标准的机甲。具有不错的速度和伤害输出,可以制造多达 3 架无人机以提高进攻能力。 +mech.delta-mech.description = 一种快速,轻便的机甲,一击即退。对结构造成的伤害很小,但可以用弧形闪电武器很快杀死大量敌方单位。 +mech.tau-mech.description = 后勤机甲。治疗友军。可以熄灭火焰并治疗一定范围内的友军。 +mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达90%的伤害。 +mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。 +mech.javelin-ship.description = 一艘一击即退的攻击船。虽然最初很慢,但它可以加速到很快的速度,并飞过敌人的前哨,利用其闪电能力和导弹造成大量伤害。 +mech.trident-ship.description = 一种重型轰炸机。有厚装甲。 +mech.glaive-ship.description = 一种大型,装甲厚重的武装直升机。配备燃烧机枪。有优秀的加速能力和最快的速度。 +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = 初始无人机。默认情况下在内核中生成。自动开采矿石,收集物品和修理块。 +unit.phantom.description = 一种先进的无人机单位。自动开采矿石,收集物品和修理块。比初始无人机有效得多。 +unit.dagger.description = 基础的地面单位,在蜂群中很有用。 +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = 高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位. +unit.fortress.description = 一种地面重炮部队。 +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = 一种快速,打了就跑的截击机。 +unit.ghoul.description = 重型地毯轰炸机。用爆炸化合物或黄铁矿作为弹药。 +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = 用高纯度的焦炭来加工沙子以生产硅。 +block.kiln.description = 将铅和沙子熔炼成钢化玻璃,需要少量电力。 +block.plastanium-compressor.description = 用石油和钛生产塑钢。 +block.phase-weaver.description = 用放射性钍和大量沙子生产相织物。 +block.alloy-smelter.description = 用钛,铅,硅和铜生产浪涌合金。 +block.cryofluidmixer.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 = Solidifes oil into chunks of coal. +block.incinerator.description = 用于除掉任何多余的物品或液体。 +block.power-void.description = 消耗输入的所有功率。仅限沙箱。 +block.power-source.description = 无限输出功率。仅限沙箱。 +block.item-source.description = 无限输出物品。仅限沙箱。 +block.item-void.description = 在不使用电源的情况下销毁任何进入它的物品。仅限沙箱。 +block.liquid-source.description = 无限输出液体。仅限沙箱。 block.copper-wall.description = 廉价的防守区块。\n用于保护前几波中的核心和炮塔。 block.copper-wall-large.description = 廉价的防御块。\n用于保护前几个波浪中的核心和炮塔。\n跨越多个块。 +block.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.thorium-wall.description = 强大的防守区块。\n很好的防御敌人。 block.thorium-wall-large.description = 强大的防守区块。\n很好地防御敌人。\n跨越多个块。 block.phase-wall.description = 没有钍墙那样坚固,但是它可以使不太强的子弹发生偏转。 @@ -854,94 +936,89 @@ block.surge-wall.description = 强大的防守区块。\n有很小的机会向 block.surge-wall-large.description = 强大的防御区块。\n有很小的机会向攻击者发射闪电。\n跨越多个区块。 block.door.description = 一扇小门,可以通过点击打开和关闭。\n如果打开,敌人可以射击并穿过。 block.door-large.description = 一扇大门,可以通过点击打开和关闭。\n如果打开,敌人可以射击并穿过。\n扫过多个瓷砖。 +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 = 定期修复附近的建筑物。 -block.overdrive-projector.description = 提高附近建筑物的速度,如钻机和传送带。 +block.overdrive-projector.description = 提高附近建筑物的速度,如钻头和传送带。 block.force-projector.description = 自身周围创建一个六边形力场,保护建筑物和内部单位免受子弹的伤害。 block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。 -block.duo.description = 小而便宜的炮塔。 -block.scatter.description = 中型防空炮塔,向空中单位发射铅或废料。 -block.arc.description = 小型炮塔,发射电弧。 -block.hail.description = 小型炮兵炮台。 -block.lancer.description = 中型炮塔,发射带电的电子束。 -block.wave.description = 中型快速炮塔,射出液体泡泡。 -block.salvo.description = 中型炮塔,齐射射击。 -block.swarmer.description = 发射爆炸导弹的中型炮塔。 -block.ripple.description = 大型炮兵炮塔,可同时向多个目标开火。 -block.cyclone.description = 大型快速炮塔。 -block.fuse.description = 发射强大的短程光束的大型炮塔。 -block.spectre.description = 大型炮塔,一次射出两颗强大的子弹。 -block.meltdown.description = 发射强大的远程光束的大型炮塔。 block.conveyor.description = 初级传送带。将物品向前移动并自动将它们放入炮塔或工厂中。可旋转方向。 block.titanium-conveyor.description = 高级传送带。能比初级传送带更快地移动物品。 -block.phase-conveyor.description = 高级传送带。使用电力将物品传送到距离几个块的相位传送带上。 block.junction.description = 为两条交叉传送带的桥梁。适用于两种不同传送带将不同材料运送到不同位置的情况。 +block.bridge-conveyor.description = 高级项目传输块。允许在跨越任何地形或建筑物上运输物品,最多跨越3个块。 +block.phase-conveyor.description = 高级传送带。使用电力将物品传送到距离几个块的相位传送带上。 +block.sorter.description = 对物品进行分类。如果物品与所选种类,则允许其通过。否则,物品将从左边和右边输出。 +block.router.description = 从一个方向接受物品,并将它们平均输出到最多3个其他方向。用于将材料从一个源分割为多个目标。 +block.distributor.description = 一个高级路由器,可以将物品分成最多7个方向。 +block.overflow-gate.description = 分离器和路由器的组合,如果前面被挡住,则向从左和右输出。 block.mass-driver.description = 终极传送带。收集几件物品,然后将它们射向长距离外的另一个批量传送带。 -block.silicon-smelter.description = 用高纯度的焦炭来加工沙子以生产硅。 -block.plastanium-compressor.description = 用油和钛生产塑钢。 -block.phase-weaver.description = 用放射性钍和大量沙子生产相织物。 -block.alloy-smelter.description = 用钛,铅,硅和铜生产浪涌合金。 -block.pulverizer.description = 将石头压成沙子。当缺少天然沙子时很有用。 -block.pyratite-mixer.description = 用煤,铅和沙子混合成高度易燃的硫。 -block.blast-mixer.description = 用油将硫转化为不易燃但更具爆炸性的爆炸化合物。 -block.cryofluidmixer.description = 水和钛结合到低温流体中,冷却效率更高。 -block.melter.description = 石头加热到很高的温度以获得熔岩。 -block.incinerator.description = 用于除掉任何多余的物品或液体。 -block.spore-press.description = 压缩孢子荚得到石油。 -block.separator.description = 将石头暴露在水压下,以获得石头中含有的各种矿物质。 +block.mechanical-pump.description = 一种输出速度慢但没有功耗的廉价泵。 +block.rotary-pump.description = 一种先进的泵,通过使用动力使速度加倍。 +block.thermal-pump.description = 终级水泵。 +block.conduit.description = 基本液体传输块。像输送机一样工作,但用于液体。最适用于提取器,泵或其他导管。 +block.pulse-conduit.description = 高级液体传输块。比标准导管更快地输送液体并储存更多液体。 +block.liquid-router.description = 接受来自一个方向的液体并将它们平均输出到最多3个其他方向。也可以储存一定量的液体。用于将液体从一个源分成多个目标。 +block.liquid-tank.description = 存储大量液体。当存在对材料的非恒定需求或作为冷却重要块的安全措施时,将其用于创建缓冲区。 +block.liquid-junction.description = 作为两个交叉管道的桥梁。适用于两种不同导管将不同液体输送到不同位置的情况。 +block.bridge-conduit.description = 高级液体传输块。允许在任何地形或建筑物的最多3个块上运输液体。 +block.phase-conduit.description = 高级液体传输块。使用电力将液体传送到多个块上的连接相管道。 block.power-node.description = 连接节点传输电源。最多可连接四个电源,接收器或节点。节点将从任何相邻块接收电力或向其供电。 block.power-node-large.description = 传输径大于电源节点,最多可连接六个电源,接收器或节点。 +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = 储存电力,当储存有能量时,可在电力短缺时提供电力。 block.battery-large.description = 比普通电池容量更大。 block.combustion-generator.description = 通过燃烧油或易燃材料产生电力。 +block.thermal-generator.description = 当放置在热的地方时发电。 block.turbine-generator.description = 比燃烧发电机更有效,但需要额外的水。 -block.thermal-generator.description = 从熔岩中产生大量的能量。 +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = 一种放射性同位素热电发电机,它不需要冷却,但功率低于钍反应堆。 block.solar-panel.description = 标准太阳能面板,提供少量电力。 block.solar-panel-large.description = 比标准太阳能电池板提供更好的电源,但构建起来要贵得多。 block.thorium-reactor.description = 高放射性钍产生大量电力。需要持续冷却。如果供应的冷却剂量不足,会剧烈爆炸。 -block.rtg-generator.description = 一种放射性同位素热电发电机,它不需要冷却,但功率低于钍反应堆。 -block.unloader.description = 物品从容器,仓库或核心卸载到传送带上或直接卸载到相邻的块中。可以通过点击卸载器来更改要卸载的项目类型。 -block.container.description = 存储少量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。 [LIGHT_GRAY]卸载器[]可用于从容器中获取物品。 -block.vault.description = 存储大量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。 [LIGHT_GRAY]卸载器[]可用于从仓库中获取物品。 +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 = 便宜的钻头。放置在适当的块上时,无限期地以缓慢的速度输出物品。 block.pneumatic-drill.description = 一种改进的钻头,它更快,能够利用气压处理更硬的材料。 block.laser-drill.description = 通过激光技术更快地钻孔,但需要电源。此外,这种钻头可以回收放射性钍。 block.blast-drill.description = 终极钻头,需要大量电力。 block.water-extractor.description = 从地下提取水。当附近没有湖泊时使用它。 -block.cultivator.description = 用水培育土壤以获得生物物质。 +block.cultivator.description = 将微小浓度的孢子培养成工业用的孢子荚。 block.oil-extractor.description = 使用大量的电力从沙子中提取石油。当附近没有直接的石油来源时使用它。 -block.trident-ship-pad.description = 离开你当前的装置,换成一个装甲合理的重型轰炸机。\n站在上面时双击切换。 -block.javelin-ship-pad.description = 离开你当前的装置,换上一个强大而快速的截击机,用闪电武器。\n站在上面时双击切换。 -block.glaive-ship-pad.description = 离开现有的装置,换成装甲良好的大型武装直升机。\n站在上面时双击切换。 -block.tau-mech-pad.description = 离开你当前的装置并换成一个可以治愈友方建筑物和单位的支撑机械。\n站在上面时双击切换。 -block.delta-mech-pad.description = 离开你当前的装置并换成一个快速,轻装甲的机械装置,用于快速攻击。\n站在上面时双击切换。 -block.omega-mech-pad.description = 离开你当前的装置并换成一个笨重且装甲良好的机甲,用于前线攻击。\n站在上面时双击切换。 +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 = 存储大量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。 [LIGHT_GRAY]卸载器[]可用于从仓库中获取物品。 +block.container.description = 存储少量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。 [LIGHT_GRAY]卸载器[]可用于从容器中获取物品。 +block.unloader.description = 物品从容器,仓库或核心卸载到传送带上或直接卸载到相邻的块中。可以通过点击卸载器来更改要卸载的项目类型。 +block.launch-pad.description = 不通过核心发射物体。尚未完成。 +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = 小而便宜的炮塔。 +block.scatter.description = 中型防空炮塔,向空中单位发射铅或废料。 +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = 生产轻型无人机,用于开采矿石和修复块。 block.phantom-factory.description = 生产高级无人机单元,它比轻型无人机更有效。 block.wraith-factory.description = 生产快速截击机。 block.ghoul-factory.description = 生产重型地毯轰炸机。 +block.revenant-factory.description = 生产重型激光地面单元。 block.dagger-factory.description = 生产基本地面单位。 +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = 生产先进的装甲地面单位。 block.fortress-factory.description = 生产重型火炮地面部队。 -block.revenant-factory.description = 生产重型激光地面单元。 block.repair-point.description = 连续治疗附近最近的受损单位。 -block.conduit.description = 基本液体传输块。像输送机一样工作,但用于液体。最适用于提取器,泵或其他导管。 -block.pulse-conduit.description = 高级液体传输块。比标准导管更快地输送液体并储存更多液体。 -block.phase-conduit.description = 高级液体传输块。使用电力将液体传送到多个块上的连接相管道。 -block.liquid-router.description = 接受来自一个方向的液体并将它们平均输出到最多3个其他方向。也可以储存一定量的液体。用于将液体从一个源分成多个目标。 -block.liquid-tank.description = 存储大量液体。当存在对材料的非恒定需求或作为冷却重要块的安全措施时,将其用于创建缓冲区。 -block.liquid-junction.description = 作为两个交叉管道的桥梁。适用于两种不同导管将不同液体输送到不同位置的情况。 -block.bridge-conduit.description = 高级液体传输块。允许在任何地形或建筑物的最多3个块上运输液体。 -block.mechanical-pump.description = 一种输出速度慢但没有功耗的廉价泵。 -block.rotary-pump.description = 一种先进的泵,通过使用动力使速度加倍。 -block.thermal-pump.description = 终级水泵。速度是机械泵的三倍。是唯一能够回收熔岩的泵。 -block.router.description = 从一个方向接受物品,并将它们平均输出到最多3个其他方向。用于将材料从一个源分割为多个目标。 -block.distributor.description = 一个高级路由器,可以将物品分成最多7个方向。 -block.bridge-conveyor.description = 高级项目传输块。允许在跨越任何地形或建筑物上运输物品,最多跨越3个块。 -block.item-source.description = 无限输出物品。仅限沙箱。 -block.liquid-source.description = 无限输出液体。仅限沙箱。 -block.item-void.description = 在不使用电源的情况下销毁任何进入它的物品。仅限沙箱。 -block.power-source.description = 无限输出功率。仅限沙箱。 -block.power-void.description = 消耗输入的所有功率。仅限沙箱。 -liquid.water.description = 通常用于冷却和废物处理。 -liquid.oil.description = 可以燃烧,爆炸或用作冷却液。 -liquid.cryofluid.description = 用于降温的最有效液体。 +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = 离开你当前的装置并换成一个快速,轻装甲的机械装置,用于快速攻击。\n站在上面时双击切换。 +block.tau-mech-pad.description = 离开你当前的装置并换成一个可以治愈友方建筑物和单位的支撑机械。\n站在上面时双击切换。 +block.omega-mech-pad.description = 离开你当前的装置并换成一个笨重且装甲良好的机甲,用于前线攻击。\n站在上面时双击切换。 +block.javelin-ship-pad.description = 离开你当前的装置,换上一个强大而快速的截击机,用闪电武器。\n站在上面时双击切换。 +block.trident-ship-pad.description = 离开你当前的装置,换成一个装甲合理的重型轰炸机。\n站在上面时双击切换。 +block.glaive-ship-pad.description = 离开现有的装置,换成装甲良好的大型武装直升机。\n站在上面时双击切换。 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index a064fd28c3..a3dfa3d560 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -4,6 +4,7 @@ contributors = 翻譯員和貢獻者 discord = 加入 Mindustry 的 Discord 聊天室! link.discord.description = 官方 Mindustry Discord 聊天室 link.github.description = 遊戲原始碼 +link.changelog.description = List of update changes link.dev-builds.description = 開發中版本 link.trello.description = 官方 Trello 功能規劃看板 link.itch.io.description = itch.io 電腦版下載與網頁版 @@ -32,7 +33,6 @@ level.mode = 遊戲模式: showagain = 下次不再顯示 coreattack = 〈核心正在受到攻擊!〉 nearpoint = 【[scarlet]立即離開下降點[]】\n湮滅即將來臨 -outofbounds = 【超出界限】\n[]於{0}秒後自我毀滅 database = 核心數據庫 savegame = 儲存遊戲 loadgame = 載入遊戲 @@ -95,7 +95,6 @@ server.admins = 管理員 server.admins.none = 找不到管理員! server.add = 新增伺服器 server.delete = 您確定要刪除這個伺服器嗎? -server.hostname = 主機:{0} server.edit = 編輯伺服器 server.outdated = [crimson]伺服器版本過舊![] server.outdated.client = [crimson]客戶端版本過舊![] @@ -156,13 +155,6 @@ openlink = 開啟連結 copylink = 複製連結 back = 返回 quit.confirm = 您確定要退出嗎? -changelog.title = 更新日誌 -changelog.loading = 正在取得更新日誌…… -changelog.error.android = [accent]請注意,更新日誌有時無法在Android 4.4或更低版本使用!這是因為 Android 的內部錯誤導致。 -changelog.error.ios = [accent]目前無法在iOS系統中使用更新日誌。 -changelog.error = [scarlet]無法取得更新日誌!請檢查您的網路連線! -changelog.current = [yellow][[Current version] -changelog.latest = [accent][[Latest version] loading = [accent]載入中…… saving = [accent]儲存中…… wave = [accent]第{0}波 @@ -192,7 +184,9 @@ editor.author = 作者: editor.description = 描述: editor.waves = 波次: editor.rules = 規則: +editor.generation = Generation: editor.ingame = 在遊戲中編輯 +editor.newmap = New Map waves.title = 波次 waves.remove = 移除 waves.never = 〈從來沒有〉 @@ -207,13 +201,13 @@ waves.copy = 複製到剪貼板 waves.load = 從剪貼板加載 waves.invalid = 剪貼板中的波次無效。 waves.copied = 波次已被複製。 +waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. editor.default = [LIGHT_GRAY]〈默認〉 edit = 編輯…… editor.name = 名稱: editor.spawn = 重生單位 editor.removeunit = 移除單位 editor.teams = 隊伍 -editor.elevation = 高度 editor.errorload = 加載文件時出錯:\n[accent]{0} editor.errorsave = 保存文件時出錯:\n[accent]{0} editor.errorimage = 這是一個圖像檔,而不是地圖。不要更改副檔名使它可用。\n\n如果要匯入地形圖像檔,請使用編輯器中的「匯入地形圖像檔」按鈕。 @@ -251,11 +245,31 @@ editor.mapname = 地圖名稱: editor.overwrite = [accent]警告!這將會覆蓋現有的地圖。 editor.overwrite.confirm = [scarlet]警告![]同名地圖存在,確定要覆蓋現有地圖? editor.selectmap = 選取要載入的地圖: +toolmode.replace = Replace +toolmode.replace.description = Draws only on solid blocks. +toolmode.replaceall = Replace All +toolmode.replaceall.description = Replace all blocks in map. +toolmode.orthogonal = Orthogonal +toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.square = Square +toolmode.square.description = Square brush. +toolmode.eraseores = Erase Ores +toolmode.eraseores.description = Erase only ores. +toolmode.fillteams = Fill Teams +toolmode.fillteams.description = Fill teams instead of blocks. +toolmode.drawteams = Draw Teams +toolmode.drawteams.description = Draw teams instead of blocks. filters.empty = [LIGHT_GRAY]沒有過濾器!使用下面的按鈕添加一個。 filter.distort = 歪曲 filter.noise = 噪聲 +filter.median = Median +filter.blend = Blend +filter.defaultores = Default Ores filter.ore = 礦石 filter.rivernoise = 河流噪聲 +filter.mirror = Mirror +filter.clear = Clear +filter.option.ignore = Ignore filter.scatter = 分散 filter.terrain = 地形 filter.option.scale = 比例 @@ -265,8 +279,10 @@ filter.option.threshold = 閾 filter.option.circle-scale = 圓形比例 filter.option.octaves = 倍頻 filter.option.falloff = 衰減 +filter.option.angle = Angle filter.option.block = 方塊 filter.option.floor = 地板 +filter.option.flooronto = Target Floor filter.option.wall = 牆 filter.option.ore = 礦石 filter.option.floor2 = 次要地板 @@ -277,6 +293,7 @@ width = 寬度: height = 長度: menu = 主選單 play = 開始 +campaign = Campaign load = 載入 save = 儲存 fps = FPS:{0} @@ -307,6 +324,9 @@ zone.unlocked = [LIGHT_GRAY]{0}已解鎖。 zone.requirement.complete = 到達波次{0}:\n滿足{1}區域要求。 zone.config.complete = 到達波次{0}:\n裝載配置已解鎖。 zone.resources = 檢測到的資源: +zone.objective = [lightgray]Objective: [accent]{0} +zone.objective.survival = Survive +zone.objective.attack = Destroy Enemy Core add = 新增…… boss.health = 頭目血量 connectfail = [crimson]無法連線到伺服器:[accent]{0} @@ -318,6 +338,7 @@ error.alreadyconnected = 已連接。 error.mapnotfound = 找不到地圖! error.io = 網絡輸入輸出錯誤。 error.any = 未知網絡錯誤。 +error.bloom = Failed to initialize bloom.\nYour device may not support it. zone.groundZero.name = 歸零地 zone.desertWastes.name = 沙漠荒原 zone.craters.name = 隕石坑 @@ -328,6 +349,22 @@ zone.desolateRift.name = 荒涼的裂痕 zone.nuclearComplex.name = 核生產綜合體 zone.overgrowth.name = 增生 zone.tarFields.name = 焦油田 +zone.saltFlats.name = Salt Flats +zone.impact0078.name = Impact 0078 +zone.crags.name = Crags +zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. +zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. +zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed. +zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. +zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. +zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. +zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. +zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. +zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. +zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. +zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. +zone.impact0078.description = +zone.crags.description = settings.language = 語言 settings.reset = 重設為預設設定 settings.rebind = 重新綁定 @@ -346,12 +383,14 @@ no = 否 info.title = [accent]資訊 error.title = [crimson]發生錯誤 error.crashtitle = 發生錯誤 +attackpvponly = [scarlet]Only available in Attack/PvP modes blocks.input = 輸入 blocks.output = 輸出 blocks.booster = 加速器 block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = 蓄電量 blocks.powershot = 能量/射擊 +blocks.damage = Damage blocks.targetsair = 攻擊空中目標 blocks.targetsground = 攻擊地面 blocks.itemsmoved = 移動速度 @@ -427,9 +466,11 @@ setting.animatedshields.name = 動畫力牆 setting.antialias.name = 消除鋸齒[LIGHT_GRAY](需要重啟)[] setting.indicators.name = 盟友指標 setting.autotarget.name = 自動射擊 +setting.keyboard.name = Mouse+Keyboard Controls setting.fpscap.name = 最大FPS setting.fpscap.none = 没有 setting.fpscap.text = {0}FPS +setting.uiscale.name = UI Scaling[lightgray] (require restart)[] setting.swapdiagonal.name = 始終對角線放置 setting.difficulty.training = 訓練 setting.difficulty.easy = 簡單 @@ -456,7 +497,11 @@ setting.mutesound.name = 靜音 setting.crashreport.name = 發送匿名崩潰報告 setting.chatopacity.name = 聊天框不透明度 setting.playerchat.name = 在遊戲中顯示聊天框 +uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings... +uiscale.cancel = Cancel & Exit +setting.bloom.name = Bloom keybind.title = 重新綁定按鍵 +keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = 一般 category.view.name = 查看 category.multiplayer.name = 多人 @@ -505,6 +550,7 @@ mode.custom = 自訂規則 rules.infiniteresources = 無限資源 rules.wavetimer = 波次時間 rules.waves = 波次 +rules.attack = Attack Mode rules.enemyCheat = 電腦無限資源 rules.unitdrops = 單位掉落 rules.unitbuildspeedmultiplier = 單位建設速度倍數 @@ -533,36 +579,21 @@ content.unit.name = 機組 content.block.name = 方塊 content.mech.name = 機甲 item.copper.name = 銅 -item.copper.description = 一種有用的結構材料。在各種類型的方塊中廣泛使用。 item.lead.name = 鉛 -item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和運輸液體方塊。 item.coal.name = 煤炭 -item.coal.description = 一種常見並容易獲得的燃料。 item.graphite.name = 石墨 item.titanium.name = 鈦 -item.titanium.description = 一種罕見的超輕金屬,被廣泛運用於運輸液體、鑽頭和飛機。 item.thorium.name = 釷 -item.thorium.description = 一種稠密的放射性金屬,用作支撐結構和核燃料。 item.silicon.name = 矽 -item.silicon.description = 一種非常有用的半導體,被用於太陽能電池板和很多複雜的電子設備。 item.plastanium.name = 塑料 -item.plastanium.description = 一種輕量、可延展的材料,用於高級的飛機和碎彈藥。 item.phase-fabric.name = 相織布 -item.phase-fabric.description = 一種近乎無重量的物質,用於先進的電子設備和自修復技術。 item.surge-alloy.name = 波動合金 -item.surge-alloy.description = 一種具有獨特電子特性的高級合金。 item.spore-pod.name = 孢子莢 -item.spore-pod.description = 用於轉化為石油、爆炸物和燃料。 item.sand.name = 沙 -item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和助熔劑。 item.blast-compound.name = 爆炸混合物 -item.blast-compound.description = 一種用於炸彈和炸藥的揮發性混合物。雖然它可以作為燃料燃燒,但不建議這樣做。 item.pyratite.name = 硫 -item.pyratite.description = 一種在燃燒武器中使用的極易燃物質。 item.metaglass.name = 金屬玻璃 -item.metaglass.description = 一種超級強硬玻璃混合物。廣泛用於液體分配和存儲。 item.scrap.name = 廢料 -item.scrap.description = 舊結構和單位的遺留剩餘物。含有痕量的許多不同的金屬。 liquid.water.name = 水 liquid.slag.name = 礦渣 liquid.oil.name = 原油 @@ -570,31 +601,23 @@ liquid.cryofluid.name = 冷凍液 mech.alpha-mech.name = 阿爾法 mech.alpha-mech.weapon = 重型機關槍 mech.alpha-mech.ability = 無人機群 -mech.alpha-mech.description = 標準的機甲。具有不錯的速度和傷害輸出;可以製造多達3架無人機以提高進攻能力。 mech.delta-mech.name = 德爾塔 mech.delta-mech.weapon = 電弧生成機 mech.delta-mech.ability = 放電 -mech.delta-mech.description = 一种快速、轻铠的机甲,是用於打了就跑的攻擊。对结构造成的伤害很小,但可以用弧形闪电武器很快杀死大量敌方机组。 mech.tau-mech.name = 牛頭機甲 mech.tau-mech.weapon = 重構激光 mech.tau-mech.ability = 修复陣 -mech.tau-mech.description = 支援機甲。射擊友好方塊以治療它們。可以使用它的修復能力熄滅火焰並治療一定範圍內的友軍。 mech.omega-mech.name = 奧米伽 mech.omega-mech.weapon = 導彈群 mech.omega-mech.ability = 裝甲配置 -mech.omega-mech.description = 一種笨重、裝甲重的機甲,用於在前線突擊。它的裝甲能力可以阻擋高達90%的傷害。 mech.dart-ship.name = 鏢船 mech.dart-ship.weapon = 機關槍 -mech.dart-ship.description = 標準飛船。快速、輕便,但有低的攻擊能力和慢的採礦速度。 mech.javelin-ship.name = 標槍 -mech.javelin-ship.description = 一種打了就跑的侵襲船。雖然最初很慢,但它可以加速到很快的速度,並飛過敵人的前哨站,利用其閃電能力和導彈造成大量的傷害。 mech.javelin-ship.weapon = 爆發導彈 mech.javelin-ship.ability = 放電助推器 mech.trident-ship.name = 三叉 -mech.trident-ship.description = 一种重型轰炸机。有比較厚的装甲。 mech.trident-ship.weapon = 炸彈 mech.glaive-ship.name = 長柄 -mech.glaive-ship.description = 一種大型、裝甲厚的武裝直升機。配備燃燒機關槍。有優秀的加速能力與最快的速度。 mech.glaive-ship.weapon = 火焰機關槍 item.explosiveness = [LIGHT_GRAY]爆炸性:{0} item.flammability = [LIGHT_GRAY]易燃性:{0} @@ -611,6 +634,7 @@ mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}% liquid.heatcapacity = [LIGHT_GRAY]熱容量:{0} liquid.viscosity = [LIGHT_GRAY]粘性:{0} liquid.temperature = [LIGHT_GRAY]温度:{0} +block.sand-boulder.name = Sand Boulder block.grass.name = 草 block.salt.name = 鹽 block.saltrocks.name = 鹽岩 @@ -621,6 +645,7 @@ block.spore-pine.name = 孢子鬆 block.sporerocks.name = 孢子岩 block.rock.name = 岩石 block.snowrock.name = 雪巖 +block.snow-pine.name = Snow Pine block.shale.name = 頁岩 block.shale-boulder.name = 頁岩巨石 block.moss.name = 苔蘚 @@ -633,7 +658,6 @@ block.scrap-wall-huge.name = 巨型廢牆 block.scrap-wall-gigantic.name = 超巨型廢牆 block.thruster.name = 推進器 block.kiln.name = 窯 -block.kiln.description = 將沙子和鉛熔煉成金屬玻璃。需要少量能量。 block.graphite-press.name = 石墨壓縮機 block.multi-press.name = 多用途壓縮機 block.constructing = {0}\n[LIGHT_GRAY](建設中) @@ -702,9 +726,7 @@ block.junction.name = 樞紐 block.router.name = 分配器 block.distributor.name = 大型分配器 block.sorter.name = 分類器 -block.sorter.description = 對物品進行分類。如果物品與所選種類匹配,則允許其通過。否則,物品將從左邊和右邊輸出。 block.overflow-gate.name = 溢流器 -block.overflow-gate.description = 分離器和分配器的組合。如果前面被擋住,則向從左邊和右邊輸出物品。 block.silicon-smelter.name = 煉矽廠 block.phase-weaver.name = 相織布編織器 block.pulverizer.name = 粉碎機 @@ -756,6 +778,7 @@ block.blast-mixer.name = 爆炸混合器 block.solar-panel.name = 太陽能板 block.solar-panel-large.name = 大型太陽能板 block.oil-extractor.name = 石油鑽井 +block.draug-factory.name = Draug Miner Drone Factory block.spirit-factory.name = 輕型無人機工廠 block.phantom-factory.name = 幻影無人機工廠 block.wraith-factory.name = 怨靈戰鬥機工廠 @@ -794,7 +817,6 @@ block.spectre.name = 幽靈炮 block.meltdown.name = 熔毀炮 block.container.name = 容器 block.launch-pad.name = 發射台 -block.launch-pad.description = 無需從核心發射即可發射物品。未完成。 block.launch-pad-large.name = 大型發射台 team.blue.name = 藍 team.red.name = 紅 @@ -803,20 +825,14 @@ team.none.name = 灰 team.green.name = 綠 team.purple.name = 紫 unit.spirit.name = 輕型無人機 -unit.spirit.description = 起始的無人機。默認在核心產生。自動挖掘礦石、收集物品和修理方塊。 +unit.draug.name = Draug Miner Drone unit.phantom.name = 幻影無人機 -unit.phantom.description = 一種高級的無人機。自動挖掘礦石、收集物品和修理方塊。比輕型無人機明顯更有效。 unit.dagger.name = 匕首 -unit.dagger.description = 一種基本的地面單位。最好一群地使用。 unit.crawler.name = 爬行 unit.titan.name = 泰坦 -unit.titan.description = 一種高級的具有裝甲的地面單位。使用碳化物作為彈藥。攻擊地面單位和空中單位。 unit.ghoul.name = 食屍鬼轟炸機 -unit.ghoul.description = 一種重型的鋪蓋性的轟炸機。使用爆炸化合物或黃鐵礦作為彈藥。 unit.wraith.name = 怨靈戰鬥機 -unit.wraith.description = 一種快速、打了就跑的攔截機。 unit.fortress.name = 堡壘 -unit.fortress.description = 一種具有重型大砲的地面單位。 unit.revenant.name = 亡魂 unit.eruptor.name = 爆發者 unit.chaos-array.name = 混沌陣 @@ -844,8 +860,74 @@ tutorial.daggerfactory = 建造一個[accent]匕首機甲工廠[]。\n\n這將 tutorial.router = 工廠需要資源以運作。\n建造一個分配器以均分輸送帶的資源。 tutorial.dagger = 連接能量節點至工廠。\n一旦要求滿足,將製作一個機甲。\n\n根據需要建造更多鑽頭、發電機和輸送帶。發電機和輸送帶。 tutorial.battle = [LIGHT_GRAY]敵人[]透露了他們的核心。\n用你的單位和匕首機甲以摧毀它。 +item.copper.description = 一種有用的結構材料。在各種類型的方塊中廣泛使用。 +item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和運輸液體方塊。 +item.metaglass.description = 一種超級強硬玻璃混合物。廣泛用於液體分配和存儲。 +item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation. +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 = 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 = 可以燃燒、爆炸或用作冷卻劑。 +liquid.cryofluid.description = 冷卻東西最有效的液體。 +mech.alpha-mech.description = 標準的機甲。具有不錯的速度和傷害輸出;可以製造多達3架無人機以提高進攻能力。 +mech.delta-mech.description = 一种快速、轻铠的机甲,是用於打了就跑的攻擊。对结构造成的伤害很小,但可以用弧形闪电武器很快杀死大量敌方机组。 +mech.tau-mech.description = 支援機甲。射擊友好方塊以治療它們。可以使用它的修復能力熄滅火焰並治療一定範圍內的友軍。 +mech.omega-mech.description = 一種笨重、裝甲重的機甲,用於在前線突擊。它的裝甲能力可以阻擋高達90%的傷害。 +mech.dart-ship.description = 標準飛船。快速、輕便,但有低的攻擊能力和慢的採礦速度。 +mech.javelin-ship.description = 一種打了就跑的侵襲船。雖然最初很慢,但它可以加速到很快的速度,並飛過敵人的前哨站,利用其閃電能力和導彈造成大量的傷害。 +mech.trident-ship.description = 一种重型轰炸机。有比較厚的装甲。 +mech.glaive-ship.description = 一種大型、裝甲厚的武裝直升機。配備燃燒機關槍。有優秀的加速能力與最快的速度。 +unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core. +unit.spirit.description = 起始的無人機。默認在核心產生。自動挖掘礦石、收集物品和修理方塊。 +unit.phantom.description = 一種高級的無人機。自動挖掘礦石、收集物品和修理方塊。比輕型無人機明顯更有效。 +unit.dagger.description = 一種基本的地面單位。最好一群地使用。 +unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies. +unit.titan.description = 一種高級的具有裝甲的地面單位。使用碳化物作為彈藥。攻擊地面單位和空中單位。 +unit.fortress.description = 一種具有重型大砲的地面單位。 +unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire. +unit.chaos-array.description = +unit.eradicator.description = +unit.wraith.description = 一種快速、打了就跑的攔截機。 +unit.ghoul.description = 一種重型的鋪蓋性的轟炸機。使用爆炸化合物或黃鐵礦作為彈藥。 +unit.revenant.description = A heavy, hovering missile array. +unit.lich.description = +unit.reaper.description = +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 = 使用高純度焦炭還原沙子以生產矽。 +block.kiln.description = 將沙子和鉛熔煉成金屬玻璃。需要少量能量。 +block.plastanium-compressor.description = 使用油和鈦以生產塑料。 +block.phase-weaver.description = 使用放射性的釷和大量的沙子以生產相織布。 +block.alloy-smelter.description = 使用鈦、鉛、矽和銅以生產波動合金。 +block.cryofluidmixer.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 = Solidifes oil into chunks of coal. +block.incinerator.description = 清除任何多餘的物品或液體。 +block.power-void.description = 銷毀所有輸入的能量。僅限沙盒。 +block.power-source.description = 不限地輸出能量。僅限沙盒。 +block.item-source.description = 不限地輸出物品。僅限沙盒。 +block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。 +block.liquid-source.description = 不限地輸出液體。僅限沙盒。 block.copper-wall.description = 一種便宜的防衛方塊。\n用於前幾波防衛核心和砲塔。 block.copper-wall-large.description = 一種便宜的防衛方塊。\n用於前幾波防衛核心和砲塔\n佔據多個方塊。 +block.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.thorium-wall.description = 一種堅強的防衛方塊。\n良好地防衛敵人。 block.thorium-wall-large.description = 一種堅強的防衛方塊。\n良好地防衛敵人。\n佔據多個方塊。 block.phase-wall.description = 沒有釷牆那麼強但會使不太強的子彈偏離。 @@ -854,54 +936,45 @@ block.surge-wall.description = 最強的防衛方塊。\n有小的機會對攻 block.surge-wall-large.description = 最強的防衛方塊。\n有小的機會對攻擊者觸發閃電。\n佔據多個方塊。 block.door.description = 可以通過點擊打開和關閉的一扇小門。\n如果打開,敵人可以穿過它射擊和移動。 block.door-large.description = 可以通過點擊打開和關閉的一扇大門。\n如果打開,敵人可以穿過它射擊和移動。\n佔據多個方塊。 +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 = 定期修復附近的建築物。 block.overdrive-projector.description = 提高附近建築物的速度,如鑽頭和輸送帶。 block.force-projector.description = 在自身周圍形成一個六角形力場,保護內部的建築物和單位免受子彈的傷害。 block.shock-mine.description = 傷害踩到地雷的敵人。敵人幾乎看不見。 -block.duo.description = 一種小而便宜的砲塔。 -block.scatter.description = 一種中型防空砲塔。向敵方單位噴射鉛塊或碎片。 -block.arc.description = 一種向敵人射出隨機電弧的小砲塔。 -block.hail.description = 一種小型火砲。 -block.lancer.description = 一種射出電子束的中型砲塔。 -block.wave.description = 一種可以快速射出液體氣泡的中型砲塔。 -block.salvo.description = 一種齊射的中型砲塔。 -block.swarmer.description = 一種射出爆炸導彈的中型砲塔。 -block.ripple.description = 一種一次射出幾發子彈的大型火砲。 -block.cyclone.description = 一種快速射擊的大型砲塔。 -block.fuse.description = 一種射出強大的短程射線的大型砲塔。 -block.spectre.description = 一種一次射出兩顆強大的子彈的大型砲塔。 -block.meltdown.description = 一種射出強大的遠程光束的大型砲塔。 block.conveyor.description = 基本物品傳輸方塊。將物品向前移動並自動將它們放入砲塔或機器中。能夠旋轉方向。 block.titanium-conveyor.description = 高級物品傳輸方塊。比標準輸送帶更快地移動物品。 -block.phase-conveyor.description = 高級物品傳輸方塊。使用能量將物品傳送到幾個方塊外連接的相織輸送帶。 block.junction.description = 作為兩個交叉輸送帶的橋樑。適用於兩條不同輸送帶將不同物品運送到不同位置的情況。 +block.bridge-conveyor.description = 高級的物品運輸方塊。允許跨過最多3個任何地形或建築物的方塊運輸物品。 +block.phase-conveyor.description = 高級物品傳輸方塊。使用能量將物品傳送到幾個方塊外連接的相織輸送帶。 +block.sorter.description = 對物品進行分類。如果物品與所選種類匹配,則允許其通過。否則,物品將從左邊和右邊輸出。 +block.router.description = 接受來自一個方向的物品並將它們平均輸出到最多3個其他方向。 用於將物品從一個來源分割為多個目標。 +block.distributor.description = 高級的分配器,可將物品均分到最多7個其他方向。 +block.overflow-gate.description = 分離器和分配器的組合。如果前面被擋住,則向從左邊和右邊輸出物品。 block.mass-driver.description = 終極物品運輸方塊。收集幾件物品,然後將它們射向另一個長距離的質量驅動器。 -block.silicon-smelter.description = 使用高純度焦炭還原沙子以生產矽。 -block.plastanium-compressor.description = 使用油和鈦以生產塑料。 -block.phase-weaver.description = 使用放射性的釷和大量的沙子以生產相織布。 -block.alloy-smelter.description = 使用鈦、鉛、矽和銅以生產波動合金。 -block.pulverizer.description = 將石頭壓成沙子。當缺少天然沙子時有用。 -block.pyratite-mixer.description = 混合煤、鉛和沙子成為易燃的硫。 -block.blast-mixer.description = 使用油將硫變成比較不易燃但更具爆炸性的爆炸混合器。 -block.cryofluidmixer.description = 合水和鈦成冷卻效率更高的冷凍液。 -block.melter.description = 將石頭加熱到很高的溫度以獲得熔岩。 -block.incinerator.description = 清除任何多餘的物品或液體。 -block.spore-press.description = 將孢子莢壓縮成油。 -block.separator.description = 將石頭暴露在水壓下以獲得石頭中的各種礦物質。 +block.mechanical-pump.description = 一種便宜的泵,輸出速度慢,但不使用能量。 +block.rotary-pump.description = 高級的泵,透過使用能量使輸出速度加倍。 +block.thermal-pump.description = 終極泵。輸出速度是機械泵的三倍並且是唯一能夠抽熔岩的泵。 +block.conduit.description = 基本液體運輸方塊。像輸送帶一樣工作,但是液體用的。最適用於提取器、泵或其他管線。 +block.pulse-conduit.description = 高級的液體運輸方塊。比標準管線更快地輸送並儲存更多液體。 +block.liquid-router.description = 接受來自一個方向的液體並將它們平均輸出到最多3個其他方向。可以儲存一定量的液體。用於將液體從一個來源分成多個目標。 +block.liquid-tank.description = 存儲大量液體。當液體需求非恆定時,使用它來創建緩衝或作為冷卻重要方塊的保障。 +block.liquid-junction.description = 作為兩個交叉管線的橋樑。適用於兩條不同管線將不同液體運送到不同位置的情況。 +block.bridge-conduit.description = 高級的液體運輸方塊。允許跨過最多3個任何地形或建築物的方塊運輸液體。 +block.phase-conduit.description = 高級的液體運輸方塊。使用能量將液體傳送到多個方塊外連接的相織管線。 block.power-node.description = 將能量傳輸到連接的節點。最多可連接四個能量來源、接收或節點。節點將從任何相鄰方塊接收能量或向其供能量。 block.power-node-large.description = 範圍大於能量節點,最多可連接六個能量來源、接收或節點。 +block.surge-tower.description = An extremely long-range power node with fewer available connections. block.battery.description = 有能量剩餘時,存儲電力並在能量短缺時提供能量。 block.battery-large.description = 比普通電池存儲更多的能量。 block.combustion-generator.description = 透過燃燒油或可燃物品以產生能量。 -block.turbine-generator.description = 比燃燒發電機更有效,但需要水以操作。 block.thermal-generator.description = 使用熔岩產生大量的能量。 +block.turbine-generator.description = 比燃燒發電機更有效,但需要水以操作。 +block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. +block.rtg-generator.description = 一種放射性同位素熱發電機,不需要冷卻,但比釷反應堆產生的能量少。 block.solar-panel.description = 透過太陽產生少量的能量。 block.solar-panel-large.description = 比標準太陽能板產生更多的能量,但建造起來昂貴得多。 block.thorium-reactor.description = 從高度放射性釷產生大量能量。需要持續冷卻。如果供應的冷卻劑不足,會劇烈爆炸。 -block.rtg-generator.description = 一種放射性同位素熱發電機,不需要冷卻,但比釷反應堆產生的能量少。 -block.unloader.description = 將物品從容器、存儲庫或核心卸載到傳輸帶上或直接卸載到相鄰的方塊中。透過點擊卸載器來更改要卸載的物品類型。 -block.container.description = 存儲少量物品。當物品需求非恆定時,使用它來創建緩衝。使用[LIGHT_GRAY]裝卸器[]以從容器提取物品。 -block.vault.description = 存儲大量物品。當物品需求非恆定時,使用它來創建緩衝。使用[LIGHT_GRAY]裝卸器[]以從存儲庫提取物品。 +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 = 一種便宜的鑽頭。當放置在適當的方塊上時,以緩慢的速度無限期地輸出物品。 block.pneumatic-drill.description = 一種改進的鑽頭。它挖掘更快,能夠利用氣壓挖掘更硬的材料。 block.laser-drill.description = 通過激光技術可以更快地挖掘,但需要能量。此外,這種鑽頭可以挖掘放射性釷。 @@ -909,39 +982,43 @@ block.blast-drill.description = 終極的鑽頭。需要大量能量。 block.water-extractor.description = 從地下提取水。當附近沒有湖泊時使用它。 block.cultivator.description = 用水培養土壤以獲得生物物質。 block.oil-extractor.description = 使用大量的能量從沙子中提取油。當附近沒有直接的石油來源時使用它。 -block.trident-ship-pad.description = 離開現在的船隻,換成具有相當不錯裝甲的重型轟炸機。\n站在上面雙擊墊以使用它。 -block.javelin-ship-pad.description = 離開現在的船隻,換成具有閃電武器、強大而快速的攔截器。\n站在上面雙擊墊以使用它。 -block.glaive-ship-pad.description = 離開現在的船隻,換成具有重裝甲的武裝直升機。\n站在上面雙擊墊以使用它。 -block.tau-mech-pad.description = 離開現有的船隻,換成可以治愈友好的建築物和單位的支援機甲。\n站在上面雙擊墊以使用它。 -block.delta-mech-pad.description = 離開現在的船隻,換成快速、具有輕裝甲的機甲,用於打了就跑的攻擊。\n站在上面雙擊墊以使用它。 -block.omega-mech-pad.description = 離開現在的船隻,換成龐大、具有重裝甲的機甲,用於前線攻擊。\n站在上面雙擊墊以使用它。 +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 = 存儲大量物品。當物品需求非恆定時,使用它來創建緩衝。使用[LIGHT_GRAY]裝卸器[]以從存儲庫提取物品。 +block.container.description = 存儲少量物品。當物品需求非恆定時,使用它來創建緩衝。使用[LIGHT_GRAY]裝卸器[]以從容器提取物品。 +block.unloader.description = 將物品從容器、存儲庫或核心卸載到傳輸帶上或直接卸載到相鄰的方塊中。透過點擊卸載器來更改要卸載的物品類型。 +block.launch-pad.description = 無需從核心發射即可發射物品。未完成。 +block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. +block.duo.description = 一種小而便宜的砲塔。 +block.scatter.description = 一種中型防空砲塔。向敵方單位噴射鉛塊或碎片。 +block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. +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.draug-factory.description = Produces Draug mining drones. block.spirit-factory.description = 生產輕型無人機,用於開採礦石和修復方塊。 block.phantom-factory.description = 生產高級的無人機,比輕型無人機明顯更有效。 block.wraith-factory.description = 生產快速、打了就跑的攔截機單位。 block.ghoul-factory.description = 生產重型鋪蓋轟炸機。 +block.revenant-factory.description = 生產重型激光地面單位。 block.dagger-factory.description = 產生基本地面單位。 +block.crawler-factory.description = Produces fast self-destructing swarm units. block.titan-factory.description = 生產具有裝甲的高級地面單位。 block.fortress-factory.description = 生產重型火砲地面單位。 -block.revenant-factory.description = 生產重型激光地面單位。 block.repair-point.description = 持續治療附近最近的受損單位。 -block.conduit.description = 基本液體運輸方塊。像輸送帶一樣工作,但是液體用的。最適用於提取器、泵或其他管線。 -block.pulse-conduit.description = 高級的液體運輸方塊。比標準管線更快地輸送並儲存更多液體。 -block.phase-conduit.description = 高級的液體運輸方塊。使用能量將液體傳送到多個方塊外連接的相織管線。 -block.liquid-router.description = 接受來自一個方向的液體並將它們平均輸出到最多3個其他方向。可以儲存一定量的液體。用於將液體從一個來源分成多個目標。 -block.liquid-tank.description = 存儲大量液體。當液體需求非恆定時,使用它來創建緩衝或作為冷卻重要方塊的保障。 -block.liquid-junction.description = 作為兩個交叉管線的橋樑。適用於兩條不同管線將不同液體運送到不同位置的情況。 -block.bridge-conduit.description = 高級的液體運輸方塊。允許跨過最多3個任何地形或建築物的方塊運輸液體。 -block.mechanical-pump.description = 一種便宜的泵,輸出速度慢,但不使用能量。 -block.rotary-pump.description = 高級的泵,透過使用能量使輸出速度加倍。 -block.thermal-pump.description = 終極泵。輸出速度是機械泵的三倍並且是唯一能夠抽熔岩的泵。 -block.router.description = 接受來自一個方向的物品並將它們平均輸出到最多3個其他方向。 用於將物品從一個來源分割為多個目標。 -block.distributor.description = 高級的分配器,可將物品均分到最多7個其他方向。 -block.bridge-conveyor.description = 高級的物品運輸方塊。允許跨過最多3個任何地形或建築物的方塊運輸物品。 -block.item-source.description = 不限地輸出物品。僅限沙盒。 -block.liquid-source.description = 不限地輸出液體。僅限沙盒。 -block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。 -block.power-source.description = 不限地輸出能量。僅限沙盒。 -block.power-void.description = 銷毀所有輸入的能量。僅限沙盒。 -liquid.water.description = 常用於冷卻機器和廢物處理。 -liquid.oil.description = 可以燃燒、爆炸或用作冷卻劑。 -liquid.cryofluid.description = 冷卻東西最有效的液體。 +block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it. +block.delta-mech-pad.description = 離開現在的船隻,換成快速、具有輕裝甲的機甲,用於打了就跑的攻擊。\n站在上面雙擊墊以使用它。 +block.tau-mech-pad.description = 離開現有的船隻,換成可以治愈友好的建築物和單位的支援機甲。\n站在上面雙擊墊以使用它。 +block.omega-mech-pad.description = 離開現在的船隻,換成龐大、具有重裝甲的機甲,用於前線攻擊。\n站在上面雙擊墊以使用它。 +block.javelin-ship-pad.description = 離開現在的船隻,換成具有閃電武器、強大而快速的攔截器。\n站在上面雙擊墊以使用它。 +block.trident-ship-pad.description = 離開現在的船隻,換成具有相當不錯裝甲的重型轟炸機。\n站在上面雙擊墊以使用它。 +block.glaive-ship-pad.description = 離開現在的船隻,換成具有重裝甲的武裝直升機。\n站在上面雙擊墊以使用它。 diff --git a/core/assets/contributors b/core/assets/contributors index 42bea20654..0b022ae2f0 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -69,4 +69,5 @@ Michael Plotke Niko Paul T Dominik -Arkanic \ No newline at end of file +Arkanic +Potion diff --git a/core/assets/cursors/cursor.png b/core/assets/cursors/cursor.png index 86f4632037..b7a6a8311e 100644 Binary files a/core/assets/cursors/cursor.png and b/core/assets/cursors/cursor.png differ diff --git a/core/assets/cursors/drill.png b/core/assets/cursors/drill.png index 9672daf2e3..c5619bb81e 100644 Binary files a/core/assets/cursors/drill.png and b/core/assets/cursors/drill.png differ diff --git a/core/assets/cursors/hand.png b/core/assets/cursors/hand.png index ef489d4554..606629a960 100644 Binary files a/core/assets/cursors/hand.png and b/core/assets/cursors/hand.png differ diff --git a/core/assets/cursors/ibeam.png b/core/assets/cursors/ibeam.png index 7ce778a271..ca512752a4 100644 Binary files a/core/assets/cursors/ibeam.png and b/core/assets/cursors/ibeam.png differ diff --git a/core/assets/cursors/unload.png b/core/assets/cursors/unload.png index faa0fe9476..827b513007 100644 Binary files a/core/assets/cursors/unload.png and b/core/assets/cursors/unload.png differ diff --git a/core/assets/icons/icon.icns b/core/assets/icons/icon.icns index 45b4c89b83..6ad4d97da2 100644 Binary files a/core/assets/icons/icon.icns and b/core/assets/icons/icon.icns differ diff --git a/core/assets/icons/icon.ico b/core/assets/icons/icon.ico index 20d4a3e150..daa38d856c 100644 Binary files a/core/assets/icons/icon.ico and b/core/assets/icons/icon.ico differ diff --git a/core/assets/icons/icon.png b/core/assets/icons/icon.png deleted file mode 100644 index 737f1c4bf7..0000000000 Binary files a/core/assets/icons/icon.png and /dev/null differ diff --git a/core/assets/icons/icon@2x.icns b/core/assets/icons/icon@2x.icns deleted file mode 100644 index 7d3530cefa..0000000000 Binary files a/core/assets/icons/icon@2x.icns and /dev/null differ diff --git a/core/assets/icons/icon_64.png b/core/assets/icons/icon_64.png index 8e9259dc88..a67eae01f3 100644 Binary files a/core/assets/icons/icon_64.png and b/core/assets/icons/icon_64.png differ diff --git a/core/assets/maps/canyon.msav b/core/assets/maps/canyon.msav index 06f5b6e064..4e5c688302 100644 Binary files a/core/assets/maps/canyon.msav and b/core/assets/maps/canyon.msav differ diff --git a/core/assets/maps/craters.msav b/core/assets/maps/craters.msav index 14f91c18ca..c0bd73e09b 100644 Binary files a/core/assets/maps/craters.msav and b/core/assets/maps/craters.msav differ diff --git a/core/assets/maps/desolateRift.msav b/core/assets/maps/desolateRift.msav index e1f7fe3394..d140c9e5ba 100644 Binary files a/core/assets/maps/desolateRift.msav and b/core/assets/maps/desolateRift.msav differ diff --git a/core/assets/maps/fortress.msav b/core/assets/maps/fortress.msav index 25f2c10835..c5f58e0380 100644 Binary files a/core/assets/maps/fortress.msav and b/core/assets/maps/fortress.msav differ diff --git a/core/assets/maps/frozenForest.msav b/core/assets/maps/frozenForest.msav index 8e6ab8fdc9..431b4ce947 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 new file mode 100644 index 0000000000..3935a0c04d Binary files /dev/null and b/core/assets/maps/fungalPass.msav differ diff --git a/core/assets/maps/groundZero.msav b/core/assets/maps/groundZero.msav index 73e52f5b18..4e6900b4c3 100644 Binary files a/core/assets/maps/groundZero.msav and b/core/assets/maps/groundZero.msav differ diff --git a/core/assets/maps/islands.msav b/core/assets/maps/islands.msav index 66ad2aa646..48e13f8b6f 100644 Binary files a/core/assets/maps/islands.msav and b/core/assets/maps/islands.msav differ diff --git a/core/assets/maps/maze.msav b/core/assets/maps/maze.msav index edcf158f33..062d3784be 100644 Binary files a/core/assets/maps/maze.msav and b/core/assets/maps/maze.msav differ diff --git a/core/assets/maps/nuclearProductionComplex.msav b/core/assets/maps/nuclearProductionComplex.msav index 5a48206817..4ce3e3484e 100644 Binary files a/core/assets/maps/nuclearProductionComplex.msav and b/core/assets/maps/nuclearProductionComplex.msav differ diff --git a/core/assets/maps/overgrowth.msav b/core/assets/maps/overgrowth.msav index 2c3316bd81..927f58d1c4 100644 Binary files a/core/assets/maps/overgrowth.msav and b/core/assets/maps/overgrowth.msav differ diff --git a/core/assets/maps/ruinousShores.msav b/core/assets/maps/ruinousShores.msav index 36ec4cc868..9d8708c6f0 100644 Binary files a/core/assets/maps/ruinousShores.msav and b/core/assets/maps/ruinousShores.msav differ diff --git a/core/assets/maps/saltFlats.msav b/core/assets/maps/saltFlats.msav index 4d63be50cd..6d03b08641 100644 Binary files a/core/assets/maps/saltFlats.msav and b/core/assets/maps/saltFlats.msav differ diff --git a/core/assets/maps/stainedMountains.msav b/core/assets/maps/stainedMountains.msav index 5cd9828d85..fabee936e8 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 8976acc148..45a9848818 100644 Binary files a/core/assets/maps/tarFields.msav and b/core/assets/maps/tarFields.msav differ diff --git a/core/assets/music/editor.ogg b/core/assets/music/editor.ogg new file mode 100644 index 0000000000..61348f1b75 Binary files /dev/null and b/core/assets/music/editor.ogg differ diff --git a/core/assets/music/game1.ogg b/core/assets/music/game1.ogg new file mode 100644 index 0000000000..d69bb0e931 Binary files /dev/null and b/core/assets/music/game1.ogg differ diff --git a/core/assets/music/game2.ogg b/core/assets/music/game2.ogg new file mode 100644 index 0000000000..9cf7898026 Binary files /dev/null and b/core/assets/music/game2.ogg differ diff --git a/core/assets/music/game3.ogg b/core/assets/music/game3.ogg new file mode 100644 index 0000000000..657848a0da Binary files /dev/null and b/core/assets/music/game3.ogg differ diff --git a/core/assets/music/game4.ogg b/core/assets/music/game4.ogg new file mode 100644 index 0000000000..5b9dbe5ee4 Binary files /dev/null and b/core/assets/music/game4.ogg differ diff --git a/core/assets/music/game5.ogg b/core/assets/music/game5.ogg new file mode 100644 index 0000000000..d988882f7a Binary files /dev/null and b/core/assets/music/game5.ogg differ diff --git a/core/assets/music/game6.ogg b/core/assets/music/game6.ogg new file mode 100644 index 0000000000..d57cdae0c2 Binary files /dev/null and b/core/assets/music/game6.ogg differ diff --git a/core/assets/music/game7.ogg b/core/assets/music/game7.ogg new file mode 100644 index 0000000000..6a1011657c Binary files /dev/null and b/core/assets/music/game7.ogg differ diff --git a/core/assets/music/launch.ogg b/core/assets/music/launch.ogg new file mode 100644 index 0000000000..1da1a065c6 Binary files /dev/null and b/core/assets/music/launch.ogg differ diff --git a/core/assets/music/menu.ogg b/core/assets/music/menu.ogg new file mode 100644 index 0000000000..90dfbb6378 Binary files /dev/null and b/core/assets/music/menu.ogg differ diff --git a/core/assets/sounds/artillery.ogg b/core/assets/sounds/artillery.ogg new file mode 100644 index 0000000000..8debe8b262 Binary files /dev/null and b/core/assets/sounds/artillery.ogg differ diff --git a/core/assets/sounds/back.ogg b/core/assets/sounds/back.ogg new file mode 100644 index 0000000000..98707d207f Binary files /dev/null and b/core/assets/sounds/back.ogg differ diff --git a/core/assets/sounds/bang.ogg b/core/assets/sounds/bang.ogg new file mode 100644 index 0000000000..8debe8b262 Binary files /dev/null and b/core/assets/sounds/bang.ogg differ diff --git a/core/assets/sounds/beam.ogg b/core/assets/sounds/beam.ogg new file mode 100644 index 0000000000..d628942bd1 Binary files /dev/null and b/core/assets/sounds/beam.ogg differ diff --git a/core/assets/sounds/bigshot.ogg b/core/assets/sounds/bigshot.ogg new file mode 100644 index 0000000000..da92f34e54 Binary files /dev/null and b/core/assets/sounds/bigshot.ogg differ diff --git a/core/assets/sounds/boom.ogg b/core/assets/sounds/boom.ogg new file mode 100644 index 0000000000..d024eb74c0 Binary files /dev/null and b/core/assets/sounds/boom.ogg differ diff --git a/core/assets/sounds/break.ogg b/core/assets/sounds/break.ogg new file mode 100755 index 0000000000..28266f8148 Binary files /dev/null and b/core/assets/sounds/break.ogg differ diff --git a/core/assets/sounds/build.ogg b/core/assets/sounds/build.ogg new file mode 100644 index 0000000000..97155ae9e0 Binary files /dev/null and b/core/assets/sounds/build.ogg differ diff --git a/core/assets/sounds/buttonClick.ogg b/core/assets/sounds/buttonClick.ogg new file mode 100755 index 0000000000..fb48038764 Binary files /dev/null and b/core/assets/sounds/buttonClick.ogg differ diff --git a/core/assets/sounds/click.ogg b/core/assets/sounds/click.ogg new file mode 100755 index 0000000000..a993b2cd53 Binary files /dev/null and b/core/assets/sounds/click.ogg differ diff --git a/core/assets/sounds/corexplode.ogg b/core/assets/sounds/corexplode.ogg new file mode 100644 index 0000000000..b5c8290481 Binary files /dev/null and b/core/assets/sounds/corexplode.ogg differ diff --git a/core/assets/sounds/door.ogg b/core/assets/sounds/door.ogg new file mode 100755 index 0000000000..30b57f0189 Binary files /dev/null and b/core/assets/sounds/door.ogg differ diff --git a/core/assets/sounds/drill.ogg b/core/assets/sounds/drill.ogg new file mode 100755 index 0000000000..c2c005051e Binary files /dev/null and b/core/assets/sounds/drill.ogg differ diff --git a/core/assets/sounds/empty.ogg b/core/assets/sounds/empty.ogg new file mode 100644 index 0000000000..917d0e3611 Binary files /dev/null and b/core/assets/sounds/empty.ogg differ diff --git a/core/assets/sounds/explosion.ogg b/core/assets/sounds/explosion.ogg new file mode 100644 index 0000000000..b771280848 Binary files /dev/null and b/core/assets/sounds/explosion.ogg differ diff --git a/core/assets/sounds/explosionbig.ogg b/core/assets/sounds/explosionbig.ogg new file mode 100644 index 0000000000..b521732f79 Binary files /dev/null and b/core/assets/sounds/explosionbig.ogg differ diff --git a/core/assets/sounds/fire.ogg b/core/assets/sounds/fire.ogg new file mode 100644 index 0000000000..2626a9fd7e Binary files /dev/null and b/core/assets/sounds/fire.ogg differ diff --git a/core/assets/sounds/flame.ogg b/core/assets/sounds/flame.ogg new file mode 100644 index 0000000000..e8f1a051db Binary files /dev/null and b/core/assets/sounds/flame.ogg differ diff --git a/core/assets/sounds/flame2.ogg b/core/assets/sounds/flame2.ogg new file mode 100644 index 0000000000..917d0e3611 Binary files /dev/null and b/core/assets/sounds/flame2.ogg differ diff --git a/core/assets/sounds/laser.ogg b/core/assets/sounds/laser.ogg new file mode 100644 index 0000000000..3514a627d2 Binary files /dev/null and b/core/assets/sounds/laser.ogg differ diff --git a/core/assets/sounds/laserbig.ogg b/core/assets/sounds/laserbig.ogg new file mode 100644 index 0000000000..97b4260d49 Binary files /dev/null and b/core/assets/sounds/laserbig.ogg differ diff --git a/core/assets/sounds/message.ogg b/core/assets/sounds/message.ogg new file mode 100755 index 0000000000..84937baf4d Binary files /dev/null and b/core/assets/sounds/message.ogg differ diff --git a/core/assets/sounds/missile.ogg b/core/assets/sounds/missile.ogg new file mode 100644 index 0000000000..466f610b64 Binary files /dev/null and b/core/assets/sounds/missile.ogg differ diff --git a/core/assets/sounds/pew.ogg b/core/assets/sounds/pew.ogg new file mode 100644 index 0000000000..b26373883d 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 new file mode 100644 index 0000000000..2fca68203c Binary files /dev/null and b/core/assets/sounds/place.ogg differ diff --git a/core/assets/sounds/press.ogg b/core/assets/sounds/press.ogg new file mode 100644 index 0000000000..e52cdb2270 Binary files /dev/null and b/core/assets/sounds/press.ogg differ diff --git a/core/assets/sounds/release.ogg b/core/assets/sounds/release.ogg new file mode 100644 index 0000000000..865d547ef2 Binary files /dev/null and b/core/assets/sounds/release.ogg differ diff --git a/core/assets/sounds/respawn.ogg b/core/assets/sounds/respawn.ogg new file mode 100644 index 0000000000..8fbe54ded6 Binary files /dev/null and b/core/assets/sounds/respawn.ogg differ diff --git a/core/assets/sounds/respawning.ogg b/core/assets/sounds/respawning.ogg new file mode 100644 index 0000000000..402b70f89c Binary files /dev/null and b/core/assets/sounds/respawning.ogg differ diff --git a/core/assets/sounds/shoot.ogg b/core/assets/sounds/shoot.ogg new file mode 100644 index 0000000000..c50b9ff90a Binary files /dev/null and b/core/assets/sounds/shoot.ogg differ diff --git a/core/assets/sounds/shootBig.ogg b/core/assets/sounds/shootBig.ogg new file mode 100644 index 0000000000..ba796b2dfc Binary files /dev/null and b/core/assets/sounds/shootBig.ogg differ diff --git a/core/assets/sounds/shootSnap.ogg b/core/assets/sounds/shootSnap.ogg new file mode 100644 index 0000000000..c50b9ff90a Binary files /dev/null and b/core/assets/sounds/shootSnap.ogg differ diff --git a/core/assets/sounds/shotgun.ogg b/core/assets/sounds/shotgun.ogg new file mode 100644 index 0000000000..5e26f3f1e4 Binary files /dev/null and b/core/assets/sounds/shotgun.ogg differ diff --git a/core/assets/sounds/spark.ogg b/core/assets/sounds/spark.ogg new file mode 100644 index 0000000000..58fbfb4030 Binary files /dev/null and b/core/assets/sounds/spark.ogg differ diff --git a/core/assets/sounds/splash.ogg b/core/assets/sounds/splash.ogg new file mode 100644 index 0000000000..0ca516e674 Binary files /dev/null and b/core/assets/sounds/splash.ogg differ diff --git a/core/assets/sounds/thruster.ogg b/core/assets/sounds/thruster.ogg new file mode 100755 index 0000000000..fad9090768 Binary files /dev/null and b/core/assets/sounds/thruster.ogg differ diff --git a/core/assets/sounds/unlock.ogg b/core/assets/sounds/unlock.ogg new file mode 100755 index 0000000000..04fe1efae0 Binary files /dev/null and b/core/assets/sounds/unlock.ogg differ diff --git a/core/assets/sounds/wave.ogg b/core/assets/sounds/wave.ogg new file mode 100644 index 0000000000..f5af16677e Binary files /dev/null and b/core/assets/sounds/wave.ogg differ diff --git a/core/assets/sounds/windowHide.ogg b/core/assets/sounds/windowHide.ogg new file mode 100755 index 0000000000..92fbd146e8 Binary files /dev/null and b/core/assets/sounds/windowHide.ogg differ diff --git a/core/assets/sprites/block_colors.png b/core/assets/sprites/block_colors.png index 2f74fd7633..608d97218e 100644 Binary files a/core/assets/sprites/block_colors.png and b/core/assets/sprites/block_colors.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index c2eb5af812..7a58d8b576 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -27,21 +27,21 @@ force-projector-top index: -1 mend-projector rotate: false - xy: 1544, 1597 + xy: 1610, 1597 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-icon-full rotate: false - xy: 1544, 1597 + xy: 1610, 1597 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 1610, 1597 + xy: 1676, 1597 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -69,21 +69,21 @@ mender-top index: -1 overdrive-projector rotate: false - xy: 1742, 1593 + xy: 1808, 1593 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-icon-full rotate: false - xy: 1742, 1593 + xy: 1808, 1593 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 1808, 1593 + xy: 1874, 1593 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -571,6 +571,20 @@ blast-drill-top orig: 128, 128 offset: 0, 0 index: -1 +drill-top + rotate: false + xy: 525, 54 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 +turbine-generator-liquid + rotate: false + xy: 525, 54 + size: 64, 64 + orig: 64, 64 + offset: 0, 0 + index: -1 laser-drill rotate: false xy: 685, 186 @@ -601,21 +615,21 @@ laser-drill-top index: -1 mechanical-drill rotate: false - xy: 1412, 1625 + xy: 1346, 1559 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 1412, 1559 + xy: 1478, 1597 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 1478, 1597 + xy: 1544, 1597 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -650,21 +664,21 @@ oil-extractor-top index: -1 pneumatic-drill rotate: false - xy: 1940, 1527 + xy: 1148, 1493 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 1214, 1493 + xy: 1280, 1493 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 1280, 1493 + xy: 1346, 1493 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -734,28 +748,28 @@ place-arrow index: -1 rubble-1-0 rotate: false - xy: 1610, 1465 + xy: 1676, 1465 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 1676, 1465 + xy: 1742, 1461 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 1742, 1461 + xy: 1808, 1461 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 1808, 1461 + xy: 1874, 1461 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1091,14 +1105,14 @@ pulse-conduit-top-6 index: -1 rotary-pump rotate: false - xy: 1478, 1465 + xy: 1544, 1465 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rotary-pump-icon-full rotate: false - xy: 1478, 1465 + xy: 1544, 1465 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1161,14 +1175,14 @@ glaive-ship-pad-icon-full index: -1 javelin-ship-pad rotate: false - xy: 1214, 1625 + xy: 1148, 1559 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 javelin-ship-pad-icon-full rotate: false - xy: 1214, 1625 + xy: 1148, 1559 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1189,28 +1203,28 @@ omega-mech-pad-icon-full index: -1 tau-mech-pad rotate: false - xy: 1035, 1353 + xy: 913, 1287 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 tau-mech-pad-icon-full rotate: false - xy: 1035, 1353 + xy: 913, 1287 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 trident-ship-pad rotate: false - xy: 979, 1155 + xy: 913, 1089 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 trident-ship-pad-icon-full rotate: false - xy: 979, 1155 + xy: 913, 1089 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1357,14 +1371,14 @@ power-node-icon-full index: -1 power-node-large rotate: false - xy: 1346, 1493 + xy: 1412, 1493 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 power-node-large-icon-full rotate: false - xy: 1346, 1493 + xy: 1412, 1493 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1392,14 +1406,14 @@ power-void-icon-full index: -1 rtg-generator rotate: false - xy: 1544, 1465 + xy: 1610, 1465 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 rtg-generator-icon-full rotate: false - xy: 1544, 1465 + xy: 1610, 1465 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1441,28 +1455,28 @@ solar-panel-large-icon-full index: -1 surge-tower rotate: false - xy: 1045, 1419 + xy: 913, 1419 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-tower-icon-full rotate: false - xy: 1045, 1419 + xy: 913, 1419 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 913, 1287 + xy: 979, 1287 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thermal-generator-icon-full rotate: false - xy: 913, 1287 + xy: 979, 1287 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1497,19 +1511,12 @@ thorium-reactor-lights index: -1 turbine-generator rotate: false - xy: 913, 1089 + xy: 979, 1089 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 turbine-generator-icon-full - rotate: false - xy: 913, 1089 - size: 64, 64 - orig: 64, 64 - offset: 0, 0 - index: -1 -turbine-generator-liquid rotate: false xy: 979, 1089 size: 64, 64 @@ -1616,14 +1623,14 @@ cultivator-top index: -1 graphite-press rotate: false - xy: 1148, 1625 + xy: 1214, 1625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 graphite-press-icon-full rotate: false - xy: 1148, 1625 + xy: 1214, 1625 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1672,28 +1679,28 @@ item-void-icon-full index: -1 kiln rotate: false - xy: 1148, 1559 + xy: 1280, 1625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-icon-full rotate: false - xy: 1148, 1559 + xy: 1280, 1625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 kiln-top rotate: false - xy: 1280, 1625 + xy: 1214, 1559 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 1280, 1625 + xy: 1214, 1559 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1742,42 +1749,42 @@ multi-press-icon-full index: -1 phase-weaver rotate: false - xy: 1544, 1531 + xy: 1610, 1531 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 1610, 1531 + xy: 1676, 1531 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 1742, 1527 + xy: 1808, 1527 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 1808, 1527 + xy: 1874, 1527 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-icon-full rotate: false - xy: 1808, 1527 + xy: 1874, 1527 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 1874, 1527 + xy: 1940, 1527 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -1805,91 +1812,91 @@ pump-liquid index: -1 pyratite-mixer rotate: false - xy: 1412, 1493 + xy: 1478, 1465 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 pyratite-mixer-icon-full rotate: false - xy: 1412, 1493 + xy: 1478, 1465 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator rotate: false - xy: 1273, 1427 + xy: 1339, 1427 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-icon-full rotate: false - xy: 1273, 1427 + xy: 1339, 1427 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 1339, 1427 + xy: 1405, 1427 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 1405, 1427 + xy: 1471, 1399 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 silicon-smelter-icon-full rotate: false - xy: 1405, 1427 + xy: 1471, 1399 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press rotate: false - xy: 1603, 1399 + xy: 1669, 1399 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame0 rotate: false - xy: 1669, 1399 + xy: 1735, 1395 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame1 rotate: false - xy: 1735, 1395 + xy: 1801, 1395 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-frame2 rotate: false - xy: 1801, 1395 + xy: 1867, 1395 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-liquid rotate: false - xy: 1933, 1395 + xy: 979, 1419 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 spore-press-top rotate: false - xy: 979, 1419 + xy: 1045, 1419 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2050,7 +2057,7 @@ hail-heat index: -1 lancer-heat rotate: false - xy: 1346, 1625 + xy: 1280, 1559 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2071,21 +2078,21 @@ ripple-heat index: -1 salvo-heat rotate: false - xy: 1940, 1461 + xy: 723, 98 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 789, 98 + xy: 855, 98 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 855, 98 + xy: 921, 98 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2204,7 +2211,7 @@ ghoul-factory index: -1 phantom-factory-top rotate: false - xy: 1940, 1593 + xy: 1478, 1531 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2232,7 +2239,7 @@ revenant-factory-top index: -1 spirit-factory-top rotate: false - xy: 1537, 1399 + xy: 1603, 1399 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2337,14 +2344,14 @@ phase-wall-icon-full index: -1 phase-wall-large rotate: false - xy: 1478, 1531 + xy: 1544, 1531 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-wall-large-icon-full rotate: false - xy: 1478, 1531 + xy: 1544, 1531 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2393,28 +2400,28 @@ scrap-wall-huge3 index: -1 scrap-wall-large1 rotate: false - xy: 789, 32 + xy: 855, 32 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large2 rotate: false - xy: 855, 32 + xy: 921, 32 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large3 rotate: false - xy: 921, 32 + xy: 1141, 1427 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scrap-wall-large4 rotate: false - xy: 1141, 1427 + xy: 1207, 1427 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2477,14 +2484,14 @@ surge-wall-icon-full index: -1 surge-wall-large rotate: false - xy: 913, 1419 + xy: 903, 1353 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 surge-wall-large-icon-full rotate: false - xy: 913, 1419 + xy: 903, 1353 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2505,14 +2512,14 @@ thorium-wall-icon-full index: -1 thorium-wall-large rotate: false - xy: 979, 1287 + xy: 913, 1221 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 thorium-wall-large-icon-full rotate: false - xy: 979, 1287 + xy: 913, 1221 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -2547,14 +2554,14 @@ titanium-wall-icon-full index: -1 titanium-wall-large rotate: false - xy: 913, 1155 + xy: 979, 1155 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titanium-wall-large-icon-full rotate: false - xy: 913, 1155 + xy: 979, 1155 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -3751,14 +3758,14 @@ item-titanium-xxlarge index: -1 lancer rotate: false - xy: 1214, 1559 + xy: 1346, 1625 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 lancer-icon-full rotate: false - xy: 1280, 1559 + xy: 1412, 1625 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -3863,7 +3870,7 @@ mech-icon-trident-ship index: -1 mechanical-drill-icon-full rotate: false - xy: 1346, 1559 + xy: 1412, 1559 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4108,14 +4115,14 @@ pebbles-icon-full index: -1 phantom-factory-icon-full rotate: false - xy: 1874, 1593 + xy: 1940, 1593 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 phase-weaver-icon-full rotate: false - xy: 1676, 1531 + xy: 1742, 1527 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4129,7 +4136,7 @@ pine-icon-full index: -1 pneumatic-drill-icon-full rotate: false - xy: 1148, 1493 + xy: 1214, 1493 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4220,14 +4227,14 @@ saltrocks-icon-full index: -1 salvo rotate: false - xy: 1874, 1461 + xy: 1940, 1461 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 salvo-icon-full rotate: false - xy: 723, 98 + xy: 789, 98 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4262,14 +4269,14 @@ sandrocks-icon-full index: -1 scatter rotate: false - xy: 921, 98 + xy: 723, 32 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 scatter-icon-full rotate: false - xy: 723, 32 + xy: 789, 32 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4290,7 +4297,7 @@ scorch-icon-full index: -1 scrap-wall-large-icon-full rotate: false - xy: 1207, 1427 + xy: 1273, 1427 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4381,7 +4388,7 @@ spectre-icon-full index: -1 spirit-factory-icon-full rotate: false - xy: 1471, 1399 + xy: 1537, 1399 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4409,7 +4416,7 @@ spore-pine-icon-full index: -1 spore-press-icon-full rotate: false - xy: 1867, 1395 + xy: 1933, 1395 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4430,14 +4437,14 @@ stone-icon-full index: -1 swarmer rotate: false - xy: 903, 1353 + xy: 969, 1353 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 swarmer-icon-full rotate: false - xy: 969, 1353 + xy: 1035, 1353 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4759,7 +4766,7 @@ omega-mech index: -1 omega-mech-armor rotate: false - xy: 1676, 1597 + xy: 1742, 1593 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -4948,49 +4955,49 @@ eradicator-leg index: -1 eruptor rotate: false - xy: 525, 54 + xy: 591, 54 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 eruptor-base rotate: false - xy: 591, 54 + xy: 657, 54 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 eruptor-leg rotate: false - xy: 657, 54 + xy: 1082, 1617 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress rotate: false - xy: 1082, 1617 + xy: 1082, 1551 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 1082, 1551 + xy: 1075, 1485 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-base rotate: false - xy: 1082, 1551 + xy: 1075, 1485 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 fortress-leg rotate: false - xy: 1075, 1485 + xy: 1148, 1625 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -5046,14 +5053,14 @@ spirit index: -1 titan rotate: false - xy: 913, 1221 + xy: 979, 1221 size: 64, 64 orig: 64, 64 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 979, 1221 + xy: 913, 1155 size: 64, 64 orig: 64, 64 offset: 0, 0 @@ -6198,13 +6205,6 @@ editor-snow1 orig: 32, 32 offset: 0, 0 index: -1 -snow-icon-editor - rotate: false - xy: 741, 127 - size: 32, 32 - orig: 32, 32 - offset: 0, 0 - index: -1 editor-snow2 rotate: false xy: 751, 93 @@ -6877,6 +6877,13 @@ silicon-smelter-icon-editor orig: 64, 64 offset: 0, 0 index: -1 +snow-icon-editor + rotate: false + xy: 751, 725 + size: 32, 32 + orig: 32, 32 + offset: 0, 0 + index: -1 snow-pine-icon-editor rotate: false xy: 519, 383 @@ -6893,14 +6900,14 @@ snowrock-icon-editor index: -1 snowrocks-icon-editor rotate: false - xy: 751, 725 + xy: 785, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-editor rotate: false - xy: 785, 725 + xy: 819, 759 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -6914,14 +6921,14 @@ solar-panel-large-icon-editor index: -1 sorter-icon-editor rotate: false - xy: 819, 759 + xy: 853, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-editor rotate: false - xy: 853, 793 + xy: 717, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -6963,7 +6970,7 @@ spore-press-icon-editor index: -1 sporerocks-icon-editor rotate: false - xy: 717, 657 + xy: 751, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -6977,7 +6984,7 @@ surge-tower-icon-editor index: -1 surge-wall-icon-editor rotate: false - xy: 751, 691 + xy: 785, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -7005,7 +7012,7 @@ tau-mech-pad-icon-editor index: -1 tendrils-icon-editor rotate: false - xy: 785, 691 + xy: 819, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -7033,7 +7040,7 @@ thorium-reactor-icon-editor index: -1 thorium-wall-icon-editor rotate: false - xy: 819, 725 + xy: 853, 759 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -7061,14 +7068,14 @@ titan-factory-icon-editor index: -1 titanium-conveyor-icon-editor rotate: false - xy: 853, 759 + xy: 887, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-editor rotate: false - xy: 887, 793 + xy: 717, 623 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -7096,7 +7103,7 @@ turbine-generator-icon-editor index: -1 unloader-icon-editor rotate: false - xy: 717, 623 + xy: 751, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 @@ -8529,49 +8536,49 @@ filter: Nearest,Nearest repeat: none alloy-smelter-icon-large rotate: false - xy: 87, 972 + xy: 87, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 alloy-smelter-icon-medium rotate: false - xy: 351, 180 + xy: 203, 40 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 alloy-smelter-icon-small rotate: false - xy: 2023, 794 + xy: 1294, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 arc-icon-large rotate: false - xy: 1, 878 + xy: 1, 880 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 arc-icon-medium rotate: false - xy: 127, 38 + xy: 1152, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc-icon-small rotate: false - xy: 365, 43 + xy: 1320, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bar rotate: false - xy: 487, 85 + xy: 1265, 586 size: 27, 36 split: 9, 9, 9, 9 orig: 27, 36 @@ -8579,7 +8586,7 @@ bar index: -1 bar-top rotate: false - xy: 458, 85 + xy: 1236, 586 size: 27, 36 split: 9, 10, 9, 10 orig: 27, 36 @@ -8587,133 +8594,133 @@ bar-top index: -1 battery-icon-large rotate: false - xy: 137, 972 + xy: 137, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 battery-icon-medium rotate: false - xy: 161, 38 + xy: 1186, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-icon-small rotate: false - xy: 516, 79 + xy: 1346, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 battery-large-icon-large rotate: false - xy: 1, 828 + xy: 1, 830 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 battery-large-icon-medium rotate: false - xy: 195, 38 + xy: 1220, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 battery-large-icon-small rotate: false - xy: 396, 57 + xy: 1372, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-icon-large rotate: false - xy: 187, 972 + xy: 187, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 blast-drill-icon-medium rotate: false - xy: 1076, 888 + xy: 1254, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-drill-icon-small rotate: false - xy: 422, 57 + xy: 1398, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-mixer-icon-large rotate: false - xy: 1, 778 + xy: 1, 780 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 blast-mixer-icon-medium rotate: false - xy: 1110, 888 + xy: 1288, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 blast-mixer-icon-small rotate: false - xy: 391, 31 + xy: 1424, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bridge-conduit-icon-large rotate: false - xy: 237, 972 + xy: 237, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conduit-icon-medium rotate: false - xy: 1144, 888 + xy: 1322, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conduit-icon-small rotate: false - xy: 417, 31 + xy: 1450, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 bridge-conveyor-icon-large rotate: false - xy: 1, 728 + xy: 1, 730 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 bridge-conveyor-icon-medium rotate: false - xy: 1178, 888 + xy: 1356, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 bridge-conveyor-icon-small rotate: false - xy: 391, 5 + xy: 1476, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 button rotate: false - xy: 851, 743 + xy: 301, 145 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8721,7 +8728,7 @@ button index: -1 button-disabled rotate: false - xy: 51, 43 + xy: 51, 45 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8729,7 +8736,7 @@ button-disabled index: -1 button-down rotate: false - xy: 351, 243 + xy: 351, 245 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8737,7 +8744,7 @@ button-down index: -1 button-edge-1 rotate: false - xy: 401, 293 + xy: 401, 295 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8745,7 +8752,7 @@ button-edge-1 index: -1 button-edge-2 rotate: false - xy: 451, 343 + xy: 451, 345 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8753,7 +8760,7 @@ button-edge-2 index: -1 button-edge-3 rotate: false - xy: 501, 393 + xy: 501, 395 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8761,7 +8768,15 @@ button-edge-3 index: -1 button-edge-4 rotate: false - xy: 551, 443 + xy: 551, 445 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-edge-over-4 + rotate: false + xy: 601, 495 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8769,7 +8784,7 @@ button-edge-4 index: -1 button-over rotate: false - xy: 601, 493 + xy: 651, 545 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8777,7 +8792,7 @@ button-over index: -1 button-red rotate: false - xy: 651, 543 + xy: 701, 595 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8785,7 +8800,7 @@ button-red index: -1 button-right rotate: false - xy: 801, 693 + xy: 851, 745 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8793,7 +8808,7 @@ button-right index: -1 button-right-down rotate: false - xy: 701, 593 + xy: 751, 645 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8801,7 +8816,7 @@ button-right-down index: -1 button-right-over rotate: false - xy: 751, 643 + xy: 801, 695 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -8809,876 +8824,908 @@ button-right-over index: -1 button-select rotate: false - xy: 417, 5 + xy: 1502, 598 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 offset: 0, 0 index: -1 +button-square + rotate: false + xy: 1001, 895 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-square-down + rotate: false + xy: 901, 795 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-square-over + rotate: false + xy: 951, 845 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-trans + rotate: false + xy: 251, 95 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 char-icon-large rotate: false - xy: 287, 972 + xy: 287, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 char-icon-medium rotate: false - xy: 1212, 888 + xy: 1390, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 char-icon-small rotate: false - xy: 448, 57 + xy: 1528, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 check-disabled rotate: false - xy: 1246, 888 + xy: 1424, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-off rotate: false - xy: 1280, 888 + xy: 1458, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 1314, 888 + xy: 1492, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-disabled rotate: false - xy: 1348, 888 + xy: 1526, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 1382, 888 + xy: 1560, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 1416, 888 + xy: 1594, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 clear rotate: false - xy: 389, 260 + xy: 1861, 656 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 cliffs-icon-large rotate: false - xy: 1, 678 + xy: 1, 680 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cliffs-icon-medium rotate: false - xy: 1450, 888 + xy: 1628, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cliffs-icon-small rotate: false - xy: 443, 31 + xy: 1554, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 coal-centrifuge-icon-large rotate: false - xy: 337, 972 + xy: 337, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 coal-centrifuge-icon-medium rotate: false - xy: 1484, 888 + xy: 1662, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 coal-centrifuge-icon-small rotate: false - xy: 443, 5 + xy: 1580, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 combustion-generator-icon-large rotate: false - xy: 1, 628 + xy: 1, 630 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 combustion-generator-icon-medium rotate: false - xy: 1518, 888 + xy: 1696, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 combustion-generator-icon-small rotate: false - xy: 474, 59 + xy: 1606, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 conduit-icon-large rotate: false - xy: 387, 972 + xy: 387, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 conduit-icon-medium rotate: false - xy: 1552, 888 + xy: 1730, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conduit-icon-small rotate: false - xy: 2021, 862 + xy: 1632, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 container-icon-large rotate: false - xy: 1, 578 + xy: 1, 580 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 container-icon-medium rotate: false - xy: 1586, 888 + xy: 1764, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 container-icon-small rotate: false - xy: 469, 31 + xy: 1658, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 conveyor-icon-large rotate: false - xy: 437, 972 + xy: 437, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 conveyor-icon-medium rotate: false - xy: 1620, 888 + xy: 1798, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 conveyor-icon-small rotate: false - xy: 469, 5 + xy: 1684, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 copper-wall-icon-large rotate: false - xy: 1, 528 + xy: 1, 530 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 copper-wall-icon-medium rotate: false - xy: 1654, 888 + xy: 1832, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-icon-small rotate: false - xy: 887, 569 + xy: 1710, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 copper-wall-large-icon-large rotate: false - xy: 487, 972 + xy: 487, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 copper-wall-large-icon-medium rotate: false - xy: 1688, 888 + xy: 1866, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 copper-wall-large-icon-small rotate: false - xy: 913, 569 + xy: 1736, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-foundation-icon-large rotate: false - xy: 1, 478 + xy: 1, 480 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-foundation-icon-medium rotate: false - xy: 1722, 888 + xy: 1900, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-foundation-icon-small rotate: false - xy: 939, 569 + xy: 1762, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-nucleus-icon-large rotate: false - xy: 537, 972 + xy: 537, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-nucleus-icon-medium rotate: false - xy: 1756, 888 + xy: 1934, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-nucleus-icon-small rotate: false - xy: 637, 319 + xy: 1788, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-shard-icon-large rotate: false - xy: 1, 428 + xy: 1, 430 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 core-shard-icon-medium rotate: false - xy: 1790, 888 + xy: 1968, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 core-shard-icon-small rotate: false - xy: 663, 319 + xy: 1814, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 craters-icon-large rotate: false - xy: 587, 972 + xy: 587, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 craters-icon-medium rotate: false - xy: 1824, 888 + xy: 2002, 890 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 craters-icon-small rotate: false - xy: 689, 319 + xy: 255, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 crawler-factory-icon-large rotate: false - xy: 1, 378 + xy: 1, 380 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 crawler-factory-icon-medium rotate: false - xy: 1858, 888 + xy: 401, 261 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 crawler-factory-icon-small rotate: false - xy: 715, 319 + xy: 281, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cryofluidmixer-icon-large rotate: false - xy: 637, 972 + xy: 637, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cryofluidmixer-icon-medium rotate: false - xy: 1892, 888 + xy: 389, 227 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cryofluidmixer-icon-small rotate: false - xy: 500, 53 + xy: 2021, 864 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cultivator-icon-large rotate: false - xy: 1, 328 + xy: 1, 330 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cultivator-icon-medium rotate: false - xy: 1926, 888 + xy: 389, 193 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cultivator-icon-small rotate: false - xy: 495, 27 + xy: 2023, 838 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cursor rotate: false - xy: 51, 922 + xy: 51, 924 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 cyclone-icon-large rotate: false - xy: 687, 972 + xy: 687, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 cyclone-icon-medium rotate: false - xy: 1960, 888 + xy: 451, 311 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 cyclone-icon-small rotate: false - xy: 495, 1 + xy: 2023, 812 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dagger-factory-icon-large rotate: false - xy: 1, 278 + xy: 1, 280 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dagger-factory-icon-medium rotate: false - xy: 1994, 888 + xy: 501, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dagger-factory-icon-small rotate: false - xy: 526, 53 + xy: 765, 336 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-metal-icon-large rotate: false - xy: 737, 972 + xy: 737, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-metal-icon-medium rotate: false - xy: 229, 38 + xy: 551, 411 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-metal-icon-small rotate: false - xy: 521, 27 + xy: 1847, 630 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-1-icon-large rotate: false - xy: 1, 228 + xy: 1, 230 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-1-icon-medium rotate: false - xy: 401, 259 + xy: 601, 461 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-1-icon-small rotate: false - xy: 521, 1 + xy: 1015, 567 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-2-icon-large rotate: false - xy: 787, 972 + xy: 787, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-2-icon-medium rotate: false - xy: 389, 225 + xy: 651, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-2-icon-small rotate: false - xy: 552, 53 + xy: 1041, 567 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-3-icon-large rotate: false - xy: 1, 178 + xy: 1, 180 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-3-icon-medium rotate: false - xy: 451, 309 + xy: 701, 561 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-3-icon-small rotate: false - xy: 547, 27 + xy: 1067, 567 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-4-icon-large rotate: false - xy: 837, 972 + xy: 837, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-4-icon-medium rotate: false - xy: 501, 359 + xy: 751, 611 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-4-icon-small rotate: false - xy: 547, 1 + xy: 1093, 567 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-5-icon-large rotate: false - xy: 1, 128 + xy: 1, 130 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-5-icon-medium rotate: false - xy: 551, 409 + xy: 801, 661 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-5-icon-small rotate: false - xy: 578, 53 + xy: 1294, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dark-panel-6-icon-large rotate: false - xy: 887, 972 + xy: 887, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dark-panel-6-icon-medium rotate: false - xy: 601, 459 + xy: 851, 711 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dark-panel-6-icon-small rotate: false - xy: 573, 27 + xy: 1320, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-icon-large rotate: false - xy: 1, 78 + xy: 1, 80 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-icon-medium rotate: false - xy: 651, 509 + xy: 901, 761 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-icon-small rotate: false - xy: 573, 1 + xy: 1346, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-tainted-water-icon-large rotate: false - xy: 937, 972 + xy: 937, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-tainted-water-icon-medium rotate: false - xy: 701, 559 + xy: 951, 811 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-tainted-water-icon-small rotate: false - xy: 599, 27 + xy: 1372, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 darksand-water-icon-large rotate: false - xy: 1, 28 + xy: 1, 30 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 darksand-water-icon-medium rotate: false - xy: 751, 609 + xy: 251, 61 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 darksand-water-icon-small rotate: false - xy: 599, 1 + xy: 1398, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dart-mech-pad-icon-large rotate: false - xy: 987, 972 + xy: 987, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dart-mech-pad-icon-medium rotate: false - xy: 801, 659 + xy: 301, 111 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dart-mech-pad-icon-small rotate: false - xy: 1433, 660 + xy: 1424, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 deepwater-icon-large rotate: false - xy: 1037, 972 + xy: 1037, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 deepwater-icon-medium rotate: false - xy: 851, 709 + xy: 1001, 861 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 deepwater-icon-small rotate: false - xy: 1459, 660 + xy: 1450, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 delta-mech-pad-icon-large rotate: false - xy: 1087, 972 + xy: 1087, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 delta-mech-pad-icon-medium rotate: false - xy: 901, 759 + xy: 1035, 861 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 delta-mech-pad-icon-small rotate: false - xy: 1485, 660 + xy: 1476, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 differential-generator-icon-large rotate: false - xy: 1137, 972 + xy: 1137, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 differential-generator-icon-medium rotate: false - xy: 951, 809 + xy: 1069, 861 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 differential-generator-icon-small rotate: false - xy: 1511, 660 + xy: 1502, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 discord-banner rotate: false - xy: 1, 975 + xy: 1, 977 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 distributor-icon-large rotate: false - xy: 1187, 972 + xy: 1187, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 distributor-icon-medium rotate: false - xy: 301, 109 + xy: 51, 11 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 distributor-icon-small rotate: false - xy: 1537, 660 + xy: 1528, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 door-icon-large rotate: false - xy: 1237, 972 + xy: 1237, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 door-icon-medium rotate: false - xy: 1001, 859 + xy: 85, 11 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-icon-small rotate: false - xy: 1563, 660 + xy: 1554, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 door-large-icon-large rotate: false - xy: 1287, 972 + xy: 1287, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 door-large-icon-medium rotate: false - xy: 51, 9 + xy: 119, 11 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 door-large-icon-small rotate: false - xy: 1589, 660 + xy: 1580, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 draug-factory-icon-large rotate: false - xy: 1337, 972 + xy: 1337, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 draug-factory-icon-medium rotate: false - xy: 85, 9 + xy: 153, 11 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 draug-factory-icon-small rotate: false - xy: 1615, 660 + xy: 1606, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 dunerocks-icon-large rotate: false - xy: 1387, 972 + xy: 1387, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 dunerocks-icon-medium rotate: false - xy: 119, 4 + xy: 351, 153 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 dunerocks-icon-small rotate: false - xy: 1641, 660 + xy: 1632, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 duo-icon-large rotate: false - xy: 1437, 972 + xy: 1437, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 duo-icon-medium rotate: false - xy: 153, 4 + xy: 187, 6 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 duo-icon-small rotate: false - xy: 1667, 660 + xy: 1658, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 flat-down-base rotate: false - xy: 901, 793 + xy: 89, 45 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -9686,2527 +9733,2527 @@ flat-down-base index: -1 force-projector-icon-large rotate: false - xy: 1487, 972 + xy: 1487, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 force-projector-icon-medium rotate: false - xy: 187, 4 + xy: 221, 6 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 force-projector-icon-small rotate: false - xy: 1693, 660 + xy: 1684, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-icon-large rotate: false - xy: 1537, 972 + xy: 1537, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fortress-factory-icon-medium rotate: false - xy: 221, 4 + xy: 423, 227 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fortress-factory-icon-small rotate: false - xy: 1719, 660 + xy: 1710, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fuse-icon-large rotate: false - xy: 1587, 972 + xy: 1587, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 fuse-icon-medium rotate: false - xy: 423, 225 + xy: 423, 193 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fuse-icon-small rotate: false - xy: 1745, 660 + xy: 1736, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-icon-large rotate: false - xy: 1637, 972 + xy: 1637, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ghoul-factory-icon-medium rotate: false - xy: 435, 259 + xy: 435, 261 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ghoul-factory-icon-small rotate: false - xy: 1771, 660 + xy: 1762, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 glaive-ship-pad-icon-large rotate: false - xy: 1687, 972 + xy: 1687, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 glaive-ship-pad-icon-medium rotate: false - xy: 457, 225 + xy: 1103, 861 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 glaive-ship-pad-icon-small rotate: false - xy: 1797, 660 + xy: 1788, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 graphite-press-icon-large rotate: false - xy: 1737, 972 + xy: 1737, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 graphite-press-icon-medium rotate: false - xy: 389, 191 + xy: 1137, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 graphite-press-icon-small rotate: false - xy: 1823, 660 + xy: 1814, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 grass-icon-large rotate: false - xy: 1787, 972 + xy: 1787, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 grass-icon-medium rotate: false - xy: 423, 191 + xy: 1171, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 grass-icon-small rotate: false - xy: 1849, 660 + xy: 794, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hail-icon-large rotate: false - xy: 1837, 972 + xy: 1837, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 hail-icon-medium rotate: false - xy: 457, 191 + xy: 1205, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hail-icon-small rotate: false - xy: 1875, 660 + xy: 794, 373 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 holostone-icon-large rotate: false - xy: 1887, 972 + xy: 1887, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 holostone-icon-medium rotate: false - xy: 351, 146 + xy: 1239, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 holostone-icon-small rotate: false - xy: 1901, 660 + xy: 794, 347 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hotrock-icon-large rotate: false - xy: 1937, 972 + xy: 1937, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 hotrock-icon-medium rotate: false - xy: 385, 157 + xy: 1273, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 hotrock-icon-small rotate: false - xy: 1927, 660 + xy: 1865, 694 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ice-icon-large rotate: false - xy: 1987, 972 + xy: 1987, 974 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ice-icon-medium rotate: false - xy: 419, 157 + xy: 1307, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-icon-small rotate: false - xy: 1953, 660 + xy: 1891, 696 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ice-snow-icon-large rotate: false - xy: 87, 922 + xy: 87, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ice-snow-icon-medium rotate: false - xy: 453, 157 + xy: 1341, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ice-snow-icon-small rotate: false - xy: 1979, 660 + xy: 791, 321 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icerocks-icon-large rotate: false - xy: 137, 922 + xy: 137, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icerocks-icon-medium rotate: false - xy: 385, 123 + xy: 1375, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icerocks-icon-small rotate: false - xy: 2005, 660 + xy: 1840, 598 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 icon-about rotate: false - xy: 187, 922 + xy: 187, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-about-med rotate: false - xy: 619, 409 + xy: 619, 411 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-about-small rotate: false - xy: 419, 123 + xy: 1409, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-add rotate: false - xy: 237, 922 + xy: 237, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-add-med rotate: false - xy: 869, 659 + xy: 869, 661 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-add-small rotate: false - xy: 453, 123 + xy: 1443, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-admin rotate: false - xy: 287, 922 + xy: 287, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-admin-med rotate: false - xy: 1433, 686 + xy: 1875, 722 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-admin-small rotate: false - xy: 337, 922 + xy: 337, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-admin-small-med rotate: false - xy: 651, 409 + xy: 1909, 756 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-admin-small-small rotate: false - xy: 255, 4 + xy: 1477, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow rotate: false - xy: 387, 922 + xy: 387, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-16 rotate: false - xy: 387, 922 + xy: 387, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-16-med rotate: false - xy: 637, 377 + xy: 651, 411 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-med rotate: false - xy: 637, 377 + xy: 651, 411 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-16-small rotate: false - xy: 263, 59 + xy: 1511, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-small rotate: false - xy: 263, 59 + xy: 1511, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-down rotate: false - xy: 437, 922 + xy: 437, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-down-med rotate: false - xy: 901, 659 + xy: 637, 379 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-down-small rotate: false - xy: 297, 75 + xy: 1545, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 487, 922 + xy: 487, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-left-med rotate: false - xy: 887, 627 + xy: 901, 661 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-left-small rotate: false - xy: 297, 41 + xy: 1579, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 537, 922 + xy: 537, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-right-med rotate: false - xy: 1465, 686 + xy: 887, 629 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-right-small rotate: false - xy: 289, 7 + xy: 1613, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 587, 922 + xy: 587, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-arrow-up-med rotate: false - xy: 683, 409 + xy: 1941, 756 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-arrow-up-small rotate: false - xy: 323, 7 + xy: 1647, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-back rotate: false - xy: 637, 922 + xy: 637, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-back-med rotate: false - xy: 637, 345 + xy: 683, 411 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-back-small rotate: false - xy: 535, 359 + xy: 1681, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-ban rotate: false - xy: 687, 922 + xy: 687, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-ban-med rotate: false - xy: 669, 377 + xy: 637, 347 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-ban-small rotate: false - xy: 585, 409 + xy: 1715, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-break rotate: false - xy: 737, 922 + xy: 737, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-break-med rotate: false - xy: 933, 659 + xy: 669, 379 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-break-small rotate: false - xy: 569, 375 + xy: 1749, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-cancel rotate: false - xy: 787, 922 + xy: 787, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-cancel-med rotate: false - xy: 887, 595 + xy: 933, 661 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-cancel-small rotate: false - xy: 569, 341 + xy: 1783, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-changelog rotate: false - xy: 837, 922 + xy: 837, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-changelog-med rotate: false - xy: 919, 627 + xy: 887, 597 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-changelog-small rotate: false - xy: 603, 375 + xy: 1817, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-chat rotate: false - xy: 887, 922 + xy: 887, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-chat-med rotate: false - xy: 1497, 686 + xy: 919, 629 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-chat-small rotate: false - xy: 603, 341 + xy: 1851, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-check rotate: false - xy: 937, 922 + xy: 937, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-check-med rotate: false - xy: 715, 409 + xy: 1973, 756 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-check-small rotate: false - xy: 639, 475 + xy: 1885, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-copy rotate: false - xy: 987, 922 + xy: 987, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-copy-med rotate: false - xy: 669, 345 + xy: 715, 411 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-copy-small rotate: false - xy: 673, 475 + xy: 1919, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-crafting rotate: false - xy: 1037, 922 + xy: 1037, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-crafting-med rotate: false - xy: 701, 377 + xy: 669, 347 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-crafting-small rotate: false - xy: 685, 509 + xy: 1953, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-cursor rotate: false - xy: 1087, 922 + xy: 1087, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-cursor-med rotate: false - xy: 919, 595 + xy: 701, 379 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-cursor-small rotate: false - xy: 635, 441 + xy: 1987, 856 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-database rotate: false - xy: 1137, 922 + xy: 1137, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-database-med rotate: false - xy: 1529, 686 + xy: 919, 597 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-database-small rotate: false - xy: 669, 441 + xy: 457, 227 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-defense rotate: false - xy: 1187, 922 + xy: 1187, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-defense-med rotate: false - xy: 701, 345 + xy: 701, 347 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-defense-small rotate: false - xy: 707, 475 + xy: 457, 193 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-dev-builds rotate: false - xy: 1237, 922 + xy: 1237, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-dev-builds-med rotate: false - xy: 1561, 686 + xy: 1161, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-dev-builds-small rotate: false - xy: 703, 441 + xy: 255, 27 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-diagonal rotate: false - xy: 1287, 922 + xy: 1287, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-diagonal-med rotate: false - xy: 1593, 686 + xy: 1193, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-diagonal-small rotate: false - xy: 785, 609 + xy: 285, 61 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-discord rotate: false - xy: 1337, 922 + xy: 1337, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-discord-med rotate: false - xy: 1625, 686 + xy: 1225, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-discord-small rotate: false - xy: 835, 659 + xy: 289, 27 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-distribution rotate: false - xy: 1387, 922 + xy: 1387, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-distribution-med rotate: false - xy: 1657, 686 + xy: 1257, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-distribution-small rotate: false - xy: 819, 625 + xy: 389, 159 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-donate rotate: false - xy: 1437, 922 + xy: 1437, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-donate-med rotate: false - xy: 1689, 686 + xy: 1289, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-donate-small rotate: false - xy: 819, 591 + xy: 423, 159 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-dots rotate: false - xy: 1487, 922 + xy: 1487, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-dots-med rotate: false - xy: 1721, 686 + xy: 1321, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-dots-small rotate: false - xy: 853, 625 + xy: 457, 159 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-editor rotate: false - xy: 1537, 922 + xy: 1537, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-editor-med rotate: false - xy: 1753, 686 + xy: 1353, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-editor-small rotate: false - xy: 853, 591 + xy: 535, 361 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-effect rotate: false - xy: 1587, 922 + xy: 1587, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-effect-med rotate: false - xy: 1785, 686 + xy: 1385, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-effect-small rotate: false - xy: 889, 725 + xy: 585, 411 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-elevation rotate: false - xy: 1637, 922 + xy: 1637, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-elevation-med rotate: false - xy: 1817, 686 + xy: 1417, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-elevation-small rotate: false - xy: 923, 725 + xy: 569, 377 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-eraser rotate: false - xy: 1687, 922 + xy: 1687, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-eraser-med rotate: false - xy: 1849, 686 + xy: 1449, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-eraser-small rotate: false - xy: 935, 759 + xy: 569, 343 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-exit rotate: false - xy: 1737, 922 + xy: 1737, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-exit-med rotate: false - xy: 1881, 686 + xy: 1481, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-exit-small rotate: false - xy: 885, 691 + xy: 603, 377 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-file rotate: false - xy: 1787, 922 + xy: 1787, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-file-image rotate: false - xy: 1837, 922 + xy: 1837, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-file-image-med rotate: false - xy: 1913, 686 + xy: 1513, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-file-image-small rotate: false - xy: 919, 691 + xy: 603, 343 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-file-med rotate: false - xy: 1945, 686 + xy: 1545, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-file-small rotate: false - xy: 957, 725 + xy: 639, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-file-text rotate: false - xy: 1887, 922 + xy: 1887, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-file-text-med rotate: false - xy: 1977, 686 + xy: 1577, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-file-text-small rotate: false - xy: 953, 691 + xy: 673, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-fill rotate: false - xy: 1937, 922 + xy: 1937, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-fill-med rotate: false - xy: 2009, 686 + xy: 1609, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-fill-small rotate: false - xy: 1035, 859 + xy: 685, 511 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-floppy rotate: false - xy: 1987, 922 + xy: 1987, 924 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-floppy-16 rotate: false - xy: 51, 872 + xy: 51, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-floppy-16-med rotate: false - xy: 951, 627 + xy: 1641, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-floppy-16-small rotate: false - xy: 1069, 854 + xy: 635, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-floppy-med rotate: false - xy: 951, 595 + xy: 1673, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-floppy-small rotate: false - xy: 1103, 854 + xy: 669, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-folder rotate: false - xy: 51, 822 + xy: 51, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-folder-med rotate: false - xy: 733, 377 + xy: 1705, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 101, 872 + xy: 101, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-folder-parent-med rotate: false - xy: 733, 345 + xy: 1737, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-folder-parent-small rotate: false - xy: 1137, 854 + xy: 707, 477 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-folder-small rotate: false - xy: 1171, 854 + xy: 703, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-github rotate: false - xy: 51, 772 + xy: 51, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-github-med rotate: false - xy: 983, 641 + xy: 1769, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-github-small rotate: false - xy: 1205, 854 + xy: 785, 611 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 101, 822 + xy: 101, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-google-play-med rotate: false - xy: 983, 609 + xy: 1801, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-google-play-small rotate: false - xy: 1239, 854 + xy: 835, 661 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-grid rotate: false - xy: 151, 872 + xy: 151, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-grid-med rotate: false - xy: 1015, 641 + xy: 1833, 688 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-grid-small rotate: false - xy: 1273, 854 + xy: 819, 627 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-home rotate: false - xy: 51, 722 + xy: 51, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-home-med rotate: false - xy: 1015, 609 + xy: 1157, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-home-small rotate: false - xy: 1307, 854 + xy: 819, 593 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-host rotate: false - xy: 101, 772 + xy: 101, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-host-med rotate: false - xy: 983, 577 + xy: 1189, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-host-small rotate: false - xy: 1341, 854 + xy: 853, 627 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-info rotate: false - xy: 151, 822 + xy: 151, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-info-med rotate: false - xy: 1015, 577 + xy: 1221, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-info-small rotate: false - xy: 1375, 854 + xy: 853, 593 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 201, 872 + xy: 201, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-itch.io-med rotate: false - xy: 765, 391 + xy: 1253, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-itch.io-small rotate: false - xy: 1409, 854 + xy: 889, 727 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-item rotate: false - xy: 51, 672 + xy: 51, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-item-med rotate: false - xy: 765, 359 + xy: 1285, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-item-small rotate: false - xy: 1443, 854 + xy: 923, 727 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-line rotate: false - xy: 101, 722 + xy: 101, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-line-med rotate: false - xy: 765, 327 + xy: 1317, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-line-small rotate: false - xy: 1477, 854 + xy: 935, 761 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-link rotate: false - xy: 151, 772 + xy: 151, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-link-med rotate: false - xy: 1047, 641 + xy: 1349, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-link-small rotate: false - xy: 1511, 854 + xy: 885, 693 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-liquid rotate: false - xy: 201, 822 + xy: 201, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-liquid-consume rotate: false - xy: 251, 872 + xy: 251, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-liquid-consume-med rotate: false - xy: 1047, 609 + xy: 1381, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-liquid-consume-small rotate: false - xy: 1545, 854 + xy: 919, 693 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-liquid-med rotate: false - xy: 1047, 577 + xy: 1413, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-liquid-small rotate: false - xy: 1579, 854 + xy: 957, 727 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-load rotate: false - xy: 51, 622 + xy: 51, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-load-image rotate: false - xy: 101, 672 + xy: 101, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-load-image-med rotate: false - xy: 1079, 652 + xy: 1445, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-load-image-small rotate: false - xy: 1613, 854 + xy: 953, 693 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-load-map rotate: false - xy: 151, 722 + xy: 151, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-load-map-med rotate: false - xy: 1079, 620 + xy: 1477, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-load-map-small rotate: false - xy: 1647, 854 + xy: 335, 111 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-load-med rotate: false - xy: 1111, 652 + xy: 1509, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-load-small rotate: false - xy: 1681, 854 + xy: 319, 77 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-loading rotate: false - xy: 201, 772 + xy: 201, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-loading-med rotate: false - xy: 1079, 588 + xy: 1541, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-loading-small rotate: false - xy: 1715, 854 + xy: 353, 77 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-locked rotate: false - xy: 251, 822 + xy: 251, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-locked-med rotate: false - xy: 1111, 620 + xy: 1573, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-locked-small rotate: false - xy: 1749, 854 + xy: 323, 43 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-map rotate: false - xy: 301, 872 + xy: 301, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-map-med rotate: false - xy: 1143, 652 + xy: 1605, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-map-small rotate: false - xy: 1783, 854 + xy: 357, 43 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 51, 572 + xy: 51, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-menu-large rotate: false - xy: 101, 622 + xy: 101, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-menu-large-med rotate: false - xy: 1111, 588 + xy: 1637, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-menu-large-small rotate: false - xy: 1817, 854 + xy: 323, 9 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-menu-med rotate: false - xy: 1143, 620 + xy: 1669, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-menu-small rotate: false - xy: 1851, 854 + xy: 357, 9 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-missing rotate: false - xy: 151, 672 + xy: 151, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-missing-med rotate: false - xy: 1175, 652 + xy: 1701, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-missing-small rotate: false - xy: 1885, 854 + xy: 369, 119 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-mode-attack rotate: false - xy: 201, 722 + xy: 201, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-mode-attack-med rotate: false - xy: 1143, 588 + xy: 1733, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-mode-attack-small rotate: false - xy: 1919, 854 + xy: 403, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-mode-pvp rotate: false - xy: 251, 772 + xy: 251, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-mode-pvp-med rotate: false - xy: 1175, 620 + xy: 1765, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-mode-pvp-small rotate: false - xy: 1953, 854 + xy: 437, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-mode-survival rotate: false - xy: 301, 822 + xy: 301, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-mode-survival-med rotate: false - xy: 1207, 652 + xy: 1797, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-mode-survival-small rotate: false - xy: 1987, 854 + xy: 471, 125 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-none rotate: false - xy: 351, 872 + xy: 351, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-none-med rotate: false - xy: 1175, 588 + xy: 1829, 656 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-none-small rotate: false - xy: 487, 157 + xy: 387, 85 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-paste rotate: false - xy: 51, 522 + xy: 51, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-paste-med rotate: false - xy: 1207, 620 + xy: 2005, 756 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-paste-small rotate: false - xy: 487, 123 + xy: 421, 91 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 101, 572 + xy: 101, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-pause-med rotate: false - xy: 1239, 652 + xy: 951, 629 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-pause-small rotate: false - xy: 335, 109 + xy: 455, 91 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-pencil rotate: false - xy: 151, 622 + xy: 151, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-pencil-med rotate: false - xy: 1207, 588 + xy: 951, 597 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-pencil-small rotate: false - xy: 331, 75 + xy: 391, 51 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-pick rotate: false - xy: 201, 672 + xy: 201, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-pick-med rotate: false - xy: 1239, 620 + xy: 733, 379 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-pick-small rotate: false - xy: 331, 41 + xy: 391, 17 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-play rotate: false - xy: 251, 722 + xy: 251, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 301, 772 + xy: 301, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-play-2-med rotate: false - xy: 1271, 652 + xy: 733, 347 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-play-2-small rotate: false - xy: 357, 7 + xy: 425, 57 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-play-custom rotate: false - xy: 351, 822 + xy: 351, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-play-custom-med rotate: false - xy: 1239, 588 + xy: 983, 643 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-play-custom-small rotate: false - xy: 485, 309 + xy: 425, 23 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-play-med rotate: false - xy: 1271, 620 + xy: 983, 611 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-play-small rotate: false - xy: 469, 275 + xy: 459, 57 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-players rotate: false - xy: 401, 872 + xy: 401, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-players-med rotate: false - xy: 1303, 652 + xy: 1015, 625 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-players-small rotate: false - xy: 519, 325 + xy: 459, 23 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-power rotate: false - xy: 51, 472 + xy: 51, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-power-med rotate: false - xy: 1271, 588 + xy: 1047, 625 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-power-small rotate: false - xy: 503, 275 + xy: 489, 91 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-production rotate: false - xy: 101, 522 + xy: 101, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-production-med rotate: false - xy: 1303, 620 + xy: 1079, 625 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-production-small rotate: false - xy: 491, 241 + xy: 493, 57 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 151, 572 + xy: 151, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-quit-med rotate: false - xy: 1335, 652 + xy: 1111, 625 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-quit-small rotate: false - xy: 491, 207 + xy: 493, 23 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-redo rotate: false - xy: 201, 622 + xy: 201, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-redo-med rotate: false - xy: 1303, 588 + xy: 1143, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-redo-small rotate: false - xy: 525, 241 + xy: 485, 311 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-refresh rotate: false - xy: 251, 672 + xy: 251, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-refresh-med rotate: false - xy: 1335, 620 + xy: 1175, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-refresh-small rotate: false - xy: 525, 207 + xy: 469, 277 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 301, 722 + xy: 301, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-rename-med rotate: false - xy: 1367, 652 + xy: 1207, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-rename-small rotate: false - xy: 521, 173 + xy: 519, 327 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-resize rotate: false - xy: 351, 772 + xy: 351, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-resize-med rotate: false - xy: 1335, 588 + xy: 1239, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-resize-small rotate: false - xy: 521, 139 + xy: 503, 277 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-rotate rotate: false - xy: 401, 822 + xy: 401, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 451, 872 + xy: 451, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-rotate-arrow-med rotate: false - xy: 1367, 620 + xy: 1271, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-rotate-arrow-small rotate: false - xy: 521, 105 + xy: 491, 243 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 51, 422 + xy: 51, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-rotate-left-med rotate: false - xy: 1399, 652 + xy: 1303, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-rotate-left-small rotate: false - xy: 737, 441 + xy: 491, 209 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-rotate-med rotate: false - xy: 1367, 588 + xy: 1335, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 101, 472 + xy: 101, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-rotate-right-med rotate: false - xy: 1399, 620 + xy: 1367, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-rotate-right-small rotate: false - xy: 735, 559 + xy: 491, 175 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-rotate-small rotate: false - xy: 719, 525 + xy: 525, 243 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-save rotate: false - xy: 151, 522 + xy: 151, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-save-image rotate: false - xy: 201, 572 + xy: 201, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-save-image-med rotate: false - xy: 1399, 588 + xy: 1399, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-save-image-small rotate: false - xy: 769, 575 + xy: 525, 209 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-save-map rotate: false - xy: 251, 622 + xy: 251, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-save-map-med rotate: false - xy: 1079, 556 + xy: 1431, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-save-map-small rotate: false - xy: 753, 525 + xy: 525, 175 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-save-med rotate: false - xy: 1111, 556 + xy: 1463, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-save-small rotate: false - xy: 741, 491 + xy: 505, 141 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-settings rotate: false - xy: 301, 672 + xy: 301, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-settings-med rotate: false - xy: 1143, 556 + xy: 1495, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-settings-small rotate: false - xy: 775, 491 + xy: 539, 141 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-spray rotate: false - xy: 351, 722 + xy: 351, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-spray-med rotate: false - xy: 1175, 556 + xy: 1527, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-spray-small rotate: false - xy: 771, 457 + xy: 523, 107 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-terrain rotate: false - xy: 401, 772 + xy: 401, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-terrain-med rotate: false - xy: 1207, 556 + xy: 1559, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-terrain-small rotate: false - xy: 771, 423 + xy: 557, 107 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-tools rotate: false - xy: 451, 822 + xy: 451, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-tools-med rotate: false - xy: 1239, 556 + xy: 1591, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-tools-small rotate: false - xy: 985, 809 + xy: 527, 73 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 501, 872 + xy: 501, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-trash-16 rotate: false - xy: 51, 372 + xy: 51, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-trash-16-med rotate: false - xy: 1271, 556 + xy: 1623, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-trash-16-small rotate: false - xy: 969, 775 + xy: 527, 39 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-trash-med rotate: false - xy: 1303, 556 + xy: 1655, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-trash-small rotate: false - xy: 1019, 825 + xy: 561, 73 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-tree rotate: false - xy: 101, 422 + xy: 101, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-tree-med rotate: false - xy: 1335, 556 + xy: 1687, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-tree-small rotate: false - xy: 1003, 775 + xy: 561, 39 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-trello rotate: false - xy: 151, 472 + xy: 151, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-trello-med rotate: false - xy: 1367, 556 + xy: 1719, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-trello-small rotate: false - xy: 991, 741 + xy: 527, 5 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-turret rotate: false - xy: 201, 522 + xy: 201, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-turret-med rotate: false - xy: 1399, 556 + xy: 1751, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-turret-small rotate: false - xy: 991, 707 + xy: 561, 5 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 251, 572 + xy: 251, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-tutorial-med rotate: false - xy: 797, 391 + xy: 1783, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-tutorial-small rotate: false - xy: 1053, 820 + xy: 737, 443 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-undo rotate: false - xy: 301, 622 + xy: 301, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-undo-med rotate: false - xy: 797, 359 + xy: 1815, 624 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-undo-small rotate: false - xy: 1087, 820 + xy: 735, 561 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-units rotate: false - xy: 351, 672 + xy: 351, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-units-med rotate: false - xy: 797, 327 + xy: 983, 579 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-units-small rotate: false - xy: 1121, 820 + xy: 719, 527 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-unlocks rotate: false - xy: 401, 722 + xy: 401, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-unlocks-med rotate: false - xy: 555, 175 + xy: 1015, 593 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-unlocks-small rotate: false - xy: 1155, 820 + xy: 769, 577 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-upgrade rotate: false - xy: 451, 772 + xy: 451, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-upgrade-med rotate: false - xy: 555, 143 + xy: 1047, 593 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-upgrade-small rotate: false - xy: 1189, 820 + xy: 753, 527 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-wiki rotate: false - xy: 501, 822 + xy: 501, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-wiki-med rotate: false - xy: 555, 111 + xy: 1079, 593 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-wiki-small rotate: false - xy: 1223, 820 + xy: 741, 493 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-zoom rotate: false - xy: 551, 872 + xy: 551, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-zoom-med rotate: false - xy: 555, 79 + xy: 1111, 593 size: 30, 30 orig: 30, 30 offset: 0, 0 index: -1 icon-zoom-small rotate: false - xy: 1257, 820 + xy: 775, 493 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock-icon-large rotate: false - xy: 51, 322 + xy: 51, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ignarock-icon-medium rotate: false - xy: 1291, 820 + xy: 771, 459 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ignarock-icon-small rotate: false - xy: 1431, 634 + xy: 1840, 572 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 impact-reactor-icon-large rotate: false - xy: 101, 372 + xy: 101, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 impact-reactor-icon-medium rotate: false - xy: 1325, 820 + xy: 771, 425 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 impact-reactor-icon-small rotate: false - xy: 1431, 608 + xy: 1865, 668 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 incinerator-icon-large rotate: false - xy: 151, 422 + xy: 151, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 incinerator-icon-medium rotate: false - xy: 1359, 820 + xy: 985, 811 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 incinerator-icon-small rotate: false - xy: 1457, 634 + xy: 1891, 670 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 info-banner rotate: false - xy: 1, 928 + xy: 1, 930 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 inventory rotate: false - xy: 1431, 566 + xy: 805, 451 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 @@ -12214,679 +12261,679 @@ inventory index: -1 item-source-icon-large rotate: false - xy: 201, 472 + xy: 201, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-source-icon-medium rotate: false - xy: 1393, 820 + xy: 969, 777 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-source-icon-small rotate: false - xy: 1457, 608 + xy: 805, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 item-void-icon-large rotate: false - xy: 251, 522 + xy: 251, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 item-void-icon-medium rotate: false - xy: 1427, 820 + xy: 1019, 827 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 item-void-icon-small rotate: false - xy: 1483, 634 + xy: 820, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 javelin-ship-pad-icon-large rotate: false - xy: 301, 572 + xy: 301, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 javelin-ship-pad-icon-medium rotate: false - xy: 1461, 820 + xy: 1053, 827 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 javelin-ship-pad-icon-small rotate: false - xy: 1457, 582 + xy: 820, 373 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 junction-icon-large rotate: false - xy: 351, 622 + xy: 351, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 junction-icon-medium rotate: false - xy: 1495, 820 + xy: 1087, 827 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 junction-icon-small rotate: false - xy: 1483, 608 + xy: 820, 347 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 kiln-icon-large rotate: false - xy: 401, 672 + xy: 401, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 kiln-icon-medium rotate: false - xy: 1529, 820 + xy: 1003, 777 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 kiln-icon-small rotate: false - xy: 1509, 634 + xy: 817, 321 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 lancer-icon-large rotate: false - xy: 451, 722 + xy: 451, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 lancer-icon-medium rotate: false - xy: 1563, 820 + xy: 991, 743 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 lancer-icon-small rotate: false - xy: 1483, 582 + xy: 1873, 642 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 laser-drill-icon-large rotate: false - xy: 501, 772 + xy: 501, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 laser-drill-icon-medium rotate: false - xy: 1597, 820 + xy: 1037, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 laser-drill-icon-small rotate: false - xy: 1509, 608 + xy: 1899, 644 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 launch-pad-icon-large rotate: false - xy: 551, 822 + xy: 551, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 launch-pad-icon-medium rotate: false - xy: 1631, 820 + xy: 1071, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 launch-pad-icon-small rotate: false - xy: 1535, 634 + xy: 1873, 616 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 launch-pad-large-icon-large rotate: false - xy: 601, 872 + xy: 601, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 launch-pad-large-icon-medium rotate: false - xy: 1665, 820 + xy: 991, 709 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 launch-pad-large-icon-small rotate: false - xy: 1509, 582 + xy: 1899, 618 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-junction-icon-large rotate: false - xy: 51, 272 + xy: 51, 274 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-junction-icon-medium rotate: false - xy: 1699, 820 + xy: 1037, 759 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-junction-icon-small rotate: false - xy: 1535, 608 + xy: 1866, 590 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-router-icon-large rotate: false - xy: 101, 322 + xy: 101, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-router-icon-medium rotate: false - xy: 1733, 820 + xy: 1071, 759 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-router-icon-small rotate: false - xy: 1561, 634 + xy: 1866, 564 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-source-icon-large rotate: false - xy: 151, 372 + xy: 151, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-source-icon-medium rotate: false - xy: 1767, 820 + xy: 1025, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-source-icon-small rotate: false - xy: 1535, 582 + xy: 1892, 590 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-icon-large rotate: false - xy: 201, 422 + xy: 201, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 liquid-tank-icon-medium rotate: false - xy: 1801, 820 + xy: 1059, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 liquid-tank-icon-small rotate: false - xy: 1561, 608 + xy: 1892, 564 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 magmarock-icon-large rotate: false - xy: 251, 472 + xy: 251, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 magmarock-icon-medium rotate: false - xy: 1835, 820 + xy: 1105, 793 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 magmarock-icon-small rotate: false - xy: 1587, 634 + xy: 1918, 592 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mass-driver-icon-large rotate: false - xy: 301, 522 + xy: 301, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mass-driver-icon-medium rotate: false - xy: 1869, 820 + xy: 1105, 759 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mass-driver-icon-small rotate: false - xy: 1561, 582 + xy: 1918, 566 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mechanical-drill-icon-large rotate: false - xy: 351, 572 + xy: 351, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mechanical-drill-icon-medium rotate: false - xy: 1903, 820 + xy: 1093, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-drill-icon-small rotate: false - xy: 1587, 608 + xy: 887, 571 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mechanical-pump-icon-large rotate: false - xy: 401, 622 + xy: 401, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mechanical-pump-icon-medium rotate: false - xy: 1937, 820 + xy: 1025, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mechanical-pump-icon-small rotate: false - xy: 1613, 634 + xy: 913, 571 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 meltdown-icon-large rotate: false - xy: 451, 672 + xy: 451, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 meltdown-icon-medium rotate: false - xy: 1971, 820 + xy: 1059, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-icon-small rotate: false - xy: 1587, 582 + xy: 939, 571 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 melter-icon-large rotate: false - xy: 501, 722 + xy: 501, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 melter-icon-medium rotate: false - xy: 2005, 820 + xy: 1093, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 melter-icon-small rotate: false - xy: 1613, 608 + xy: 637, 321 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mend-projector-icon-large rotate: false - xy: 551, 772 + xy: 551, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mend-projector-icon-medium rotate: false - xy: 1025, 741 + xy: 1127, 725 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mend-projector-icon-small rotate: false - xy: 1639, 634 + xy: 663, 321 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mender-icon-large rotate: false - xy: 601, 822 + xy: 601, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 mender-icon-medium rotate: false - xy: 1025, 707 + xy: 1127, 691 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 mender-icon-small rotate: false - xy: 1613, 582 + xy: 689, 321 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-2-icon-large rotate: false - xy: 651, 872 + xy: 651, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-2-icon-medium rotate: false - xy: 987, 673 + xy: 987, 675 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-2-icon-small rotate: false - xy: 1639, 608 + xy: 715, 321 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-3-icon-large rotate: false - xy: 51, 222 + xy: 51, 224 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-3-icon-medium rotate: false - xy: 1021, 673 + xy: 1021, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-3-icon-small rotate: false - xy: 1665, 634 + xy: 843, 321 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-5-icon-large rotate: false - xy: 101, 272 + xy: 101, 274 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-5-icon-medium rotate: false - xy: 1037, 786 + xy: 1055, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-5-icon-small rotate: false - xy: 1639, 582 + xy: 1236, 560 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-damaged-icon-large rotate: false - xy: 151, 322 + xy: 151, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-damaged-icon-medium rotate: false - xy: 1071, 786 + xy: 1089, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-damaged-icon-small rotate: false - xy: 1665, 608 + xy: 1262, 560 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 metal-floor-icon-large rotate: false - xy: 201, 372 + xy: 201, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 metal-floor-icon-medium rotate: false - xy: 1105, 786 + xy: 1123, 657 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 metal-floor-icon-small rotate: false - xy: 1691, 634 + xy: 1288, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 moss-icon-large rotate: false - xy: 251, 422 + xy: 251, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 moss-icon-medium rotate: false - xy: 1139, 786 + xy: 1139, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 moss-icon-small rotate: false - xy: 1665, 582 + xy: 1314, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 multi-press-icon-large rotate: false - xy: 301, 472 + xy: 301, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 multi-press-icon-medium rotate: false - xy: 1173, 786 + xy: 1139, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 multi-press-icon-small rotate: false - xy: 1691, 608 + xy: 1340, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-icon-large rotate: false - xy: 351, 522 + xy: 351, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 oil-extractor-icon-medium rotate: false - xy: 1207, 786 + xy: 1173, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 oil-extractor-icon-small rotate: false - xy: 1717, 634 + xy: 1366, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 omega-mech-pad-icon-large rotate: false - xy: 401, 572 + xy: 401, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 omega-mech-pad-icon-medium rotate: false - xy: 1241, 786 + xy: 1173, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 omega-mech-pad-icon-small rotate: false - xy: 1691, 582 + xy: 1392, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 overdrive-projector-icon-large rotate: false - xy: 451, 622 + xy: 451, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 overdrive-projector-icon-medium rotate: false - xy: 1275, 786 + xy: 1207, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overdrive-projector-icon-small rotate: false - xy: 1717, 608 + xy: 1418, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 overflow-gate-icon-large rotate: false - xy: 501, 672 + xy: 501, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 overflow-gate-icon-medium rotate: false - xy: 1309, 786 + xy: 1207, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 overflow-gate-icon-small rotate: false - xy: 1743, 634 + xy: 1444, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pane rotate: false - xy: 1001, 893 + xy: 1039, 895 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -12894,7 +12941,7 @@ pane index: -1 pane-2 rotate: false - xy: 951, 843 + xy: 351, 216 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -12902,805 +12949,805 @@ pane-2 index: -1 pebbles-icon-large rotate: false - xy: 551, 722 + xy: 551, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pebbles-icon-medium rotate: false - xy: 1343, 786 + xy: 1241, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pebbles-icon-small rotate: false - xy: 1717, 582 + xy: 1470, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phantom-factory-icon-large rotate: false - xy: 601, 772 + xy: 601, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phantom-factory-icon-medium rotate: false - xy: 1377, 786 + xy: 1241, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phantom-factory-icon-small rotate: false - xy: 1743, 608 + xy: 1496, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conduit-icon-large rotate: false - xy: 651, 822 + xy: 651, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-conduit-icon-medium rotate: false - xy: 1411, 786 + xy: 1275, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conduit-icon-small rotate: false - xy: 1769, 634 + xy: 1522, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conveyor-icon-large rotate: false - xy: 701, 872 + xy: 701, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-conveyor-icon-medium rotate: false - xy: 1445, 786 + xy: 1275, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-conveyor-icon-small rotate: false - xy: 1743, 582 + xy: 1548, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-wall-icon-large rotate: false - xy: 51, 172 + xy: 51, 174 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-wall-icon-medium rotate: false - xy: 1479, 786 + xy: 1309, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-icon-small rotate: false - xy: 1769, 608 + xy: 1574, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-wall-large-icon-large rotate: false - xy: 101, 222 + xy: 101, 224 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-wall-large-icon-medium rotate: false - xy: 1513, 786 + xy: 1309, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-wall-large-icon-small rotate: false - xy: 1795, 634 + xy: 1600, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-weaver-icon-large rotate: false - xy: 151, 272 + xy: 151, 274 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 phase-weaver-icon-medium rotate: false - xy: 1547, 786 + xy: 1343, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 phase-weaver-icon-small rotate: false - xy: 1769, 582 + xy: 1626, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pine-icon-large rotate: false - xy: 201, 322 + xy: 201, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pine-icon-medium rotate: false - xy: 1581, 786 + xy: 1343, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pine-icon-small rotate: false - xy: 1795, 608 + xy: 1652, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 plastanium-compressor-icon-large rotate: false - xy: 251, 372 + xy: 251, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 plastanium-compressor-icon-medium rotate: false - xy: 1615, 786 + xy: 1377, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plastanium-compressor-icon-small rotate: false - xy: 1821, 634 + xy: 1678, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pneumatic-drill-icon-large rotate: false - xy: 301, 422 + xy: 301, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pneumatic-drill-icon-medium rotate: false - xy: 1649, 786 + xy: 1377, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill-icon-small rotate: false - xy: 1795, 582 + xy: 1704, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-node-icon-large rotate: false - xy: 351, 472 + xy: 351, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-node-icon-medium rotate: false - xy: 1683, 786 + xy: 1411, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-icon-small rotate: false - xy: 1821, 608 + xy: 1730, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-node-large-icon-large rotate: false - xy: 401, 522 + xy: 401, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-node-large-icon-medium rotate: false - xy: 1717, 786 + xy: 1411, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-node-large-icon-small rotate: false - xy: 1847, 634 + xy: 1756, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-source-icon-large rotate: false - xy: 451, 572 + xy: 451, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-source-icon-medium rotate: false - xy: 1751, 786 + xy: 1445, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-source-icon-small rotate: false - xy: 1821, 582 + xy: 1782, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 power-void-icon-large rotate: false - xy: 501, 622 + xy: 501, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 power-void-icon-medium rotate: false - xy: 1785, 786 + xy: 1445, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 power-void-icon-small rotate: false - xy: 1847, 608 + xy: 1808, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pulse-conduit-icon-large rotate: false - xy: 551, 672 + xy: 551, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulse-conduit-icon-medium rotate: false - xy: 1819, 786 + xy: 1479, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulse-conduit-icon-small rotate: false - xy: 1873, 634 + xy: 1834, 546 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pulverizer-icon-large rotate: false - xy: 601, 722 + xy: 601, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pulverizer-icon-medium rotate: false - xy: 1853, 786 + xy: 1479, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pulverizer-icon-small rotate: false - xy: 1847, 582 + xy: 1860, 538 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 pyratite-mixer-icon-large rotate: false - xy: 651, 772 + xy: 651, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 pyratite-mixer-icon-medium rotate: false - xy: 1887, 786 + xy: 1513, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pyratite-mixer-icon-small rotate: false - xy: 1873, 608 + xy: 1886, 538 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 repair-point-icon-large rotate: false - xy: 701, 822 + xy: 701, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 repair-point-icon-medium rotate: false - xy: 1921, 786 + xy: 1513, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 repair-point-icon-small rotate: false - xy: 1899, 634 + xy: 1912, 538 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 revenant-factory-icon-large rotate: false - xy: 751, 872 + xy: 751, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 revenant-factory-icon-medium rotate: false - xy: 1955, 786 + xy: 1547, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-icon-small rotate: false - xy: 1873, 582 + xy: 1938, 540 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ripple-icon-large rotate: false - xy: 51, 122 + xy: 51, 124 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 ripple-icon-medium rotate: false - xy: 1989, 786 + xy: 1547, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ripple-icon-small rotate: false - xy: 1899, 608 + xy: 1907, 728 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rock-icon-large rotate: false - xy: 101, 172 + xy: 101, 174 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rock-icon-medium rotate: false - xy: 1059, 752 + xy: 1581, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rock-icon-small rotate: false - xy: 1925, 634 + xy: 1933, 730 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rocks-icon-large rotate: false - xy: 151, 222 + xy: 151, 224 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rocks-icon-medium rotate: false - xy: 1059, 718 + xy: 1581, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rocks-icon-small rotate: false - xy: 1899, 582 + xy: 1959, 730 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rotary-pump-icon-large rotate: false - xy: 201, 272 + xy: 201, 274 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rotary-pump-icon-medium rotate: false - xy: 1093, 752 + xy: 1615, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rotary-pump-icon-small rotate: false - xy: 1925, 608 + xy: 1985, 730 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 router-icon-large rotate: false - xy: 251, 322 + xy: 251, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 router-icon-medium rotate: false - xy: 1093, 718 + xy: 1615, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 router-icon-small rotate: false - xy: 1951, 634 + xy: 2011, 730 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rtg-generator-icon-large rotate: false - xy: 301, 372 + xy: 301, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 rtg-generator-icon-medium rotate: false - xy: 1127, 752 + xy: 1649, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-icon-small rotate: false - xy: 1925, 582 + xy: 1917, 702 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salt-icon-large rotate: false - xy: 351, 422 + xy: 351, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 salt-icon-medium rotate: false - xy: 1127, 718 + xy: 1649, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salt-icon-small rotate: false - xy: 1951, 608 + xy: 1917, 676 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 saltrocks-icon-large rotate: false - xy: 401, 472 + xy: 401, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 saltrocks-icon-medium rotate: false - xy: 1161, 752 + xy: 1683, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 saltrocks-icon-small rotate: false - xy: 1977, 634 + xy: 1943, 704 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salvo-icon-large rotate: false - xy: 451, 522 + xy: 451, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 salvo-icon-medium rotate: false - xy: 1161, 718 + xy: 1683, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 salvo-icon-small rotate: false - xy: 1951, 582 + xy: 1969, 704 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-boulder-icon-large rotate: false - xy: 501, 572 + xy: 501, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-boulder-icon-medium rotate: false - xy: 1195, 752 + xy: 1717, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-boulder-icon-small rotate: false - xy: 1977, 608 + xy: 1943, 678 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-icon-large rotate: false - xy: 551, 622 + xy: 551, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-icon-medium rotate: false - xy: 1195, 718 + xy: 1717, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-icon-small rotate: false - xy: 2003, 634 + xy: 1995, 704 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sand-water-icon-large rotate: false - xy: 601, 672 + xy: 601, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sand-water-icon-medium rotate: false - xy: 1229, 752 + xy: 1751, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sand-water-icon-small rotate: false - xy: 1977, 582 + xy: 1969, 678 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sandrocks-icon-large rotate: false - xy: 651, 722 + xy: 651, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sandrocks-icon-medium rotate: false - xy: 1229, 718 + xy: 1751, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sandrocks-icon-small rotate: false - xy: 2003, 608 + xy: 1995, 678 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scatter-icon-large rotate: false - xy: 701, 772 + xy: 701, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scatter-icon-medium rotate: false - xy: 1263, 752 + xy: 1785, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scatter-icon-small rotate: false - xy: 2003, 582 + xy: 2021, 704 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scorch-icon-large rotate: false - xy: 751, 822 + xy: 751, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scorch-icon-medium rotate: false - xy: 1263, 718 + xy: 1785, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scorch-icon-small rotate: false - xy: 1457, 556 + xy: 2021, 678 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-large rotate: false - xy: 801, 872 + xy: 801, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-medium rotate: false - xy: 1297, 752 + xy: 1819, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-gigantic-icon-small rotate: false - xy: 1483, 556 + xy: 1925, 650 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-huge-icon-large rotate: false - xy: 51, 72 + xy: 51, 74 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-huge-icon-medium rotate: false - xy: 1297, 718 + xy: 1819, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-huge-icon-small rotate: false - xy: 1509, 556 + xy: 1925, 624 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-icon-large rotate: false - xy: 101, 122 + xy: 101, 124 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-icon-medium rotate: false - xy: 1331, 752 + xy: 1853, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-icon-small rotate: false - xy: 1535, 556 + xy: 1951, 652 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scrap-wall-large-icon-large rotate: false - xy: 151, 172 + xy: 151, 174 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 scrap-wall-large-icon-medium rotate: false - xy: 1331, 718 + xy: 1853, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 scrap-wall-large-icon-small rotate: false - xy: 1561, 556 + xy: 1977, 652 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 scroll rotate: false - xy: 1613, 545 + xy: 1977, 615 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -13708,7 +13755,7 @@ scroll index: -1 scroll-horizontal rotate: false - xy: 1039, 896 + xy: 1115, 898 size: 35, 24 split: 6, 5, 10, 10 orig: 35, 24 @@ -13716,7 +13763,7 @@ scroll-horizontal index: -1 scroll-knob-horizontal-black rotate: false - xy: 1, 2 + xy: 1, 4 size: 40, 24 split: 11, 10, 10, 10 orig: 40, 24 @@ -13724,7 +13771,7 @@ scroll-knob-horizontal-black index: -1 scroll-knob-vertical-black rotate: false - xy: 1587, 540 + xy: 1951, 610 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -13732,952 +13779,952 @@ scroll-knob-vertical-black index: -1 selection rotate: false - xy: 1049, 893 + xy: 1157, 688 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 separator-icon-large rotate: false - xy: 201, 222 + xy: 201, 224 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 separator-icon-medium rotate: false - xy: 1365, 752 + xy: 1887, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 separator-icon-small rotate: false - xy: 1639, 556 + xy: 2003, 652 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shale-boulder-icon-large rotate: false - xy: 251, 272 + xy: 251, 274 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shale-boulder-icon-medium rotate: false - xy: 1365, 718 + xy: 1887, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-boulder-icon-small rotate: false - xy: 1665, 556 + xy: 2003, 626 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shale-icon-large rotate: false - xy: 301, 322 + xy: 301, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shale-icon-medium rotate: false - xy: 1399, 752 + xy: 1921, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shale-icon-small rotate: false - xy: 1691, 556 + xy: 1944, 584 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shalerocks-icon-large rotate: false - xy: 351, 372 + xy: 351, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shalerocks-icon-medium rotate: false - xy: 1399, 718 + xy: 1921, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shalerocks-icon-small rotate: false - xy: 1717, 556 + xy: 2003, 600 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shock-mine-icon-large rotate: false - xy: 401, 422 + xy: 401, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shock-mine-icon-medium rotate: false - xy: 1433, 752 + xy: 1955, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shock-mine-icon-small rotate: false - xy: 1743, 556 + xy: 1977, 589 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shrubs-icon-large rotate: false - xy: 451, 472 + xy: 451, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 shrubs-icon-medium rotate: false - xy: 1433, 718 + xy: 1955, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 shrubs-icon-small rotate: false - xy: 1769, 556 + xy: 2003, 574 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 silicon-smelter-icon-large rotate: false - xy: 501, 522 + xy: 501, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 silicon-smelter-icon-medium rotate: false - xy: 1467, 752 + xy: 1989, 822 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 silicon-smelter-icon-small rotate: false - xy: 1795, 556 + xy: 1938, 514 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 slider rotate: false - xy: 43, 18 + xy: 791, 352 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 365, 69 + xy: 1143, 584 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 396, 83 + xy: 1174, 584 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 427, 83 + xy: 1205, 584 size: 29, 38 orig: 29, 38 offset: 0, 0 index: -1 slider-vertical rotate: false - xy: 1039, 893 + xy: 1115, 895 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 snow-icon-large rotate: false - xy: 551, 572 + xy: 551, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-icon-medium rotate: false - xy: 1467, 718 + xy: 1989, 788 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-icon-small rotate: false - xy: 1821, 556 + xy: 803, 567 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snow-pine-icon-large rotate: false - xy: 601, 622 + xy: 601, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snow-pine-icon-medium rotate: false - xy: 1501, 752 + xy: 1161, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snow-pine-icon-small rotate: false - xy: 1847, 556 + xy: 829, 567 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snowrock-icon-large rotate: false - xy: 651, 672 + xy: 651, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrock-icon-medium rotate: false - xy: 1501, 718 + xy: 1161, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrock-icon-small rotate: false - xy: 1873, 556 + xy: 855, 567 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 snowrocks-icon-large rotate: false - xy: 701, 722 + xy: 701, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 snowrocks-icon-medium rotate: false - xy: 1535, 752 + xy: 1195, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 snowrocks-icon-small rotate: false - xy: 1899, 556 + xy: 787, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-icon-large rotate: false - xy: 751, 772 + xy: 751, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 solar-panel-icon-medium rotate: false - xy: 1535, 718 + xy: 1195, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-icon-small rotate: false - xy: 1925, 556 + xy: 813, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-large-icon-large rotate: false - xy: 801, 822 + xy: 801, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 solar-panel-large-icon-medium rotate: false - xy: 1569, 752 + xy: 1229, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 solar-panel-large-icon-small rotate: false - xy: 1951, 556 + xy: 839, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sorter-icon-large rotate: false - xy: 851, 872 + xy: 851, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sorter-icon-medium rotate: false - xy: 1569, 718 + xy: 1229, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sorter-icon-small rotate: false - xy: 1977, 556 + xy: 865, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spawn-icon-large rotate: false - xy: 101, 72 + xy: 101, 74 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spawn-icon-medium rotate: false - xy: 1603, 752 + xy: 1263, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spawn-icon-small rotate: false - xy: 2003, 556 + xy: 891, 545 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spectre-icon-large rotate: false - xy: 151, 122 + xy: 151, 124 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spectre-icon-medium rotate: false - xy: 1603, 718 + xy: 1263, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spectre-icon-small rotate: false - xy: 1431, 540 + xy: 917, 545 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spirit-factory-icon-large rotate: false - xy: 201, 172 + xy: 201, 174 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spirit-factory-icon-medium rotate: false - xy: 1637, 752 + xy: 1297, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spirit-factory-icon-small rotate: false - xy: 1457, 530 + xy: 943, 545 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-cluster-icon-large rotate: false - xy: 251, 222 + xy: 251, 224 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-cluster-icon-medium rotate: false - xy: 1637, 718 + xy: 1297, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-cluster-icon-small rotate: false - xy: 1483, 530 + xy: 809, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-moss-icon-large rotate: false - xy: 301, 272 + xy: 301, 274 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-moss-icon-medium rotate: false - xy: 1671, 752 + xy: 1331, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-moss-icon-small rotate: false - xy: 1509, 530 + xy: 835, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-pine-icon-large rotate: false - xy: 351, 322 + xy: 351, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-pine-icon-medium rotate: false - xy: 1671, 718 + xy: 1331, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-pine-icon-small rotate: false - xy: 1535, 530 + xy: 861, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 spore-press-icon-large rotate: false - xy: 401, 372 + xy: 401, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 spore-press-icon-medium rotate: false - xy: 1705, 752 + xy: 1365, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spore-press-icon-small rotate: false - xy: 1561, 530 + xy: 891, 519 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sporerocks-icon-large rotate: false - xy: 451, 422 + xy: 451, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 sporerocks-icon-medium rotate: false - xy: 1705, 718 + xy: 1365, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sporerocks-icon-small rotate: false - xy: 1639, 530 + xy: 917, 519 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 stone-icon-large rotate: false - xy: 501, 472 + xy: 501, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 stone-icon-medium rotate: false - xy: 1739, 752 + xy: 1399, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 stone-icon-small rotate: false - xy: 1665, 530 + xy: 943, 519 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-tower-icon-large rotate: false - xy: 551, 522 + xy: 551, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-tower-icon-medium rotate: false - xy: 1739, 718 + xy: 1399, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-tower-icon-small rotate: false - xy: 1691, 530 + xy: 969, 553 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-wall-icon-large rotate: false - xy: 601, 572 + xy: 601, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-wall-icon-medium rotate: false - xy: 1773, 752 + xy: 1433, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-icon-small rotate: false - xy: 1717, 530 + xy: 969, 527 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 surge-wall-large-icon-large rotate: false - xy: 651, 622 + xy: 651, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 surge-wall-large-icon-medium rotate: false - xy: 1773, 718 + xy: 1433, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 surge-wall-large-icon-small rotate: false - xy: 1743, 530 + xy: 969, 501 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 swarmer-icon-large rotate: false - xy: 701, 672 + xy: 701, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 swarmer-icon-medium rotate: false - xy: 1807, 752 + xy: 1467, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer-icon-small rotate: false - xy: 1769, 530 + xy: 995, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tainted-water-icon-large rotate: false - xy: 751, 722 + xy: 751, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tainted-water-icon-medium rotate: false - xy: 1807, 718 + xy: 1467, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tainted-water-icon-small rotate: false - xy: 1795, 530 + xy: 1021, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tar-icon-large rotate: false - xy: 801, 772 + xy: 801, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tar-icon-medium rotate: false - xy: 1841, 752 + xy: 1501, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tar-icon-small rotate: false - xy: 1821, 530 + xy: 995, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tau-mech-pad-icon-large rotate: false - xy: 851, 822 + xy: 851, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tau-mech-pad-icon-medium rotate: false - xy: 1841, 718 + xy: 1501, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tau-mech-pad-icon-small rotate: false - xy: 1847, 530 + xy: 1047, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 tendrils-icon-large rotate: false - xy: 901, 872 + xy: 901, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 tendrils-icon-medium rotate: false - xy: 1875, 752 + xy: 1535, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 tendrils-icon-small rotate: false - xy: 1873, 530 + xy: 1021, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thermal-generator-icon-large rotate: false - xy: 151, 72 + xy: 151, 74 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thermal-generator-icon-medium rotate: false - xy: 1875, 718 + xy: 1535, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-generator-icon-small rotate: false - xy: 1899, 530 + xy: 1073, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thermal-pump-icon-large rotate: false - xy: 201, 122 + xy: 201, 124 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thermal-pump-icon-medium rotate: false - xy: 1909, 752 + xy: 1569, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thermal-pump-icon-small rotate: false - xy: 1925, 530 + xy: 1047, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor-icon-large rotate: false - xy: 251, 172 + xy: 251, 174 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-reactor-icon-medium rotate: false - xy: 1909, 718 + xy: 1569, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-reactor-icon-small rotate: false - xy: 1951, 530 + xy: 1073, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-wall-icon-large rotate: false - xy: 301, 222 + xy: 301, 224 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-wall-icon-medium rotate: false - xy: 1943, 752 + xy: 1603, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-icon-small rotate: false - xy: 1977, 530 + xy: 1099, 541 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-wall-large-icon-large rotate: false - xy: 351, 272 + xy: 351, 274 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thorium-wall-large-icon-medium rotate: false - xy: 1943, 718 + xy: 1603, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thorium-wall-large-icon-small rotate: false - xy: 2003, 530 + xy: 1099, 515 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thruster-icon-large rotate: false - xy: 401, 322 + xy: 401, 324 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 thruster-icon-medium rotate: false - xy: 1977, 752 + xy: 1637, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 thruster-icon-small rotate: false - xy: 1613, 519 + xy: 995, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-icon-large rotate: false - xy: 451, 372 + xy: 451, 374 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titan-factory-icon-medium rotate: false - xy: 1977, 718 + xy: 1637, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titan-factory-icon-small rotate: false - xy: 1587, 514 + xy: 1021, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-conveyor-icon-large rotate: false - xy: 501, 422 + xy: 501, 424 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-conveyor-icon-medium rotate: false - xy: 2011, 752 + xy: 1671, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-conveyor-icon-small rotate: false - xy: 1639, 504 + xy: 1047, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-wall-icon-large rotate: false - xy: 551, 472 + xy: 551, 474 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-icon-medium rotate: false - xy: 2011, 718 + xy: 1671, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-icon-small rotate: false - xy: 1665, 504 + xy: 1073, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titanium-wall-large-icon-large rotate: false - xy: 601, 522 + xy: 601, 524 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 titanium-wall-large-icon-medium rotate: false - xy: 1059, 684 + xy: 1705, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 titanium-wall-large-icon-small rotate: false - xy: 1691, 504 + xy: 1099, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 trident-ship-pad-icon-large rotate: false - xy: 651, 572 + xy: 651, 574 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 trident-ship-pad-icon-medium rotate: false - xy: 1093, 684 + xy: 1705, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 trident-ship-pad-icon-small rotate: false - xy: 1717, 504 + xy: 831, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 turbine-generator-icon-large rotate: false - xy: 701, 622 + xy: 701, 624 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 turbine-generator-icon-medium rotate: false - xy: 1127, 684 + xy: 1739, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 turbine-generator-icon-small rotate: false - xy: 1743, 504 + xy: 831, 463 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 underline rotate: false - xy: 351, 214 + xy: 165, 45 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14685,7 +14732,7 @@ underline index: -1 underline-2 rotate: false - xy: 251, 93 + xy: 127, 45 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14693,7 +14740,7 @@ underline-2 index: -1 underline-disabled rotate: false - xy: 301, 143 + xy: 351, 187 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14701,7 +14748,7 @@ underline-disabled index: -1 underline-red rotate: false - xy: 89, 43 + xy: 1077, 895 size: 36, 27 split: 12, 12, 12, 12 orig: 36, 27 @@ -14709,161 +14756,161 @@ underline-red index: -1 unloader-icon-large rotate: false - xy: 751, 672 + xy: 751, 674 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 unloader-icon-medium rotate: false - xy: 1161, 684 + xy: 1739, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 unloader-icon-small rotate: false - xy: 1769, 504 + xy: 857, 489 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 vault-icon-large rotate: false - xy: 801, 722 + xy: 801, 724 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 vault-icon-medium rotate: false - xy: 1195, 684 + xy: 1773, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 vault-icon-small rotate: false - xy: 1795, 504 + xy: 831, 437 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 water-extractor-icon-large rotate: false - xy: 851, 772 + xy: 851, 774 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 water-extractor-icon-medium rotate: false - xy: 1229, 684 + xy: 1773, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-extractor-icon-small rotate: false - xy: 1821, 504 + xy: 857, 463 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 water-icon-large rotate: false - xy: 901, 822 + xy: 901, 824 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 water-icon-medium rotate: false - xy: 1263, 684 + xy: 1807, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 water-icon-small rotate: false - xy: 1847, 504 + xy: 857, 437 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 wave-icon-large rotate: false - xy: 951, 872 + xy: 951, 874 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wave-icon-medium rotate: false - xy: 1297, 684 + xy: 1807, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wave-icon-small rotate: false - xy: 1873, 504 + xy: 846, 411 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 white-tree-dead-icon-large rotate: false - xy: 201, 72 + xy: 201, 74 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 white-tree-dead-icon-medium rotate: false - xy: 1331, 684 + xy: 1841, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-dead-icon-small rotate: false - xy: 1899, 504 + xy: 846, 385 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 white-tree-icon-large rotate: false - xy: 251, 122 + xy: 251, 124 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 white-tree-icon-medium rotate: false - xy: 1365, 684 + xy: 1841, 720 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 white-tree-icon-small rotate: false - xy: 1925, 504 + xy: 846, 359 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 whiteui rotate: false - xy: 119, 38 + xy: 187, 40 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 window-empty rotate: false - xy: 805, 428 + xy: 765, 362 size: 27, 61 split: 8, 8, 44, 11 orig: 27, 61 @@ -14871,21 +14918,21 @@ window-empty index: -1 wraith-factory-icon-large rotate: false - xy: 301, 172 + xy: 301, 174 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 wraith-factory-icon-medium rotate: false - xy: 1399, 684 + xy: 1875, 754 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 wraith-factory-icon-small rotate: false - xy: 1951, 504 + xy: 872, 411 size: 24, 24 orig: 24, 24 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 2fd70aacfd..b49383e412 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 a91b795504..03c100c4da 100644 Binary files a/core/assets/sprites/sprites2.png and b/core/assets/sprites/sprites2.png differ diff --git a/core/assets/sprites/sprites3.png b/core/assets/sprites/sprites3.png index 71e777e7de..1776b09b12 100644 Binary files a/core/assets/sprites/sprites3.png and b/core/assets/sprites/sprites3.png differ diff --git a/core/assets/sprites/sprites4.png b/core/assets/sprites/sprites4.png index 8840e3ee12..84ad928d4c 100644 Binary files a/core/assets/sprites/sprites4.png and b/core/assets/sprites/sprites4.png differ diff --git a/core/assets/sprites/uiskin.json b/core/assets/sprites/uiskin.json index 5c0e25d6e1..30e049a889 100644 --- a/core/assets/sprites/uiskin.json +++ b/core/assets/sprites/uiskin.json @@ -52,27 +52,49 @@ ButtonStyle: { default: { down: button-down, - up: button + up: button, + over: button-over, + disabled: button-disabled + }, + square: { + over: button-square-over, + disabled: button-disabled, + down: button-square-down, + up: button-square }, toggle: { checked: button-down, down: button-down, up: button - } + }, + wave: { + up: button-edge-4, + over: button-edge-over-4, + disabled: button-edge-4 + }, }, TextButtonStyle: { default: { over: button-over, disabled: button-disabled, - font: default-font, + font: default, fontColor: white, disabledFontColor: gray, down: button-down, up: button }, + square: { + font: default, + fontColor: white, + disabledFontColor: gray, + over: button-square-over, + disabled: button-disabled, + down: button-square-down, + up: button-square + }, node: { disabled: button, - font: default-font, + font: default, fontColor: white, disabledFontColor: gray, up: button-over, @@ -80,33 +102,33 @@ }, right: { over: button-right-over, - font: default-font, + font: default, fontColor: white, disabledFontColor: gray, down: button-right-down, up: button-right }, wave: { - font: default-font, + font: default, fontColor: white, disabledFontColor: gray, up: button-edge-4 }, clear: { over: flat-over, - font: default-font, + font: default, fontColor: white, disabledFontColor: gray, down: flat-over, up: flat }, discord: { - font: default-font, + font: default, fontColor: white, up: discord-banner }, info: { - font: default-font, + font: default, fontColor: white, up: info-banner }, @@ -114,7 +136,7 @@ down: whiteui, up: pane, over: flat-down, - font: default-font, + font: default, fontColor: white, disabledFontColor: gray }, @@ -122,15 +144,15 @@ down: flat-over, up: none, over: flat-over, - font: default-font, + font: default, fontColor: white, disabledFontColor: gray }, empty: { - font: default-font + font: default }, clear-toggle: { - font: default-font, + font: default, fontColor: white, checked: flat-down, down: flat-down, @@ -140,7 +162,7 @@ disabledFontColor: gray }, clear-toggle-menu: { - font: default-font, + font: default, fontColor: white, checked: flat-down, down: flat-down, @@ -150,7 +172,7 @@ disabledFontColor: gray } toggle: { - font: default-font, + font: default, fontColor: white, checked: button-down, down: button-down, @@ -256,18 +278,18 @@ }, WindowStyle: { default: { - titleFont: default-font, + titleFont: default, titleFontColor: accent }, dialog: { stageBackground: dialogDim, - titleFont: default-font, + titleFont: default, background: window-empty, titleFontColor: accent }, fulldialog: { stageBackground: dark, - titleFont: default-font, + titleFont: default, background: window-empty, titleFontColor: accent } @@ -295,17 +317,17 @@ }, LabelStyle: { default: { - font: default-font, + font: default, fontColor: white }, - small: { - font: default-font, + outline: { + font: outline, fontColor: white } }, TextFieldStyle: { default: { - font: default-font-chat, + font: chat, fontColor: white, disabledFontColor: gray, disabledBackground: underline-disabled, @@ -313,17 +335,17 @@ background: underline, invalidBackground: underline-red, cursor: cursor, - messageFont: default-font, + messageFont: default, messageFontColor: gray } textarea: { - font: default-font-chat, + font: chat, fontColor: white, disabledFontColor: gray, selection: selection, background: underline, cursor: cursor, - messageFont: default-font, + messageFont: default, messageFontColor: gray } }, @@ -335,7 +357,7 @@ checkboxOver: check-over, checkboxOnDisabled: check-on-disabled, checkboxOffDisabled: check-disabled, - font: default-font, + font: default, fontColor: white, disabledFontColor: gray, diff --git a/core/assets/zones/craters.png b/core/assets/zones/craters.png new file mode 100644 index 0000000000..9675beb0b3 Binary files /dev/null and b/core/assets/zones/craters.png differ diff --git a/core/assets/zones/desertWastes.png b/core/assets/zones/desertWastes.png new file mode 100644 index 0000000000..dc6b8946e8 Binary files /dev/null and b/core/assets/zones/desertWastes.png differ diff --git a/core/assets/zones/desolateRift.png b/core/assets/zones/desolateRift.png new file mode 100644 index 0000000000..8b24d6be6b Binary files /dev/null and b/core/assets/zones/desolateRift.png differ diff --git a/core/assets/zones/frozenForest.png b/core/assets/zones/frozenForest.png new file mode 100644 index 0000000000..8faccbdcaf Binary files /dev/null and b/core/assets/zones/frozenForest.png differ diff --git a/core/assets/zones/fungalPass.png b/core/assets/zones/fungalPass.png new file mode 100644 index 0000000000..c59fbc57e3 Binary files /dev/null and b/core/assets/zones/fungalPass.png differ diff --git a/core/assets/zones/groundZero.png b/core/assets/zones/groundZero.png new file mode 100644 index 0000000000..51fa326984 Binary files /dev/null and b/core/assets/zones/groundZero.png differ diff --git a/core/assets/zones/nomap.png b/core/assets/zones/nomap.png new file mode 100644 index 0000000000..00241f7666 Binary files /dev/null and b/core/assets/zones/nomap.png differ diff --git a/core/assets/zones/nuclearComplex.png b/core/assets/zones/nuclearComplex.png new file mode 100644 index 0000000000..84268346f9 Binary files /dev/null and b/core/assets/zones/nuclearComplex.png differ diff --git a/core/assets/zones/overgrowth.png b/core/assets/zones/overgrowth.png new file mode 100644 index 0000000000..99ace71e99 Binary files /dev/null and b/core/assets/zones/overgrowth.png differ diff --git a/core/assets/zones/ruinousShores.png b/core/assets/zones/ruinousShores.png new file mode 100644 index 0000000000..28f01f2a45 Binary files /dev/null and b/core/assets/zones/ruinousShores.png differ diff --git a/core/assets/zones/saltFlats.png b/core/assets/zones/saltFlats.png new file mode 100644 index 0000000000..3a31279c30 Binary files /dev/null and b/core/assets/zones/saltFlats.png differ diff --git a/core/assets/zones/stainedMountains.png b/core/assets/zones/stainedMountains.png new file mode 100644 index 0000000000..0fb9bb2b10 Binary files /dev/null and b/core/assets/zones/stainedMountains.png differ diff --git a/core/assets/zones/tarFields.png b/core/assets/zones/tarFields.png new file mode 100644 index 0000000000..976af5c1d3 Binary files /dev/null and b/core/assets/zones/tarFields.png differ diff --git a/core/src/io/anuke/mindustry/Mindustry.java b/core/src/io/anuke/mindustry/Mindustry.java index 5a58e9b30e..9ed18ca79d 100644 --- a/core/src/io/anuke/mindustry/Mindustry.java +++ b/core/src/io/anuke/mindustry/Mindustry.java @@ -1,12 +1,12 @@ package io.anuke.mindustry; import io.anuke.arc.*; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Log; -import io.anuke.arc.util.Time; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; import io.anuke.mindustry.core.*; -import io.anuke.mindustry.game.EventType.GameLoadEvent; -import io.anuke.mindustry.io.BundleLoader; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.io.*; import static io.anuke.mindustry.Vars.*; @@ -21,10 +21,14 @@ public class Mindustry extends ApplicationCore{ }); Time.mark(); + UI.loadSystemCursors(); Vars.init(); Log.setUseColors(false); BundleLoader.load(); + Musics.load(); + Sounds.load(); + content.load(); content.loadColors(); diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 8d9a4e0c5f..183eb56a0c 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -42,9 +42,9 @@ public class Vars{ /** maximum distance between mine and core that supports automatic transferring */ public static final float mineTransferRange = 220f; /** team of the player by default */ - public static final Team defaultTeam = Team.blue; + public static final Team defaultTeam = Team.sharded; /** team of the enemy in waves/sectors */ - public static final Team waveTeam = Team.red; + public static final Team waveTeam = Team.crux; /** whether to enable editing of units in the editor */ public static final boolean enableUnitEditing = false; /** max chat message length */ diff --git a/core/src/io/anuke/mindustry/ai/BlockIndexer.java b/core/src/io/anuke/mindustry/ai/BlockIndexer.java index 71a79a262c..5307e4d202 100644 --- a/core/src/io/anuke/mindustry/ai/BlockIndexer.java +++ b/core/src/io/anuke/mindustry/ai/BlockIndexer.java @@ -12,6 +12,7 @@ import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.Teams.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.meta.*; import static io.anuke.mindustry.Vars.*; @@ -118,7 +119,7 @@ public class BlockIndexer{ ObjectSet set = damagedTiles[team.ordinal()]; for(Tile tile : set){ - if(tile.entity == null || tile.entity.getTeam() != team || !tile.entity.damaged()){ + if((tile.entity == null || tile.entity.getTeam() != team || !tile.entity.damaged()) && !(tile.block() instanceof BuildBlock)){ returnArray.add(tile); } } @@ -219,7 +220,7 @@ public class BlockIndexer{ } private void process(Tile tile){ - if(tile.block().flags.size() > 0 && tile.getTeam() != Team.none){ + if(tile.block().flags.size() > 0 && tile.getTeam() != Team.derelict){ ObjectSet[] map = getFlagged(tile.getTeam()); for(BlockFlag flag : tile.block().flags){ diff --git a/core/src/io/anuke/mindustry/content/Blocks.java b/core/src/io/anuke/mindustry/content/Blocks.java index a01af9f7b1..6d2ec8615c 100644 --- a/core/src/io/anuke/mindustry/content/Blocks.java +++ b/core/src/io/anuke/mindustry/content/Blocks.java @@ -11,6 +11,7 @@ import io.anuke.mindustry.entities.Damage; import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.game.ContentList; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.*; @@ -411,7 +412,7 @@ public class Blocks implements ContentList{ //region crafting graphitePress = new GenericCrafter("graphite-press"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 150, Items.lead, 60)); + requirements(Category.crafting, ItemStack.with(Items.copper, 75, Items.lead, 30)); craftEffect = Fx.pulverizeMedium; outputItem = new ItemStack(Items.graphite, 1); @@ -423,7 +424,7 @@ public class Blocks implements ContentList{ }}; multiPress = new GenericCrafter("multi-press"){{ - requirements(Category.crafting, ItemStack.with(Items.titanium, 200, Items.silicon, 50, Items.lead, 200, Items.graphite, 100)); + requirements(Category.crafting, ItemStack.with(Items.titanium, 100, Items.silicon, 25, Items.lead, 100, Items.graphite, 50)); craftEffect = Fx.pulverizeMedium; outputItem = new ItemStack(Items.graphite, 2); @@ -439,7 +440,7 @@ public class Blocks implements ContentList{ }}; siliconSmelter = new GenericSmelter("silicon-smelter"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50)); + requirements(Category.crafting, ItemStack.with(Items.copper, 30, Items.lead, 25)); craftEffect = Fx.smeltsmoke; outputItem = new ItemStack(Items.silicon, 1); craftTime = 40f; @@ -453,7 +454,7 @@ public class Blocks implements ContentList{ }}; kiln = new GenericSmelter("kiln"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 120, Items.graphite, 60, Items.lead, 60)); + requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.graphite, 30, Items.lead, 30)); craftEffect = Fx.smeltsmoke; outputItem = new ItemStack(Items.metaglass, 1); craftTime = 30f; @@ -466,7 +467,7 @@ public class Blocks implements ContentList{ }}; plastaniumCompressor = new GenericCrafter("plastanium-compressor"){{ - requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 230, Items.graphite, 120, Items.titanium, 160)); + requirements(Category.crafting, ItemStack.with(Items.silicon, 80, Items.lead, 115, Items.graphite, 60, Items.titanium, 80)); hasItems = true; liquidCapacity = 60f; craftTime = 60f; @@ -495,7 +496,7 @@ public class Blocks implements ContentList{ }}; phaseWeaver = new GenericCrafter("phase-weaver"){{ - requirements(Category.crafting, ItemStack.with(Items.silicon, 260, Items.lead, 240, Items.thorium, 150)); + requirements(Category.crafting, ItemStack.with(Items.silicon, 130, Items.lead, 120, Items.thorium, 75)); craftEffect = Fx.smeltsmoke; outputItem = new ItemStack(Items.phasefabric, 1); craftTime = 120f; @@ -531,7 +532,7 @@ public class Blocks implements ContentList{ }}; surgeSmelter = new GenericSmelter("alloy-smelter"){{ - requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 160, Items.thorium, 140)); + requirements(Category.crafting, ItemStack.with(Items.silicon, 80, Items.lead, 80, Items.thorium, 70)); craftEffect = Fx.smeltsmoke; outputItem = new ItemStack(Items.surgealloy, 1); craftTime = 75f; @@ -543,9 +544,9 @@ public class Blocks implements ContentList{ }}; cryofluidMixer = new LiquidConverter("cryofluidmixer"){{ - requirements(Category.crafting, ItemStack.with(Items.lead, 130, Items.silicon, 80, Items.thorium, 90)); - outputLiquid = new LiquidStack(Liquids.cryofluid, 0.1f); - craftTime = 60f; + requirements(Category.crafting, ItemStack.with(Items.lead, 65, Items.silicon, 40, Items.titanium, 60)); + outputLiquid = new LiquidStack(Liquids.cryofluid, 0.2f); + craftTime = 120f; size = 2; hasPower = true; hasItems = true; @@ -556,7 +557,7 @@ public class Blocks implements ContentList{ consumes.power(1f); consumes.item(Items.titanium); - consumes.liquid(Liquids.water, 0.1f); + consumes.liquid(Liquids.water, 0.2f); int liquidRegion = reg("-liquid"), topRegion = reg("-top"), bottomRegion = reg("-bottom"); @@ -581,7 +582,7 @@ public class Blocks implements ContentList{ }}; blastMixer = new GenericCrafter("blast-mixer"){{ - requirements(Category.crafting, ItemStack.with(Items.lead, 60, Items.titanium, 40)); + requirements(Category.crafting, ItemStack.with(Items.lead, 30, Items.titanium, 20)); hasItems = true; hasPower = true; outputItem = new ItemStack(Items.blastCompound, 1); @@ -592,7 +593,7 @@ public class Blocks implements ContentList{ }}; pyratiteMixer = new GenericSmelter("pyratite-mixer"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 100, Items.lead, 50)); + requirements(Category.crafting, ItemStack.with(Items.copper, 50, Items.lead, 25)); flameColor = Color.CLEAR; hasItems = true; hasPower = true; @@ -605,7 +606,7 @@ public class Blocks implements ContentList{ }}; melter = new GenericCrafter("melter"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 70, Items.graphite, 90)); + requirements(Category.crafting, ItemStack.with(Items.copper, 30, Items.lead, 35, Items.graphite, 45)); health = 200; outputLiquid = new LiquidStack(Liquids.slag, 2f); craftTime = 10f; @@ -616,12 +617,12 @@ public class Blocks implements ContentList{ }}; separator = new Separator("separator"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.titanium, 50)); + requirements(Category.crafting, ItemStack.with(Items.copper, 30, Items.titanium, 25)); results = ItemStack.with( - Items.copper, 5, - Items.lead, 3, - Items.graphite, 2, - Items.titanium, 2 + Items.copper, 5, + Items.lead, 3, + Items.graphite, 2, + Items.titanium, 2 ); hasPower = true; craftTime = 35f; @@ -636,7 +637,7 @@ public class Blocks implements ContentList{ }}; sporePress = new GenericCrafter("spore-press"){{ - requirements(Category.crafting, ItemStack.with(Items.lead, 70, Items.silicon, 60)); + requirements(Category.crafting, ItemStack.with(Items.lead, 35, Items.silicon, 30)); liquidCapacity = 60f; craftTime = 20f; outputLiquid = new LiquidStack(Liquids.oil, 6f); @@ -672,7 +673,7 @@ public class Blocks implements ContentList{ }}; pulverizer = new GenericCrafter("pulverizer"){{ - requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50)); + requirements(Category.crafting, ItemStack.with(Items.copper, 30, Items.lead, 25)); outputItem = new ItemStack(Items.sand, 1); craftEffect = Fx.pulverize; craftTime = 40f; @@ -695,7 +696,7 @@ public class Blocks implements ContentList{ }}; coalCentrifuge = new GenericCrafter("coal-centrifuge"){{ - requirements(Category.crafting, ItemStack.with(Items.titanium, 40, Items.graphite, 80, Items.lead, 60)); + requirements(Category.crafting, ItemStack.with(Items.titanium, 20, Items.graphite, 40, Items.lead, 30)); craftEffect = Fx.smeltsmoke; outputItem = new ItemStack(Items.coal, 1); craftTime = 30f; @@ -707,7 +708,7 @@ public class Blocks implements ContentList{ }}; incinerator = new Incinerator("incinerator"){{ - requirements(Category.crafting, ItemStack.with(Items.graphite, 10, Items.lead, 30)); + requirements(Category.crafting, ItemStack.with(Items.graphite, 5, Items.lead, 15)); health = 90; consumes.power(0.50f); }}; @@ -768,73 +769,72 @@ public class Blocks implements ContentList{ }}; thruster = new Wall("thruster"){{ - requirements(Category.defense, () -> state.rules.infiniteResources, ItemStack.with()); health = 55 * 16 * wallHealthMultiplier; size = 4; }}; copperWall = new Wall("copper-wall"){{ - requirements(Category.defense, ItemStack.with(Items.copper, 12)); + requirements(Category.defense, ItemStack.with(Items.copper, 6)); health = 80 * wallHealthMultiplier; }}; copperWallLarge = new Wall("copper-wall-large"){{ - requirements(Category.defense, ItemStack.with(Items.copper, 12 * 4)); + requirements(Category.defense, ItemStack.mult(copperWall.buildRequirements, 4)); health = 80 * 4 * wallHealthMultiplier; size = 2; }}; titaniumWall = new Wall("titanium-wall"){{ - requirements(Category.defense, ItemStack.with(Items.titanium, 12)); + requirements(Category.defense, ItemStack.with(Items.titanium, 6)); health = 110 * wallHealthMultiplier; }}; titaniumWallLarge = new Wall("titanium-wall-large"){{ - requirements(Category.defense, ItemStack.with(Items.titanium, 12 * 4)); + requirements(Category.defense, ItemStack.mult(titaniumWall.buildRequirements, 4)); health = 110 * wallHealthMultiplier * 4; size = 2; }}; thoriumWall = new Wall("thorium-wall"){{ - requirements(Category.defense, ItemStack.with(Items.thorium, 12)); + requirements(Category.defense, ItemStack.with(Items.thorium, 6)); health = 200 * wallHealthMultiplier; }}; thoriumWallLarge = new Wall("thorium-wall-large"){{ - requirements(Category.defense, ItemStack.with(Items.thorium, 12 * 4)); + requirements(Category.defense, ItemStack.mult(thoriumWall.buildRequirements, 4)); health = 200 * wallHealthMultiplier * 4; size = 2; }}; phaseWall = new DeflectorWall("phase-wall"){{ - requirements(Category.defense, ItemStack.with(Items.phasefabric, 12)); + requirements(Category.defense, ItemStack.with(Items.phasefabric, 6)); health = 150 * wallHealthMultiplier; }}; phaseWallLarge = new DeflectorWall("phase-wall-large"){{ - requirements(Category.defense, ItemStack.with(Items.phasefabric, 12 * 4)); + requirements(Category.defense, ItemStack.mult(phaseWall.buildRequirements, 4)); health = 150 * 4 * wallHealthMultiplier; size = 2; }}; surgeWall = new SurgeWall("surge-wall"){{ - requirements(Category.defense, ItemStack.with(Items.surgealloy, 12)); + requirements(Category.defense, ItemStack.with(Items.surgealloy, 6)); health = 230 * wallHealthMultiplier; }}; surgeWallLarge = new SurgeWall("surge-wall-large"){{ - requirements(Category.defense, ItemStack.with(Items.surgealloy, 12 * 4)); + requirements(Category.defense, ItemStack.mult(surgeWall.buildRequirements, 4)); health = 230 * 4 * wallHealthMultiplier; size = 2; }}; door = new Door("door"){{ - requirements(Category.defense, ItemStack.with(Items.titanium, 12, Items.silicon, 8)); + requirements(Category.defense, ItemStack.with(Items.graphite, 6, Items.silicon, 4)); health = 100 * wallHealthMultiplier; }}; doorLarge = new Door("door-large"){{ - requirements(Category.defense, ItemStack.with(Items.titanium, 12 * 4, Items.silicon, 8 * 4)); + requirements(Category.defense, ItemStack.mult(door.buildRequirements, 4)); openfx = Fx.dooropenlarge; closefx = Fx.doorcloselarge; health = 100 * 4 * wallHealthMultiplier; @@ -842,7 +842,7 @@ public class Blocks implements ContentList{ }}; mender = new MendProjector("mender"){{ - requirements(Category.effect, ItemStack.with(Items.lead, 60, Items.copper, 50)); + requirements(Category.effect, ItemStack.with(Items.lead, 30, Items.copper, 25)); consumes.power(0.3f); size = 1; reload = 200f; @@ -855,7 +855,7 @@ public class Blocks implements ContentList{ }}; mendProjector = new MendProjector("mend-projector"){{ - requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 50, Items.silicon, 80)); + requirements(Category.effect, ItemStack.with(Items.lead, 100, Items.titanium, 25, Items.silicon, 40)); consumes.power(1.5f); size = 2; reload = 250f; @@ -866,21 +866,21 @@ public class Blocks implements ContentList{ }}; overdriveProjector = new OverdriveProjector("overdrive-projector"){{ - requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 150, Items.plastanium, 60)); + requirements(Category.effect, ItemStack.with(Items.lead, 100, Items.titanium, 75, Items.silicon, 75, Items.plastanium, 30)); consumes.power(3.50f); size = 2; consumes.item(Items.phasefabric).boost(); }}; forceProjector = new ForceProjector("force-projector"){{ - requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 250)); + requirements(Category.effect, ItemStack.with(Items.lead, 100, Items.titanium, 75, Items.silicon, 125)); size = 3; consumes.item(Items.phasefabric).boost(); consumes.power(3f); }}; shockMine = new ShockMine("shock-mine"){{ - requirements(Category.effect, ItemStack.with(Items.lead, 50, Items.silicon, 25)); + requirements(Category.effect, ItemStack.with(Items.lead, 25, Items.silicon, 12)); hasShadow = false; health = 40; damage = 11; @@ -899,53 +899,53 @@ public class Blocks implements ContentList{ }}; titaniumConveyor = new Conveyor("titanium-conveyor"){{ - requirements(Category.distribution, ItemStack.with(Items.copper, 2, Items.lead, 1, Items.titanium, 1)); + requirements(Category.distribution, ItemStack.with(Items.copper, 1, Items.lead, 1, Items.titanium, 1)); health = 65; speed = 0.08f; }}; junction = new Junction("junction"){{ - requirements(Category.distribution, ItemStack.with(Items.copper, 3), true); + requirements(Category.distribution, ItemStack.with(Items.copper, 1), true); speed = 26; capacity = 15; health = 30; }}; itemBridge = new BufferedItemBridge("bridge-conveyor"){{ - requirements(Category.distribution, ItemStack.with(Items.lead, 8, Items.copper, 8)); + requirements(Category.distribution, ItemStack.with(Items.lead, 4, Items.copper, 4)); range = 4; speed = 70f; bufferCapacity = 15; }}; phaseConveyor = new ItemBridge("phase-conveyor"){{ - requirements(Category.distribution, ItemStack.with(Items.phasefabric, 10, Items.silicon, 15, Items.lead, 20, Items.graphite, 20)); + requirements(Category.distribution, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10)); range = 12; hasPower = true; consumes.power(0.30f); }}; sorter = new Sorter("sorter"){{ - requirements(Category.distribution, ItemStack.with(Items.lead, 4, Items.copper, 4)); + requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 2)); }}; router = new Router("router"){{ - requirements(Category.distribution, ItemStack.with(Items.copper, 6)); + requirements(Category.distribution, ItemStack.with(Items.copper, 3)); }}; distributor = new Router("distributor"){{ - requirements(Category.distribution, ItemStack.with(Items.lead, 8, Items.copper, 8)); + requirements(Category.distribution, ItemStack.with(Items.lead, 4, Items.copper, 4)); size = 2; }}; overflowGate = new OverflowGate("overflow-gate"){{ - requirements(Category.distribution, ItemStack.with(Items.lead, 4, Items.copper, 8)); + requirements(Category.distribution, ItemStack.with(Items.lead, 2, Items.copper, 4)); }}; massDriver = new MassDriver("mass-driver"){{ - requirements(Category.distribution, ItemStack.with(Items.titanium, 250, Items.silicon, 150, Items.lead, 250, Items.thorium, 100)); + requirements(Category.distribution, ItemStack.with(Items.titanium, 125, Items.silicon, 75, Items.lead, 125, Items.thorium, 50)); size = 3; itemCapacity = 120; reloadTime = 200f; @@ -957,12 +957,12 @@ public class Blocks implements ContentList{ //region liquid mechanicalPump = new Pump("mechanical-pump"){{ - requirements(Category.liquid, ItemStack.with(Items.copper, 30, Items.lead, 20)); + requirements(Category.liquid, ItemStack.with(Items.copper, 15, Items.lead, 10)); pumpAmount = 0.1f; }}; rotaryPump = new Pump("rotary-pump"){{ - requirements(Category.liquid, ItemStack.with(Items.copper, 140, Items.lead, 100, Items.silicon, 40, Items.titanium, 70)); + requirements(Category.liquid, ItemStack.with(Items.copper, 70, Items.lead, 50, Items.silicon, 20, Items.titanium, 35)); pumpAmount = 0.8f; consumes.power(0.15f); liquidCapacity = 30f; @@ -971,7 +971,7 @@ public class Blocks implements ContentList{ }}; thermalPump = new Pump("thermal-pump"){{ - requirements(Category.liquid, ItemStack.with(Items.copper, 160, Items.lead, 130, Items.silicon, 60, Items.titanium, 80, Items.thorium, 70)); + requirements(Category.liquid, ItemStack.with(Items.copper, 80, Items.lead, 65, Items.silicon, 30, Items.titanium, 40, Items.thorium, 35)); pumpAmount = 1.5f; consumes.power(0.30f); liquidCapacity = 40f; @@ -985,36 +985,36 @@ public class Blocks implements ContentList{ }}; pulseConduit = new Conduit("pulse-conduit"){{ - requirements(Category.liquid, ItemStack.with(Items.titanium, 1, Items.metaglass, 2)); + requirements(Category.liquid, ItemStack.with(Items.titanium, 1, Items.metaglass, 1)); liquidCapacity = 16f; liquidFlowFactor = 4.9f; health = 90; }}; liquidRouter = new LiquidRouter("liquid-router"){{ - requirements(Category.liquid, ItemStack.with(Items.titanium, 4, Items.metaglass, 4)); + requirements(Category.liquid, ItemStack.with(Items.titanium, 2, Items.metaglass, 2)); liquidCapacity = 20f; }}; liquidTank = new LiquidTank("liquid-tank"){{ - requirements(Category.liquid, ItemStack.with(Items.titanium, 50, Items.metaglass, 50)); + requirements(Category.liquid, ItemStack.with(Items.titanium, 25, Items.metaglass, 25)); size = 3; liquidCapacity = 1500f; health = 500; }}; liquidJunction = new LiquidJunction("liquid-junction"){{ - requirements(Category.liquid, ItemStack.with(Items.titanium, 4, Items.metaglass, 4)); + requirements(Category.liquid, ItemStack.with(Items.titanium, 2, Items.metaglass, 2)); }}; bridgeConduit = new LiquidExtendingBridge("bridge-conduit"){{ - requirements(Category.liquid, ItemStack.with(Items.titanium, 8, Items.metaglass, 8)); + requirements(Category.liquid, ItemStack.with(Items.titanium, 4, Items.metaglass, 4)); range = 4; hasPower = false; }}; phaseConduit = new LiquidBridge("phase-conduit"){{ - requirements(Category.liquid, ItemStack.with(Items.phasefabric, 10, Items.silicon, 15, Items.metaglass, 40, Items.titanium, 20)); + requirements(Category.liquid, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10)); range = 12; hasPower = true; consumes.power(0.30f); @@ -1024,91 +1024,92 @@ public class Blocks implements ContentList{ //region power powerNode = new PowerNode("power-node"){{ - requirements(Category.power, ItemStack.with(Items.copper, 2, Items.lead, 6)); - maxNodes = 4; + requirements(Category.power, ItemStack.with(Items.copper, 1, Items.lead, 3)); + maxNodes = 20; laserRange = 6; }}; powerNodeLarge = new PowerNode("power-node-large"){{ - requirements(Category.power, ItemStack.with(Items.titanium, 10, Items.lead, 20, Items.silicon, 6)); + requirements(Category.power, ItemStack.with(Items.titanium, 5, Items.lead, 10, Items.silicon, 3)); size = 2; - maxNodes = 6; + maxNodes = 30; laserRange = 9.5f; }}; surgeTower = new PowerNode("surge-tower"){{ - requirements(Category.power, ItemStack.with(Items.titanium, 15, Items.lead, 20, Items.silicon, 30, Items.surgealloy, 30)); + requirements(Category.power, ItemStack.with(Items.titanium, 7, Items.lead, 10, Items.silicon, 15, Items.surgealloy, 15)); size = 2; maxNodes = 2; laserRange = 30f; }}; battery = new Battery("battery"){{ - requirements(Category.power, ItemStack.with(Items.copper, 8, Items.lead, 40)); + requirements(Category.power, ItemStack.with(Items.copper, 4, Items.lead, 20)); consumes.powerBuffered(4000f); }}; batteryLarge = new Battery("battery-large"){{ - requirements(Category.power, ItemStack.with(Items.titanium, 40, Items.lead, 80, Items.silicon, 40)); + requirements(Category.power, ItemStack.with(Items.titanium, 20, Items.lead, 40, Items.silicon, 20)); size = 3; consumes.powerBuffered(50000f); }}; combustionGenerator = new BurnerGenerator("combustion-generator"){{ - requirements(Category.power, ItemStack.with(Items.copper, 50, Items.lead, 30)); + requirements(Category.power, ItemStack.with(Items.copper, 25, Items.lead, 15)); powerProduction = 1f; - itemDuration = 60f; + itemDuration = 120f; }}; thermalGenerator = new ThermalGenerator("thermal-generator"){{ - requirements(Category.power, ItemStack.with(Items.copper, 80, Items.graphite, 70, Items.lead, 100, Items.silicon, 70, Items.metaglass, 80)); + requirements(Category.power, ItemStack.with(Items.copper, 40, Items.graphite, 35, Items.lead, 50, Items.silicon, 35, Items.metaglass, 40)); powerProduction = 1.8f; generateEffect = Fx.redgeneratespark; size = 2; }}; turbineGenerator = new BurnerGenerator("turbine-generator"){{ - requirements(Category.power, ItemStack.with(Items.copper, 70, Items.graphite, 50, Items.lead, 80, Items.silicon, 60)); + requirements(Category.power, ItemStack.with(Items.copper, 35, Items.graphite, 25, Items.lead, 40, Items.silicon, 30)); powerProduction = 6f; - itemDuration = 40f; + itemDuration = 90f; consumes.liquid(Liquids.water, 0.05f); hasLiquids = true; size = 2; }}; differentialGenerator = new SingleTypeGenerator(true, false, "differential-generator"){{ - requirements(Category.power, ItemStack.with(Items.copper, 140, Items.titanium, 100, Items.lead, 200, Items.silicon, 130, Items.metaglass, 100)); + requirements(Category.power, ItemStack.with(Items.copper, 70, Items.titanium, 50, Items.lead, 100, Items.silicon, 65, Items.metaglass, 50)); powerProduction = 16f; - itemDuration = 50f; + itemDuration = 120f; hasLiquids = true; size = 3; consumes.item(Items.pyratite).optional(true, false); - consumes.liquid(Liquids.cryofluid, 0.2f); + consumes.liquid(Liquids.cryofluid, 0.18f); }}; rtgGenerator = new DecayGenerator("rtg-generator"){{ - requirements(Category.power, ItemStack.with(Items.lead, 200, Items.silicon, 150, Items.phasefabric, 50, Items.plastanium, 150, Items.thorium, 100)); + requirements(Category.power, ItemStack.with(Items.lead, 100, Items.silicon, 75, Items.phasefabric, 25, Items.plastanium, 75, Items.thorium, 50)); size = 2; powerProduction = 3f; - itemDuration = 220f; + itemDuration = 440f; }}; solarPanel = new SolarGenerator("solar-panel"){{ - requirements(Category.power, ItemStack.with(Items.lead, 20, Items.silicon, 30)); + requirements(Category.power, ItemStack.with(Items.lead, 10, Items.silicon, 15)); powerProduction = 0.06f; }}; largeSolarPanel = new SolarGenerator("solar-panel-large"){{ - requirements(Category.power, ItemStack.with(Items.lead, 200, Items.silicon, 290, Items.phasefabric, 30)); + requirements(Category.power, ItemStack.with(Items.lead, 100, Items.silicon, 145, Items.phasefabric, 15)); size = 3; powerProduction = 0.9f; }}; thoriumReactor = new NuclearReactor("thorium-reactor"){{ - requirements(Category.power, ItemStack.with(Items.lead, 600, Items.silicon, 400, Items.graphite, 300, Items.thorium, 300, Items.metaglass, 100)); + requirements(Category.power, ItemStack.with(Items.lead, 300, Items.silicon, 200, Items.graphite, 150, Items.thorium, 150, Items.metaglass, 50)); size = 3; health = 700; + itemDuration = 360f; powerProduction = 14f; consumes.item(Items.thorium); heating = 0.02f; @@ -1116,11 +1117,11 @@ public class Blocks implements ContentList{ }}; impactReactor = new ImpactReactor("impact-reactor"){{ - requirements(Category.power, ItemStack.with(Items.lead, 1000, Items.silicon, 600, Items.graphite, 800, Items.thorium, 200, Items.surgealloy, 500, Items.metaglass, 500)); + requirements(Category.power, ItemStack.with(Items.lead, 500, Items.silicon, 300, Items.graphite, 400, Items.thorium, 100, Items.surgealloy, 250, Items.metaglass, 250)); size = 4; health = 900; powerProduction = 130f; - itemDuration = 90f; + itemDuration = 140f; consumes.power(25f); consumes.item(Items.blastCompound); consumes.liquid(Liquids.cryofluid, 0.25f); @@ -1130,7 +1131,7 @@ public class Blocks implements ContentList{ //region production mechanicalDrill = new Drill("mechanical-drill"){{ - requirements(Category.production, ItemStack.with(Items.copper, 25), true); + requirements(Category.production, ItemStack.with(Items.copper, 12), true); tier = 2; drillTime = 600; size = 2; @@ -1139,16 +1140,16 @@ public class Blocks implements ContentList{ }}; pneumaticDrill = new Drill("pneumatic-drill"){{ - requirements(Category.production, ItemStack.with(Items.copper, 35, Items.graphite, 15)); + requirements(Category.production, ItemStack.with(Items.copper, 18, Items.graphite, 10)); tier = 3; - drillTime = 480; + drillTime = 400; size = 2; drawMineItem = true; consumes.liquid(Liquids.water, 0.06f).boost(); }}; laserDrill = new Drill("laser-drill"){{ - requirements(Category.production, ItemStack.with(Items.copper, 70, Items.graphite, 60, Items.silicon, 60, Items.titanium, 40)); + requirements(Category.production, ItemStack.with(Items.copper, 35, Items.graphite, 30, Items.silicon, 30, Items.titanium, 20)); drillTime = 280; size = 3; hasPower = true; @@ -1161,8 +1162,8 @@ public class Blocks implements ContentList{ }}; blastDrill = new Drill("blast-drill"){{ - requirements(Category.production, ItemStack.with(Items.copper, 130, Items.silicon, 120, Items.titanium, 100, Items.thorium, 150)); - drillTime = 270; + requirements(Category.production, ItemStack.with(Items.copper, 65, Items.silicon, 60, Items.titanium, 50, Items.thorium, 75)); + drillTime = 280; size = 4; drawRim = true; hasPower = true; @@ -1178,7 +1179,7 @@ public class Blocks implements ContentList{ }}; waterExtractor = new SolidPump("water-extractor"){{ - requirements(Category.production, ItemStack.with(Items.copper, 50, Items.graphite, 50, Items.lead, 40)); + requirements(Category.production, ItemStack.with(Items.copper, 25, Items.graphite, 25, Items.lead, 20)); result = Liquids.water; pumpAmount = 0.13f; size = 2; @@ -1190,7 +1191,7 @@ public class Blocks implements ContentList{ }}; cultivator = new Cultivator("cultivator"){{ - requirements(Category.production, ItemStack.with(Items.copper, 20, Items.lead, 50, Items.silicon, 20)); + requirements(Category.production, ItemStack.with(Items.copper, 10, Items.lead, 25, Items.silicon, 10)); outputItem = new ItemStack(Items.sporePod, 1); craftTime = 140; size = 2; @@ -1203,7 +1204,7 @@ public class Blocks implements ContentList{ }}; oilExtractor = new Fracker("oil-extractor"){{ - requirements(Category.production, ItemStack.with(Items.copper, 300, Items.graphite, 350, Items.lead, 230, Items.thorium, 230, Items.silicon, 150)); + requirements(Category.production, ItemStack.with(Items.copper, 150, Items.graphite, 175, Items.lead, 115, Items.thorium, 115, Items.silicon, 75)); result = Liquids.oil; updateEffect = Fx.pulverize; liquidCapacity = 50f; @@ -1222,7 +1223,7 @@ public class Blocks implements ContentList{ //region storage coreShard = new CoreBlock("core-shard"){{ - requirements(Category.effect, () -> false, ItemStack.with(Items.titanium, 2000)); + requirements(Category.effect, () -> false, ItemStack.with(Items.titanium, 1000)); alwaysUnlocked = true; health = 1100; @@ -1231,7 +1232,7 @@ public class Blocks implements ContentList{ }}; coreFoundation = new CoreBlock("core-foundation"){{ - requirements(Category.effect, () -> false, ItemStack.with(Items.titanium, 3000, Items.silicon, 2000)); + requirements(Category.effect, () -> false, ItemStack.with(Items.titanium, 1500, Items.silicon, 1000)); health = 2000; itemCapacity = 9000; @@ -1239,7 +1240,7 @@ public class Blocks implements ContentList{ }}; coreNucleus = new CoreBlock("core-nucleus"){{ - requirements(Category.effect, () -> false, ItemStack.with(Items.titanium, 8000, Items.silicon, 4000, Items.surgealloy, 2000)); + requirements(Category.effect, () -> false, ItemStack.with(Items.titanium, 4000, Items.silicon, 2000, Items.surgealloy, 1000)); health = 4000; itemCapacity = 13000; @@ -1247,24 +1248,24 @@ public class Blocks implements ContentList{ }}; vault = new Vault("vault"){{ - requirements(Category.effect, ItemStack.with(Items.titanium, 500, Items.thorium, 250)); + requirements(Category.effect, ItemStack.with(Items.titanium, 250, Items.thorium, 125)); size = 3; itemCapacity = 1000; }}; container = new Vault("container"){{ - requirements(Category.effect, ItemStack.with(Items.titanium, 200)); + requirements(Category.effect, ItemStack.with(Items.titanium, 100)); size = 2; itemCapacity = 300; }}; unloader = new Unloader("unloader"){{ - requirements(Category.effect, ItemStack.with(Items.titanium, 50, Items.silicon, 60)); + requirements(Category.effect, ItemStack.with(Items.titanium, 25, Items.silicon, 30)); speed = 7f; }}; launchPad = new LaunchPad("launch-pad"){{ - requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.copper, 500, Items.silicon, 150, Items.lead, 200)); + requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.copper, 250, Items.silicon, 75, Items.lead, 100)); size = 3; itemCapacity = 100; launchTime = 60f * 16; @@ -1273,7 +1274,7 @@ public class Blocks implements ContentList{ }}; launchPadLarge = new LaunchPad("launch-pad-large"){{ - requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.titanium, 400, Items.silicon, 300, Items.lead, 500, Items.plastanium, 150)); + requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.titanium, 200, Items.silicon, 150, Items.lead, 250, Items.plastanium, 75)); size = 4; itemCapacity = 250; launchTime = 60f * 14; @@ -1286,16 +1287,16 @@ public class Blocks implements ContentList{ //region turrets duo = new DoubleTurret("duo"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 70), true); + requirements(Category.turret, ItemStack.with(Items.copper, 35), true); ammo( - Items.copper, Bullets.standardCopper, - Items.graphite, Bullets.standardDense, - Items.pyratite, Bullets.standardIncendiary, - Items.silicon, Bullets.standardHoming + Items.copper, Bullets.standardCopper, + Items.graphite, Bullets.standardDense, + Items.pyratite, Bullets.standardIncendiary, + Items.silicon, Bullets.standardHoming ); reload = 20f; restitution = 0.03f; - range = 95f; + range = 100; shootCone = 15f; ammoUseEffect = Fx.shellEjectSmall; health = 250; @@ -1304,10 +1305,10 @@ public class Blocks implements ContentList{ }}; scatter = new BurstTurret("scatter"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 170, Items.lead, 90)); + requirements(Category.turret, ItemStack.with(Items.copper, 85, Items.lead, 45)); ammo( - Items.scrap, Bullets.flakScrap, - Items.lead, Bullets.flakLead + Items.scrap, Bullets.flakScrap, + Items.lead, Bullets.flakLead ); reload = 18f; range = 170f; @@ -1322,13 +1323,14 @@ public class Blocks implements ContentList{ shootCone = 35f; health = 200 * size * size; + shootSound = Sounds.shootSnap; }}; scorch = new ItemTurret("scorch"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 50, Items.graphite, 45)); + requirements(Category.turret, ItemStack.with(Items.copper, 25, Items.graphite, 22)); ammo( - Items.coal, Bullets.basicFlame, - Items.pyratite, Bullets.pyraFlame + Items.coal, Bullets.basicFlame, + Items.pyratite, Bullets.pyraFlame ); recoil = 0f; reload = 4f; @@ -1337,14 +1339,15 @@ public class Blocks implements ContentList{ targetAir = false; ammoUseEffect = Fx.none; health = 400; + shootSound = Sounds.flame; }}; hail = new ArtilleryTurret("hail"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 80, Items.graphite, 35)); + requirements(Category.turret, ItemStack.with(Items.copper, 40, Items.graphite, 17)); ammo( - Items.graphite, Bullets.artilleryDense, - Items.silicon, Bullets.artilleryHoming, - Items.pyratite, Bullets.artlleryIncendiary + Items.graphite, Bullets.artilleryDense, + Items.silicon, Bullets.artilleryHoming, + Items.pyratite, Bullets.artlleryIncendiary ); reload = 60f; recoil = 2f; @@ -1352,15 +1355,16 @@ public class Blocks implements ContentList{ inaccuracy = 1f; shootCone = 10f; health = 260; + shootSound = Sounds.artillery; }}; wave = new LiquidTurret("wave"){{ - requirements(Category.turret, ItemStack.with(Items.metaglass, 90, Items.lead, 150)); + requirements(Category.turret, ItemStack.with(Items.metaglass, 45, Items.lead, 75)); ammo( - Liquids.water, Bullets.waterShot, - Liquids.slag, Bullets.slagShot, - Liquids.cryofluid, Bullets.cryoShot, - Liquids.oil, Bullets.oilShot + Liquids.water, Bullets.waterShot, + Liquids.slag, Bullets.slagShot, + Liquids.cryofluid, Bullets.cryoShot, + Liquids.oil, Bullets.oilShot ); size = 2; recoil = 0f; @@ -1370,6 +1374,7 @@ public class Blocks implements ContentList{ shootEffect = Fx.shootLiquid; range = 110f; health = 250 * size * size; + shootSound = Sounds.splash; drawer = (tile, entity) -> { Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90); @@ -1382,7 +1387,7 @@ public class Blocks implements ContentList{ }}; lancer = new ChargeTurret("lancer"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 50, Items.lead, 100, Items.silicon, 90)); + requirements(Category.turret, ItemStack.with(Items.copper, 25, Items.lead, 50, Items.silicon, 45)); range = 155f; chargeTime = 50f; chargeMaxDelay = 30f; @@ -1401,10 +1406,11 @@ public class Blocks implements ContentList{ size = 2; health = 280 * size * size; targetAir = false; + shootSound = Sounds.laser; }}; arc = new PowerTurret("arc"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 70, Items.lead, 70)); + requirements(Category.turret, ItemStack.with(Items.copper, 35, Items.lead, 35)); shootType = Bullets.arc; reload = 24f; shootCone = 40f; @@ -1417,14 +1423,15 @@ public class Blocks implements ContentList{ recoil = 1f; size = 1; health = 260; + shootSound = Sounds.spark; }}; swarmer = new BurstTurret("swarmer"){{ - requirements(Category.turret, ItemStack.with(Items.graphite, 70, Items.titanium, 70, Items.plastanium, 90, Items.silicon, 60)); + requirements(Category.turret, ItemStack.with(Items.graphite, 35, Items.titanium, 35, Items.plastanium, 45, Items.silicon, 30)); ammo( - Items.blastCompound, Bullets.missileExplosive, - Items.pyratite, Bullets.missileIncendiary, - Items.surgealloy, Bullets.missileSurge + Items.blastCompound, Bullets.missileExplosive, + Items.pyratite, Bullets.missileIncendiary, + Items.surgealloy, Bullets.missileSurge ); reload = 40f; shots = 4; @@ -1434,21 +1441,22 @@ public class Blocks implements ContentList{ xRand = 6f; size = 2; health = 300 * size * size; + shootSound = Sounds.missile; }}; salvo = new BurstTurret("salvo"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 210, Items.graphite, 190, Items.titanium, 120)); + requirements(Category.turret, ItemStack.with(Items.copper, 105, Items.graphite, 95, Items.titanium, 60)); ammo( - Items.copper, Bullets.standardCopper, - Items.graphite, Bullets.standardDense, - Items.pyratite, Bullets.standardIncendiary, - Items.silicon, Bullets.standardHoming, - Items.thorium, Bullets.standardThorium + Items.copper, Bullets.standardCopper, + Items.graphite, Bullets.standardDense, + Items.pyratite, Bullets.standardIncendiary, + Items.silicon, Bullets.standardHoming, + Items.thorium, Bullets.standardThorium ); size = 2; range = 150f; - reload = 30f; + reload = 38f; restitution = 0.03f; ammoEjectBack = 3f; cooldown = 0.03f; @@ -1457,11 +1465,12 @@ public class Blocks implements ContentList{ burstSpacing = 3f; shots = 4; ammoUseEffect = Fx.shellEjectBig; - health = 240 * size * size;; + health = 240 * size * size; + shootSound = Sounds.shootBig; }}; fuse = new ItemTurret("fuse"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 450, Items.graphite, 450, Items.thorium, 200)); + requirements(Category.turret, ItemStack.with(Items.copper, 225, Items.graphite, 225, Items.thorium, 100)); reload = 35f; shootShake = 4f; @@ -1474,6 +1483,7 @@ public class Blocks implements ContentList{ size = 3; health = 220 * size * size; + shootSound = Sounds.shotgun; ammo(Items.graphite, new BulletType(0.01f, 105){ int rays = 1; @@ -1502,24 +1512,24 @@ public class Blocks implements ContentList{ for(int i = 0; i < 7; i++){ Tmp.v1.trns(b.rot(), i * 8f); float sl = Mathf.clamp(b.fout() - 0.5f) * (80f - i * 10); - Shapes.tri(b.x + Tmp.v1.x, b.y + Tmp.v1.y, 4f, sl, b.rot() + 90); - Shapes.tri(b.x + Tmp.v1.x, b.y + Tmp.v1.y, 4f, sl, b.rot() - 90); + Drawf.tri(b.x + Tmp.v1.x, b.y + Tmp.v1.y, 4f, sl, b.rot() + 90); + Drawf.tri(b.x + Tmp.v1.x, b.y + Tmp.v1.y, 4f, sl, b.rot() - 90); } - Shapes.tri(b.x, b.y, 20f * b.fout(), (rayLength + 50), b.rot()); - Shapes.tri(b.x, b.y, 20f * b.fout(), 10f, b.rot() + 180f); + Drawf.tri(b.x, b.y, 20f * b.fout(), (rayLength + 50), b.rot()); + Drawf.tri(b.x, b.y, 20f * b.fout(), 10f, b.rot() + 180f); Draw.reset(); } }); }}; ripple = new ArtilleryTurret("ripple"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 300, Items.graphite, 270, Items.titanium, 120)); + requirements(Category.turret, ItemStack.with(Items.copper, 150, Items.graphite, 135, Items.titanium, 60)); ammo( - Items.graphite, Bullets.artilleryDense, - Items.silicon, Bullets.artilleryHoming, - Items.pyratite, Bullets.artlleryIncendiary, - Items.blastCompound, Bullets.artilleryExplosive, - Items.plastanium, Bullets.arilleryPlastic + Items.graphite, Bullets.artilleryDense, + Items.silicon, Bullets.artilleryHoming, + Items.pyratite, Bullets.artlleryIncendiary, + Items.blastCompound, Bullets.artilleryExplosive, + Items.plastanium, Bullets.arilleryPlastic ); size = 3; shots = 4; @@ -1535,14 +1545,15 @@ public class Blocks implements ContentList{ range = 290f; health = 130 * size * size; + shootSound = Sounds.artillery; }}; cyclone = new ItemTurret("cyclone"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 400, Items.titanium, 250, Items.plastanium, 160)); + requirements(Category.turret, ItemStack.with(Items.copper, 200, Items.titanium, 125, Items.plastanium, 80)); ammo( - Items.blastCompound, Bullets.flakExplosive, - Items.plastanium, Bullets.flakPlastic, - Items.surgealloy, Bullets.flakSurge + Items.blastCompound, Bullets.flakExplosive, + Items.plastanium, Bullets.flakPlastic, + Items.surgealloy, Bullets.flakSurge ); xRand = 4f; reload = 6f; @@ -1552,16 +1563,17 @@ public class Blocks implements ContentList{ rotatespeed = 10f; inaccuracy = 10f; shootCone = 30f; + shootSound = Sounds.shootSnap; health = 145 * size * size; }}; spectre = new DoubleTurret("spectre"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 700, Items.graphite, 600, Items.surgealloy, 500, Items.plastanium, 350, Items.thorium, 500)); + requirements(Category.turret, ItemStack.with(Items.copper, 350, Items.graphite, 300, Items.surgealloy, 250, Items.plastanium, 175, Items.thorium, 250)); ammo( - Items.graphite, Bullets.standardDenseBig, - Items.pyratite, Bullets.standardIncendiaryBig, - Items.thorium, Bullets.standardThoriumBig + Items.graphite, Bullets.standardDenseBig, + Items.pyratite, Bullets.standardIncendiaryBig, + Items.thorium, Bullets.standardThoriumBig ); reload = 6f; coolantMultiplier = 0.5f; @@ -1576,13 +1588,14 @@ public class Blocks implements ContentList{ shots = 2; size = 4; shootCone = 24f; + shootSound = Sounds.shootBig; health = 155 * size * size; - consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 2f)).update(false).optional(true, false); + consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 2f)).update(false).optional(true, true); }}; meltdown = new LaserTurret("meltdown"){{ - requirements(Category.turret, ItemStack.with(Items.copper, 500, Items.lead, 700, Items.graphite, 600, Items.surgealloy, 650, Items.silicon, 650)); + requirements(Category.turret, ItemStack.with(Items.copper, 250, Items.lead, 350, Items.graphite, 300, Items.surgealloy, 325, Items.silicon, 325)); shootType = Bullets.meltdownLaser; shootEffect = Fx.shootBigSmoke2; shootCone = 40f; @@ -1594,6 +1607,9 @@ public class Blocks implements ContentList{ firingMoveFract = 0.5f; shootDuration = 220f; powerUse = 14f; + shootSound = Sounds.laserbig; + idleSound = Sounds.beam; + idleSoundVolume = 2f; health = 200 * size * size; consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 0.5f)).update(false); @@ -1603,9 +1619,9 @@ public class Blocks implements ContentList{ //region units draugFactory = new UnitFactory("draug-factory"){{ - requirements(Category.units, ItemStack.with(Items.copper, 60, Items.lead, 140)); + requirements(Category.units, ItemStack.with(Items.copper, 30, Items.lead, 70)); type = UnitTypes.draug; - produceTime = 5000; + produceTime = 2500; size = 2; maxSpawn = 2; consumes.power(1.1f); @@ -1613,93 +1629,94 @@ public class Blocks implements ContentList{ }}; spiritFactory = new UnitFactory("spirit-factory"){{ - requirements(Category.units, ItemStack.with(Items.metaglass, 70, Items.lead, 110, Items.silicon, 90)); + requirements(Category.units, ItemStack.with(Items.metaglass, 45, Items.lead, 55, Items.silicon, 45)); type = UnitTypes.spirit; - produceTime = 5700; + produceTime = 3500; size = 2; maxSpawn = 2; consumes.power(0.80f); - consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30)); + consumes.items(new ItemStack(Items.silicon, 15), new ItemStack(Items.lead, 15)); }}; phantomFactory = new UnitFactory("phantom-factory"){{ - requirements(Category.units, ItemStack.with(Items.titanium, 90, Items.thorium, 80, Items.lead, 110, Items.silicon, 210)); + requirements(Category.units, ItemStack.with(Items.titanium, 45, Items.thorium, 40, Items.lead, 55, Items.silicon, 105)); type = UnitTypes.phantom; - produceTime = 7300; + produceTime = 3650; size = 2; maxSpawn = 2; consumes.power(2f); - consumes.items(new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80)); + consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 20), new ItemStack(Items.titanium, 10)); }}; wraithFactory = new UnitFactory("wraith-factory"){{ - requirements(Category.units, padVisible, ItemStack.with(Items.titanium, 60, Items.lead, 80, Items.silicon, 90)); + requirements(Category.units, padVisible, ItemStack.with(Items.titanium, 30, Items.lead, 40, Items.silicon, 45)); type = UnitTypes.wraith; - produceTime = 1500; + produceTime = 750; size = 2; consumes.power(0.6f); - consumes.items(new ItemStack(Items.silicon, 20), new ItemStack(Items.titanium, 10)); + consumes.items(new ItemStack(Items.silicon, 10), new ItemStack(Items.titanium, 5)); }}; ghoulFactory = new UnitFactory("ghoul-factory"){{ - requirements(Category.units, padVisible, ItemStack.with(Items.titanium, 150, Items.lead, 130, Items.silicon, 220)); + requirements(Category.units, padVisible, ItemStack.with(Items.titanium, 75, Items.lead, 65, Items.silicon, 110)); type = UnitTypes.ghoul; - produceTime = 2300; + produceTime = 1150; size = 3; consumes.power(1.2f); - consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.titanium, 20)); + consumes.items(new ItemStack(Items.silicon, 15), new ItemStack(Items.titanium, 10)); }}; revenantFactory = new UnitFactory("revenant-factory"){{ - requirements(Category.units, padVisible, ItemStack.with(Items.plastanium, 100, Items.titanium, 300, Items.lead, 300, Items.silicon, 400)); + requirements(Category.units, padVisible, ItemStack.with(Items.plastanium, 50, Items.titanium, 150, Items.lead, 150, Items.silicon, 200)); type = UnitTypes.revenant; - produceTime = 4000; + produceTime = 2000; size = 4; consumes.power(3f); - consumes.items(new ItemStack(Items.silicon, 80), new ItemStack(Items.titanium, 80)); + consumes.items(new ItemStack(Items.silicon, 40), new ItemStack(Items.titanium, 30)); }}; daggerFactory = new UnitFactory("dagger-factory"){{ - requirements(Category.units, padVisible, ItemStack.with(Items.lead, 110, Items.silicon, 70)); + requirements(Category.units, padVisible, ItemStack.with(Items.lead, 55, Items.silicon, 35)); type = UnitTypes.dagger; - produceTime = 1700; + produceTime = 850; size = 2; consumes.power(0.5f); - consumes.items(new ItemStack(Items.silicon, 15)); + consumes.items(new ItemStack(Items.silicon, 6)); }}; crawlerFactory = new UnitFactory("crawler-factory"){{ - requirements(Category.units, padVisible, ItemStack.with(Items.lead, 50, Items.silicon, 80)); + requirements(Category.units, padVisible, ItemStack.with(Items.lead, 25, Items.silicon, 30)); type = UnitTypes.crawler; - produceTime = 500; + produceTime = 250; size = 2; - maxSpawn = 5; - consumes.power(0.5f); - consumes.items(new ItemStack(Items.coal, 5), new ItemStack(Items.silicon, 5)); + maxSpawn = 8; + consumes.power(0.4f); + consumes.items(new ItemStack(Items.coal, 5)); }}; titanFactory = new UnitFactory("titan-factory"){{ - requirements(Category.units, padVisible, ItemStack.with(Items.graphite, 100, Items.lead, 100, Items.silicon, 90)); + requirements(Category.units, padVisible, ItemStack.with(Items.graphite, 50, Items.lead, 50, Items.silicon, 45)); type = UnitTypes.titan; - produceTime = 2100; + produceTime = 1050; size = 3; consumes.power(0.60f); - consumes.items(new ItemStack(Items.silicon, 30)); + consumes.items(new ItemStack(Items.silicon, 12)); }}; fortressFactory = new UnitFactory("fortress-factory"){{ - requirements(Category.units, padVisible, ItemStack.with(Items.thorium, 80, Items.lead, 220, Items.silicon, 150)); + requirements(Category.units, padVisible, ItemStack.with(Items.thorium, 40, Items.lead, 110, Items.silicon, 75)); type = UnitTypes.fortress; - produceTime = 4000; + produceTime = 2000; size = 3; maxSpawn = 3; consumes.power(1.4f); - consumes.items(new ItemStack(Items.silicon, 40), new ItemStack(Items.graphite, 30)); + consumes.items(new ItemStack(Items.silicon, 20), new ItemStack(Items.graphite, 10)); }}; repairPoint = new RepairPoint("repair-point"){{ - requirements(Category.units, ItemStack.with(Items.lead, 30, Items.copper, 30, Items.silicon, 30)); - repairSpeed = 0.3f; + requirements(Category.units, ItemStack.with(Items.lead, 15, Items.copper, 15, Items.silicon, 15)); + repairSpeed = 0.5f; + repairRadius = 65f; powerUse = 1f; }}; @@ -1707,49 +1724,49 @@ public class Blocks implements ContentList{ //region upgrades dartPad = new MechPad("dart-mech-pad"){{ - requirements(Category.upgrade, ItemStack.with(Items.lead, 200, Items.graphite, 100, Items.copper, 150)); + requirements(Category.upgrade, ItemStack.with(Items.lead, 100, Items.graphite, 50, Items.copper, 75)); mech = Mechs.alpha; size = 2; consumes.power(0.5f); }}; deltaPad = new MechPad("delta-mech-pad"){{ - requirements(Category.upgrade, ItemStack.with(Items.lead, 350, Items.titanium, 350, Items.copper, 400, Items.silicon, 450, Items.thorium, 300)); + requirements(Category.upgrade, ItemStack.with(Items.lead, 175, Items.titanium, 175, Items.copper, 200, Items.silicon, 225, Items.thorium, 150)); mech = Mechs.delta; size = 2; consumes.power(0.7f); }}; tauPad = new MechPad("tau-mech-pad"){{ - requirements(Category.upgrade, ItemStack.with(Items.lead, 250, Items.titanium, 250, Items.copper, 250, Items.silicon, 250)); + requirements(Category.upgrade, ItemStack.with(Items.lead, 125, Items.titanium, 125, Items.copper, 125, Items.silicon, 125)); mech = Mechs.tau; size = 2; consumes.power(1f); }}; omegaPad = new MechPad("omega-mech-pad"){{ - requirements(Category.upgrade, ItemStack.with(Items.lead, 450, Items.graphite, 550, Items.silicon, 650, Items.thorium, 600, Items.surgealloy, 240)); + requirements(Category.upgrade, ItemStack.with(Items.lead, 225, Items.graphite, 275, Items.silicon, 325, Items.thorium, 300, Items.surgealloy, 120)); mech = Mechs.omega; size = 3; consumes.power(1.2f); }}; javelinPad = new MechPad("javelin-ship-pad"){{ - requirements(Category.upgrade, ItemStack.with(Items.lead, 350, Items.silicon, 450, Items.titanium, 500, Items.plastanium, 400, Items.phasefabric, 200)); + requirements(Category.upgrade, ItemStack.with(Items.lead, 175, Items.silicon, 225, Items.titanium, 250, Items.plastanium, 200, Items.phasefabric, 100)); mech = Mechs.javelin; size = 2; consumes.power(0.8f); }}; tridentPad = new MechPad("trident-ship-pad"){{ - requirements(Category.upgrade, ItemStack.with(Items.lead, 250, Items.copper, 250, Items.silicon, 250, Items.titanium, 300, Items.plastanium, 200)); + requirements(Category.upgrade, ItemStack.with(Items.lead, 125, Items.copper, 125, Items.silicon, 125, Items.titanium, 150, Items.plastanium, 100)); mech = Mechs.trident; size = 2; consumes.power(1f); }}; glaivePad = new MechPad("glaive-ship-pad"){{ - requirements(Category.upgrade, ItemStack.with(Items.lead, 450, Items.silicon, 650, Items.titanium, 700, Items.plastanium, 600, Items.surgealloy, 200)); + requirements(Category.upgrade, ItemStack.with(Items.lead, 225, Items.silicon, 325, Items.titanium, 350, Items.plastanium, 300, Items.surgealloy, 100)); mech = Mechs.glaive; size = 3; consumes.power(1.2f); @@ -1757,4 +1774,4 @@ public class Blocks implements ContentList{ //endregion } -} +} \ No newline at end of file diff --git a/core/src/io/anuke/mindustry/content/Bullets.java b/core/src/io/anuke/mindustry/content/Bullets.java index 13d4496693..dd8deb3881 100644 --- a/core/src/io/anuke/mindustry/content/Bullets.java +++ b/core/src/io/anuke/mindustry/content/Bullets.java @@ -1,19 +1,16 @@ package io.anuke.mindustry.content; -import io.anuke.arc.graphics.Color; +import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Time; -import io.anuke.arc.util.Tmp; -import io.anuke.mindustry.entities.Damage; -import io.anuke.mindustry.entities.Effects; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.bullet.*; import io.anuke.mindustry.entities.effect.*; -import io.anuke.mindustry.entities.type.Unit; -import io.anuke.mindustry.game.ContentList; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.BuildBlock; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.*; import static io.anuke.mindustry.Vars.world; @@ -43,7 +40,7 @@ public class Bullets implements ContentList{ fireball, basicFlame, pyraFlame, driverBolt, healBullet, frag, eruptorShot, //bombs - bombExplosive, bombIncendiary, bombOil, explode; + bombExplosive, bombIncendiary, bombOil; @Override public void load(){ @@ -115,7 +112,7 @@ public class Bullets implements ContentList{ lifetime = 70f; bulletWidth = bulletHeight = 14f; collidesTiles = false; - ammoMultiplier = 2f; + ammoMultiplier = 4f; splashDamageRadius = 45f; splashDamage = 50f; backColor = Pal.missileYellowBack; @@ -137,7 +134,7 @@ public class Bullets implements ContentList{ flakLead = new FlakBulletType(4.2f, 3){{ lifetime = 60f; - ammoMultiplier = 3f; + ammoMultiplier = 4f; shootEffect = Fx.shootSmall; bulletWidth = 6f; bulletHeight = 8f; @@ -148,7 +145,7 @@ public class Bullets implements ContentList{ flakScrap = new FlakBulletType(4f, 3){{ lifetime = 60f; - ammoMultiplier = 3f; + ammoMultiplier = 5f; shootEffect = Fx.shootSmall; reloadMultiplier = 0.5f; bulletWidth = 6f; @@ -171,7 +168,7 @@ public class Bullets implements ContentList{ flakExplosive = new FlakBulletType(4f, 5){{ //default bullet type, no changes shootEffect = Fx.shootBig; - ammoMultiplier = 2f; + ammoMultiplier = 4f; }}; flakSurge = new FlakBulletType(4f, 7){{ @@ -188,7 +185,7 @@ public class Bullets implements ContentList{ drag = -0.01f; splashDamageRadius = 30f; splashDamage = 30f; - ammoMultiplier = 2f; + ammoMultiplier = 4f; lifetime = 150f; hitEffect = Fx.blastExplosion; despawnEffect = Fx.blastExplosion; @@ -286,14 +283,14 @@ public class Bullets implements ContentList{ lifetime = 60f; shootEffect = Fx.shootSmall; smokeEffect = Fx.shootSmallSmoke; - ammoMultiplier = 1; + ammoMultiplier = 2; }}; standardDense = new BasicBulletType(3.5f, 18, "bullet"){{ bulletWidth = 9f; bulletHeight = 12f; reloadMultiplier = 0.6f; - ammoMultiplier = 2; + ammoMultiplier = 4; lifetime = 60f; }}; @@ -302,7 +299,7 @@ public class Bullets implements ContentList{ bulletHeight = 13f; shootEffect = Fx.shootBig; smokeEffect = Fx.shootBigSmoke; - ammoMultiplier = 2; + ammoMultiplier = 4; lifetime = 60f; }}; @@ -311,7 +308,7 @@ public class Bullets implements ContentList{ bulletHeight = 9f; homingPower = 5f; reloadMultiplier = 1.4f; - ammoMultiplier = 3; + ammoMultiplier = 5; lifetime = 60f; }}; @@ -470,6 +467,11 @@ public class Bullets implements ContentList{ status = StatusEffects.burning; } + @Override + public float range(){ + return 50f; + } + @Override public void draw(Bullet b){ } @@ -698,23 +700,5 @@ public class Bullets implements ContentList{ } } }; - - explode = new BombBulletType(2f, 3f, "clear"){ - { - hitEffect = Fx.pulverize; - lifetime = 30f; - speed = 1f; - splashDamageRadius = 50f; - splashDamage = 28f; - } - - @Override - public void init(Bullet b){ - if(b.getOwner() instanceof Unit){ - ((Unit)b.getOwner()).kill(); - } - b.time(b.lifetime()); - } - }; } } diff --git a/core/src/io/anuke/mindustry/content/Fx.java b/core/src/io/anuke/mindustry/content/Fx.java index b8164ee735..0272a7dc58 100644 --- a/core/src/io/anuke/mindustry/content/Fx.java +++ b/core/src/io/anuke/mindustry/content/Fx.java @@ -11,7 +11,7 @@ import io.anuke.mindustry.entities.effect.GroundEffectEntity.GroundEffect; import io.anuke.mindustry.entities.type.BaseUnit; import io.anuke.mindustry.game.ContentList; import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.graphics.Shapes; +import io.anuke.mindustry.graphics.Drawf; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item.Icon; @@ -160,14 +160,14 @@ public class Fx implements ContentList{ healWave = new Effect(22, e -> { Draw.color(Pal.heal); Lines.stroke(e.fout() * 2f); - Lines.poly(e.x, e.y, 30, 4f + e.finpow() * 60f); + Lines.circle(e.x, e.y, 4f + e.finpow() * 60f); Draw.color(); }); heal = new Effect(11, e -> { Draw.color(Pal.heal); Lines.stroke(e.fout() * 2f); - Lines.poly(e.x, e.y, 24, 2f + e.finpow() * 7f); + Lines.circle(e.x, e.y, 2f + e.finpow() * 7f); Draw.color(); }); @@ -568,21 +568,21 @@ public class Fx implements ContentList{ nuclearShockwave = new Effect(10f, 200f, e -> { Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin()); Lines.stroke(e.fout() * 3f + 0.2f); - Lines.poly(e.x, e.y, 40, e.fin() * 140f); + Lines.circle(e.x, e.y, e.fin() * 140f); Draw.reset(); }); impactShockwave = new Effect(13f, 300f, e -> { Draw.color(Pal.lighterOrange, Color.LIGHT_GRAY, e.fin()); Lines.stroke(e.fout() * 4f + 0.2f); - Lines.poly(e.x, e.y, 60, e.fin() * 200f); + Lines.circle(e.x, e.y, e.fin() * 200f); Draw.reset(); }); spawnShockwave = new Effect(20f, 400f, e -> { Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin()); Lines.stroke(e.fout() * 3f + 0.5f); - Lines.poly(e.x, e.y, 40, e.fin() * (e.rotation + 50f)); + Lines.circle(e.x, e.y, e.fin() * (e.rotation + 50f)); Draw.reset(); }); @@ -614,7 +614,7 @@ public class Fx implements ContentList{ e.scaled(5 + intensity * 2, i -> { Lines.stroke(3.1f * i.fout()); - Lines.poly(e.x, e.y, (int)(20 * intensity), (3f + i.fin() * 14f) * intensity); + Lines.circle(e.x, e.y, (3f + i.fin() * 14f) * intensity); }); Draw.color(Color.GRAY); @@ -672,16 +672,16 @@ public class Fx implements ContentList{ shootSmall = new Effect(8, e -> { Draw.color(Pal.lighterOrange, Pal.lightOrange, e.fin()); float w = 1f + 5 * e.fout(); - Shapes.tri(e.x, e.y, w, 15f * e.fout(), e.rotation); - Shapes.tri(e.x, e.y, w, 3f * e.fout(), e.rotation + 180f); + Drawf.tri(e.x, e.y, w, 15f * e.fout(), e.rotation); + Drawf.tri(e.x, e.y, w, 3f * e.fout(), e.rotation + 180f); Draw.reset(); }); shootHeal = new Effect(8, e -> { Draw.color(Pal.heal); float w = 1f + 5 * e.fout(); - Shapes.tri(e.x, e.y, w, 17f * e.fout(), e.rotation); - Shapes.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); + Drawf.tri(e.x, e.y, w, 17f * e.fout(), e.rotation); + Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); Draw.reset(); }); @@ -698,16 +698,16 @@ public class Fx implements ContentList{ shootBig = new Effect(9, e -> { Draw.color(Pal.lighterOrange, Pal.lightOrange, e.fin()); float w = 1.2f + 7 * e.fout(); - Shapes.tri(e.x, e.y, w, 25f * e.fout(), e.rotation); - Shapes.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); + Drawf.tri(e.x, e.y, w, 25f * e.fout(), e.rotation); + Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); Draw.reset(); }); shootBig2 = new Effect(10, e -> { Draw.color(Pal.lightOrange, Color.GRAY, e.fin()); float w = 1.2f + 8 * e.fout(); - Shapes.tri(e.x, e.y, w, 29f * e.fout(), e.rotation); - Shapes.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f); + Drawf.tri(e.x, e.y, w, 29f * e.fout(), e.rotation); + Drawf.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f); Draw.reset(); }); @@ -829,7 +829,7 @@ public class Fx implements ContentList{ Draw.color(Pal.lancerLaser); for(int i : Mathf.signs){ - Shapes.tri(e.x, e.y, 4f * e.fout(), 29f, e.rotation + 90f * i); + Drawf.tri(e.x, e.y, 4f * e.fout(), 29f, e.rotation + 90f * i); } Draw.reset(); @@ -867,7 +867,7 @@ public class Fx implements ContentList{ Draw.color(Pal.lancerLaser); Angles.randLenVectors(e.id, 2, 1f + 20f * e.fout(), e.rotation, 120f, (x, y) -> { - Shapes.tri(e.x + x, e.y + y, e.fslope() * 3f + 1, e.fslope() * 3f + 1, Mathf.angle(x, y)); + Drawf.tri(e.x + x, e.y + y, e.fslope() * 3f + 1, e.fslope() * 3f + 1, Mathf.angle(x, y)); }); Draw.reset(); @@ -1157,21 +1157,21 @@ public class Fx implements ContentList{ launch = new Effect(28, e -> { Draw.color(Pal.command); Lines.stroke(e.fout() * 2f); - Lines.poly(e.x, e.y, 40, 4f + e.finpow() * 120f); + Lines.circle(e.x, e.y, 4f + e.finpow() * 120f); Draw.color(); }); healWaveMend = new Effect(40, e -> { Draw.color(e.color); Lines.stroke(e.fout() * 2f); - Lines.poly(e.x, e.y, 30, e.finpow() * e.rotation); + Lines.circle(e.x, e.y, e.finpow() * e.rotation); Draw.color(); }); overdriveWave = new Effect(50, e -> { Draw.color(e.color); Lines.stroke(e.fout() * 1f); - Lines.poly(e.x, e.y, 30, e.finpow() * e.rotation); + Lines.circle(e.x, e.y, e.finpow() * e.rotation); Draw.color(); }); diff --git a/core/src/io/anuke/mindustry/content/Mechs.java b/core/src/io/anuke/mindustry/content/Mechs.java index 801029bae9..b4fb0f6127 100644 --- a/core/src/io/anuke/mindustry/content/Mechs.java +++ b/core/src/io/anuke/mindustry/content/Mechs.java @@ -1,22 +1,18 @@ package io.anuke.mindustry.content; -import io.anuke.arc.Core; -import io.anuke.arc.graphics.Blending; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Time; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.Units; -import io.anuke.mindustry.entities.bullet.BombBulletType; -import io.anuke.mindustry.entities.effect.Lightning; -import io.anuke.mindustry.entities.type.Player; -import io.anuke.mindustry.game.ContentList; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.graphics.Shaders; -import io.anuke.mindustry.type.Mech; -import io.anuke.mindustry.type.Weapon; +import io.anuke.arc.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.bullet.*; +import io.anuke.mindustry.entities.effect.*; +import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.type.*; public class Mechs implements ContentList{ public static Mech alpha, delta, tau, omega, dart, javelin, trident, glaive; @@ -32,6 +28,7 @@ public class Mechs implements ContentList{ mineSpeed = 1.5f; mass = 1.2f; speed = 0.5f; + itemCapacity = 40; boostSpeed = 0.95f; buildPower = 1.2f; engineColor = Color.valueOf("ffd37f"); @@ -78,6 +75,7 @@ public class Mechs implements ContentList{ inaccuracy = 0f; ejectEffect = Fx.none; bullet = Bullets.lightning; + shootSound = Sounds.spark; }}; } @@ -121,6 +119,7 @@ public class Mechs implements ContentList{ ejectEffect = Fx.none; recoil = 2f; bullet = Bullets.healBullet; + shootSound = Sounds.pew; }}; } @@ -151,7 +150,7 @@ public class Mechs implements ContentList{ { drillPower = 2; mineSpeed = 1.5f; - itemCapacity = 50; + itemCapacity = 80; speed = 0.36f; boostSpeed = 0.6f; mass = 4f; @@ -172,6 +171,7 @@ public class Mechs implements ContentList{ ejectEffect = Fx.none; shake = 3f; bullet = Bullets.missileSwarm; + shootSound = Sounds.shootBig; }}; } @@ -266,6 +266,7 @@ public class Mechs implements ContentList{ velocityRnd = 0.2f; spacing = 1f; bullet = Bullets.missileJavelin; + shootSound = Sounds.missile; }}; } @@ -336,6 +337,7 @@ public class Mechs implements ContentList{ hitEffect = Fx.flakExplosion; shootEffect = Fx.none; smokeEffect = Fx.none; + shootSound = Sounds.artillery; }}; }}; } @@ -365,6 +367,7 @@ public class Mechs implements ContentList{ roundrobin = true; ejectEffect = Fx.shellEjectSmall; bullet = Bullets.standardGlaive; + shootSound = Sounds.shootSnap; }}; } }; diff --git a/core/src/io/anuke/mindustry/content/TechTree.java b/core/src/io/anuke/mindustry/content/TechTree.java index 8228b78eb2..6ca60ed2c1 100644 --- a/core/src/io/anuke/mindustry/content/TechTree.java +++ b/core/src/io/anuke/mindustry/content/TechTree.java @@ -294,7 +294,7 @@ public class TechTree implements ContentList{ private TechNode node(Block block, Runnable children){ ItemStack[] requirements = new ItemStack[block.buildRequirements.length]; for(int i = 0; i < requirements.length; i++){ - requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 5); + requirements[i] = new ItemStack(block.buildRequirements[i].item, 30 + block.buildRequirements[i].amount * 5); } return new TechNode(block, requirements, children); diff --git a/core/src/io/anuke/mindustry/content/UnitTypes.java b/core/src/io/anuke/mindustry/content/UnitTypes.java index 54fcf2ceb8..367786db79 100644 --- a/core/src/io/anuke/mindustry/content/UnitTypes.java +++ b/core/src/io/anuke/mindustry/content/UnitTypes.java @@ -1,10 +1,12 @@ package io.anuke.mindustry.content; -import io.anuke.arc.collection.ObjectSet; +import io.anuke.arc.collection.*; +import io.anuke.mindustry.entities.bullet.*; +import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.entities.type.base.*; -import io.anuke.mindustry.game.ContentList; -import io.anuke.mindustry.type.UnitType; -import io.anuke.mindustry.type.Weapon; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.type.*; public class UnitTypes implements ContentList{ public static UnitType @@ -46,6 +48,7 @@ public class UnitTypes implements ContentList{ ejectEffect = Fx.none; recoil = 2f; bullet = Bullets.healBullet; + shootSound = Sounds.pew; }}; }}; @@ -90,31 +93,51 @@ public class UnitTypes implements ContentList{ }}; crawler = new UnitType("crawler", Crawler.class, Crawler::new){{ - maxVelocity = 1.25f; - speed = 0.28f; + maxVelocity = 1.27f; + speed = 0.285f; drag = 0.4f; hitsize = 8f; mass = 1.75f; - health = 100; + health = 120; weapon = new Weapon("bomber"){{ reload = 12f; ejectEffect = Fx.none; - bullet = Bullets.explode; + shootSound = Sounds.explosion; + bullet = new BombBulletType(2f, 3f, "clear"){ + { + hitEffect = Fx.pulverize; + lifetime = 30f; + speed = 1.1f; + splashDamageRadius = 55f; + splashDamage = 30f; + } + + @Override + public void init(Bullet b){ + if(b.getOwner() instanceof Unit){ + ((Unit)b.getOwner()).kill(); + } + b.time(b.lifetime()); + } + }; }}; }}; titan = new UnitType("titan", Titan.class, Titan::new){{ maxVelocity = 0.8f; - speed = 0.18f; + speed = 0.22f; drag = 0.4f; mass = 3.5f; hitsize = 9f; + range = 10f; rotatespeed = 0.1f; - health = 440; + health = 460; immunities.add(StatusEffects.burning); weapon = new Weapon("flamethrower"){{ + shootSound = Sounds.flame; length = 1f; reload = 14f; + range = 30f; roundrobin = true; recoil = 1f; ejectEffect = Fx.none; @@ -140,6 +163,7 @@ public class UnitTypes implements ContentList{ shake = 2f; ejectEffect = Fx.shellEjectMedium; bullet = Bullets.artilleryUnit; + shootSound = Sounds.artillery; }}; }}; @@ -161,6 +185,7 @@ public class UnitTypes implements ContentList{ bullet = Bullets.eruptorShot; recoil = 1f; width = 7f; + shootSound = Sounds.flame; }}; }}; @@ -184,6 +209,7 @@ public class UnitTypes implements ContentList{ shotDelay = 5; ejectEffect = Fx.shellEjectMedium; bullet = Bullets.flakSurge; + shootSound = Sounds.shootBig; }}; }}; @@ -208,6 +234,7 @@ public class UnitTypes implements ContentList{ shotDelay = 3; ejectEffect = Fx.shellEjectMedium; bullet = Bullets.standardThoriumBig; + shootSound = Sounds.shootBig; }}; }}; @@ -226,6 +253,7 @@ public class UnitTypes implements ContentList{ roundrobin = true; ejectEffect = Fx.shellEjectSmall; bullet = Bullets.standardCopper; + shootSound = Sounds.shoot; }}; }}; @@ -249,6 +277,7 @@ public class UnitTypes implements ContentList{ inaccuracy = 40f; ignoreRotation = true; bullet = Bullets.bombExplosive; + shootSound = Sounds.none; }}; }}; @@ -278,6 +307,7 @@ public class UnitTypes implements ContentList{ ejectEffect = Fx.none; velocityRnd = 0.2f; spacing = 1f; + shootSound = Sounds.missile; bullet = Bullets.missileRevenant; }}; }}; @@ -311,6 +341,7 @@ public class UnitTypes implements ContentList{ velocityRnd = 0.2f; spacing = 1f; bullet = Bullets.missileRevenant; + shootSound = Sounds.missile; }}; }}; @@ -341,6 +372,7 @@ public class UnitTypes implements ContentList{ roundrobin = true; ejectEffect = Fx.none; bullet = Bullets.standardDenseBig; + shootSound = Sounds.shootBig; }}; }}; } diff --git a/core/src/io/anuke/mindustry/content/Zones.java b/core/src/io/anuke/mindustry/content/Zones.java index 6cc126c37a..ca7013fa3f 100644 --- a/core/src/io/anuke/mindustry/content/Zones.java +++ b/core/src/io/anuke/mindustry/content/Zones.java @@ -12,7 +12,7 @@ import io.anuke.mindustry.world.Block; public class Zones implements ContentList{ public static Zone groundZero, desertWastes, - craters, frozenForest, ruinousShores, stainedMountains, tarFields, + craters, frozenForest, ruinousShores, stainedMountains, tarFields, fungalPass, saltFlats, overgrowth, impact0078, crags, desolateRift, nuclearComplex; @@ -20,8 +20,8 @@ public class Zones implements ContentList{ public void load(){ groundZero = new Zone("groundZero", new MapGenerator("groundZero", 1)){{ - baseLaunchCost = ItemStack.with(Items.copper, -100); - startingItems = ItemStack.list(Items.copper, 100); + baseLaunchCost = ItemStack.with(Items.copper, -60); + startingItems = ItemStack.list(Items.copper, 60); alwaysUnlocked = true; conditionWave = 5; launchPeriod = 5; @@ -29,7 +29,7 @@ public class Zones implements ContentList{ }}; desertWastes = new Zone("desertWastes", new DesertWastesGenerator(260, 260)){{ - startingItems = ItemStack.list(Items.copper, 200); + startingItems = ItemStack.list(Items.copper, 120); conditionWave = 20; launchPeriod = 10; loadout = Loadouts.advancedShard; @@ -78,89 +78,92 @@ public class Zones implements ContentList{ }}; saltFlats = new Zone("saltFlats", new MapGenerator("saltFlats")){{ - baseLaunchCost = ItemStack.with(Items.copper, -100); - startingItems = ItemStack.list(Items.copper, 100); - alwaysUnlocked = true; - conditionWave = 5; - launchPeriod = 5; + startingItems = ItemStack.list(Items.copper, 200, Items.silicon, 200, Items.lead, 200); loadout = Loadouts.basicFoundation; + conditionWave = 10; + launchPeriod = 5; zoneRequirements = ZoneRequirement.with(desertWastes, 60); - blockRequirements = new Block[]{Blocks.daggerFactory, Blocks.draugFactory}; - resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.sand}; + blockRequirements = new Block[]{Blocks.daggerFactory, Blocks.draugFactory, Blocks.door, Blocks.waterExtractor}; + resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.sand, Items.titanium}; }}; frozenForest = new Zone("frozenForest", new MapGenerator("frozenForest", 1) .decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.02))){{ loadout = Loadouts.basicFoundation; baseLaunchCost = ItemStack.with(); - startingItems = ItemStack.list(Items.copper, 400); + startingItems = ItemStack.list(Items.copper, 250); conditionWave = 10; blockRequirements = new Block[]{Blocks.junction, Blocks.router}; zoneRequirements = ZoneRequirement.with(groundZero, 10); resources = new Item[]{Items.copper, Items.lead, Items.coal}; }}; - craters = new Zone("craters", new MapGenerator("craters", 1).dist(0).decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.004))){{ - startingItems = ItemStack.list(Items.copper, 200); + craters = new Zone("craters", new MapGenerator("craters", 1).decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.004))){{ + startingItems = ItemStack.list(Items.copper, 100); conditionWave = 10; zoneRequirements = ZoneRequirement.with(frozenForest, 10); blockRequirements = new Block[]{Blocks.mender, Blocks.combustionGenerator}; resources = new Item[]{Items.copper, Items.lead, Items.coal, Items.sand, Items.scrap}; }}; - overgrowth = new Zone("overgrowth", new MapGenerator("overgrowth")){{ - startingItems = ItemStack.list(Items.copper, 3000, Items.lead, 2000, Items.silicon, 1000, Items.metaglass, 500); - conditionWave = 12; - launchPeriod = 4; - loadout = Loadouts.basicNucleus; - zoneRequirements = ZoneRequirement.with(craters, 40); - blockRequirements = new Block[]{Blocks.cultivator, Blocks.sporePress}; - resources = new Item[]{Items.copper, Items.lead, Items.coal, Items.titanium, Items.sand, Items.thorium, Items.scrap}; - }}; - - ruinousShores = new Zone("ruinousShores", new MapGenerator("ruinousShores", 1).dist(3f, true)){{ + ruinousShores = new Zone("ruinousShores", new MapGenerator("ruinousShores", 1)){{ loadout = Loadouts.basicFoundation; baseLaunchCost = ItemStack.with(); - startingItems = ItemStack.list(Items.copper, 400); + startingItems = ItemStack.list(Items.copper, 140, Items.lead, 50); conditionWave = 20; launchPeriod = 20; zoneRequirements = ZoneRequirement.with(desertWastes, 20, craters, 15); - blockRequirements = new Block[]{Blocks.graphitePress, Blocks.combustionGenerator, Blocks.kiln}; + blockRequirements = new Block[]{Blocks.graphitePress, Blocks.combustionGenerator, Blocks.kiln, Blocks.mechanicalPump}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.sand}; }}; stainedMountains = new Zone("stainedMountains", new MapGenerator("stainedMountains", 2) - .dist(0f, false) .decor(new Decoration(Blocks.shale, Blocks.shaleBoulder, 0.02))){{ loadout = Loadouts.basicFoundation; - startingItems = ItemStack.list(Items.copper, 400, Items.lead, 100); + startingItems = ItemStack.list(Items.copper, 200, Items.lead, 50); conditionWave = 10; launchPeriod = 10; zoneRequirements = ZoneRequirement.with(frozenForest, 15); - blockRequirements = new Block[]{Blocks.pneumaticDrill}; + blockRequirements = new Block[]{Blocks.pneumaticDrill, Blocks.powerNode, Blocks.turbineGenerator}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.sand}; }}; + fungalPass = new Zone("fungalPass", new MapGenerator("fungalPass")){{ + startingItems = ItemStack.list(Items.copper, 250, Items.lead, 250, Items.metaglass, 100, Items.graphite, 100); + zoneRequirements = ZoneRequirement.with(stainedMountains, 15); + blockRequirements = new Block[]{Blocks.daggerFactory, Blocks.crawlerFactory, Blocks.door, Blocks.siliconSmelter}; + resources = new Item[]{Items.copper, Items.lead, Items.coal, Items.titanium, Items.sand}; + }}; + + overgrowth = new Zone("overgrowth", new MapGenerator("overgrowth")){{ + startingItems = ItemStack.list(Items.copper, 1500, Items.lead, 1000, Items.silicon, 500, Items.metaglass, 250); + conditionWave = 12; + launchPeriod = 4; + loadout = Loadouts.basicNucleus; + zoneRequirements = ZoneRequirement.with(craters, 40, fungalPass, 10); + blockRequirements = new Block[]{Blocks.cultivator, Blocks.sporePress, Blocks.titanFactory, Blocks.wraithFactory}; + resources = new Item[]{Items.copper, Items.lead, Items.coal, Items.titanium, Items.sand, Items.thorium, Items.scrap}; + }}; + tarFields = new Zone("tarFields", new MapGenerator("tarFields") - .dist(0f, false) .decor(new Decoration(Blocks.shale, Blocks.shaleBoulder, 0.02))){{ loadout = Loadouts.basicFoundation; - startingItems = ItemStack.list(Items.copper, 500, Items.lead, 200); + startingItems = ItemStack.list(Items.copper, 250, Items.lead, 100); conditionWave = 15; launchPeriod = 10; zoneRequirements = ZoneRequirement.with(ruinousShores, 20); - blockRequirements = new Block[]{Blocks.coalCentrifuge}; - resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.sand}; + blockRequirements = new Block[]{Blocks.coalCentrifuge, Blocks.conduit, Blocks.wave}; + resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.thorium, Items.sand}; }}; - desolateRift = new Zone("desolateRift", new MapGenerator("desolateRift").dist(2f)){{ + desolateRift = new Zone("desolateRift", new MapGenerator("desolateRift")){{ loadout = Loadouts.basicNucleus; baseLaunchCost = ItemStack.with(); - startingItems = ItemStack.list(Items.copper, 2000, Items.lead, 2000, Items.graphite, 500, Items.titanium, 500, Items.silicon, 500); + startingItems = ItemStack.list(Items.copper, 1000, Items.lead, 1000, Items.graphite, 250, Items.titanium, 250, Items.silicon, 250); conditionWave = 3; launchPeriod = 2; zoneRequirements = ZoneRequirement.with(tarFields, 20); - blockRequirements = new Block[]{Blocks.thermalGenerator}; + blockRequirements = new Block[]{Blocks.thermalGenerator, Blocks.thoriumReactor}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.sand, Items.thorium}; }}; @@ -180,10 +183,10 @@ public class Zones implements ContentList{ .decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01))){{ loadout = Loadouts.basicNucleus; baseLaunchCost = ItemStack.with(); - startingItems = ItemStack.list(Items.copper, 2500, Items.lead, 3000, Items.silicon, 800, Items.metaglass, 400); + startingItems = ItemStack.list(Items.copper, 1250, Items.lead, 1500, Items.silicon, 400, Items.metaglass, 250); conditionWave = 30; launchPeriod = 15; - zoneRequirements = ZoneRequirement.with(stainedMountains, 20); + zoneRequirements = ZoneRequirement.with(fungalPass, 8); blockRequirements = new Block[]{Blocks.thermalGenerator, Blocks.laserDrill}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.thorium, Items.sand}; }}; diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index baa5204a34..46ccb86bdb 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -1,12 +1,15 @@ package io.anuke.mindustry.core; import io.anuke.arc.*; +import io.anuke.arc.files.*; import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.input.*; +import io.anuke.arc.math.geom.*; import io.anuke.arc.scene.ui.*; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; +import io.anuke.mindustry.content.*; import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; @@ -19,6 +22,7 @@ import io.anuke.mindustry.net.Net; import io.anuke.mindustry.type.*; import io.anuke.mindustry.ui.dialogs.*; import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.storage.*; import java.io.*; @@ -33,18 +37,21 @@ import static io.anuke.mindustry.Vars.*; */ public class Control implements ApplicationListener{ public final Saves saves; + public final MusicControl music; + public final Tutorial tutorial; + public InputHandler input; private Interval timer = new Interval(2); private boolean hiscore = false; private boolean wasPaused = false; - private InputHandler input; public Control(){ batch = new SpriteBatch(); saves = new Saves(); - data = new GlobalData(); + tutorial = new Tutorial(); + music = new MusicControl(); - Unit.dp.product = settings.getInt("uiscale", 100) / 100f; + UnitScl.dp.setProduct(settings.getInt("uiscale", 100) / 100f); Core.input.setCatch(KeyCode.BACK, true); @@ -98,6 +105,7 @@ public class Control implements ApplicationListener{ Events.on(ResetEvent.class, event -> { player.reset(); + tutorial.reset(); hiscore = false; @@ -109,6 +117,7 @@ public class Control implements ApplicationListener{ hiscore = true; world.getMap().setHighScore(state.wave); } + Sounds.wave.play(); }); Events.on(GameOverEvent.class, event -> { @@ -168,6 +177,41 @@ public class Control implements ApplicationListener{ Events.on(ZoneConfigureCompleteEvent.class, e -> { ui.hudfrag.showToast(Core.bundle.format("zone.config.complete", e.zone.configureWave)); }); + + if(android){ + Sounds.empty.loop(0f, 1f, 0f); + + checkClassicData(); + } + } + + //checks for existing 3.5 app data, android only + public void checkClassicData(){ + try{ + if(files.local("mindustry-maps").exists() || files.local("mindustry-saves").exists()){ + settings.getBoolOnce("classic-backup-check", () -> { + app.post(() -> app.post(() -> ui.showConfirm("$classic.export", "$classic.export.text", () -> { + try{ + Platform.instance.requestExternalPerms(() -> { + FileHandle external = files.external("MindustryClassic"); + if(files.local("mindustry-maps").exists()){ + files.local("mindustry-maps").copyTo(external); + } + + if(files.local("mindustry-saves").exists()){ + files.local("mindustry-saves").copyTo(external); + } + }); + }catch(Exception e){ + e.printStackTrace(); + ui.showError(Strings.parseException(e, true)); + } + }))); + }); + } + }catch(Throwable t){ + t.printStackTrace(); + } } void createPlayer(){ @@ -190,10 +234,6 @@ public class Control implements ApplicationListener{ Core.input.addProcessor(input); } - public InputHandler input(){ - return input; - } - public void playMap(Map map, Rules rules){ ui.loadAnd(() -> { logic.reset(); @@ -206,6 +246,7 @@ public class Control implements ApplicationListener{ public void playZone(Zone zone){ ui.loadAnd(() -> { logic.reset(); + Net.reset(); world.loadGenerator(zone.generator); zone.rules.accept(state.rules); state.rules.zone = zone; @@ -220,6 +261,58 @@ public class Control implements ApplicationListener{ }); } + public void playTutorial(){ + Zone zone = Zones.groundZero; + ui.loadAnd(() -> { + logic.reset(); + Net.reset(); + + world.beginMapLoad(); + + world.createTiles(zone.generator.width, zone.generator.height); + zone.generator.generate(world.getTiles()); + + 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.getTeam() == defaultTeam && !(tile.block() instanceof CoreBlock)){ + world.removeBlock(tile); + } + }); + + Geometry.circle(coreb.x, coreb.y, 5, (cx, cy) -> world.tile(cx, cy).clearOverlay()); + + world.endMapLoad(); + + zone.rules.accept(state.rules); + state.rules.zone = zone; + for(Tile core : state.teams.get(defaultTeam).cores){ + for(ItemStack stack : zone.getStartingItems()){ + core.entity.items.add(stack.item, stack.amount); + } + } + Tile core = state.teams.get(defaultTeam).cores.first(); + core.entity.items.clear(); + + logic.play(); + state.rules.waveTimer = false; + state.rules.waveSpacing = 60f * 30; + state.rules.buildCostMultiplier = 0.3f; + state.rules.tutorial = true; + }); + } + public boolean isHighScore(){ return hiscore; } @@ -228,6 +321,8 @@ public class Control implements ApplicationListener{ public void dispose(){ content.dispose(); Net.dispose(); + Musics.dispose(); + Sounds.dispose(); ui.editor.dispose(); } @@ -248,23 +343,12 @@ public class Control implements ApplicationListener{ public void init(){ Platform.instance.updateRPC(); - if(!Core.settings.getBool("4.0-warning-2", false)){ - - Time.run(5f, () -> { - FloatingDialog dialog = new FloatingDialog("VERY IMPORTANT"); - dialog.buttons.addButton("$ok", () -> { - dialog.hide(); - Core.settings.put("4.0-warning-2", true); - Core.settings.save(); - }).size(100f, 60f); - dialog.cont.add("Reminder: The alpha version you are about to play is very unstable, and is [accent]not representative of the final v4 release.[]\n\n " + - "\nThere is currently[scarlet] no sound implemented[]; this is intentional.\n" + - "All current art and UI is unfinished, and will be changed before release. " + - "\n\n[accent]Saves may be corrupted without warning between updates.").wrap().width(400f); - dialog.show(); - }); + //play tutorial on stop + if(!settings.getBool("playedtutorial", false)){ + Core.app.post(() -> Core.app.post(this::playTutorial)); } + //display UI scale changed dialog if(Core.settings.getBool("uiscalechanged", false)){ FloatingDialog dialog = new FloatingDialog("$confirm"); @@ -307,6 +391,8 @@ public class Control implements ApplicationListener{ //autosave global data if it's modified data.checkSave(); + music.update(); + if(!state.is(State.menu)){ input.update(); @@ -320,6 +406,10 @@ public class Control implements ApplicationListener{ } } + if(state.rules.tutorial){ + tutorial.update(); + } + //auto-update rpc every 5 seconds if(timer.get(0, 60 * 5)){ Platform.instance.updateRPC(); diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index f873e5d1f5..ba23997804 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -45,6 +45,8 @@ public class NetClient implements ApplicationListener{ private boolean connecting = false; /** If true, no message will be shown on disconnect. */ private boolean quiet = false; + /** Whether to supress disconnect events completely.*/ + private boolean quietReset = false; /** Counter for data timeout. */ private float timeoutTime = 0f; /** Last sent client snapshot ID. */ @@ -94,8 +96,10 @@ public class NetClient implements ApplicationListener{ }); Net.handleClient(Disconnect.class, packet -> { - state.set(State.menu); + if(quietReset) return; + connecting = false; + state.set(State.menu); logic.reset(); Platform.instance.updateRPC(); @@ -325,11 +329,11 @@ public class NetClient implements ApplicationListener{ private void finishConnecting(){ state.set(State.playing); connecting = false; - ui.loadfrag.hide(); ui.join.hide(); Net.setClientLoaded(true); Core.app.post(Call::connectConfirm); Time.runTask(40f, Platform.instance::updateRPC); + Core.app.post(() -> ui.loadfrag.hide()); } private void reset(){ @@ -337,6 +341,7 @@ public class NetClient implements ApplicationListener{ removed.clear(); timeoutTime = 0f; connecting = true; + quietReset = false; quiet = false; lastSent = 0; @@ -348,11 +353,18 @@ public class NetClient implements ApplicationListener{ connecting = true; } + /** Disconnects, resetting state to the menu. */ public void disconnectQuietly(){ quiet = true; Net.disconnect(); } + /** Disconnects, causing no further changes or reset.*/ + public void disconnectNoReset(){ + quiet = quietReset = true; + Net.disconnect(); + } + /** When set, any disconnects will be ignored and no dialogs will be shown. */ public void setQuiet(){ quiet = true; diff --git a/core/src/io/anuke/mindustry/core/Platform.java b/core/src/io/anuke/mindustry/core/Platform.java index 85026c9335..d66697c25e 100644 --- a/core/src/io/anuke/mindustry/core/Platform.java +++ b/core/src/io/anuke/mindustry/core/Platform.java @@ -39,6 +39,11 @@ public abstract class Platform{ }); } + /** Request external read/write perms. Run callback when complete.*/ + public void requestExternalPerms(Runnable callback){ + callback.run(); + } + /** Update discord RPC. */ public void updateRPC(){ } diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 1fd54ee86d..881f560093 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -10,6 +10,7 @@ import io.anuke.arc.graphics.glutils.FrameBuffer; import io.anuke.arc.math.Mathf; import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Vector2; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.Pools; import io.anuke.mindustry.content.Fx; @@ -37,7 +38,7 @@ public class Renderer implements ApplicationListener{ public FrameBuffer shieldBuffer = new FrameBuffer(2, 2); private Bloom bloom; private Color clearColor; - private float targetscale = io.anuke.arc.scene.ui.layout.Unit.dp.scl(4); + private float targetscale = UnitScl.dp.scl(4); private float camerascale = targetscale; private Rectangle rect = new Rectangle(), rect2 = new Rectangle(); private float shakeIntensity, shaketime; @@ -47,7 +48,6 @@ public class Renderer implements ApplicationListener{ if(settings.getBool("bloom")){ setupBloom(); } - Lines.setCircleVertices(20); Shaders.init(); Effects.setScreenShakeProvider((intensity, duration) -> { @@ -152,6 +152,7 @@ public class Renderer implements ApplicationListener{ try{ if(bloom != null){ bloom.dispose(); + bloom = null; } bloom = new Bloom(true); bloom.setClearColor(0f, 0f, 0f, 0f); @@ -326,8 +327,7 @@ public class Renderer implements ApplicationListener{ for(Team team : Team.all){ EntityGroup group = unitGroups[team.ordinal()]; - if(group.count(p -> p.isFlying() == flying) + - playerGroup.count(p -> p.isFlying() == flying && p.getTeam() == team) == 0 && flying) continue; + if(group.count(p -> p.isFlying() == flying) + playerGroup.count(p -> p.isFlying() == flying && p.getTeam() == team) == 0 && flying) continue; draw(unitGroups[team.ordinal()], u -> u.isFlying() == flying && !u.isDead(), Unit::drawUnder); draw(playerGroup, p -> p.isFlying() == flying && p.getTeam() == team && !p.isDead(), Unit::drawUnder); @@ -358,7 +358,7 @@ public class Renderer implements ApplicationListener{ } public void clampScale(){ - float s = io.anuke.arc.scene.ui.layout.Unit.dp.scl(1f); + float s = UnitScl.dp.scl(1f); targetscale = Mathf.clamp(targetscale, s * 1.5f, Math.round(s * 6)); } diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 8701bcfda5..ee10191570 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -23,10 +23,12 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.editor.*; import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.ui.dialogs.*; import io.anuke.mindustry.ui.fragments.*; +import static io.anuke.arc.scene.actions.Actions.*; import static io.anuke.mindustry.Vars.*; public class UI implements ApplicationListener{ @@ -77,11 +79,8 @@ public class UI implements ApplicationListener{ Core.scene = new Scene(skin); Core.input.addProcessor(Core.scene); - //Dialog.setShowAction(() -> sequence(translateTo(Core.graphics.getWidth(), 0f), translateBy(-Core.graphics.getWidth(), 0f, 0.1f, Interpolation.fade))); - //Dialog.setHideAction(() -> sequence(translateBy(-Core.graphics.getWidth(), 0f, 0.1f, Interpolation.fade))); - - Dialog.setShowAction(Actions::sequence); - Dialog.setHideAction(Actions::sequence); + Dialog.setShowAction(() -> sequence(alpha(0f), fadeIn(0.1f))); + Dialog.setHideAction(() -> sequence(fadeOut(0.1f))); Tooltips.getInstance().animations = false; @@ -90,11 +89,21 @@ public class UI implements ApplicationListener{ Core.app.post(() -> showError("Failed to access local storage.\nSettings will not be saved.")); }); + ClickListener.clicked = () -> Sounds.press.play(); + Colors.put("accent", Pal.accent); Colors.put("highlight", Pal.accent.cpy().lerp(Color.WHITE, 0.3f)); Colors.put("stat", Pal.stat); + loadExtraCursors(); + } - loadCursors(); + /** Called from a static context to make the cursor appear immediately upon startup.*/ + public static void loadSystemCursors(){ + SystemCursor.arrow.set(Core.graphics.newCursor("cursor")); + SystemCursor.hand.set(Core.graphics.newCursor("hand")); + SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam")); + + Core.graphics.restoreCursor(); } void loadExtraStyle(Skin skin){ @@ -116,31 +125,34 @@ public class UI implements ApplicationListener{ skin.add("flat-down", copy, Drawable.class); } - void loadCursors(){ - int cursorScaling = 1, outlineThickness = 3; - Color outlineColor = Color.valueOf("444444"); - - drillCursor = Core.graphics.newCursor("drill", cursorScaling, outlineColor, outlineThickness); - unloadCursor = Core.graphics.newCursor("unload", cursorScaling, outlineColor, outlineThickness); - SystemCursor.arrow.set(Core.graphics.newCursor("cursor", cursorScaling, outlineColor, outlineThickness)); - SystemCursor.hand.set(Core.graphics.newCursor("hand", cursorScaling, outlineColor, outlineThickness)); - SystemCursor.ibeam.set(Core.graphics.newCursor("ibeam", cursorScaling, outlineColor, outlineThickness)); - - Core.graphics.restoreCursor(); + void loadExtraCursors(){ + drillCursor = Core.graphics.newCursor("drill"); + unloadCursor = Core.graphics.newCursor("unload"); } void generateFonts(Skin skin){ generator = new FreeTypeFontGenerator(Core.files.internal("fonts/font.ttf")); - FreeTypeFontParameter param = new FreeTypeFontParameter(); - param.size = (int)(9 * 2 * Math.max(Unit.dp.scl(1f), 0.5f)); - param.shadowColor = Color.DARK_GRAY; - param.shadowOffsetY = 2; - param.incremental = true; - skin.add("default-font", generator.generateFont(param)); - skin.add("default-font-chat", generator.generateFont(param)); - skin.getFont("default-font").getData().markupEnabled = true; - skin.getFont("default-font").setOwnsTexture(false); + FreeTypeFontParameter param = new FreeTypeFontParameter(){{ + size = (int)(UnitScl.dp.scl(18f)); + shadowColor = Color.DARK_GRAY; + shadowOffsetY = 2; + incremental = true; + }}; + + FreeTypeFontParameter outlined = new FreeTypeFontParameter(){{ + size = param.size; + borderColor = Color.DARK_GRAY; + borderWidth = UnitScl.dp.scl(2f); + spaceX -= borderWidth; + incremental = true; + }}; + + skin.add("outline", generator.generateFont(outlined)); + skin.add("default", generator.generateFont(param)); + skin.add("chat", generator.generateFont(param)); + skin.getFont("default").getData().markupEnabled = true; + skin.getFont("default").setOwnsTexture(false); } @Override @@ -149,6 +161,12 @@ public class UI implements ApplicationListener{ Core.scene.act(); Core.scene.draw(); + + //draw overlay for buttons + if(state.rules.tutorial){ + control.tutorial.draw(); + Draw.flush(); + } } @Override @@ -196,12 +214,13 @@ public class UI implements ApplicationListener{ Core.scene.add(menuGroup); Core.scene.add(hudGroup); - control.input().getFrag().build(hudGroup); + control.input.getFrag().build(hudGroup); hudfrag.build(hudGroup); menufrag.build(menuGroup); chatfrag.container().build(hudGroup); listfrag.build(hudGroup); loadfrag.build(group); + new FadeInFragment().build(group); } @Override @@ -298,6 +317,10 @@ public class UI implements ApplicationListener{ } public void showConfirm(String title, String text, Runnable confirmed){ + showConfirm(title, text, null, confirmed); + } + + public void showConfirm(String title, String text, BooleanProvider hide, Runnable confirmed){ FloatingDialog dialog = new FloatingDialog(title); dialog.cont.add(text).width(500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center); dialog.buttons.defaults().size(200f, 54f).pad(2f); @@ -307,6 +330,13 @@ public class UI implements ApplicationListener{ dialog.hide(); confirmed.run(); }); + if(hide != null){ + dialog.update(() -> { + if(hide.get()){ + dialog.hide(); + } + }); + } dialog.keyDown(KeyCode.ESCAPE, dialog::hide); dialog.keyDown(KeyCode.BACK, dialog::hide); dialog.show(); diff --git a/core/src/io/anuke/mindustry/editor/EditorTile.java b/core/src/io/anuke/mindustry/editor/EditorTile.java index 0e6f0d28f3..6d627399df 100644 --- a/core/src/io/anuke/mindustry/editor/EditorTile.java +++ b/core/src/io/anuke/mindustry/editor/EditorTile.java @@ -115,7 +115,7 @@ public class EditorTile extends Tile{ return; } - super.setTeam(Team.none); + super.setTeam(Team.derelict); } @Override diff --git a/core/src/io/anuke/mindustry/editor/MapEditor.java b/core/src/io/anuke/mindustry/editor/MapEditor.java index 466f513318..bf557eb640 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditor.java +++ b/core/src/io/anuke/mindustry/editor/MapEditor.java @@ -32,7 +32,7 @@ public class MapEditor{ public int brushSize = 1; public int rotation; public Block drawBlock = Blocks.stone; - public Team drawTeam = Team.blue; + public Team drawTeam = Team.sharded; public StringMap getTags(){ return tags; @@ -175,7 +175,6 @@ public class MapEditor{ world.setBlock(tile(x, y), drawBlock, drawTeam); }else{ - boolean isFloor = drawBlock.isFloor() && drawBlock != Blocks.air; Consumer drawer = tile -> { diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 934a2a5abd..23b42e6885 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -1,40 +1,34 @@ package io.anuke.mindustry.editor; -import io.anuke.arc.Core; -import io.anuke.arc.collection.Array; -import io.anuke.arc.collection.StringMap; -import io.anuke.arc.files.FileHandle; -import io.anuke.arc.function.Consumer; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.Pixmap; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Vector2; -import io.anuke.arc.scene.actions.Actions; -import io.anuke.arc.scene.event.Touchable; -import io.anuke.arc.scene.style.TextureRegionDrawable; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.files.*; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.input.*; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.actions.*; +import io.anuke.arc.scene.event.*; +import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.ui.*; -import io.anuke.arc.scene.ui.TextButton.TextButtonStyle; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.TextButton.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.Vars; +import io.anuke.mindustry.*; import io.anuke.mindustry.content.*; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.core.Platform; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.core.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.io.JsonIO; -import io.anuke.mindustry.io.MapIO; -import io.anuke.mindustry.maps.Map; -import io.anuke.mindustry.ui.dialogs.FileChooser; -import io.anuke.mindustry.ui.dialogs.FloatingDialog; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Block.Icon; -import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.io.*; +import io.anuke.mindustry.maps.*; +import io.anuke.mindustry.ui.dialogs.*; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.Block.*; import io.anuke.mindustry.world.blocks.*; -import io.anuke.mindustry.world.blocks.storage.CoreBlock; +import io.anuke.mindustry.world.blocks.storage.*; import static io.anuke.mindustry.Vars.*; @@ -335,7 +329,12 @@ public class MapEditorDialog extends Dialog implements Disposable{ @Override public Dialog show(){ - return super.show(Core.scene, Actions.sequence()); + return super.show(Core.scene, Actions.sequence(Actions.alpha(1f))); + } + + @Override + public void hide(){ + super.hide(Actions.sequence(Actions.alpha(0f))); } @Override @@ -360,6 +359,10 @@ public class MapEditorDialog extends Dialog implements Disposable{ return view; } + public MapGenerateDialog getGenerateDialog(){ + return generateDialog; + } + public void resetSaved(){ saved = false; } @@ -369,10 +372,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ } public void build(){ - float amount = 10f, baseSize = 60f; - - float size = mobile ? (int)(Math.min(Core.graphics.getHeight(), Core.graphics.getWidth()) / amount / Unit.dp.scl(1f)) : - Math.min(Core.graphics.getHeight() / amount, baseSize); + float size = 60f; clearChildren(); table(cont -> { @@ -533,6 +533,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ mid.table("underline", t -> { Slider slider = new Slider(0, MapEditor.brushSizes.length - 1, 1, false); slider.moved(f -> editor.brushSize = MapEditor.brushSizes[(int)(float)f]); + for(int j = 0; j < MapEditor.brushSizes.length; j++){ + if(MapEditor.brushSizes[j] == editor.brushSize){ + slider.setValue(j); + } + } t.top(); t.add("$editor.brush"); diff --git a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java index 545cc4004e..7b490f8c63 100644 --- a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java @@ -11,7 +11,6 @@ import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.async.*; -import io.anuke.mindustry.content.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.io.*; @@ -28,8 +27,8 @@ import static io.anuke.mindustry.Vars.*; public class MapGenerateDialog extends FloatingDialog{ private final Supplier[] filterTypes = new Supplier[]{ NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new, - RiverNoiseFilter::new, OreFilter::new, MedianFilter::new, BlendFilter::new, - MirrorFilter::new, ClearFilter::new + RiverNoiseFilter::new, OreFilter::new, OreMedianFilter::new, MedianFilter::new, + BlendFilter::new, MirrorFilter::new, ClearFilter::new }; private final MapEditor editor; private final boolean applied; @@ -150,16 +149,6 @@ public class MapGenerateDialog extends FloatingDialog{ editor.clearOp(); } - public void addDefaultOres(Array filters){ - int index = 0; - for(Block block : new Block[]{Blocks.oreCopper, Blocks.oreLead, Blocks.oreCoal, Blocks.oreTitanium, Blocks.oreThorium}){ - OreFilter filter = new OreFilter(); - filter.threshold += index ++ * 0.019f; - filter.ore = block; - filters.add(filter); - } - } - void setup(){ if(pixmap != null){ pixmap.dispose(); @@ -227,7 +216,7 @@ public class MapGenerateDialog extends FloatingDialog{ } void rebuildFilters(){ - int cols = Math.max((int)(Math.max(filterTable.getParent().getWidth(), Core.graphics.getWidth()/2f * 0.9f) / Unit.dp.scl(290f)), 1); + int cols = Math.max((int)(Math.max(filterTable.getParent().getWidth(), Core.graphics.getWidth()/2f * 0.9f) / UnitScl.dp.scl(290f)), 1); filterTable.clearChildren(); filterTable.top().left(); int i = 0; @@ -315,7 +304,7 @@ public class MapGenerateDialog extends FloatingDialog{ } selection.cont.addButton("$filter.defaultores", () -> { - addDefaultOres(filters); + world.maps.addDefaultOres(filters); rebuildFilters(); update(); selection.hide(); @@ -394,10 +383,10 @@ public class MapGenerateDialog extends FloatingDialog{ //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.none); + color = MapIO.colorFor(tile.floor(), tile.block(), 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.none); + color = MapIO.colorFor(content.block(tile.floor), content.block(tile.block), content.block(tile.ore), Team.derelict); } pixmap.drawPixel(px, pixmap.getHeight() - 1 - py, color); } diff --git a/core/src/io/anuke/mindustry/editor/MapView.java b/core/src/io/anuke/mindustry/editor/MapView.java index 59958e548e..0481d4a3f4 100644 --- a/core/src/io/anuke/mindustry/editor/MapView.java +++ b/core/src/io/anuke/mindustry/editor/MapView.java @@ -11,7 +11,7 @@ import io.anuke.arc.math.geom.*; import io.anuke.arc.scene.Element; import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.ui.TextField; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.arc.util.*; import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.input.Binding; @@ -240,10 +240,6 @@ public class MapView extends Element implements GestureListener{ editor.renderer().draw(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight); Draw.reset(); - if(!ScissorStack.pushScissors(rect.set(x, y, width, height))){ - return; - } - if(grid){ Draw.color(Color.GRAY); image.setBounds(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight); @@ -262,7 +258,7 @@ public class MapView extends Element implements GestureListener{ float scaling = zoom * Math.min(width, height) / editor.width(); Draw.color(Pal.accent); - Lines.stroke(Unit.dp.scl(2f)); + Lines.stroke(UnitScl.dp.scl(2f)); if((!editor.drawBlock.isMultiblock() || tool == EditorTool.eraser) && tool != EditorTool.fill){ if(tool == EditorTool.line && drawing){ @@ -298,12 +294,11 @@ public class MapView extends Element implements GestureListener{ } Draw.color(Pal.accent); - Lines.stroke(Unit.dp.scl(3f)); + Lines.stroke(UnitScl.dp.scl(3f)); Lines.rect(x, y, width, height); Draw.reset(); ScissorStack.popScissors(); - ScissorStack.popScissors(); } private boolean active(){ @@ -325,7 +320,7 @@ public class MapView extends Element implements GestureListener{ public boolean zoom(float initialDistance, float distance){ if(!active()) return false; float nzoom = distance - initialDistance; - zoom += nzoom / 10000f / Unit.dp.scl(1f) * zoom; + zoom += nzoom / 10000f / UnitScl.dp.scl(1f) * zoom; clampZoom(); return false; } diff --git a/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java b/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java index 12098e5884..34c421450d 100644 --- a/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java +++ b/core/src/io/anuke/mindustry/editor/WaveInfoDialog.java @@ -88,7 +88,7 @@ public class WaveInfoDialog extends FloatingDialog{ buildGroups(); }).growX().height(70f); }), new Label("$waves.none"){{ - visible(groups::isEmpty); + visible(() -> groups.isEmpty()); touchable(Touchable.disabled); setWrap(true); setAlignment(Align.center, Align.center); diff --git a/core/src/io/anuke/mindustry/entities/Damage.java b/core/src/io/anuke/mindustry/entities/Damage.java index 474a9747e4..9b75085b0f 100644 --- a/core/src/io/anuke/mindustry/entities/Damage.java +++ b/core/src/io/anuke/mindustry/entities/Damage.java @@ -35,7 +35,7 @@ public class Damage{ public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, Color color){ for(int i = 0; i < Mathf.clamp(power / 20, 0, 6); i++){ int branches = 5 + Mathf.clamp((int)(power / 30), 1, 20); - Time.run(i * 2f + Mathf.random(4f), () -> Lightning.create(Team.none, Pal.power, 3, + Time.run(i * 2f + Mathf.random(4f), () -> Lightning.create(Team.derelict, Pal.power, 3, x, y, Mathf.random(360f), branches + Mathf.range(2))); } diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index b4b6ea115b..75bc44dede 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -79,7 +79,7 @@ public class Units{ /** Returns the neareset enemy tile in a range. */ public static TileEntity findEnemyTile(Team team, float x, float y, float range, Predicate pred){ - if(team == Team.none) return null; + if(team == Team.derelict) return null; for(Team enemy : state.teams.enemiesOf(team)){ TileEntity entity = world.indexer.findTile(enemy, x, y, range, pred); @@ -102,7 +102,7 @@ public class Units{ /** Returns the closest target enemy. First, units are checked, then tile entities. */ public static TargetTrait closestTarget(Team team, float x, float y, float range, Predicate unitPred, Predicate tilePred){ - if(team == Team.none) return null; + if(team == Team.derelict) return null; Unit unit = closestEnemy(team, x, y, range, unitPred); if(unit != null){ @@ -114,7 +114,7 @@ public class Units{ /** Returns the closest enemy of this team. Filter by predicate. */ public static Unit closestEnemy(Team team, float x, float y, float range, Predicate predicate){ - if(team == Team.none) return null; + if(team == Team.derelict) return null; result = null; cdist = 0f; diff --git a/core/src/io/anuke/mindustry/entities/bullet/ArtilleryBulletType.java b/core/src/io/anuke/mindustry/entities/bullet/ArtilleryBulletType.java index cbe7cae4fd..734c3f59a8 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/ArtilleryBulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/ArtilleryBulletType.java @@ -1,9 +1,10 @@ package io.anuke.mindustry.entities.bullet; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.Effects.Effect; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.Effects.*; +import io.anuke.mindustry.gen.*; //TODO scale velocity depending on fslope() public class ArtilleryBulletType extends BasicBulletType{ @@ -15,6 +16,7 @@ public class ArtilleryBulletType extends BasicBulletType{ collides = false; collidesAir = false; hitShake = 1f; + hitSound = Sounds.explosion; } @Override diff --git a/core/src/io/anuke/mindustry/entities/bullet/BombBulletType.java b/core/src/io/anuke/mindustry/entities/bullet/BombBulletType.java index be974f91e4..bf2e5ecd43 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/BombBulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/BombBulletType.java @@ -1,5 +1,7 @@ package io.anuke.mindustry.entities.bullet; +import io.anuke.mindustry.gen.*; + public class BombBulletType extends BasicBulletType{ public BombBulletType(float damage, float radius, String sprite){ @@ -13,5 +15,6 @@ public class BombBulletType extends BasicBulletType{ drag = 0.05f; keepVelocity = false; collidesAir = false; + hitSound = Sounds.explosion; } } diff --git a/core/src/io/anuke/mindustry/entities/bullet/Bullet.java b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java index 4060376c14..afe97b5399 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/Bullet.java +++ b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java @@ -83,7 +83,7 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool /** Internal use only. */ @Remote(called = Loc.server, unreliable = true) public static void createBullet(BulletType type, float x, float y, float angle){ - create(type, null, Team.none, x, y, angle); + create(type, null, Team.derelict, x, y, angle); } /** ok */ diff --git a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java index b554c2ac68..693112d53f 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java @@ -1,18 +1,17 @@ package io.anuke.mindustry.entities.bullet; -import io.anuke.arc.math.Angles; -import io.anuke.arc.math.Mathf; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.content.StatusEffects; +import io.anuke.arc.audio.*; +import io.anuke.arc.math.*; +import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; -import io.anuke.mindustry.entities.Effects.Effect; -import io.anuke.mindustry.entities.effect.Lightning; -import io.anuke.mindustry.entities.traits.TargetTrait; -import io.anuke.mindustry.game.Content; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.type.ContentType; -import io.anuke.mindustry.type.StatusEffect; -import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.entities.Effects.*; +import io.anuke.mindustry.entities.effect.*; +import io.anuke.mindustry.entities.traits.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.world.*; public abstract class BulletType extends Content{ public float lifetime; @@ -28,10 +27,12 @@ public abstract class BulletType extends Content{ public Effect shootEffect = Fx.shootSmall; /** Extra smoke effect created when shooting. */ public Effect smokeEffect = Fx.shootSmallSmoke; + /** Sound made when hitting something or getting removed.*/ + public Sound hitSound = Sounds.none; /** Extra inaccuracy when firing. */ public float inaccuracy = 0f; /** How many bullets get created per ammo item/liquid. */ - public float ammoMultiplier = 1f; + public float ammoMultiplier = 2f; /** Multiplied by turret reload speed to get final shoot speed. */ public float reloadMultiplier = 1f; /** Recoil from shooter entities. */ @@ -105,6 +106,7 @@ public abstract class BulletType extends Content{ public void hit(Bullet b, float x, float y){ Effects.effect(hitEffect, x, y, b.rot()); + hitSound.at(b); Effects.shake(hitShake, hitShake, b); @@ -127,6 +129,7 @@ public abstract class BulletType extends Content{ public void despawned(Bullet b){ Effects.effect(despawnEffect, b.x, b.y, b.rot()); + hitSound.at(b); if(fragBullet != null || splashDamageRadius > 0){ hit(b); diff --git a/core/src/io/anuke/mindustry/entities/bullet/LiquidBulletType.java b/core/src/io/anuke/mindustry/entities/bullet/LiquidBulletType.java index cc2b97ca46..e9edaef777 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/LiquidBulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/LiquidBulletType.java @@ -1,20 +1,15 @@ package io.anuke.mindustry.entities.bullet; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.Fill; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Geometry; -import io.anuke.arc.math.geom.Point2; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.effect.Fire; -import io.anuke.mindustry.entities.effect.Puddle; -import io.anuke.mindustry.type.Liquid; -import io.anuke.mindustry.world.Tile; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.geom.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.effect.*; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.world.*; -import static io.anuke.mindustry.Vars.tilesize; -import static io.anuke.mindustry.Vars.world; +import static io.anuke.mindustry.Vars.*; public class LiquidBulletType extends BulletType{ Liquid liquid; @@ -55,7 +50,7 @@ public class LiquidBulletType extends BulletType{ @Override public void draw(Bullet b){ - Draw.color(liquid.color, Color.WHITE, b.fout() / 100f + Mathf.randomSeedRange(b.id, 0.1f)); + Draw.color(liquid.color, Color.WHITE, b.fout() / 100f); Fill.circle(b.x, b.y, 0.5f + b.fout() * 2.5f); } diff --git a/core/src/io/anuke/mindustry/entities/effect/Decal.java b/core/src/io/anuke/mindustry/entities/effect/Decal.java index 79b2c3276d..dd8a499f50 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Decal.java +++ b/core/src/io/anuke/mindustry/entities/effect/Decal.java @@ -17,7 +17,7 @@ public abstract class Decal extends TimedEntity implements BelowLiquidTrait, Dra @Override public float lifetime(){ - return 8200f; + return 3600; } @Override diff --git a/core/src/io/anuke/mindustry/entities/effect/Fire.java b/core/src/io/anuke/mindustry/entities/effect/Fire.java index 19ceadf09c..8ee58d742a 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Fire.java +++ b/core/src/io/anuke/mindustry/entities/effect/Fire.java @@ -1,21 +1,18 @@ package io.anuke.mindustry.entities.effect; -import io.anuke.annotations.Annotations.Remote; -import io.anuke.arc.collection.IntMap; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Geometry; -import io.anuke.arc.math.geom.Point2; -import io.anuke.arc.util.Structs; -import io.anuke.arc.util.Time; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; -import io.anuke.mindustry.entities.impl.TimedEntity; -import io.anuke.mindustry.entities.traits.SaveTrait; -import io.anuke.mindustry.entities.traits.SyncTrait; -import io.anuke.mindustry.entities.type.TileEntity; -import io.anuke.mindustry.game.TypeID; -import io.anuke.mindustry.gen.Call; -import io.anuke.mindustry.net.Net; +import io.anuke.mindustry.entities.impl.*; +import io.anuke.mindustry.entities.traits.*; +import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.net.*; import io.anuke.mindustry.world.*; import java.io.*; @@ -102,6 +99,10 @@ public class Fire extends TimedEntity implements SaveTrait, SyncTrait{ Effects.effect(Fx.fireSmoke, x + Mathf.range(4f), y + Mathf.range(4f)); } + if(Mathf.chance(0.001 * Time.delta())){ + Sounds.fire.at(this); + } + time = Mathf.clamp(time + Time.delta(), 0, lifetime()); map.put(tile.pos(), this); diff --git a/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java b/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java index 8f2fb733ef..222d1355e4 100644 --- a/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java +++ b/core/src/io/anuke/mindustry/entities/effect/RubbleDecal.java @@ -25,6 +25,11 @@ public class RubbleDecal extends Decal{ decal.add(); } + @Override + public float lifetime(){ + return 8200f; + } + @Override public void drawDecal(){ if(!Core.atlas.isFound(region)){ diff --git a/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java b/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java index c5828f3078..89f4eacf6f 100644 --- a/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java +++ b/core/src/io/anuke/mindustry/entities/effect/ScorchDecal.java @@ -34,7 +34,7 @@ public class ScorchDecal extends Decal{ @Override public void drawDecal(){ - for(int i = 0; i < 5; i++){ + for(int i = 0; i < 3; i++){ TextureRegion region = regions[Mathf.randomSeed(id - i, 0, scorches - 1)]; float rotation = Mathf.randomSeed(id + i, 0, 360); float space = 1.5f + Mathf.randomSeed(id + i + 1, 0, 20) / 10f; diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java index 595a094097..7734838d3d 100644 --- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.entities.traits; +import io.anuke.annotations.Annotations.*; import io.anuke.arc.Core; import io.anuke.arc.Events; import io.anuke.arc.collection.Array; @@ -206,7 +207,7 @@ public interface BuilderTrait extends Entity, TeamTrait{ * Return the build requests currently active, or the one at the top of the queue. * May return null. */ - default BuildRequest buildRequest(){ + default @Nullable BuildRequest buildRequest(){ return buildQueue().size == 0 ? null : buildQueue().first(); } diff --git a/core/src/io/anuke/mindustry/entities/traits/MinerTrait.java b/core/src/io/anuke/mindustry/entities/traits/MinerTrait.java index da2f0fcfc9..76a66396e1 100644 --- a/core/src/io/anuke/mindustry/entities/traits/MinerTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/MinerTrait.java @@ -90,7 +90,7 @@ public interface MinerTrait extends Entity{ Draw.color(Color.LIGHT_GRAY, Color.WHITE, 1f - flashScl + Mathf.absin(Time.time(), 0.5f, flashScl)); - Shapes.laser(Core.atlas.find("minelaser"), Core.atlas.find("minelaser-end"), px, py, ex, ey, 0.75f); + Drawf.laser(Core.atlas.find("minelaser"), Core.atlas.find("minelaser-end"), px, py, ex, ey, 0.75f); if(unit instanceof Player && ((Player)unit).isLocal){ Lines.stroke(1f, Pal.accent); diff --git a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java index a8dd3b5670..e6c182d029 100644 --- a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java @@ -1,30 +1,23 @@ package io.anuke.mindustry.entities.type; import io.anuke.annotations.Annotations.*; -import io.anuke.arc.Core; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.math.Angles; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Geometry; -import io.anuke.arc.math.geom.Rectangle; -import io.anuke.arc.util.Interval; -import io.anuke.arc.util.Time; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.content.StatusEffects; -import io.anuke.mindustry.entities.EntityGroup; -import io.anuke.mindustry.entities.Units; -import io.anuke.mindustry.entities.traits.ShooterTrait; -import io.anuke.mindustry.entities.traits.TargetTrait; +import io.anuke.arc.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.units.*; -import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.game.TypeID; -import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.type.*; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.units.UnitFactory.UnitFactoryEntity; -import io.anuke.mindustry.world.meta.BlockFlag; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.units.UnitFactory.*; +import io.anuke.mindustry.world.meta.*; import java.io.*; @@ -60,6 +53,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ } unit.onSuperDeath(); + unit.type.deathSound.at(unit); //visual only. if(Net.client()){ @@ -167,22 +161,6 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ return null; } - protected void drawItems(){ - float backTrns = 4f; - if(item.amount > 0){ - int stored = Mathf.clamp(item.amount / 6, 1, 8); - - for(int i = 0; i < stored; i++){ - float angT = i == 0 ? 0 : Mathf.randomSeedRange(i + 2, 60f); - float lenT = i == 0 ? 0 : Mathf.randomSeedRange(i + 3, 1f) - 1f; - Draw.rect(item.item.icon(Item.Icon.large), - x + Angles.trnsx(rotation + 180f + angT, backTrns + lenT), - y + Angles.trnsy(rotation + 180f + angT, backTrns + lenT), - itemSize, itemSize, rotation); - } - } - } - public boolean isBoss(){ return hasEffect(StatusEffects.boss); } diff --git a/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java b/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java index 6620f20c60..83f9434810 100644 --- a/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/FlyingUnit.java @@ -115,7 +115,6 @@ public abstract class FlyingUnit extends BaseUnit{ Draw.rect(type.region, x, y, rotation - 90); drawWeapons(); - drawItems(); Draw.mixcol(); } diff --git a/core/src/io/anuke/mindustry/entities/type/GroundUnit.java b/core/src/io/anuke/mindustry/entities/type/GroundUnit.java index e319063e9d..47d0e11280 100644 --- a/core/src/io/anuke/mindustry/entities/type/GroundUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/GroundUnit.java @@ -145,8 +145,6 @@ public abstract class GroundUnit extends BaseUnit{ y + Angles.trnsy(tra, getWeapon().width * i, trY), w, type.weapon.region.getHeight() * Draw.scl, rotation - 90); } - drawItems(); - Draw.mixcol(); } diff --git a/core/src/io/anuke/mindustry/entities/type/Player.java b/core/src/io/anuke/mindustry/entities/type/Player.java index 91db0f1122..e1b7b94b19 100644 --- a/core/src/io/anuke/mindustry/entities/type/Player.java +++ b/core/src/io/anuke/mindustry/entities/type/Player.java @@ -9,17 +9,17 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.Angles; import io.anuke.arc.math.Mathf; import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.Pools; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.traits.*; -import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.game.TypeID; -import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.input.Binding; +import io.anuke.mindustry.input.*; import io.anuke.mindustry.input.InputHandler.PlaceDraw; import io.anuke.mindustry.io.TypeIO; import io.anuke.mindustry.net.Net; @@ -27,7 +27,7 @@ import io.anuke.mindustry.net.NetConnection; import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Floor; +import io.anuke.mindustry.world.blocks.*; import java.io.*; @@ -65,11 +65,12 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ public String lastText; public float textFadeTime; - private float walktime; + private float walktime, itemtime; private Queue placeQueue = new Queue<>(); private Tile mining; private Vector2 movement = new Vector2(); private boolean moved; + private SoundLoop boostSound = new SoundLoop(Sounds.thruster, 2f), buildSound = new SoundLoop(Sounds.build, 0.75f); //endregion @@ -109,6 +110,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ dead = false; spawner = null; respawns --; + Sounds.respawn.at(tile); setNet(tile.drawx(), tile.drawy()); clearItem(); @@ -129,6 +131,12 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ } } + @Override + public void removed(){ + boostSound.stop(); + buildSound.stop(); + } + @Override public float drag(){ return mech.drag; @@ -338,21 +346,6 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ rotation - 90); } - float backTrns = 4f; - if(item.amount > 0){ - ItemStack stack = item; - int stored = Mathf.clamp(stack.amount / 6, 1, 8); - - for(int i = 0; i < stored; i++){ - float angT = i == 0 ? 0 : Mathf.randomSeedRange(i + 1, 60f); - float lenT = i == 0 ? 0 : Mathf.randomSeedRange(i + 2, 1f) - 1f; - Draw.rect(stack.item.icon(Item.Icon.large), - x + Angles.trnsx(rotation + 180f + angT, backTrns + lenT), - y + Angles.trnsy(rotation + 180f + angT, backTrns + lenT), - itemSize, itemSize, rotation); - } - } - Draw.reset(); } @@ -360,7 +353,8 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ public void drawStats(){ Draw.color(Color.BLACK, team.color, healthf() + Mathf.absin(Time.time(), healthf() * 5f, 1f - healthf())); Draw.rect(getPowerCellRegion(), x + Angles.trnsx(rotation, mech.cellTrnsY, 0f), y + Angles.trnsy(rotation, mech.cellTrnsY, 0f), rotation - 90); - Draw.color(); + Draw.reset(); + drawBackItems(itemtime, isLocal); } @Override @@ -386,14 +380,14 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ } public void drawName(){ - BitmapFont font = Core.scene.skin.getFont("default-font"); + BitmapFont font = Core.scene.skin.getFont("default"); GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new); final float nameHeight = 11; final float textHeight = 15; boolean ints = font.usesIntegerPositions(); font.setUseIntegerPositions(false); - font.getData().setScale(0.25f / io.anuke.arc.scene.ui.layout.Unit.dp.scl(1f)); + font.getData().setScale(0.25f / UnitScl.dp.scl(1f)); layout.setText(font, name); Draw.color(0f, 0f, 0f, 0.3f); Fill.rect(x, y + nameHeight - layout.height / 2, layout.width + 2, layout.height + 3); @@ -434,7 +428,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ public void drawBuildRequests(){ BuildRequest last = null; for(BuildRequest request : buildQueue()){ - if(request.progress > 0.01f || (buildRequest() == request && (dst(request.x * tilesize, request.y * tilesize) <= placeDistance || state.isEditor()))) continue; + if(request.progress > 0.01f || (buildRequest() == request && request.initialized && (dst(request.x * tilesize, request.y * tilesize) <= placeDistance || state.isEditor()))) continue; if(request.breaking){ Block block = world.ltile(request.x, request.y).block(); @@ -478,8 +472,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ for(int i = 0; i < 4; i++){ Point2 p = Geometry.d8edge[i]; float offset = -Math.max(request.block.size - 1, 0) / 2f * tilesize; - if(i % 2 == 0) - Draw.rect("block-select", request.x * tilesize + request.block.offset() + offset * p.x, request.y * tilesize + request.block.offset() + offset * p.y, i * 90); + Draw.rect("block-select", request.x * tilesize + request.block.offset() + offset * p.x, request.y * tilesize + request.block.offset() + offset * p.y, i * 90); } Draw.color(); @@ -498,6 +491,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ public void update(){ hitTime -= Time.delta(); textFadeTime -= Time.delta() / (60 * 5); + itemtime = Mathf.lerpDelta(itemtime, Mathf.num(item.amount > 0), 0.1f); if(Float.isNaN(x) || Float.isNaN(y)){ velocity.set(0f, 0f); @@ -520,6 +514,10 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ destructTime = 0f; } + boostSound.update(x, y, isBoosting && !isDead() && !mech.flying); + BuildRequest request = buildRequest(); + buildSound.update(request == null ? x : request.x * tilesize, request == null ? y : request.y * tilesize, isBuilding() && (Mathf.within(request.x * tilesize, request.y * tilesize, x, y, placeDistance) || state.isEditor())); + if(isDead()){ isBoosting = false; boostHeat = 0f; @@ -611,7 +609,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ movement.x += xa * speed; } - Vector2 vec = Core.input.mouseWorld(control.input().getMouseX(), control.input().getMouseY()); + Vector2 vec = Core.input.mouseWorld(control.input.getMouseX(), control.input.getMouseY()); pointerX = vec.x; pointerY = vec.y; updateShooting(); @@ -634,7 +632,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ rotation = Mathf.slerpDelta(rotation, mech.flying ? velocity.angle() : movement.angle(), 0.13f * baseLerp); } }else{ - float angle = control.input().mouseAngle(x, y); + float angle = control.input.mouseAngle(x, y); this.rotation = Mathf.slerpDelta(this.rotation, angle, 0.1f * baseLerp); } } @@ -652,7 +650,8 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ } protected void updateTouch(){ - if(Units.invalidateTarget(target, this) && !(target instanceof TileEntity && ((TileEntity)target).damaged() && target.isValid() && target.getTeam() == team && mech.canHeal && dst(target) < getWeapon().bullet.range())){ + if(Units.invalidateTarget(target, this) && + !(target instanceof TileEntity && ((TileEntity)target).damaged() && target.isValid() && target.getTeam() == team && mech.canHeal && dst(target) < getWeapon().bullet.range() && !(((TileEntity)target).block instanceof BuildBlock))){ target = null; } @@ -729,10 +728,10 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ if(target == null){ isShooting = false; if(Core.settings.getBool("autotarget")){ - target = Units.closestTarget(team, x, y, getWeapon().bullet.range(), u -> u.getTeam() != Team.none, u -> u.getTeam() != Team.none); + target = Units.closestTarget(team, x, y, getWeapon().bullet.range(), u -> u.getTeam() != Team.derelict, u -> u.getTeam() != Team.derelict); if(mech.canHeal && target == null){ - target = Geometry.findClosest(x, y, world.indexer.getDamaged(Team.blue)); + target = Geometry.findClosest(x, y, world.indexer.getDamaged(Team.sharded)); if(target != null && dst(target) > getWeapon().bullet.range()){ target = null; }else if(target != null){ @@ -762,8 +761,8 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ } }else if(isShooting()){ - Vector2 vec = Core.input.mouseWorld(control.input().getMouseX(), - control.input().getMouseY()); + Vector2 vec = Core.input.mouseWorld(control.input.getMouseX(), + control.input.getMouseY()); pointerX = vec.x; pointerY = vec.y; @@ -785,7 +784,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{ public void resetNoAdd(){ status.clear(); - team = Team.blue; + team = Team.sharded; item.amount = 0; placeQueue.clear(); dead = true; diff --git a/core/src/io/anuke/mindustry/entities/type/TileEntity.java b/core/src/io/anuke/mindustry/entities/type/TileEntity.java index c7793c5895..2c442a00a4 100644 --- a/core/src/io/anuke/mindustry/entities/type/TileEntity.java +++ b/core/src/io/anuke/mindustry/entities/type/TileEntity.java @@ -12,9 +12,9 @@ import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.impl.BaseEntity; import io.anuke.mindustry.entities.traits.HealthTrait; import io.anuke.mindustry.entities.traits.TargetTrait; +import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.EventType.BlockDestroyEvent; -import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.modules.*; @@ -45,6 +45,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ private boolean dead = false; private boolean sleeping; private float sleepTime; + private @Nullable SoundLoop sound; @Remote(called = Loc.server, unreliable = true) public static void onTileDamage(Tile tile, float health){ @@ -69,6 +70,9 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ x = tile.drawx(); y = tile.drawy(); block = tile.block(); + if(block.idleSound != Sounds.none){ + sound = new SoundLoop(block.idleSound, block.idleSoundVolume); + } health = block.health; timer = new Interval(block.timers); @@ -231,6 +235,13 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ return proximity; } + @Override + public void removed(){ + if(sound != null){ + sound.stop(); + } + } + @Override public void health(float health){ this.health = health; @@ -257,6 +268,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ dead = true; Events.fire(new BlockDestroyEvent(tile)); + block.breakSound.at(tile); block.onDestroyed(tile); world.removeBlock(tile); remove(); @@ -285,6 +297,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ return; //no need to update anymore } + if(sound != null){ + sound.update(x, y, block.shouldIdleSound(tile)); + } + Block previous = block; block.update(tile); if(block == previous && cons != null){ diff --git a/core/src/io/anuke/mindustry/entities/type/Unit.java b/core/src/io/anuke/mindustry/entities/type/Unit.java index b36e8dde83..c3ba24a6b9 100644 --- a/core/src/io/anuke/mindustry/entities/type/Unit.java +++ b/core/src/io/anuke/mindustry/entities/type/Unit.java @@ -1,32 +1,29 @@ package io.anuke.mindustry.entities.type; -import io.anuke.annotations.Annotations.Nullable; -import io.anuke.arc.Core; -import io.anuke.arc.Events; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Geometry; -import io.anuke.arc.math.geom.Vector2; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.content.Blocks; -import io.anuke.mindustry.content.Fx; +import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; -import io.anuke.mindustry.entities.effect.ScorchDecal; -import io.anuke.mindustry.entities.impl.DestructibleEntity; +import io.anuke.mindustry.entities.effect.*; +import io.anuke.mindustry.entities.impl.*; import io.anuke.mindustry.entities.traits.*; -import io.anuke.mindustry.entities.units.Statuses; -import io.anuke.mindustry.game.EventType.UnitDestroyEvent; -import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.game.Teams.TeamData; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.net.Interpolator; +import io.anuke.mindustry.entities.units.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.game.Teams.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.net.Net; +import io.anuke.mindustry.net.*; import io.anuke.mindustry.type.*; -import io.anuke.mindustry.world.Pos; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.Floor; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.blocks.*; import java.io.*; @@ -49,7 +46,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ protected final Statuses status = new Statuses(); protected final ItemStack item = new ItemStack(content.item(0), 0); - protected Team team = Team.blue; + protected Team team = Team.sharded; protected float drownTime, hitTime; @Override @@ -108,6 +105,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ Effects.effect(Fx.explosion, this); Effects.shake(2f, 2f, this); + Sounds.bang.at(this); item.amount = 0; drownTime = 0f; status.clear(); @@ -377,6 +375,40 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ Draw.color(Color.BLACK, team.color, healthf() + Mathf.absin(Time.time(), Math.max(healthf() * 5f, 1f), 1f - healthf())); Draw.rect(getPowerCellRegion(), x, y, rotation - 90); Draw.color(); + + drawBackItems(item.amount > 0 ? 1f : 0f, false); + } + + public void drawBackItems(float itemtime, boolean number){ + //draw back items + if(itemtime > 0.01f && item.item != null){ + float backTrns = 5f; + float size = (itemSize + Mathf.absin(Time.time(), 5f, 1f)) * itemtime; + + Draw.mixcol(Pal.accent, Mathf.absin(Time.time(), 5f, 0.5f)); + Draw.rect(item.item.icon(Item.Icon.large), + x + Angles.trnsx(rotation + 180f, backTrns), + y + Angles.trnsy(rotation + 180f, backTrns), + size, size, rotation); + + Draw.mixcol(); + + Lines.stroke(1f, Pal.accent); + Lines.circle( + x + Angles.trnsx(rotation + 180f, backTrns), + y + Angles.trnsy(rotation + 180f, backTrns), + (3f + Mathf.absin(Time.time(), 5f, 1f)) * itemtime); + + if(number){ + Core.scene.skin.getFont("outline").draw(item.amount + "", + x + Angles.trnsx(rotation + 180f, backTrns), + y + Angles.trnsy(rotation + 180f, backTrns) - 3, + Pal.accent, 0.25f * itemtime / UnitScl.dp.scl(1f), false, Align.center + ); + } + } + + Draw.reset(); } public TextureRegion getPowerCellRegion(){ diff --git a/core/src/io/anuke/mindustry/game/EventType.java b/core/src/io/anuke/mindustry/game/EventType.java index 8bc340ce2e..c9da8c9c57 100644 --- a/core/src/io/anuke/mindustry/game/EventType.java +++ b/core/src/io/anuke/mindustry/game/EventType.java @@ -48,6 +48,36 @@ public class EventType{ } + /** Called when the player places a line, mobile or desktop.*/ + public static class LineConfirmEvent{ + + } + + /** Called when a turret recieves ammo, but only when the tutorial is active! */ + public static class TurretAmmoDeliverEvent{ + + } + + /** Called when a core recieves ammo, but only when the tutorial is active! */ + public static class CoreItemDeliverEvent{ + + } + + /** Called when the player opens info for a specific block.*/ + public static class BlockInfoEvent{ + + } + + /** Called when a player withdraws items from a block. Tutorial only.*/ + public static class WithdrawEvent{ + + } + + /** Called when a player deposits items to a block.*/ + public static class DepositEvent{ + + } + public static class GameOverEvent{ public final Team winner; diff --git a/core/src/io/anuke/mindustry/game/Gamemode.java b/core/src/io/anuke/mindustry/game/Gamemode.java index ed492b6afb..4c8e42e1f1 100644 --- a/core/src/io/anuke/mindustry/game/Gamemode.java +++ b/core/src/io/anuke/mindustry/game/Gamemode.java @@ -22,18 +22,18 @@ public enum Gamemode{ attack(rules -> { rules.enemyCheat = true; rules.unitDrops = true; - rules.waves = false; rules.attackMode = true; + rules.waves = true; }, map -> map.teams.contains(waveTeam.ordinal())), pvp(rules -> { rules.pvp = true; rules.enemyCoreBuildRadius = 600f; rules.respawnTime = 60 * 10; - rules.buildCostMultiplier = 0.5f; - rules.buildSpeedMultiplier = 2f; + rules.buildCostMultiplier = 1f; + rules.buildSpeedMultiplier = 1f; rules.playerDamageMultiplier = 0.33f; rules.playerHealthMultiplier = 0.5f; - rules.unitBuildSpeedMultiplier = 3f; + rules.unitBuildSpeedMultiplier = 2f; rules.unitHealthMultiplier = 3f; rules.attackMode = true; }, map -> map.teams.size > 1), diff --git a/core/src/io/anuke/mindustry/game/GlobalData.java b/core/src/io/anuke/mindustry/game/GlobalData.java index f472325bee..a905f09d39 100644 --- a/core/src/io/anuke/mindustry/game/GlobalData.java +++ b/core/src/io/anuke/mindustry/game/GlobalData.java @@ -1,15 +1,13 @@ package io.anuke.mindustry.game; -import io.anuke.arc.Core; -import io.anuke.arc.Events; +import io.anuke.arc.*; import io.anuke.arc.collection.*; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.content.Items; -import io.anuke.mindustry.game.EventType.UnlockEvent; +import io.anuke.mindustry.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.type.*; -import static io.anuke.mindustry.Vars.content; -import static io.anuke.mindustry.Vars.state; +import static io.anuke.mindustry.Vars.*; /** Stores player unlocks. Clientside only. */ public class GlobalData{ @@ -40,7 +38,9 @@ public class GlobalData{ } public void addItem(Item item, int amount){ - unlockContent(item); + if(amount > 0){ + unlockContent(item); + } modified = true; items.getAndIncrement(item, 0, amount); state.stats.itemsDelivered.getAndIncrement(item, 0, amount); diff --git a/core/src/io/anuke/mindustry/game/MusicControl.java b/core/src/io/anuke/mindustry/game/MusicControl.java new file mode 100644 index 0000000000..c2364ee8d3 --- /dev/null +++ b/core/src/io/anuke/mindustry/game/MusicControl.java @@ -0,0 +1,163 @@ +package io.anuke.mindustry.game; + +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.audio.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; + +import static io.anuke.mindustry.Vars.*; + +/** Controls playback of multiple music tracks.*/ +public class MusicControl{ + private static final float finTime = 120f, foutTime = 120f, musicInterval = 60 * 60 * 3f, musicChance = 0.3f, musicWaveChance = 0.24f; + + /** normal, ambient music, plays at any time */ + public final Array ambientMusic = Array.with(Musics.game1, Musics.game3, Musics.game4, Musics.game6); + /** darker music, used in times of conflict */ + public final Array darkMusic = Array.with(Musics.game2, Musics.game5, Musics.game7); + /** all music, both dark and ambient */ + public final Array allMusic = Array.withArrays(ambientMusic, darkMusic); + + private Music lastRandomPlayed; + private Interval timer = new Interval(); + private @Nullable Music current; + private float fade; + private boolean silenced; + + public MusicControl(){ + //only run music 10 seconds after a wave spawns + Events.on(WaveEvent.class, e -> Time.run(60f * 10f, () -> { + if(Mathf.chance(musicWaveChance)){ + playRandom(); + } + })); + } + + /** Update and play the right music track.*/ + public void update(){ + if(state.is(State.menu)){ + silenced = false; + if(ui.deploy.isShown()){ + play(Musics.launch); + }else if(ui.editor.isShown()){ + play(Musics.editor); + }else{ + play(Musics.menu); + } + }else if(state.rules.editor){ + silenced = false; + play(Musics.editor); + }else{ + //this just fades out the last track to make way for ingame music + silence(); + + //play music at intervals + if(timer.get(musicInterval)){ + //chance to play it per interval + if(Mathf.chance(musicChance)){ + playRandom(); + } + } + } + } + + /** Plays a random track.*/ + private void playRandom(){ + if(isDark()){ + playOnce(darkMusic.random(lastRandomPlayed)); + }else{ + playOnce(ambientMusic.random(lastRandomPlayed)); + } + } + + /** Whether to play dark music.*/ + private boolean isDark(){ + if(!state.teams.get(player.getTeam()).cores.isEmpty() && state.teams.get(player.getTeam()).cores.first().entity.healthf() < 0.85f){ + //core damaged -> dark + return true; + } + + //it may be dark based on wave + if(Mathf.chance((float)(Math.log10((state.wave - 17f)/19f) + 1) / 4f)){ + return true; + } + + //dark based on enemies + return Mathf.chance(state.enemies() / 70f); + } + + /** Plays and fades in a music track. This must be called every frame. + * If something is already playing, fades out that track and fades in this new music.*/ + private void play(@Nullable Music music){ + //update volume of current track + if(current != null){ + current.setVolume(fade * Core.settings.getInt("musicvol") / 100f); + } + + //do not update once the track has faded out completely, just stop + if(silenced){ + return; + } + + if(current == null && music != null){ + //begin playing in a new track + current = music; + current.setLooping(true); + current.setVolume(fade = 0f); + current.play(); + silenced = false; + }else if(current == music && music != null){ + //fade in the playing track + fade = Mathf.clamp(fade + Time.delta()/finTime); + }else if(current != null){ + //fade out the current track + fade = Mathf.clamp(fade - Time.delta()/foutTime); + + if(fade <= 0.01f){ + //stop current track when it hits 0 volume + current.stop(); + current = null; + silenced = true; + if(music != null){ + //play newly scheduled track + current = music; + current.setVolume(fade = 0f); + current.setLooping(true); + current.play(); + silenced = false; + } + } + } + } + + /** Plays a music track once and only once. If something is already playing, does nothing.*/ + private void playOnce(@NonNull Music music){ + if(current != null) return; //do not interrupt already-playing tracks + + //save last random track played to prevent duplicates + lastRandomPlayed = music; + + //set fade to 1 and play it, stopping the current when it's done + fade = 1f; + current = music; + current.setVolume(1f); + current.setLooping(false); + current.setCompletionListener(m -> { + if(current == m){ + current = null; + fade = 0f; + } + }); + current.play(); + } + + /** Fades out the current track, unless it has already been silenced. */ + private void silence(){ + play(null); + } +} diff --git a/core/src/io/anuke/mindustry/game/Rules.java b/core/src/io/anuke/mindustry/game/Rules.java index a3ee87615b..014a918904 100644 --- a/core/src/io/anuke/mindustry/game/Rules.java +++ b/core/src/io/anuke/mindustry/game/Rules.java @@ -65,8 +65,10 @@ 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; /** Starting items put in cores */ - public Array loadout = Array.with(ItemStack.with(Items.copper, 200)); + public Array loadout = Array.with(ItemStack.with(Items.copper, 100)); /** Copies this ruleset exactly. Not very efficient at all, do not use often. */ public Rules copy(){ diff --git a/core/src/io/anuke/mindustry/game/Saves.java b/core/src/io/anuke/mindustry/game/Saves.java index a307a315ec..86873d0a3b 100644 --- a/core/src/io/anuke/mindustry/game/Saves.java +++ b/core/src/io/anuke/mindustry/game/Saves.java @@ -72,7 +72,7 @@ public class Saves{ lastTimestamp = Time.millis(); } - if(!state.is(State.menu) && !state.gameOver && current != null && current.isAutosave()){ + if(!state.is(State.menu) && !state.gameOver && current != null && current.isAutosave() && !state.rules.tutorial){ time += Time.delta(); if(time > Core.settings.getInt("saveinterval") * 60){ saving = true; diff --git a/core/src/io/anuke/mindustry/game/SoundLoop.java b/core/src/io/anuke/mindustry/game/SoundLoop.java new file mode 100644 index 0000000000..6dc6f2cae8 --- /dev/null +++ b/core/src/io/anuke/mindustry/game/SoundLoop.java @@ -0,0 +1,50 @@ +package io.anuke.mindustry.game; + +import io.anuke.arc.audio.*; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; + +/** A simple class for playing a looping sound at a position.*/ +public class SoundLoop{ + private static final float fadeSpeed = 0.05f; + + private final Sound sound; + private long id = -1; + private float volume, baseVolume; + + public SoundLoop(Sound sound, float baseVolume){ + this.sound = sound; + this.baseVolume = baseVolume; + } + + public void update(float x, float y, boolean play){ + if(baseVolume < 0) return; + + if(id < 0){ + if(play){ + id = sound.loop(sound.calcVolume(x, y) * volume * baseVolume, 1f, sound.calcPan(x, y)); + } + }else{ + //fade the sound in or out + if(play){ + volume = Mathf.clamp(volume + fadeSpeed * Time.delta()); + }else{ + volume = Mathf.clamp(volume - fadeSpeed * Time.delta()); + if(volume <= 0.001f){ + sound.stop(id); + id = -1; + return; + } + } + sound.setPan(id, sound.calcPan(x, y), sound.calcVolume(x, y) * volume * baseVolume); + } + } + + public void stop(){ + if(id != -1){ + sound.stop(id); + id = -1; + volume = baseVolume = -1; + } + } +} diff --git a/core/src/io/anuke/mindustry/game/Team.java b/core/src/io/anuke/mindustry/game/Team.java index a5193e48b2..b4cb74c02c 100644 --- a/core/src/io/anuke/mindustry/game/Team.java +++ b/core/src/io/anuke/mindustry/game/Team.java @@ -2,14 +2,15 @@ package io.anuke.mindustry.game; import io.anuke.arc.Core; import io.anuke.arc.graphics.Color; +import io.anuke.mindustry.graphics.*; public enum Team{ - none(Color.valueOf("4d4e58")), - blue(Color.valueOf("4169e1")), - red(Color.valueOf("e84737")), - green(Color.valueOf("1dc645")), - purple(Color.valueOf("ba5bd9")), - orange(Color.valueOf("e8c66a")); + derelict(Color.valueOf("4d4e58")), + sharded(Pal.accent), + crux(Color.valueOf("e82d2d")), + green(Color.valueOf("4dd98b")), + purple(Color.valueOf("9a4bdf")), + blue(Color.ROYAL.cpy()); public final static Team[] all = values(); public final Color color; diff --git a/core/src/io/anuke/mindustry/game/Tutorial.java b/core/src/io/anuke/mindustry/game/Tutorial.java new file mode 100644 index 0000000000..eb39c55eca --- /dev/null +++ b/core/src/io/anuke/mindustry/game/Tutorial.java @@ -0,0 +1,296 @@ +package io.anuke.mindustry.game; + +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.world.*; + +import static io.anuke.mindustry.Vars.*; + +/** Handles tutorial state. */ +public class Tutorial{ + private static final int mineCopper = 18; + private static final int blocksToBreak = 3, blockOffset = -6; + + private ObjectSet events = new ObjectSet<>(); + private ObjectIntMap blocksPlaced = new ObjectIntMap<>(); + private int sentence; + public TutorialStage stage = TutorialStage.values()[0]; + + public Tutorial(){ + Events.on(BlockBuildEndEvent.class, event -> { + if(!event.breaking){ + blocksPlaced.getAndIncrement(event.tile.block(), 0, 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")); + } + + /** 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 -> Strings.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( + line -> Strings.format(line, Math.min(placed(Blocks.conveyor), 2), 2), + () -> 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.get(defaultTeam).cores.first().entity.items.add(Items.copper, 10); + } + }, + deposit(() -> event("deposit")), + waves(() -> state.wave > 2 && state.enemies() <= 0 && !world.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 + Core.settings.put("playedtutorial", true); + Core.settings.save(); + } + + void draw(){ + outline("waves"); + } + },; + + protected final String line = Core.bundle.has("tutorial." + name() + ".mobile") && mobile ? "tutorial." + name() + ".mobile" : "tutorial." + name(); + protected final Function text; + protected final Array sentences; + protected final BooleanProvider done; + + TutorialStage(Function text, BooleanProvider done){ + this.text = text; + this.done = done; + this.sentences = Array.select(Core.bundle.get(line).split("\n"), s -> !s.isEmpty()); + } + + TutorialStage(BooleanProvider done){ + this(line -> line, done); + } + + /** displayed tutorial stage text.*/ + public String text(){ + String line = sentences.get(control.tutorial.sentence); + return line.contains("{") ? text.get(line) : line; + } + + /** 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(){ + Tile core = state.teams.get(defaultTeam).cores.first(); + for(int i = 0; i < blocksToBreak; i++){ + world.removeBlock(world.ltile(core.x + blockOffset, core.y + i)); + world.tile(core.x + blockOffset, core.y + i).setBlock(Blocks.scrapWall, defaultTeam); + } + } + + static boolean blocksBroken(){ + Tile core = state.teams.get(defaultTeam).cores.first(); + + for(int i = 0; i < blocksToBreak; i++){ + if(world.tile(core.x + blockOffset, core.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.teams.get(defaultTeam).cores.isEmpty() ? 0 : state.teams.get(defaultTeam).cores.first().entity.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, UnitScl.dp.scl(4f)); + Lines.stroke(UnitScl.dp.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, UnitScl.dp.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 = UnitScl.dp.scl(40f); + float fs2 = UnitScl.dp.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() - UnitScl.dp.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/io/anuke/mindustry/graphics/Bloom.java b/core/src/io/anuke/mindustry/graphics/Bloom.java index 734992d8c0..91be9c210e 100644 --- a/core/src/io/anuke/mindustry/graphics/Bloom.java +++ b/core/src/io/anuke/mindustry/graphics/Bloom.java @@ -383,18 +383,21 @@ public class Bloom{ * Call this when application is exiting. */ public void dispose(){ - if(disposeFBO) - frameBuffer.dispose(); + try{ + if(disposeFBO) + frameBuffer.dispose(); - fullScreenQuad.dispose(); + fullScreenQuad.dispose(); - pingPongBuffer1.dispose(); - pingPongBuffer2.dispose(); + pingPongBuffer1.dispose(); + pingPongBuffer2.dispose(); - blurShader.dispose(); - bloomShader.dispose(); - tresholdShader.dispose(); + blurShader.dispose(); + bloomShader.dispose(); + tresholdShader.dispose(); + }catch(Exception ignored){ + } } private static Mesh createFullScreenQuad(){ diff --git a/core/src/io/anuke/mindustry/graphics/Drawf.java b/core/src/io/anuke/mindustry/graphics/Drawf.java new file mode 100644 index 0000000000..9881185226 --- /dev/null +++ b/core/src/io/anuke/mindustry/graphics/Drawf.java @@ -0,0 +1,88 @@ +package io.anuke.mindustry.graphics; + +import io.anuke.arc.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; + +public class Drawf{ + + public static void dashCircle(float x, float y, float rad, Color color){ + Lines.stroke(3f, Pal.gray); + Lines.dashCircle(x, y, rad); + Lines.stroke(1f, color); + Lines.dashCircle(x, y, rad); + Draw.reset(); + } + + public static void circles(float x, float y, float rad){ + circles(x, y, rad, Pal.accent); + } + + public static void circles(float x, float y, float rad, Color color){ + Lines.stroke(3f, Pal.gray); + Lines.circle(x, y, rad); + Lines.stroke(1f, color); + Lines.circle(x, y, rad); + Draw.reset(); + } + + public static void square(float x, float y, float radius, Color color){ + Lines.stroke(3f, Pal.gray); + Lines.square(x, y, radius + 1f, 45); + Lines.stroke(1f, color); + Lines.square(x, y, radius + 1f, 45); + Draw.reset(); + } + + public static void square(float x, float y, float radius){ + square(x, y, radius, Pal.accent); + } + + /* + public static void square(float x, float y, float radius){ + Lines.stroke(1f, Pal.gray); + Lines.square(x, y - 1f, radius + 1f, 45); + Lines.stroke(1f, Pal.accent); + Lines.square(x, y, radius + 1f, 45); + Draw.reset(); + }*/ + + public static void arrow(float x, float y, float x2, float y2, float length, float radius){ + float angle = Angles.angle(x, y, x2, y2); + float space = 2f; + Tmp.v1.set(x2, y2).sub(x, y).limit(length); + float vx = Tmp.v1.x + x, vy = Tmp.v1.y + y; + + Draw.color(Pal.gray); + Fill.poly(vx, vy, 3, radius + space, angle); + Draw.color(Pal.accent); + Fill.poly(vx, vy, 3, radius, angle); + Draw.color(); + } + + public static void laser(TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float scale){ + laser(line, edge, x, y, x2, y2, Mathf.angle(x2 - x, y2 - y), scale); + } + + public static void laser(TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2){ + laser(line, edge, x, y, x2, y2, Mathf.angle(x2 - x, y2 - y), 1f); + } + + public static void laser(TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float rotation, float scale){ + Tmp.v1.trns(rotation, 8f * scale * Draw.scl); + + Draw.rect(edge, x, y, edge.getWidth() * scale * Draw.scl, edge.getHeight() * scale * Draw.scl, rotation + 180); + Draw.rect(edge, x2, y2, edge.getWidth() * scale * Draw.scl, edge.getHeight() * scale * Draw.scl, rotation); + + Lines.stroke(12f * scale); + Lines.line(line, x + Tmp.v1.x, y + Tmp.v1.y, x2 - Tmp.v1.x, y2 - Tmp.v1.y, CapStyle.none, 0f); + Lines.stroke(1f); + } + + public static void tri(float x, float y, float width, float length, float rotation){ + float oy = 17f / 63f * length; + Draw.rect(Core.atlas.find("shape-3"), x, y - oy + length / 2f, width, length, width / 2f, oy, rotation - 90); + } +} diff --git a/core/src/io/anuke/mindustry/graphics/MenuRenderer.java b/core/src/io/anuke/mindustry/graphics/MenuRenderer.java index fb5831c903..240f7e584f 100644 --- a/core/src/io/anuke/mindustry/graphics/MenuRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/MenuRenderer.java @@ -8,7 +8,7 @@ import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.graphics.glutils.FrameBuffer; import io.anuke.arc.math.*; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.arc.util.*; import io.anuke.arc.util.noise.RidgedPerlin; import io.anuke.arc.util.noise.Simplex; @@ -220,7 +220,7 @@ public class MenuRenderer implements Disposable{ public void render(){ time += Time.delta(); - float scaling = Math.max(Unit.dp.scl(4f), Math.max(Core.graphics.getWidth() / ((width - 1f) * tilesize), Core.graphics.getHeight() / ((height - 1f) * tilesize))); + float scaling = Math.max(UnitScl.dp.scl(4f), Math.max(Core.graphics.getWidth() / ((width - 1f) * tilesize), Core.graphics.getHeight() / ((height - 1f) * tilesize))); camera.position.set(width * tilesize / 2f, height * tilesize / 2f); camera.resize(Core.graphics.getWidth() / scaling, Core.graphics.getHeight() / scaling); @@ -232,6 +232,7 @@ public class MenuRenderer implements Disposable{ batch.beginDraw(); batch.drawCache(cacheFloor); batch.endDraw(); + Draw.color(); Draw.rect(Draw.wrap(shadows.getTexture()), width * tilesize / 2f - 4f, height * tilesize / 2f - 4f, width * tilesize, -height * tilesize); diff --git a/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java b/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java index 85b390d939..754743318e 100644 --- a/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/MinimapRenderer.java @@ -7,6 +7,7 @@ import io.anuke.arc.graphics.Pixmap.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; @@ -77,7 +78,7 @@ public class MinimapRenderer implements Disposable{ for(Unit unit : units){ float rx = (unit.x - rect.x) / rect.width * w, ry = (unit.y - rect.y) / rect.width * h; Draw.color(unit.getTeam().color); - Fill.rect(x + rx, y + ry, io.anuke.arc.scene.ui.layout.Unit.dp.scl(baseSize / 2f), io.anuke.arc.scene.ui.layout.Unit.dp.scl(baseSize / 2f)); + Fill.rect(x + rx, y + ry, UnitScl.dp.scl(baseSize / 2f), UnitScl.dp.scl(baseSize / 2f)); } Draw.color(); diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java index bccb17ebb7..fda9f63e52 100644 --- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java @@ -27,7 +27,7 @@ public class OverlayRenderer{ private float buildFadeTime; public void drawBottom(){ - InputHandler input = control.input(); + InputHandler input = control.input; if(!input.isDrawing() || player.isDead()) return; @@ -64,7 +64,7 @@ public class OverlayRenderer{ if(player.isDead()) return; //dead players don't draw - InputHandler input = control.input(); + InputHandler input = control.input; //draw config selected block if(input.frag.config.isShown()){ @@ -85,9 +85,9 @@ public class OverlayRenderer{ float dst = Mathf.dst(player.x, player.y, core.drawx(), core.drawy()); if(dst < state.rules.enemyCoreBuildRadius * 1.5f){ Draw.color(Color.DARK_GRAY); - Lines.poly(core.drawx(), core.drawy() - 2, 200, state.rules.enemyCoreBuildRadius); + Lines.circle(core.drawx(), core.drawy() - 2, state.rules.enemyCoreBuildRadius); Draw.color(Pal.accent, enemy.color, 0.5f + Mathf.absin(Time.time(), 10f, 0.5f)); - Lines.poly(core.drawx(), core.drawy(), 200, state.rules.enemyCoreBuildRadius); + Lines.circle(core.drawx(), core.drawy(), state.rules.enemyCoreBuildRadius); } } } @@ -105,7 +105,7 @@ public class OverlayRenderer{ Draw.reset(); - //draw selected block bars and info + //draw selected block if(input.block == null && !Core.scene.hasMouse()){ Vector2 vec = Core.input.mouseWorld(input.getMouseX(), input.getMouseY()); Tile tile = world.ltileWorld(vec.x, vec.y); @@ -115,6 +115,7 @@ public class OverlayRenderer{ } } + //draw selection overlay when dropping item if(input.isDroppingItem()){ Vector2 v = Core.input.mouseWorld(input.getMouseX(), input.getMouseY()); float size = 8; @@ -125,9 +126,12 @@ public class OverlayRenderer{ Tile tile = world.ltileWorld(v.x, v.y); if(tile != null && tile.interactable(player.getTeam()) && tile.block().acceptStack(player.item().item, player.item().amount, tile, player) > 0){ - Draw.color(Pal.place); - Lines.square(tile.drawx(), tile.drawy(), tile.block().size * tilesize / 2f + 1 + Mathf.absin(Time.time(), 5f, 1f)); - Draw.color(); + Lines.stroke(3f, Pal.gray); + Lines.square(tile.drawx(), tile.drawy(), tile.block().size * tilesize / 2f + 3 + Mathf.absin(Time.time(), 5f, 1f)); + Lines.stroke(1f, Pal.place); + Lines.square(tile.drawx(), tile.drawy(), tile.block().size * tilesize / 2f + 2 + Mathf.absin(Time.time(), 5f, 1f)); + Draw.reset(); + } } } diff --git a/core/src/io/anuke/mindustry/graphics/Pal.java b/core/src/io/anuke/mindustry/graphics/Pal.java index 40c4867abc..e24b04ed69 100644 --- a/core/src/io/anuke/mindustry/graphics/Pal.java +++ b/core/src/io/anuke/mindustry/graphics/Pal.java @@ -24,6 +24,8 @@ public class Pal{ lightFlame = Color.valueOf("ffdd55"), darkFlame = Color.valueOf("db401c"), + power2 = Color.valueOf("ff9f6c"), + lightPyraFlame = Color.valueOf("ffb855"), darkPyraFlame = Color.valueOf("db661c"), diff --git a/core/src/io/anuke/mindustry/graphics/Shaders.java b/core/src/io/anuke/mindustry/graphics/Shaders.java index e253818f1f..4aa6f02754 100644 --- a/core/src/io/anuke/mindustry/graphics/Shaders.java +++ b/core/src/io/anuke/mindustry/graphics/Shaders.java @@ -4,7 +4,7 @@ import io.anuke.arc.Core; import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.glutils.Shader; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.arc.util.Time; public class Shaders{ @@ -41,7 +41,7 @@ public class Shaders{ setUniformf("u_resolution", Core.graphics.getWidth(), Core.graphics.getHeight()); setUniformi("u_time", (int)(time += Core.graphics.getDeltaTime() * 60f)); setUniformf("u_uv", Core.atlas.white().getU(), Core.atlas.white().getV()); - setUniformf("u_scl", Unit.dp.scl(1f)); + setUniformf("u_scl", UnitScl.dp.scl(1f)); setUniformf("u_uv2", Core.atlas.white().getU2(), Core.atlas.white().getV2()); } } @@ -117,8 +117,8 @@ public class Shaders{ @Override public void apply(){ - setUniformf("u_dp", Unit.dp.scl(1f)); - setUniformf("u_time", Time.time() / Unit.dp.scl(1f)); + setUniformf("u_dp", UnitScl.dp.scl(1f)); + setUniformf("u_time", Time.time() / UnitScl.dp.scl(1f)); setUniformf("u_offset", Core.camera.position.x - Core.camera.width / 2, Core.camera.position.y - Core.camera.height / 2); diff --git a/core/src/io/anuke/mindustry/graphics/Shapes.java b/core/src/io/anuke/mindustry/graphics/Shapes.java deleted file mode 100644 index 3ab13f8c74..0000000000 --- a/core/src/io/anuke/mindustry/graphics/Shapes.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.anuke.mindustry.graphics; - -import io.anuke.arc.Core; -import io.anuke.arc.graphics.g2d.*; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Tmp; - -public class Shapes{ - - public static void laser(TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float scale){ - laser(line, edge, x, y, x2, y2, Mathf.angle(x2 - x, y2 - y), scale); - } - - public static void laser(TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2){ - laser(line, edge, x, y, x2, y2, Mathf.angle(x2 - x, y2 - y), 1f); - } - - public static void laser(TextureRegion line, TextureRegion edge, float x, float y, float x2, float y2, float rotation, float scale){ - Tmp.v1.trns(rotation, 8f * scale * Draw.scl); - - Draw.rect(edge, x, y, edge.getWidth() * scale * Draw.scl, edge.getHeight() * scale * Draw.scl, rotation + 180); - Draw.rect(edge, x2, y2, edge.getWidth() * scale * Draw.scl, edge.getHeight() * scale * Draw.scl, rotation); - - Lines.stroke(12f * scale); - Lines.line(line, x + Tmp.v1.x, y + Tmp.v1.y, x2 - Tmp.v1.x, y2 - Tmp.v1.y, CapStyle.none, 0f); - Lines.stroke(1f); - } - - public static void tri(float x, float y, float width, float length, float rotation){ - float oy = 17f / 63f * length; - Draw.rect(Core.atlas.find("shape-3"), x, y - oy + length / 2f, width, length, width / 2f, oy, rotation - 90); - } -} diff --git a/core/src/io/anuke/mindustry/input/Binding.java b/core/src/io/anuke/mindustry/input/Binding.java index 8b2fd227bf..a2953a0dea 100644 --- a/core/src/io/anuke/mindustry/input/Binding.java +++ b/core/src/io/anuke/mindustry/input/Binding.java @@ -16,7 +16,7 @@ public enum Binding implements KeyBind{ diagonal_placement(KeyCode.CONTROL_LEFT), pick(KeyCode.MOUSE_MIDDLE), dash(KeyCode.SHIFT_LEFT), - gridMode(KeyCode.GRAVE), + gridMode(KeyCode.BACKTICK), gridModeShift(KeyCode.ALT_LEFT), zoom_hold(KeyCode.CONTROL_LEFT, "view"), zoom(new Axis(KeyCode.SCROLL)), diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index 87b8a26a32..ae574d906f 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -1,22 +1,20 @@ package io.anuke.mindustry.input; -import io.anuke.arc.Core; -import io.anuke.arc.Graphics.Cursor; -import io.anuke.arc.Graphics.Cursor.SystemCursor; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.Lines; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Geometry; -import io.anuke.arc.math.geom.Point2; -import io.anuke.arc.scene.ui.TextField; -import io.anuke.mindustry.content.Blocks; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.input.PlaceUtils.NormalizeDrawResult; -import io.anuke.mindustry.input.PlaceUtils.NormalizeResult; +import io.anuke.arc.*; +import io.anuke.arc.Graphics.*; +import io.anuke.arc.Graphics.Cursor.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.input.PlaceUtils.*; import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.*; import static io.anuke.arc.Core.scene; import static io.anuke.mindustry.Vars.*; @@ -41,6 +39,7 @@ public class DesktopInput extends InputHandler{ block.getPlaceDraw(placeDraw, rotation, prevX, prevY, prevRotation); Draw.color(); + Draw.mixcol(Pal.accent, 0.12f + Mathf.absin(Time.time(), 8f, 0.35f)); Draw.rect(placeDraw.region, x * tilesize + block.offset(), y * tilesize + block.offset(), placeDraw.region.getWidth() * selectScale * Draw.scl * placeDraw.scalex, placeDraw.region.getHeight() * selectScale * Draw.scl * placeDraw.scaley, @@ -54,6 +53,7 @@ public class DesktopInput extends InputHandler{ Draw.rect("block-select", x * tilesize + block.offset() + offset * p.x, y * tilesize + block.offset() + offset * p.y, i * 90); } Draw.color(); + Draw.mixcol(); }else{ Draw.color(Pal.removeBack); Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset() - 1, block.size * tilesize / 2f - 1); @@ -243,6 +243,7 @@ public class DesktopInput extends InputHandler{ rotation = l.rotation; tryPlaceBlock(l.x, l.y); }); + Events.fire(new LineConfirmEvent()); }else if(mode == breaking){ //touch up while breaking, break everything in selection NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, false, maxLength); for(int x = 0; x <= Math.abs(result.x2 - result.x); x++){ diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index fae86625e8..6ed371a7ec 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -1,34 +1,28 @@ package io.anuke.mindustry.input; -import io.anuke.annotations.Annotations.Loc; -import io.anuke.annotations.Annotations.Remote; -import io.anuke.arc.Core; -import io.anuke.arc.collection.Array; -import io.anuke.arc.function.Consumer; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.input.InputProcessor; -import io.anuke.arc.math.Angles; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Point2; -import io.anuke.arc.math.geom.Vector2; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.util.Time; -import io.anuke.arc.util.Tmp; -import io.anuke.mindustry.content.Blocks; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.effect.ItemTransfer; -import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest; -import io.anuke.mindustry.entities.type.Player; -import io.anuke.mindustry.gen.Call; -import io.anuke.mindustry.graphics.Pal; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.input.*; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.effect.*; +import io.anuke.mindustry.entities.traits.BuilderTrait.*; +import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.net.ValidateException; -import io.anuke.mindustry.type.Item; -import io.anuke.mindustry.type.ItemStack; -import io.anuke.mindustry.ui.fragments.OverlayFragment; +import io.anuke.mindustry.net.*; +import io.anuke.mindustry.type.*; +import io.anuke.mindustry.ui.fragments.*; import io.anuke.mindustry.world.*; import static io.anuke.mindustry.Vars.*; @@ -83,6 +77,8 @@ public abstract class InputHandler implements InputProcessor{ int[] remaining = {accepted, accepted}; Block block = tile.block(); + Events.fire(new DepositEvent()); + for(int i = 0; i < sent; i++){ boolean end = i == sent - 1; Time.run(i * 3, () -> { @@ -164,6 +160,7 @@ public abstract class InputHandler implements InputProcessor{ if(((!frag.config.isShown() && tile.block().shouldShowConfigure(tile, player)) //if the config fragment is hidden, show //alternatively, the current selected block can 'agree' to switch config tiles || (frag.config.isShown() && frag.config.getSelectedTile().block().onConfigureTileTapped(frag.config.getSelectedTile(), tile)))){ + Sounds.click.at(tile); frag.config.showConfig(tile); } //otherwise... diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index 0bdbbbc7b3..138a7120eb 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -1,34 +1,25 @@ package io.anuke.mindustry.input; -import io.anuke.arc.Core; -import io.anuke.arc.collection.Array; -import io.anuke.arc.function.BooleanProvider; -import io.anuke.arc.graphics.Color; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; -import io.anuke.arc.input.GestureDetector; -import io.anuke.arc.input.GestureDetector.GestureListener; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.math.Interpolation; -import io.anuke.arc.math.Mathf; +import io.anuke.arc.input.*; +import io.anuke.arc.input.GestureDetector.*; +import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; -import io.anuke.arc.scene.actions.Actions; -import io.anuke.arc.scene.event.Touchable; -import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.content.Blocks; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.Units; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.traits.BuilderTrait.*; -import io.anuke.mindustry.entities.traits.TargetTrait; -import io.anuke.mindustry.entities.type.TileEntity; -import io.anuke.mindustry.entities.type.Unit; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.input.PlaceUtils.NormalizeDrawResult; -import io.anuke.mindustry.input.PlaceUtils.NormalizeResult; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.entities.traits.*; +import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.input.PlaceUtils.*; +import io.anuke.mindustry.world.*; import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.input.PlaceMode.*; @@ -38,7 +29,7 @@ public class MobileInput extends InputHandler implements GestureListener{ private static final float maxPanSpeed = 1.3f; private static Rectangle r1 = new Rectangle(), r2 = new Rectangle(); /** Distance to edge of screen to start panning. */ - private final float edgePan = io.anuke.arc.scene.ui.layout.Unit.dp.scl(60f); + private final float edgePan = UnitScl.dp.scl(60f); //gesture data private Vector2 vector = new Vector2(); @@ -155,7 +146,6 @@ public class MobileInput extends InputHandler implements GestureListener{ return req; } }else{ - r1.setSize(other.block().size * tilesize); r1.setCenter(other.worldx() + other.block().offset(), other.worldy() + other.block().offset()); @@ -172,24 +162,6 @@ public class MobileInput extends InputHandler implements GestureListener{ removals.add(request); } - void showGuide(String type, BooleanProvider done){ - if(!Core.settings.getBool(type, false)){ - Core.scene.table("guideDim", t -> { - t.margin(10f); - t.touchable(Touchable.disabled); - t.top().table("button", s -> s.add("$" + type).growX().wrap().labelAlign(Align.center, Align.center)).growX(); - t.update(() -> { - if((done.get() || state.is(State.menu)) && t.getUserObject() == null){ - t.actions(Actions.delay(1f), Actions.fadeOut(1f, Interpolation.fade), Actions.remove()); - t.setUserObject("ha"); - } - }); - }); - Core.settings.put(type, true); - data.modified(); - } - } - boolean isLinePlacing(){ return mode == placing && lineMode && Mathf.dst(lineStartX * tilesize, lineStartY * tilesize, Core.input.mouseWorld().x, Core.input.mouseWorld().y) >= 3 * tilesize; } @@ -215,13 +187,13 @@ public class MobileInput extends InputHandler implements GestureListener{ float offset = request.block.offset(); TextureRegion region = placeDraw.region; - Draw.mixcol(Pal.accent, Mathf.clamp((1f - request.scale) / 0.5f)); + Draw.mixcol(Pal.accent, Mathf.clamp((1f - request.scale) / 0.5f + 0.12f + Mathf.absin(Time.time(), 8f, 0.35f))); Draw.tint(Color.WHITE, Pal.breakInvalid, request.redness); Draw.rect(region, tile.worldx() + offset, tile.worldy() + offset, - region.getWidth() * request.scale * Draw.scl * placeDraw.scalex, - region.getHeight() * request.scale * Draw.scl * placeDraw.scaley, - request.block.rotate ? placeDraw.rotation * 90 : 0); + region.getWidth() * request.scale * Draw.scl * placeDraw.scalex, + region.getHeight() * request.scale * Draw.scl * placeDraw.scaley, + request.block.rotate ? placeDraw.rotation * 90 : 0); Draw.mixcol(Pal.accent, 1f); for(int i = 0; i < 4; i++){ @@ -248,7 +220,7 @@ public class MobileInput extends InputHandler implements GestureListener{ /** Draws a placement icon for a specific block. */ void drawPlace(int x, int y, Block block, int rotation, int prevX, int prevY, int prevRotation){ - if(validPlace(x, y, block, rotation)){ + if(validPlace(x, y, block, rotation) && !checkOverlapPlacement(x, y, block)){ block.getPlaceDraw(placeDraw, rotation, prevX, prevY, prevRotation); Draw.color(); @@ -282,10 +254,7 @@ public class MobileInput extends InputHandler implements GestureListener{ table.addImageButton("icon-break-small", "clear-toggle-partial", iconsizesmall, () -> { mode = mode == breaking ? block == null ? none : placing : breaking; lastBlock = block; - if(mode == breaking){ - showGuide("removearea", this::isAreaBreaking); - } - }).update(l -> l.setChecked(mode == breaking)); + }).update(l -> l.setChecked(mode == breaking)).name("breakmode"); //diagonal swap button table.addImageButton("icon-diagonal-small", "clear-toggle-partial", iconsizesmall, () -> { @@ -320,7 +289,7 @@ public class MobileInput extends InputHandler implements GestureListener{ removals.addAll(selection); selection.clear(); selecting = false; - }).visible(() -> !selection.isEmpty()); + }).visible(() -> !selection.isEmpty()).name("confirmplace"); Core.scene.table(t -> { t.bottom().left().visible(() -> (player.isBuilding() || block != null || mode == breaking) && !state.is(State.menu)); @@ -488,7 +457,7 @@ public class MobileInput extends InputHandler implements GestureListener{ selecting = hasRequest(cursor) && isPlacing() && mode == placing; //call tap events - if(pointer == 0 && !selecting && mode == none){ + if(pointer == 0 && !selecting){ if(!tryTapPlayer(worldx, worldy) && Core.settings.getBool("keyboard")){ //shoot on touch down when in keyboard mode player.isShooting = true; @@ -509,7 +478,7 @@ public class MobileInput extends InputHandler implements GestureListener{ if(mode == placing && isPlacing()){ iterateLine(lineStartX, lineStartY, tileX, tileY, l -> { Tile tile = world.tile(l.x, l.y); - if(tile != null && hasRequest(tile)){ + if(tile != null && checkOverlapPlacement(tile.x, tile.y, block)){ return; } @@ -517,6 +486,7 @@ public class MobileInput extends InputHandler implements GestureListener{ request.scale = 1f; selection.add(request); }); + Events.fire(new LineConfirmEvent()); }else if(mode == breaking){ //normalize area NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tileX, tileY, rotation, false, maxLength); @@ -653,10 +623,6 @@ public class MobileInput extends InputHandler implements GestureListener{ mode = placing; } - if(block != null){ - showGuide("placeline", this::isLinePlacing); - } - if(block == null && mode == placing){ mode = none; } @@ -765,16 +731,11 @@ public class MobileInput extends InputHandler implements GestureListener{ if(lastDistance == -1) lastDistance = initialDistance; float amount = (Mathf.sign(distance > lastDistance) * 0.04f) * Time.delta(); - renderer.scaleCamera(io.anuke.arc.scene.ui.layout.Unit.dp.scl(amount)); + renderer.scaleCamera(UnitScl.dp.scl(amount)); lastDistance = distance; return true; } - float clerp(float value, float min, float max){ - final float alpha = 0.07f; - return value < min ? Mathf.lerpDelta(value, min, alpha) : value > max ? Mathf.lerpDelta(value, max, alpha) : value; - } - //endregion private class PlaceRequest{ diff --git a/core/src/io/anuke/mindustry/io/JsonIO.java b/core/src/io/anuke/mindustry/io/JsonIO.java index 6cea5fb1c1..500374994a 100644 --- a/core/src/io/anuke/mindustry/io/JsonIO.java +++ b/core/src/io/anuke/mindustry/io/JsonIO.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.io; import io.anuke.arc.collection.*; import io.anuke.arc.util.serialization.*; import io.anuke.mindustry.*; +import io.anuke.mindustry.content.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.Teams.*; import io.anuke.mindustry.type.*; @@ -10,99 +11,7 @@ import io.anuke.mindustry.world.*; @SuppressWarnings("unchecked") public class JsonIO{ - private static Json json = new Json(){{ - setIgnoreUnknownFields(true); - setElementType(Rules.class, "spawns", SpawnGroup.class); - setElementType(Rules.class, "loadout", ItemStack.class); - - setSerializer(Zone.class, new Serializer(){ - @Override - public void write(Json json, Zone object, Class knownType){ - json.writeValue(object.name); - } - - @Override - public Zone read(Json json, JsonValue jsonData, Class type){ - return Vars.content.getByName(ContentType.zone, jsonData.asString()); - } - }); - - setSerializer(Item.class, new Serializer(){ - @Override - public void write(Json json, Item object, Class knownType){ - json.writeValue(object.name); - } - - @Override - public Item read(Json json, JsonValue jsonData, Class type){ - return Vars.content.getByName(ContentType.item, jsonData.asString()); - } - }); - - //TODO extremely hacky and disgusting - for(Block block : Vars.content.blocks()){ - Class type = block.getClass(); - if(type.isAnonymousClass()) type = type.getSuperclass(); - - setSerializer(type, new Serializer(){ - @Override - public void write(Json json, Block object, Class knownType){ - json.writeValue(object.name); - } - - @Override - public Block read(Json json, JsonValue jsonData, Class type){ - return Vars.content.getByName(ContentType.block, jsonData.asString()); - } - }); - } - - setSerializer(Block.class, new Serializer(){ - @Override - public void write(Json json, Block object, Class knownType){ - json.writeValue(object.name); - } - - @Override - public Block read(Json json, JsonValue jsonData, Class type){ - return Vars.content.getByName(ContentType.block, jsonData.asString()); - } - }); - - setSerializer(TeamData.class, new Serializer(){ - @Override - public void write(Json json, TeamData object, Class knownType){ - json.writeObjectStart(); - json.writeValue("brokenBlocks", object.brokenBlocks.toArray()); - json.writeValue("team", object.team.ordinal()); - json.writeObjectEnd(); - } - - @Override - public TeamData read(Json json, JsonValue jsonData, Class type){ - long[] blocks = jsonData.get("brokenBlocks").asLongArray(); - Team team = Team.all[jsonData.getInt("team", 0)]; - TeamData out = new TeamData(team, EnumSet.of(new Team[]{})); - out.brokenBlocks = new LongQueue(blocks); - return out; - } - }); - - setSerializer(ItemStack.class, new Serializer(){ - @Override - public void write(Json json, ItemStack object, Class knownType){ - json.writeObjectStart(); - json.writeValue("item", object.item); - json.writeValue("amount", object.amount); - json.writeObjectEnd(); - } - - @Override - public ItemStack read(Json json, JsonValue jsonData, Class type){ - return new ItemStack(json.getSerializer(Item.class).read(json, jsonData.get("item"), Item.class), jsonData.getInt("amount")); - } - }); - }}; + private static CustomJson json = new CustomJson(); public static String write(Object object){ return json.toJson(object); @@ -116,7 +25,129 @@ public class JsonIO{ return json.fromJson(type, string); } + public static T read(Class type, T base, String string){ + return json.fromBaseJson(type, base, string); + } + public static String print(String in){ return json.prettyPrint(in); } + + static class CustomJson extends Json{ + private Object baseObject; + + { + setIgnoreUnknownFields(true); + setElementType(Rules.class, "spawns", SpawnGroup.class); + setElementType(Rules.class, "loadout", ItemStack.class); + + setSerializer(Zone.class, new Serializer(){ + @Override + public void write(Json json, Zone object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public Zone read(Json json, JsonValue jsonData, Class type){ + return Vars.content.getByName(ContentType.zone, jsonData.asString()); + } + }); + + setSerializer(Item.class, new Serializer(){ + @Override + public void write(Json json, Item object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public Item read(Json json, JsonValue jsonData, Class type){ + if(jsonData.asString() == null) return Items.copper; + Item i = Vars.content.getByName(ContentType.item, jsonData.asString()); + return i == null ? Items.copper : i; + } + }); + + //TODO extremely hacky and disgusting + for(Block block : Vars.content.blocks()){ + Class type = block.getClass(); + if(type.isAnonymousClass()) type = type.getSuperclass(); + + setSerializer(type, new Serializer(){ + @Override + public void write(Json json, Block object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public Block read(Json json, JsonValue jsonData, Class type){ + return Vars.content.getByName(ContentType.block, jsonData.asString()); + } + }); + } + + setSerializer(Block.class, new Serializer(){ + @Override + public void write(Json json, Block object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public Block read(Json json, JsonValue jsonData, Class type){ + return Vars.content.getByName(ContentType.block, jsonData.asString()); + } + }); + + setSerializer(TeamData.class, new Serializer(){ + @Override + public void write(Json json, TeamData object, Class knownType){ + json.writeObjectStart(); + json.writeValue("brokenBlocks", object.brokenBlocks.toArray()); + json.writeValue("team", object.team.ordinal()); + json.writeObjectEnd(); + } + + @Override + public TeamData read(Json json, JsonValue jsonData, Class type){ + long[] blocks = jsonData.get("brokenBlocks").asLongArray(); + Team team = Team.all[jsonData.getInt("team", 0)]; + TeamData out = new TeamData(team, EnumSet.of(new Team[]{})); + out.brokenBlocks = new LongQueue(blocks); + return out; + } + }); + + setSerializer(ItemStack.class, new Serializer(){ + @Override + public void write(Json json, ItemStack object, Class knownType){ + json.writeObjectStart(); + json.writeValue("item", object.item); + json.writeValue("amount", object.amount); + json.writeObjectEnd(); + } + + @Override + public ItemStack read(Json json, JsonValue jsonData, Class type){ + return new ItemStack(json.getSerializer(Item.class).read(json, jsonData.get("item"), Item.class), jsonData.getInt("amount")); + } + }); + } + + @Override + public T fromJson(Class type, String json){ + return fromBaseJson(type, null, json); + } + + public T fromBaseJson(Class type, T base, String json){ + this.baseObject = base; + return readValue(type, null, new JsonReader().parse(json)); + } + + @Override + protected Object newInstance(Class type){ + if(baseObject == null || baseObject.getClass() != type){ + return super.newInstance(type); + } + return baseObject; + } + } } diff --git a/core/src/io/anuke/mindustry/io/LegacyMapIO.java b/core/src/io/anuke/mindustry/io/LegacyMapIO.java index 2c65b1f2e7..d948fbee19 100644 --- a/core/src/io/anuke/mindustry/io/LegacyMapIO.java +++ b/core/src/io/anuke/mindustry/io/LegacyMapIO.java @@ -217,14 +217,14 @@ public class LegacyMapIO{ if(Structs.inBounds(worldx, worldy, pixmap.getWidth(), pixmap.getHeight())){ Tile write = tiles[worldx][worldy]; write.setBlock(BlockPart.get(dx - 1, dy - 1)); - write.setTeam(Team.blue); + write.setTeam(Team.sharded); } } } //actual core parts tile.setBlock(Blocks.coreShard); - tile.setTeam(Team.blue); + tile.setTeam(Team.sharded); } } } diff --git a/core/src/io/anuke/mindustry/io/MapIO.java b/core/src/io/anuke/mindustry/io/MapIO.java index 066d87d488..722dcaae8b 100644 --- a/core/src/io/anuke/mindustry/io/MapIO.java +++ b/core/src/io/anuke/mindustry/io/MapIO.java @@ -112,9 +112,9 @@ public class MapIO{ @Override public Tile create(int x, int y, int floorID, int overlayID, int wallID){ if(overlayID != 0){ - floors.drawPixel(x, floors.getHeight() - 1 - y, colorFor(Blocks.air, Blocks.air, content.block(overlayID), Team.none)); + floors.drawPixel(x, floors.getHeight() - 1 - y, colorFor(Blocks.air, Blocks.air, content.block(overlayID), Team.derelict)); }else{ - floors.drawPixel(x, floors.getHeight() - 1 - y, colorFor(content.block(floorID), Blocks.air, Blocks.air, Team.none)); + floors.drawPixel(x, floors.getHeight() - 1 - y, colorFor(content.block(floorID), Blocks.air, Blocks.air, Team.derelict)); } if(content.block(overlayID) == Blocks.spawn){ map.spawns ++; diff --git a/core/src/io/anuke/mindustry/maps/Map.java b/core/src/io/anuke/mindustry/maps/Map.java index 89165b14c8..7e2e63071a 100644 --- a/core/src/io/anuke/mindustry/maps/Map.java +++ b/core/src/io/anuke/mindustry/maps/Map.java @@ -1,12 +1,12 @@ package io.anuke.mindustry.maps; -import io.anuke.arc.Core; +import io.anuke.arc.*; import io.anuke.arc.collection.*; -import io.anuke.arc.files.FileHandle; -import io.anuke.arc.graphics.Texture; -import io.anuke.mindustry.Vars; +import io.anuke.arc.files.*; +import io.anuke.arc.graphics.*; +import io.anuke.mindustry.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.io.JsonIO; +import io.anuke.mindustry.io.*; import io.anuke.mindustry.maps.filters.*; import static io.anuke.mindustry.Vars.world; @@ -62,16 +62,36 @@ public class Map implements Comparable{ Vars.data.modified(); } + /** Returns the result of applying this map's rules to the specified gamemode.*/ + public Rules applyRules(Gamemode mode){ + //mode specific defaults have been applied + Rules out = new Rules(); + mode.apply(out); + + //now apply map-specific overrides + return rules(out); + } + /** This creates a new instance of Rules.*/ public Rules rules(){ - Rules result = JsonIO.read(Rules.class, tags.get("rules", "{}")); - if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get(); - return result; + return rules(new Rules()); + } + + public Rules rules(Rules base){ + try{ + Rules result = JsonIO.read(Rules.class, base, tags.get("rules", "{}")); + if(result.spawns.isEmpty()) result.spawns = Vars.defaultWaves.get(); + return result; + }catch(Exception e){ + //error reading rules. ignore? + e.printStackTrace(); + return new Rules(); + } } /** Returns the generation filters that this map uses on load.*/ public Array filters(){ - if(build != -1 && build < 83 && tags.get("genfilters", "").isEmpty()){ + if(tags.getInt("build", -1) < 83 && tags.getInt("build", -1) != -1 && tags.get("genfilters", "").isEmpty()){ return Array.with(); } return world.maps.readFilters(tags.get("genfilters", "")); diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 80cce4c0b5..e2360e16e5 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -210,13 +210,7 @@ public class Maps implements Disposable{ }} ); - int index = 0; - for(Block block : new Block[]{Blocks.oreCopper, Blocks.oreLead, Blocks.oreCoal, Blocks.oreTitanium, Blocks.oreThorium}){ - OreFilter filter = new OreFilter(); - filter.threshold += index ++ * 0.019f; - filter.ore = block; - filters.add(filter); - } + addDefaultOres(filters); return filters; }else{ @@ -224,6 +218,17 @@ public class Maps implements Disposable{ } } + public void addDefaultOres(Array filters){ + int index = 0; + for(Block block : new Block[]{Blocks.oreCopper, Blocks.oreLead, Blocks.oreCoal, Blocks.oreTitanium, Blocks.oreThorium}){ + OreFilter filter = new OreFilter(); + filter.threshold += index ++ * 0.019f; + filter.scl += index/2f; + filter.ore = block; + filters.add(filter); + } + } + public String writeWaves(Array groups){ if(groups == null){ return "[]"; diff --git a/core/src/io/anuke/mindustry/maps/filters/DistortFilter.java b/core/src/io/anuke/mindustry/maps/filters/DistortFilter.java index 4da9afaefb..7c9cdf1c5f 100644 --- a/core/src/io/anuke/mindustry/maps/filters/DistortFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/DistortFilter.java @@ -10,7 +10,7 @@ public class DistortFilter extends GenerateFilter{ { buffered = true; options( - new SliderOption("scale", () -> scl, f -> scl = f, 1f, 400f), + new SliderOption("scale", () -> scl, f -> scl = f, 1f, 200f), new SliderOption("mag", () -> mag, f -> mag = f, 0.5f, 100f) ); } diff --git a/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java b/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java index 2ab84d2864..e3f1c2ccf4 100644 --- a/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/GenerateFilter.java @@ -62,7 +62,7 @@ public abstract class GenerateFilter{ } protected float chance(){ - return Mathf.randomSeed(Pack.longInt(in.x, in.y + (int)o)); + return Mathf.randomSeed(Pack.longInt(in.x, in.y + (int)seed)); } /** an input for generating at a certain coordinate. should only be instantiated once. */ diff --git a/core/src/io/anuke/mindustry/maps/filters/MirrorFilter.java b/core/src/io/anuke/mindustry/maps/filters/MirrorFilter.java index 866dc791f1..2832ddaed2 100644 --- a/core/src/io/anuke/mindustry/maps/filters/MirrorFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/MirrorFilter.java @@ -17,15 +17,16 @@ public class MirrorFilter extends GenerateFilter{ { options(new SliderOption("angle", () -> angle, f -> angle = (int)f, 0, 360, 45)); + buffered = true; } @Override protected void apply(){ - v1.trns(angle - 90, 1f); + v1.trnsExact(angle - 90, 1f); v2.set(v1).scl(-1f); - v1.add(in.width/2f, in.height/2f); - v2.add(in.width/2f, in.height/2f); + v1.add(in.width/2f - 0.5f, in.height/2f - 0.5f); + v2.add(in.width/2f - 0.5f, in.height/2f - 0.5f); v3.set(in.x, in.y); @@ -57,7 +58,7 @@ public class MirrorFilter extends GenerateFilter{ clamper.accept(Tmp.v1.trns(angle - 90, size).add(image.getWidth()/2f + image.getX(), image.getHeight()/2f + image.getY())); clamper.accept(Tmp.v2.set(Tmp.v1).sub(image.getWidth()/2f + image.getX(), image.getHeight()/2f + image.getY()).rotate(180f).add(image.getWidth()/2f + image.getX(), image.getHeight()/2f + image.getY())); - Lines.stroke(Unit.dp.scl(3f), Pal.accent); + Lines.stroke(UnitScl.dp.scl(3f), Pal.accent); Lines.line(Tmp.v1.x, Tmp.v1.y, Tmp.v2.x, Tmp.v2.y); Draw.reset(); } diff --git a/core/src/io/anuke/mindustry/maps/filters/OreFilter.java b/core/src/io/anuke/mindustry/maps/filters/OreFilter.java index 8de308989a..e04f9935a4 100644 --- a/core/src/io/anuke/mindustry/maps/filters/OreFilter.java +++ b/core/src/io/anuke/mindustry/maps/filters/OreFilter.java @@ -8,7 +8,7 @@ import static io.anuke.mindustry.maps.filters.FilterOption.BlockOption; import static io.anuke.mindustry.maps.filters.FilterOption.oresOnly; public class OreFilter extends GenerateFilter{ - public float scl = 40, threshold = 0.75f, octaves = 2f, falloff = 0.4f; + public float scl = 23, threshold = 0.811f, octaves = 2f, falloff = 0.3f; public Block ore = Blocks.oreCopper; { diff --git a/core/src/io/anuke/mindustry/maps/filters/OreMedianFilter.java b/core/src/io/anuke/mindustry/maps/filters/OreMedianFilter.java new file mode 100644 index 0000000000..8080b49699 --- /dev/null +++ b/core/src/io/anuke/mindustry/maps/filters/OreMedianFilter.java @@ -0,0 +1,57 @@ +package io.anuke.mindustry.maps.filters; + +import io.anuke.arc.collection.*; +import io.anuke.arc.math.*; +import io.anuke.mindustry.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.maps.filters.FilterOption.*; +import io.anuke.mindustry.world.*; + +public class OreMedianFilter extends GenerateFilter{ + public float radius = 2; + public float percentile = 0.5f; + + private IntArray blocks = new IntArray(); + + { + buffered = true; + options( + new SliderOption("radius", () -> radius, f -> radius = f, 1f, 12f), + new SliderOption("percentile", () -> percentile, f -> percentile = f, 0f, 1f) + ); + } + + @Override + public void apply(){ + if(in.ore == 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 && + !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; + } + } + + int rad = (int)radius; + + blocks.clear(); + for(int x = -rad; x <= rad; x++){ + for(int y = -rad; y <= rad; y++){ + if(Mathf.dst2(x, y) > rad*rad) continue; + + Tile tile = in.tile(in.x + x, in.y + y); + if(tile.overlay() != Blocks.spawn) + blocks.add(tile.overlay().id); + } + } + + blocks.sort(); + + int index = Math.min((int)(blocks.size * percentile), blocks.size - 1); + int overlay = blocks.get(index); + + in.ore = Vars.content.block(overlay); + } +} diff --git a/core/src/io/anuke/mindustry/maps/generators/BasicGenerator.java b/core/src/io/anuke/mindustry/maps/generators/BasicGenerator.java index 375af9543a..a3229e5906 100644 --- a/core/src/io/anuke/mindustry/maps/generators/BasicGenerator.java +++ b/core/src/io/anuke/mindustry/maps/generators/BasicGenerator.java @@ -39,8 +39,8 @@ public abstract class BasicGenerator extends RandomGenerator{ int offsetX = x - 4, offsetY = y + 23; for(int i = ores.size - 1; i >= 0; i--){ Block entry = ores.get(i); - if(Math.abs(0.5f - sim.octaveNoise2D(2, 0.7, 1f / (50 + i * 2), offsetX, offsetY + i*999)) > 0.23f && - Math.abs(0.5f - sim2.octaveNoise2D(1, 1, 1f / (40 + i * 4), offsetX, offsetY - i*999)) > 0.32f){ + if(Math.abs(0.5f - sim.octaveNoise2D(2, 0.7, 1f / (40 + i * 2), offsetX, offsetY + i*999)) > 0.26f && + Math.abs(0.5f - sim2.octaveNoise2D(1, 1, 1f / (30 + i * 4), offsetX, offsetY - i*999)) > 0.37f){ ore = entry; break; } diff --git a/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java b/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java index f8e0c1097e..52ad2b35c9 100644 --- a/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java +++ b/core/src/io/anuke/mindustry/maps/generators/MapGenerator.java @@ -4,7 +4,6 @@ import io.anuke.arc.collection.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; import io.anuke.arc.util.*; -import io.anuke.arc.util.noise.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.io.*; import io.anuke.mindustry.maps.*; @@ -19,8 +18,6 @@ public class MapGenerator extends Generator{ private Map map; private String mapName; private Array decorations = Array.with(new Decoration(Blocks.stone, Blocks.rock, 0.003f)); - /** How much the landscape is randomly distorted. */ - public float distortion = 3; /** * The amount of final enemy spawns used. -1 to use everything in the map. * This amount of enemy spawns is selected randomly from the map. @@ -43,17 +40,6 @@ public class MapGenerator extends Generator{ return this; } - public MapGenerator dist(float distortion){ - this.distortion = distortion; - return this; - } - - public MapGenerator dist(float distortion, boolean floor){ - this.distortion = distortion; - this.distortFloor = floor; - return this; - } - { decor(new Decoration(Blocks.snow, Blocks.snowrock, 0.01), new Decoration(Blocks.ignarock, Blocks.pebbles, 0.03f)); } @@ -100,28 +86,9 @@ public class MapGenerator extends Generator{ } } - Simplex simplex = new Simplex(Mathf.random(99999)); - for(int x = 0; x < width; x++){ for(int y = 0; y < height; y++){ - final double scl = 10; Tile tile = tiles[x][y]; - int newX = Mathf.clamp((int)(simplex.octaveNoise2D(1, 1, 1.0 / scl, x, y) * distortion + x), 0, width - 1); - int newY = Mathf.clamp((int)(simplex.octaveNoise2D(1, 1, 1.0 / scl, x + 9999, y + 9999) * distortion + y), 0, height - 1); - - if(((tile.block() instanceof StaticWall - && tiles[newX][newY].block() instanceof StaticWall) - || (tile.block() == Blocks.air && !tiles[newX][newY].block().synthetic()) - || (tiles[newX][newY].block() == Blocks.air && tile.block() instanceof StaticWall))){ - tile.setBlock(tiles[newX][newY].block()); - } - - if(distortFloor){ - tile.setFloor(tiles[newX][newY].floor()); - if(tiles[newX][newY].overlay() != Blocks.spawn && tile.overlay() != Blocks.spawn){ - tile.setOverlay(tiles[newX][newY].overlay()); - } - } for(Decoration decor : decorations){ if(x > 0 && y > 0 && (tiles[x - 1][y].block() == decor.wall || tiles[x][y - 1].block() == decor.wall)){ diff --git a/core/src/io/anuke/mindustry/net/CrashSender.java b/core/src/io/anuke/mindustry/net/CrashSender.java index f034c781dd..f7370b629d 100644 --- a/core/src/io/anuke/mindustry/net/CrashSender.java +++ b/core/src/io/anuke/mindustry/net/CrashSender.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.net; import io.anuke.arc.*; +import io.anuke.arc.Net.*; import io.anuke.arc.collection.*; import io.anuke.arc.function.*; import io.anuke.arc.util.*; @@ -50,12 +51,12 @@ public class CrashSender{ try{ File file = new File(OS.getAppDataDirectoryString(Vars.appName), "crashes/crash-report-" + DateTimeFormatter.ofPattern("MM_dd_yyyy_HH_mm_ss").format(LocalDateTime.now()) + ".txt"); - new File(OS.getAppDataDirectoryString(Vars.appName)).mkdir(); - Files.write(file.toPath(), parseException(exception).getBytes()); Files.createDirectories(Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes")); + Files.write(file.toPath(), parseException(exception).getBytes()); writeListener.accept(file); - }catch(Throwable ignored){ + }catch(Throwable e){ + e.printStackTrace(); Log.err("Failed to save local crash report."); } @@ -103,7 +104,7 @@ public class CrashSender{ Log.info("Sending crash report."); //post to crash report URL - Core.net.httpPost(Vars.crashReportURL, value.toJson(OutputType.json), r -> { + httpPost(Vars.crashReportURL, value.toJson(OutputType.json), r -> { Log.info("Crash sent successfully."); sent[0] = true; System.exit(1); @@ -126,6 +127,10 @@ public class CrashSender{ } } + private static void httpPost(String url, String content, Consumer success, Consumer failure){ + new NetJavaImpl().http(new HttpRequest().method(HttpMethod.POST).content(content).url(url), success, failure); + } + private static String parseException(Throwable e){ StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index 3943e8a4e2..d0965c3cb8 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -132,6 +132,11 @@ public class Net{ active = false; } + public static void reset(){ + closeServer(); + netClient.disconnectNoReset(); + } + public static void disconnect(){ clientProvider.disconnect(); server = false; diff --git a/core/src/io/anuke/mindustry/type/ItemStack.java b/core/src/io/anuke/mindustry/type/ItemStack.java index 8067c56cd9..027a30ae36 100644 --- a/core/src/io/anuke/mindustry/type/ItemStack.java +++ b/core/src/io/anuke/mindustry/type/ItemStack.java @@ -23,6 +23,14 @@ public class ItemStack implements Comparable{ return other != null && other.item == item && other.amount == amount; } + public static ItemStack[] mult(ItemStack[] stacks, int amount){ + ItemStack[] copy = new ItemStack[stacks.length]; + for(int i = 0; i < copy.length; i++){ + copy[i] = new ItemStack(stacks[i].item, stacks[i].amount * amount); + } + return copy; + } + public static ItemStack[] with(Object... items){ ItemStack[] stacks = new ItemStack[items.length / 2]; for(int i = 0; i < items.length; i += 2){ diff --git a/core/src/io/anuke/mindustry/type/UnitType.java b/core/src/io/anuke/mindustry/type/UnitType.java index bfe6042e23..a32590c1fd 100644 --- a/core/src/io/anuke/mindustry/type/UnitType.java +++ b/core/src/io/anuke/mindustry/type/UnitType.java @@ -1,14 +1,16 @@ package io.anuke.mindustry.type; -import io.anuke.arc.Core; -import io.anuke.arc.collection.ObjectSet; -import io.anuke.arc.function.Supplier; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.mindustry.content.Items; -import io.anuke.mindustry.entities.type.BaseUnit; +import io.anuke.arc.*; +import io.anuke.arc.audio.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.ui.ContentDisplay; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.ui.*; public class UnitType extends UnlockableContent{ public final TypeID typeID; @@ -35,6 +37,7 @@ public class UnitType extends UnlockableContent{ public Weapon weapon; public float weaponOffsetY, engineOffset = 6f, engineSize = 2f; public ObjectSet immunities = new ObjectSet<>(); + public Sound deathSound = Sounds.bang; public TextureRegion iconRegion, legRegion, baseRegion, region; diff --git a/core/src/io/anuke/mindustry/type/Weapon.java b/core/src/io/anuke/mindustry/type/Weapon.java index 7d2a22c98f..180bb2fad5 100644 --- a/core/src/io/anuke/mindustry/type/Weapon.java +++ b/core/src/io/anuke/mindustry/type/Weapon.java @@ -1,22 +1,20 @@ package io.anuke.mindustry.type; -import io.anuke.annotations.Annotations.Loc; -import io.anuke.annotations.Annotations.Remote; -import io.anuke.arc.Core; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.math.Angles; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Time; -import io.anuke.arc.util.Tmp; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.content.Fx; -import io.anuke.mindustry.entities.Effects; -import io.anuke.mindustry.entities.Effects.Effect; -import io.anuke.mindustry.entities.bullet.Bullet; -import io.anuke.mindustry.entities.bullet.BulletType; -import io.anuke.mindustry.entities.traits.ShooterTrait; -import io.anuke.mindustry.entities.type.Player; -import io.anuke.mindustry.gen.Call; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.audio.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.Effects.*; +import io.anuke.mindustry.entities.bullet.*; +import io.anuke.mindustry.entities.traits.*; +import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.gen.Sounds; import io.anuke.mindustry.net.Net; public class Weapon{ @@ -56,6 +54,8 @@ public class Weapon{ /** whether shooter rotation is ignored when shooting. */ public boolean ignoreRotation = false; + public Sound shootSound = Sounds.pew; + public TextureRegion region; protected Weapon(String name){ @@ -69,6 +69,7 @@ public class Weapon{ @Remote(targets = Loc.server, called = Loc.both, unreliable = true) public static void onPlayerShootWeapon(Player player, float x, float y, float rotation, boolean left){ + if(player == null) return; //clients do not see their own shoot events: they are simulated completely clientside to prevent laggy visuals //messing with the firerate or any other stats does not affect the server (take that, script kiddies!) @@ -91,6 +92,7 @@ public class Weapon{ float baseX = shooter.getX(), baseY = shooter.getY(); Weapon weapon = shooter.getWeapon(); + weapon.shootSound.at(x, y); sequenceNum = 0; if(weapon.shotDelay > 0.01f){ diff --git a/core/src/io/anuke/mindustry/type/Zone.java b/core/src/io/anuke/mindustry/type/Zone.java index 069f8eb9c0..a89d7f3079 100644 --- a/core/src/io/anuke/mindustry/type/Zone.java +++ b/core/src/io/anuke/mindustry/type/Zone.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.type; import io.anuke.arc.*; import io.anuke.arc.collection.*; import io.anuke.arc.function.*; +import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; @@ -27,6 +28,7 @@ public class Zone extends UnlockableContent{ public int configureWave = 15; public int launchPeriod = 10; public Loadout loadout = Loadouts.basicShard; + public Texture preview; protected ItemStack[] baseLaunchCost = {}; protected Array startingItems = new Array<>(); @@ -57,6 +59,26 @@ public class Zone extends UnlockableContent{ return metCondition() && wave % launchPeriod == 0; } + public boolean canUnlock(){ + if(data.isUnlocked(this)){ + return true; + } + + for(ZoneRequirement other : zoneRequirements){ + if(other.zone.bestWave() < other.wave){ + return false; + } + } + + for(Block other : blockRequirements){ + if(!data.isUnlocked(other)){ + return false; + } + } + + return true; + } + public ItemStack[] getLaunchCost(){ if(launchCost == null){ updateLaunchCost(); @@ -152,6 +174,13 @@ public class Zone extends UnlockableContent{ } } + @Override + public void load(){ + if(Core.files.internal("zones/" + name + ".png").exists()){ + preview = new Texture(Core.files.internal("zones/" + name + ".png")); + } + } + @Override public boolean alwaysUnlocked(){ return alwaysUnlocked; diff --git a/core/src/io/anuke/mindustry/ui/Bar.java b/core/src/io/anuke/mindustry/ui/Bar.java index 4e9a87659d..1fbe5b02f4 100644 --- a/core/src/io/anuke/mindustry/ui/Bar.java +++ b/core/src/io/anuke/mindustry/ui/Bar.java @@ -71,7 +71,7 @@ public class Bar extends Element{ Draw.color(); - BitmapFont font = Core.scene.skin.getFont("default-font"); + BitmapFont font = Core.scene.skin.getFont("default"); GlyphLayout lay = Pools.obtain(GlyphLayout.class, GlyphLayout::new); lay.setText(font, name); diff --git a/core/src/io/anuke/mindustry/ui/BorderImage.java b/core/src/io/anuke/mindustry/ui/BorderImage.java index a1191e2414..636815f4e4 100644 --- a/core/src/io/anuke/mindustry/ui/BorderImage.java +++ b/core/src/io/anuke/mindustry/ui/BorderImage.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.ui; import io.anuke.arc.graphics.Texture; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.scene.ui.Image; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.mindustry.graphics.Pal; public class BorderImage extends Image{ @@ -36,7 +36,7 @@ public class BorderImage extends Image{ Draw.color(Pal.gray); Draw.alpha(parentAlpha); - Lines.stroke(Unit.dp.scl(thickness)); + Lines.stroke(UnitScl.dp.scl(thickness)); Lines.rect(x + imageX, y + imageY, imageWidth * scaleX, imageHeight * scaleY); Draw.reset(); } diff --git a/core/src/io/anuke/mindustry/ui/ItemImage.java b/core/src/io/anuke/mindustry/ui/ItemImage.java index e7bed333b1..b2f790570b 100644 --- a/core/src/io/anuke/mindustry/ui/ItemImage.java +++ b/core/src/io/anuke/mindustry/ui/ItemImage.java @@ -17,6 +17,13 @@ public class ItemImage extends Stack{ add(t); } + public ItemImage(TextureRegion region){ + Table t = new Table().left().bottom(); + + add(new Image(region)); + add(t); + } + public ItemImage(ItemStack stack){ add(new Image(stack.item.icon(Icon.large))); diff --git a/core/src/io/anuke/mindustry/ui/Minimap.java b/core/src/io/anuke/mindustry/ui/Minimap.java index 8b222834fa..4dfc419a70 100644 --- a/core/src/io/anuke/mindustry/ui/Minimap.java +++ b/core/src/io/anuke/mindustry/ui/Minimap.java @@ -18,12 +18,12 @@ public class Minimap extends Table{ add(new Element(){ { - setSize(Unit.dp.scl(140f)); + setSize(UnitScl.dp.scl(140f)); } @Override public void act(float delta){ - setPosition(Unit.dp.scl(margin), Unit.dp.scl(margin)); + setPosition(UnitScl.dp.scl(margin), UnitScl.dp.scl(margin)); super.act(delta); } @@ -52,7 +52,7 @@ public class Minimap extends Table{ addListener(new ClickListener(){ { - tapSquareSize = Unit.dp.scl(11f); + tapSquareSize = UnitScl.dp.scl(11f); } @Override diff --git a/core/src/io/anuke/mindustry/ui/ReqImage.java b/core/src/io/anuke/mindustry/ui/ReqImage.java index 1b3da1c6a7..d14c5341d5 100644 --- a/core/src/io/anuke/mindustry/ui/ReqImage.java +++ b/core/src/io/anuke/mindustry/ui/ReqImage.java @@ -5,7 +5,7 @@ import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.scene.Element; import io.anuke.arc.scene.ui.Image; import io.anuke.arc.scene.ui.layout.Stack; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.mindustry.graphics.Pal; public class ReqImage extends Stack{ @@ -21,7 +21,7 @@ public class ReqImage extends Stack{ @Override public void draw(){ - Lines.stroke(Unit.dp.scl(2f), Pal.removeBack); + Lines.stroke(UnitScl.dp.scl(2f), Pal.removeBack); Lines.line(x, y - 2f + height, x + width, y - 2f); Draw.color(Pal.remove); Lines.line(x, y + height, x + width, y); diff --git a/core/src/io/anuke/mindustry/ui/TreeLayout.java b/core/src/io/anuke/mindustry/ui/TreeLayout.java index 1a7395f928..7e373ba231 100644 --- a/core/src/io/anuke/mindustry/ui/TreeLayout.java +++ b/core/src/io/anuke/mindustry/ui/TreeLayout.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.ui; -import io.anuke.arc.collection.FloatArray; -import io.anuke.arc.math.geom.Rectangle; +import io.anuke.arc.collection.*; +import io.anuke.arc.math.geom.*; /** * Algorithm taken from TreeLayout. diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java index dade138dc8..fccf4fff16 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java @@ -37,7 +37,7 @@ public class CustomGameDialog extends FloatingDialog{ ScrollPane pane = new ScrollPane(maps); pane.setFadeScrollBars(false); - int maxwidth = Mathf.clamp((int)(Core.graphics.getWidth() / Unit.dp.scl(200)), 1, 8); + int maxwidth = Mathf.clamp((int)(Core.graphics.getWidth() / UnitScl.dp.scl(200)), 1, 8); float images = 146f; int i = 0; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java index ea0cb7940d..e306ecdea3 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomRulesDialog.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.arc.function.*; import io.anuke.arc.graphics.Color; import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.util.Strings; +import io.anuke.arc.util.*; import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Items; import io.anuke.mindustry.core.Platform; @@ -70,7 +70,7 @@ public class CustomRulesDialog extends FloatingDialog{ () -> rules.loadout, () -> { rules.loadout.clear(); - rules.loadout.add(new ItemStack(Items.copper, 200)); + rules.loadout.add(new ItemStack(Items.copper, 100)); }, () -> {}, () -> {}, item -> item.type == ItemType.material diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java index 99b05d1ea4..1f5dfc8679 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DatabaseDialog.java @@ -56,11 +56,11 @@ public class DatabaseDialog extends FloatingDialog{ UnlockableContent unlock = (UnlockableContent)array.get(i); Image image = unlocked(unlock) ? new Image(unlock.getContentIcon()) : new Image("icon-locked", Pal.gray); - image.addListener(new HandCursorListener()); list.add(image).size(unlocked(unlock) ? 8*4 : Vars.iconsize).pad(3); ClickListener listener = new ClickListener(); image.addListener(listener); - if(!Vars.mobile){ + if(!Vars.mobile && unlocked(unlock)){ + image.addListener(new HandCursorListener()); image.update(() -> image.getColor().lerp(!listener.isOver() ? Color.LIGHT_GRAY : Color.WHITE, 0.4f * Time.delta())); } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java index c313e12c7e..166697e4ff 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/DeployDialog.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.ui.dialogs; import io.anuke.arc.*; import io.anuke.arc.collection.*; import io.anuke.arc.collection.ObjectSet.*; +import io.anuke.arc.function.*; import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.*; @@ -10,12 +11,16 @@ import io.anuke.arc.math.geom.*; import io.anuke.arc.scene.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.scene.utils.*; import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; +import io.anuke.mindustry.core.*; import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.Saves.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.io.SaveIO.*; +import io.anuke.mindustry.net.Net; import io.anuke.mindustry.type.*; import io.anuke.mindustry.type.Zone.*; import io.anuke.mindustry.ui.*; @@ -24,18 +29,22 @@ import io.anuke.mindustry.ui.TreeLayout.*; import static io.anuke.mindustry.Vars.*; public class DeployDialog extends FloatingDialog{ - private final float nodeSize = Unit.dp.scl(210f); + private final float nodeSize = UnitScl.dp.scl(230f); private ObjectSet nodes = new ObjectSet<>(); private ZoneInfoDialog info = new ZoneInfoDialog(); private Rectangle bounds = new Rectangle(); + private Texture nomap = new Texture("zones/nomap.png"); public DeployDialog(){ super("", "fulldialog"); + Events.on(DisposeEvent.class, e -> nomap.dispose()); + ZoneNode root = new ZoneNode(Zones.groundZero, null); TreeLayout layout = new TreeLayout(); - layout.gapBetweenLevels = layout.gapBetweenNodes = Unit.dp.scl(50f); + layout.gapBetweenLevels = layout.gapBetweenNodes = UnitScl.dp.scl(60f); + layout.gapBetweenNodes = UnitScl.dp.scl(120f); layout.layout(root); bounds.set(layout.getBounds()); bounds.y += nodeSize*0.4f; @@ -47,17 +56,12 @@ public class DeployDialog extends FloatingDialog{ } public void setup(){ + Platform.instance.updateRPC(); + cont.clear(); titleTable.remove(); margin(0f).marginBottom(8); - if(!Core.settings.getBool("zone-info", false)){ - Core.app.post(() -> ui.showInfoText("TEMPORARY GUIDE ON HOW TO PLAY ZONES", "- deploy to zones by selecting them here\n- most zones require items to deploy\n- once you survive a set amount of waves, you can launch all the resources in your core\n- use these items to research in the tech tree or uncover new zones")); - - Core.settings.put("zone-info", true); - Core.settings.save(); - } - Stack stack = new Stack(); stack.add(new Image(new Texture("sprites/backgrounds/stars.png"){{ @@ -78,13 +82,23 @@ public class DeployDialog extends FloatingDialog{ }}.setScaling(Scaling.fit)); if(control.saves.getZoneSlot() != null){ + float size = 230f; + stack.add(new Table(t -> { SaveSlot slot = control.saves.getZoneSlot(); - TextButton button = t.addButton(Core.bundle.format("resume", slot.getZone().localizedName()), () -> { + Stack sub = new Stack(); + + if(control.saves.getZoneSlot().getZone() != null){ + sub.add(new Table(f -> f.margin(4f).add(new Image(control.saves.getZoneSlot().getZone().preview).setScaling(Scaling.fit)).color(Color.DARK_GRAY).grow())); + } + + TextButton button = Elements.newButton(Core.bundle.format("resume", slot.getZone().localizedName()), "square", () -> { hide(); ui.loadAnd(() -> { + logic.reset(); + Net.reset(); try{ control.saves.getZoneSlot().load(); state.set(State.playing); @@ -95,7 +109,11 @@ public class DeployDialog extends FloatingDialog{ show(); } }); - }).size(230f).get(); + }); + + sub.add(button); + + t.add(sub).size(size); String color = "[lightgray]"; @@ -149,17 +167,17 @@ public class DeployDialog extends FloatingDialog{ drawDefaultBackground(x, y); } - void buildButton(Zone zone, TextButton button){ + void buildButton(Zone zone, Button button){ button.setDisabled(() -> hidden(zone)); button.clicked(() -> info.show(zone)); - if(zone.unlocked()){ - button.addImage("icon-terrain").size(iconsize).padRight(3); - button.labelWrap(zone.localizedName()).width(140).growX(); + if(zone.unlocked() && !hidden(zone)){ + button.labelWrap(zone.localizedName()).style("outline").width(140).growX().get().setAlignment(Align.center); }else{ - button.addImage("icon-locked"); + Consumer flasher = zone.canUnlock() && !hidden(zone) ? e -> e.update(() -> e.getColor().set(Color.WHITE).lerp(Pal.accent, Mathf.absin(3f, 1f))) : e -> {}; + flasher.accept(button.addImage("icon-locked").get()); button.row(); - button.add("$locked"); + flasher.accept(button.add("$locked").get()); } } @@ -170,14 +188,20 @@ public class DeployDialog extends FloatingDialog{ { for(ZoneNode node : nodes){ - TextButton button = new TextButton("", "node"); - button.setSize(node.width, node.height); - button.update(() -> { - button.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f, Align.center); - }); - button.clearChildren(); + Stack stack = new Stack(); + Tmp.v1.set(node.width, node.height); + if(node.zone.preview != null){ + Tmp.v1.set(Scaling.fit.apply(node.zone.preview.getWidth(), node.zone.preview.getHeight(), node.width, node.height)); + } + + stack.setSize(Tmp.v1.x, Tmp.v1.y); + stack.add(new Table(t -> t.margin(4f).add(new Image(node.zone.preview != null ? node.zone.preview : nomap).setScaling(Scaling.stretch)).color(node.zone.unlocked() ? Color.DARK_GRAY : Color.fromGray(0.2f)).grow())); + stack.update(() -> stack.setPosition(node.x + panX + width / 2f, node.y + panY + height / 2f, Align.center)); + + Button button = new Button("square"); buildButton(node.zone, button); - addChild(button); + stack.add(button); + addChild(stack); } dragged((x, y) -> { @@ -206,7 +230,8 @@ public class DeployDialog extends FloatingDialog{ for(ZoneNode node : nodes){ for(ZoneNode child : node.allChildren){ - Lines.stroke(Unit.dp.scl(3f), node.zone.locked() || child.zone.locked() ? Pal.gray : Pal.accent); + Lines.stroke(UnitScl.dp.scl(4f), node.zone.locked() || child.zone.locked() ? Pal.gray : Pal.gray); + Draw.alpha(parentAlpha); Lines.line(node.x + offsetX, node.y + offsetY, child.x + offsetX, child.y + offsetY); } } @@ -225,7 +250,7 @@ public class DeployDialog extends FloatingDialog{ this.zone = zone; this.parent = parent; this.width = this.height = nodeSize; - this.height /= 2f; + //this.height /= 2f; nodes.add(this); arr.selectFrom(content.zones(), other -> other.zoneRequirements.length > 0 && other.zoneRequirements[0].zone == zone); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java index d76a25a981..d5ddbb1233 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java @@ -9,7 +9,7 @@ import io.anuke.arc.graphics.g2d.GlyphLayout; import io.anuke.arc.scene.event.Touchable; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.arc.util.*; import io.anuke.arc.util.pooling.Pools; import io.anuke.mindustry.core.Platform; @@ -151,7 +151,7 @@ public class FileChooser extends FloatingDialog{ content.add(icontable).expandX().fillX(); content.row(); - content.center().add(pane).width(Core.graphics.isPortrait() ? Core.graphics.getWidth() / Unit.dp.scl(1) : Core.graphics.getWidth() / Unit.dp.scl(2)).colspan(3).grow(); + content.center().add(pane).width(Core.graphics.isPortrait() ? Core.graphics.getWidth() / UnitScl.dp.scl(1) : Core.graphics.getWidth() / UnitScl.dp.scl(2)).colspan(3).grow(); content.row(); if(!open){ @@ -190,7 +190,7 @@ public class FileChooser extends FloatingDialog{ GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new); - layout.setText(Core.scene.skin.getFont("default-font"), navigation.getText()); + layout.setText(Core.scene.skin.getFont("default"), navigation.getText()); if(layout.width < navigation.getWidth()){ navigation.setCursorPosition(0); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java index 7910a4ddd6..748d0e93a6 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java @@ -1,18 +1,16 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; -import io.anuke.arc.Events; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.scene.ui.Dialog; -import io.anuke.arc.scene.ui.ScrollPane; -import io.anuke.arc.util.Align; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.game.EventType.ResizeEvent; -import io.anuke.mindustry.graphics.Pal; +import io.anuke.arc.*; +import io.anuke.arc.input.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.net.Net; -import static io.anuke.mindustry.Vars.iconsize; -import static io.anuke.mindustry.Vars.state; +import static io.anuke.mindustry.Vars.*; public class FloatingDialog extends Dialog{ private boolean wasPaused; @@ -32,6 +30,7 @@ public class FloatingDialog extends Dialog{ state.set(State.playing); } } + Sounds.back.play(); }); shown(() -> { diff --git a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java index 485d4c3d21..82ddf20e6b 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java @@ -64,5 +64,9 @@ public class HostDialog extends FloatingDialog{ }).width(w).height(70f); cont.addButton("?", () -> ui.showInfo("$host.info")).size(65f, 70f).padLeft(6f); + + shown(() -> { + Core.app.post(() -> Core.settings.getBoolOnce("hostinfo", () -> ui.showInfo("$host.info"))); + }); } } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java index 9b5f6de9f7..71f72577fc 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java @@ -82,6 +82,8 @@ public class JoinDialog extends FloatingDialog{ setup(); refreshLocal(); refreshRemote(); + + Core.app.post(() -> Core.settings.getBoolOnce("joininfo", () -> ui.showInfo("$join.info"))); }); onResize(this::setup); @@ -310,6 +312,7 @@ public class JoinDialog extends FloatingDialog{ Time.runTask(2f, () -> { logic.reset(); + Net.reset(); Vars.netClient.beginConnecting(); Net.connect(ip, port, () -> { hide(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index e0103b2bbd..043bc7585a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -1,20 +1,20 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; -import io.anuke.arc.collection.Array; -import io.anuke.arc.files.FileHandle; -import io.anuke.arc.scene.ui.ScrollPane; -import io.anuke.arc.scene.ui.TextButton; -import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.files.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.Vars; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.core.Platform; -import io.anuke.mindustry.game.Saves.SaveSlot; -import io.anuke.mindustry.io.SaveIO; -import io.anuke.mindustry.io.SaveIO.SaveException; +import io.anuke.mindustry.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.core.*; +import io.anuke.mindustry.game.Saves.*; +import io.anuke.mindustry.io.*; +import io.anuke.mindustry.io.SaveIO.*; +import io.anuke.mindustry.net.Net; -import java.io.IOException; +import java.io.*; import static io.anuke.mindustry.Vars.*; @@ -137,7 +137,6 @@ public class LoadDialog extends FloatingDialog{ for(SaveSlot slot : control.saves.getSaveSlots()) if(!slot.isHidden()) valids = true; if(!valids){ - slots.row(); slots.addButton("$save.none", () -> { }).disabled(true).fillX().margin(20f).minWidth(340f).height(80f).pad(4f); @@ -170,6 +169,7 @@ public class LoadDialog extends FloatingDialog{ ui.loadAnd(() -> { try{ + Net.reset(); slot.load(); state.set(State.playing); }catch(SaveException e){ @@ -184,7 +184,6 @@ public class LoadDialog extends FloatingDialog{ public void modifyButton(TextButton button, SaveSlot slot){ button.clicked(() -> { if(!button.childrenPressed()){ - int build = slot.getBuild(); runLoadSave(slot); } }); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java index 64a588de1d..eb05a7502f 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadoutDialog.java @@ -1,12 +1,14 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.collection.Array; -import io.anuke.arc.function.Predicate; -import io.anuke.arc.function.Supplier; -import io.anuke.arc.scene.ui.TextButton; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.input.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.mindustry.type.*; -import static io.anuke.mindustry.Vars.content; +import static io.anuke.mindustry.Vars.*; public class LoadoutDialog extends FloatingDialog{ private Runnable hider; @@ -14,24 +16,58 @@ public class LoadoutDialog extends FloatingDialog{ private Runnable resetter; private Runnable updater; private Predicate filter; + private Table items; private int capacity; public LoadoutDialog(){ super("$configure"); - setFillParent(false); - addCloseButton(); + setFillParent(true); + + keyDown(key -> { + if(key == KeyCode.ESCAPE || key == KeyCode.BACK){ + Core.app.post(this::hide); + } + }); + + cont.add(items = new Table()).left(); + shown(this::setup); hidden(() -> { if(hider != null){ hider.run(); } }); - buttons.row(); - buttons.addButton("$settings.reset", () -> { + + cont.row(); + + cont.addButton("$add", () -> { + FloatingDialog dialog = new FloatingDialog(""); + dialog.setFillParent(false); + for(Item item : content.items().select(item -> filter.test(item) && item.type == ItemType.material && supplier.get().find(stack -> stack.item == item) == null)){ + TextButton button = dialog.cont.addButton("", "clear", () -> { + dialog.hide(); + supplier.get().add(new ItemStack(item, 0)); + updater.run(); + setup(); + }).size(300f, 36f).get(); + button.clearChildren(); + button.left(); + button.addImage(item.icon(Item.Icon.medium)).size(8 * 3).pad(4); + button.add(item.localizedName); + dialog.cont.row(); + } + dialog.show(); + }).size(100f, 40).left().disabled(b -> !content.items().contains(item -> filter.test(item) && !supplier.get().contains(stack -> stack.item == item))); + + cont.row(); + cont.addButton("$settings.reset", () -> { resetter.run(); updater.run(); setup(); }).size(210f, 64f); + + cont.row(); + cont.addImageTextButton("$back", "icon-arrow-left", iconsize, this::hide).size(210f, 64f); } public void show(int capacity, Supplier> supplier, Runnable reseter, Runnable updater, Runnable hider, Predicate filter){ @@ -45,50 +81,31 @@ public class LoadoutDialog extends FloatingDialog{ } void setup(){ - cont.clear(); + items.clearChildren(); + items.left(); float bsize = 40f; int step = 50; for(ItemStack stack : supplier.get()){ - cont.addButton("x", "clear-partial", () -> { + items.addButton("x", "clear-partial", () -> { supplier.get().remove(stack); updater.run(); setup(); }).size(bsize); - cont.addButton("-", "clear-partial", () -> { + items.addButton("-", "clear-partial", () -> { stack.amount = Math.max(stack.amount - step, 0); updater.run(); }).size(bsize); - cont.addButton("+", "clear-partial", () -> { + items.addButton("+", "clear-partial", () -> { stack.amount = Math.min(stack.amount + step, capacity); updater.run(); }).size(bsize); - cont.addImage(stack.item.icon(Item.Icon.medium)).size(8 * 3).padRight(4); - cont.label(() -> stack.amount + "").left(); + items.addImage(stack.item.icon(Item.Icon.medium)).size(8 * 3).padRight(4).padLeft(4); + items.label(() -> stack.amount + "").left(); - cont.row(); + items.row(); } - - cont.addButton("$add", () -> { - FloatingDialog dialog = new FloatingDialog(""); - dialog.setFillParent(false); - for(Item item : content.items().select(item -> filter.test(item) && item.type == ItemType.material && supplier.get().find(stack -> stack.item == item) == null)){ - TextButton button = dialog.cont.addButton("", "clear", () -> { - supplier.get().add(new ItemStack(item, 0)); - updater.run(); - setup(); - dialog.hide(); - }).size(300f, 36f).get(); - button.clearChildren(); - button.left(); - button.addImage(item.icon(Item.Icon.medium)).size(8 * 3).pad(4); - button.add(item.localizedName); - dialog.cont.row(); - } - dialog.show(); - }).colspan(4).size(100f, bsize).left().disabled(b -> !content.items().contains(item -> filter.test(item) && !supplier.get().contains(stack -> stack.item == item))); - pack(); } } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java index 1bc7051710..26ed6bf1c9 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MapPlayDialog.java @@ -1,19 +1,20 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; -import io.anuke.arc.scene.ui.ScrollPane; -import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.maps.Map; -import io.anuke.mindustry.ui.BorderImage; +import io.anuke.mindustry.maps.*; +import io.anuke.mindustry.ui.*; import static io.anuke.mindustry.Vars.*; public class MapPlayDialog extends FloatingDialog{ CustomRulesDialog dialog = new CustomRulesDialog(); Rules rules; - Gamemode selectedGamemode = Gamemode.survival; + @NonNull Gamemode selectedGamemode = Gamemode.survival; Map lastMap; public MapPlayDialog(){ @@ -22,7 +23,9 @@ public class MapPlayDialog extends FloatingDialog{ onResize(() -> { if(lastMap != null){ + Rules rules = this.rules; show(lastMap); + this.rules = rules; } }); } @@ -35,10 +38,12 @@ public class MapPlayDialog extends FloatingDialog{ //reset to any valid mode after switching to attack (one must exist) if(!selectedGamemode.valid(map)){ selectedGamemode = Structs.find(Gamemode.all, m -> m.valid(map)); + if(selectedGamemode == null){ + selectedGamemode = Gamemode.survival; + } } - rules = map.rules(); - rules = selectedGamemode.apply(map.rules()); + rules = map.applyRules(selectedGamemode); Table selmode = new Table(); selmode.add("$level.mode").colspan(4); @@ -52,7 +57,7 @@ public class MapPlayDialog extends FloatingDialog{ modes.addButton(mode.toString(), "toggle", () -> { selectedGamemode = mode; - rules = mode.apply(map.rules()); + rules = map.applyRules(mode); }).update(b -> b.setChecked(selectedGamemode == mode)).size(140f, 54f).disabled(!mode.valid(map)); if(i++ % 2 == 1) modes.row(); } @@ -61,7 +66,7 @@ public class MapPlayDialog extends FloatingDialog{ cont.add(selmode); cont.row(); - cont.addImageTextButton("$customize", "icon-tools-small", iconsizesmall, () -> dialog.show(rules, () -> rules = (selectedGamemode == null ? map.rules() : selectedGamemode.apply(map.rules())))).width(230); + cont.addImageTextButton("$customize", "icon-tools-small", iconsizesmall, () -> dialog.show(rules, () -> rules = map.applyRules(selectedGamemode))).width(230); cont.row(); cont.add(new BorderImage(map.texture, 3f)).size(mobile && !Core.graphics.isPortrait() ? 150f : 250f).get().setScaling(Scaling.fit); //only maps with survival are valid for high scores diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java index a59850a88d..d19c6b0ae7 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java @@ -75,7 +75,15 @@ public class MapsDialog extends FloatingDialog{ map = world.maps.makeLegacyMap(file); } - String name = map.tags.get("name"); + //when you attempt to import a save, it will have no name, so generate one + String name = map.tags.getOr("name", () -> { + String result = "unknown"; + int number = 0; + while(world.maps.byName(result + number++) != null); + return result + number; + }); + + //this will never actually get called, but it remains just in case if(name == null){ ui.showError("$editor.errorname"); return; @@ -109,7 +117,7 @@ public class MapsDialog extends FloatingDialog{ ScrollPane pane = new ScrollPane(maps); pane.setFadeScrollBars(false); - int maxwidth = Mathf.clamp((int)(Core.graphics.getWidth() / Unit.dp.scl(230)), 1, 8); + int maxwidth = Mathf.clamp((int)(Core.graphics.getWidth() / UnitScl.dp.scl(230)), 1, 8); float mapsize = 200f; int i = 0; @@ -168,7 +176,7 @@ public class MapsDialog extends FloatingDialog{ t.row(); t.add("$editor.author").padRight(10).color(Color.GRAY); t.row(); - t.add(map.author()).growX().wrap().padTop(2); + t.add(map.custom && map.author().isEmpty() ? "Anuke" : map.author()).growX().wrap().padTop(2); t.row(); t.add("$editor.description").padRight(10).color(Color.GRAY).top(); t.row(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java index 5a59074ed8..41790548a8 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MinimapDialog.java @@ -6,7 +6,7 @@ import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.input.KeyCode; import io.anuke.arc.scene.event.InputEvent; import io.anuke.arc.scene.event.InputListener; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import static io.anuke.mindustry.Vars.*; @@ -24,12 +24,13 @@ public class MinimapDialog extends FloatingDialog{ void setup(){ cont.clear(); - float size = Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / Unit.dp.scl(1f) / 1.3f; + float size = Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / UnitScl.dp.scl(1f) / 1.3f; cont.table("pane", t -> { t.addRect((x, y, width, height) -> { if(renderer.minimap.getRegion() == null) return; Draw.color(Color.WHITE); + Draw.alpha(parentAlpha); Draw.rect(renderer.minimap.getRegion(), x + width / 2f, y + height / 2f, width, height); if(renderer.minimap.getTexture() != null){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index 0a8a004d85..46506277f2 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -48,25 +48,21 @@ public class PausedDialog extends FloatingDialog{ } cont.addButton("$settings", ui.settings::show); - if(!world.isZone() && !state.isEditor()){ + if(!state.rules.tutorial){ + if(!world.isZone() && !state.isEditor()){ + cont.row(); + cont.addButton("$savegame", save::show); + cont.addButton("$loadgame", load::show).disabled(b -> Net.active()); + } + cont.row(); - cont.addButton("$savegame", save::show); - cont.addButton("$loadgame", load::show).disabled(b -> Net.active()); + + cont.addButton("$hostserver", ui.host::show).disabled(b -> Net.active()).colspan(2).width(dw * 2 + 20f); } cont.row(); - cont.addButton("$hostserver", ui.host::show).disabled(b -> Net.active()).colspan(2).width(dw * 2 + 20f); - cont.row(); - - cont.addButton("$quit", () -> { - ui.showConfirm("$confirm", "$quit.confirm", () -> { - wasClient = Net.client(); - if(Net.client()) netClient.disconnectQuietly(); - runExitSave(); - hide(); - }); - }).colspan(2).width(dw + 10f); + cont.addButton("$quit", this::showQuitConfirm).colspan(2).width(dw + 10f); }else{ cont.defaults().size(120f).pad(5); @@ -87,24 +83,30 @@ public class PausedDialog extends FloatingDialog{ cont.addRowImageTextButton("$hostserver.mobile", "icon-host", isize, ui.host::show).disabled(b -> Net.active()); - cont.addRowImageTextButton("$quit", "icon-quit", isize, () -> { - ui.showConfirm("$confirm", "$quit.confirm", () -> { - wasClient = Net.client(); - if(Net.client()) netClient.disconnectQuietly(); - runExitSave(); - hide(); - }); - }); + cont.addRowImageTextButton("$quit", "icon-quit", isize, this::showQuitConfirm); } } + void showQuitConfirm(){ + ui.showConfirm("$confirm", state.rules.tutorial ? "$quit.confirm.tutorial" : "$quit.confirm", () -> { + if(state.rules.tutorial){ + Core.settings.put("playedtutorial", true); + Core.settings.save(); + } + wasClient = Net.client(); + if(Net.client()) netClient.disconnectQuietly(); + runExitSave(); + hide(); + }); + } + public void runExitSave(){ if(state.isEditor() && !wasClient){ ui.editor.resumeEditing(); return; } - if(control.saves.getCurrent() == null || !control.saves.getCurrent().isAutosave()){ + if(control.saves.getCurrent() == null || !control.saves.getCurrent().isAutosave() || state.rules.tutorial){ state.set(State.menu); return; } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index 4d0c13284c..84c429ed0e 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -1,22 +1,24 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; -import io.anuke.arc.collection.ObjectMap; -import io.anuke.arc.files.FileHandle; -import io.anuke.arc.function.Consumer; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.scene.Element; -import io.anuke.arc.scene.event.InputEvent; -import io.anuke.arc.scene.event.InputListener; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.files.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.Texture.*; +import io.anuke.arc.input.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.event.*; import io.anuke.arc.scene.ui.*; -import io.anuke.arc.scene.ui.SettingsDialog.SettingsTable.Setting; -import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.arc.scene.ui.SettingsDialog.SettingsTable.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.core.Platform; -import io.anuke.mindustry.graphics.Pal; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.core.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.net.Net; +import static io.anuke.arc.Core.bundle; import static io.anuke.mindustry.Vars.*; public class SettingsMenuDialog extends SettingsDialog{ @@ -32,6 +34,7 @@ public class SettingsMenuDialog extends SettingsDialog{ setStyle(Core.scene.skin.get("dialog", WindowStyle.class)); hidden(() -> { + Sounds.back.play(); if(!state.is(State.menu)){ if(!wasPaused || Net.active()) state.set(State.playing); @@ -39,6 +42,7 @@ public class SettingsMenuDialog extends SettingsDialog{ }); shown(() -> { + back(); if(!state.is(State.menu)){ wasPaused = state.is(State.paused); state.set(State.paused); @@ -58,14 +62,9 @@ public class SettingsMenuDialog extends SettingsDialog{ menu = new Table("button"); - Consumer s = table -> { - table.row(); - table.addImageTextButton("$back", "icon-arrow-left", iconsize, this::back).size(240f, 60f).colspan(2).padTop(15f); - }; - - game = new SettingsTable(s); - graphics = new SettingsTable(s); - sound = new SettingsTable(s); + game = new SettingsTable(); + graphics = new SettingsTable(); + sound = new SettingsTable(); prefs = new Table(); prefs.top(); @@ -102,8 +101,6 @@ public class SettingsMenuDialog extends SettingsDialog{ row(); add(buttons).fillX(); - hidden(this::back); - addSettings(); } @@ -127,9 +124,8 @@ public class SettingsMenuDialog extends SettingsDialog{ } void addSettings(){ - //TODO add when sound works again - //sound.volumePrefs(); - sound.add("[LIGHT_GRAY]there is no sound implemented in v4 yet"); + sound.sliderPref("musicvol", bundle.get("setting.musicvol.name", "Music Volume"), 100, 0, 100, 1, i -> i + "%"); + sound.sliderPref("sfxvol", bundle.get("setting.sfxvol.name", "SFX Volume"), 100, 0, 100, 1, i -> i + "%"); game.screenshakePref(); if(mobile){ @@ -145,45 +141,55 @@ public class SettingsMenuDialog extends SettingsDialog{ game.pref(new Setting(){ @Override public void add(SettingsTable table){ - table.addButton("$settings.cleardata", () -> { - FloatingDialog dialog = new FloatingDialog("$settings.cleardata"); - dialog.setFillParent(false); - dialog.cont.defaults().size(230f, 60f).pad(3); - dialog.addCloseButton(); - dialog.cont.addButton("$settings.clearunlocks", () -> { - ui.showConfirm("$confirm", "$settings.clear.confirm", () -> { - data.reset(); - dialog.hide(); - }); - }); - dialog.cont.row(); - dialog.cont.addButton("$settings.clearall", () -> { - ui.showConfirm("$confirm", "$settings.clearall.confirm", () -> { - ObjectMap map = new ObjectMap<>(); - for(String value : Core.settings.keys()){ - if(value.contains("usid") || value.contains("uuid")){ - map.put(value, Core.settings.getString(value)); - } - } - Core.settings.clear(); - Core.settings.putAll(map); - Core.settings.save(); + table.addButton("$settings.cleardata", () -> ui.showConfirm("$confirm", "$settings.clearall.confirm", () -> { + ObjectMap map = new ObjectMap<>(); + for(String value : Core.settings.keys()){ + if(value.contains("usid") || value.contains("uuid")){ + map.put(value, Core.settings.getString(value)); + } + } + Core.settings.clear(); + Core.settings.putAll(map); + Core.settings.save(); - for(FileHandle file : dataDirectory.list()){ - file.deleteDirectory(); - } + for(FileHandle file : dataDirectory.list()){ + file.deleteDirectory(); + } - Core.app.exit(); - }); - }); - dialog.cont.row(); - dialog.show(); - }).size(220f, 60f).pad(6).left(); + Core.app.exit(); + })).size(220f, 60f).pad(6).left(); table.add(); table.row(); } }); + game.pref(new Setting(){ + @Override + public void add(SettingsTable table){ + table.addButton("$tutorial.retake", () -> { + hide(); + control.playTutorial(); + }).size(220f, 60f).pad(6).left(); + table.add(); + table.row(); + hide(); + } + }); + + if(android && (Core.files.local("mindustry-maps").exists() || Core.files.local("mindustry-saves").exists())){ + game.pref(new Setting(){ + @Override + public void add(SettingsTable table){ + table.addButton("$classic.export", () -> { + control.checkClassicData(); + }).size(220f, 60f).pad(6).left(); + table.add(); + table.row(); + hide(); + } + }); + } + graphics.sliderPref("uiscale", 100, 25, 400, 25, s -> { if(Core.graphics.getFrameId() > 10){ Log.info("changed"); @@ -239,8 +245,6 @@ public class SettingsMenuDialog extends SettingsDialog{ graphics.checkPref("lasers", true); graphics.checkPref("pixelate", false); - //TODO is this necessary? - /* graphics.checkPref("linear", false, b -> { for(Texture tex : Core.atlas.getTextures()){ TextureFilter filter = b ? TextureFilter.Linear : TextureFilter.Nearest; @@ -253,7 +257,7 @@ public class SettingsMenuDialog extends SettingsDialog{ TextureFilter filter = TextureFilter.Linear; tex.setFilter(filter, filter); } - }*/ + } } private void back(){ @@ -264,17 +268,23 @@ public class SettingsMenuDialog extends SettingsDialog{ private void visible(int index){ prefs.clearChildren(); - Table table = new Table[]{game, graphics, sound}[index]; - prefs.add(table); + prefs.add(new Table[]{game, graphics, sound}[index]); } @Override public void addCloseButton(){ - buttons.addImageTextButton("$menu", "icon-arrow-left", 30f, this::hide).size(230f, 64f); + buttons.addImageTextButton("$back", "icon-arrow-left", 30f, () -> { + if(prefs.getChildren().first() != menu){ + back(); + }else{ + hide(); + } + }).size(230f, 64f); keyDown(key -> { - if(key == KeyCode.ESCAPE || key == KeyCode.BACK) + if(key == KeyCode.ESCAPE || key == KeyCode.BACK){ hide(); + } }); } } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java index caf670a280..4af3810a1f 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/TechTreeDialog.java @@ -15,6 +15,7 @@ import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.content.TechTree.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.type.*; import io.anuke.mindustry.ui.*; @@ -24,7 +25,7 @@ import io.anuke.mindustry.world.Block.*; import static io.anuke.mindustry.Vars.*; public class TechTreeDialog extends FloatingDialog{ - private final float nodeSize = Unit.dp.scl(60f); + private final float nodeSize = UnitScl.dp.scl(60f); private ObjectSet nodes = new ObjectSet<>(); private TechTreeNode root = new TechTreeNode(TechTree.root, null); private Rectangle bounds = new Rectangle(); @@ -59,8 +60,8 @@ public class TechTreeDialog extends FloatingDialog{ void treeLayout(){ TreeLayout layout = new TreeLayout(); - layout.gapBetweenLevels = Unit.dp.scl(60f); - layout.gapBetweenNodes = Unit.dp.scl(40f); + layout.gapBetweenLevels = UnitScl.dp.scl(60f); + layout.gapBetweenNodes = UnitScl.dp.scl(40f); LayoutNode node = new LayoutNode(root, null); layout.layout(node); bounds.set(layout.getBounds()); @@ -237,6 +238,7 @@ public class TechTreeDialog extends FloatingDialog{ treeLayout(); rebuild(); Core.scene.act(); + Sounds.unlock.play(); } void rebuild(){ @@ -318,7 +320,8 @@ public class TechTreeDialog extends FloatingDialog{ for(TechTreeNode child : node.children){ if(!child.visible) continue; - Lines.stroke(Unit.dp.scl(4f), locked(node.node) || locked(child.node) ? Pal.gray : Pal.accent); + Lines.stroke(UnitScl.dp.scl(4f), locked(node.node) || locked(child.node) ? Pal.gray : Pal.accent); + Draw.alpha(parentAlpha); Lines.line(node.x + offsetX, node.y + offsetY, child.x + offsetX, child.y + offsetY); } } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java index 1ff99705c4..835557aa14 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ZoneInfoDialog.java @@ -1,15 +1,16 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.scene.ui.Button; -import io.anuke.arc.scene.ui.layout.Table; +import io.anuke.arc.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.scene.ui.layout.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.graphics.Pal; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.type.*; -import io.anuke.mindustry.type.Zone.ZoneRequirement; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Block.Icon; +import io.anuke.mindustry.type.Zone.*; +import io.anuke.mindustry.world.*; +import io.anuke.mindustry.world.Block.*; import static io.anuke.mindustry.Vars.*; @@ -104,7 +105,7 @@ public class ZoneInfoDialog extends FloatingDialog{ cont.row(); cont.table(desc -> { desc.left().defaults().left().width(Core.graphics.isPortrait() ? 350f : 500f); - desc.pane(t -> t.marginRight(12f).add(zone.description).wrap().growX()).fillX().maxHeight(mobile ? 240f : 400f).pad(2).padBottom(8f).get().setScrollingDisabled(true, false); + desc.pane(t -> t.marginRight(12f).add(zone.description).wrap().growX()).fillX().maxHeight(mobile ? 300f : 450f).pad(2).padBottom(8f).get().setScrollingDisabled(true, false); desc.row(); desc.table(t -> { @@ -142,6 +143,7 @@ public class ZoneInfoDialog extends FloatingDialog{ Button button = cont.addButton(zone.locked() ? "$uncover" : "$launch", () -> { if(!data.isUnlocked(zone)){ + Sounds.unlock.play(); data.unlockContent(zone); ui.deploy.setup(); setup(zone); @@ -151,29 +153,9 @@ public class ZoneInfoDialog extends FloatingDialog{ hide(); control.playZone(zone); } - }).minWidth(150f).margin(13f).padTop(5).disabled(b -> zone.locked() ? !canUnlock(zone) : !data.hasItems(zone.getLaunchCost())).uniformY().get(); + }).minWidth(150f).margin(13f).padTop(5).disabled(b -> zone.locked() ? !zone.canUnlock() : !data.hasItems(zone.getLaunchCost())).uniformY().get(); button.row(); button.add(iteminfo); } - - private boolean canUnlock(Zone zone){ - if(data.isUnlocked(zone)){ - return true; - } - - for(ZoneRequirement other : zone.zoneRequirements){ - if(other.zone.bestWave() < other.wave){ - return false; - } - } - - for(Block other : zone.blockRequirements){ - if(!data.isUnlocked(other)){ - return false; - } - } - - return true; - } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java index b7da02cdf2..4a8b96707e 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.ui.fragments; import io.anuke.annotations.Annotations.Loc; import io.anuke.annotations.Annotations.Remote; -import io.anuke.arc.Core; +import io.anuke.arc.*; import io.anuke.arc.collection.IntSet; import io.anuke.arc.function.BooleanProvider; import io.anuke.arc.function.Supplier; @@ -21,6 +21,7 @@ import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.util.*; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.type.Player; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item.Icon; @@ -100,6 +101,8 @@ public class BlockInventoryFragment extends Fragment{ Call.requestItem(player, tile, lastItem, amount); holding = false; holdTime = 0f; + + Events.fire(new WithdrawEvent()); } } @@ -152,6 +155,7 @@ public class BlockInventoryFragment extends Fragment{ lastItem = item; holding = true; holdTime = 0f; + Events.fire(new WithdrawEvent()); } return true; } diff --git a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java index 28b1eff9ba..ca8aab453a 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java @@ -11,7 +11,7 @@ import io.anuke.arc.scene.ui.Label; import io.anuke.arc.scene.ui.Label.LabelStyle; import io.anuke.arc.scene.ui.TextField; import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.scene.ui.layout.Unit; +import io.anuke.arc.scene.ui.layout.UnitScl; import io.anuke.arc.util.Align; import io.anuke.arc.util.Time; import io.anuke.mindustry.Vars; @@ -33,9 +33,9 @@ public class ChatFragment extends Table{ private Label fieldlabel = new Label(">"); private BitmapFont font; private GlyphLayout layout = new GlyphLayout(); - private float offsetx = Unit.dp.scl(4), offsety = Unit.dp.scl(4), fontoffsetx = Unit.dp.scl(2), chatspace = Unit.dp.scl(50); + private float offsetx = UnitScl.dp.scl(4), offsety = UnitScl.dp.scl(4), fontoffsetx = UnitScl.dp.scl(2), chatspace = UnitScl.dp.scl(50); private Color shadowColor = new Color(0, 0, 0, 0.4f); - private float textspacing = Unit.dp.scl(10); + private float textspacing = UnitScl.dp.scl(10); private Array history = new Array<>(); private int historyPos = 0; private int scrollPos = 0; @@ -50,7 +50,7 @@ public class ChatFragment extends Table{ super(); setFillParent(true); - font = scene.skin.getFont("default-font"); + font = scene.skin.getFont("default"); visible(() -> { if(!Net.active() && messages.size > 0){ @@ -106,7 +106,7 @@ public class ChatFragment extends Table{ chatfield = new TextField("", new TextField.TextFieldStyle(scene.skin.get(TextField.TextFieldStyle.class))); chatfield.setFilter((field, c) -> field.getText().length() < Vars.maxTextLength); chatfield.getStyle().background = null; - chatfield.getStyle().font = scene.skin.getFont("default-font-chat"); + chatfield.getStyle().font = scene.skin.getFont("chat"); chatfield.getStyle().fontColor = Color.WHITE; chatfield.setStyle(chatfield.getStyle()); @@ -123,7 +123,7 @@ public class ChatFragment extends Table{ @Override public void draw(){ float opacity = Core.settings.getInt("chatopacity") / 100f; - float textWidth = Math.min(Core.graphics.getWidth()/1.5f, Unit.dp.scl(700f)); + float textWidth = Math.min(Core.graphics.getWidth()/1.5f, UnitScl.dp.scl(700f)); Draw.color(shadowColor); @@ -158,7 +158,7 @@ public class ChatFragment extends Table{ font.getCache().setAlphas(opacity); } - Fill.crect(offsetx, theight - layout.height - 2, textWidth + Unit.dp.scl(4f), layout.height + textspacing); + Fill.crect(offsetx, theight - layout.height - 2, textWidth + UnitScl.dp.scl(4f), layout.height + textspacing); Draw.color(shadowColor); Draw.alpha(opacity * shadowColor.a); diff --git a/core/src/io/anuke/mindustry/ui/fragments/FadeInFragment.java b/core/src/io/anuke/mindustry/ui/fragments/FadeInFragment.java new file mode 100644 index 0000000000..4d903430dc --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/fragments/FadeInFragment.java @@ -0,0 +1,39 @@ +package io.anuke.mindustry.ui.fragments; + +import io.anuke.arc.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.event.*; + +/** Fades in a black overlay.*/ +public class FadeInFragment extends Fragment{ + private static final float duration = 40f; + float time = 0f; + + @Override + public void build(Group parent){ + parent.addChild(new Element(){ + { + setFillParent(true); + touchable(Touchable.disabled); + } + + @Override + public void draw(){ + Draw.color(0f, 0f, 0f, Mathf.clamp(1f - time)); + Fill.crect(0, 0, Core.graphics.getWidth(), Core.graphics.getHeight()); + Draw.color(); + } + + @Override + public void act(float delta){ + super.act(delta); + time += 1f / duration; + if(time > 1){ + remove(); + } + } + }); + } +} diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 2a34a372fb..6c6b0beaaf 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -1,42 +1,33 @@ package io.anuke.mindustry.ui.fragments; -import io.anuke.annotations.Annotations.Loc; -import io.anuke.annotations.Annotations.Remote; -import io.anuke.arc.Core; -import io.anuke.arc.Events; -import io.anuke.arc.collection.Array; -import io.anuke.arc.graphics.Color; -import io.anuke.arc.graphics.g2d.Draw; -import io.anuke.arc.graphics.g2d.Lines; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.math.Interpolation; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.math.geom.Vector2; -import io.anuke.arc.scene.Element; -import io.anuke.arc.scene.Group; -import io.anuke.arc.scene.actions.Actions; -import io.anuke.arc.scene.event.Touchable; -import io.anuke.arc.scene.style.TextureRegionDrawable; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.graphics.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.input.*; +import io.anuke.arc.math.*; +import io.anuke.arc.math.geom.*; +import io.anuke.arc.scene.*; +import io.anuke.arc.scene.actions.*; +import io.anuke.arc.scene.event.*; +import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.layout.*; -import io.anuke.arc.scene.utils.Elements; import io.anuke.arc.util.*; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.Units; -import io.anuke.mindustry.entities.type.BaseUnit; -import io.anuke.mindustry.entities.type.Player; -import io.anuke.mindustry.game.EventType.StateChangeEvent; -import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.game.UnlockableContent; -import io.anuke.mindustry.gen.Call; -import io.anuke.mindustry.graphics.Pal; -import io.anuke.mindustry.input.Binding; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; +import io.anuke.mindustry.input.*; import io.anuke.mindustry.net.Net; -import io.anuke.mindustry.net.Packets.AdminAction; -import io.anuke.mindustry.type.ContentType; -import io.anuke.mindustry.type.UnitType; +import io.anuke.mindustry.net.Packets.*; +import io.anuke.mindustry.type.*; import io.anuke.mindustry.ui.*; -import io.anuke.mindustry.ui.dialogs.FloatingDialog; +import io.anuke.mindustry.ui.dialogs.*; import static io.anuke.mindustry.Vars.*; @@ -53,6 +44,7 @@ public class HudFragment extends Fragment{ private float lastCoreHP; private Team lastTeam; private float coreAttackOpacity = 0f; + private long lastToast; public void build(Group parent){ @@ -79,7 +71,7 @@ public class HudFragment extends Fragment{ }else{ state.set(state.is(State.paused) ? State.playing : State.paused); } - }).update(i -> { + }).name("pause").update(i -> { if(Net.active()){ i.getStyle().imageUp = Core.scene.skin.getDrawable("icon-players"); }else{ @@ -110,7 +102,7 @@ public class HudFragment extends Fragment{ select.addImage("whiteui").color(Pal.gray).width(4f).fillY(); - float size = Unit.dp.scl(dsize); + float size = UnitScl.dp.scl(dsize); Array children = new Array<>(select.getChildren()); //now, you may be wondering, why is this necessary? the answer is, I don't know, but it fixes layout issues somehow @@ -122,7 +114,7 @@ public class HudFragment extends Fragment{ if(fi < 4){ elem.setSize(size); }else{ - elem.setSize(Unit.dp.scl(4f), size); + elem.setSize(UnitScl.dp.scl(4f), size); } elem.setPosition(fi * size, Core.graphics.getHeight(), Align.topLeft); return true; @@ -144,21 +136,14 @@ public class HudFragment extends Fragment{ }); Table wavesMain, editorMain; - boolean[] prev = {false}; - cont.stack(wavesMain = new Table(), editorMain = new Table()).height(wavesMain.getPrefHeight()).update(s -> { - ((Table)s.getParent()).getCell(s).height((wavesMain.isVisible() ? wavesMain.getPrefHeight() : editorMain.getPrefHeight()) / Unit.dp.scl(1f)); - if(prev[0] != wavesMain.isVisible()){ - s.getParent().pack(); - prev[0] = wavesMain.isVisible(); - } - }); + cont.stack(wavesMain = new Table(), editorMain = new Table()).height(wavesMain.getPrefHeight()); { wavesMain.visible(() -> shown && !state.isEditor()); - wavesMain.left(); + wavesMain.top().left(); Stack stack = new Stack(); - TextButton waves = new TextButton("", "wave"); + Button waves = new Button("wave"); Table btable = new Table().margin(0); stack.add(waves); @@ -253,7 +238,7 @@ public class HudFragment extends Fragment{ //fps display cont.table(info -> { info.top().left().margin(4).visible(() -> Core.settings.getBool("fps")); - info.update(() -> info.setTranslation(state.rules.waves || state.isEditor() ? 0f : -Unit.dp.scl(dsize * 4 + 3), 0)); + info.update(() -> info.setTranslation(state.rules.waves || state.isEditor() ? 0f : -UnitScl.dp.scl(dsize * 4 + 3), 0)); IntFormat fps = new IntFormat("fps"); IntFormat ping = new IntFormat("ping"); @@ -264,7 +249,7 @@ public class HudFragment extends Fragment{ }); //minimap - parent.fill(t -> t.top().right().add(new Minimap()).visible(() -> Core.settings.getBool("minimap"))); + parent.fill(t -> t.top().right().add(new Minimap()).visible(() -> Core.settings.getBool("minimap") && !state.rules.tutorial)); //spawner warning parent.fill(t -> { @@ -327,69 +312,38 @@ public class HudFragment extends Fragment{ .update(label -> label.getColor().set(Color.ORANGE).lerp(Color.SCARLET, Mathf.absin(Time.time(), 2f, 1f)))).touchable(Touchable.disabled); }); - //launch button + //tutorial text parent.fill(t -> { - t.top().right(); - TextButton[] testb = {null}; - TextButton button = Elements.newButton("$launch", () -> { - FloatingDialog dialog = new FloatingDialog("$launch"); - dialog.update(() -> { - if(!testb[0].isVisible()){ - dialog.hide(); - } - }); - dialog.cont.add("$launch.confirm").width(500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center); - dialog.buttons.defaults().size(200f, 54f).pad(2f); - dialog.setFillParent(false); - dialog.buttons.addButton("$cancel", dialog::hide); - dialog.buttons.addButton("$ok", () -> { - dialog.hide(); - Call.launchZone(); - }); - dialog.keyDown(KeyCode.ESCAPE, dialog::hide); - dialog.keyDown(KeyCode.BACK, dialog::hide); - dialog.show(); + Runnable resize = () -> { + t.clearChildren(); + t.top().right().visible(() -> state.rules.tutorial); + t.stack(new Button("default"){{ + marginLeft(48f); + labelWrap(() -> control.tutorial.stage.text() + (control.tutorial.canNext() ? "\n\n" + Core.bundle.get("tutorial.next") : "")).width(!Core.graphics.isPortrait() ? 400f : 160f).pad(2f); + clicked(() -> control.tutorial.nextSentence()); + setDisabled(() -> !control.tutorial.canNext()); + }}, + new Table(f -> { + f.left().addImageButton("icon-arrow-left-small", "empty", iconsizesmall, () -> { + control.tutorial.prevSentence(); + }).width(44f).growY().visible(() -> control.tutorial.canPrev()); + })); + }; - }); - - testb[0] = button; - - button.getStyle().disabledFontColor = Color.WHITE; - button.margin(16f); - button.visible(() -> - world.isZone() && - world.getZone().metCondition() && - !Net.client() && - state.wave % world.getZone().launchPeriod == 0 && !world.spawner.isSpawning()); - - button.update(() -> { - if(world.getZone() == null){ - button.setText(""); - return; - } - - button.setText(state.enemies() > 0 ? Core.bundle.format("launch.unable", state.enemies()) : Core.bundle.get("launch") + "\n" + - Core.bundle.format("launch.next", state.wave + world.getZone().launchPeriod)); - - button.getLabel().setColor(Tmp.c1.set(Color.WHITE).lerp(state.enemies() > 0 ? Color.WHITE : Color.SCARLET, - Mathf.absin(Time.time(), 2f, 1f))); - }); - - button.setDisabled(() -> state.enemies() > 0); - button.getLabelCell().left().get().setAlignment(Align.left, Align.left); - t.add(button).size(250f, 80f); + resize.run(); + Events.on(ResizeEvent.class, e -> resize.run()); }); //paused table parent.fill(t -> { - t.top().visible(() -> state.isPaused()); - t.table("button", top -> top.add("$paused").pad(6f)); + t.top().visible(() -> state.isPaused()).touchable(Touchable.disabled); + t.table("button-trans", top -> top.add("$paused").pad(5f)); }); //'saving' indicator parent.fill(t -> { t.bottom().visible(() -> control.saves.isSaving()); - t.add("$saveload"); + t.add("$saveload").style("outline"); }); blockfrag.build(parent); @@ -419,25 +373,43 @@ public class HudFragment extends Fragment{ } } - public void showToast(String text){ - Table table = new Table("button"); - table.update(() -> { - if(state.is(State.menu)){ - table.remove(); - } - }); - table.margin(12); - table.addImage("icon-check").size(iconsize).pad(3); - table.add(text).wrap().width(280f).get().setAlignment(Align.center, Align.center); - table.pack(); + private void scheduleToast(Runnable run){ + long duration = (int)(3.5 * 1000); + long since = Time.timeSinceMillis(lastToast); + if(since > duration){ + lastToast = Time.millis(); + run.run(); + }else{ + Time.runTask((duration - since) / 1000f * 60f, run); + lastToast += duration; + } + } - //create container table which will align and move - Table container = Core.scene.table(); - container.top().add(table); - container.setTranslation(0, table.getPrefHeight()); - container.actions(Actions.translateBy(0, -table.getPrefHeight(), 1f, Interpolation.fade), Actions.delay(4f), - //nesting actions() calls is necessary so the right prefHeight() is used - Actions.run(() -> container.actions(Actions.translateBy(0, table.getPrefHeight(), 1f, Interpolation.fade), Actions.remove()))); + public void showToast(String text){ + if(state.is(State.menu)) return; + + scheduleToast(() -> { + Sounds.message.play(); + + Table table = new Table("button"); + table.update(() -> { + if(state.is(State.menu)){ + table.remove(); + } + }); + table.margin(12); + table.addImage("icon-check").size(iconsize).pad(3); + table.add(text).wrap().width(280f).get().setAlignment(Align.center, Align.center); + table.pack(); + + //create container table which will align and move + Table container = Core.scene.table(); + container.top().add(table); + container.setTranslation(0, table.getPrefHeight()); + container.actions(Actions.translateBy(0, -table.getPrefHeight(), 1f, Interpolation.fade), Actions.delay(2.5f), + //nesting actions() calls is necessary so the right prefHeight() is used + Actions.run(() -> container.actions(Actions.translateBy(0, table.getPrefHeight(), 1f, Interpolation.fade), Actions.remove()))); + }); } public boolean shown(){ @@ -447,46 +419,51 @@ public class HudFragment extends Fragment{ /** Show unlock notification for a new recipe. */ public void showUnlock(UnlockableContent content){ //some content may not have icons... yet - if(content.getContentIcon() == null) return; + //also don't play in the tutorial to prevent confusion + if(content.getContentIcon() == null || state.is(State.menu) || state.rules.tutorial) return; + + Sounds.message.play(); //if there's currently no unlock notification... if(lastUnlockTable == null){ - Table table = new Table("button"); - table.update(() -> { - if(state.is(State.menu)){ - table.remove(); - lastUnlockLayout = null; + scheduleToast(() -> { + Table table = new Table("button"); + table.update(() -> { + if(state.is(State.menu)){ + table.remove(); + lastUnlockLayout = null; + lastUnlockTable = null; + } + }); + table.margin(12); + + Table in = new Table(); + + //create texture stack for displaying + Image image = new Image(content.getContentIcon()); + image.setScaling(Scaling.fit); + + in.add(image).size(48f).pad(2); + + //add to table + table.add(in).padRight(8); + table.add("$unlocked"); + table.pack(); + + //create container table which will align and move + Table container = Core.scene.table(); + container.top().add(table); + container.setTranslation(0, table.getPrefHeight()); + container.actions(Actions.translateBy(0, -table.getPrefHeight(), 1f, Interpolation.fade), Actions.delay(2.5f), + //nesting actions() calls is necessary so the right prefHeight() is used + Actions.run(() -> container.actions(Actions.translateBy(0, table.getPrefHeight(), 1f, Interpolation.fade), Actions.run(() -> { lastUnlockTable = null; - } + lastUnlockLayout = null; + }), Actions.remove()))); + + lastUnlockTable = container; + lastUnlockLayout = in; }); - table.margin(12); - - Table in = new Table(); - - //create texture stack for displaying - Image image = new Image(content.getContentIcon()); - image.setScaling(Scaling.fit); - - in.add(image).size(48f).pad(2); - - //add to table - table.add(in).padRight(8); - table.add("$unlocked"); - table.pack(); - - //create container table which will align and move - Table container = Core.scene.table(); - container.top().add(table); - container.setTranslation(0, table.getPrefHeight()); - container.actions(Actions.translateBy(0, -table.getPrefHeight(), 1f, Interpolation.fade), Actions.delay(4f), - //nesting actions() calls is necessary so the right prefHeight() is used - Actions.run(() -> container.actions(Actions.translateBy(0, table.getPrefHeight(), 1f, Interpolation.fade), Actions.run(() -> { - lastUnlockTable = null; - lastUnlockLayout = null; - }), Actions.remove()))); - - lastUnlockTable = container; - lastUnlockLayout = in; }else{ //max column size int col = 3; @@ -506,7 +483,7 @@ public class HudFragment extends Fragment{ lastUnlockLayout.clearChildren(); lastUnlockLayout.defaults().size(size).pad(2); - for(int i = 0; i < esize && i <= cap; i++){ + for(int i = 0; i < esize; i++){ lastUnlockLayout.add(elements.get(i)); if(i % col == col - 1){ @@ -542,6 +519,37 @@ public class HudFragment extends Fragment{ Core.scene.add(image); } + private void showLaunchConfirm(){ + FloatingDialog dialog = new FloatingDialog("$launch"); + dialog.update(() -> { + if(!inLaunchWave()){ + dialog.hide(); + } + }); + dialog.cont.add("$launch.confirm").width(500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center); + dialog.buttons.defaults().size(200f, 54f).pad(2f); + dialog.setFillParent(false); + dialog.buttons.addButton("$cancel", dialog::hide); + dialog.buttons.addButton("$ok", () -> { + dialog.hide(); + Call.launchZone(); + }); + dialog.keyDown(KeyCode.ESCAPE, dialog::hide); + dialog.keyDown(KeyCode.BACK, dialog::hide); + dialog.show(); + } + + private boolean inLaunchWave(){ + return world.isZone() && + world.getZone().metCondition() && + !Net.client() && + state.wave % world.getZone().launchPeriod == 0 && !world.spawner.isSpawning(); + } + + private boolean canLaunch(){ + return inLaunchWave() && state.enemies() <= 0; + } + private void toggleMenus(){ if(flip != null){ flip.getStyle().imageUp = Core.scene.skin.getDrawable(shown ? "icon-arrow-down" : "icon-arrow-up"); @@ -553,7 +561,7 @@ public class HudFragment extends Fragment{ } } - private void addWaveTable(TextButton table){ + private void addWaveTable(Button table){ StringBuilder ibuild = new StringBuilder(); IntFormat wavef = new IntFormat("wave"); @@ -581,11 +589,28 @@ public class HudFragment extends Fragment{ StringBuilder builder = new StringBuilder(); + table.setName("waves"); table.labelWrap(() -> { builder.setLength(0); builder.append(wavef.get(state.wave)); builder.append("\n"); + if(inLaunchWave()){ + builder.append("[#"); + Tmp.c1.set(Color.WHITE).lerp(state.enemies() > 0 ? Color.WHITE : Color.SCARLET, Mathf.absin(Time.time(), 2f, 1f)).toString(builder); + builder.append("]"); + + if(!canLaunch()){ + builder.append(Core.bundle.get("launch.unable2")); + }else{ + builder.append(Core.bundle.get("launch")); + builder.append("\n"); + builder.append(Core.bundle.format("launch.next", state.wave + world.getZone().launchPeriod)); + builder.append("\n"); + } + builder.append("[]\n"); + } + if(state.enemies() > 0){ if(state.enemies() == 1){ builder.append(enemyf.get(state.enemies())); @@ -604,19 +629,29 @@ public class HudFragment extends Fragment{ return builder; }).growX().pad(8f); - table.setDisabled(true); + table.setDisabled(() -> !canLaunch()); table.visible(() -> state.rules.waves); + table.clicked(() -> { + if(canLaunch()){ + showLaunchConfirm(); + } + }); + } + + private boolean canSkipWave(){ + return state.rules.waves && ((Net.server() || player.isAdmin) || !Net.active()) && state.enemies() == 0 && !world.spawner.isSpawning() && !state.rules.tutorial; } private void addPlayButton(Table table){ table.right().addImageButton("icon-play", "right", 30f, () -> { if(Net.client() && player.isAdmin){ Call.onAdminRequest(player, AdminAction.wave); + }else if(inLaunchWave()){ + ui.showConfirm("$confirm", "$launch.skip.confirm", () -> !canSkipWave(), () -> state.wavetime = 0f); }else{ state.wavetime = 0f; } }).growY().fillX().right().width(40f) - .visible(() -> state.rules.waves && ((Net.server() || player.isAdmin) || !Net.active()) && state.enemies() == 0 - && !world.spawner.isSpawning()); + .visible(this::canSkipWave); } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java b/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java index c994102e68..9eb53bb913 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/LoadingFragment.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.ui.fragments; import io.anuke.arc.scene.Group; +import io.anuke.arc.scene.actions.*; import io.anuke.arc.scene.event.Touchable; import io.anuke.arc.scene.ui.Label; import io.anuke.arc.scene.ui.TextButton; @@ -42,13 +43,18 @@ public class LoadingFragment extends Fragment{ } public void show(String text){ + table.clearActions(); + table.touchable(Touchable.enabled); table.