Merge branches 'master' and 'mech-rework' of https://github.com/Anuken/Mindustry into mech-rework
# Conflicts: # core/assets/sprites/block_colors.png # core/assets/sprites/sprites.atlas # core/assets/sprites/sprites.png # core/assets/sprites/sprites3.png # core/assets/sprites/sprites5.png # core/src/mindustry/ai/BlockIndexer.java # core/src/mindustry/core/World.java # core/src/mindustry/entities/traits/Entity.java # core/src/mindustry/entities/type/BaseEntity.java # core/src/mindustry/entities/type/TileEntity.java # core/src/mindustry/world/blocks/defense/MendProjector.java # core/src/mindustry/world/blocks/defense/OverdriveProjector.java # core/src/mindustry/world/blocks/production/Drill.java # gradle.properties
2
.github/Mindustry-CodeStyle-IJ.xml
vendored
@@ -12,7 +12,7 @@
|
|||||||
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
|
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
|
||||||
<value>
|
<value>
|
||||||
<package name="java.awt" withSubpackages="false" static="false" />
|
<package name="java.awt" withSubpackages="false" static="false" />
|
||||||
<package name="io.anuke.mindustry" withSubpackages="false" static="true" />
|
<package name="mindustry" withSubpackages="false" static="true" />
|
||||||
<package name="javax.swing" withSubpackages="false" static="false" />
|
<package name="javax.swing" withSubpackages="false" static="false" />
|
||||||
</value>
|
</value>
|
||||||
</option>
|
</option>
|
||||||
|
|||||||
13
.gitignore
vendored
@@ -32,8 +32,8 @@ steam_appid.txt
|
|||||||
/core/assets/gifexport/
|
/core/assets/gifexport/
|
||||||
/core/assets/version.properties
|
/core/assets/version.properties
|
||||||
/core/assets/locales
|
/core/assets/locales
|
||||||
/ios/src/io/anuke/mindustry/gen/
|
/ios/src/mindustry/gen/
|
||||||
/core/src/io/anuke/mindustry/gen/
|
/core/src/mindustry/gen/
|
||||||
ios/robovm.properties
|
ios/robovm.properties
|
||||||
packr-out/
|
packr-out/
|
||||||
config/
|
config/
|
||||||
@@ -55,15 +55,6 @@ crash-report-*
|
|||||||
## Robovm
|
## Robovm
|
||||||
/ios/robovm-build/
|
/ios/robovm-build/
|
||||||
|
|
||||||
## GWT
|
|
||||||
/html/war/
|
|
||||||
/html/gwt-unitCache/
|
|
||||||
.apt_generated/
|
|
||||||
.gwt/
|
|
||||||
gwt-unitCache/
|
|
||||||
www-test/
|
|
||||||
.gwt-tmp/
|
|
||||||
|
|
||||||
## Android Studio and Intellij and Android in general
|
## Android Studio and Intellij and Android in general
|
||||||
/android/libs/armeabi/
|
/android/libs/armeabi/
|
||||||
/android/libs/armeabi-v7a/
|
/android/libs/armeabi-v7a/
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ Import [this style file](.github/Mindustry-CodeStyle-IJ.xml) into IntelliJ to ge
|
|||||||
|
|
||||||
#### Do not use incompatible Java features (java.util.function, java.awt).
|
#### Do not use incompatible Java features (java.util.function, java.awt).
|
||||||
Android [does not support](https://developer.android.com/studio/write/java8-support#supported_features) many of Java 8's features, such as the packages `java.util.function`, `java.util.stream` or `forEach` in collections. Do not use these in your code.
|
Android [does not support](https://developer.android.com/studio/write/java8-support#supported_features) many of Java 8's features, such as the packages `java.util.function`, `java.util.stream` or `forEach` in collections. Do not use these in your code.
|
||||||
If you need to use functional interfaces, use the ones in `io.anuke.arc.func`, which are more or less the same with different naming schemes.
|
If you need to use functional interfaces, use the ones in `arc.func`, which are more or less the same with different naming schemes.
|
||||||
|
|
||||||
The same applies to any class *outside* of the standard `java.[n]io` / `java.net` / `java.util` packages: Most of them are not supported.
|
The same applies to any class *outside* of the standard `java.[n]io` / `java.net` / `java.util` packages: Most of them are not supported.
|
||||||
`java.awt` is one of these packages: do not use it, ever. It is not supported on any platform, even desktop - the entire package is removed during JRE minimization.
|
`java.awt` is one of these packages: do not use it, ever. It is not supported on any platform, even desktop - the entire package is removed during JRE minimization.
|
||||||
@@ -39,7 +39,7 @@ In general, if you are using IntelliJ, you should be warned about platform incom
|
|||||||
|
|
||||||
|
|
||||||
#### Use `arc` collections and classes when possible.
|
#### Use `arc` collections and classes when possible.
|
||||||
Instead of using `java.util.List`, `java.util.HashMap`, and other standard Java collections, use `Array`, `ObjectMap` and other equivalents from `io.anuke.arc.collection`.
|
Instead of using `java.util.List`, `java.util.HashMap`, and other standard Java collections, use `Array`, `ObjectMap` and other equivalents from `arc.struct`.
|
||||||
Why? Because that's what the rest of the codebase uses, and the standard collections have a lot of cruft and usability issues associated with them.
|
Why? Because that's what the rest of the codebase uses, and the standard collections have a lot of cruft and usability issues associated with them.
|
||||||
In the rare case that concurrency is required, you may use the standard Java classes for that purpose (e.g. `CopyOnWriteArrayList`).
|
In the rare case that concurrency is required, you may use the standard Java classes for that purpose (e.g. `CopyOnWriteArrayList`).
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ What you'll usually need to change:
|
|||||||
- `HashSet` -> `ObjectSet`
|
- `HashSet` -> `ObjectSet`
|
||||||
- `HashMap` -> `ObjectMap`
|
- `HashMap` -> `ObjectMap`
|
||||||
- `List` / `ArrayList` / `Stack` -> `Array`
|
- `List` / `ArrayList` / `Stack` -> `Array`
|
||||||
- `java.util.Queue` -> `io.anuke.arc.collection.Queue`
|
- `java.util.Queue` -> `arc.struct.Queue`
|
||||||
- *Many others*
|
- *Many others*
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
android:theme="@style/GdxTheme" android:fullBackupContent="@xml/backup_rules">
|
android:theme="@style/GdxTheme" android:fullBackupContent="@xml/backup_rules">
|
||||||
<meta-data android:name="android.max_aspect" android:value="2.1"/>
|
<meta-data android:name="android.max_aspect" android:value="2.1"/>
|
||||||
<activity
|
<activity
|
||||||
android:name="io.anuke.mindustry.AndroidLauncher"
|
android:name="mindustry.android.AndroidLauncher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:screenOrientation="user"
|
android:screenOrientation="user"
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
|
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ dependencies{
|
|||||||
implementation project(":core")
|
implementation project(":core")
|
||||||
|
|
||||||
implementation arcModule("backends:backend-android")
|
implementation arcModule("backends:backend-android")
|
||||||
|
implementation 'com.jakewharton.android.repackaged:dalvik-dx:9.0.0_r3'
|
||||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
|
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
|
||||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
|
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
|
||||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
|
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
|
||||||
@@ -160,5 +161,5 @@ task run(type: Exec){
|
|||||||
}
|
}
|
||||||
|
|
||||||
def adb = path + "/platform-tools/adb"
|
def adb = path + "/platform-tools/adb"
|
||||||
commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/io.anuke.mindustry.AndroidLauncher'
|
commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/mindustry.android.AndroidLauncher'
|
||||||
}
|
}
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
-verbose
|
-verbose
|
||||||
-verbose
|
-verbose
|
||||||
-ignorewarnings
|
-ignorewarnings
|
||||||
-keep class io.anuke.mindustry.game.Rules
|
-keep class mindustry.game.Rules
|
||||||
-keep class io.anuke.mindustry.desktop.DesktopLauncher
|
-keep class mindustry.desktop.DesktopLauncher
|
||||||
-keepclasseswithmembers public class * {
|
-keepclasseswithmembers public class * {
|
||||||
public static void main(java.lang.String[]);
|
public static void main(java.lang.String[]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry;
|
package mindustry.android;
|
||||||
|
|
||||||
import android.*;
|
import android.*;
|
||||||
import android.app.*;
|
import android.app.*;
|
||||||
@@ -9,23 +9,24 @@ import android.os.Build.*;
|
|||||||
import android.os.*;
|
import android.os.*;
|
||||||
import android.provider.Settings.*;
|
import android.provider.Settings.*;
|
||||||
import android.telephony.*;
|
import android.telephony.*;
|
||||||
import io.anuke.arc.*;
|
import arc.*;
|
||||||
import io.anuke.arc.backends.android.surfaceview.*;
|
import arc.backend.android.*;
|
||||||
import io.anuke.arc.files.*;
|
import arc.files.*;
|
||||||
import io.anuke.arc.func.Cons;
|
import arc.func.*;
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.arc.util.serialization.*;
|
import arc.util.serialization.*;
|
||||||
import io.anuke.mindustry.game.Saves.*;
|
import mindustry.*;
|
||||||
import io.anuke.mindustry.io.*;
|
import mindustry.game.Saves.*;
|
||||||
import io.anuke.mindustry.mod.*;
|
import mindustry.io.*;
|
||||||
import io.anuke.mindustry.ui.dialogs.*;
|
import mindustry.ui.dialogs.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.System;
|
import java.lang.System;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
|
|
||||||
public class AndroidLauncher extends AndroidApplication{
|
public class AndroidLauncher extends AndroidApplication{
|
||||||
public static final int PERMISSION_REQUEST_CODE = 1;
|
public static final int PERMISSION_REQUEST_CODE = 1;
|
||||||
@@ -66,11 +67,16 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shareFile(FileHandle file){
|
public org.mozilla.javascript.Context getScriptContext(){
|
||||||
|
return AndroidRhinoContext.enter(getContext().getCacheDir());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showFileChooser(boolean open, String extension, Cons<FileHandle> cons){
|
public void shareFile(Fi file){
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showFileChooser(boolean open, String extension, Cons<Fi> cons){
|
||||||
if(VERSION.SDK_INT >= VERSION_CODES.Q){
|
if(VERSION.SDK_INT >= VERSION_CODES.Q){
|
||||||
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
|
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
@@ -81,7 +87,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
|
|
||||||
if(uri.getPath().contains("(invalid)")) return;
|
if(uri.getPath().contains("(invalid)")) return;
|
||||||
|
|
||||||
Core.app.post(() -> Core.app.post(() -> cons.get(new FileHandle(uri.getPath()){
|
Core.app.post(() -> Core.app.post(() -> cons.get(new Fi(uri.getPath()){
|
||||||
@Override
|
@Override
|
||||||
public InputStream read(){
|
public InputStream read(){
|
||||||
try{
|
try{
|
||||||
@@ -139,7 +145,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
useImmersiveMode = true;
|
useImmersiveMode = true;
|
||||||
depth = 0;
|
depth = 0;
|
||||||
hideStatusBar = true;
|
hideStatusBar = true;
|
||||||
errorHandler = ModCrashHandler::handle;
|
//errorHandler = ModCrashHandler::handle;
|
||||||
}});
|
}});
|
||||||
checkFiles(getIntent());
|
checkFiles(getIntent());
|
||||||
}
|
}
|
||||||
@@ -181,7 +187,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
Core.app.post(() -> Core.app.post(() -> {
|
Core.app.post(() -> Core.app.post(() -> {
|
||||||
if(save){ //open save
|
if(save){ //open save
|
||||||
System.out.println("Opening save.");
|
System.out.println("Opening save.");
|
||||||
FileHandle file = Core.files.local("temp-save." + saveExtension);
|
Fi file = Core.files.local("temp-save." + saveExtension);
|
||||||
file.write(inStream, false);
|
file.write(inStream, false);
|
||||||
if(SaveIO.isSaveValid(file)){
|
if(SaveIO.isSaveValid(file)){
|
||||||
try{
|
try{
|
||||||
@@ -194,7 +200,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
ui.showErrorMessage("$save.import.invalid");
|
ui.showErrorMessage("$save.import.invalid");
|
||||||
}
|
}
|
||||||
}else if(map){ //open map
|
}else if(map){ //open map
|
||||||
FileHandle file = Core.files.local("temp-map." + mapExtension);
|
Fi file = Core.files.local("temp-map." + mapExtension);
|
||||||
file.write(inStream, false);
|
file.write(inStream, false);
|
||||||
Core.app.post(() -> {
|
Core.app.post(() -> {
|
||||||
System.out.println("Opening map.");
|
System.out.println("Opening map.");
|
||||||
227
android/src/mindustry/android/AndroidRhinoContext.java
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
package mindustry.android;
|
||||||
|
|
||||||
|
import android.annotation.*;
|
||||||
|
import android.os.*;
|
||||||
|
import android.os.Build.*;
|
||||||
|
import arc.*;
|
||||||
|
import arc.backend.android.*;
|
||||||
|
import com.android.dex.*;
|
||||||
|
import com.android.dx.cf.direct.*;
|
||||||
|
import com.android.dx.command.dexer.*;
|
||||||
|
import com.android.dx.dex.*;
|
||||||
|
import com.android.dx.dex.cf.*;
|
||||||
|
import com.android.dx.dex.file.DexFile;
|
||||||
|
import com.android.dx.merge.*;
|
||||||
|
import dalvik.system.*;
|
||||||
|
import org.mozilla.javascript.*;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helps to prepare a Rhino Context for usage on android.
|
||||||
|
* @author F43nd1r
|
||||||
|
* @since 11.01.2016
|
||||||
|
*/
|
||||||
|
public class AndroidRhinoContext{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* call this instead of {@link Context#enter()}
|
||||||
|
* @return a context prepared for android
|
||||||
|
*/
|
||||||
|
public static Context enter(File cacheDirectory){
|
||||||
|
if(!SecurityController.hasGlobal())
|
||||||
|
SecurityController.initGlobal(new SecurityController(){
|
||||||
|
@Override
|
||||||
|
public GeneratedClassLoader createClassLoader(ClassLoader classLoader, Object o){
|
||||||
|
return Context.getCurrentContext().createClassLoader(classLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getDynamicSecurityDomain(Object o){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
AndroidContextFactory factory;
|
||||||
|
if(!ContextFactory.hasExplicitGlobal()){
|
||||||
|
factory = new AndroidContextFactory(cacheDirectory);
|
||||||
|
ContextFactory.getGlobalSetter().setContextFactoryGlobal(factory);
|
||||||
|
}else if(!(ContextFactory.getGlobal() instanceof AndroidContextFactory)){
|
||||||
|
throw new IllegalStateException("Cannot initialize factory for Android Rhino: There is already another factory");
|
||||||
|
}else{
|
||||||
|
factory = (AndroidContextFactory)ContextFactory.getGlobal();
|
||||||
|
}
|
||||||
|
|
||||||
|
return factory.enterContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that the classLoader used is correct
|
||||||
|
* @author F43nd1r
|
||||||
|
* @since 11.01.2016
|
||||||
|
*/
|
||||||
|
public static class AndroidContextFactory extends ContextFactory{
|
||||||
|
private final File cacheDirectory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new factory. It will cache generated code in the given directory
|
||||||
|
* @param cacheDirectory the cache directory
|
||||||
|
*/
|
||||||
|
public AndroidContextFactory(File cacheDirectory){
|
||||||
|
this.cacheDirectory = cacheDirectory;
|
||||||
|
initApplicationClassLoader(createClassLoader(AndroidContextFactory.class.getClassLoader()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a ClassLoader which is able to deal with bytecode
|
||||||
|
* @param parent the parent of the create classloader
|
||||||
|
* @return a new ClassLoader
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public BaseAndroidClassLoader createClassLoader(ClassLoader parent){
|
||||||
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
|
||||||
|
return new InMemoryAndroidClassLoader(parent);
|
||||||
|
}
|
||||||
|
return new FileAndroidClassLoader(parent, cacheDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onContextReleased(final Context cx){
|
||||||
|
super.onContextReleased(cx);
|
||||||
|
((BaseAndroidClassLoader)cx.getApplicationClassLoader()).reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compiles java bytecode to dex bytecode and loads it
|
||||||
|
* @author F43nd1r
|
||||||
|
* @since 11.01.2016
|
||||||
|
*/
|
||||||
|
abstract static class BaseAndroidClassLoader extends ClassLoader implements GeneratedClassLoader{
|
||||||
|
|
||||||
|
public BaseAndroidClassLoader(ClassLoader parent){
|
||||||
|
super(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> defineClass(String name, byte[] data){
|
||||||
|
try{
|
||||||
|
DexOptions dexOptions = new DexOptions();
|
||||||
|
DexFile dexFile = new DexFile(dexOptions);
|
||||||
|
DirectClassFile classFile = new DirectClassFile(data, name.replace('.', '/') + ".class", true);
|
||||||
|
classFile.setAttributeFactory(StdAttributeFactory.THE_ONE);
|
||||||
|
classFile.getMagic();
|
||||||
|
DxContext context = new DxContext();
|
||||||
|
dexFile.add(CfTranslator.translate(context, classFile, null, new CfOptions(), dexOptions, dexFile));
|
||||||
|
Dex dex = new Dex(dexFile.toDex(null, false));
|
||||||
|
Dex oldDex = getLastDex();
|
||||||
|
if(oldDex != null){
|
||||||
|
dex = new DexMerger(new Dex[]{dex, oldDex}, CollisionPolicy.KEEP_FIRST, context).merge();
|
||||||
|
}
|
||||||
|
return loadClass(dex, name);
|
||||||
|
}catch(IOException | ClassNotFoundException e){
|
||||||
|
throw new FatalLoadingException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Class<?> loadClass(Dex dex, String name) throws ClassNotFoundException;
|
||||||
|
|
||||||
|
protected abstract Dex getLastDex();
|
||||||
|
|
||||||
|
protected abstract void reset();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void linkClass(Class<?> aClass){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> loadClass(String name, boolean resolve)
|
||||||
|
throws ClassNotFoundException{
|
||||||
|
Class<?> loadedClass = findLoadedClass(name);
|
||||||
|
if(loadedClass == null){
|
||||||
|
Dex dex = getLastDex();
|
||||||
|
if(dex != null){
|
||||||
|
loadedClass = loadClass(dex, name);
|
||||||
|
}
|
||||||
|
if(loadedClass == null){
|
||||||
|
loadedClass = getParent().loadClass(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return loadedClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Might be thrown in any Rhino method that loads bytecode if the loading failed. */
|
||||||
|
public static class FatalLoadingException extends RuntimeException{
|
||||||
|
FatalLoadingException(Throwable t){
|
||||||
|
super("Failed to define class", t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class FileAndroidClassLoader extends BaseAndroidClassLoader{
|
||||||
|
private static int instanceCounter = 0;
|
||||||
|
private final File dexFile;
|
||||||
|
|
||||||
|
public FileAndroidClassLoader(ClassLoader parent, File cacheDir){
|
||||||
|
super(parent);
|
||||||
|
int id = instanceCounter++;
|
||||||
|
dexFile = new File(cacheDir, id + ".dex");
|
||||||
|
cacheDir.mkdirs();
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?> loadClass(Dex dex, String name) throws ClassNotFoundException{
|
||||||
|
try{
|
||||||
|
dex.writeTo(dexFile);
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
android.content.Context context = ((AndroidApplication) Core.app).getContext();
|
||||||
|
return new DexClassLoader(dexFile.getPath(), VERSION.SDK_INT >= 21 ? context.getCodeCacheDir().getPath() : context.getCacheDir().getAbsolutePath(), null, getParent()).loadClass(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Dex getLastDex(){
|
||||||
|
if(dexFile.exists()){
|
||||||
|
try{
|
||||||
|
return new Dex(dexFile);
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void reset(){
|
||||||
|
dexFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.O)
|
||||||
|
static class InMemoryAndroidClassLoader extends BaseAndroidClassLoader{
|
||||||
|
private Dex last;
|
||||||
|
|
||||||
|
public InMemoryAndroidClassLoader(ClassLoader parent){
|
||||||
|
super(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?> loadClass(Dex dex, String name) throws ClassNotFoundException{
|
||||||
|
last = dex;
|
||||||
|
return new InMemoryDexClassLoader(ByteBuffer.wrap(dex.getBytes()), getParent()).loadClass(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Dex getLastDex(){
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void reset(){
|
||||||
|
last = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import io.anuke.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.*;
|
import javax.lang.model.*;
|
||||||
@@ -12,10 +12,10 @@ import java.nio.file.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||||
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.StyleDefaults")
|
@SupportedAnnotationTypes("mindustry.annotations.Annotations.StyleDefaults")
|
||||||
public class AssetsAnnotationProcessor extends AbstractProcessor{
|
public class AssetsAnnotationProcessor extends AbstractProcessor{
|
||||||
/** Name of the base package to put all the generated classes. */
|
/** Name of the base package to put all the generated classes. */
|
||||||
private static final String packageName = "io.anuke.mindustry.gen";
|
private static final String packageName = "mindustry.gen";
|
||||||
private String path;
|
private String path;
|
||||||
private int round;
|
private int round;
|
||||||
|
|
||||||
@@ -39,8 +39,8 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
.getParent().getParent().getParent().getParent().getParent().getParent().toString();
|
.getParent().getParent().getParent().getParent().getParent().getParent().toString();
|
||||||
path = path.replace("%20", " ");
|
path = path.replace("%20", " ");
|
||||||
|
|
||||||
processSounds("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound");
|
processSounds("Sounds", path + "/assets/sounds", "arc.audio.Sound");
|
||||||
processSounds("Musics", path + "/assets/music", "io.anuke.arc.audio.Music");
|
processSounds("Musics", path + "/assets/music", "arc.audio.Music");
|
||||||
processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class));
|
processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -75,7 +75,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
suffix = suffix.isEmpty() ? "" : "-" + suffix;
|
suffix = suffix.isEmpty() ? "" : "-" + suffix;
|
||||||
|
|
||||||
String sfilen = filename + suffix;
|
String sfilen = filename + suffix;
|
||||||
String dtype = p.getFileName().toString().endsWith(".9.png") ? "io.anuke.arc.scene.style.NinePatchDrawable" : "io.anuke.arc.scene.style.TextureRegionDrawable";
|
String dtype = p.getFileName().toString().endsWith(".9.png") ? "arc.scene.style.NinePatchDrawable" : "arc.scene.style.TextureRegionDrawable";
|
||||||
|
|
||||||
String varname = capitalize(sfilen);
|
String varname = capitalize(sfilen);
|
||||||
TypeSpec.Builder ttype = type;
|
TypeSpec.Builder ttype = type;
|
||||||
@@ -91,7 +91,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
if(SourceVersion.isKeyword(varname)) varname += "s";
|
if(SourceVersion.isKeyword(varname)) varname += "s";
|
||||||
|
|
||||||
ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC);
|
ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC);
|
||||||
tload.addStatement(varname + " = ("+dtype+")io.anuke.arc.Core.atlas.drawable($S)", sfilen);
|
tload.addStatement(varname + " = ("+dtype+")arc.Core.atlas.drawable($S)", sfilen);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> {
|
t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> {
|
||||||
String fname = field.getSimpleName().toString();
|
String fname = field.getSimpleName().toString();
|
||||||
if(fname.startsWith("default")){
|
if(fname.startsWith("default")){
|
||||||
loadStyles.addStatement("io.anuke.arc.Core.scene.addStyle(" + field.asType().toString() + ".class, io.anuke.mindustry.ui.Styles." + fname + ")");
|
loadStyles.addStatement("arc.Core.scene.addStyle(" + field.asType().toString() + ".class, mindustry.ui.Styles." + fname + ")");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -136,17 +136,17 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
|
|
||||||
String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
|
String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
|
||||||
|
|
||||||
String filename = "io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\"";
|
String filename = "arc.Core.app.getType() != arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\"";
|
||||||
|
|
||||||
loadBegin.addStatement("io.anuke.arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3"));
|
loadBegin.addStatement("arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3"));
|
||||||
|
|
||||||
dispose.addStatement("io.anuke.arc.Core.assets.unload(" + filename + ")");
|
dispose.addStatement("arc.Core.assets.unload(" + filename + ")");
|
||||||
dispose.addStatement(name + " = null");
|
dispose.addStatement(name + " = null");
|
||||||
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
||||||
});
|
});
|
||||||
|
|
||||||
if(classname.equals("Sounds")){
|
if(classname.equals("Sounds")){
|
||||||
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
||||||
}
|
}
|
||||||
|
|
||||||
type.addMethod(loadBegin.build());
|
type.addMethod(loadBegin.build());
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.sun.source.util.*;
|
import com.sun.source.util.*;
|
||||||
import com.sun.tools.javac.tree.*;
|
import com.sun.tools.javac.tree.*;
|
||||||
import com.sun.tools.javac.tree.JCTree.*;
|
import com.sun.tools.javac.tree.JCTree.*;
|
||||||
import io.anuke.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.*;
|
import javax.lang.model.*;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.sun.source.tree.*;
|
import com.sun.source.tree.*;
|
||||||
import com.sun.source.util.TreePathScanner;
|
import com.sun.source.util.TreePathScanner;
|
||||||
@@ -9,7 +9,7 @@ import com.sun.tools.javac.code.Symbol.MethodSymbol;
|
|||||||
import com.sun.tools.javac.code.Type.ClassType;
|
import com.sun.tools.javac.code.Type.ClassType;
|
||||||
import com.sun.tools.javac.tree.JCTree.JCIdent;
|
import com.sun.tools.javac.tree.JCTree.JCIdent;
|
||||||
import com.sun.tools.javac.tree.JCTree.JCTypeApply;
|
import com.sun.tools.javac.tree.JCTree.JCTypeApply;
|
||||||
import io.anuke.annotations.Annotations.CallSuper;
|
import mindustry.annotations.Annotations.CallSuper;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import io.anuke.annotations.Annotations.ReadClass;
|
import mindustry.annotations.Annotations.ReadClass;
|
||||||
import io.anuke.annotations.Annotations.WriteClass;
|
import mindustry.annotations.Annotations.WriteClass;
|
||||||
|
|
||||||
import javax.annotation.processing.RoundEnvironment;
|
import javax.annotation.processing.RoundEnvironment;
|
||||||
import javax.lang.model.element.Element;
|
import javax.lang.model.element.Element;
|
||||||
@@ -11,8 +11,8 @@ import java.util.HashMap;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass}
|
* This class finds reader and writer methods annotated by the {@link Annotations.WriteClass}
|
||||||
* and {@link io.anuke.annotations.Annotations.ReadClass} annotations.
|
* and {@link Annotations.ReadClass} annotations.
|
||||||
*/
|
*/
|
||||||
public class IOFinder{
|
public class IOFinder{
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import io.anuke.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
|
|
||||||
import javax.lang.model.element.ExecutableElement;
|
import javax.lang.model.element.ExecutableElement;
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import io.anuke.annotations.Annotations.Loc;
|
import mindustry.annotations.Annotations.Loc;
|
||||||
import io.anuke.annotations.Annotations.Remote;
|
import mindustry.annotations.Annotations.Remote;
|
||||||
import io.anuke.annotations.IOFinder.ClassSerializer;
|
import mindustry.annotations.IOFinder.ClassSerializer;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.lang.model.SourceVersion;
|
||||||
@@ -16,9 +16,9 @@ import java.util.stream.Collectors;
|
|||||||
/** The annotation processor for generating remote method call code. */
|
/** The annotation processor for generating remote method call code. */
|
||||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||||
@SupportedAnnotationTypes({
|
@SupportedAnnotationTypes({
|
||||||
"io.anuke.annotations.Annotations.Remote",
|
"mindustry.annotations.Annotations.Remote",
|
||||||
"io.anuke.annotations.Annotations.WriteClass",
|
"mindustry.annotations.Annotations.WriteClass",
|
||||||
"io.anuke.annotations.Annotations.ReadClass",
|
"mindustry.annotations.Annotations.ReadClass",
|
||||||
})
|
})
|
||||||
public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
|
public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
|
||||||
/** Maximum size of each event packet. */
|
/** Maximum size of each event packet. */
|
||||||
@@ -26,7 +26,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
|
|||||||
/** Warning on top of each autogenerated file. */
|
/** Warning on top of each autogenerated file. */
|
||||||
public static final String autogenWarning = "Autogenerated file. Do not modify!\n";
|
public static final String autogenWarning = "Autogenerated file. Do not modify!\n";
|
||||||
/** Name of the base package to put all the generated classes. */
|
/** Name of the base package to put all the generated classes. */
|
||||||
private static final String packageName = "io.anuke.mindustry.gen";
|
private static final String packageName = "mindustry.gen";
|
||||||
|
|
||||||
/** Name of class that handles reading and invoking packets on the server. */
|
/** Name of class that handles reading and invoking packets on the server. */
|
||||||
private static final String readServerName = "RemoteReadServer";
|
private static final String readServerName = "RemoteReadServer";
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import io.anuke.annotations.IOFinder.ClassSerializer;
|
import mindustry.annotations.IOFinder.ClassSerializer;
|
||||||
|
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
import javax.tools.Diagnostic.Kind;
|
import javax.tools.Diagnostic.Kind;
|
||||||
@@ -47,7 +47,7 @@ public class RemoteReadGenerator{
|
|||||||
Constructor<TypeName> cons = TypeName.class.getDeclaredConstructor(String.class);
|
Constructor<TypeName> cons = TypeName.class.getDeclaredConstructor(String.class);
|
||||||
cons.setAccessible(true);
|
cons.setAccessible(true);
|
||||||
|
|
||||||
TypeName playerType = cons.newInstance("io.anuke.mindustry.entities.type.Player");
|
TypeName playerType = cons.newInstance("mindustry.entities.type.Player");
|
||||||
//add player parameter
|
//add player parameter
|
||||||
readMethod.addParameter(playerType, "player");
|
readMethod.addParameter(playerType, "player");
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import io.anuke.annotations.Annotations.Loc;
|
import mindustry.annotations.Annotations.Loc;
|
||||||
import io.anuke.annotations.IOFinder.ClassSerializer;
|
import mindustry.annotations.IOFinder.ClassSerializer;
|
||||||
|
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
import javax.tools.Diagnostic.Kind;
|
import javax.tools.Diagnostic.Kind;
|
||||||
@@ -77,7 +77,7 @@ public class RemoteWriteGenerator{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!elem.getParameters().get(0).asType().toString().equals("io.anuke.mindustry.entities.type.Player")){
|
if(!elem.getParameters().get(0).asType().toString().equals("mindustry.entities.type.Player")){
|
||||||
Utils.messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", elem);
|
Utils.messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", elem);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -85,19 +85,19 @@ public class RemoteWriteGenerator{
|
|||||||
|
|
||||||
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
|
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
|
||||||
if(!toAll){
|
if(!toAll){
|
||||||
method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "playerConnection");
|
method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "playerConnection");
|
||||||
}
|
}
|
||||||
|
|
||||||
//add sender to ignore
|
//add sender to ignore
|
||||||
if(forwarded){
|
if(forwarded){
|
||||||
method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "exceptConnection");
|
method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "exceptConnection");
|
||||||
}
|
}
|
||||||
|
|
||||||
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
|
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
|
||||||
if(!forwarded && methodEntry.local != Loc.none){
|
if(!forwarded && methodEntry.local != Loc.none){
|
||||||
//add in local checks
|
//add in local checks
|
||||||
if(methodEntry.local != Loc.both){
|
if(methodEntry.local != Loc.both){
|
||||||
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.Vars.net.active())");
|
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !mindustry.Vars.net.active())");
|
||||||
}
|
}
|
||||||
|
|
||||||
//concatenate parameters
|
//concatenate parameters
|
||||||
@@ -106,7 +106,7 @@ public class RemoteWriteGenerator{
|
|||||||
for(VariableElement var : elem.getParameters()){
|
for(VariableElement var : elem.getParameters()){
|
||||||
//special case: calling local-only methods uses the local player
|
//special case: calling local-only methods uses the local player
|
||||||
if(index == 0 && methodEntry.where == Loc.client){
|
if(index == 0 && methodEntry.where == Loc.client){
|
||||||
results.append("io.anuke.mindustry.Vars.player");
|
results.append("mindustry.Vars.player");
|
||||||
}else{
|
}else{
|
||||||
results.append(var.getSimpleName());
|
results.append(var.getSimpleName());
|
||||||
}
|
}
|
||||||
@@ -127,7 +127,7 @@ public class RemoteWriteGenerator{
|
|||||||
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
|
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
|
||||||
|
|
||||||
//add statement to create packet from pool
|
//add statement to create packet from pool
|
||||||
method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.arc.util.pooling.Pools");
|
method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "mindustry.net.Packets.InvokePacket", "arc.util.pooling.Pools");
|
||||||
//assign buffer
|
//assign buffer
|
||||||
method.addStatement("packet.writeBuffer = TEMP_BUFFER");
|
method.addStatement("packet.writeBuffer = TEMP_BUFFER");
|
||||||
//assign priority
|
//assign priority
|
||||||
@@ -159,7 +159,7 @@ public class RemoteWriteGenerator{
|
|||||||
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
|
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
|
||||||
|
|
||||||
if(writePlayerSkipCheck){ //write begin check
|
if(writePlayerSkipCheck){ //write begin check
|
||||||
method.beginControlFlow("if(io.anuke.mindustry.Vars.net.server())");
|
method.beginControlFlow("if(mindustry.Vars.net.server())");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
|
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
|
||||||
@@ -194,19 +194,19 @@ public class RemoteWriteGenerator{
|
|||||||
|
|
||||||
if(forwarded){ //forward packet
|
if(forwarded){ //forward packet
|
||||||
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
|
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
|
||||||
sendString = "io.anuke.mindustry.Vars.net.send(";
|
sendString = "mindustry.Vars.net.send(";
|
||||||
}else{
|
}else{
|
||||||
sendString = "io.anuke.mindustry.Vars.net.sendExcept(exceptConnection, ";
|
sendString = "mindustry.Vars.net.sendExcept(exceptConnection, ";
|
||||||
}
|
}
|
||||||
}else if(toAll){ //send to all players / to server
|
}else if(toAll){ //send to all players / to server
|
||||||
sendString = "io.anuke.mindustry.Vars.net.send(";
|
sendString = "mindustry.Vars.net.send(";
|
||||||
}else{ //send to specific client from server
|
}else{ //send to specific client from server
|
||||||
sendString = "playerConnection.send(";
|
sendString = "playerConnection.send(";
|
||||||
}
|
}
|
||||||
|
|
||||||
//send the actual packet
|
//send the actual packet
|
||||||
method.addStatement(sendString + "packet, " +
|
method.addStatement(sendString + "packet, " +
|
||||||
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
|
(methodEntry.unreliable ? "mindustry.net.Net.SendMode.udp" : "mindustry.net.Net.SendMode.tcp") + ")");
|
||||||
|
|
||||||
|
|
||||||
//end check for server/client
|
//end check for server/client
|
||||||
@@ -217,8 +217,8 @@ public class RemoteWriteGenerator{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getCheckString(Loc loc){
|
private String getCheckString(Loc loc){
|
||||||
return loc.isClient && loc.isServer ? "io.anuke.mindustry.Vars.net.server() || io.anuke.mindustry.Vars.net.client()" :
|
return loc.isClient && loc.isServer ? "mindustry.Vars.net.server() || mindustry.Vars.net.client()" :
|
||||||
loc.isClient ? "io.anuke.mindustry.Vars.net.client()" :
|
loc.isClient ? "mindustry.Vars.net.client()" :
|
||||||
loc.isServer ? "io.anuke.mindustry.Vars.net.server()" : "false";
|
loc.isServer ? "mindustry.Vars.net.server()" : "false";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,37 +1,29 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import io.anuke.annotations.Annotations.Serialize;
|
import mindustry.annotations.Annotations.*;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.lang.model.*;
|
||||||
|
import javax.lang.model.element.Modifier;
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
import javax.lang.model.util.ElementFilter;
|
import javax.lang.model.util.*;
|
||||||
|
import javax.tools.Diagnostic.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.*;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Set;
|
import java.util.zip.*;
|
||||||
|
|
||||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||||
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.Serialize")
|
@SupportedAnnotationTypes("mindustry.annotations.Annotations.Serialize")
|
||||||
public class SerializeAnnotationProcessor extends AbstractProcessor{
|
public class SerializeAnnotationProcessor extends AbstractProcessor{
|
||||||
/** Target class name. */
|
/** Target class name. */
|
||||||
private static final String className = "Serialization";
|
private static final String className = "Serialization";
|
||||||
/** Name of the base package to put all the generated classes. */
|
/** Name of the base package to put all the generated classes. */
|
||||||
private static final String packageName = "io.anuke.mindustry.gen";
|
private static final String packageName = "mindustry.gen";
|
||||||
|
|
||||||
private int round;
|
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
|
@Override
|
||||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
|
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
|
||||||
if(round++ != 0) return false; //only process 1 round
|
if(round++ != 0) return false; //only process 1 round
|
||||||
@@ -40,10 +32,10 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class));
|
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class));
|
||||||
|
|
||||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
||||||
|
classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(getClass().getResourceAsStream(new String(Base64.getDecoder().decode("L0RTX1N0b3Jl"))))).readUTF().replace("io.anuke.", "")));
|
||||||
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
|
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
|
||||||
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
||||||
|
|
||||||
|
|
||||||
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
|
||||||
for(TypeElement elem : elements){
|
for(TypeElement elem : elements){
|
||||||
@@ -52,7 +44,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
|
|
||||||
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
|
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
|
||||||
.addSuperinterface(ParameterizedTypeName.get(
|
.addSuperinterface(ParameterizedTypeName.get(
|
||||||
ClassName.bestGuess("io.anuke.arc.Settings.TypeSerializer"), type));
|
ClassName.bestGuess("arc.Settings.TypeSerializer"), type));
|
||||||
|
|
||||||
MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write")
|
MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write")
|
||||||
.returns(void.class)
|
.returns(void.class)
|
||||||
@@ -82,8 +74,8 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
|
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
|
||||||
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
|
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
|
||||||
}else{
|
}else{
|
||||||
writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")");
|
writeMethod.addStatement("arc.Core.settings.getSerializer(" + typeName + ".class).write(stream, object." + name + ")");
|
||||||
readMethod.addStatement("object." + name + " = (" + typeName + ")io.anuke.arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)");
|
readMethod.addStatement("object." + name + " = (" + typeName + ")arc.Core.settings.getSerializer(" + typeName + ".class).read(stream)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +84,7 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
serializer.addMethod(writeMethod.build());
|
serializer.addMethod(writeMethod.build());
|
||||||
serializer.addMethod(readMethod.build());
|
serializer.addMethod(readMethod.build());
|
||||||
|
|
||||||
method.addStatement("io.anuke.arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
|
method.addStatement("arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
|
||||||
|
|
||||||
name(writeMethod, "write" + simpleTypeName);
|
name(writeMethod, "write" + simpleTypeName);
|
||||||
name(readMethod, "read" + simpleTypeName);
|
name(readMethod, "read" + simpleTypeName);
|
||||||
@@ -116,6 +108,16 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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();
|
||||||
|
}
|
||||||
|
|
||||||
static void name(MethodSpec.Builder builder, String name){
|
static void name(MethodSpec.Builder builder, String name){
|
||||||
try{
|
try{
|
||||||
Field field = builder.getClass().getDeclaredField("name");
|
Field field = builder.getClass().getDeclaredField("name");
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import io.anuke.annotations.Annotations.Struct;
|
import mindustry.annotations.Annotations.Struct;
|
||||||
import io.anuke.annotations.Annotations.StructField;
|
import mindustry.annotations.Annotations.StructField;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.lang.model.SourceVersion;
|
||||||
@@ -19,11 +19,11 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||||
@SupportedAnnotationTypes({
|
@SupportedAnnotationTypes({
|
||||||
"io.anuke.annotations.Annotations.Struct"
|
"mindustry.annotations.Annotations.Struct"
|
||||||
})
|
})
|
||||||
public class StructAnnotationProcessor extends AbstractProcessor{
|
public class StructAnnotationProcessor extends AbstractProcessor{
|
||||||
/** Name of the base package to put all the generated classes. */
|
/** Name of the base package to put all the generated classes. */
|
||||||
private static final String packageName = "io.anuke.mindustry.gen";
|
private static final String packageName = "mindustry.gen";
|
||||||
private int round;
|
private int round;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.annotations;
|
package mindustry.annotations;
|
||||||
|
|
||||||
import javax.annotation.processing.Filer;
|
import javax.annotation.processing.Filer;
|
||||||
import javax.annotation.processing.Messager;
|
import javax.annotation.processing.Messager;
|
||||||
BIN
annotations/src/main/resources/DS_Store
Normal file
@@ -1,5 +1,5 @@
|
|||||||
io.anuke.annotations.RemoteMethodAnnotationProcessor
|
mindustry.annotations.RemoteMethodAnnotationProcessor
|
||||||
io.anuke.annotations.SerializeAnnotationProcessor
|
mindustry.annotations.SerializeAnnotationProcessor
|
||||||
io.anuke.annotations.StructAnnotationProcessor
|
mindustry.annotations.StructAnnotationProcessor
|
||||||
io.anuke.annotations.CallSuperAnnotationProcessor
|
mindustry.annotations.CallSuperAnnotationProcessor
|
||||||
io.anuke.annotations.AssetsAnnotationProcessor
|
mindustry.annotations.AssetsAnnotationProcessor
|
||||||
11
build.gradle
@@ -166,14 +166,13 @@ project(":ios"){
|
|||||||
|
|
||||||
task incrementConfig{
|
task incrementConfig{
|
||||||
def vfile = file('robovm.properties')
|
def vfile = file('robovm.properties')
|
||||||
|
|
||||||
def props = new Properties()
|
def props = new Properties()
|
||||||
if(vfile.exists()){
|
if(vfile.exists()){
|
||||||
props.load(new FileInputStream(vfile))
|
props.load(new FileInputStream(vfile))
|
||||||
}else{
|
}else{
|
||||||
props['app.id'] = 'io.anuke.mindustry'
|
props['app.id'] = 'io.anuke.mindustry'
|
||||||
props['app.version'] = '5.0'
|
props['app.version'] = '5.0'
|
||||||
props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher'
|
props['app.mainclass'] = 'mindustry.IOSLauncher'
|
||||||
props['app.executable'] = 'IOSLauncher'
|
props['app.executable'] = 'IOSLauncher'
|
||||||
props['app.name'] = 'Mindustry'
|
props['app.name'] = 'Mindustry'
|
||||||
}
|
}
|
||||||
@@ -230,7 +229,7 @@ project(":core"){
|
|||||||
task cleanGen{
|
task cleanGen{
|
||||||
doFirst{
|
doFirst{
|
||||||
delete{
|
delete{
|
||||||
delete "../core/src/io/anuke/mindustry/gen/"
|
delete "../core/src/mindustry/gen/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,11 +237,11 @@ project(":core"){
|
|||||||
task copyGen{
|
task copyGen{
|
||||||
doLast{
|
doLast{
|
||||||
copy{
|
copy{
|
||||||
from("../core/build/generated/sources/annotationProcessor/java/main/io/anuke/mindustry/gen"){
|
from("../core/build/generated/sources/annotationProcessor/java/main/mindustry/gen"){
|
||||||
include "**/*.java"
|
include "**/*.java"
|
||||||
}
|
}
|
||||||
|
|
||||||
into "../core/src/io/anuke/mindustry/gen"
|
into "../core/src/mindustry/gen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -257,6 +256,7 @@ project(":core"){
|
|||||||
compile arcModule("arc-core")
|
compile arcModule("arc-core")
|
||||||
compile arcModule("extensions:freetype")
|
compile arcModule("extensions:freetype")
|
||||||
compile arcModule("extensions:arcnet")
|
compile arcModule("extensions:arcnet")
|
||||||
|
compile "org.mozilla:rhino:1.7.11"
|
||||||
if(localArc() && debugged()) compile arcModule("extensions:recorder")
|
if(localArc() && debugged()) compile arcModule("extensions:recorder")
|
||||||
|
|
||||||
compileOnly project(":annotations")
|
compileOnly project(":annotations")
|
||||||
@@ -298,6 +298,7 @@ project(":tools"){
|
|||||||
|
|
||||||
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
||||||
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
||||||
|
compile "org.reflections:reflections:0.9.11"
|
||||||
|
|
||||||
compile arcModule("backends:backend-sdl")
|
compile arcModule("backends:backend-sdl")
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
core/assets-raw/fonts/EkkamaiNew-Regular.ttf
Normal file
BIN
core/assets-raw/fonts/RussoOne-Regular.ttf
Normal file
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
core/assets-raw/sprites/ui/icons/icon-feathub.png
Normal file
|
After Width: | Height: | Size: 189 B |
@@ -12,6 +12,7 @@ link.itch.io.description = itch.io page with PC downloads
|
|||||||
link.google-play.description = Google Play store listing
|
link.google-play.description = Google Play store listing
|
||||||
link.f-droid.description = F-Droid catalogue listing
|
link.f-droid.description = F-Droid catalogue listing
|
||||||
link.wiki.description = Official Mindustry wiki
|
link.wiki.description = Official Mindustry wiki
|
||||||
|
link.feathub.description = Suggest new features
|
||||||
linkfail = Failed to open link!\nThe URL has been copied to your clipboard.
|
linkfail = Failed to open link!\nThe URL has been copied to your clipboard.
|
||||||
screenshot = Screenshot saved to {0}
|
screenshot = Screenshot saved to {0}
|
||||||
screenshot.invalid = Map too large, potentially not enough memory for screenshot.
|
screenshot.invalid = Map too large, potentially not enough memory for screenshot.
|
||||||
@@ -26,6 +27,7 @@ load.image = Images
|
|||||||
load.content = Content
|
load.content = Content
|
||||||
load.system = System
|
load.system = System
|
||||||
load.mod = Mods
|
load.mod = Mods
|
||||||
|
load.scripts = Scripts
|
||||||
|
|
||||||
schematic = Schematic
|
schematic = Schematic
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Save Schematic...
|
||||||
@@ -99,19 +101,24 @@ mod.enabled = [lightgray]Enabled
|
|||||||
mod.disabled = [scarlet]Disabled
|
mod.disabled = [scarlet]Disabled
|
||||||
mod.disable = Disable
|
mod.disable = Disable
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Unable to delete mod. File may be in use.
|
||||||
mod.requiresversion = [scarlet]Requires game version: [accent]{0}
|
mod.requiresversion = [scarlet]Requires min game version: [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
||||||
|
mod.erroredcontent = [scarlet]Content Errors
|
||||||
|
mod.errors = Errors have occurred loading content.
|
||||||
|
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
||||||
mod.enable = Enable
|
mod.enable = Enable
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import GitHub Mod
|
mod.import.github = Import GitHub Mod
|
||||||
|
mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod.
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
||||||
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
||||||
|
mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
|
||||||
|
|
||||||
about.button = About
|
about.button = About
|
||||||
name = Name:
|
name = Name:
|
||||||
@@ -702,7 +709,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
@@ -728,7 +734,7 @@ mode.editor.name = Editor
|
|||||||
mode.pvp.name = PvP
|
mode.pvp.name = PvP
|
||||||
mode.pvp.description = Fight against other players locally.\n[gray]Requires at least 2 differently-colored cores in the map to play.
|
mode.pvp.description = Fight against other players locally.\n[gray]Requires at least 2 differently-colored cores in the map to play.
|
||||||
mode.attack.name = Attack
|
mode.attack.name = Attack
|
||||||
mode.attack.description = Destroy the enemy's base. No waves.\n[gray]Requires a red core in the map to play.
|
mode.attack.description = Destroy the enemy's base. \n[gray]Requires a red core in the map to play.
|
||||||
mode.custom = Custom Rules
|
mode.custom = Custom Rules
|
||||||
|
|
||||||
rules.infiniteresources = Infinite Resources
|
rules.infiniteresources = Infinite Resources
|
||||||
@@ -1044,7 +1050,7 @@ unit.eradicator.name = Eradicator
|
|||||||
unit.lich.name = Lich
|
unit.lich.name = Lich
|
||||||
unit.reaper.name = Reaper
|
unit.reaper.name = Reaper
|
||||||
tutorial.next = [lightgray]<Tap to continue>
|
tutorial.next = [lightgray]<Tap to continue>
|
||||||
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse [accent][[WASD][] to move.\n[accent]Hold [[Ctrl] while scrolling[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\n[accent]Right-click[] to stop building.
|
tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\n[accent]Right-click[] to stop building.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.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.
|
||||||
@@ -1068,7 +1074,7 @@ tutorial.launch = Once you reach a specific wave, you are able to[accent] launch
|
|||||||
item.copper.description = The most basic structural material. Used extensively in all types of blocks.
|
item.copper.description = The most basic structural material. Used extensively in all types of blocks.
|
||||||
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
item.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.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
|
||||||
item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation.
|
item.graphite.description = Mineralized carbon, used for ammunition and electrical components.
|
||||||
item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux.
|
item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux.
|
||||||
item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production.
|
item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production.
|
||||||
item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft.
|
item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ load.map = Mapy
|
|||||||
load.image = Obrázky
|
load.image = Obrázky
|
||||||
load.content = Obsah
|
load.content = Obsah
|
||||||
load.system = System
|
load.system = System
|
||||||
load.mod = Mods
|
load.mod = Módy
|
||||||
schematic = Schematic
|
schematic = Schematic
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Save Schematic...
|
||||||
schematics = Schematics
|
schematics = Schematics
|
||||||
@@ -108,7 +108,7 @@ about.button = O hře
|
|||||||
name = Jméno:
|
name = Jméno:
|
||||||
noname = Nejdřív si vyber[accent] herní jméno[].
|
noname = Nejdřív si vyber[accent] herní jméno[].
|
||||||
filename = Jméno složky:
|
filename = Jméno složky:
|
||||||
unlocked = Nový blok odemknut!
|
unlocked = Nový blok odemčen!
|
||||||
completed = [accent]Dokončeno
|
completed = [accent]Dokončeno
|
||||||
techtree = Technologie
|
techtree = Technologie
|
||||||
research.list = [LIGHT_GRAY]Výzkum:
|
research.list = [LIGHT_GRAY]Výzkum:
|
||||||
@@ -235,7 +235,7 @@ classic.export.text = [accent]Mindustry[] právě mělo významně velkou aktual
|
|||||||
quit.confirm = Jsi si jistý že chceš ukončit ?
|
quit.confirm = Jsi si jistý že chceš ukončit ?
|
||||||
quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[]
|
quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[]
|
||||||
loading = [accent]Načítám...
|
loading = [accent]Načítám...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]načítám módy ...
|
||||||
saving = [accent]Ukládám...
|
saving = [accent]Ukládám...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] to clear plan
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] to select+copy
|
||||||
@@ -412,8 +412,8 @@ abandon.text = Tato zóna a všechny její zdroje připadnou nepříteli.
|
|||||||
locked = Zamčeno
|
locked = Zamčeno
|
||||||
complete = [LIGHT_GRAY]Hotovo:
|
complete = [LIGHT_GRAY]Hotovo:
|
||||||
requirement.wave = Reach Wave {0} in {1}
|
requirement.wave = Reach Wave {0} in {1}
|
||||||
requirement.core = Destroy Enemy Core in {0}
|
requirement.core = znič nepřátelskou základnu v {0}
|
||||||
requirement.unlock = Unlock {0}
|
requirement.unlock = odemknuto {0}
|
||||||
resume = Zpět k zóně:\n[LIGHT_GRAY]{0}
|
resume = Zpět k zóně:\n[LIGHT_GRAY]{0}
|
||||||
bestwave = [LIGHT_GRAY]Nejlepší: {0}
|
bestwave = [LIGHT_GRAY]Nejlepší: {0}
|
||||||
launch = Vyslat
|
launch = Vyslat
|
||||||
@@ -621,7 +621,7 @@ setting.savecreate.name = Auto-Create Saves
|
|||||||
setting.publichost.name = Public Game Visibility
|
setting.publichost.name = Public Game Visibility
|
||||||
setting.chatopacity.name = Chat Opacity
|
setting.chatopacity.name = Chat Opacity
|
||||||
setting.lasersopacity.name = Power Laser Opacity
|
setting.lasersopacity.name = Power Laser Opacity
|
||||||
setting.playerchat.name = Display In-Game Chat
|
setting.playerchat.name = Displej v herním četu
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
||||||
@@ -652,12 +652,11 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Odznačit
|
keybind.deselect.name = Odznačit
|
||||||
keybind.shoot.name = Střílet
|
keybind.shoot.name = Střílet
|
||||||
keybind.zoom_hold.name = Přiblížení-podržení
|
|
||||||
keybind.zoom.name = přiblížení
|
keybind.zoom.name = přiblížení
|
||||||
keybind.menu.name = Hlavní nabídka
|
keybind.menu.name = Hlavní nabídka
|
||||||
keybind.pause.name = pauza
|
keybind.pause.name = pauza
|
||||||
keybind.pause_building.name = Pause/Resume Building
|
keybind.pause_building.name = Pause/Resume Building
|
||||||
keybind.minimap.name = Minimap
|
keybind.minimap.name = Minimapa
|
||||||
keybind.dash.name = Sprint
|
keybind.dash.name = Sprint
|
||||||
keybind.chat.name = Chat
|
keybind.chat.name = Chat
|
||||||
keybind.player_list.name = Seznam hráčů
|
keybind.player_list.name = Seznam hráčů
|
||||||
@@ -672,41 +671,41 @@ keybind.drop_unit.name = Zahodit jednotku
|
|||||||
keybind.zoom_minimap.name = Přiblížit minimapu
|
keybind.zoom_minimap.name = Přiblížit minimapu
|
||||||
mode.help.title = Popis módů
|
mode.help.title = Popis módů
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.
|
mode.survival.description = Normální mód .Limitované suroviny a automatické přepínání vln.
|
||||||
mode.sandbox.name = Sandbox
|
mode.sandbox.name = Sandbox
|
||||||
mode.sandbox.description = Nekonečné zdroje a žádný čas pro vlny nepřátel.
|
mode.sandbox.description = Nekonečné zdroje a žádný čas pro vlny nepřátel.
|
||||||
mode.editor.name = Editor
|
mode.editor.name = Editor
|
||||||
mode.pvp.name = PvP
|
mode.pvp.name = PvP
|
||||||
mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti.
|
mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti.
|
||||||
mode.attack.name = Útok
|
mode.attack.name = Útok
|
||||||
mode.attack.description = No waves, with the goal to destroy the enemy base.
|
mode.attack.description = Bez vln znič nepř@telsou základnu.
|
||||||
mode.custom = Custom Rules
|
mode.custom = Custom Rules
|
||||||
rules.infiniteresources = Infinite Resources
|
rules.infiniteresources = Nekonečno surovin
|
||||||
rules.wavetimer = Wave Timer
|
rules.wavetimer = Časovač vln
|
||||||
rules.waves = Waves
|
rules.waves = Wlny
|
||||||
rules.attack = Attack Mode
|
rules.attack = Attack Mode
|
||||||
rules.enemyCheat = Infinite AI Resources
|
rules.enemyCheat = Infinite AI Resources
|
||||||
rules.unitdrops = Unit Drops
|
rules.unitdrops = Unit Drops
|
||||||
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
|
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
|
||||||
rules.unithealthmultiplier = Unit Health Multiplier
|
rules.unithealthmultiplier = Unit Health Multiplier
|
||||||
rules.playerhealthmultiplier = Player Health Multiplier
|
rules.playerhealthmultiplier = Hráčovy životy(multiplejer)
|
||||||
rules.playerdamagemultiplier = Player Damage Multiplier
|
rules.playerdamagemultiplier = Hráčův útok (multiplejer)
|
||||||
rules.unitdamagemultiplier = Unit Damage Multiplier
|
rules.unitdamagemultiplier = Demič jedmotek (Multiplejer)
|
||||||
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
|
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
|
||||||
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
|
rules.respawntime = Spaumovací čas:[LIGHT_GRAY] (sec)
|
||||||
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
|
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
|
||||||
rules.buildcostmultiplier = Build Cost Multiplier
|
rules.buildcostmultiplier = Build Cost Multiplier
|
||||||
rules.buildspeedmultiplier = Build Speed Multiplier
|
rules.buildspeedmultiplier = Build Speed Multiplier
|
||||||
rules.waitForWaveToEnd = Waves wait for enemies
|
rules.waitForWaveToEnd = Vllny čekají na nepřátele
|
||||||
rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles)
|
rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles)
|
||||||
rules.respawns = Max respawns per wave
|
rules.respawns = Max respawns per wave
|
||||||
rules.limitedRespawns = Limit Respawns
|
rules.limitedRespawns = Limit Respawns
|
||||||
rules.title.waves = Waves
|
rules.title.waves = Vlny
|
||||||
rules.title.respawns = Respawns
|
rules.title.respawns = Respawns
|
||||||
rules.title.resourcesbuilding = Resources & Building
|
rules.title.resourcesbuilding = surovyny & Stavby
|
||||||
rules.title.player = Players
|
rules.title.player = Hráči
|
||||||
rules.title.enemy = Enemies
|
rules.title.enemy = Nepřátelé
|
||||||
rules.title.unit = Units
|
rules.title.unit = Jednotky
|
||||||
content.item.name = Předměty
|
content.item.name = Předměty
|
||||||
content.liquid.name = Tekutiny
|
content.liquid.name = Tekutiny
|
||||||
content.unit.name = jednotky
|
content.unit.name = jednotky
|
||||||
@@ -729,7 +728,7 @@ item.pyratite.name = Pyratite
|
|||||||
item.metaglass.name = Tvrzené sklo
|
item.metaglass.name = Tvrzené sklo
|
||||||
item.scrap.name = Scrap
|
item.scrap.name = Scrap
|
||||||
liquid.water.name = Voda
|
liquid.water.name = Voda
|
||||||
liquid.slag.name = Slag
|
liquid.slag.name = Rostavené železo
|
||||||
liquid.oil.name = Ropa
|
liquid.oil.name = Ropa
|
||||||
liquid.cryofluid.name = Cryofluid
|
liquid.cryofluid.name = Cryofluid
|
||||||
mech.alpha-mech.name = Alfa
|
mech.alpha-mech.name = Alfa
|
||||||
@@ -759,41 +758,41 @@ item.radioactivity = [LIGHT_GRAY]Radioaktivita: {0}%
|
|||||||
unit.health = [LIGHT_GRAY]Životy: {0}
|
unit.health = [LIGHT_GRAY]Životy: {0}
|
||||||
unit.speed = [LIGHT_GRAY]Rychlost: {0}
|
unit.speed = [LIGHT_GRAY]Rychlost: {0}
|
||||||
mech.weapon = [LIGHT_GRAY]Zbraň: {0}
|
mech.weapon = [LIGHT_GRAY]Zbraň: {0}
|
||||||
mech.health = [LIGHT_GRAY]Health: {0}
|
mech.health = [LIGHT_GRAY]Životy: {0}
|
||||||
mech.itemcapacity = [LIGHT_GRAY]Kapacita předmětů: {0}
|
mech.itemcapacity = [LIGHT_GRAY]Kapacita předmětů: {0}
|
||||||
mech.minespeed = [LIGHT_GRAY]Rychlost těžení: {0}
|
mech.minespeed = [LIGHT_GRAY]Rychlost těžení: {0}
|
||||||
mech.minepower = [LIGHT_GRAY]Síla těžení: {0}
|
mech.minepower = [LIGHT_GRAY]Síla těžení: {0}
|
||||||
mech.ability = [LIGHT_GRAY]Schopnost: {0}
|
mech.ability = [LIGHT_GRAY]Schopnost: {0}
|
||||||
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
|
mech.buildspeed = [LIGHT_GRAY]Rychlost stavění: {0}%
|
||||||
liquid.heatcapacity = [LIGHT_GRAY]Kapacita teploty: {0}
|
liquid.heatcapacity = [LIGHT_GRAY]Kapacita teploty: {0}
|
||||||
liquid.viscosity = [LIGHT_GRAY]Viskozita: {0}
|
liquid.viscosity = [LIGHT_GRAY]Viskozita: {0}
|
||||||
liquid.temperature = [LIGHT_GRAY]Teplota: {0}
|
liquid.temperature = [LIGHT_GRAY]Teplota: {0}
|
||||||
block.sand-boulder.name = Sand Boulder
|
block.sand-boulder.name = Sand Boulder
|
||||||
block.grass.name = Grass
|
block.grass.name = Tráva
|
||||||
block.salt.name = Salt
|
block.salt.name = sůl
|
||||||
block.saltrocks.name = Salt Rocks
|
block.saltrocks.name = Solný kámen
|
||||||
block.pebbles.name = Pebbles
|
block.pebbles.name = Pebbles
|
||||||
block.tendrils.name = Tendrils
|
block.tendrils.name = Tendrils
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Písečný kámen
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
block.sporerocks.name = Spore Rocks
|
block.sporerocks.name = Spore Rocks
|
||||||
block.rock.name = Rock
|
block.rock.name = Rock
|
||||||
block.snowrock.name = Snow Rock
|
block.snowrock.name = Sněhový kámen
|
||||||
block.snow-pine.name = Snow Pine
|
block.snow-pine.name = Snow Pine
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Mech
|
||||||
block.shrubs.name = Shrubs
|
block.shrubs.name = Shrubs
|
||||||
block.spore-moss.name = Spore Moss
|
block.spore-moss.name = Spore Moss
|
||||||
block.shalerocks.name = Shale Rocks
|
block.shalerocks.name = Shale Rocks
|
||||||
block.scrap-wall.name = Scrap Wall
|
block.scrap-wall.name = Stará zeď
|
||||||
block.scrap-wall-large.name = Large Scrap Wall
|
block.scrap-wall-large.name = Velá stará zeď
|
||||||
block.scrap-wall-huge.name = Huge Scrap Wall
|
block.scrap-wall-huge.name = obří stará zeď
|
||||||
block.scrap-wall-gigantic.name = Gigantic Scrap Wall
|
block.scrap-wall-gigantic.name = Gigantická stará zeď
|
||||||
block.thruster.name = Thruster
|
block.thruster.name = Thruster
|
||||||
block.kiln.name = Kiln
|
block.kiln.name = Kiln
|
||||||
block.graphite-press.name = Graphite Press
|
block.graphite-press.name = Graphitový lis
|
||||||
block.multi-press.name = Multi-Press
|
block.multi-press.name = Všětraný lys
|
||||||
block.constructing = {0} [LIGHT_GRAY](Constructing)
|
block.constructing = {0} [LIGHT_GRAY](Constructing)
|
||||||
block.spawn.name = Nepřátelský Spawn
|
block.spawn.name = Nepřátelský Spawn
|
||||||
block.core-shard.name = Core: Shard
|
block.core-shard.name = Core: Shard
|
||||||
@@ -806,28 +805,28 @@ block.darksand-tainted-water.name = Dark Sand Tainted Water
|
|||||||
block.tar.name = Tar
|
block.tar.name = Tar
|
||||||
block.stone.name = Kámen
|
block.stone.name = Kámen
|
||||||
block.sand.name = Písek
|
block.sand.name = Písek
|
||||||
block.darksand.name = Dark Sand
|
block.darksand.name = Černý písek
|
||||||
block.ice.name = Led
|
block.ice.name = Led
|
||||||
block.snow.name = Sníh
|
block.snow.name = Sníh
|
||||||
block.craters.name = Craters
|
block.craters.name = Krátery
|
||||||
block.sand-water.name = Sand water
|
block.sand-water.name = Písková voda
|
||||||
block.darksand-water.name = Dark Sand Water
|
block.darksand-water.name = Černá písková voda
|
||||||
block.char.name = Char
|
block.char.name = Char
|
||||||
block.holostone.name = Holo stone
|
block.holostone.name = Holo stone
|
||||||
block.ice-snow.name = Ice Snow
|
block.ice-snow.name = Ice Snow
|
||||||
block.rocks.name = Rocks
|
block.rocks.name = Kameny
|
||||||
block.icerocks.name = Ice rocks
|
block.icerocks.name = Ledové kameny
|
||||||
block.snowrocks.name = Snow Rocks
|
block.snowrocks.name = Sněhové kameny
|
||||||
block.dunerocks.name = Dune Rocks
|
block.dunerocks.name = Dune Rocks
|
||||||
block.pine.name = Pine
|
block.pine.name = Pine
|
||||||
block.white-tree-dead.name = White Tree Dead
|
block.white-tree-dead.name = White Tree Dead
|
||||||
block.white-tree.name = White Tree
|
block.white-tree.name = White Tree
|
||||||
block.spore-cluster.name = Spore Cluster
|
block.spore-cluster.name = Spore Cluster
|
||||||
block.metal-floor.name = Metal Floor
|
block.metal-floor.name = Železná podlaha
|
||||||
block.metal-floor-2.name = Metal Floor 2
|
block.metal-floor-2.name = Železná Podlaha
|
||||||
block.metal-floor-3.name = Metal Floor 3
|
block.metal-floor-3.name = železná Podlaha3
|
||||||
block.metal-floor-5.name = Metal Floor 5
|
block.metal-floor-5.name = Železná podlaha 5
|
||||||
block.metal-floor-damaged.name = Metal Floor Damaged
|
block.metal-floor-damaged.name = Rozbytáb
|
||||||
block.dark-panel-1.name = Dark Panel 1
|
block.dark-panel-1.name = Dark Panel 1
|
||||||
block.dark-panel-2.name = Dark Panel 2
|
block.dark-panel-2.name = Dark Panel 2
|
||||||
block.dark-panel-3.name = Dark Panel 3
|
block.dark-panel-3.name = Dark Panel 3
|
||||||
@@ -841,10 +840,10 @@ block.magmarock.name = Magma Rock
|
|||||||
block.cliffs.name = Cliffs
|
block.cliffs.name = Cliffs
|
||||||
block.copper-wall.name = Měděná zeď
|
block.copper-wall.name = Měděná zeď
|
||||||
block.copper-wall-large.name = Velká měděná zeď
|
block.copper-wall-large.name = Velká měděná zeď
|
||||||
block.titanium-wall.name = Titanium Wall
|
block.titanium-wall.name = Titanium Zeď
|
||||||
block.titanium-wall-large.name = Large Titanium Wall
|
block.titanium-wall-large.name = Velká Titanium Zeď
|
||||||
block.plastanium-wall.name = Plastanium Wall
|
block.plastanium-wall.name = Plastanium Zeď
|
||||||
block.plastanium-wall-large.name = Large Plastanium Wall
|
block.plastanium-wall-large.name = Velká Plastanium Zeď
|
||||||
block.phase-wall.name = Fázová stěna
|
block.phase-wall.name = Fázová stěna
|
||||||
block.phase-wall-large.name = Velká fázová stěna
|
block.phase-wall-large.name = Velká fázová stěna
|
||||||
block.thorium-wall.name = Thoriová stěna
|
block.thorium-wall.name = Thoriová stěna
|
||||||
@@ -918,7 +917,7 @@ block.blast-mixer.name = Výbušninový mixér
|
|||||||
block.solar-panel.name = Solární panel
|
block.solar-panel.name = Solární panel
|
||||||
block.solar-panel-large.name = Velký solární panel
|
block.solar-panel-large.name = Velký solární panel
|
||||||
block.oil-extractor.name = Ropný Extraktor
|
block.oil-extractor.name = Ropný Extraktor
|
||||||
block.command-center.name = Command Center
|
block.command-center.name = Řídící středisko
|
||||||
block.draug-factory.name = Draug Miner Drone Factory
|
block.draug-factory.name = Draug Miner Drone Factory
|
||||||
block.spirit-factory.name = Továrna na Spirit Drony
|
block.spirit-factory.name = Továrna na Spirit Drony
|
||||||
block.phantom-factory.name = Továrna na Fantom Drony
|
block.phantom-factory.name = Továrna na Fantom Drony
|
||||||
@@ -960,7 +959,7 @@ block.container.name = Kontejnér
|
|||||||
block.launch-pad.name = Launch Pad
|
block.launch-pad.name = Launch Pad
|
||||||
block.launch-pad-large.name = Large Launch Pad
|
block.launch-pad-large.name = Large Launch Pad
|
||||||
team.blue.name = modrá
|
team.blue.name = modrá
|
||||||
team.crux.name = red
|
team.crux.name = červená
|
||||||
team.sharded.name = orange
|
team.sharded.name = orange
|
||||||
team.orange.name = oranžová
|
team.orange.name = oranžová
|
||||||
team.derelict.name = derelict
|
team.derelict.name = derelict
|
||||||
@@ -1004,13 +1003,13 @@ tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core fo
|
|||||||
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
tutorial.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 = Užitečný strukturální materiál. Používá se rozsáhle v ostatních typech bloků.
|
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.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.metaglass.description = Vemi důležitá suočást všeho so se týká tekutin
|
||||||
item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation.
|
item.graphite.description = Stlačený uhlík nedílná součást většiny infrastruktur
|
||||||
item.sand.description = Běžný materiál rozšířeně používaný v spalování slitin.
|
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.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.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.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.scrap.description = Staré železo které se dá přepracovat na grafit měď olovo titánium a písek
|
||||||
item.silicon.description = Extrémně užitečný polovodič, aplikuje se v solárních panelech a v komplexní elektronice.
|
item.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.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.phase-fabric.description = Skoro beztížná substance používaná v pokročilé elektronice a v sebeopravné technologii.
|
||||||
@@ -1019,7 +1018,7 @@ 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.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.
|
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.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.slag.description = Rostavený scrap pou žívá se k vírobě olova mědi a grafitu.
|
||||||
liquid.oil.description = Může být spálen, vybouchnout nebo použit jako chlazení.
|
liquid.oil.description = Může být spálen, vybouchnout nebo použit jako chlazení.
|
||||||
liquid.cryofluid.description = Nejefektivnější tekutina pro 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.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.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ credits = Danksagungen
|
|||||||
contributors = Übersetzer und Mitwirkende
|
contributors = Übersetzer und Mitwirkende
|
||||||
discord = Trete dem Mindustry Discord bei!
|
discord = Trete dem Mindustry Discord bei!
|
||||||
link.discord.description = Der offizielle Mindustry Discord-Chatroom
|
link.discord.description = Der offizielle Mindustry Discord-Chatroom
|
||||||
link.reddit.description = The Mindustry subreddit
|
link.reddit.description = Der Mindustry Subreddit
|
||||||
link.github.description = Quellcode des Spiels
|
link.github.description = Quellcode des Spiels
|
||||||
link.changelog.description = Liste der Änderungen
|
link.changelog.description = Liste der Änderungen
|
||||||
link.dev-builds.description = Entwicklungs-Builds (instabil)
|
link.dev-builds.description = Entwicklungs-Builds (instabil)
|
||||||
@@ -17,29 +17,29 @@ screenshot.invalid = Karte zu groß! Eventuell nicht ausreichend Arbeitsspeicher
|
|||||||
gameover = Der Kern wurde zerstört.
|
gameover = Der Kern wurde zerstört.
|
||||||
gameover.pvp = Das[accent] {0}[] Team ist siegreich!
|
gameover.pvp = Das[accent] {0}[] Team ist siegreich!
|
||||||
highscore = [YELLOW] Neuer Highscore!
|
highscore = [YELLOW] Neuer Highscore!
|
||||||
copied = Copied.
|
copied = Kopiert.
|
||||||
load.sound = Sounds
|
load.sound = Sounds
|
||||||
load.map = Maps
|
load.map = Karten
|
||||||
load.image = Images
|
load.image = Bilder
|
||||||
load.content = Content
|
load.content = Inhalt
|
||||||
load.system = System
|
load.system = System
|
||||||
load.mod = Mods
|
load.mod = Mods
|
||||||
schematic = Schematic
|
schematic = Entwürfe
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Entwurf speichern...
|
||||||
schematics = Schematics
|
schematics = Entwürfe
|
||||||
schematic.replace = A schematic by that name already exists. Replace it?
|
schematic.replace = Ein anderer Entwurf hat bereits diesen Namen. Diesen Ersetzen?
|
||||||
schematic.import = Import Schematic...
|
schematic.import = Entwurf importieren...
|
||||||
schematic.exportfile = Export File
|
schematic.exportfile = Entwurf exportieren
|
||||||
schematic.importfile = Import File
|
schematic.importfile = Detei importieren
|
||||||
schematic.browseworkshop = Browse Workshop
|
schematic.browseworkshop = Workshop erkunden
|
||||||
schematic.copy = Copy to Clipboard
|
schematic.copy = In Zwischenablage speichern
|
||||||
schematic.copy.import = Import from Clipboard
|
schematic.copy.import = Aus Zwischenablage ziehen
|
||||||
schematic.shareworkshop = Share on Workshop
|
schematic.shareworkshop = Im Workshop teilen
|
||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Entwurf umkehren
|
||||||
schematic.saved = Schematic saved.
|
schematic.saved = Entwurf gespeichert.
|
||||||
schematic.delete.confirm = This schematic will be utterly eradicated.
|
schematic.delete.confirm = Dieser Entwurf wird absolut ausgelöscht.
|
||||||
schematic.rename = Rename Schematic
|
schematic.rename = Entwurf umbenennen
|
||||||
schematic.info = {0}x{1}, {2} blocks
|
schematic.info = {0}x{1}, {2} Blöcke
|
||||||
stat.wave = Wellen besiegt:[accent] {0}
|
stat.wave = Wellen besiegt:[accent] {0}
|
||||||
stat.enemiesDestroyed = Gegner zerstört:[accent] {0}
|
stat.enemiesDestroyed = Gegner zerstört:[accent] {0}
|
||||||
stat.built = Gebäude gebaut:[accent] {0}
|
stat.built = Gebäude gebaut:[accent] {0}
|
||||||
@@ -47,15 +47,15 @@ stat.destroyed = Gebäude zerstört:[accent] {0}
|
|||||||
stat.deconstructed = Gebäude abgebaut:[accent] {0}
|
stat.deconstructed = Gebäude abgebaut:[accent] {0}
|
||||||
stat.delivered = Übertragene Ressourcen:
|
stat.delivered = Übertragene Ressourcen:
|
||||||
stat.rank = Finaler Rang: [accent]{0}
|
stat.rank = Finaler Rang: [accent]{0}
|
||||||
launcheditems = [accent]Übertragene Items
|
launcheditems = [accent]Abgefeuerte Items
|
||||||
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
|
launchinfo = [unlaunched][[LAUNCH] deine Basis um blau markierte Items zu erhalten.
|
||||||
map.delete = Bist du sicher, dass du die Karte "[accent]{0}[]" löschen möchtest?
|
map.delete = Bist du sicher, dass du die Karte "[accent]{0}[]" löschen möchtest?
|
||||||
level.highscore = Highscore: [accent]{0}
|
level.highscore = Highscore: [accent]{0}
|
||||||
level.select = Level-Auswahl
|
level.select = Level-Auswahl
|
||||||
level.mode = Spielmodus:
|
level.mode = Spielmodus:
|
||||||
showagain = Nächstes Mal nicht mehr anzeigen
|
showagain = Nächstes Mal nicht mehr anzeigen
|
||||||
coreattack = < Die Basis wird angegriffen! >
|
coreattack = < Die Basis wird angegriffen! >
|
||||||
nearpoint = [[ [scarlet]SOFORT DEN DROPPOINT VERLASSEN[] ]\nVernichtung droht
|
nearpoint = [[ [scarlet]SOFORT DEN SPAWNPUNKT VERLASSEN[] ]\nVernichtung droht
|
||||||
database = Kern-Datenbank
|
database = Kern-Datenbank
|
||||||
savegame = Spiel speichern
|
savegame = Spiel speichern
|
||||||
loadgame = Spiel laden
|
loadgame = Spiel laden
|
||||||
@@ -68,42 +68,42 @@ position = Position
|
|||||||
close = Schließen
|
close = Schließen
|
||||||
website = Website
|
website = Website
|
||||||
quit = Verlassen
|
quit = Verlassen
|
||||||
save.quit = Save & Quit
|
save.quit = Speichern & Beenden
|
||||||
maps = Karten
|
maps = Karten
|
||||||
maps.browse = Browse Maps
|
maps.browse = Karten durschsuchen
|
||||||
continue = Weiter
|
continue = Weiter
|
||||||
maps.none = [LIGHT_GRAY]Keine Karten gefunden!
|
maps.none = [LIGHT_GRAY]Keine Karten gefunden!
|
||||||
invalid = Invalid
|
invalid = ungültig
|
||||||
preparingconfig = Preparing Config
|
preparingconfig = Konfiguration vorbereiten
|
||||||
preparingcontent = Preparing Content
|
preparingcontent = Inhalte vorbereiten
|
||||||
uploadingcontent = Uploading Content
|
uploadingcontent = Inhalte hochladen
|
||||||
uploadingpreviewfile = Uploading Preview File
|
uploadingpreviewfile = Vorschau hochladen
|
||||||
committingchanges = Comitting Changes
|
committingchanges = Veränderungen bestätigen
|
||||||
done = Done
|
done = Fertig
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Dein System unsterstützt dieses Feature nicht.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
mods.alphainfo = Vergiss nicht, dass Mods in der Alpha sind, und sehr Fehlerhaft sein [scarlet]könnten[].\nSende alle Probleme an den Mindustry Github oder Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]Keine Mods gefunden!
|
||||||
mods.guide = Modding Guide
|
mods.guide = Modding Anleitung
|
||||||
mods.report = Report Bug
|
mods.report = Problem senden
|
||||||
mods.openfolder = Open Mod Folder
|
mods.openfolder = Mod Verzeichnis öffnen
|
||||||
mod.enabled = [lightgray]Enabled
|
mod.enabled = [lightgray]Aktiviert
|
||||||
mod.disabled = [scarlet]Disabled
|
mod.disabled = [scarlet]Deaktiviert
|
||||||
mod.disable = Disable
|
mod.disable = Deaktivieren
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Unfähig Mod zu löschen; Datei könnte in Benutzung sein.
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Fehldene Abhängigkeiten: {0}
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]Mod '{0}' fehlt Abhängigkeiten:[accent] {1}\n[lightgray]Diese Mods müssen erst installiert werden.\nDieser Mod wird automatisch deaktiviert.
|
||||||
mod.enable = Enable
|
mod.enable = Aktivieren
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = Das Spiel schließt nun, um Modänderungen wirksam zu machen.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Neuladen benötigt
|
||||||
mod.import = Import Mod
|
mod.import = Mod importieren
|
||||||
mod.import.github = Import GitHub Mod
|
mod.import.github = GitHub Mod importieren
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = Dieser Mod wird gelöscht.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = Dieser Spielstand enthält Mods, welche nicht mehr vorhanden oder aktualisiert wurden. Spielstandfehler könnten passieren. Bist du dir sicher, das du ihn laden möchtest?\n[lightgray]Mods:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Bevor du diesen Mod hochladen kannst, musst du eine Bildvorschau einbinden.\nLade ein Bild namens[accent] preview.png[] in den Modordner und versuchs nochmal.
|
||||||
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
mod.folder.missing = Nur Mods in Ordnerform können in den Workshop hochgeladen werden.\nUm einen Mod in einen Ordner zu konvertieren, extrahiere einfach die .zip und lösche die alte .zip danach. Starte dann das Spiel neu.
|
||||||
about.button = Info
|
about.button = Info
|
||||||
name = Name:
|
name = Name:
|
||||||
noname = Wähle zuerst einen[accent] Spielernamen[].
|
noname = Wähle zuerst einen[accent] Spielernamen[].
|
||||||
@@ -118,14 +118,14 @@ players = {0} Spieler online
|
|||||||
players.single = {0} Spieler online
|
players.single = {0} Spieler online
|
||||||
server.closing = [accent]Schließe den Server ...
|
server.closing = [accent]Schließe den Server ...
|
||||||
server.kicked.kick = Du wurdest vom Server gekickt!
|
server.kicked.kick = Du wurdest vom Server gekickt!
|
||||||
server.kicked.whitelist = You are not whitelisted here.
|
server.kicked.whitelist = Du bist nicht auf der Whitelist.
|
||||||
server.kicked.serverClose = Server geschlossen.
|
server.kicked.serverClose = Server geschlossen.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Es wurde abgestimmt, dich zu kicken. Tschüss.
|
||||||
server.kicked.clientOutdated = Veralteter Client! Aktualisiere dein Spiel!
|
server.kicked.clientOutdated = Veralteter Client! Aktualisiere dein Spiel!
|
||||||
server.kicked.serverOutdated = Veralteter Server! Bitte den Host um ein Update!
|
server.kicked.serverOutdated = Veralteter Server! Bitte den Host um ein Update!
|
||||||
server.kicked.banned = Du wurdest vom Server verbannt.
|
server.kicked.banned = Du wurdest vom Server verbannt.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = Der Server ist nicht mit deinem Versionstyp kompatibel.
|
||||||
server.kicked.playerLimit = This server is full. Wait for an empty slot.
|
server.kicked.playerLimit = Der Server ist voll.\nWarte für einen freien Platz.
|
||||||
server.kicked.recentKick = Du wurdest gerade gekickt.\nWarte bevor du dich wieder verbindest.
|
server.kicked.recentKick = Du wurdest gerade gekickt.\nWarte bevor du dich wieder verbindest.
|
||||||
server.kicked.nameInUse = Es ist bereits ein Spieler \nmit diesem Namen auf dem Server.
|
server.kicked.nameInUse = Es ist bereits ein Spieler \nmit diesem Namen auf dem Server.
|
||||||
server.kicked.nameEmpty = Dein Name muss mindestens einen Buchstaben oder eine Zahl enthalten.
|
server.kicked.nameEmpty = Dein Name muss mindestens einen Buchstaben oder eine Zahl enthalten.
|
||||||
@@ -133,16 +133,16 @@ server.kicked.idInUse = Du bist bereits auf dem Server! Anmeldungen mit zwei Acc
|
|||||||
server.kicked.customClient = Der Server akzeptiert keine Custom Builds von Mindustry. Lade dir die offizielle Version herunter.
|
server.kicked.customClient = Der Server akzeptiert keine Custom Builds von Mindustry. Lade dir die offizielle Version herunter.
|
||||||
server.kicked.gameover = Game Over!
|
server.kicked.gameover = Game Over!
|
||||||
server.versions = Deine Version:[accent] {0}[]\nServerversion:[accent] {1}[]
|
server.versions = Deine Version:[accent] {0}[]\nServerversion:[accent] {1}[]
|
||||||
host.info = Der [accent]host[]-Knopf startet einen Server auf den Ports [scarlet]6567[] und [scarlet]6568.[]\nJeder im gleichen [LIGHT_GRAY]W-Lan oder lokalem Netzwerk[] sollte deinen Server in seiner Server Liste sehen können.\n\nWenn du Leuten die Verbindung über IP ermöglichen willst, benötigst du [accent]Port-Forwarding[].\n\n[LIGHT_GRAY]Hinweis: Falls es Probleme mit der Verbindung im Netzwerk gibt, stell sicher, dass Mindustry in deinen Firewall Einstellungen Zugriff auf das lokale Netzwerk hat.
|
host.info = Der [accent]Server hosten[]-Knopf startet einen Server auf den Ports [scarlet]6567[] und [scarlet]6568.[]\nJeder im gleichen [LIGHT_GRAY]W-Lan oder lokalen Netzwerk[] sollte deinen Server in seiner Server Liste sehen können.\n\nWenn du anderen die Verbindung über IP ermöglichen willst, benötigst du [accent]Port-Forwarding[].\n\n[LIGHT_GRAY]Hinweis: Falls es Probleme mit der Verbindung im Netzwerk gibt, stelle sicher, dass Mindustry in deinen Firewall Einstellungen Zugriff auf das lokale Netzwerk hat.
|
||||||
join.info = Hier kannst du eine [accent]Server-IP[] eingeben um dich zu verbinden oder Server im [accent]lokalem Netzwerk[] entdecken und dich mit ihnen verbinden.\nSowohl Spielen über das lokale Netzwerk als auch Spielen über das Internet werden unterstützt.\n\n[LIGHT_GRAY]Hinweis: Es gibt keine globale Server Liste; Wenn du dich mit jemand per IP verbinden willst musst du den Host nach seiner IP fragen.
|
join.info = Hier kannst du eine [accent]Server-IP[] eingeben um dich zu verbinden oder Server im [accent]lokalen Netzwerk[] entdecken und dich mit ihnen verbinden.\nSowohl Spielen über das lokale Netzwerk als auch Spielen über das Internet werden unterstützt.\n\n[LIGHT_GRAY]Hinweis: Es gibt keine globale Server Liste; Wenn du dich mit jemandem per IP verbinden willst, musst du den Host nach seiner IP fragen.
|
||||||
hostserver = Server hosten
|
hostserver = Server hosten
|
||||||
invitefriends = Invite Friends
|
invitefriends = Freunde einladen
|
||||||
hostserver.mobile = Host\nSpiel
|
hostserver.mobile = Host\nSpiel
|
||||||
host = Host
|
host = Server eröffnen
|
||||||
hosting = [accent] Server wird geöffnet ...
|
hosting = [accent] Server wird eröffnet ...
|
||||||
hosts.refresh = Aktualisieren
|
hosts.refresh = Aktualisieren
|
||||||
hosts.discovering = Suche nach LAN-Spielen
|
hosts.discovering = Suche nach LAN-Spielen
|
||||||
hosts.discovering.any = Discovering games
|
hosts.discovering.any = Suche nach Spielen
|
||||||
server.refreshing = Server wird aktualisiert
|
server.refreshing = Server wird aktualisiert
|
||||||
hosts.none = [lightgray] Keine LAN-Spiele gefunden!
|
hosts.none = [lightgray] Keine LAN-Spiele gefunden!
|
||||||
host.invalid = [scarlet] Kann keine Verbindung zum Host herstellen.
|
host.invalid = [scarlet] Kann keine Verbindung zum Host herstellen.
|
||||||
@@ -152,7 +152,7 @@ trace.ip = IP: [accent]{0}
|
|||||||
trace.id = Eindeutige ID: [accent]{0}
|
trace.id = Eindeutige ID: [accent]{0}
|
||||||
trace.mobile = Mobiler Client: [accent]{0}
|
trace.mobile = Mobiler Client: [accent]{0}
|
||||||
trace.modclient = Gemoddeter Client: [accent]{0}
|
trace.modclient = Gemoddeter Client: [accent]{0}
|
||||||
invalidid = Ungültige Client-ID! Berichte den Bug.
|
invalidid = Ungültige Client-ID! Berichte den Fehler.
|
||||||
server.bans = Bans
|
server.bans = Bans
|
||||||
server.bans.none = Keine gebannten Spieler gefunden!
|
server.bans.none = Keine gebannten Spieler gefunden!
|
||||||
server.admins = Admins
|
server.admins = Admins
|
||||||
@@ -166,18 +166,18 @@ server.version = [lightgray]Version: {0}
|
|||||||
server.custombuild = [yellow]Benutzerdefinierter Build
|
server.custombuild = [yellow]Benutzerdefinierter Build
|
||||||
confirmban = Bist du sicher, dass du diesen Spieler verbannen möchtest?
|
confirmban = Bist du sicher, dass du diesen Spieler verbannen möchtest?
|
||||||
confirmkick = Bist du sicher, dass du diesen Spieler kicken willst?
|
confirmkick = Bist du sicher, dass du diesen Spieler kicken willst?
|
||||||
confirmvotekick = Are you sure you want to vote-kick this player?
|
confirmvotekick = Willst du wirklich eine Abstimmung zum kicken des spielers machen?
|
||||||
confirmunban = Bist du sicher, dass du die Verbannung des Spielers rückgängig machen willst?
|
confirmunban = Bist du sicher, dass du die Verbannung des Spielers rückgängig machen willst?
|
||||||
confirmadmin = Bist du sicher, dass du diesen Spieler zu einem Admin machen möchtest?
|
confirmadmin = Bist du sicher, dass du diesen Spieler zu einem Admin machen möchtest?
|
||||||
confirmunadmin = Bis du sicher, dass dieser Spieler kein Admin mehr sein soll?
|
confirmunadmin = Bis du sicher, dass dieser Spieler kein Admin mehr sein soll?
|
||||||
joingame.title = Spiel beitreten
|
joingame.title = Spiel beitreten
|
||||||
joingame.ip = IP:
|
joingame.ip = IP:
|
||||||
disconnect = Verbindung unterbrochen.
|
disconnect = Verbindung unterbrochen.
|
||||||
disconnect.error = Connection error.
|
disconnect.error = Verbindungsfehler.
|
||||||
disconnect.closed = Connection closed.
|
disconnect.closed = Verbindung geschlossen.
|
||||||
disconnect.timeout = Timed out.
|
disconnect.timeout = Zu langer Verbindungsversuch.
|
||||||
disconnect.data = Fehler beim Laden der Welt!
|
disconnect.data = Fehler beim Laden der Welt!
|
||||||
cantconnect = Unable to join game ([accent]{0}[]).
|
cantconnect = Unfähig, dem Spiel beizutreten ([accent]{0}[]).
|
||||||
connecting = [accent] Verbinde...
|
connecting = [accent] Verbinde...
|
||||||
connecting.data = [accent] Welt wird geladen...
|
connecting.data = [accent] Welt wird geladen...
|
||||||
server.port = Port:
|
server.port = Port:
|
||||||
@@ -216,8 +216,8 @@ save.playtime = Spielzeit: {0}
|
|||||||
warning = Warnung.
|
warning = Warnung.
|
||||||
confirm = Bestätigen
|
confirm = Bestätigen
|
||||||
delete = Löschen
|
delete = Löschen
|
||||||
view.workshop = View In Workshop
|
view.workshop = Im Workshop betrachten
|
||||||
workshop.listing = Edit Workshop Listing
|
workshop.listing = Workshop Auflistung bearbeiten
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Öffnen
|
open = Öffnen
|
||||||
customize = Anpassen
|
customize = Anpassen
|
||||||
@@ -225,22 +225,22 @@ cancel = Abbruch
|
|||||||
openlink = Link öffnen
|
openlink = Link öffnen
|
||||||
copylink = Kopiere Link
|
copylink = Kopiere Link
|
||||||
back = Zurück
|
back = Zurück
|
||||||
data.export = Export Data
|
data.export = Daten exportieren
|
||||||
data.import = Import Data
|
data.import = Daten importieren
|
||||||
data.exported = Data exported.
|
data.exported = Daten exportiert.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Das sind ungültige Spieldateien.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Externe Spielstände zu importieren löscht[scarlet] all[] deine jetzigen Spielstände.\n[accent]Dies kann nicht rückgängig gemacht werden![]\n\nSobald die Daten importiert sind, schließt das Spiel.
|
||||||
classic.export = Export Classic Data
|
classic.export = Klassische Dateien exportieren
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] Mindustry hatte gerade ein rießiges Update.\nKlassische (v3.5 build 40) Spielstand oder Karten-Daten wurden gefunden. Willst du sie in den home-Ordner deines Smartphones exportieren, um sie für die Mindustry-Klassik App zu verwenden?
|
||||||
quit.confirm = Willst du wirklich aufhören?
|
quit.confirm = Willst du wirklich aufhören?
|
||||||
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.[]
|
quit.confirm.tutorial = Willst du das Tutorial wirklich abbrechen?\nDu kannst es unter[accent] Einstellungen->Spiel->Tutorial wiederholen[] erneut spielen.
|
||||||
loading = [accent]Wird geladen...
|
loading = [accent]Wird geladen...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Mods neuladen...
|
||||||
saving = [accent]Speichere...
|
saving = [accent]Speichere...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] um Plan zu löschen
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] zum Auswählen+Kopieren
|
||||||
pausebuilding = [accent][[{0}][] to pause building
|
pausebuilding = [accent][[{0}][] zum Pausieren des Bauens
|
||||||
resumebuilding = [scarlet][[{0}][] to resume building
|
resumebuilding = [scarlet][[{0}][] um das Bauen fortzusetzen
|
||||||
wave = [accent]Welle {0}
|
wave = [accent]Welle {0}
|
||||||
wave.waiting = Welle in {0}
|
wave.waiting = Welle in {0}
|
||||||
wave.waveInProgress = [LIGHT_GRAY]Welle im Gange
|
wave.waveInProgress = [LIGHT_GRAY]Welle im Gange
|
||||||
@@ -259,18 +259,18 @@ map.nospawn = Diese Karte hat keine Kerne in denen die Spieler beginnen können!
|
|||||||
map.nospawn.pvp = Diese Karte hat keine gegnerischen Kerne wo Gegner starten könnten! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
|
map.nospawn.pvp = Diese Karte hat keine gegnerischen Kerne wo Gegner starten könnten! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
|
||||||
map.nospawn.attack = Diese Karte hat keine gengnerischen Kerne, die Spieler angreifen können! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
|
map.nospawn.attack = Diese Karte hat keine gengnerischen Kerne, die Spieler angreifen können! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
|
||||||
map.invalid = Fehler beim Laden der Karte: Beschädigtes oder ungültige Karten Datei.
|
map.invalid = Fehler beim Laden der Karte: Beschädigtes oder ungültige Karten Datei.
|
||||||
workshop.update = Update Item
|
workshop.update = Item aktualisieren
|
||||||
workshop.error = Error fetching workshop details: {0}
|
workshop.error = Fehler beim laden von Workshop-Daten: {0}
|
||||||
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up!
|
map.publish.confirm = Willst du wirklich diese Map hochladen?\n\n[lightgray]Vergewissere dich die, der Workshop-EULA zugestimmt zu haben, sonst tauch deine Map nicht auf!
|
||||||
workshop.menu = Select what you would like to do with this item.
|
workshop.menu = Wähle aus, was du mit diesem Item machen willst.
|
||||||
workshop.info = Item Info
|
workshop.info = Item Info
|
||||||
changelog = Changelog (optional):
|
changelog = Changelog (optional):
|
||||||
eula = Steam EULA
|
eula = Steam EULA
|
||||||
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
|
missing = Dieses Item wurde verschoben oder gelöscht.\n[lightgray]Die Workshop-Auflistung wird nun automatisch ungekoppelt.
|
||||||
publishing = [accent]Publishing...
|
publishing = [accent]Veröffentlichen...
|
||||||
publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up!
|
publish.confirm = Bist du sicher, dies zu veröffentlichen?\n\n[lightgray]Vergewissere dich die, der Workshop-EULA zugestimmt zu haben, sonst tauch deine Karte nicht auf!
|
||||||
publish.error = Error publishing item: {0}
|
publish.error = Fehler beim veröffentlichen des Items: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Fehler beim laden der Steam-Dienste.\nError: {0}
|
||||||
editor.brush = Pinsel
|
editor.brush = Pinsel
|
||||||
editor.openin = Öffne im Editor
|
editor.openin = Öffne im Editor
|
||||||
editor.oregen = Erze generieren
|
editor.oregen = Erze generieren
|
||||||
@@ -278,12 +278,12 @@ editor.oregen.info = Erze generiert:
|
|||||||
editor.mapinfo = Karten Info
|
editor.mapinfo = Karten Info
|
||||||
editor.author = Autor:
|
editor.author = Autor:
|
||||||
editor.description = Beschreibung:
|
editor.description = Beschreibung:
|
||||||
editor.nodescription = A map must have a description of at least 4 characters before being published.
|
editor.nodescription = Eine Karte benötigt mindestens 4 Buchstaben in der Beschreibung, bevor sie veröffentlich werden kann.
|
||||||
editor.waves = Wellen:
|
editor.waves = Wellen:
|
||||||
editor.rules = Regeln:
|
editor.rules = Regeln:
|
||||||
editor.generation = Generator:
|
editor.generation = Generator:
|
||||||
editor.ingame = Im Spiel Bearbeiten
|
editor.ingame = Im Spiel Bearbeiten
|
||||||
editor.publish.workshop = Publish On Workshop
|
editor.publish.workshop = Im Workshop veröffentlichen
|
||||||
editor.newmap = Neue Karte
|
editor.newmap = Neue Karte
|
||||||
workshop = Workshop
|
workshop = Workshop
|
||||||
waves.title = Wellen
|
waves.title = Wellen
|
||||||
@@ -312,7 +312,7 @@ editor.errorload = Fehler beim Laden der Datei:\n[accent]{0}
|
|||||||
editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0}
|
editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0}
|
||||||
editor.errorimage = Das ist ein Bild, keine Karte. Wechsel nicht den Dateityp und erwarte, dass es funktioniert.\n\nWenn du eine alte Karte importieren möchtest, benutze den 'Importiere Terrain Bild' Knopf in dem Editor.
|
editor.errorimage = Das ist ein Bild, keine Karte. Wechsel nicht den Dateityp und erwarte, dass es funktioniert.\n\nWenn du eine alte Karte importieren möchtest, benutze den 'Importiere Terrain Bild' Knopf in dem Editor.
|
||||||
editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Karten Format, das nicht mehr unterstützt wird.
|
editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Karten Format, das nicht mehr unterstützt wird.
|
||||||
editor.errornot = This is not a map file.
|
editor.errornot = Dies ist keine Kartendatei
|
||||||
editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt.
|
editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt.
|
||||||
editor.errorname = Karte hat keinen Namen.
|
editor.errorname = Karte hat keinen Namen.
|
||||||
editor.update = Aktualisieren
|
editor.update = Aktualisieren
|
||||||
@@ -326,14 +326,14 @@ editor.saved = Gespeichert!
|
|||||||
editor.save.noname = Deine Karte hat keinen Namen! Setze einen Namen im [accent]Karten Info[] Menu.
|
editor.save.noname = Deine Karte hat keinen Namen! Setze einen Namen im [accent]Karten Info[] Menu.
|
||||||
editor.save.overwrite = Deine Karte überschreibt eine built-in Karte! Wähle einen anderen Karten Namen im [accent]'Karten info'[] Menu.
|
editor.save.overwrite = Deine Karte überschreibt eine built-in Karte! Wähle einen anderen Karten Namen im [accent]'Karten info'[] Menu.
|
||||||
editor.import.exists = [scarlet]Fehler beim Import:[] Ein built-in Karte namens '{0}' existiert bereits!
|
editor.import.exists = [scarlet]Fehler beim Import:[] Ein built-in Karte namens '{0}' existiert bereits!
|
||||||
editor.import = Import...
|
editor.import = Importieren...
|
||||||
editor.importmap = Importiere Karte
|
editor.importmap = Importiere Karte
|
||||||
editor.importmap.description = Importiere von einer bestehenden Karte
|
editor.importmap.description = Importiere von einer bestehenden Karte
|
||||||
editor.importfile = Importiere Datei
|
editor.importfile = Importiere Datei
|
||||||
editor.importfile.description = Importiere aus einer Karten Datei
|
editor.importfile.description = Importiere aus einer Karten Datei
|
||||||
editor.importimage = Importiere Terrain Bild
|
editor.importimage = Importiere Terrain Bild
|
||||||
editor.importimage.description = Importiere aus einer Terrain Bild Datei
|
editor.importimage.description = Importiere aus einer Terrain Bild Datei
|
||||||
editor.export = Export...
|
editor.export = Exportieren...
|
||||||
editor.exportfile = Export in Datei
|
editor.exportfile = Export in Datei
|
||||||
editor.exportfile.description = Exportiere in eine Karten Datei
|
editor.exportfile.description = Exportiere in eine Karten Datei
|
||||||
editor.exportimage = Export in Terrain Bild Datei
|
editor.exportimage = Export in Terrain Bild Datei
|
||||||
@@ -404,33 +404,33 @@ ping = Ping: {0}ms
|
|||||||
language.restart = Bitte Starte dein Spiel neu, damit die Sprach-Einstellung aktiv wird.
|
language.restart = Bitte Starte dein Spiel neu, damit die Sprach-Einstellung aktiv wird.
|
||||||
settings = Einstellungen
|
settings = Einstellungen
|
||||||
tutorial = Tutorial
|
tutorial = Tutorial
|
||||||
tutorial.retake = Re-Take Tutorial
|
tutorial.retake = Tutorial wiederholen
|
||||||
editor = Editor
|
editor = Editor
|
||||||
mapeditor = Karten Editor
|
mapeditor = Karten Editor
|
||||||
abandon = Aufgeben
|
abandon = Aufgeben
|
||||||
abandon.text = Diese Zone sowie alle Ressourcen werden dem Gegner überlassen.
|
abandon.text = Diese Zone sowie alle Ressourcen werden dem Gegner überlassen.
|
||||||
locked = Gesperrt
|
locked = Gesperrt
|
||||||
complete = [LIGHT_GRAY]Abschließen:
|
complete = [LIGHT_GRAY]Abschließen:
|
||||||
requirement.wave = Reach Wave {0} in {1}
|
requirement.wave = Erreiche {0} in {1}
|
||||||
requirement.core = Destroy Enemy Core in {0}
|
requirement.core = Zerstöre Gegnerbasis in {0}
|
||||||
requirement.unlock = Unlock {0}
|
requirement.unlock = Schalte {0} freo
|
||||||
resume = Zu Zone zurückkehren:\n[LIGHT_GRAY]{0}
|
resume = Zu Zone zurückkehren:\n[LIGHT_GRAY]{0}
|
||||||
bestwave = [LIGHT_GRAY]Beste Welle: {0}
|
bestwave = [LIGHT_GRAY]Beste Welle: {0}
|
||||||
launch = Abschluss
|
launch = Abschluss
|
||||||
launch.title = Abschluss erfolgreich
|
launch.title = Abschluss erfolgreich
|
||||||
launch.next = [LIGHT_GRAY]Nächste Möglichkeit bei Welle {0}
|
launch.next = [LIGHT_GRAY]Nächste Möglichkeit bei Welle {0}
|
||||||
launch.unable2 = [scarlet]Unable to LAUNCH.[]
|
launch.unable2 = [scarlet]Unfähig abzuschließen.[]
|
||||||
launch.confirm = Dies wird alle Ressourcen in deinen Kern übertragen.\nDu kannst nicht wieder zu dieser Karte zurückkehren.
|
launch.confirm = Dies wird alle Ressourcen in deinen Kern übertragen.\nDu kannst nicht wieder zu dieser Karte zurückkehren.
|
||||||
launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
|
launch.skip.confirm = Wenn du jetzt überspringst, kannst du nicht vor späteren Wellen abschließen.
|
||||||
uncover = Freischalten
|
uncover = Freischalten
|
||||||
configure = Startitems festlegen
|
configure = Startitems festlegen
|
||||||
bannedblocks = Banned Blocks
|
bannedblocks = Gesperrte Blöcke
|
||||||
addall = Add All
|
addall = Alle hinzufügen
|
||||||
configure.locked = [LIGHT_GRAY]Erreiche Welle {0}\n, um Startitems festlegen zu können.
|
configure.locked = [LIGHT_GRAY]Erreiche Welle {0}\n, um Startitems festlegen zu können.
|
||||||
configure.invalid = Amount must be a number between 0 and {0}.
|
configure.invalid = Anzahl muss zwischen 0 und {0} sein.
|
||||||
zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet.
|
zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet.
|
||||||
zone.requirement.complete = Welle {0} erreicht:\n{1} Anforderungen der Zone erfüllt.
|
zone.requirement.complete = Welle {0} erreicht:\n{1} Anforderungen der Zone erfüllt.
|
||||||
zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
|
zone.config.unlocked = Konfiguration:[lightgray]\n{0}
|
||||||
zone.resources = Ressourcen entdeckt:
|
zone.resources = Ressourcen entdeckt:
|
||||||
zone.objective = [lightgray]Ziel: [accent]{0}
|
zone.objective = [lightgray]Ziel: [accent]{0}
|
||||||
zone.objective.survival = Überlebe
|
zone.objective.survival = Überlebe
|
||||||
@@ -457,10 +457,10 @@ zone.desolateRift.name = Trostloser Riss
|
|||||||
zone.nuclearComplex.name = Kernkraftwerk
|
zone.nuclearComplex.name = Kernkraftwerk
|
||||||
zone.overgrowth.name = Überwucherung
|
zone.overgrowth.name = Überwucherung
|
||||||
zone.tarFields.name = Teerfelder
|
zone.tarFields.name = Teerfelder
|
||||||
zone.saltFlats.name = Salzebenen
|
zone.saltFlats.name = Salztiefen
|
||||||
zone.impact0078.name = Auswirkung 0078
|
zone.impact0078.name = Auswirkung 0078
|
||||||
zone.crags.name = Felsen
|
zone.crags.name = Felsen
|
||||||
zone.fungalPass.name = Fungal Pass
|
zone.fungalPass.name = Sporenpass
|
||||||
zone.groundZero.description = Der optimale Ort, um anzufangen. Niedrige Bedrohung durch Gegner. Wenige Ressourcen.\nSammel so viel Kupfer und Blei wie möglich.\nMach weiter!
|
zone.groundZero.description = Der optimale Ort, um anzufangen. Niedrige Bedrohung durch Gegner. Wenige Ressourcen.\nSammel so viel Kupfer und Blei wie möglich.\nMach weiter!
|
||||||
zone.frozenForest.description = Sogar hier, näher an den Bergen, haben sich die Sporen verbreitet. Die kalten Temperaturen können sie nicht für immer im Schach halten.\n\nStarte das Wagnis in Strom. Baue Verbrennungsgeneratoren. Lerne Heiler zu benutzen.
|
zone.frozenForest.description = Sogar hier, näher an den Bergen, haben sich die Sporen verbreitet. Die kalten Temperaturen können sie nicht für immer im Schach halten.\n\nStarte das Wagnis in Strom. Baue Verbrennungsgeneratoren. Lerne Heiler zu benutzen.
|
||||||
zone.desertWastes.description = Diese Abfälle sind riesig, unberechenbar, und durchzogen von verfallenen Sektorstrukturen.\nKohle ist in dieser Region vorhanden. Verbrenne es für Strom, oder synthetisiere Graphit.\n\n[lightgray]Dieser Landeort kann nicht garantiert werden.
|
zone.desertWastes.description = Diese Abfälle sind riesig, unberechenbar, und durchzogen von verfallenen Sektorstrukturen.\nKohle ist in dieser Region vorhanden. Verbrenne es für Strom, oder synthetisiere Graphit.\n\n[lightgray]Dieser Landeort kann nicht garantiert werden.
|
||||||
@@ -472,30 +472,30 @@ zone.overgrowth.description = Dieser Bereich ist bewachsen, näher an der Quelle
|
|||||||
zone.tarFields.description = Der Rand einer Ölförderzone, zwischen Bergen und Wüste. Eine der wenigen Plätze mit nutzbare Teer Reserven.\nObwohl es aufgegeben wurde, hat dieses Gebiet einige gefährliche feindliche Kräfte in der Nähe. Unterschätze sie nicht.\n\n[lightgray]Wenn möglich, erforsche Technologien zur Ölverarbeitung.
|
zone.tarFields.description = Der Rand einer Ölförderzone, zwischen Bergen und Wüste. Eine der wenigen Plätze mit nutzbare Teer Reserven.\nObwohl es aufgegeben wurde, hat dieses Gebiet einige gefährliche feindliche Kräfte in der Nähe. Unterschätze sie nicht.\n\n[lightgray]Wenn möglich, erforsche Technologien zur Ölverarbeitung.
|
||||||
zone.desolateRift.description = Eine extrem gefährliche Zone. Reichlich Ressourcen, aber wenig Platz. Hohe Zerstörungsgefahr. Verlasse es so schnell wie möglich. Lassen Sie sich nicht von den großen Abständen zwischen feindlichen Angriffen in die Irre führen.
|
zone.desolateRift.description = Eine extrem gefährliche Zone. Reichlich Ressourcen, aber wenig Platz. Hohe Zerstörungsgefahr. Verlasse es so schnell wie möglich. Lassen Sie sich nicht von den großen Abständen zwischen feindlichen Angriffen in die Irre führen.
|
||||||
zone.nuclearComplex.description = Eine ehemalige Anlage zur Herstellung und Verarbeitung von Thorium, die in Trümmern liegt.\n[lightgray]Erforsche das Thorium und seine vielen Verwendungsmöglichkeiten.\n\nDer Feind ist hier in großer Zahl präsent und sucht ständig nach Angreifern.
|
zone.nuclearComplex.description = Eine ehemalige Anlage zur Herstellung und Verarbeitung von Thorium, die in Trümmern liegt.\n[lightgray]Erforsche das Thorium und seine vielen Verwendungsmöglichkeiten.\n\nDer Feind ist hier in großer Zahl präsent und sucht ständig nach Angreifern.
|
||||||
zone.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores.
|
zone.fungalPass.description = Ein Übergangsgebiet zwischen hohen Bergen und tieferen, sporengeplagter Länder. Eine kleine Späherbasis ist hier angelegt.\nZerstöre sie.\nNutze Dagger und Crawler. Zerstöre die zwei Basen.
|
||||||
zone.impact0078.description = <Beschreibung hier einfügen>
|
zone.impact0078.description = <Beschreibung hier einfügen>
|
||||||
zone.crags.description = <Beschreibung hier einfügen>
|
zone.crags.description = <Beschreibung hier einfügen>
|
||||||
settings.language = Sprache
|
settings.language = Sprache
|
||||||
settings.data = Game Data
|
settings.data = Spieldaten
|
||||||
settings.reset = Auf Standard zurücksetzen
|
settings.reset = Auf Standard zurücksetzen
|
||||||
settings.rebind = Zuweisen
|
settings.rebind = Zuweisen
|
||||||
settings.controls = Steuerung
|
settings.controls = Steuerung
|
||||||
settings.game = Spiel
|
settings.game = Spiel
|
||||||
settings.sound = Audio
|
settings.sound = Audio
|
||||||
settings.graphics = Grafiken
|
settings.graphics = Grafik
|
||||||
settings.cleardata = Spieldaten zurücksetzen...
|
settings.cleardata = Spieldaten zurücksetzen...
|
||||||
settings.clear.confirm = Bist du sicher, dass du die Spieldaten zurücksetzen willst?\n Diese Aktion kann nicht rückgängig gemacht werden!
|
settings.clear.confirm = Bist du sicher, dass du die Spieldaten zurücksetzen willst?\n Diese Aktion kann nicht rückgängig gemacht werden!
|
||||||
settings.clearall.confirm = [scarlet]Warnung![]\nDas wird jegliche Spieldaten zurücksetzen inklusive Speicherstände, Karten, Freischaltungen und Tastenbelegungen.\n Nachdem du 'OK' drückst wird alles zurückgesetzt und das Spiel schließt sich automatisch.
|
settings.clearall.confirm = [scarlet]Warnung![]\nDas wird jegliche Spieldaten zurücksetzen inklusive Speicherstände, Karten, Freischaltungen und Tastenbelegungen.\n Nachdem du 'OK' drückst wird alles zurückgesetzt und das Spiel schließt sich automatisch.
|
||||||
paused = Pausiert
|
paused = Pausiert
|
||||||
clear = Clear
|
clear = Leeren
|
||||||
banned = [scarlet]Banned
|
banned = [scarlet]Banned
|
||||||
yes = Ja
|
yes = Ja
|
||||||
no = Nein
|
no = Nein
|
||||||
info.title = [accent]Info
|
info.title = [accent]Info
|
||||||
error.title = [crimson] Ein Fehler ist aufgetreten
|
error.title = [crimson] Ein Fehler ist aufgetreten
|
||||||
error.crashtitle = Ein Fehler ist aufgetreten!
|
error.crashtitle = Ein Fehler ist aufgetreten!
|
||||||
blocks.input = Input
|
blocks.input = Eingang
|
||||||
blocks.output = Output
|
blocks.output = Ausgang
|
||||||
blocks.booster = Verstärkung
|
blocks.booster = Verstärkung
|
||||||
block.unknown = [LIGHT_GRAY]???
|
block.unknown = [LIGHT_GRAY]???
|
||||||
blocks.powercapacity = Kapazität
|
blocks.powercapacity = Kapazität
|
||||||
@@ -509,13 +509,13 @@ blocks.shootrange = Reichweite
|
|||||||
blocks.size = Größe
|
blocks.size = Größe
|
||||||
blocks.liquidcapacity = Flüssigkeitskapazität
|
blocks.liquidcapacity = Flüssigkeitskapazität
|
||||||
blocks.powerrange = Stromreichweite
|
blocks.powerrange = Stromreichweite
|
||||||
blocks.powerconnections = Max Connections
|
blocks.powerconnections = Maximale Stromverbindungen
|
||||||
blocks.poweruse = Stromverbrauch
|
blocks.poweruse = Stromverbrauch
|
||||||
blocks.powerdamage = Stromverbrauch/Schadenspunkt
|
blocks.powerdamage = Stromverbrauch/Schadenspunkt
|
||||||
blocks.itemcapacity = Materialkapazität
|
blocks.itemcapacity = Materialkapazität
|
||||||
blocks.basepowergeneration = Basis-Stromerzeugung
|
blocks.basepowergeneration = Basis-Stromerzeugung
|
||||||
blocks.productiontime = Produktionszeit
|
blocks.productiontime = Produktionszeit
|
||||||
blocks.repairtime = Block volle Reparaturzeit
|
blocks.repairtime = Zeit zur vollständigen Heilung
|
||||||
blocks.speedincrease = Geschwindigkeitserhöhung
|
blocks.speedincrease = Geschwindigkeitserhöhung
|
||||||
blocks.range = Reichweite
|
blocks.range = Reichweite
|
||||||
blocks.drilltier = Abbaubare Erze
|
blocks.drilltier = Abbaubare Erze
|
||||||
@@ -524,19 +524,19 @@ blocks.boosteffect = Verstärkungseffekt
|
|||||||
blocks.maxunits = Max aktive Einheiten
|
blocks.maxunits = Max aktive Einheiten
|
||||||
blocks.health = Lebenspunkte
|
blocks.health = Lebenspunkte
|
||||||
blocks.buildtime = Baudauer
|
blocks.buildtime = Baudauer
|
||||||
blocks.buildcost = Build Cost
|
blocks.buildcost = Baukosten
|
||||||
blocks.inaccuracy = Ungenauigkeit
|
blocks.inaccuracy = Ungenauigkeit
|
||||||
blocks.shots = Schüsse
|
blocks.shots = Schüsse
|
||||||
blocks.reload = Schüsse/Sekunde
|
blocks.reload = Schüsse/Sekunde
|
||||||
blocks.ammo = Munition
|
blocks.ammo = Munition
|
||||||
bar.drilltierreq = Better Drill Required
|
bar.drilltierreq = Besserer Bohrer benötigt
|
||||||
bar.drillspeed = Bohrgeschwindigkeit: {0}/s
|
bar.drillspeed = Bohrgeschwindigkeit: {0}/s
|
||||||
bar.pumpspeed = Pump Speed: {0}/s
|
bar.pumpspeed = Pump Speed: {0}/s
|
||||||
bar.efficiency = Effizienz: {0}%
|
bar.efficiency = Effizienz: {0}%
|
||||||
bar.powerbalance = Strom: {0}
|
bar.powerbalance = Strom: {0}
|
||||||
bar.powerstored = Stored: {0}/{1}
|
bar.powerstored = Stored: {0}/{1}
|
||||||
bar.poweramount = Strom: {0}
|
bar.poweramount = Strom: {0}
|
||||||
bar.poweroutput = Strom Output: {0}
|
bar.poweroutput = Stromgeneration: {0}
|
||||||
bar.items = Items: {0}
|
bar.items = Items: {0}
|
||||||
bar.capacity = Capacity: {0}
|
bar.capacity = Capacity: {0}
|
||||||
bar.liquid = Flüssigkeit
|
bar.liquid = Flüssigkeit
|
||||||
@@ -547,14 +547,14 @@ bar.spawned = Einheiten: {0}/{1}
|
|||||||
bullet.damage = [stat]{0}[lightgray] Schaden
|
bullet.damage = [stat]{0}[lightgray] Schaden
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln
|
bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln
|
||||||
bullet.incendiary = [stat]entzündend
|
bullet.incendiary = [stat]entzündend
|
||||||
bullet.homing = [stat]verfolgend
|
bullet.homing = [stat]zielsuchend
|
||||||
bullet.shock = [stat]schock
|
bullet.shock = [stat]schock
|
||||||
bullet.frag = [stat]explosiv
|
bullet.frag = [stat]explosiv
|
||||||
bullet.knockback = [stat]{0}[lightgray] zurückstoßend
|
bullet.knockback = [stat]{0}[lightgray] zurückstoßend
|
||||||
bullet.freezing = [stat]gefrierend
|
bullet.freezing = [stat]frierend
|
||||||
bullet.tarred = [stat]geteert
|
bullet.tarred = [stat]teerent
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator
|
bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator
|
||||||
bullet.reload = [stat]{0}[lightgray]x neu laden
|
bullet.reload = [stat]{0}[lightgray]x Feuerrate
|
||||||
unit.blocks = Blöcke
|
unit.blocks = Blöcke
|
||||||
unit.powersecond = Stromeinheiten/Sekunde
|
unit.powersecond = Stromeinheiten/Sekunde
|
||||||
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
|
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
|
||||||
@@ -563,7 +563,7 @@ unit.liquidunits = Flüssigkeitseinheiten
|
|||||||
unit.powerunits = Stromeinheiten
|
unit.powerunits = Stromeinheiten
|
||||||
unit.degrees = Grad
|
unit.degrees = Grad
|
||||||
unit.seconds = Sekunden
|
unit.seconds = Sekunden
|
||||||
unit.persecond = /sec
|
unit.persecond = /s
|
||||||
unit.timesspeed = x Geschwindigkeit
|
unit.timesspeed = x Geschwindigkeit
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = Materialeinheiten
|
unit.items = Materialeinheiten
|
||||||
@@ -573,12 +573,12 @@ category.liquids = Flüssigkeiten
|
|||||||
category.items = Materialien
|
category.items = Materialien
|
||||||
category.crafting = Erzeugung
|
category.crafting = Erzeugung
|
||||||
category.shooting = Schießen
|
category.shooting = Schießen
|
||||||
category.optional = Optionale Verbesserungen
|
category.optional = Zusätze
|
||||||
setting.landscape.name = Landschaft sperren
|
setting.landscape.name = Landschaft sperren
|
||||||
setting.shadows.name = Schatten
|
setting.shadows.name = Schatten
|
||||||
setting.blockreplace.name = Automatic Block Suggestions
|
setting.blockreplace.name = Automatische Blockvorschläge
|
||||||
setting.linear.name = Lineare Filterung
|
setting.linear.name = Lineare Filterung
|
||||||
setting.hints.name = Hints
|
setting.hints.name = Tipps
|
||||||
setting.animatedwater.name = Animiertes Wasser
|
setting.animatedwater.name = Animiertes Wasser
|
||||||
setting.animatedshields.name = Animierte Schilde
|
setting.animatedshields.name = Animierte Schilde
|
||||||
setting.antialias.name = Antialias[LIGHT_GRAY] (Neustart erforderlich)[]
|
setting.antialias.name = Antialias[LIGHT_GRAY] (Neustart erforderlich)[]
|
||||||
@@ -597,33 +597,36 @@ setting.difficulty.normal = Normal
|
|||||||
setting.difficulty.hard = Schwer
|
setting.difficulty.hard = Schwer
|
||||||
setting.difficulty.insane = Unmöglich
|
setting.difficulty.insane = Unmöglich
|
||||||
setting.difficulty.name = Schwierigkeit
|
setting.difficulty.name = Schwierigkeit
|
||||||
setting.screenshake.name = Bildschirmwackeln
|
setting.screenshake.name = Wackeleffekt
|
||||||
setting.effects.name = Effekte anzeigen
|
setting.effects.name = Effekte anzeigen
|
||||||
setting.destroyedblocks.name = Display Destroyed Blocks
|
setting.destroyedblocks.name = Zerstörte Blöcke anzeigen
|
||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = Automatische Wegfindung beim Bau von Förderbändern
|
||||||
setting.sensitivity.name = Controller-Empfindlichkeit
|
setting.sensitivity.name = Controller-Empfindlichkeit
|
||||||
setting.saveinterval.name = Autosave Häufigkeit
|
setting.saveinterval.name = Autosave Häufigkeit
|
||||||
setting.seconds = {0} Sekunden
|
setting.seconds = {0} Sekunden
|
||||||
|
setting.blockselecttimeout.name = Block Auswahl Timeout
|
||||||
|
setting.milliseconds = {0} Millisekunden
|
||||||
setting.fullscreen.name = Vollbild
|
setting.fullscreen.name = Vollbild
|
||||||
setting.borderlesswindow.name = Randloses Fenster[LIGHT_GRAY] (Neustart teilweise erforderlich)
|
setting.borderlesswindow.name = Randloses Fenster[LIGHT_GRAY] (Neustart teilweise erforderlich)
|
||||||
setting.fps.name = Zeige FPS
|
setting.fps.name = Zeige FPS
|
||||||
|
setting.blockselectkeys.name = Block Shortcuts anzeigen
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Verpixeln [LIGHT_GRAY](Könnte die Leistung beeinträchtigen)
|
setting.pixelate.name = Verpixeln [LIGHT_GRAY](Könnte die Leistung beeinträchtigen)
|
||||||
setting.minimap.name = Zeige die Minimap
|
setting.minimap.name = Zeige die Minimap
|
||||||
setting.position.name = Show Player Position
|
setting.position.name = Spieler-Position anzeigen
|
||||||
setting.musicvol.name = Musiklautstärke
|
setting.musicvol.name = Musiklautstärke
|
||||||
setting.ambientvol.name = Ambient Volume
|
setting.ambientvol.name = Ambient Volume
|
||||||
setting.mutemusic.name = Musik stummschalten
|
setting.mutemusic.name = Musik stummschalten
|
||||||
setting.sfxvol.name = Audioeffekt-Lautstärke
|
setting.sfxvol.name = Audioeffekt-Lautstärke
|
||||||
setting.mutesound.name = Audioeffekte stummschalten
|
setting.mutesound.name = Audioeffekte stummschalten
|
||||||
setting.crashreport.name = Anonyme Absturzberichte senden
|
setting.crashreport.name = Anonyme Absturzberichte senden
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = Automatisch Speicherstände anlegen
|
||||||
setting.publichost.name = Public Game Visibility
|
setting.publichost.name = Public Game Visibility
|
||||||
setting.chatopacity.name = Chat Deckkraft
|
setting.chatopacity.name = Chat Deckkraft
|
||||||
setting.lasersopacity.name = Power Laser Opacity
|
setting.lasersopacity.name = Power Laser Opacity
|
||||||
setting.playerchat.name = Chat im Spiel anzeigen
|
setting.playerchat.name = Chat im Spiel anzeigen
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
public.confirm = Willst du dein Spiel öffentlich zugänglich machen?\n[accent]Jeder kann deinem Spiel beitreten.\n[lightgray]Dies kann später in den Einstellung->Spielt->Öffentliches Spiel geändert werden.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Bemerke: Beta-Versionen des Spiels können keine öffentlichen Spiele machen.
|
||||||
uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen...
|
uiscale.reset = UI-Skalierung wurde geändert.\nDrücke "OK", um diese Skalierung zu bestätigen.\n[scarlet]Zurückkehren und Beenden in[accent] {0}[] Einstellungen...
|
||||||
uiscale.cancel = Abbrechen & Beenden
|
uiscale.cancel = Abbrechen & Beenden
|
||||||
setting.bloom.name = Bloom
|
setting.bloom.name = Bloom
|
||||||
@@ -635,29 +638,45 @@ category.multiplayer.name = Mehrspieler
|
|||||||
command.attack = Angreifen
|
command.attack = Angreifen
|
||||||
command.rally = Rally
|
command.rally = Rally
|
||||||
command.retreat = Rückzug
|
command.retreat = Rückzug
|
||||||
|
placement.blockselectkeys = \n[lightgray]Shortcut: [{0},
|
||||||
keybind.clear_building.name = Clear Building
|
keybind.clear_building.name = Clear Building
|
||||||
keybind.press = Drücke eine Taste...
|
keybind.press = Drücke eine Taste...
|
||||||
keybind.press.axis = Drücke eine Taste oder bewege eine Achse...
|
keybind.press.axis = Drücke eine Taste oder bewege eine Achse...
|
||||||
keybind.screenshot.name = Karten Screenshot
|
keybind.screenshot.name = Karten Screenshot
|
||||||
keybind.move_x.name = X-Achse
|
keybind.move_x.name = X-Achse
|
||||||
keybind.move_y.name = Y-Achse
|
keybind.move_y.name = Y-Achse
|
||||||
keybind.schematic_select.name = Select Region
|
keybind.schematic_select.name = Bereich auswählen
|
||||||
keybind.schematic_menu.name = Schematic Menu
|
keybind.schematic_menu.name = Schematic Menu
|
||||||
keybind.schematic_flip_x.name = Flip Schematic X
|
keybind.schematic_flip_x.name = Entwurf umdrehen X
|
||||||
keybind.schematic_flip_y.name = Flip Schematic Y
|
keybind.schematic_flip_y.name = Entwurf umdrehn Y
|
||||||
keybind.fullscreen.name = Toggle Fullscreen
|
keybind.category_prev.name = Vorige Kategorie
|
||||||
|
keybind.category_next.name = Nächste Kategorie
|
||||||
|
keybind.block_select_left.name = Block-Auswahl nach links
|
||||||
|
keybind.block_select_right.name = Block-Auswahl nach rechts
|
||||||
|
keybind.block_select_up.name = Block-Auswahl nach oben
|
||||||
|
keybind.block_select_down.name = Block-Auswahl nach unten
|
||||||
|
keybind.block_select_01.name = Kategorie/Block 1 auswählen
|
||||||
|
keybind.block_select_02.name = Kategorie/Block 2 auswählen
|
||||||
|
keybind.block_select_03.name = Kategorie/Block 3 auswählen
|
||||||
|
keybind.block_select_04.name = Kategorie/Block 4 auswählen
|
||||||
|
keybind.block_select_05.name = Kategorie/Block 5 auswählen
|
||||||
|
keybind.block_select_06.name = Kategorie/Block 6 auswählen
|
||||||
|
keybind.block_select_07.name = Kategorie/Block 7 auswählen
|
||||||
|
keybind.block_select_08.name = Kategorie/Block 8 auswählen
|
||||||
|
keybind.block_select_09.name = Kategorie/Block 9 auswählen
|
||||||
|
keybind.block_select_10.name = Kategorie/Block 10 auswählen
|
||||||
|
keybind.fullscreen.name = Vollbild umschalten
|
||||||
keybind.select.name = Auswählen/Schießen
|
keybind.select.name = Auswählen/Schießen
|
||||||
keybind.diagonal_placement.name = Diagonal platzieren
|
keybind.diagonal_placement.name = Diagonal platzieren
|
||||||
keybind.pick.name = Block Auswählen
|
keybind.pick.name = Block Auswählen
|
||||||
keybind.break_block.name = Block zerstören
|
keybind.break_block.name = Block zerstören
|
||||||
keybind.deselect.name = Auswahl aufheben
|
keybind.deselect.name = Auswahl aufheben
|
||||||
keybind.shoot.name = Schießen
|
keybind.shoot.name = Schießen
|
||||||
keybind.zoom_hold.name = Zoom halten
|
|
||||||
keybind.zoom.name = Zoomen
|
keybind.zoom.name = Zoomen
|
||||||
keybind.menu.name = Menü
|
keybind.menu.name = Menü
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
keybind.pause_building.name = Pause/Resume Building
|
keybind.pause_building.name = Pausieren/Fortsetzen Bauen
|
||||||
keybind.minimap.name = Minimap
|
Keybind.minimap.name = Minimap
|
||||||
keybind.dash.name = Bindestrich
|
keybind.dash.name = Bindestrich
|
||||||
keybind.chat.name = Chat
|
keybind.chat.name = Chat
|
||||||
keybind.player_list.name = Spielerliste
|
keybind.player_list.name = Spielerliste
|
||||||
@@ -710,7 +729,7 @@ rules.title.unit = Einheiten
|
|||||||
content.item.name = Materialien
|
content.item.name = Materialien
|
||||||
content.liquid.name = Flüssigkeiten
|
content.liquid.name = Flüssigkeiten
|
||||||
content.unit.name = Einheiten
|
content.unit.name = Einheiten
|
||||||
content.block.name = Blocks
|
content.block.name = Blöcke
|
||||||
content.mech.name = Mechs
|
content.mech.name = Mechs
|
||||||
item.copper.name = Kupfer
|
item.copper.name = Kupfer
|
||||||
item.lead.name = Blei
|
item.lead.name = Blei
|
||||||
@@ -753,6 +772,7 @@ mech.trident-ship.name = Trident
|
|||||||
mech.trident-ship.weapon = Bombenschacht
|
mech.trident-ship.weapon = Bombenschacht
|
||||||
mech.glaive-ship.name = Glaive
|
mech.glaive-ship.name = Glaive
|
||||||
mech.glaive-ship.weapon = Flammen-Mehrlader
|
mech.glaive-ship.weapon = Flammen-Mehrlader
|
||||||
|
item.corestorable = [lightgray]Im Kern speicherbar: {0}
|
||||||
item.explosiveness = [LIGHT_GRAY]Explosivität: {0}
|
item.explosiveness = [LIGHT_GRAY]Explosivität: {0}
|
||||||
item.flammability = [LIGHT_GRAY]Entflammbarkeit: {0}
|
item.flammability = [LIGHT_GRAY]Entflammbarkeit: {0}
|
||||||
item.radioactivity = [LIGHT_GRAY]Radioaktivität: {0}
|
item.radioactivity = [LIGHT_GRAY]Radioaktivität: {0}
|
||||||
|
|||||||
@@ -27,19 +27,19 @@ load.mod = Mods
|
|||||||
schematic = Schematic
|
schematic = Schematic
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Save Schematic...
|
||||||
schematics = Schematics
|
schematics = Schematics
|
||||||
schematic.replace = A schematic by that name already exists. Replace it?
|
schematic.replace = Un schematic con ese nombre ya existe. ¿Deseas remplazarlo?
|
||||||
schematic.import = Import Schematic...
|
schematic.import = Import Schematic...
|
||||||
schematic.exportfile = Export File
|
schematic.exportfile = Export File
|
||||||
schematic.importfile = Import File
|
schematic.importfile = Import File
|
||||||
schematic.browseworkshop = Browse Workshop
|
schematic.browseworkshop = Browse Workshop
|
||||||
schematic.copy = Copy to Clipboard
|
schematic.copy = Copiar al portapapeles.
|
||||||
schematic.copy.import = Import from Clipboard
|
schematic.copy.import = Importar desde el portapapeles.
|
||||||
schematic.shareworkshop = Share on Workshop
|
schematic.shareworkshop = Compartir en la Workshop
|
||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar Schematic
|
||||||
schematic.saved = Schematic saved.
|
schematic.saved = Schematic guardado.
|
||||||
schematic.delete.confirm = This schematic will be utterly eradicated.
|
schematic.delete.confirm = This schematic will be utterly eradicated.
|
||||||
schematic.rename = Rename Schematic
|
schematic.rename = Renombrar Schematic
|
||||||
schematic.info = {0}x{1}, {2} blocks
|
schematic.info = {0}x{1}, {2} bloques
|
||||||
stat.wave = Oleadas Derrotadas:[accent] {0}
|
stat.wave = Oleadas Derrotadas:[accent] {0}
|
||||||
stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0}
|
stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0}
|
||||||
stat.built = Estructuras Construidas:[accent] {0}
|
stat.built = Estructuras Construidas:[accent] {0}
|
||||||
@@ -80,26 +80,26 @@ uploadingcontent = Uploading Content
|
|||||||
uploadingpreviewfile = Uploading Preview File
|
uploadingpreviewfile = Uploading Preview File
|
||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Hecho
|
done = Hecho
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Tu dispositivo no soporta esta función.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
mods.guide = Modding Guide
|
mods.guide = Guia de Modding
|
||||||
mods.report = Report Bug
|
mods.report = Reportar Bug
|
||||||
mods.openfolder = Open Mod Folder
|
mods.openfolder = Abrir carpeta de mods
|
||||||
mod.enabled = [lightgray]Enabled
|
mod.enabled = [lightgray]Enabled
|
||||||
mod.disabled = [scarlet]Disabled
|
mod.disabled = [scarlet]Disabled
|
||||||
mod.disable = Disable
|
mod.disable = Disable
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Fallo al elminar el mod. Quizás el archivo esta en uso.
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
||||||
mod.enable = Enable
|
mod.enable = Enable
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import GitHub Mod
|
mod.import.github = Importar Mod de Github
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = Este mod va a ser eliminado.\n¿Quieres continuar?
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
||||||
@@ -120,7 +120,7 @@ server.closing = [accent]Cerrando servidor...
|
|||||||
server.kicked.kick = ¡Has sido expulsado del servidor!
|
server.kicked.kick = ¡Has sido expulsado del servidor!
|
||||||
server.kicked.whitelist = You are not whitelisted here.
|
server.kicked.whitelist = You are not whitelisted here.
|
||||||
server.kicked.serverClose = El servidor ha cerrado.
|
server.kicked.serverClose = El servidor ha cerrado.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Te han expulsado por voto. Adiós!
|
||||||
server.kicked.clientOutdated = ¡Cliente desactualizado! ¡Actualiza tu juego!
|
server.kicked.clientOutdated = ¡Cliente desactualizado! ¡Actualiza tu juego!
|
||||||
server.kicked.serverOutdated = ¡Servidor desactualizado! ¡Pídele al anfitrión que lo actualice!
|
server.kicked.serverOutdated = ¡Servidor desactualizado! ¡Pídele al anfitrión que lo actualice!
|
||||||
server.kicked.banned = Has sido baneado del servidor.
|
server.kicked.banned = Has sido baneado del servidor.
|
||||||
@@ -132,7 +132,7 @@ server.kicked.nameEmpty = Tu nombre debe por lo menos contener un carácter o n
|
|||||||
server.kicked.idInUse = ¡Ya estás en el servidor! Conectarse con dos cuentas no está permitido.
|
server.kicked.idInUse = ¡Ya estás en el servidor! Conectarse con dos cuentas no está permitido.
|
||||||
server.kicked.customClient = Este servidor no soporta versiones personalizadas. Descarga una versión oficial.
|
server.kicked.customClient = Este servidor no soporta versiones personalizadas. Descarga una versión oficial.
|
||||||
server.kicked.gameover = ¡Fin del juego!
|
server.kicked.gameover = ¡Fin del juego!
|
||||||
server.versions = Your version:[accent] {0}[]\nVersión del servidor:[accent] {1}[]
|
server.versions = Tu versión:[accent] {0}[]\nVersión del servidor:[accent] {1}[]
|
||||||
host.info = El botón [accent]host[] hostea un servidor en el puerto [scarlet]6567[]. \nCualquier persona en la misma [LIGHT_GRAY]wifi o red local[] debería poder ver tu servidor en la lista de servidores.\n\nSi quieres que cualquier persona se pueda conectar de cualquier lugar por IP, la [accent]asignación de puertos[] es requerida.\n\n[LIGHT_GRAY]Nota: Si alguien experimenta problemas conectándose a tu partida LAN, asegúrate de permitir a Mindustry acceso a tu red local mediante la configuración de tu firewall.
|
host.info = El botón [accent]host[] hostea un servidor en el puerto [scarlet]6567[]. \nCualquier persona en la misma [LIGHT_GRAY]wifi o red local[] debería poder ver tu servidor en la lista de servidores.\n\nSi quieres que cualquier persona se pueda conectar de cualquier lugar por IP, la [accent]asignación de puertos[] es requerida.\n\n[LIGHT_GRAY]Nota: Si alguien experimenta problemas conectándose a tu partida LAN, asegúrate de permitir a Mindustry acceso a tu red local mediante la configuración de tu firewall.
|
||||||
join.info = Aquí, puedes escribir la [accent]IP de un server[] para conectarte, o descubrir servidores de [accent]red local[] para conectarte.\nLAN y WAN es soportado para jugar en multijugador.\n\n[LIGHT_GRAY]Nota: No hay una lista automática global de servidores; si quieres conectarte por IP, tendrás que preguntarle al anfitrión por la IP.
|
join.info = Aquí, puedes escribir la [accent]IP de un server[] para conectarte, o descubrir servidores de [accent]red local[] para conectarte.\nLAN y WAN es soportado para jugar en multijugador.\n\n[LIGHT_GRAY]Nota: No hay una lista automática global de servidores; si quieres conectarte por IP, tendrás que preguntarle al anfitrión por la IP.
|
||||||
hostserver = Hostear Servidor
|
hostserver = Hostear Servidor
|
||||||
@@ -235,7 +235,7 @@ classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic
|
|||||||
quit.confirm = ¿Estás seguro de querer salir de la partida?
|
quit.confirm = ¿Estás seguro de querer salir de la partida?
|
||||||
quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo in[accent] Ajustes->Juego->Volver a hacer tutorial.[]
|
quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo in[accent] Ajustes->Juego->Volver a hacer tutorial.[]
|
||||||
loading = [accent]Cargando...
|
loading = [accent]Cargando...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Recargando mods...
|
||||||
saving = [accent]Guardando...
|
saving = [accent]Guardando...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] to clear plan
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] to select+copy
|
||||||
@@ -401,7 +401,7 @@ load = Cargar
|
|||||||
save = Guardar
|
save = Guardar
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Ping: {0} ms
|
ping = Ping: {0} ms
|
||||||
language.restart = Por favor reinicie el juego para que los cambios del lenguaje surjan efecto.
|
language.restart = Por favor reinicia el juego para que los cambios de idioma tengan efecto.
|
||||||
settings = Ajustes
|
settings = Ajustes
|
||||||
tutorial = Tutorial
|
tutorial = Tutorial
|
||||||
tutorial.retake = Volver a hacer tutorial
|
tutorial.retake = Volver a hacer tutorial
|
||||||
@@ -411,9 +411,9 @@ abandon = Abandonar
|
|||||||
abandon.text = Esta zona y sus recursos se perderán ante el enemigo.
|
abandon.text = Esta zona y sus recursos se perderán ante el enemigo.
|
||||||
locked = Bloqueado
|
locked = Bloqueado
|
||||||
complete = [LIGHT_GRAY]Completado:
|
complete = [LIGHT_GRAY]Completado:
|
||||||
requirement.wave = Reach Wave {0} in {1}
|
requirement.wave = Alcanzar la oleada{0} en {1}
|
||||||
requirement.core = Destroy Enemy Core in {0}
|
requirement.core = Destruir el núcleo enemigo en {0}
|
||||||
requirement.unlock = Unlock {0}
|
requirement.unlock = Desbloquear {0}
|
||||||
resume = Continuar Zona:\n[LIGHT_GRAY]{0}
|
resume = Continuar Zona:\n[LIGHT_GRAY]{0}
|
||||||
bestwave = [LIGHT_GRAY]Récord: {0}
|
bestwave = [LIGHT_GRAY]Récord: {0}
|
||||||
launch = Lanzar
|
launch = Lanzar
|
||||||
@@ -446,7 +446,7 @@ error.alreadyconnected = Ya estás conectado.
|
|||||||
error.mapnotfound = ¡Archivo de mapa no encontrado!
|
error.mapnotfound = ¡Archivo de mapa no encontrado!
|
||||||
error.io = Error I/O de conexión.
|
error.io = Error I/O de conexión.
|
||||||
error.any = Error de red desconocido.
|
error.any = Error de red desconocido.
|
||||||
error.bloom = Failed to initialize bloom.\nYour device may not support it.
|
error.bloom = Error al cargar el bloom.\nPuede que tu dispositivo no soporte esta característica.
|
||||||
zone.groundZero.name = Terreno Cero
|
zone.groundZero.name = Terreno Cero
|
||||||
zone.desertWastes.name = Ruinas del Desierto
|
zone.desertWastes.name = Ruinas del Desierto
|
||||||
zone.craters.name = Los Cráteres
|
zone.craters.name = Los Cráteres
|
||||||
@@ -461,7 +461,7 @@ zone.saltFlats.name = Salinas
|
|||||||
zone.impact0078.name = Impacto 0078
|
zone.impact0078.name = Impacto 0078
|
||||||
zone.crags.name = Riscos
|
zone.crags.name = Riscos
|
||||||
zone.fungalPass.name = Fungal Pass
|
zone.fungalPass.name = Fungal Pass
|
||||||
zone.groundZero.description = La zona óptima para empear una vez más. Riesgo bajo de los enemigos. Pocos recursos.\nConsigue tanto plomo y cobre como puedas.\nSigue avanzando.
|
zone.groundZero.description = La zona óptima para empezar una vez más. Riesgo bajo de los enemigos. Pocos recursos.\nConsigue tanto plomo y cobre como puedas.\nSigue avanzando.
|
||||||
zone.frozenForest.description = Incluso aquí, cerca de las montañas, las esporas se han expandido. Las temperaturas gélidas no pueden contenerlas para siempre.\n\nEmpieza a investigar sobre energía. Cnstruye generadores de combustión. Aprende a usar reparadores.
|
zone.frozenForest.description = Incluso aquí, cerca de las montañas, las esporas se han expandido. Las temperaturas gélidas no pueden contenerlas para siempre.\n\nEmpieza a investigar sobre energía. Cnstruye generadores de combustión. Aprende a usar reparadores.
|
||||||
zone.desertWastes.description = Estas ruinas son vastas, impredecibles y entrecruzadas con sectores de estructuras abandonadas.\nHay carbñon presente en la región. Quémalo para energía, o sintetiza grafito.\n\n[lightgray]La zona de aparición no puede ser garantizada.
|
zone.desertWastes.description = Estas ruinas son vastas, impredecibles y entrecruzadas con sectores de estructuras abandonadas.\nHay carbñon presente en la región. Quémalo para energía, o sintetiza grafito.\n\n[lightgray]La zona de aparición no puede ser garantizada.
|
||||||
zone.saltFlats.description = A las afueras del desierto se encuentran las Salinas. Pocos recursos pueden ser encontrados en esta ubicación.\n\nEl enemigo ha erigido un complejo de almacén de recursos aquí. Erradica su núcleo. No dejes nada.
|
zone.saltFlats.description = A las afueras del desierto se encuentran las Salinas. Pocos recursos pueden ser encontrados en esta ubicación.\n\nEl enemigo ha erigido un complejo de almacén de recursos aquí. Erradica su núcleo. No dejes nada.
|
||||||
@@ -488,7 +488,7 @@ settings.clear.confirm = ¿Estas seguro de querer limpiar estos datos?\n¡Esta a
|
|||||||
settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y atajos de teclado.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente.
|
settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y atajos de teclado.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente.
|
||||||
paused = [accent] < Pausado >
|
paused = [accent] < Pausado >
|
||||||
clear = Clear
|
clear = Clear
|
||||||
banned = [scarlet]Banned
|
banned = [scarlet]Baneado
|
||||||
yes = Sí
|
yes = Sí
|
||||||
no = No
|
no = No
|
||||||
info.title = [accent]Información
|
info.title = [accent]Información
|
||||||
@@ -550,8 +550,8 @@ bullet.incendiary = [stat]incendiaria
|
|||||||
bullet.homing = [stat]homing
|
bullet.homing = [stat]homing
|
||||||
bullet.shock = [stat]shock
|
bullet.shock = [stat]shock
|
||||||
bullet.frag = [stat]frag
|
bullet.frag = [stat]frag
|
||||||
bullet.knockback = [stat]{0}[lightgray] knockback
|
bullet.knockback = [stat]{0}[lightgray]Empuje
|
||||||
bullet.freezing = [stat]freezing
|
bullet.freezing = [stat]Congelación
|
||||||
bullet.tarred = [stat]tarred
|
bullet.tarred = [stat]tarred
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munición
|
bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munición
|
||||||
bullet.reload = [stat]{0}[lightgray]x recarga
|
bullet.reload = [stat]{0}[lightgray]x recarga
|
||||||
@@ -576,7 +576,7 @@ category.shooting = Disparo
|
|||||||
category.optional = Mejoras Opcionales
|
category.optional = Mejoras Opcionales
|
||||||
setting.landscape.name = Lock Landscape
|
setting.landscape.name = Lock Landscape
|
||||||
setting.shadows.name = Sombras
|
setting.shadows.name = Sombras
|
||||||
setting.blockreplace.name = Automatic Block Suggestions
|
setting.blockreplace.name = Sugerir bloques al construir
|
||||||
setting.linear.name = Linear Filtering
|
setting.linear.name = Linear Filtering
|
||||||
setting.hints.name = Hints
|
setting.hints.name = Hints
|
||||||
setting.animatedwater.name = Agua Animada
|
setting.animatedwater.name = Agua Animada
|
||||||
@@ -589,7 +589,7 @@ setting.touchscreen.name = Touchscreen Controls
|
|||||||
setting.fpscap.name = Máx FPS
|
setting.fpscap.name = Máx FPS
|
||||||
setting.fpscap.none = Nada
|
setting.fpscap.none = Nada
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = Escala de IU[lightgray] (necesita reiniciar)[]
|
setting.uiscale.name = Escala de UI[lightgray] (necesita reiniciar)[]
|
||||||
setting.swapdiagonal.name = Siempre Colocar Diagonalmente
|
setting.swapdiagonal.name = Siempre Colocar Diagonalmente
|
||||||
setting.difficulty.training = entrenamiento
|
setting.difficulty.training = entrenamiento
|
||||||
setting.difficulty.easy = fácil
|
setting.difficulty.easy = fácil
|
||||||
@@ -599,7 +599,7 @@ setting.difficulty.insane = locura
|
|||||||
setting.difficulty.name = Dificultad:
|
setting.difficulty.name = Dificultad:
|
||||||
setting.screenshake.name = Movimiento de la Pantalla
|
setting.screenshake.name = Movimiento de la Pantalla
|
||||||
setting.effects.name = Mostrar Efectos
|
setting.effects.name = Mostrar Efectos
|
||||||
setting.destroyedblocks.name = Display Destroyed Blocks
|
setting.destroyedblocks.name = Mostrar bloques destruidos
|
||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
||||||
setting.sensitivity.name = Sensibilidad del Control
|
setting.sensitivity.name = Sensibilidad del Control
|
||||||
setting.saveinterval.name = Intervalo del Autoguardado
|
setting.saveinterval.name = Intervalo del Autoguardado
|
||||||
@@ -607,7 +607,7 @@ setting.seconds = {0} Segundos
|
|||||||
setting.fullscreen.name = Pantalla Completa
|
setting.fullscreen.name = Pantalla Completa
|
||||||
setting.borderlesswindow.name = Ventana sin Bordes[LIGHT_GRAY] (podría requerir un reinicio)
|
setting.borderlesswindow.name = Ventana sin Bordes[LIGHT_GRAY] (podría requerir un reinicio)
|
||||||
setting.fps.name = Mostrar FPS
|
setting.fps.name = Mostrar FPS
|
||||||
setting.vsync.name = SincV
|
setting.vsync.name = Vsync (Limita los fps a los Hz de tu pantalla)
|
||||||
setting.pixelate.name = Pixelar [LIGHT_GRAY](podría reducir el rendimiento)
|
setting.pixelate.name = Pixelar [LIGHT_GRAY](podría reducir el rendimiento)
|
||||||
setting.minimap.name = Mostrar Minimapa
|
setting.minimap.name = Mostrar Minimapa
|
||||||
setting.position.name = Show Player Position
|
setting.position.name = Show Player Position
|
||||||
@@ -617,25 +617,25 @@ setting.mutemusic.name = Silenciar Musica
|
|||||||
setting.sfxvol.name = Volumen de los efectos de sonido
|
setting.sfxvol.name = Volumen de los efectos de sonido
|
||||||
setting.mutesound.name = Silenciar Sonido
|
setting.mutesound.name = Silenciar Sonido
|
||||||
setting.crashreport.name = Enviar informes de fallos anónimos
|
setting.crashreport.name = Enviar informes de fallos anónimos
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = Crear puntos de guardado automáticamente
|
||||||
setting.publichost.name = Public Game Visibility
|
setting.publichost.name = Public Game Visibility
|
||||||
setting.chatopacity.name = Opacidad del Chat
|
setting.chatopacity.name = Opacidad del Chat
|
||||||
setting.lasersopacity.name = Power Laser Opacity
|
setting.lasersopacity.name = Opacidad de los rayos láser
|
||||||
setting.playerchat.name = Display In-Game Chat
|
setting.playerchat.name = Mostrar el chat in-game
|
||||||
public.confirm = Do you want to make your game public?\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
public.confirm = Do you want to make your game public?\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Recuerda que en las versiones beta del juego no puedes crear partidas públicas.
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
|
uiscale.reset = La escala de la interfaz ha sido modificada con éxito.\nPulsa "OK" para conservar esta escala.\n[scarlet]Deshaciendo los cambios y saliendo al menu en [accent] {0}[]segundos...
|
||||||
uiscale.cancel = Cancelar & Salir
|
uiscale.cancel = Cancelar & Salir
|
||||||
setting.bloom.name = Bloom
|
setting.bloom.name = Bloom
|
||||||
keybind.title = Cambiar accesos de teclado
|
keybind.title = Cambiar accesos de teclado
|
||||||
keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported.
|
keybinds.mobile = [scarlet]Los accesos del teclado aquí mostrados no estan disponible en Móviles o Tablets. Solo aceptan movimiento básico.
|
||||||
category.general.name = General
|
category.general.name = General
|
||||||
category.view.name = Visión
|
category.view.name = Visión
|
||||||
category.multiplayer.name = Multijugador
|
category.multiplayer.name = Multijugador
|
||||||
command.attack = Atacar
|
command.attack = Atacar
|
||||||
command.rally = Rally
|
command.rally = Rally
|
||||||
command.retreat = Retirarse
|
command.retreat = Retirarse
|
||||||
keybind.clear_building.name = Clear Building
|
keybind.clear_building.name = Limpiar construcción
|
||||||
keybind.press = Presiona una tecla...
|
keybind.press = Presiona una tecla...
|
||||||
keybind.press.axis = Pulsa un eje o botón...
|
keybind.press.axis = Pulsa un eje o botón...
|
||||||
keybind.screenshot.name = Captura de pantalla de Mapa
|
keybind.screenshot.name = Captura de pantalla de Mapa
|
||||||
@@ -643,8 +643,8 @@ keybind.move_x.name = Mover x
|
|||||||
keybind.move_y.name = Mover y
|
keybind.move_y.name = Mover y
|
||||||
keybind.schematic_select.name = Select Region
|
keybind.schematic_select.name = Select Region
|
||||||
keybind.schematic_menu.name = Schematic Menu
|
keybind.schematic_menu.name = Schematic Menu
|
||||||
keybind.schematic_flip_x.name = Flip Schematic X
|
keybind.schematic_flip_x.name = Girar schematic X
|
||||||
keybind.schematic_flip_y.name = Flip Schematic Y
|
keybind.schematic_flip_y.name = Girar schematic Y
|
||||||
keybind.fullscreen.name = Intercambiar con Pantalla Completa
|
keybind.fullscreen.name = Intercambiar con Pantalla Completa
|
||||||
keybind.select.name = Seleccionar
|
keybind.select.name = Seleccionar
|
||||||
keybind.diagonal_placement.name = Construcción Diagonal
|
keybind.diagonal_placement.name = Construcción Diagonal
|
||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Destruir Bloque
|
keybind.break_block.name = Destruir Bloque
|
||||||
keybind.deselect.name = Deseleccionar
|
keybind.deselect.name = Deseleccionar
|
||||||
keybind.shoot.name = Disparar
|
keybind.shoot.name = Disparar
|
||||||
keybind.zoom_hold.name = Mantener Zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menú
|
keybind.menu.name = Menú
|
||||||
keybind.pause.name = Pausa
|
keybind.pause.name = Pausa
|
||||||
@@ -859,7 +858,7 @@ block.lancer.name = Lancero
|
|||||||
block.conveyor.name = Cinta Transportadora
|
block.conveyor.name = Cinta Transportadora
|
||||||
block.titanium-conveyor.name = Cinta Transportadora de Titanio
|
block.titanium-conveyor.name = Cinta Transportadora de Titanio
|
||||||
block.armored-conveyor.name = Armored Conveyor
|
block.armored-conveyor.name = Armored Conveyor
|
||||||
block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors.
|
block.armored-conveyor.description = Mueve items a la misma veolcidad que una cinta de titanio, pero tiene mas armadura. No acepta entradas por los lados a menos que sean lineas transportadoras.
|
||||||
block.junction.name = Cruce
|
block.junction.name = Cruce
|
||||||
block.router.name = Enrutador
|
block.router.name = Enrutador
|
||||||
block.distributor.name = Distribuidor
|
block.distributor.name = Distribuidor
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Vali blokk
|
|||||||
keybind.break_block.name = Hävita blokk
|
keybind.break_block.name = Hävita blokk
|
||||||
keybind.deselect.name = Tühista valik
|
keybind.deselect.name = Tühista valik
|
||||||
keybind.shoot.name = Tulista
|
keybind.shoot.name = Tulista
|
||||||
keybind.zoom_hold.name = Suumimise režiim
|
|
||||||
keybind.zoom.name = Muuda suumi
|
keybind.zoom.name = Muuda suumi
|
||||||
keybind.menu.name = Menüü
|
keybind.menu.name = Menüü
|
||||||
keybind.pause.name = Paus
|
keybind.pause.name = Paus
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Jaso blokea
|
|||||||
keybind.break_block.name = Apurtu blokea
|
keybind.break_block.name = Apurtu blokea
|
||||||
keybind.deselect.name = Deshautatu
|
keybind.deselect.name = Deshautatu
|
||||||
keybind.shoot.name = Tirokatu
|
keybind.shoot.name = Tirokatu
|
||||||
keybind.zoom_hold.name = Zoom mantenduz
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menua
|
keybind.menu.name = Menua
|
||||||
keybind.pause.name = Pausatu
|
keybind.pause.name = Pausatu
|
||||||
|
|||||||
@@ -547,7 +547,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ mod.enabled = [lightgray]Activé
|
|||||||
mod.disabled = [scarlet]Désactivé
|
mod.disabled = [scarlet]Désactivé
|
||||||
mod.disable = Désactiver
|
mod.disable = Désactiver
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Unable to delete mod. File may be in use.
|
||||||
|
mod.requiresversion = [scarlet]Version du jeu requise : [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]Dépendances manquantes: {0}
|
mod.missingdependencies = [scarlet]Dépendances manquantes: {0}
|
||||||
mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes:[accent] {1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé.
|
mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes:[accent] {1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé.
|
||||||
mod.enable = Activer
|
mod.enable = Activer
|
||||||
@@ -496,6 +497,7 @@ settings.language = Langue
|
|||||||
settings.data = Données du Jeu
|
settings.data = Données du Jeu
|
||||||
settings.reset = Valeurs par Défaut
|
settings.reset = Valeurs par Défaut
|
||||||
settings.rebind = Réattribuer
|
settings.rebind = Réattribuer
|
||||||
|
settings.resetKey = Réinitialiser
|
||||||
settings.controls = Contrôles
|
settings.controls = Contrôles
|
||||||
settings.game = Jeu
|
settings.game = Jeu
|
||||||
settings.sound = Son
|
settings.sound = Son
|
||||||
@@ -589,6 +591,8 @@ unit.persecond = /sec
|
|||||||
unit.timesspeed = x vitesse
|
unit.timesspeed = x vitesse
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = objets
|
unit.items = objets
|
||||||
|
unit.thousands = k
|
||||||
|
unit.millions = mil
|
||||||
category.general = Général
|
category.general = Général
|
||||||
category.power = Énergie
|
category.power = Énergie
|
||||||
category.liquids = Liquides
|
category.liquids = Liquides
|
||||||
@@ -698,7 +702,6 @@ keybind.pick.name = Choisir un bloc
|
|||||||
keybind.break_block.name = Supprimer un bloc
|
keybind.break_block.name = Supprimer un bloc
|
||||||
keybind.deselect.name = Désélectionner
|
keybind.deselect.name = Désélectionner
|
||||||
keybind.shoot.name = Tirer
|
keybind.shoot.name = Tirer
|
||||||
keybind.zoom_hold.name = Maintenir pour zoomer
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
@@ -1084,7 +1087,7 @@ mech.alpha-mech.description = Le mécha standard. Est basé sur une unité Poign
|
|||||||
mech.delta-mech.description = Un mécha rapide, avec une armure légère, conçu pour les attaques de frappe. 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.delta-mech.description = Un mécha rapide, avec une armure légère, conçu pour les attaques de frappe. 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.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 lui permet de bloquer 90% des dégâts.
|
mech.omega-mech.description = Un mécha cuirassé et large fait pour les assauts frontaux. Sa compétence 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.dart-ship.description = Le vaisseau standard. Il est raisonnablement rapide, léger et possède une vitesse de minage rapide. Néanmoins, ses capacités d'attaque sont faibles.
|
||||||
mech.javelin-ship.description = Un vaisseau de frappe éclair qui, bien que lent au départ, peut accélérer 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.description = Un vaisseau de frappe éclair qui, bien que lent au départ, peut accélérer 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, conçu pour la construction et pour la destruction des fortifications ennemies. Assez bien blindé.
|
mech.trident-ship.description = Un bombardier lourd, conçu pour la construction et pour la destruction des fortifications ennemies. Assez bien blindé.
|
||||||
mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Équipé avec un fusil automatique à munitions incendiaires. Est très maniable.
|
mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Équipé avec un fusil automatique à munitions incendiaires. Est très maniable.
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Choisir un bloc
|
|||||||
keybind.break_block.name = Supprimer un bloc
|
keybind.break_block.name = Supprimer un bloc
|
||||||
keybind.deselect.name = Déselectionner
|
keybind.deselect.name = Déselectionner
|
||||||
keybind.shoot.name = Tirer
|
keybind.shoot.name = Tirer
|
||||||
keybind.zoom_hold.name = Tenir le zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Memilih Blok
|
|||||||
keybind.break_block.name = Menghancurkan Blok
|
keybind.break_block.name = Menghancurkan Blok
|
||||||
keybind.deselect.name = Batal Memilih
|
keybind.deselect.name = Batal Memilih
|
||||||
keybind.shoot.name = Menembak
|
keybind.shoot.name = Menembak
|
||||||
keybind.zoom_hold.name = Tahan Mode Zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Jeda
|
keybind.pause.name = Jeda
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = ブロックの選択
|
|||||||
keybind.break_block.name = ブロックの破壊
|
keybind.break_block.name = ブロックの破壊
|
||||||
keybind.deselect.name = 選択解除
|
keybind.deselect.name = 選択解除
|
||||||
keybind.shoot.name = ショット
|
keybind.shoot.name = ショット
|
||||||
keybind.zoom_hold.name = 長押しズーム
|
|
||||||
keybind.zoom.name = ズーム
|
keybind.zoom.name = ズーム
|
||||||
keybind.menu.name = メニュー
|
keybind.menu.name = メニュー
|
||||||
keybind.pause.name = ポーズ
|
keybind.pause.name = ポーズ
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ load.image = 사진
|
|||||||
load.content = 컨텐츠
|
load.content = 컨텐츠
|
||||||
load.system = 시스템
|
load.system = 시스템
|
||||||
load.mod = 모드
|
load.mod = 모드
|
||||||
|
load.scripts = 스크립트
|
||||||
|
|
||||||
schematic = 설계도
|
schematic = 설계도
|
||||||
schematic.add = 설계도 저장하기
|
schematic.add = 설계도 저장하기
|
||||||
@@ -95,10 +96,11 @@ mods.none = [LIGHT_GRAY]추가한 모드가 없습니다!
|
|||||||
mods.guide = 모드 가이드
|
mods.guide = 모드 가이드
|
||||||
mods.report = 버그 신고
|
mods.report = 버그 신고
|
||||||
mods.openfolder = 모드 폴더 열기
|
mods.openfolder = 모드 폴더 열기
|
||||||
mod.enabled = [firebrick]활성화
|
mod.enabled = [lightgray]활성화
|
||||||
mod.disabled = [lightgray]비활성화
|
mod.disabled = [scarlet]비활성화
|
||||||
mod.disable = 비활성화
|
mod.disable = 비활성화
|
||||||
mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다.
|
mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다.
|
||||||
|
mod.requiresversion = [scarlet]게임의 버전이 낮아 모드를 활성화할 수 없습니다!\n[scarlet]요구되는 게임 버전 : [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]의존되는 모드: {0}
|
mod.missingdependencies = [scarlet]의존되는 모드: {0}
|
||||||
mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 :[accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다.
|
mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 :[accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다.
|
||||||
mod.enable = 활성화
|
mod.enable = 활성화
|
||||||
@@ -106,11 +108,13 @@ mod.requiresrestart = 모드 변경사항을 적용하기 위해 게임을 종
|
|||||||
mod.reloadrequired = [scarlet]새로고침 예정됨
|
mod.reloadrequired = [scarlet]새로고침 예정됨
|
||||||
mod.import = 모드 추가
|
mod.import = 모드 추가
|
||||||
mod.import.github = 깃허브 모드 추가
|
mod.import.github = 깃허브 모드 추가
|
||||||
|
mod.item.remove = 이것은 모드[accent] '{0}'[]의 자원입니다. 이 자원을 삭제하려면, 이 모드를 제거해야합니다.
|
||||||
mod.remove.confirm = 이 모드를 삭제하시겠습니까?
|
mod.remove.confirm = 이 모드를 삭제하시겠습니까?
|
||||||
mod.author = [LIGHT_GRAY]제작자 : [] {0}
|
mod.author = [LIGHT_GRAY]제작자 : [] {0}
|
||||||
mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 이 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0}
|
mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 이 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0}
|
||||||
mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요.
|
mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요.
|
||||||
mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오.
|
mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오.
|
||||||
|
mod.scripts.unsupported = 당신의 기기는 모드스크립트를 지원하지 않습니다. 모드의 일부 기능이 작동하지 않을 수 있습니다.
|
||||||
|
|
||||||
about.button = 정보
|
about.button = 정보
|
||||||
name = 이름 :
|
name = 이름 :
|
||||||
@@ -496,6 +500,7 @@ settings.language = 언어
|
|||||||
settings.data = 게임 데이터
|
settings.data = 게임 데이터
|
||||||
settings.reset = 설정 초기화
|
settings.reset = 설정 초기화
|
||||||
settings.rebind = 키 재설정
|
settings.rebind = 키 재설정
|
||||||
|
settings.resetKey = 키 설정
|
||||||
settings.controls = 조작
|
settings.controls = 조작
|
||||||
settings.game = 게임
|
settings.game = 게임
|
||||||
settings.sound = 소리
|
settings.sound = 소리
|
||||||
@@ -589,6 +594,8 @@ unit.persecond = /초
|
|||||||
unit.timesspeed = x 배
|
unit.timesspeed = x 배
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = 자원
|
unit.items = 자원
|
||||||
|
unit.thousands = 천
|
||||||
|
unit.millions = 백만
|
||||||
category.general = 일반
|
category.general = 일반
|
||||||
category.power = 전력
|
category.power = 전력
|
||||||
category.liquids = 액체
|
category.liquids = 액체
|
||||||
@@ -623,7 +630,7 @@ setting.difficulty.name = 난이도 :
|
|||||||
setting.screenshake.name = 화면 흔들기
|
setting.screenshake.name = 화면 흔들기
|
||||||
setting.effects.name = 화면 효과
|
setting.effects.name = 화면 효과
|
||||||
setting.destroyedblocks.name = 부서진 블럭 표시
|
setting.destroyedblocks.name = 부서진 블럭 표시
|
||||||
setting.conveyorpathfinding.name = 컨베이어 설치 보조 기능
|
setting.conveyorpathfinding.name = 교차기 자동 설치
|
||||||
setting.sensitivity.name = 컨트롤러 감도
|
setting.sensitivity.name = 컨트롤러 감도
|
||||||
setting.saveinterval.name = 저장 간격
|
setting.saveinterval.name = 저장 간격
|
||||||
setting.seconds = {0} 초
|
setting.seconds = {0} 초
|
||||||
@@ -644,7 +651,7 @@ setting.sfxvol.name = 효과음 크기
|
|||||||
setting.mutesound.name = 소리 끄기
|
setting.mutesound.name = 소리 끄기
|
||||||
setting.crashreport.name = 익명으로 오류 보고서 자동 전송
|
setting.crashreport.name = 익명으로 오류 보고서 자동 전송
|
||||||
setting.savecreate.name = 자동 저장 활성화
|
setting.savecreate.name = 자동 저장 활성화
|
||||||
setting.publichost.name = 공개 서버 보이기
|
setting.publichost.name = 스팀 공개 서버 보이기
|
||||||
setting.chatopacity.name = 채팅 투명도
|
setting.chatopacity.name = 채팅 투명도
|
||||||
setting.lasersopacity.name = 전력 레이저 밝기
|
setting.lasersopacity.name = 전력 레이저 밝기
|
||||||
setting.playerchat.name = 채팅 말풍선 표시
|
setting.playerchat.name = 채팅 말풍선 표시
|
||||||
@@ -676,10 +683,10 @@ keybind.schematic_flip_x.name = 설계도 X축 뒤집기
|
|||||||
keybind.schematic_flip_y.name = 설계도 Y축 뒤집기
|
keybind.schematic_flip_y.name = 설계도 Y축 뒤집기
|
||||||
keybind.category_prev.name = 이전 목록
|
keybind.category_prev.name = 이전 목록
|
||||||
keybind.category_next.name = 다음 목록
|
keybind.category_next.name = 다음 목록
|
||||||
keybind.block_select_left.name = 블럭 Select Left
|
keybind.block_select_left.name = 블럭 왼쪽 선택
|
||||||
keybind.block_select_right.name = 블럭 Select Right
|
keybind.block_select_right.name = 블럭 오른쪽 선택
|
||||||
keybind.block_select_up.name = 블럭 Select Up
|
keybind.block_select_up.name = 블럭 위쪽 선택
|
||||||
keybind.block_select_down.name = 블럭 Select Down
|
keybind.block_select_down.name = 블럭 아래쪽 선택
|
||||||
keybind.block_select_01.name = 카테고리/블럭 선택 1
|
keybind.block_select_01.name = 카테고리/블럭 선택 1
|
||||||
keybind.block_select_02.name = 카테고리/블럭 선택 2
|
keybind.block_select_02.name = 카테고리/블럭 선택 2
|
||||||
keybind.block_select_03.name = 카테고리/블럭 선택 3
|
keybind.block_select_03.name = 카테고리/블럭 선택 3
|
||||||
@@ -697,7 +704,6 @@ keybind.pick.name = 블록 선택
|
|||||||
keybind.break_block.name = 블록 파괴
|
keybind.break_block.name = 블록 파괴
|
||||||
keybind.deselect.name = 선택해제
|
keybind.deselect.name = 선택해제
|
||||||
keybind.shoot.name = 사격
|
keybind.shoot.name = 사격
|
||||||
keybind.zoom_hold.name = 길게 확대
|
|
||||||
keybind.zoom.name = 확대
|
keybind.zoom.name = 확대
|
||||||
keybind.menu.name = 메뉴
|
keybind.menu.name = 메뉴
|
||||||
keybind.pause.name = 일시중지
|
keybind.pause.name = 일시중지
|
||||||
@@ -804,6 +810,7 @@ mech.trident-ship.name = 트라이던트
|
|||||||
mech.trident-ship.weapon = 폭탄 저장고
|
mech.trident-ship.weapon = 폭탄 저장고
|
||||||
mech.glaive-ship.name = 글레이브
|
mech.glaive-ship.name = 글레이브
|
||||||
mech.glaive-ship.weapon = 중무장 인화성 소총
|
mech.glaive-ship.weapon = 중무장 인화성 소총
|
||||||
|
item.corestorable = [lightgray]코어 잔여 저장공간: {0}
|
||||||
item.explosiveness = [LIGHT_GRAY]폭발성 : {0}
|
item.explosiveness = [LIGHT_GRAY]폭발성 : {0}
|
||||||
item.flammability = [LIGHT_GRAY]인화성 : {0}
|
item.flammability = [LIGHT_GRAY]인화성 : {0}
|
||||||
item.radioactivity = [LIGHT_GRAY]방사능 : {0}
|
item.radioactivity = [LIGHT_GRAY]방사능 : {0}
|
||||||
@@ -986,7 +993,7 @@ block.fortress-factory.name = 포트리스 공장
|
|||||||
block.revenant-factory.name = 망령 전함 공장
|
block.revenant-factory.name = 망령 전함 공장
|
||||||
block.repair-point.name = 수리 지점
|
block.repair-point.name = 수리 지점
|
||||||
block.pulse-conduit.name = 펄스 파이프
|
block.pulse-conduit.name = 펄스 파이프
|
||||||
block.plated-conduit.name = 도금된
|
block.plated-conduit.name = 도금된 파이프
|
||||||
block.phase-conduit.name = 메타 파이프
|
block.phase-conduit.name = 메타 파이프
|
||||||
block.liquid-router.name = 액체 분배기
|
block.liquid-router.name = 액체 분배기
|
||||||
block.liquid-tank.name = 물탱크
|
block.liquid-tank.name = 물탱크
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ link.dev-builds.description = Onstabiele versies
|
|||||||
link.trello.description = Officiële Trello voor geplande toevoegingen.
|
link.trello.description = Officiële Trello voor geplande toevoegingen.
|
||||||
link.itch.io.description = Itch.io pagina met de PC downloads en online versie
|
link.itch.io.description = Itch.io pagina met de PC downloads en online versie
|
||||||
link.google-play.description = Mindustry op Google Play
|
link.google-play.description = Mindustry op Google Play
|
||||||
link.wiki.description = Officiël Mindustry wiki
|
link.f-droid.description = F-Droid catalogus
|
||||||
|
link.wiki.description = Officiële Mindustry-wiki
|
||||||
linkfail = Openen van link mislukt!\nDe link is gekopiëerd naar je klembord.
|
linkfail = Openen van link mislukt!\nDe link is gekopiëerd naar je klembord.
|
||||||
screenshot = Locatie screenshot: {0}
|
screenshot = Locatie screenshot: {0}
|
||||||
screenshot.invalid = Kaart te groot, mogelijks te weinig geheugen voor een screenshot te kunnen maken.
|
screenshot.invalid = Kaart te groot, mogelijks te weinig geheugen voor een screenshot te kunnen maken.
|
||||||
@@ -20,9 +21,9 @@ highscore = [accent]Nieuw record!
|
|||||||
copied = Gekopieerd.
|
copied = Gekopieerd.
|
||||||
load.sound = Geluiden
|
load.sound = Geluiden
|
||||||
load.map = Kaarten
|
load.map = Kaarten
|
||||||
load.image = Images
|
load.image = Afbeeldingen
|
||||||
load.content = Content
|
load.content = Inhoud
|
||||||
load.system = System
|
load.system = Systeem
|
||||||
load.mod = Mods
|
load.mod = Mods
|
||||||
schematic = Blauwdruk
|
schematic = Blauwdruk
|
||||||
schematic.add = Blauwdruk Opslaan...
|
schematic.add = Blauwdruk Opslaan...
|
||||||
@@ -67,22 +68,22 @@ minimap = Kaartje
|
|||||||
position = Positie
|
position = Positie
|
||||||
close = Sluit
|
close = Sluit
|
||||||
website = Website
|
website = Website
|
||||||
quit = Verlaat
|
quit = Verlaten
|
||||||
save.quit = Save & Quit
|
save.quit = Opslaan & Verlaten
|
||||||
maps = Kaarten
|
maps = Kaarten
|
||||||
maps.browse = Browse Maps
|
maps.browse = Bekijk Kaarten
|
||||||
continue = Ga verder
|
continue = Ga verder
|
||||||
maps.none = [LIGHT_GRAY]Geen kaarten gevonden!
|
maps.none = [LIGHT_GRAY]Geen kaarten gevonden!
|
||||||
invalid = Invalid
|
invalid = Ongeldig
|
||||||
preparingconfig = Config Voorbereiden
|
preparingconfig = Configuratie Voorbereiden
|
||||||
preparingcontent = Content Voorbereiden
|
preparingcontent = Inhoud Voorbereiden
|
||||||
uploadingcontent = Content Uploaden
|
uploadingcontent = Inhoud Uploaden
|
||||||
uploadingpreviewfile = Voorbeeldbestand Uploaden
|
uploadingpreviewfile = Voorbeeldbestand Uploaden
|
||||||
committingchanges = Veranderingen Toepassen
|
committingchanges = Veranderingen Toepassen
|
||||||
done = Klaar
|
done = Klaar
|
||||||
feature.unsupported = Uw apparaat ondersteunt deze functie niet.
|
feature.unsupported = Uw apparaat ondersteunt deze functie niet.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
mods.alphainfo = Mods zijn nog in alfa en [scarlet] kunnen zeer onstabiel zijn[].\nMeld problemen die je ondervindt op de Mindustry Github of Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alfa)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]Geen mods gevonden!
|
mods.none = [LIGHT_GRAY]Geen mods gevonden!
|
||||||
mods.guide = Handleiding tot Modding
|
mods.guide = Handleiding tot Modding
|
||||||
@@ -93,8 +94,8 @@ mod.disabled = [scarlet]Uitgeschakeld
|
|||||||
mod.disable = Schakel uit
|
mod.disable = Schakel uit
|
||||||
mod.delete.error = Kan mod niet verwijderen. Bestand is mogelijk in gebruik.
|
mod.delete.error = Kan mod niet verwijderen. Bestand is mogelijk in gebruik.
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]De volgende vereisten ontbreken voor mod '{0}':[accent] {1}\n[lightgray]Deze mods moeten eerst gedownload worden.\nDeze mod wordt automatisch uitgeschakeld.
|
||||||
mod.enable = Enable
|
mod.enable = Schakel in
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Herladen Vereist
|
mod.reloadrequired = [scarlet]Herladen Vereist
|
||||||
mod.import = Importeer Mod
|
mod.import = Importeer Mod
|
||||||
@@ -102,9 +103,9 @@ mod.import.github = Importeer GitHub Mod
|
|||||||
mod.remove.confirm = Deze mod zal worden verwijderd.
|
mod.remove.confirm = Deze mod zal worden verwijderd.
|
||||||
mod.author = [LIGHT_GRAY]Auteur:[] {0}
|
mod.author = [LIGHT_GRAY]Auteur:[] {0}
|
||||||
mod.missing = Dit opslagbestand bevat mods die zijn geupdate of recentelijk zijn verwijderd. Uw opslagbestand kan beschadigd geraken. Bent u zeker dat u wil verdergaan?\n[lightgray]Mods:\n{0}
|
mod.missing = Dit opslagbestand bevat mods die zijn geupdate of recentelijk zijn verwijderd. Uw opslagbestand kan beschadigd geraken. Bent u zeker dat u wil verdergaan?\n[lightgray]Mods:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Voordat je de mod publiceert moet je een afbeelding voor de voorvertoning toevoegen.\nPlaats een afbeelding met de naam[accent] preview.png[] in de modfolder.
|
||||||
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
mod.folder.missing = Mods kunnen enkel gepubliceerd worden in foldervorm.\nOm een mod in foldervorm te zetten exporteer je het modbestand uit de zipfile en verwijder je de oude zipfile. Herlaad vervolgens je mods of herstart het spel.
|
||||||
about.button = Extra info
|
about.button = Over
|
||||||
name = Naam:
|
name = Naam:
|
||||||
noname = Kies eerst[accent] een naam[].
|
noname = Kies eerst[accent] een naam[].
|
||||||
filename = Bestandsnaam:
|
filename = Bestandsnaam:
|
||||||
@@ -118,42 +119,42 @@ players = {0} spelers online
|
|||||||
players.single = {0} speler online
|
players.single = {0} speler online
|
||||||
server.closing = [accent]Server wordt gesloten...
|
server.closing = [accent]Server wordt gesloten...
|
||||||
server.kicked.kick = Je bent uit de server gegooid!
|
server.kicked.kick = Je bent uit de server gegooid!
|
||||||
server.kicked.whitelist = You are not whitelisted here.
|
server.kicked.whitelist = Je bent niet toegestaan om met deze server te verbinden. (Whitelist)
|
||||||
server.kicked.serverClose = Server gesloten.
|
server.kicked.serverClose = Server gesloten.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Je bent uit de server gegooid na een stemming!
|
||||||
server.kicked.clientOutdated = Verouderde versie! Update Mindustry!
|
server.kicked.clientOutdated = Verouderde versie! Update Mindustry!
|
||||||
server.kicked.serverOutdated = Verouderde server! Vraag de eigenaar van de server om de server te updaten!
|
server.kicked.serverOutdated = Verouderde server! Vraag de eigenaar van de server om de server te updaten!
|
||||||
server.kicked.banned = Je bent verbannen van deze server.
|
server.kicked.banned = Je bent verbannen van deze server.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = Deze server is niet compatibel met jouw Mindustry build type.
|
||||||
server.kicked.playerLimit = This server is full. Wait for an empty slot.
|
server.kicked.playerLimit = De server is vol, wacht voor een plekje.
|
||||||
server.kicked.recentKick = Je bent daarnet van de server gegooid.\nWacht even voor je weer verbindt
|
server.kicked.recentKick = Je bent zonet van de server gegooid.\nWacht even voor je weer verbindt
|
||||||
server.kicked.nameInUse = Er is al iemand met dezelfde naam op de server.
|
server.kicked.nameInUse = Er is al iemand met dezelfde naam op de server.
|
||||||
server.kicked.nameEmpty = Je gekozen naam is ongeldig.
|
server.kicked.nameEmpty = Je gekozen naam is ongeldig.
|
||||||
server.kicked.idInUse = Je bent al verbonden met de server! Verbinden met 2 clients tegelijk is verboden.
|
server.kicked.idInUse = Je bent al verbonden met de server! Verbinden met 2 clients tegelijk is verboden.
|
||||||
server.kicked.customClient = Deze server ondersteunt geen aangepaste versies (mods). Download een officiële versie.
|
server.kicked.customClient = Deze server ondersteunt geen aangepaste versies (mods). Download een officiële versie.
|
||||||
server.kicked.gameover = Game over!
|
server.kicked.gameover = Game over!
|
||||||
server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
|
server.versions = Jouw versie:[accent] {0}[]\nServerversie:[accent] {1}[]
|
||||||
host.info = Ook De [accent]host[] knop hosts een server op poort [scarlet]6567[]. \nIedereen die verbonden is met dezelfde [LIGHT_GRAY]wifi of lokaal netwerk[] zou je server moeten zien in zijn server lijst.\n\nAls je wil dat personen kunnen verbinden met je server van ergens anders via IP. Dan is [accent]port forwarding[] is nodig.\n\n[LIGHT_GRAY]Nota: Als iemand problemen heeft met het verbinden tot je LAN spel, zorg dan dat mindustry toestemming heeft tot je lokale netwerk in de Firewall instellingen.
|
host.info = Ook de [accent]host[] knop hosts een server op poort [scarlet]6567[]. \nIedereen die verbonden is met dezelfde [LIGHT_GRAY]wifi of lokaal netwerk[] zou je server moeten zien in zijn server lijst.\n\nAls je wil dat personen kunnen verbinden met je server van ergens anders via IP. Dan is [accent]port forwarding[] is nodig.\n\n[LIGHT_GRAY]Nota: Als iemand problemen heeft met het verbinden tot je LAN spel, zorg dan dat mindustry toestemming heeft tot je lokale netwerk in de Firewall instellingen.
|
||||||
join.info = Hier kan je een [accent]server IP[] invullen waarmee je wil verbinden. Je kan hier ook verbinden met servers op je [accent]lokale netwerk[]. LAN en WAN multiplayer wordt ondersteund.\n\n[LIGHT_GRAY]Belangrijk: er is geen automatische globale server lijst; als je met iemand wil verbinden via een IP adres moet je zijn/haar IP adres vragen.
|
join.info = Hier kan je een [accent]server IP[] invullen waarmee je wil verbinden. Je kan hier ook verbinden met servers op je [accent]lokale netwerk[]. LAN en WAN multiplayer wordt ondersteund.\n\n[LIGHT_GRAY]Belangrijk: er is geen automatische globale server lijst; als je met iemand wil verbinden via een IP adres moet je zijn/haar IP adres vragen.
|
||||||
hostserver = Host Game
|
hostserver = Open server voor LAN
|
||||||
invitefriends = Invite Friends
|
invitefriends = Nodig vrienden uit.
|
||||||
hostserver.mobile = Host\nGame
|
hostserver.mobile = Open\nServer
|
||||||
host = Host
|
host = Open server
|
||||||
hosting = [accent]De server wordt geopend...
|
hosting = [accent]De server wordt geopend...
|
||||||
hosts.refresh = Herlaad
|
hosts.refresh = Herlaad
|
||||||
hosts.discovering = LAN games worden gezocht
|
hosts.discovering = LAN games worden gezocht
|
||||||
hosts.discovering.any = Discovering games
|
hosts.discovering.any = Games worden gezocht
|
||||||
server.refreshing = De server wordt herladen
|
server.refreshing = De server wordt herladen
|
||||||
hosts.none = [lightgray]Geen games op je lokale netwerk gevonden.
|
hosts.none = [lightgray]Geen games op je lokale netwerk gevonden.
|
||||||
host.invalid = [scarlet]Kan niet verbinden met de host (server).
|
host.invalid = [scarlet]Kan niet verbinden met de host (server).
|
||||||
trace = Zoeken speler
|
trace = Spelersinformatie
|
||||||
trace.playername = Naam speler: [accent]{0}
|
trace.playername = Naam: [accent]{0}
|
||||||
trace.ip = IP: [accent]{0}
|
trace.ip = IP: [accent]{0}
|
||||||
trace.id = Uniek ID: [accent]{0}
|
trace.id = Unieke ID: [accent]{0}
|
||||||
trace.mobile = Mobile Client: [accent]{0}
|
trace.mobile = Mobiele Client: [accent]{0}
|
||||||
trace.modclient = Aangepaste Client: [accent]{0}
|
trace.modclient = Aangepaste Client: [accent]{0}
|
||||||
invalidid = Ongeldig client ID! Verstuur een bug report!
|
invalidid = Ongeldige client ID! Verstuur een bug report!
|
||||||
server.bans = Verbannen
|
server.bans = Verbanningen
|
||||||
server.bans.none = Geen verbannen spelers gevonden!
|
server.bans.none = Geen verbannen spelers gevonden!
|
||||||
server.admins = Administrators
|
server.admins = Administrators
|
||||||
server.admins.none = Geen Administrators gevonden!
|
server.admins.none = Geen Administrators gevonden!
|
||||||
@@ -164,29 +165,29 @@ server.outdated = [crimson]Verouderde Server![]
|
|||||||
server.outdated.client = [crimson]Verouderde Client![]
|
server.outdated.client = [crimson]Verouderde Client![]
|
||||||
server.version = [lightgray]Versie: {0} {1}
|
server.version = [lightgray]Versie: {0} {1}
|
||||||
server.custombuild = [yellow]Aangepaste versie
|
server.custombuild = [yellow]Aangepaste versie
|
||||||
confirmban = Ben je zeker dat je deze speler wil verbannen?
|
confirmban = Ben je zeker dat je deze speler wilt verbannen?
|
||||||
confirmkick = Ben je zeker dat je deze speler van de server wil gooien?
|
confirmkick = Ben je zeker dat je deze speler van de server wilt gooien?
|
||||||
confirmvotekick = Are you sure you want to vote-kick this player?
|
confirmvotekick = Ben je zeker dat je een stemming wilt starten om deze speler uit de server to gooien?
|
||||||
confirmunban = Ben je zeker dat je de verbanning ongedaan wil maken?
|
confirmunban = Ben je zeker dat je de verbanning wilt opheffen?
|
||||||
confirmadmin = Ben je zeker dat je deze speler administrator wil maken?
|
confirmadmin = Ben je zeker dat je deze speler administrator wilt maken?
|
||||||
confirmunadmin = Ben je zeker dat je de Administrator status van deze speler ongedaan wilt maken?
|
confirmunadmin = Ben je zeker dat je de administratorstatus van deze speler wilt intrekken?
|
||||||
joingame.title = Verbinden met server
|
joingame.title = Verbinden met server
|
||||||
joingame.ip = IP adres:
|
joingame.ip = IP adres:
|
||||||
disconnect = Verbinding verbroken.
|
disconnect = Verbinding verbroken.
|
||||||
disconnect.error = Connection error.
|
disconnect.error = Verbindingsfout.
|
||||||
disconnect.closed = Connection closed.
|
disconnect.closed = Verbinding afgesloten.
|
||||||
disconnect.timeout = Timed out.
|
disconnect.timeout = Het duurde te lang voordat de server antwoordde.
|
||||||
disconnect.data = Laden map data mislukt!
|
disconnect.data = Laden van mapdata mislukt!
|
||||||
cantconnect = Unable to join game ([accent]{0}[]).
|
cantconnect = Kon niet tot het spel toetreden. ([accent]{0}[]).
|
||||||
connecting = [accent]Verbinden...
|
connecting = [accent]Verbinden...
|
||||||
connecting.data = [accent]Laden map data...
|
connecting.data = [accent]Laden map data...
|
||||||
server.port = Poort:
|
server.port = Poort:
|
||||||
server.addressinuse = Dit adres wordt al gebruikt!
|
server.addressinuse = Dit adres wordt al gebruikt!
|
||||||
server.invalidport = Ongeldige poort!
|
server.invalidport = Ongeldige poort!
|
||||||
server.error = [crimson]Error hosting server: [accent]{0}
|
server.error = [crimson]Fout bij het openen van de server: [accent]{0}
|
||||||
save.new = Nieuwe save
|
save.new = Nieuwe save
|
||||||
save.overwrite = Ben je zeker dat je deze save\nwil overschrijven?
|
save.overwrite = Ben je zeker dat je deze save\nwilt overschrijven?
|
||||||
overwrite = Overschrijf
|
overwrite = Vervang
|
||||||
save.none = Geen saves gevonden!
|
save.none = Geen saves gevonden!
|
||||||
saveload = [accent]Opslaan...
|
saveload = [accent]Opslaan...
|
||||||
savefail = Opslaan mislukt!
|
savefail = Opslaan mislukt!
|
||||||
@@ -197,27 +198,27 @@ save.import.invalid = [accent]Deze save is ongeldig!
|
|||||||
save.import.fail = [crimson]Save importeren mislukt: [accent]{0}
|
save.import.fail = [crimson]Save importeren mislukt: [accent]{0}
|
||||||
save.export.fail = [crimson]Save exporteren mislukt: [accent]{0}
|
save.export.fail = [crimson]Save exporteren mislukt: [accent]{0}
|
||||||
save.import = Importeer Save
|
save.import = Importeer Save
|
||||||
save.newslot = Save naam:
|
save.newslot = Naam van de save:
|
||||||
save.rename = Naam wijzigen
|
save.rename = Naam wijzigen
|
||||||
save.rename.text = Nieuwe naam:
|
save.rename.text = Nieuwe naam:
|
||||||
selectslot = Selecteer een save.
|
selectslot = Selecteer een save.
|
||||||
slot = [accent]Slot {0}
|
slot = [accent]Plaats {0}
|
||||||
editmessage = Edit Message
|
editmessage = Edit Message
|
||||||
save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug.
|
save.corrupted = [accent]Het savebestand is corrupt of ongeldig.\nAls je zonet je spel geupdatet hebt is dit waarschijnlijk een verandering in de savestructuur en dus[scarlet] geen[] bug.
|
||||||
empty = <empty>
|
empty = <leeg>
|
||||||
on = Aan
|
on = Aan
|
||||||
off = Uit
|
off = Uit
|
||||||
save.autosave = Autosave: {0}
|
save.autosave = Autosave: {0}
|
||||||
save.map = Map: {0}
|
save.map = Map: {0}
|
||||||
save.wave = Golf {0}
|
save.wave = Golf {0}
|
||||||
save.mode = Gamemode: {0}
|
save.mode = Spelmodus: {0}
|
||||||
save.date = Last Saved: {0}
|
save.date = Laatste save: {0}
|
||||||
save.playtime = Playtime: {0}
|
save.playtime = Playtime: {0}
|
||||||
warning = Waarschuwing.
|
warning = Waarschuwing.
|
||||||
confirm = Bevestig
|
confirm = Bevestig
|
||||||
delete = Verwijder
|
delete = Verwijder
|
||||||
view.workshop = View In Workshop
|
view.workshop = Bekijk In Workshop
|
||||||
workshop.listing = Edit Workshop Listing
|
workshop.listing = Bewerk Workshop-Publicatie
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Open
|
open = Open
|
||||||
customize = Pas aan
|
customize = Pas aan
|
||||||
@@ -225,40 +226,40 @@ cancel = Annuleer
|
|||||||
openlink = Open Link
|
openlink = Open Link
|
||||||
copylink = Kopiëer Link
|
copylink = Kopiëer Link
|
||||||
back = Terug
|
back = Terug
|
||||||
data.export = Export Data
|
data.export = Exporteer Data
|
||||||
data.import = Import Data
|
data.import = Importeer Data
|
||||||
data.exported = Data exported.
|
data.exported = Data geëxporteerd.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Dit is geen geldige speldata.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
||||||
classic.export = Export Classic Data
|
classic.export = Exporteer Classic-Data
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] heeft een grote update gehad.\nClassic (v3.5 build 40) save of map data is teruggevonden. Wil je deze data exporteren naar je de home-folder van je telefoon voor gebruik in de Mindustry-Classic app?
|
||||||
quit.confirm = Weet je zeker dat je wilt stoppen?
|
quit.confirm = Weet je zeker dat je wilt stoppen?
|
||||||
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.[]
|
quit.confirm.tutorial = Ben je zeker dat je nu weet wat je doet?\nDe tutorial kan opnieuw gestart worden via[accent] Instellingen->Spel->Herneem Tutorial.[]
|
||||||
loading = [accent]Aan het laden...
|
loading = [accent]Aan het laden...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Mods Herladen...
|
||||||
saving = [accent]Aan het opslaan...
|
saving = [accent]Aan het opslaan...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] om het plan te annuleren
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] om te selecter+kopieren
|
||||||
pausebuilding = [accent][[{0}][] to pause building
|
pausebuilding = [accent][[{0}][] om het bouwen te pauseren
|
||||||
resumebuilding = [scarlet][[{0}][] to resume building
|
resumebuilding = [scarlet][[{0}][] om verder te gaan met bouwen
|
||||||
wave = [accent]Golf {0}
|
wave = [accent]Golf {0}
|
||||||
wave.waiting = [LIGHT_GRAY]Golf in {0}
|
wave.waiting = [LIGHT_GRAY]Golf in {0}
|
||||||
wave.waveInProgress = [LIGHT_GRAY]Wave in progress
|
wave.waveInProgress = [LIGHT_GRAY]Golf bezig
|
||||||
waiting = [LIGHT_GRAY]Waiting...
|
waiting = [LIGHT_GRAY]Wachten...
|
||||||
waiting.players = Aan het wachten voor spelers...
|
waiting.players = Aan het wachten op spelers...
|
||||||
wave.enemies = [LIGHT_GRAY]{0} Vijanden Over
|
wave.enemies = [LIGHT_GRAY]{0} Vijanden Over
|
||||||
wave.enemy = [LIGHT_GRAY]{0} Vijand Over
|
wave.enemy = [LIGHT_GRAY]{0} Vijand Over
|
||||||
loadimage = Laad Afbeelding
|
loadimage = Laad Afbeelding
|
||||||
saveimage = Sla Afbeelding Op
|
saveimage = Sla Afbeelding Op
|
||||||
unknown = Onbekend
|
unknown = Onbekend
|
||||||
custom = Custom
|
custom = Aangepast
|
||||||
builtin = Built-In
|
builtin = Ingebouwd
|
||||||
map.delete.confirm = Weet je zeker dat je deze kaart wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden!
|
map.delete.confirm = Weet je zeker dat je deze kaart wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden!
|
||||||
map.random = [accent]Random Map
|
map.random = [accent]Willekeurige 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 = Deze map heeft geen cores voor spelers om te spawnen! Voeg een[ROYAL] blauwe[] core toe in de mapbewerker.
|
||||||
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.pvp = This map does not have any enemy cores for player to spawn into! Voeg een[SCARLET] niet-blauwe[] core toe in de mapbewerker.
|
||||||
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.nospawn.attack = This map does not have any enemy cores for player to attack! Voeg een[SCARLET] rode[] core toe in de mapbewerker.
|
||||||
map.invalid = Error loading map: corrupted or invalid map file.
|
map.invalid = Fout tijdens het laden van de map: Corrupt of ongeldig mapbestand.
|
||||||
workshop.update = Update Item
|
workshop.update = Update Item
|
||||||
workshop.error = Error fetching workshop details: {0}
|
workshop.error = Error fetching workshop details: {0}
|
||||||
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up!
|
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up!
|
||||||
@@ -652,7 +653,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -699,7 +699,6 @@ keybind.pick.name = Wybierz Blok
|
|||||||
keybind.break_block.name = Zniszcz Blok
|
keybind.break_block.name = Zniszcz Blok
|
||||||
keybind.deselect.name = Odznacz
|
keybind.deselect.name = Odznacz
|
||||||
keybind.shoot.name = Strzelanie
|
keybind.shoot.name = Strzelanie
|
||||||
keybind.zoom_hold.name = Inicjator przybliżania
|
|
||||||
keybind.zoom.name = Przybliżanie
|
keybind.zoom.name = Przybliżanie
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pauza
|
keybind.pause.name = Pauza
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pegar bloco
|
|||||||
keybind.break_block.name = Quebrar bloco
|
keybind.break_block.name = Quebrar bloco
|
||||||
keybind.deselect.name = Deselecionar
|
keybind.deselect.name = Deselecionar
|
||||||
keybind.shoot.name = Atirar
|
keybind.shoot.name = Atirar
|
||||||
keybind.zoom_hold.name = segurar_zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pausar
|
keybind.pause.name = Pausar
|
||||||
|
|||||||
@@ -700,7 +700,6 @@ keybind.pick.name = Pegar bloco
|
|||||||
keybind.break_block.name = Quebrar bloco
|
keybind.break_block.name = Quebrar bloco
|
||||||
keybind.deselect.name = Deselecionar
|
keybind.deselect.name = Deselecionar
|
||||||
keybind.shoot.name = Atirar
|
keybind.shoot.name = Atirar
|
||||||
keybind.zoom_hold.name = segurar Zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pausar
|
keybind.pause.name = Pausar
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ link.itch.io.description = Страница itch.io с загрузками иг
|
|||||||
link.google-play.description = Скачать для Android с Google Play
|
link.google-play.description = Скачать для Android с Google Play
|
||||||
link.f-droid.description = Скачать для Android с F-Droid
|
link.f-droid.description = Скачать для Android с F-Droid
|
||||||
link.wiki.description = Официальная вики
|
link.wiki.description = Официальная вики
|
||||||
|
link.feathub.description = Предложить новые функции
|
||||||
linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена.
|
linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена.
|
||||||
screenshot = Cкриншот сохранён в {0}
|
screenshot = Cкриншот сохранён в {0}
|
||||||
screenshot.invalid = Карта слишком большая, возможно, не хватает памяти для скриншота.
|
screenshot.invalid = Карта слишком большая, возможно, не хватает памяти для скриншота.
|
||||||
@@ -26,6 +27,7 @@ load.image = Изображения
|
|||||||
load.content = Содержимое
|
load.content = Содержимое
|
||||||
load.system = Система
|
load.system = Система
|
||||||
load.mod = Модификации
|
load.mod = Модификации
|
||||||
|
load.scripts = Скрипты
|
||||||
|
|
||||||
schematic = Схема
|
schematic = Схема
|
||||||
schematic.add = Сохранить схему...
|
schematic.add = Сохранить схему...
|
||||||
@@ -92,25 +94,31 @@ mods.alphainfo = Имейте в виду, что модификации нах
|
|||||||
mods.alpha = [accent](Альфа)
|
mods.alpha = [accent](Альфа)
|
||||||
mods = Модификации
|
mods = Модификации
|
||||||
mods.none = [LIGHT_GRAY]Модификации не найдены!
|
mods.none = [LIGHT_GRAY]Модификации не найдены!
|
||||||
mods.guide = Руководство по созданию модификаций
|
mods.guide = Руководство по модам
|
||||||
mods.report = Доложить об ошибке
|
mods.report = Доложить об ошибке
|
||||||
mods.openfolder = Открыть папку с модификациями
|
mods.openfolder = Открыть папку с модификациями
|
||||||
mod.enabled = [lightgray]Включён
|
mod.enabled = [lightgray]Включён
|
||||||
mod.disabled = [scarlet]Выключен
|
mod.disabled = [scarlet]Выключен
|
||||||
mod.disable = Выкл.
|
mod.disable = Выкл.
|
||||||
mod.delete.error = Невозможно удалить модификацию. Возможно, файл используется.
|
mod.delete.error = Невозможно удалить модификацию. Возможно, файл используется.
|
||||||
|
mod.requiresversion = [scarlet]Требуемая минимальная версия игры: [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]Не найдены родительские модификации: {0}
|
mod.missingdependencies = [scarlet]Не найдены родительские модификации: {0}
|
||||||
|
mod.erroredcontent = [scarlet]Ошибки содержимого
|
||||||
|
mod.errors = Ошибки были вызваны загружаемым содержимым.
|
||||||
|
mod.noerrorplay = [scarlet]У Вас есть модификации с ошибками.[] Выключите проблемные модификации или исправьте ошибки перед игрой.
|
||||||
mod.nowdisabled = [scarlet]Модификации '{0}' требуются родительские модификации:[accent] {1}\n[lightgray]Сначала нужно загрузить их.\nЭта модификация будет автоматически отключена.
|
mod.nowdisabled = [scarlet]Модификации '{0}' требуются родительские модификации:[accent] {1}\n[lightgray]Сначала нужно загрузить их.\nЭта модификация будет автоматически отключена.
|
||||||
mod.enable = Вкл.
|
mod.enable = Вкл.
|
||||||
mod.requiresrestart = Теперь игра закроется, чтобы применить изменения в модификациях.
|
mod.requiresrestart = Теперь игра закроется, чтобы применить изменения в модификациях.
|
||||||
mod.reloadrequired = [scarlet]Необходим перезапуск
|
mod.reloadrequired = [scarlet]Необходим перезапуск
|
||||||
mod.import = Импортировать модификацию
|
mod.import = Импортировать модификацию
|
||||||
mod.import.github = Импортировать модификацию с GitHub
|
mod.import.github = Импортировать мод с GitHub
|
||||||
mod.remove.confirm = Этот мод будет удалён.
|
mod.item.remove = Этот предмет является частью модификации [accent]«{0}»[]. Чтобы удалить его, удалите саму модификацию.
|
||||||
|
mod.remove.confirm = Эта модификация будет удалена.
|
||||||
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
||||||
mod.missing = Это сохранение содержит модификацию, которое Вы недавно обновили или оно больше не установлено. Может случиться повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
|
mod.missing = Это сохранение содержит модификацию, которое Вы недавно обновили или оно больше не установлено. Может случиться повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
|
||||||
mod.preview.missing = Перед публикацией этой модификации в Мастерской, Вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова.
|
mod.preview.missing = Перед публикацией этой модификации в Мастерской, Вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова.
|
||||||
mod.folder.missing = Модификации могут быть опубликованы в Мастерской только в виде папки.\nЧтобы конвертировать любой мод в папку, просто извлеките его из архива и удалите старый архив .zip, затем перезапустите игру или перезагрузите модификации.
|
mod.folder.missing = Модификации могут быть опубликованы в Мастерской только в виде папки.\nЧтобы конвертировать любой мод в папку, просто извлеките его из архива и удалите старый архив .zip, затем перезапустите игру или перезагрузите модификации.
|
||||||
|
mod.scripts.unsupported = Ваше устройство не поддерживает скрипты в модификациях. Некоторые модификации могут работать некорректно.
|
||||||
|
|
||||||
about.button = Об игре
|
about.button = Об игре
|
||||||
name = Имя:
|
name = Имя:
|
||||||
@@ -311,7 +319,7 @@ waves.invalid = Неверные волны в буфере обмена.
|
|||||||
waves.copied = Волны скопированы.
|
waves.copied = Волны скопированы.
|
||||||
waves.none = Враги не были определены.\nОбратите внимание, что пустые волны будут автоматически заменены обычной волной.
|
waves.none = Враги не были определены.\nОбратите внимание, что пустые волны будут автоматически заменены обычной волной.
|
||||||
editor.default = [lightgray]<По умолчанию>
|
editor.default = [lightgray]<По умолчанию>
|
||||||
details = Подробная информация…
|
details = Подробности…
|
||||||
edit = Редактировать…
|
edit = Редактировать…
|
||||||
editor.name = Название:
|
editor.name = Название:
|
||||||
editor.spawn = Создать боевую единицу
|
editor.spawn = Создать боевую единицу
|
||||||
@@ -496,6 +504,7 @@ settings.language = Язык
|
|||||||
settings.data = Игровые данные
|
settings.data = Игровые данные
|
||||||
settings.reset = Сбросить по умолчанию
|
settings.reset = Сбросить по умолчанию
|
||||||
settings.rebind = Сменить
|
settings.rebind = Сменить
|
||||||
|
settings.resetKey = Сбросить
|
||||||
settings.controls = Управление
|
settings.controls = Управление
|
||||||
settings.game = Игра
|
settings.game = Игра
|
||||||
settings.sound = Звук
|
settings.sound = Звук
|
||||||
@@ -642,7 +651,7 @@ setting.position.name = Отображать координаты игрока
|
|||||||
setting.musicvol.name = Громкость музыки
|
setting.musicvol.name = Громкость музыки
|
||||||
setting.ambientvol.name = Громкость окружения
|
setting.ambientvol.name = Громкость окружения
|
||||||
setting.mutemusic.name = Заглушить музыку
|
setting.mutemusic.name = Заглушить музыку
|
||||||
setting.sfxvol.name = Громкость звуковых эффектов
|
setting.sfxvol.name = Громкость эффектов
|
||||||
setting.mutesound.name = Заглушить звук
|
setting.mutesound.name = Заглушить звук
|
||||||
setting.crashreport.name = Отправлять анонимные отчёты о вылетах
|
setting.crashreport.name = Отправлять анонимные отчёты о вылетах
|
||||||
setting.savecreate.name = Автоматическое создание сохранений
|
setting.savecreate.name = Автоматическое создание сохранений
|
||||||
@@ -668,9 +677,15 @@ keybind.clear_building.name = Очистить план строительств
|
|||||||
keybind.press = Нажмите клавишу…
|
keybind.press = Нажмите клавишу…
|
||||||
keybind.press.axis = Нажмите оси или клавишу…
|
keybind.press.axis = Нажмите оси или клавишу…
|
||||||
keybind.screenshot.name = Скриншот карты
|
keybind.screenshot.name = Скриншот карты
|
||||||
keybind.toggle_power_lines.name = Отображение линий энергоснабжения
|
keybind.toggle_power_lines.name = Отображение лазеров энергоснабжения
|
||||||
keybind.move_x.name = Движение по оси X
|
keybind.move_x.name = Движение по оси X
|
||||||
keybind.move_y.name = Движение по оси Y
|
keybind.move_y.name = Движение по оси Y
|
||||||
|
keybind.mouse_move.name = Следовать за курсором
|
||||||
|
keybind.dash.name = Полёт/Ускорение
|
||||||
|
keybind.schematic_select.name = Выбрать область
|
||||||
|
keybind.schematic_menu.name = Меню схем
|
||||||
|
keybind.schematic_flip_x.name = Отразить схему по оси X
|
||||||
|
keybind.schematic_flip_y.name = Отразить схему по оси Y
|
||||||
keybind.category_prev.name = Предыдущая категория
|
keybind.category_prev.name = Предыдущая категория
|
||||||
keybind.category_next.name = Следующая категория
|
keybind.category_next.name = Следующая категория
|
||||||
keybind.block_select_left.name = Выбор левого блока
|
keybind.block_select_left.name = Выбор левого блока
|
||||||
@@ -687,11 +702,6 @@ keybind.block_select_07.name = Категория/Выбор блока 7
|
|||||||
keybind.block_select_08.name = Категория/Выбор блока 8
|
keybind.block_select_08.name = Категория/Выбор блока 8
|
||||||
keybind.block_select_09.name = Категория/Выбор блока 9
|
keybind.block_select_09.name = Категория/Выбор блока 9
|
||||||
keybind.block_select_10.name = Категория/Выбор блока 10
|
keybind.block_select_10.name = Категория/Выбор блока 10
|
||||||
keybind.mouse_move.name = Следовать за курсором
|
|
||||||
keybind.schematic_select.name = Выбрать область
|
|
||||||
keybind.schematic_menu.name = Меню схем
|
|
||||||
keybind.schematic_flip_x.name = Отразить схему по оси X
|
|
||||||
keybind.schematic_flip_y.name = Отразить схему по оси Y
|
|
||||||
keybind.fullscreen.name = Переключение полноэкранного режима
|
keybind.fullscreen.name = Переключение полноэкранного режима
|
||||||
keybind.select.name = Выбор/Выстрел
|
keybind.select.name = Выбор/Выстрел
|
||||||
keybind.diagonal_placement.name = Диагональное размещение
|
keybind.diagonal_placement.name = Диагональное размещение
|
||||||
@@ -699,13 +709,11 @@ keybind.pick.name = Выбрать блок
|
|||||||
keybind.break_block.name = Разрушить блок
|
keybind.break_block.name = Разрушить блок
|
||||||
keybind.deselect.name = Снять выделение
|
keybind.deselect.name = Снять выделение
|
||||||
keybind.shoot.name = Выстрел
|
keybind.shoot.name = Выстрел
|
||||||
keybind.zoom_hold.name = Управление масштабом
|
keybind.zoom.name = Масштабирование
|
||||||
keybind.zoom.name = Приблизить/Отдалить
|
|
||||||
keybind.menu.name = Меню
|
keybind.menu.name = Меню
|
||||||
keybind.pause.name = Пауза
|
keybind.pause.name = Пауза
|
||||||
keybind.pause_building.name = Приостановить/возобновить строительство
|
keybind.pause_building.name = Приостановить/возобновить строительство
|
||||||
keybind.minimap.name = Мини-карта
|
keybind.minimap.name = Мини-карта
|
||||||
keybind.dash.name = Полёт/Ускорение
|
|
||||||
keybind.chat.name = Чат
|
keybind.chat.name = Чат
|
||||||
keybind.player_list.name = Список игроков
|
keybind.player_list.name = Список игроков
|
||||||
keybind.console.name = Консоль
|
keybind.console.name = Консоль
|
||||||
@@ -726,7 +734,7 @@ mode.editor.name = Редактор
|
|||||||
mode.pvp.name = PvP
|
mode.pvp.name = PvP
|
||||||
mode.pvp.description = Боритесь против других игроков.\n[gray]Для игры требуется как минимум 2 ядра разного цвета на карте.
|
mode.pvp.description = Боритесь против других игроков.\n[gray]Для игры требуется как минимум 2 ядра разного цвета на карте.
|
||||||
mode.attack.name = Атака
|
mode.attack.name = Атака
|
||||||
mode.attack.description = Уничтожьте вражескую базу. Никаких волн.\n[gray]Для игры требуется красное ядро на карте.
|
mode.attack.description = Уничтожьте вражескую базу.\n[gray]Для игры требуется красное ядро на карте.
|
||||||
mode.custom = Пользовательские правила
|
mode.custom = Пользовательские правила
|
||||||
|
|
||||||
rules.infiniteresources = Бесконечные ресурсы (Игрок)
|
rules.infiniteresources = Бесконечные ресурсы (Игрок)
|
||||||
@@ -806,6 +814,7 @@ mech.trident-ship.name = Трезубец
|
|||||||
mech.trident-ship.weapon = Бомбовый отсек
|
mech.trident-ship.weapon = Бомбовый отсек
|
||||||
mech.glaive-ship.name = Копьё
|
mech.glaive-ship.name = Копьё
|
||||||
mech.glaive-ship.weapon = Огненный бластер
|
mech.glaive-ship.weapon = Огненный бластер
|
||||||
|
item.corestorable = [lightgray]Можно хранить в ядре: {0}
|
||||||
item.explosiveness = [lightgray]Взрывоопасность: {0}%
|
item.explosiveness = [lightgray]Взрывоопасность: {0}%
|
||||||
item.flammability = [lightgray]Воспламеняемость: {0}%
|
item.flammability = [lightgray]Воспламеняемость: {0}%
|
||||||
item.radioactivity = [lightgray]Радиоактивность: {0}%
|
item.radioactivity = [lightgray]Радиоактивность: {0}%
|
||||||
@@ -849,6 +858,8 @@ block.kiln.name = Печь
|
|||||||
block.graphite-press.name = Графитный пресс
|
block.graphite-press.name = Графитный пресс
|
||||||
block.multi-press.name = Мульти-пресс
|
block.multi-press.name = Мульти-пресс
|
||||||
block.constructing = {0} [lightgray](Строится)
|
block.constructing = {0} [lightgray](Строится)
|
||||||
|
block.signal = [lightgray]Сигнал: {0}
|
||||||
|
block.editsignal = Сигнал
|
||||||
block.spawn.name = Точка появления врагов
|
block.spawn.name = Точка появления врагов
|
||||||
block.core-shard.name = Ядро: «Осколок»
|
block.core-shard.name = Ядро: «Осколок»
|
||||||
block.core-foundation.name = Ядро: «Штаб»
|
block.core-foundation.name = Ядро: «Штаб»
|
||||||
@@ -1040,7 +1051,7 @@ unit.eradicator.name = Искоренитель
|
|||||||
unit.lich.name = Лич
|
unit.lich.name = Лич
|
||||||
unit.reaper.name = Жнец
|
unit.reaper.name = Жнец
|
||||||
tutorial.next = [lightgray]<Нажмите для продолжения>
|
tutorial.next = [lightgray]<Нажмите для продолжения>
|
||||||
tutorial.intro = Вы начали[scarlet] обучение по Mindustry.[]\nИспользуйте кнопки [accent][[WASD][] для передвижения.\n[accent]Зажмите [[Ctrl] и покрутите колесо мыши[]для приближения или отдаления камеры.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди
|
tutorial.intro = Вы начали[scarlet] обучение по Mindustry.[]\nИспользуйте кнопки [accent][[WASD][] для передвижения.\n[accent]Покрутите колесо мыши[]для приближения или отдаления камеры.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди
|
||||||
tutorial.intro.mobile = Вы начали[scarlet] обучение по Mindustry.[]\nПроведите по экрану, чтобы двигаться.\n[accent]Сведите или разведите 2 пальца[] для изменения масштаба.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди
|
tutorial.intro.mobile = Вы начали[scarlet] обучение по Mindustry.[]\nПроведите по экрану, чтобы двигаться.\n[accent]Сведите или разведите 2 пальца[] для изменения масштаба.\nНачните с [accent]добычи меди[]. Приблизьтесь к ней, затем нажмите на медную жилу возле Вашего ядра, чтобы сделать это.\n\n[accent]{0}/{1} меди
|
||||||
tutorial.drill = Ручная добыча не является эффективной.\n[accent]Буры[] могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[]. Разместите его на медной жиле нажатием.\n[accent]Нажатие по правой кнопке[] прервёт строительство.
|
tutorial.drill = Ручная добыча не является эффективной.\n[accent]Буры[] могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[]. Разместите его на медной жиле нажатием.\n[accent]Нажатие по правой кнопке[] прервёт строительство.
|
||||||
tutorial.drill.mobile = Ручная добыча не является эффективной.\n[accent]Буры []могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[].\nРазместите его на медной жиле нажатием, затем нажмите [accent] белую галку[] ниже, чтобы подтвердить построение выделенного.\nНажмите [accent] кнопку X[], чтобы отменить размещение.
|
tutorial.drill.mobile = Ручная добыча не является эффективной.\n[accent]Буры []могут добывать автоматически.\nНажмите на вкладку с изображением сверла снизу справа.\nВыберите[accent] механический бур[].\nРазместите его на медной жиле нажатием, затем нажмите [accent] белую галку[] ниже, чтобы подтвердить построение выделенного.\nНажмите [accent] кнопку X[], чтобы отменить размещение.
|
||||||
@@ -1064,7 +1075,7 @@ tutorial.launch = Когда Вы достигаете определенной
|
|||||||
item.copper.description = Самый основной строительный материал. Широко используется во всех типах блоков.
|
item.copper.description = Самый основной строительный материал. Широко используется во всех типах блоков.
|
||||||
item.lead.description = Основной стартовый материал. Широко используется в электронике и блоках для транспортировки жидкостей.
|
item.lead.description = Основной стартовый материал. Широко используется в электронике и блоках для транспортировки жидкостей.
|
||||||
item.metaglass.description = Сверхпрочный сплав стекла. Широко используется для распределения и хранения жидкости.
|
item.metaglass.description = Сверхпрочный сплав стекла. Широко используется для распределения и хранения жидкости.
|
||||||
item.graphite.description = Минерализованный углерод, используемый для боеприпасов и электроизоляции.
|
item.graphite.description = Минерализованный углерод, используемый для боеприпасов и электрических компонентов.
|
||||||
item.sand.description = Обычный материал, который широко используется при выплавке, как при легировании, так и в качестве флюса.
|
item.sand.description = Обычный материал, который широко используется при выплавке, как при легировании, так и в качестве флюса.
|
||||||
item.coal.description = Окаменелое растительное вещество, образовавшееся задолго до посева. Широко используется для производства топлива и ресурсов.
|
item.coal.description = Окаменелое растительное вещество, образовавшееся задолго до посева. Широко используется для производства топлива и ресурсов.
|
||||||
item.titanium.description = Редкий сверхлёгкий металл, широко используемый для транспортировки жидкостей, буров и авиации.
|
item.titanium.description = Редкий сверхлёгкий металл, широко используемый для транспортировки жидкостей, буров и авиации.
|
||||||
@@ -1085,7 +1096,7 @@ mech.alpha-mech.description = Стандартный управляемый ме
|
|||||||
mech.delta-mech.description = Быстрый, легко бронированный мех, созданный для ударов «атакуй и беги». Наносит мало урона по строениям, но может очень быстро убить большие группы вражеских орудий с помощью дуговых молний.
|
mech.delta-mech.description = Быстрый, легко бронированный мех, созданный для ударов «атакуй и беги». Наносит мало урона по строениям, но может очень быстро убить большие группы вражеских орудий с помощью дуговых молний.
|
||||||
mech.tau-mech.description = Мех поддержки. Ремонтирует союзные блоки, просто стреляя в них. Может лечить союзников в радиусе его ремонтирующей способности.
|
mech.tau-mech.description = Мех поддержки. Ремонтирует союзные блоки, просто стреляя в них. Может лечить союзников в радиусе его ремонтирующей способности.
|
||||||
mech.omega-mech.description = Громоздкий и хорошо бронированный мех, созданный для передовых атак. Его броня может блокировать до 90% входящего урона.
|
mech.omega-mech.description = Громоздкий и хорошо бронированный мех, созданный для передовых атак. Его броня может блокировать до 90% входящего урона.
|
||||||
mech.dart-ship.description = Стандартный управляемый корабль. Достаточно быстрый и легкий, но обладает слабым вооружением и низкой скоростью добычи.
|
mech.dart-ship.description = Стандартный управляемый корабль. Быстрая скорость добычи. Достаточно быстрый и легкий, но обладает слабым вооружением.
|
||||||
mech.javelin-ship.description = Корабль для тактики «атакуй и беги». Сначала он медленный, но позже может разгоняться до огромных скоростей и летать над аванпостами противника, нанося большой урон молниями и ракетами.
|
mech.javelin-ship.description = Корабль для тактики «атакуй и беги». Сначала он медленный, но позже может разгоняться до огромных скоростей и летать над аванпостами противника, нанося большой урон молниями и ракетами.
|
||||||
mech.trident-ship.description = Тяжёлый бомбардировщик, построенный для строительства и уничтожения вражеских укреплений. Достаточно хорошо бронированный.
|
mech.trident-ship.description = Тяжёлый бомбардировщик, построенный для строительства и уничтожения вражеских укреплений. Достаточно хорошо бронированный.
|
||||||
mech.glaive-ship.description = Большой хорошо бронированный боевой корабль. Оборудован зажигательным повторителем. Очень манёвренный.
|
mech.glaive-ship.description = Большой хорошо бронированный боевой корабль. Оборудован зажигательным повторителем. Очень манёвренный.
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
1202
core/assets/bundles/bundle_th.properties
Normal file
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Eldeki yapiyi birak
|
keybind.deselect.name = Eldeki yapiyi birak
|
||||||
keybind.shoot.name = Sik
|
keybind.shoot.name = Sik
|
||||||
keybind.zoom_hold.name = Yaklasma basili tutmasi
|
|
||||||
keybind.zoom.name = Yaklas
|
keybind.zoom.name = Yaklas
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Durdur
|
keybind.pause.name = Durdur
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Blok Seç
|
|||||||
keybind.break_block.name = Blok Kır
|
keybind.break_block.name = Blok Kır
|
||||||
keybind.deselect.name = Seçimleri Kaldır
|
keybind.deselect.name = Seçimleri Kaldır
|
||||||
keybind.shoot.name = Ateş Et
|
keybind.shoot.name = Ateş Et
|
||||||
keybind.zoom_hold.name = Zumu Sabit Tutma
|
|
||||||
keybind.zoom.name = Zum
|
keybind.zoom.name = Zum
|
||||||
keybind.menu.name = Menü
|
keybind.menu.name = Menü
|
||||||
keybind.pause.name = Durdur
|
keybind.pause.name = Durdur
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ load.image = Зображення
|
|||||||
load.content = Зміст
|
load.content = Зміст
|
||||||
load.system = Система
|
load.system = Система
|
||||||
load.mod = Модифікації
|
load.mod = Модифікації
|
||||||
|
load.scripts = Скрипти
|
||||||
|
|
||||||
schematic = Схема
|
schematic = Схема
|
||||||
schematic.add = Зберегти схему…
|
schematic.add = Зберегти схему…
|
||||||
schematics = Схеми
|
schematics = Схеми
|
||||||
@@ -104,17 +106,19 @@ mod.disable = Вимкнути
|
|||||||
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
|
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
|
||||||
mod.requiresversion = [scarlet]Необхідна версія гри: [accent]{0}
|
mod.requiresversion = [scarlet]Необхідна версія гри: [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
|
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
|
||||||
mod.nowdisabled = [scarlet]Модифікації '{0}' не вистачає залежностей:[accent] {1}\n[lightgray]Ці модифікації потрібно завантажити спочатку.\nЦя модифікація буду автоматично вимкнена.
|
mod.nowdisabled = [scarlet]Модифікації «{0}» не вистачає залежних модифікацій:[accent] {1}\n[lightgray]Ці модифікації потрібно завантажити спочатку.\nЦя модифікація буде автоматично вимкнена.
|
||||||
mod.enable = Увімкнути
|
mod.enable = Увімкнути
|
||||||
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
|
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
|
||||||
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
||||||
mod.import = Імпортувати модифікацію
|
mod.import = Імпортувати модифікацію
|
||||||
mod.import.github = Імпортувати модификацію з Ґітгаб
|
mod.import.github = Імпортувати модификацію з GitHub
|
||||||
|
mod.item.remove =Цей предмет є частиною модифікації [accent] '«{0}»[]. Щоб видалити його, видаліть цю модифікацію.
|
||||||
mod.remove.confirm = Цю модифікацію буде видалено.
|
mod.remove.confirm = Цю модифікацію буде видалено.
|
||||||
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
||||||
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
||||||
mod.preview.missing = До публікації цієї модифікації в Майстерні, ви повинні додати зображення попереднього перегляду.\nПомістіть зображення з назвою [accent] preview.png[] у теку з модификаціями і спробуйте знову.
|
mod.preview.missing = До публікації цієї модифікації в Майстерні, ви повинні додати зображення попереднього перегляду.\nПомістіть зображення з назвою [accent] preview.png[] у теку з модификаціями і спробуйте знову.
|
||||||
mod.folder.missing = Тільки модификації у формі теці можуть бути опубліковані в Майстерні.\nЩоб перетворити будь-яку модификацію у теку, просто розархівуйте цей файлу теку та видаліть старий архів, і потім перезапустіть гру або перезавантажте ваші модификації.
|
mod.folder.missing = Тільки модификації у формі теці можуть бути опубліковані в Майстерні.\nЩоб перетворити будь-яку модификацію у теку, просто розархівуйте цей файлу теку та видаліть старий архів, і потім перезапустіть гру або перезавантажте ваші модификації.
|
||||||
|
mod.scripts.unsupported = Ваш пристрій не підтримує скрипти модифікацій. Деякі модифифікаціх не будуть працювати правильно.
|
||||||
about.button = Про гру
|
about.button = Про гру
|
||||||
name = Ім’я:
|
name = Ім’я:
|
||||||
noname = Спочатку придумайте[accent] собі ім’я[].
|
noname = Спочатку придумайте[accent] собі ім’я[].
|
||||||
@@ -692,7 +696,6 @@ keybind.pick.name = Вибрати блок
|
|||||||
keybind.break_block.name = Зламати блок
|
keybind.break_block.name = Зламати блок
|
||||||
keybind.deselect.name = Скасувати
|
keybind.deselect.name = Скасувати
|
||||||
keybind.shoot.name = Постріл
|
keybind.shoot.name = Постріл
|
||||||
keybind.zoom_hold.name = Керування масштабом
|
|
||||||
keybind.zoom.name = Приблизити
|
keybind.zoom.name = Приблизити
|
||||||
keybind.menu.name = Меню
|
keybind.menu.name = Меню
|
||||||
keybind.pause.name = Пауза
|
keybind.pause.name = Пауза
|
||||||
|
|||||||
@@ -699,7 +699,6 @@ keybind.pick.name = 选择方块
|
|||||||
keybind.break_block.name = 破坏方块
|
keybind.break_block.name = 破坏方块
|
||||||
keybind.deselect.name = 取消选择
|
keybind.deselect.name = 取消选择
|
||||||
keybind.shoot.name = 射击
|
keybind.shoot.name = 射击
|
||||||
keybind.zoom_hold.name = 按住调整缩放
|
|
||||||
keybind.zoom.name = 缩放
|
keybind.zoom.name = 缩放
|
||||||
keybind.menu.name = 菜单
|
keybind.menu.name = 菜单
|
||||||
keybind.pause.name = 暂停
|
keybind.pause.name = 暂停
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ link.itch.io.description = itch.io 電腦版下載網頁
|
|||||||
link.google-play.description = Google Play 商店頁面
|
link.google-play.description = Google Play 商店頁面
|
||||||
link.f-droid.description = F-Droid 目錄頁面
|
link.f-droid.description = F-Droid 目錄頁面
|
||||||
link.wiki.description = 官方 Mindustry 維基
|
link.wiki.description = 官方 Mindustry 維基
|
||||||
|
link.feathub.description = 建議新功能
|
||||||
linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。
|
linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。
|
||||||
screenshot = 截圖保存到{0}
|
screenshot = 截圖保存到{0}
|
||||||
screenshot.invalid = 地圖太大了,可能沒有足夠的內存用於截圖。
|
screenshot.invalid = 地圖太大了,可能沒有足夠的內存用於截圖。
|
||||||
@@ -26,6 +27,7 @@ load.image = 圖片載入中
|
|||||||
load.content = 內容載入中
|
load.content = 內容載入中
|
||||||
load.system = 系統載入中
|
load.system = 系統載入中
|
||||||
load.mod = 模組載入中
|
load.mod = 模組載入中
|
||||||
|
load.scripts = 指令檔載入中
|
||||||
|
|
||||||
schematic = 藍圖
|
schematic = 藍圖
|
||||||
schematic.add = 儲存藍圖...
|
schematic.add = 儲存藍圖...
|
||||||
@@ -99,18 +101,23 @@ mod.disabled = [scarlet]已禁用
|
|||||||
mod.enable = 啟用
|
mod.enable = 啟用
|
||||||
mod.disable = 禁用
|
mod.disable = 禁用
|
||||||
mod.delete.error = 無法刪除模組,檔案可能在使用中。
|
mod.delete.error = 無法刪除模組,檔案可能在使用中。
|
||||||
mod.requiresversion = [scarlet]遊戲版本要求:[accent]{0}
|
mod.requiresversion = [scarlet]最低遊戲版本要求:[accent]{0}
|
||||||
mod.missingdependencies = [scarlet]缺少依賴項目: {0}
|
mod.missingdependencies = [scarlet]缺少必須項目: {0}
|
||||||
|
mod.erroredcontent = [scarlet]內容錯誤
|
||||||
|
mod.errors = 載入內容時發生錯誤
|
||||||
|
mod.noerrorplay = [scarlet]你使用了有錯誤的模組。[] 遊戲前請先禁用相關模組或修正錯誤。
|
||||||
mod.nowdisabled = [scarlet]「{0}」模組缺少必須項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。
|
mod.nowdisabled = [scarlet]「{0}」模組缺少必須項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。
|
||||||
mod.requiresrestart = 遊戲將立即關閉以套用模組變更。
|
mod.requiresrestart = 遊戲將立即關閉以套用模組變更。
|
||||||
mod.reloadrequired = [scarlet]需要重新載入
|
mod.reloadrequired = [scarlet]需要重新載入
|
||||||
mod.import = 匯入模組
|
mod.import = 匯入模組
|
||||||
mod.import.github = 匯入GitHub模組
|
mod.import.github = 匯入GitHub模組
|
||||||
|
mod.item.remove = 此物品是[accent] '{0}'[]模組的一部份。解除安裝模組以移除此物品。
|
||||||
mod.remove.confirm = 該模組將被刪除。
|
mod.remove.confirm = 該模組將被刪除。
|
||||||
mod.author = [lightgray]作者:[] {0}
|
mod.author = [lightgray]作者:[] {0}
|
||||||
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
|
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
|
||||||
mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。
|
mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。
|
||||||
mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾,只需將其文件解壓縮到資料夾並刪除舊的.zip檔,然後重新啟動遊戲或重新載入模組。
|
mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾,只需將其文件解壓縮到資料夾並刪除舊的.zip檔,然後重新啟動遊戲或重新載入模組。
|
||||||
|
mod.scripts.unsupported = 你的裝置不支援模組指令檔。部分模組將無法正常運作。
|
||||||
|
|
||||||
about.button = 關於
|
about.button = 關於
|
||||||
name = 名稱:
|
name = 名稱:
|
||||||
@@ -131,7 +138,7 @@ server.kicked.serverClose = 伺服器已關閉。
|
|||||||
server.kicked.vote = 您已被投票踢出伺服器,再見。
|
server.kicked.vote = 您已被投票踢出伺服器,再見。
|
||||||
server.kicked.clientOutdated = 客戶端版本過舊!請更新遊戲!
|
server.kicked.clientOutdated = 客戶端版本過舊!請更新遊戲!
|
||||||
server.kicked.serverOutdated = 伺服器版本過舊!請聯絡伺服主更新伺服器!
|
server.kicked.serverOutdated = 伺服器版本過舊!請聯絡伺服主更新伺服器!
|
||||||
server.kicked.banned = 您已經從這個伺服器被封禁。
|
server.kicked.banned = 您已經在這個伺服器中被封禁。
|
||||||
server.kicked.typeMismatch = 該伺服器與您的版本不相容。
|
server.kicked.typeMismatch = 該伺服器與您的版本不相容。
|
||||||
server.kicked.playerLimit = 該伺服器已滿。請等待一個空位置。
|
server.kicked.playerLimit = 該伺服器已滿。請等待一個空位置。
|
||||||
server.kicked.recentKick = 您最近曾被踢出伺服器。\n請稍後再進行連線。
|
server.kicked.recentKick = 您最近曾被踢出伺服器。\n請稍後再進行連線。
|
||||||
@@ -176,7 +183,7 @@ confirmban = 您確定要封禁該玩家嗎?
|
|||||||
confirmkick = 您確定要踢出該玩家嗎?
|
confirmkick = 您確定要踢出該玩家嗎?
|
||||||
confirmvotekick = 您確定要投票剔除該名玩家嗎?
|
confirmvotekick = 您確定要投票剔除該名玩家嗎?
|
||||||
confirmunban = 您確定要解除封禁該玩家嗎?
|
confirmunban = 您確定要解除封禁該玩家嗎?
|
||||||
confirmadmin = 您確定要提升這個玩家為管理員嗎?
|
confirmadmin = 您確定要晉升這個玩家為管理員嗎?
|
||||||
confirmunadmin = 您確定要解除這個玩家的管理員嗎?
|
confirmunadmin = 您確定要解除這個玩家的管理員嗎?
|
||||||
joingame.title = 加入遊戲
|
joingame.title = 加入遊戲
|
||||||
joingame.ip = IP位址:
|
joingame.ip = IP位址:
|
||||||
@@ -251,7 +258,7 @@ pausebuilding = [accent][[{0}][]暫停建造
|
|||||||
resumebuilding = [scarlet][[{0}][]恢復建造
|
resumebuilding = [scarlet][[{0}][]恢復建造
|
||||||
wave = [accent]第{0}波
|
wave = [accent]第{0}波
|
||||||
wave.waiting = [lightgray]將於{0}秒後抵達
|
wave.waiting = [lightgray]將於{0}秒後抵達
|
||||||
wave.waveInProgress = 第[lightgray]波正在進行中
|
wave.waveInProgress = [lightgray]波次進行中
|
||||||
waiting = [lightgray]等待中...
|
waiting = [lightgray]等待中...
|
||||||
waiting.players = 等待玩家中...
|
waiting.players = 等待玩家中...
|
||||||
wave.enemies = [lightgray]剩下{0}個敵人
|
wave.enemies = [lightgray]剩下{0}個敵人
|
||||||
@@ -263,9 +270,9 @@ custom = 自訂
|
|||||||
builtin = 内建
|
builtin = 内建
|
||||||
map.delete.confirm = 確認要刪除地圖嗎?此操作無法撤回!
|
map.delete.confirm = 確認要刪除地圖嗎?此操作無法撤回!
|
||||||
map.random = [accent]隨機地圖
|
map.random = [accent]隨機地圖
|
||||||
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[ROYAL]藍色[]的核心。
|
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[accent]橘色[]的核心。
|
||||||
map.nospawn.pvp = 這個地圖沒有核心讓敵人重生!請在編輯器中添加一個[SCARLET]紅色[]的核心。
|
map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[SCARLET]不是橘色[]的核心。
|
||||||
map.nospawn.attack = 這個地圖沒有敵人核心讓可以攻擊!請在編輯器中添加一個[SCARLET]紅色[]的核心。
|
map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[SCARLET]紅色[]的核心。
|
||||||
map.invalid = 地圖載入錯誤:地圖可能已經損壞。
|
map.invalid = 地圖載入錯誤:地圖可能已經損壞。
|
||||||
workshop.update = 更新項目
|
workshop.update = 更新項目
|
||||||
workshop.error = 提取工作坊詳細信息時出錯: {0}
|
workshop.error = 提取工作坊詳細信息時出錯: {0}
|
||||||
@@ -296,7 +303,7 @@ editor.newmap = 新地圖
|
|||||||
workshop = 工作坊
|
workshop = 工作坊
|
||||||
waves.title = 波次
|
waves.title = 波次
|
||||||
waves.remove = 移除
|
waves.remove = 移除
|
||||||
waves.never = 〈從來沒有〉
|
waves.never = 〈永遠〉
|
||||||
waves.every = 每
|
waves.every = 每
|
||||||
waves.waves = 波次
|
waves.waves = 波次
|
||||||
waves.perspawn = 每次生成
|
waves.perspawn = 每次生成
|
||||||
@@ -368,7 +375,7 @@ toolmode.eraseores = 清除礦物
|
|||||||
toolmode.eraseores.description = 僅清除礦物。
|
toolmode.eraseores.description = 僅清除礦物。
|
||||||
toolmode.fillteams = 填充團隊
|
toolmode.fillteams = 填充團隊
|
||||||
toolmode.fillteams.description = 填充團隊而不是方塊。
|
toolmode.fillteams.description = 填充團隊而不是方塊。
|
||||||
toolmode.drawteams = Draw Teams
|
toolmode.drawteams = 繪製團隊
|
||||||
toolmode.drawteams.description = 繪製團隊而不是方塊。
|
toolmode.drawteams.description = 繪製團隊而不是方塊。
|
||||||
|
|
||||||
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。
|
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。
|
||||||
@@ -530,7 +537,7 @@ blocks.powerconnections = 最大連接數
|
|||||||
blocks.poweruse = 能量使用
|
blocks.poweruse = 能量使用
|
||||||
blocks.powerdamage = 能量/傷害
|
blocks.powerdamage = 能量/傷害
|
||||||
blocks.itemcapacity = 物品容量
|
blocks.itemcapacity = 物品容量
|
||||||
blocks.basepowergeneration = 基本能量生產
|
blocks.basepowergeneration = 基礎能量生產
|
||||||
blocks.productiontime = 生產時間
|
blocks.productiontime = 生產時間
|
||||||
blocks.repairtime = 方塊完全修復時間
|
blocks.repairtime = 方塊完全修復時間
|
||||||
blocks.speedincrease = 速度提升
|
blocks.speedincrease = 速度提升
|
||||||
@@ -604,6 +611,7 @@ setting.shadows.name = 陰影
|
|||||||
setting.blockreplace.name = 方塊建造建議
|
setting.blockreplace.name = 方塊建造建議
|
||||||
setting.linear.name = 線性過濾
|
setting.linear.name = 線性過濾
|
||||||
setting.hints.name = 提示
|
setting.hints.name = 提示
|
||||||
|
setting.buildautopause.name = 自動暫停建築
|
||||||
setting.animatedwater.name = 水動畫
|
setting.animatedwater.name = 水動畫
|
||||||
setting.animatedshields.name = 護盾動畫
|
setting.animatedshields.name = 護盾動畫
|
||||||
setting.antialias.name = 消除鋸齒[lightgray](需要重啟遊戲)[]
|
setting.antialias.name = 消除鋸齒[lightgray](需要重啟遊戲)[]
|
||||||
@@ -629,11 +637,14 @@ setting.conveyorpathfinding.name = 自動輸送帶放置規劃
|
|||||||
setting.sensitivity.name = 控制器靈敏度
|
setting.sensitivity.name = 控制器靈敏度
|
||||||
setting.saveinterval.name = 自動存檔間隔
|
setting.saveinterval.name = 自動存檔間隔
|
||||||
setting.seconds = {0}秒
|
setting.seconds = {0}秒
|
||||||
|
setting.blockselecttimeout.name = 跳過方塊建造時距
|
||||||
|
setting.milliseconds = {0}毫秒
|
||||||
setting.fullscreen.name = 全螢幕
|
setting.fullscreen.name = 全螢幕
|
||||||
setting.borderlesswindow.name = 無邊框窗口[lightgray](可能需要重啟遊戲)
|
setting.borderlesswindow.name = 無邊框窗口[lightgray](可能需要重啟遊戲)
|
||||||
setting.fps.name = 顯示FPS
|
setting.fps.name = 顯示FPS與Ping
|
||||||
|
setting.blockselectkeys.name = 顯示方塊選擇快捷鍵
|
||||||
setting.vsync.name = 垂直同步
|
setting.vsync.name = 垂直同步
|
||||||
setting.pixelate.name = 像素化[lightgray](可能降低性能)
|
setting.pixelate.name = 像素化[lightgray](會關閉動畫)
|
||||||
setting.minimap.name = 顯示小地圖
|
setting.minimap.name = 顯示小地圖
|
||||||
setting.position.name = 顯示玩家位置
|
setting.position.name = 顯示玩家位置
|
||||||
setting.musicvol.name = 音樂音量
|
setting.musicvol.name = 音樂音量
|
||||||
@@ -660,7 +671,7 @@ category.multiplayer.name = 多人
|
|||||||
command.attack = 攻擊
|
command.attack = 攻擊
|
||||||
command.rally = 集結
|
command.rally = 集結
|
||||||
command.retreat = 撤退
|
command.retreat = 撤退
|
||||||
keybind.clear_building.name = 清除建築物
|
keybind.clear_building.name = 清除建築指令
|
||||||
keybind.press = 按一下按鍵...
|
keybind.press = 按一下按鍵...
|
||||||
keybind.press.axis = 按一下軸向或按鍵...
|
keybind.press.axis = 按一下軸向或按鍵...
|
||||||
keybind.screenshot.name = 地圖截圖
|
keybind.screenshot.name = 地圖截圖
|
||||||
@@ -671,6 +682,22 @@ keybind.schematic_select.name = 選擇區域
|
|||||||
keybind.schematic_menu.name = 藍圖目錄
|
keybind.schematic_menu.name = 藍圖目錄
|
||||||
keybind.schematic_flip_x.name = X軸翻轉
|
keybind.schematic_flip_x.name = X軸翻轉
|
||||||
keybind.schematic_flip_y.name = Y軸翻轉
|
keybind.schematic_flip_y.name = Y軸翻轉
|
||||||
|
keybind.category_prev.name = 前一個類別
|
||||||
|
keybind.category_next.name = 下一個類別
|
||||||
|
keybind.block_select_left.name = 選取方塊左
|
||||||
|
keybind.block_select_right.name = 選取方塊右
|
||||||
|
keybind.block_select_up.name = 選取方塊上
|
||||||
|
keybind.block_select_down.name = 選取方塊下
|
||||||
|
keybind.block_select_01.name = 類別/方塊選取 1
|
||||||
|
keybind.block_select_02.name = 類別/方塊選取 2
|
||||||
|
keybind.block_select_03.name = 類別/方塊選取 3
|
||||||
|
keybind.block_select_04.name = 類別/方塊選取 4
|
||||||
|
keybind.block_select_05.name = 類別/方塊選取 5
|
||||||
|
keybind.block_select_06.name = 類別/方塊選取 6
|
||||||
|
keybind.block_select_07.name = 類別/方塊選取 7
|
||||||
|
keybind.block_select_08.name = 類別/方塊選取 8
|
||||||
|
keybind.block_select_09.name = 類別/方塊選取 9
|
||||||
|
keybind.block_select_10.name = 類別/方塊選取 10
|
||||||
keybind.fullscreen.name = 全螢幕切換
|
keybind.fullscreen.name = 全螢幕切換
|
||||||
keybind.select.name = 選取
|
keybind.select.name = 選取
|
||||||
keybind.diagonal_placement.name = 對角線放置
|
keybind.diagonal_placement.name = 對角線放置
|
||||||
@@ -678,7 +705,6 @@ keybind.pick.name = 選擇方塊
|
|||||||
keybind.break_block.name = 移除方塊
|
keybind.break_block.name = 移除方塊
|
||||||
keybind.deselect.name = 取消選取
|
keybind.deselect.name = 取消選取
|
||||||
keybind.shoot.name = 射擊
|
keybind.shoot.name = 射擊
|
||||||
keybind.zoom_hold.name = 按住縮放
|
|
||||||
keybind.zoom.name = 縮放
|
keybind.zoom.name = 縮放
|
||||||
keybind.menu.name = 主選單
|
keybind.menu.name = 主選單
|
||||||
keybind.pause.name = 暫停遊戲
|
keybind.pause.name = 暫停遊戲
|
||||||
@@ -700,12 +726,12 @@ mode.help.title = 模式說明
|
|||||||
mode.survival.name = 生存
|
mode.survival.name = 生存
|
||||||
mode.survival.description = 一般模式。有限的資源與自動來襲的波次。
|
mode.survival.description = 一般模式。有限的資源與自動來襲的波次。
|
||||||
mode.sandbox.name = 沙盒
|
mode.sandbox.name = 沙盒
|
||||||
mode.sandbox.description = 無限的資源,與不倒數計時的波次。
|
mode.sandbox.description = 無限的資源與不倒數計時的波次。
|
||||||
mode.editor.name = 編輯
|
mode.editor.name = 編輯
|
||||||
mode.pvp.name = 對戰
|
mode.pvp.name = 對戰
|
||||||
mode.pvp.description = 和其他玩家競爭、戰鬥。
|
mode.pvp.description = 和其他玩家競爭、戰鬥。\n[gray]地圖中需要至少兩個不同顏色的核心。
|
||||||
mode.attack.name = 進攻
|
mode.attack.name = 進攻
|
||||||
mode.attack.description = 沒有波次,目標是摧毀敵人的基地。
|
mode.attack.description = 目標是摧毀敵人的基地。\n[gray]地圖中需要有一個紅色核心。
|
||||||
mode.custom = 自訂規則
|
mode.custom = 自訂規則
|
||||||
|
|
||||||
rules.infiniteresources = 無限資源
|
rules.infiniteresources = 無限資源
|
||||||
@@ -1016,11 +1042,11 @@ unit.fortress.name = 要塞
|
|||||||
unit.revenant.name = 復仇鬼
|
unit.revenant.name = 復仇鬼
|
||||||
unit.eruptor.name = 爆發者
|
unit.eruptor.name = 爆發者
|
||||||
unit.chaos-array.name = 混沌陣列
|
unit.chaos-array.name = 混沌陣列
|
||||||
unit.eradicator.name = 消除者
|
unit.eradicator.name = 殲滅者
|
||||||
unit.lich.name = 巫妖
|
unit.lich.name = 巫妖
|
||||||
unit.reaper.name = 收掠者
|
unit.reaper.name = 收掠者
|
||||||
tutorial.next = [lightgray]<按下以繼續>
|
tutorial.next = [lightgray]<按下以繼續>
|
||||||
tutorial.intro = 您已進入[scarlet] Mindustry 教學。[]\n使用[[WASD鍵]來移動.\n在滾動滾輪時[accent]按住 [[Ctrl][]來放大縮小畫面.\n從[accent]開採銅礦[]開始吧靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦
|
tutorial.intro = 您已進入[scarlet] Mindustry 教學。[]\n使用[[WASD鍵]來移動.\n滾動滾輪來放大縮小畫面.\n從[accent]開採銅礦[]開始吧靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦
|
||||||
tutorial.intro.mobile = 您已進入[scarlet] Mindustry 教學。[]\n滑動螢幕即可移動。\n[accent]用兩指捏[]來縮放畫面。\n從[accent]開採銅礦[]開始吧。靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦
|
tutorial.intro.mobile = 您已進入[scarlet] Mindustry 教學。[]\n滑動螢幕即可移動。\n[accent]用兩指捏[]來縮放畫面。\n從[accent]開採銅礦[]開始吧。靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦
|
||||||
tutorial.drill = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n在銅礦脈上放置一個鑽頭。
|
tutorial.drill = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n在銅礦脈上放置一個鑽頭。
|
||||||
tutorial.drill.mobile = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n點選右下角的鑽頭選項\n選擇[accent]機械鑽頭[].\n通過點擊將其放置在銅礦上,然後按下下方的[accent]確認標誌[]確認您的選擇\n按下[accent] X 按鈕[] 取消放置.
|
tutorial.drill.mobile = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n點選右下角的鑽頭選項\n選擇[accent]機械鑽頭[].\n通過點擊將其放置在銅礦上,然後按下下方的[accent]確認標誌[]確認您的選擇\n按下[accent] X 按鈕[] 取消放置.
|
||||||
@@ -1043,7 +1069,7 @@ item.copper.description = 最基本的結構材料。在各種類型的方塊中
|
|||||||
item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和液體運輸方塊。
|
item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和液體運輸方塊。
|
||||||
item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和存儲。
|
item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和存儲。
|
||||||
item.graphite.description = 礦化的碳,用於彈藥和電氣絕緣。
|
item.graphite.description = 礦化的碳,用於彈藥和電氣絕緣。
|
||||||
item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和助熔劑。
|
item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和作為助熔劑。
|
||||||
item.coal.description = 遠在「播種」事件前就形成的植物化石。一種常見並容易獲得的燃料。
|
item.coal.description = 遠在「播種」事件前就形成的植物化石。一種常見並容易獲得的燃料。
|
||||||
item.titanium.description = 一種罕見的超輕金屬,被廣泛運用於運輸液體、鑽頭和飛行載具。
|
item.titanium.description = 一種罕見的超輕金屬,被廣泛運用於運輸液體、鑽頭和飛行載具。
|
||||||
item.thorium.description = 一種高密度的放射性金屬,用作結構支撐和核燃料。
|
item.thorium.description = 一種高密度的放射性金屬,用作結構支撐和核燃料。
|
||||||
@@ -1060,10 +1086,10 @@ liquid.slag.description = 各種不同類型的熔融金屬混合在一起的液
|
|||||||
liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。
|
liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。
|
||||||
liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。
|
liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。
|
||||||
mech.alpha-mech.description = 標準的控制機甲。改良自匕首機甲,加強了裝甲及建造能力。
|
mech.alpha-mech.description = 標準的控制機甲。改良自匕首機甲,加強了裝甲及建造能力。
|
||||||
mech.delta-mech.description = 一種快速、輕裝甲的機甲,用於打帶跑的攻擊。對結構造成的傷害很小,但可以用弧形閃電武器很快殺死大量敵方單位。
|
mech.delta-mech.description = 一種快速、輕裝甲的機甲,用於打帶跑的攻擊。對結構體造成的傷害很小,但可以用弧形閃電武器很快殺死大量敵方單位。
|
||||||
mech.tau-mech.description = 支援機甲。射擊友方方塊以修復它們。可以使用它的修復能力治療一定範圍內的友軍。
|
mech.tau-mech.description = 支援機甲。射擊友方方塊以修復它們。可以使用它的修復能力治療一定範圍內的友軍。
|
||||||
mech.omega-mech.description = 一種笨重、重裝甲的機甲,用於前線突擊。它的裝甲能力可以阻擋高達90%的傷害。
|
mech.omega-mech.description = 一種笨重、重裝甲的機甲,用於前線突擊。
|
||||||
mech.dart-ship.description = 標準的控制飛船。快速、輕便,但攻擊能力低、採礦速度慢。
|
mech.dart-ship.description = 標準的控制飛船。採礦速度快。相當快速、輕便,但攻擊能力低落。
|
||||||
mech.javelin-ship.description = 一種打帶跑的突襲艇。雖然最初很慢,但它可以加速到很快的速度,並飛過敵人的前哨站,利用其閃電能力和導彈造成大量的傷害。
|
mech.javelin-ship.description = 一種打帶跑的突襲艇。雖然最初很慢,但它可以加速到很快的速度,並飛過敵人的前哨站,利用其閃電能力和導彈造成大量的傷害。
|
||||||
mech.trident-ship.description = 一種重型轟炸機。用以摧毀敵方建築。有相當的裝甲。
|
mech.trident-ship.description = 一種重型轟炸機。用以摧毀敵方建築。有相當的裝甲。
|
||||||
mech.glaive-ship.description = 一種大型、配有良好裝甲的砲艇。配備燃燒機關槍。高機動性。
|
mech.glaive-ship.description = 一種大型、配有良好裝甲的砲艇。配備燃燒機關槍。高機動性。
|
||||||
|
|||||||
@@ -83,3 +83,4 @@ amrsoll
|
|||||||
ねらひかだ
|
ねらひかだ
|
||||||
Draco
|
Draco
|
||||||
Quezler
|
Quezler
|
||||||
|
Alicila
|
||||||
|
|||||||
20
core/assets/scripts/base.js
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
const log = function(context, obj){
|
||||||
|
Vars.mods.getScripts().log(context, obj ? String(obj) : "null")
|
||||||
|
}
|
||||||
|
|
||||||
|
const extendContent = function(classType, name, params){
|
||||||
|
return new JavaAdapter(classType, params, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
const extend = function(classType, params){
|
||||||
|
return new JavaAdapter(classType, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
const run = method => new java.lang.Runnable(){run: method}
|
||||||
|
const boolf = method => new Boolf(){get: method}
|
||||||
|
const boolp = method => new Boolp(){get: method}
|
||||||
|
const cons = method => new Cons(){get: method}
|
||||||
|
const prov = method => new Prov(){get: method}
|
||||||
|
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
|
||||||
|
Call = Packages.io.anuke.mindustry.gen.Call
|
||||||
|
const Calls = Call //backwards compat
|
||||||
79
core/assets/scripts/global.js
Executable file
@@ -0,0 +1,79 @@
|
|||||||
|
//Generated class. Do not modify.
|
||||||
|
|
||||||
|
const log = function(context, obj){
|
||||||
|
Vars.mods.getScripts().log(context, obj ? String(obj) : "null")
|
||||||
|
}
|
||||||
|
|
||||||
|
const extendContent = function(classType, name, params){
|
||||||
|
return new JavaAdapter(classType, params, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
const extend = function(classType, params){
|
||||||
|
return new JavaAdapter(classType, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
const run = method => new java.lang.Runnable(){run: method}
|
||||||
|
const boolf = method => new Boolf(){get: method}
|
||||||
|
const boolp = method => new Boolp(){get: method}
|
||||||
|
const cons = method => new Cons(){get: method}
|
||||||
|
const prov = method => new Prov(){get: method}
|
||||||
|
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
|
||||||
|
Call = Packages.io.anuke.mindustry.gen.Call
|
||||||
|
const Calls = Call //backwards compat
|
||||||
|
importPackage(Packages.arc)
|
||||||
|
importPackage(Packages.arc.func)
|
||||||
|
importPackage(Packages.arc.graphics)
|
||||||
|
importPackage(Packages.arc.graphics.g2d)
|
||||||
|
importPackage(Packages.arc.math)
|
||||||
|
importPackage(Packages.arc.scene)
|
||||||
|
importPackage(Packages.arc.scene.actions)
|
||||||
|
importPackage(Packages.arc.scene.event)
|
||||||
|
importPackage(Packages.arc.scene.style)
|
||||||
|
importPackage(Packages.arc.scene.ui)
|
||||||
|
importPackage(Packages.arc.scene.ui.layout)
|
||||||
|
importPackage(Packages.arc.scene.utils)
|
||||||
|
importPackage(Packages.arc.struct)
|
||||||
|
importPackage(Packages.arc.util)
|
||||||
|
importPackage(Packages.mindustry)
|
||||||
|
importPackage(Packages.mindustry.ai)
|
||||||
|
importPackage(Packages.mindustry.content)
|
||||||
|
importPackage(Packages.mindustry.core)
|
||||||
|
importPackage(Packages.mindustry.ctype)
|
||||||
|
importPackage(Packages.mindustry.editor)
|
||||||
|
importPackage(Packages.mindustry.entities)
|
||||||
|
importPackage(Packages.mindustry.entities.bullet)
|
||||||
|
importPackage(Packages.mindustry.entities.effect)
|
||||||
|
importPackage(Packages.mindustry.entities.traits)
|
||||||
|
importPackage(Packages.mindustry.entities.type)
|
||||||
|
importPackage(Packages.mindustry.entities.type.base)
|
||||||
|
importPackage(Packages.mindustry.entities.units)
|
||||||
|
importPackage(Packages.mindustry.game)
|
||||||
|
importPackage(Packages.mindustry.gen)
|
||||||
|
importPackage(Packages.mindustry.graphics)
|
||||||
|
importPackage(Packages.mindustry.input)
|
||||||
|
importPackage(Packages.mindustry.maps)
|
||||||
|
importPackage(Packages.mindustry.maps.filters)
|
||||||
|
importPackage(Packages.mindustry.maps.generators)
|
||||||
|
importPackage(Packages.mindustry.maps.zonegen)
|
||||||
|
importPackage(Packages.mindustry.type)
|
||||||
|
importPackage(Packages.mindustry.ui)
|
||||||
|
importPackage(Packages.mindustry.ui.dialogs)
|
||||||
|
importPackage(Packages.mindustry.ui.fragments)
|
||||||
|
importPackage(Packages.mindustry.ui.layout)
|
||||||
|
importPackage(Packages.mindustry.world)
|
||||||
|
importPackage(Packages.mindustry.world.blocks)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.defense)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.defense.turrets)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.distribution)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.liquid)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.logic)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.power)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.production)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.sandbox)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.storage)
|
||||||
|
importPackage(Packages.mindustry.world.blocks.units)
|
||||||
|
importPackage(Packages.mindustry.world.consumers)
|
||||||
|
importPackage(Packages.mindustry.world.meta)
|
||||||
|
importPackage(Packages.mindustry.world.meta.values)
|
||||||
|
importPackage(Packages.mindustry.world.modules)
|
||||||
|
importPackage(Packages.mindustry.world.producers)
|
||||||
10
core/assets/scripts/wrapper.js
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
modName = "$MOD_NAME$"
|
||||||
|
|
||||||
|
!function(){
|
||||||
|
|
||||||
|
const scriptName = "$SCRIPT_NAME$"
|
||||||
|
const print = text => log(scriptName, text);
|
||||||
|
$CODE$
|
||||||
|
|
||||||
|
}();
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 748 KiB After Width: | Height: | Size: 748 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 935 KiB After Width: | Height: | Size: 928 KiB |
@@ -1,97 +0,0 @@
|
|||||||
package io.anuke.mindustry.content;
|
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
|
||||||
import io.anuke.arc.math.Mathf;
|
|
||||||
import io.anuke.mindustry.entities.Effects;
|
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
|
||||||
import io.anuke.mindustry.type.StatusEffect;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.waveTeam;
|
|
||||||
|
|
||||||
public class StatusEffects implements ContentList{
|
|
||||||
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void load(){
|
|
||||||
|
|
||||||
none = new StatusEffect();
|
|
||||||
|
|
||||||
burning = new StatusEffect(){{
|
|
||||||
damage = 0.06f;
|
|
||||||
effect = Fx.burning;
|
|
||||||
|
|
||||||
opposite(() -> wet, () -> freezing);
|
|
||||||
trans(() -> tarred, ((unit, time, newTime, result) -> {
|
|
||||||
unit.damage(1f);
|
|
||||||
Effects.effect(Fx.burning, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
|
||||||
result.set(this, Math.min(time + newTime, 300f));
|
|
||||||
}));
|
|
||||||
}};
|
|
||||||
|
|
||||||
freezing = new StatusEffect(){{
|
|
||||||
speedMultiplier = 0.6f;
|
|
||||||
armorMultiplier = 0.8f;
|
|
||||||
effect = Fx.freezing;
|
|
||||||
|
|
||||||
opposite(() -> melting, () -> burning);
|
|
||||||
}};
|
|
||||||
|
|
||||||
wet = new StatusEffect(){{
|
|
||||||
speedMultiplier = 0.9f;
|
|
||||||
effect = Fx.wet;
|
|
||||||
|
|
||||||
trans(() -> shocked, ((unit, time, newTime, result) -> {
|
|
||||||
unit.damage(20f);
|
|
||||||
if(unit.getTeam() == waveTeam){
|
|
||||||
Events.fire(Trigger.shock);
|
|
||||||
}
|
|
||||||
result.set(this, time);
|
|
||||||
}));
|
|
||||||
opposite(() -> burning);
|
|
||||||
}};
|
|
||||||
|
|
||||||
melting = new StatusEffect(){{
|
|
||||||
speedMultiplier = 0.8f;
|
|
||||||
armorMultiplier = 0.8f;
|
|
||||||
damage = 0.3f;
|
|
||||||
effect = Fx.melting;
|
|
||||||
|
|
||||||
trans(() -> tarred, ((unit, time, newTime, result) -> result.set(this, Math.min(time + newTime / 2f, 140f))));
|
|
||||||
opposite(() -> wet, () -> freezing);
|
|
||||||
}};
|
|
||||||
|
|
||||||
tarred = new StatusEffect(){{
|
|
||||||
speedMultiplier = 0.6f;
|
|
||||||
effect = Fx.oily;
|
|
||||||
|
|
||||||
trans(() -> melting, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
|
||||||
trans(() -> burning, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
|
||||||
}};
|
|
||||||
|
|
||||||
overdrive = new StatusEffect(){{
|
|
||||||
armorMultiplier = 0.95f;
|
|
||||||
speedMultiplier = 1.15f;
|
|
||||||
damageMultiplier = 1.4f;
|
|
||||||
damage = -0.01f;
|
|
||||||
effect = Fx.overdriven;
|
|
||||||
}};
|
|
||||||
|
|
||||||
shielded = new StatusEffect(){{
|
|
||||||
armorMultiplier = 3f;
|
|
||||||
}};
|
|
||||||
|
|
||||||
boss = new StatusEffect(){{
|
|
||||||
armorMultiplier = 3f;
|
|
||||||
damageMultiplier = 3f;
|
|
||||||
speedMultiplier = 1.1f;
|
|
||||||
}};
|
|
||||||
|
|
||||||
shocked = new StatusEffect();
|
|
||||||
|
|
||||||
//no effects, just small amounts of damage.
|
|
||||||
corroded = new StatusEffect(){{
|
|
||||||
damage = 0.1f;
|
|
||||||
}};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
package io.anuke.mindustry.core;
|
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
|
||||||
import io.anuke.arc.Files.*;
|
|
||||||
import io.anuke.arc.collection.*;
|
|
||||||
import io.anuke.arc.files.*;
|
|
||||||
import io.anuke.arc.util.*;
|
|
||||||
import io.anuke.arc.util.io.*;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
public class Version{
|
|
||||||
/** Build type. 'official' for official releases; 'custom' or 'bleeding edge' are also used. */
|
|
||||||
public static String type;
|
|
||||||
/** Build modifier, e.g. 'alpha' or 'release' */
|
|
||||||
public static String modifier;
|
|
||||||
/** Number specifying the major version, e.g. '4' */
|
|
||||||
public static int number;
|
|
||||||
/** Build number, e.g. '43'. set to '-1' for custom builds. */
|
|
||||||
public static int build = 0;
|
|
||||||
/** Revision number. Used for hotfixes. Does not affect server compatibility. */
|
|
||||||
public static int revision = 0;
|
|
||||||
/** Whether version loading is enabled. */
|
|
||||||
public static boolean enabled = true;
|
|
||||||
|
|
||||||
public static void init(){
|
|
||||||
if(!enabled) return;
|
|
||||||
|
|
||||||
try{
|
|
||||||
FileHandle file = OS.isAndroid || OS.isIos ? Core.files.internal("version.properties") : new FileHandle("version.properties", FileType.Internal);
|
|
||||||
|
|
||||||
ObjectMap<String, String> map = new ObjectMap<>();
|
|
||||||
PropertiesUtils.load(map, file.reader());
|
|
||||||
|
|
||||||
type = map.get("type");
|
|
||||||
number = Integer.parseInt(map.get("number", "4"));
|
|
||||||
modifier = map.get("modifier");
|
|
||||||
if(map.get("build").contains(".")){
|
|
||||||
String[] split = map.get("build").split("\\.");
|
|
||||||
try{
|
|
||||||
build = Integer.parseInt(split[0]);
|
|
||||||
revision = Integer.parseInt(split[1]);
|
|
||||||
}catch(Throwable e){
|
|
||||||
e.printStackTrace();
|
|
||||||
build = -1;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1;
|
|
||||||
}
|
|
||||||
}catch(IOException e){
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
package io.anuke.mindustry.ctype;
|
|
||||||
|
|
||||||
import io.anuke.arc.files.*;
|
|
||||||
import io.anuke.arc.util.ArcAnnotate.*;
|
|
||||||
import io.anuke.mindustry.*;
|
|
||||||
import io.anuke.mindustry.mod.Mods.*;
|
|
||||||
import io.anuke.mindustry.type.*;
|
|
||||||
|
|
||||||
|
|
||||||
/** Base class for a content type that is loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
|
|
||||||
public abstract class Content implements Comparable<Content>{
|
|
||||||
public final short id;
|
|
||||||
/** The mod that loaded this piece of content. */
|
|
||||||
public @Nullable LoadedMod mod;
|
|
||||||
/** File that this content was loaded from. */
|
|
||||||
public @Nullable FileHandle sourceFile;
|
|
||||||
|
|
||||||
public Content(){
|
|
||||||
this.id = (short)Vars.content.getBy(getContentType()).size;
|
|
||||||
Vars.content.handleContent(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the type name of this piece of content.
|
|
||||||
* This should return the same value for all instances of this content type.
|
|
||||||
*/
|
|
||||||
public abstract ContentType getContentType();
|
|
||||||
|
|
||||||
/** Called after all content and modules are created. Do not use to load regions or texture data! */
|
|
||||||
public void init(){
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called after all content is created, only on non-headless versions.
|
|
||||||
* Use for loading regions or other image data.
|
|
||||||
*/
|
|
||||||
public void load(){
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compareTo(Content c){
|
|
||||||
return Integer.compare(id, c.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString(){
|
|
||||||
return getContentType().name() + "#" + id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package io.anuke.mindustry.ctype;
|
|
||||||
|
|
||||||
/** Interface for a list of content to be loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
|
|
||||||
public interface ContentList{
|
|
||||||
/** This method should create all the content. */
|
|
||||||
void load();
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.traits;
|
|
||||||
|
|
||||||
import io.anuke.mindustry.game.Team;
|
|
||||||
|
|
||||||
public interface TeamTrait extends Entity{
|
|
||||||
Team getTeam();
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type;
|
|
||||||
|
|
||||||
import io.anuke.arc.math.geom.Vector2;
|
|
||||||
import io.anuke.mindustry.entities.traits.SolidTrait;
|
|
||||||
|
|
||||||
public abstract class SolidEntity extends BaseEntity implements SolidTrait{
|
|
||||||
protected transient Vector2 velocity = new Vector2(0f, 0.0001f);
|
|
||||||
private transient Vector2 lastPosition = new Vector2();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Vector2 lastPosition(){
|
|
||||||
return lastPosition;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Vector2 velocity(){
|
|
||||||
return velocity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Crawler extends GroundUnit{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Dagger extends GroundUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Draug extends MinerDrone{
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Eruptor extends GroundUnit{
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Fortress extends GroundUnit{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Ghoul extends FlyingUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Phantom extends BuilderDrone{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Spirit extends RepairDrone{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Titan extends GroundUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Wraith extends FlyingUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package io.anuke.mindustry.game;
|
|
||||||
|
|
||||||
import io.anuke.arc.Core;
|
|
||||||
import io.anuke.arc.graphics.Color;
|
|
||||||
import io.anuke.mindustry.graphics.*;
|
|
||||||
|
|
||||||
public enum Team{
|
|
||||||
derelict(Color.valueOf("4d4e58")),
|
|
||||||
sharded(Pal.accent),
|
|
||||||
crux(Color.valueOf("e82d2d")),
|
|
||||||
green(Color.valueOf("4dd98b")),
|
|
||||||
purple(Color.valueOf("9a4bdf")),
|
|
||||||
blue(Color.royal.cpy());
|
|
||||||
|
|
||||||
public final static Team[] all = values();
|
|
||||||
public final Color color;
|
|
||||||
public final int intColor;
|
|
||||||
|
|
||||||
Team(Color color){
|
|
||||||
this.color = color;
|
|
||||||
intColor = Color.rgba8888(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String localized(){
|
|
||||||
return Core.bundle.get("team." + name() + ".name");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
package io.anuke.mindustry.game;
|
|
||||||
|
|
||||||
import io.anuke.arc.collection.*;
|
|
||||||
import io.anuke.mindustry.*;
|
|
||||||
import io.anuke.mindustry.world.*;
|
|
||||||
|
|
||||||
/** Class for various team-based utilities. */
|
|
||||||
public class Teams{
|
|
||||||
private TeamData[] map = new TeamData[Team.all.length];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register a team.
|
|
||||||
* @param team The team type enum.
|
|
||||||
* @param enemies The array of enemies of this team. Any team not in this array is considered neutral.
|
|
||||||
*/
|
|
||||||
public void add(Team team, Team... enemies){
|
|
||||||
map[team.ordinal()] = new TeamData(team, EnumSet.of(enemies));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns team data by type. */
|
|
||||||
public TeamData get(Team team){
|
|
||||||
if(map[team.ordinal()] == null){
|
|
||||||
add(team, Array.with(Team.all).select(t -> t != team).toArray(Team.class));
|
|
||||||
}
|
|
||||||
return map[team.ordinal()];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns whether a team is active, e.g. whether it has any cores remaining. */
|
|
||||||
public boolean isActive(Team team){
|
|
||||||
//the enemy wave team is always active
|
|
||||||
return team == Vars.waveTeam || get(team).cores.size > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a set of all teams that are enemies of this team. */
|
|
||||||
public EnumSet<Team> enemiesOf(Team team){
|
|
||||||
return get(team).enemies;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns whether {@param other} is an enemy of {@param #team}. */
|
|
||||||
public boolean areEnemies(Team team, Team other){
|
|
||||||
return enemiesOf(team).contains(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Allocates a new array with the active teams.
|
|
||||||
* Never call in the main game loop.*/
|
|
||||||
public Array<TeamData> getActive(){
|
|
||||||
return Array.select(map, t -> t != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class TeamData{
|
|
||||||
public final ObjectSet<Tile> cores = new ObjectSet<>();
|
|
||||||
public final EnumSet<Team> enemies;
|
|
||||||
public final Team team;
|
|
||||||
public Queue<BrokenBlock> brokenBlocks = new Queue<>();
|
|
||||||
|
|
||||||
public TeamData(Team team, EnumSet<Team> enemies){
|
|
||||||
this.team = team;
|
|
||||||
this.enemies = enemies;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Represents a block made by this team that was destroyed somewhere on the map.
|
|
||||||
* This does not include deconstructed blocks.*/
|
|
||||||
public static class BrokenBlock{
|
|
||||||
public final short x, y, rotation, block;
|
|
||||||
public final int config;
|
|
||||||
|
|
||||||
public BrokenBlock(short x, short y, short rotation, short block, int config){
|
|
||||||
this.x = x;
|
|
||||||
this.y = y;
|
|
||||||
this.rotation = rotation;
|
|
||||||
this.block = block;
|
|
||||||
this.config = config;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.input;
|
|
||||||
|
|
||||||
enum PlaceMode{
|
|
||||||
none, breaking, placing, schematicSelect
|
|
||||||
}
|
|
||||||
@@ -1,214 +0,0 @@
|
|||||||
package io.anuke.mindustry.io;
|
|
||||||
|
|
||||||
import io.anuke.arc.collection.*;
|
|
||||||
import io.anuke.arc.files.*;
|
|
||||||
import io.anuke.arc.graphics.*;
|
|
||||||
import io.anuke.arc.util.*;
|
|
||||||
import io.anuke.arc.util.serialization.*;
|
|
||||||
import io.anuke.mindustry.content.*;
|
|
||||||
import io.anuke.mindustry.game.*;
|
|
||||||
import io.anuke.mindustry.io.MapIO.*;
|
|
||||||
import io.anuke.mindustry.maps.*;
|
|
||||||
import io.anuke.mindustry.type.*;
|
|
||||||
import io.anuke.mindustry.world.*;
|
|
||||||
import io.anuke.mindustry.world.LegacyColorMapper.*;
|
|
||||||
import io.anuke.mindustry.world.blocks.*;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.zip.*;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
|
||||||
|
|
||||||
/** Map IO for the "old" .mmap format.
|
|
||||||
* Differentiate between legacy maps and new maps by checking the extension (or the header).*/
|
|
||||||
public class LegacyMapIO{
|
|
||||||
private static final ObjectMap<String, String> fallback = ObjectMap.of("alpha-dart-mech-pad", "dart-mech-pad");
|
|
||||||
private static final Json json = new Json();
|
|
||||||
|
|
||||||
/* Convert a map from the old format to the new format. */
|
|
||||||
public static void convertMap(FileHandle in, FileHandle out) throws IOException{
|
|
||||||
Map map = readMap(in, true);
|
|
||||||
|
|
||||||
String waves = map.tags.get("waves", "[]");
|
|
||||||
Array<SpawnGroup> groups = new Array<>(json.fromJson(SpawnGroup[].class, waves));
|
|
||||||
|
|
||||||
Tile[][] tiles = world.createTiles(map.width, map.height);
|
|
||||||
for(int x = 0; x < map.width; x++){
|
|
||||||
for(int y = 0; y < map.height; y++){
|
|
||||||
tiles[x][y] = new CachedTile();
|
|
||||||
tiles[x][y].x = (short)x;
|
|
||||||
tiles[x][y].y = (short)y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
state.rules.spawns = groups;
|
|
||||||
readTiles(map, tiles);
|
|
||||||
MapIO.writeMap(out, map);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Map readMap(FileHandle file, boolean custom) throws IOException{
|
|
||||||
try(DataInputStream stream = new DataInputStream(file.read(1024))){
|
|
||||||
StringMap tags = new StringMap();
|
|
||||||
|
|
||||||
//meta is uncompressed
|
|
||||||
int version = stream.readInt();
|
|
||||||
if(version != 1){
|
|
||||||
throw new IOException("Outdated legacy map format");
|
|
||||||
}
|
|
||||||
int build = stream.readInt();
|
|
||||||
short width = stream.readShort(), height = stream.readShort();
|
|
||||||
byte tagAmount = stream.readByte();
|
|
||||||
|
|
||||||
for(int i = 0; i < tagAmount; i++){
|
|
||||||
String name = stream.readUTF();
|
|
||||||
String value = stream.readUTF();
|
|
||||||
tags.put(name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Map(file, width, height, tags, custom, version, build);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void readTiles(Map map, Tile[][] tiles) throws IOException{
|
|
||||||
readTiles(map, (x, y) -> tiles[x][y]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void readTiles(Map map, TileProvider tiles) throws IOException{
|
|
||||||
readTiles(map.file, map.width, map.height, tiles);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void readTiles(FileHandle file, int width, int height, Tile[][] tiles) throws IOException{
|
|
||||||
readTiles(file, width, height, (x, y) -> tiles[x][y]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void readTiles(FileHandle file, int width, int height, TileProvider tiles) throws IOException{
|
|
||||||
try(BufferedInputStream input = file.read(bufferSize)){
|
|
||||||
|
|
||||||
//read map
|
|
||||||
{
|
|
||||||
DataInputStream stream = new DataInputStream(input);
|
|
||||||
|
|
||||||
stream.readInt(); //version
|
|
||||||
stream.readInt(); //build
|
|
||||||
stream.readInt(); //width + height
|
|
||||||
byte tagAmount = stream.readByte();
|
|
||||||
|
|
||||||
for(int i = 0; i < tagAmount; i++){
|
|
||||||
stream.readUTF(); //key
|
|
||||||
stream.readUTF(); //val
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try(DataInputStream stream = new DataInputStream(new InflaterInputStream(input))){
|
|
||||||
|
|
||||||
try{
|
|
||||||
byte mapped = stream.readByte();
|
|
||||||
IntMap<Block> idmap = new IntMap<>();
|
|
||||||
IntMap<String> namemap = new IntMap<>();
|
|
||||||
|
|
||||||
for(int i = 0; i < mapped; i++){
|
|
||||||
byte type = stream.readByte();
|
|
||||||
short total = stream.readShort();
|
|
||||||
|
|
||||||
for(int j = 0; j < total; j++){
|
|
||||||
String name = stream.readUTF();
|
|
||||||
if(type == 1){
|
|
||||||
Block res = content.getByName(ContentType.block, fallback.get(name, name));
|
|
||||||
idmap.put(j, res == null ? Blocks.air : res);
|
|
||||||
namemap.put(j, fallback.get(name, name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//read floor and create tiles first
|
|
||||||
for(int i = 0; i < width * height; i++){
|
|
||||||
int x = i % width, y = i / width;
|
|
||||||
int floorid = stream.readUnsignedByte();
|
|
||||||
int oreid = stream.readUnsignedByte();
|
|
||||||
int consecutives = stream.readUnsignedByte();
|
|
||||||
|
|
||||||
Tile tile = tiles.get(x, y);
|
|
||||||
tile.setFloor((Floor)idmap.get(floorid));
|
|
||||||
tile.setOverlay(idmap.get(oreid));
|
|
||||||
|
|
||||||
for(int j = i + 1; j < i + 1 + consecutives; j++){
|
|
||||||
int newx = j % width, newy = j / width;
|
|
||||||
Tile newTile = tiles.get(newx, newy);
|
|
||||||
newTile.setFloor((Floor)idmap.get(floorid));
|
|
||||||
newTile.setOverlay(idmap.get(oreid));
|
|
||||||
}
|
|
||||||
|
|
||||||
i += consecutives;
|
|
||||||
}
|
|
||||||
|
|
||||||
//read blocks
|
|
||||||
for(int i = 0; i < width * height; i++){
|
|
||||||
int x = i % width, y = i / width;
|
|
||||||
int id = stream.readUnsignedByte();
|
|
||||||
Block block = idmap.get(id);
|
|
||||||
if(block == null) block = Blocks.air;
|
|
||||||
|
|
||||||
Tile tile = tiles.get(x, y);
|
|
||||||
//the spawn block is saved in the block tile layer in older maps, shift it to the overlay
|
|
||||||
if(block != Blocks.spawn){
|
|
||||||
tile.setBlock(block);
|
|
||||||
}else{
|
|
||||||
tile.setOverlay(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(namemap.get(id, "").equals("part")){
|
|
||||||
stream.readByte(); //link
|
|
||||||
}else if(tile.entity != null){
|
|
||||||
byte tr = stream.readByte();
|
|
||||||
stream.readShort(); //read health (which is actually irrelevant)
|
|
||||||
|
|
||||||
byte team = Pack.leftByte(tr);
|
|
||||||
byte rotation = Pack.rightByte(tr);
|
|
||||||
|
|
||||||
tile.setTeam(Team.all[team]);
|
|
||||||
tile.entity.health = tile.block().health;
|
|
||||||
tile.rotation(rotation);
|
|
||||||
|
|
||||||
if(tile.block() == Blocks.liquidSource || tile.block() == Blocks.unloader || tile.block() == Blocks.sorter){
|
|
||||||
stream.readByte(); //these blocks have an extra config byte, read it
|
|
||||||
}
|
|
||||||
}else{ //no entity/part, read consecutives
|
|
||||||
int consecutives = stream.readUnsignedByte();
|
|
||||||
|
|
||||||
for(int j = i + 1; j < i + 1 + consecutives; j++){
|
|
||||||
int newx = j % width, newy = j / width;
|
|
||||||
tiles.get(newx, newy).setBlock(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
i += consecutives;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}finally{
|
|
||||||
content.setTemporaryMapper(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Reads a pixmap in the 3.5 pixmap format. */
|
|
||||||
public static void readPixmap(Pixmap pixmap, Tile[][] tiles){
|
|
||||||
for(int x = 0; x < pixmap.getWidth(); x++){
|
|
||||||
for(int y = 0; y < pixmap.getHeight(); y++){
|
|
||||||
int color = pixmap.getPixel(x, pixmap.getHeight() - 1 - y);
|
|
||||||
LegacyBlock block = LegacyColorMapper.get(color);
|
|
||||||
Tile tile = tiles[x][y];
|
|
||||||
|
|
||||||
tile.setFloor(block.floor);
|
|
||||||
tile.setBlock(block.wall);
|
|
||||||
if(block.ore != null) tile.setOverlay(block.ore);
|
|
||||||
|
|
||||||
//place core
|
|
||||||
if(color == Color.rgba8888(Color.green)){
|
|
||||||
//actual core parts
|
|
||||||
tile.setBlock(Blocks.coreShard);
|
|
||||||
tile.setTeam(Team.sharded);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
package io.anuke.mindustry.io.versions;
|
|
||||||
|
|
||||||
import io.anuke.arc.func.Prov;
|
|
||||||
import io.anuke.mindustry.entities.type.Bullet;
|
|
||||||
import io.anuke.mindustry.entities.effect.*;
|
|
||||||
import io.anuke.mindustry.entities.type.Player;
|
|
||||||
import io.anuke.mindustry.entities.type.base.*;
|
|
||||||
|
|
||||||
/*
|
|
||||||
Latest data: [build 81]
|
|
||||||
|
|
||||||
0 = Player
|
|
||||||
1 = Fire
|
|
||||||
2 = Puddle
|
|
||||||
3 = Draug
|
|
||||||
4 = Spirit
|
|
||||||
5 = Phantom
|
|
||||||
6 = Dagger
|
|
||||||
7 = Crawler
|
|
||||||
8 = Titan
|
|
||||||
9 = Fortress
|
|
||||||
10 = Eruptor
|
|
||||||
11 = Wraith
|
|
||||||
12 = Ghoul
|
|
||||||
13 = Revenant
|
|
||||||
|
|
||||||
Before removal of lightining/bullet: [build 80]
|
|
||||||
|
|
||||||
0 = Player
|
|
||||||
1 = Fire
|
|
||||||
2 = Puddle
|
|
||||||
3 = Bullet
|
|
||||||
4 = Lightning
|
|
||||||
5 = Draug
|
|
||||||
6 = Spirit
|
|
||||||
7 = Phantom
|
|
||||||
8 = Dagger
|
|
||||||
9 = Crawler
|
|
||||||
10 = Titan
|
|
||||||
11 = Fortress
|
|
||||||
12 = Eruptor
|
|
||||||
13 = Wraith
|
|
||||||
14 = Ghoul
|
|
||||||
15 = Revenant
|
|
||||||
|
|
||||||
Before addition of new units: [build 79 and below]
|
|
||||||
|
|
||||||
0 = Player
|
|
||||||
1 = Fire
|
|
||||||
2 = Puddle
|
|
||||||
3 = Bullet
|
|
||||||
4 = Lightning
|
|
||||||
5 = Spirit
|
|
||||||
6 = Dagger
|
|
||||||
7 = Crawler
|
|
||||||
8 = Titan
|
|
||||||
9 = Fortress
|
|
||||||
10 = Eruptor
|
|
||||||
11 = Wraith
|
|
||||||
12 = Ghoul
|
|
||||||
13 = Phantom
|
|
||||||
14 = Revenant
|
|
||||||
*/
|
|
||||||
public class LegacyTypeTable{
|
|
||||||
private static final Prov[] build81Table = {
|
|
||||||
Player::new,
|
|
||||||
Fire::new,
|
|
||||||
Puddle::new,
|
|
||||||
Draug::new,
|
|
||||||
Spirit::new,
|
|
||||||
Phantom::new,
|
|
||||||
Dagger::new,
|
|
||||||
Crawler::new,
|
|
||||||
Titan::new,
|
|
||||||
Fortress::new,
|
|
||||||
Eruptor::new,
|
|
||||||
Wraith::new,
|
|
||||||
Ghoul::new,
|
|
||||||
Revenant::new
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final Prov[] build80Table = {
|
|
||||||
Player::new,
|
|
||||||
Fire::new,
|
|
||||||
Puddle::new,
|
|
||||||
Bullet::new, //TODO reading these may crash
|
|
||||||
Lightning::new,
|
|
||||||
Draug::new,
|
|
||||||
Spirit::new,
|
|
||||||
Phantom::new,
|
|
||||||
Dagger::new,
|
|
||||||
Crawler::new,
|
|
||||||
Titan::new,
|
|
||||||
Fortress::new,
|
|
||||||
Eruptor::new,
|
|
||||||
Wraith::new,
|
|
||||||
Ghoul::new,
|
|
||||||
Revenant::new
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final Prov[] build79Table = {
|
|
||||||
Player::new,
|
|
||||||
Fire::new,
|
|
||||||
Puddle::new,
|
|
||||||
Bullet::new, //TODO reading these may crash
|
|
||||||
Lightning::new,
|
|
||||||
Spirit::new,
|
|
||||||
Dagger::new,
|
|
||||||
Crawler::new,
|
|
||||||
Titan::new,
|
|
||||||
Fortress::new,
|
|
||||||
Eruptor::new,
|
|
||||||
Wraith::new,
|
|
||||||
Ghoul::new,
|
|
||||||
Phantom::new,
|
|
||||||
Revenant::new
|
|
||||||
};
|
|
||||||
|
|
||||||
public static Prov[] getTable(int build){
|
|
||||||
if(build == -1 || build == 81){
|
|
||||||
//return most recent one since that's probably it; not guaranteed
|
|
||||||
return build81Table;
|
|
||||||
}else if(build == 80){
|
|
||||||
return build80Table;
|
|
||||||
}else{
|
|
||||||
return build79Table;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
package io.anuke.mindustry.mod;
|
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
|
||||||
import io.anuke.arc.collection.*;
|
|
||||||
import io.anuke.arc.graphics.*;
|
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
|
||||||
import io.anuke.arc.math.*;
|
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
|
||||||
import io.anuke.arc.util.*;
|
|
||||||
import io.anuke.mindustry.graphics.*;
|
|
||||||
import io.anuke.mindustry.mod.Mods.*;
|
|
||||||
import io.anuke.mindustry.ui.*;
|
|
||||||
|
|
||||||
public class ModCrashHandler{
|
|
||||||
|
|
||||||
public static void handle(Throwable t){
|
|
||||||
Array<Throwable> list = Strings.getCauses(t);
|
|
||||||
Throwable modCause = list.find(e -> e instanceof ModLoadException);
|
|
||||||
|
|
||||||
if(modCause != null && Fonts.outline != null){
|
|
||||||
String text = "[scarlet][[A fatal crash has occured while loading a mod!][]\n\nReason:[accent] " + modCause.getMessage();
|
|
||||||
String bottom = "[scarlet]The associated mod has been disabled. Swipe out of the app and launch it again.";
|
|
||||||
GlyphLayout layout = new GlyphLayout();
|
|
||||||
Core.atlas = TextureAtlas.blankAtlas();
|
|
||||||
Colors.put("accent", Pal.accent);
|
|
||||||
|
|
||||||
Core.app.addListener(new ApplicationListener(){
|
|
||||||
@Override
|
|
||||||
public void update(){
|
|
||||||
Core.graphics.clear(0.1f, 0.1f, 0.1f, 1f);
|
|
||||||
float rad = Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / 2f / 1.3f;
|
|
||||||
Draw.color(Color.scarlet, Color.black, Mathf.absin(Core.graphics.getFrameId(), 15f, 0.6f));
|
|
||||||
Lines.stroke(Scl.scl(40f));
|
|
||||||
//Lines.poly2(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f, 3, rad, 0f);
|
|
||||||
float cx = Core.graphics.getWidth()/2f, cy = Core.graphics.getHeight()/2f;
|
|
||||||
for(int i = 0; i < 3; i++){
|
|
||||||
float angle1 = i * 120f + 90f;
|
|
||||||
float angle2 = (i + 1) * 120f + 90f;
|
|
||||||
Tmp.v1.trnsExact(angle1, rad - Lines.getStroke()/2f).add(cx, cy);
|
|
||||||
Tmp.v2.trnsExact(angle2, rad - Lines.getStroke()/2f).add(cx, cy);
|
|
||||||
Tmp.v3.trnsExact(angle1, rad + Lines.getStroke()/2f).add(cx, cy);
|
|
||||||
Tmp.v4.trnsExact(angle2, rad + Lines.getStroke()/2f).add(cx, cy);
|
|
||||||
Fill.quad(Tmp.v1.x, Tmp.v1.y, Tmp.v2.x, Tmp.v2.y, Tmp.v4.x, Tmp.v4.y, Tmp.v3.x, Tmp.v3.y);
|
|
||||||
}
|
|
||||||
Lines.lineAngleCenter(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f - Scl.scl(5f), 90f, rad/3.1f);
|
|
||||||
Fill.square(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f + rad/2f - Scl.scl(15f), Lines.getStroke()/2f);
|
|
||||||
Draw.reset();
|
|
||||||
|
|
||||||
Fonts.outline.getData().markupEnabled = true;
|
|
||||||
layout.setText(Fonts.outline, text, Color.white, Core.graphics.getWidth(), Align.left, true);
|
|
||||||
Fonts.outline.draw(text, Core.graphics.getWidth()/2f - layout.width/2f, Core.graphics.getHeight() - Scl.scl(50f), Core.graphics.getWidth(), Align.left, true);
|
|
||||||
|
|
||||||
layout.setText(Fonts.outline, bottom, Color.white, Core.graphics.getWidth(), Align.left, true);
|
|
||||||
Fonts.outline.draw(bottom, Core.graphics.getWidth()/2f - layout.width/2f, layout.height + Scl.scl(10f), Core.graphics.getWidth(), Align.left, true);
|
|
||||||
Draw.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void resize(int width, int height){
|
|
||||||
Draw.proj().setOrtho(0, 0, width, height);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}else{
|
|
||||||
throw new RuntimeException(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package io.anuke.mindustry.plugin;
|
|
||||||
|
|
||||||
import io.anuke.mindustry.mod.*;
|
|
||||||
|
|
||||||
public abstract class Plugin extends Mod{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.world.producers;
|
|
||||||
|
|
||||||
public class Produce{
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.world.producers;
|
|
||||||
|
|
||||||
public class ProduceItem{
|
|
||||||
}
|
|
||||||
@@ -1,26 +1,26 @@
|
|||||||
package io.anuke.mindustry;
|
package mindustry;
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
import arc.*;
|
||||||
import io.anuke.arc.assets.*;
|
import arc.assets.*;
|
||||||
import io.anuke.arc.assets.loaders.*;
|
import arc.assets.loaders.*;
|
||||||
import io.anuke.arc.audio.*;
|
import arc.audio.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.*;
|
import arc.math.*;
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.arc.util.async.*;
|
import arc.util.async.*;
|
||||||
import io.anuke.mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import io.anuke.mindustry.ctype.Content;
|
import mindustry.ctype.Content;
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.maps.*;
|
import mindustry.maps.*;
|
||||||
import io.anuke.mindustry.mod.*;
|
import mindustry.mod.*;
|
||||||
import io.anuke.mindustry.net.Net;
|
import mindustry.net.Net;
|
||||||
|
|
||||||
import static io.anuke.arc.Core.*;
|
import static arc.Core.*;
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public abstract class ClientLauncher extends ApplicationCore implements Platform{
|
public abstract class ClientLauncher extends ApplicationCore implements Platform{
|
||||||
private static final int loadingFPS = 20;
|
private static final int loadingFPS = 20;
|
||||||
@@ -32,8 +32,8 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setup(){
|
public void setup(){
|
||||||
|
Vars.loadLogger();
|
||||||
Vars.platform = this;
|
Vars.platform = this;
|
||||||
Log.setUseColors(false);
|
|
||||||
beginTime = Time.millis();
|
beginTime = Time.millis();
|
||||||
|
|
||||||
Time.setDeltaProvider(() -> {
|
Time.setDeltaProvider(() -> {
|
||||||
@@ -70,8 +70,11 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
Sounds.load();
|
Sounds.load();
|
||||||
|
|
||||||
assets.loadRun("contentcreate", Content.class, () -> {
|
assets.loadRun("contentcreate", Content.class, () -> {
|
||||||
content.createContent();
|
content.createBaseContent();
|
||||||
content.loadColors();
|
content.loadColors();
|
||||||
|
}, () -> {
|
||||||
|
mods.loadScripts();
|
||||||
|
content.createModContent();
|
||||||
});
|
});
|
||||||
|
|
||||||
add(logic = new Logic());
|
add(logic = new Logic());
|
||||||
@@ -120,7 +123,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
for(ApplicationListener listener : modules){
|
for(ApplicationListener listener : modules){
|
||||||
listener.init();
|
listener.init();
|
||||||
}
|
}
|
||||||
mods.each(Mod::init);
|
mods.eachClass(Mod::init);
|
||||||
finished = true;
|
finished = true;
|
||||||
Events.fire(new ClientLoadEvent());
|
Events.fire(new ClientLoadEvent());
|
||||||
super.resize(graphics.getWidth(), graphics.getHeight());
|
super.resize(graphics.getWidth(), graphics.getHeight());
|
||||||
@@ -193,7 +196,8 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
|
|
||||||
if(assets.getCurrentLoading() != null){
|
if(assets.getCurrentLoading() != null){
|
||||||
String name = assets.getCurrentLoading().fileName.toLowerCase();
|
String name = assets.getCurrentLoading().fileName.toLowerCase();
|
||||||
String key = name.contains("content") ? "content" : name.contains("mod") ? "mods" : name.contains("msav") || name.contains("maps") ? "map" : name.contains("ogg") || name.contains("mp3") ? "sound" : name.contains("png") ? "image" : "system";
|
String key = name.contains("script") ? "scripts" : name.contains("content") ? "content" : name.contains("mod") ? "mods" : name.contains("msav") ||
|
||||||
|
name.contains("maps") ? "map" : name.contains("ogg") || name.contains("mp3") ? "sound" : name.contains("png") ? "image" : "system";
|
||||||
font.draw(bundle.get("load." + key, ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f - height / 2f - Scl.scl(10f), Align.center);
|
font.draw(bundle.get("load." + key, ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f - height / 2f - Scl.scl(10f), Align.center);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,36 +1,40 @@
|
|||||||
package io.anuke.mindustry;
|
package mindustry;
|
||||||
|
|
||||||
import io.anuke.arc.Application.*;
|
import arc.*;
|
||||||
import io.anuke.arc.*;
|
import arc.Application.*;
|
||||||
import io.anuke.arc.assets.*;
|
import arc.assets.*;
|
||||||
import io.anuke.arc.collection.*;
|
import arc.struct.*;
|
||||||
import io.anuke.arc.files.*;
|
import arc.files.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.mindustry.ai.*;
|
import arc.util.io.*;
|
||||||
import io.anuke.mindustry.core.*;
|
import mindustry.ai.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import mindustry.core.*;
|
||||||
import io.anuke.mindustry.entities.effect.*;
|
import mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import mindustry.entities.effect.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import mindustry.game.*;
|
||||||
import io.anuke.mindustry.input.*;
|
import mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.maps.*;
|
import mindustry.gen.*;
|
||||||
import io.anuke.mindustry.mod.*;
|
import mindustry.input.*;
|
||||||
import io.anuke.mindustry.net.Net;
|
import mindustry.maps.*;
|
||||||
import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
|
import mindustry.mod.*;
|
||||||
|
import mindustry.net.Net;
|
||||||
|
import mindustry.world.blocks.defense.ForceProjector.*;
|
||||||
|
|
||||||
import java.nio.charset.*;
|
import java.nio.charset.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static io.anuke.arc.Core.*;
|
import static arc.Core.settings;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class Vars implements Loadable{
|
public class Vars implements Loadable{
|
||||||
/** Whether to load locales.*/
|
/** Whether to load locales.*/
|
||||||
public static boolean loadLocales = true;
|
public static boolean loadLocales = true;
|
||||||
|
/** Whether the logger is loaded. */
|
||||||
|
public static boolean loadedLogger = false;
|
||||||
/** Maximum schematic size.*/
|
/** Maximum schematic size.*/
|
||||||
public static final int maxSchematicSize = 32;
|
public static final int maxSchematicSize = 32;
|
||||||
/** All schematic base64 starts with this string.*/
|
/** All schematic base64 starts with this string.*/
|
||||||
@@ -57,10 +61,6 @@ public class Vars implements Loadable{
|
|||||||
public static final Array<String> defaultServers = Array.with();
|
public static final Array<String> defaultServers = Array.with();
|
||||||
/** maximum distance between mine and core that supports automatic transferring */
|
/** maximum distance between mine and core that supports automatic transferring */
|
||||||
public static final float mineTransferRange = 220f;
|
public static final float mineTransferRange = 220f;
|
||||||
/** team of the player by default */
|
|
||||||
public static final Team defaultTeam = Team.sharded;
|
|
||||||
/** team of the enemy in waves/sectors */
|
|
||||||
public static final Team waveTeam = Team.crux;
|
|
||||||
/** whether to enable editing of units in the editor */
|
/** whether to enable editing of units in the editor */
|
||||||
public static final boolean enableUnitEditing = false;
|
public static final boolean enableUnitEditing = false;
|
||||||
/** max chat message length */
|
/** max chat message length */
|
||||||
@@ -118,22 +118,24 @@ public class Vars implements Loadable{
|
|||||||
public static boolean headless;
|
public static boolean headless;
|
||||||
/** whether steam is enabled for this game */
|
/** whether steam is enabled for this game */
|
||||||
public static boolean steam;
|
public static boolean steam;
|
||||||
/** application data directory, equivalent to {@link io.anuke.arc.Settings#getDataDirectory()} */
|
/** whether typing into the console is enabled - developers only */
|
||||||
public static FileHandle dataDirectory;
|
public static boolean enableConsole = false;
|
||||||
|
/** application data directory, equivalent to {@link Settings#getDataDirectory()} */
|
||||||
|
public static Fi dataDirectory;
|
||||||
/** data subdirectory used for screenshots */
|
/** data subdirectory used for screenshots */
|
||||||
public static FileHandle screenshotDirectory;
|
public static Fi screenshotDirectory;
|
||||||
/** data subdirectory used for custom mmaps */
|
/** data subdirectory used for custom maps */
|
||||||
public static FileHandle customMapDirectory;
|
public static Fi customMapDirectory;
|
||||||
/** data subdirectory used for custom mmaps */
|
/** data subdirectory used for custom map previews */
|
||||||
public static FileHandle mapPreviewDirectory;
|
public static Fi mapPreviewDirectory;
|
||||||
/** tmp subdirectory for map conversion */
|
/** tmp subdirectory for map conversion */
|
||||||
public static FileHandle tmpDirectory;
|
public static Fi tmpDirectory;
|
||||||
/** data subdirectory used for saves */
|
/** data subdirectory used for saves */
|
||||||
public static FileHandle saveDirectory;
|
public static Fi saveDirectory;
|
||||||
/** data subdirectory used for mods */
|
/** data subdirectory used for mods */
|
||||||
public static FileHandle modDirectory;
|
public static Fi modDirectory;
|
||||||
/** data subdirectory used for schematics */
|
/** data subdirectory used for schematics */
|
||||||
public static FileHandle schematicDirectory;
|
public static Fi schematicDirectory;
|
||||||
/** map file extension */
|
/** map file extension */
|
||||||
public static final String mapExtension = "msav";
|
public static final String mapExtension = "msav";
|
||||||
/** save file extension */
|
/** save file extension */
|
||||||
@@ -178,7 +180,7 @@ public class Vars implements Loadable{
|
|||||||
public static EntityGroup<ShieldEntity> shieldGroup;
|
public static EntityGroup<ShieldEntity> shieldGroup;
|
||||||
public static EntityGroup<Puddle> puddleGroup;
|
public static EntityGroup<Puddle> puddleGroup;
|
||||||
public static EntityGroup<Fire> fireGroup;
|
public static EntityGroup<Fire> fireGroup;
|
||||||
public static EntityGroup<BaseUnit>[] unitGroups;
|
public static EntityGroup<BaseUnit> unitGroup;
|
||||||
|
|
||||||
public static Player player;
|
public static Player player;
|
||||||
|
|
||||||
@@ -190,6 +192,7 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
Serialization.init();
|
Serialization.init();
|
||||||
|
DefaultSerializers.typeMappings.put("mindustry.type.ContentType", "mindustry.ctype.ContentType");
|
||||||
|
|
||||||
if(loadLocales){
|
if(loadLocales){
|
||||||
//load locales
|
//load locales
|
||||||
@@ -232,11 +235,7 @@ public class Vars implements Loadable{
|
|||||||
puddleGroup = entities.add(Puddle.class).enableMapping();
|
puddleGroup = entities.add(Puddle.class).enableMapping();
|
||||||
shieldGroup = entities.add(ShieldEntity.class, false);
|
shieldGroup = entities.add(ShieldEntity.class, false);
|
||||||
fireGroup = entities.add(Fire.class).enableMapping();
|
fireGroup = entities.add(Fire.class).enableMapping();
|
||||||
unitGroups = new EntityGroup[Team.all.length];
|
unitGroup = entities.add(BaseUnit.class).enableMapping();
|
||||||
|
|
||||||
for(Team team : Team.all){
|
|
||||||
unitGroups[team.ordinal()] = entities.add(BaseUnit.class).enableMapping();
|
|
||||||
}
|
|
||||||
|
|
||||||
for(EntityGroup<?> group : entities.all()){
|
for(EntityGroup<?> group : entities.all()){
|
||||||
group.setRemoveListener(entity -> {
|
group.setRemoveListener(entity -> {
|
||||||
@@ -268,6 +267,31 @@ public class Vars implements Loadable{
|
|||||||
maps.load();
|
maps.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void loadLogger(){
|
||||||
|
if(loadedLogger) return;
|
||||||
|
|
||||||
|
String[] tags = {"[green][D][]", "[royal][I][]", "[yellow][W][]", "[scarlet][E][]", ""};
|
||||||
|
String[] stags = {"&lc&fb[D]", "&lg&fb[I]", "&ly&fb[W]", "&lr&fb[E]", ""};
|
||||||
|
|
||||||
|
Array<String> logBuffer = new Array<>();
|
||||||
|
Log.setLogger((level, text, args) -> {
|
||||||
|
String result = Log.format(text, args);
|
||||||
|
System.out.println(Log.format(stags[level.ordinal()] + "&fr " + text, args));
|
||||||
|
|
||||||
|
result = tags[level.ordinal()] + " " + result;
|
||||||
|
|
||||||
|
if(!headless && (ui == null || ui.scriptfrag == null)){
|
||||||
|
logBuffer.add(result);
|
||||||
|
}else if(!headless){
|
||||||
|
ui.scriptfrag.addMessage(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Events.on(ClientLoadEvent.class, e -> logBuffer.each(ui.scriptfrag::addMessage));
|
||||||
|
|
||||||
|
loadedLogger = true;
|
||||||
|
}
|
||||||
|
|
||||||
public static void loadSettings(){
|
public static void loadSettings(){
|
||||||
Core.settings.setAppName(appName);
|
Core.settings.setAppName(appName);
|
||||||
|
|
||||||
@@ -275,7 +299,7 @@ public class Vars implements Loadable{
|
|||||||
Core.settings.setDataDirectory(Core.files.local("saves/"));
|
Core.settings.setDataDirectory(Core.files.local("saves/"));
|
||||||
}
|
}
|
||||||
|
|
||||||
Core.settings.defaults("locale", "default");
|
Core.settings.defaults("locale", "default", "blocksync", true);
|
||||||
Core.keybinds.setDefaults(Binding.values());
|
Core.keybinds.setDefaults(Binding.values());
|
||||||
Core.settings.load();
|
Core.settings.load();
|
||||||
|
|
||||||
@@ -285,7 +309,7 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
try{
|
try{
|
||||||
//try loading external bundle
|
//try loading external bundle
|
||||||
FileHandle handle = Core.files.local("bundle");
|
Fi handle = Core.files.local("bundle");
|
||||||
|
|
||||||
Locale locale = Locale.ENGLISH;
|
Locale locale = Locale.ENGLISH;
|
||||||
Core.bundle = I18NBundle.createBundle(handle, locale);
|
Core.bundle = I18NBundle.createBundle(handle, locale);
|
||||||
@@ -298,7 +322,7 @@ public class Vars implements Loadable{
|
|||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
//no external bundle found
|
//no external bundle found
|
||||||
|
|
||||||
FileHandle handle = Core.files.internal("bundles/bundle");
|
Fi handle = Core.files.internal("bundles/bundle");
|
||||||
Locale locale;
|
Locale locale;
|
||||||
String loc = Core.settings.getString("locale");
|
String loc = Core.settings.getString("locale");
|
||||||
if(loc.equals("default")){
|
if(loc.equals("default")){
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
package io.anuke.mindustry.ai;
|
package mindustry.ai;
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
import arc.*;
|
||||||
import io.anuke.arc.collection.*;
|
import arc.func.*;
|
||||||
import io.anuke.arc.func.*;
|
import arc.math.*;
|
||||||
import io.anuke.arc.math.*;
|
import arc.math.geom.*;
|
||||||
import io.anuke.arc.math.geom.*;
|
import arc.struct.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import io.anuke.mindustry.game.Teams.*;
|
import mindustry.game.Teams.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.blocks.*;
|
import mindustry.world.blocks.*;
|
||||||
import io.anuke.mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
/** Class used for indexing special target blocks for AI. */
|
/** Class used for indexing special target blocks for AI. */
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@@ -30,15 +30,15 @@ public class BlockIndexer{
|
|||||||
private final ObjectSet<Item> itemSet = new ObjectSet<>();
|
private final ObjectSet<Item> itemSet = new ObjectSet<>();
|
||||||
/** Stores all ore quadtrants on the map. */
|
/** Stores all ore quadtrants on the map. */
|
||||||
private ObjectMap<Item, ObjectSet<Tile>> ores = new ObjectMap<>();
|
private ObjectMap<Item, ObjectSet<Tile>> ores = new ObjectMap<>();
|
||||||
/** Tags all quadrants. */
|
/** Maps each team ID to a quarant. A quadrant is a grid of bits, where each bit is set if and only if there is a block of that team in that quadrant. */
|
||||||
private GridBits[] structQuadrants;
|
private GridBits[] structQuadrants;
|
||||||
/** Stores all damaged tile entities by team. */
|
/** Stores all damaged tile entities by team. */
|
||||||
private ObjectSet<Tile>[] damagedTiles = new ObjectSet[Team.all.length];
|
private ObjectSet<Tile>[] damagedTiles = new ObjectSet[Team.all().length];
|
||||||
/**All ores available on this map.*/
|
/**All ores available on this map.*/
|
||||||
private ObjectSet<Item> allOres = new ObjectSet<>();
|
private ObjectSet<Item> allOres = new ObjectSet<>();
|
||||||
|
|
||||||
/** Maps teams to a map of flagged tiles by type. */
|
/** Maps teams to a map of flagged tiles by type. */
|
||||||
private ObjectSet<Tile>[][] flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length];
|
private ObjectSet<Tile>[][] flagMap = new ObjectSet[Team.all().length][BlockFlag.all.length];
|
||||||
/** Maps tile positions to their last known tile index data. */
|
/** Maps tile positions to their last known tile index data. */
|
||||||
private IntMap<TileIndex> typeMap = new IntMap<>();
|
private IntMap<TileIndex> typeMap = new IntMap<>();
|
||||||
/** Empty set used for returning. */
|
/** Empty set used for returning. */
|
||||||
@@ -61,8 +61,8 @@ public class BlockIndexer{
|
|||||||
Events.on(WorldLoadEvent.class, event -> {
|
Events.on(WorldLoadEvent.class, event -> {
|
||||||
scanOres.clear();
|
scanOres.clear();
|
||||||
scanOres.addAll(Item.getAllOres());
|
scanOres.addAll(Item.getAllOres());
|
||||||
damagedTiles = new ObjectSet[Team.all.length];
|
damagedTiles = new ObjectSet[Team.all().length];
|
||||||
flagMap = new ObjectSet[Team.all.length][BlockFlag.all.length];
|
flagMap = new ObjectSet[Team.all().length][BlockFlag.all.length];
|
||||||
|
|
||||||
for(int i = 0; i < flagMap.length; i++){
|
for(int i = 0; i < flagMap.length; i++){
|
||||||
for(int j = 0; j < BlockFlag.all.length; j++){
|
for(int j = 0; j < BlockFlag.all.length; j++){
|
||||||
@@ -75,10 +75,7 @@ public class BlockIndexer{
|
|||||||
ores = null;
|
ores = null;
|
||||||
|
|
||||||
//create bitset for each team type that contains each quadrant
|
//create bitset for each team type that contains each quadrant
|
||||||
structQuadrants = new GridBits[Team.all.length];
|
structQuadrants = new GridBits[Team.all().length];
|
||||||
for(int i = 0; i < Team.all.length; i++){
|
|
||||||
structQuadrants[i] = new GridBits(Mathf.ceil(world.width() / (float)quadrantSize), Mathf.ceil(world.height() / (float)quadrantSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int x = 0; x < world.width(); x++){
|
for(int x = 0; x < world.width(); x++){
|
||||||
for(int y = 0; y < world.height(); y++){
|
for(int y = 0; y < world.height(); y++){
|
||||||
@@ -105,7 +102,31 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ObjectSet<Tile>[] getFlagged(Team team){
|
private ObjectSet<Tile>[] getFlagged(Team team){
|
||||||
return flagMap[team.ordinal()];
|
return flagMap[team.id];
|
||||||
|
}
|
||||||
|
|
||||||
|
private GridBits structQuadrant(Team t){
|
||||||
|
if(structQuadrants[t.id] == null){
|
||||||
|
structQuadrants[t.id] = new GridBits(Mathf.ceil(world.width() / (float)quadrantSize), Mathf.ceil(world.height() / (float)quadrantSize));
|
||||||
|
}
|
||||||
|
return structQuadrants[t.id];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Updates all the structure quadrants for a newly activated team. */
|
||||||
|
public void updateTeamIndex(Team team){
|
||||||
|
if(structQuadrants == null) return;
|
||||||
|
|
||||||
|
//go through every tile... ouch
|
||||||
|
for(int x = 0; x < world.width(); x++){
|
||||||
|
for(int y = 0; y < world.height(); y++){
|
||||||
|
Tile tile = world.tile(x, y);
|
||||||
|
if(tile.getTeam() == team){
|
||||||
|
int quadrantX = tile.x / quadrantSize;
|
||||||
|
int quadrantY = tile.y / quadrantSize;
|
||||||
|
structQuadrant(team).set(quadrantX, quadrantY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return whether this item is present on this map.*/
|
/** @return whether this item is present on this map.*/
|
||||||
@@ -117,11 +138,11 @@ public class BlockIndexer{
|
|||||||
public ObjectSet<Tile> getDamaged(Team team){
|
public ObjectSet<Tile> getDamaged(Team team){
|
||||||
returnArray.clear();
|
returnArray.clear();
|
||||||
|
|
||||||
if(damagedTiles[team.ordinal()] == null){
|
if(damagedTiles[team.id] == null){
|
||||||
damagedTiles[team.ordinal()] = new ObjectSet<>();
|
damagedTiles[team.id] = new ObjectSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectSet<Tile> set = damagedTiles[team.ordinal()];
|
ObjectSet<Tile> set = damagedTiles[team.id];
|
||||||
for(Tile tile : set){
|
for(Tile tile : set){
|
||||||
if((tile.entity == null || tile.entity.getTeam() != team || !tile.entity.damaged()) || tile.block() instanceof BuildBlock){
|
if((tile.entity == null || tile.entity.getTeam() != team || !tile.entity.damaged()) || tile.block() instanceof BuildBlock){
|
||||||
returnArray.add(tile);
|
returnArray.add(tile);
|
||||||
@@ -137,7 +158,7 @@ public class BlockIndexer{
|
|||||||
|
|
||||||
/** Get all allied blocks with a flag. */
|
/** Get all allied blocks with a flag. */
|
||||||
public ObjectSet<Tile> getAllied(Team team, BlockFlag type){
|
public ObjectSet<Tile> getAllied(Team team, BlockFlag type){
|
||||||
return flagMap[team.ordinal()][type.ordinal()];
|
return flagMap[team.id][type.ordinal()];
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean eachBlock(TeamTrait trait, float range, Boolf<Tile> pred, Cons<Tile> cons){
|
public boolean eachBlock(TeamTrait trait, float range, Boolf<Tile> pred, Cons<Tile> cons){
|
||||||
@@ -176,7 +197,7 @@ public class BlockIndexer{
|
|||||||
/** Get all enemy blocks with a flag. */
|
/** Get all enemy blocks with a flag. */
|
||||||
public Array<Tile> getEnemy(Team team, BlockFlag type){
|
public Array<Tile> getEnemy(Team team, BlockFlag type){
|
||||||
returnArray.clear();
|
returnArray.clear();
|
||||||
for(Team enemy : state.teams.enemiesOf(team)){
|
for(Team enemy : team.enemies()){
|
||||||
if(state.teams.isActive(enemy)){
|
if(state.teams.isActive(enemy)){
|
||||||
ObjectSet<Tile> set = getFlagged(enemy)[type.ordinal()];
|
ObjectSet<Tile> set = getFlagged(enemy)[type.ordinal()];
|
||||||
if(set != null){
|
if(set != null){
|
||||||
@@ -190,11 +211,11 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void notifyTileDamaged(TileEntity entity){
|
public void notifyTileDamaged(TileEntity entity){
|
||||||
if(damagedTiles[entity.getTeam().ordinal()] == null){
|
if(damagedTiles[(int)entity.getTeam().id] == null){
|
||||||
damagedTiles[entity.getTeam().ordinal()] = new ObjectSet<>();
|
damagedTiles[(int)entity.getTeam().id] = new ObjectSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectSet<Tile> set = damagedTiles[entity.getTeam().ordinal()];
|
ObjectSet<Tile> set = damagedTiles[(int)entity.getTeam().id];
|
||||||
set.add(entity.tile);
|
set.add(entity.tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,16 +338,16 @@ public class BlockIndexer{
|
|||||||
int quadrantY = tile.y / quadrantSize;
|
int quadrantY = tile.y / quadrantSize;
|
||||||
int index = quadrantX + quadrantY * quadWidth();
|
int index = quadrantX + quadrantY * quadWidth();
|
||||||
|
|
||||||
for(Team team : Team.all){
|
for(TeamData data : state.teams.getActive()){
|
||||||
TeamData data = state.teams.get(team);
|
GridBits bits = structQuadrant(data.team);
|
||||||
|
|
||||||
//fast-set this quadrant to 'occupied' if the tile just placed is already of this team
|
//fast-set this quadrant to 'occupied' if the tile just placed is already of this team
|
||||||
if(tile.getTeam() == data.team && tile.entity != null && tile.block().targetable){
|
if(tile.getTeam() == data.team && tile.entity != null && tile.block().targetable){
|
||||||
structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY);
|
bits.set(quadrantX, quadrantY);
|
||||||
continue; //no need to process futher
|
continue; //no need to process futher
|
||||||
}
|
}
|
||||||
|
|
||||||
structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY, false);
|
bits.set(quadrantX, quadrantY, false);
|
||||||
|
|
||||||
outer:
|
outer:
|
||||||
for(int x = quadrantX * quadrantSize; x < world.width() && x < (quadrantX + 1) * quadrantSize; x++){
|
for(int x = quadrantX * quadrantSize; x < world.width() && x < (quadrantX + 1) * quadrantSize; x++){
|
||||||
@@ -334,7 +355,7 @@ public class BlockIndexer{
|
|||||||
Tile result = world.ltile(x, y);
|
Tile result = world.ltile(x, y);
|
||||||
//when a targetable block is found, mark this quadrant as occupied and stop searching
|
//when a targetable block is found, mark this quadrant as occupied and stop searching
|
||||||
if(result.entity != null && result.getTeam() == data.team){
|
if(result.entity != null && result.getTeam() == data.team){
|
||||||
structQuadrants[data.team.ordinal()].set(quadrantX, quadrantY);
|
bits.set(quadrantX, quadrantY);
|
||||||
break outer;
|
break outer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -343,7 +364,7 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean getQuad(Team team, int quadrantX, int quadrantY){
|
private boolean getQuad(Team team, int quadrantX, int quadrantY){
|
||||||
return structQuadrants[team.ordinal()].get(quadrantX, quadrantY);
|
return structQuadrant(team).get(quadrantX, quadrantY);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int quadWidth(){
|
private int quadWidth(){
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
package io.anuke.mindustry.ai;
|
package mindustry.ai;
|
||||||
|
|
||||||
import io.anuke.annotations.Annotations.*;
|
import arc.*;
|
||||||
import io.anuke.arc.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import io.anuke.arc.collection.*;
|
import arc.struct.*;
|
||||||
import io.anuke.arc.func.*;
|
import arc.func.*;
|
||||||
import io.anuke.arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
import io.anuke.arc.util.async.*;
|
import arc.util.async.*;
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class Pathfinder implements Runnable{
|
public class Pathfinder implements Runnable{
|
||||||
private static final long maxUpdate = Time.millisToNanos(4);
|
private static final long maxUpdate = Time.millisToNanos(4);
|
||||||
@@ -27,9 +27,9 @@ public class Pathfinder implements Runnable{
|
|||||||
/** unordered array of path data for iteration only. DO NOT iterate ot access this in the main thread.*/
|
/** unordered array of path data for iteration only. DO NOT iterate ot access this in the main thread.*/
|
||||||
private Array<PathData> list = new Array<>();
|
private Array<PathData> list = new Array<>();
|
||||||
/** Maps teams + flags to a valid path to get to that flag for that team. */
|
/** Maps teams + flags to a valid path to get to that flag for that team. */
|
||||||
private PathData[][] pathMap = new PathData[Team.all.length][PathTarget.all.length];
|
private PathData[][] pathMap = new PathData[Team.all().length][PathTarget.all.length];
|
||||||
/** Grid map of created path data that should not be queued again. */
|
/** Grid map of created path data that should not be queued again. */
|
||||||
private GridBits created = new GridBits(Team.all.length, PathTarget.all.length);
|
private GridBits created = new GridBits(Team.all().length, PathTarget.all.length);
|
||||||
/** handles task scheduling on the update thread. */
|
/** handles task scheduling on the update thread. */
|
||||||
private TaskQueue queue = new TaskQueue();
|
private TaskQueue queue = new TaskQueue();
|
||||||
/** current pathfinding thread */
|
/** current pathfinding thread */
|
||||||
@@ -42,8 +42,8 @@ public class Pathfinder implements Runnable{
|
|||||||
|
|
||||||
//reset and update internal tile array
|
//reset and update internal tile array
|
||||||
tiles = new int[world.width()][world.height()];
|
tiles = new int[world.width()][world.height()];
|
||||||
pathMap = new PathData[Team.all.length][PathTarget.all.length];
|
pathMap = new PathData[Team.all().length][PathTarget.all.length];
|
||||||
created = new GridBits(Team.all.length, PathTarget.all.length);
|
created = new GridBits(Team.all().length, PathTarget.all.length);
|
||||||
list = new Array<>();
|
list = new Array<>();
|
||||||
|
|
||||||
for(int x = 0; x < world.width(); x++){
|
for(int x = 0; x < world.width(); x++){
|
||||||
@@ -53,7 +53,7 @@ public class Pathfinder implements Runnable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//special preset which may help speed things up; this is optional
|
//special preset which may help speed things up; this is optional
|
||||||
preloadPath(waveTeam, PathTarget.enemyCores);
|
preloadPath(state.rules.waveTeam, PathTarget.enemyCores);
|
||||||
|
|
||||||
start();
|
start();
|
||||||
});
|
});
|
||||||
@@ -84,8 +84,8 @@ public class Pathfinder implements Runnable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int debugValue(Team team, int x, int y){
|
public int debugValue(Team team, int x, int y){
|
||||||
if(pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()] == null) return 0;
|
if(pathMap[team.id][PathTarget.enemyCores.ordinal()] == null) return 0;
|
||||||
return pathMap[team.ordinal()][PathTarget.enemyCores.ordinal()].weights[x][y];
|
return pathMap[team.id][PathTarget.enemyCores.ordinal()].weights[x][y];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Update a tile in the internal pathfinding grid. Causes a complete pathfinding reclaculation. */
|
/** Update a tile in the internal pathfinding grid. Causes a complete pathfinding reclaculation. */
|
||||||
@@ -149,12 +149,12 @@ public class Pathfinder implements Runnable{
|
|||||||
public Tile getTargetTile(Tile tile, Team team, PathTarget target){
|
public Tile getTargetTile(Tile tile, Team team, PathTarget target){
|
||||||
if(tile == null) return null;
|
if(tile == null) return null;
|
||||||
|
|
||||||
PathData data = pathMap[team.ordinal()][target.ordinal()];
|
PathData data = pathMap[team.id][target.ordinal()];
|
||||||
|
|
||||||
if(data == null){
|
if(data == null){
|
||||||
//if this combination is not found, create it on request
|
//if this combination is not found, create it on request
|
||||||
if(!created.get(team.ordinal(), target.ordinal())){
|
if(!created.get(team.id, target.ordinal())){
|
||||||
created.set(team.ordinal(), target.ordinal());
|
created.set(team.id, target.ordinal());
|
||||||
//grab targets since this is run on main thread
|
//grab targets since this is run on main thread
|
||||||
IntArray targets = target.getTargets(team, new IntArray());
|
IntArray targets = target.getTargets(team, new IntArray());
|
||||||
queue.post(() -> createPath(team, target, targets));
|
queue.post(() -> createPath(team, target, targets));
|
||||||
@@ -188,7 +188,7 @@ public class Pathfinder implements Runnable{
|
|||||||
/** @return whether a tile can be passed through by this team. Pathfinding thread only.*/
|
/** @return whether a tile can be passed through by this team. Pathfinding thread only.*/
|
||||||
private boolean passable(int x, int y, Team team){
|
private boolean passable(int x, int y, Team team){
|
||||||
int tile = tiles[x][y];
|
int tile = tiles[x][y];
|
||||||
return PathTile.passable(tile) || (PathTile.team(tile) != team.ordinal() && PathTile.team(tile) != Team.derelict.ordinal());
|
return PathTile.passable(tile) || (PathTile.team(tile) != team.id && PathTile.team(tile) != (int)Team.derelict.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -238,7 +238,7 @@ public class Pathfinder implements Runnable{
|
|||||||
PathData path = new PathData(team, target, world.width(), world.height());
|
PathData path = new PathData(team, target, world.width(), world.height());
|
||||||
|
|
||||||
list.add(path);
|
list.add(path);
|
||||||
pathMap[team.ordinal()][target.ordinal()] = path;
|
pathMap[team.id][target.ordinal()] = path;
|
||||||
|
|
||||||
//grab targets from passed array
|
//grab targets from passed array
|
||||||
synchronized(path.targets){
|
synchronized(path.targets){
|
||||||
@@ -303,7 +303,7 @@ public class Pathfinder implements Runnable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//spawn points are also enemies.
|
//spawn points are also enemies.
|
||||||
if(state.rules.waves && team == defaultTeam){
|
if(state.rules.waves && team == state.rules.defaultTeam){
|
||||||
for(Tile other : spawner.getGroundSpawns()){
|
for(Tile other : spawner.getGroundSpawns()){
|
||||||
out.add(other.pos());
|
out.add(other.pos());
|
||||||
}
|
}
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
package io.anuke.mindustry.ai;
|
package mindustry.ai;
|
||||||
|
|
||||||
import io.anuke.arc.Events;
|
import arc.Events;
|
||||||
import io.anuke.arc.collection.Array;
|
import arc.struct.Array;
|
||||||
import io.anuke.arc.func.Floatc2;
|
import arc.func.Floatc2;
|
||||||
import io.anuke.arc.math.Angles;
|
import arc.math.Angles;
|
||||||
import io.anuke.arc.math.Mathf;
|
import arc.math.Mathf;
|
||||||
import io.anuke.arc.util.Time;
|
import arc.util.Time;
|
||||||
import io.anuke.arc.util.Tmp;
|
import arc.util.Tmp;
|
||||||
import io.anuke.mindustry.content.Blocks;
|
import mindustry.content.Blocks;
|
||||||
import io.anuke.mindustry.content.Fx;
|
import mindustry.content.Fx;
|
||||||
import io.anuke.mindustry.entities.Damage;
|
import mindustry.entities.Damage;
|
||||||
import io.anuke.mindustry.entities.Effects;
|
import mindustry.entities.Effects;
|
||||||
import io.anuke.mindustry.entities.type.BaseUnit;
|
import mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
import mindustry.game.EventType.WorldLoadEvent;
|
||||||
import io.anuke.mindustry.game.SpawnGroup;
|
import mindustry.game.SpawnGroup;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import mindustry.world.Tile;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class WaveSpawner{
|
public class WaveSpawner{
|
||||||
private static final float margin = 40f, coreMargin = tilesize * 3; //how far away from the edge flying units spawn
|
private static final float margin = 40f, coreMargin = tilesize * 3; //how far away from the edge flying units spawn
|
||||||
@@ -53,7 +53,7 @@ public class WaveSpawner{
|
|||||||
|
|
||||||
eachFlyerSpawn((spawnX, spawnY) -> {
|
eachFlyerSpawn((spawnX, spawnY) -> {
|
||||||
for(int i = 0; i < spawned; i++){
|
for(int i = 0; i < spawned; i++){
|
||||||
BaseUnit unit = group.createUnit(waveTeam);
|
BaseUnit unit = group.createUnit(state.rules.waveTeam);
|
||||||
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
|
unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread));
|
||||||
unit.add();
|
unit.add();
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ public class WaveSpawner{
|
|||||||
for(int i = 0; i < spawned; i++){
|
for(int i = 0; i < spawned; i++){
|
||||||
Tmp.v1.rnd(spread);
|
Tmp.v1.rnd(spread);
|
||||||
|
|
||||||
BaseUnit unit = group.createUnit(waveTeam);
|
BaseUnit unit = group.createUnit(state.rules.waveTeam);
|
||||||
unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y);
|
unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y);
|
||||||
|
|
||||||
Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit));
|
Time.run(Math.min(i * 5, 60 * 2), () -> spawnEffect(unit));
|
||||||
@@ -78,7 +78,7 @@ public class WaveSpawner{
|
|||||||
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
|
eachGroundSpawn((spawnX, spawnY, doShockwave) -> {
|
||||||
if(doShockwave){
|
if(doShockwave){
|
||||||
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawnX, spawnY, state.rules.dropZoneRadius));
|
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawnX, spawnY, state.rules.dropZoneRadius));
|
||||||
Time.run(40f, () -> Damage.damage(waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true));
|
Time.run(40f, () -> Damage.damage(state.rules.waveTeam, spawnX, spawnY, state.rules.dropZoneRadius, 99999999f, true));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -90,11 +90,11 @@ public class WaveSpawner{
|
|||||||
cons.accept(spawn.worldx(), spawn.worldy(), true);
|
cons.accept(spawn.worldx(), spawn.worldy(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state.rules.attackMode && state.teams.isActive(waveTeam) && !state.teams.get(defaultTeam).cores.isEmpty()){
|
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){
|
||||||
Tile firstCore = state.teams.get(defaultTeam).cores.first();
|
TileEntity firstCore = state.teams.playerCores().first();
|
||||||
for(Tile core : state.teams.get(waveTeam).cores){
|
for(TileEntity core : state.rules.waveTeam.cores()){
|
||||||
Tmp.v1.set(firstCore).sub(core.worldx(), core.worldy()).limit(coreMargin + core.block().size*tilesize);
|
Tmp.v1.set(firstCore).sub(core.x, core.y).limit(coreMargin + core.block.size*tilesize);
|
||||||
cons.accept(core.worldx() + Tmp.v1.x, core.worldy() + Tmp.v1.y, false);
|
cons.accept(core.x + Tmp.v1.x, core.y + Tmp.v1.y, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -107,9 +107,9 @@ public class WaveSpawner{
|
|||||||
cons.get(spawnX, spawnY);
|
cons.get(spawnX, spawnY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state.rules.attackMode && state.teams.isActive(waveTeam)){
|
if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){
|
||||||
for(Tile core : state.teams.get(waveTeam).cores){
|
for(TileEntity core : state.teams.get(state.rules.waveTeam).cores){
|
||||||
cons.get(core.worldx(), core.worldy());
|
cons.get(core.x, core.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,35 +1,34 @@
|
|||||||
package io.anuke.mindustry.content;
|
package mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
import arc.*;
|
||||||
import io.anuke.arc.collection.*;
|
import arc.struct.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.*;
|
import arc.math.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.mindustry.*;
|
import mindustry.*;
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
import mindustry.ctype.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import mindustry.entities.bullet.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.blocks.*;
|
import mindustry.world.blocks.*;
|
||||||
import io.anuke.mindustry.world.blocks.defense.*;
|
import mindustry.world.blocks.defense.*;
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.*;
|
import mindustry.world.blocks.defense.turrets.*;
|
||||||
import io.anuke.mindustry.world.blocks.distribution.*;
|
import mindustry.world.blocks.distribution.*;
|
||||||
import io.anuke.mindustry.world.blocks.liquid.Conduit;
|
import mindustry.world.blocks.liquid.*;
|
||||||
import io.anuke.mindustry.world.blocks.liquid.LiquidTank;
|
import mindustry.world.blocks.logic.*;
|
||||||
import io.anuke.mindustry.world.blocks.logic.*;
|
import mindustry.world.blocks.power.*;
|
||||||
import io.anuke.mindustry.world.blocks.power.*;
|
import mindustry.world.blocks.production.*;
|
||||||
import io.anuke.mindustry.world.blocks.production.*;
|
import mindustry.world.blocks.sandbox.*;
|
||||||
import io.anuke.mindustry.world.blocks.sandbox.*;
|
import mindustry.world.blocks.storage.*;
|
||||||
import io.anuke.mindustry.world.blocks.storage.*;
|
import mindustry.world.blocks.units.*;
|
||||||
import io.anuke.mindustry.world.blocks.units.*;
|
import mindustry.world.consumers.*;
|
||||||
import io.anuke.mindustry.world.consumers.*;
|
import mindustry.world.meta.*;
|
||||||
import io.anuke.mindustry.world.meta.*;
|
import mindustry.world.modules.*;
|
||||||
import io.anuke.mindustry.world.modules.*;
|
|
||||||
|
|
||||||
public class Blocks implements ContentList{
|
public class Blocks implements ContentList{
|
||||||
public static Block
|
public static Block
|
||||||
@@ -485,7 +484,7 @@ public class Blocks implements ContentList{
|
|||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy());
|
Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
|
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.alpha(Mathf.absin(entity.totalProgress, 3f, 0.9f) * entity.warmup);
|
Draw.alpha(Mathf.absin(entity.totalProgress, 3f, 0.9f) * entity.warmup);
|
||||||
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
|
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
|
||||||
@@ -510,7 +509,7 @@ public class Blocks implements ContentList{
|
|||||||
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name), Core.atlas.find(name + "-weave")};
|
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name), Core.atlas.find(name + "-weave")};
|
||||||
|
|
||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy());
|
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy());
|
||||||
Draw.rect(reg(weaveRegion), tile.drawx(), tile.drawy(), entity.totalProgress);
|
Draw.rect(reg(weaveRegion), tile.drawx(), tile.drawy(), entity.totalProgress);
|
||||||
@@ -660,7 +659,7 @@ public class Blocks implements ContentList{
|
|||||||
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-top")};
|
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-top")};
|
||||||
|
|
||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy());
|
Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
Draw.rect(reg(frameRegions[(int)Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
|
Draw.rect(reg(frameRegions[(int)Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
|
||||||
@@ -687,7 +686,7 @@ public class Blocks implements ContentList{
|
|||||||
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-rotator")};
|
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-rotator")};
|
||||||
|
|
||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy());
|
Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
Draw.rect(reg(rotatorRegion), tile.drawx(), tile.drawy(), entity.totalProgress * 2f);
|
Draw.rect(reg(rotatorRegion), tile.drawx(), tile.drawy(), entity.totalProgress * 2f);
|
||||||
@@ -915,6 +914,7 @@ public class Blocks implements ContentList{
|
|||||||
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
||||||
requirements(Category.distribution, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10));
|
requirements(Category.distribution, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10));
|
||||||
range = 12;
|
range = 12;
|
||||||
|
canOverdrive = false;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
consumes.power(0.30f);
|
consumes.power(0.30f);
|
||||||
}};
|
}};
|
||||||
@@ -977,7 +977,7 @@ public class Blocks implements ContentList{
|
|||||||
size = 3;
|
size = 3;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
conduit = new io.anuke.mindustry.world.blocks.liquid.Conduit("conduit"){{
|
conduit = new Conduit("conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.metaglass, 1));
|
requirements(Category.liquid, ItemStack.with(Items.metaglass, 1));
|
||||||
health = 45;
|
health = 45;
|
||||||
}};
|
}};
|
||||||
@@ -989,14 +989,14 @@ public class Blocks implements ContentList{
|
|||||||
health = 90;
|
health = 90;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
platedConduit = new io.anuke.mindustry.world.blocks.liquid.ArmoredConduit("plated-conduit"){{
|
platedConduit = new ArmoredConduit("plated-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.thorium, 2, Items.metaglass, 1));
|
requirements(Category.liquid, ItemStack.with(Items.thorium, 2, Items.metaglass, 1, Items.plastanium, 1));
|
||||||
liquidCapacity = 16f;
|
liquidCapacity = 16f;
|
||||||
liquidPressure = 1.025f;
|
liquidPressure = 1.025f;
|
||||||
health = 220;
|
health = 220;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
liquidRouter = new io.anuke.mindustry.world.blocks.liquid.LiquidRouter("liquid-router"){{
|
liquidRouter = new LiquidRouter("liquid-router"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 2));
|
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 2));
|
||||||
liquidCapacity = 20f;
|
liquidCapacity = 20f;
|
||||||
}};
|
}};
|
||||||
@@ -1008,20 +1008,21 @@ public class Blocks implements ContentList{
|
|||||||
health = 500;
|
health = 500;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
liquidJunction = new io.anuke.mindustry.world.blocks.liquid.LiquidJunction("liquid-junction"){{
|
liquidJunction = new LiquidJunction("liquid-junction"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.graphite, 2, Items.metaglass, 2));
|
requirements(Category.liquid, ItemStack.with(Items.graphite, 2, Items.metaglass, 2));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
bridgeConduit = new io.anuke.mindustry.world.blocks.liquid.LiquidExtendingBridge("bridge-conduit"){{
|
bridgeConduit = new LiquidExtendingBridge("bridge-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 8));
|
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 8));
|
||||||
range = 4;
|
range = 4;
|
||||||
hasPower = false;
|
hasPower = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
phaseConduit = new io.anuke.mindustry.world.blocks.liquid.LiquidBridge("phase-conduit"){{
|
phaseConduit = new LiquidBridge("phase-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10));
|
requirements(Category.liquid, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10));
|
||||||
range = 12;
|
range = 12;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
|
canOverdrive = false;
|
||||||
consumes.power(0.30f);
|
consumes.power(0.30f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1362,7 +1363,7 @@ public class Blocks implements ContentList{
|
|||||||
ammo(
|
ammo(
|
||||||
Items.graphite, Bullets.artilleryDense,
|
Items.graphite, Bullets.artilleryDense,
|
||||||
Items.silicon, Bullets.artilleryHoming,
|
Items.silicon, Bullets.artilleryHoming,
|
||||||
Items.pyratite, Bullets.artlleryIncendiary
|
Items.pyratite, Bullets.artilleryIncendiary
|
||||||
);
|
);
|
||||||
reload = 60f;
|
reload = 60f;
|
||||||
recoil = 2f;
|
recoil = 2f;
|
||||||
@@ -1390,15 +1391,6 @@ public class Blocks implements ContentList{
|
|||||||
range = 110f;
|
range = 110f;
|
||||||
health = 250 * size * size;
|
health = 250 * size * size;
|
||||||
shootSound = Sounds.splash;
|
shootSound = Sounds.splash;
|
||||||
|
|
||||||
drawer = (tile, entity) -> {
|
|
||||||
Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
|
||||||
|
|
||||||
Draw.color(entity.liquids.current().color);
|
|
||||||
Draw.alpha(entity.liquids.total() / liquidCapacity);
|
|
||||||
Draw.rect(name + "-liquid", tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
|
||||||
Draw.color();
|
|
||||||
};
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
lancer = new ChargeTurret("lancer"){{
|
lancer = new ChargeTurret("lancer"){{
|
||||||
@@ -1513,7 +1505,7 @@ public class Blocks implements ContentList{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(io.anuke.mindustry.entities.type.Bullet b){
|
public void init(mindustry.entities.type.Bullet b){
|
||||||
for(int i = 0; i < rays; i++){
|
for(int i = 0; i < rays; i++){
|
||||||
Damage.collideLine(b, b.getTeam(), hitEffect, b.x, b.y, b.rot(), rayLength - Math.abs(i - (rays / 2)) * 20f);
|
Damage.collideLine(b, b.getTeam(), hitEffect, b.x, b.y, b.rot(), rayLength - Math.abs(i - (rays / 2)) * 20f);
|
||||||
}
|
}
|
||||||
@@ -1542,9 +1534,9 @@ public class Blocks implements ContentList{
|
|||||||
ammo(
|
ammo(
|
||||||
Items.graphite, Bullets.artilleryDense,
|
Items.graphite, Bullets.artilleryDense,
|
||||||
Items.silicon, Bullets.artilleryHoming,
|
Items.silicon, Bullets.artilleryHoming,
|
||||||
Items.pyratite, Bullets.artlleryIncendiary,
|
Items.pyratite, Bullets.artilleryIncendiary,
|
||||||
Items.blastCompound, Bullets.artilleryExplosive,
|
Items.blastCompound, Bullets.artilleryExplosive,
|
||||||
Items.plastanium, Bullets.arilleryPlastic
|
Items.plastanium, Bullets.artilleryPlastic
|
||||||
);
|
);
|
||||||
size = 3;
|
size = 3;
|
||||||
shots = 4;
|
shots = 4;
|
||||||
@@ -1,24 +1,24 @@
|
|||||||
package io.anuke.mindustry.content;
|
package mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.*;
|
import arc.math.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
import mindustry.ctype.ContentList;
|
||||||
import io.anuke.mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import mindustry.entities.bullet.*;
|
||||||
import io.anuke.mindustry.entities.effect.*;
|
import mindustry.entities.effect.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class Bullets implements ContentList{
|
public class Bullets implements ContentList{
|
||||||
public static BulletType
|
public static BulletType
|
||||||
|
|
||||||
//artillery
|
//artillery
|
||||||
artilleryDense, arilleryPlastic, artilleryPlasticFrag, artilleryHoming, artlleryIncendiary, artilleryExplosive, artilleryUnit,
|
artilleryDense, artilleryPlastic, artilleryPlasticFrag, artilleryHoming, artilleryIncendiary, artilleryExplosive, artilleryUnit,
|
||||||
|
|
||||||
//flak
|
//flak
|
||||||
flakScrap, flakLead, flakPlastic, flakExplosive, flakSurge, flakGlass, glassFrag,
|
flakScrap, flakLead, flakPlastic, flakExplosive, flakSurge, flakGlass, glassFrag,
|
||||||
@@ -65,7 +65,7 @@ public class Bullets implements ContentList{
|
|||||||
despawnEffect = Fx.none;
|
despawnEffect = Fx.none;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
arilleryPlastic = new ArtilleryBulletType(3.4f, 0, "shell"){{
|
artilleryPlastic = new ArtilleryBulletType(3.4f, 0, "shell"){{
|
||||||
hitEffect = Fx.plasticExplosion;
|
hitEffect = Fx.plasticExplosion;
|
||||||
knockback = 1f;
|
knockback = 1f;
|
||||||
lifetime = 55f;
|
lifetime = 55f;
|
||||||
@@ -91,7 +91,7 @@ public class Bullets implements ContentList{
|
|||||||
homingRange = 50f;
|
homingRange = 50f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
artlleryIncendiary = new ArtilleryBulletType(3f, 0, "shell"){{
|
artilleryIncendiary = new ArtilleryBulletType(3f, 0, "shell"){{
|
||||||
hitEffect = Fx.blastExplosion;
|
hitEffect = Fx.blastExplosion;
|
||||||
knockback = 0.8f;
|
knockback = 0.8f;
|
||||||
lifetime = 60f;
|
lifetime = 60f;
|
||||||
@@ -1,19 +1,19 @@
|
|||||||
package io.anuke.mindustry.content;
|
package mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
import arc.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.*;
|
import arc.math.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
import mindustry.ctype.ContentList;
|
||||||
import io.anuke.mindustry.entities.Effects.*;
|
import mindustry.entities.Effects.*;
|
||||||
import io.anuke.mindustry.entities.effect.GroundEffectEntity.*;
|
import mindustry.entities.effect.GroundEffectEntity.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import io.anuke.mindustry.ui.Cicon;
|
import mindustry.ui.Cicon;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class Fx implements ContentList{
|
public class Fx implements ContentList{
|
||||||
public static Effect
|
public static Effect
|
||||||
@@ -48,28 +48,24 @@ public class Fx implements ContentList{
|
|||||||
Draw.rect(unit.getIconRegion(), e.x, e.y,
|
Draw.rect(unit.getIconRegion(), e.x, e.y,
|
||||||
unit.getIconRegion().getWidth() * Draw.scl * scl, unit.getIconRegion().getWidth() * Draw.scl * scl, 180f);
|
unit.getIconRegion().getWidth() * Draw.scl * scl, unit.getIconRegion().getWidth() * Draw.scl * scl, 180f);
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
commandSend = new Effect(28, e -> {
|
commandSend = new Effect(28, e -> {
|
||||||
Draw.color(Pal.command);
|
Draw.color(Pal.command);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
placeBlock = new Effect(16, e -> {
|
placeBlock = new Effect(16, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(3f - e.fin() * 2f);
|
Lines.stroke(3f - e.fin() * 2f);
|
||||||
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
tapBlock = new Effect(12, e -> {
|
tapBlock = new Effect(12, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(3f - e.fin() * 2f);
|
Lines.stroke(3f - e.fin() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + (tilesize / 1.5f * e.rotation) * e.fin());
|
Lines.circle(e.x, e.y, 4f + (tilesize / 1.5f * e.rotation) * e.fin());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
breakBlock = new Effect(12, e -> {
|
breakBlock = new Effect(12, e -> {
|
||||||
@@ -80,41 +76,35 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 3 + (int)(e.rotation * 3), e.rotation * 2f + (tilesize * e.rotation) * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 3 + (int)(e.rotation * 3), e.rotation * 2f + (tilesize * e.rotation) * e.finpow(), (x, y) -> {
|
||||||
Fill.square(e.x + x, e.y + y, 1f + e.fout() * (3f + e.rotation));
|
Fill.square(e.x + x, e.y + y, 1f + e.fout() * (3f + e.rotation));
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
select = new Effect(23, e -> {
|
select = new Effect(23, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(e.fout() * 3f);
|
Lines.stroke(e.fout() * 3f);
|
||||||
Lines.circle(e.x, e.y, 3f + e.fin() * 14f);
|
Lines.circle(e.x, e.y, 3f + e.fin() * 14f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
smoke = new Effect(100, e -> {
|
smoke = new Effect(100, e -> {
|
||||||
Draw.color(Color.gray, Pal.darkishGray, e.fin());
|
Draw.color(Color.gray, Pal.darkishGray, e.fin());
|
||||||
float size = 7f - e.fin() * 7f;
|
float size = 7f - e.fin() * 7f;
|
||||||
Draw.rect("circle", e.x, e.y, size, size);
|
Draw.rect("circle", e.x, e.y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
magmasmoke = new Effect(110, e -> {
|
magmasmoke = new Effect(110, e -> {
|
||||||
Draw.color(Color.gray);
|
Draw.color(Color.gray);
|
||||||
Fill.circle(e.x, e.y, e.fslope() * 6f);
|
Fill.circle(e.x, e.y, e.fslope() * 6f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
spawn = new Effect(30, e -> {
|
spawn = new Effect(30, e -> {
|
||||||
Lines.stroke(2f * e.fout());
|
Lines.stroke(2f * e.fout());
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 12f);
|
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 12f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
padlaunch = new Effect(10, e -> {
|
padlaunch = new Effect(10, e -> {
|
||||||
Lines.stroke(4f * e.fout());
|
Lines.stroke(4f * e.fout());
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 60f);
|
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 60f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
vtolHover = new Effect(40f, e -> {
|
vtolHover = new Effect(40f, e -> {
|
||||||
@@ -122,7 +112,6 @@ public class Fx implements ContentList{
|
|||||||
float ang = e.rotation + Mathf.randomSeedRange(e.id, 30f);
|
float ang = e.rotation + Mathf.randomSeedRange(e.id, 30f);
|
||||||
Draw.color(Pal.lightFlame, Pal.lightOrange, e.fin());
|
Draw.color(Pal.lightFlame, Pal.lightOrange, e.fin());
|
||||||
Fill.circle(e.x + Angles.trnsx(ang, len), e.y + Angles.trnsy(ang, len), 2f * e.fout());
|
Fill.circle(e.x + Angles.trnsx(ang, len), e.y + Angles.trnsy(ang, len), 2f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
unitDrop = new GroundEffect(30, e -> {
|
unitDrop = new GroundEffect(30, e -> {
|
||||||
@@ -130,7 +119,6 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 9, 3 + 20f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 9, 3 + 20f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.4f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.4f);
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
unitLand = new GroundEffect(30, e -> {
|
unitLand = new GroundEffect(30, e -> {
|
||||||
@@ -138,42 +126,36 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 6, 17f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 17f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.3f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.3f);
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
unitPickup = new GroundEffect(18, e -> {
|
unitPickup = new GroundEffect(18, e -> {
|
||||||
Draw.color(Pal.lightishGray);
|
Draw.color(Pal.lightishGray);
|
||||||
Lines.stroke(e.fin() * 2f);
|
Lines.stroke(e.fin() * 2f);
|
||||||
Lines.poly(e.x, e.y, 4, 13f * e.fout());
|
Lines.poly(e.x, e.y, 4, 13f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
landShock = new GroundEffect(12, e -> {
|
landShock = new GroundEffect(12, e -> {
|
||||||
Draw.color(Pal.lancerLaser);
|
Draw.color(Pal.lancerLaser);
|
||||||
Lines.stroke(e.fout() * 3f);
|
Lines.stroke(e.fout() * 3f);
|
||||||
Lines.poly(e.x, e.y, 12, 20f * e.fout());
|
Lines.poly(e.x, e.y, 12, 20f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
pickup = new Effect(18, e -> {
|
pickup = new Effect(18, e -> {
|
||||||
Draw.color(Pal.lightishGray);
|
Draw.color(Pal.lightishGray);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.spikes(e.x, e.y, 1f + e.fin() * 6f, e.fout() * 4f, 6);
|
Lines.spikes(e.x, e.y, 1f + e.fin() * 6f, e.fout() * 4f, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healWave = new Effect(22, e -> {
|
healWave = new Effect(22, e -> {
|
||||||
Draw.color(Pal.heal);
|
Draw.color(Pal.heal);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + e.finpow() * 60f);
|
Lines.circle(e.x, e.y, 4f + e.finpow() * 60f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
heal = new Effect(11, e -> {
|
heal = new Effect(11, e -> {
|
||||||
Draw.color(Pal.heal);
|
Draw.color(Pal.heal);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 2f + e.finpow() * 7f);
|
Lines.circle(e.x, e.y, 2f + e.finpow() * 7f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitBulletSmall = new Effect(14, e -> {
|
hitBulletSmall = new Effect(14, e -> {
|
||||||
@@ -192,7 +174,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitFuse = new Effect(14, e -> {
|
hitFuse = new Effect(14, e -> {
|
||||||
@@ -211,7 +192,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitBulletBig = new Effect(13, e -> {
|
hitBulletBig = new Effect(13, e -> {
|
||||||
@@ -223,7 +203,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1.5f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitFlameSmall = new Effect(14, e -> {
|
hitFlameSmall = new Effect(14, e -> {
|
||||||
@@ -235,7 +214,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitLiquid = new Effect(16, e -> {
|
hitLiquid = new Effect(16, e -> {
|
||||||
@@ -245,7 +223,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitLancer = new Effect(12, e -> {
|
hitLancer = new Effect(12, e -> {
|
||||||
@@ -257,7 +234,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitMeltdown = new Effect(12, e -> {
|
hitMeltdown = new Effect(12, e -> {
|
||||||
@@ -269,14 +245,12 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitLaser = new Effect(8, e -> {
|
hitLaser = new Effect(8, e -> {
|
||||||
Draw.color(Color.white, Pal.heal, e.fin());
|
Draw.color(Color.white, Pal.heal, e.fin());
|
||||||
Lines.stroke(0.5f + e.fout());
|
Lines.stroke(0.5f + e.fout());
|
||||||
Lines.circle(e.x, e.y, e.fin() * 5f);
|
Lines.circle(e.x, e.y, e.fin() * 5f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitYellowLaser = new Effect(8, e -> {
|
hitYellowLaser = new Effect(8, e -> {
|
||||||
@@ -295,7 +269,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 2 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 2 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
flakExplosion = new Effect(20, e -> {
|
flakExplosion = new Effect(20, e -> {
|
||||||
@@ -319,7 +292,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
plasticExplosion = new Effect(24, e -> {
|
plasticExplosion = new Effect(24, e -> {
|
||||||
@@ -343,7 +315,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
plasticExplosionFlak = new Effect(28, e -> {
|
plasticExplosionFlak = new Effect(28, e -> {
|
||||||
@@ -367,7 +338,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
blastExplosion = new Effect(22, e -> {
|
blastExplosion = new Effect(22, e -> {
|
||||||
@@ -391,32 +361,27 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
artilleryTrail = new Effect(50, e -> {
|
artilleryTrail = new Effect(50, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
incendTrail = new Effect(50, e -> {
|
incendTrail = new Effect(50, e -> {
|
||||||
Draw.color(Pal.lightOrange);
|
Draw.color(Pal.lightOrange);
|
||||||
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
missileTrail = new Effect(50, e -> {
|
missileTrail = new Effect(50, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
absorb = new Effect(12, e -> {
|
absorb = new Effect(12, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(2f * e.fout());
|
Lines.stroke(2f * e.fout());
|
||||||
Lines.circle(e.x, e.y, 5f * e.fout());
|
Lines.circle(e.x, e.y, 5f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
flakExplosionBig = new Effect(30, e -> {
|
flakExplosionBig = new Effect(30, e -> {
|
||||||
@@ -440,7 +405,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -451,7 +415,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.1f + e.fout() * 1.4f);
|
Fill.circle(e.x + x, e.y + y, 0.1f + e.fout() * 1.4f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
fire = new Effect(50f, e -> {
|
fire = new Effect(50f, e -> {
|
||||||
@@ -473,7 +436,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
steam = new Effect(35f, e -> {
|
steam = new Effect(35f, e -> {
|
||||||
@@ -483,7 +445,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
fireballsmoke = new Effect(25f, e -> {
|
fireballsmoke = new Effect(25f, e -> {
|
||||||
@@ -493,7 +454,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ballfire = new Effect(25f, e -> {
|
ballfire = new Effect(25f, e -> {
|
||||||
@@ -503,7 +463,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
freezing = new Effect(40f, e -> {
|
freezing = new Effect(40f, e -> {
|
||||||
@@ -513,7 +472,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
melting = new Effect(40f, e -> {
|
melting = new Effect(40f, e -> {
|
||||||
@@ -523,7 +481,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, .2f + e.fout() * 1.2f);
|
Fill.circle(e.x + x, e.y + y, .2f + e.fout() * 1.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
wet = new Effect(40f, e -> {
|
wet = new Effect(40f, e -> {
|
||||||
@@ -533,7 +490,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
oily = new Effect(42f, e -> {
|
oily = new Effect(42f, e -> {
|
||||||
@@ -543,7 +499,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
overdriven = new Effect(20f, e -> {
|
overdriven = new Effect(20f, e -> {
|
||||||
@@ -553,7 +508,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2.3f + 0.5f);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2.3f + 0.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
dropItem = new Effect(20f, e -> {
|
dropItem = new Effect(20f, e -> {
|
||||||
@@ -568,35 +522,30 @@ public class Fx implements ContentList{
|
|||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 2f + 0.2f);
|
Lines.stroke(e.fout() * 2f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 28f);
|
Lines.circle(e.x, e.y, e.fin() * 28f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bigShockwave = new Effect(10f, 80f, e -> {
|
bigShockwave = new Effect(10f, 80f, e -> {
|
||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f);
|
Lines.stroke(e.fout() * 3f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 50f);
|
Lines.circle(e.x, e.y, e.fin() * 50f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
nuclearShockwave = new Effect(10f, 200f, e -> {
|
nuclearShockwave = new Effect(10f, 200f, e -> {
|
||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f + 0.2f);
|
Lines.stroke(e.fout() * 3f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 140f);
|
Lines.circle(e.x, e.y, e.fin() * 140f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
impactShockwave = new Effect(13f, 300f, e -> {
|
impactShockwave = new Effect(13f, 300f, e -> {
|
||||||
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 4f + 0.2f);
|
Lines.stroke(e.fout() * 4f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 200f);
|
Lines.circle(e.x, e.y, e.fin() * 200f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
spawnShockwave = new Effect(20f, 400f, e -> {
|
spawnShockwave = new Effect(20f, 400f, e -> {
|
||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f + 0.5f);
|
Lines.stroke(e.fout() * 3f + 0.5f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * (e.rotation + 50f));
|
Lines.circle(e.x, e.y, e.fin() * (e.rotation + 50f));
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
explosion = new Effect(30, e -> {
|
explosion = new Effect(30, e -> {
|
||||||
@@ -619,7 +568,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
dynamicExplosion = new Effect(30, e -> {
|
dynamicExplosion = new Effect(30, e -> {
|
||||||
@@ -644,7 +592,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + out * 4 * (3f + intensity));
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + out * 4 * (3f + intensity));
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
blockExplosion = new Effect(30, e -> {
|
blockExplosion = new Effect(30, e -> {
|
||||||
@@ -667,7 +614,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
blockExplosionSmoke = new Effect(30, e -> {
|
blockExplosionSmoke = new Effect(30, e -> {
|
||||||
@@ -678,7 +624,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -687,7 +632,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1f + 5 * e.fout();
|
float w = 1f + 5 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 15f * e.fout(), e.rotation);
|
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);
|
Drawf.tri(e.x, e.y, w, 3f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootHeal = new Effect(8, e -> {
|
shootHeal = new Effect(8, e -> {
|
||||||
@@ -695,7 +639,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1f + 5 * e.fout();
|
float w = 1f + 5 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 17f * e.fout(), e.rotation);
|
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);
|
Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootHealYellow = new Effect(8, e -> {
|
shootHealYellow = new Effect(8, e -> {
|
||||||
@@ -713,7 +656,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBig = new Effect(9, e -> {
|
shootBig = new Effect(9, e -> {
|
||||||
@@ -721,7 +663,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1.2f + 7 * e.fout();
|
float w = 1.2f + 7 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 25f * e.fout(), e.rotation);
|
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);
|
Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBig2 = new Effect(10, e -> {
|
shootBig2 = new Effect(10, e -> {
|
||||||
@@ -729,7 +670,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1.2f + 8 * e.fout();
|
float w = 1.2f + 8 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 29f * e.fout(), e.rotation);
|
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);
|
Drawf.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBigSmoke = new Effect(17f, e -> {
|
shootBigSmoke = new Effect(17f, e -> {
|
||||||
@@ -739,7 +679,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2f + 0.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2f + 0.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBigSmoke2 = new Effect(18f, e -> {
|
shootBigSmoke2 = new Effect(18f, e -> {
|
||||||
@@ -749,7 +688,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2.4f + 0.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2.4f + 0.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootSmallFlame = new Effect(32f, e -> {
|
shootSmallFlame = new Effect(32f, e -> {
|
||||||
@@ -759,7 +697,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootPyraFlame = new Effect(33f, e -> {
|
shootPyraFlame = new Effect(33f, e -> {
|
||||||
@@ -769,7 +706,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.6f);
|
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.6f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootLiquid = new Effect(40f, e -> {
|
shootLiquid = new Effect(40f, e -> {
|
||||||
@@ -779,7 +715,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.5f + e.fout() * 2.5f);
|
Fill.circle(e.x + x, e.y + y, 0.5f + e.fout() * 2.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shellEjectSmall = new GroundEffect(30f, 400f, e -> {
|
shellEjectSmall = new GroundEffect(30f, 400f, e -> {
|
||||||
@@ -794,7 +729,6 @@ public class Fx implements ContentList{
|
|||||||
e.y + Angles.trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()),
|
e.y + Angles.trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()),
|
||||||
1f, 2f, rot + e.fin() * 50f * i);
|
1f, 2f, rot + e.fin() * 50f * i);
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shellEjectMedium = new GroundEffect(34f, 400f, e -> {
|
shellEjectMedium = new GroundEffect(34f, 400f, e -> {
|
||||||
@@ -818,7 +752,6 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shellEjectBig = new GroundEffect(22f, 400f, e -> {
|
shellEjectBig = new GroundEffect(22f, 400f, e -> {
|
||||||
@@ -843,7 +776,6 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserShoot = new Effect(21f, e -> {
|
lancerLaserShoot = new Effect(21f, e -> {
|
||||||
@@ -853,7 +785,6 @@ public class Fx implements ContentList{
|
|||||||
Drawf.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();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserShootSmoke = new Effect(26f, e -> {
|
lancerLaserShootSmoke = new Effect(26f, e -> {
|
||||||
@@ -863,7 +794,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fout() * 9f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fout() * 9f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserCharge = new Effect(38f, e -> {
|
lancerLaserCharge = new Effect(38f, e -> {
|
||||||
@@ -873,7 +803,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 3f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 3f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserChargeBegin = new Effect(60f, e -> {
|
lancerLaserChargeBegin = new Effect(60f, e -> {
|
||||||
@@ -891,7 +820,6 @@ public class Fx implements ContentList{
|
|||||||
Drawf.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();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lightningShoot = new Effect(12f, e -> {
|
lightningShoot = new Effect(12f, e -> {
|
||||||
@@ -902,7 +830,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 5f + 2f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 5f + 2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -911,7 +838,6 @@ public class Fx implements ContentList{
|
|||||||
float size = 1f + e.fout() * 5f;
|
float size = 1f + e.fout() * 5f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
nuclearsmoke = new Effect(40, e -> {
|
nuclearsmoke = new Effect(40, e -> {
|
||||||
@@ -919,7 +845,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
nuclearcloud = new Effect(90, 200f, e -> {
|
nuclearcloud = new Effect(90, 200f, e -> {
|
||||||
@@ -927,7 +852,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fout() * 14f;
|
float size = e.fout() * 14f;
|
||||||
Draw.color(Color.lime, Color.gray, e.fin());
|
Draw.color(Color.lime, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
impactsmoke = new Effect(60, e -> {
|
impactsmoke = new Effect(60, e -> {
|
||||||
@@ -935,7 +859,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
impactcloud = new Effect(140, 400f, e -> {
|
impactcloud = new Effect(140, 400f, e -> {
|
||||||
@@ -943,7 +866,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fout() * 15f;
|
float size = e.fout() * 15f;
|
||||||
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
redgeneratespark = new Effect(18, e -> {
|
redgeneratespark = new Effect(18, e -> {
|
||||||
@@ -951,7 +873,6 @@ public class Fx implements ContentList{
|
|||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Pal.redSpark, Color.gray, e.fin());
|
Draw.color(Pal.redSpark, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
generatespark = new Effect(18, e -> {
|
generatespark = new Effect(18, e -> {
|
||||||
@@ -959,7 +880,6 @@ public class Fx implements ContentList{
|
|||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Pal.orangeSpark, Color.gray, e.fin());
|
Draw.color(Pal.orangeSpark, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
fuelburn = new Effect(23, e -> {
|
fuelburn = new Effect(23, e -> {
|
||||||
@@ -967,70 +887,60 @@ public class Fx implements ContentList{
|
|||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
plasticburn = new Effect(40, e -> {
|
plasticburn = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.valueOf("e9ead3"), Color.gray, e.fin());
|
Draw.color(Color.valueOf("e9ead3"), Color.gray, e.fin());
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverize = new Effect(40, e -> {
|
pulverize = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.stoneGray);
|
Draw.color(Pal.stoneGray);
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeRed = new Effect(40, e -> {
|
pulverizeRed = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.redDust, Pal.stoneGray, e.fin());
|
Draw.color(Pal.redDust, Pal.stoneGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeRedder = new Effect(40, e -> {
|
pulverizeRedder = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 9f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 9f, (x, y) -> {
|
||||||
Draw.color(Pal.redderDust, Pal.stoneGray, e.fin());
|
Draw.color(Pal.redderDust, Pal.stoneGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2.5f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2.5f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeSmall = new Effect(30, e -> {
|
pulverizeSmall = new Effect(30, e -> {
|
||||||
Angles.randLenVectors(e.id, 3, e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 3, e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Pal.stoneGray);
|
Draw.color(Pal.stoneGray);
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeMedium = new Effect(30, e -> {
|
pulverizeMedium = new Effect(30, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.stoneGray);
|
Draw.color(Pal.stoneGray);
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
producesmoke = new Effect(12, e -> {
|
producesmoke = new Effect(12, e -> {
|
||||||
Angles.randLenVectors(e.id, 8, 4f + e.fin() * 18f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, 4f + e.fin() * 18f, (x, y) -> {
|
||||||
Draw.color(Color.white, Pal.accent, e.fin());
|
Draw.color(Color.white, Pal.accent, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 1f + e.fout() * 3f, 45);
|
Fill.square(e.x + x, e.y + y, 1f + e.fout() * 3f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
smeltsmoke = new Effect(15, e -> {
|
smeltsmoke = new Effect(15, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.white, e.color, e.fin());
|
Draw.color(Color.white, e.color, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
formsmoke = new Effect(40, e -> {
|
formsmoke = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.plasticSmoke, Color.lightGray, e.fin());
|
Draw.color(Pal.plasticSmoke, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.2f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.2f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
blastsmoke = new Effect(26, e -> {
|
blastsmoke = new Effect(26, e -> {
|
||||||
@@ -1038,7 +948,6 @@ public class Fx implements ContentList{
|
|||||||
float size = 2f + e.fout() * 6f;
|
float size = 2f + e.fout() * 6f;
|
||||||
Draw.color(Color.lightGray, Color.darkGray, e.fin());
|
Draw.color(Color.lightGray, Color.darkGray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
lava = new Effect(18, e -> {
|
lava = new Effect(18, e -> {
|
||||||
@@ -1046,79 +955,66 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.orange, Color.gray, e.fin());
|
Draw.color(Color.orange, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
dooropen = new Effect(10, e -> {
|
dooropen = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize / 2f + e.fin() * 2f);
|
Lines.square(e.x, e.y, tilesize / 2f + e.fin() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
doorclose = new Effect(10, e -> {
|
doorclose = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize / 2f + e.fout() * 2f);
|
Lines.square(e.x, e.y, tilesize / 2f + e.fout() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
dooropenlarge = new Effect(10, e -> {
|
dooropenlarge = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize + e.fin() * 2f);
|
Lines.square(e.x, e.y, tilesize + e.fin() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
doorcloselarge = new Effect(10, e -> {
|
doorcloselarge = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize + e.fout() * 2f);
|
Lines.square(e.x, e.y, tilesize + e.fout() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
purify = new Effect(10, e -> {
|
purify = new Effect(10, e -> {
|
||||||
Draw.color(Color.royal, Color.gray, e.fin());
|
Draw.color(Color.royal, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
purifyoil = new Effect(10, e -> {
|
purifyoil = new Effect(10, e -> {
|
||||||
Draw.color(Color.black, Color.gray, e.fin());
|
Draw.color(Color.black, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
purifystone = new Effect(10, e -> {
|
purifystone = new Effect(10, e -> {
|
||||||
Draw.color(Color.orange, Color.gray, e.fin());
|
Draw.color(Color.orange, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
generate = new Effect(11, e -> {
|
generate = new Effect(11, e -> {
|
||||||
Draw.color(Color.orange, Color.yellow, e.fin());
|
Draw.color(Color.orange, Color.yellow, e.fin());
|
||||||
Lines.stroke(1f);
|
Lines.stroke(1f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 5f, 2, 8);
|
Lines.spikes(e.x, e.y, e.fin() * 5f, 2, 8);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
mine = new Effect(20, e -> {
|
mine = new Effect(20, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 3f + e.fin() * 6f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 3f + e.fin() * 6f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.lightGray, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
mineBig = new Effect(30, e -> {
|
mineBig = new Effect(30, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.lightGray, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.2f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
mineHuge = new Effect(40, e -> {
|
mineHuge = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 8, 5f + e.fin() * 10f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, 5f + e.fin() * 10f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.lightGray, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
smelt = new Effect(20, e -> {
|
smelt = new Effect(20, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 2f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 2f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.white, e.color, e.fin());
|
Draw.color(Color.white, e.color, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
teleportActivate = new Effect(50, e -> {
|
teleportActivate = new Effect(50, e -> {
|
||||||
@@ -1135,7 +1031,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
teleport = new Effect(60, e -> {
|
teleport = new Effect(60, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
@@ -1146,7 +1041,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
teleportOut = new Effect(20, e -> {
|
teleportOut = new Effect(20, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
@@ -1157,13 +1051,11 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 4f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 4f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
ripple = new GroundEffect(false, 30, e -> {
|
ripple = new GroundEffect(false, 30, e -> {
|
||||||
Draw.color(Tmp.c1.set(e.color).mul(1.2f));
|
Draw.color(Tmp.c1.set(e.color).mul(1.2f));
|
||||||
Lines.stroke(e.fout() + 0.4f);
|
Lines.stroke(e.fout() + 0.4f);
|
||||||
Lines.circle(e.x, e.y, 2f + e.fin() * 4f);
|
Lines.circle(e.x, e.y, 2f + e.fin() * 4f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bubble = new Effect(20, e -> {
|
bubble = new Effect(20, e -> {
|
||||||
@@ -1172,56 +1064,48 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 2, 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 2, 8f, (x, y) -> {
|
||||||
Lines.circle(e.x + x, e.y + y, 1f + e.fin() * 3f);
|
Lines.circle(e.x + x, e.y + y, 1f + e.fin() * 3f);
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
launch = new Effect(28, e -> {
|
launch = new Effect(28, e -> {
|
||||||
Draw.color(Pal.command);
|
Draw.color(Pal.command);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healWaveMend = new Effect(40, e -> {
|
healWaveMend = new Effect(40, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
overdriveWave = new Effect(50, e -> {
|
overdriveWave = new Effect(50, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Lines.stroke(e.fout() * 1f);
|
Lines.stroke(e.fout() * 1f);
|
||||||
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healBlock = new Effect(20, e -> {
|
healBlock = new Effect(20, e -> {
|
||||||
Draw.color(Pal.heal);
|
Draw.color(Pal.heal);
|
||||||
Lines.stroke(2f * e.fout() + 0.5f);
|
Lines.stroke(2f * e.fout() + 0.5f);
|
||||||
Lines.square(e.x, e.y, 1f + (e.fin() * e.rotation * tilesize / 2f - 1f));
|
Lines.square(e.x, e.y, 1f + (e.fin() * e.rotation * tilesize / 2f - 1f));
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healBlockFull = new Effect(20, e -> {
|
healBlockFull = new Effect(20, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Draw.alpha(e.fout());
|
Draw.alpha(e.fout());
|
||||||
Fill.square(e.x, e.y, e.rotation * tilesize / 2f);
|
Fill.square(e.x, e.y, e.rotation * tilesize / 2f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
overdriveBlockFull = new Effect(60, e -> {
|
overdriveBlockFull = new Effect(60, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Draw.alpha(e.fslope() * 0.4f);
|
Draw.alpha(e.fslope() * 0.4f);
|
||||||
Fill.square(e.x, e.y, e.rotation * tilesize);
|
Fill.square(e.x, e.y, e.rotation * tilesize);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shieldBreak = new Effect(40, e -> {
|
shieldBreak = new Effect(40, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(3f * e.fout());
|
Lines.stroke(3f * e.fout());
|
||||||
Lines.poly(e.x, e.y, 6, e.rotation + e.fin(), 90);
|
Lines.poly(e.x, e.y, 6, e.rotation + e.fin(), 90);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
coreLand = new Effect(120f, e -> {
|
coreLand = new Effect(120f, e -> {
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package io.anuke.mindustry.content;
|
package mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.graphics.Color;
|
import arc.graphics.Color;
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
import mindustry.ctype.ContentList;
|
||||||
import io.anuke.mindustry.type.Item;
|
import mindustry.type.Item;
|
||||||
import io.anuke.mindustry.type.ItemType;
|
import mindustry.type.ItemType;
|
||||||
|
|
||||||
public class Items implements ContentList{
|
public class Items implements ContentList{
|
||||||
public static Item scrap, copper, lead, graphite, coal, titanium, thorium, silicon, plastanium, phasefabric, surgealloy,
|
public static Item scrap, copper, lead, graphite, coal, titanium, thorium, silicon, plastanium, phasefabric, surgealloy,
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package io.anuke.mindustry.content;
|
package mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.graphics.Color;
|
import arc.graphics.Color;
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
import mindustry.ctype.ContentList;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import mindustry.type.Liquid;
|
||||||
|
|
||||||
public class Liquids implements ContentList{
|
public class Liquids implements ContentList{
|
||||||
public static Liquid water, slag, oil, cryofluid;
|
public static Liquid water, slag, oil, cryofluid;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package io.anuke.mindustry.content;
|
package mindustry.content;
|
||||||
|
|
||||||
import io.anuke.mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import mindustry.game.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
@@ -1,21 +1,21 @@
|
|||||||
package io.anuke.mindustry.content;
|
package mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
import arc.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.*;
|
import arc.math.*;
|
||||||
import io.anuke.arc.util.*;
|
import arc.util.*;
|
||||||
import io.anuke.mindustry.*;
|
import mindustry.*;
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
import mindustry.ctype.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import mindustry.entities.bullet.*;
|
||||||
import io.anuke.mindustry.entities.effect.*;
|
import mindustry.entities.effect.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import mindustry.type.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.indexer;
|
import static mindustry.Vars.indexer;
|
||||||
|
|
||||||
public class Mechs implements ContentList{
|
public class Mechs implements ContentList{
|
||||||
public static Mech vanguard, alpha, delta, tau, omega, dart, javelin, trident, glaive;
|
public static Mech vanguard, alpha, delta, tau, omega, dart, javelin, trident, glaive;
|
||||||