Compare commits

..

66 Commits
v68 ... v72

Author SHA1 Message Date
Anuken
3bf7031e6a Fixed cryofluid mixer 2019-04-05 20:48:13 -04:00
Anuken
503fc980f4 Bugfixes 2019-04-05 14:10:01 -04:00
Anuken
efed11eb97 stuff 2019-04-05 09:26:31 -04:00
Anuken
330820062f Fixed multiblock exploit 2019-04-04 23:53:51 -04:00
Anuken
45d157fe3f Minimap fixes 2019-04-04 23:34:09 -04:00
Anuken
812dea385c more bugfixes 2019-04-04 22:05:12 -04:00
키에르
c582bdea46 Update bundle_ko.properties (#439)
* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* Update bundle_ko.properties

* match orignal bundle

* Update bundle_ko.properties

* Update bundle_ko.properties
2019-04-04 19:59:09 -06:00
laohuaji233
e6c6a9381b Update bundle_zh_CN.properties (#440)
* Update bundle_zh_CN.properties

More translations and fixed some wrong words

* Update bundle_zh_CN.properties
2019-04-04 19:58:05 -06:00
VXF
4b4c0755c6 Update bundle_zh_CN.properties (#441) 2019-04-04 19:53:34 -06:00
Prosta4okua
aeb0539c91 Russian bundle (#443)
* Go build communism

* Update bundle_ru.properties

Last commit: minimap

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties
2019-04-04 19:53:02 -06:00
Prosta4okua
9feafa45f5 Ukrainian bundle (#444)
* No. Routernism is better.

Last commit: bugfixes

* Update bundle_uk_UA.properties

Last commit: minimap

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties
2019-04-04 19:52:09 -06:00
Math2128
927df391f3 Update bundle_fr.properties (#447)
* Update bundle_fr.properties

Haven't done much. If I have more time, I will work on it. If anyone else wants to contribute, make sure not to do the same as me ! :p

* Update bundle_fr.properties

* Update bundle_fr.properties

* Update bundle_fr.properties

Add a bit more. If anyone knows where to find all the filters in the game, please tell me. It'll help me get the word in context

* Update bundle_fr.properties

* Update bundle_fr.properties

* Update bundle_fr.properties

* Update bundle_fr.properties

* Update bundle_fr.properties
2019-04-04 19:50:59 -06:00
Anuken
cbef6adeb1 Crafter bugfixes 2019-04-04 21:49:45 -04:00
Anuken
2dee221861 Crash fix 2019-04-04 20:39:04 -04:00
Anuken
0b175cb25d Fixed release script using wrong folder 2019-04-04 19:36:15 -04:00
Anuken
0820338b55 Moved FPS counter once more / Pulverizer sprite fix 2019-04-04 19:31:17 -04:00
Anuken
a2b46eee6f Improved pixel zoom / Possible player duplicate glitch 2019-04-04 18:58:48 -04:00
Anuken
09a435320a Impact reactor display bugfix 2019-04-04 15:14:45 -04:00
Anuken
bf56200c06 Power amount message for buffered blocks 2019-04-04 15:06:27 -04:00
Anuken
2d18df2011 Multiplayer bugfixes / Balancing 2019-04-04 14:46:41 -04:00
Anuken
bab87c0da8 Default spawn limit bumped to 4 2019-04-04 00:05:59 -04:00
Anuken
148f272500 New rule modifiers 2019-04-04 00:03:19 -04:00
Anuken
6de4af727b JSON read/write generation 2019-04-03 22:24:14 -04:00
Anuken
75946b9d14 Explosion propagation 2019-04-03 09:39:11 -04:00
Anuken
1c63ee6743 Clean pixel zoom 2019-04-02 23:30:40 -04:00
Anuken
efdaf0d986 Balancing, tweaks and bugfixes 2019-04-02 22:43:20 -04:00
Anuken
3f6aeac33d Cleanup of new graphical options 2019-04-02 17:18:55 -04:00
Anuken
d9692004cc Shield optimization 2019-04-02 17:08:22 -04:00
Anuken
67a12eecad Bugfixes 2019-04-02 15:52:44 -04:00
Anuken
37999e0870 Risky building changes 2019-04-02 14:26:23 -04:00
Anuken
66dc1e94f5 Slight entity optimizations / Turret sprite fixes 2019-04-02 13:58:44 -04:00
Anuken
ebcce194a0 Turret coolant use balancing 2019-04-02 11:26:02 -04:00
Anuken
95eab94c80 Fixed liquid blocks not accepting liquids 2019-04-02 10:51:52 -04:00
Anuken
41a6dbe06c Basic minimap 2019-04-01 21:16:22 -04:00
Anuken
fa22b0ec12 Removed dead donations code 2019-04-01 18:51:49 -04:00
Anuken
be60a367e8 Removed donations library and Android support libraries 2019-04-01 18:46:11 -04:00
Anuken
608de34205 Updated bundles 2019-04-01 13:32:49 -04:00
Anuken
0a8f2edb05 Block update unit tests 2019-04-01 11:57:43 -04:00
Anuken
41b08f38c5 Fixed tests 2019-04-01 11:34:10 -04:00
Anuken
a83c0b2e9a "fixes" 2019-03-31 22:27:11 -04:00
Anuken
8f853c8f18 Back button cleanup 2019-03-31 18:26:52 -04:00
Anuken
b4071f6dcb Merge 2019-03-31 18:24:25 -04:00
Anuken
6b70418861 Cleanup 2019-03-31 18:20:38 -04:00
Anuken
de0235ad94 Sweeping rework 2019-03-31 17:49:15 -04:00
Anuken
c278c632b3 Back button quitting 2019-03-31 13:16:43 -04:00
Anuken
6392330e70 Optimizations / Very broken changes 2019-03-31 13:11:12 -04:00
Anuken
160ae4e244 Fixed startup crashing 2019-03-31 10:37:52 -04:00
Anuken
a6c9bd3182 Class cleanup 2019-03-30 23:23:57 -04:00
Anuken
801eadd8a8 Bugfixes 2019-03-30 19:10:06 -04:00
Anuken
211dab1297 Compilation cleanup 2019-03-30 18:48:54 -04:00
Anuken
0c3b39ffdc Merge branches 'avoidance-optimization' and 'master' of https://github.com/Anuken/Mindustry 2019-03-30 13:52:46 -04:00
Anuken
c31f88a318 Fixes 2019-03-30 13:01:55 -04:00
Anuken
e9eb981782 More optimization / Flying avoidance 2019-03-30 12:54:29 -04:00
Anuken
83bde8a781 Improved avoidance 2019-03-30 12:33:01 -04:00
Anuken
52f352bf94 Fixed nondeterministic drill item sorting 2019-03-30 10:16:48 -04:00
Anuken
b419a96d69 Mech balance / Re-added map screenshot 2019-03-30 00:17:29 -04:00
Anuken
eb3d5b62f5 Tweaks 2019-03-29 22:48:04 -04:00
Anuken
1c5f578d88 Initial implementation 2019-03-29 18:48:03 -04:00
Anuken
db3aae1388 Merge remote-tracking branch 'origin/master' 2019-03-29 18:15:31 -04:00
Anuken
0b08eb72a6 Bugfixes 2019-03-29 18:15:22 -04:00
Skybbles // L5474
cbc81376be pulverizer pulverises scrap not stone (#442) 2019-03-29 13:55:45 -06:00
Anuken
27e9901d05 Removed unused shadow methods; minor tweaks 2019-03-29 09:07:46 -04:00
Anuken
532c36677c Map preview block shadows 2019-03-28 22:23:59 -04:00
Anuken
0c20c6ecb7 Removed greek bundle temporarily, as font does not support it 2019-03-28 20:48:34 -04:00
Anuken
fbb3240ebb Hid 0-damage stat to prevent confusion 2019-03-28 19:20:09 -04:00
Anuken
855957b099 Broke all crafting 2019-03-27 23:24:07 -04:00
175 changed files with 2822 additions and 3956 deletions

View File

@@ -3,7 +3,6 @@
package="io.anuke.mindustry"> package="io.anuke.mindustry">
<uses-feature android:glEsVersion="0x00020000" android:required="true" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />

View File

@@ -27,9 +27,6 @@ repositories {
dependencies { dependencies {
implementation project(":core") implementation project(":core")
implementation project(":net") implementation project(":net")
implementation 'com.android.support:support-v4:28.0.0'
implementation 'org.sufficientlysecure:donations:2.5'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation arcModule("backends:backend-android") implementation arcModule("backends:backend-android")
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
@@ -47,9 +44,9 @@ dependencies {
task deploy(type: Copy){ task deploy(type: Copy){
dependsOn "assembleRelease" dependsOn "assembleRelease"
from "build/outputs/apk/google/release/android-google-release.apk" from "build/outputs/apk/release/android-release.apk"
into "../deploy/" into "../deploy/"
rename ("android-google-release.apk", appName + "-android-" + getVersionString() + ".apk") rename ("android-release.apk", appName + "-android-" + getVersionString() + ".apk")
} }
android { android {
@@ -103,12 +100,6 @@ android {
flavorDimensions "google" flavorDimensions "google"
productFlavors {
google {
buildConfigField "boolean", "DONATIONS_GOOGLE", "true"
}
}
signingConfigs { signingConfigs {
release { release {
if(project.hasProperty("RELEASE_STORE_FILE")) { if(project.hasProperty("RELEASE_STORE_FILE")) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#000">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="top"
android:adjustViewBounds="false"
android:contentDescription="background"
android:cropToPadding="false"
android:scaleType="centerCrop"
android:src="@drawable/background" />
<LinearLayout
android:id="@+id/donations_activity_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
</RelativeLayout>
</LinearLayout>

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mindustry</string>
<string-array name="donation_google_catalog_values">
<item>1 달러</item>
<item>2 달러</item>
<item>5 달러</item>
<item>10 달러</item>
<item>15 달러</item>
<item>25 달러</item>
<item>50 달러</item>
</string-array>
</resources>

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mindustry</string>
<string-array name="donation_google_catalog_values">
<item>1 Доллар</item>
<item>2 Доллара</item>
<item>5 Долларов</item>
<item>10 Долларов</item>
<item>15 Долларов</item>
<item>25 Долларов</item>
<item>50 Долларов</item>
</string-array>
</resources>

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mindustry</string>
<string-array name="donation_google_catalog_values">
<item>1 Доллар</item>
<item>2 Доллара</item>
<item>5 Долларів</item>
<item>10 Долларів</item>
<item>15 Долларів</item>
<item>25 Долларів</item>
<item>50 Долларів</item>
</string-array>
</resources>

View File

@@ -2,14 +2,5 @@
<resources> <resources>
<string name="app_name">Mindustry</string> <string name="app_name">Mindustry</string>
<string-array name="donation_google_catalog_values">
<item>1 Dollar</item>
<item>2 Dollars</item>
<item>5 Dollars</item>
<item>10 Dollars</item>
<item>15 Dollars</item>
<item>25 Dollars</item>
<item>50 Dollars</item>
</string-array>
</resources> </resources>

View File

@@ -10,11 +10,6 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings.Secure; import android.provider.Settings.Secure;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.Log;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.google.android.gms.security.ProviderInstaller;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.backends.android.surfaceview.AndroidApplication; import io.anuke.arc.backends.android.surfaceview.AndroidApplication;
import io.anuke.arc.backends.android.surfaceview.AndroidApplicationConfiguration; import io.anuke.arc.backends.android.surfaceview.AndroidApplicationConfiguration;
@@ -53,8 +48,8 @@ public class AndroidLauncher extends AndroidApplication{
Platform.instance = new Platform(){ Platform.instance = new Platform(){
@Override @Override
public void openDonations(){ public void hide(){
showDonations(); moveTaskToBack(true);
} }
@Override @Override
@@ -94,7 +89,7 @@ public class AndroidLauncher extends AndroidApplication{
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE); perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
} }
requestPermissions(perms.toArray(new String[perms.size()]), PERMISSION_REQUEST_CODE); requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
} }
} }
@@ -114,17 +109,10 @@ public class AndroidLauncher extends AndroidApplication{
} }
}; };
try{
ProviderInstaller.installIfNeeded(this);
}catch(GooglePlayServicesRepairableException e){
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
apiAvailability.getErrorDialog(this, e.getConnectionStatusCode(), 0).show();
}catch(GooglePlayServicesNotAvailableException e){
Log.e("SecurityException", "Google Play Services not available.");
}
if(doubleScaleTablets && isTablet(this.getContext())){ if(doubleScaleTablets && isTablet(this.getContext())){
Unit.dp.addition = 0.5f; Unit.dp.addition = 0.5f;
} }
config.hideStatusBar = true; config.hideStatusBar = true;
Net.setClientProvider(new KryoClient()); Net.setClientProvider(new KryoClient());
Net.setServerProvider(new KryoServer()); Net.setServerProvider(new KryoServer());
@@ -195,22 +183,8 @@ public class AndroidLauncher extends AndroidApplication{
} }
} }
private boolean isPackageInstalled(String packagename){
try{
getPackageManager().getPackageInfo(packagename, 0);
return true;
}catch(Exception e){
return false;
}
}
private boolean isTablet(Context context){ private boolean isTablet(Context context){
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE; return manager != null && manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
}
private void showDonations(){
Intent intent = new Intent(this, DonationsActivity.class);
startActivity(intent);
} }
} }

View File

@@ -1,73 +0,0 @@
package io.anuke.mindustry;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.Button;
import org.sufficientlysecure.donations.DonationsFragment;
public class DonationsActivity extends FragmentActivity{
/**
* Google
*/
private static final String GOOGLE_PUBKEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzG93KhpfBPKTo2jF0yxbWkkmMKwsPNM4SsMj1aDq7vv6n3R+mqJVfprOJxFfJh7JchXTflLIgiaKXFAiU70gJbMTniEWnEaFSxAeF09a7U0RjOwN+7rFwjCG91c2CpYxPanBTQP4zasc1ODPVzq4q6/4ByjhenN71V4WmR08NFIAodcfFPrOkDPil7i8y7cgcd1Ky53U0TS+LLYJttAK3XdTK4s7VE3I5IKoeNa4uwCmIM59R67q2k3cXjLk/nP6MP+y++EzHN/PTiR1sVg4dMP8K31RPw/1QNLPQwJz6Wc872oWwb7xo5gkoXbDc5WPPydsi8F3SyKNaYwzN6CDFQIDAQAB";
private static final String[] GOOGLE_CATALOG = new String[]{
"mindustry.donation.1", "mindustry.donation.2", "mindustry.donation.5",
"mindustry.donation.10", "mindustry.donation.15",
"mindustry.donation.25", "mindustry.donation.50"};
DonationsFragment donationsFragment;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTheme(R.style.GdxTheme);
setContentView(R.layout.donations_activity);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if(BuildConfig.DONATIONS_GOOGLE){
donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, GOOGLE_PUBKEY, GOOGLE_CATALOG,
getResources().getStringArray(R.array.donation_google_catalog_values), false, null, null,
null, false, null, null, false, null);
}
ft.replace(R.id.donations_activity_container, donationsFragment, "donationsFragment");
ft.commit();
}
public void onStart(){
super.onStart();
Button b = findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button);
b.setOnClickListener(view -> {
donationsFragment.donateGoogleOnClick(donationsFragment.getView());
b.setEnabled(false);
});
}
/**
* Needed for Google Play In-app Billing. It uses startIntentSenderForResult(). The result is not propagated to
* the Fragment like in startActivityForResult(). Thus we need to propagate manually to our Fragment.
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
Button b = findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button);
b.setEnabled(true);
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag("donationsFragment");
if(fragment != null){
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}

View File

@@ -50,8 +50,21 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
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);
TypeName jsonType = ClassName.bestGuess("io.anuke.arc.util.serialization.Json");
TypeName jsonValueType = ClassName.bestGuess("io.anuke.arc.util.serialization.JsonValue");
TypeName ubJsonWriterType = ClassName.bestGuess("io.anuke.arc.util.serialization.UBJsonWriter");
TypeName ubJsonReaderType = ClassName.bestGuess("io.anuke.arc.util.serialization.UBJsonReader");
classBuilder.addField(jsonType, "bjson", Modifier.STATIC, Modifier.PRIVATE);
classBuilder.addField(ubJsonReaderType, "bjsonReader", Modifier.STATIC, Modifier.PRIVATE);
classBuilder.addStaticBlock(CodeBlock.builder()
.addStatement("bjson = new " + jsonType + "()")
.addStatement("bjsonReader = new " + ubJsonReaderType + "()")
.build());
for(TypeElement elem : elements){ for(TypeElement elem : elements){
TypeName type = TypeName.get(elem.asType()); TypeName type = TypeName.get(elem.asType());
String simpleTypeName = type.toString().substring(type.toString().lastIndexOf('.') + 1);
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("") TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
.addSuperinterface(ParameterizedTypeName.get( .addSuperinterface(ParameterizedTypeName.get(
@@ -70,7 +83,19 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
.addException(IOException.class) .addException(IOException.class)
.addModifiers(Modifier.PUBLIC); .addModifiers(Modifier.PUBLIC);
MethodSpec.Builder jsonWriteMethod = MethodSpec.methodBuilder("write" + simpleTypeName + "Json")
.returns(void.class)
.addParameter(jsonType, "json")
.addParameter(type, "object")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder jsonReadMethod = MethodSpec.methodBuilder("read" + simpleTypeName + "Json")
.returns(type)
.addParameter(jsonValueType, "value")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC);
readMethod.addStatement("$L object = new $L()", type, type); readMethod.addStatement("$L object = new $L()", type, type);
jsonReadMethod.addStatement("$L object = new $L()", type, type);
List<VariableElement> fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem)); List<VariableElement> fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem));
for(VariableElement field : fields){ for(VariableElement field : fields){
@@ -83,6 +108,9 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
if(field.asType().getKind().isPrimitive()){ if(field.asType().getKind().isPrimitive()){
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 + "()");
jsonWriteMethod.addStatement("json.writeValue(\"" + name + "\", object." + name +")");
jsonReadMethod.addStatement("if(value.has(\"" + name + "\")) object." + name + "= value.get" + capName + "(\"" + name + "\")");
}else{ }else{
writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).write(stream, object." + name + ")"); writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).write(stream, object." + name + ")");
readMethod.addStatement("object." + name + " = (" +typeName+")io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).read(stream)"); readMethod.addStatement("object." + name + " = (" +typeName+")io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).read(stream)");
@@ -90,22 +118,47 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
} }
readMethod.addStatement("return object"); readMethod.addStatement("return object");
jsonReadMethod.addStatement("return object");
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("io.anuke.arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
String sname = type.toString().substring(type.toString().lastIndexOf('.') + 1); name(writeMethod, "write" + simpleTypeName);
name(readMethod, "read" + simpleTypeName);
name(writeMethod, "write" + sname);
name(readMethod, "read" + sname);
writeMethod.addModifiers(Modifier.STATIC); writeMethod.addModifiers(Modifier.STATIC);
readMethod.addModifiers(Modifier.STATIC); readMethod.addModifiers(Modifier.STATIC);
classBuilder.addMethod(writeMethod.build()); classBuilder.addMethod(writeMethod.build());
classBuilder.addMethod(readMethod.build()); classBuilder.addMethod(readMethod.build());
classBuilder.addMethod(jsonWriteMethod.build());
classBuilder.addMethod(jsonReadMethod.build());
MethodSpec.Builder binaryJsonWriteMethod = MethodSpec.methodBuilder("write" + simpleTypeName + "StreamJson")
.returns(void.class)
.addParameter(DataOutput.class, "stream")
.addParameter(type, "object")
.addException(IOException.class)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addStatement("java.io.StringWriter output = new java.io.StringWriter()")
.addStatement("bjson.setWriter(output)")
.addStatement("bjson.writeObjectStart(" + type + ".class, " + type + ".class)")
.addStatement("write" + simpleTypeName + "Json(bjson, object)")
.addStatement("bjson.writeObjectEnd()")
.addStatement("stream.writeUTF(output.toString())");
MethodSpec.Builder binaryJsonReadMethod = MethodSpec.methodBuilder("read" + simpleTypeName + "StreamJson")
.returns(type)
.addParameter(DataInput.class, "stream")
.addException(IOException.class)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addStatement("return read" + simpleTypeName + "Json(bjson.fromJson(null, stream.readUTF()))");
classBuilder.addMethod(binaryJsonWriteMethod.build());
classBuilder.addMethod(binaryJsonReadMethod.build());
} }
classBuilder.addMethod(method.build()); classBuilder.addMethod(method.build());

View File

@@ -200,6 +200,7 @@ project(":core"){
compile arcModule("arc-core") compile arcModule("arc-core")
compile arcModule("extensions:freetype") compile arcModule("extensions:freetype")
//compile arcModule("extensions:postprocessing")
if(localArc() && debugged()) compile arcModule("extensions:recorder") if(localArc() && debugged()) compile arcModule("extensions:recorder")
compileOnly project(":annotations") compileOnly project(":annotations")

View File

@@ -43,6 +43,7 @@ addplayers = Add/Remove Players
customgame = Custom Game customgame = Custom Game
newgame = New Game newgame = New Game
none = <none> none = <none>
minimap = Minimap
close = Close close = Close
quit = Quit quit = Quit
maps = Maps maps = Maps
@@ -342,67 +343,50 @@ no = No
info.title = Info info.title = Info
error.title = [crimson]An error has occured error.title = [crimson]An error has occured
error.crashtitle = An error has occured error.crashtitle = An error has occured
blocks.outputspeed = Drill Speed: {0}/ blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Block Info block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Power Capacity blocks.powercapacity = Power Capacity
blocks.powershot = Power/Shot blocks.powershot = Power/Shot
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Size blocks.size = Size
blocks.liquidcapacity = Liquid Capacity blocks.liquidcapacity = Liquid Capacity
blocks.maxitemssecond = Max Items
blocks.powerrange = Power Range blocks.powerrange = Power Range
blocks.poweruse = Power Use blocks.poweruse = Power Use
blocks.powerdamage = Power/Damage blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Input Item Capacity
blocks.outputitemcapacity = Output Item Capacity
blocks.itemcapacity = Item Capacity blocks.itemcapacity = Item Capacity
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.productiontime = Production Time
blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Input Liquid
blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Input Item
blocks.inputitems = Input Items
blocks.outputitem = Output Item
blocks.drilltier = Drillables blocks.drilltier = Drillables
blocks.drillspeed = Base Drill Speed blocks.drillspeed = Base Drill Speed
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use
blocks.coolant = Coolant
blocks.liquid = Liquid
blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Health blocks.health = Health
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Inaccuracy blocks.inaccuracy = Inaccuracy
blocks.shots = Shots blocks.shots = Shots
blocks.reload = Shots/Second blocks.reload = Shots/Second
blocks.inputfuel = Fuel
blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Input capacity
blocks.outputcapacity = Output capacity
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}/s
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] damage bullet.damage = [stat]{0}[lightgray] damage
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -423,6 +407,9 @@ unit.liquidunits = liquid units
unit.powerunits = power units unit.powerunits = power units
unit.degrees = degrees unit.degrees = degrees
unit.seconds = seconds unit.seconds = seconds
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = items unit.items = items
category.general = General category.general = General
category.power = Power category.power = Power
@@ -434,6 +421,7 @@ category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Enemy/Ally Indicators setting.indicators.name = Enemy/Ally Indicators
setting.autotarget.name = Auto-Target setting.autotarget.name = Auto-Target
@@ -457,6 +445,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Show FPS setting.fps.name = Show FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Show Power Lasers setting.lasers.name = Show Power Lasers
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance, disables animations)
setting.minimap.name = Show Minimap setting.minimap.name = Show Minimap
setting.musicvol.name = Music Volume setting.musicvol.name = Music Volume
setting.mutemusic.name = Mute Music setting.mutemusic.name = Mute Music
@@ -517,6 +506,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI (Red Team) Resources rules.enemyCheat = Infinite AI (Red Team) Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -565,7 +557,7 @@ liquid.oil.name = Oil
liquid.cryofluid.name = Cryofluid liquid.cryofluid.name = Cryofluid
mech.alpha-mech.name = Alpha mech.alpha-mech.name = Alpha
mech.alpha-mech.weapon = Heavy Repeater mech.alpha-mech.weapon = Heavy Repeater
mech.alpha-mech.ability = None mech.alpha-mech.ability = Regeneration
mech.alpha-mech.description = The standard mech. Has decent speed and damage output. mech.alpha-mech.description = The standard mech. Has decent speed and damage output.
mech.delta-mech.name = Delta mech.delta-mech.name = Delta
mech.delta-mech.weapon = Arc Generator mech.delta-mech.weapon = Arc Generator
@@ -600,9 +592,10 @@ unit.speed = [LIGHT_GRAY]Speed: {0}
mech.weapon = [LIGHT_GRAY]Weapon: {0} mech.weapon = [LIGHT_GRAY]Weapon: {0}
mech.health = [LIGHT_GRAY]Health: {0} mech.health = [LIGHT_GRAY]Health: {0}
mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0} mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0}
mech.minespeed = [LIGHT_GRAY]Mining Speed: {0} mech.minespeed = [LIGHT_GRAY]Mining Speed: {0}%
mech.minepower = [LIGHT_GRAY]Mining Power: {0} mech.minepower = [LIGHT_GRAY]Mining Power: {0}
mech.ability = [LIGHT_GRAY]Ability: {0} mech.ability = [LIGHT_GRAY]Ability: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
liquid.temperature = [LIGHT_GRAY]Temperature: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0}
@@ -864,7 +857,7 @@ block.silicon-smelter.description = Reduces sand with highly pure coal in order
block.plastanium-compressor.description = Produces plastanium from oil and titanium. block.plastanium-compressor.description = Produces plastanium from oil and titanium.
block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand.
block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper.
block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. block.pulverizer.description = Crushes scrap into sand. Useful when there is a lack of natural sand.
block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite.
block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound.
block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling.

View File

@@ -40,6 +40,7 @@ addplayers = Přidat/Odebrat hráče
customgame = Vlastní hra customgame = Vlastní hra
newgame = New Game newgame = New Game
none = <none> none = <none>
minimap = Minimap
close = Zavřít close = Zavřít
quit = Ukončit quit = Ukončit
maps = Mapy maps = Mapy
@@ -335,66 +336,48 @@ no = Ne
info.title = Informace info.title = Informace
error.title = [crimson]Objevila se chyba error.title = [crimson]Objevila se chyba
error.crashtitle = Objevila se chyba error.crashtitle = Objevila se chyba
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Informace o bloku block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Kapacita energie blocks.powercapacity = Kapacita energie
blocks.powershot = Energie na výstřel blocks.powershot = Energie na výstřel
blocks.targetsair = Zaměřuje vzdušné jednotky blocks.targetsair = Zaměřuje vzdušné jednotky
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Dostřel blocks.shootrange = Dostřel
blocks.size = velikost blocks.size = velikost
blocks.liquidcapacity = Kapacita tekutin blocks.liquidcapacity = Kapacita tekutin
blocks.maxitemssecond = Max předmětů
blocks.powerrange = Rozsah energie blocks.powerrange = Rozsah energie
blocks.poweruse = Spotřebuje energie blocks.poweruse = Spotřebuje energie
blocks.powerdamage = Energie na poškození blocks.powerdamage = Energie na poškození
blocks.inputitemcapacity = Kapacita vstupních předmětů
blocks.outputitemcapacity = Kapacita výstupních předmětů
blocks.itemcapacity = kapacita předmětů blocks.itemcapacity = kapacita předmětů
blocks.basepowergeneration = Základní generování energie blocks.basepowergeneration = Základní generování energie
blocks.powertransferspeed = Přenos energie blocks.productiontime = Production Time
blocks.craftspeed = Rychlost produkce
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Vstupní tekutiny
blocks.inputliquidaux = Aux tekutina
blocks.inputitem = Vstupní předmět
blocks.inputitems = Vstupní předměty
blocks.outputitem = Výstupní předmět
blocks.drilltier = Vrtatelné blocks.drilltier = Vrtatelné
blocks.drillspeed = Základní rychlost vrtu blocks.drillspeed = Základní rychlost vrtu
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Výstup tekutin
blocks.liquidoutputspeed = Rychlost výstupu tekutin
blocks.liquiduse = Spotřebuje tekutin
blocks.coolant = Chlazení
blocks.liquid = Liquid
blocks.coolantuse = Spotřeba chlazení
blocks.inputliquidfuel = Palivo-tekutina
blocks.liquidfueluse = Spotřeba Paliva-tekutiny
blocks.boostitem = Předmět pro zrychlení
blocks.boostliquid = Tekutina pro zrychlení
blocks.health = Životy blocks.health = Životy
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Nepřesnost/výchylka blocks.inaccuracy = Nepřesnost/výchylka
blocks.shots = Střely blocks.shots = Střely
blocks.reload = Střely za sekundu blocks.reload = Střely za sekundu
blocks.inputfuel = Palivo
blocks.fuelburntime = Čas spalování paliva
blocks.inputcapacity = Vstupní kapacita
blocks.outputcapacity = Výstupní kapacita
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = jednotek tekutin
unit.powerunits = jednotek energie unit.powerunits = jednotek energie
unit.degrees = úhly unit.degrees = úhly
unit.seconds = sekundy unit.seconds = sekundy
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = předměty unit.items = předměty
category.general = Všeobecné category.general = Všeobecné
category.power = Energie category.power = Energie
@@ -425,6 +411,7 @@ category.optional = Volitelné vylepšení
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Indikátor pro spojence setting.indicators.name = Indikátor pro spojence
setting.autotarget.name = Automaticky zaměřuje setting.autotarget.name = Automaticky zaměřuje
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Ukázat snímky/sekundu setting.fps.name = Ukázat snímky/sekundu
setting.vsync.name = Vertikální synchronizace setting.vsync.name = Vertikální synchronizace
setting.lasers.name = Ukázat laser energie setting.lasers.name = Ukázat laser energie
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Ukázat minimapu setting.minimap.name = Ukázat minimapu
setting.musicvol.name = Hlasitost hudby setting.musicvol.name = Hlasitost hudby
setting.mutemusic.name = Ztišit hudbu setting.mutemusic.name = Ztišit hudbu
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ 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}%
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}

View File

@@ -40,6 +40,7 @@ addplayers = Hinzufügen/Entfernen von Spielern
customgame = Benutzerdefiniertes Spiel customgame = Benutzerdefiniertes Spiel
newgame = New Game newgame = New Game
none = <nichts> none = <nichts>
minimap = Minimap
close = Schließen close = Schließen
quit = Verlassen quit = Verlassen
maps = Karten maps = Karten
@@ -335,66 +336,48 @@ 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.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Blockinfo: block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Kapazität blocks.powercapacity = Kapazität
blocks.powershot = Stromverbrauch/Schuss blocks.powershot = Stromverbrauch/Schuss
blocks.targetsair = Visiert Luft Einheiten an blocks.targetsair = Visiert Luft Einheiten an
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Reichweite blocks.shootrange = Reichweite
blocks.size = Größe blocks.size = Größe
blocks.liquidcapacity = Flüssigkeitskapazität blocks.liquidcapacity = Flüssigkeitskapazität
blocks.maxitemssecond = Max Materialien
blocks.powerrange = Stromreichweite blocks.powerrange = Stromreichweite
blocks.poweruse = Stromverbrauch blocks.poweruse = Stromverbrauch
blocks.powerdamage = Stromverbrauch/Schadenspunkt blocks.powerdamage = Stromverbrauch/Schadenspunkt
blocks.inputitemcapacity = Annahmekapazität
blocks.outputitemcapacity = Ausgabekapazität
blocks.itemcapacity = Materialkapazität blocks.itemcapacity = Materialkapazität
blocks.basepowergeneration = Basis-Stromerzeugung blocks.basepowergeneration = Basis-Stromerzeugung
blocks.powertransferspeed = Stromübertragung blocks.productiontime = Production Time
blocks.craftspeed = Produktionsgeschwindigkeit
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Benötigte Flüssigkeit
blocks.inputliquidaux = Optionale Flüssigkeit
blocks.inputitem = Akzeptiertes Material
blocks.inputitems = Akzeptierte Materialien
blocks.outputitem = Erzeugtes Material
blocks.drilltier = Abbaubare Erze blocks.drilltier = Abbaubare Erze
blocks.drillspeed = Bohrgeschwindigkeit blocks.drillspeed = Bohrgeschwindigkeit
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Erzeugte Flüssigkeit
blocks.liquidoutputspeed = Ausgabegeschwindigkeit
blocks.liquiduse = Flüssigkeitsverbrauch
blocks.coolant = Kühlmittel
blocks.liquid = Liquid
blocks.coolantuse = Kühlmittelverbrauch
blocks.inputliquidfuel = Kraftstoff
blocks.liquidfueluse = Kraftstoffverbrauch
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Lebenspunkte blocks.health = Lebenspunkte
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
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.inputfuel = Kraftstoff
blocks.fuelburntime = Kraftstoff Verbrennungs-Zeit
blocks.inputcapacity = Annahmekapazität
blocks.outputcapacity = Ausgabekapazität
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ 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.timesspeed = x speed
unit.percent = %
unit.items = Materialeinheiten unit.items = Materialeinheiten
category.general = Generell category.general = Generell
category.power = Strom category.power = Strom
@@ -425,6 +411,7 @@ category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto-Zielauswahl setting.autotarget.name = Auto-Zielauswahl
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Zeige FPS setting.fps.name = Zeige FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Zeige Stromlaser setting.lasers.name = Zeige Stromlaser
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Zeige die Minimap setting.minimap.name = Zeige die Minimap
setting.musicvol.name = Musiklautstärke setting.musicvol.name = Musiklautstärke
setting.mutemusic.name = Musik stummschalten setting.mutemusic.name = Musik stummschalten
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Materialkapazität: {0}
mech.minespeed = [LIGHT_GRAY]Erzabbaugeschwindigkeit: {0} mech.minespeed = [LIGHT_GRAY]Erzabbaugeschwindigkeit: {0}
mech.minepower = [LIGHT_GRAY]Erzabbaukraft: {0} mech.minepower = [LIGHT_GRAY]Erzabbaukraft: {0}
mech.ability = [LIGHT_GRAY]Fähigkeit: {0} mech.ability = [LIGHT_GRAY]Fähigkeit: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Wärmekapazität: {0} liquid.heatcapacity = [LIGHT_GRAY]Wärmekapazität: {0}
liquid.viscosity = [LIGHT_GRAY]Viskosität: {0} liquid.viscosity = [LIGHT_GRAY]Viskosität: {0}
liquid.temperature = [LIGHT_GRAY]Temperatur: {0} liquid.temperature = [LIGHT_GRAY]Temperatur: {0}

View File

@@ -1,919 +0,0 @@
credits.text = Δημιουργία: [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
credits = Επαίνοι
contributors = Μεταφραστές και Συνεισφέροντες
discord = Συμμετοχή στο discord του Mindustry!
link.discord.description = Το επίσημο discord chatroom του Mindustry
link.github.description = Πηγαίος κώδικας του Παιχνιδιού
link.dev-builds.description = Ασταθείς εκδόσεις παιχνιδιού
link.trello.description = Ο επίσημος πίνακας trello του παιχνιδιού για τις προσχεδιασμένες του αλλαγές
link.itch.io.description = Η σελίδα itch.io με τις εκδόσεις του παιχνιδιού για τους υπολογιστές και περιηγητές
link.google-play.description = Google Play store καταχώριση
link.wiki.description = Η επίσημη σελίδα Wiki του Mindustry
linkfail = Αποτυχία ανοίγματος συνδέσμου!\nΤο URL αντιγράφτηκε στο πρόχειρο.
screenshot = Το στιγμιότυπο αποθηκεύτηκε στο {0}
gameover = Τέλος Παιχνιδιού
gameover.pvp = Η[accent] {0}[] ομάδα είναι νικήτρια!
highscore = [accent]Καινούργιο υψηλότερο σκόρ!
stat.wave = Waves Defeated:[accent] {0}
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0}
stat.built = Buildings Built:[accent] {0}
stat.destroyed = Buildings Destroyed:[accent] {0}
stat.deconstructed = Buildings Deconstructed:[accent] {0}
stat.delivered = Resources Launched:
stat.rank = Final Rank: [accent]{0}
placeline = You have selected a block.\nYou can[accent] place in a line[] by[accent] holding down your finger for a few seconds[] and dragging in a direction.\n\n[scarlet]DO IT.
removearea = You have selected removal mode.\nYou can[accent] remove blocks in a rectangle[] by[accent] holding down your finger for a few seconds[] and dragging.\n\n[scarlet]DO IT.
launcheditems = [accent]Launched Items
map.delete = Είσαι σίγουρος οτι θέλεις να διαγράψεις τον χάρτη "[accent]{0}[]"?
level.highscore = Υψηλότερο σκόρ: [accent]{0}
level.select = Level Select
level.mode = Είδος Παιχνιδιού:
showagain = Μην το ξαναεμφανήσεις στην επόμενη συνεδρία
coreattack = < Ο πυρήνας είναι υπό επίθεση! >
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0}
database = Core Database
savegame = Αποθήκευση Παιχνιδιού
loadgame = Φόρτωση Παιχνιδιού
joingame = Συμμετοχή σε Παιχνίδι
addplayers = Προσθήκη/Αφαίρεση Παικτών
customgame = Προσαρμοσμένο Παιχνίδι
newgame = New Game
none = <none>
close = Κλείσιμο
quit = Έξοδος
maps = Χάρτες
continue = Συνέχεια
maps.none = [LIGHT_GRAY]Δεν βρέθηκαν Χάρτες!
about.button = Σχετικά
name = Όνομα:
noname = Διάλεξε[accent] όνομα παίκτη[] πρώτα.
filename = Όνομα Αρχείου:
unlocked = Ανακάλυψη Καινούργας Δομής!
completed = [accent]Completed
techtree = Tech Tree
research.list = [LIGHT_GRAY]Research:
research = Research
researched = [LIGHT_GRAY]{0} researched.
players = {0} παίκτες ενεργοί
players.single = {0} παίκτης ενεργός
server.closing = [accent]Απενεργοποίηση Εξυπηρετητή...
server.kicked.kick = Διώχτηκες απο τον server!
server.kicked.serverClose = Ο server έκλεισε.
server.kicked.clientOutdated = Παλαιομένος client! Αναβάθμησε την έκδοση του παιχνιδιού!
server.kicked.serverOutdated = Παλαιομένος server! Ζήτα απο τον οικοδεσπότη να αναβαθμήσει την έκδοσή του!
server.kicked.banned = Είσαι μπλοκαρισμένος απο αυτόν τον server.
server.kicked.recentKick = Διώχτηκες πρόσφατα.\nΠερίμενε λίγο πριν ξανασυνδεθείς...
server.kicked.nameInUse = Υπάρχει ήδη κάποιος με αυτό το όνομα\nστον server.
server.kicked.nameEmpty = Το επιλεγμένο σου όνομα είναι άκυρο.
server.kicked.idInUse = Βρίσκεσε ήδη σε αυτόν τον server! Η σύνδεση με δύο λογαριασμούς απαγορεύεται.
server.kicked.customClient = Αυτός ο server δεν υποστηρίζει προσαρμοσμένες εκδοχές. Κατέβασε μια αυθεντική έκδοση.
server.kicked.gameover = Game over!
host.info = Το κουμπί [accent]host[] "σερβίρει" εναν server (εξυπηρετητή) στην θύρα [scarlet]6567[]. \nΌλα το άτομα στο ίδιο [LIGHT_GRAY]wifi ή τοπικό δίκτυο[] θα μπορούν να δούν τον server σου στην λίστα server τους.\n\nΑν θέλεις να μπορούν να συνδεθούν σε αυτόν απο οποιαδοίποτε διεύθυνση IP, Το [accent]port forwarding[] είναι απαραίτητο.\n\n[LIGHT_GRAY]Σημείωση: Αν κάποιος αντιμετωπίζει πρόβλημα στην σύνδεση στο παιχνίδι τοπικού δικτύου σου (LAN), σιγουρέψου οτι έχεις επιτρέψει στο Mindustry να ελέγχει το τοπικό σου δίκτυο στις ρυθμίσεις του τείχους προστασίας.
join.info = Εδώ, μπορείς να εισάγεις μια [accent]διεύθυνση (IP) server[] για να συνδεθείς σε αυτήν, ή να ανακαλύψεις servers [accent]τοπικού δικτύου[] και να συνδεθείς.\nΥποστηρίζεται και το LAN και το WAN.\n\n[LIGHT_GRAY]Σημείωση: Δεν υπάρχει αυτόματη παγκόσμια λίστα server; Αν θέλεις να συνδεθείς σε κάποιον μέσω IP, πρέπει να ρωτήσεις την διεύθυνσή τους.
hostserver = Δημιούργησε Παιχνίδι
hostserver.mobile = Δημιούργησε\nΠαιχνίδι
host = Δημιουργία
hosting = [accent]Άνοιγμα εξυπηρετητή...
hosts.refresh = Ανανέωση
hosts.discovering = Ανακάλυψη παιχνιδιών LAN
server.refreshing = Ανανέωση server
hosts.none = [lightgray]Δεν βρέθηκαν τοπικά παιχνίδια!
host.invalid = [scarlet]Δεν μπορείς να συνδεθείς στον host.
trace = Ανίχνευση Παίκτη
trace.playername = Όνομα Παίκτη: [accent]{0}
trace.ip = Διεύθυνση: [accent]{0}
trace.id = Μοναδική ID: [accent]{0}
trace.android = Android Client: [accent]{0}
trace.modclient = Προσαρμοσμένος Client: [accent]{0}
trace.totalblocksbroken = Συνολικά κατεστραμένα τετράγωνα: [accent]{0}
trace.structureblocksbroken = Συνολικές κατεστραμένες δομές: [accent]{0}
trace.lastblockbroken = Τελευταίο κατεστραμένο τετράγωνο: [accent]{0}
trace.totalblocksplaced = Σύνολο τοποθετημένων τετραγώνων: [accent]{0}
trace.lastblockplaced = Τελευταίο τοποθετημένο τετράγωνο: [accent]{0}
invalidid = Άκυρο client ID! Υπέβαλε αναφορά σφάλματος.
server.bans = Bans
server.bans.none = Δεν βρέθηκε κανένας banned παίκτης!
server.admins = Διαχειριστές
server.admins.none = Δεν βρέθηκαν διαχειριστές!
server.add = Προσθήκη Server
server.delete = Είσε σίγουρος οτι θέλεις να διαγράψεις αυτόν τον server;
server.hostname = Host: {0}
server.edit = Προσαρμογή Server
server.outdated = [crimson]Παλαιομένος Server![]
server.outdated.client = [crimson]Παλαιομένος Client![]
server.version = [lightgray]Έκδοση: {0} {1}
server.custombuild = [yellow]Προσαρμοσμένο Build
confirmban = Είσαι σίγουρος οτι θέλεις να διώξεις μόνιμα αυτόν τον παίκτη;
confirmkick = Είσαι σίγουρος οτι θέλεις να διώξεις αυτόν τον παίκτη;
confirmunban = Είσαι σίγουρος οτι θέλεις να επιτρέψεις την είσοδο αυτού του παίκτη ξανα;
confirmadmin = Είσαι σίγουρος οτι θέλεις να χρήσεις αυτόν τον παίκτη ως διαχειριστή;
confirmunadmin = Είσαι σίγουρος οτι θέλεις να αφαιρέσεις αυτόν τον παίκτη απο την λίστα διαχειριστών;
joingame.title = Συμμετοχή σε Παιχνίδι
joingame.ip = Διεύθυνση IP:
disconnect = Αποσυνδεθήκατε.
disconnect.data = Αποτυχία φώρτωσης δεδομένων κόσμου!
connecting = [accent]Σύνδεση...
connecting.data = [accent]Φώρτωση δεδομένων κόσμου...
server.port = Θύρα:
server.addressinuse = Η διεύθυνση βρήσκεται ήδη σε χρήση!
server.invalidport = Άκυρος αριθμός θύρας!
server.error = [crimson]Αποτυχία εκκίνησης εξυπηρετητή: [accent]{0}
save.old = Αυτά τα δεδομένα ανήκουν σε μια παλιότερη έκδοση του παιχνιδιού, και δεν μπορούν πλέον να χρησιμοποιηθούν.\n\n[LIGHT_GRAY]Η υποστήριξη ανάδρομης αποθήκευσης θα ενσωματωθεί στην πλήρη έκδοση 4.0.
save.new = Νέα αποθήκευση
save.overwrite = Είσαι σίγουρος οτι θέλεις να πανωγράψεις αυτήν την\nθέση αποθήκευσης;
overwrite = Πανώγραψε
save.none = Δεν βρέθηκαν δεδομένα!
saveload = [accent]Αποθήκευση...
savefail = Αποτυχία Αποθήκευσης!
save.delete.confirm = Είσαι σίγουρος οτι θέλεις να διαγράψεις αυτήν την αποθήκη;
save.delete = Διαγραφή
save.export = Εξαγωγή Δεδομένων
save.import.invalid = [accent]Αυτά τα δεδομένα είναι άκυρα!
save.import.fail = [crimson]Αποτυχία εισαγωγής δεδομένων: [accent]{0}
save.export.fail = [crimson]Αποτυχία εξαγωγής δεδομένων: [accent]{0}
save.import = Εισαγωγή Δεδομένων
save.newslot = Όνομα Αποθήκευσης:
save.rename = Μετονομασία
save.rename.text = Νέο Όνομα:
selectslot = Επιλογή Αποθήκης.
slot = [accent]Κελί {0}
save.corrupted = [accent]Το αρχείο αποθήκευσης είναι κατεστραμένο ή άκυρο!\nΑν είχες πρόσφατα αναβαθμίσει το παιχνίδι, τότε είναι πιθανώς εξ' αιτίας αλλαγής στον τρόπο αποθήκευσης και [scarlet]όχι[] προβλήματος.
empty = <καινό>
on = Ανοικτό
off = Κλειστό
save.autosave = Αυτόματη Αποθήκευση: {0}
save.map = Χάρτης: {0}
save.wave = Κύμα {0}
save.difficulty = Δυσκολία: {0}
save.date = Τελευταία Αποθήκευση: {0}
save.playtime = Χρόνος Παιχνιδιού: {0}
warning = Warning.
confirm = Επιβεβαίωση
delete = Διαγραφή
ok = OK
open = Άνοιγμα
cancel = Ακύρωση
openlink = Άνοιγμα Συνδέσμου
copylink = Αντιγραφή Συνδέσμου
back = Πίσω
quit.confirm = Είσαι σίγουρος οτι θέλεις να εγκαταλήψεις;
changelog.title = Αρχείο Αλλαγών
changelog.loading = Getting changelog...
changelog.error.android = [accent]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug.
changelog.error.ios = [accent]The changelog is currently not supported in iOS.
changelog.error = [scarlet]Error getting changelog!\nCheck your internet connection.
changelog.current = [yellow][[Current version]
changelog.latest = [accent][[Latest version]
loading = [accent]Loading...
saving = [accent]Saving...
wave = [accent]Wave {0}
wave.waiting = [LIGHT_GRAY]Wave in {0}
waiting = [LIGHT_GRAY]Waiting...
waiting.players = Waiting for players...
wave.enemies = [LIGHT_GRAY]{0} Enemies Remaining
wave.enemy = [LIGHT_GRAY]{0} Enemy Remaining
loadimage = Load Image
saveimage = Save Image
unknown = Unknown
custom = Custom
builtin = Built-In
map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone!
map.random = [accent]Random Map
map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file.
editor.brush = Brush
editor.openin = Open In Editor
editor.oregen = Ore Generation
editor.oregen.info = Ore Generation:
editor.mapinfo = Map Info
editor.author = Author:
editor.description = Description:
editor.waves = Waves:
waves.title = Waves
waves.remove = Remove
waves.never = <never>
waves.every = every
waves.waves = wave(s)
waves.perspawn = per spawn
waves.to = to
waves.boss = Boss
waves.preview = Preview
waves.edit = Edit...
waves.copy = Copy to Clipboard
waves.load = Load from Clipboard
waves.invalid = Invalid waves in clipboard.
waves.copied = Waves copied.
editor.default = [LIGHT_GRAY]<Default>
edit = Edit...
editor.name = Name:
editor.teams = Teams
editor.elevation = Elevation
editor.errorload = Error loading file:\n[accent]{0}
editor.errorsave = Error saving file:\n[accent]{0}
editor.errorname = Map has no name defined.
editor.update = Update
editor.randomize = Randomize
editor.apply = Apply
editor.generate = Generate
editor.resize = Resize
editor.loadmap = Load Map
editor.savemap = Save Map
editor.saved = Saved!
editor.save.noname = Your map does not have a name! Set one in the 'map info' menu.
editor.save.overwrite = Your map overwrites a built-in map! Pick a different name in the 'map info' menu.
editor.import.exists = [scarlet]Unable to import:[] a built-in map named '{0}' already exists!
editor.import = Import...
editor.importmap = Import Map
editor.importmap.description = Import an already existing map
editor.importfile = Import File
editor.importfile.description = Import an external map file
editor.importimage = Import Legacy Image
editor.importimage.description = Import an external map image file
editor.export = Export...
editor.exportfile = Export File
editor.exportfile.description = Export a map file
editor.exportimage = Export Terrain Image
editor.exportimage.description = Export a map image file
editor.loadimage = Import Terrain
editor.saveimage = Export Terrain
editor.unsaved = [scarlet]You have unsaved changes![]\nAre you sure you want to exit?
editor.resizemap = Resize Map
editor.mapname = Map Name:
editor.overwrite = [accent]Warning!\nThis overwrites an existing map.
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
editor.selectmap = Select a map to load:
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
filter.distort = Distort
filter.noise = Noise
filter.ore = Ore
filter.rivernoise = River Noise
filter.scatter = Scatter
filter.terrain = Terrain
filter.option.scale = Scale
filter.option.chance = Chance
filter.option.mag = Magnitude
filter.option.threshold = Threshold
filter.option.circle-scale = Circle Scale
filter.option.octaves = Octaves
filter.option.falloff = Falloff
filter.option.block = Block
filter.option.floor = Floor
filter.option.wall = Wall
filter.option.ore = Ore
filter.option.floor2 = Secondary Floor
filter.option.threshold2 = Secondary Threshold
width = Width:
height = Height:
menu = Menu
play = Play
load = Load
save = Save
fps = FPS: {0}
tps = TPS: {0}
ping = Ping: {0}ms
language.restart = Please restart your game for the language settings to take effect.
settings = Settings
tutorial = Tutorial
editor = Editor
mapeditor = Map Editor
donate = Donate
abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked
complete = [LIGHT_GRAY]Reach:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best Wave: {0}
launch = < LAUNCH >
launch.title = Launch Successful
launch.next = [LIGHT_GRAY]next opportunity at wave {0}
launch.unable = [scarlet]Unable to LAUNCH.[] {0} Enemies.
launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base.
uncover = Uncover
configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}.
zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected:
add = Add...
boss.health = Boss Health
connectfail = [crimson]Failed to connect to server:\n\n[accent]{0}
error.unreachable = Server unreachable.\nIs the address spelled correctly?
error.invalidaddress = Invalid address.
error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct!
error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry!
error.alreadyconnected = Already connected.
error.mapnotfound = Map file not found!
error.io = Network I/O error.
error.any = Unknown network error.
zone.groundZero.name = Ground Zero
zone.craters.name = The Craters
zone.frozenForest.name = Frozen Forest
zone.ruinousShores.name = Ruinous Shores
zone.stainedMountains.name = Stained Mountains
zone.desolateRift.name = Desolate Rift
zone.nuclearComplex.name = Nuclear Production Complex
settings.language = Language
settings.reset = Reset to Defaults
settings.rebind = Rebind
settings.controls = Controls
settings.game = Game
settings.sound = Sound
settings.graphics = Graphics
settings.cleardata = Clear Game Data...
settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done cannot be undone!
settings.clearall.confirm = [scarlet]WARNING![]\nThis will clear all data, including saves, maps, unlocks and keybinds.\nOnce you press 'ok' the game will wipe all data and automatically exit.
settings.clearunlocks = Clear Unlocks
settings.clearall = Clear All
paused = [accent]< Paused >
yes = Yes
no = No
info.title = Info
error.title = [crimson]An error has occured
error.crashtitle = An error has occured
blocks.outputspeed = Drill Speed: {0}/
blocks.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Block Info
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Power Capacity
blocks.powershot = Power/Shot
blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Range
blocks.size = Size
blocks.liquidcapacity = Liquid Capacity
blocks.maxitemssecond = Max Items
blocks.powerrange = Power Range
blocks.poweruse = Power Use
blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Input Item Capacity
blocks.outputitemcapacity = Output Item Capacity
blocks.itemcapacity = Item Capacity
blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer
blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Input Liquid
blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Input Item
blocks.inputitems = Input Items
blocks.outputitem = Output Item
blocks.drilltier = Drillables
blocks.drillspeed = Base Drill Speed
blocks.maxunits = Max Active Units
blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use
blocks.coolant = Coolant
blocks.liquid = Liquid
blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Health
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Inaccuracy
blocks.shots = Shots
blocks.reload = Shots/Second
blocks.inputfuel = Fuel
blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Input capacity
blocks.outputcapacity = Output capacity
blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] damage
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x fire rate
unit.blocks = blocks
unit.powersecond = power units/second
unit.liquidsecond = liquid units/second
unit.itemssecond = items/second
unit.liquidunits = liquid units
unit.powerunits = power units
unit.degrees = degrees
unit.seconds = seconds
unit.items = items
category.general = General
category.power = Power
category.liquids = Liquids
category.items = Items
category.crafting = Crafting
category.shooting = Shooting
category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto-Target
setting.fpscap.name = Max FPS
setting.fpscap.none = None
setting.fpscap.text = {0} FPS
setting.swapdiagonal.name = Always Diagonal Placement
setting.difficulty.training = training
setting.difficulty.easy = easy
setting.difficulty.normal = normal
setting.difficulty.hard = hard
setting.difficulty.insane = insane
setting.difficulty.name = Difficulty:
setting.screenshake.name = Screen Shake
setting.effects.name = Display Effects
setting.sensitivity.name = Controller Sensitivity
setting.saveinterval.name = Autosave Interval
setting.seconds = {0} Seconds
setting.fullscreen.name = Fullscreen
setting.borderless.name = Borderless Window
setting.fps.name = Show FPS
setting.vsync.name = VSync
setting.lasers.name = Show Power Lasers
setting.minimap.name = Show Minimap
setting.musicvol.name = Music Volume
setting.mutemusic.name = Mute Music
setting.sfxvol.name = SFX Volume
setting.mutesound.name = Mute Sound
setting.crashreport.name = Send Anonymous Crash Reports
keybind.title = Rebind Keys
category.general.name = General
category.view.name = View
category.multiplayer.name = Multiplayer
command.attack = Attack
command.retreat = Retreat
command.patrol = Patrol
keybind.gridMode.name = Block Select
keybind.gridModeShift.name = Category Select
keybind.press = Press a key...
keybind.press.axis = Press an axis or key...
keybind.screenshot.name = Map Screenshot
keybind.move_x.name = Move x
keybind.move_y.name = Move y
keybind.select.name = Select/Shoot
keybind.diagonal_placement.name = Diagonal Placement
keybind.pick.name = Pick Block
keybind.break_block.name = Break Block
keybind.deselect.name = Deselect
keybind.shoot.name = Shoot
keybind.zoom_hold.name = Zoom Hold
keybind.zoom.name = Zoom
keybind.menu.name = Menu
keybind.pause.name = Pause
keybind.dash.name = Dash
keybind.chat.name = Chat
keybind.player_list.name = Player list
keybind.console.name = Console
keybind.rotate.name = Rotate
keybind.toggle_menus.name = Toggle menus
keybind.chat_history_prev.name = Chat history prev
keybind.chat_history_next.name = Chat history next
keybind.chat_scroll.name = Chat scroll
keybind.drop_unit.name = drop unit
keybind.zoom_minimap.name = Zoom minimap
mode.help.title = Description of modes
mode.survival.name = Survival
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.
mode.sandbox.name = sandbox
mode.sandbox.description = infinite resources and no timer for waves.
mode.freebuild.name = freebuild
mode.freebuild.description = limited resources and no timer for waves.
mode.pvp.name = PvP
mode.pvp.description = fight against other players locally.
mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI (Red Team) Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items
content.liquid.name = Liquids
content.unit.name = Units
content.block.name = Blocks
content.mech.name = Mechs
item.copper.name = Copper
item.copper.description = A useful structure material. Used extensively in all types of blocks.
item.lead.name = Lead
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
item.coal.name = Coal
item.coal.description = A common and readily available fuel.
item.graphite.name = Graphite
item.titanium.name = Titanium
item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft.
item.thorium.name = Thorium
item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel.
item.silicon.name = Silicon
item.silicon.description = An extremely useful semiconductor, with applications in solar panels and many complex electronics.
item.plastanium.name = Plastanium
item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition.
item.phase-fabric.name = Phase Fabric
item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology.
item.surge-alloy.name = Surge Alloy
item.surge-alloy.description = An advanced alloy with unique electrical properties.
item.spore-pod.name = Spore Pod
item.spore-pod.description = Used for conversion into oil, explosives and fuel.
item.sand.name = Sand
item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux.
item.blast-compound.name = Blast Compound
item.blast-compound.description = A volatile compound used in bombs and explosives. While it can burned as fuel, this is not advised.
item.pyratite.name = Pyratite
item.pyratite.description = An extremely flammable substance used in incendiary weapons.
item.metaglass.name = Metaglass
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
item.scrap.name = Scrap
item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals.
liquid.water.name = Water
liquid.slag.name = Slag
liquid.oil.name = Oil
liquid.cryofluid.name = Cryofluid
mech.alpha-mech.name = Alpha
mech.alpha-mech.weapon = Heavy Repeater
mech.alpha-mech.ability = Drone Swarm
mech.alpha-mech.description = The standard mech. Has decent speed and damage output; can create up to 3 drones for increased offensive capability.
mech.delta-mech.name = Delta
mech.delta-mech.weapon = Arc Generator
mech.delta-mech.ability = Discharge
mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run attacks. Does little damage against structures, but can kill large groups of enemy units very quickly with its arc lightning weapons.
mech.tau-mech.name = Tau
mech.tau-mech.weapon = Restruct Laser
mech.tau-mech.ability = Repair Burst
mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can heal allies in a radius with its repair ability.
mech.omega-mech.name = Omega
mech.omega-mech.weapon = Swarm Missiles
mech.omega-mech.ability = Armored Configuration
mech.omega-mech.description = A bulky and well-armored mech, made for front-line assaults. Its armor ability can block up to 90% of incoming damage.
mech.dart-ship.name = Dart
mech.dart-ship.weapon = Repeater
mech.dart-ship.description = The standard ship. Reasonably fast and light, but has little offensive capability and low mining speed.
mech.javelin-ship.name = Javelin
mech.javelin-ship.description = A hit-and-run strike ship. While initially slow, it can accelerate to great speeds and fly by enemy outposts, dealing large amounts of damage with its lightning ability and missiles.
mech.javelin-ship.weapon = Burst Missiles
mech.javelin-ship.ability = Discharge Booster
mech.trident-ship.name = Trident
mech.trident-ship.description = A heavy bomber. Reasonably well armored.
mech.trident-ship.weapon = Bomb Bay
mech.glaive-ship.name = Glaive
mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed.
mech.glaive-ship.weapon = Flame Repeater
item.explosiveness = [LIGHT_GRAY]Explosiveness: {0}%
item.flammability = [LIGHT_GRAY]Flammability: {0}%
item.radioactivity = [LIGHT_GRAY]Radioactivity: {0}%
unit.health = [LIGHT_GRAY]Health: {0}
unit.speed = [LIGHT_GRAY]Speed: {0}
mech.weapon = [LIGHT_GRAY]Weapon: {0}
mech.health = [LIGHT_GRAY]Health: {0}
mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0}
mech.minespeed = [LIGHT_GRAY]Mining Speed: {0}
mech.minepower = [LIGHT_GRAY]Mining Power: {0}
mech.ability = [LIGHT_GRAY]Ability: {0}
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
liquid.temperature = [LIGHT_GRAY]Temperature: {0}
block.grass.name = Grass
block.salt.name = Salt
block.sandrocks.name = Sand Rocks
block.spore-pine.name = Spore Pine
block.sporerocks.name = Spore Rocks
block.rock.name = Rock
block.snowrock.name = Snow Rock
block.shale.name = Shale
block.shale-boulder.name = Shale Boulder
block.moss.name = Moss
block.spore-moss.name = Spore Moss
block.shalerocks.name = Shale Rocks
block.scrap-wall.name = Scrap Wall
block.scrap-wall-large.name = Large Scrap Wall
block.scrap-wall-huge.name = Huge Scrap Wall
block.scrap-wall-gigantic.name = Gigantic Scrap Wall
block.thruster.name = Thruster
block.kiln.name = Kiln
block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power.
block.graphite-press.name = Graphite Press
block.multi-press.name = Multi-Press
block.constructing = {0} [LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn
block.core-shard.name = Core: Shard
block.core-foundation.name = Core: Foundation
block.core-nucleus.name = Core: Nucleus
block.deepwater.name = deepwater
block.water.name = water
block.tainted-water.name = Tainted Water
block.darksand-tainted-water.name = Dark Sand Tainted Water
block.tar.name = Tar
block.stone.name = Stone
block.sand.name = Sand
block.darksand.name = Dark Sand
block.ice.name = Ice
block.snow.name = Snow
block.craters.name = Craters
block.sand-water.name = Sand water
block.darksand-water.name = Dark Sand Water
block.char.name = Char
block.holostone.name = Holo stone
block.ice-snow.name = Ice Snow
block.rocks.name = Rocks
block.icerocks.name = Ice rocks
block.snowrocks.name = Snow Rocks
block.dunerocks.name = Dune Rocks
block.pine.name = Pine
block.white-tree-dead.name = White Tree Dead
block.white-tree.name = White Tree
block.spore-cluster.name = Spore Cluster
block.metal-floor.name = Metal Floor 1
block.metal-floor-2.name = Metal Floor 2
block.metal-floor-3.name = Metal Floor 3
block.metal-floor-5.name = Metal Floor 4
block.metal-floor-damaged.name = Metal Floor Damaged
block.ignarock.name = Igna Rock
block.hotrock.name = Hot Rock
block.magmarock.name = Magma Rock
block.cliffs.name = Cliffs
block.copper-wall.name = Copper Wall
block.copper-wall-large.name = Large Copper Wall
block.titanium-wall.name = Titanium Wall
block.titanium-wall-large.name = Large Titanium Wall
block.phase-wall.name = Phase Wall
block.phase-wall-large.name = Large Phase Wall
block.thorium-wall.name = Thorium Wall
block.thorium-wall-large.name = Large Thorium Wall
block.door.name = Door
block.door-large.name = Large Door
block.duo.name = Duo
block.scorch.name = Scorch
block.scatter.name = Scatter
block.hail.name = Hail
block.lancer.name = Lancer
block.conveyor.name = Conveyor
block.titanium-conveyor.name = Titanium Conveyor
block.junction.name = Junction
block.router.name = Router
block.distributor.name = Distributor
block.sorter.name = Sorter
block.sorter.description = Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right.
block.overflow-gate.name = Overflow Gate
block.overflow-gate.description = A combination splitter and router that only outputs to the left and right if the front path is blocked.
block.silicon-smelter.name = Silicon Smelter
block.phase-weaver.name = Phase Weaver
block.pulverizer.name = Pulverizer
block.cryofluidmixer.name = Cryofluid Mixer
block.melter.name = Melter
block.incinerator.name = Incinerator
block.spore-press.name = Spore Press
block.separator.name = Separator
block.power-node.name = Power Node
block.power-node-large.name = Large Power Node
block.surge-tower.name = Surge Tower
block.battery.name = Battery
block.battery-large.name = Large Battery
block.combustion-generator.name = Combustion Generator
block.turbine-generator.name = Turbine Generator
block.differential-generator.name = Differential Generator
block.impact-reactor.name = Impact Reactor
block.mechanical-drill.name = Mechanical Drill
block.pneumatic-drill.name = Pneumatic Drill
block.laser-drill.name = Laser Drill
block.water-extractor.name = Water Extractor
block.cultivator.name = Cultivator
block.alpha-dart-mech-pad.name = Alpha-Dart Mech Pad
block.delta-mech-pad.name = Delta Mech Pad
block.javelin-ship-pad.name = Javelin Ship Pad
block.trident-ship-pad.name = Trident Ship Pad
block.glaive-ship-pad.name = Glaive Ship Pad
block.omega-mech-pad.name = Omega Mech Pad
block.tau-mech-pad.name = Tau Mech Pad
block.conduit.name = Conduit
block.mechanical-pump.name = Mechanical Pump
block.item-source.name = Item Source
block.item-void.name = Item Void
block.liquid-source.name = Liquid Source
block.power-void.name = Power Void
block.power-source.name = Power Infinite
block.unloader.name = Unloader
block.vault.name = Vault
block.wave.name = Wave
block.swarmer.name = Swarmer
block.salvo.name = Salvo
block.ripple.name = Ripple
block.phase-conveyor.name = Phase Conveyor
block.bridge-conveyor.name = Bridge Conveyor
block.plastanium-compressor.name = Plastanium Compressor
block.pyratite-mixer.name = Pyratite Mixer
block.blast-mixer.name = Blast Mixer
block.solar-panel.name = Solar Panel
block.solar-panel-large.name = Large Solar Panel
block.oil-extractor.name = Oil Extractor
block.spirit-factory.name = Spirit Drone Factory
block.phantom-factory.name = Phantom Drone Factory
block.wraith-factory.name = Wraith Fighter Factory
block.ghoul-factory.name = Ghoul Bomber Factory
block.dagger-factory.name = Dagger Mech Factory
block.crawler-factory.name = Crawler Mech Factory
block.titan-factory.name = Titan Mech Factory
block.fortress-factory.name = Fortress Mech Factory
block.revenant-factory.name = Revenant Fighter Factory
block.repair-point.name = Repair Point
block.pulse-conduit.name = Pulse Conduit
block.phase-conduit.name = Phase Conduit
block.liquid-router.name = Liquid Router
block.liquid-tank.name = Liquid Tank
block.liquid-junction.name = Liquid Junction
block.bridge-conduit.name = Bridge Conduit
block.rotary-pump.name = Rotary Pump
block.thorium-reactor.name = Thorium Reactor
block.mass-driver.name = Mass Driver
block.blast-drill.name = Airblast Drill
block.thermal-pump.name = Thermal Pump
block.thermal-generator.name = Thermal Generator
block.alloy-smelter.name = Alloy Smelter
block.mender.name = Mender
block.mend-projector.name = Mend Projector
block.surge-wall.name = Surge Wall
block.surge-wall-large.name = Large Surge Wall
block.cyclone.name = Cyclone
block.fuse.name = Fuse
block.shock-mine.name = Shock Mine
block.overdrive-projector.name = Overdrive Projector
block.force-projector.name = Force Projector
block.arc.name = Arc
block.rtg-generator.name = RTG Generator
block.spectre.name = Spectre
block.meltdown.name = Meltdown
block.container.name = Container
block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = blue
team.red.name = red
team.orange.name = orange
team.none.name = gray
team.green.name = green
team.purple.name = purple
unit.spirit.name = Spirit Drone
unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores and repairs blocks.
unit.phantom.name = Phantom Drone
unit.phantom.description = An advanced drone unit. Automatically mines ores and repairs blocks. Significantly more effective than a spirit drone.
unit.dagger.name = Dagger
unit.dagger.description = A basic ground unit. Useful in swarms.
unit.crawler.name = Crawler
unit.titan.name = Titan
unit.titan.description = An advanced, armored ground unit. Attacks both ground and air targets.
unit.ghoul.name = Ghoul Bomber
unit.ghoul.description = A heavy carpet bomber.
unit.wraith.name = Wraith Fighter
unit.wraith.description = A fast, hit-and-run interceptor unit.
unit.fortress.name = Fortress
unit.fortress.description = A heavy artillery ground unit.
unit.revenant.name = Revenant
unit.eruptor.name = Eruptor
unit.chaos-array.name = Chaos Array
unit.eradicator.name = Eradicator
unit.lich.name = Lich
unit.reaper.name = Reaper
tutorial.begin = Your mission here is to eradicate the[LIGHT_GRAY] enemy[].\n\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.
tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nPlace one on a copper vein.
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.
tutorial.morecopper = More copper is required.\n\nEither mine it manually, or place more drills.
tutorial.turret = Defensive structures must be built to repel the[LIGHT_GRAY] enemy[].\nBuild a duo turret near your base.
tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill next to the turret to supply it with mined copper.
tutorial.waves = The[LIGHT_GRAY] enemy[] approaches.\n\nDefend your core for 2 waves. Build more turrets.
tutorial.lead = More ores are available. Explore and mine[accent] lead[].\n\nDrag from your unit to the core to transfer resources.
tutorial.smelter = Copper and lead are weak metals.\nSuperior[accent] Dense Alloy[] can be created in a smelter.\n\nBuild one.
tutorial.densealloy = The smelter will now produce alloy.\nGet some.\nImprove the production if necessary.
tutorial.siliconsmelter = The core will now create a[accent] spirit drone[] for mining and repairing blocks.\n\nFactories for other units can be created with [accent] silicon.\nMake a silicon smelter.
tutorial.silicondrill = Silicon requires[accent] coal[] and[accent] sand[].\nStart by making drills.
tutorial.generator = This technology requires power.\nCreate a[accent] combustion generator[] for it.
tutorial.generatordrill = Combustion generators need fuel.\nFuel it with coal from a drill.
tutorial.node = Power requires transport.\nCreate a[accent] power node[] next to your combustion generator to transfer its power.
tutorial.nodelink = Power can be transferred through contacting power blocks and generators, or by linked power nodes.\n\nLink power by tapping the node and selecting the generator and silicon smelter.
tutorial.silicon = Silicon is being produced. Get some.\n\nImproving the production system is advised.
tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will be used to create attack mechs.
tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources.
tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary.
tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs.
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles.
block.thorium-wall.description = A strong defensive block.\nGood protection from enemies.
block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles.
block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful.
block.phase-wall-large.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful.\nSpans multiple tiles.
block.surge-wall.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.
block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles.
block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.
block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\nSpans multiple tiles.
block.mend-projector.description = Periodically heals blocks in its vicinity.
block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors.
block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets.
block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy.
block.duo.description = A small, cheap turret.
block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units.
block.arc.description = A small turret which shoots electricity in a random arc towards the enemy.
block.hail.description = A small artillery turret.
block.lancer.description = A medium-sized turret which shoots charged electricity beams.
block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles.
block.salvo.description = A medium-sized turret which fires shots in salvos.
block.swarmer.description = A medium-sized turret which shoots burst missiles.
block.ripple.description = A large artillery turret which fires several shots simultaneously.
block.cyclone.description = A large rapid fire turret.
block.fuse.description = A large turret which shoots powerful short-range beams.
block.spectre.description = A large turret which shoots two powerful bullets at once.
block.meltdown.description = A large turret which shoots powerful long-range beams.
block.conveyor.description = Basic item transport block. Moved items forward and automatically deposits them into turrets or crafters. Rotatable.
block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors.
block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles.
block.junction.description = Acts as a bridge for two crossing conveyor belts. Useful in situations with two different conveyors carrying different materials to different locations.
block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range.
block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon.
block.plastanium-compressor.description = Produces plastanium from oil and titanium.
block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand.
block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper.
block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand.
block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite.
block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound.
block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling.
block.melter.description = Heats up stone to very high temperatures to obtain lava.
block.incinerator.description = Gets rid of any excess item or liquid.
block.spore-press.description = Compresses spore pods into oil.
block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone.
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks.
block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes.
block.battery.description = Stores power whenever there is an abundance and provides power whenever there is a shortage, as long as there is capacity left.
block.battery-large.description = Stores much more power than a regular battery.
block.combustion-generator.description = Generates power by burning oil or flammable materials.
block.turbine-generator.description = More efficient than a combustion generator, but requires additional water.
block.thermal-generator.description = Generates a large amount of power from lava.
block.solar-panel.description = Provides a small amount of power from the sun.
block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build.
block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. Power output depends on fullness, with base power generated at half capacity.
block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor.
block.unloader.description = Unloads items from a container, vault or core onto a conveyor or directly into an adjacent block. The type of item to be unloaded can be changed by tapping on the unloader.
block.container.description = Stores a small amount of items of each type. Adjacent containers, vaults and cores will be treated as a single storage unit. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container.
block.vault.description = Stores a large amount of items of each type. Adjacent containers, vaults and cores will be treated as a single storage unit. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault.
block.mechanical-drill.description = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely.
block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure.
block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill.
block.blast-drill.description = The ultimate drill. Requires large amounts of power.
block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby.
block.cultivator.description = Cultivates the soil with water in order to obtain biomatter.
block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby.
block.trident-ship-pad.description = Leave your current vessel and change into a reasonably well armored heavy bomber.\nUse the pad by double tapping while standing on it.
block.javelin-ship-pad.description = Leave your current vessel and change into a strong and fast interceptor with lightning weapons.\nUse the pad by double tapping while standing on it.
block.glaive-ship-pad.description = Leave your current vessel and change into a large, well-armored gunship.\nUse the pad by double tapping while standing on it.
block.tau-mech-pad.description = Leave your current vessel and change into a support mech which can heal friendly buildings and units.\nUse the pad by double tapping while standing on it.
block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it.
block.omega-mech-pad.description = Leave your current vessel and change into a bulky and well-armored mech, made for front-line assaults.\nUse the pad by double tapping while standing on it.
block.spirit-factory.description = Produces light drones which mine ore and repair blocks.
block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone.
block.wraith-factory.description = Produces fast, hit-and-run interceptor units.
block.ghoul-factory.description = Produces heavy carpet bombers.
block.dagger-factory.description = Produces basic ground units.
block.titan-factory.description = Produces advanced, armored ground units.
block.fortress-factory.description = Produces heavy artillery ground units.
block.revenant-factory.description = Produces heavy laser air units.
block.repair-point.description = Continuously heals the closest damaged unit in its vicinity.
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits.
block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits.
block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles.
block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets.
block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations.
block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building.
block.mechanical-pump.description = A cheap pump with slow output, but no power consumption.
block.rotary-pump.description = An advanced pump which doubles up speed by using power.
block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava.
block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.
block.distributor.description = An advanced router which splits items to up to 7 other directions equally.
block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building.
block.item-source.description = Infinitely outputs items. Sandbox only.
block.liquid-source.description = Infinitely outputs liquids. Sandbox only.
block.item-void.description = Destroys any items which go into it without using power. Sandbox only.
block.power-source.description = Infinitely outputs power. Sandbox only.
block.power-void.description = Voids all power inputted into it. Sandbox only.
liquid.water.description = Commonly used for cooling machines and waste processing.
liquid.oil.description = Can be burnt, exploded or used as a coolant.
liquid.cryofluid.description = The most efficient liquid for cooling things down.

View File

@@ -40,6 +40,7 @@ addplayers = Agregar/Quitar Jugadores
customgame = Partida personalizada customgame = Partida personalizada
newgame = New Game newgame = New Game
none = <no hay> none = <no hay>
minimap = Minimap
close = Cerrar close = Cerrar
quit = Salir quit = Salir
maps = Mapas maps = Mapas
@@ -335,66 +336,48 @@ no = No
info.title = [accent]Información info.title = [accent]Información
error.title = [crimson]Un error ha ocurrido. error.title = [crimson]Un error ha ocurrido.
error.crashtitle = Un error ha ocurrido. error.crashtitle = Un error ha ocurrido.
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Información del Bloque block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Capacidad de Energía blocks.powercapacity = Capacidad de Energía
blocks.powershot = Energía/Disparo blocks.powershot = Energía/Disparo
blocks.targetsair = Apunta al Aire blocks.targetsair = Apunta al Aire
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Rango blocks.shootrange = Rango
blocks.size = Tamaño blocks.size = Tamaño
blocks.liquidcapacity = Capacidad de Líquidos blocks.liquidcapacity = Capacidad de Líquidos
blocks.maxitemssecond = Máximo de Objetos
blocks.powerrange = Rango de Energía blocks.powerrange = Rango de Energía
blocks.poweruse = Consumo de Energía blocks.poweruse = Consumo de Energía
blocks.powerdamage = Energía/Daño blocks.powerdamage = Energía/Daño
blocks.inputitemcapacity = Capacidad de Entrada de los Objetos
blocks.outputitemcapacity = Capacidad de Salida de los Objetos
blocks.itemcapacity = Capacidad de Objetos blocks.itemcapacity = Capacidad de Objetos
blocks.basepowergeneration = Generación de energía base blocks.basepowergeneration = Generación de energía base
blocks.powertransferspeed = Transferencia de Energía blocks.productiontime = Production Time
blocks.craftspeed = Velocidad de Producción
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Líquidos de Entrada
blocks.inputliquidaux = Líquido Auxiliar
blocks.inputitem = Objeto de Entrada
blocks.inputitems = Objetos de Entrada
blocks.outputitem = Objeto de Salida
blocks.drilltier = Taladrables blocks.drilltier = Taladrables
blocks.drillspeed = Velocidad Base del Taladro blocks.drillspeed = Velocidad Base del Taladro
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Líquido de Salida
blocks.liquidoutputspeed = Velocidad de Salida del Líquido
blocks.liquiduse = Uso de Líquido
blocks.coolant = Refrigerante
blocks.liquid = Liquid
blocks.coolantuse = Uso del Refrigerante
blocks.inputliquidfuel = Combustible Líquido
blocks.liquidfueluse = Uso del Combustible Líquido
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Vida blocks.health = Vida
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Imprecisión blocks.inaccuracy = Imprecisión
blocks.shots = Disparos blocks.shots = Disparos
blocks.reload = Recarga blocks.reload = Recarga
blocks.inputfuel = Combustible
blocks.fuelburntime = Tiempo de Quemado del Combustible
blocks.inputcapacity = Capacidad de entrada
blocks.outputcapacity = Capacidad de salida
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = unidades de líquido
unit.powerunits = unidades de energía unit.powerunits = unidades de energía
unit.degrees = grados unit.degrees = grados
unit.seconds = segundos unit.seconds = segundos
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = objetos unit.items = objetos
category.general = General category.general = General
category.power = Energía category.power = Energía
@@ -425,6 +411,7 @@ category.optional = Mejoras Opcionales
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto apuntado setting.autotarget.name = Auto apuntado
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Mostrar FPS setting.fps.name = Mostrar FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Mostrar Energía de los Láseres setting.lasers.name = Mostrar Energía de los Láseres
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Mostrar Minimapa setting.minimap.name = Mostrar Minimapa
setting.musicvol.name = Volumen de la Música setting.musicvol.name = Volumen de la Música
setting.mutemusic.name = Silenciar Musica setting.mutemusic.name = Silenciar Musica
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Capacidad de objetos: {0}
mech.minespeed = [LIGHT_GRAY]Velocidad de minado: {0} mech.minespeed = [LIGHT_GRAY]Velocidad de minado: {0}
mech.minepower = [LIGHT_GRAY]Potencia de minado: {0} mech.minepower = [LIGHT_GRAY]Potencia de minado: {0}
mech.ability = [LIGHT_GRAY]Hablidad: {0} mech.ability = [LIGHT_GRAY]Hablidad: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0} liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0} liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0}
liquid.temperature = [LIGHT_GRAY]Temperatura: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0}

View File

@@ -1,45 +1,46 @@
credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!)
credits = Crédits credits = Crédits
contributors = Translators and Contributors contributors = Traducteurs et contributeurs
discord = Rejoignez le discord de Mindustry discord = Rejoignez le discord de Mindustry
link.discord.description = Le discord officiel de mindustry link.discord.description = Le discord officiel de Mindustry!
link.github.description = Code source du jeu link.github.description = Code source du jeu.
link.dev-builds.description = Versions instables du jeu link.dev-builds.description = Versions instables du jeu.
link.trello.description = Trello officiel pour les futurs ajouts . link.trello.description = Trello officiel pour les futurs ajouts .
link.itch.io.description = Page itch.io avec le lien du téléchargement pour PC et la version web . link.itch.io.description = Page itch.io avec le lien du téléchargement pour PC et la version web .
link.google-play.description = Listing par le Google Play Store link.google-play.description = Accès à la version android du Google Play Store.
link.wiki.description = Wiki officiel de mindustry . link.wiki.description = Wiki officiel de mindustry .
linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copié avec succès. linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copié avec succès.
screenshot = Screenshot saved to {0} screenshot = Capture d'écran sauvegardée à {0}
gameover = Partie terminée. gameover = Partie terminée.
gameover.pvp = L'équipe [accent] {0}[] a gagnée ! gameover.pvp = L'équipe [accent] {0}[] a gagnée !
highscore = [YELLOW]Nouveau meilleur score! highscore = [YELLOW]Nouveau meilleur score!
stat.wave = Waves Defeated:[accent] {0} stat.wave = Vagues vaincues:[accent] {0}
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0} stat.enemiesDestroyed = Ennemies détruits:[accent] {0}
stat.built = Buildings Built:[accent] {0} stat.built = Bâtiments construits:[accent] {0}
stat.destroyed = Buildings Destroyed:[accent] {0} stat.destroyed = Bâtiments détruits:[accent] {0}
stat.deconstructed = Buildings Deconstructed:[accent] {0} stat.deconstructed = Bâtiments déconstruits:[accent] {0}
stat.delivered = Resources Launched: stat.delivered = Ressources transférées:
stat.rank = Final Rank: [accent]{0} stat.rank = Rang Final: [accent]{0}
placeline = You have selected a block.\nYou can[accent] place in a line[] by[accent] holding down your finger for a few seconds[] and dragging in a direction.\nTry it. placeline = Tu as sélectionné un bloc.\nTu peux les[accent] placer en rangée[] en[accent] maintenant ton doigt sur l'écran pendant quelques secondes[] et en le glissant vers n'importe qu'elle direction.\nEssaye!
removearea = You have selected removal mode.\nYou can[accent] remove blocks in a rectangle[] by[accent] holding down your finger for a few seconds[] and dragging.\nTry it. removearea = Tu as sélectionné le mode de suppression.\nTu peux[accent] supprimer les blocs en rectangle[] en[accent] maintenant ton doigt sur l'écran pendant quelques secondes[] et en le glissant.\nEssaye!
launcheditems = [accent]Launched Items launcheditems = [accent]ressources transférées
map.delete = Êtes-vous sûr de supprimer cette carte"[accent]{0}[]"? map.delete = Êtes-vous sûr de supprimer cette carte"[accent]{0}[]"?
level.highscore = Meilleur score: [accent]{0} level.highscore = Meilleur score: [accent]{0}
level.select = Sélection de niveau level.select = Sélection de niveau
level.mode = Mode de jeu : level.mode = Mode de jeu :
showagain = Ne pas montrer la prochaine fois showagain = Ne pas montrer la prochaine fois
coreattack = [scarlet]<La base est sous les feux ennemis> coreattack = [scarlet]<La base est sous les feux ennemis>
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente
outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} outofbounds = [[ HORS LIMITES ]\n[]auto-destruction dans {0}
database = Core Database database = Base de données
savegame = Sauvegarder la partie savegame = Sauvegarder la partie
loadgame = Charger la partie loadgame = Charger la partie
joingame = Rejoindre une partie joingame = Rejoindre une partie
addplayers = Ajouter/Enlever des joueurs addplayers = Ajouter/Enlever des joueurs
customgame = Partie personnalisée customgame = Partie customisée
newgame = New Game newgame = Nouvelle partie
none = <vide> none = <vide>
minimap = Minimap
close = Fermer close = Fermer
quit = Quitter quit = Quitter
maps = Cartes maps = Cartes
@@ -47,16 +48,16 @@ continue = Continuer
maps.none = [LIGHT_GRAY]Aucune carte trouvée! maps.none = [LIGHT_GRAY]Aucune carte trouvée!
about.button = À propos about.button = À propos
name = Nom: name = Nom:
noname = Pick a[accent] player name[] first. noname = Commencer par choisir un[accent] nom de joueur[].
filename = Nom du fichier: filename = Nom du fichier:
unlocked = Nouveau bloc débloqué! unlocked = Nouveau bloc débloqué!
completed = [accent]Completed completed = [accent]Complété
techtree = Tech Tree techtree = Arbre technologique
research.list = [LIGHT_GRAY]Research: research.list = [LIGHT_GRAY]Recherche:
research = Research research = Rechercher
researched = [LIGHT_GRAY]{0} researched. researched = [LIGHT_GRAY]{0} recherché(e).
players = {0} joueurs en ligne players = {0} joueurs en ligne
players.single = {0} joueur en ligne players.single = {0} joueurs en ligne
server.closing = [accent]Fermeture du serveur... server.closing = [accent]Fermeture du serveur...
server.kicked.kick = Vous avez été expulsé du serveur! server.kicked.kick = Vous avez été expulsé du serveur!
server.kicked.serverClose = Serveur fermé. server.kicked.serverClose = Serveur fermé.
@@ -148,7 +149,7 @@ save.wave = Vague {0}
save.difficulty = Difficulté: {0} save.difficulty = Difficulté: {0}
save.date = Dernière sauvegarde: {0} save.date = Dernière sauvegarde: {0}
save.playtime = Temps de jeu: {0} save.playtime = Temps de jeu: {0}
warning = Warning. warning = Avertissement.
confirm = Confirmer confirm = Confirmer
delete = Supprimer delete = Supprimer
ok = OK ok = OK
@@ -191,32 +192,32 @@ editor.oregen.info = Génération de minerais:
editor.mapinfo = Infos sur la carte editor.mapinfo = Infos sur la carte
editor.author = Auteur: editor.author = Auteur:
editor.description = Description: editor.description = Description:
editor.waves = Waves: editor.waves = Vagues:
waves.title = Waves waves.title = Vagues
waves.remove = Remove waves.remove = Remove
waves.never = <never> waves.never = jamais
waves.every = every waves.every = tous les
waves.waves = wave(s) waves.waves = vague(s)
waves.perspawn = per spawn waves.perspawn = par apparition
waves.to = to waves.to = à
waves.boss = Boss waves.boss = Boss
waves.preview = Preview waves.preview = Prévisualiser
waves.edit = Edit... waves.edit = Modifier...
waves.copy = Copy to Clipboard waves.copy = Copier dans le Presse-papiers
waves.load = Load from Clipboard waves.load = Coller depuis le Presse-papiers
waves.invalid = Invalid waves in clipboard. waves.invalid = Vagues invalides dans le Presse-papiers.
waves.copied = Waves copied. waves.copied = Vagues copiées
editor.default = [LIGHT_GRAY]<Default> editor.default = [LIGHT_GRAY]<par défaut>
edit = Edit... edit = Modifier...
editor.name = Nom: editor.name = Nom:
editor.teams = Équipe editor.teams = Équipe
editor.elevation = Élevation editor.elevation = Élevation
editor.errorload = Error loading file:\n[accent]{0} editor.errorload = Erreur lors du chargement du fichier:\n[accent]{0}
editor.errorsave = Error saving file:\n[accent]{0} editor.errorsave = Erreur lors de la sauvegarde du fichier:\n[accent]{0}
editor.errorname = Map has no name defined. editor.errorname = La carte n'a pas de nom!
editor.update = Update editor.update = Mettre à jour
editor.randomize = Randomize editor.randomize = Randomiser
editor.apply = Apply editor.apply = Appliquer
editor.generate = Générer editor.generate = Générer
editor.resize = Redimensionner editor.resize = Redimensionner
editor.loadmap = Charger une carte editor.loadmap = Charger une carte
@@ -245,26 +246,26 @@ editor.mapname = Nom de la carte²:
editor.overwrite = [accent]Attention !\nCeci réécrit une carte existante . editor.overwrite = [accent]Attention !\nCeci réécrit une carte existante .
editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire? editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire?
editor.selectmap = Séléctionnez une carte: editor.selectmap = Séléctionnez une carte:
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filters.empty = [LIGHT_GRAY]Aucun filtre! Ajoutez-en un avec les boutons ci-dessous.
filter.distort = Distort filter.distort = Déformation
filter.noise = Noise filter.noise = Bruit
filter.ore = Ore filter.ore = Minerai
filter.rivernoise = River Noise filter.rivernoise = Bruit des rivières
filter.scatter = Scatter filter.scatter = Dispersement
filter.terrain = Terrain filter.terrain = Terrain
filter.option.scale = Scale filter.option.scale = Gamme
filter.option.chance = Chance filter.option.chance = Chance
filter.option.mag = Magnitude filter.option.mag = Magnitude
filter.option.threshold = Threshold filter.option.threshold = Seuil
filter.option.circle-scale = Circle Scale filter.option.circle-scale = Gamme du cercle
filter.option.octaves = Octaves filter.option.octaves = Octaves
filter.option.falloff = Falloff filter.option.falloff = Diminution
filter.option.block = Block filter.option.block = Bloc
filter.option.floor = Floor filter.option.floor = Sol
filter.option.wall = Wall filter.option.wall = Mur
filter.option.ore = Ore filter.option.ore = Minerai
filter.option.floor2 = Secondary Floor filter.option.floor2 = Sol secondaire
filter.option.threshold2 = Secondary Threshold filter.option.threshold2 = Seuil secondaire
width = Largeur: width = Largeur:
height = Hauteur: height = Hauteur:
menu = Menu menu = Menu
@@ -281,49 +282,49 @@ editor = Éditeur
mapeditor = Éditeur de carte mapeditor = Éditeur de carte
donate = Faire un\ndon donate = Faire un\ndon
abandon = Abandon abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = Cette zone et tous ses ressources vont être perdues.
locked = Locked locked = Verrouillé
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Compléter:
zone.requirement = Wave {0} in zone {1} zone.requirement = Vague {0} dans la zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Reprendre la partie en cours:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Meilleur: {0}
launch = Launch launch = Lancement
launch.title = Launch Successful launch.title = Lancement réussi
launch.next = [LIGHT_GRAY]next opportunity at wave {0} launch.next = [LIGHT_GRAY] Prochaine opportunité à la vague {0}
launch.unable = [scarlet]Unable to LAUNCH.[] Enemies. launch.unable = [scarlet]Impossible d'effectuer le lancement.[] Ennemis.
launch.confirm = This will launch all resources in your core.\nYou will not be able to return to this base. launch.confirm = Cela va transférer tous tes ressources dans votre coeur.\nTu ne vas pas pouvoir retourner à cette base.
uncover = Uncover uncover = Découvrir
configure = Configure Loadout configure = Configurer le transfert des ressources.
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Atteigner la vague {0}\npour configurer le transfert des ressources
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} Débloquée.
zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.requirement.complete = Vague {0} atteinte:\n{1} Exigences de la zone complétées
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Vague {0} atteinte:\nConfiguration du transfert débloquée.
zone.resources = Resources Detected: zone.resources = Ressources tectées:
add = Add... add = Ajouter...
boss.health = Boss Health boss.health = Vie du BOSS
connectfail = [crimson]Échec de la connexion au serveur : [accent]{0} connectfail = [crimson]Échec de la connexion au serveur : [accent]{0}
error.unreachable = Server injoignable. error.unreachable = Serveur injoignable.
error.invalidaddress = Adresse invalide. error.invalidaddress = Adresse invalide.
error.timedout = Délai de connexion dépassé!\nAssurez-vous que l'hôte a autorisé l'accès au port, et que l'adresse soit correcte! error.timedout = Délai de connexion dépassé!\nAssurez-vous que l'hôte a autorisé l'accès au port, et que l'adresse soit correcte!
error.mismatch = Erreur de paquet:\nPossible différence de verison entre le client et le serveur .\nVérifiez que vous et l'hôte avez la plus récente version de Mindustry ! error.mismatch = Erreur de paquet:\nPossible différence de verison entre le client et le serveur .\nVérifiez que vous et l'hôte avez la plus récente version de Mindustry !
error.alreadyconnected = Déjà connecté. error.alreadyconnected = Déjà connecté.
error.mapnotfound = Fichier de la carte introuvable! error.mapnotfound = Fichier de la carte introuvable!
error.io = Network I/O error. error.io = Erreur de Réseau (I/O)
error.any = Erreur réseau inconnue. error.any = Erreur réseau inconnue.
zone.groundZero.name = Ground Zero zone.groundZero.name = Première Bataille
zone.craters.name = The Craters zone.craters.name = Les Cratères
zone.frozenForest.name = Frozen Forest zone.frozenForest.name = Forêt Glaciale
zone.ruinousShores.name = Ruinous Shores zone.ruinousShores.name = Rives en Ruine
zone.stainedMountains.name = Stained Mountains zone.stainedMountains.name = Montagnes Tâchetées
zone.desolateRift.name = Desolate Rift zone.desolateRift.name = Fissure abandonnée
zone.nuclearComplex.name = Nuclear Production Complex zone.nuclearComplex.name = Complexe nucléaire
settings.language = Langage settings.language = Langage
settings.reset = Valeur par défaut. settings.reset = Valeur par défaut.
settings.rebind = Réatttribuer settings.rebind = Réatttribuer
settings.controls = Contrôles settings.controls = Contrôles
settings.game = Jeu settings.game = Jeu
settings.sound = Son settings.sound = Son
settings.graphics = Graphiques settings.graphics = Graphismes
settings.cleardata = Effacer les données du jeu... settings.cleardata = Effacer les données du jeu...
settings.clear.confirm = Êtes-vous sûr d'effacer ces données ?\nCe qui est fait ne peut être défait ! settings.clear.confirm = Êtes-vous sûr d'effacer ces données ?\nCe qui est fait ne peut être défait !
settings.clearall.confirm = [scarlet]ATTENTION![]\nCet action effacera toutes les données , incluant les sauvegarges, les cartes, les déblocages et la configuration des touches.\nUne fois que vous aurez pressé 'ok' le jeu effacera toutes les données et se fermera. settings.clearall.confirm = [scarlet]ATTENTION![]\nCet action effacera toutes les données , incluant les sauvegarges, les cartes, les déblocages et la configuration des touches.\nUne fois que vous aurez pressé 'ok' le jeu effacera toutes les données et se fermera.
@@ -335,34 +336,31 @@ no = Non
info.title = Info info.title = Info
error.title = [crimson]Une erreur s'est produite error.title = [crimson]Une erreur s'est produite
error.crashtitle = Une erreur s'est produite error.crashtitle = Une erreur s'est produite
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Vitesse de forage: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficacité: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Info sur le bloc blocks.blockinfo = Info sur le bloc
blocks.powerbalance = Power: {0} bar.powerbalance = Énergie: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Énergie en sortie: {0}
blocks.powercapacity = capacité d'énergie blocks.powercapacity = Capacité d'énergie
blocks.powershot = Énergie/Tir blocks.powershot = Énergie/Tir
blocks.targetsair = Cible les unités aériennes blocks.targetsair = Cible les unités aériennes
blocks.targetsground = Targets Ground blocks.targetsground = Cible les unités terrestres
blocks.items = Items: {0} bar.items = Objets: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Vitesse de Déplacement
blocks.launchtime = Time Between Launches blocks.launchtime = Temps entre chaque lancement
blocks.shootrange = Portée blocks.shootrange = Portée
blocks.size = Taille blocks.size = Taille
blocks.liquidcapacity = Capacité en liquide blocks.liquidcapacity = Capacité en liquide
blocks.maxitemssecond = Production maximale
blocks.powerrange = Distance de transmission blocks.powerrange = Distance de transmission
blocks.poweruse = Énergie utilisée blocks.poweruse = Énergie utilisée
blocks.powerdamage = Énergie/Dégâts blocks.powerdamage = Énergie/Dégâts
blocks.inputitemcapacity = Capacité d'entrée
blocks.outputitemcapacity = Capacité de sortie
blocks.itemcapacity = Stockage blocks.itemcapacity = Stockage
blocks.basepowergeneration = Generation d'énergie minimale blocks.basepowergeneration = Génération d'énergie minimale
blocks.powertransferspeed = Vitesse de transfert d'énergie blocks.powertransferspeed = Vitesse de transfert d'énergie
blocks.craftspeed = Vitesse de production blocks.craftspeed = Vitesse de production
blocks.repairtime = Block Full Repair Time blocks.repairtime = Temps pour la Réparation Totale du Bloc
blocks.range = Range blocks.range = Portée
blocks.inputliquid = Liquide requis blocks.inputliquid = Liquide requis
blocks.inputliquidaux = Liquide optionnel blocks.inputliquidaux = Liquide optionnel
blocks.inputitem = Objets en entrée blocks.inputitem = Objets en entrée
@@ -370,23 +368,23 @@ blocks.inputitems = Objets utilisés
blocks.outputitem = Objet produit blocks.outputitem = Objet produit
blocks.drilltier = Forable blocks.drilltier = Forable
blocks.drillspeed = Vitesse de forage de base blocks.drillspeed = Vitesse de forage de base
blocks.maxunits = Max Active Units blocks.maxunits = Nombre d'unité actives maximal
blocks.liquidoutput = Liquide en sortie blocks.liquidoutput = Liquide en sortie
blocks.liquidoutputspeed = Vitesse de production de liquide blocks.liquidoutputspeed = Vitesse de production de liquide
blocks.liquiduse = Quantité de liquide utilisée blocks.liquiduse = Quantité de liquide utilisée
blocks.coolant = Liquide de refroidissement blocks.coolant = Liquide de refroidissement
blocks.liquid = Liquid bar.liquid = Liquide
blocks.coolantuse = Quantité de liquide de refroidissement utilisée blocks.coolantuse = Quantité de liquide de refroidissement utilisée
blocks.inputliquidfuel = Carburant liquide blocks.inputliquidfuel = Carburant liquide
blocks.liquidfueluse = Quantité de carburant liquide utilisé blocks.liquidfueluse = Quantité de carburant liquide utilisé
blocks.boostitem = Boost Item blocks.boostitem = Objets boosters
blocks.boostliquid = Boost Liquid blocks.boostliquid = Liquides boosters
blocks.health = Santé blocks.health = Santé
blocks.heat = Heat bar.heat = Chaleur
blocks.power = Power bar.power = Énergie
blocks.progress = Build Progress bar.progress = Progression de la construction
blocks.spawned = Units: {0}/{1} bar.spawned = Unités: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Énergie minimum nécessaire
blocks.inaccuracy = Précision blocks.inaccuracy = Précision
blocks.shots = Tir blocks.shots = Tir
blocks.reload = Tirs/Seconde blocks.reload = Tirs/Seconde
@@ -394,18 +392,18 @@ blocks.inputfuel = Carburant
blocks.fuelburntime = Durée du carburant blocks.fuelburntime = Durée du carburant
blocks.inputcapacity = Capacité d'entrée blocks.inputcapacity = Capacité d'entrée
blocks.outputcapacity = Capacité de production blocks.outputcapacity = Capacité de production
blocks.ammo = Ammo blocks.ammo = Munitions
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] dmg de zone ~[stat] {1}[lightgray] tuiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiaire
bullet.homing = [stat]homing bullet.homing = [stat]autoguidage
bullet.shock = [stat]shock bullet.shock = [stat]choc
bullet.frag = [stat]frag bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback bullet.knockback = [stat]{0}[lightgray] recul
bullet.freezing = [stat]freezing bullet.freezing = [stat]gel
bullet.tarred = [stat]tarred bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier bullet.multiplier = [stat]{0}[lightgray]x multiplicateur de munitions
bullet.reload = [stat]{0}[lightgray]x reload bullet.reload = [stat]{0}[lightgray]x rechargement
unit.blocks = blocs unit.blocks = blocs
unit.powersecond = Énergie/seconde unit.powersecond = Énergie/seconde
unit.liquidsecond = Liquides/seconde unit.liquidsecond = Liquides/seconde
@@ -414,6 +412,9 @@ unit.liquidunits = Unité de liquide
unit.powerunits = Unité d'énergie unit.powerunits = Unité d'énergie
unit.degrees = degrés unit.degrees = degrés
unit.seconds = secondes unit.seconds = secondes
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = Objets unit.items = Objets
category.general = Général category.general = Général
category.power = Énergie category.power = Énergie
@@ -421,22 +422,22 @@ category.liquids = Liquides
category.items = Objets category.items = Objets
category.crafting = Fabrication category.crafting = Fabrication
category.shooting = Défense category.shooting = Défense
category.optional = Optional Enhancements category.optional = Améliorations optionnelles
setting.landscape.name = Lock Landscape setting.landscape.name = Verrouiller la rotation en mode paysage
setting.shadows.name = Shadows setting.shadows.name = Ombres
setting.animatedwater.name = Animated Water setting.animatedwater.name = Eau animée
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (demande le redémarrage de l'appareil)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Indicateurs pour les alliés
setting.autotarget.name = Visée automatique setting.autotarget.name = Visée automatique
setting.fpscap.name = Max FPS setting.fpscap.name = Max FPS
setting.fpscap.none = None setting.fpscap.none = None
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.swapdiagonal.name = Always Diagonal Placement setting.swapdiagonal.name = Autoriser le placement des blocs en diagonal
setting.difficulty.training = entraînement setting.difficulty.training = entraînement
setting.difficulty.easy = facile setting.difficulty.easy = Facile
setting.difficulty.normal = normal setting.difficulty.normal = Normal
setting.difficulty.hard = difficile setting.difficulty.hard = Difficile
setting.difficulty.insane = Extreme setting.difficulty.insane = Extrème
setting.difficulty.name = Difficulté: setting.difficulty.name = Difficulté:
setting.screenshake.name = Tremblement de l'écran setting.screenshake.name = Tremblement de l'écran
setting.effects.name = Montrer les effets setting.effects.name = Montrer les effets
@@ -444,37 +445,37 @@ setting.sensitivity.name = Sensibilité de la manette
setting.saveinterval.name = Intervalle des sauvegardes auto setting.saveinterval.name = Intervalle des sauvegardes auto
setting.seconds = {0} secondes setting.seconds = {0} secondes
setting.fullscreen.name = Plein écran setting.fullscreen.name = Plein écran
setting.borderless.name = Borderless Window setting.borderless.name = Fenêtre sans contour
setting.fps.name = Afficher FPS setting.fps.name = Afficher FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Afficher les rayons des lasers setting.lasers.name = Afficher les rayons des lasers
setting.minimap.name = montrer la minimap setting.minimap.name = Montrer la minimap
setting.musicvol.name = volume de la musique setting.musicvol.name = Volume de la musique
setting.mutemusic.name = Couper la musique setting.mutemusic.name = Couper la musique
setting.sfxvol.name = Volume des SFX setting.sfxvol.name = Volume des SFX
setting.mutesound.name = Couper les SFX setting.mutesound.name = Couper les SFX
setting.crashreport.name = Send Anonymous Crash Reports setting.crashreport.name = Envoyer un rapport de crash anonyme
keybind.title = Paramétrer les touches keybind.title = Paramétrer les touches
category.general.name = General category.general.name = Général
category.view.name = Voir category.view.name = Voir
category.multiplayer.name = Multijoueur category.multiplayer.name = Multijoueur
command.attack = Attaque command.attack = Attaque
command.retreat = Retraite command.retreat = Retraite
command.patrol = Patrouille command.patrol = Patrouille
keybind.gridMode.name = Block Select keybind.gridMode.name = Sélection des blocs
keybind.gridModeShift.name = Category Select keybind.gridModeShift.name = Sélection des catégories
keybind.press = Appuyer sur une touche... keybind.press = Appuyer sur une touche...
keybind.press.axis = Appuyer sur un axe ou une touche... keybind.press.axis = Appuyer sur un axe ou une touche...
keybind.screenshot.name = Map Screenshot keybind.screenshot.name = Capture d'écran
keybind.move_x.name = mouvement x keybind.move_x.name = mouvement x
keybind.move_y.name = mouvement y keybind.move_y.name = mouvement y
keybind.select.name = sélectionner keybind.select.name = sélectionner
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = Placement en diagonal
keybind.pick.name = Pick Block keybind.pick.name = Choisir un bloc
keybind.break_block.name = Break Block keybind.break_block.name = Suppprimer un bloc
keybind.deselect.name = Déselectionner keybind.deselect.name = Désélectionner
keybind.shoot.name = tirer keybind.shoot.name = tirer
keybind.zoom_hold.name = tenir le zoom keybind.zoom_hold.name = maintenir 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
@@ -507,6 +508,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +596,7 @@ mech.itemcapacity = [LIGHT_GRAY]Capacité de stockage: {0}
mech.minespeed = [LIGHT_GRAY]Vitesse de minage: {0} mech.minespeed = [LIGHT_GRAY]Vitesse de minage: {0}
mech.minepower = [LIGHT_GRAY]Puissance du minage: {0} mech.minepower = [LIGHT_GRAY]Puissance du minage: {0}
mech.ability = [LIGHT_GRAY]Compétence: {0} mech.ability = [LIGHT_GRAY]Compétence: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique: {0} liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} liquid.viscosity = [LIGHT_GRAY]Viscosité: {0}
liquid.temperature = [LIGHT_GRAY]Température: {0} liquid.temperature = [LIGHT_GRAY]Température: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Ajouter/Enlever des joueurs
customgame = Partie personnalisée customgame = Partie personnalisée
newgame = New Game newgame = New Game
none = <Vide> none = <Vide>
minimap = Minimap
close = Fermer close = Fermer
quit = Quitter quit = Quitter
maps = Cartes maps = Cartes
@@ -335,66 +336,48 @@ no = Non
info.title = Info info.title = Info
error.title = [crimson]Une erreur s'est produite error.title = [crimson]Une erreur s'est produite
error.crashtitle = Une erreur s'est produite error.crashtitle = Une erreur s'est produite
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Info sur le bloc block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Capacité d'énergie blocks.powercapacity = Capacité d'énergie
blocks.powershot = Énergie/Tir blocks.powershot = Énergie/Tir
blocks.targetsair = Cible les unités aériennes blocks.targetsair = Cible les unités aériennes
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Portée blocks.shootrange = Portée
blocks.size = Taille blocks.size = Taille
blocks.liquidcapacity = Capacité en liquide blocks.liquidcapacity = Capacité en liquide
blocks.maxitemssecond = Production maximale
blocks.powerrange = Distance de transmission blocks.powerrange = Distance de transmission
blocks.poweruse = Énergie utilisée blocks.poweruse = Énergie utilisée
blocks.powerdamage = Énergie/Dégâts blocks.powerdamage = Énergie/Dégâts
blocks.inputitemcapacity = Capacité d'entrée
blocks.outputitemcapacity = Capacité de sortie
blocks.itemcapacity = Stockage blocks.itemcapacity = Stockage
blocks.basepowergeneration = Production d'énergie de base blocks.basepowergeneration = Production d'énergie de base
blocks.powertransferspeed = Vitesse de transfert d'énergie blocks.productiontime = Production Time
blocks.craftspeed = Vitesse de production
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Liquide requis
blocks.inputliquidaux = Liquide optionnel
blocks.inputitem = Objet utilisé
blocks.inputitems = Objets utilisés
blocks.outputitem = Objet produit
blocks.drilltier = Forable blocks.drilltier = Forable
blocks.drillspeed = Vitesse de forage de base blocks.drillspeed = Vitesse de forage de base
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Liquide en sortie
blocks.liquidoutputspeed = Vitesse de sortie du liquide
blocks.liquiduse = Quantité de liquide utilisé
blocks.coolant = Liquide de refroidissement
blocks.liquid = Liquid
blocks.coolantuse = Quantité de liquide de refroidissement utilisé
blocks.inputliquidfuel = Carburant liquide
blocks.liquidfueluse = Quantité de carburant liquide utilisé
blocks.boostitem = Objet boostant la production
blocks.boostliquid = Liquide boostant la production
blocks.health = Santé blocks.health = Santé
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Précision blocks.inaccuracy = Précision
blocks.shots = Tirs blocks.shots = Tirs
blocks.reload = Tirs/Seconde blocks.reload = Tirs/Seconde
blocks.inputfuel = Carburant
blocks.fuelburntime = Durée du carburant
blocks.inputcapacity = Capacité d'entrée
blocks.outputcapacity = Capacité de sortie
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = Unité de liquide
unit.powerunits = Unité d'énergie unit.powerunits = Unité d'énergie
unit.degrees = degrés unit.degrees = degrés
unit.seconds = secondes unit.seconds = secondes
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = Objets unit.items = Objets
category.general = Général category.general = Général
category.power = Énergie category.power = Énergie
@@ -425,6 +411,7 @@ category.optional = Améliorations facultatives
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Indicateurs d'alliés setting.indicators.name = Indicateurs d'alliés
setting.autotarget.name = Visée automatique setting.autotarget.name = Visée automatique
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Afficher FPS setting.fps.name = Afficher FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Afficher les rayons des lasers setting.lasers.name = Afficher les rayons des lasers
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Montrer la minimap setting.minimap.name = Montrer la minimap
setting.musicvol.name = Volume de la musique setting.musicvol.name = Volume de la musique
setting.mutemusic.name = Couper la musique setting.mutemusic.name = Couper la musique
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Capacité de stockage: {0}
mech.minespeed = [LIGHT_GRAY]Vitesse de minage: {0} mech.minespeed = [LIGHT_GRAY]Vitesse de minage: {0}
mech.minepower = [LIGHT_GRAY]Puissance du minage: {0} mech.minepower = [LIGHT_GRAY]Puissance du minage: {0}
mech.ability = [LIGHT_GRAY]Compétence: {0} mech.ability = [LIGHT_GRAY]Compétence: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0} liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0}
liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} liquid.viscosity = [LIGHT_GRAY]Viscosité: {0}
liquid.temperature = [LIGHT_GRAY]Température: {0} liquid.temperature = [LIGHT_GRAY]Température: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Tambah/Hapus Pemain
customgame = Game Bebas customgame = Game Bebas
newgame = New Game newgame = New Game
none = <kosong> none = <kosong>
minimap = Minimap
close = Tutup close = Tutup
quit = Keluar quit = Keluar
maps = Peta maps = Peta
@@ -335,66 +336,48 @@ no = No
info.title = [accent]Info info.title = [accent]Info
error.title = [crimson]Telah terjadi kesalahan error.title = [crimson]Telah terjadi kesalahan
error.crashtitle = Telah terjadi kesalahan error.crashtitle = Telah terjadi kesalahan
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Info Blok block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Kapasitas Tenaga blocks.powercapacity = Kapasitas Tenaga
blocks.powershot = Tenaga/tembakan blocks.powershot = Tenaga/tembakan
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Ukuran blocks.size = Ukuran
blocks.liquidcapacity = Kapasitas cairan blocks.liquidcapacity = Kapasitas cairan
blocks.maxitemssecond = Batas barang/detik
blocks.powerrange = Jangkauan tenaga blocks.powerrange = Jangkauan tenaga
blocks.poweruse = Power Use blocks.poweruse = Power Use
blocks.powerdamage = Power/Damage blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Input Item Capacity
blocks.outputitemcapacity = Input Item Capacity
blocks.itemcapacity = Kapasitas Barang blocks.itemcapacity = Kapasitas Barang
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.productiontime = Production Time
blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Cairan yang Masuk
blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Barang yang Masuk
blocks.inputitems = Input Items
blocks.outputitem = Output Item
blocks.drilltier = Drillables blocks.drilltier = Drillables
blocks.drillspeed = Base Drill Speed blocks.drillspeed = Base Drill Speed
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use
blocks.coolant = Coolant
blocks.liquid = Liquid
blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Darah blocks.health = Darah
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Ketidaktelitian blocks.inaccuracy = Ketidaktelitian
blocks.shots = Tembakan blocks.shots = Tembakan
blocks.reload = Reload blocks.reload = Reload
blocks.inputfuel = Fuel
blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Kapasitas masuk
blocks.outputcapacity = Kapasitas keluar
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = liquid units
unit.powerunits = power units unit.powerunits = power units
unit.degrees = degrees unit.degrees = degrees
unit.seconds = seconds unit.seconds = seconds
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = items unit.items = items
category.general = General category.general = General
category.power = Power category.power = Power
@@ -425,6 +411,7 @@ category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto-Target setting.autotarget.name = Auto-Target
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Tunjukkan FPS setting.fps.name = Tunjukkan FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Tampilkan Laser Tenaga setting.lasers.name = Tampilkan Laser Tenaga
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Show Minimap setting.minimap.name = Show Minimap
setting.musicvol.name = Volume Musik setting.musicvol.name = Volume Musik
setting.mutemusic.name = Bisukan Musik setting.mutemusic.name = Bisukan Musik
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0}
mech.minespeed = [LIGHT_GRAY]Mining Speed: {0} mech.minespeed = [LIGHT_GRAY]Mining Speed: {0}
mech.minepower = [LIGHT_GRAY]Mining Power: {0} mech.minepower = [LIGHT_GRAY]Mining Power: {0}
mech.ability = [LIGHT_GRAY]Ability: {0} mech.ability = [LIGHT_GRAY]Ability: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
liquid.temperature = [LIGHT_GRAY]Temperature: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Aggiungi/rimuovi giocatori
customgame = Gioco personalizzato customgame = Gioco personalizzato
newgame = New Game newgame = New Game
none = <Niente . . . > none = <Niente . . . >
minimap = Minimap
close = Chiuso close = Chiuso
quit = Esci quit = Esci
maps = Mappe maps = Mappe
@@ -335,66 +336,48 @@ no = No
info.title = [accent] Info info.title = [accent] Info
error.title = [crimson]Si è verificato un errore error.title = [crimson]Si è verificato un errore
error.crashtitle = Si è verificato un errore error.crashtitle = Si è verificato un errore
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = info sul blocco block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Capacità Energetica blocks.powercapacity = Capacità Energetica
blocks.powershot = Danno/Colpo blocks.powershot = Danno/Colpo
blocks.targetsair = Attacca nemici aerei blocks.targetsair = Attacca nemici aerei
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Raggio blocks.shootrange = Raggio
blocks.size = Grandezza blocks.size = Grandezza
blocks.liquidcapacity = Capacità del liquido blocks.liquidcapacity = Capacità del liquido
blocks.maxitemssecond = Oggetti massimi/secondo
blocks.powerrange = Raggio Energia blocks.powerrange = Raggio Energia
blocks.poweruse = Utilizzo energia blocks.poweruse = Utilizzo energia
blocks.powerdamage = Power/Damage blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Capacità oggetti in entrata
blocks.outputitemcapacity = Capacità oggetti in uscità
blocks.itemcapacity = Capacità blocks.itemcapacity = Capacità
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Velocità trasferimento energia blocks.productiontime = Production Time
blocks.craftspeed = Velocità produzione
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Input del liquido
blocks.inputliquidaux = Liquidi extra
blocks.inputitem = Input Oggetto
blocks.inputitems = Oggetti in entrata
blocks.outputitem = Oggetti in uscita
blocks.drilltier = Scavabili blocks.drilltier = Scavabili
blocks.drillspeed = Velocità scavo stbile blocks.drillspeed = Velocità scavo stbile
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Uscita liquidi
blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Uso liquidi
blocks.coolant = Refrigerante
blocks.liquid = Liquid
blocks.coolantuse = uso refrigerante
blocks.inputliquidfuel = carburante liquido
blocks.liquidfueluse = Utilizzo carburante liquido
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Salute blocks.health = Salute
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Inaccuratezza blocks.inaccuracy = Inaccuratezza
blocks.shots = Colpi blocks.shots = Colpi
blocks.reload = Ricarica blocks.reload = Ricarica
blocks.inputfuel = Carburante
blocks.fuelburntime = Tempo combustione carburante
blocks.inputcapacity = Capacità di ingresso
blocks.outputcapacity = Capacità di uscita
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = unità liquidi
unit.powerunits = unità energia unit.powerunits = unità energia
unit.degrees = gradi unit.degrees = gradi
unit.seconds = secondi unit.seconds = secondi
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = oggetti unit.items = oggetti
category.general = Generali category.general = Generali
category.power = Energia category.power = Energia
@@ -425,6 +411,7 @@ category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto-Target setting.autotarget.name = Auto-Target
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Mostra FPS setting.fps.name = Mostra FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Mostra Laser Energetici setting.lasers.name = Mostra Laser Energetici
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Mostra minimappa setting.minimap.name = Mostra minimappa
setting.musicvol.name = Volume Musica setting.musicvol.name = Volume Musica
setting.mutemusic.name = Silenzia musica setting.mutemusic.name = Silenzia musica
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Capacità oggetti: {0}
mech.minespeed = [LIGHT_GRAY]Velocità di scavo: {0} mech.minespeed = [LIGHT_GRAY]Velocità di scavo: {0}
mech.minepower = [LIGHT_GRAY]Potenza di scavo: {0} mech.minepower = [LIGHT_GRAY]Potenza di scavo: {0}
mech.ability = [LIGHT_GRAY]Abilità: {0} mech.ability = [LIGHT_GRAY]Abilità: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Capacità calorifica: {0} liquid.heatcapacity = [LIGHT_GRAY]Capacità calorifica: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosità: {0} liquid.viscosity = [LIGHT_GRAY]Viscosità: {0}
liquid.temperature = [LIGHT_GRAY]Temperatura: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0}

View File

@@ -40,6 +40,7 @@ addplayers = プレイヤーを追加/削除
customgame = カスタムゲーム customgame = カスタムゲーム
newgame = 新しいゲーム newgame = 新しいゲーム
none = <なし> none = <なし>
minimap = Minimap
close = 閉じる close = 閉じる
quit = 終了 quit = 終了
maps = マップ maps = マップ
@@ -335,66 +336,48 @@ no = いいえ
info.title = 情報 info.title = 情報
error.title = [crimson]エラーが発生しました error.title = [crimson]エラーが発生しました
error.crashtitle = エラーが発生しました error.crashtitle = エラーが発生しました
blocks.outputspeed = 採掘速度: {0}/秒 blocks.input = Input
blocks.efficiency = 効率: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = ブロック情報 block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = 電力: {0}
blocks.poweroutput = 電力発電量: {0}
blocks.powercapacity = 電力容量 blocks.powercapacity = 電力容量
blocks.powershot = 電力/ショット blocks.powershot = 電力/ショット
blocks.targetsair = 対空攻撃 blocks.targetsair = 対空攻撃
blocks.targetsground = 対地攻撃 blocks.targetsground = 対地攻撃
blocks.items = アイテム: {0}
blocks.itemsmoved = 輸送速度 blocks.itemsmoved = 輸送速度
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = 範囲 blocks.shootrange = 範囲
blocks.size = 大きさ blocks.size = 大きさ
blocks.liquidcapacity = 液体容量 blocks.liquidcapacity = 液体容量
blocks.maxitemssecond = 最大アイテム量
blocks.powerrange = 電力範囲 blocks.powerrange = 電力範囲
blocks.poweruse = 電力使用量 blocks.poweruse = 電力使用量
blocks.powerdamage = 電力/ダメージ blocks.powerdamage = 電力/ダメージ
blocks.inputitemcapacity = 搬入アイテム容量
blocks.outputitemcapacity = 搬出アイテム容量
blocks.itemcapacity = アイテム容量 blocks.itemcapacity = アイテム容量
blocks.basepowergeneration = 基本発電量 blocks.basepowergeneration = 基本発電量
blocks.powertransferspeed = 電力伝送量 blocks.productiontime = Production Time
blocks.craftspeed = 生産速度
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = 必要な液体
blocks.inputliquidaux = 補助液
blocks.inputitem = 必要なアイテム
blocks.inputitems = 必要なアイテム
blocks.outputitem = 搬出アイテム
blocks.drilltier = ドリル blocks.drilltier = ドリル
blocks.drillspeed = 基本採掘速度 blocks.drillspeed = 基本採掘速度
blocks.boosteffect = Boost Effect
blocks.maxunits = 最大ユニット数 blocks.maxunits = 最大ユニット数
blocks.liquidoutput = 搬出液体
blocks.liquidoutputspeed = 液体搬出速度
blocks.liquiduse = 液体使用量
blocks.coolant = 冷却
blocks.liquid = 液体
blocks.coolantuse = 冷却使用量
blocks.inputliquidfuel = 液体燃料
blocks.liquidfueluse = 液体燃料使用量
blocks.boostitem = 加速アイテム
blocks.boostliquid = 加速液体
blocks.health = 耐久値 blocks.health = 耐久値
blocks.heat =
blocks.power = 電力
blocks.progress = 建設状況
blocks.spawned = ユニット数: {0}/{1}
blocks.power.satisfaction = 電力需要
blocks.inaccuracy = 精度のずれ blocks.inaccuracy = 精度のずれ
blocks.shots = ショット blocks.shots = ショット
blocks.reload = ショット/秒 blocks.reload = ショット/秒
blocks.inputfuel = 燃料
blocks.fuelburntime = 燃焼時間
blocks.inputcapacity = 搬入容量
blocks.outputcapacity = 搬出容量
blocks.ammo = 弾薬 blocks.ammo = 弾薬
bar.drillspeed = 採掘速度: {0}/秒
bar.efficiency = 効率: {0}%
bar.powerbalance = 電力: {0}
bar.poweramount = Power: {0}
bar.poweroutput = 電力発電量: {0}
bar.items = アイテム: {0}
bar.liquid = 液体
bar.heat =
bar.power = 電力
bar.progress = 建設状況
bar.spawned = ユニット数: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = 液体
unit.powerunits = 電力 unit.powerunits = 電力
unit.degrees = unit.degrees =
unit.seconds = unit.seconds =
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = アイテム unit.items = アイテム
category.general = 一般 category.general = 一般
category.power = 電力 category.power = 電力
@@ -425,6 +411,7 @@ category.optional = 機能強化オプション
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = 水のアニメーション setting.animatedwater.name = 水のアニメーション
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = 味方の方角表示 setting.indicators.name = 味方の方角表示
setting.autotarget.name = 自動ターゲット setting.autotarget.name = 自動ターゲット
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = FPSを表示 setting.fps.name = FPSを表示
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = 電力レーザーを表示 setting.lasers.name = 電力レーザーを表示
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = ミニマップを表示 setting.minimap.name = ミニマップを表示
setting.musicvol.name = 音楽 音量 setting.musicvol.name = 音楽 音量
setting.mutemusic.name = 音楽をミュート setting.mutemusic.name = 音楽をミュート
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]アイテム容量: {0}
mech.minespeed = [LIGHT_GRAY]採掘速度: {0} mech.minespeed = [LIGHT_GRAY]採掘速度: {0}
mech.minepower = [LIGHT_GRAY]採掘性能: {0} mech.minepower = [LIGHT_GRAY]採掘性能: {0}
mech.ability = [LIGHT_GRAY]能力: {0} mech.ability = [LIGHT_GRAY]能力: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0} liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0}
liquid.viscosity = [LIGHT_GRAY]粘度: {0} liquid.viscosity = [LIGHT_GRAY]粘度: {0}
liquid.temperature = [LIGHT_GRAY]温度: {0} liquid.temperature = [LIGHT_GRAY]温度: {0}

View File

@@ -14,24 +14,27 @@ screenshot = 화면 캡쳐가 {0} 경로에 저장되었습니다.
gameover = 게임 오버 gameover = 게임 오버
gameover.pvp = [accent]{0}[] 팀이 승리했습니다! gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
highscore = [accent]최고점수 달성! highscore = [accent]최고점수 달성!
stat.wave = 웨이브 성공:[accent]{0} stat.wave = 웨이브 성공:[accent]{0}
stat.enemiesDestroyed = 파괴한 적 수:[accent]{0} stat.enemiesDestroyed = 파괴한 적 수:[accent]{0}
stat.built = 건설한 건물 수:[accent]{0} stat.built = 건설한 건물 수:[accent]{0}
stat.destroyed = 파괴된 건물 수:[accent]{0} stat.destroyed = 파괴된 건물 수:[accent]{0}
stat.deconstructed = 해체한 건물 수:[accent]{0} stat.deconstructed = 파괴한 건물 수:[accent]{0}
stat.delivered = 획득한 자원: stat.delivered = 획득한 자원:
stat.rank = 최종 기록: [accent]{0} stat.rank = 최종 기록: [accent]{0}
placeline = You have selected a block.\nYou can[accent] place in a line[] by[accent] holding down your finger for a few seconds[] and dragging in a direction.\nTry it.
removearea = You have selected removal mode.\nYou can[accent] remove blocks in a rectangle[] by[accent] holding down your finger for a few seconds[] and dragging.\nTry it. placeline = 블록을 선택하셨습니다.\n][accent]몇초간 설치 시작지점을 누르고[] 원하는 방향을 향해 드래그 하면 [accent]일렬로[] 설치할 수 있습니다.\n한번 해 보세요.
launcheditems = [accent]Launched Items removearea = 블록 제거모드를 선택하셨습니다.\n[accent]몇초간 제거 시작지점을 누르고[] 원하는 구역 끝을 향해 드래그 하면 [accent]직사각형[] 안에 있는 모든 건물을 제거할 수 있습니다.\n한번 해 보세요.
launcheditems = [accent]출격 아이템
map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?\n map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?\n
level.highscore = 최고 점수: [accent]{0} level.highscore = 최고 점수: [accent]{0}
level.select = 맵 선택 level.select = 맵 선택
level.mode = 게임 모드 : level.mode = 게임 모드 :
showagain = 다음 세션에서 이 메세지를 표시하지 않습니다 showagain = 다음 세션에서 이 메세지를 표시하지 않습니다
coreattack = < 코어가 공격받고 있습니다! > coreattack = < 코어가 공격받고 있습니다! >
nearpoint = [[ [scarlet]드롭 지점에서 나가세요[] ]\n모든 유닛 및 건물 파괴 임박 nearpoint = [[ [scarlet]드롭 지점에서 나가세요[] ]\n적 스폰시 건물 및 유닛 파괴
outofbounds = [[ 출입 금지 구역 ]\n[]{0}초후 건물이 해체됩니다. outofbounds = [[ 출입 금지 구역 ]\n[]{0}초후 유닛이 파괴됩니다.
database = 코어 데이터베이스 database = 코어 데이터베이스
savegame = 게임 저장 savegame = 게임 저장
loadgame = 게임 불러오기 loadgame = 게임 불러오기
@@ -40,6 +43,7 @@ addplayers = 플레이어 추가/제거
customgame = 커스텀 게임 customgame = 커스텀 게임
newgame = 새 게임 newgame = 새 게임
none = <없음> none = <없음>
minimap = 미니맵
close = 닫기 close = 닫기
quit = 나가기 quit = 나가기
maps = maps =
@@ -280,11 +284,12 @@ tutorial = 게임 방법
editor = 편집기 editor = 편집기
mapeditor = 맵 편집기 mapeditor = 맵 편집기
donate = 기부 donate = 기부
abandon = 버리기
abandon = 포기
abandon.text = 이 구역과 모든 자원이 적에게 빼앗길 것입니다. abandon.text = 이 구역과 모든 자원이 적에게 빼앗길 것입니다.
locked = 잠김 locked = 잠김
complete = [LIGHT_GRAY]완료: complete = [LIGHT_GRAY]완료:
zone.requirement = Wave {0} in zone {1} zone.requirement = 지역 {1} 에서 웨이브 {0} 달성
resume = 지역 계속 플레이:\n[LIGHT_GRAY]{0} resume = 지역 계속 플레이:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]최고 점수: {0} bestwave = [LIGHT_GRAY]최고 점수: {0}
launch = < 출격 > launch = < 출격 >
@@ -296,11 +301,12 @@ uncover = 털어넣기
configure = 로드아웃 설정 configure = 로드아웃 설정
configure.locked = {0} 단계에서 로드아웃을 설정할 수 있음. configure.locked = {0} 단계에서 로드아웃을 설정할 수 있음.
zone.unlocked = [LIGHT_GRAY] 잠금 해제됨. zone.unlocked = [LIGHT_GRAY] 잠금 해제됨.
zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met. zone.requirement.complete = 웨이브 {0} 달성:\n{1} 지역 요구사항이 충족됨.
zone.config.complete = 웨이브 {0} 달성:\n로드아웃 설정 잠금 해제됨. zone.config.complete = 웨이브 {0} 달성:\n로드아웃 설정 잠금 해제됨.
zone.resources = 자원 감지됨: zone.resources = 자원 감지됨:
add = 추가... add = 추가...
boss.health = 보스 체력 boss.health = 보스 체력
connectfail = [crimson]{0}[accent] 서버에 연결하지 못했습니다.[] connectfail = [crimson]{0}[accent] 서버에 연결하지 못했습니다.[]
error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요? error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요?
error.invalidaddress = 잘못된 주소입니다. error.invalidaddress = 잘못된 주소입니다.
@@ -310,6 +316,7 @@ error.alreadyconnected = 이미 접속중입니다.
error.mapnotfound = 맵 파일을 찾을 수 없습니다! error.mapnotfound = 맵 파일을 찾을 수 없습니다!
error.io = 네트워크 I/O 오류. error.io = 네트워크 I/O 오류.
error.any = 알 수 없는 네트워크 오류. error.any = 알 수 없는 네트워크 오류.
zone.groundZero.name = 그라운드 제로 zone.groundZero.name = 그라운드 제로
zone.craters.name = 분화구 zone.craters.name = 분화구
zone.frozenForest.name = 얼어붙은 숲 zone.frozenForest.name = 얼어붙은 숲
@@ -317,6 +324,7 @@ zone.ruinousShores.name = 파멸의 기슭
zone.stainedMountains.name = 얼룩진 산맥 zone.stainedMountains.name = 얼룩진 산맥
zone.desolateRift.name = 황량한 강 zone.desolateRift.name = 황량한 강
zone.nuclearComplex.name = 핵 생산 단지 zone.nuclearComplex.name = 핵 생산 단지
settings.language = 언어 settings.language = 언어
settings.reset = 설정 초기화 settings.reset = 설정 초기화
settings.rebind = 키 재설정 settings.rebind = 키 재설정
@@ -335,66 +343,48 @@ no = 아니오
info.title = [accent]정보 info.title = [accent]정보
error.title = [crimson]오류가 발생했습니다. error.title = [crimson]오류가 발생했습니다.
error.crashtitle = 오류가 발생했습니다. error.crashtitle = 오류가 발생했습니다.
blocks.outputspeed = 채광 속도: {0}/s blocks.input = 입력
blocks.efficiency = 효율성: {0}% blocks.output = 출력
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = 가속
blocks.blockinfo = 블록 정보 block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = 전력: {0}
blocks.poweroutput = 전력 출력: {0}
blocks.powercapacity = 전력 용량 blocks.powercapacity = 전력 용량
blocks.powershot = 1발당 전력 소모량 blocks.powershot = 1발당 전력 소모량
blocks.targetsair = 공중공격 가능 blocks.targetsair = 공중공격 가능
blocks.targetsground = 지상공격 가능 blocks.targetsground = 지상공격 가능
blocks.items = Items: {0}
blocks.itemsmoved = 이동 속도 blocks.itemsmoved = 이동 속도
blocks.launchtime = Time Between Launches blocks.launchtime = 출격 시간
blocks.shootrange = 사거리 blocks.shootrange = 사거리
blocks.size = 크기 blocks.size = 크기
blocks.liquidcapacity = 액체 용량 blocks.liquidcapacity = 액체 용량
blocks.maxitemssecond = 아이템 보관량
blocks.powerrange = 전력 범위 blocks.powerrange = 전력 범위
blocks.poweruse = 전력 사용 blocks.poweruse = 전력 사용
blocks.powerdamage = 전력/데미지 blocks.powerdamage = 전력/데미지
blocks.inputitemcapacity = 입력 아이템 용량
blocks.outputitemcapacity = 출력 아이템 용량
blocks.itemcapacity = 저장 용량 blocks.itemcapacity = 저장 용량
blocks.basepowergeneration = 전력 생성 blocks.basepowergeneration = 전력 생성
blocks.powertransferspeed = 전력 전송량 blocks.productiontime = 제작 시간
blocks.craftspeed = 생산 속도 blocks.repairtime = 전체 블록 수리시간
blocks.repairtime = Block Full Repair Time blocks.speedincrease = 속도 증가
blocks.range = Range blocks.range = 사거리
blocks.inputliquid = 사용되는 액체
blocks.inputliquidaux = 보조 액체
blocks.inputitem = 사용되는 아이템
blocks.inputitems = 사용되는 아이템들
blocks.outputitem = 출력 아이템
blocks.drilltier = 드릴 blocks.drilltier = 드릴
blocks.drillspeed = 기본 드릴 속도 blocks.drillspeed = 기본 드릴 속도
blocks.boosteffect = 가속 효과
blocks.maxunits = 최대 활성유닛 blocks.maxunits = 최대 활성유닛
blocks.liquidoutput = 액체 출력
blocks.liquidoutputspeed = 액체 출력속도
blocks.liquiduse = 액체 사용량
blocks.coolant = 냉각제
blocks.liquid = 액체
blocks.coolantuse = 냉각제 사용
blocks.inputliquidfuel = 연료 액
blocks.liquidfueluse = 액체 연료 사용
blocks.boostitem = 가속 아이템
blocks.boostliquid = 가속 액체
blocks.health = 체력 blocks.health = 체력
blocks.heat = 발열
blocks.power = 전력
blocks.progress = 건설 진행
blocks.spawned = 유닛: {0}/{1}
blocks.power.satisfaction = 전력 만족도
blocks.inaccuracy = 오차각 blocks.inaccuracy = 오차각
blocks.shots = 발포 횟수 blocks.shots = 발포 횟수
blocks.reload = 재장전 blocks.reload = 재장전
blocks.inputfuel = 연료
blocks.fuelburntime = 연료 연소 시간
blocks.inputcapacity = 입력 용량
blocks.outputcapacity = 출력 용량
blocks.ammo = 탄약 blocks.ammo = 탄약
bar.outputspeed = 채광 속도: {0}/s
bar.efficiency = 효율성: {0}%
bar.powerbalance = 전력: {0}/s
bar.poweroutput = 전력 출력: {0}
bar.items = 아이템: {0}
bar.liquid = 액체
bar.heat = 발열
bar.power = 전력
bar.progress = 건설 진행
bar.spawned = 유닛: {0}/{1}
bullet.damage = [stat]{0}[lightgray] 데미지 bullet.damage = [stat]{0}[lightgray] 데미지
bullet.splashdamage = [stat]{0}[lightgray] area 데미지 ~[stat] {1}[lightgray] 타일 bullet.splashdamage = [stat]{0}[lightgray] area 데미지 ~[stat] {1}[lightgray] 타일
bullet.incendiary = [stat]방화 bullet.incendiary = [stat]방화
@@ -406,6 +396,7 @@ bullet.freezing = [stat]동결
bullet.tarred = [stat]타르 bullet.tarred = [stat]타르
bullet.multiplier = [stat]{0}[lightgray]x 탄약 배율 bullet.multiplier = [stat]{0}[lightgray]x 탄약 배율
bullet.reload = [stat]{0}[lightgray]x 사격 속도 bullet.reload = [stat]{0}[lightgray]x 사격 속도
unit.blocks = 블록 unit.blocks = 블록
unit.powersecond = 전력/초 unit.powersecond = 전력/초
unit.liquidsecond = 액체/초 unit.liquidsecond = 액체/초
@@ -414,6 +405,9 @@ unit.liquidunits = 액체
unit.powerunits = 전력 unit.powerunits = 전력
unit.degrees = unit.degrees =
unit.seconds = unit.seconds =
unit.persecond = /초
unit.timesspeed = x 배
unit.percent = %
unit.items = 아이템 unit.items = 아이템
category.general = 일반 category.general = 일반
category.power = 전력 category.power = 전력
@@ -425,6 +419,7 @@ category.optional = 보조 아이템
setting.landscape.name = 가로화면으로 고정 setting.landscape.name = 가로화면으로 고정
setting.shadows.name = 그림자 setting.shadows.name = 그림자
setting.animatedwater.name = 움직이는 물 setting.animatedwater.name = 움직이는 물
setting.animatedshields.name = 움직이는 보호막
setting.antialias.name = 안티 에일리어싱[LIGHT_GRAY] (재시작 필요)[] setting.antialias.name = 안티 에일리어싱[LIGHT_GRAY] (재시작 필요)[]
setting.indicators.name = 아군/적 인디게이터 표시 setting.indicators.name = 아군/적 인디게이터 표시
setting.autotarget.name = 자동 조준 setting.autotarget.name = 자동 조준
@@ -448,6 +443,7 @@ setting.borderless.name = 테두리 없는 창모드
setting.fps.name = FPS 표시 setting.fps.name = FPS 표시
setting.vsync.name = VSync 활성화 setting.vsync.name = VSync 활성화
setting.lasers.name = 전력 노드 레이저 표시 setting.lasers.name = 전력 노드 레이저 표시
setting.pixelate.name = 픽셀화 [LIGHT_GRAY](게임 성능이 감소할 수 있습니다)
setting.minimap.name = 미니맵 보기 setting.minimap.name = 미니맵 보기
setting.musicvol.name = 음악 크기 setting.musicvol.name = 음악 크기
setting.mutemusic.name = 음소거 setting.mutemusic.name = 음소거
@@ -500,18 +496,23 @@ mode.pvp.name = PvP
mode.pvp.description = 실제 플레이어와 PvP를 합니다. mode.pvp.description = 실제 플레이어와 PvP를 합니다.
mode.attack.name = 공격 mode.attack.name = 공격
mode.attack.description = 일정 시간마다 적이 오는 단계가 없으며, 적의 기지를 파괴하는 것을 목표로 합니다. mode.attack.description = 일정 시간마다 적이 오는 단계가 없으며, 적의 기지를 파괴하는 것을 목표로 합니다.
mode.custom = Custom Rules mode.custom = 커스텀 규칙
rules.infiniteresources = 무한 자원 rules.infiniteresources = 무한 자원
rules.wavetimer = 웨이브 타이머 rules.wavetimer = 웨이브 타이머
rules.waves = 웨이브 rules.waves = 웨이브
rules.enemyCheat = 무한 AI 자원 rules.enemyCheat = 무한 AI 자원
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = 유닛 드롭 rules.unitdrops = 유닛 드롭
rules.unitbuildspeedmultiplier = 유닛 생산속도 배수
rules.unithealthmultiplier = 유닛 체력 배수
rules.playerdamagemultiplier = 플레이어 공격력 배수
rules.enemycorebuildradius = 적 코어 건설 금지구역:[LIGHT_GRAY] (타일) rules.enemycorebuildradius = 적 코어 건설 금지구역:[LIGHT_GRAY] (타일)
rules.respawntime = 리스폰 시간:[LIGHT_GRAY] (초) rules.respawntime = 리스폰 시간:[LIGHT_GRAY] (초)
rules.wavespacing = 웨이브 간격:[LIGHT_GRAY] (초) rules.wavespacing = 웨이브 간격:[LIGHT_GRAY] (초)
rules.buildcostmultiplier = 건설 소모 배율 rules.buildcostmultiplier = 건설 소모 배율
rules.buildspeedmultiplier = 건설 속도 배율 rules.buildspeedmultiplier = 건설 속도 배율
content.item.name = 아이템 content.item.name = 아이템
content.liquid.name = 액체 content.liquid.name = 액체
content.unit.name = 유닛 content.unit.name = 유닛
@@ -554,7 +555,7 @@ liquid.oil.name = 석유
liquid.cryofluid.name = 냉각유체 liquid.cryofluid.name = 냉각유체
mech.alpha-mech.name = 알파 mech.alpha-mech.name = 알파
mech.alpha-mech.weapon = 중무장 소총 mech.alpha-mech.weapon = 중무장 소총
mech.alpha-mech.ability = 없음 mech.alpha-mech.ability = 회복
mech.alpha-mech.description = 표준 기체.\n적절한 속도와 공격력을 갖추고 있습니다. mech.alpha-mech.description = 표준 기체.\n적절한 속도와 공격력을 갖추고 있습니다.
mech.delta-mech.name = 델타 mech.delta-mech.name = 델타
mech.delta-mech.weapon = 전격 생산기 mech.delta-mech.weapon = 전격 생산기
@@ -589,12 +590,14 @@ unit.speed = [LIGHT_GRAY]속도: {0}
mech.weapon = [LIGHT_GRAY]무기: {0} mech.weapon = [LIGHT_GRAY]무기: {0}
mech.health = [LIGHT_GRAY]체력: {0} mech.health = [LIGHT_GRAY]체력: {0}
mech.itemcapacity = [LIGHT_GRAY]아이템 수용 용량: {0} mech.itemcapacity = [LIGHT_GRAY]아이템 수용 용량: {0}
mech.minespeed = [LIGHT_GRAY]채광 속도: {0} mech.minespeed = [LIGHT_GRAY]채광 속도: {0}%
mech.minepower = [LIGHT_GRAY]채광 레벨: {0} mech.minepower = [LIGHT_GRAY]채광 레벨: {0}
mech.ability = [LIGHT_GRAY]능력: {0} mech.ability = [LIGHT_GRAY]능력: {0}
mech.buildspeed = [LIGHT_GRAY]건설 속도: {0}%
liquid.heatcapacity = [LIGHT_GRAY]발열 용량: {0} liquid.heatcapacity = [LIGHT_GRAY]발열 용량: {0}
liquid.viscosity = [LIGHT_GRAY]점도: {0} liquid.viscosity = [LIGHT_GRAY]점도: {0}
liquid.temperature = [LIGHT_GRAY]온도: {0} liquid.temperature = [LIGHT_GRAY]온도: {0}
block.grass.name = 잔디 block.grass.name = 잔디
block.salt.name = 소금 block.salt.name = 소금
block.sandrocks.name = 모래 바위 block.sandrocks.name = 모래 바위
@@ -694,7 +697,7 @@ block.battery-large.name = 대형 배터리
block.combustion-generator.name = 화력 발전기 block.combustion-generator.name = 화력 발전기
block.turbine-generator.name = 터빈 발전기 block.turbine-generator.name = 터빈 발전기
block.differential-generator.name = 차동 발전기 block.differential-generator.name = 차동 발전기
block.impact-reactor.name = 충격 반응기 block.impact-reactor.name = 핵융합로
block.mechanical-drill.name = 기계 드릴 block.mechanical-drill.name = 기계 드릴
block.pneumatic-drill.name = 강철 드릴 block.pneumatic-drill.name = 강철 드릴
block.laser-drill.name = 레이저 드릴 block.laser-drill.name = 레이저 드릴
@@ -751,7 +754,7 @@ block.blast-drill.name = 압축 공기분사 드릴
block.thermal-pump.name = 화력 펌프 block.thermal-pump.name = 화력 펌프
block.thermal-generator.name = 열발전기 block.thermal-generator.name = 열발전기
block.alloy-smelter.name = 서지 합금 제련소 block.alloy-smelter.name = 서지 합금 제련소
block.mender.name = Mender block.mender.name = 멘더
block.mend-projector.name = 수리 프로젝터 block.mend-projector.name = 수리 프로젝터
block.surge-wall.name = 서지 합금벽 block.surge-wall.name = 서지 합금벽
block.surge-wall-large.name = 큰 서지 합금벽 block.surge-wall-large.name = 큰 서지 합금벽
@@ -767,7 +770,7 @@ block.meltdown.name = 멜트다운
block.container.name = 컨테이너 block.container.name = 컨테이너
block.launch-pad.name = 발사대 block.launch-pad.name = 발사대
block.launch-pad.description = 출격할 필요 없이 아이템을 수송시킵시다. 미완성. block.launch-pad.description = 출격할 필요 없이 아이템을 수송시킵시다. 미완성.
block.launch-pad-large.name = Large Launch Pad block.launch-pad-large.name = 큰 출격 패드
team.blue.name = 블루팀 team.blue.name = 블루팀
team.red.name = 레드팀 team.red.name = 레드팀
team.orange.name = 오렌지팀 team.orange.name = 오렌지팀
@@ -852,7 +855,7 @@ block.silicon-smelter.description = 고순도 석탄으로 모래를 줄여 실
block.plastanium-compressor.description = 석유와 티타늄으로 플라스타늄을 생산합니다. block.plastanium-compressor.description = 석유와 티타늄으로 플라스타늄을 생산합니다.
block.phase-weaver.description = 방사능 토륨과 많은 량의 모래에서 상직물을 생산합니다. block.phase-weaver.description = 방사능 토륨과 많은 량의 모래에서 상직물을 생산합니다.
block.alloy-smelter.description = 티타늄, 납, 실리콘, 구리로부터 서지 합금을 생산합니다. block.alloy-smelter.description = 티타늄, 납, 실리콘, 구리로부터 서지 합금을 생산합니다.
block.pulverizer.description = 모래로 을 부숩니다. 천연 모래가 부족할 때 유용합니다. block.pulverizer.description = 모래로 을 부숩니다. 천연 모래가 부족할 때 유용합니다.
block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 피라타이트로 만듭니다. block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 피라타이트로 만듭니다.
block.blast-mixer.description = 기름을 사용하여 피라타이트를 인화성은 떨어지지만 폭발성은 높은 폭발성 화합물로 변환시킵니다. block.blast-mixer.description = 기름을 사용하여 피라타이트를 인화성은 떨어지지만 폭발성은 높은 폭발성 화합물로 변환시킵니다.
block.cryofluidmixer.description = 물과 티타늄을 냉각에 훨씬 더 효과적인 냉동액으로 결합시킵니다. block.cryofluidmixer.description = 물과 티타늄을 냉각에 훨씬 더 효과적인 냉동액으로 결합시킵니다.
@@ -872,7 +875,7 @@ block.solar-panel-large.description = 일반 태양 전지판보다 훨씬 나
block.thorium-reactor.description = 고방사능 토륨으로부터 막대한 양의 전력을 발생시킵니다. 지속적인 냉각이 필요하며 냉각제의 양이 부족하면 크게 폭발합니다. 전력 출력은 최대 용량에서 기본 전력을 발생시키는 완전성에 따라 결정됩니다. block.thorium-reactor.description = 고방사능 토륨으로부터 막대한 양의 전력을 발생시킵니다. 지속적인 냉각이 필요하며 냉각제의 양이 부족하면 크게 폭발합니다. 전력 출력은 최대 용량에서 기본 전력을 발생시키는 완전성에 따라 결정됩니다.
block.rtg-generator.description = 냉각은 필요 없지만 토륨 원자로에 비해 전력을 적게 공급하는 방사성 동위원소 열전 발생기. block.rtg-generator.description = 냉각은 필요 없지만 토륨 원자로에 비해 전력을 적게 공급하는 방사성 동위원소 열전 발생기.
block.unloader.description = 컨테이너, 금고 또는 코어에서 인접한 블록으로 아이템을 출하합니다. 출하시킬 아이템의 종류는 언로더를 눌러 지정할 수 있습니다. block.unloader.description = 컨테이너, 금고 또는 코어에서 인접한 블록으로 아이템을 출하합니다. 출하시킬 아이템의 종류는 언로더를 눌러 지정할 수 있습니다.
block.container.description = 각종 소량의 자원을 저장할 수 있습니다.[LIGHT_GRAY언로더[]를 사용하여 컨테이너에서 물건을 회수할 수 있습니다. block.container.description = 각종 소량의 자원을 저장할 수 있습니다.[LIGHT_GRAY]언로더[]를 사용하여 컨테이너에서 물건을 회수할 수 있습니다.
block.vault.description = 각종 대량의 자원을 저장할 수 있습니다.[LIGHT_GRAY]언로더[]를 사용하여 금고에서 물건을 회수할 수 있습니다. block.vault.description = 각종 대량의 자원을 저장할 수 있습니다.[LIGHT_GRAY]언로더[]를 사용하여 금고에서 물건을 회수할 수 있습니다.
block.mechanical-drill.description = 싸구려 드릴. 적절한 타일 위에 놓였을때 매우 느린 속도로 계속 출력합니다. block.mechanical-drill.description = 싸구려 드릴. 적절한 타일 위에 놓였을때 매우 느린 속도로 계속 출력합니다.
block.pneumatic-drill.description = 기압을 이용하여 보다 빠르고 단단한 물질을 채광할 수 있는 향상된 드릴. block.pneumatic-drill.description = 기압을 이용하여 보다 빠르고 단단한 물질을 채광할 수 있는 향상된 드릴.
@@ -893,6 +896,7 @@ block.wraith-factory.description = 빠른 뺑소니 요격기 유닛을 생산
block.ghoul-factory.description = 중탄두 폭격기를 생산합니다. block.ghoul-factory.description = 중탄두 폭격기를 생산합니다.
block.dagger-factory.description = 기본 지상 유닛을 생산합니다. block.dagger-factory.description = 기본 지상 유닛을 생산합니다.
block.titan-factory.description = 첨단 장갑 지상부대를 생산합니다. block.titan-factory.description = 첨단 장갑 지상부대를 생산합니다.
block.fortress-factory.description = 중대포 지상부대를 생산합니다. block.fortress-factory.description = 중대포 지상부대를 생산합니다.
block.revenant-factory.description = 중량의 레이저 포대를 가진 공중부대를 생산합니다. block.revenant-factory.description = 중량의 레이저 포대를 가진 공중부대를 생산합니다.
block.repair-point.description = 주변에서 가장 가까운 손상된 유닛을 지속적으로 치료합니다. block.repair-point.description = 주변에서 가장 가까운 손상된 유닛을 지속적으로 치료합니다.

View File

@@ -40,6 +40,7 @@ addplayers = Add/Remove Players
customgame = Custom Game customgame = Custom Game
newgame = New Game newgame = New Game
none = <none> none = <none>
minimap = Minimap
close = Close close = Close
quit = Quit quit = Quit
maps = Maps maps = Maps
@@ -335,66 +336,48 @@ no = No
info.title = Info info.title = Info
error.title = [crimson]An error has occured error.title = [crimson]An error has occured
error.crashtitle = An error has occured error.crashtitle = An error has occured
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Block Info block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Power Capacity blocks.powercapacity = Power Capacity
blocks.powershot = Power/Shot blocks.powershot = Power/Shot
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Size blocks.size = Size
blocks.liquidcapacity = Liquid Capacity blocks.liquidcapacity = Liquid Capacity
blocks.maxitemssecond = Max Items
blocks.powerrange = Power Range blocks.powerrange = Power Range
blocks.poweruse = Power Use blocks.poweruse = Power Use
blocks.powerdamage = Power/Damage blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Input Item Capacity
blocks.outputitemcapacity = Output Item Capacity
blocks.itemcapacity = Item Capacity blocks.itemcapacity = Item Capacity
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.productiontime = Production Time
blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Input Liquid
blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Input Item
blocks.inputitems = Input Items
blocks.outputitem = Output Item
blocks.drilltier = Drillables blocks.drilltier = Drillables
blocks.drillspeed = Base Drill Speed blocks.drillspeed = Base Drill Speed
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use
blocks.coolant = Coolant
blocks.liquid = Liquid
blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Health blocks.health = Health
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Inaccuracy blocks.inaccuracy = Inaccuracy
blocks.shots = Shots blocks.shots = Shots
blocks.reload = Shots/Second blocks.reload = Shots/Second
blocks.inputfuel = Fuel
blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Input capacity
blocks.outputcapacity = Output capacity
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = liquid units
unit.powerunits = power units unit.powerunits = power units
unit.degrees = degrees unit.degrees = degrees
unit.seconds = seconds unit.seconds = seconds
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = items unit.items = items
category.general = General category.general = General
category.power = Power category.power = Power
@@ -425,6 +411,7 @@ category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto-Target setting.autotarget.name = Auto-Target
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Show FPS setting.fps.name = Show FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Show Power Lasers setting.lasers.name = Show Power Lasers
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Show Minimap setting.minimap.name = Show Minimap
setting.musicvol.name = Music Volume setting.musicvol.name = Music Volume
setting.mutemusic.name = Mute Music setting.mutemusic.name = Mute Music
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0}
mech.minespeed = [LIGHT_GRAY]Mining Speed: {0} mech.minespeed = [LIGHT_GRAY]Mining Speed: {0}
mech.minepower = [LIGHT_GRAY]Mining Power: {0} mech.minepower = [LIGHT_GRAY]Mining Power: {0}
mech.ability = [LIGHT_GRAY]Ability: {0} mech.ability = [LIGHT_GRAY]Ability: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
liquid.temperature = [LIGHT_GRAY]Temperature: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Dodaj/Usuń graczy
customgame = Własna Gra customgame = Własna Gra
newgame = Nowa Gra newgame = Nowa Gra
none = <żadne> none = <żadne>
minimap = Minimap
close = Zamknij close = Zamknij
quit = Wyjdź quit = Wyjdź
maps = Mapy maps = Mapy
@@ -335,66 +336,48 @@ no = Nie ma mowy!
info.title = [accent]Informacje info.title = [accent]Informacje
error.title = [crimson]Wystąpił błąd error.title = [crimson]Wystąpił błąd
error.crashtitle = Wystąpił błąd error.crashtitle = Wystąpił błąd
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Informacje o bloku block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Pojemność mocy blocks.powercapacity = Pojemność mocy
blocks.powershot = moc/strzał blocks.powershot = moc/strzał
blocks.targetsair = Może namierzać wrogów powietrznych blocks.targetsair = Może namierzać wrogów powietrznych
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Zasięg blocks.shootrange = Zasięg
blocks.size = Rozmiar blocks.size = Rozmiar
blocks.liquidcapacity = Pojemność cieczy blocks.liquidcapacity = Pojemność cieczy
blocks.maxitemssecond = Maksymalna liczba przedmiotów/sekundę
blocks.powerrange = Zakres mocy blocks.powerrange = Zakres mocy
blocks.poweruse = Zużycie prądu blocks.poweruse = Zużycie prądu
blocks.powerdamage = Moc/Zniszczenia blocks.powerdamage = Moc/Zniszczenia
blocks.inputitemcapacity = Pojemność materiałów
blocks.outputitemcapacity = Pojemność produktów
blocks.itemcapacity = Pojemność przedmiotów blocks.itemcapacity = Pojemność przedmiotów
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Szybość przesyłu prądu blocks.productiontime = Production Time
blocks.craftspeed = Szybkość produkcji
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Potrzebna ciecz
blocks.inputliquidaux = Płyny do produkcji
blocks.inputitem = Potrzebne przedmioty
blocks.inputitems = Materiały do produkcji
blocks.outputitem = Produkty
blocks.drilltier = Co może wykopać blocks.drilltier = Co może wykopać
blocks.drillspeed = Postawowa szybkość kopania blocks.drillspeed = Postawowa szybkość kopania
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Wyprodukowany płyn
blocks.liquidoutputspeed = Prędkość odpływu cieczy
blocks.liquiduse = Zużycie płynów
blocks.coolant = Płyn chłodzący
blocks.liquid = Płyn
blocks.coolantuse = Zużycie płynu chłodzącego
blocks.inputliquidfuel = Paliwo
blocks.liquidfueluse = Zużycie paliwa
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Zdrowie blocks.health = Zdrowie
blocks.heat = Heat
blocks.power = Prąd
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Zapotrzebowanie Prądu
blocks.inaccuracy = Niedokładność blocks.inaccuracy = Niedokładność
blocks.shots = Strzały blocks.shots = Strzały
blocks.reload = Przeładowanie blocks.reload = Przeładowanie
blocks.inputfuel = Paliwo
blocks.fuelburntime = Płonięcie paliwa
blocks.inputcapacity = Pojemność wejściowa
blocks.outputcapacity = Wydajność wyjściowa
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Płyn
bar.heat = Heat
bar.power = Prąd
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = jednostek płynów
unit.powerunits = jednostek prądu unit.powerunits = jednostek prądu
unit.degrees = stopnie unit.degrees = stopnie
unit.seconds = sekundy unit.seconds = sekundy
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = Przedmioty unit.items = Przedmioty
category.general = Główne category.general = Główne
category.power = Prąd category.power = Prąd
@@ -425,6 +411,7 @@ category.optional = Ulepszenia Nieobowiąskowe
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Wskaźniki Przyjaciół setting.indicators.name = Wskaźniki Przyjaciół
setting.autotarget.name = Automatyczne Celowanie setting.autotarget.name = Automatyczne Celowanie
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Widoczny licznik FPS setting.fps.name = Widoczny licznik FPS
setting.vsync.name = Synchronizacja pionowa setting.vsync.name = Synchronizacja pionowa
setting.lasers.name = Pokaż lasery zasilające setting.lasers.name = Pokaż lasery zasilające
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Pokaż Minimapę setting.minimap.name = Pokaż Minimapę
setting.musicvol.name = Głośność muzyki setting.musicvol.name = Głośność muzyki
setting.mutemusic.name = Wycisz muzykę setting.mutemusic.name = Wycisz muzykę
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Pojemność przedmiotów: {0}
mech.minespeed = [LIGHT_GRAY]Prędkość kopania: {0} mech.minespeed = [LIGHT_GRAY]Prędkość kopania: {0}
mech.minepower = [LIGHT_GRAY]Moc kopania: {0} mech.minepower = [LIGHT_GRAY]Moc kopania: {0}
mech.ability = [LIGHT_GRAY]Umiejętność: {0} mech.ability = [LIGHT_GRAY]Umiejętność: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Wytrzymałość na przegrzewanie: {0} liquid.heatcapacity = [LIGHT_GRAY]Wytrzymałość na przegrzewanie: {0}
liquid.viscosity = [LIGHT_GRAY]Lepkość: {0} liquid.viscosity = [LIGHT_GRAY]Lepkość: {0}
liquid.temperature = [LIGHT_GRAY]Temperatura: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Adicionar/Remover Jogador
customgame = Jogo Customizado customgame = Jogo Customizado
newgame = Novo Jogo newgame = Novo Jogo
none = <none> none = <none>
minimap = Minimap
close = Fechar close = Fechar
quit = Sair quit = Sair
maps = Mapas maps = Mapas
@@ -335,66 +336,48 @@ no = Não
info.title = [accent]Informação info.title = [accent]Informação
error.title = [crimson]Ocorreu um Erro. error.title = [crimson]Ocorreu um Erro.
error.crashtitle = Ocorreu um Erro error.crashtitle = Ocorreu um Erro
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Informação do Bloco block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Capacidade de Energia blocks.powercapacity = Capacidade de Energia
blocks.powershot = Energia/tiro blocks.powershot = Energia/tiro
blocks.targetsair = Mirar no ar blocks.targetsair = Mirar no ar
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Alcance blocks.shootrange = Alcance
blocks.size = Tamanho blocks.size = Tamanho
blocks.liquidcapacity = Capacidade de Líquido blocks.liquidcapacity = Capacidade de Líquido
blocks.maxitemssecond = Máximo de itens/segundo
blocks.powerrange = Alcance da Energia blocks.powerrange = Alcance da Energia
blocks.poweruse = Uso de energia blocks.poweruse = Uso de energia
blocks.powerdamage = Dano/Poder blocks.powerdamage = Dano/Poder
blocks.inputitemcapacity = Configurar capacidade de itens
blocks.outputitemcapacity = Configurar capacidade de itens
blocks.itemcapacity = Capacidade de Itens blocks.itemcapacity = Capacidade de Itens
blocks.basepowergeneration = Geração de poder base blocks.basepowergeneration = Geração de poder base
blocks.powertransferspeed = Transferência de energia blocks.productiontime = Production Time
blocks.craftspeed = Velocidade de produção
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Líquido de entrada
blocks.inputliquidaux = Líquido auxiliar
blocks.inputitem = Item de entrada
blocks.inputitems = Itens de entrada
blocks.outputitem = Itens de saida
blocks.drilltier = Furaveis blocks.drilltier = Furaveis
blocks.drillspeed = Velocidade da furadeira base blocks.drillspeed = Velocidade da furadeira base
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Saida de liquido
blocks.liquidoutputspeed = Velocidade da saida de líquido
blocks.liquiduse = Uso de liquido
blocks.coolant = Esfriador
blocks.liquid = Liquid
blocks.coolantuse = Uso do esfriador
blocks.inputliquidfuel = Liquido de combustivel
blocks.liquidfueluse = Uso do liquido de combustivel
blocks.boostitem = Acelerar item
blocks.boostliquid = Acelerar líquido
blocks.health = Saúde blocks.health = Saúde
blocks.heat = Heat
blocks.power = Poder
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Imprecisão blocks.inaccuracy = Imprecisão
blocks.shots = Tiros blocks.shots = Tiros
blocks.reload = Recarregar blocks.reload = Recarregar
blocks.inputfuel = Combustivel
blocks.fuelburntime = Tempo de queima de combustivel
blocks.inputcapacity = Capacidade de entrada
blocks.outputcapacity = Capacidade de saída
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Poder
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = Unidades de liquido
unit.powerunits = Unidades de energia unit.powerunits = Unidades de energia
unit.degrees = Graus unit.degrees = Graus
unit.seconds = segundos unit.seconds = segundos
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = itens unit.items = itens
category.general = Geral category.general = Geral
category.power = Poder category.power = Poder
@@ -425,6 +411,7 @@ category.optional = Melhoras opcionais
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Alvo automatico setting.autotarget.name = Alvo automatico
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Mostrar FPS setting.fps.name = Mostrar FPS
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Mostrar lasers setting.lasers.name = Mostrar lasers
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Mostrar minimapa setting.minimap.name = Mostrar minimapa
setting.musicvol.name = Volume da Música setting.musicvol.name = Volume da Música
setting.mutemusic.name = Desligar Música setting.mutemusic.name = Desligar Música
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Capacidade de itens: {0}
mech.minespeed = [LIGHT_GRAY]Velocidade de mineração: {0} mech.minespeed = [LIGHT_GRAY]Velocidade de mineração: {0}
mech.minepower = [LIGHT_GRAY]Poder de mineração: {0} mech.minepower = [LIGHT_GRAY]Poder de mineração: {0}
mech.ability = [LIGHT_GRAY]Habilidade: {0} mech.ability = [LIGHT_GRAY]Habilidade: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Capacidade de aquecimento: {0} liquid.heatcapacity = [LIGHT_GRAY]Capacidade de aquecimento: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosidade: {0} liquid.viscosity = [LIGHT_GRAY]Viscosidade: {0}
liquid.temperature = [LIGHT_GRAY]Temperatura: {0} liquid.temperature = [LIGHT_GRAY]Temperatura: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Доб/удалить игроков
customgame = Пользовательская игра customgame = Пользовательская игра
newgame = Новая игра newgame = Новая игра
none = <нет> none = <нет>
minimap = Minimap
close = Закрыть close = Закрыть
quit = Выход quit = Выход
maps = Карты maps = Карты
@@ -182,7 +183,7 @@ map.delete.confirm = Вы действительно хотите удалить
map.random = [accent]Случайная карта map.random = [accent]Случайная карта
map.nospawn = Эта карта не имеет ядер, в которых игрок может появиться! Добавьте[ROYAL] синее[] ядро на эту карту в редакторе карт. map.nospawn = Эта карта не имеет ядер, в которых игрок может появиться! Добавьте[ROYAL] синее[] ядро на эту карту в редакторе карт.
map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте[SCARLET] красные[] ядра к этой карте в редакторе. map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте[SCARLET] красные[] ядра к этой карте в редакторе.
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 = У этой карты нету вражеских ядер! Добавьте [scarlet] красные[] ядра в эту карте в редакторе.
map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты. map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты.
editor.brush = Кисть editor.brush = Кисть
editor.openin = Открыть в редакторе editor.openin = Открыть в редакторе
@@ -335,77 +336,61 @@ no = Нет
info.title = Информация info.title = Информация
error.title = [crimson]Произошла ошибка error.title = [crimson]Произошла ошибка
error.crashtitle = Произошла ошибка error.crashtitle = Произошла ошибка
blocks.outputspeed = Скорость сверления: {0}/с blocks.input = Вход
blocks.efficiency = Эффективность: {0}% blocks.output = Выход
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Ускоритель
blocks.blockinfo = Информация о блоке block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Энергия: {0}
blocks.poweroutput = Выходная энергия: {0}
blocks.powercapacity = Вместимость энергии blocks.powercapacity = Вместимость энергии
blocks.powershot = Энергия/выстрел blocks.powershot = Энергия/выстрел
blocks.targetsair = Воздушные цели blocks.targetsair = Воздушные цели
blocks.targetsground = Наземные цели blocks.targetsground = Наземные цели
blocks.items = Предметы: {0}
blocks.itemsmoved = Скорость перемещения blocks.itemsmoved = Скорость перемещения
blocks.launchtime = Time Between Launches blocks.launchtime = Интервал запусков
blocks.shootrange = Радиус действия blocks.shootrange = Радиус действия
blocks.size = Размер blocks.size = Размер
blocks.liquidcapacity = Вместимость жидкости blocks.liquidcapacity = Вместимость жидкости
blocks.maxitemssecond = Макс. количество предметов/секунду
blocks.powerrange = Диапазон передачи энергии blocks.powerrange = Диапазон передачи энергии
blocks.poweruse = Потребляет энергии blocks.poweruse = Потребляет энергии
blocks.powerdamage = Энергия/урон blocks.powerdamage = Энергия/урон
blocks.inputitemcapacity = Вместимость входящих предметов
blocks.outputitemcapacity = Вместимость выходящих предметов
blocks.itemcapacity = Вместимость предметов blocks.itemcapacity = Вместимость предметов
blocks.basepowergeneration = Базовая генерация энергии blocks.basepowergeneration = Базовая генерация энергии
blocks.powertransferspeed = Скорость передачи энергии blocks.productiontime = Время производства
blocks.craftspeed = Скорость производства blocks.craftspeed = Скорость производства
blocks.repairtime = Block Full Repair Time blocks.repairtime = Время полной регенерации
blocks.range = Range blocks.speedincrease = Увеличение скорости
blocks.range = Радиус действия
blocks.inputliquid = Прием жидкости blocks.inputliquid = Прием жидкости
blocks.inputliquidaux = Вспом. жидкость
blocks.inputitem = Входящий предмет
blocks.inputitems = Входящие предметы
blocks.outputitem = Выходящий предмет
blocks.drilltier = Добывает blocks.drilltier = Добывает
blocks.drillspeed = Базовая скорость сверления blocks.drillspeed = Базовая скорость сверления
blocks.boosteffect = Ускоряющий эффект
blocks.maxunits = Максимальное количество активных единиц blocks.maxunits = Максимальное количество активных единиц
blocks.liquidoutput = Выходящая жидкость
blocks.liquidoutputspeed = Выходная скорость жидкости
blocks.liquiduse = Используется жидкости
blocks.coolant = Охлаждающая жидкость
blocks.liquid = Жидкость
blocks.coolantuse = Охлажд. жидкости используется
blocks.inputliquidfuel = Жидкое топливо
blocks.liquidfueluse = Жидкого топлива используется
blocks.boostitem = Ускоряющий предмет
blocks.boostliquid = Ускоряющая жидкость
blocks.health = Здоровье blocks.health = Здоровье
blocks.heat = Температура
blocks.power = Энергия
blocks.progress = Строительство продолжается
blocks.spawned = Бой. ед.: {0}/{1}
blocks.power.satisfaction = Энергия
blocks.inaccuracy = Разброс blocks.inaccuracy = Разброс
blocks.shots = Выстрелы blocks.shots = Выстрелы
blocks.reload = Выстрелы/секунду blocks.reload = Выстрелы/секунду
blocks.inputfuel = Входящее топливо
blocks.fuelburntime = Время горения топлива
blocks.inputcapacity = Макс. вместимость входящих предметов
blocks.outputcapacity = Макс. вместимость выходящих предметов
blocks.ammo = Боеприпасы blocks.ammo = Боеприпасы
bullet.damage = [stat]{0}[lightgray] dmg bar.drillspeed = Скорость свердления: {0}/s
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bar.efficiency = Эффективность: {0}%
bullet.incendiary = [stat]incendiary bar.powerbalance = Энергия: {0}/с
bullet.homing = [stat]homing bar.poweramount = Энергия: {0}
bullet.shock = [stat]shock bar.poweroutput = Выходная энергия: {0}
bullet.frag = [stat]frag bar.items = Предметы: {0}
bullet.knockback = [stat]{0}[lightgray] knockback bar.liquid = Жидкости
bullet.freezing = [stat]freezing bar.heat = Нагревание
bullet.tarred = [stat]tarred bar.power = Энергия
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier bar.progress = Прогресс Строительство
bullet.reload = [stat]{0}[lightgray]x reload bar.spawned = Боев. ед. : {0}/{1}
bullet.damage = [stat]{0}[lightgray] урона
bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] БЛОКОВ
bullet.incendiary = [stat]поджигающий
bullet.homing = [stat]самонаводящийся
bullet.shock = [stat]ЭМИ
bullet.frag = [stat]взрывоопасный
bullet.knockback = [stat]{0}[lightgray] отдачи
bullet.freezing = [stat]замораживающий
bullet.tarred = [stat]горючий
bullet.multiplier = [stat]{0}[lightgray]x снарядов
bullet.reload = [stat]{0}[lightgray]x скорость перезарядки
unit.blocks = блоки unit.blocks = блоки
unit.powersecond = единиц энергии/секунду unit.powersecond = единиц энергии/секунду
unit.liquidsecond = жидкостных единиц/секунду unit.liquidsecond = жидкостных единиц/секунду
@@ -414,6 +399,9 @@ unit.liquidunits = жидкостных единиц
unit.powerunits = энерг. единиц unit.powerunits = энерг. единиц
unit.degrees = град. unit.degrees = град.
unit.seconds = сек. unit.seconds = сек.
unit.persecond = /сек
unit.timesspeed = x скорость
unit.percent = %
unit.items = единиц unit.items = единиц
category.general = Основные category.general = Основные
category.power = Энергия category.power = Энергия
@@ -422,14 +410,16 @@ category.items = Предметы
category.crafting = Ввод/вывод category.crafting = Ввод/вывод
category.shooting = рельба category.shooting = рельба
category.optional = Дополнительные улучшения category.optional = Дополнительные улучшения
setting.landscape.name = Lock Landscape setting.landscape.name = Сохранить ландшафт
setting.shadows.name = Shadows setting.shadows.name = Тени
setting.animatedwater.name = Анимированная вода setting.animatedwater.name = Анимированная вода
setting.animatedshields.name = Анимированные щиты
setting.antialias.name = Сглаживание[LIGHT_GRAY] (требует перезапуска)[] setting.antialias.name = Сглаживание[LIGHT_GRAY] (требует перезапуска)[]
setting.indicators.name = Показывать в сторону союзников и врагов setting.indicators.name = Показывать в сторону союзников и врагов
setting.autotarget.name = Авто-стрельба setting.autotarget.name = Авто-стрельба
setting.fpscap.name = Макс. FPS setting.fpscap.name = Макс. FPS
setting.fpscap.none = Неограниченный setting.fpscap.none = Неограниченный
minimap = Мини-карта
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.swapdiagonal.name = Всегда Диагональное Размещение setting.swapdiagonal.name = Всегда Диагональное Размещение
setting.difficulty.training = обучение setting.difficulty.training = обучение
@@ -496,22 +486,25 @@ mode.sandbox.name = Песочница
mode.sandbox.description = Бесконечные ресурсы и нет таймера для волн, но можно самим вызвать волну. mode.sandbox.description = Бесконечные ресурсы и нет таймера для волн, но можно самим вызвать волну.
mode.freebuild.name = ободная\nстройка mode.freebuild.name = ободная\nстройка
mode.freebuild.description = Ограниченные ресурсы и нет таймера для волн. mode.freebuild.description = Ограниченные ресурсы и нет таймера для волн.
mode.pvp.name = Противо-\nстояние mode.pvp.name = PvP
mode.pvp.description = боритесь против других игроков. mode.pvp.description = боритесь против других игроков.
mode.attack.name = Атака mode.attack.name = Атака
mode.attack.description = Нет волн, цель - уничтожить базу противника. mode.attack.description = Нет волн, цель - уничтожить базу противника.
mode.custom = Custom Rules mode.custom = Настройки правил
rules.infiniteresources = Infinite Resources rules.infiniteresources = Бескон. Ресурсы (Игрок)
rules.wavetimer = Wave Timer rules.wavetimer = Интервал волн
rules.waves = Waves rules.waves = Волны
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Бескон. Ресурсы (ИИ)
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Ресурсы Боев. Ед.
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.unitbuildspeedmultiplier = Множитель Скорости Создания Боев. Ед.
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.unithealthmultiplier = Множитель Здоровья Боев. Ед.
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.playerdamagemultiplier = Множитель Урона Игрока
rules.buildcostmultiplier = Build Cost Multiplier rules.enemycorebuildradius = Радиус защиты враж. ядер: [LIGHT_GRAY] {0} (блоков)
rules.buildspeedmultiplier = Build Speed Multiplier rules.respawntime = Интервал возрождения: [LIGHT_GRAY] (сек)
rules.wavespacing = Интервал волн: [LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Множитель затрат на строительство
rules.buildspeedmultiplier = Множитель скорости строительства
content.item.name = Предметы content.item.name = Предметы
content.liquid.name = Жидкости content.liquid.name = Жидкости
content.unit.name = Боевые единицы content.unit.name = Боевые единицы
@@ -540,7 +533,7 @@ item.spore-pod.name = Споровой стручок
item.spore-pod.description = Используется для превращения в нефть, взрывчатые вещества и топливо. item.spore-pod.description = Используется для превращения в нефть, взрывчатые вещества и топливо.
item.sand.name = Песок item.sand.name = Песок
item.sand.description = Обычный материал, который широко используется при плавке как в сплаве, так и в виде шлака. item.sand.description = Обычный материал, который широко используется при плавке как в сплаве, так и в виде шлака.
item.blast-compound.name = Взрывоопасное соединение item.blast-compound.name = Взрывная смесь
item.blast-compound.description = Летучее соединение, используемое в бомбах и взрывчатых веществах. Также может гореть в качестве топлива, но не рекомендуется этого делать. item.blast-compound.description = Летучее соединение, используемое в бомбах и взрывчатых веществах. Также может гореть в качестве топлива, но не рекомендуется этого делать.
item.pyratite.name = Пиротит item.pyratite.name = Пиротит
item.pyratite.description = Очень огнеопасное вещество, используемое в зажигательном оружии. item.pyratite.description = Очень огнеопасное вещество, используемое в зажигательном оружии.
@@ -554,7 +547,7 @@ liquid.oil.name = Нефть
liquid.cryofluid.name = Криогенная жидкость liquid.cryofluid.name = Криогенная жидкость
mech.alpha-mech.name = Альфа mech.alpha-mech.name = Альфа
mech.alpha-mech.weapon = Тяжёлый пулемёт mech.alpha-mech.weapon = Тяжёлый пулемёт
mech.alpha-mech.ability = Нет mech.alpha-mech.ability = Регенерация
mech.alpha-mech.description = Стандартный мех для настольных устройств. Имеет приличную скорость и урон. mech.alpha-mech.description = Стандартный мех для настольных устройств. Имеет приличную скорость и урон.
mech.delta-mech.name = Дельта mech.delta-mech.name = Дельта
mech.delta-mech.weapon = Дуговой генератор mech.delta-mech.weapon = Дуговой генератор
@@ -589,9 +582,10 @@ unit.speed = [LIGHT_GRAY]Скорость: {0}
mech.weapon = [LIGHT_GRAY]Оружие: {0} mech.weapon = [LIGHT_GRAY]Оружие: {0}
mech.health = [LIGHT_GRAY]Здоровье: {0} mech.health = [LIGHT_GRAY]Здоровье: {0}
mech.itemcapacity = [LIGHT_GRAY]Вместимость предметов: {0} mech.itemcapacity = [LIGHT_GRAY]Вместимость предметов: {0}
mech.minespeed = [LIGHT_GRAY]Скорость добычи: {0} mech.minespeed = [LIGHT_GRAY]Скорость добычи: {0}%
mech.minepower = [LIGHT_GRAY]Мощность добычи: {0} mech.minepower = [LIGHT_GRAY]Мощность добычи: {0}
mech.ability = [LIGHT_GRAY]Способность: {0} mech.ability = [LIGHT_GRAY]Способность: {0}
mech.buildspeed = [LIGHT_GRAY]Скорость строительства: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Теплоёмкость: {0} liquid.heatcapacity = [LIGHT_GRAY]Теплоёмкость: {0}
liquid.viscosity = [LIGHT_GRAY]Вязкость: {0} liquid.viscosity = [LIGHT_GRAY]Вязкость: {0}
liquid.temperature = [LIGHT_GRAY]Температура: {0} liquid.temperature = [LIGHT_GRAY]Температура: {0}
@@ -698,7 +692,7 @@ block.impact-reactor.name = Импульсный реактор
block.mechanical-drill.name = Механический бур block.mechanical-drill.name = Механический бур
block.pneumatic-drill.name = Пневматический бур block.pneumatic-drill.name = Пневматический бур
block.laser-drill.name = Лазерный бур block.laser-drill.name = Лазерный бур
block.water-extractor.name = Экстрактор воды block.water-extractor.name = Гидроконденсатор
block.cultivator.name = Культиватор block.cultivator.name = Культиватор
block.alpha-dart-mech-pad.name = Реконструктор мехов "Альфа-Дротик" block.alpha-dart-mech-pad.name = Реконструктор мехов "Альфа-Дротик"
block.delta-mech-pad.name = Реконструктор "Дельта" block.delta-mech-pad.name = Реконструктор "Дельта"
@@ -727,7 +721,7 @@ block.pyratite-mixer.name = Мешалка пиротита
block.blast-mixer.name = Мешалка взрывоопасного соединения block.blast-mixer.name = Мешалка взрывоопасного соединения
block.solar-panel.name = Солнечная панель block.solar-panel.name = Солнечная панель
block.solar-panel-large.name = Большая солнечная панель block.solar-panel-large.name = Большая солнечная панель
block.oil-extractor.name = Нефтяной экстрактор block.oil-extractor.name = Нефтяная вышка
block.spirit-factory.name = Завод дронов "Призрак" block.spirit-factory.name = Завод дронов "Призрак"
block.phantom-factory.name = Завод дронов "Фантом" block.phantom-factory.name = Завод дронов "Фантом"
block.wraith-factory.name = Завод призрачных истребителей block.wraith-factory.name = Завод призрачных истребителей
@@ -767,7 +761,7 @@ block.meltdown.name = Катастрофа
block.container.name = Склад block.container.name = Склад
block.launch-pad.name = Стартовая площадка block.launch-pad.name = Стартовая площадка
block.launch-pad.description = Запускает партии предметов без необходимости запуска ядра. Незавершённое. block.launch-pad.description = Запускает партии предметов без необходимости запуска ядра. Незавершённое.
block.launch-pad-large.name = Large Launch Pad block.launch-pad-large.name = Большая Стартовая площадка
team.blue.name = Синяя team.blue.name = Синяя
team.red.name = Красная team.red.name = Красная
team.orange.name = Оранжевая team.orange.name = Оранжевая
@@ -852,7 +846,7 @@ block.silicon-smelter.description = С помощью песка, угля и э
block.plastanium-compressor.description = Создаёт пластиний из титана и нефти. Требует энергии. Для ускорения производства можно добавить в компрессор песок. block.plastanium-compressor.description = Создаёт пластиний из титана и нефти. Требует энергии. Для ускорения производства можно добавить в компрессор песок.
block.phase-weaver.description = Производит фазовую материю из тория и песка. Требует большего количества энергии. block.phase-weaver.description = Производит фазовую материю из тория и песка. Требует большего количества энергии.
block.alloy-smelter.description = Создаёт кинетический сплав из титана, кремния, меди и свинца. Требует энергию. block.alloy-smelter.description = Создаёт кинетический сплав из титана, кремния, меди и свинца. Требует энергию.
block.pulverizer.description = Измельчает камень в песок. Требует энергию. block.pulverizer.description = Измельчает металлолом в песок. Требует энергию.
block.pyratite-mixer.description = Создаёт пиротит из угля, свинца и песка. Требует энергии. block.pyratite-mixer.description = Создаёт пиротит из угля, свинца и песка. Требует энергии.
block.blast-mixer.description = Создаёт взрывоопасное соединение из нефти и пиротита. Для ускорения производства можно добавить в мешалку песок. block.blast-mixer.description = Создаёт взрывоопасное соединение из нефти и пиротита. Для ускорения производства можно добавить в мешалку песок.
block.cryofluidmixer.description = Производит криогенную жидкость из воды и титана. Требует энергии. block.cryofluidmixer.description = Производит криогенную жидкость из воды и титана. Требует энергии.
@@ -896,7 +890,7 @@ block.titan-factory.description = Производит продвинутые з
block.fortress-factory.description = Производит тяжёлые артиллерийские боевые единицы. block.fortress-factory.description = Производит тяжёлые артиллерийские боевые единицы.
block.revenant-factory.description = Производит тяжёлые летающие боевые единицы. block.revenant-factory.description = Производит тяжёлые летающие боевые единицы.
block.repair-point.description = Может ремонтировать вас и ваши боевые единицы block.repair-point.description = Может ремонтировать вас и ваши боевые единицы
block.conduit.description = Основной блок транспортировки жидкости. Работает как конвейер, но с жидкостями. Лучше всего использовать экстракторы, насосы или т.п.. block.conduit.description = Основной блок транспортировки жидкости. Работает как конвейер, но с жидкостями.
block.pulse-conduit.description = Улучшенный блок транспортировки жидкости. Транспортирует жидкости быстрее и хранит больше, чем стандартные. block.pulse-conduit.description = Улучшенный блок транспортировки жидкости. Транспортирует жидкости быстрее и хранит больше, чем стандартные.
block.phase-conduit.description = Улучшенный блок транспортировки жидкости. Использует энергию для передачи жидкостей на подключенный фазовый канал на несколько плиток. block.phase-conduit.description = Улучшенный блок транспортировки жидкости. Использует энергию для передачи жидкостей на подключенный фазовый канал на несколько плиток.
block.liquid-router.description = Принимает жидкости с одного направления и равномерно выводит их до трех других направлений. Может также хранить определенное количество жидкости. Полезно для разделения жидкостей из одного источника на несколько целей. block.liquid-router.description = Принимает жидкости с одного направления и равномерно выводит их до трех других направлений. Может также хранить определенное количество жидкости. Полезно для разделения жидкостей из одного источника на несколько целей.

View File

@@ -40,6 +40,7 @@ addplayers = Oyuncu ekle/cikar
customgame = Ozel oyun customgame = Ozel oyun
newgame = New Game newgame = New Game
none = <none> none = <none>
minimap = Minimap
close = Kapat close = Kapat
quit = Cik quit = Cik
maps = Haritalar maps = Haritalar
@@ -335,66 +336,48 @@ no = Hayir
info.title = [accent]Bilgi info.title = [accent]Bilgi
error.title = [crimson]Bir hata olustu error.title = [crimson]Bir hata olustu
error.crashtitle = Bir hata olustu error.crashtitle = Bir hata olustu
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Yapi bilgisi block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Guc kapasitesi blocks.powercapacity = Guc kapasitesi
blocks.powershot = Guc/Saldiri hizi blocks.powershot = Guc/Saldiri hizi
blocks.targetsair = Havayi hedef alir mi? blocks.targetsair = Havayi hedef alir mi?
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Menzil blocks.shootrange = Menzil
blocks.size = Buyukluk blocks.size = Buyukluk
blocks.liquidcapacity = Sivi kapasitesi blocks.liquidcapacity = Sivi kapasitesi
blocks.maxitemssecond = Esya limiti
blocks.powerrange = Menzil blocks.powerrange = Menzil
blocks.poweruse = Guc kullanimi blocks.poweruse = Guc kullanimi
blocks.powerdamage = Power/Damage blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Giris esya kapasitesi
blocks.outputitemcapacity = Cikis esya kapasitesi
blocks.itemcapacity = Esya kapasitesi blocks.itemcapacity = Esya kapasitesi
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Guc transfer hizi blocks.productiontime = Production Time
blocks.craftspeed = Yapilma hizi
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Giris sivi
blocks.inputliquidaux = Yardimci sivi
blocks.inputitem = Giris esyasi
blocks.inputitems = Giris esyalari
blocks.outputitem = Sonuc
blocks.drilltier = Kazilabilirler blocks.drilltier = Kazilabilirler
blocks.drillspeed = Ana kazma hizi blocks.drillspeed = Ana kazma hizi
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Sivi cikisi
blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Sivi kullanimi
blocks.coolant = Sogutma sivisi
blocks.liquid = Liquid
blocks.coolantuse = Sogutma sivi kullanimi
blocks.inputliquidfuel = Yakit sivisi
blocks.liquidfueluse = Sivi yakit kullanimi
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Can blocks.health = Can
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = sekme blocks.inaccuracy = sekme
blocks.shots = vuruslar blocks.shots = vuruslar
blocks.reload = Yeniden doldurma blocks.reload = Yeniden doldurma
blocks.inputfuel = Yakit
blocks.fuelburntime = Yakit yakilma suresi
blocks.inputcapacity = Giris kapasitesi
blocks.outputcapacity = Cikis kapasitesi
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = Litre
unit.powerunits = Volt unit.powerunits = Volt
unit.degrees = derece unit.degrees = derece
unit.seconds = saniye unit.seconds = saniye
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = esya unit.items = esya
category.general = General category.general = General
category.power = Guc category.power = Guc
@@ -425,6 +411,7 @@ category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto-Target setting.autotarget.name = Auto-Target
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = FPS'i goster setting.fps.name = FPS'i goster
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Guc lazerlerini goster setting.lasers.name = Guc lazerlerini goster
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Haritayi goster setting.minimap.name = Haritayi goster
setting.musicvol.name = Ses yuksekligi setting.musicvol.name = Ses yuksekligi
setting.mutemusic.name = Sesi kapat setting.mutemusic.name = Sesi kapat
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]esya kapasitesi: {0}
mech.minespeed = [LIGHT_GRAY]kazma hizi: {0} mech.minespeed = [LIGHT_GRAY]kazma hizi: {0}
mech.minepower = [LIGHT_GRAY]kazma gucu: {0} mech.minepower = [LIGHT_GRAY]kazma gucu: {0}
mech.ability = [LIGHT_GRAY]yetenek gucu: {0} mech.ability = [LIGHT_GRAY]yetenek gucu: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]isinma kapasitesi: {0} liquid.heatcapacity = [LIGHT_GRAY]isinma kapasitesi: {0}
liquid.viscosity = [LIGHT_GRAY]Yari sivilik: {0} liquid.viscosity = [LIGHT_GRAY]Yari sivilik: {0}
liquid.temperature = [LIGHT_GRAY]isi: {0} liquid.temperature = [LIGHT_GRAY]isi: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Oyuncu ekle/cikar
customgame = Ozel oyun customgame = Ozel oyun
newgame = New Game newgame = New Game
none = <none> none = <none>
minimap = Minimap
close = Kapat close = Kapat
quit = Çık quit = Çık
maps = Haritalar maps = Haritalar
@@ -335,66 +336,48 @@ no = No
info.title = [Vurgu] Bilgi info.title = [Vurgu] Bilgi
error.title = [crimson] Bir hata oluştu error.title = [crimson] Bir hata oluştu
error.crashtitle = Bir hata oluştu error.crashtitle = Bir hata oluştu
blocks.outputspeed = Drill Speed: {0}/s blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Blok Bilgisi block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Güç kapasitesi blocks.powercapacity = Güç kapasitesi
blocks.powershot = Güç / atış blocks.powershot = Güç / atış
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Boyut blocks.size = Boyut
blocks.liquidcapacity = Sıvı kapasitesi blocks.liquidcapacity = Sıvı kapasitesi
blocks.maxitemssecond = Maksimum öğe / saniye
blocks.powerrange = Güç aralığı blocks.powerrange = Güç aralığı
blocks.poweruse = Power Use blocks.poweruse = Power Use
blocks.powerdamage = Power/Damage blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Input Item Capacity
blocks.outputitemcapacity = Input Item Capacity
blocks.itemcapacity = Ürün kapasitesi blocks.itemcapacity = Ürün kapasitesi
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.productiontime = Production Time
blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = Giriş sıvı
blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Giriş öğesi
blocks.inputitems = Input Items
blocks.outputitem = Output Item
blocks.drilltier = Drillables blocks.drilltier = Drillables
blocks.drillspeed = Base Drill Speed blocks.drillspeed = Base Drill Speed
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units blocks.maxunits = Max Active Units
blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use
blocks.coolant = Coolant
blocks.liquid = Liquid
blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid
blocks.health = Can blocks.health = Can
blocks.heat = Heat
blocks.power = Power
blocks.progress = Build Progress
blocks.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = yanlışlık blocks.inaccuracy = yanlışlık
blocks.shots = atışlar blocks.shots = atışlar
blocks.reload = Reload blocks.reload = Reload
blocks.inputfuel = Fuel
blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Giriş kapasitesi
blocks.outputcapacity = Çıkış kapasitesi
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweramount = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = liquid units
unit.powerunits = power units unit.powerunits = power units
unit.degrees = degrees unit.degrees = degrees
unit.seconds = seconds unit.seconds = seconds
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = items unit.items = items
category.general = General category.general = General
category.power = Power category.power = Power
@@ -425,6 +411,7 @@ category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.animatedshields.name = Animated Shields
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = Ally Indicators setting.indicators.name = Ally Indicators
setting.autotarget.name = Auto-Target setting.autotarget.name = Auto-Target
@@ -448,6 +435,7 @@ setting.borderless.name = Borderless Window
setting.fps.name = Saniyede ... Kare göstermek setting.fps.name = Saniyede ... Kare göstermek
setting.vsync.name = VSync setting.vsync.name = VSync
setting.lasers.name = Güç Lazerleri Göster setting.lasers.name = Güç Lazerleri Göster
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = Show Minimap setting.minimap.name = Show Minimap
setting.musicvol.name = Müzik sesi setting.musicvol.name = Müzik sesi
setting.mutemusic.name = Müziği Kapat setting.mutemusic.name = Müziği Kapat
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0}
mech.minespeed = [LIGHT_GRAY]Mining Speed: {0} mech.minespeed = [LIGHT_GRAY]Mining Speed: {0}
mech.minepower = [LIGHT_GRAY]Mining Power: {0} mech.minepower = [LIGHT_GRAY]Mining Power: {0}
mech.ability = [LIGHT_GRAY]Ability: {0} mech.ability = [LIGHT_GRAY]Ability: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
liquid.temperature = [LIGHT_GRAY]Temperature: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0}

View File

@@ -40,6 +40,7 @@ addplayers = Дод/Видалити гравців
customgame = Користувальницька гра customgame = Користувальницька гра
newgame = Нова гра newgame = Нова гра
none = <нічого> none = <нічого>
minimap = Minimap
close = Закрити close = Закрити
quit = Вийти quit = Вийти
maps = Мапи maps = Мапи
@@ -335,66 +336,50 @@ no = Ні
info.title = Інформація info.title = Інформація
error.title = [crimson]Виникла помилка error.title = [crimson]Виникла помилка
error.crashtitle = Виникла помилка error.crashtitle = Виникла помилка
blocks.outputspeed = Швидкість свердління: {0}/с blocks.input = Вхід
blocks.efficiency = Ефективність: {0}% blocks.output = Вихід
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Прискорювач
blocks.blockinfo = Інформація про блок block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Енергія: {0}
blocks.poweroutput = Вихідна енергія: {0}
blocks.powercapacity = Місткість енергії blocks.powercapacity = Місткість енергії
blocks.powershot = Енергія/постріл blocks.powershot = Енергія/постріл
blocks.targetsair = Повітряні мішені blocks.targetsair = Повітряні мішені
blocks.targetsground = Наземні мішені blocks.targetsground = Наземні мішені
blocks.items = Предмети: {0}
blocks.itemsmoved = Швидкість переміщення blocks.itemsmoved = Швидкість переміщення
blocks.launchtime = Time Between Launches blocks.launchtime = Час між запусками
blocks.shootrange = Діапазон дії blocks.shootrange = Діапазон дії
blocks.size = Розмір blocks.size = Розмір
blocks.liquidcapacity = Місткість рідини blocks.liquidcapacity = Місткість рідини
blocks.maxitemssecond = Макс. кількість предметів/секунду
blocks.powerrange = Діапазон передачі енергії blocks.powerrange = Діапазон передачі енергії
blocks.poweruse = Енергії використовує blocks.poweruse = Енергії використовує
blocks.powerdamage = Енергія/урон blocks.powerdamage = Енергія/урон
blocks.inputitemcapacity = Ємність вхідних елементів
blocks.outputitemcapacity = Ємність вихідних елементів
blocks.itemcapacity = Місткість предметів blocks.itemcapacity = Місткість предметів
blocks.basepowergeneration = Базова генерація енергії blocks.basepowergeneration = Базова генерація енергії
blocks.powertransferspeed = Швидкість передачі енергії
blocks.craftspeed = Швидкість виробництва blocks.craftspeed = Швидкість виробництва
blocks.repairtime = Block Full Repair Time blocks.productiontime = Час виробництва
blocks.range = Range blocks.repairtime = Час повного відновлення блоку
blocks.speedincrease = Збільшення швидкості
blocks.range = Радіус дії
blocks.inputliquid = Прийом рідини blocks.inputliquid = Прийом рідини
blocks.inputliquidaux = Допоміжна рідина
blocks.inputitem = Вхідний предмет
blocks.inputitems = Вхідні предмети
blocks.outputitem = Вихідний предмет
blocks.drilltier = Видобуває blocks.drilltier = Видобуває
blocks.drillspeed = Базова швидкість свердління blocks.drillspeed = Базова швидкість свердління
blocks.boosteffect = Прискорювальний ефект
blocks.maxunits = Максимальна кількість активних одиниць blocks.maxunits = Максимальна кількість активних одиниць
blocks.liquidoutput = Вихідна рідина
blocks.liquidoutputspeed = Швидкість вихідної рідини
blocks.liquiduse = Використовуеться рідин
blocks.coolant = Охолоджуюча рідина
blocks.liquid = Рідина
blocks.coolantuse = Охолодж. рідини використовуеться
blocks.inputliquidfuel = Рідке паливо
blocks.liquidfueluse = Рідкого палива використовуеться
blocks.boostitem = Прискорюючий предмет
blocks.boostliquid = Прискорююча рідина
blocks.health = Здоров'я blocks.health = Здоров'я
blocks.heat = Температура
blocks.power = Енергія
blocks.progress = Будівництво триває
blocks.spawned = Бой. од.: {0}/{1}
blocks.power.satisfaction = Енергія
blocks.inaccuracy = Розкид blocks.inaccuracy = Розкид
blocks.shots = Постріли blocks.shots = Постріли
blocks.reload = Постріли/секунду blocks.reload = Постріли/секунду
blocks.inputfuel = Паливо
blocks.fuelburntime = Час горіння топлива
blocks.inputcapacity = Макс. місткість вхідних предметів
blocks.outputcapacity = Макс. місткість вихідних предметів
blocks.ammo = Боєприпаси blocks.ammo = Боєприпаси
bar.drillspeed = Швидкість сверрдління: {0}/s
bar.efficiency = Ефективність: {0}%
bar.powerbalance = Енергія: {0}/с
bar.poweramount = Енергія: {0}
bar.poweroutput = Вихідна енергія: {0}
bar.items = Предмети: {0}
bar.liquid = Рідина
bar.heat = Нагрівання
bar.power = Енергія
bar.progress = Хід Будівництва
bar.spawned = Бойов. од. : {0}/{1}
bullet.damage = [stat]{0}[lightgray] шкода bullet.damage = [stat]{0}[lightgray] шкода
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плитк. bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плитк.
bullet.incendiary = [stat]запальний bullet.incendiary = [stat]запальний
@@ -404,8 +389,8 @@ bullet.frag = [stat]осколкова граната
bullet.knockback = [stat]{0}[lightgray] відкидання bullet.knockback = [stat]{0}[lightgray] відкидання
bullet.freezing = [stat]заморожування bullet.freezing = [stat]заморожування
bullet.tarred = [stat]дьогтьовий bullet.tarred = [stat]дьогтьовий
bullet.multiplier = [stat]{0}[lightgray]x множник патронів bullet.multiplier = [stat]{0}[lightgray]x патронів
bullet.reload = [stat]{0}[lightgray]x перезаряджання bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджання
unit.blocks = блоки unit.blocks = блоки
unit.powersecond = одиниць енергії/секунду unit.powersecond = одиниць енергії/секунду
unit.liquidsecond = рідких одиниць/секунду unit.liquidsecond = рідких одиниць/секунду
@@ -414,6 +399,9 @@ unit.liquidunits = рідинних одиниць
unit.powerunits = енергетичних одиниць unit.powerunits = енергетичних одиниць
unit.degrees = град. unit.degrees = град.
unit.seconds = сек. unit.seconds = сек.
unit.persecond = /сек
unit.timesspeed = x швидкість
unit.percent = %
unit.items = предм. unit.items = предм.
category.general = Загальні category.general = Загальні
category.power = Енергетичні category.power = Енергетичні
@@ -422,14 +410,16 @@ category.items = Предмети
category.crafting = Введення/виведення category.crafting = Введення/виведення
category.shooting = Стрільба category.shooting = Стрільба
category.optional = Додаткові поліпшення category.optional = Додаткові поліпшення
setting.landscape.name = Заблокований пейхаж setting.landscape.name = Зберегти пейхаж
setting.shadows.name = Тіні setting.shadows.name = Тіні
setting.animatedwater.name = Анімована вода setting.animatedwater.name = Анімована вода
setting.animatedshields.name = Анімовані щити
setting.antialias.name = Згладжування[LIGHT_GRAY] (потребує перезапуску)[] setting.antialias.name = Згладжування[LIGHT_GRAY] (потребує перезапуску)[]
setting.indicators.name = Показувати у сторону ворогів та союзників setting.indicators.name = Показувати у сторону ворогів та союзників
setting.autotarget.name = Авто-стрільба setting.autotarget.name = Авто-стрільба
setting.fpscap.name = Макс. FPS setting.fpscap.name = Макс. FPS
setting.fpscap.none = Необмежений setting.fpscap.none = Необмежений
minimap = Міні-мапа
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.swapdiagonal.name = Завжди Діагональне Розміщення setting.swapdiagonal.name = Завжди Діагональне Розміщення
setting.difficulty.training = навчання setting.difficulty.training = навчання
@@ -448,7 +438,8 @@ setting.borderless.name = Вікно без полів
setting.fps.name = Показувати FPS setting.fps.name = Показувати FPS
setting.vsync.name = Вертикальна синхронізація setting.vsync.name = Вертикальна синхронізація
setting.lasers.name = Показувати енергію лазерів setting.lasers.name = Показувати енергію лазерів
setting.minimap.name = Показати мінімапу setting.pixelate.name = Пікселізація [LIGHT_GRAY](може знизити продуктивність)
setting.minimap.name = Показати міні-мапу
setting.musicvol.name = Гучність музики setting.musicvol.name = Гучність музики
setting.mutemusic.name = Заглушити музику setting.mutemusic.name = Заглушити музику
setting.sfxvol.name = Гучність звукових ефектів setting.sfxvol.name = Гучність звукових ефектів
@@ -506,7 +497,10 @@ rules.wavetimer = Таймер Хвиль
rules.waves = Хвилі rules.waves = Хвилі
rules.enemyCheat = Нескінченні ресурси для ШІ rules.enemyCheat = Нескінченні ресурси для ШІ
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Падіння бойових одиниць rules.unitdrops = Ресурс бойових одиниць
rules.unitbuildspeedmultiplier = Множник Швидкості Створювання Бойов. Од.
rules.unithealthmultiplier = Множник Здоров'я Створювання Бойов. Од.
rules.playerdamagemultiplier = Множник Шкоди Гравця
rules.enemycorebuildradius = Радіус заборони будування для Ворожого Ядра:[LIGHT_GRAY] (плитки) rules.enemycorebuildradius = Радіус заборони будування для Ворожого Ядра:[LIGHT_GRAY] (плитки)
rules.respawntime = Час відродження:[LIGHT_GRAY] (sec) rules.respawntime = Час відродження:[LIGHT_GRAY] (sec)
rules.wavespacing = Інтервал хвиль:[LIGHT_GRAY] (sec) rules.wavespacing = Інтервал хвиль:[LIGHT_GRAY] (sec)
@@ -540,7 +534,7 @@ item.spore-pod.name = Споровий стручок
item.spore-pod.description = Використовується для перетворення на нафту, вибухові речовини та паливо. item.spore-pod.description = Використовується для перетворення на нафту, вибухові речовини та паливо.
item.sand.name = Пісок item.sand.name = Пісок
item.sand.description = Загальний матеріал, який широко використовується при плавленні, як у процесі плавки, так і у вигляді шлака. item.sand.description = Загальний матеріал, який широко використовується при плавленні, як у процесі плавки, так і у вигляді шлака.
item.blast-compound.name = Вибухонебезпечне з'єднання item.blast-compound.name = Вибухова суміш
item.blast-compound.description = Нестійке з'єднання, що використовується в бомбах та вибухових речовинах. Хоча воно може спалюватися як паливо, та це не рекомендується. item.blast-compound.description = Нестійке з'єднання, що використовується в бомбах та вибухових речовинах. Хоча воно може спалюватися як паливо, та це не рекомендується.
item.pyratite.name = Піротит item.pyratite.name = Піротит
item.pyratite.description = Вкрай легкозаймиста речовина, що використовується у запальній зброї. item.pyratite.description = Вкрай легкозаймиста речовина, що використовується у запальній зброї.
@@ -554,7 +548,7 @@ liquid.oil.name = Нафта
liquid.cryofluid.name = Кріогенна рідина liquid.cryofluid.name = Кріогенна рідина
mech.alpha-mech.name = Альфа mech.alpha-mech.name = Альфа
mech.alpha-mech.weapon = Тяжкий кулемет mech.alpha-mech.weapon = Тяжкий кулемет
mech.alpha-mech.ability = Нема mech.alpha-mech.ability = Регенерація
mech.alpha-mech.description = Стандартний мех для настільних пристроїв. Має пристойну швидкість і урон. mech.alpha-mech.description = Стандартний мех для настільних пристроїв. Має пристойну швидкість і урон.
mech.delta-mech.name = Дельта mech.delta-mech.name = Дельта
mech.delta-mech.weapon = Генератор дуг mech.delta-mech.weapon = Генератор дуг
@@ -589,9 +583,10 @@ unit.speed = [LIGHT_GRAY]Швидкість: {0}
mech.weapon = [LIGHT_GRAY]Зброя: {0} mech.weapon = [LIGHT_GRAY]Зброя: {0}
mech.health = [LIGHT_GRAY]Здоров'я: {0} mech.health = [LIGHT_GRAY]Здоров'я: {0}
mech.itemcapacity = [LIGHT_GRAY] Ємність елементів: {0} mech.itemcapacity = [LIGHT_GRAY] Ємність елементів: {0}
mech.minespeed = [LIGHT_GRAY]Швидкість видобутку: {0} mech.minespeed = [LIGHT_GRAY]Швидкість видобутку: {0}%
mech.minepower = [LIGHT_GRAY]Потужність видобутку: {0} mech.minepower = [LIGHT_GRAY]Потужність видобутку: {0}
mech.ability = [LIGHT_GRAY]Здібність: {0} mech.ability = [LIGHT_GRAY]Здібність: {0}
mech.buildspeed = [LIGHT_GRAY]Швидкість будування: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Теплоємність: {0} liquid.heatcapacity = [LIGHT_GRAY]Теплоємність: {0}
liquid.viscosity = [LIGHT_GRAY]В'язкість: {0} liquid.viscosity = [LIGHT_GRAY]В'язкість: {0}
liquid.temperature = [LIGHT_GRAY]Температура: {0} liquid.temperature = [LIGHT_GRAY]Температура: {0}
@@ -698,7 +693,7 @@ block.impact-reactor.name = Імпульсний реактор
block.mechanical-drill.name = Механічний дриль block.mechanical-drill.name = Механічний дриль
block.pneumatic-drill.name = Пневматичний дриль block.pneumatic-drill.name = Пневматичний дриль
block.laser-drill.name = Лазерний дриль block.laser-drill.name = Лазерний дриль
block.water-extractor.name = Екстрактор води block.water-extractor.name = Гідроконденсатор
block.cultivator.name = Культиватор block.cultivator.name = Культиватор
block.alpha-dart-mech-pad.name = Реконструктор "Альфа-Дротик" block.alpha-dart-mech-pad.name = Реконструктор "Альфа-Дротик"
block.delta-mech-pad.name = Реконструктор "Дельта" block.delta-mech-pad.name = Реконструктор "Дельта"
@@ -727,7 +722,7 @@ block.pyratite-mixer.name = Змішувач піротиту
block.blast-mixer.name = Доменний змішувач block.blast-mixer.name = Доменний змішувач
block.solar-panel.name = Сонячна панель block.solar-panel.name = Сонячна панель
block.solar-panel-large.name = Велика сонячна панель block.solar-panel-large.name = Велика сонячна панель
block.oil-extractor.name = Екстрактор нафти block.oil-extractor.name = Нафтова вежа
block.spirit-factory.name = Завод дронов "Призрак" block.spirit-factory.name = Завод дронов "Призрак"
block.phantom-factory.name = Завод дронов "Фантом" block.phantom-factory.name = Завод дронов "Фантом"
block.wraith-factory.name = Завод винищувачів "Примара" block.wraith-factory.name = Завод винищувачів "Примара"
@@ -767,7 +762,7 @@ block.meltdown.name = Розтоплення
block.container.name = Склад block.container.name = Склад
block.launch-pad.name = Стартовий майданчик block.launch-pad.name = Стартовий майданчик
block.launch-pad.description = Запускає партії елементів без необхідності запуску ядра. Незакінчено. block.launch-pad.description = Запускає партії елементів без необхідності запуску ядра. Незакінчено.
block.launch-pad-large.name = Large Launch Pad block.launch-pad-large.name = Великий Стартовий майданчик
team.blue.name = Синя team.blue.name = Синя
team.red.name = Червона team.red.name = Червона
team.orange.name = Помаренчева team.orange.name = Помаренчева
@@ -852,7 +847,7 @@ block.silicon-smelter.description = За допомогою піску, вугі
block.plastanium-compressor.description = Створює пластинійи з титану і нафти. Вимагає енергії. Для прискорення виробництва можна додати в компресор пісок. block.plastanium-compressor.description = Створює пластинійи з титану і нафти. Вимагає енергії. Для прискорення виробництва можна додати в компресор пісок.
block.phase-weaver.description = Виробляє фазову тканину торію і піску. Вимагає багато енергії. block.phase-weaver.description = Виробляє фазову тканину торію і піску. Вимагає багато енергії.
block.alloy-smelter.description = Створює кінетичний сплав з титану, кременя, міді і свинця. Вимагає енергію. block.alloy-smelter.description = Створює кінетичний сплав з титану, кременя, міді і свинця. Вимагає енергію.
block.pulverizer.description = Подрібнює камінь в пісок. Вимагає енергії. block.pulverizer.description = Подрібнює металобрухт в пісок. Вимагає енергії.
block.pyratite-mixer.description = Створює піротит з вугілля, свинцю і піску. Вимагає енергії. block.pyratite-mixer.description = Створює піротит з вугілля, свинцю і піску. Вимагає енергії.
block.blast-mixer.description = Створює вибухонебезпечне з'єднання з нафти і піротіта. Для прискорення виробництва можна додати в мішалку пісок. block.blast-mixer.description = Створює вибухонебезпечне з'єднання з нафти і піротіта. Для прискорення виробництва можна додати в мішалку пісок.
block.cryofluidmixer.description = Виробляє криогенну рідину з води і титану. Вимагає енергії. block.cryofluidmixer.description = Виробляє криогенну рідину з води і титану. Вимагає енергії.

View File

@@ -1,4 +1,4 @@
credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) credits.text = [ROYAL]Anuken[]开发 - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!)
credits = 致谢 credits = 致谢
contributors = 译者和贡献者 contributors = 译者和贡献者
discord = 加入 Mindustry 的 Discord! discord = 加入 Mindustry 的 Discord!
@@ -12,65 +12,66 @@ link.wiki.description = 官方 Mindustry 维基
linkfail = 打开链接失败!\nURL 已经复制到剪贴板。 linkfail = 打开链接失败!\nURL 已经复制到剪贴板。
screenshot = 荧幕截图已放在 {0} screenshot = 荧幕截图已放在 {0}
gameover = 你的核心被摧毁了! gameover = 你的核心被摧毁了!
gameover.pvp = accent] {0}[] 队获胜! gameover.pvp = [accent] {0}[] 队获胜!
highscore = [accent]新纪录! highscore = [accent]新纪录!
stat.wave = 战胜的波数:[accent]{0} stat.wave = 战胜的波数:[accent]{0}
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0} stat.enemiesDestroyed = 消灭的敌人:[accent]{0}
stat.built = Buildings Built:[accent] {0} stat.built = 建造的建筑:[accent]{0}
stat.destroyed = Buildings Destroyed:[accent] {0} stat.destroyed = 摧毁的建筑:[accent]{0}
stat.deconstructed = Buildings Deconstructed:[accent] {0} stat.deconstructed = 拆除的建筑:[accent]{0}
stat.delivered = Resources Launched: stat.delivered = 发射的资源:
stat.rank = Final Rank: [accent]{0} stat.rank = 最终排名:[accent]{0}
placeline = You have selected a block.\nYou can[accent] place in a line[] by[accent] holding down your finger for a few seconds[] and dragging in a direction.\nTry it. placeline = 你选择了一个方块。\n你能通过[accent]长按几秒钟[]并向一个方向拖动来[accent]直线放置方块[]。\n试试看吧。
removearea = You have selected removal mode.\nYou can[accent] remove blocks in a rectangle[] by[accent] holding down your finger for a few seconds[] and dragging.\nTry it. removearea = 你选择了拆除模式。\n你能通过[accent]长按几秒钟[]并拖动来[accent]删除矩形内的方块[]。\n试试看吧。
launcheditems = [accent]Launched Items launcheditems = [accent]发射的资源
map.delete = 确定要删除 "[accent]{0}[]" 地图吗? map.delete = 确定要删除 "[accent]{0}[]" 地图吗?
level.highscore = 最高分:[accent]{0} level.highscore = 最高分:[accent]{0}
level.select = 选择关卡 level.select = 选择关卡Level Select
level.mode = 游戏模式: level.mode = 游戏模式:
showagain = 不再显示 showagain = 下次不再显示
coreattack = < 核心正在受到攻击! > coreattack = < 核心正在受到攻击! >
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent nearpoint = [[ [scarlet]立即离开敌人出生点[] ]\n将被清理
outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} outofbounds = [[ 超出边界 ]\n[]{0}秒后自毁
database = 核心数据 database = 核心数据
savegame = 保存游戏 savegame = 保存游戏
loadgame = 载入游戏 loadgame = 载入游戏
joingame = 加入游戏 joingame = 加入游戏
addplayers = 加/删除玩家 addplayers = 加/删除玩家
customgame = 自定义游戏 customgame = 自定义游戏
newgame = 新游戏 newgame = 新游戏
none = <无> none = <无>
minimap = Minimap
close = 关闭 close = 关闭
quit = 退出 quit = 退出
maps = 地图 maps = 地图
continue = 继续 continue = 继续
maps.none = [LIGHT_GRAY]未发现地图! maps.none = [LIGHT_GRAY]没有找到地图!
about.button = 关于 about.button = 关于
name = 名字: name = 名字:
noname = Pick a[accent] player name[] first. noname = 先取一个[accent] 玩家名[]。
filename = 文件名: filename = 文件名:
unlocked = 新方块已解锁! unlocked = 新方块已解锁!
completed = [accent]Completed completed = [accent]完成的
techtree = 科技树 techtree = 科技树
research.list = [LIGHT_GRAY]Research: research.list = [LIGHT_GRAY]研究:
research = Research research = 研究
researched = [LIGHT_GRAY]{0} researched. researched = [LIGHT_GRAY]{0} 己研究。
players = {0} 玩家在线 players = {0} 玩家在线
players.single = {0} 玩家在线 players.single = {0} 玩家在线
server.closing = [accent]正在关闭服务器…… server.closing = [accent]正在关闭服务器……
server.kicked.kick = 你被踢出服务器了! server.kicked.kick = 你被踢出服务器了!
server.kicked.serverClose = 服务器已关闭。 server.kicked.serverClose = 服务器已关闭。
server.kicked.clientOutdated = 客户端版本过旧!请升级 server.kicked.clientOutdated = 过旧的客户端!更新你的游戏
server.kicked.serverOutdated = 服务器版本过旧!请联系房主升级! server.kicked.serverOutdated = 过旧的服务器!联系房主升级!
server.kicked.banned = 这个服务器拉黑了。 server.kicked.banned = 这个服务器上被禁了。
server.kicked.recentKick = 你刚刚被踢出服务器。\n请稍后重新连接 server.kicked.recentKick = 你刚刚被踢出服务器。\n请稍后重新连接
server.kicked.nameInUse = 服务器中已经\n有人有相同的名字了。 server.kicked.nameInUse = 服务器中已经\n有人有相同的名字了。
server.kicked.nameEmpty = 你的名字必须至少包含一个字母或数字 server.kicked.nameEmpty = 选择的名字是无效的
server.kicked.idInUse = 你已在服务器!不允许用两个账号。 server.kicked.idInUse = 你已在这个服务器!不允许用两个账号连接
server.kicked.customClient = 这个服务器不支持修改版客户端,请下载官方版本。 server.kicked.customClient = 这个服务器不支持定制版本。下载官方版本。
server.kicked.gameover = ! server.kicked.gameover = 游戏结束!
host.info = [accent]创建局域网游戏[]按钮会在[scarlet]6567[]端口运行一个服务器。[]\n任何在同一个[LIGHT_GRAY]网络或本地网络[]下的人都在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过IP地址连接你需要设定[accent]端口转发[]。\n\n[LIGHT_GRAY]注意如果某人无法连接到你的局域网游戏请确保你在防火墙设置里允许了Mindustry连接本地网络。 host.info = [accent]创建局域网游戏[]按钮会在[scarlet]6567[]端口运行一个服务器。[]\n任何在同一个[LIGHT_GRAY]wifi或本地网络[]下的人都应该可以在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过IP地址连接你需要设定[accent]端口转发[]。\n\n[LIGHT_GRAY]注意如果某人无法连接到你的局域网游戏请确保你在防火墙设置里允许了Mindustry访问本地网络。
join.info = 你可以在这里输入[accent]服务器的IP地址[]连接,或寻找[accent]本地网络[]中的服务器连接。\n目前支持局域网或广域网多人游戏。\n\n[LIGHT_GRAY]注意没有全球服务器列表如果你想通过IP地址连接某个服务器你需要向房主询问IP地址。 join.info = 此时,可以输入[accent]服务器的IP地址[]连接,或寻找[accent]本地网络[]中的服务器连接。\n局域网或广域网多人游戏都被支持。\n\n[LIGHT_GRAY]注意没有全球服务器列表如果你想通过IP地址连接某个服务器你需要向房主询问IP地址。
hostserver = 创建服务器 hostserver = 创建服务器
hostserver.mobile = 创建\n服务器 hostserver.mobile = 创建\n服务器
host = 创建 host = 创建
@@ -81,190 +82,190 @@ server.refreshing = 正在刷新服务器
hosts.none = [lightgray]未发现局域网游戏! hosts.none = [lightgray]未发现局域网游戏!
host.invalid = [scarlet]无法连接服务器。 host.invalid = [scarlet]无法连接服务器。
trace = 跟踪玩家 trace = 跟踪玩家
trace.playername = 玩家名字: [accent]{0} trace.playername = 玩家名称:[accent]{0}
trace.ip = IP地址[accent]{0} trace.ip = IP地址[accent]{0}
trace.id = ID[accent]{0} trace.id = 唯一的ID[accent]{0}
trace.android = 安卓客户端:[accent]{0} trace.android = 安卓客户端:[accent]{0}
trace.modclient = 修改版客户端: [accent]{0} trace.modclient = 定制版客户端:[accent]{0}
trace.totalblocksbroken = 总共破坏了 [accent]{0} 个方块。 trace.totalblocksbroken = 总共破坏了 [accent]{0} 个方块。
trace.structureblocksbroken = 总共破坏了[accent]{0}方块。 trace.structureblocksbroken = 总共破坏了 [accent]{0} 个建筑物方块。
trace.lastblockbroken = 最后破坏的方块:[accent]{0} trace.lastblockbroken = 最后破坏的方块:[accent]{0}
trace.totalblocksplaced = 总共放置了 [accent]{0} 个方块。 trace.totalblocksplaced = 总共放置了 [accent]{0} 个方块。
trace.lastblockplaced = 最后放置的方块:[accent]{0} trace.lastblockplaced = 最后放置的方块:[accent]{0}
invalidid = 无效的客户端ID提交错误报告。 invalidid = 无效的客户端ID提交一个错误报告。
server.bans = 黑名单 server.bans = 黑名单
server.bans.none = 没有被拉黑的玩家! server.bans.none = 没有找到被拉黑的玩家!
server.admins = 管理员 server.admins = 管理员
server.admins.none = 没有管理员! server.admins.none = 没有找到管理员!
server.add = 添加服务器 server.add = 添加服务器
server.delete = 确定要删除这个服务器吗? server.delete = 确定要删除这个服务器吗?
server.hostname = 主机{0} server.hostname = 主机{0}
server.edit = 编辑服务器 server.edit = 编辑服务器
server.outdated = [crimson]服务器过旧[] server.outdated = [crimson]过旧的服务器![]
server.outdated.client = [crimson]客户端过旧[] server.outdated.client = [crimson]过旧的客户端![]
server.version = [lightgray]版本: {0} server.version = [lightgray]版本:{0} {1}
server.custombuild = [yellow]修改 server.custombuild = [yellow]定制
confirmban = 确认拉黑这玩家吗? confirmban = 确认你想拉黑这玩家吗?
confirmkick = 确定要踢出这个玩家吗? confirmkick = 确定你想要踢走这名玩家吗?
confirmunban = 确认要取消拉黑这玩家吗? confirmunban = 你确定你想要取消拉黑这玩家吗?
confirmadmin = 确认要添加这个玩家为管理员吗? confirmadmin = 你确定你想要使这名玩家成为一个管理员吗?
confirmunadmin = 确认要取消这个玩家的管理员身份吗? confirmunadmin = 你确定你想要删除这名玩家的管理员地位吗?
joingame.title = 加入游戏 joingame.title = 加入游戏
joingame.ip = IP joingame.ip = 地址
disconnect = 已断开 disconnect = 已断开
disconnect.data = 载入世界失败! disconnect.data = 读取世界数据失败!
connecting = [accent]连接中…… connecting = [accent]正在连接...
connecting.data = [accent]加载世界中…… connecting.data = [accent]正在加载世界数据...
server.port = 端口 server.port = 端口
server.addressinuse = 地址已经使用! server.addressinuse = 地址已经使用
server.invalidport = 无效的端口! server.invalidport = 无效的端口
server.error = [crimson]创建服务器错误:[accent]{0} server.error = [crimson]创建服务器错误:[accent]{0}
save.old = 这个存档属于旧版本游戏,无法继续使用。\n\n[LIGHT_GRAY]存档向下兼容将在 4.0 版本中实现。 save.old = 这个存档属于旧版本游戏,不再被使用。\n\n[LIGHT_GRAY]存档向下兼容将在完整的 4.0 版本中实现。
save.new = 新存档 save.new = 新存档
save.overwrite = 确认要覆盖这个存档吗? save.overwrite = 你确定你要覆盖这个存档吗?
overwrite = 覆盖 overwrite = 覆盖
save.none = 没有存档! save.none = 没有存档被找到
saveload = [accent]保存中…… saveload = [accent]正在保存...
savefail = 保存失败! savefail = 保存失败!
save.delete.confirm = 确认要删除这个存档吗? save.delete.confirm = 你确定你要删除这个存档吗?
save.delete = 删除 save.delete = 删除
save.export = 导出存档 save.export = 导出存档
save.import.invalid = [accent]存档无效! save.import.invalid = [accent]这个存档无效
save.import.fail = [crimson]导入存档失败:[accent]{0} save.import.fail = [crimson]导入存档失败:[accent]{0}
save.export.fail = [crimson]导出存档失败:[accent]{0} save.export.fail = [crimson]导出存档失败:[accent]{0}
save.import = 导入存档 save.import = 导入存档
save.newslot = 保存游戏 save.newslot = 保存的名称
save.rename = 重命名 save.rename = 重命名
save.rename.text = 新名 save.rename.text = 新名
selectslot = 选择一个存档。 selectslot = 选择一个存档。
slot = [accent]存档 {0} slot = [accent]存档 {0}
save.corrupted = [accent]存档损坏或无效!\n如果你刚刚升级了游戏那么这可能是因为存档格式改变了而[scarlet]不是[]bug 。 save.corrupted = [accent]存档损坏或无效!\n如果你刚刚升级了游戏那么这可能是因为存档格式改变了而[scarlet]不是[]bug 。
empty = <空> empty = <空>
on = on =
off = off =
save.autosave = 自动保存:{0} save.autosave = 自动保存:{0}
save.map = 地图:{0} save.map = 地图:{0}
save.wave = {0} save.wave = 波次 {0}
save.difficulty = 难度:{0} save.difficulty = 难度:{0}
save.date = 最后保存日期{0} save.date = 最后保存{0}
save.playtime = 游戏时间:{0} save.playtime = 游戏时间:{0}
warning = Warning. warning = 警告。
confirm = 确认 confirm = 确认
delete = 删除 delete = 删除
ok = 好的 ok = 好的
open = 打开 open = 打开
cancel = 取消 cancel = 取消
openlink = 打开链接 openlink = 打开链接
copylink = 删除链接 copylink = 复制链接
back = 返回 back = 返回
quit.confirm = 确认要退出? quit.confirm = 你确定你想要退出?
changelog.title = 更新日志 changelog.title = 更新日志
changelog.loading = 正在获取更新日志... changelog.loading = 正在获取更新日志...
changelog.error.android = [accent]注意更新日志有时在安卓 4.4 以下不工作。\n这是因为安卓系统的一个 bug changelog.error.android = [accent]注意更新日志有时在安卓 4.4 以下不工作。\n这是安卓系统内部的一个bug。
changelog.error.ios = [accent]iOS还不支持更新日志。 changelog.error.ios = [accent]更新日志当前在iOS中不被支持
changelog.error = [scarlet]获取更新日志失败!\n请检查你的网络。 changelog.error = [scarlet]获取更新日志失败!\n请检查你的网络。
changelog.current = [yellow][[Current version] changelog.current = [yellow][[当前版本]
changelog.latest = [accent][[Latest version] changelog.latest = [accent][[最新版本]
loading = [accent]加载中…… loading = [accent]正在加载...
saving = [accent]保存中…… saving = [accent]正在保存...
wave = [accent] {0} wave = [accent]波次 {0}
wave.waiting = 下一波将在 {0} 秒后到来 wave.waiting = [LIGHT_GRAY]下一波将在{0}秒后到来
waiting = 等待中……
waiting.players = 等待玩家中…… waiting.players = 等待玩家中……
wave.enemies = 剩下 [LIGHT_GRAY]{0} 敌人 waiting = [LIGHT_GRAY]正在等待...
wave.enemy = 剩下 [LIGHT_GRAY]{0} 敌人 wave.enemies = [LIGHT_GRAY]剩余 {0} 敌人
wave.enemy = [LIGHT_GRAY]剩余 {0} 个敌人
loadimage = 加载图片 loadimage = 加载图片
saveimage = 保存图片 saveimage = 保存图片
unknown = 未知 unknown = 未知
custom = 自定义 custom = 自定义
builtin = 内建的 builtin = 内建的
map.delete.confirm = 确认要删除地图吗?这个操作无法撤销 map.delete.confirm = 你确定你想要删除这张地图吗?这个操作无法取消
map.random = [accent]随机地图 map.random = [accent]随机地图
map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]蓝色[]的核心。 map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]蓝色[]的核心。
map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[ROYAL]红色[]的核心。 map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[ROYAL]红色[]的核心。
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 = 这个地图没有敌人的核心!请在编辑中向地图添加一个[SCARLET]红色[]的核心。
map.invalid = 地图载入错误:地图文件可能已经损坏。 map.invalid = 地图载入错误:地图文件可能已经损坏。
editor.brush = 笔刷 editor.brush = 笔刷
editor.openin = 在编辑器中打开 editor.openin = 在编辑器中打开
editor.oregen = 生成矿石 editor.oregen = 矿石的生成
editor.oregen.info = 生成矿石: editor.oregen.info = 矿石的生成
editor.mapinfo = 地图详情 editor.mapinfo = 地图信息
editor.author = 作者: editor.author = 作者:
editor.description = 描述: editor.description = 描述:
editor.waves = Waves: editor.waves = 波数:
waves.title = Waves waves.title = 波数
waves.remove = Remove waves.remove = 去除
waves.never = <never> waves.never = <never>
waves.every = every waves.every =
waves.waves = wave(s) waves.waves =
waves.perspawn = per spawn waves.perspawn = 每次生成
waves.to = to waves.to =
waves.boss = Boss waves.boss = 首领Boos
waves.preview = Preview waves.preview = 预览
waves.edit = Edit... waves.edit = 编辑...
waves.copy = Copy to Clipboard waves.copy = 复制到剪贴板
waves.load = Load from Clipboard waves.load = 从剪贴板读取
waves.invalid = Invalid waves in clipboard. waves.invalid = 剪贴板中无效的波次信息。
waves.copied = Waves copied. waves.copied = 波次信息已复制。
editor.default = [LIGHT_GRAY]<Default> editor.default = [LIGHT_GRAY]<默认>
edit = Edit... edit = 编辑...
editor.name = editor.name =
editor.teams = editor.teams =
editor.elevation = 高度 editor.elevation = 高度
editor.errorload = Error loading file:\n[accent]{0} editor.errorload = 读取文件时出现错误:\n[accent]{0}
editor.errorsave = Error saving file:\n[accent]{0} editor.errorsave = 保存文件时出现错误:\n[accent]{0}
editor.errorname = Map has no name defined. editor.errorname = 地图没有被定义的名称。
editor.update = Update editor.update = 更新(Update
editor.randomize = Randomize editor.randomize = 随机化
editor.apply = Apply editor.apply = 应用
editor.generate = 生成 editor.generate = 生成
editor.resize = 调整 editor.resize = 调整大小
editor.loadmap = 载入地图 editor.loadmap = 载入地图
editor.savemap = 保存地图 editor.savemap = 保存地图
editor.saved = 已保存! editor.saved = 已保存!
editor.save.noname = 你的地图没有名字!在“地图信息”菜单里设置一个名字 editor.save.noname = 你的地图没有名字!在“地图信息”菜单里设置一个。
editor.save.overwrite = 你的地图覆盖了一个内建的地图!在“地图信息”菜单里重新设置一个的名 editor.save.overwrite = 你的地图覆盖了一个内建的地图!在“地图信息”菜单里重新设置一个不同的名
editor.import.exists = [scarlet]无法导入:[] 已经有一个叫 '{0}' 的内建地图存在 editor.import.exists = [scarlet]无法导入:[]名为‘{0}的内建地图存在
editor.import = 导入…… editor.import = 导入...
editor.importmap = 导入地图 editor.importmap = 导入地图
editor.importmap.description = 导入一个已经存在的地图 editor.importmap.description = 导入一个已经存在的地图
editor.importfile = 导入文件 editor.importfile = 导入文件
editor.importfile.description = 导入一个外置的地图文件 editor.importfile.description = 导入一个外置的地图文件
editor.importimage = 导入地形图像 editor.importimage = 导入地形图像
editor.importimage.description = 导入外置地图图像文件 editor.importimage.description = 导入一个外置地图图像文件
editor.export = 导出…… editor.export = 导出...
editor.exportfile = 导出文件 editor.exportfile = 导出文件
editor.exportfile.description = 导出一个地图文件 editor.exportfile.description = 导出一个地图文件
editor.exportimage = 导出一个地形文件 editor.exportimage = 导出一个地形文件
editor.exportimage.description = 导出一个地图图像文件 editor.exportimage.description = 导出一个地图图像文件
editor.loadimage = 导入地形 editor.loadimage = 导入地形
editor.saveimage = 导出地形 editor.saveimage = 导出地形
editor.unsaved = [scarlet]你有未保存的更改![]\n确定要退出 editor.unsaved = [scarlet]你有未保存的更改![]\n确定你想要要退出?
editor.resizemap = 调整地图 editor.resizemap = 调整地图大小
editor.mapname = 地图名 editor.mapname = 地图名
editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。 editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。
editor.overwrite.confirm = [scarlet]警告![] 存在同名地图,确定要覆盖? editor.overwrite.confirm = [scarlet]警告![]存在同名地图。你确定你想要覆盖?
editor.selectmap = 选择一个地图加载: editor.selectmap = 选择一个地图加载:
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below. filters.empty = [LIGHT_GRAY]没有过滤器(filters)!用下方的按钮添加一个。
filter.distort = Distort filter.distort = 扭曲?(Distort
filter.noise = Noise filter.noise = 噪音(Noise
filter.ore = Ore filter.ore = 矿石(Ore
filter.rivernoise = River Noise filter.rivernoise = 河流噪音(River Noise
filter.scatter = Scatter filter.scatter = 散播(Scatter
filter.terrain = Terrain filter.terrain = 地形(Terrain
filter.option.scale = Scale filter.option.scale = 规模?(Scale
filter.option.chance = Chance filter.option.chance = 机会(Chance
filter.option.mag = Magnitude filter.option.mag = 大小?(Magnitude
filter.option.threshold = Threshold filter.option.threshold = 门槛?(Threshold
filter.option.circle-scale = Circle Scale filter.option.circle-scale = 圈规模?(Circle Scale
filter.option.octaves = Octaves filter.option.octaves = 八度?(Octaves
filter.option.falloff = Falloff filter.option.falloff = 减少?(Falloff
filter.option.block = Block filter.option.block = 方块
filter.option.floor = Floor filter.option.floor = 地面
filter.option.wall = Wall filter.option.wall =
filter.option.ore = Ore filter.option.ore = 矿石
filter.option.floor2 = Secondary Floor filter.option.floor2 = 第二地面?(Secondary Floor
filter.option.threshold2 = Secondary Threshold filter.option.threshold2 = 第二门槛?(Secondary Threshold
width = 宽度: width = 宽度:
height = 高度: height = 高度:
menu = 菜单 menu = 菜单
@@ -280,7 +281,7 @@ tutorial = 教程
editor = 编辑器 editor = 编辑器
mapeditor = 地图编辑器 mapeditor = 地图编辑器
donate = 捐赠 donate = 捐赠
abandon = Abandon abandon = 放弃
abandon.text = 这个区域和它的所有资源会被敌人没收. abandon.text = 这个区域和它的所有资源会被敌人没收.
locked = 已被锁定 locked = 已被锁定
complete = [LIGHT_GRAY]完成: complete = [LIGHT_GRAY]完成:
@@ -300,7 +301,7 @@ zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = 已被发现的资源: zone.resources = 已被发现的资源:
add = Add... add = Add...
boss.health = Boss Health boss.health = Boss 生命值
connectfail = [crimson]服务器连接失败: [accent]{0} connectfail = [crimson]服务器连接失败: [accent]{0}
error.unreachable = 服务器无法访问。 error.unreachable = 服务器无法访问。
error.invalidaddress = 地址无效。 error.invalidaddress = 地址无效。
@@ -335,34 +336,30 @@ no = 不
info.title = [accent]详情 info.title = [accent]详情
error.title = [crimson]发生了一个错误 error.title = [crimson]发生了一个错误
error.crashtitle = 发生了一个错误 error.crashtitle = 发生了一个错误
blocks.outputspeed = 挖掘速度: {0}/s blocks.input = Input
blocks.efficiency = 效率: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = 方块详情 block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = 能量: {0}
blocks.poweroutput = 能量输出: {0}
blocks.powercapacity = 能量容量 blocks.powercapacity = 能量容量
blocks.powershot = 能量/发射 blocks.powershot = 能量/发射
blocks.targetsair = 攻击空中单位 blocks.targetsair = 攻击空中单位
blocks.targetsground = 攻击地面单位 blocks.targetsground = 攻击地面单位
blocks.items = 物体: {0}
blocks.itemsmoved = 移动速度 blocks.itemsmoved = 移动速度
blocks.launchtime = Time Between Launches blocks.launchtime = 发射间隔时间
blocks.shootrange = 范围 blocks.shootrange = 范围
blocks.size = 尺寸 blocks.size = 尺寸
blocks.liquidcapacity = 液体容量 blocks.liquidcapacity = 液体容量
blocks.maxitemssecond = 最大物品数量
blocks.powerrange = 能量范围 blocks.powerrange = 能量范围
blocks.poweruse = 能量使用 blocks.poweruse = 能量使用
blocks.powerdamage = 功率/损伤 blocks.powerdamage = 功率/损伤
blocks.inputitemcapacity = 最大输入
blocks.outputitemcapacity = 最大输出
blocks.itemcapacity = 物品容量 blocks.itemcapacity = 物品容量
blocks.basepowergeneration = 基础能源输出 blocks.basepowergeneration = 基础能源输出
blocks.powertransferspeed = 能量传输 blocks.powertransferspeed = 能量传输
blocks.craftspeed = 生产速度 blocks.craftspeed = 生产速度
blocks.repairtime = Block Full Repair Time blocks.productiontime = 生产时间
blocks.range = Range blocks.repairtime = 方块完全修复时间
blocks.speedincrease = 提速
blocks.range = 范围
blocks.inputliquid = 液体输入 blocks.inputliquid = 液体输入
blocks.inputliquidaux = 辅助液体 blocks.inputliquidaux = 辅助液体
blocks.inputitem = 物品输入 blocks.inputitem = 物品输入
@@ -370,19 +367,10 @@ blocks.inputitems = 物品输入
blocks.outputitem = 物品输出 blocks.outputitem = 物品输出
blocks.drilltier = 可钻探矿物 blocks.drilltier = 可钻探矿物
blocks.drillspeed = 基础钻探速度 blocks.drillspeed = 基础钻探速度
blocks.boosteffect = 加成影响
blocks.maxunits = 最大单位数量 blocks.maxunits = 最大单位数量
blocks.liquidoutput = 液体输出
blocks.liquidoutputspeed = 液体输出速度
blocks.liquiduse = 液体使用速度
blocks.coolant = 冷却剂
blocks.liquid = 液体
blocks.coolantuse = 冷却剂使用速度
blocks.inputliquidfuel = 液体燃料输入
blocks.liquidfueluse = 液体燃料使用速度
blocks.boostitem = 强化物件
blocks.boostliquid = 强化液体
blocks.health = 生命值 blocks.health = 生命值
blocks.heat = Heat blocks.heat = 热量
blocks.power = 电力 blocks.power = 电力
blocks.progress = 制造进度 blocks.progress = 制造进度
blocks.spawned = 单位数量: {0}/{1} blocks.spawned = 单位数量: {0}/{1}
@@ -390,22 +378,29 @@ blocks.power.satisfaction = 电力输入
blocks.inaccuracy = 误差 blocks.inaccuracy = 误差
blocks.shots = 发射数 blocks.shots = 发射数
blocks.reload = 重新装弹 blocks.reload = 重新装弹
blocks.inputfuel = 燃料
blocks.fuelburntime = 燃料燃烧时间
blocks.inputcapacity = 输入容量
blocks.outputcapacity = 输出容量
blocks.ammo = 子弹 blocks.ammo = 子弹
bullet.damage = [stat]{0}[lightgray] dmg bar.drillspeed = 挖掘速度: {0}/s
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bar.efficiency = 效率: {0}%
bullet.incendiary = [stat]incendiary bar.powerbalance = 能量: {0}
bullet.homing = [stat]homing bar.poweramount = Power: {0}
bullet.shock = [stat]shock bar.poweroutput = 能量输出: {0}
bullet.frag = [stat]frag bar.items = 物体: {0}
bullet.knockback = [stat]{0}[lightgray] knockback bar.liquid = 液体
bullet.freezing = [stat]freezing bar.heat = Heat
bullet.tarred = [stat]tarred bar.power = 电力
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier bar.progress = 制造进度
bullet.reload = [stat]{0}[lightgray]x reload bar.spawned = 单位数量: {0}/{1}
bullet.damage = [stat]{0}[lightgray] 伤害
bullet.splashdamage = [stat]{0}[lightgray] 范围伤害 ~[stat] {1}[lightgray] 格
bullet.incendiary = [stat] 燃烧
bullet.homing = [stat] 追踪
bullet.shock = [stat] 击晕
bullet.frag = [stat] 分裂
bullet.knockback = [stat]{0}[lightgray] 击退
bullet.freezing = [stat] 冰冻
bullet.tarred = [stat] 减速
bullet.multiplier = [stat]{0}[lightgray]x 子弹数量
bullet.reload = [stat]{0}[lightgray]x 装弹
unit.blocks = 方块 unit.blocks = 方块
unit.powersecond = 能量单位/秒 unit.powersecond = 能量单位/秒
unit.liquidsecond = 液体单位/秒 unit.liquidsecond = 液体单位/秒
@@ -414,6 +409,9 @@ unit.liquidunits = 液体单位
unit.powerunits = 能量单位 unit.powerunits = 能量单位
unit.degrees = unit.degrees =
unit.seconds = unit.seconds =
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = 物品 unit.items = 物品
category.general = 普通 category.general = 普通
category.power = 能量 category.power = 能量
@@ -422,10 +420,10 @@ category.items = 物品
category.crafting = 制造 category.crafting = 制造
category.shooting = 发射 category.shooting = 发射
category.optional = 可选的增强物品 category.optional = 可选的增强物品
setting.landscape.name = 锁定地形 setting.landscape.name = 锁定横屏
setting.shadows.name = 影子 setting.shadows.name = 影子
setting.animatedwater.name = 流动的水 setting.animatedwater.name = 流动的水
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = 抗锯齿[LIGHT_GRAY] (需要重新启动)[]
setting.indicators.name = 队友指示器 setting.indicators.name = 队友指示器
setting.autotarget.name = 自动发射 setting.autotarget.name = 自动发射
setting.fpscap.name = 最高 FPS setting.fpscap.name = 最高 FPS
@@ -444,10 +442,11 @@ setting.sensitivity.name = 控制器灵敏度
setting.saveinterval.name = 自动保存间隔 setting.saveinterval.name = 自动保存间隔
setting.seconds = {0} 秒 setting.seconds = {0} 秒
setting.fullscreen.name = 全屏 setting.fullscreen.name = 全屏
setting.borderless.name = Borderless Window setting.borderless.name = 无边界
setting.fps.name = 显示 FPS setting.fps.name = 显示 FPS
setting.vsync.name = 帧同步 setting.vsync.name = 帧同步
setting.lasers.name = 显示能量射线 setting.lasers.name = 显示能量射线
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = 显示小地图 setting.minimap.name = 显示小地图
setting.musicvol.name = 音乐音量 setting.musicvol.name = 音乐音量
setting.mutemusic.name = 静音 setting.mutemusic.name = 静音
@@ -491,7 +490,7 @@ keybind.drop_unit.name = 掉落单位
keybind.zoom_minimap.name = 小地图缩放 keybind.zoom_minimap.name = 小地图缩放
mode.help.title = 模式说明 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.freebuild.name = 自由建造 mode.freebuild.name = 自由建造
@@ -499,19 +498,19 @@ mode.freebuild.description = 有限的资源,不会自动生成敌人。
mode.pvp.name = PvP mode.pvp.name = PvP
mode.pvp.description = 和本地玩家对战. mode.pvp.description = 和本地玩家对战.
mode.attack.name = 攻击 mode.attack.name = 攻击
mode.attack.description = 没有波数,但是有毁敌人基地的任务. mode.attack.description = 没有波数,但是有毁敌人基地的任务.
mode.custom = Custom Rules mode.custom = 自定义模式
rules.infiniteresources = Infinite Resources rules.infiniteresources = 无限资源
rules.wavetimer = Wave Timer rules.wavetimer = 波次计时器
rules.waves = Waves rules.waves = 波次
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = AI无限资源
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = 敌人出生点
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles) rules.enemycorebuildradius = 敌对核心非建设区半径:[LIGHT_GRAY](格)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec) rules.respawntime = 重生时间:[LIGHT_GRAY](秒)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = 波次间隔时间:[LIGHT_GRAY](秒)
rules.buildcostmultiplier = Build Cost Multiplier rules.buildcostmultiplier = 建设花费倍数
rules.buildspeedmultiplier = Build Speed Multiplier rules.buildspeedmultiplier = 建设时间倍数
content.item.name = 物品 content.item.name = 物品
content.liquid.name = 液体 content.liquid.name = 液体
content.unit.name = 部队 content.unit.name = 部队
@@ -568,7 +567,7 @@ mech.omega-mech.name = 欧米茄
mech.omega-mech.weapon = 导弹群 mech.omega-mech.weapon = 导弹群
mech.omega-mech.ability = 配置装甲 mech.omega-mech.ability = 配置装甲
mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达 90% 的伤害。 mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达 90% 的伤害。
mech.dart-ship.name = 沉思者 mech.dart-ship.name = 飞镖
mech.dart-ship.weapon = 机枪 mech.dart-ship.weapon = 机枪
mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。 mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。
mech.javelin-ship.name = 标枪 mech.javelin-ship.name = 标枪
@@ -592,6 +591,7 @@ mech.itemcapacity = [LIGHT_GRAY]物品容量:{0}
mech.minespeed = [LIGHT_GRAY]采矿速度:{0} mech.minespeed = [LIGHT_GRAY]采矿速度:{0}
mech.minepower = [LIGHT_GRAY]采矿力量:{0} mech.minepower = [LIGHT_GRAY]采矿力量:{0}
mech.ability = [LIGHT_GRAY]能力:{0} mech.ability = [LIGHT_GRAY]能力:{0}
mech.buildspeed = [LIGHT_GRAY]建造速度:{0}%
liquid.heatcapacity = [LIGHT_GRAY]热容量:{0} liquid.heatcapacity = [LIGHT_GRAY]热容量:{0}
liquid.viscosity = [LIGHT_GRAY]粘度:{0} liquid.viscosity = [LIGHT_GRAY]粘度:{0}
liquid.temperature = [LIGHT_GRAY]温度:{0} liquid.temperature = [LIGHT_GRAY]温度:{0}
@@ -616,7 +616,7 @@ block.kiln.name = 熔炉
block.kiln.description = 将铅和沙子熔炼成钢化玻璃,需要少量电力。 block.kiln.description = 将铅和沙子熔炼成钢化玻璃,需要少量电力。
block.graphite-press.name = 石墨压缩机 block.graphite-press.name = 石墨压缩机
block.multi-press.name = 大型石墨压缩机 block.multi-press.name = 大型石墨压缩机
block.constructing = {0}\n[LIGHT_GRAY](Constructing) block.constructing = {0}\n[LIGHT_GRAY](建造中)
block.spawn.name = 敌人出生点 block.spawn.name = 敌人出生点
block.core-shard.name = 小型核心 block.core-shard.name = 小型核心
block.core-foundation.name = 中型核心 block.core-foundation.name = 中型核心
@@ -700,7 +700,7 @@ block.pneumatic-drill.name = 气动钻头
block.laser-drill.name = 激光钻头 block.laser-drill.name = 激光钻头
block.water-extractor.name = 抽水机 block.water-extractor.name = 抽水机
block.cultivator.name = 耕种机 block.cultivator.name = 耕种机
block.alpha-dart-mech-pad.name = 阿尔法-沉思者 机甲平台 block.alpha-dart-mech-pad.name = 阿尔法-飞镖 机甲平台
block.delta-mech-pad.name = 德尔塔 机甲平台 block.delta-mech-pad.name = 德尔塔 机甲平台
block.javelin-ship-pad.name = 标枪 机甲平台 block.javelin-ship-pad.name = 标枪 机甲平台
block.trident-ship-pad.name = 三叉戟 机甲平台 block.trident-ship-pad.name = 三叉戟 机甲平台
@@ -767,7 +767,7 @@ block.meltdown.name = 熔毁
block.container.name = 容器 block.container.name = 容器
block.launch-pad.name = 发射台 block.launch-pad.name = 发射台
block.launch-pad.description = 不通过核心发射物体。尚未完成。 block.launch-pad.description = 不通过核心发射物体。尚未完成。
block.launch-pad-large.name = Large Launch Pad block.launch-pad-large.name = 大型发射台
team.blue.name = team.blue.name =
team.red.name = team.red.name =
team.orange.name = team.orange.name =
@@ -790,7 +790,7 @@ unit.wraith.description = 一种快速,打了就跑的截击机。
unit.fortress.name = 堡垒 unit.fortress.name = 堡垒
unit.fortress.description = 一种重炮地面部队。 unit.fortress.description = 一种重炮地面部队。
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 = 尸鬼
@@ -831,7 +831,7 @@ block.overdrive-projector.description = 提高附近建筑物的速度,如钻
block.force-projector.description = 自身周围创建一个六边形力场,保护建筑物和内部单位免受子弹的伤害。 block.force-projector.description = 自身周围创建一个六边形力场,保护建筑物和内部单位免受子弹的伤害。
block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。 block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。
block.duo.description = 小而便宜的炮塔。 block.duo.description = 小而便宜的炮塔。
block.scatter.description = 中型防空炮塔,向空中单位发射铅或废料。. block.scatter.description = 中型防空炮塔,向空中单位发射铅或废料。
block.arc.description = 小型炮塔,发射电弧。 block.arc.description = 小型炮塔,发射电弧。
block.hail.description = 小型炮兵炮台。 block.hail.description = 小型炮兵炮台。
block.lancer.description = 中型炮塔,发射带电的电子束。 block.lancer.description = 中型炮塔,发射带电的电子束。

View File

@@ -40,6 +40,7 @@ addplayers = 增加/移除玩家
customgame = 自訂遊戲 customgame = 自訂遊戲
newgame = 新遊戲 newgame = 新遊戲
none = 〈沒有〉 none = 〈沒有〉
minimap = Minimap
close = 關閉 close = 關閉
quit = 退出 quit = 退出
maps = 地圖 maps = 地圖
@@ -335,66 +336,48 @@ no = 否
info.title = [accent]資訊 info.title = [accent]資訊
error.title = [crimson]發生錯誤 error.title = [crimson]發生錯誤
error.crashtitle = 發生錯誤 error.crashtitle = 發生錯誤
blocks.outputspeed = 鑽頭速度:{0}/秒 blocks.input = Input
blocks.efficiency = 效率:{0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY] blocks.booster = Booster
blocks.blockinfo = 方塊資訊 block.unknown = [LIGHT_GRAY]
blocks.powerbalance = 能量變化:{0}
blocks.poweroutput = 能量輸出:{0}
blocks.powercapacity = 蓄電量 blocks.powercapacity = 蓄電量
blocks.powershot = 能量/射擊 blocks.powershot = 能量/射擊
blocks.targetsair = 攻擊空中目標 blocks.targetsair = 攻擊空中目標
blocks.targetsground = 攻擊地面 blocks.targetsground = 攻擊地面
blocks.items = 物品:{0}
blocks.itemsmoved = 移動速度 blocks.itemsmoved = 移動速度
blocks.launchtime = Time Between Launches blocks.launchtime = Time Between Launches
blocks.shootrange = 範圍 blocks.shootrange = 範圍
blocks.size = 尺寸 blocks.size = 尺寸
blocks.liquidcapacity = 液體容量 blocks.liquidcapacity = 液體容量
blocks.maxitemssecond = 最高產量
blocks.powerrange = 輸出範圍 blocks.powerrange = 輸出範圍
blocks.poweruse = 能量使用 blocks.poweruse = 能量使用
blocks.powerdamage = 能量/傷害 blocks.powerdamage = 能量/傷害
blocks.inputitemcapacity = 最大輸入
blocks.outputitemcapacity = 最大輸出
blocks.itemcapacity = 物品容量 blocks.itemcapacity = 物品容量
blocks.basepowergeneration = 基本能量生产 blocks.basepowergeneration = 基本能量生产
blocks.powertransferspeed = 能量傳輸 blocks.productiontime = Production Time
blocks.craftspeed = 產生速度
blocks.repairtime = Block Full Repair Time blocks.repairtime = Block Full Repair Time
blocks.speedincrease = Speed Increase
blocks.range = Range blocks.range = Range
blocks.inputliquid = 輸入液體
blocks.inputliquidaux = 輔助液體
blocks.inputitem = 輸入物品
blocks.inputitems = 輸入物品
blocks.outputitem = 輸出物品
blocks.drilltier = 可鑽取礦物 blocks.drilltier = 可鑽取礦物
blocks.drillspeed = 基本鑽取速度 blocks.drillspeed = 基本鑽取速度
blocks.boosteffect = Boost Effect
blocks.maxunits = 最大活躍單位 blocks.maxunits = 最大活躍單位
blocks.liquidoutput = 輸出液體
blocks.liquidoutputspeed = 輸出液體速度
blocks.liquiduse = 使用液體速度
blocks.coolant = 冷卻劑
blocks.liquid = 液體
blocks.coolantuse = 使用冷卻劑
blocks.inputliquidfuel = 輸入液體燃料
blocks.liquidfueluse = 使用液體燃料速度
blocks.boostitem = 強化物品
blocks.boostliquid = 強化液體
blocks.health = 耐久度 blocks.health = 耐久度
blocks.heat =
blocks.power = 能量
blocks.progress = 建造進度
blocks.spawned = 單位:{0}/{1}
blocks.power.satisfaction = 能量滿意度
blocks.inaccuracy = 誤差 blocks.inaccuracy = 誤差
blocks.shots = 射擊數 blocks.shots = 射擊數
blocks.reload = 重裝彈藥 blocks.reload = 重裝彈藥
blocks.inputfuel = 燃料
blocks.fuelburntime = 燃燒燃料時間
blocks.inputcapacity = 輸入容量
blocks.outputcapacity = 輸出容量
blocks.ammo = 彈藥 blocks.ammo = 彈藥
bar.drillspeed = 鑽頭速度:{0}/秒
bar.efficiency = 效率:{0}%
bar.powerbalance = 能量變化:{0}
bar.poweramount = Power: {0}
bar.poweroutput = 能量輸出:{0}
bar.items = 物品:{0}
bar.liquid = 液體
bar.heat =
bar.power = 能量
bar.progress = 建造進度
bar.spawned = 單位:{0}/{1}
bullet.damage = [stat]{0}[lightgray] dmg bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
@@ -414,6 +397,9 @@ unit.liquidunits = 液體單位
unit.powerunits = 能量單位 unit.powerunits = 能量單位
unit.degrees = unit.degrees =
unit.seconds = unit.seconds =
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = 物品 unit.items = 物品
category.general = 一般 category.general = 一般
category.power = 能量 category.power = 能量
@@ -425,6 +411,7 @@ category.optional = 可選的強化
setting.landscape.name = Lock Landscape setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = 動畫水 setting.animatedwater.name = 動畫水
setting.animatedshields.name = Animated Shields
setting.antialias.name = 消除鋸齒[LIGHT_GRAY](需要重啟)[] setting.antialias.name = 消除鋸齒[LIGHT_GRAY](需要重啟)[]
setting.indicators.name = 盟友指標 setting.indicators.name = 盟友指標
setting.autotarget.name = 自動射擊 setting.autotarget.name = 自動射擊
@@ -448,6 +435,7 @@ setting.borderless.name = 無邊框窗口
setting.fps.name = 顯示FPS setting.fps.name = 顯示FPS
setting.vsync.name = 垂直同步 setting.vsync.name = 垂直同步
setting.lasers.name = 顯示雷射光束 setting.lasers.name = 顯示雷射光束
setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance)
setting.minimap.name = 顯示小地圖 setting.minimap.name = 顯示小地圖
setting.musicvol.name = 音樂音量 setting.musicvol.name = 音樂音量
setting.mutemusic.name = 靜音 setting.mutemusic.name = 靜音
@@ -507,6 +495,9 @@ rules.waves = Waves
rules.enemyCheat = Infinite AI Resources rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP rules.pvp = PvP
rules.unitdrops = Unit Drops rules.unitdrops = Unit Drops
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
rules.unithealthmultiplier = Unit Health Multiplier
rules.playerdamagemultiplier = Player Damage Multiplier
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 = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec) rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
@@ -592,6 +583,7 @@ mech.itemcapacity = [LIGHT_GRAY]物品容量:{0}
mech.minespeed = [LIGHT_GRAY]採礦速度:{0} mech.minespeed = [LIGHT_GRAY]採礦速度:{0}
mech.minepower = [LIGHT_GRAY]採礦力度:{0} mech.minepower = [LIGHT_GRAY]採礦力度:{0}
mech.ability = [LIGHT_GRAY]能力:{0} mech.ability = [LIGHT_GRAY]能力:{0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]熱容量:{0} liquid.heatcapacity = [LIGHT_GRAY]熱容量:{0}
liquid.viscosity = [LIGHT_GRAY]粘性:{0} liquid.viscosity = [LIGHT_GRAY]粘性:{0}
liquid.temperature = [LIGHT_GRAY]温度:{0} liquid.temperature = [LIGHT_GRAY]温度:{0}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 505 B

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 244 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 535 KiB

After

Width:  |  Height:  |  Size: 535 KiB

View File

@@ -36,6 +36,8 @@ public class Vars{
public static final Charset charset = Charset.forName("UTF-8"); public static final Charset charset = Charset.forName("UTF-8");
/**main application name, capitalized*/ /**main application name, capitalized*/
public static final String appName = "Mindustry"; public static final String appName = "Mindustry";
/**URL for itch.io donations.*/
public static final String donationURL = "https://anuke.itch.io/mindustry/purchase";
/**URL for discord invite.*/ /**URL for discord invite.*/
public static final String discordURL = "https://discord.gg/mindustry"; public static final String discordURL = "https://discord.gg/mindustry";
/**URL for Github API for releases*/ /**URL for Github API for releases*/

View File

@@ -97,7 +97,7 @@ public class WaveSpawner{
} }
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawn.x * tilesize, spawn.y * tilesize)); Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawn.x * tilesize, spawn.y * tilesize));
//would be interesting to see player structures survive this without hacks //would be interesting to see player structures survive this without hacks
Time.run(40f, () -> Damage.damage(waveTeam, spawn.x * tilesize, spawn.y * tilesize, shockwaveBase + Mathf.random(shockwaveRand), 99999999f)); Time.run(40f, () -> Damage.damage(waveTeam, spawn.x * tilesize, spawn.y * tilesize, shockwaveBase + Mathf.random(shockwaveRand), 99999999f, true));
} }
} }
} }

View File

@@ -3,11 +3,17 @@ package io.anuke.mindustry.content;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.Lines;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.game.ContentList; import io.anuke.mindustry.game.ContentList;
import io.anuke.mindustry.graphics.CacheLayer; import io.anuke.mindustry.graphics.CacheLayer;
import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.type.Category; import io.anuke.mindustry.type.Category;
import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.LiquidStack;
import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.blocks.*;
@@ -24,9 +30,9 @@ import io.anuke.mindustry.world.blocks.storage.Vault;
import io.anuke.mindustry.world.blocks.units.MechPad; import io.anuke.mindustry.world.blocks.units.MechPad;
import io.anuke.mindustry.world.blocks.units.RepairPoint; import io.anuke.mindustry.world.blocks.units.RepairPoint;
import io.anuke.mindustry.world.blocks.units.UnitFactory; import io.anuke.mindustry.world.blocks.units.UnitFactory;
import io.anuke.mindustry.world.consumers.ConsumeItemFilter;
import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter; import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter;
import io.anuke.mindustry.world.meta.Attribute; import io.anuke.mindustry.world.meta.Attribute;
import io.anuke.mindustry.world.modules.LiquidModule;
import static io.anuke.mindustry.Vars.state; import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Vars.world; import static io.anuke.mindustry.Vars.world;
@@ -87,6 +93,7 @@ public class Blocks implements ContentList{
air = new Floor("air"){{ air = new Floor("air"){{
alwaysReplace = true; alwaysReplace = true;
hasShadow = false;
} }
public void draw(Tile tile){} public void draw(Tile tile){}
@@ -370,7 +377,7 @@ public class Blocks implements ContentList{
requirements(Category.crafting, ItemStack.with(Items.copper, 150, Items.lead, 60)); requirements(Category.crafting, ItemStack.with(Items.copper, 150, Items.lead, 60));
craftEffect = Fx.pulverizeMedium; craftEffect = Fx.pulverizeMedium;
output = Items.graphite; outputItem = new ItemStack(Items.graphite, 1);
craftTime = 90f; craftTime = 90f;
size = 2; size = 2;
hasItems = true; hasItems = true;
@@ -382,7 +389,7 @@ public class Blocks implements ContentList{
requirements(Category.crafting, ItemStack.with(Items.titanium, 200, Items.silicon, 50, Items.lead, 200, Items.graphite, 100)); requirements(Category.crafting, ItemStack.with(Items.titanium, 200, Items.silicon, 50, Items.lead, 200, Items.graphite, 100));
craftEffect = Fx.pulverizeMedium; craftEffect = Fx.pulverizeMedium;
output = Items.graphite; outputItem = new ItemStack(Items.graphite, 2);
craftTime = 30f; craftTime = 30f;
size = 3; size = 3;
hasItems = true; hasItems = true;
@@ -390,16 +397,17 @@ public class Blocks implements ContentList{
hasPower = true; hasPower = true;
consumes.power(2f); consumes.power(2f);
consumes.item(Items.coal, 2); consumes.item(Items.coal, 4);
consumes.liquid(Liquids.water, 0.1f); consumes.liquid(Liquids.water, 0.1f);
}}; }};
siliconSmelter = new PowerSmelter("silicon-smelter"){{ siliconSmelter = new GenericSmelter("silicon-smelter"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50)); requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.silicon; outputItem = new ItemStack(Items.silicon, 1);
craftTime = 40f; craftTime = 40f;
size = 2; size = 2;
hasPower = true;
hasLiquids = false; hasLiquids = false;
flameColor = Color.valueOf("ffef99"); flameColor = Color.valueOf("ffef99");
@@ -407,10 +415,10 @@ public class Blocks implements ContentList{
consumes.power(0.50f); consumes.power(0.50f);
}}; }};
kiln = new PowerSmelter("kiln"){{ kiln = new GenericSmelter("kiln"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 120, Items.graphite, 60, Items.lead, 60)); requirements(Category.crafting, ItemStack.with(Items.copper, 120, Items.graphite, 60, Items.lead, 60));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.metaglass; outputItem = new ItemStack(Items.metaglass, 1);
craftTime = 30f; craftTime = 30f;
size = 2; size = 2;
hasPower = hasItems = true; hasPower = hasItems = true;
@@ -420,12 +428,12 @@ public class Blocks implements ContentList{
consumes.power(0.60f); consumes.power(0.60f);
}}; }};
plastaniumCompressor = new PlastaniumCompressor("plastanium-compressor"){{ plastaniumCompressor = new GenericCrafter("plastanium-compressor"){{
requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 230, Items.graphite, 120, Items.titanium, 160)); requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 230, Items.graphite, 120, Items.titanium, 160));
hasItems = true; hasItems = true;
liquidCapacity = 60f; liquidCapacity = 60f;
craftTime = 60f; craftTime = 60f;
output = Items.plastanium; outputItem = new ItemStack(Items.plastanium, 1);
size = 2; size = 2;
health = 320; health = 320;
hasPower = hasLiquids = true; hasPower = hasLiquids = true;
@@ -435,59 +443,135 @@ public class Blocks implements ContentList{
consumes.liquid(Liquids.oil, 0.25f); consumes.liquid(Liquids.oil, 0.25f);
consumes.power(3f); consumes.power(3f);
consumes.item(Items.titanium, 2); consumes.item(Items.titanium, 2);
int topRegion = reg("-top");
drawer = tile -> {
Draw.rect(region, tile.drawx(), tile.drawy());
GenericCrafterEntity entity = tile.entity();
Draw.alpha(Mathf.absin(entity.totalProgress, 3f, 0.9f) * entity.warmup);
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
Draw.reset();
};
}}; }};
phaseWeaver = new PhaseWeaver("phase-weaver"){{ phaseWeaver = new GenericCrafter("phase-weaver"){{
requirements(Category.crafting, ItemStack.with(Items.silicon, 260, Items.lead, 240, Items.thorium, 150)); requirements(Category.crafting, ItemStack.with(Items.silicon, 260, Items.lead, 240, Items.thorium, 150));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.phasefabric; outputItem = new ItemStack(Items.phasefabric, 1);
craftTime = 120f; craftTime = 120f;
size = 2; size = 2;
hasPower = true;
consumes.items(new ItemStack(Items.thorium, 4), new ItemStack(Items.sand, 10)); consumes.items(new ItemStack(Items.thorium, 4), new ItemStack(Items.sand, 10));
consumes.power(5f); consumes.power(5f);
int bottomRegion = reg("-bottom"), weaveRegion = reg("-weave");
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name)};
drawer = tile -> {
GenericCrafterEntity entity = tile.entity();
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy());
float progress = 0.5f;
Shaders.build.region = reg(weaveRegion);
Shaders.build.progress = progress;
Shaders.build.color.set(Pal.accent);
Shaders.build.color.a = entity.warmup;
Shaders.build.time = -entity.totalProgress / 10f;
Draw.shader(Shaders.build, false);
Shaders.build.apply();
Draw.rect(reg(weaveRegion), tile.drawx(), tile.drawy(), entity.totalProgress);
Draw.shader();
Draw.color(Pal.accent);
Draw.alpha(entity.warmup);
Lines.lineAngleCenter(
tile.drawx() + Mathf.sin(entity.totalProgress, 6f, Vars.tilesize / 3f * size),
tile.drawy(),
90,
size * Vars.tilesize / 2f);
Draw.reset();
Draw.rect(region, tile.drawx(), tile.drawy());
};
}}; }};
surgeSmelter = new PowerSmelter("alloy-smelter"){{ surgeSmelter = new GenericSmelter("alloy-smelter"){{
requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 160, Items.thorium, 140)); requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 160, Items.thorium, 140));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.surgealloy; outputItem = new ItemStack(Items.surgealloy, 1);
craftTime = 75f; craftTime = 75f;
size = 3; size = 3;
hasPower = true;
consumes.power(4f); consumes.power(4f);
consumes.items(new ItemStack(Items.titanium, 2), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.copper, 3)); consumes.items(new ItemStack(Items.titanium, 2), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.copper, 3));
}}; }};
cryofluidMixer = new LiquidMixer("cryofluidmixer"){{ cryofluidMixer = new LiquidConverter("cryofluidmixer"){{
requirements(Category.crafting, ItemStack.with(Items.lead, 130, Items.silicon, 80, Items.thorium, 90)); requirements(Category.crafting, ItemStack.with(Items.lead, 130, Items.silicon, 80, Items.thorium, 90));
outputLiquid = Liquids.cryofluid; outputLiquid = new LiquidStack(Liquids.cryofluid, 0.1f);
liquidPerItem = 50f; craftTime = 60f;
size = 2; size = 2;
hasPower = true; hasPower = true;
hasItems = true;
hasLiquids = true;
rotate = false;
solid = true;
outputsLiquid = true;
consumes.power(1f); consumes.power(1f);
consumes.item(Items.titanium); consumes.item(Items.titanium);
consumes.liquid(Liquids.water, 0.3f); consumes.liquid(Liquids.water, 0.1f);
int liquidRegion = reg("-liquid"), topRegion = reg("-top"), bottomRegion = reg("-bottom");
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name + "-top")};
drawer = tile -> {
LiquidModule mod = tile.entity.liquids;
int rotation = rotate ? tile.getRotation() * 90 : 0;
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy(), rotation);
if(mod.total() > 0.001f){
Draw.color(outputLiquid.liquid.color);
Draw.alpha(mod.get(outputLiquid.liquid) / liquidCapacity);
Draw.rect(reg(liquidRegion), tile.drawx(), tile.drawy(), rotation);
Draw.color();
}
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy(), rotation);
};
}}; }};
blastMixer = new GenericCrafter("blast-mixer"){{ blastMixer = new GenericCrafter("blast-mixer"){{
requirements(Category.crafting, ItemStack.with(Items.lead, 60, Items.titanium, 40)); requirements(Category.crafting, ItemStack.with(Items.lead, 60, Items.titanium, 40));
hasItems = true; hasItems = true;
hasPower = true; hasPower = true;
output = Items.blastCompound; outputItem = new ItemStack(Items.blastCompound, 1);
size = 2; size = 2;
consumes.items(new ItemStack(Items.pyratite, 1), new ItemStack(Items.sporePod, 1)); consumes.items(new ItemStack(Items.pyratite, 1), new ItemStack(Items.sporePod, 1));
consumes.power(0.40f); consumes.power(0.40f);
}}; }};
pyratiteMixer = new PowerSmelter("pyratite-mixer"){{ pyratiteMixer = new GenericSmelter("pyratite-mixer"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 100, Items.lead, 50)); requirements(Category.crafting, ItemStack.with(Items.copper, 100, Items.lead, 50));
flameColor = Color.CLEAR; flameColor = Color.CLEAR;
hasItems = true; hasItems = true;
hasPower = true; hasPower = true;
output = Items.pyratite; outputItem = new ItemStack(Items.pyratite, 1);
size = 2; size = 2;
@@ -495,11 +579,10 @@ public class Blocks implements ContentList{
consumes.items(new ItemStack(Items.coal, 1), new ItemStack(Items.lead, 2), new ItemStack(Items.sand, 2)); consumes.items(new ItemStack(Items.coal, 1), new ItemStack(Items.lead, 2), new ItemStack(Items.sand, 2));
}}; }};
melter = new PowerCrafter("melter"){{ melter = new GenericCrafter("melter"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 70, Items.graphite, 90)); requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 70, Items.graphite, 90));
health = 200; health = 200;
outputLiquid = Liquids.slag; outputLiquid = new LiquidStack(Liquids.slag, 2f);
outputLiquidAmount = 2f;
craftTime = 10f; craftTime = 10f;
hasLiquids = hasPower = true; hasLiquids = hasPower = true;
@@ -516,7 +599,7 @@ public class Blocks implements ContentList{
Items.titanium, 2 Items.titanium, 2
); );
hasPower = true; hasPower = true;
filterTime = 35f; craftTime = 35f;
spinnerLength = 1.5f; spinnerLength = 1.5f;
spinnerRadius = 3.5f; spinnerRadius = 3.5f;
spinnerThickness = 1.5f; spinnerThickness = 1.5f;
@@ -529,7 +612,7 @@ public class Blocks implements ContentList{
cultivator = new Cultivator("cultivator"){{ cultivator = new Cultivator("cultivator"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 20, Items.lead, 50, Items.silicon, 20)); requirements(Category.crafting, ItemStack.with(Items.copper, 20, Items.lead, 50, Items.silicon, 20));
output = Items.sporePod; outputItem = new ItemStack(Items.sporePod, 1);
craftTime = 160; craftTime = 160;
size = 2; size = 2;
hasLiquids = true; hasLiquids = true;
@@ -540,23 +623,45 @@ public class Blocks implements ContentList{
consumes.liquid(Liquids.water, 0.15f); consumes.liquid(Liquids.water, 0.15f);
}}; }};
sporePress = new Compressor("spore-press"){{ sporePress = new GenericCrafter("spore-press"){{
requirements(Category.crafting, ItemStack.with(Items.lead, 70, Items.silicon, 60)); requirements(Category.crafting, ItemStack.with(Items.lead, 70, Items.silicon, 60));
liquidCapacity = 60f; liquidCapacity = 60f;
craftTime = 20f; craftTime = 20f;
outputLiquid = Liquids.oil; outputLiquid = new LiquidStack(Liquids.oil, 6f);
outputLiquidAmount = 4f;
size = 2; size = 2;
health = 320; health = 320;
hasLiquids = true; hasLiquids = true;
hasPower = true;
craftEffect = Fx.none;
consumes.item(Items.sporePod, 1); consumes.item(Items.sporePod, 1);
consumes.power(0.60f); consumes.power(0.60f);
int[] frameRegions = new int[3];
for(int i = 0; i < 3; i++){
frameRegions[i] = reg("-frame" + i);
}
int liquidRegion = reg("-liquid");
int topRegion =reg("-top");
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-top")};
drawer = tile -> {
GenericCrafterEntity entity = tile.entity();
Draw.rect(region, tile.drawx(), tile.drawy());
Draw.rect(reg(frameRegions[(int) Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
Draw.color(Color.CLEAR, tile.entity.liquids.current().color, tile.entity.liquids.total() / liquidCapacity);
Draw.rect(reg(liquidRegion), tile.drawx(), tile.drawy());
Draw.color();
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
};
}}; }};
pulverizer = new Pulverizer("pulverizer"){{ pulverizer = new GenericCrafter("pulverizer"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50)); requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50));
output = Items.sand; outputItem = new ItemStack(Items.sand, 1);
craftEffect = Fx.pulverize; craftEffect = Fx.pulverize;
craftTime = 40f; craftTime = 40f;
updateEffect = Fx.pulverizeSmall; updateEffect = Fx.pulverizeSmall;
@@ -564,6 +669,17 @@ public class Blocks implements ContentList{
consumes.item(Items.scrap, 1); consumes.item(Items.scrap, 1);
consumes.power(0.50f); consumes.power(0.50f);
int rotatorRegion = reg("-rotator");
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-rotator")};
drawer = tile -> {
GenericCrafterEntity entity = tile.entity();
Draw.rect(region, tile.drawx(), tile.drawy());
Draw.rect(reg(rotatorRegion), tile.drawx(), tile.drawy(), entity.totalProgress * 2f);
};
}}; }};
incinerator = new Incinerator("incinerator"){{ incinerator = new Incinerator("incinerator"){{
@@ -698,7 +814,7 @@ public class Blocks implements ContentList{
mender = new MendProjector("mender"){{ mender = new MendProjector("mender"){{
requirements(Category.effect, ItemStack.with(Items.lead, 60, Items.copper, 50)); requirements(Category.effect, ItemStack.with(Items.lead, 60, Items.copper, 50));
consumes.power(0.7f); consumes.power(0.3f);
size = 1; size = 1;
reload = 200f; reload = 200f;
range = 40f; range = 40f;
@@ -711,7 +827,7 @@ public class Blocks implements ContentList{
mendProjector = new MendProjector("mend-projector"){{ mendProjector = new MendProjector("mend-projector"){{
requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 50, Items.silicon, 80)); requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 50, Items.silicon, 80));
consumes.power(1.8f); consumes.power(1.5f);
size = 2; size = 2;
reload = 250f; reload = 250f;
range = 85f; range = 85f;
@@ -724,17 +840,18 @@ public class Blocks implements ContentList{
requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 150, Items.plastanium, 60)); requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 150, Items.plastanium, 60));
consumes.power(3.50f); consumes.power(3.50f);
size = 2; size = 2;
consumes.item(Items.phasefabric).optional(true).boost(true); consumes.item(Items.phasefabric).optional(true);
}}; }};
forceProjector = new ForceProjector("force-projector"){{ forceProjector = new ForceProjector("force-projector"){{
requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 250)); requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 250));
size = 3; size = 3;
consumes.item(Items.phasefabric).optional(true).boost(true); consumes.item(Items.phasefabric).optional(true);
}}; }};
shockMine = new ShockMine("shock-mine"){{ shockMine = new ShockMine("shock-mine"){{
requirements(Category.effect, ItemStack.with(Items.lead, 50, Items.silicon, 25)); requirements(Category.effect, ItemStack.with(Items.lead, 50, Items.silicon, 25));
hasShadow = false;
health = 40; health = 40;
damage = 11; damage = 11;
tileDamage = 7f; tileDamage = 7f;
@@ -896,20 +1013,20 @@ public class Blocks implements ContentList{
}}; }};
battery = new Battery("battery"){{ battery = new Battery("battery"){{
requirements(Category.power, ItemStack.with(Items.copper, 8, Items.lead, 30, Items.silicon, 4)); requirements(Category.power, ItemStack.with(Items.copper, 8, Items.lead, 40));
consumes.powerBuffered(3200f, 1f); consumes.powerBuffered(4000f, 1f);
}}; }};
batteryLarge = new Battery("battery-large"){{ batteryLarge = new Battery("battery-large"){{
requirements(Category.power, ItemStack.with(Items.titanium, 40, Items.lead, 80, Items.silicon, 30)); requirements(Category.power, ItemStack.with(Items.titanium, 40, Items.lead, 80, Items.silicon, 40));
size = 3; size = 3;
consumes.powerBuffered(37440f, 1f); consumes.powerBuffered(50000f, 1f);
}}; }};
combustionGenerator = new BurnerGenerator("combustion-generator"){{ combustionGenerator = new BurnerGenerator("combustion-generator"){{
requirements(Category.power, ItemStack.with(Items.copper, 50, Items.lead, 30)); requirements(Category.power, ItemStack.with(Items.copper, 50, Items.lead, 30));
powerProduction = 1f; powerProduction = 1f;
itemDuration = 40f; itemDuration = 60f;
}}; }};
thermalGenerator = new ThermalGenerator("thermal-generator"){{ thermalGenerator = new ThermalGenerator("thermal-generator"){{
@@ -919,24 +1036,24 @@ public class Blocks implements ContentList{
size = 2; size = 2;
}}; }};
turbineGenerator = new TurbineGenerator("turbine-generator"){{ turbineGenerator = new BurnerGenerator("turbine-generator"){{
requirements(Category.power, ItemStack.with(Items.copper, 70, Items.graphite, 50, Items.lead, 80, Items.silicon, 60)); requirements(Category.power, ItemStack.with(Items.copper, 70, Items.graphite, 50, Items.lead, 80, Items.silicon, 60));
powerProduction = 6f; powerProduction = 6f;
itemDuration = 30f; itemDuration = 40f;
consumes.liquid(Liquids.water, 0.05f); consumes.liquid(Liquids.water, 0.05f);
hasLiquids = true; hasLiquids = true;
size = 2; size = 2;
}}; }};
differentialGenerator = new DifferentialGenerator("differential-generator"){{ differentialGenerator = new ItemLiquidGenerator(true, true, "differential-generator"){{
requirements(Category.power, ItemStack.with(Items.copper, 140, Items.titanium, 100, Items.lead, 200, Items.silicon, 130, Items.metaglass, 100)); requirements(Category.power, ItemStack.with(Items.copper, 140, Items.titanium, 100, Items.lead, 200, Items.silicon, 130, Items.metaglass, 100));
powerProduction = 13f; powerProduction = 16f;
itemDuration = 50f; itemDuration = 50f;
consumes.remove(ConsumeItemFilter.class); hasLiquids = true;
consumes.remove(ConsumeLiquidFilter.class); size = 3;
consumes.item(Items.pyratite); consumes.item(Items.pyratite);
consumes.liquid(Liquids.cryofluid, 0.2f); consumes.liquid(Liquids.cryofluid, 0.2f);
size = 3;
}}; }};
rtgGenerator = new DecayGenerator("rtg-generator"){{ rtgGenerator = new DecayGenerator("rtg-generator"){{
@@ -963,16 +1080,17 @@ public class Blocks implements ContentList{
health = 700; health = 700;
powerProduction = 14f; powerProduction = 14f;
consumes.item(Items.thorium); consumes.item(Items.thorium);
consumes.liquid(Liquids.cryofluid, 0.1f); heating = 0.02f;
consumes.liquid(Liquids.cryofluid, 0.1f).update(false);
}}; }};
impactReactor = new ImpactReactor("impact-reactor"){{ impactReactor = new ImpactReactor("impact-reactor"){{
requirements(Category.power, ItemStack.with(Items.lead, 1000, Items.silicon, 600, Items.graphite, 800, Items.thorium, 200, Items.surgealloy, 500, Items.metaglass, 500)); requirements(Category.power, ItemStack.with(Items.lead, 1000, Items.silicon, 600, Items.graphite, 800, Items.thorium, 200, Items.surgealloy, 500, Items.metaglass, 500));
size = 4; size = 4;
health = 900; health = 900;
powerProduction = 80f; powerProduction = 100f;
useTime = 40f; itemDuration = 40f;
consumes.power(23f); consumes.power(25f);
consumes.item(Items.blastCompound); consumes.item(Items.blastCompound);
consumes.liquid(Liquids.cryofluid, 0.8f); consumes.liquid(Liquids.cryofluid, 0.8f);
}}; }};
@@ -986,6 +1104,7 @@ public class Blocks implements ContentList{
drillTime = 600; drillTime = 600;
size = 2; size = 2;
drawMineItem = true; drawMineItem = true;
consumes.liquid(Liquids.water, 0.05f).optional(true);
}}; }};
pneumaticDrill = new Drill("pneumatic-drill"){{ pneumaticDrill = new Drill("pneumatic-drill"){{
@@ -1096,7 +1215,7 @@ public class Blocks implements ContentList{
}}; }};
unloader = new Unloader("unloader"){{ unloader = new Unloader("unloader"){{
requirements(Category.distribution, ItemStack.with(Items.titanium, 50, Items.silicon, 60)); requirements(Category.effect, ItemStack.with(Items.titanium, 50, Items.silicon, 60));
speed = 7f; speed = 7f;
}}; }};
@@ -1146,7 +1265,7 @@ public class Blocks implements ContentList{
Items.scrap, Bullets.flakScrap, Items.scrap, Bullets.flakScrap,
Items.lead, Bullets.flakLead Items.lead, Bullets.flakLead
); );
reload = 20f; reload = 15f;
range = 180f; range = 180f;
size = 2; size = 2;
burstSpacing = 5f; burstSpacing = 5f;
@@ -1332,12 +1451,12 @@ public class Blocks implements ContentList{
Items.surgealloy, Bullets.flakSurge Items.surgealloy, Bullets.flakSurge
); );
xRand = 4f; xRand = 4f;
reload = 7f; reload = 6f;
range = 170f; range = 200f;
size = 3; size = 3;
recoil = 3f; recoil = 3f;
rotatespeed = 10f; rotatespeed = 10f;
inaccuracy = 13f; inaccuracy = 10f;
shootCone = 30f; shootCone = 30f;
health = 145 * size * size; health = 145 * size * size;
@@ -1365,7 +1484,6 @@ public class Blocks implements ContentList{
); );
reload = 6f; reload = 6f;
coolantMultiplier = 0.5f; coolantMultiplier = 0.5f;
maxCoolantUsed = 1.5f;
restitution = 0.1f; restitution = 0.1f;
ammoUseEffect = Fx.shellEjectBig; ammoUseEffect = Fx.shellEjectBig;
range = 200f; range = 200f;
@@ -1379,6 +1497,7 @@ public class Blocks implements ContentList{
shootCone = 24f; shootCone = 24f;
health = 155 * size * size; health = 155 * size * size;
consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 2f)).update(false).optional(true);
}}; }};
meltdown = new LaserTurret("meltdown"){{ meltdown = new LaserTurret("meltdown"){{
@@ -1391,12 +1510,13 @@ public class Blocks implements ContentList{
shootShake = 2f; shootShake = 2f;
powerUsed = 0.5f; powerUsed = 0.5f;
consumes.powerBuffered(1200f); consumes.powerBuffered(1200f);
range = 160f; range = 190f;
reload = 170f; reload = 50f;
firingMoveFract = 0.1f; firingMoveFract = 0.5f;
shootDuration = 220f; shootDuration = 220f;
health = 165 * size * size; health = 200 * size * size;
consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 0.5f)).update(false);
}}; }};
//endregion //endregion
@@ -1407,6 +1527,7 @@ public class Blocks implements ContentList{
type = UnitTypes.spirit; type = UnitTypes.spirit;
produceTime = 5700; produceTime = 5700;
size = 2; size = 2;
maxSpawn = 2;
consumes.power(0.80f); consumes.power(0.80f);
consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30)); consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30));
}}; }};
@@ -1416,6 +1537,7 @@ public class Blocks implements ContentList{
type = UnitTypes.phantom; type = UnitTypes.phantom;
produceTime = 7300; produceTime = 7300;
size = 2; size = 2;
maxSpawn = 2;
consumes.power(2f); consumes.power(2f);
consumes.items(new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80)); consumes.items(new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80));
}}; }};
@@ -1479,6 +1601,7 @@ public class Blocks implements ContentList{
type = UnitTypes.fortress; type = UnitTypes.fortress;
produceTime = 5000; produceTime = 5000;
size = 3; size = 3;
maxSpawn = 3;
consumes.power(2f); consumes.power(2f);
consumes.items(new ItemStack(Items.silicon, 40), new ItemStack(Items.thorium, 50)); consumes.items(new ItemStack(Items.silicon, 40), new ItemStack(Items.thorium, 50));
}}; }};

View File

@@ -273,7 +273,7 @@ public class Bullets implements ContentList{
keepVelocity = false; keepVelocity = false;
splashDamageRadius = 25f; splashDamageRadius = 25f;
splashDamage = 10f; splashDamage = 10f;
lifetime = 80f; lifetime = 50f;
trailColor = Pal.unitBack; trailColor = Pal.unitBack;
backColor = Pal.unitBack; backColor = Pal.unitBack;
frontColor = Pal.unitFront; frontColor = Pal.unitFront;
@@ -533,13 +533,13 @@ public class Bullets implements ContentList{
} }
}; };
meltdownLaser = new BulletType(0.001f, 35){ meltdownLaser = new BulletType(0.001f, 70){
Color tmpColor = new Color(); Color tmpColor = new Color();
Color[] colors = {Color.valueOf("ec745855"), Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.WHITE}; Color[] colors = {Color.valueOf("ec745855"), Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.WHITE};
float[] tscales = {1f, 0.7f, 0.5f, 0.2f}; float[] tscales = {1f, 0.7f, 0.5f, 0.2f};
float[] strokes = {2f, 1.5f, 1f, 0.3f}; float[] strokes = {2f, 1.5f, 1f, 0.3f};
float[] lenscales = {1f, 1.12f, 1.15f, 1.17f}; float[] lenscales = {1f, 1.12f, 1.15f, 1.17f};
float length = 200f; float length = 220f;
{ {
hitEffect = Fx.hitMeltdown; hitEffect = Fx.hitMeltdown;
@@ -626,7 +626,6 @@ public class Bullets implements ContentList{
slagShot = new LiquidBulletType(Liquids.slag){{ slagShot = new LiquidBulletType(Liquids.slag){{
damage = 4; damage = 4;
speed = 1.9f;
drag = 0.03f; drag = 0.03f;
}}; }};
@@ -644,6 +643,8 @@ public class Bullets implements ContentList{
lightning = new BulletType(0.001f, 12f){ lightning = new BulletType(0.001f, 12f){
{ {
lifetime = 1f; lifetime = 1f;
shootEffect = Fx.hitLancer;
smokeEffect = Fx.none;
despawnEffect = Fx.none; despawnEffect = Fx.none;
hitEffect = Fx.hitLancer; hitEffect = Fx.hitLancer;
keepVelocity = false; keepVelocity = false;
@@ -730,7 +731,7 @@ public class Bullets implements ContentList{
lifetime = 23f; lifetime = 23f;
speed = 1f; speed = 1f;
splashDamageRadius = 50f; splashDamageRadius = 50f;
splashDamage = 20f; splashDamage = 28f;
} }
@Override @Override

View File

@@ -34,6 +34,10 @@ public class Items implements ContentList{
cost = 1f; cost = 1f;
}}; }};
sand = new Item("sand", Color.valueOf("f7cba4")){{
}};
coal = new Item("coal", Color.valueOf("272727")){{ coal = new Item("coal", Color.valueOf("272727")){{
explosiveness = 0.4f; explosiveness = 0.4f;
flammability = 1f; flammability = 1f;
@@ -65,7 +69,7 @@ public class Items implements ContentList{
plastanium = new Item("plastanium", Color.valueOf("cbd97f")){{ plastanium = new Item("plastanium", Color.valueOf("cbd97f")){{
type = ItemType.material; type = ItemType.material;
flammability = 0.2f; flammability = 0.1f;
explosiveness = 0.2f; explosiveness = 0.2f;
cost = 1.3f; cost = 1.3f;
}}; }};
@@ -84,10 +88,6 @@ public class Items implements ContentList{
flammability = 1.05f; flammability = 1.05f;
}}; }};
sand = new Item("sand", Color.valueOf("f7cba4")){{
}};
blastCompound = new Item("blast-compound", Color.valueOf("ff795e")){{ blastCompound = new Item("blast-compound", Color.valueOf("ff795e")){{
flammability = 0.4f; flammability = 0.4f;
explosiveness = 1.2f; explosiveness = 1.2f;

View File

@@ -35,6 +35,7 @@ public class Mechs implements ContentList{
mass = 1.2f; mass = 1.2f;
speed = 0.5f; speed = 0.5f;
boostSpeed = 0.85f; boostSpeed = 0.85f;
buildPower = 1.2f;
engineColor = Color.valueOf("ffd37f"); engineColor = Color.valueOf("ffd37f");
health = 300f; health = 300f;
@@ -47,6 +48,11 @@ public class Mechs implements ContentList{
}}; }};
} }
@Override
public void updateAlt(Player player){
player.healBy(Time.delta() * 0.4f);
}
@Override @Override
public boolean alwaysUnlocked(){ public boolean alwaysUnlocked(){
return true; return true;
@@ -63,15 +69,18 @@ public class Mechs implements ContentList{
itemCapacity = 15; itemCapacity = 15;
mass = 0.9f; mass = 0.9f;
health = 250f; health = 250f;
buildPower = 0.9f;
weaponOffsetX = -1; weaponOffsetX = -1;
weaponOffsetY = -1; weaponOffsetY = -1;
engineColor = Color.valueOf("d3ddff"); engineColor = Color.valueOf("d3ddff");
weapon = new Weapon("shockgun"){{ weapon = new Weapon("shockgun"){{
shake = 2f;
length = 1f; length = 1f;
reload = 40f; reload = 40f;
shotDelay = 3f;
roundrobin = true; roundrobin = true;
shots = 1; shots = 3;
inaccuracy = 0f; inaccuracy = 0f;
velocityRnd = 0.2f; velocityRnd = 0.2f;
ejectEffect = Fx.none; ejectEffect = Fx.none;
@@ -110,6 +119,7 @@ public class Mechs implements ContentList{
boostSpeed = 0.8f; boostSpeed = 0.8f;
canHeal = true; canHeal = true;
health = 200f; health = 200f;
buildPower = 1.6f;
engineColor = Pal.heal; engineColor = Pal.heal;
weapon = new Weapon("heal-blaster"){{ weapon = new Weapon("heal-blaster"){{
@@ -161,6 +171,7 @@ public class Mechs implements ContentList{
weaponOffsetY = 0; weaponOffsetY = 0;
engineColor = Color.valueOf("feb380"); engineColor = Color.valueOf("feb380");
health = 300f; health = 300f;
buildPower = 1.5f;
weapon = new Weapon("swarmer"){{ weapon = new Weapon("swarmer"){{
length = 1.5f; length = 1.5f;
recoil = 4f; recoil = 4f;
@@ -227,6 +238,7 @@ public class Mechs implements ContentList{
weaponOffsetY = -1; weaponOffsetY = -1;
engineColor = Pal.lightTrail; engineColor = Pal.lightTrail;
cellTrnsY = 1f; cellTrnsY = 1f;
buildPower = 1.1f;
weapon = new Weapon("blaster"){{ weapon = new Weapon("blaster"){{
length = 1.5f; length = 1.5f;
reload = 20f; reload = 20f;
@@ -315,6 +327,7 @@ public class Mechs implements ContentList{
itemCapacity = 30; itemCapacity = 30;
engineColor = Color.valueOf("84f491"); engineColor = Color.valueOf("84f491");
cellTrnsY = 1f; cellTrnsY = 1f;
buildPower = 2f;
weapon = new Weapon("bomber"){{ weapon = new Weapon("bomber"){{
length = 0f; length = 0f;
width = 2f; width = 2f;
@@ -346,6 +359,7 @@ public class Mechs implements ContentList{
itemCapacity = 60; itemCapacity = 60;
engineColor = Color.valueOf("feb380"); engineColor = Color.valueOf("feb380");
cellTrnsY = 1f; cellTrnsY = 1f;
buildPower = 1.2f;
weapon = new Weapon("bomber"){{ weapon = new Weapon("bomber"){{
length = 1.5f; length = 1.5f;

View File

@@ -199,12 +199,14 @@ public class TechTree implements ContentList{
node(combustionGenerator, () -> { node(combustionGenerator, () -> {
node(powerNode, () -> { node(powerNode, () -> {
node(powerNodeLarge, () -> { node(powerNodeLarge, () -> {
node(battery, () -> {
node(batteryLarge, () -> {
node(surgeTower, () -> { node(surgeTower, () -> {
}); });
}); });
node(battery, () -> {
node(batteryLarge, () -> {
}); });
}); });
@@ -243,12 +245,13 @@ public class TechTree implements ContentList{
}); });
}); });
node(alphaDartPad, () -> {
node(deltaPad, () -> {
node(spiritFactory, () -> { node(spiritFactory, () -> {
node(phantomFactory); node(phantomFactory);
}); });
node(alphaDartPad, () -> {
node(deltaPad, () -> {
node(javelinPad, () -> { node(javelinPad, () -> {
node(tridentPad, () -> { node(tridentPad, () -> {
node(glaivePad); node(glaivePad);

View File

@@ -39,7 +39,7 @@ public class Zones implements ContentList{
rules = () -> new Rules(){{ rules = () -> new Rules(){{
waves = true; waves = true;
waveTimer = true; waveTimer = true;
waveSpacing = 60 * 60 * 1f; waveSpacing = 60 * 60 * 1.5f;
}}; }};
}}; }};

View File

@@ -8,10 +8,9 @@ import io.anuke.arc.graphics.GL20;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureAtlas; import io.anuke.arc.graphics.g2d.TextureAtlas;
import io.anuke.arc.input.KeyCode; import io.anuke.arc.input.KeyCode;
import io.anuke.arc.util.BufferUtils; import io.anuke.arc.scene.ui.Dialog;
import io.anuke.arc.util.Interval; import io.anuke.arc.scene.ui.TextField;
import io.anuke.arc.util.Strings; import io.anuke.arc.util.*;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.content.Mechs;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
@@ -100,7 +99,7 @@ public class Control implements ApplicationListener{
}); });
Events.on(WorldLoadEvent.class, event -> { Events.on(WorldLoadEvent.class, event -> {
Core.app.post(() -> Core.camera.position.set(player)); Core.app.post(() -> Core.app.post(() -> Core.camera.position.set(player)));
}); });
Events.on(ResetEvent.class, event -> { Events.on(ResetEvent.class, event -> {
@@ -301,10 +300,18 @@ public class Control implements ApplicationListener{
} }
} }
if(!mobile && Core.input.keyTap(Binding.screenshot) && !(scene.getKeyboardFocus() instanceof TextField) && !ui.chatfrag.chatOpen()){
renderer.takeMapScreenshot();
}
}else{ }else{
if(!state.isPaused()){ if(!state.isPaused()){
Time.update(); Time.update();
} }
if(!scene.hasDialog() && !(scene.root.getChildren().peek() instanceof Dialog) &&Core.input.keyTap(KeyCode.BACK)){
Platform.instance.hide();
}
} }
} }
} }

View File

@@ -63,6 +63,7 @@ public class NetClient implements ApplicationListener{
public NetClient(){ public NetClient(){
Net.handleClient(Connect.class, packet -> { Net.handleClient(Connect.class, packet -> {
Log.info("Connecting to server: {0}", packet.addressTCP);
player.isAdmin = false; player.isAdmin = false;
@@ -212,6 +213,11 @@ public class NetClient implements ApplicationListener{
SyncTrait entity = (SyncTrait) group.getByID(id); SyncTrait entity = (SyncTrait) group.getByID(id);
boolean add = false; boolean add = false;
if(entity == null && id == player.id){
entity = player;
add = true;
}
//entity must not be added yet, so create it //entity must not be added yet, so create it
if(entity == null){ if(entity == null){
entity = (SyncTrait) TypeTrait.getTypeByID(typeID).get(); //create entity from supplier entity = (SyncTrait) TypeTrait.getTypeByID(typeID).get(); //create entity from supplier

View File

@@ -190,20 +190,7 @@ public class NetServer implements ApplicationListener{
//playing in pvp mode automatically assigns players to teams //playing in pvp mode automatically assigns players to teams
if(state.rules.pvp){ if(state.rules.pvp){
//find team with minimum amount of players and auto-assign player to that. player.setTeam(assignTeam(playerGroup.all()));
Team min = Structs.findMin(Team.all, team -> {
if(state.teams.isActive(team)){
int count = 0;
for(Player other : playerGroup.all()){
if(other.getTeam() == team){
count ++;
}
}
return count;
}
return Integer.MAX_VALUE;
});
player.setTeam(min);
Log.info("Auto-assigned player {0} to team {1}.", player.name, player.getTeam()); Log.info("Auto-assigned player {0} to team {1}.", player.name, player.getTeam());
} }
@@ -221,6 +208,22 @@ public class NetServer implements ApplicationListener{
}); });
} }
public Team assignTeam(Iterable<Player> players){
//find team with minimum amount of players and auto-assign player to that.
return Structs.findMin(Team.all, team -> {
if(state.teams.isActive(team)){
int count = 0;
for(Player other : players){
if(other.getTeam() == team){
count ++;
}
}
return count;
}
return Integer.MAX_VALUE;
});
}
public void sendWorldData(Player player, int clientID){ public void sendWorldData(Player player, int clientID){
ByteArrayOutputStream stream = new ByteArrayOutputStream(); ByteArrayOutputStream stream = new ByteArrayOutputStream();
DeflaterOutputStream def = new DeflaterOutputStream(stream); DeflaterOutputStream def = new DeflaterOutputStream(stream);
@@ -294,10 +297,12 @@ public class NetServer implements ApplicationListener{
player.isShooting = shooting; player.isShooting = shooting;
player.getPlaceQueue().clear(); player.getPlaceQueue().clear();
for(BuildRequest req : requests){ for(BuildRequest req : requests){
Tile tile = world.tile(req.x, req.y);
if(tile == null) continue;
//auto-skip done requests //auto-skip done requests
if(req.breaking && world.tile(req.x, req.y).block() == Blocks.air){ if(req.breaking && tile.block() == Blocks.air){
continue; continue;
}else if(!req.breaking && world.tile(req.x, req.y).block() == req.block && (!req.block.rotate || world.tile(req.x, req.y).getRotation() == req.rotation)){ }else if(!req.breaking && tile.block() == req.block && (!req.block.rotate || tile.getRotation() == req.rotation)){
continue; continue;
} }
player.getPlaceQueue().addLast(req); player.getPlaceQueue().addLast(req);
@@ -425,7 +430,7 @@ public class NetServer implements ApplicationListener{
Log.err("Cannot kick unknown player!"); Log.err("Cannot kick unknown player!");
return; return;
}else{ }else{
Log.info("Kicking connection #{0} / IP: {1}. Reason: {2}", connection, con.address, reason); Log.info("Kicking connection #{0} / IP: {1}. Reason: {2}", connection, con.address, reason.name());
} }
Player player = connections.get(con.id); Player player = connections.get(con.id);

View File

@@ -37,8 +37,6 @@ public abstract class Platform {
} }
/**Update discord RPC.*/ /**Update discord RPC.*/
public void updateRPC(){} public void updateRPC(){}
/**Open donation dialog. Currently android only.*/
public void openDonations(){}
/**Whether donating is supported.*/ /**Whether donating is supported.*/
public boolean canDonate(){ public boolean canDonate(){
return false; return false;
@@ -69,6 +67,9 @@ public abstract class Platform {
*/ */
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype){} public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype){}
/**Hide the app. Android only.*/
public void hide(){}
/**Forces the app into landscape mode. Currently Android only.*/ /**Forces the app into landscape mode. Currently Android only.*/
public void beginForceLandscape(){} public void beginForceLandscape(){}

View File

@@ -2,10 +2,13 @@ package io.anuke.mindustry.core;
import io.anuke.arc.ApplicationListener; import io.anuke.arc.ApplicationListener;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.files.FileHandle;
import io.anuke.arc.function.Consumer; import io.anuke.arc.function.Consumer;
import io.anuke.arc.function.Predicate; import io.anuke.arc.function.Predicate;
import io.anuke.arc.graphics.Camera; import io.anuke.arc.graphics.Camera;
import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.Pixmap;
import io.anuke.arc.graphics.PixmapIO;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.Lines; import io.anuke.arc.graphics.g2d.Lines;
import io.anuke.arc.graphics.g2d.SpriteBatch; import io.anuke.arc.graphics.g2d.SpriteBatch;
@@ -13,6 +16,8 @@ import io.anuke.arc.graphics.glutils.FrameBuffer;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.BufferUtils;
import io.anuke.arc.util.ScreenUtils;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.arc.util.Tmp; import io.anuke.arc.util.Tmp;
import io.anuke.arc.util.pooling.Pools; import io.anuke.arc.util.pooling.Pools;
@@ -42,6 +47,7 @@ public class Renderer implements ApplicationListener{
public final BlockRenderer blocks = new BlockRenderer(); public final BlockRenderer blocks = new BlockRenderer();
public final MinimapRenderer minimap = new MinimapRenderer(); public final MinimapRenderer minimap = new MinimapRenderer();
public final OverlayRenderer overlays = new OverlayRenderer(); public final OverlayRenderer overlays = new OverlayRenderer();
public final Pixelator pixelator = new Pixelator();
public FrameBuffer shieldBuffer = new FrameBuffer(2, 2); public FrameBuffer shieldBuffer = new FrameBuffer(2, 2);
private Color clearColor; private Color clearColor;
@@ -127,10 +133,13 @@ public class Renderer implements ApplicationListener{
} }
updateShake(0.75f); updateShake(0.75f);
if(pixelator.enabled()){
pixelator.drawPixelate();
}else{
draw(); draw();
} }
} }
}
void updateShake(float scale){ void updateShake(float scale){
if(shaketime > 0){ if(shaketime > 0){
@@ -154,7 +163,7 @@ public class Renderer implements ApplicationListener{
graphics.clear(clearColor); graphics.clear(clearColor);
if(graphics.getWidth() >= 2 && graphics.getHeight() >= 2 && (shieldBuffer.getWidth() != graphics.getWidth() || shieldBuffer.getHeight() != graphics.getHeight())){ if(!graphics.isHidden() && (Core.settings.getBool("animatedwater") || Core.settings.getBool("animatedshields")) && (shieldBuffer.getWidth() != graphics.getWidth() || shieldBuffer.getHeight() != graphics.getHeight())){
shieldBuffer.resize(graphics.getWidth(), graphics.getHeight()); shieldBuffer.resize(graphics.getWidth(), graphics.getHeight());
} }
@@ -202,6 +211,7 @@ public class Renderer implements ApplicationListener{
drawAndInterpolate(playerGroup, p -> true, Player::drawBuildRequests); drawAndInterpolate(playerGroup, p -> true, Player::drawBuildRequests);
if(EntityDraw.countInBounds(shieldGroup) > 0){ if(EntityDraw.countInBounds(shieldGroup) > 0){
if(settings.getBool("animatedshields")){
Draw.flush(); Draw.flush();
shieldBuffer.begin(); shieldBuffer.begin();
graphics.clear(Color.CLEAR); graphics.clear(Color.CLEAR);
@@ -214,13 +224,14 @@ public class Renderer implements ApplicationListener{
Draw.rect(Draw.wrap(shieldBuffer.getTexture()), camera.position.x, camera.position.y, camera.width, -camera.height); Draw.rect(Draw.wrap(shieldBuffer.getTexture()), camera.position.x, camera.position.y, camera.width, -camera.height);
Draw.color(); Draw.color();
Draw.shader(); Draw.shader();
}else{
EntityDraw.drawWith(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawSimple());
}
} }
overlays.drawTop(); overlays.drawTop();
EntityDraw.setClip(false);
drawAndInterpolate(playerGroup, p -> !p.isDead() && !p.isLocal, Player::drawName); drawAndInterpolate(playerGroup, p -> !p.isDead() && !p.isLocal, Player::drawName);
EntityDraw.setClip(true);
Draw.color(); Draw.color();
Draw.flush(); Draw.flush();
@@ -296,10 +307,6 @@ public class Renderer implements ApplicationListener{
EntityDraw.drawWith(group, toDraw, drawer); EntityDraw.drawWith(group, toDraw, drawer);
} }
public float cameraScale(){
return camerascale;
}
public void scaleCamera(float amount){ public void scaleCamera(float amount){
targetscale += amount; targetscale += amount;
clampScale(); clampScale();
@@ -310,4 +317,59 @@ public class Renderer implements ApplicationListener{
targetscale = Mathf.clamp(targetscale, s * 1.5f, Math.round(s * 6)); targetscale = Mathf.clamp(targetscale, s * 1.5f, Math.round(s * 6));
} }
public float getScale(){
return targetscale;
}
public void setScale(float scl){
targetscale = scl;
clampScale();
}
public void takeMapScreenshot(){
drawGroundShadows();
int w = world.width()*tilesize, h = world.height()*tilesize;
boolean hadShields = Core.settings.getBool("animatedshields");
boolean hadWater = Core.settings.getBool("animatedwater");
Core.settings.put("animatedwater", false);
Core.settings.put("animatedshields", false);
FrameBuffer buffer = new FrameBuffer(w, h);
float vpW = camera.width, vpH = camera.height, px = camera.position.x, py = camera.position.y;
disableUI = true;
camera.width = w;
camera.height = h;
camera.position.x = w/2f + tilesize/2f;
camera.position.y = h/2f + tilesize/2f;
Draw.flush();
buffer.begin();
draw();
Draw.flush();
buffer.end();
disableUI = false;
camera.width = vpW;
camera.height = vpH;
camera.position.set(px, py);
buffer.begin();
byte[] lines = ScreenUtils.getFrameBufferPixels(0, 0, w, h, true);
for(int i = 0; i < lines.length; i+= 4){
lines[i + 3] = (byte)255;
}
buffer.end();
Pixmap fullPixmap = new Pixmap(w, h, Pixmap.Format.RGBA8888);
BufferUtils.copy(lines, 0, fullPixmap.getPixels(), lines.length);
FileHandle file = screenshotDirectory.child("screenshot-" + Time.millis() + ".png");
PixmapIO.writePNG(file, fullPixmap);
fullPixmap.dispose();
ui.showInfoFade(Core.bundle.format("screenshot", file.toString()));
buffer.dispose();
Core.settings.put("animatedwater", hadWater);
Core.settings.put("animatedshields", hadShields);
}
} }

View File

@@ -67,6 +67,7 @@ public class UI implements ApplicationListener{
public ContentInfoDialog content; public ContentInfoDialog content;
public DeployDialog deploy; public DeployDialog deploy;
public TechTreeDialog tech; public TechTreeDialog tech;
public MinimapDialog minimap;
public Cursor drillCursor, unloadCursor; public Cursor drillCursor, unloadCursor;
@@ -178,6 +179,7 @@ public class UI implements ApplicationListener{
content = new ContentInfoDialog(); content = new ContentInfoDialog();
deploy = new DeployDialog(); deploy = new DeployDialog();
tech = new TechTreeDialog(); tech = new TechTreeDialog();
minimap = new MinimapDialog();
Group group = Core.scene.root; Group group = Core.scene.root;
@@ -287,11 +289,11 @@ public class UI implements ApplicationListener{
public String formatAmount(int number){ public String formatAmount(int number){
if(number >= 1000000){ if(number >= 1000000){
return Strings.toFixed(number / 1000000f, 1) + "[gray]mil[]"; return Strings.fixed(number / 1000000f, 1) + "[gray]mil[]";
}else if(number >= 10000){ }else if(number >= 10000){
return number / 1000 + "[gray]k[]"; return number / 1000 + "[gray]k[]";
}else if(number >= 1000){ }else if(number >= 1000){
return Strings.toFixed(number / 1000f, 1) + "[gray]k[]"; return Strings.fixed(number / 1000f, 1) + "[gray]k[]";
}else{ }else{
return number + ""; return number + "";
} }

View File

@@ -184,7 +184,7 @@ public class WaveInfoDialog extends FloatingDialog{
}).width(80f); }).width(80f);
a.add(" + "); a.add(" + ");
a.addField(Strings.toFixed(Math.max((Mathf.isZero(group.unitScaling) ? 0 : 1f/group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> { a.addField(Strings.fixed(Math.max((Mathf.isZero(group.unitScaling) ? 0 : 1f/group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
if(Strings.canParsePositiveFloat(text)){ if(Strings.canParsePositiveFloat(text)){
group.unitScaling = 1f / Strings.parseFloat(text); group.unitScaling = 1f / Strings.parseFloat(text);
updateWaves(); updateWaves();

View File

@@ -1,22 +1,27 @@
package io.anuke.mindustry.entities; package io.anuke.mindustry.entities;
import io.anuke.mindustry.entities.Effects.Effect; import io.anuke.annotations.Annotations.Struct;
import io.anuke.arc.collection.GridBits;
import io.anuke.arc.collection.IntQueue;
import io.anuke.arc.function.Consumer; import io.anuke.arc.function.Consumer;
import io.anuke.arc.function.Predicate; import io.anuke.arc.function.Predicate;
import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Color;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.math.geom.Geometry;
import io.anuke.arc.math.geom.Point2;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Bullets; import io.anuke.mindustry.content.Bullets;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.entities.Effects.Effect;
import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.effect.Fire; import io.anuke.mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.Lightning; import io.anuke.mindustry.entities.effect.Lightning;
import io.anuke.mindustry.entities.type.Unit; import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.gen.PropCell;
import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
@@ -27,6 +32,8 @@ public class Damage{
private static Rectangle rect = new Rectangle(); private static Rectangle rect = new Rectangle();
private static Rectangle hitrect = new Rectangle(); private static Rectangle hitrect = new Rectangle();
private static Vector2 tr = new Vector2(); private static Vector2 tr = new Vector2();
private static GridBits bits = new GridBits(30, 30);
private static IntQueue propagation = new IntQueue();
/**Creates a dynamic explosion based on specified parameters.*/ /**Creates a dynamic explosion based on specified parameters.*/
public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, Color color){ public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, Color color){
@@ -152,11 +159,16 @@ public class Damage{
/**Damages everything in a radius.*/ /**Damages everything in a radius.*/
public static void damage(float x, float y, float radius, float damage){ public static void damage(float x, float y, float radius, float damage){
damage(null, x, y, radius, damage); damage(null, x, y, radius, damage, false);
} }
/**Damages all entities and blocks in a radius that are enemies of the team.*/ /**Damages all entities and blocks in a radius that are enemies of the team.*/
public static void damage(Team team, float x, float y, float radius, float damage){ public static void damage(Team team, float x, float y, float radius, float damage){
damage(team, x, y, radius, damage, false);
}
/**Damages all entities and blocks in a radius that are enemies of the team.*/
public static void damage(Team team, float x, float y, float radius, float damage, boolean complete){
Consumer<Unit> cons = entity -> { Consumer<Unit> cons = entity -> {
if(entity.getTeam() == team || entity.dst(x, y) > radius){ if(entity.getTeam() == team || entity.dst(x, y) > radius){
return; return;
@@ -175,17 +187,70 @@ public class Damage{
Units.getNearby(rect, cons); Units.getNearby(rect, cons);
} }
if(!complete){
int trad = (int)(radius / tilesize); int trad = (int)(radius / tilesize);
for(int dx = -trad; dx <= trad; dx++){ Tile tile = world.tileWorld(x, y);
for(int dy = -trad; dy <= trad; dy++){ if(tile != null){
Tile tile = world.tile(Math.round(x / tilesize) + dx, Math.round(y / tilesize) + dy); tileDamage(team, tile.x, tile.y, trad, damage);
if(tile != null && tile.entity != null && (team == null || state.teams.areEnemies(team, tile.getTeam())) && Mathf.dst(dx, dy, 0, 0) <= trad){ }
float amount = calculateDamage(x, y, tile.worldx(), tile.worldy(), radius, damage); }else{
tile.entity.damage(amount); completeDamage(team, x, y, radius, damage);
}
}
public static void tileDamage(Team team, int startx, int starty, int radius, float baseDamage){
bits.clear();
propagation.clear();
int bitOffset = bits.width()/2;
propagation.addFirst(PropCell.get((byte)0, (byte)0, (short)baseDamage));
//clamp radius to fit bits
radius = Math.min(radius, bits.width()/2);
while(!propagation.isEmpty()){
int prop = propagation.removeLast();
int x = PropCell.x(prop);
int y = PropCell.y(prop);
int damage = PropCell.damage(prop);
//manhattan distance used for calculating falloff, results in a diamond pattern
int dst = Math.abs(x) + Math.abs(y);
int scaledDamage = (int)(damage * (1f - (float)dst / radius));
bits.set(bitOffset + x, bitOffset + y);
Tile tile = world.tile(startx + x, starty + y);
if(scaledDamage <= 0 || tile == null) continue;
tile = tile.target();
//apply damage to entity if needed
if(tile.entity != null && tile.getTeam() != team){
int health = (int)tile.entity.health;
tile.entity.damage(scaledDamage);
scaledDamage -= health;
if(scaledDamage <= 0) continue;
}
for(Point2 p : Geometry.d4){
if(!bits.get(bitOffset + x + p.x, bitOffset + y + p.y)){
propagation.addFirst(PropCell.get((byte)(x + p.x), (byte)(y + p.y), (short)scaledDamage));
}
} }
} }
} }
private static void completeDamage(Team team, float x, float y, float radius, float damage){
int trad = (int) (radius / tilesize);
for(int dx = -trad; dx <= trad; dx++){
for(int dy = -trad; dy <= trad; dy++){
Tile tile = world.tile(Math.round(x / tilesize) + dx, Math.round(y / tilesize) + dy);
if(tile != null && tile.entity != null && (team == null || state.teams.areEnemies(team, tile.getTeam())) && Mathf.dst(dx, dy) <= trad){
tile.entity.damage(damage);
}
}
}
} }
private static float calculateDamage(float x, float y, float tx, float ty, float radius, float damage){ private static float calculateDamage(float x, float y, float tx, float ty, float radius, float damage){
@@ -194,4 +259,11 @@ public class Damage{
float scaled = Mathf.lerp(1f - dist / radius, 1f, falloff); float scaled = Mathf.lerp(1f - dist / radius, 1f, falloff);
return damage * scaled; return damage * scaled;
} }
@Struct
class PropCellStruct{
byte x;
byte y;
short damage;
}
} }

View File

@@ -12,7 +12,7 @@ import io.anuke.mindustry.entities.traits.SolidTrait;
public class EntityCollisions{ public class EntityCollisions{
//range for tile collision scanning //range for tile collision scanning
private static final int r = 2; private static final int r = 1;
//move in 1-unit chunks //move in 1-unit chunks
private static final float seg = 1f; private static final float seg = 1f;

View File

@@ -6,6 +6,7 @@ import io.anuke.arc.function.Predicate;
import io.anuke.arc.graphics.Camera; import io.anuke.arc.graphics.Camera;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.mindustry.entities.traits.DrawTrait; import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.Entity;
public class EntityDraw{ public class EntityDraw{
private static final Rectangle viewport = new Rectangle(); private static final Rectangle viewport = new Rectangle();
@@ -42,15 +43,12 @@ public class EntityDraw{
viewport.set(cam.position.x - cam.width / 2, cam.position.y - cam.height / 2, cam.width, cam.height); viewport.set(cam.position.x - cam.width / 2, cam.position.y - cam.height / 2, cam.width, cam.height);
} }
group.forEach(e -> { for(Entity e : group.all()){
if(!(e instanceof DrawTrait)) return; if(!(e instanceof DrawTrait) || !toDraw.test((T)e) || !e.isAdded()) continue;
T t = (T) e;
if(!toDraw.test(t) || !e.isAdded()) return;
if(!clip || rect.setSize(((DrawTrait) e).drawSize()).setCenter(e.getX(), e.getY()).overlaps(viewport)){ if(!clip || rect.setSize(((DrawTrait) e).drawSize()).setCenter(e.getX(), e.getY()).overlaps(viewport)){
cons.accept(t); cons.accept((T)e);
} }
}); }
} }
} }

View File

@@ -131,6 +131,13 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
this.data = data; this.data = data;
} }
public float damageMultiplier(){
if(owner instanceof Unit){
return ((Unit) owner).getDamageMultipler();
}
return 1f;
}
@Override @Override
public void absorb(){ public void absorb(){
supressCollision = true; supressCollision = true;
@@ -144,16 +151,10 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
@Override @Override
public float damage(){ public float damage(){
//todo hacky way to get damage, refactor
if(owner instanceof Unit){
return type.damage * ((Unit) owner).getDamageMultipler();
}
if(owner instanceof Lightning && data instanceof Float){ if(owner instanceof Lightning && data instanceof Float){
return (Float)data; return (Float)data;
} }
return type.damage * damageMultiplier();
return type.damage;
} }
@Override @Override

View File

@@ -125,7 +125,7 @@ public abstract class BulletType extends Content{
} }
if(splashDamageRadius > 0){ if(splashDamageRadius > 0){
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage); Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage * b.damageMultiplier());
} }
} }

View File

@@ -202,9 +202,9 @@ public interface BuilderTrait extends Entity, TeamTrait{
if(!(tile.block() instanceof BuildBlock)){ if(!(tile.block() instanceof BuildBlock)){
if(canCreateBlocks() && !current.breaking && Build.validPlace(getTeam(), current.x, current.y, current.block, current.rotation)){ if(canCreateBlocks() && !current.breaking && Build.validPlace(getTeam(), current.x, current.y, current.block, current.rotation)){
Build.beginPlace(getTeam(), current.x, current.y, current.block, current.rotation); Call.beginPlace(getTeam(), current.x, current.y, current.block, current.rotation);
}else if(canCreateBlocks() && current.breaking && Build.validBreak(getTeam(), current.x, current.y)){ }else if(canCreateBlocks() && current.breaking && Build.validBreak(getTeam(), current.x, current.y)){
Build.beginBreak(getTeam(), current.x, current.y); Call.beginBreak(getTeam(), current.x, current.y);
}else{ }else{
getPlaceQueue().removeFirst(); getPlaceQueue().removeFirst();
return; return;
@@ -213,8 +213,8 @@ public interface BuilderTrait extends Entity, TeamTrait{
TileEntity core = unit.getClosestCore(); TileEntity core = unit.getClosestCore();
//if there is no core to build with, stop building! //if there is no core to build with or no build entity, stop building!
if(core == null){ if(core == null || !(tile.entity instanceof BuildEntity)){
return; return;
} }
@@ -222,7 +222,6 @@ public interface BuilderTrait extends Entity, TeamTrait{
BuildEntity entity = tile.entity(); BuildEntity entity = tile.entity();
if(entity == null){ if(entity == null){
getPlaceQueue().removeFirst();
return; return;
} }

View File

@@ -63,6 +63,16 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
unit.onSuperDeath(); unit.onSuperDeath();
//visual only.
if(Net.client()){
Tile tile = world.tile(unit.spawner);
if(tile != null && !Net.client()){
tile.block().unitRemoved(tile, unit);
}
unit.spawner = noSpawner;
}
//must run afterwards so the unit's group is not null when sending the removal packet //must run afterwards so the unit's group is not null when sending the removal packet
Core.app.post(unit::remove); Core.app.post(unit::remove);
} }
@@ -217,7 +227,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
@Override @Override
public float maxHealth(){ public float maxHealth(){
return type.health; return type.health * Vars.state.rules.unitHealthMultiplier;
} }
@Override @Override
@@ -278,8 +288,9 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
@Override @Override
public void removed(){ public void removed(){
super.removed();
Tile tile = world.tile(spawner); Tile tile = world.tile(spawner);
if(tile != null){ if(tile != null && !Net.client()){
tile.block().unitRemoved(tile, this); tile.block().unitRemoved(tile, this);
} }
@@ -356,6 +367,8 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
interpolator.read(lastx, lasty, x, y, rotation); interpolator.read(lastx, lasty, x, y, rotation);
rotation = lastrot; rotation = lastrot;
x = lastx;
y = lasty;
} }
public void onSuperDeath(){ public void onSuperDeath(){

View File

@@ -211,11 +211,9 @@ public abstract class GroundUnit extends BaseUnit{
if(tile == targetTile) return; if(tile == targetTile) return;
float angle = angleTo(targetTile);
velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta())); velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta()));
if(Units.invalidateTarget(target, this)){ if(Units.invalidateTarget(target, this)){
rotation = Mathf.slerpDelta(rotation, angle, type.rotatespeed); rotation = Mathf.slerpDelta(rotation, baseRotation, type.rotatespeed);
} }
} }
@@ -237,9 +235,7 @@ public abstract class GroundUnit extends BaseUnit{
if(tile == targetTile || core == null || dst(core) < 90f) return; if(tile == targetTile || core == null || dst(core) < 90f) return;
float angle = angleTo(targetTile);
velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta())); velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta()));
rotation = Mathf.slerpDelta(rotation, angle, type.rotatespeed); rotation = Mathf.slerpDelta(rotation, baseRotation, type.rotatespeed);
} }
} }

View File

@@ -91,6 +91,11 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
player.mech = (player.isMobile ? Mechs.starterMobile : Mechs.starterDesktop); player.mech = (player.isMobile ? Mechs.starterMobile : Mechs.starterDesktop);
} }
@Override
public float getDamageMultipler(){
return status.getDamageMultiplier() * state.rules.playerDamageMultiplier;
}
@Override @Override
public void hitbox(Rectangle rectangle){ public void hitbox(Rectangle rectangle){
rectangle.setSize(mech.hitsize).setCenter(x, y); rectangle.setSize(mech.hitsize).setCenter(x, y);
@@ -874,10 +879,10 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
interpolator.read(lastx, lasty, x, y, rotation, baseRotation); interpolator.read(lastx, lasty, x, y, rotation, baseRotation);
rotation = lastrot; rotation = lastrot;
if(isLocal){
x = lastx; x = lastx;
y = lasty; y = lasty;
if(isLocal){
velocity.x = lastvx; velocity.x = lastvx;
velocity.y = lastvy; velocity.y = lastvy;
}else{ }else{

View File

@@ -5,17 +5,17 @@ import io.anuke.annotations.Annotations.Remote;
import io.anuke.arc.Events; import io.anuke.arc.Events;
import io.anuke.arc.collection.Array; import io.anuke.arc.collection.Array;
import io.anuke.arc.collection.ObjectSet; import io.anuke.arc.collection.ObjectSet;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.impl.BaseEntity;
import io.anuke.mindustry.entities.traits.HealthTrait;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Point2; import io.anuke.arc.math.geom.Point2;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Interval; import io.anuke.arc.util.Interval;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.impl.BaseEntity;
import io.anuke.mindustry.entities.traits.HealthTrait;
import io.anuke.mindustry.entities.traits.TargetTrait; import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.game.EventType.BlockDestroyEvent; import io.anuke.mindustry.game.EventType.BlockDestroyEvent;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
@@ -24,7 +24,6 @@ import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Edges; import io.anuke.mindustry.world.Edges;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.defense.Wall; import io.anuke.mindustry.world.blocks.defense.Wall;
import io.anuke.mindustry.world.consumers.Consume;
import io.anuke.mindustry.world.modules.ConsumeModule; import io.anuke.mindustry.world.modules.ConsumeModule;
import io.anuke.mindustry.world.modules.ItemModule; import io.anuke.mindustry.world.modules.ItemModule;
import io.anuke.mindustry.world.modules.LiquidModule; import io.anuke.mindustry.world.modules.LiquidModule;
@@ -44,6 +43,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public static int sleepingEntities = 0; public static int sleepingEntities = 0;
public Tile tile; public Tile tile;
public Block block;
public Interval timer; public Interval timer;
public float health; public float health;
public float timeScale = 1f, timeScaleDuration; public float timeScale = 1f, timeScaleDuration;
@@ -81,10 +81,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
this.tile = tile; this.tile = tile;
x = tile.drawx(); x = tile.drawx();
y = tile.drawy(); y = tile.drawy();
block = tile.block();
health = tile.block().health; health = block.health;
timer = new Interval(block.timers);
timer = new Interval(tile.block().timers);
if(shouldAdd){ if(shouldAdd){
add(); add();
@@ -139,7 +139,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
} }
public void collision(Bullet other){ public void collision(Bullet other){
tile.block().handleBulletHit(this, other); block.handleBulletHit(this, other);
} }
public void kill(){ public void kill(){
@@ -151,7 +151,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
float preHealth = health; float preHealth = health;
Call.onTileDamage(tile, health - tile.block().handleDamage(tile, damage)); Call.onTileDamage(tile, health - block.handleDamage(tile, damage));
if(health <= 0){ if(health <= 0){
Call.onTileDestroyed(tile); Call.onTileDestroyed(tile);
@@ -170,14 +170,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
return tile; return tile;
} }
public boolean consumed(Class<? extends Consume> type){
return tile.block().consumes.get(type).valid(tile.block(), this);
}
public void removeFromProximity(){ public void removeFromProximity(){
tile.block().onProximityRemoved(tile); block.onProximityRemoved(tile);
Point2[] nearby = Edges.getEdges(tile.block().size); Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){ for(Point2 point : nearby){
Tile other = world.tile(tile.x + point.x, tile.y + point.y); Tile other = world.tile(tile.x + point.x, tile.y + point.y);
//remove this tile from all nearby tile's proximities //remove this tile from all nearby tile's proximities
@@ -195,7 +191,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
tmpTiles.clear(); tmpTiles.clear();
proximity.clear(); proximity.clear();
Point2[] nearby = Edges.getEdges(tile.block().size); Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){ for(Point2 point : nearby){
Tile other = world.tile(tile.x + point.x, tile.y + point.y); Tile other = world.tile(tile.x + point.x, tile.y + point.y);
@@ -218,8 +214,8 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
proximity.add(tile); proximity.add(tile);
} }
tile.block().onProximityAdded(tile); block.onProximityAdded(tile);
tile.block().onProximityUpdate(tile); block.onProximityUpdate(tile);
} }
public Array<Tile> proximity(){ public Array<Tile> proximity(){
@@ -238,7 +234,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@Override @Override
public float maxHealth(){ public float maxHealth(){
return tile.block().health; return block.health;
} }
@Override @Override
@@ -250,7 +246,6 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public void onDeath(){ public void onDeath(){
if(!dead){ if(!dead){
dead = true; dead = true;
Block block = tile.block();
Events.fire(new BlockDestroyEvent(tile)); Events.fire(new BlockDestroyEvent(tile));
block.onDestroyed(tile); block.onDestroyed(tile);
@@ -273,24 +268,30 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@Override @Override
public void update(){ public void update(){
//TODO better smoke effect, this one is awful //TODO better smoke effect, this one is awful
if(health != 0 && health < tile.block().health && !(tile.block() instanceof Wall) && if(health != 0 && health < block.health && !(block instanceof Wall) &&
Mathf.chance(0.009f * Time.delta() * (1f - health / tile.block().health))){ Mathf.chance(0.009f * Time.delta() * (1f - health / block.health))){
Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4)); Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4));
} }
timeScaleDuration -= Time.delta(); timeScaleDuration -= Time.delta();
if(timeScaleDuration <= 0f || !tile.block().canOverdrive){ if(timeScaleDuration <= 0f || !block.canOverdrive){
timeScale = 1f; timeScale = 1f;
} }
if(health <= 0){ if(health <= 0){
onDeath(); onDeath();
return; //no need to update anymore
} }
Block previous = tile.block();
tile.block().update(tile); Block previous = block;
if(tile.block() == previous && cons != null){ block.update(tile);
if(block == previous && cons != null){
cons.update(); cons.update();
} }
if(block == previous && power != null){
power.graph.update();
}
} }
@Override @Override

View File

@@ -7,7 +7,6 @@ import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.math.geom.Geometry;
import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.arc.util.Tmp; import io.anuke.arc.util.Tmp;
@@ -15,7 +14,6 @@ import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.entities.Damage; import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.effect.ScorchDecal; import io.anuke.mindustry.entities.effect.ScorchDecal;
import io.anuke.mindustry.entities.impl.DestructibleEntity; import io.anuke.mindustry.entities.impl.DestructibleEntity;
import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.traits.*;
@@ -49,9 +47,11 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
public static final float maxAbsVelocity = 127f / velocityPercision; public static final float maxAbsVelocity = 127f / velocityPercision;
public static final int noSpawner = Pos.get(-1, 1); public static final int noSpawner = Pos.get(-1, 1);
private static final Rectangle queryRect = new Rectangle();
private static final Vector2 moveVector = new Vector2(); private static final Vector2 moveVector = new Vector2();
private int lastWeightTile = Pos.invalid, lastWeightDelta;
private boolean wasFlying = false;
public float rotation; public float rotation;
protected final Interpolator interpolator = new Interpolator(); protected final Interpolator interpolator = new Interpolator();
@@ -95,7 +95,9 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
@Override @Override
public void damage(float amount){ public void damage(float amount){
if(!Net.client()){
super.damage(calculateDamage(amount)); super.damage(calculateDamage(amount));
}
hitTime = hitDuration; hitTime = hitDuration;
} }
@@ -140,6 +142,22 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
} }
} }
@Override
public void removed(){
if(lastWeightTile != Pos.invalid){
Tile tile = world.tile(lastWeightTile);
if(tile != null){
int dec = Math.min(lastWeightDelta, wasFlying ? tile.airWeight : tile.weight);
if(!wasFlying){
tile.weight -= dec;
}else{
tile.airWeight -= dec;
}
}
}
}
@Override @Override
public boolean isValid(){ public boolean isValid(){
return !isDead() && isAdded(); return !isDead() && isAdded();
@@ -190,8 +208,8 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
} }
protected void clampPosition(){ protected void clampPosition(){
x = Mathf.clamp(x, tilesize, world.width() * tilesize - tilesize); x = Mathf.clamp(x, 0, world.width() * tilesize - tilesize);
y = Mathf.clamp(y, tilesize, world.height() * tilesize - tilesize); y = Mathf.clamp(y, 0, world.height() * tilesize - tilesize);
} }
public void kill(){ public void kill(){
@@ -219,17 +237,55 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
return status.hasEffect(effect); return status.hasEffect(effect);
} }
//TODO optimize
public void avoidOthers(float scaling){ public void avoidOthers(float scaling){
hitbox(queryRect); boolean flying = isFlying();
queryRect.setSize(queryRect.getWidth() * scaling);
Units.getNearby(queryRect, t -> { if(lastWeightTile != Pos.invalid){
if(t == this || t.isFlying() != isFlying()) return; Tile tile = world.tile(lastWeightTile);
float dst = dst(t);
moveVector.set(x, y).sub(t.getX(), t.getY()).setLength(1f * (1f - (dst / queryRect.getWidth()))); if(tile != null){
applyImpulse(moveVector.x, moveVector.y); int dec = Math.min(lastWeightDelta, wasFlying ? tile.airWeight : tile.weight);
}); if(!wasFlying){
tile.weight -= dec;
}else{
tile.airWeight -= dec;
}
}
}
final int rad = 2;
moveVector.setZero();
for(int cx = -rad; cx <= rad; cx++){
for(int cy = -rad; cy <= rad; cy++){
Tile tile = world.tileWorld(x + cx*tilesize, y + cy*tilesize);
if(tile == null) continue;
int weight = flying ? tile.airWeight : tile.weight;
float scl = (rad - Mathf.dst(tile.worldx(), tile.worldy(), x, y)/(8f * 1.2f * Mathf.sqrt2)) * 0.1f;
moveVector.add(Mathf.sign(x - tile.worldx()) * scaling * weight * scl, Mathf.sign(y - tile.worldy()) * scaling * weight * scl);
}
}
moveVector.limit(flying ? 0.1f : 0.2f);
velocity.add(moveVector.x / mass() * Time.delta(), moveVector.y / mass() * Time.delta());
Tile tile = world.tileWorld(x, y);
if(tile != null){
int tw = flying ? tile.airWeight : tile.weight;
lastWeightDelta = Math.min((int)(mass()), 127 - tw);
lastWeightTile = tile.pos();
if(!flying){
tile.weight += lastWeightDelta;
}else{
tile.airWeight += lastWeightDelta;
}
}else{
lastWeightTile = Pos.invalid;
}
wasFlying = flying;
} }
public TileEntity getClosestCore(){ public TileEntity getClosestCore(){

View File

@@ -58,7 +58,7 @@ public class Drone extends FlyingUnit implements BuilderTrait{
if(core == null) return; if(core == null) return;
if((entity.progress() < 1f || entity.progress() > 0f) && entity.tile.block() instanceof BuildBlock){ //building is valid if((entity.progress() < 1f || entity.progress() > 0f) && entity.block instanceof BuildBlock){ //building is valid
if(!isBuilding() && dst(target) < placeDistance * 0.9f){ //within distance, begin placing if(!isBuilding() && dst(target) < placeDistance * 0.9f){ //within distance, begin placing
if(isBreaking){ if(isBreaking){
getPlaceQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y)); getPlaceQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y));
@@ -127,7 +127,7 @@ public class Drone extends FlyingUnit implements BuilderTrait{
} }
//core full //core full
if(targetItem != null && entity.tile.block().acceptStack(targetItem, 1, entity.tile, Drone.this) == 0){ if(targetItem != null && entity.block.acceptStack(targetItem, 1, entity.tile, Drone.this) == 0){
setState(repair); setState(repair);
return; return;
} }

View File

@@ -15,6 +15,7 @@ public enum RulePreset{
infiniteResources = true; infiniteResources = true;
waves = true; waves = true;
waveTimer = false; waveTimer = false;
respawnTime = 0f;
spawns = DefaultWaves.get(); spawns = DefaultWaves.get();
}}), }}),
attack(() -> new Rules(){{ attack(() -> new Rules(){{
@@ -27,6 +28,9 @@ public enum RulePreset{
respawnTime = 60 * 10; respawnTime = 60 * 10;
buildCostMultiplier = 0.5f; buildCostMultiplier = 0.5f;
buildSpeedMultiplier = 2f; buildSpeedMultiplier = 2f;
playerDamageMultiplier = 0.5f;
unitBuildSpeedMultiplier = 3f;
unitHealthMultiplier = 2f;
}}); }});
private final Supplier<Rules> rules; private final Supplier<Rules> rules;

View File

@@ -19,6 +19,12 @@ public class Rules{
public boolean pvp; public boolean pvp;
/**Whether enemy units drop random items on death.*/ /**Whether enemy units drop random items on death.*/
public boolean unitDrops; public boolean unitDrops;
/**How fast unit pads build units.*/
public float unitBuildSpeedMultiplier = 1f;
/**How much health units start with.*/
public float unitHealthMultiplier = 1f;
/**How much damage player mechs deal.*/
public float playerDamageMultiplier = 1f;
/**Multiplier for buildings for the player.*/ /**Multiplier for buildings for the player.*/
public float buildCostMultiplier = 1f; public float buildCostMultiplier = 1f;
/**Multiplier for building speed.*/ /**Multiplier for building speed.*/

View File

@@ -53,7 +53,7 @@ public class SpawnGroup implements Serializable{
} }
float scaling = this.unitScaling; float scaling = this.unitScaling;
return Math.min(unitAmount - 1 + Math.max((int) (((wave - begin) / spacing) / scaling), 1), max); return Math.min(unitAmount - 1 + Math.max((int) (((wave - begin + 1) / spacing) / scaling), 1), max);
} }
/** /**

View File

@@ -57,7 +57,7 @@ public class BlockRenderer{
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++){
Tile tile = world.rawTile(x, y); Tile tile = world.rawTile(x, y);
if(tile.block() != Blocks.air){ if(tile.block().hasShadow){
Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1); Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1);
} }
} }
@@ -121,11 +121,16 @@ public class BlockRenderer{
public void drawShadows(){ public void drawShadows(){
if(!shadowEvents.isEmpty()){ if(!shadowEvents.isEmpty()){
Draw.flush(); Draw.flush();
shadows.begin(); shadows.begin();
Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight()); Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight());
for(Tile tile : shadowEvents){ for(Tile tile : shadowEvents){
Draw.color(tile.block() == Blocks.air ? Color.WHITE : shadowColor); //clear it first
Draw.color(Color.WHITE);
Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1);
//then draw the shadow
Draw.color(!tile.block().hasShadow ? Color.WHITE : shadowColor);
Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1); Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1);
} }
@@ -135,6 +140,7 @@ public class BlockRenderer{
shadowEvents.clear(); shadowEvents.clear();
Draw.proj(camera.projection()); Draw.proj(camera.projection());
renderer.pixelator.rebind();
} }
float ww = world.width() * tilesize, wh = world.height() * tilesize; float ww = world.width() * tilesize, wh = world.height() * tilesize;
@@ -186,7 +192,6 @@ public class BlockRenderer{
} }
if(block.expanded || !expanded){ if(block.expanded || !expanded){
addRequest(tile, Layer.shadow);
if(block.layer != null && block.isLayer(tile)){ if(block.layer != null && block.isLayer(tile)){
addRequest(tile, block.layer); addRequest(tile, block.layer);
@@ -227,9 +232,7 @@ public class BlockRenderer{
BlockRequest req = requests.get(iterateidx); BlockRequest req = requests.get(iterateidx);
Block block = req.tile.block(); Block block = req.tile.block();
if(req.layer == Layer.shadow){ if(req.layer == Layer.block){
block.drawShadow(req.tile);
}else if(req.layer == Layer.block){
block.draw(req.tile); block.draw(req.tile);
if(block.synthetic() && req.tile.getTeam() != player.getTeam()){ if(block.synthetic() && req.tile.getTeam() != player.getTeam()){
block.drawTeam(req.tile); block.drawTeam(req.tile);

View File

@@ -1,8 +1,6 @@
package io.anuke.mindustry.graphics; package io.anuke.mindustry.graphics;
public enum Layer{ public enum Layer{
/**Drawn under everything.*/
shadow,
/**Base block layer.*/ /**Base block layer.*/
block, block,
/**for placement*/ /**for placement*/

View File

@@ -9,13 +9,12 @@ import io.anuke.arc.graphics.Pixmaps;
import io.anuke.arc.graphics.Texture; import io.anuke.arc.graphics.Texture;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.Fill; import io.anuke.arc.graphics.g2d.Fill;
import io.anuke.arc.graphics.g2d.ScissorStack;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.util.Disposable; import io.anuke.arc.util.Disposable;
import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.game.EventType.TileChangeEvent; import io.anuke.mindustry.game.EventType.TileChangeEvent;
import io.anuke.mindustry.game.EventType.WorldLoadEvent; import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.io.MapIO; import io.anuke.mindustry.io.MapIO;
@@ -25,13 +24,13 @@ import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Vars.world; import static io.anuke.mindustry.Vars.world;
public class MinimapRenderer implements Disposable{ public class MinimapRenderer implements Disposable{
private static final int baseSize = 16; private static final float baseSize = 16f;
private final Array<Unit> units = new Array<>(); private final Array<Unit> units = new Array<>();
private Pixmap pixmap; private Pixmap pixmap;
private Texture texture; private Texture texture;
private TextureRegion region; private TextureRegion region;
private Rectangle rect = new Rectangle(), scissor = new Rectangle(); private Rectangle rect = new Rectangle(), scissor = new Rectangle();
private int zoom = 4; private float zoom = 4;
public MinimapRenderer(){ public MinimapRenderer(){
Events.on(WorldLoadEvent.class, event -> { Events.on(WorldLoadEvent.class, event -> {
@@ -49,7 +48,11 @@ public class MinimapRenderer implements Disposable{
public void zoomBy(float amount){ public void zoomBy(float amount){
zoom += amount; zoom += amount;
zoom = Mathf.clamp(zoom, 1, Math.min(world.width(), world.height()) / baseSize / 2); setZoom(zoom);
}
public void setZoom(float amount){
zoom = Mathf.clamp(amount, 1f, Math.min(world.width(), world.height()) / baseSize / 2f);
} }
public float getZoom(){ public float getZoom(){
@@ -69,33 +72,27 @@ public class MinimapRenderer implements Disposable{
public void drawEntities(float x, float y, float w, float h){ public void drawEntities(float x, float y, float w, float h){
updateUnitArray(); updateUnitArray();
int sz = baseSize * zoom; float sz = baseSize * zoom;
float dx = (Core.camera.position.x / tilesize); float dx = (Core.camera.position.x / tilesize);
float dy = (Core.camera.position.y / tilesize); float dy = (Core.camera.position.y / tilesize);
dx = Mathf.clamp(dx, sz, world.width() - sz); dx = Mathf.clamp(dx, sz, world.width() - sz);
dy = Mathf.clamp(dy, sz, world.height() - sz); dy = Mathf.clamp(dy, sz, world.height() - sz);
if(!ScissorStack.pushScissors(scissor.set(x, y, w, h))){
return;
}
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize); rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize);
for(Unit unit : units){ for(Unit unit : units){
float rx = (unit.x - rect.x) / rect.width * w, ry = (unit.y - rect.y) / rect.width * h; float rx = (unit.x - rect.x) / rect.width * w, ry = (unit.y - rect.y) / rect.width * h;
Draw.color(unit.getTeam().color); Draw.color(unit.getTeam().color);
Fill.crect(x + rx, y + ry, w / (sz * 2), h / (sz * 2)); Fill.rect(x + rx, y + ry, baseSize/2f, baseSize/2f);
} }
Draw.color(); Draw.color();
ScissorStack.popScissors();
} }
public TextureRegion getRegion(){ public TextureRegion getRegion(){
if(texture == null) return null; if(texture == null) return null;
int sz = Mathf.clamp(baseSize * zoom, baseSize, Math.min(world.width(), world.height())); float sz = Mathf.clamp(baseSize * zoom, baseSize, Math.min(world.width(), world.height()));
float dx = (Core.camera.position.x / tilesize); float dx = (Core.camera.position.x / tilesize);
float dy = (Core.camera.position.y / tilesize); float dy = (Core.camera.position.y / tilesize);
dx = Mathf.clamp(dx, sz, world.width() - sz); dx = Mathf.clamp(dx, sz, world.width() - sz);
@@ -124,7 +121,7 @@ public class MinimapRenderer implements Disposable{
} }
public void updateUnitArray(){ public void updateUnitArray(){
int sz = baseSize * zoom; float sz = baseSize * zoom;
float dx = (Core.camera.position.x / tilesize); float dx = (Core.camera.position.x / tilesize);
float dy = (Core.camera.position.y / tilesize); float dy = (Core.camera.position.y / tilesize);
dx = Mathf.clamp(dx, sz, world.width() - sz); dx = Mathf.clamp(dx, sz, world.width() - sz);

View File

@@ -9,6 +9,7 @@ import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.arc.util.Tmp; import io.anuke.arc.util.Tmp;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.Player;
@@ -36,7 +37,7 @@ public class OverlayRenderer{
if(Core.settings.getBool("indicators")){ if(Core.settings.getBool("indicators")){
for(Player player : playerGroup.all()){ for(Player player : playerGroup.all()){
if(player != player && player.getTeam() == player.getTeam()){ if(Vars.player != player && Vars.player.getTeam() == player.getTeam()){
if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f) if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f)
.setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x, player.y)){ .setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x, player.y)){

View File

@@ -0,0 +1,75 @@
package io.anuke.mindustry.graphics;
import io.anuke.arc.Core;
import io.anuke.arc.graphics.Blending;
import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.glutils.FrameBuffer;
import io.anuke.arc.util.Disposable;
import io.anuke.mindustry.entities.type.Player;
import static io.anuke.arc.Core.camera;
import static io.anuke.arc.Core.graphics;
import static io.anuke.mindustry.Vars.playerGroup;
import static io.anuke.mindustry.Vars.renderer;
public class Pixelator implements Disposable{
private FrameBuffer buffer = new FrameBuffer(2, 2);
public void drawPixelate(){
float pre = renderer.getScale();
float scale = renderer.getScale();
scale = (int)scale;
renderer.setScale(scale);
camera.width = (int)camera.width;
camera.height = (int)camera.height;
boolean hadShields = Core.settings.getBool("animatedshields");
boolean hadWater = Core.settings.getBool("animatedwater");
Core.settings.put("animatedwater", false);
Core.settings.put("animatedshields", false);
graphics.clear(0f, 0f, 0f, 1f);
float px = Core.camera.position.x, py = Core.camera.position.y;
Core.camera.position.set((int)px + ((int)(camera.width) % 2 == 0 ? 0 : 0.5f), (int)py + ((int)(camera.height) % 2 == 0 ? 0 : 0.5f));
int w = (int)(Core.camera.width);
int h = (int)(Core.camera.height);
if(!graphics.isHidden() && (buffer.getWidth() != w || buffer.getHeight() != h)){
buffer.resize(w, h);
}
Draw.flush();
buffer.begin();
renderer.draw();
Draw.flush();
buffer.end();
Draw.blend(Blending.disabled);
Draw.rect(Draw.wrap(buffer.getTexture()), Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height);
Draw.blend();
renderer.drawAndInterpolate(playerGroup, p -> !p.isDead() && !p.isLocal, Player::drawName);
Core.camera.position.set(px, py);
Core.settings.put("animatedwater", hadWater);
Core.settings.put("animatedshields", hadShields);
renderer.setScale(pre);
}
public void rebind(){
if(enabled()){
buffer.begin();
}
}
public boolean enabled(){
return Core.settings.getBool("pixelate");
}
@Override
public void dispose(){
buffer.dispose();
}
}

View File

@@ -25,6 +25,7 @@ public enum Binding implements KeyBind{
menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE), menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE),
pause(KeyCode.SPACE), pause(KeyCode.SPACE),
toggle_menus(KeyCode.C), toggle_menus(KeyCode.C),
screenshot(KeyCode.P),
player_list(KeyCode.TAB, "multiplayer"), player_list(KeyCode.TAB, "multiplayer"),
chat(KeyCode.ENTER), chat(KeyCode.ENTER),
chat_history_prev(KeyCode.UP), chat_history_prev(KeyCode.UP),

View File

@@ -8,7 +8,10 @@ import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.Pixmap; import io.anuke.arc.graphics.Pixmap;
import io.anuke.arc.graphics.Pixmap.Format; import io.anuke.arc.graphics.Pixmap.Format;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.util.*; import io.anuke.arc.util.Pack;
import io.anuke.arc.util.Strings;
import io.anuke.arc.util.Structs;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.game.MappableContent; import io.anuke.mindustry.game.MappableContent;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
@@ -72,6 +75,7 @@ public class MapIO{
Pixmap floors = new Pixmap(map.width, map.height, Format.RGBA8888); Pixmap floors = new Pixmap(map.width, map.height, Format.RGBA8888);
Pixmap walls = new Pixmap(map.width, map.height, Format.RGBA8888); Pixmap walls = new Pixmap(map.width, map.height, Format.RGBA8888);
int black = Color.rgba8888(Color.BLACK); int black = Color.rgba8888(Color.BLACK);
int shade = Color.rgba8888(0f, 0f, 0f, 0.5f);
CachedTile tile = new CachedTile(){ CachedTile tile = new CachedTile(){
@Override @Override
public void setFloor(Floor type){ public void setFloor(Floor type){
@@ -87,7 +91,10 @@ public class MapIO{
protected void changed(){ protected void changed(){
super.changed(); super.changed();
int c = colorFor(Blocks.air, block(), Blocks.air, getTeam()); int c = colorFor(Blocks.air, block(), Blocks.air, getTeam());
if(c != black) walls.drawPixel(x, floors.getHeight() - 1 - y, c); if(c != black){
walls.drawPixel(x, floors.getHeight() - 1 - y, c);
floors.drawPixel(x, floors.getHeight() - 1 - y + 1, shade);
}
} }
}; };
readTiles(map, (x, y) -> { readTiles(map, (x, y) -> {

View File

@@ -36,7 +36,7 @@ public abstract class SaveFileVersion{
long playtime = stream.readLong(); long playtime = stream.readLong();
int build = stream.readInt(); int build = stream.readInt();
Rules rules = Serialization.readRules(stream); Rules rules = Serialization.readRulesStreamJson(stream);
String map = stream.readUTF(); String map = stream.readUTF();
int wave = stream.readInt(); int wave = stream.readInt();
return new SaveMeta(version, time, playtime, build, map, wave, rules); return new SaveMeta(version, time, playtime, build, map, wave, rules);

View File

@@ -26,7 +26,7 @@ public class Save16 extends SaveFileVersion{
stream.readInt(); //build stream.readInt(); //build
//general state //general state
state.rules = Serialization.readRules(stream); state.rules = Serialization.readRulesStreamJson(stream);
String mapname = stream.readUTF(); String mapname = stream.readUTF();
Map map = world.maps.all().find(m -> m.name().equals(mapname)); Map map = world.maps.all().find(m -> m.name().equals(mapname));
if(map == null) map = new Map(customMapDirectory.child(mapname), 1, 1, new ObjectMap<>(), true); if(map == null) map = new Map(customMapDirectory.child(mapname), 1, 1, new ObjectMap<>(), true);
@@ -56,7 +56,7 @@ public class Save16 extends SaveFileVersion{
stream.writeInt(Version.build); //build stream.writeInt(Version.build); //build
//--GENERAL STATE-- //--GENERAL STATE--
Serialization.writeRules(stream, state.rules); Serialization.writeRulesStreamJson(stream, state.rules);
stream.writeUTF(world.getMap().name()); //map name stream.writeUTF(world.getMap().name()); //map name
stream.writeInt(state.wave); //wave stream.writeInt(state.wave); //wave

View File

@@ -163,7 +163,7 @@ public class Administration{
public boolean adminPlayer(String id, String usid){ public boolean adminPlayer(String id, String usid){
PlayerInfo info = getCreateInfo(id); PlayerInfo info = getCreateInfo(id);
if(info.admin) if(info.admin && info.adminUsid != null && info.adminUsid.equals(usid))
return false; return false;
info.adminUsid = usid; info.adminUsid = usid;

View File

@@ -36,7 +36,6 @@ public class Interpolator{
} }
public void update(){ public void update(){
if(lastUpdated != 0 && updateSpacing != 0){ if(lastUpdated != 0 && updateSpacing != 0){
float timeSinceUpdate = Time.timeSinceMillis(lastUpdated); float timeSinceUpdate = Time.timeSinceMillis(lastUpdated);
float alpha = Math.min(timeSinceUpdate / updateSpacing, 2f); float alpha = Math.min(timeSinceUpdate / updateSpacing, 2f);

View File

@@ -69,7 +69,7 @@ public class Item extends UnlockableContent implements Comparable<Item>{
@Override @Override
public TextureRegion getContentIcon(){ public TextureRegion getContentIcon(){
return icon(Icon.large); return icon(Icon.xlarge);
} }
@Override @Override

View File

@@ -0,0 +1,19 @@
package io.anuke.mindustry.type;
public class LiquidStack{
public Liquid liquid;
public float amount;
public LiquidStack(Liquid liquid, float amount){
this.liquid = liquid;
this.amount = amount;
}
@Override
public String toString(){
return "LiquidStack{" +
"liquid=" + liquid +
", amount=" + amount +
'}';
}
}

View File

@@ -1,6 +1,7 @@
package io.anuke.mindustry.ui; package io.anuke.mindustry.ui;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.collection.Array;
import io.anuke.arc.collection.OrderedMap; import io.anuke.arc.collection.OrderedMap;
import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Color;
import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.scene.ui.layout.Table;
@@ -45,7 +46,7 @@ public class ContentDisplay{
BlockStats stats = block.stats; BlockStats stats = block.stats;
for(StatCategory cat : stats.toMap().keys()){ for(StatCategory cat : stats.toMap().keys()){
OrderedMap<BlockStat, StatValue> map = stats.toMap().get(cat); OrderedMap<BlockStat, Array<StatValue>> map = stats.toMap().get(cat);
if(map.size == 0) continue; if(map.size == 0) continue;
@@ -56,7 +57,13 @@ public class ContentDisplay{
table.table(inset -> { table.table(inset -> {
inset.left(); inset.left();
inset.add("[LIGHT_GRAY]" + stat.localized() + ":[] "); inset.add("[LIGHT_GRAY]" + stat.localized() + ":[] ");
map.get(stat).display(inset); Array<StatValue> arr = map.get(stat);
for(StatValue value : arr){
value.display(inset);
inset.add().size(10f);
}
//map.get(stat).display(inset);
}).fillX().padLeft(10); }).fillX().padLeft(10);
table.row(); table.row();
} }
@@ -134,6 +141,7 @@ public class ContentDisplay{
title.addImage(mech.getContentIcon()).size(8 * 6); title.addImage(mech.getContentIcon()).size(8 * 6);
title.add("[accent]" + mech.localizedName()).padLeft(5); title.add("[accent]" + mech.localizedName()).padLeft(5);
}); });
table.left().defaults().left();
table.row(); table.row();
@@ -159,13 +167,17 @@ public class ContentDisplay{
table.add(Core.bundle.format("mech.ability", Core.bundle.get("mech." + mech.name + ".ability"))); table.add(Core.bundle.format("mech.ability", Core.bundle.get("mech." + mech.name + ".ability")));
table.row(); table.row();
} }
table.add(Core.bundle.format("mech.buildspeed", (int)(mech.buildPower * 100f)));
table.row();
table.add(Core.bundle.format("mech.health", (int)mech.health)); table.add(Core.bundle.format("mech.health", (int)mech.health));
table.row(); table.row();
table.add(Core.bundle.format("mech.itemcapacity", mech.itemCapacity)); table.add(Core.bundle.format("mech.itemcapacity", mech.itemCapacity));
table.row(); table.row();
if(mech.drillPower > 0){ if(mech.drillPower > 0){
table.add(Core.bundle.format("mech.minespeed", (int) (mech.mineSpeed * 10))); table.add(Core.bundle.format("mech.minespeed", (int)(mech.mineSpeed * 100f)));
table.row(); table.row();
table.add(Core.bundle.format("mech.minepower", mech.drillPower)); table.add(Core.bundle.format("mech.minepower", mech.drillPower));
table.row(); table.row();
@@ -196,7 +208,7 @@ public class ContentDisplay{
table.add(Core.bundle.format("unit.health", unit.health)); table.add(Core.bundle.format("unit.health", unit.health));
table.row(); table.row();
table.add(Core.bundle.format("unit.speed", Strings.toFixed(unit.speed, 1))); table.add(Core.bundle.format("unit.speed", Strings.fixed(unit.speed, 1)));
table.row(); table.row();
table.row(); table.row();
} }

View File

@@ -12,7 +12,7 @@ public class ItemDisplay extends Table{
} }
public ItemDisplay(Item item, int amount){ public ItemDisplay(Item item, int amount){
add(new ItemImage(new ItemStack(item, amount))).size(8*3); add(new ItemImage(new ItemStack(item, amount))).size(8*4);
add(item.localizedName()).padLeft(4); add(item.localizedName()).padLeft(4);
} }
} }

View File

@@ -27,7 +27,7 @@ public class ItemImage extends Stack{
} }
public ItemImage(ItemStack stack){ public ItemImage(ItemStack stack){
add(new Image(stack.item.icon(Icon.medium))); add(new Image(stack.item.icon(Icon.large)));
if(stack.amount != 0){ if(stack.amount != 0){
Table t = new Table().left().bottom(); Table t = new Table().left().bottom();

View File

@@ -1,14 +1,31 @@
package io.anuke.mindustry.ui; package io.anuke.mindustry.ui;
import io.anuke.mindustry.type.Liquid; import io.anuke.arc.graphics.Color;
import io.anuke.arc.scene.ui.Image; import io.anuke.arc.scene.ui.Image;
import io.anuke.arc.scene.ui.layout.Stack;
import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.Strings;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.meta.StatUnit;
/**An ItemDisplay, but for liquids.*/ /**An ItemDisplay, but for liquids.*/
public class LiquidDisplay extends Table{ public class LiquidDisplay extends Table{
public LiquidDisplay(Liquid liquid){ public LiquidDisplay(Liquid liquid, float amount, boolean perSecond){
add(new Image(liquid.getContentIcon())).size(8*3); add(new Stack(){{
add(liquid.localizedName()).padLeft(3); add(new Image(liquid.getContentIcon()));
if(amount != 0){
Table t = new Table().left().bottom();
t.add(Strings.autoFixed(amount, 1));
add(t);
}
}}).size(8*4).padRight(3);
if(perSecond){
add(StatUnit.perSecond.localized()).padLeft(2).padRight(5).color(Color.LIGHT_GRAY);
}
add(liquid.localizedName());
} }
} }

View File

@@ -2,17 +2,35 @@ package io.anuke.mindustry.ui;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.input.KeyCode;
import io.anuke.arc.scene.Element; import io.anuke.arc.scene.Element;
import io.anuke.arc.scene.event.ClickListener;
import io.anuke.arc.scene.event.InputEvent; import io.anuke.arc.scene.event.InputEvent;
import io.anuke.arc.scene.event.InputListener; import io.anuke.arc.scene.event.InputListener;
import io.anuke.arc.scene.event.Touchable;
import io.anuke.arc.scene.ui.layout.Container; import io.anuke.arc.scene.ui.layout.Container;
import io.anuke.arc.scene.ui.layout.Unit;
import static io.anuke.mindustry.Vars.renderer; import static io.anuke.mindustry.Vars.*;
public class Minimap extends Container<Element>{ public class Minimap extends Container<Element>{
public Minimap(){ public Minimap(){
super(new Element(){ background("pane");
float margin = 5f;
touchable(Touchable.enabled);
addChild(new Element(){
{
setSize(Unit.dp.scl(140f));
}
@Override
public void act(float delta){
setPosition(margin, margin);
super.act(delta);
}
@Override @Override
public void draw(){ public void draw(){
@@ -26,10 +44,8 @@ public class Minimap extends Container<Element>{
} }
}); });
background("pane");
size(140f); size(140f);
margin(5f); margin(margin);
addListener(new InputListener(){ addListener(new InputListener(){
@Override @Override
@@ -39,6 +55,42 @@ public class Minimap extends Container<Element>{
} }
}); });
addListener(new ClickListener(){
{
tapSquareSize = Unit.dp.scl(11f);
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, KeyCode button){
if(inTapSquare()){
super.touchUp(event, x, y, pointer, button);
}else{
pressed = false;
pressedPointer = -1;
pressedButton = null;
cancelled = false;
}
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer){
if(!inTapSquare(x, y)){
invalidateTapSquare();
}
super.touchDragged(event, x, y, pointer);
if(mobile){
float max = Math.min(world.width(), world.height()) / 16f / 2f;
renderer.minimap.setZoom(1f + y / height * (max - 1f));
}
}
@Override
public void clicked(InputEvent event, float x, float y){
ui.minimap.show();
}
});
update(() -> { update(() -> {
Element e = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); Element e = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true);

View File

@@ -43,6 +43,9 @@ public class CustomRulesDialog extends FloatingDialog{
main.row(); main.row();
number("$rules.buildcostmultiplier", f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier); number("$rules.buildcostmultiplier", f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier);
number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier); number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier);
number("$rules.unitbuildspeedmultiplier", f -> rules.unitBuildSpeedMultiplier = f, () -> rules.unitBuildSpeedMultiplier);
number("$rules.unithealthmultiplier", f -> rules.unitHealthMultiplier = f, () -> rules.unitHealthMultiplier);
number("$rules.playerdamagemultiplier", f -> rules.playerDamageMultiplier = f, () -> rules.playerDamageMultiplier);
number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f*tilesize, () -> Math.min(rules.enemyCoreBuildRadius/tilesize, 200)); number("$rules.enemycorebuildradius", f -> rules.enemyCoreBuildRadius = f*tilesize, () -> Math.min(rules.enemyCoreBuildRadius/tilesize, 200));
number("$rules.respawntime", f -> rules.respawnTime = f*60f, () -> rules.respawnTime/60f); number("$rules.respawntime", f -> rules.respawnTime = f*60f, () -> rules.respawnTime/60f);
number("$rules.wavespacing", f -> rules.waveSpacing = f*60f, () -> rules.waveSpacing/60f); number("$rules.wavespacing", f -> rules.waveSpacing = f*60f, () -> rules.waveSpacing/60f);

View File

@@ -0,0 +1,64 @@
package io.anuke.mindustry.ui.dialogs;
import io.anuke.arc.Core;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.input.KeyCode;
import io.anuke.arc.scene.event.InputEvent;
import io.anuke.arc.scene.event.InputListener;
import io.anuke.arc.scene.ui.layout.Unit;
import static io.anuke.mindustry.Vars.mobile;
import static io.anuke.mindustry.Vars.renderer;
public class MinimapDialog extends FloatingDialog{
public MinimapDialog(){
super("$minimap");
setFillParent(false);
shown(this::setup);
addCloseButton();
shouldPause = true;
}
void setup(){
cont.clear();
float size = Math.min(Core.graphics.getWidth(), Core.graphics.getHeight()) / Unit.dp.scl(1f) / 1.3f;
cont.table("pane", t -> {
t.addRect((x, y, width, height) -> {
if(renderer.minimap.getRegion() == null) return;
Draw.color(Color.WHITE);
Draw.rect(renderer.minimap.getRegion(), x + width/2f, y + height/2f, width, height);
if(renderer.minimap.getTexture() != null){
renderer.minimap.drawEntities(x, y, width, height);
}
}).grow();
}).size(size);
cont.addListener(new InputListener(){
@Override
public boolean scrolled(InputEvent event, float x, float y, float amountx, float amounty){
renderer.minimap.zoomBy(amounty);
return true;
}
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, KeyCode button){
return true;
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer){
if(mobile){
renderer.minimap.zoomBy(Core.input.deltaY(pointer) / 30f / Unit.dp.scl(1f));
}
}
});
Core.app.post(() -> Core.scene.setScrollFocus(cont));
}
}

View File

@@ -209,10 +209,13 @@ public class SettingsMenuDialog extends SettingsDialog{
} }
} }
graphics.checkPref("minimap", !mobile);
graphics.checkPref("fps", false); graphics.checkPref("fps", false);
graphics.checkPref("indicators", true); graphics.checkPref("indicators", true);
graphics.checkPref("animatedwater", !mobile); graphics.checkPref("animatedwater", false);
graphics.checkPref("animatedshields", !mobile);
graphics.checkPref("lasers", true); graphics.checkPref("lasers", true);
graphics.checkPref("pixelate", false);
} }
private void back(){ private void back(){

View File

@@ -31,7 +31,7 @@ import io.anuke.mindustry.world.Tile;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
public class BlockInventoryFragment extends Fragment{ public class BlockInventoryFragment extends Fragment{
private final static float holdWithdraw = 40f; private final static float holdWithdraw = 20f;
private Table table; private Table table;
private Tile tile; private Tile tile;
@@ -187,9 +187,9 @@ public class BlockInventoryFragment extends Fragment{
private String round(float f){ private String round(float f){
f = (int) f; f = (int) f;
if(f >= 1000000){ if(f >= 1000000){
return Strings.toFixed(f / 1000000f, 1) + "[gray]mil[]"; return Strings.fixed(f / 1000000f, 1) + "[gray]mil[]";
}else if(f >= 1000){ }else if(f >= 1000){
return Strings.toFixed(f / 1000, 1) + "k"; return Strings.fixed(f / 1000, 1) + "k";
}else{ }else{
return (int) f + ""; return (int) f + "";
} }

View File

@@ -32,6 +32,7 @@ import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.net.Packets.AdminAction; import io.anuke.mindustry.net.Packets.AdminAction;
import io.anuke.mindustry.ui.Bar; import io.anuke.mindustry.ui.Bar;
import io.anuke.mindustry.ui.IntFormat; import io.anuke.mindustry.ui.IntFormat;
import io.anuke.mindustry.ui.Minimap;
import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.mindustry.ui.dialogs.FloatingDialog;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -154,19 +155,23 @@ public class HudFragment extends Fragment{
.grow()).fillX().visible(() -> state.rules.waves && state.boss() != null).height(60f).get(); .grow()).fillX().visible(() -> state.rules.waves && state.boss() != null).height(60f).get();
stuff.row(); stuff.row();
}).visible(() -> shown); }).visible(() -> shown);
});
//fps display //fps display
parent.fill(info -> { cont.table(info -> {
info.top().right().margin(4).visible(() -> Core.settings.getBool("fps") && !state.is(State.menu)); info.top().left().margin(4).visible(() -> Core.settings.getBool("fps"));
info.update(() -> info.setTranslation(state.rules.waves ? 0f : -Unit.dp.scl(dsize*4 + 3), 0));
IntFormat fps = new IntFormat("fps"); IntFormat fps = new IntFormat("fps");
IntFormat ping = new IntFormat("ping"); IntFormat ping = new IntFormat("ping");
info.label(() -> fps.get(Core.graphics.getFramesPerSecond())).right();
info.label(() -> fps.get(Core.graphics.getFramesPerSecond())).left();
info.row(); info.row();
info.label(() -> ping.get(Net.getPing())).visible(Net::client).right(); info.label(() -> ping.get(Net.getPing())).visible(Net::client).left();
}).top().left();
}); });
//minimap
parent.fill(t -> t.top().right().add(new Minimap()).visible(() -> !state.is(State.menu) && Core.settings.getBool("minimap")));
//spawner warning //spawner warning
parent.fill(t -> { parent.fill(t -> {
t.touchable(Touchable.disabled); t.touchable(Touchable.disabled);
@@ -262,6 +267,7 @@ public class HudFragment extends Fragment{
testb[0] = button; testb[0] = button;
button.getStyle().disabledFontColor = Color.WHITE; button.getStyle().disabledFontColor = Color.WHITE;
button.margin(16f);
button.visible(() -> button.visible(() ->
world.isZone() && world.isZone() &&
world.getZone().metCondition() && world.getZone().metCondition() &&
@@ -277,8 +283,8 @@ public class HudFragment extends Fragment{
button.setText(state.enemies() > 0 ? Core.bundle.format("launch.unable", state.enemies()) : Core.bundle.get("launch") + "\n" + button.setText(state.enemies() > 0 ? Core.bundle.format("launch.unable", state.enemies()) : Core.bundle.get("launch") + "\n" +
Core.bundle.format("launch.next", state.wave + world.getZone().launchPeriod)); Core.bundle.format("launch.next", state.wave + world.getZone().launchPeriod));
button.getLabel().setColor(Tmp.c1.set(Color.WHITE).lerp(state.enemies() > 0 ? Color.WHITE : Pal.accent, button.getLabel().setColor(Tmp.c1.set(Color.WHITE).lerp(state.enemies() > 0 ? Color.WHITE : Color.SCARLET,
Mathf.absin(Time.time(), 7f, 1f))); Mathf.absin(Time.time(), 2f, 1f)));
}); });
button.setDisabled(() -> state.enemies() > 0); button.setDisabled(() -> state.enemies() > 0);

View File

@@ -63,7 +63,7 @@ public class MenuFragment extends Fragment{
join = new MobileButton("icon-add", isize, "$joingame", ui.join::show), join = new MobileButton("icon-add", isize, "$joingame", ui.join::show),
editor = new MobileButton("icon-editor", isize, "$editor", () -> ui.loadAnd(ui.editor::show)), editor = new MobileButton("icon-editor", isize, "$editor", () -> ui.loadAnd(ui.editor::show)),
tools = new MobileButton("icon-tools", isize, "$settings", ui.settings::show), tools = new MobileButton("icon-tools", isize, "$settings", ui.settings::show),
donate = new MobileButton("icon-donate", isize, "$donate", Platform.instance::openDonations); donate = new MobileButton("icon-donate", isize, "$donate", () -> Core.net.openURI(donationURL));
if(Core.graphics.getWidth() > Core.graphics.getHeight()){ if(Core.graphics.getWidth() > Core.graphics.getHeight()){
container.add(play); container.add(play);

View File

@@ -192,7 +192,7 @@ public class PlacementFragment extends Fragment{
topTable.table(header -> { topTable.table(header -> {
header.left(); header.left();
header.add(new Image(lastDisplay.icon(Icon.medium))).size(8 * 4); header.add(new Image(lastDisplay.icon(Icon.medium))).size(8 * 4);
header.labelWrap(() -> !unlocked(lastDisplay) ? Core.bundle.get("blocks.unknown") : lastDisplay.localizedName) header.labelWrap(() -> !unlocked(lastDisplay) ? Core.bundle.get("block.unknown") : lastDisplay.localizedName)
.left().width(190f).padLeft(5); .left().width(190f).padLeft(5);
header.add().growX(); header.add().growX();
if(unlocked(lastDisplay)){ if(unlocked(lastDisplay)){

View File

@@ -69,10 +69,10 @@ public class PlayerListFragment extends Fragment{
playerGroup.all().sort((p1, p2) -> p1.getTeam().compareTo(p2.getTeam())); playerGroup.all().sort((p1, p2) -> p1.getTeam().compareTo(p2.getTeam()));
playerGroup.forEach(player -> { playerGroup.forEach(user -> {
NetConnection connection = player.con; NetConnection connection = user.con;
if(connection == null && Net.server() && !player.isLocal) return; if(connection == null && Net.server() && !user.isLocal) return;
Table button = new Table(); Table button = new Table();
button.left(); button.left();
@@ -90,15 +90,15 @@ public class PlayerListFragment extends Fragment{
} }
}; };
table.margin(8); table.margin(8);
table.add(new Image(player.mech.iconRegion)).grow(); table.add(new Image(user.mech.iconRegion)).grow();
button.add(table).size(h); button.add(table).size(h);
button.labelWrap("[#" + player.color.toString().toUpperCase() + "]" + player.name).width(170f).pad(10); button.labelWrap("[#" + user.color.toString().toUpperCase() + "]" + user.name).width(170f).pad(10);
button.add().grow(); button.add().grow();
button.addImage("icon-admin").size(14 * 2).visible(() -> player.isAdmin && !(!player.isLocal && Net.server())).padRight(5).get().updateVisibility(); button.addImage("icon-admin").size(14 * 2).visible(() -> user.isAdmin && !(!user.isLocal && Net.server())).padRight(5).get().updateVisibility();
if((Net.server() || player.isAdmin) && !player.isLocal && (!player.isAdmin || Net.server())){ if((Net.server() || player.isAdmin) && !user.isLocal && (!user.isAdmin || Net.server())){
button.add().growY(); button.add().growY();
float bs = (h) / 2f; float bs = (h) / 2f;
@@ -107,36 +107,36 @@ public class PlayerListFragment extends Fragment{
t.defaults().size(bs); t.defaults().size(bs);
t.addImageButton("icon-ban", "clear-partial", 14 * 2, t.addImageButton("icon-ban", "clear-partial", 14 * 2,
() -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(player, AdminAction.ban))); () -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(user, AdminAction.ban)));
t.addImageButton("icon-cancel", "clear-partial", 16 * 2, t.addImageButton("icon-cancel", "clear-partial", 16 * 2,
() -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(player, AdminAction.kick))); () -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(user, AdminAction.kick)));
t.row(); t.row();
t.addImageButton("icon-admin", "clear-toggle-partial", 14 * 2, () -> { t.addImageButton("icon-admin", "clear-toggle-partial", 14 * 2, () -> {
if(Net.client()) return; if(Net.client()) return;
String id = player.uuid; String id = user.uuid;
if(netServer.admins.isAdmin(id, connection.address)){ if(netServer.admins.isAdmin(id, connection.address)){
ui.showConfirm("$confirm", "$confirmunadmin", () -> netServer.admins.unAdminPlayer(id)); ui.showConfirm("$confirm", "$confirmunadmin", () -> netServer.admins.unAdminPlayer(id));
}else{ }else{
ui.showConfirm("$confirm", "$confirmadmin", () -> netServer.admins.adminPlayer(id, player.usid)); ui.showConfirm("$confirm", "$confirmadmin", () -> netServer.admins.adminPlayer(id, user.usid));
} }
}) })
.update(b -> b.setChecked(player.isAdmin)) .update(b -> b.setChecked(user.isAdmin))
.disabled(b -> Net.client()) .disabled(b -> Net.client())
.touchable(() -> Net.client() ? Touchable.disabled : Touchable.enabled) .touchable(() -> Net.client() ? Touchable.disabled : Touchable.enabled)
.checked(player.isAdmin); .checked(user.isAdmin);
t.addImageButton("icon-zoom-small", "clear-partial", 14 * 2, () -> ui.showError("Currently unimplemented.")/*Call.onAdminRequest(player, AdminAction.trace)*/); t.addImageButton("icon-zoom-small", "clear-partial", 14 * 2, () -> ui.showError("Currently unimplemented.")/*Call.onAdminRequest(user, AdminAction.trace)*/);
}).padRight(12).size(bs + 10f, bs); }).padRight(12).size(bs + 10f, bs);
} }
content.add(button).padBottom(-6).width(350f).maxHeight(h + 14); content.add(button).padBottom(-6).width(350f).maxHeight(h + 14);
content.row(); content.row();
content.addImage("blank").height(3f).color(state.rules.pvp ? player.getTeam().color : Pal.accent).growX(); content.addImage("blank").height(3f).color(state.rules.pvp ? user.getTeam().color : Pal.accent).growX();
content.row(); content.row();
}); });

View File

@@ -32,7 +32,7 @@ import io.anuke.mindustry.ui.Bar;
import io.anuke.mindustry.ui.ContentDisplay; import io.anuke.mindustry.ui.ContentDisplay;
import io.anuke.mindustry.world.consumers.Consume; import io.anuke.mindustry.world.consumers.Consume;
import io.anuke.mindustry.world.consumers.ConsumeLiquid; import io.anuke.mindustry.world.consumers.ConsumeLiquid;
import io.anuke.mindustry.world.consumers.ConsumePower; import io.anuke.mindustry.world.consumers.ConsumeType;
import io.anuke.mindustry.world.meta.*; import io.anuke.mindustry.world.meta.*;
import java.util.Arrays; import java.util.Arrays;
@@ -95,6 +95,8 @@ public class Block extends BlockStorage{
public boolean canOverdrive = true; public boolean canOverdrive = true;
/**Whether the icon region has an outline added.*/ /**Whether the icon region has an outline added.*/
public boolean outlineIcon = false; public boolean outlineIcon = false;
/**Whether this block has a shadow under it.*/
public boolean hasShadow = true;
/**Cost of constructing this block.*/ /**Cost of constructing this block.*/
public ItemStack[] buildRequirements = new ItemStack[]{}; public ItemStack[] buildRequirements = new ItemStack[]{};
@@ -106,6 +108,9 @@ public class Block extends BlockStorage{
public BooleanProvider buildVisibility = () -> false; public BooleanProvider buildVisibility = () -> false;
public boolean alwaysUnlocked = false; public boolean alwaysUnlocked = false;
protected TextureRegion[] cacheRegions = {};
protected Array<String> cacheRegionStrings = new Array<>();
protected Array<Tile> tempTiles = new Array<>(); protected Array<Tile> tempTiles = new Array<>();
protected TextureRegion[] icons = new TextureRegion[Icon.values().length]; protected TextureRegion[] icons = new TextureRegion[Icon.values().length];
protected TextureRegion[] generatedIcons; protected TextureRegion[] generatedIcons;
@@ -161,7 +166,7 @@ public class Block extends BlockStorage{
if(tile == null || tile.entity == null || tile.entity.power == null) return out; if(tile == null || tile.entity == null || tile.entity.power == null) return out;
for(Tile other : tile.entity.proximity()){ for(Tile other : tile.entity.proximity()){
if(other.entity.power != null && !(consumesPower && other.block().consumesPower && !outputsPower && !other.block().outputsPower) if(other != null && other.entity != null && other.entity.power != null && !(consumesPower && other.block().consumesPower && !outputsPower && !other.block().outputsPower)
&& !tile.entity.power.links.contains(other.pos())){ && !tile.entity.power.links.contains(other.pos())){
out.add(other); out.add(other);
} }
@@ -205,6 +210,8 @@ public class Block extends BlockStorage{
} }
protected void drawPlaceText(String text, int x, int y, boolean valid){ protected void drawPlaceText(String text, int x, int y, boolean valid){
if(renderer.pixelator.enabled()) return;
Color color = valid ? Pal.accent : Pal.remove; Color color = valid ? Pal.accent : Pal.remove;
BitmapFont font = Core.scene.skin.getFont("default-font"); BitmapFont font = Core.scene.skin.getFont("default-font");
GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new); GlyphLayout layout = Pools.obtain(GlyphLayout.class, GlyphLayout::new);
@@ -230,10 +237,6 @@ public class Block extends BlockStorage{
Draw.rect(region, tile.drawx(), tile.drawy(), rotate ? tile.getRotation() * 90 : 0); Draw.rect(region, tile.drawx(), tile.drawy(), rotate ? tile.getRotation() * 90 : 0);
} }
public void drawShadow(Tile tile){
draw(tile);
}
public void drawTeam(Tile tile){ public void drawTeam(Tile tile){
Draw.color(tile.getTeam().color); Draw.color(tile.getTeam().color);
Draw.rect("block-border", tile.drawx() - size * tilesize/2f + 4, tile.drawy() - size * tilesize/2f + 4); Draw.rect("block-border", tile.drawx() - size * tilesize/2f + 4, tile.drawy() - size * tilesize/2f + 4);
@@ -289,7 +292,7 @@ public class Block extends BlockStorage{
@Override @Override
public TextureRegion getContentIcon(){ public TextureRegion getContentIcon(){
return icon(Icon.medium); return icon(Icon.large);
} }
@Override @Override
@@ -318,12 +321,28 @@ public class Block extends BlockStorage{
setStats(); setStats();
setBars(); setBars();
consumes.checkRequired(this); consumes.init();
} }
@Override @Override
public void load(){ public void load(){
region = Core.atlas.find(name); region = Core.atlas.find(name);
cacheRegions = new TextureRegion[cacheRegionStrings.size];
for(int i = 0; i < cacheRegions.length; i++){
cacheRegions[i] = Core.atlas.find(cacheRegionStrings.get(i));
}
}
/**Adds a region by name to be loaded, with the final name "{name}-suffix". Returns an ID to looks this region up by in {@link #reg(int)}.*/
protected int reg(String suffix){
cacheRegionStrings.add(name + suffix);
return cacheRegionStrings.size - 1;
}
/**Returns an internally cached region by ID.*/
protected TextureRegion reg(int id){
return cacheRegions[id];
} }
/** Called when the block is tapped. */ /** Called when the block is tapped. */
@@ -376,7 +395,7 @@ public class Block extends BlockStorage{
stats.add(BlockStat.size, "{0}x{0}", size); stats.add(BlockStat.size, "{0}x{0}", size);
stats.add(BlockStat.health, health, StatUnit.none); stats.add(BlockStat.health, health, StatUnit.none);
consumes.forEach(cons -> cons.display(stats)); consumes.display(stats);
// Note: Power stats are added by the consumers. // Note: Power stats are added by the consumers.
if(hasLiquids) stats.add(BlockStat.liquidCapacity, liquidCapacity, StatUnit.liquidUnits); if(hasLiquids) stats.add(BlockStat.liquidCapacity, liquidCapacity, StatUnit.liquidUnits);
@@ -388,25 +407,25 @@ public class Block extends BlockStorage{
if(hasLiquids){ if(hasLiquids){
Function<TileEntity, Liquid> current; Function<TileEntity, Liquid> current;
if(consumes.has(ConsumeLiquid.class)){ if(consumes.has(ConsumeType.liquid) && consumes.get(ConsumeType.liquid) instanceof ConsumeLiquid){
Liquid liquid = consumes.liquid(); Liquid liquid = consumes.<ConsumeLiquid>get(ConsumeType.liquid).liquid;
current = entity -> liquid; current = entity -> liquid;
}else{ }else{
current = entity -> entity.liquids.current(); current = entity -> entity.liquids.current();
} }
bars.add("liquid", entity -> new Bar(() -> entity.liquids.get(current.get(entity)) <= 0.001f ? Core.bundle.get("blocks.liquid") : current.get(entity).localizedName(), () -> current.get(entity).color, () -> entity.liquids.get(current.get(entity)) / liquidCapacity)); bars.add("liquid", entity -> new Bar(() -> entity.liquids.get(current.get(entity)) <= 0.001f ? Core.bundle.get("bar.liquid") : current.get(entity).localizedName(), () -> current.get(entity).color, () -> entity.liquids.get(current.get(entity)) / liquidCapacity));
} }
if(hasPower && consumes.has(ConsumePower.class)){ if(hasPower && consumes.hasPower()){
boolean buffered = consumes.get(ConsumePower.class).isBuffered; boolean buffered = consumes.getPower().isBuffered;
float capacity = consumes.get(ConsumePower.class).powerCapacity; float capacity = consumes.getPower().powerCapacity;
bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("blocks.powerbalance", Float.isNaN(entity.power.satisfaction * capacity) ? "<ERROR>" : (int)(entity.power.satisfaction * capacity)) : bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("bar.poweramount", Float.isNaN(entity.power.satisfaction * capacity) ? "<ERROR>" : (int)(entity.power.satisfaction * capacity)) :
Core.bundle.get("blocks.power"), () -> Pal.powerBar, () -> entity.power.satisfaction)); Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> entity.power.satisfaction));
} }
if(hasItems && configurable){ if(hasItems && configurable){
bars.add("items", entity -> new Bar(() -> Core.bundle.format("blocks.items", entity.items.total()), () -> Pal.items, () -> (float)entity.items.total() / itemCapacity)); bars.add("items", entity -> new Bar(() -> Core.bundle.format("bar.items", entity.items.total()), () -> Pal.items, () -> (float)entity.items.total() / itemCapacity));
} }
} }
@@ -458,8 +477,8 @@ public class Block extends BlockStorage{
explosiveness += tile.entity.liquids.sum((liquid, amount) -> liquid.flammability * amount / 2f); explosiveness += tile.entity.liquids.sum((liquid, amount) -> liquid.flammability * amount / 2f);
} }
if(consumes.has(ConsumePower.class) && consumes.get(ConsumePower.class).isBuffered){ if(consumes.hasPower() && consumes.getPower().isBuffered){
power += tile.entity.power.satisfaction * consumes.get(ConsumePower.class).powerCapacity; power += tile.entity.power.satisfaction * consumes.getPower().powerCapacity;
} }
if(hasLiquids){ if(hasLiquids){

View File

@@ -12,15 +12,10 @@ import io.anuke.mindustry.entities.type.TileEntity;
import io.anuke.mindustry.entities.type.Unit; import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.consumers.ConsumeItem;
import io.anuke.mindustry.world.consumers.ConsumeItems;
import io.anuke.mindustry.world.consumers.ConsumeLiquid;
import io.anuke.mindustry.world.consumers.Consumers; import io.anuke.mindustry.world.consumers.Consumers;
import io.anuke.mindustry.world.meta.BlockBars; import io.anuke.mindustry.world.meta.BlockBars;
import io.anuke.mindustry.world.meta.BlockStats; import io.anuke.mindustry.world.meta.BlockStats;
import io.anuke.mindustry.world.meta.Producers;
public abstract class BlockStorage extends UnlockableContent{ public abstract class BlockStorage extends UnlockableContent{
public boolean hasItems; public boolean hasItems;
@@ -28,7 +23,6 @@ public abstract class BlockStorage extends UnlockableContent{
public boolean hasPower; public boolean hasPower;
public boolean outputsLiquid = false; public boolean outputsLiquid = false;
public boolean singleLiquid = true;
public boolean consumesPower = true; public boolean consumesPower = true;
public boolean outputsPower = false; public boolean outputsPower = false;
@@ -39,7 +33,6 @@ public abstract class BlockStorage extends UnlockableContent{
public final BlockStats stats = new BlockStats(); public final BlockStats stats = new BlockStats();
public final BlockBars bars = new BlockBars(); public final BlockBars bars = new BlockBars();
public final Consumers consumes = new Consumers(); public final Consumers consumes = new Consumers();
public final Producers produces = new Producers();
public BlockStorage(String name){ public BlockStorage(String name){
super(name); super(name);
@@ -68,6 +61,7 @@ public abstract class BlockStorage extends UnlockableContent{
/**Remove a stack from this inventory, and return the amount removed.*/ /**Remove a stack from this inventory, and return the amount removed.*/
public int removeStack(Tile tile, Item item, int amount){ public int removeStack(Tile tile, Item item, int amount){
if(tile.entity == null || tile.entity.items == null) return 0;
amount = Math.min(amount, tile.entity.items.get(item)); amount = Math.min(amount, tile.entity.items.get(item));
tile.entity.noSleep(); tile.entity.noSleep();
tile.entity.items.remove(item, amount); tile.entity.items.remove(item, amount);
@@ -98,21 +92,11 @@ public abstract class BlockStorage extends UnlockableContent{
} }
public boolean acceptItem(Item item, Tile tile, Tile source){ public boolean acceptItem(Item item, Tile tile, Tile source){
if(tile.entity != null && consumes.has(ConsumeItems.class)){ return consumes.itemFilters[item.id] && tile.entity.items.get(item) < getMaximumAccepted(tile, item);
for(ItemStack stack : consumes.items()){
if(stack.item == item){
return tile.entity.items.get(item) < getMaximumAccepted(tile, item);
}
}
}
return tile.entity != null && consumes.has(ConsumeItem.class) && consumes.item() == item &&
tile.entity.items.get(item) < getMaximumAccepted(tile, item);
} }
public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){ public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){
return hasLiquids && tile.entity.liquids.get(liquid) + amount < liquidCapacity && return hasLiquids && tile.entity.liquids.get(liquid) + amount < liquidCapacity && consumes.liquidfilters[liquid.id];
(!singleLiquid || (tile.entity.liquids.current() == liquid || tile.entity.liquids.get(tile.entity.liquids.current()) < 0.2f)) &&
(!consumes.has(ConsumeLiquid.class) || consumes.liquid() == liquid);
} }
public void handleLiquid(Tile tile, Tile source, Liquid liquid, float amount){ public void handleLiquid(Tile tile, Tile source, Liquid liquid, float amount){
@@ -128,7 +112,7 @@ public abstract class BlockStorage extends UnlockableContent{
Tile other = proximity.get((i + dump) % proximity.size); Tile other = proximity.get((i + dump) % proximity.size);
Tile in = Edges.getFacingEdge(tile, other); Tile in = Edges.getFacingEdge(tile, other);
if(other.getTeamID() == tile.getTeamID() && other.block().hasLiquids && canDumpLiquid(tile, other, liquid)){ if(other.getTeam() == tile.getTeam() && other.block().hasLiquids && canDumpLiquid(tile, other, liquid)){
float ofract = other.entity.liquids.get(liquid) / other.block().liquidCapacity; float ofract = other.entity.liquids.get(liquid) / other.block().liquidCapacity;
float fract = tile.entity.liquids.get(liquid) / liquidCapacity; float fract = tile.entity.liquids.get(liquid) / liquidCapacity;
@@ -156,7 +140,7 @@ public abstract class BlockStorage extends UnlockableContent{
next = next.target(); next = next.target();
if(next.getTeamID() == tile.getTeamID() && next.block().hasLiquids && tile.entity.liquids.get(liquid) > 0f){ if(next.getTeam() == tile.getTeam() && next.block().hasLiquids && tile.entity.liquids.get(liquid) > 0f){
if(next.block().acceptLiquid(next, tile, liquid, 0f)){ if(next.block().acceptLiquid(next, tile, liquid, 0f)){
float ofract = next.entity.liquids.get(liquid) / next.block().liquidCapacity; float ofract = next.entity.liquids.get(liquid) / next.block().liquidCapacity;
@@ -206,7 +190,7 @@ public abstract class BlockStorage extends UnlockableContent{
incrementDump(tile, proximity.size); incrementDump(tile, proximity.size);
Tile other = proximity.get((i + dump) % proximity.size); Tile other = proximity.get((i + dump) % proximity.size);
Tile in = Edges.getFacingEdge(tile, other); Tile in = Edges.getFacingEdge(tile, other);
if(other.getTeamID() == tile.getTeamID() && other.block().acceptItem(item, other, in) && canDump(tile, other, item)){ if(other.getTeam() == tile.getTeam() && other.block().acceptItem(item, other, in) && canDump(tile, other, item)){
other.block().handleItem(item, other, in); other.block().handleItem(item, other, in);
return; return;
} }
@@ -215,9 +199,7 @@ public abstract class BlockStorage extends UnlockableContent{
handleItem(item, tile, tile); handleItem(item, tile, tile);
} }
/** /**Try dumping any item near the tile.*/
* Try dumping any item near the tile.
*/
public boolean tryDump(Tile tile){ public boolean tryDump(Tile tile){
return tryDump(tile, null); return tryDump(tile, null);
} }
@@ -246,7 +228,7 @@ public abstract class BlockStorage extends UnlockableContent{
for(int ii = 0; ii < Vars.content.items().size; ii++){ for(int ii = 0; ii < Vars.content.items().size; ii++){
Item item = Vars.content.item(ii); Item item = Vars.content.item(ii);
if(other.getTeamID() == tile.getTeamID() && entity.items.has(item) && other.block().acceptItem(item, other, in) && canDump(tile, other, item)){ if(other.getTeam() == tile.getTeam() && entity.items.has(item) && other.block().acceptItem(item, other, in) && canDump(tile, other, item)){
other.block().handleItem(item, other, in); other.block().handleItem(item, other, in);
tile.entity.items.remove(item, 1); tile.entity.items.remove(item, 1);
incrementDump(tile, proximity.size); incrementDump(tile, proximity.size);
@@ -255,7 +237,7 @@ public abstract class BlockStorage extends UnlockableContent{
} }
}else{ }else{
if(other.getTeamID() == tile.getTeamID() && other.block().acceptItem(todump, other, in) && canDump(tile, other, todump)){ if(other.getTeam() == tile.getTeam() && other.block().acceptItem(todump, other, in) && canDump(tile, other, todump)){
other.block().handleItem(todump, other, in); other.block().handleItem(todump, other, in);
tile.entity.items.remove(todump, 1); tile.entity.items.remove(todump, 1);
incrementDump(tile, proximity.size); incrementDump(tile, proximity.size);

View File

@@ -1,5 +1,7 @@
package io.anuke.mindustry.world; package io.anuke.mindustry.world;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.Events; import io.anuke.arc.Events;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
@@ -19,6 +21,7 @@ public class Build{
private static final Rectangle rect = new Rectangle(); private static final Rectangle rect = new Rectangle();
/**Returns block type that was broken, or null if unsuccesful.*/ /**Returns block type that was broken, or null if unsuccesful.*/
@Remote(called = Loc.server)
public static void beginBreak(Team team, int x, int y){ public static void beginBreak(Team team, int x, int y){
if(!validBreak(team, x, y)){ if(!validBreak(team, x, y)){
return; return;
@@ -69,6 +72,7 @@ public class Build{
} }
/**Places a BuildBlock at this location.*/ /**Places a BuildBlock at this location.*/
@Remote(called = Loc.server)
public static void beginPlace(Team team, int x, int y, Block result, int rotation){ public static void beginPlace(Team team, int x, int y, Block result, int rotation){
if(!validPlace(team, x, y, result, rotation)){ if(!validPlace(team, x, y, result, rotation)){
return; return;

View File

@@ -3,10 +3,7 @@ package io.anuke.mindustry.world;
import io.anuke.arc.collection.Array; import io.anuke.arc.collection.Array;
import io.anuke.arc.function.Consumer; import io.anuke.arc.function.Consumer;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.math.geom.*;
import io.anuke.arc.math.geom.Point2;
import io.anuke.arc.math.geom.Position;
import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Pack; import io.anuke.arc.util.Pack;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.entities.traits.TargetTrait; import io.anuke.mindustry.entities.traits.TargetTrait;
@@ -31,6 +28,8 @@ public class Tile implements Position, TargetTrait{
public byte link = 0; public byte link = 0;
/** Tile traversal cost. */ /** Tile traversal cost. */
public byte cost = 1; public byte cost = 1;
/** Weight of [ground] units on this tile.*/
public byte weight, airWeight = 0;
/** Tile entity, usually null. */ /** Tile entity, usually null. */
public TileEntity entity; public TileEntity entity;
public short x, y; public short x, y;
@@ -140,6 +139,11 @@ public class Tile implements Position, TargetTrait{
return wall; return wall;
} }
@SuppressWarnings("unchecked")
public <T extends Block> T cblock(){
return (T)wall;
}
@Override @Override
public Team getTeam(){ public Team getTeam(){
return Team.all[target().team]; return Team.all[target().team];
@@ -325,6 +329,10 @@ public class Tile implements Position, TargetTrait{
return link == null ? this : link; return link == null ? this : link;
} }
public Rectangle getHitbox(Rectangle rect){
return rect.setSize(block().size * tilesize).setCenter(drawx(), drawy());
}
public Tile getNearby(Point2 relative){ public Tile getNearby(Point2 relative){
return world.tile(x + relative.x, y + relative.y); return world.tile(x + relative.x, y + relative.y);
} }

View File

@@ -38,11 +38,6 @@ public class BlockPart extends Block{
//do nothing //do nothing
} }
@Override
public void drawShadow(Tile tile){
//also do nothing
}
@Override @Override
public boolean isSolidFor(Tile tile){ public boolean isSolidFor(Tile tile){
return tile.getLinked() == null return tile.getLinked() == null

View File

@@ -158,12 +158,6 @@ public class BuildBlock extends Block{
} }
} }
@Override
public void drawShadow(Tile tile){
//don't
//TODO maybe do
}
@Override @Override
public TileEntity newEntity(){ public TileEntity newEntity(){
return new BuildEntity(); return new BuildEntity();

Some files were not shown because too many files have changed in this diff Show More