Compare commits
236 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5aa574bc71 | ||
|
|
99c0291b0e | ||
|
|
89c195d96b | ||
|
|
86f3fffa91 | ||
|
|
e191362c4f | ||
|
|
8c0cff0c65 | ||
|
|
db31238b00 | ||
|
|
c18b730d7c | ||
|
|
7ad85f6ffb | ||
|
|
45a79624b1 | ||
|
|
65dde8bc97 | ||
|
|
83dce4d8d2 | ||
|
|
6680326392 | ||
|
|
cc222034cb | ||
|
|
5b0250ee74 | ||
|
|
eb52f3b902 | ||
|
|
9add64ae8d | ||
|
|
20c5aadefe | ||
|
|
34896a805e | ||
|
|
722b488795 | ||
|
|
ecd73dcc2c | ||
|
|
b6e97c4261 | ||
|
|
a2750c8aff | ||
|
|
2c0372f680 | ||
|
|
2dceb8927c | ||
|
|
e5cf2161d4 | ||
|
|
b2bae64215 | ||
|
|
552dc254da | ||
|
|
dc51afdc60 | ||
|
|
3f293190cf | ||
|
|
7f299869c5 | ||
|
|
c45805e703 | ||
|
|
d062d8081a | ||
|
|
5955ecefd3 | ||
|
|
0d25d83651 | ||
|
|
1957b6aa12 | ||
|
|
4fa173f0f5 | ||
|
|
fed3bcd79d | ||
|
|
dda1f18f67 | ||
|
|
025386af53 | ||
|
|
bd1ea41c0d | ||
|
|
5d729c1e8d | ||
|
|
1fac4c59a3 | ||
|
|
0e9296913c | ||
|
|
50d379d94d | ||
|
|
d6a4149175 | ||
|
|
5a0669d437 | ||
|
|
0d29d94800 | ||
|
|
1e667946b3 | ||
|
|
c6a4bf69ee | ||
|
|
5d0cfc3599 | ||
|
|
2424afa1fb | ||
|
|
69944a2b63 | ||
|
|
0ceb58a105 | ||
|
|
5e8da856e7 | ||
|
|
ee412e1994 | ||
|
|
02736524bd | ||
|
|
c357b97b3b | ||
|
|
dbe7251c6b | ||
|
|
7ae90f655c | ||
|
|
669ce6dfbb | ||
|
|
4dc55e5594 | ||
|
|
4b824f7a4c | ||
|
|
3435132e87 | ||
|
|
d49b15b2a0 | ||
|
|
0c59553b3d | ||
|
|
4a50192937 | ||
|
|
f65ab00250 | ||
|
|
f71c3af2e1 | ||
|
|
77fb9e3d3e | ||
|
|
c1d6674797 | ||
|
|
659aaba0b9 | ||
|
|
a3816f6355 | ||
|
|
4829f040c2 | ||
|
|
59826f5189 | ||
|
|
a6fac9e56a | ||
|
|
68f0ef1bd2 | ||
|
|
d53882a086 | ||
|
|
7c7306d37b | ||
|
|
d5a9938354 | ||
|
|
3fad378b69 | ||
|
|
afb47344c6 | ||
|
|
5ba7e1d08b | ||
|
|
681347e933 | ||
|
|
f1bf8a0f1a | ||
|
|
874b41cb46 | ||
|
|
d3876b6376 | ||
|
|
f72f2bdf5d | ||
|
|
af91e17b13 | ||
|
|
69bfd8f54d | ||
|
|
369c3b569c | ||
|
|
8480e656b9 | ||
|
|
fb29324905 | ||
|
|
ed88633712 | ||
|
|
cd456f80a4 | ||
|
|
6d61515e28 | ||
|
|
38af936e3f | ||
|
|
d59f5ddc59 | ||
|
|
6c07c5006a | ||
|
|
d4d060a500 | ||
|
|
55e43761e9 | ||
|
|
b1edaa1408 | ||
|
|
d8d9762998 | ||
|
|
dd93284062 | ||
|
|
19c76fc741 | ||
|
|
1013455b0f | ||
|
|
066e4380e1 | ||
|
|
55da9df2a1 | ||
|
|
4b26c57a20 | ||
|
|
d0491dd68a | ||
|
|
cd8cc34c31 | ||
|
|
0249ebf718 | ||
|
|
7fb4eeb998 | ||
|
|
0cd7313523 | ||
|
|
5c3fc2a6ba | ||
|
|
19f888061f | ||
|
|
4e8a02be7d | ||
|
|
2231062c19 | ||
|
|
fb4faa15bb | ||
|
|
e6d05926dd | ||
|
|
ca9f18325c | ||
|
|
bd96ae5a48 | ||
|
|
cf1cc2ca49 | ||
|
|
bbaaa91575 | ||
|
|
41b21c81a0 | ||
|
|
44842d3221 | ||
|
|
d9c7665aca | ||
|
|
565b79d1b2 | ||
|
|
f30dc7dcd9 | ||
|
|
e4cdf515c9 | ||
|
|
ad3463cbc4 | ||
|
|
db733bced6 | ||
|
|
7aa71a7201 | ||
|
|
6fe55661ed | ||
|
|
af89efcfc4 | ||
|
|
82493c596d | ||
|
|
5a3fbf33df | ||
|
|
5bed0f3bcc | ||
|
|
87f6ff7be6 | ||
|
|
fa56996e10 | ||
|
|
b867cdb8b9 | ||
|
|
3bac32e04a | ||
|
|
c4c0f45228 | ||
|
|
d981bb95b9 | ||
|
|
c9f0a59339 | ||
|
|
ec58e868fd | ||
|
|
aa5152ac70 | ||
|
|
2cc627e7d0 | ||
|
|
8653e7bbb1 | ||
|
|
4fb7430fb7 | ||
|
|
e90c8c4d3e | ||
|
|
06e6deae42 | ||
|
|
38fe99f10e | ||
|
|
05ab62f038 | ||
|
|
168011586b | ||
|
|
b5f1e566b2 | ||
|
|
9b6fb2f382 | ||
|
|
24bb2428e7 | ||
|
|
75ba33abc0 | ||
|
|
ff54629550 | ||
|
|
b492c7ae27 | ||
|
|
5d04f93a88 | ||
|
|
5651d1b023 | ||
|
|
6822e3f5b8 | ||
|
|
3cbb02f9fb | ||
|
|
0f79298c28 | ||
|
|
8f4bd09635 | ||
|
|
0a9cad2ea6 | ||
|
|
dc21adfda5 | ||
|
|
a7bfe18f4a | ||
|
|
209f0902c9 | ||
|
|
9cc76a148b | ||
|
|
1d95a255bc | ||
|
|
3f8d412d1c | ||
|
|
b2c35d45c3 | ||
|
|
35ab90e445 | ||
|
|
9bfb5216f9 | ||
|
|
b10656294e | ||
|
|
316f4d471f | ||
|
|
ef0b56eb22 | ||
|
|
e640042e5d | ||
|
|
2c0d2c5e22 | ||
|
|
9eed39c2ae | ||
|
|
e8d89b6c43 | ||
|
|
494c3ffbc4 | ||
|
|
40d27c787c | ||
|
|
2fe5b44698 | ||
|
|
5cc32b9001 | ||
|
|
d481af43c7 | ||
|
|
1cd43f938f | ||
|
|
528f5295c2 | ||
|
|
aaedeea870 | ||
|
|
c684c32abe | ||
|
|
34df9cca2c | ||
|
|
c678b53d3f | ||
|
|
ea30cc7d19 | ||
|
|
a2772d09f3 | ||
|
|
7f2c7685b4 | ||
|
|
7e80a60e65 | ||
|
|
44544020ec | ||
|
|
4e2d2ee378 | ||
|
|
7aafa8b150 | ||
|
|
bbadf6795e | ||
|
|
9ddfd650dd | ||
|
|
cf9cda4936 | ||
|
|
4e43d2a96b | ||
|
|
d68c8fe72c | ||
|
|
c9d0619289 | ||
|
|
8ea33946c4 | ||
|
|
bef7394004 | ||
|
|
4042bf042e | ||
|
|
643b698c30 | ||
|
|
aba3e3985a | ||
|
|
91f679f762 | ||
|
|
3eeed507cc | ||
|
|
988e1d6e30 | ||
|
|
04b4aabcf6 | ||
|
|
d97fe47206 | ||
|
|
0d8748a6ce | ||
|
|
b360a39fcf | ||
|
|
70b071fa26 | ||
|
|
64badb2cb7 | ||
|
|
3da6634242 | ||
|
|
4b8d072854 | ||
|
|
32abd991e7 | ||
|
|
3294f800be | ||
|
|
74e3dc2d7d | ||
|
|
a7a49a823b | ||
|
|
82f43a362f | ||
|
|
f7eea51066 | ||
|
|
98c35c5291 | ||
|
|
33c1579e9c | ||
|
|
e482c2c318 | ||
|
|
5b387e7e17 | ||
|
|
c7d735bf56 | ||
|
|
1f4dbd0024 |
12
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help fix an issue.
|
||||||
|
---
|
||||||
|
|
||||||
|
[Platform]: # (Android/iOS/Mac/Windows/Linux/Web)
|
||||||
|
|
||||||
|
[Build]: # (The build number under the title in the main menu. Required.)
|
||||||
|
|
||||||
|
[Issue]: # (Explain your issue in detail, possibly including the steps to reproduce it.)
|
||||||
|
|
||||||
|
[Notes]: # (Other notes.)
|
||||||
7
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Do not make a new issue for feature requests. Instead, post it in #545.
|
||||||
5
.gitignore
vendored
@@ -4,6 +4,7 @@ logs/
|
|||||||
/core/assets/bundles/output/
|
/core/assets/bundles/output/
|
||||||
/core/assets/.gifimages/
|
/core/assets/.gifimages/
|
||||||
/deploy/
|
/deploy/
|
||||||
|
/out/
|
||||||
/desktop/packr-out/
|
/desktop/packr-out/
|
||||||
/desktop/packr-export/
|
/desktop/packr-export/
|
||||||
/desktop/mindustry-saves/
|
/desktop/mindustry-saves/
|
||||||
@@ -20,6 +21,10 @@ logs/
|
|||||||
/tests/build/
|
/tests/build/
|
||||||
/server/build/
|
/server/build/
|
||||||
changelog
|
changelog
|
||||||
|
saves/
|
||||||
|
core/assets/saves/
|
||||||
|
/core/assets/saves/
|
||||||
|
steam_appid.txt
|
||||||
/test_files/
|
/test_files/
|
||||||
/annotations/build/
|
/annotations/build/
|
||||||
/android/assets/mindustry-maps/
|
/android/assets/mindustry-maps/
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ android:
|
|||||||
script:
|
script:
|
||||||
- git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds
|
- git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds
|
||||||
- cd ../MindustryBuilds
|
- cd ../MindustryBuilds
|
||||||
- echo ${TRAVIS_BUILD_NUMBER} > version.txt
|
- echo ${TRAVIS_TAG}
|
||||||
- git add .
|
- if [ -n "$TRAVIS_TAG" ]; then echo versionName=4-fdroid-${TRAVIS_TAG:1}$'\n'versionCode=${TRAVIS_TAG:1} > version_fdroid.txt; git add .; git commit -m "Updating to build ${TRAVIS_TAG}"; fi
|
||||||
- git commit -m "Updating to build ${TRAVIS_BUILD_NUMBER}"
|
|
||||||
- git tag ${TRAVIS_BUILD_NUMBER}
|
- git tag ${TRAVIS_BUILD_NUMBER}
|
||||||
- git config --global user.name "Build Uploader"
|
- git config --global user.name "Build Uploader"
|
||||||
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/MindustryBuilds ${TRAVIS_BUILD_NUMBER}; fi
|
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/MindustryBuilds ${TRAVIS_BUILD_NUMBER}; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/MindustryBuilds; fi
|
||||||
- cd ../Mindustry
|
- cd ../Mindustry
|
||||||
- git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
|
- git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc
|
||||||
|
- if [ -n "$TRAVIS_TAG" ]; then cd ../Arc; git tag ${TRAVIS_TAG}; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/Anuken/Arc ${TRAVIS_TAG}; cd ../Mindustry; fi
|
||||||
- "./gradlew test"
|
- "./gradlew test"
|
||||||
- "./gradlew desktop:dist -Pbuildversion=${TRAVIS_TAG:1}"
|
- "./gradlew desktop:dist -Pbuildversion=${TRAVIS_TAG:1}"
|
||||||
- "./gradlew server:dist -Pbuildversion=${TRAVIS_TAG:1}"
|
- "./gradlew server:dist -Pbuildversion=${TRAVIS_TAG:1}"
|
||||||
|
|||||||
@@ -29,6 +29,13 @@ _Building:_ `./gradlew desktop:dist`
|
|||||||
|
|
||||||
Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. `gradlew server:dist`.
|
Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. `gradlew server:dist`.
|
||||||
|
|
||||||
|
#### Android
|
||||||
|
|
||||||
|
1. Install the Android SDK [here.](https://developer.android.com/studio#downloads) Make sure you're downloading the "Command line tools only", as Android Studio is not required.
|
||||||
|
2. Create a file named `local.properties` inside the Mindustry directory, with its contents looking like this: `sdk.dir=<Path to Android SDK you just downloaded, without these bracket>`. For example, if you're on Windows and installed the tools to C:\\tools, your local.properties would contain `sdk.dir=C:\\tools` (*note the double backslashes are required instead of single ones!*).
|
||||||
|
3. Run `gradlew android:assembleDebug` (or `./gradlew` if on linux/mac). This will create an unsigned APK in `android/build/outputs/apk`.
|
||||||
|
4. (Optional) To debug the application on a connected phone, do `gradlew android:installDebug android:run`. It is **highly recommended** to use IntelliJ for this instead, however.
|
||||||
|
|
||||||
##### Troubleshooting
|
##### Troubleshooting
|
||||||
|
|
||||||
If the terminal returns `Permission denied` or `Command not found` on Mac/Linux, run `chmod +x ./gradlew` before running `./gradlew`. *This is a one-time procedure.*
|
If the terminal returns `Permission denied` or `Command not found` on Mac/Linux, run `chmod +x ./gradlew` before running `./gradlew`. *This is a one-time procedure.*
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ There are two ways to test the translation bundle:
|
|||||||
1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.*
|
1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.*
|
||||||
2) For advanced users: simply download your fork of mindustry and compile/run the game.
|
2) For advanced users: simply download your fork of mindustry and compile/run the game.
|
||||||
|
|
||||||
|
#### Translating for stores (Steam, Google Play)
|
||||||
|
|
||||||
|
If you would like to translate the descriptions for Google Play or Steam, see the [Fastlane Metadata folder](https://github.com/Anuken/Mindustry/tree/master/fastlane/metadata) and submit a pull request for files there. On Google Play, you would create or edit the folder with the correct local code; for Steam, I have to update the translations manually, so just name the folder with the language name, and include the same files as the English folder does.
|
||||||
|
|
||||||
**And that's it.**
|
**And that's it.**
|
||||||
|
|
||||||
*(...of course, that's never really it. Bother me on Discord when something inevitably goes wrong.)*
|
*(...of course, that's never really it. Bother me on Discord when something inevitably goes wrong.)*
|
||||||
|
|||||||
@@ -32,32 +32,9 @@
|
|||||||
<action android:name="android.intent.action.VIEW"/>
|
<action android:name="android.intent.action.VIEW"/>
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
<category android:name="android.intent.category.BROWSABLE"/>
|
<category android:name="android.intent.category.BROWSABLE"/>
|
||||||
<data android:mimeType="application/octet-stream"/>
|
<data android:mimeType="application/octet-stream" />
|
||||||
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.mmap"/>
|
|
||||||
</intent-filter>
|
|
||||||
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW"/>
|
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
|
||||||
<category android:name="android.intent.category.BROWSABLE"/>
|
|
||||||
<data android:mimeType="application/octet-stream"/>
|
|
||||||
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav"/>
|
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
|
|
||||||
<intent-filter android:icon="@mipmap/ic_launcher"
|
|
||||||
android:label="Mindustry Map"
|
|
||||||
android:priority="1">
|
|
||||||
<action android:name="android.intent.action.VIEW"/>
|
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
|
||||||
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.mmap" android:mimeType="*/*"/>
|
|
||||||
</intent-filter>
|
|
||||||
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW"/>
|
|
||||||
<category android:name="android.intent.category.DEFAULT"/>
|
|
||||||
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav" android:mimeType="*/*"/>
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ repositories{
|
|||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
implementation project(":core")
|
implementation project(":core")
|
||||||
implementation project(":net")
|
|
||||||
|
|
||||||
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"
|
||||||
@@ -70,7 +69,8 @@ android{
|
|||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig{
|
defaultConfig{
|
||||||
Integer vcode = new Properties().with{p -> p.load(new FileInputStream(file('../core/assets/version.properties'))); return p }['androidBuildCode']?.toInteger() ?: 1
|
Properties props = new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p }
|
||||||
|
Integer vcode = props['androidBuildCode']?.toInteger() ?: 1
|
||||||
def versionNameResult = "$versionNumber-$versionType-${getBuildVersion().replace(" ", "-")}"
|
def versionNameResult = "$versionNumber-$versionType-${getBuildVersion().replace(" ", "-")}"
|
||||||
|
|
||||||
applicationId "io.anuke.mindustry"
|
applicationId "io.anuke.mindustry"
|
||||||
@@ -79,6 +79,11 @@ android{
|
|||||||
|
|
||||||
versionName versionNameResult
|
versionName versionNameResult
|
||||||
versionCode vcode
|
versionCode vcode
|
||||||
|
|
||||||
|
if(project.hasProperty("release")){
|
||||||
|
props['androidBuildCode'] = (vcode + 1).toString()
|
||||||
|
}
|
||||||
|
props.store(file('../core/assets/version.properties').newWriter(), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
compileOptions{
|
compileOptions{
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
package io.anuke.mindustry;
|
package io.anuke.mindustry;
|
||||||
|
|
||||||
import android.*;
|
import android.*;
|
||||||
|
import android.app.*;
|
||||||
import android.content.*;
|
import android.content.*;
|
||||||
import android.content.pm.*;
|
import android.content.pm.*;
|
||||||
import android.net.*;
|
import android.net.*;
|
||||||
|
import android.os.Build.*;
|
||||||
import android.os.*;
|
import android.os.*;
|
||||||
import android.provider.Settings.*;
|
import android.provider.Settings.*;
|
||||||
import android.telephony.*;
|
import android.telephony.*;
|
||||||
@@ -16,8 +18,6 @@ import io.anuke.arc.util.*;
|
|||||||
import io.anuke.arc.util.serialization.*;
|
import io.anuke.arc.util.serialization.*;
|
||||||
import io.anuke.mindustry.game.Saves.*;
|
import io.anuke.mindustry.game.Saves.*;
|
||||||
import io.anuke.mindustry.io.*;
|
import io.anuke.mindustry.io.*;
|
||||||
import io.anuke.mindustry.net.Net;
|
|
||||||
import io.anuke.mindustry.net.*;
|
|
||||||
import io.anuke.mindustry.ui.dialogs.*;
|
import io.anuke.mindustry.ui.dialogs.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -35,16 +35,10 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState){
|
protected void onCreate(Bundle savedInstanceState){
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
|
|
||||||
config.useImmersiveMode = true;
|
|
||||||
config.depth = 0;
|
|
||||||
if(doubleScaleTablets && isTablet(this.getContext())){
|
if(doubleScaleTablets && isTablet(this.getContext())){
|
||||||
UnitScl.dp.addition = 0.5f;
|
Scl.setAddition(0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
config.hideStatusBar = true;
|
|
||||||
Net.setClientProvider(new ArcNetClient());
|
|
||||||
Net.setServerProvider(new ArcNetServer());
|
|
||||||
initialize(new ClientLauncher(){
|
initialize(new ClientLauncher(){
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -70,36 +64,53 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void requestExternalPerms(Runnable callback){
|
|
||||||
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
|
|
||||||
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
|
|
||||||
callback.run();
|
|
||||||
}else{
|
|
||||||
permCallback = callback;
|
|
||||||
ArrayList<String> perms = new ArrayList<>();
|
|
||||||
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
|
||||||
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
||||||
}
|
|
||||||
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
|
||||||
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
|
||||||
}
|
|
||||||
requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shareFile(FileHandle file){
|
public void shareFile(FileHandle file){
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, Predicate<String> filetype){
|
public void showFileChooser(boolean open, String extension, Consumer<FileHandle> cons){
|
||||||
chooser = new FileChooser(text, file -> filetype.test(file.extension().toLowerCase()), open, cons);
|
if(VERSION.SDK_INT >= VERSION_CODES.Q){
|
||||||
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
|
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
|
||||||
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
chooser.show();
|
intent.setType(extension.equals("zip") ? "application/zip" : "*/*");
|
||||||
chooser = null;
|
addResultListener(i -> startActivityForResult(intent, i), (code, in) -> {
|
||||||
}else{
|
if(code == Activity.RESULT_OK && in != null && in.getData() != null){
|
||||||
|
Uri uri = in.getData();
|
||||||
|
|
||||||
|
if(uri.getPath().contains("(invalid)")) return;
|
||||||
|
|
||||||
|
Core.app.post(() -> Core.app.post(() -> cons.accept(new FileHandle(uri.getPath()){
|
||||||
|
@Override
|
||||||
|
public InputStream read(){
|
||||||
|
try{
|
||||||
|
return getContentResolver().openInputStream(uri);
|
||||||
|
}catch(IOException e){
|
||||||
|
throw new ArcRuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OutputStream write(boolean append){
|
||||||
|
try{
|
||||||
|
return getContentResolver().openOutputStream(uri);
|
||||||
|
}catch(IOException e){
|
||||||
|
throw new ArcRuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else if(VERSION.SDK_INT >= VERSION_CODES.M && !(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
|
||||||
|
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
|
||||||
|
chooser = new FileChooser(open ? "$open" : "$save", file -> file.extension().equalsIgnoreCase(extension), open, file -> {
|
||||||
|
if(!open){
|
||||||
|
cons.accept(file.parent().child(file.nameWithoutExtension() + "." + extension));
|
||||||
|
}else{
|
||||||
|
cons.accept(file);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
ArrayList<String> perms = new ArrayList<>();
|
ArrayList<String> perms = new ArrayList<>();
|
||||||
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
||||||
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||||
@@ -108,6 +119,8 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||||
}
|
}
|
||||||
requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
|
requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
|
||||||
|
}else{
|
||||||
|
super.showFileChooser(open, extension, cons);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +138,11 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
public boolean canDonate(){
|
public boolean canDonate(){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}, config);
|
}, new AndroidApplicationConfiguration(){{
|
||||||
|
useImmersiveMode = true;
|
||||||
|
depth = 0;
|
||||||
|
hideStatusBar = true;
|
||||||
|
}});
|
||||||
checkFiles(getIntent());
|
checkFiles(getIntent());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,10 +190,10 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
SaveSlot slot = control.saves.importSave(file);
|
SaveSlot slot = control.saves.importSave(file);
|
||||||
ui.load.runLoadSave(slot);
|
ui.load.runLoadSave(slot);
|
||||||
}catch(IOException e){
|
}catch(IOException e){
|
||||||
ui.showError(Core.bundle.format("save.import.fail", Strings.parseException(e, true)));
|
ui.showException("$save.import.fail", e);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
ui.showError("$save.import.invalid");
|
ui.showErrorMessage("$save.import.invalid");
|
||||||
}
|
}
|
||||||
}else if(map){ //open map
|
}else if(map){ //open map
|
||||||
FileHandle file = Core.files.local("temp-map." + mapExtension);
|
FileHandle file = Core.files.local("temp-map." + mapExtension);
|
||||||
|
|||||||
@@ -4,6 +4,11 @@ import java.lang.annotation.*;
|
|||||||
|
|
||||||
public class Annotations{
|
public class Annotations{
|
||||||
|
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface StyleDefaults {
|
||||||
|
}
|
||||||
|
|
||||||
/** Indicates that a method should always call its super version. */
|
/** Indicates that a method should always call its super version. */
|
||||||
@Target(ElementType.METHOD)
|
@Target(ElementType.METHOD)
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
|||||||
@@ -1,26 +1,22 @@
|
|||||||
package io.anuke.annotations;
|
package io.anuke.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
|
import io.anuke.annotations.Annotations.*;
|
||||||
|
|
||||||
import javax.annotation.processing.AbstractProcessor;
|
import javax.annotation.processing.*;
|
||||||
import javax.annotation.processing.ProcessingEnvironment;
|
import javax.lang.model.*;
|
||||||
import javax.annotation.processing.RoundEnvironment;
|
import javax.lang.model.element.*;
|
||||||
import javax.annotation.processing.SupportedSourceVersion;
|
import javax.tools.Diagnostic.*;
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.tools.*;
|
||||||
import javax.lang.model.element.Modifier;
|
import java.nio.file.*;
|
||||||
import javax.lang.model.element.TypeElement;
|
import java.util.*;
|
||||||
import javax.tools.Diagnostic.Kind;
|
|
||||||
import javax.tools.StandardLocation;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||||
|
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.StyleDefaults")
|
||||||
public class AssetsAnnotationProcessor extends AbstractProcessor{
|
public class AssetsAnnotationProcessor extends AbstractProcessor{
|
||||||
/** Name of the base package to put all the generated classes. */
|
/** Name of the base package to put all the generated classes. */
|
||||||
private static final String packageName = "io.anuke.mindustry.gen";
|
private static final String packageName = "io.anuke.mindustry.gen";
|
||||||
|
private String path;
|
||||||
private int round;
|
private int round;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -38,13 +34,13 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
if(round++ != 0) return false; //only process 1 round
|
if(round++ != 0) return false; //only process 1 round
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no")
|
||||||
String path = Paths.get(Utils.filer.createResource(StandardLocation.CLASS_OUTPUT, "no", "no")
|
|
||||||
.toUri().toURL().toString().substring(System.getProperty("os.name").contains("Windows") ? 6 : "file:".length()))
|
.toUri().toURL().toString().substring(System.getProperty("os.name").contains("Windows") ? 6 : "file:".length()))
|
||||||
.getParent().getParent().getParent().getParent().getParent().getParent().toString();
|
.getParent().getParent().getParent().getParent().getParent().getParent().toString();
|
||||||
|
|
||||||
process("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound", "newSound");
|
processSounds("Sounds", path + "/assets/sounds", "io.anuke.arc.audio.Sound");
|
||||||
process("Musics", path + "/assets/music", "io.anuke.arc.audio.Music", "newMusic");
|
processSounds("Musics", path + "/assets/music", "io.anuke.arc.audio.Music");
|
||||||
|
processUI(roundEnv.getElementsAnnotatedWith(StyleDefaults.class));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
@@ -53,19 +49,74 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
void processUI(Set<? extends Element> elements) throws Exception{
|
||||||
public Set<String> getSupportedAnnotationTypes() {
|
String[] iconSizes = {"small", "smaller", "tiny"};
|
||||||
return Collections.singleton("*");
|
|
||||||
|
TypeSpec.Builder type = TypeSpec.classBuilder("Tex").addModifiers(Modifier.PUBLIC);
|
||||||
|
TypeSpec.Builder ictype = TypeSpec.classBuilder("Icon").addModifiers(Modifier.PUBLIC);
|
||||||
|
MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
MethodSpec.Builder loadStyles = MethodSpec.methodBuilder("loadStyles").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
MethodSpec.Builder icload = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
String resources = path + "/assets-raw/sprites/ui";
|
||||||
|
Files.walk(Paths.get(resources)).forEach(p -> {
|
||||||
|
if(Files.isDirectory(p) || p.getFileName().toString().equals(".DS_Store")) return;
|
||||||
|
|
||||||
|
String filename = p.getFileName().toString();
|
||||||
|
filename = filename.substring(0, filename.indexOf("."));
|
||||||
|
|
||||||
|
ArrayList<String> names = new ArrayList<>();
|
||||||
|
names.add("");
|
||||||
|
if(filename.contains("icon")){
|
||||||
|
names.addAll(Arrays.asList(iconSizes));
|
||||||
|
}
|
||||||
|
|
||||||
|
for(String suffix : names){
|
||||||
|
suffix = suffix.isEmpty() ? "" : "-" + suffix;
|
||||||
|
|
||||||
|
String sfilen = filename + suffix;
|
||||||
|
String dtype = p.getFileName().toString().endsWith(".9.png") ? "io.anuke.arc.scene.style.NinePatchDrawable" : "io.anuke.arc.scene.style.TextureRegionDrawable";
|
||||||
|
|
||||||
|
String varname = capitalize(sfilen);
|
||||||
|
TypeSpec.Builder ttype = type;
|
||||||
|
MethodSpec.Builder tload = load;
|
||||||
|
if(varname.startsWith("icon")){
|
||||||
|
varname = varname.substring("icon".length());
|
||||||
|
varname = Character.toLowerCase(varname.charAt(0)) + varname.substring(1);
|
||||||
|
ttype = ictype;
|
||||||
|
tload = icload;
|
||||||
|
if(SourceVersion.isKeyword(varname)) varname += "i";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(SourceVersion.isKeyword(varname)) varname += "s";
|
||||||
|
|
||||||
|
ttype.addField(ClassName.bestGuess(dtype), varname, Modifier.STATIC, Modifier.PUBLIC);
|
||||||
|
tload.addStatement(varname + " = ("+dtype+")io.anuke.arc.Core.atlas.drawable($S)", sfilen);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for(Element elem : elements){
|
||||||
|
TypeElement t = (TypeElement)elem;
|
||||||
|
t.getEnclosedElements().stream().filter(e -> e.getKind() == ElementKind.FIELD).forEach(field -> {
|
||||||
|
String fname = field.getSimpleName().toString();
|
||||||
|
if(fname.startsWith("default")){
|
||||||
|
loadStyles.addStatement("io.anuke.arc.Core.scene.addStyle(" + field.asType().toString() + ".class, io.anuke.mindustry.ui.Styles." + fname + ")");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ictype.addMethod(icload.build());
|
||||||
|
JavaFile.builder(packageName, ictype.build()).build().writeTo(Utils.filer);
|
||||||
|
|
||||||
|
type.addMethod(load.build());
|
||||||
|
type.addMethod(loadStyles.build());
|
||||||
|
JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void process(String classname, String path, String rtype, String loadMethod) throws Exception{
|
void processSounds(String classname, String path, String rtype) throws Exception{
|
||||||
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
|
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
|
||||||
//MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
|
||||||
MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
|
||||||
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
|
||||||
|
|
||||||
HashSet<String> names = new HashSet<>();
|
HashSet<String> names = new HashSet<>();
|
||||||
Files.list(Paths.get(path)).forEach(p -> {
|
Files.list(Paths.get(path)).forEach(p -> {
|
||||||
String fname = p.getFileName().toString();
|
String fname = p.getFileName().toString();
|
||||||
@@ -84,27 +135,38 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{
|
|||||||
|
|
||||||
String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
|
String filepath = path.substring(path.lastIndexOf("/") + 1) + "/" + fname;
|
||||||
|
|
||||||
//load.addStatement(name + " = io.anuke.arc.Core.audio."+loadMethod+"(io.anuke.arc.Core.files.internal(io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? $S : $S))",
|
String filename = "io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? \"" + filepath + "\" : \"" + filepath.replace(".ogg", ".mp3")+"\"";
|
||||||
//filepath, filepath.replace(".ogg", ".mp3"));
|
|
||||||
|
|
||||||
loadBegin.addStatement("io.anuke.arc.Core.assets.load(io.anuke.arc.Core.app.getType() != io.anuke.arc.Application.ApplicationType.iOS ? $S : $S, "+rtype+".class, " +
|
|
||||||
"new io.anuke.arc.assets.loaders."+classname.substring(0, classname.length()-1)+"Loader."+classname.substring(0, classname.length()-1)+"Parameter((m, name, type) -> " + name + " = m.get(\"" + filepath + "\")))",
|
|
||||||
filepath, filepath.replace(".ogg", ".mp3"));
|
|
||||||
|
|
||||||
|
loadBegin.addStatement("io.anuke.arc.Core.assets.load("+filename +", "+rtype+".class).loaded = a -> " + name + " = ("+rtype+")a", filepath, filepath.replace(".ogg", ".mp3"));
|
||||||
|
|
||||||
dispose.addStatement(name + ".dispose()");
|
dispose.addStatement(name + ".dispose()");
|
||||||
dispose.addStatement(name + " = null");
|
dispose.addStatement(name + " = null");
|
||||||
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
||||||
//cons.consume(type, fname, name);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if(classname.equals("Sounds")){
|
if(classname.equals("Sounds")){
|
||||||
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build());
|
||||||
}
|
}
|
||||||
|
|
||||||
//type.addMethod(load.build());
|
|
||||||
type.addMethod(loadBegin.build());
|
type.addMethod(loadBegin.build());
|
||||||
type.addMethod(dispose.build());
|
type.addMethod(dispose.build());
|
||||||
JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer);
|
JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String capitalize(String s){
|
||||||
|
StringBuilder result = new StringBuilder(s.length());
|
||||||
|
|
||||||
|
for(int i = 0; i < s.length(); i++){
|
||||||
|
char c = s.charAt(i);
|
||||||
|
if(c != '_' && c != '-'){
|
||||||
|
if(i > 0 && (s.charAt(i - 1) == '_' || s.charAt(i - 1) == '-')){
|
||||||
|
result.append(Character.toUpperCase(c));
|
||||||
|
}else{
|
||||||
|
result.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,8 +54,20 @@ class CodeAnalyzerTreeScanner extends TreePathScanner<Object, Trees> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public boolean checkScope (Scope members) {
|
public boolean checkScope (Scope members) {
|
||||||
for (Symbol s : members.getElements()) {
|
Iterable<Symbol> it;
|
||||||
|
try{
|
||||||
|
it = (Iterable<Symbol>)members.getClass().getMethod("getElements").invoke(members);
|
||||||
|
}catch(Throwable t){
|
||||||
|
try{
|
||||||
|
it = (Iterable<Symbol>)members.getClass().getMethod("getSymbols").invoke(members);
|
||||||
|
}catch(Exception e){
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Symbol s : it) {
|
||||||
if (s instanceof MethodSymbol) {
|
if (s instanceof MethodSymbol) {
|
||||||
MethodSymbol ms = (MethodSymbol) s;
|
MethodSymbol ms = (MethodSymbol) s;
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ public class RemoteReadGenerator{
|
|||||||
if(entry.forward && entry.where.isServer && needsPlayer){
|
if(entry.forward && entry.where.isServer && needsPlayer){
|
||||||
//call forwarded method
|
//call forwarded method
|
||||||
readBlock.addStatement(packageName + "." + entry.className + "." + entry.element.getSimpleName() +
|
readBlock.addStatement(packageName + "." + entry.className + "." + entry.element.getSimpleName() +
|
||||||
"__forward(player.con.id" + (varResult.length() == 0 ? "" : ", ") + varResult.toString() + ")");
|
"__forward(player.con" + (varResult.length() == 0 ? "" : ", ") + varResult.toString() + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
readBlock.nextControlFlow("catch (java.lang.Exception e)");
|
readBlock.nextControlFlow("catch (java.lang.Exception e)");
|
||||||
|
|||||||
@@ -85,19 +85,19 @@ public class RemoteWriteGenerator{
|
|||||||
|
|
||||||
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
|
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
|
||||||
if(!toAll){
|
if(!toAll){
|
||||||
method.addParameter(int.class, "playerClientID");
|
method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "playerConnection");
|
||||||
}
|
}
|
||||||
|
|
||||||
//add sender to ignore
|
//add sender to ignore
|
||||||
if(forwarded){
|
if(forwarded){
|
||||||
method.addParameter(int.class, "exceptSenderID");
|
method.addParameter(ClassName.bestGuess("io.anuke.mindustry.net.NetConnection"), "exceptConnection");
|
||||||
}
|
}
|
||||||
|
|
||||||
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
|
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
|
||||||
if(!forwarded && methodEntry.local != Loc.none){
|
if(!forwarded && methodEntry.local != Loc.none){
|
||||||
//add in local checks
|
//add in local checks
|
||||||
if(methodEntry.local != Loc.both){
|
if(methodEntry.local != Loc.both){
|
||||||
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.net.Net.active())");
|
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.Vars.net.active())");
|
||||||
}
|
}
|
||||||
|
|
||||||
//concatenate parameters
|
//concatenate parameters
|
||||||
@@ -159,7 +159,7 @@ public class RemoteWriteGenerator{
|
|||||||
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
|
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
|
||||||
|
|
||||||
if(writePlayerSkipCheck){ //write begin check
|
if(writePlayerSkipCheck){ //write begin check
|
||||||
method.beginControlFlow("if(io.anuke.mindustry.net.Net.server())");
|
method.beginControlFlow("if(io.anuke.mindustry.Vars.net.server())");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
|
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
|
||||||
@@ -194,18 +194,18 @@ public class RemoteWriteGenerator{
|
|||||||
|
|
||||||
if(forwarded){ //forward packet
|
if(forwarded){ //forward packet
|
||||||
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
|
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
|
||||||
sendString = "send(";
|
sendString = "io.anuke.mindustry.Vars.net.send(";
|
||||||
}else{
|
}else{
|
||||||
sendString = "sendExcept(exceptSenderID, ";
|
sendString = "io.anuke.mindustry.Vars.net.sendExcept(exceptConnection, ";
|
||||||
}
|
}
|
||||||
}else if(toAll){ //send to all players / to server
|
}else if(toAll){ //send to all players / to server
|
||||||
sendString = "send(";
|
sendString = "io.anuke.mindustry.Vars.net.send(";
|
||||||
}else{ //send to specific client from server
|
}else{ //send to specific client from server
|
||||||
sendString = "sendTo(playerClientID, ";
|
sendString = "playerConnection.send(";
|
||||||
}
|
}
|
||||||
|
|
||||||
//send the actual packet
|
//send the actual packet
|
||||||
method.addStatement("io.anuke.mindustry.net.Net." + sendString + "packet, " +
|
method.addStatement(sendString + "packet, " +
|
||||||
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
|
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
|
||||||
|
|
||||||
|
|
||||||
@@ -217,8 +217,8 @@ public class RemoteWriteGenerator{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getCheckString(Loc loc){
|
private String getCheckString(Loc loc){
|
||||||
return loc.isClient && loc.isServer ? "io.anuke.mindustry.net.Net.server() || io.anuke.mindustry.net.Net.client()" :
|
return loc.isClient && loc.isServer ? "io.anuke.mindustry.Vars.net.server() || io.anuke.mindustry.Vars.net.client()" :
|
||||||
loc.isClient ? "io.anuke.mindustry.net.Net.client()" :
|
loc.isClient ? "io.anuke.mindustry.Vars.net.client()" :
|
||||||
loc.isServer ? "io.anuke.mindustry.net.Net.server()" : "false";
|
loc.isServer ? "io.anuke.mindustry.Vars.net.server()" : "false";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
36
build.gradle
@@ -21,32 +21,24 @@ allprojects{
|
|||||||
|
|
||||||
ext{
|
ext{
|
||||||
versionNumber = '4'
|
versionNumber = '4'
|
||||||
versionModifier = 'release'
|
if(!project.hasProperty("versionModifier")) versionModifier = 'release'
|
||||||
if(!project.hasProperty("versionType")) versionType = 'official'
|
if(!project.hasProperty("versionType")) versionType = 'official'
|
||||||
appName = 'Mindustry'
|
appName = 'Mindustry'
|
||||||
gdxVersion = '1.9.10'
|
gdxVersion = '1.9.10'
|
||||||
roboVMVersion = '2.3.7'
|
roboVMVersion = '2.3.7'
|
||||||
|
steamworksVersion = '1.8.0'
|
||||||
arcHash = null
|
arcHash = null
|
||||||
|
|
||||||
debugged = {
|
debugged = {
|
||||||
return new File(projectDir.parent, '../debug').exists() && !project.hasProperty("release") && project.hasProperty("args")
|
return new File(projectDir.parent, '../Mindustry-Debug').exists() && !project.hasProperty("release") && project.hasProperty("args")
|
||||||
}
|
}
|
||||||
|
|
||||||
localArc = {
|
localArc = {
|
||||||
return (!project.hasProperty("release")) && new File(projectDir.parent, '../Arc').exists()
|
return !project.hasProperty("release") && new File(projectDir.parent, '../Arc').exists()
|
||||||
}
|
}
|
||||||
|
|
||||||
getArcHash = {
|
getArcHash = {
|
||||||
//get latest commit hash from github since JITPack's '-snapshot' version doesn't work correctly
|
return new Properties().with{ p -> p.load(file('gradle.properties').newReader()); return p }["archash"]
|
||||||
if(arcHash == null){
|
|
||||||
try{
|
|
||||||
arcHash = 'git ls-remote https://github.com/Anuken/Arc.git'.execute().text.split("\t")[0]
|
|
||||||
}catch(e){
|
|
||||||
e.printStackTrace()
|
|
||||||
arcHash = "-SNAPSHOT"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return arcHash
|
|
||||||
}
|
}
|
||||||
|
|
||||||
arcModule = { String name ->
|
arcModule = { String name ->
|
||||||
@@ -150,13 +142,15 @@ project(":desktop"){
|
|||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
compile project(":core")
|
compile project(":core")
|
||||||
compile project(":net")
|
|
||||||
|
|
||||||
if(debugged()) compile project(":debug")
|
if(debugged()) compile project(":debug")
|
||||||
|
|
||||||
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
||||||
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
||||||
|
|
||||||
|
compile "com.code-disaster.steamworks4j:steamworks4j:$steamworksVersion"
|
||||||
|
compile "com.code-disaster.steamworks4j:steamworks4j-server:$steamworksVersion"
|
||||||
|
|
||||||
compile arcModule("backends:backend-sdl")
|
compile arcModule("backends:backend-sdl")
|
||||||
compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.2'
|
compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.2'
|
||||||
}
|
}
|
||||||
@@ -175,7 +169,7 @@ project(":ios"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
props['app.id'] = 'io.anuke.mindustry'
|
props['app.id'] = 'io.anuke.mindustry'
|
||||||
props['app.version'] = '4.0'
|
props['app.version'] = '4.2.1'
|
||||||
props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher'
|
props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher'
|
||||||
props['app.executable'] = 'IOSLauncher'
|
props['app.executable'] = 'IOSLauncher'
|
||||||
props['app.name'] = 'Mindustry'
|
props['app.name'] = 'Mindustry'
|
||||||
@@ -185,7 +179,6 @@ project(":ios"){
|
|||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
compile project(":core")
|
compile project(":core")
|
||||||
compile project(":net")
|
|
||||||
compileOnly project(":annotations")
|
compileOnly project(":annotations")
|
||||||
|
|
||||||
compile arcModule("backends:backend-robovm")
|
compile arcModule("backends:backend-robovm")
|
||||||
@@ -201,6 +194,7 @@ project(":core"){
|
|||||||
apply plugin: "java"
|
apply plugin: "java"
|
||||||
|
|
||||||
task preGen{
|
task preGen{
|
||||||
|
outputs.upToDateWhen{ false }
|
||||||
generateLocales()
|
generateLocales()
|
||||||
writeVersion()
|
writeVersion()
|
||||||
}
|
}
|
||||||
@@ -249,7 +243,6 @@ project(":server"){
|
|||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
compile project(":core")
|
compile project(":core")
|
||||||
compile project(":net")
|
|
||||||
compile arcModule("backends:backend-headless")
|
compile arcModule("backends:backend-headless")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -277,7 +270,6 @@ project(":tools"){
|
|||||||
dependencies{
|
dependencies{
|
||||||
compile project(":core")
|
compile project(":core")
|
||||||
|
|
||||||
//for render tests
|
|
||||||
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
||||||
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
||||||
|
|
||||||
@@ -294,14 +286,6 @@ project(":annotations"){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
project(":net"){
|
|
||||||
apply plugin: "java"
|
|
||||||
|
|
||||||
dependencies{
|
|
||||||
compile project(":core")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
task deployAll{
|
task deployAll{
|
||||||
task cleanDeployOutput{
|
task cleanDeployOutput{
|
||||||
doFirst{
|
doFirst{
|
||||||
|
|||||||
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
BIN
core/assets-raw/sprites/blocks/extra/message.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
core/assets-raw/sprites/blocks/units/rally-point.png
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 91 B After Width: | Height: | Size: 91 B |
|
Before Width: | Height: | Size: 95 B After Width: | Height: | Size: 95 B |
BIN
core/assets-raw/sprites/ui/icons/icon-fdroid.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
core/assets-raw/sprites/ui/icons/icon-workshop.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 168 B After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@@ -51,9 +51,19 @@ minimap = Minimap
|
|||||||
close = Close
|
close = Close
|
||||||
website = Website
|
website = Website
|
||||||
quit = Quit
|
quit = Quit
|
||||||
|
save.quit = Save & Quit
|
||||||
maps = Maps
|
maps = Maps
|
||||||
|
maps.browse = Browse Maps
|
||||||
continue = Continue
|
continue = Continue
|
||||||
maps.none = [lightgray]No maps found!
|
maps.none = [lightgray]No maps found!
|
||||||
|
invalid = Invalid
|
||||||
|
preparingconfig = Preparing Config
|
||||||
|
preparingcontent = Preparing Content
|
||||||
|
uploadingcontent = Uploading Content
|
||||||
|
uploadingpreviewfile = Uploading Preview File
|
||||||
|
committingchanges = Comitting Changes
|
||||||
|
done = Done
|
||||||
|
|
||||||
about.button = About
|
about.button = About
|
||||||
name = Name:
|
name = Name:
|
||||||
noname = Pick a[accent] player name[] first.
|
noname = Pick a[accent] player name[] first.
|
||||||
@@ -64,16 +74,18 @@ techtree = Tech Tree
|
|||||||
research.list = [lightgray]Research:
|
research.list = [lightgray]Research:
|
||||||
research = Research
|
research = Research
|
||||||
researched = [lightgray]{0} researched.
|
researched = [lightgray]{0} researched.
|
||||||
players = {0} players online
|
players = {0} players
|
||||||
players.single = {0} player online
|
players.single = {0} player
|
||||||
server.closing = [accent]Closing server...
|
server.closing = [accent]Closing server...
|
||||||
server.kicked.kick = You have been kicked from the server!
|
server.kicked.kick = You have been kicked from the server!
|
||||||
|
server.kicked.whitelist = You are not whitelisted here.
|
||||||
server.kicked.serverClose = Server closed.
|
server.kicked.serverClose = Server closed.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = You have been vote-kicked. Goodbye.
|
||||||
server.kicked.clientOutdated = Outdated client! Update your game!
|
server.kicked.clientOutdated = Outdated client! Update your game!
|
||||||
server.kicked.serverOutdated = Outdated server! Ask the host to update!
|
server.kicked.serverOutdated = Outdated server! Ask the host to update!
|
||||||
server.kicked.banned = You are banned on this server.
|
server.kicked.banned = You are banned on this server.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = This server is not compatible with your build type.
|
||||||
|
server.kicked.playerLimit = This server is full. Wait for an empty slot.
|
||||||
server.kicked.recentKick = You have been kicked recently.\nWait before connecting again.
|
server.kicked.recentKick = You have been kicked recently.\nWait before connecting again.
|
||||||
server.kicked.nameInUse = There is someone with that name\nalready on this server.
|
server.kicked.nameInUse = There is someone with that name\nalready on this server.
|
||||||
server.kicked.nameEmpty = Your chosen name is invalid.
|
server.kicked.nameEmpty = Your chosen name is invalid.
|
||||||
@@ -84,11 +96,13 @@ server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
|
|||||||
host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[lightgray]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. Note that public networks sometimes do not allow server discovery.
|
host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[lightgray]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. Note that public networks sometimes do not allow server discovery.
|
||||||
join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[lightgray]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[lightgray]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
||||||
hostserver = Host Multiplayer Game
|
hostserver = Host Multiplayer Game
|
||||||
|
invitefriends = Invite Friends
|
||||||
hostserver.mobile = Host\nGame
|
hostserver.mobile = Host\nGame
|
||||||
host = Host
|
host = Host
|
||||||
hosting = [accent]Opening server...
|
hosting = [accent]Opening server...
|
||||||
hosts.refresh = Refresh
|
hosts.refresh = Refresh
|
||||||
hosts.discovering = Discovering LAN games
|
hosts.discovering = Discovering LAN games
|
||||||
|
hosts.discovering.any = Discovering games
|
||||||
server.refreshing = Refreshing server
|
server.refreshing = Refreshing server
|
||||||
hosts.none = [lightgray]No local games found!
|
hosts.none = [lightgray]No local games found!
|
||||||
host.invalid = [scarlet]Can't connect to host.
|
host.invalid = [scarlet]Can't connect to host.
|
||||||
@@ -109,22 +123,27 @@ server.edit = Edit Server
|
|||||||
server.outdated = [crimson]Outdated Server![]
|
server.outdated = [crimson]Outdated Server![]
|
||||||
server.outdated.client = [crimson]Outdated Client![]
|
server.outdated.client = [crimson]Outdated Client![]
|
||||||
server.version = [gray]v{0} {1}
|
server.version = [gray]v{0} {1}
|
||||||
server.custombuild = [yellow]Custom Build
|
server.custombuild = [accent]Custom Build
|
||||||
confirmban = Are you sure you want to ban this player?
|
confirmban = Are you sure you want to ban this player?
|
||||||
confirmkick = Are you sure you want to kick this player?
|
confirmkick = Are you sure you want to kick this player?
|
||||||
|
confirmvotekick = Are you sure you want to vote-kick this player?
|
||||||
confirmunban = Are you sure you want to unban this player?
|
confirmunban = Are you sure you want to unban this player?
|
||||||
confirmadmin = Are you sure you want to make this player an admin?
|
confirmadmin = Are you sure you want to make this player an admin?
|
||||||
confirmunadmin = Are you sure you want to remove admin status from this player?
|
confirmunadmin = Are you sure you want to remove admin status from this player?
|
||||||
joingame.title = Join Game
|
joingame.title = Join Game
|
||||||
joingame.ip = Address:
|
joingame.ip = Address:
|
||||||
disconnect = Disconnected.
|
disconnect = Disconnected.
|
||||||
|
disconnect.error = Connection error.
|
||||||
|
disconnect.closed = Connection closed.
|
||||||
|
disconnect.timeout = Timed out.
|
||||||
disconnect.data = Failed to load world data!
|
disconnect.data = Failed to load world data!
|
||||||
|
cantconnect = Unable to join game ([accent]{0}[]).
|
||||||
connecting = [accent]Connecting...
|
connecting = [accent]Connecting...
|
||||||
connecting.data = [accent]Loading world data...
|
connecting.data = [accent]Loading world data...
|
||||||
server.port = Port:
|
server.port = Port:
|
||||||
server.addressinuse = Address already in use!
|
server.addressinuse = Address already in use!
|
||||||
server.invalidport = Invalid port number!
|
server.invalidport = Invalid port number!
|
||||||
server.error = [crimson]Error hosting server: [accent]{0}
|
server.error = [crimson]Error hosting server.
|
||||||
save.old = This save is for an older version of the game, and can no longer be used.\n\n[lightgray]Save backwards compatibility will be implemented in the full 4.0 release.
|
save.old = This save is for an older version of the game, and can no longer be used.\n\n[lightgray]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||||
save.new = New Save
|
save.new = New Save
|
||||||
save.overwrite = Are you sure you want to overwrite\nthis save slot?
|
save.overwrite = Are you sure you want to overwrite\nthis save slot?
|
||||||
@@ -144,6 +163,7 @@ save.rename = Rename
|
|||||||
save.rename.text = New name:
|
save.rename.text = New name:
|
||||||
selectslot = Select a save.
|
selectslot = Select a save.
|
||||||
slot = [accent]Slot {0}
|
slot = [accent]Slot {0}
|
||||||
|
editmessage = Edit Message
|
||||||
save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug.
|
save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug.
|
||||||
empty = <empty>
|
empty = <empty>
|
||||||
on = On
|
on = On
|
||||||
@@ -151,12 +171,13 @@ off = Off
|
|||||||
save.autosave = Autosave: {0}
|
save.autosave = Autosave: {0}
|
||||||
save.map = Map: {0}
|
save.map = Map: {0}
|
||||||
save.wave = Wave {0}
|
save.wave = Wave {0}
|
||||||
save.difficulty = Difficulty: {0}
|
save.mode = Gamemode: {0}
|
||||||
save.date = Last Saved: {0}
|
save.date = Last Saved: {0}
|
||||||
save.playtime = Playtime: {0}
|
save.playtime = Playtime: {0}
|
||||||
warning = Warning.
|
warning = Warning.
|
||||||
confirm = Confirm
|
confirm = Confirm
|
||||||
delete = Delete
|
delete = Delete
|
||||||
|
view.workshop = View In Workshop
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Open
|
open = Open
|
||||||
customize = Customize Rules
|
customize = Customize Rules
|
||||||
@@ -193,6 +214,11 @@ map.nospawn = This map does not have any cores for the player to spawn in! Add a
|
|||||||
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor.
|
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor.
|
||||||
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
|
map.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.
|
map.invalid = Error loading map: corrupted or invalid map file.
|
||||||
|
map.publish.error = Error publishing map: {0}
|
||||||
|
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up!
|
||||||
|
eula = Steam EULA
|
||||||
|
map.publish = Map published.
|
||||||
|
map.publishing = [accent]Publishing map...
|
||||||
editor.brush = Brush
|
editor.brush = Brush
|
||||||
editor.openin = Open In Editor
|
editor.openin = Open In Editor
|
||||||
editor.oregen = Ore Generation
|
editor.oregen = Ore Generation
|
||||||
@@ -200,11 +226,14 @@ editor.oregen.info = Ore Generation:
|
|||||||
editor.mapinfo = Map Info
|
editor.mapinfo = Map Info
|
||||||
editor.author = Author:
|
editor.author = Author:
|
||||||
editor.description = Description:
|
editor.description = Description:
|
||||||
|
editor.nodescription = A map must have a description of at least 4 characters before being published.
|
||||||
editor.waves = Waves:
|
editor.waves = Waves:
|
||||||
editor.rules = Rules:
|
editor.rules = Rules:
|
||||||
editor.generation = Generation:
|
editor.generation = Generation:
|
||||||
editor.ingame = Edit In-Game
|
editor.ingame = Edit In-Game
|
||||||
|
editor.publish.workshop = Publish On Workshop
|
||||||
editor.newmap = New Map
|
editor.newmap = New Map
|
||||||
|
workshop = Workshop
|
||||||
waves.title = Waves
|
waves.title = Waves
|
||||||
waves.remove = Remove
|
waves.remove = Remove
|
||||||
waves.never = <never>
|
waves.never = <never>
|
||||||
@@ -221,15 +250,17 @@ waves.invalid = Invalid waves in clipboard.
|
|||||||
waves.copied = Waves copied.
|
waves.copied = Waves copied.
|
||||||
waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout.
|
waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout.
|
||||||
editor.default = [lightgray]<Default>
|
editor.default = [lightgray]<Default>
|
||||||
|
details = Details...
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Name:
|
editor.name = Name:
|
||||||
editor.spawn = Spawn Unit
|
editor.spawn = Spawn Unit
|
||||||
editor.removeunit = Remove Unit
|
editor.removeunit = Remove Unit
|
||||||
editor.teams = Teams
|
editor.teams = Teams
|
||||||
editor.errorload = Error loading file:\n[accent]{0}
|
editor.errorload = Error loading file.
|
||||||
editor.errorsave = Error saving file:\n[accent]{0}
|
editor.errorsave = Error saving file.
|
||||||
editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor.
|
editor.errorimage = That's an image, not a map.\n\nIf you want to import a 3.5/build 40 map, use the 'Import Legacy Map' button in the editor.
|
||||||
editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported.
|
editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported.
|
||||||
|
editor.errornot = This is not a map file.
|
||||||
editor.errorheader = This map file is either not valid or corrupt.
|
editor.errorheader = This map file is either not valid or corrupt.
|
||||||
editor.errorname = Map has no name defined. Are you trying to load a save file?
|
editor.errorname = Map has no name defined. Are you trying to load a save file?
|
||||||
editor.update = Update
|
editor.update = Update
|
||||||
@@ -248,7 +279,7 @@ editor.importmap = Import Map
|
|||||||
editor.importmap.description = Import an already existing map
|
editor.importmap.description = Import an already existing map
|
||||||
editor.importfile = Import File
|
editor.importfile = Import File
|
||||||
editor.importfile.description = Import an external map file
|
editor.importfile.description = Import an external map file
|
||||||
editor.importimage = Import Legacy Image
|
editor.importimage = Import Legacy Map
|
||||||
editor.importimage.description = Import an external map image file
|
editor.importimage.description = Import an external map image file
|
||||||
editor.export = Export...
|
editor.export = Export...
|
||||||
editor.exportfile = Export File
|
editor.exportfile = Export File
|
||||||
@@ -262,6 +293,7 @@ editor.resizemap = Resize Map
|
|||||||
editor.mapname = Map Name:
|
editor.mapname = Map Name:
|
||||||
editor.overwrite = [accent]Warning!\nThis overwrites an existing map.
|
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.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||||
|
editor.exists = A map with this name already exists.
|
||||||
editor.selectmap = Select a map to load:
|
editor.selectmap = Select a map to load:
|
||||||
|
|
||||||
toolmode.replace = Replace
|
toolmode.replace = Replace
|
||||||
@@ -345,6 +377,7 @@ launch.skip.confirm = If you skip now, you will not be able to launch until late
|
|||||||
uncover = Uncover
|
uncover = Uncover
|
||||||
configure = Configure Loadout
|
configure = Configure Loadout
|
||||||
configure.locked = [lightgray]Unlock configuring loadout: Wave {0}.
|
configure.locked = [lightgray]Unlock configuring loadout: Wave {0}.
|
||||||
|
configure.invalid = Amount must be a number between 0 and {0}.
|
||||||
zone.unlocked = [lightgray]{0} unlocked.
|
zone.unlocked = [lightgray]{0} unlocked.
|
||||||
zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
|
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.
|
||||||
@@ -445,6 +478,7 @@ blocks.boosteffect = Boost Effect
|
|||||||
blocks.maxunits = Max Active Units
|
blocks.maxunits = Max Active Units
|
||||||
blocks.health = Health
|
blocks.health = Health
|
||||||
blocks.buildtime = Build Time
|
blocks.buildtime = Build Time
|
||||||
|
blocks.buildcost = Build Cost
|
||||||
blocks.inaccuracy = Inaccuracy
|
blocks.inaccuracy = Inaccuracy
|
||||||
blocks.shots = Shots
|
blocks.shots = Shots
|
||||||
blocks.reload = Shots/Second
|
blocks.reload = Shots/Second
|
||||||
@@ -454,9 +488,11 @@ bar.drilltierreq = Better Drill Required
|
|||||||
bar.drillspeed = Drill Speed: {0}/s
|
bar.drillspeed = Drill Speed: {0}/s
|
||||||
bar.efficiency = Efficiency: {0}%
|
bar.efficiency = Efficiency: {0}%
|
||||||
bar.powerbalance = Power: {0}/s
|
bar.powerbalance = Power: {0}/s
|
||||||
|
bar.powerstored = Stored: {0}/{1}
|
||||||
bar.poweramount = Power: {0}
|
bar.poweramount = Power: {0}
|
||||||
bar.poweroutput = Power Output: {0}
|
bar.poweroutput = Power Output: {0}
|
||||||
bar.items = Items: {0}
|
bar.items = Items: {0}
|
||||||
|
bar.capacity = Capacity: {0}
|
||||||
bar.liquid = Liquid
|
bar.liquid = Liquid
|
||||||
bar.heat = Heat
|
bar.heat = Heat
|
||||||
bar.power = Power
|
bar.power = Power
|
||||||
@@ -503,6 +539,7 @@ setting.antialias.name = Antialias[lightgray] (requires restart)[]
|
|||||||
setting.indicators.name = Enemy/Ally Indicators
|
setting.indicators.name = Enemy/Ally Indicators
|
||||||
setting.autotarget.name = Auto-Target
|
setting.autotarget.name = Auto-Target
|
||||||
setting.keyboard.name = Mouse+Keyboard Controls
|
setting.keyboard.name = Mouse+Keyboard Controls
|
||||||
|
setting.touchscreen.name = Touchscreen Controls
|
||||||
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
|
||||||
@@ -533,8 +570,9 @@ setting.sfxvol.name = SFX Volume
|
|||||||
setting.mutesound.name = Mute Sound
|
setting.mutesound.name = Mute Sound
|
||||||
setting.crashreport.name = Send Anonymous Crash Reports
|
setting.crashreport.name = Send Anonymous Crash Reports
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = Auto-Create Saves
|
||||||
|
setting.publichost.name = Public Game Visibility
|
||||||
setting.chatopacity.name = Chat Opacity
|
setting.chatopacity.name = Chat Opacity
|
||||||
setting.playerchat.name = Display In-Game Chat
|
setting.playerchat.name = Display Player Bubble Chat
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
|
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds...
|
||||||
uiscale.cancel = Cancel & Exit
|
uiscale.cancel = Cancel & Exit
|
||||||
setting.bloom.name = Bloom
|
setting.bloom.name = Bloom
|
||||||
@@ -544,8 +582,8 @@ category.general.name = General
|
|||||||
category.view.name = View
|
category.view.name = View
|
||||||
category.multiplayer.name = Multiplayer
|
category.multiplayer.name = Multiplayer
|
||||||
command.attack = Attack
|
command.attack = Attack
|
||||||
|
command.rally = Rally
|
||||||
command.retreat = Retreat
|
command.retreat = Retreat
|
||||||
command.patrol = Patrol
|
|
||||||
keybind.gridMode.name = Block Select
|
keybind.gridMode.name = Block Select
|
||||||
keybind.gridModeShift.name = Category Select
|
keybind.gridModeShift.name = Category Select
|
||||||
keybind.press = Press a key...
|
keybind.press = Press a key...
|
||||||
@@ -764,10 +802,13 @@ block.hail.name = Hail
|
|||||||
block.lancer.name = Lancer
|
block.lancer.name = Lancer
|
||||||
block.conveyor.name = Conveyor
|
block.conveyor.name = Conveyor
|
||||||
block.titanium-conveyor.name = Titanium Conveyor
|
block.titanium-conveyor.name = Titanium Conveyor
|
||||||
|
block.armored-conveyor.name = Armored Conveyor
|
||||||
|
block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors.
|
||||||
block.junction.name = Junction
|
block.junction.name = Junction
|
||||||
block.router.name = Router
|
block.router.name = Router
|
||||||
block.distributor.name = Distributor
|
block.distributor.name = Distributor
|
||||||
block.sorter.name = Sorter
|
block.sorter.name = Sorter
|
||||||
|
block.message.name = Message
|
||||||
block.overflow-gate.name = Overflow Gate
|
block.overflow-gate.name = Overflow Gate
|
||||||
block.silicon-smelter.name = Silicon Smelter
|
block.silicon-smelter.name = Silicon Smelter
|
||||||
block.phase-weaver.name = Phase Weaver
|
block.phase-weaver.name = Phase Weaver
|
||||||
@@ -885,11 +926,11 @@ unit.lich.name = Lich
|
|||||||
unit.reaper.name = Reaper
|
unit.reaper.name = Reaper
|
||||||
tutorial.next = [lightgray]<Tap to continue>
|
tutorial.next = [lightgray]<Tap to continue>
|
||||||
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\n[accent]Right-click[] to stop building.
|
tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\n[accent]Right-click[] to stop building, and[accent] Hold Ctrl while scrolling[] to zoom in and out.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
||||||
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
||||||
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
|
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
|
||||||
tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
|
tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
|
||||||
tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base.
|
tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base.
|
||||||
tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1
|
tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1
|
||||||
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
||||||
@@ -904,7 +945,6 @@ tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 wav
|
|||||||
tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
|
tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
|
||||||
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
||||||
|
|
||||||
|
|
||||||
item.copper.description = The most basic structural material. Used extensively in all types of blocks.
|
item.copper.description = The most basic structural material. Used extensively in all types of blocks.
|
||||||
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks.
|
||||||
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
|
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
|
||||||
@@ -944,6 +984,7 @@ unit.eruptor.description = A heavy mech designed to take down structures. Fires
|
|||||||
unit.wraith.description = A fast, hit-and-run interceptor unit. Targets power generators.
|
unit.wraith.description = A fast, hit-and-run interceptor unit. Targets power generators.
|
||||||
unit.ghoul.description = A heavy carpet bomber. Rips through enemy structures, targeting critical infrastructure.
|
unit.ghoul.description = A heavy carpet bomber. Rips through enemy structures, targeting critical infrastructure.
|
||||||
unit.revenant.description = A heavy, hovering missile array.
|
unit.revenant.description = A heavy, hovering missile array.
|
||||||
|
block.message.description = Stores a message. Used for communication between allies.
|
||||||
block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite.
|
block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite.
|
||||||
block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently.
|
block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently.
|
||||||
block.silicon-smelter.description = Reduces sand with pure coal. Produces silicon.
|
block.silicon-smelter.description = Reduces sand with pure coal. Produces silicon.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ contributors = Překladatelé a Sponzoři
|
|||||||
discord = Připoj se k Mindustry na Discordu!
|
discord = Připoj se k Mindustry na Discordu!
|
||||||
link.discord.description = Oficiální Mindustry chatroom na Discordu!
|
link.discord.description = Oficiální Mindustry chatroom na Discordu!
|
||||||
link.github.description = Zdrojový kód hry
|
link.github.description = Zdrojový kód hry
|
||||||
link.changelog.description = List of update changes
|
link.changelog.description = Seznam úprav
|
||||||
link.dev-builds.description = Nestabilní verze vývoje hry
|
link.dev-builds.description = Nestabilní verze vývoje hry
|
||||||
link.trello.description = Oficiální Trello board pro plánované funkce
|
link.trello.description = Oficiální Trello board pro plánované funkce
|
||||||
link.itch.io.description = itch.io stránka pro stažení PC nebo webové verze
|
link.itch.io.description = itch.io stránka pro stažení PC nebo webové verze
|
||||||
@@ -12,55 +12,55 @@ link.google-play.description = Google Play store
|
|||||||
link.wiki.description = Oficiální Mindustry wiki
|
link.wiki.description = Oficiální Mindustry wiki
|
||||||
linkfail = Nepodařilo se otevřít odkaz!\nURL byla zkopírována do schránky.
|
linkfail = Nepodařilo se otevřít odkaz!\nURL byla zkopírována do schránky.
|
||||||
screenshot = Snímek obrazovky uložen {0}
|
screenshot = Snímek obrazovky uložen {0}
|
||||||
screenshot.invalid = Map too large, potentially not enough memory for screenshot.
|
screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro snímek obrazovky.
|
||||||
gameover = Konec hry
|
gameover = Konec hry
|
||||||
gameover.pvp = [accent] {0}[] Tým Vyhrál!
|
gameover.pvp = [accent] {0}[] Tým Vyhrál!
|
||||||
highscore = [accent]Nový Rekord!
|
highscore = [accent]Nový rekord!
|
||||||
load.sound = Sounds
|
load.sound = Zvuky
|
||||||
load.map = Maps
|
load.map = Mapy
|
||||||
load.image = Images
|
load.image = Obrázky
|
||||||
load.content = Content
|
load.content = Obsah
|
||||||
load.system = System
|
load.system = System
|
||||||
stat.wave = Waves Defeated:[accent] {0}
|
stat.wave = Vln poraženo:[accent] {0}
|
||||||
stat.enemiesDestroyed = Enemies Destroyed:[accent] {0}
|
stat.enemiesDestroyed = Nepřátel zničeno:[accent] {0}
|
||||||
stat.built = Buildings Built:[accent] {0}
|
stat.built = Budov postaveno:[accent] {0}
|
||||||
stat.destroyed = Buildings Destroyed:[accent] {0}
|
stat.destroyed = Budov zničeno:[accent] {0}
|
||||||
stat.deconstructed = Buildings Deconstructed:[accent] {0}
|
stat.deconstructed = Budov rozebráno:[accent] {0}
|
||||||
stat.delivered = Resources Launched:
|
stat.delivered = Materiálu odesláno:
|
||||||
stat.rank = Final Rank: [accent]{0}
|
stat.rank = Závěrečné hodnocení: [accent]{0}
|
||||||
launcheditems = [accent]Launched Items
|
launcheditems = [accent]Odeslané předměty
|
||||||
map.delete = Jsi si jistý že chceš smazat mapu "[accent]{0}[]"?
|
map.delete = Jsi si jistý že chceš smazat mapu "[accent]{0}[]"?
|
||||||
level.highscore = Nejvyšší skóre: [accent]{0}
|
level.highscore = Nejvyšší skóre: [accent]{0}
|
||||||
level.select = Výběr levelu
|
level.select = Výběr levelu
|
||||||
level.mode = Herní mód:
|
level.mode = Herní mód:
|
||||||
showagain = Znovu neukazovat !
|
showagain = Znovu neukazovat !
|
||||||
coreattack = < Jádro je pod útokem! >
|
coreattack = < Jádro je pod útokem! >
|
||||||
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
|
nearpoint = [[ [scarlet]IHNED OPUSŤTE PROSTOR VÝSADKŮ[] ]\nNebezpečí okamžité smrti
|
||||||
database = Core Database
|
database = Databáze objektů
|
||||||
savegame = Uložit hru
|
savegame = Uložit hru
|
||||||
loadgame = Načíst hru
|
loadgame = Načíst hru
|
||||||
joingame = Připojit se ke hře
|
joingame = Připojit se ke hře
|
||||||
addplayers = Přidat/Odebrat hráče
|
addplayers = Přidat/Odebrat hráče
|
||||||
customgame = Vlastní hra
|
customgame = Vlastní hra
|
||||||
newgame = New Game
|
newgame = Nová hra
|
||||||
none = <none>
|
none = <žádný>
|
||||||
minimap = Minimap
|
minimap = Minimapa
|
||||||
close = Zavřít
|
close = Zavřít
|
||||||
website = Website
|
website = Web. stránky
|
||||||
quit = Ukončit
|
quit = Ukončit
|
||||||
maps = Mapy
|
maps = Mapy
|
||||||
continue = Pokračovat
|
continue = Pokračovat
|
||||||
maps.none = [LIGHT_GRAY]Žádné mapy nebyly nalezeny!
|
maps.none = [LIGHT_GRAY]Žádné mapy nebyly nalezeny!
|
||||||
about.button = O hře
|
about.button = O hře
|
||||||
name = Name:
|
name = Jméno:
|
||||||
noname = Nejdřív si vyber[accent] herní jméno[].
|
noname = Nejdřív si vyber[accent] herní jméno[].
|
||||||
filename = Jméno složky:
|
filename = Jméno složky:
|
||||||
unlocked = Nový blok odemknut!
|
unlocked = Nový blok odemknut!
|
||||||
completed = [accent]Completed
|
completed = [accent]Dokončeno
|
||||||
techtree = Tech Tree
|
techtree = Technologie
|
||||||
research.list = [LIGHT_GRAY]Research:
|
research.list = [LIGHT_GRAY]Výzkum:
|
||||||
research = Research
|
research = Zkoumej
|
||||||
researched = [LIGHT_GRAY]{0} researched.
|
researched = [LIGHT_GRAY]{0} vyzkoumán(o).
|
||||||
players = {0} hráčů online
|
players = {0} hráčů online
|
||||||
players.single = {0} hráč online
|
players.single = {0} hráč online
|
||||||
server.closing = [accent]Zavírám server...
|
server.closing = [accent]Zavírám server...
|
||||||
@@ -76,8 +76,8 @@ server.kicked.nameInUse = Někdo se stejným jménem\nje aktuálně na serveru.
|
|||||||
server.kicked.nameEmpty = Tvé jméno je neplatné.
|
server.kicked.nameEmpty = Tvé jméno je neplatné.
|
||||||
server.kicked.idInUse = Již jsi na tomhle serveru připojen! Připojování se dvěma účty není povoleno.
|
server.kicked.idInUse = Již jsi na tomhle serveru připojen! Připojování se dvěma účty není povoleno.
|
||||||
server.kicked.customClient = Tento server nepodporuje vlastní verze hry. Stáhni si oficiální verzi.
|
server.kicked.customClient = Tento server nepodporuje vlastní verze hry. Stáhni si oficiální verzi.
|
||||||
server.kicked.gameover = Game over!
|
server.kicked.gameover = Konec hry!
|
||||||
server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
|
server.versions = Verze klienta:[accent] {0}[]\nVerze serveru:[accent] {1}[]
|
||||||
host.info = [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [LIGHT_GRAY]wifi nebo místní síti[] by měl vidět server ve svém listu serverů.\n\nJestli chcete aby se uživatelé připojovali odkudkoliv pomocí IP, [accent]přesměrování portů[] je nutné.\n\n[LIGHT_GRAY]Poznámka: Jestli někdo má problém s připojením ke své LAN hře, ujistěte se že má Mindustry povolený přístup k místní síti v nastavení Firewallu.
|
host.info = [accent]hostitel[] hostuje server na portu [scarlet]6567[]. \nKdokoliv na stejné [LIGHT_GRAY]wifi nebo místní síti[] by měl vidět server ve svém listu serverů.\n\nJestli chcete aby se uživatelé připojovali odkudkoliv pomocí IP, [accent]přesměrování portů[] je nutné.\n\n[LIGHT_GRAY]Poznámka: Jestli někdo má problém s připojením ke své LAN hře, ujistěte se že má Mindustry povolený přístup k místní síti v nastavení Firewallu.
|
||||||
join.info = Tady můžeš vložit [accent]IP serveru[] ke kterému se chceš připojit, nebo objevit [accent]Servery Místní sítě[] ke kterým se chceš připojit.\nLAN i Multiplayer jsou podporovány.\n\n[LIGHT_GRAY]Poznámka: Není žádný globální seznam serverů; Pokud se budeš chtít připojit k někomu pomocí IP, budeš jí muset znát od hostitele.
|
join.info = Tady můžeš vložit [accent]IP serveru[] ke kterému se chceš připojit, nebo objevit [accent]Servery Místní sítě[] ke kterým se chceš připojit.\nLAN i Multiplayer jsou podporovány.\n\n[LIGHT_GRAY]Poznámka: Není žádný globální seznam serverů; Pokud se budeš chtít připojit k někomu pomocí IP, budeš jí muset znát od hostitele.
|
||||||
hostserver = Hostovat hru
|
hostserver = Hostovat hru
|
||||||
@@ -151,30 +151,30 @@ save.wave = Vlna {0}
|
|||||||
save.difficulty = Obtížnost: {0}
|
save.difficulty = Obtížnost: {0}
|
||||||
save.date = Naposledy uloženo: {0}
|
save.date = Naposledy uloženo: {0}
|
||||||
save.playtime = Herní čas: {0}
|
save.playtime = Herní čas: {0}
|
||||||
warning = Warning.
|
warning = Varování.
|
||||||
confirm = Potvrdit
|
confirm = Potvrdit
|
||||||
delete = Smazat
|
delete = Smazat
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Otevřít
|
open = Otevřít
|
||||||
customize = Customize
|
customize = Přizpůsobit
|
||||||
cancel = Zrušit
|
cancel = Zrušit
|
||||||
openlink = Otevřít Odkaz
|
openlink = Otevřít Odkaz
|
||||||
copylink = Zkopírovat Odkaz
|
copylink = Zkopírovat Odkaz
|
||||||
back = Zpět
|
back = Zpět
|
||||||
data.export = Export Data
|
data.export = Exportuj Data
|
||||||
data.import = Import Data
|
data.import = Importuj Data
|
||||||
data.exported = Data exported.
|
data.exported = Data exportována.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Neplatná herní data.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Import externích dat smaže[scarlet] všechna[] vaše současná herní data.\n[accent]To nelze vrátit zpět![]\n\nPo importu data se hra ukončí.
|
||||||
classic.export = Export Classic Data
|
classic.export = Exportovat klasická data
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
||||||
quit.confirm = Jsi si jistý že chceš ukončit ?
|
quit.confirm = Jsi si jistý že chceš ukončit ?
|
||||||
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
|
quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[]
|
||||||
loading = [accent]Načítám...
|
loading = [accent]Načítám...
|
||||||
saving = [accent]Ukládám...
|
saving = [accent]Ukládám...
|
||||||
wave = [accent]Vlna {0}
|
wave = [accent]Vlna {0}
|
||||||
wave.waiting = [LIGHT_GRAY]Vlna za {0}
|
wave.waiting = [LIGHT_GRAY]Vlna za {0}
|
||||||
wave.waveInProgress = [LIGHT_GRAY]Wave in progress
|
wave.waveInProgress = [LIGHT_GRAY]Vlna v pohybu
|
||||||
waiting = [LIGHT_GRAY]Čekám...
|
waiting = [LIGHT_GRAY]Čekám...
|
||||||
waiting.players = Čekání na hráče...
|
waiting.players = Čekání na hráče...
|
||||||
wave.enemies = [LIGHT_GRAY]{0} Nepřátel zbývá
|
wave.enemies = [LIGHT_GRAY]{0} Nepřátel zbývá
|
||||||
@@ -186,9 +186,9 @@ custom = Vlastní
|
|||||||
builtin = Zabudovaný
|
builtin = Zabudovaný
|
||||||
map.delete.confirm = Jsi si jistý žechceš tuto mapu smazat? tato akce je nevratná!
|
map.delete.confirm = Jsi si jistý žechceš tuto mapu smazat? tato akce je nevratná!
|
||||||
map.random = [accent]Náhodná mapa
|
map.random = [accent]Náhodná mapa
|
||||||
map.nospawn = Tato mapa nemá žádná jádra pro hráče ke spawnutí! přidej[ROYAL] blue[] jádro na tuto mapu v editoru.
|
map.nospawn = Tato mapa nemá žádné jádro pro hráče ke spawnutí! Přidej v editoru do této mapy[ROYAL] modré[] jádro.
|
||||||
map.nospawn.pvp = Tato mapa nemá žádné nepřátelské jádra pro hráče ke spawnutí! přidej[SCARLET] red[] jádro na tuto mapu v editoru.
|
map.nospawn.pvp = Tato mapa nemá žádné nepřátelské jádro pro druhého hráče! Přidej v editoru do této mapy[SCARLET] červené[] jádro.
|
||||||
map.nospawn.attack = 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 = Tato mapa nemá žádná nepřátelská jádra ke zničení! Přidej v editoru do této mapy [SCARLET] červené[] jádro.
|
||||||
map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy.
|
map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy.
|
||||||
editor.brush = Štětec
|
editor.brush = Štětec
|
||||||
editor.openin = Otevřít v editoru.
|
editor.openin = Otevřít v editoru.
|
||||||
@@ -197,11 +197,11 @@ editor.oregen.info = Generování nerostných zdrojů:
|
|||||||
editor.mapinfo = Informace o mapě
|
editor.mapinfo = Informace o mapě
|
||||||
editor.author = Autor:
|
editor.author = Autor:
|
||||||
editor.description = Popis:
|
editor.description = Popis:
|
||||||
editor.waves = Waves:
|
editor.waves = Vln:
|
||||||
editor.rules = Rules:
|
editor.rules = Pravidla:
|
||||||
editor.generation = Generation:
|
editor.generation = Generation:
|
||||||
editor.ingame = Edit In-Game
|
editor.ingame = Edit In-Game
|
||||||
editor.newmap = New Map
|
editor.newmap = Nová mapa
|
||||||
waves.title = Waves
|
waves.title = Waves
|
||||||
waves.remove = Remove
|
waves.remove = Remove
|
||||||
waves.never = <never>
|
waves.never = <never>
|
||||||
@@ -868,7 +868,7 @@ unit.lich.name = Lich
|
|||||||
unit.reaper.name = Reaper
|
unit.reaper.name = Reaper
|
||||||
tutorial.next = [lightgray]<Tap to continue>
|
tutorial.next = [lightgray]<Tap to continue>
|
||||||
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.drill = Manuální zěžba je neefektivní.\n[accent]Vrty []budou těžit automaticky.\npolož jeden na měděnou rudu.
|
tutorial.drill = Manuální těžba je neefektivní.\n[accent]Vrty []budou těžit automaticky.\npolož jeden na měděnou rudu.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
||||||
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
||||||
tutorial.conveyor = [accent]Dopravníky[] jsou zapotřebí k dopravě materiálu k jádru.\nVytvoř řadu dopravníku od vrtu až k jádru.
|
tutorial.conveyor = [accent]Dopravníky[] jsou zapotřebí k dopravě materiálu k jádru.\nVytvoř řadu dopravníku od vrtu až k jádru.
|
||||||
@@ -959,7 +959,7 @@ block.surge-wall-large.description = Nejsilnější defenzivní blok.\nMá malou
|
|||||||
block.door.description = Malé dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz.
|
block.door.description = Malé dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz.
|
||||||
block.door-large.description = Velké dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz.\nZabírá více polí.
|
block.door-large.description = Velké dveře, které se dají otevřít nebo zavřít kliknutím na ně.\nKdyž otevřené nepřátelé mohou střílet a dostat se skrz.\nZabírá více polí.
|
||||||
block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency.
|
block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency.
|
||||||
block.mend-projector.description = Kontinuálně léčí bloky ve poli svého působení.
|
block.mend-projector.description = Kontinuálně léčí bloky v poli svého působení.
|
||||||
block.overdrive-projector.description = Zrychluje funkce blízkých struktůr jako jsou vrty a dopravníky.
|
block.overdrive-projector.description = Zrychluje funkce blízkých struktůr jako jsou vrty a dopravníky.
|
||||||
block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, chrání jednotky a budovy uvnitř sebe vůči střelám.
|
block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, chrání jednotky a budovy uvnitř sebe vůči střelám.
|
||||||
block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Skoro neviditelné nepřáteli.
|
block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Skoro neviditelné nepřáteli.
|
||||||
@@ -973,7 +973,7 @@ block.router.description = Příijmá předměty z jednoho směru a posílá je
|
|||||||
block.distributor.description = Pokročilý směrovač, který z libovolného počtu vstupů vytvoří libovolný počet výstupu a rozdělí přísun předmětů rovnoměrně do každého z nich, obdoba Multiplexeru a Demultiplexeru.
|
block.distributor.description = Pokročilý směrovač, který z libovolného počtu vstupů vytvoří libovolný počet výstupu a rozdělí přísun předmětů rovnoměrně do každého z nich, obdoba Multiplexeru a Demultiplexeru.
|
||||||
block.overflow-gate.description = Kombinace distributoru a děličky která má výstup do leva nebo do prava jen pokud je přední strana zablokovaná.
|
block.overflow-gate.description = Kombinace distributoru a děličky která má výstup do leva nebo do prava jen pokud je přední strana zablokovaná.
|
||||||
block.mass-driver.description = Ultimátní blok přepravy předmětů. Sbírá několik druhů předmětů a vystřelí je k dalšímu hromadnému distributoru přes veliké vzdálenosti.
|
block.mass-driver.description = Ultimátní blok přepravy předmětů. Sbírá několik druhů předmětů a vystřelí je k dalšímu hromadnému distributoru přes veliké vzdálenosti.
|
||||||
block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžaduje nergii k provozu.
|
block.mechanical-pump.description = Levná pumpa s pomalým tokem, ale nevyžaduje energii k provozu.
|
||||||
block.rotary-pump.description = Pokročilá pumpa která, zdvojnásobuje přísun tekutin za použití energie.
|
block.rotary-pump.description = Pokročilá pumpa která, zdvojnásobuje přísun tekutin za použití energie.
|
||||||
block.thermal-pump.description = Ultimátní pumpa. Trojnásobně rychlejší než mechanická pumpa a jediná pumpa která dokáže pracovat s lávou.
|
block.thermal-pump.description = Ultimátní pumpa. Trojnásobně rychlejší než mechanická pumpa a jediná pumpa která dokáže pracovat s lávou.
|
||||||
block.conduit.description = Základní blok přepravy tekutin. Funguje jako dopravník, ale na tekutiny, chápeš ne ? Užívá se s extraktory, pumpami nebo jiným potrubím.
|
block.conduit.description = Základní blok přepravy tekutin. Funguje jako dopravník, ale na tekutiny, chápeš ne ? Užívá se s extraktory, pumpami nebo jiným potrubím.
|
||||||
@@ -998,7 +998,7 @@ block.solar-panel-large.description = Poskytuje mnohem lepší zdroj energie ne
|
|||||||
block.thorium-reactor.description = Generuje obrovské množství energie z radioaktivního thoria. Vyžaduje konstantní chlazení. Způsobí velikou explozi je-li zásobován nedostatečným množstvím chlazení. Výstup energie závisí na plnosti obsahu generátoru, základní generování energie se aktivuje při poloviční kapacitě.
|
block.thorium-reactor.description = Generuje obrovské množství energie z radioaktivního thoria. Vyžaduje konstantní chlazení. Způsobí velikou explozi je-li zásobován nedostatečným množstvím chlazení. Výstup energie závisí na plnosti obsahu generátoru, základní generování energie se aktivuje při poloviční kapacitě.
|
||||||
block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process.
|
block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process.
|
||||||
block.mechanical-drill.description = Levný vrt. Při položení na vhodné pole, natrvalo a pomalu produkuje materiál na který byl položen.
|
block.mechanical-drill.description = Levný vrt. Při položení na vhodné pole, natrvalo a pomalu produkuje materiál na který byl položen.
|
||||||
block.pneumatic-drill.description = Vylepšený vrt, který je rychlejší a je schopen zpracovat trdší materiály za pomocí tlaku.
|
block.pneumatic-drill.description = Vylepšený vrt, který je rychlejší a je schopen zpracovat tvrdší materiály za pomocí tlaku.
|
||||||
block.laser-drill.description = Dovoluje vrtat ještě rychleji díky laserové technologii, požaduje energii k provozu. Dodatečně, dokáže vrtat žíly radioaktivního thoria.
|
block.laser-drill.description = Dovoluje vrtat ještě rychleji díky laserové technologii, požaduje energii k provozu. Dodatečně, dokáže vrtat žíly radioaktivního thoria.
|
||||||
block.blast-drill.description = Ultimátní vrt, vyžaduje velké množství energie k provozu.
|
block.blast-drill.description = Ultimátní vrt, vyžaduje velké množství energie k provozu.
|
||||||
block.water-extractor.description = Extrahuje vodu ze země. Vhodný k použití když se v oblasti nenachází zdroj vody.
|
block.water-extractor.description = Extrahuje vodu ze země. Vhodný k použití když se v oblasti nenachází zdroj vody.
|
||||||
|
|||||||
@@ -866,26 +866,26 @@ unit.chaos-array.name = Chaos Array
|
|||||||
unit.eradicator.name = Eradicator
|
unit.eradicator.name = Eradicator
|
||||||
unit.lich.name = Lich
|
unit.lich.name = Lich
|
||||||
unit.reaper.name = Reaper
|
unit.reaper.name = Reaper
|
||||||
tutorial.next = [lightgray]<Tap to continue>
|
tutorial.next = [lightgray]<Tippen um fortzufahren>
|
||||||
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro = Du befindest dich im[scarlet] Mindustry-Tutorial.[]\nBeginne, indem du[accent] Kupfer abbaust[]. Tippe dazu auf ein Kupfervorkommen in der Nähe deiner Basis.\n\n[accent]{0}/{1} Kupfer
|
||||||
tutorial.drill = Manuelles Abbauen von Ressourcen ist ineffizient.\n[accent]Bohrer[] können automatisch abbauen.\n Platziere einen auf einem Kupfer Vorkommen.
|
tutorial.drill = Manuelles Abbauen ist ineffizient.\n[accent]Bohrer []können automatisch abbauen.\nTippe auf den Bohrer Tab unten rechts.\nWähle den[accent] Mechanischen Bohrer[].\nPlatziere ihn durch Tippen auf ein Kupfervorkommen.\nMit einem [accent]Rechtsklick[] brichst du den Bau ab.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Manuelles Abbauen ist ineffizient.\n[accent]Bohrer []können automatisch abbauen.\nTippe auf den Bohrer Tab unten rechts.\nWähle den[accent] Mechanischen Bohrer[].\nPlatziere ihn durch Tippen auf ein Kupfervorkommen, dann klicke auf das[accent] Häkchen[] unten um deine Auswahl zu bestätigen.\nKlicke auf den[accent] X-Button[] um den Bau abzubrechen.
|
||||||
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
tutorial.blockinfo = Jeder Block hat unterschiedliche Eigenschaften. Jeder Bohrer kann immer nur ein bestimmtes Material abbauen.\nFür Infos und Stats eines Blocks wähle einen Block im Baumenü aus und [accent] klicke auf den "?"-Button.[]\n\n[accent]Schau dir jetzt die Stats des Mechanischen Bohrers an.[]
|
||||||
tutorial.conveyor = [accent]Transportbänder[] werden dazu benutzt Materialien zum Kern zu transportieren.\n Erstelle eine Reihe von Transportbändern zum Kern.
|
tutorial.conveyor = Mit [accent]Förderbändern[] werden Materialien zum Kern transportiert.\nReihe mehrere Förderbänder aneinander bis zum Kern.
|
||||||
tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
|
tutorial.conveyor.mobile = Mit [accent]Förderbändern[] werden Materialien zum Kern transportiert.\nReihe mehrere Förderbänder aneinander bis zum Kern.\n[accent] Zum Bau in einer Reihe lasse deinen Finger für einige Sekunden gedrückt[] und ziehe ihn in eine beliebige Richtung.\n\n[accent]{0}/{1} Förderbänder in Reihe erstellt\n[accent]0/1 Ressourcen transportiert.
|
||||||
tutorial.turret = Verteidigungsgebäude müssen gebaut werden um[LIGHT_GRAY] Gegner[] abzuwehren.\nBaue einen Duo Geschützturm in die Nähe deiner Basis.
|
tutorial.turret = Verteidigungsgebäude müssen gebaut werden um[LIGHT_GRAY] Gegner[] abzuwehren.\nBaue einen Duo Geschützturm in die Nähe deiner Basis.
|
||||||
tutorial.drillturret = Duo Geschütztürme benötigen[accent] Kupfermunition, []um schießen zu können.\nPlatziere neben das Geschütz einen Bohrer, um ihn mit Kupfer zu versorgen.
|
tutorial.drillturret = Duo Geschütztürme benötigen[accent] Kupfermunition, []um schießen zu können.\nPlatziere neben das Geschütz einen Bohrer, um ihn mit Kupfer zu versorgen.
|
||||||
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
tutorial.pause = Du kannst das Spiel jederzeit [accent]pausieren.[]\nIn einer Pause kannst du den Bau weiterer Gebäude in Auftrag geben.\n\n[accent]Drücke die Leertaste um zu pausieren.
|
||||||
tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause.
|
tutorial.pause.mobile = Du kannst das Spiel jederzeit [accent]pausieren.[]\nIn einer Pause kannst du den Bau weiterer Gebäude in Auftrag geben.\n\n[accent]Drücke diesen Button oben links um zu pausieren.
|
||||||
tutorial.unpause = Now press space again to unpause.
|
tutorial.unpause = Drücke die Leertaste erneut um das Spiel fortzusetzen.
|
||||||
tutorial.unpause.mobile = Now press it again to unpause.
|
tutorial.unpause.mobile = Drücke ihn erneut um das Spiel fortzusetzen.
|
||||||
tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
|
tutorial.breaking = Oft kommt es vor, dass Blöcke zerstört werden müssen.\n[accent]Halte die rechte Maustaste gedrückt[] während du eine Fläche auswählst. Dadurch werden alle Blöcke darin zerstört.[]\n\n[accent]Zerstöre alle Schrott-Blöcke links neben deinem Kern mithilfe der Flächenauswahl.
|
||||||
tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
|
tutorial.breaking.mobile = Oft kommt es vor, dass Blöcke zerstört werden müssen.\n[accent]Wähle den Abbau-Modus[], dann wähle einen Block um ihn zu zerstören.\nZerstöre eine Fläche indem du deinen Finger einige Sekunden gedrückt hältst[] und in eine beliebige Richtung ziehst.\nTippe auf das Häkchen um den Rückbau zu bestätigen.\n\n[accent]Zerstöre all Schrott-Blöcke links des Kerns mithilfe der Flächenauswahl.
|
||||||
tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[]
|
tutorial.withdraw = Einige Situationen erfordern, dass Materialien direkt aus den Blöcken aufgenommen werden.\nUm dies zu tun, [accent]tippe auf einen Block[] mit Materialien dann [accent]tippe auf das Material[] in diesem Block.\nUm mehrere Materialien zu entnehmen [accent]tippe darauf und halte die Maustaste gedrückt[].\n\n[accent]Entnimm etwas Kupfer vom Kern.[]
|
||||||
tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[]
|
tutorial.deposit = Materialien können in Blöcke abgelegt werden, indem du sie dorthin ziehst.\n\n[accent]Lege das Kupfer zurück in den Kern.[]
|
||||||
tutorial.waves = Der [LIGHT_GRAY] Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Bau mehr Türme.
|
tutorial.waves = Der [LIGHT_GRAY]Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Baue mehr Türme.
|
||||||
tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
|
tutorial.waves.mobile = Der[lightgray] Gegner[] greift an.\n\nVerteidige deinen Kern 2 Wellen lang. Dein Schiff feuert automatisch auf Gegner.\nBaue mehr Geschütztürme und Bohrer. Baue mehr Kupfer ab.
|
||||||
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
tutorial.launch = Sobald du eine bestimmte Welle erreicht hast, kannst du die [accent]Mission abschließen[]. Dadurch lässt du deine Basis zurück[accent] und überträgst alle Ressourcen in deinen Kern.[]\nDiese Ressourcen können zur Erforschung neuer Technologien eingesetzt werden.\n\n[accent]Drücke nun den Abschluss-Button.
|
||||||
item.copper.description = Ein nützliches Material. Wird in allen Arten von Blöcken verwendet.
|
item.copper.description = Ein nützliches Material. Wird in allen Arten von Blöcken verwendet.
|
||||||
item.lead.description = Ein grundlegendes Material. Häufig in Elektronik und Flüssigkeits-Transport-Blöcken verwendet.
|
item.lead.description = Ein grundlegendes Material. Häufig in Elektronik und Flüssigkeits-Transport-Blöcken verwendet.
|
||||||
item.metaglass.description = Eine extrem harte Glasmischung. Wird zur Verteilung und Lagerung von Flüssigkeiten benutzt.
|
item.metaglass.description = Eine extrem harte Glasmischung. Wird zur Verteilung und Lagerung von Flüssigkeiten benutzt.
|
||||||
@@ -1007,8 +1007,8 @@ block.oil-extractor.description = Verwendet große Mengen an Strom, um Öl aus S
|
|||||||
block.core-shard.description = Die erste Version der Kernkapsel. Einmal zerstört, ist jeglicher Kontakt zur Region verloren. Lass das nicht zu.
|
block.core-shard.description = Die erste Version der Kernkapsel. Einmal zerstört, ist jeglicher Kontakt zur Region verloren. Lass das nicht zu.
|
||||||
block.core-foundation.description = Die zweite Version des Kerns. Besser gepanzert. Speichert mehr Ressourcen.
|
block.core-foundation.description = Die zweite Version des Kerns. Besser gepanzert. Speichert mehr Ressourcen.
|
||||||
block.core-nucleus.description = Die dritte und letzte Version der Kernkapsel. Sehr gut gepanzert. Speichert enorme Mengen an Ressourcen.
|
block.core-nucleus.description = Die dritte und letzte Version der Kernkapsel. Sehr gut gepanzert. Speichert enorme Mengen an Ressourcen.
|
||||||
block.vault.description = Speichert eine große Menge an Materialien pro Typ. Benachbarte Container, Tresore und Basen werden zu einem Behälter zusammengefasst. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen.
|
block.vault.description = Speichert eine große Menge an Materialien pro Typ. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen.
|
||||||
block.container.description = Speichert eine kleine Menge an Materialien pro Typ. Benachbarte Container, Tresore und Basen werden zu einem Behälter zusammengefasst. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen.
|
block.container.description = Speichert eine kleine Menge an Materialien pro Typ. Ein[LIGHT_GRAY] Entlader[] kann verwendet werden, um Materialien auszuladen.
|
||||||
block.unloader.description = Entlädt Materialien aus einem Container, Tresor oder einer Basis auf ein Förderband oder direkt in einen benachbarten Block. Der Typ des auszuladenden Materials kann durch darauf tippen verändert werden.
|
block.unloader.description = Entlädt Materialien aus einem Container, Tresor oder einer Basis auf ein Förderband oder direkt in einen benachbarten Block. Der Typ des auszuladenden Materials kann durch darauf tippen verändert werden.
|
||||||
block.launch-pad.description = Startet Stapel von Items, ohne dass ein Kernstart erforderlich ist. Unvollendet.
|
block.launch-pad.description = Startet Stapel von Items, ohne dass ein Kernstart erforderlich ist. Unvollendet.
|
||||||
block.launch-pad-large.description = Eine verbesserte Version des Launchpads. Speichert weitere Items. Wird häufiger gestartet.
|
block.launch-pad-large.description = Eine verbesserte Version des Launchpads. Speichert weitere Items. Wird häufiger gestartet.
|
||||||
|
|||||||
1069
core/assets/bundles/bundle_eu.properties
Normal file
@@ -4,10 +4,10 @@ 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.changelog.description = Liste des modifications de mise à jour
|
link.changelog.description = Liste des mises à jour
|
||||||
link.dev-builds.description = Versions instables de développement
|
link.dev-builds.description = Versions instables de développement
|
||||||
link.trello.description = Planning Trello officiel pour les fonctionnalités planifiées.
|
link.trello.description =Trello officiel pour les fonctionnalités planifiées.
|
||||||
link.itch.io.description = Page web itch.io avec les versions ordinateurs téléchargeables et la version web
|
link.itch.io.description = Site itch.io avec les versions téléchargeables pour ordinateur.
|
||||||
link.google-play.description = Page Google Play du jeu
|
link.google-play.description = Page Google Play du jeu
|
||||||
link.wiki.description = Wiki officiel de Mindustry
|
link.wiki.description = Wiki officiel de Mindustry
|
||||||
linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier.
|
linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier.
|
||||||
@@ -16,18 +16,18 @@ screenshot.invalid = Carte trop grande, potentiellement pas assez de mémoire po
|
|||||||
gameover = Le base a été détruite.
|
gameover = Le base a été détruite.
|
||||||
gameover.pvp = L'équipe[accent] {0}[] a gagnée !
|
gameover.pvp = L'équipe[accent] {0}[] a gagnée !
|
||||||
highscore = [accent]Nouveau meilleur score !
|
highscore = [accent]Nouveau meilleur score !
|
||||||
load.sound = Sounds
|
load.sound = Son
|
||||||
load.map = Maps
|
load.map = Maps
|
||||||
load.image = Images
|
load.image = Images
|
||||||
load.content = Content
|
load.content = Contenu
|
||||||
load.system = System
|
load.system = Système
|
||||||
stat.wave = Vagues vaincues:[accent] {0}
|
stat.wave = Vagues vaincues:[accent] {0}
|
||||||
stat.enemiesDestroyed = Ennemies détruits:[accent] {0}
|
stat.enemiesDestroyed = Ennemies détruits:[accent] {0}
|
||||||
stat.built = Bâtiments construits:[accent] {0}
|
stat.built = Bâtiments construits:[accent] {0}
|
||||||
stat.destroyed = Bâtiments détruits:[accent] {0}
|
stat.destroyed = Bâtiments détruits:[accent] {0}
|
||||||
stat.deconstructed = Bâtiments déconstruits:[accent] {0}
|
stat.deconstructed = Bâtiments déconstruits:[accent] {0}
|
||||||
stat.delivered = Ressources transférées:
|
stat.delivered = Ressources transférées:
|
||||||
stat.rank = FRang Final: [accent]{0}
|
stat.rank = Rang Final: [accent]{0}
|
||||||
launcheditems = [accent]Ressources transférées
|
launcheditems = [accent]Ressources transférées
|
||||||
map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]"?
|
map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]"?
|
||||||
level.highscore = Meilleur score: [accent]{0}
|
level.highscore = Meilleur score: [accent]{0}
|
||||||
@@ -61,8 +61,8 @@ techtree = Arbre technologique
|
|||||||
research.list = [LIGHT_GRAY]Recherche:
|
research.list = [LIGHT_GRAY]Recherche:
|
||||||
research = Recherche
|
research = Recherche
|
||||||
researched = [LIGHT_GRAY]{0} recherchée.
|
researched = [LIGHT_GRAY]{0} recherchée.
|
||||||
players = {0} joueurs en ligne
|
players = {0} joueurs
|
||||||
players.single = {0} joueur en ligne
|
players.single = {0} joueur
|
||||||
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é.
|
||||||
@@ -77,6 +77,7 @@ server.kicked.nameEmpty = Votre nom doit contenir au moins une lettre ou un chif
|
|||||||
server.kicked.idInUse = Vous êtes déjà sur ce serveur ! Se connecter avec deux comptes n'est pas permis !
|
server.kicked.idInUse = Vous êtes déjà sur ce serveur ! Se connecter avec deux comptes n'est pas permis !
|
||||||
server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Télécharger une version officielle.
|
server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Télécharger une version officielle.
|
||||||
server.kicked.gameover = Vous avez perdu !
|
server.kicked.gameover = Vous avez perdu !
|
||||||
|
server.kicked.playerLimit = Ce serveur est complet. Attendez qu'une place ce libére.
|
||||||
server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[]
|
server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[]
|
||||||
host.info = Le bouton [accent]héberger[] héberge un serveur sur les ports [scarlet]6567[] et [scarlet]6568.[]\nN'importe qui sur le même [LIGHT_GRAY]réseau wifi ou local[] devrait pouvoir voir votre serveur dans sa liste de serveurs.\n\nSi vous voulez que les gens puissent se connecter de n'importe où grâce à l'IP, [accent]rediriger les ports[] est requis.\n\n[LIGHT_GRAY]Note:Si quelqu'un éprouve des difficultés à se connecter à votre partie LAN, assurez-vous que vous avez autorisé Mindustry à accéder à votre réseau local dans les paramètres de votre pare-feu.
|
host.info = Le bouton [accent]héberger[] héberge un serveur sur les ports [scarlet]6567[] et [scarlet]6568.[]\nN'importe qui sur le même [LIGHT_GRAY]réseau wifi ou local[] devrait pouvoir voir votre serveur dans sa liste de serveurs.\n\nSi vous voulez que les gens puissent se connecter de n'importe où grâce à l'IP, [accent]rediriger les ports[] est requis.\n\n[LIGHT_GRAY]Note:Si quelqu'un éprouve des difficultés à se connecter à votre partie LAN, assurez-vous que vous avez autorisé Mindustry à accéder à votre réseau local dans les paramètres de votre pare-feu.
|
||||||
join.info = Ici, vous pouvez entrer l' [accent]IP d'un serveur[] pour s'y connecter, ou découvrir les serveurs[accent]sur votre réseau local[] pour s'y connecter.\nLes parties multijoueur LAN et WAN sont toutes deux supportées.\n\n[LIGHT_GRAY]Note: Aucune liste globale des serveurs n'est génerée automatiquement: si vous voulez vous connecter à un serveur par IP, vous devrez demander l'IP à l'hébergeur.
|
join.info = Ici, vous pouvez entrer l' [accent]IP d'un serveur[] pour s'y connecter, ou découvrir les serveurs[accent]sur votre réseau local[] pour s'y connecter.\nLes parties multijoueur LAN et WAN sont toutes deux supportées.\n\n[LIGHT_GRAY]Note: Aucune liste globale des serveurs n'est génerée automatiquement: si vous voulez vous connecter à un serveur par IP, vous devrez demander l'IP à l'hébergeur.
|
||||||
@@ -106,7 +107,7 @@ server.edit = Modifier le serveur
|
|||||||
server.outdated = [crimson]Serveur obsolète ![]
|
server.outdated = [crimson]Serveur obsolète ![]
|
||||||
server.outdated.client = [crimson]Client obsolète ![]
|
server.outdated.client = [crimson]Client obsolète ![]
|
||||||
server.version = [lightgray]Version: {0} {1}
|
server.version = [lightgray]Version: {0} {1}
|
||||||
server.custombuild = [yellow]Version personnalisée
|
server.custombuild = [accent]Version personnalisée
|
||||||
confirmban = Êtes-vous sûr de vouloir bannir ce joueur ?
|
confirmban = Êtes-vous sûr de vouloir bannir ce joueur ?
|
||||||
confirmkick = Êtes-vous sûr de vouloir expulser ce joueur?
|
confirmkick = Êtes-vous sûr de vouloir expulser ce joueur?
|
||||||
confirmunban = Êtes-vous sûr de vouloir annuler le ban de ce joueur ?
|
confirmunban = Êtes-vous sûr de vouloir annuler le ban de ce joueur ?
|
||||||
@@ -148,7 +149,7 @@ off = Éteint
|
|||||||
save.autosave = Sauvegarde automatique {0}
|
save.autosave = Sauvegarde automatique {0}
|
||||||
save.map = Carte: {0}
|
save.map = Carte: {0}
|
||||||
save.wave = Vague {0}
|
save.wave = Vague {0}
|
||||||
save.difficulty = Difficulté: {0}
|
save.mode = Mode de jeu {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 = Avertissement.
|
warning = Avertissement.
|
||||||
@@ -225,16 +226,17 @@ editor.removeunit = Retirer l'unité
|
|||||||
editor.teams = Équipes
|
editor.teams = Équipes
|
||||||
editor.errorload = Erreur lors du chargement du fichier:\n[accent]{0}
|
editor.errorload = Erreur lors du chargement du fichier:\n[accent]{0}
|
||||||
editor.errorsave = Erreur lors de la sauvegarde du fichier:\n[accent]{0}
|
editor.errorsave = Erreur lors de la sauvegarde du fichier:\n[accent]{0}
|
||||||
editor.errorimage = C'est une image, pas une carte. Ne changez pas les extensions en espérant que cela fonctionne.\n\nSi vous souhaitez importer une carte, utilisez le bouton "importer une carte" dans l'éditeur.
|
editor.errorimage = C’est une image, pas une carte.\n\nSi vous souhaitez importer une carte 3.5/build 40, utilisez le bouton "Importer une carte héritée" dans l’éditeur.
|
||||||
editor.errorlegacy = Cette carte est trop ancienne et utilise un format de carte qui n'est plus pris en charge.
|
editor.errorlegacy = Cette carte est trop ancienne et utilise un format de carte qui n'est plus pris en charge.
|
||||||
editor.errorheader = Ce fichier de carte n'est pas valide ou corrompu.
|
editor.errorheader = Ce fichier de carte n'est pas valide ou corrompu.
|
||||||
editor.errorname = La carte n'a pas de nom!
|
editor.errorname = La carte n'a pas de nom !
|
||||||
editor.update = Mettre à jour
|
editor.update = Mettre à jour
|
||||||
editor.randomize = Randomiser
|
editor.randomize = Randomiser
|
||||||
editor.apply = Appliquer
|
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
|
||||||
|
editor.errornot = Ce n'est pas un fichier de carte.
|
||||||
editor.savemap = Sauvegarder une carte
|
editor.savemap = Sauvegarder une carte
|
||||||
editor.saved = Sauvegardé !
|
editor.saved = Sauvegardé !
|
||||||
editor.save.noname = Votre carte ne possède pas de nom ! Ajouter en un dans le menu 'Infos sur la carte'.
|
editor.save.noname = Votre carte ne possède pas de nom ! Ajouter en un dans le menu 'Infos sur la carte'.
|
||||||
@@ -245,7 +247,7 @@ editor.importmap = Importer une carte
|
|||||||
editor.importmap.description = Importer une carte déjà existante
|
editor.importmap.description = Importer une carte déjà existante
|
||||||
editor.importfile = Importer un fichier
|
editor.importfile = Importer un fichier
|
||||||
editor.importfile.description = Importer une carte à partir d'un fichier externe
|
editor.importfile.description = Importer une carte à partir d'un fichier externe
|
||||||
editor.importimage = Importer l'image du terrain
|
editor.importimage = Importer la carte existante
|
||||||
editor.importimage.description = Importer une image de terrain à partir d'un fichier externe
|
editor.importimage.description = Importer une image de terrain à partir d'un fichier externe
|
||||||
editor.export = Exportation en cours...
|
editor.export = Exportation en cours...
|
||||||
editor.exportfile = Exporter un fichier
|
editor.exportfile = Exporter un fichier
|
||||||
@@ -434,6 +436,7 @@ blocks.boosteffect = Effet boostant
|
|||||||
blocks.maxunits = Maximum d'unitée active
|
blocks.maxunits = Maximum d'unitée active
|
||||||
blocks.health = Santé
|
blocks.health = Santé
|
||||||
blocks.buildtime = Temps de construction
|
blocks.buildtime = Temps de construction
|
||||||
|
blocks.buildcost = Coût de construction
|
||||||
blocks.inaccuracy = Précision
|
blocks.inaccuracy = Précision
|
||||||
blocks.shots = Tirs
|
blocks.shots = Tirs
|
||||||
blocks.reload = Tirs/Seconde
|
blocks.reload = Tirs/Seconde
|
||||||
@@ -871,8 +874,8 @@ tutorial.intro = Vous êtes entré dans le[scarlet] Tutoriel de Mindustry.[]\nCo
|
|||||||
tutorial.drill = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nPlacez-en une sur un filon de cuivre.
|
tutorial.drill = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nPlacez-en une sur un filon de cuivre.
|
||||||
tutorial.drill.mobile = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nAppuyez sur l'onglet de forage en bas à droite.\nSélectionnez la[accent] perceuse mécanique[].\nPlacez-la sur une veine de cuivre, puis appuyez sur la[accent] coche(V)[] ci-dessous pour confirmer votre sélection.\nAppuyez sur le [accent] bouton X[]pour annuler le placement.
|
tutorial.drill.mobile = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nAppuyez sur l'onglet de forage en bas à droite.\nSélectionnez la[accent] perceuse mécanique[].\nPlacez-la sur une veine de cuivre, puis appuyez sur la[accent] coche(V)[] ci-dessous pour confirmer votre sélection.\nAppuyez sur le [accent] bouton X[]pour annuler le placement.
|
||||||
tutorial.blockinfo = Chaque bloc a des statistiques différentes. Chaque foreuse ne peut extraire que certains minerais.\nPour vérifier les informations et les statistiques d'un bloc,[accent] tapez sur le "?" tout en le sélectionnant dans le menu de compilation.[]\n\n[accent]Accédez aux statistiques de la foreuse mécanique maintenant.[]
|
tutorial.blockinfo = Chaque bloc a des statistiques différentes. Chaque foreuse ne peut extraire que certains minerais.\nPour vérifier les informations et les statistiques d'un bloc,[accent] tapez sur le "?" tout en le sélectionnant dans le menu de compilation.[]\n\n[accent]Accédez aux statistiques de la foreuse mécanique maintenant.[]
|
||||||
tutorial.conveyor = [accent]Les tapis roulants[] sont utilisés pour transporter des objets jusqu'à la base.\nFaites une ligne de tapis roulants de la foreuse à la base.
|
tutorial.conveyor = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreusse à la base.\n[accent]Maintenez le clique droit de la souris pour placer dans une ligne.[]\nMaintenir[accent] CTRL[] en sélectionnant une ligne à placer en diagonale.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base.
|
||||||
tutorial.conveyor.mobile = [accent]Les tapis roulants[] sont utilisés pour transporter des objets jusqu'à la base.\nFaites une ligne de tapis roulants de la foreuse à la base.\n[accent]Placez en ligne en maintenant votre doigt enfoncé pendant quelques secondes[] et glisser dans une direction.\n\n[accent]{0}/{1} convoyeurs placés en ligne\n[accent]0/1 articles livrés
|
tutorial.conveyor.mobile = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreusse à la base.\n[accent] Placez dans une ligne en maintenant votre doigt appuyé pendant quelques secondes[] et en le faisant glisser dans une direction.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base.
|
||||||
tutorial.turret = Des constructions défensives doivent être construites pour repousser [LIGHT_GRAY]les ennemis[].Construisez une tourelle "duo" près de votre base.
|
tutorial.turret = Des constructions défensives doivent être construites pour repousser [LIGHT_GRAY]les ennemis[].Construisez une tourelle "duo" près de votre base.
|
||||||
tutorial.drillturret = Les tourelles "Duo" ont besoin de [accent]munitions en cuivre[] pour tirer.\nPlacez une foreuse à côté de la tourelle pour l'approvisionner avec du cuivre.
|
tutorial.drillturret = Les tourelles "Duo" ont besoin de [accent]munitions en cuivre[] pour tirer.\nPlacez une foreuse à côté de la tourelle pour l'approvisionner avec du cuivre.
|
||||||
tutorial.pause = Pendant le combat, vous pouvez[accent] mettre le jeu en pause.[]\nVous pouvez construire des bâtiments pendant que le jeu est en pause.\n\n[accent]Appuyez sur espace pour mettre le jeu en pause.
|
tutorial.pause = Pendant le combat, vous pouvez[accent] mettre le jeu en pause.[]\nVous pouvez construire des bâtiments pendant que le jeu est en pause.\n\n[accent]Appuyez sur espace pour mettre le jeu en pause.
|
||||||
|
|||||||
@@ -16,11 +16,13 @@ screenshot.invalid = 맵이 너무 커서 스크린샷을 찍을 메모리가
|
|||||||
gameover = 게임 오버
|
gameover = 게임 오버
|
||||||
gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
|
gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
|
||||||
highscore = [accent]최고점수 달성!
|
highscore = [accent]최고점수 달성!
|
||||||
|
|
||||||
load.sound = 소리
|
load.sound = 소리
|
||||||
load.map = 맵
|
load.map = 맵
|
||||||
load.image = 사진
|
load.image = 사진
|
||||||
load.content = Content
|
load.content = 컨텐츠
|
||||||
load.system = 시스템
|
load.system = 시스템
|
||||||
|
|
||||||
stat.wave = 웨이브 성공:[accent]{0}
|
stat.wave = 웨이브 성공:[accent]{0}
|
||||||
stat.enemiesDestroyed = 파괴한 적 수:[accent]{0}
|
stat.enemiesDestroyed = 파괴한 적 수:[accent]{0}
|
||||||
stat.built = 건설한 건물 수:[accent]{0}
|
stat.built = 건설한 건물 수:[accent]{0}
|
||||||
@@ -28,6 +30,7 @@ stat.destroyed = 파괴된 건물 수:[accent]{0}
|
|||||||
stat.deconstructed = 파괴한 건물 수:[accent]{0}
|
stat.deconstructed = 파괴한 건물 수:[accent]{0}
|
||||||
stat.delivered = 획득한 자원:
|
stat.delivered = 획득한 자원:
|
||||||
stat.rank = 최종 기록: [accent]{0}
|
stat.rank = 최종 기록: [accent]{0}
|
||||||
|
|
||||||
launcheditems = [accent]창고
|
launcheditems = [accent]창고
|
||||||
map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?
|
map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?
|
||||||
level.highscore = 최고 점수: [accent]{0}
|
level.highscore = 최고 점수: [accent]{0}
|
||||||
@@ -49,8 +52,17 @@ close = 닫기
|
|||||||
website = 웹사이트
|
website = 웹사이트
|
||||||
quit = 나가기
|
quit = 나가기
|
||||||
maps = 맵
|
maps = 맵
|
||||||
|
maps.browse = 맵 검색
|
||||||
continue = 계속하기
|
continue = 계속하기
|
||||||
maps.none = [LIGHT_GRAY]맵을 찾을 수 없습니다!
|
maps.none = [LIGHT_GRAY]맵을 찾을 수 없습니다!
|
||||||
|
invalid = 오류
|
||||||
|
preparingconfig = 설정 사전준비
|
||||||
|
preparingcontent = 컨텐츠 사전준비
|
||||||
|
uploadingcontent = 컨텐츠 업로드
|
||||||
|
uploadingpreviewfile = 미리보기 파일 업로드
|
||||||
|
committingchanges = 바뀐 점 적용
|
||||||
|
done = 완료
|
||||||
|
|
||||||
about.button = 정보
|
about.button = 정보
|
||||||
name = 이름 :
|
name = 이름 :
|
||||||
noname = 먼저 [accent] 유저 이름[] 을 설정하세요.
|
noname = 먼저 [accent] 유저 이름[] 을 설정하세요.
|
||||||
@@ -65,12 +77,14 @@ players = 현재 {0}명 접속중
|
|||||||
players.single = 현재 {0}명만 있음.
|
players.single = 현재 {0}명만 있음.
|
||||||
server.closing = [accent]서버 닫는중...
|
server.closing = [accent]서버 닫는중...
|
||||||
server.kicked.kick = 서버에서 추방되었습니다!
|
server.kicked.kick = 서버에서 추방되었습니다!
|
||||||
|
server.kicked.whitelist = 당신은 여기의 화이트리스트가 아닙니다.
|
||||||
server.kicked.serverClose = 서버 종료됨.
|
server.kicked.serverClose = 서버 종료됨.
|
||||||
server.kicked.vote = 당신은 투표로 추방되었습니다. 그러니 좀 적당히 하지 그랬어요?
|
server.kicked.vote = 당신은 투표로 추방되었습니다. 그러니 좀 적당히 하지 그랬어요?
|
||||||
server.kicked.clientOutdated = 오래된 버전의 게임입니다! 게임을 업데이트 하세요!
|
server.kicked.clientOutdated = 오래된 버전의 게임입니다! 게임을 업데이트 하세요!
|
||||||
server.kicked.serverOutdated = 오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요!
|
server.kicked.serverOutdated = 오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요!
|
||||||
server.kicked.banned = 서버 규칙 위반으로 인해, 이제 당신은 영원히 이 서버를 플레이 하실 수 없습니다.
|
server.kicked.banned = 서버 규칙 위반으로 인해, 이제 당신은 영원히 이 서버를 플레이 하실 수 없습니다.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = 클라이언트와 호환되지 않는 서버입니다. 디스코드에서 #mods에 들러보는 건 어떨까요?
|
||||||
|
server.kicked.playerLimit = 서버가 꽉 찼습니다. 빈 공간이 생길 때까지 기다려주세요.
|
||||||
server.kicked.recentKick = 방금 추방처리 되었습니다.\n잠시 기다린 후에 접속 해 주세요.
|
server.kicked.recentKick = 방금 추방처리 되었습니다.\n잠시 기다린 후에 접속 해 주세요.
|
||||||
server.kicked.nameInUse = 이 닉네임이 이미 서버에서 사용중입니다.
|
server.kicked.nameInUse = 이 닉네임이 이미 서버에서 사용중입니다.
|
||||||
server.kicked.nameEmpty = 당신의 닉네임이 비어있습니다.
|
server.kicked.nameEmpty = 당신의 닉네임이 비어있습니다.
|
||||||
@@ -86,6 +100,7 @@ host = 서버 열기
|
|||||||
hosting = [accent]서버 여는중...
|
hosting = [accent]서버 여는중...
|
||||||
hosts.refresh = 새로고침
|
hosts.refresh = 새로고침
|
||||||
hosts.discovering = LAN 게임 찾기
|
hosts.discovering = LAN 게임 찾기
|
||||||
|
hosts.discovering.any = 서버 찾기
|
||||||
server.refreshing = 서버 목록 새로고치는중...
|
server.refreshing = 서버 목록 새로고치는중...
|
||||||
hosts.none = [lightgray]LAN 게임을 찾을 수 없습니다!
|
hosts.none = [lightgray]LAN 게임을 찾을 수 없습니다!
|
||||||
host.invalid = [scarlet]서버에 연결할 수 없습니다!
|
host.invalid = [scarlet]서버에 연결할 수 없습니다!
|
||||||
@@ -115,12 +130,16 @@ confirmunadmin = 이 플레이어를 일반 유저로 만들겠습니까?
|
|||||||
joingame.title = 게임 참가
|
joingame.title = 게임 참가
|
||||||
joingame.ip = 주소:
|
joingame.ip = 주소:
|
||||||
disconnect = 서버와 연결이 해제되었습니다.
|
disconnect = 서버와 연결이 해제되었습니다.
|
||||||
disconnect.data = 맵 데이터를 받아오는데 실패했습니다!
|
disconnect.data = 맵 데이터를 받아오는데 실패했습니다..
|
||||||
|
disconnect.closed = 연결이 끊어졌습니다..
|
||||||
|
disconnect.timeout = 연결 시간 한계 도달..
|
||||||
|
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 = [accent]{0}[crimson]서버를 여는데 오류가 발생했습니다.
|
server.error = [accent]{0}[crimson]서버를 여는데 오류가 발생했습니다.
|
||||||
save.old = 이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다.
|
save.old = 이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다.
|
||||||
save.new = 새로 저장
|
save.new = 새로 저장
|
||||||
@@ -148,7 +167,7 @@ off = 끄기
|
|||||||
save.autosave = 자동저장: {0}
|
save.autosave = 자동저장: {0}
|
||||||
save.map = 맵: {0}
|
save.map = 맵: {0}
|
||||||
save.wave = 웨이브 {0}
|
save.wave = 웨이브 {0}
|
||||||
save.difficulty = 난이도: {0}
|
save.mode = 게임모드 : {0}
|
||||||
save.date = 마지막 저장날짜: {0}
|
save.date = 마지막 저장날짜: {0}
|
||||||
save.playtime = 플레이시간: {0}
|
save.playtime = 플레이시간: {0}
|
||||||
warning = 경고.
|
warning = 경고.
|
||||||
@@ -190,6 +209,9 @@ map.nospawn = 이 맵에 플레이어가 생성될 코어가 없습니다! 맵
|
|||||||
map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [ROYAL]노랑색 팀이 아닌[] 코어를 추가하세요.
|
map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [ROYAL]노랑색 팀이 아닌[] 코어를 추가하세요.
|
||||||
map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적의 코어가 없습니다! 에디터에서 [ROYAL] 빨강색 팀[] 코어를 맵에 추가하세요.
|
map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적의 코어가 없습니다! 에디터에서 [ROYAL] 빨강색 팀[] 코어를 맵에 추가하세요.
|
||||||
map.invalid = 파일이 잘못되었거나 손상되어 맵을 열 수 없습니다.
|
map.invalid = 파일이 잘못되었거나 손상되어 맵을 열 수 없습니다.
|
||||||
|
map.publish.error = 맵 업로드 오류 : {0}
|
||||||
|
map.publish = 맵 업로드 완료!
|
||||||
|
map.publishing = [accent]맵 업로드 중...
|
||||||
editor.brush = 브러쉬
|
editor.brush = 브러쉬
|
||||||
editor.openin = 편집기 열기
|
editor.openin = 편집기 열기
|
||||||
editor.oregen = 광물 무작위 생성
|
editor.oregen = 광물 무작위 생성
|
||||||
@@ -201,7 +223,9 @@ editor.waves = 웨이브:
|
|||||||
editor.rules = 규칙:
|
editor.rules = 규칙:
|
||||||
editor.generation = 맵 생성 설정:
|
editor.generation = 맵 생성 설정:
|
||||||
editor.ingame = 인게임 편집
|
editor.ingame = 인게임 편집
|
||||||
|
editor.publish.workshop = 워크샵 업로드
|
||||||
editor.newmap = 신규 맵
|
editor.newmap = 신규 맵
|
||||||
|
workshop = 워크샵
|
||||||
waves.title = 웨이브
|
waves.title = 웨이브
|
||||||
waves.remove = 삭제
|
waves.remove = 삭제
|
||||||
waves.never = 여기까지 유닛생성
|
waves.never = 여기까지 유닛생성
|
||||||
@@ -218,6 +242,7 @@ waves.invalid = 클립보드의 잘못된 웨이브 데이터
|
|||||||
waves.copied = 웨이브 복사됨
|
waves.copied = 웨이브 복사됨
|
||||||
waves.none = 적 웨이브가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 웨이브로 설정됩니다.
|
waves.none = 적 웨이브가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 웨이브로 설정됩니다.
|
||||||
editor.default = [LIGHT_GRAY]<기본값>
|
editor.default = [LIGHT_GRAY]<기본값>
|
||||||
|
details = 설명
|
||||||
edit = 편집
|
edit = 편집
|
||||||
editor.name = 이름:
|
editor.name = 이름:
|
||||||
editor.spawn = 유닛 생성
|
editor.spawn = 유닛 생성
|
||||||
@@ -227,6 +252,7 @@ editor.errorload = [accent]{0} 파일을 불러오는데 실패했습니다.
|
|||||||
editor.errorsave = [accent]{0} 파일을 저장하는데 실패했습니다.
|
editor.errorsave = [accent]{0} 파일을 저장하는데 실패했습니다.
|
||||||
editor.errorimage = 이것은 맵이 아니라 사진입니다.\n\n예전 맵을 가져올려면 편집기의 '예전 맵 가져오기' 버튼을 사용하세요.
|
editor.errorimage = 이것은 맵이 아니라 사진입니다.\n\n예전 맵을 가져올려면 편집기의 '예전 맵 가져오기' 버튼을 사용하세요.
|
||||||
editor.errorlegacy = 이 맵은 너무 오래되어, 더이상 지원하지 않는 맵 형식을 사용합니다.
|
editor.errorlegacy = 이 맵은 너무 오래되어, 더이상 지원하지 않는 맵 형식을 사용합니다.
|
||||||
|
editor.errornot = 선택한 대상이 맵 파일이 아닙니다.
|
||||||
editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다.
|
editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다.
|
||||||
editor.errorname = 맵에 이름이 지정되어 있지 않습니다.
|
editor.errorname = 맵에 이름이 지정되어 있지 않습니다.
|
||||||
editor.update = 업데이트
|
editor.update = 업데이트
|
||||||
@@ -260,6 +286,7 @@ editor.mapname = 맵 이름:
|
|||||||
editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다.
|
editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다.
|
||||||
editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까?
|
editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까?
|
||||||
editor.selectmap = 불러올 맵 선택:
|
editor.selectmap = 불러올 맵 선택:
|
||||||
|
|
||||||
toolmode.replace = 재배치
|
toolmode.replace = 재배치
|
||||||
toolmode.replace.description = 블록을 배치합니다.
|
toolmode.replace.description = 블록을 배치합니다.
|
||||||
toolmode.replaceall = 모두 재배치
|
toolmode.replaceall = 모두 재배치
|
||||||
@@ -274,6 +301,7 @@ toolmode.fillteams = 팀 채우기
|
|||||||
toolmode.fillteams.description = 블록 대신 팀 건물로 채웁니다.
|
toolmode.fillteams.description = 블록 대신 팀 건물로 채웁니다.
|
||||||
toolmode.drawteams = 팀 그리기
|
toolmode.drawteams = 팀 그리기
|
||||||
toolmode.drawteams.description = 블록 대신 팀 건물을 배치합니다.
|
toolmode.drawteams.description = 블록 대신 팀 건물을 배치합니다.
|
||||||
|
|
||||||
filters.empty = [LIGHT_GRAY]필터가 없습니다!! 아래 버튼을 눌러 추가하세요.
|
filters.empty = [LIGHT_GRAY]필터가 없습니다!! 아래 버튼을 눌러 추가하세요.
|
||||||
filter.distort = 왜곡
|
filter.distort = 왜곡
|
||||||
filter.noise = 맵 전체에 타일 혹은 블럭 뿌리기
|
filter.noise = 맵 전체에 타일 혹은 블럭 뿌리기
|
||||||
@@ -305,6 +333,7 @@ filter.option.floor2 = 2번째 바닥
|
|||||||
filter.option.threshold2 = 2번째 한계점
|
filter.option.threshold2 = 2번째 한계점
|
||||||
filter.option.radius = 반경
|
filter.option.radius = 반경
|
||||||
filter.option.percentile = 백분위수
|
filter.option.percentile = 백분위수
|
||||||
|
|
||||||
width = 넓이:
|
width = 넓이:
|
||||||
height = 높이:
|
height = 높이:
|
||||||
menu = 메뉴
|
menu = 메뉴
|
||||||
@@ -322,6 +351,7 @@ tutorial.retake = 튜토리얼
|
|||||||
editor = 편집기
|
editor = 편집기
|
||||||
mapeditor = 맵 편집기
|
mapeditor = 맵 편집기
|
||||||
donate = 기부
|
donate = 기부
|
||||||
|
|
||||||
abandon = 포기
|
abandon = 포기
|
||||||
abandon.text = 이 구역의 모든 자원이 적에게 빼앗길 것입니다.
|
abandon.text = 이 구역의 모든 자원이 적에게 빼앗길 것입니다.
|
||||||
locked = 잠김
|
locked = 잠김
|
||||||
@@ -338,6 +368,7 @@ launch.skip.confirm = 만약 지금 출격하시지 않고 스킵하신다면,
|
|||||||
uncover = 구역 개방
|
uncover = 구역 개방
|
||||||
configure = 코어 시작자원 설정
|
configure = 코어 시작자원 설정
|
||||||
configure.locked = {0} 단계에서 시작자원 설정 잠금이 해제됩니다.
|
configure.locked = {0} 단계에서 시작자원 설정 잠금이 해제됩니다.
|
||||||
|
configure.invalid = 해당 가격은 0 과 {0} 사이여야 합니다.
|
||||||
zone.unlocked = [LIGHT_GRAY] 잠금 해제되었습니다!
|
zone.unlocked = [LIGHT_GRAY] 잠금 해제되었습니다!
|
||||||
zone.requirement.complete = 웨이브 {0} 달성:\n{1} 지역 요구사항이 충족되었습니다!
|
zone.requirement.complete = 웨이브 {0} 달성:\n{1} 지역 요구사항이 충족되었습니다!
|
||||||
zone.config.complete = 웨이브 {0} 달성:\n시작자원 설정 기능이 해금되었습니다!
|
zone.config.complete = 웨이브 {0} 달성:\n시작자원 설정 기능이 해금되었습니다!
|
||||||
@@ -347,6 +378,7 @@ zone.objective.survival = 생존
|
|||||||
zone.objective.attack = 적 코어 파괴
|
zone.objective.attack = 적 코어 파괴
|
||||||
add = 추가...
|
add = 추가...
|
||||||
boss.health = 보스 체력
|
boss.health = 보스 체력
|
||||||
|
|
||||||
connectfail = [crimson]{0}[accent] 서버에 연결하지 못했습니다.[]
|
connectfail = [crimson]{0}[accent] 서버에 연결하지 못했습니다.[]
|
||||||
error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요?
|
error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요?
|
||||||
error.invalidaddress = 잘못된 주소입니다.
|
error.invalidaddress = 잘못된 주소입니다.
|
||||||
@@ -357,6 +389,7 @@ error.mapnotfound = 맵 파일을 찾을 수 없습니다!
|
|||||||
error.io = 네트워크 I/O 오류.
|
error.io = 네트워크 I/O 오류.
|
||||||
error.any = 알 수 없는 네트워크 오류.
|
error.any = 알 수 없는 네트워크 오류.
|
||||||
error.bloom = 블룸 그래픽 효과를 적용하지 못했습니다.\n당신의 기기가 이 기능을 지원하지 않는 것일 수도 있습니다.
|
error.bloom = 블룸 그래픽 효과를 적용하지 못했습니다.\n당신의 기기가 이 기능을 지원하지 않는 것일 수도 있습니다.
|
||||||
|
|
||||||
zone.groundZero.name = 전초기지
|
zone.groundZero.name = 전초기지
|
||||||
zone.desertWastes.name = 쓰레기 사막
|
zone.desertWastes.name = 쓰레기 사막
|
||||||
zone.craters.name = 크레이터
|
zone.craters.name = 크레이터
|
||||||
@@ -371,6 +404,7 @@ zone.saltFlats.name = 소금 사막
|
|||||||
zone.impact0078.name = Impact 0078
|
zone.impact0078.name = Impact 0078
|
||||||
zone.crags.name = 협곡
|
zone.crags.name = 협곡
|
||||||
zone.fungalPass.name = 포자 지대
|
zone.fungalPass.name = 포자 지대
|
||||||
|
|
||||||
zone.groundZero.description = 이 장소는 다시 시작하기에 최적의 환경을 지닌 장소입니다. 적은 수준의 위협이 있으며 자원의 양은 적습니다.\n가능한 한 많은 양의 구리와 납을 수집하십시오.\n출격합시다!
|
zone.groundZero.description = 이 장소는 다시 시작하기에 최적의 환경을 지닌 장소입니다. 적은 수준의 위협이 있으며 자원의 양은 적습니다.\n가능한 한 많은 양의 구리와 납을 수집하십시오.\n출격합시다!
|
||||||
zone.frozenForest.description = 이 지역도 산과 가까운 지역입니다 포자들이 흩뿌려져 있으며 극한의 추위도 포자룰 막을 수 있을거 같지 않습니다.\n전력을 통해서 모험을 시작하십시오 화력 발전소를 짓고 수리드론을 사용하는 법을 배우십시오.
|
zone.frozenForest.description = 이 지역도 산과 가까운 지역입니다 포자들이 흩뿌려져 있으며 극한의 추위도 포자룰 막을 수 있을거 같지 않습니다.\n전력을 통해서 모험을 시작하십시오 화력 발전소를 짓고 수리드론을 사용하는 법을 배우십시오.
|
||||||
zone.desertWastes.description = 이 황무지는 끝을 알수 없을 정도로 광활합니다 그리고 십자가 형태의 버려진 구조물이 존재합니다.\n석탄이 존재하며 이를 화력발전에 쓰거나 흑연정제에 쓰십시오.\n\n[lightgray]이 지역에서의 착륙장소는 확실하지 않습니다.
|
zone.desertWastes.description = 이 황무지는 끝을 알수 없을 정도로 광활합니다 그리고 십자가 형태의 버려진 구조물이 존재합니다.\n석탄이 존재하며 이를 화력발전에 쓰거나 흑연정제에 쓰십시오.\n\n[lightgray]이 지역에서의 착륙장소는 확실하지 않습니다.
|
||||||
@@ -385,6 +419,7 @@ zone.nuclearComplex.description = 과거 토륨의 생산, 연구와 처리를
|
|||||||
zone.fungalPass.description = 고산지대과 포자지대 사이의 지역입니다. 소규모의 적 정찰기지가 있으니 디거와 크롤러를 이용해 적의 코어를 파괴하십시오.
|
zone.fungalPass.description = 고산지대과 포자지대 사이의 지역입니다. 소규모의 적 정찰기지가 있으니 디거와 크롤러를 이용해 적의 코어를 파괴하십시오.
|
||||||
zone.impact0078.description = [ROYAL]죄송합니다. 아직 설명이 준비되지 않았습니다.
|
zone.impact0078.description = [ROYAL]죄송합니다. 아직 설명이 준비되지 않았습니다.
|
||||||
zone.crags.description = [ROYAL]죄송합니다. 아직 설명이 준비되지 않았습니다.
|
zone.crags.description = [ROYAL]죄송합니다. 아직 설명이 준비되지 않았습니다.
|
||||||
|
|
||||||
settings.language = 언어
|
settings.language = 언어
|
||||||
settings.data = 게임 데이터
|
settings.data = 게임 데이터
|
||||||
settings.reset = 설정 초기화
|
settings.reset = 설정 초기화
|
||||||
@@ -411,7 +446,7 @@ blocks.booster = 가속
|
|||||||
block.unknown = [LIGHT_GRAY]???
|
block.unknown = [LIGHT_GRAY]???
|
||||||
blocks.powercapacity = 전력 용량
|
blocks.powercapacity = 전력 용량
|
||||||
blocks.powershot = 1발당 전력 소모량
|
blocks.powershot = 1발당 전력 소모량
|
||||||
blocks.damage = Damage
|
blocks.damage = 공격력
|
||||||
blocks.targetsair = 공중공격 가능
|
blocks.targetsair = 공중공격 가능
|
||||||
blocks.targetsground = 지상공격 가능
|
blocks.targetsground = 지상공격 가능
|
||||||
blocks.itemsmoved = 이동 속도
|
blocks.itemsmoved = 이동 속도
|
||||||
@@ -434,10 +469,12 @@ blocks.boosteffect = 가속 효과
|
|||||||
blocks.maxunits = 최대 활성유닛
|
blocks.maxunits = 최대 활성유닛
|
||||||
blocks.health = 체력
|
blocks.health = 체력
|
||||||
blocks.buildtime = 건설 시간
|
blocks.buildtime = 건설 시간
|
||||||
|
blocks.buildcost = 건설 재료
|
||||||
blocks.inaccuracy = 오차각
|
blocks.inaccuracy = 오차각
|
||||||
blocks.shots = 발포 횟수
|
blocks.shots = 발포 횟수
|
||||||
blocks.reload = 재장전
|
blocks.reload = 재장전
|
||||||
blocks.ammo = 탄약
|
blocks.ammo = 탄약
|
||||||
|
|
||||||
bar.drilltierreq = 드릴이 요구됨
|
bar.drilltierreq = 드릴이 요구됨
|
||||||
bar.drillspeed = 채광 속도 : {0}/s
|
bar.drillspeed = 채광 속도 : {0}/s
|
||||||
bar.efficiency = 효율성 : {0}%
|
bar.efficiency = 효율성 : {0}%
|
||||||
@@ -450,6 +487,7 @@ bar.heat = 발열
|
|||||||
bar.power = 전력
|
bar.power = 전력
|
||||||
bar.progress = 건설 진행
|
bar.progress = 건설 진행
|
||||||
bar.spawned = 유닛: {0}/{1}
|
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]방화
|
||||||
@@ -461,6 +499,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 = 액체/초
|
||||||
@@ -519,6 +558,7 @@ setting.sfxvol.name = 효과음 크기
|
|||||||
setting.mutesound.name = 소리 끄기
|
setting.mutesound.name = 소리 끄기
|
||||||
setting.crashreport.name = 오류 보고서 보내기
|
setting.crashreport.name = 오류 보고서 보내기
|
||||||
setting.savecreate.name = 자동 저장 활성화
|
setting.savecreate.name = 자동 저장 활성화
|
||||||
|
setting.publichost.name = 공용 서버 보이기
|
||||||
setting.chatopacity.name = 채팅 투명도
|
setting.chatopacity.name = 채팅 투명도
|
||||||
setting.playerchat.name = 인게임 채팅 표시
|
setting.playerchat.name = 인게임 채팅 표시
|
||||||
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 스케일을 확인하세요.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 스케일을 확인하세요.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
||||||
@@ -572,6 +612,7 @@ mode.pvp.description = 실제 플레이어와 PvP를 합니다. 맵에 적어도
|
|||||||
mode.attack.name = 공격
|
mode.attack.name = 공격
|
||||||
mode.attack.description = 적 기지를 파괴하세요. 맵에 빨간팀 코어가 있어야 플레이 가능합니다.
|
mode.attack.description = 적 기지를 파괴하세요. 맵에 빨간팀 코어가 있어야 플레이 가능합니다.
|
||||||
mode.custom = 사용자 정의 규칙
|
mode.custom = 사용자 정의 규칙
|
||||||
|
|
||||||
rules.infiniteresources = 무한 자원
|
rules.infiniteresources = 무한 자원
|
||||||
rules.wavetimer = 웨이브 타이머
|
rules.wavetimer = 웨이브 타이머
|
||||||
rules.waves = 웨이브
|
rules.waves = 웨이브
|
||||||
@@ -598,6 +639,7 @@ rules.title.resourcesbuilding = 자원 & 건축
|
|||||||
rules.title.player = 플레이어들
|
rules.title.player = 플레이어들
|
||||||
rules.title.enemy = 적
|
rules.title.enemy = 적
|
||||||
rules.title.unit = 유닛
|
rules.title.unit = 유닛
|
||||||
|
|
||||||
content.item.name = 아이템
|
content.item.name = 아이템
|
||||||
content.liquid.name = 액체
|
content.liquid.name = 액체
|
||||||
content.unit.name = 유닛
|
content.unit.name = 유닛
|
||||||
@@ -659,6 +701,7 @@ 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.sand-boulder.name = 사암
|
block.sand-boulder.name = 사암
|
||||||
block.grass.name = 잔디
|
block.grass.name = 잔디
|
||||||
block.salt.name = 소금
|
block.salt.name = 소금
|
||||||
@@ -886,6 +929,8 @@ tutorial.deposit = 자원을 다시 블록에 넣을수도 있습니다.\n\n[acc
|
|||||||
tutorial.waves = [LIGHT_GRAY]적[]이 접근합니다.\n당신의 기체는 적을 향해 클릭하여 공격할 수 있습니다. 또한, 구리를 더 캐내고 포탑을 더 지어서 방어를 강화하세요.\n\n[accent]2단계 동안 코어를 보호하세요.[]
|
tutorial.waves = [LIGHT_GRAY]적[]이 접근합니다.\n당신의 기체는 적을 향해 클릭하여 공격할 수 있습니다. 또한, 구리를 더 캐내고 포탑을 더 지어서 방어를 강화하세요.\n\n[accent]2단계 동안 코어를 보호하세요.[]
|
||||||
tutorial.waves.mobile = [LIGHT_GRAY]적[]이 접근합니다.\n당신의 기체는 적을 자동조준하지만, 원하는 적을 클릭하여 공격하고 싶은 대상을 바꿀 수 있습니다.\n구리를 더 캐내고 포탑을 더 지어서 방어를 강화하세요.\n\n[accent]2단계동안 코어를 방어하세요.[]
|
tutorial.waves.mobile = [LIGHT_GRAY]적[]이 접근합니다.\n당신의 기체는 적을 자동조준하지만, 원하는 적을 클릭하여 공격하고 싶은 대상을 바꿀 수 있습니다.\n구리를 더 캐내고 포탑을 더 지어서 방어를 강화하세요.\n\n[accent]2단계동안 코어를 방어하세요.[]
|
||||||
tutorial.launch = 특정 단계에 도달하면 [accent]출격[]이 가능합니다.\n[accent]출격[]을 하게되면 해당 지역의 코어에 들어있는 자원들을 캠페인의 자원 창고로 보내지만, 해당 지역의 [accent]모든 것들[]은 날라가게 되니 주의하세요.
|
tutorial.launch = 특정 단계에 도달하면 [accent]출격[]이 가능합니다.\n[accent]출격[]을 하게되면 해당 지역의 코어에 들어있는 자원들을 캠페인의 자원 창고로 보내지만, 해당 지역의 [accent]모든 것들[]은 날라가게 되니 주의하세요.
|
||||||
|
|
||||||
|
|
||||||
item.copper.description = 모든 종류의 블록에서 광범위하게 사용되는 자원입니다.
|
item.copper.description = 모든 종류의 블록에서 광범위하게 사용되는 자원입니다.
|
||||||
item.lead.description = 쉽게 구할 수 있으며, 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다.
|
item.lead.description = 쉽게 구할 수 있으며, 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다.
|
||||||
item.metaglass.description = 초강력 유리 화합물. 액체 분배 및 저장에 광범위하게 사용됩니다.\n\n[royal]빨리 생산할수록 게임이 편해집니다.
|
item.metaglass.description = 초강력 유리 화합물. 액체 분배 및 저장에 광범위하게 사용됩니다.\n\n[royal]빨리 생산할수록 게임이 편해집니다.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ contributors = Tłumacze i pomocnicy
|
|||||||
discord = Odwiedź nasz serwer Discord!
|
discord = Odwiedź nasz serwer Discord!
|
||||||
link.discord.description = Oficjalny serwer Discord Mindustry
|
link.discord.description = Oficjalny serwer Discord Mindustry
|
||||||
link.github.description = Kod Gry
|
link.github.description = Kod Gry
|
||||||
link.changelog.description = List of update changes
|
link.changelog.description = Informacje o aktualizacjach
|
||||||
link.dev-builds.description = Niestabilne wersje gry
|
link.dev-builds.description = Niestabilne wersje gry
|
||||||
link.trello.description = Oficjalna tablica Trello z planowanym funkcjami
|
link.trello.description = Oficjalna tablica Trello z planowanym funkcjami
|
||||||
link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania
|
link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania
|
||||||
@@ -16,11 +16,13 @@ screenshot.invalid = Zrzut ekranu jest zbyt duży. Najprawdopodobniej brakuje mi
|
|||||||
gameover = Rdzeń został zniszczony.
|
gameover = Rdzeń został zniszczony.
|
||||||
gameover.pvp = Zwyciężyła drużyna [accent]{0}[]!
|
gameover.pvp = Zwyciężyła drużyna [accent]{0}[]!
|
||||||
highscore = [YELLOW] Nowy rekord!
|
highscore = [YELLOW] Nowy rekord!
|
||||||
load.sound = Sounds
|
|
||||||
load.map = Maps
|
load.sound = Dźwięki
|
||||||
load.image = Images
|
load.map = Mapy
|
||||||
load.content = Content
|
load.image = Obrazy
|
||||||
|
load.content = Treść
|
||||||
load.system = System
|
load.system = System
|
||||||
|
|
||||||
stat.wave = Fale powstrzymane:[accent] {0}
|
stat.wave = Fale powstrzymane:[accent] {0}
|
||||||
stat.enemiesDestroyed = Przeciwnicy zniszczeni:[accent] {0}
|
stat.enemiesDestroyed = Przeciwnicy zniszczeni:[accent] {0}
|
||||||
stat.built = Budynki zbudowane:[accent] {0}
|
stat.built = Budynki zbudowane:[accent] {0}
|
||||||
@@ -28,6 +30,7 @@ stat.destroyed = Budynki zniszczone:[accent] {0}
|
|||||||
stat.deconstructed = Budynki zrekonstruowane:[accent] {0}
|
stat.deconstructed = Budynki zrekonstruowane:[accent] {0}
|
||||||
stat.delivered = Surowce wystrzelone:
|
stat.delivered = Surowce wystrzelone:
|
||||||
stat.rank = Ocena: [accent]{0}
|
stat.rank = Ocena: [accent]{0}
|
||||||
|
|
||||||
launcheditems = [accent]Wystrzelone przedmioty
|
launcheditems = [accent]Wystrzelone przedmioty
|
||||||
map.delete = Jesteś pewny, że chcesz usunąć "[accent]{0}[]"?
|
map.delete = Jesteś pewny, że chcesz usunąć "[accent]{0}[]"?
|
||||||
level.highscore = Rekord: [accent]{0}
|
level.highscore = Rekord: [accent]{0}
|
||||||
@@ -46,11 +49,18 @@ newgame = Nowa Gra
|
|||||||
none = <none>
|
none = <none>
|
||||||
minimap = Minimapa
|
minimap = Minimapa
|
||||||
close = Zamknij
|
close = Zamknij
|
||||||
website = Website
|
website = Strona Gry
|
||||||
quit = Wyjdź
|
quit = Wyjdź
|
||||||
maps = Mapy
|
maps = Mapy
|
||||||
continue = Kontynuuj
|
continue = Kontynuuj
|
||||||
maps.none = [LIGHT_GRAY]Nie znaleziono żadnych map!
|
maps.none = [LIGHT_GRAY]Nie znaleziono żadnych map!
|
||||||
|
invalid = Invalid
|
||||||
|
preparingconfig = Preparing Config
|
||||||
|
preparingcontent = Preparing Content
|
||||||
|
uploadingcontent = Uploading Content
|
||||||
|
uploadingpreviewfile = Uploading Preview File
|
||||||
|
committingchanges = Comitting Changes
|
||||||
|
done = Done
|
||||||
about.button = O grze
|
about.button = O grze
|
||||||
name = Nazwa:
|
name = Nazwa:
|
||||||
noname = Najpierw wybierz [accent]nazwę gracza[]
|
noname = Najpierw wybierz [accent]nazwę gracza[]
|
||||||
@@ -65,19 +75,21 @@ players = {0} graczy online
|
|||||||
players.single = {0} gracz online
|
players.single = {0} gracz online
|
||||||
server.closing = [accent] Zamykanie serwera...
|
server.closing = [accent] Zamykanie serwera...
|
||||||
server.kicked.kick = Zostałeś wyrzucony z serwera!
|
server.kicked.kick = Zostałeś wyrzucony z serwera!
|
||||||
|
server.kicked.whitelist = You are not whitelisted here.
|
||||||
server.kicked.serverClose = Serwer został zamknięty.
|
server.kicked.serverClose = Serwer został zamknięty.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Zostałeś wyrzucony z gry. Żegnaj.
|
||||||
server.kicked.clientOutdated = Nieaktualna gra! Zaktualizują ją!
|
server.kicked.clientOutdated = Nieaktualna gra! Zaktualizują ją!
|
||||||
server.kicked.serverOutdated = Nieaktualny serwer! Poproś hosta o jego aktualizację.
|
server.kicked.serverOutdated = Nieaktualny serwer! Poproś hosta o jego aktualizację.
|
||||||
server.kicked.banned = Zostałeś zbanowany na tym serwerze.
|
server.kicked.banned = Zostałeś zbanowany na tym serwerze.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = Ten serwer jest niekompatybilny z twoją wersją gry.
|
||||||
|
server.kicked.playerLimit = Serwer pełny. Poczekaj na wolny slot.
|
||||||
server.kicked.recentKick = Zostałeś niedawno wyrzucony.\nPoczekaj chwilę przed ponownym połączniem.
|
server.kicked.recentKick = Zostałeś niedawno wyrzucony.\nPoczekaj chwilę przed ponownym połączniem.
|
||||||
server.kicked.nameInUse = Ta nazwa jest już zajęta na tym serwerze.
|
server.kicked.nameInUse = Ta nazwa jest już zajęta na tym serwerze.
|
||||||
server.kicked.nameEmpty = Wybrana przez Ciebie nazwa jest nieprawidłowa.
|
server.kicked.nameEmpty = Wybrana przez Ciebie nazwa jest nieprawidłowa.
|
||||||
server.kicked.idInUse = Jesteś już na serwerze! Używanie tego samego konta na 2 urządzeniach jest zabronione.
|
server.kicked.idInUse = Jesteś już na serwerze! Używanie tego samego konta na 2 urządzeniach jest zabronione.
|
||||||
server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobierz oficjalną wersję.
|
server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobierz oficjalną wersję.
|
||||||
server.kicked.gameover = Koniec gry!
|
server.kicked.gameover = Koniec gry!
|
||||||
server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
|
server.versions = Twoja wersja gry:[accent] {0}[]\nWersja gry serwera:[accent] {1}[]
|
||||||
host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[] i [scarlet]6568.[]\nKtokolwiek z tym samym [LIGHT_GRAY]wifi lub hotspotem[] powinien zobaczyć twój serwer.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, [accent]przekierowywanie portów[] jest potrzebne.\n\n[LIGHT_GRAY]Notka:Jeśli ktokolwiek ma problem z dołączeniem do gry, upewnij się, że udostępniłeś Mindustry dostęp do sieci.
|
host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[] i [scarlet]6568.[]\nKtokolwiek z tym samym [LIGHT_GRAY]wifi lub hotspotem[] powinien zobaczyć twój serwer.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, [accent]przekierowywanie portów[] jest potrzebne.\n\n[LIGHT_GRAY]Notka:Jeśli ktokolwiek ma problem z dołączeniem do gry, upewnij się, że udostępniłeś Mindustry dostęp do sieci.
|
||||||
join.info = Tutaj możesz wpisać [accent]IP serwera[], aby dołączyć lub wyszukaj [accent]serwery w lokalnej sieci[], do których chcesz dołączyć .\nGra wieloosobowa na LAN i WAN jest wspomagana.\n\n[LIGHT_GRAY]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać się hosta o IP.
|
join.info = Tutaj możesz wpisać [accent]IP serwera[], aby dołączyć lub wyszukaj [accent]serwery w lokalnej sieci[], do których chcesz dołączyć .\nGra wieloosobowa na LAN i WAN jest wspomagana.\n\n[LIGHT_GRAY]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać się hosta o IP.
|
||||||
hostserver = Stwórz Serwer
|
hostserver = Stwórz Serwer
|
||||||
@@ -86,6 +98,7 @@ host = Hostuj
|
|||||||
hosting = [accent] Otwieranie serwera...
|
hosting = [accent] Otwieranie serwera...
|
||||||
hosts.refresh = Odśwież
|
hosts.refresh = Odśwież
|
||||||
hosts.discovering = Wyszukiwanie gier w sieci LAN
|
hosts.discovering = Wyszukiwanie gier w sieci LAN
|
||||||
|
hosts.discovering.any = Discovering games
|
||||||
server.refreshing = Odświeżanie serwera
|
server.refreshing = Odświeżanie serwera
|
||||||
hosts.none = [lightgray] Brak serwerów w sieci LAN!
|
hosts.none = [lightgray] Brak serwerów w sieci LAN!
|
||||||
host.invalid = [scarlet] Nie można połączyć się z hostem.
|
host.invalid = [scarlet] Nie można połączyć się z hostem.
|
||||||
@@ -93,7 +106,7 @@ trace = Zlokalizuj gracza
|
|||||||
trace.playername = Nazwa gracza: [accent]{0}
|
trace.playername = Nazwa gracza: [accent]{0}
|
||||||
trace.ip = IP: [accent]{0}
|
trace.ip = IP: [accent]{0}
|
||||||
trace.id = Wyjątkowe ID: [accent]{0}
|
trace.id = Wyjątkowe ID: [accent]{0}
|
||||||
trace.mobile = Mobile Client: [accent]{0}
|
trace.mobile = Klient Mobilny: [accent]{0}
|
||||||
trace.modclient = Zmodowany klient: [accent]{0}
|
trace.modclient = Zmodowany klient: [accent]{0}
|
||||||
invalidid = Złe ID klienta! Udostępnij raport błędu.
|
invalidid = Złe ID klienta! Udostępnij raport błędu.
|
||||||
server.bans = Bany
|
server.bans = Bany
|
||||||
@@ -115,6 +128,9 @@ confirmunadmin = Jesteś pewny, że chcesz zabrać rangę admina temu graczowi?
|
|||||||
joingame.title = Dołącz do gry
|
joingame.title = Dołącz do gry
|
||||||
joingame.ip = IP:
|
joingame.ip = IP:
|
||||||
disconnect = Rozłączono.
|
disconnect = Rozłączono.
|
||||||
|
disconnect.error = Błąd połączenia.
|
||||||
|
disconnect.closed = Połączenie zostało zamknięte.
|
||||||
|
disconnect.timeout = Przekroczono limit czasu.
|
||||||
disconnect.data = Nie udało się załadować mapy!
|
disconnect.data = Nie udało się załadować mapy!
|
||||||
connecting = [accent]Łączenie...
|
connecting = [accent]Łączenie...
|
||||||
connecting.data = [accent]Ładowanie danych świata...
|
connecting.data = [accent]Ładowanie danych świata...
|
||||||
@@ -141,7 +157,7 @@ save.rename = Zmień nazwę
|
|||||||
save.rename.text = Nowa nazwa:
|
save.rename.text = Nowa nazwa:
|
||||||
selectslot = Wybierz zapis.
|
selectslot = Wybierz zapis.
|
||||||
slot = [accent]Slot {0}
|
slot = [accent]Slot {0}
|
||||||
save.corrupted = [accent]Zapis gry jest uszkodzony lub nieprawidłowy! Jeżeli aktualizowałeś grę, najprawdopodobniej zmiana w formacie zapisu i [scarlet]nie jest[] to błąd.
|
save.corrupted = [accent]Zapis gry jest uszkodzony lub nieprawidłowy! Jeżeli aktualizowałeś grę, najprawdopodobniej jest to zmiana w formacie zapisu i [scarlet]nie jest[] to błąd.
|
||||||
empty = <pusto>
|
empty = <pusto>
|
||||||
on = Włączone
|
on = Włączone
|
||||||
off = Wyłączone
|
off = Wyłączone
|
||||||
@@ -156,25 +172,25 @@ confirm = Potwierdź
|
|||||||
delete = Usuń
|
delete = Usuń
|
||||||
ok = Ok
|
ok = Ok
|
||||||
open = Otwórz
|
open = Otwórz
|
||||||
customize = Customize
|
customize = Dostosuj
|
||||||
cancel = Anuluj
|
cancel = Anuluj
|
||||||
openlink = Otwórz link
|
openlink = Otwórz link
|
||||||
copylink = Kopiuj link
|
copylink = Kopiuj link
|
||||||
back = Wróć
|
back = Wróć
|
||||||
data.export = Export Data
|
data.export = Eksportuj Dane
|
||||||
data.import = Import Data
|
data.import = Importuj Dane
|
||||||
data.exported = Data exported.
|
data.exported = Dane wyeksportowane.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Nieprawidłowe dane gry.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Zaimportowanie zewnętrznych danych usunie[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zimportowane, gra automatycznie się wyłączy.
|
||||||
classic.export = Export Classic Data
|
classic.export = Eksportuj dane wersji klasycznej
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] otrzymało ostatnio ważną aktualizację.\nClassic (v3.5 build 40) zapis albo mapa zostały wykryte. Czy chciałbyś eksportować te zapisy do katalogu domowego swojego telefonu, do użycia w aplikacji Mindustry Classic?
|
||||||
quit.confirm = Czy na pewno chcesz wyjść?
|
quit.confirm = Czy na pewno chcesz wyjść?
|
||||||
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
|
quit.confirm.tutorial = Czy jesteś pewien tego co robisz?\nSamouczek może zostać powtórzony w[accent] Opcje->Gra->Powtórz samouczek.[]
|
||||||
loading = [accent]Ładowanie...
|
loading = [accent]Ładowanie...
|
||||||
saving = [accent]Zapisywanie...
|
saving = [accent]Zapisywanie...
|
||||||
wave = [accent]Fala {0}
|
wave = [accent]Fala {0}
|
||||||
wave.waiting = Fala za {0}
|
wave.waiting = Fala za {0}
|
||||||
wave.waveInProgress = [LIGHT_GRAY]Wave in progress
|
wave.waveInProgress = [LIGHT_GRAY]Fala w trakcie
|
||||||
waiting = [LIGHT_GRAY]Oczekiwanie...
|
waiting = [LIGHT_GRAY]Oczekiwanie...
|
||||||
waiting.players = Oczekiwanie na graczy...
|
waiting.players = Oczekiwanie na graczy...
|
||||||
wave.enemies = Pozostało [LIGHT_GRAY]{0} wrogów
|
wave.enemies = Pozostało [LIGHT_GRAY]{0} wrogów
|
||||||
@@ -190,6 +206,9 @@ map.nospawn = Ta mapa nie zawiera żadnego rdzenia! Dodaj [ROYAL]niebieski[] rdz
|
|||||||
map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[SCARLET] inny niż niebieski[] rdzeń do mapy w edytorze.
|
map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[SCARLET] inny niż niebieski[] rdzeń do mapy w edytorze.
|
||||||
map.nospawn.attack = Ta mapa nie ma żadnego rdzenia przeciwnika, aby można było go zaatakować! Dodaj[SCARLET] czerwony[] rdzeń do mapy w edytorze.
|
map.nospawn.attack = Ta mapa nie ma żadnego rdzenia przeciwnika, aby można było go zaatakować! Dodaj[SCARLET] czerwony[] rdzeń do mapy w edytorze.
|
||||||
map.invalid = Błąd podczas ładowania mapy: uszkodzony lub niepoprawny plik mapy.
|
map.invalid = Błąd podczas ładowania mapy: uszkodzony lub niepoprawny plik mapy.
|
||||||
|
map.publish.error = Błąd podczas publikowania mapy: {0}
|
||||||
|
map.publish = Opublikowano mapę.
|
||||||
|
map.publishing = [accent]Publikowanie mapy...
|
||||||
editor.brush = Pędzel
|
editor.brush = Pędzel
|
||||||
editor.openin = Otwórz w edytorze
|
editor.openin = Otwórz w edytorze
|
||||||
editor.oregen = Generacja złóż
|
editor.oregen = Generacja złóż
|
||||||
@@ -198,19 +217,21 @@ editor.mapinfo = Informacje o mapie
|
|||||||
editor.author = Autor:
|
editor.author = Autor:
|
||||||
editor.description = Opis:
|
editor.description = Opis:
|
||||||
editor.waves = Fale:
|
editor.waves = Fale:
|
||||||
editor.rules = Rules:
|
editor.rules = Zasady:
|
||||||
editor.generation = Generation:
|
editor.generation = Generacja:
|
||||||
editor.ingame = Edytuj w grze
|
editor.ingame = Edytuj w grze
|
||||||
editor.newmap = New Map
|
editor.publish.workshop = Opublikuj w Workshop
|
||||||
|
editor.newmap = Nowa Mapa
|
||||||
|
workshop = Workshop
|
||||||
waves.title = Fale
|
waves.title = Fale
|
||||||
waves.remove = Usuń
|
waves.remove = Usuń
|
||||||
waves.never = <nigdy>
|
waves.never = <nigdy>
|
||||||
waves.every = co
|
waves.every = co
|
||||||
waves.waves = wave(s)
|
waves.waves = fal(e)
|
||||||
waves.perspawn = per spawn
|
waves.perspawn = co pojawienie
|
||||||
waves.to = do
|
waves.to = do
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
waves.preview = Preview
|
waves.preview = Podgląd
|
||||||
waves.edit = Edytuj...
|
waves.edit = Edytuj...
|
||||||
waves.copy = Kopiuj do schowka
|
waves.copy = Kopiuj do schowka
|
||||||
waves.load = Załaduj ze schowka
|
waves.load = Załaduj ze schowka
|
||||||
@@ -218,15 +239,17 @@ waves.invalid = Nieprawidłowe fale w schowku.
|
|||||||
waves.copied = Fale zostały skopiowane.
|
waves.copied = Fale zostały skopiowane.
|
||||||
waves.none = Brak zdefiniowanych wrogów.\nPamiętaj, że puste układy fal zostaną automatycznie zastąpione układem domyślnym.
|
waves.none = Brak zdefiniowanych wrogów.\nPamiętaj, że puste układy fal zostaną automatycznie zastąpione układem domyślnym.
|
||||||
editor.default = [LIGHT_GRAY]<Domyślne>
|
editor.default = [LIGHT_GRAY]<Domyślne>
|
||||||
|
details = Detale...
|
||||||
edit = Edytuj...
|
edit = Edytuj...
|
||||||
editor.name = Nazwa:
|
editor.name = Nazwa:
|
||||||
editor.spawn = Spawn Unit
|
editor.spawn = Stwórz jednostkę
|
||||||
editor.removeunit = Remove Unit
|
editor.removeunit = Usuń jednostkę
|
||||||
editor.teams = Drużyny
|
editor.teams = Drużyny
|
||||||
editor.errorload = Błąd podczas ładowania pliku:\n[accent]{0}
|
editor.errorload = Błąd podczas ładowania pliku:\n[accent]{0}
|
||||||
editor.errorsave = Błąd podczas zapisywania pliku:\n[accent]{0}
|
editor.errorsave = Błąd podczas zapisywania pliku:\n[accent]{0}
|
||||||
editor.errorimage = To obraz, nie mapa. Nie zmieniaj rozszeżenia spodziewając sie że to coś zmieni.\n\nJeśli chcesz zaimportować starszą mapę, użyj przycisku „importuj starszą mapę” w edytorze.
|
editor.errorimage = To obraz, nie mapa. Nie zmieniaj rozszeżenia spodziewając sie że to coś zmieni.\n\nJeśli chcesz zaimportować starszą mapę, użyj przycisku „importuj starszą mapę” w edytorze.
|
||||||
editor.errorlegacy = Ta mapa jest zbyt stara i używa starszego formatu mapy, który nie jest już obsługiwany.
|
editor.errorlegacy = Ta mapa jest zbyt stara i używa starszego formatu mapy, który nie jest już obsługiwany.
|
||||||
|
editor.errornot = To nie jest plik mapy.
|
||||||
editor.errorheader = Ten plik mapy jest nieprawidłowy lub uszkodzony.
|
editor.errorheader = Ten plik mapy jest nieprawidłowy lub uszkodzony.
|
||||||
editor.errorname = Mapa nie zawiera nazwy.
|
editor.errorname = Mapa nie zawiera nazwy.
|
||||||
editor.update = Aktualizuj
|
editor.update = Aktualizuj
|
||||||
@@ -260,6 +283,7 @@ editor.mapname = Nazwa mapy:
|
|||||||
editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy.
|
editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy.
|
||||||
editor.overwrite.confirm = [scarlet]Uwaga![] Mapa pod tą nazwą już istnieje. Jesteś pewny, że chcesz ją nadpisać?
|
editor.overwrite.confirm = [scarlet]Uwaga![] Mapa pod tą nazwą już istnieje. Jesteś pewny, że chcesz ją nadpisać?
|
||||||
editor.selectmap = Wybierz mapę do załadowania:
|
editor.selectmap = Wybierz mapę do załadowania:
|
||||||
|
|
||||||
toolmode.replace = Zastąp
|
toolmode.replace = Zastąp
|
||||||
toolmode.replace.description = Rysuje tylko na stałych blokach.
|
toolmode.replace.description = Rysuje tylko na stałych blokach.
|
||||||
toolmode.replaceall = Zastąp wszystko
|
toolmode.replaceall = Zastąp wszystko
|
||||||
@@ -267,30 +291,31 @@ toolmode.replaceall.description = Zastąp wszystkie bloki na mapie.
|
|||||||
toolmode.orthogonal = Prostokątny
|
toolmode.orthogonal = Prostokątny
|
||||||
toolmode.orthogonal.description = Rysuje tylko prostopadłe linie.
|
toolmode.orthogonal.description = Rysuje tylko prostopadłe linie.
|
||||||
toolmode.square = Kwadrat
|
toolmode.square = Kwadrat
|
||||||
toolmode.square.description = Square brush.
|
toolmode.square.description = Kwadratowy pędzel.
|
||||||
toolmode.eraseores = Wymaż Rudy
|
toolmode.eraseores = Wymaż Rudy
|
||||||
toolmode.eraseores.description = Usuń tylko rudy.
|
toolmode.eraseores.description = Usuń tylko rudy.
|
||||||
toolmode.fillteams = Wypełń Drużyny
|
toolmode.fillteams = Wypełń Drużyny
|
||||||
toolmode.fillteams.description = Wypełniaj drużyny zamiast bloków.
|
toolmode.fillteams.description = Wypełniaj drużyny zamiast bloków.
|
||||||
toolmode.drawteams = Rysuj Drużyny
|
toolmode.drawteams = Rysuj Drużyny
|
||||||
toolmode.drawteams.description = Rysuj drużyny zamiast bloków.
|
toolmode.drawteams.description = Rysuj drużyny zamiast bloków.
|
||||||
|
|
||||||
filters.empty = [LIGHT_GRAY]Brak filtrów! Dodaj jeden za pomocą przycisku poniżej.
|
filters.empty = [LIGHT_GRAY]Brak filtrów! Dodaj jeden za pomocą przycisku poniżej.
|
||||||
filter.distort = Zniekształcanie
|
filter.distort = Zniekształcanie
|
||||||
filter.noise = Szum
|
filter.noise = Szum
|
||||||
filter.median = Median
|
filter.median = Mediana
|
||||||
filter.oremedian = Ore Median
|
filter.oremedian = Mediana rud
|
||||||
filter.blend = Blend
|
filter.blend = Wtopienie
|
||||||
filter.defaultores = Domyślne rudy
|
filter.defaultores = Domyślne rudy
|
||||||
filter.ore = Ruda
|
filter.ore = Ruda
|
||||||
filter.rivernoise = Szum rzeki
|
filter.rivernoise = Szum rzeki
|
||||||
filter.mirror = Lustro
|
filter.mirror = Lustro
|
||||||
filter.clear = Oczyść
|
filter.clear = Oczyść
|
||||||
filter.option.ignore = Ignore
|
filter.option.ignore = Ignoruj
|
||||||
filter.scatter = Zozprosz
|
filter.scatter = Rozprosz
|
||||||
filter.terrain = Teren
|
filter.terrain = Teren
|
||||||
filter.option.scale = Skala
|
filter.option.scale = Skala
|
||||||
filter.option.chance = Szansa
|
filter.option.chance = Szansa
|
||||||
filter.option.mag = Magnituda
|
filter.option.mag = Wielkość
|
||||||
filter.option.threshold = Próg
|
filter.option.threshold = Próg
|
||||||
filter.option.circle-scale = Skala koła
|
filter.option.circle-scale = Skala koła
|
||||||
filter.option.octaves = Oktawy
|
filter.option.octaves = Oktawy
|
||||||
@@ -302,14 +327,15 @@ filter.option.flooronto = Podłoga Docelowa
|
|||||||
filter.option.wall = Ściana
|
filter.option.wall = Ściana
|
||||||
filter.option.ore = Ruda
|
filter.option.ore = Ruda
|
||||||
filter.option.floor2 = Druga podłoga
|
filter.option.floor2 = Druga podłoga
|
||||||
filter.option.threshold2 = Secondary Threshold
|
filter.option.threshold2 = Drugi próg
|
||||||
filter.option.radius = Zasięg
|
filter.option.radius = Zasięg
|
||||||
filter.option.percentile = Percentyl
|
filter.option.percentile = Percentyl
|
||||||
|
|
||||||
width = Szerokość:
|
width = Szerokość:
|
||||||
height = Wysokość:
|
height = Wysokość:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
play = Graj
|
play = Graj
|
||||||
campaign = Campaign
|
campaign = Kampania
|
||||||
load = Wczytaj
|
load = Wczytaj
|
||||||
save = Zapisz
|
save = Zapisz
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
@@ -318,10 +344,11 @@ ping = Ping: {0}ms
|
|||||||
language.restart = Uruchom grę ponownie, aby ustawiony język zaczął funkcjonować.
|
language.restart = Uruchom grę ponownie, aby ustawiony język zaczął funkcjonować.
|
||||||
settings = Ustawienia
|
settings = Ustawienia
|
||||||
tutorial = Poradnik
|
tutorial = Poradnik
|
||||||
tutorial.retake = Re-Take Tutorial
|
tutorial.retake = Ponów Samouczek
|
||||||
editor = Edytor
|
editor = Edytor
|
||||||
mapeditor = Edytor map
|
mapeditor = Edytor map
|
||||||
donate = Wspomóż nas
|
donate = Wspomóż nas
|
||||||
|
|
||||||
abandon = Opuść
|
abandon = Opuść
|
||||||
abandon.text = Ta strefa i wszystkie jej surowce będą przejęte przez przeciwników.
|
abandon.text = Ta strefa i wszystkie jej surowce będą przejęte przez przeciwników.
|
||||||
locked = Zablokowane
|
locked = Zablokowane
|
||||||
@@ -332,21 +359,23 @@ bestwave = [LIGHT_GRAY]Najwyższa fala: {0}
|
|||||||
launch = < WYSTRZEL >
|
launch = < WYSTRZEL >
|
||||||
launch.title = Wystrzelenie Udane
|
launch.title = Wystrzelenie Udane
|
||||||
launch.next = [LIGHT_GRAY]Następna okazja przy fali {0}
|
launch.next = [LIGHT_GRAY]Następna okazja przy fali {0}
|
||||||
launch.unable2 = [scarlet]Unable to LAUNCH.[]
|
launch.unable2 = [scarlet]WYSTZRZELENIE niedostępne.[]
|
||||||
launch.confirm = Spowoduje to wystrzelenie wszystkich surowców w rdzeniu.\nNie będziesz mógł wrócić do tej bazy.
|
launch.confirm = Spowoduje to wystrzelenie wszystkich surowców w rdzeniu.\nNie będziesz mógł wrócić do tej bazy.
|
||||||
launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
|
launch.skip.confirm = Jeśli teraz przejdziesz do kolejnej fali, Nie biędziesz miał możliwości wystrzelenia do czasu pokonania dalszych fal.
|
||||||
uncover = Odkryj
|
uncover = Odkryj
|
||||||
configure = Skonfiguruj ładunek
|
configure = Skonfiguruj ładunek
|
||||||
configure.locked = [LIGHT_GRAY]Dotrzyj do fali {0}\nAby skonfigurować ładunek.
|
configure.locked = [LIGHT_GRAY]Dotrzyj do fali {0}\nAby skonfigurować ładunek.
|
||||||
|
configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}.
|
||||||
zone.unlocked = [LIGHT_GRAY]Strefa {0} odblokowana.
|
zone.unlocked = [LIGHT_GRAY]Strefa {0} odblokowana.
|
||||||
zone.requirement.complete = Fala {0} osiągnięta:\n{1} Wymagania strefy zostały spełnione.
|
zone.requirement.complete = Fala {0} osiągnięta:\n{1} Wymagania strefy zostały spełnione.
|
||||||
zone.config.complete = Fala {0} osiągnięta:\nKonfiguracja ładunku odblokowana.
|
zone.config.complete = Fala {0} osiągnięta:\nKonfiguracja ładunku odblokowana.
|
||||||
zone.resources = Wykryte Zasoby:
|
zone.resources = Wykryte Zasoby:
|
||||||
zone.objective = [lightgray]Objective: [accent]{0}
|
zone.objective = [lightgray]Cel: [accent]{0}
|
||||||
zone.objective.survival = Przeżyj
|
zone.objective.survival = Przeżyj
|
||||||
zone.objective.attack = Zniszcz Rdzeń Wroga
|
zone.objective.attack = Zniszcz Rdzeń Wroga
|
||||||
add = Dodaj...
|
add = Dodaj...
|
||||||
boss.health = Boss Health
|
boss.health = Zdrowie Bossa
|
||||||
|
|
||||||
connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0}
|
connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0}
|
||||||
error.unreachable = Serwer niedostępny.\nCzy adres jest wpisany poprawnie?
|
error.unreachable = Serwer niedostępny.\nCzy adres jest wpisany poprawnie?
|
||||||
error.invalidaddress = Niepoprawny adres.
|
error.invalidaddress = Niepoprawny adres.
|
||||||
@@ -356,37 +385,39 @@ error.alreadyconnected = Jesteś już połączony.
|
|||||||
error.mapnotfound = Plik mapy nie został znaleziony!
|
error.mapnotfound = Plik mapy nie został znaleziony!
|
||||||
error.io = Błąd siecowy I/O.
|
error.io = Błąd siecowy I/O.
|
||||||
error.any = Nieznany błąd sieci.
|
error.any = Nieznany błąd sieci.
|
||||||
error.bloom = Failed to initialize bloom.\nYour device may not support it.
|
error.bloom = Nie udało się załadować bloom.\nTwoje urządzenie może nie wspierać tej funkcji.
|
||||||
|
|
||||||
zone.groundZero.name = Wybuch Lądowy
|
zone.groundZero.name = Wybuch Lądowy
|
||||||
zone.desertWastes.name = Pustynne Pustkowia
|
zone.desertWastes.name = Pustynne Pustkowia
|
||||||
zone.craters.name = Kratery
|
zone.craters.name = Kratery
|
||||||
zone.frozenForest.name = Zamrożony Las
|
zone.frozenForest.name = Zamrożony Las
|
||||||
zone.ruinousShores.name = Zniszczone Przybrzerza
|
zone.ruinousShores.name = Zniszczone Przybrzeża
|
||||||
zone.stainedMountains.name = Zabarwione Góry
|
zone.stainedMountains.name = Zabarwione Góry
|
||||||
zone.desolateRift.name = Ponura Szczelina
|
zone.desolateRift.name = Ponura Szczelina
|
||||||
zone.nuclearComplex.name = Centrum Wyrobu Jądrowego
|
zone.nuclearComplex.name = Centrum Wyrobu Jądrowego
|
||||||
zone.overgrowth.name = Przerośnięty Las
|
zone.overgrowth.name = Przerośnięty Las
|
||||||
zone.tarFields.name = Pola Smołowe
|
zone.tarFields.name = Pola Smołowe
|
||||||
zone.saltFlats.name = Salt Flats
|
zone.saltFlats.name = Solne Równiny
|
||||||
zone.impact0078.name = Uderzenie 0078
|
zone.impact0078.name = Uderzenie 0078
|
||||||
zone.crags.name = Urwisko
|
zone.crags.name = Urwisko
|
||||||
zone.fungalPass.name = Fungal Pass
|
zone.fungalPass.name = Grzybowa Przełęcz
|
||||||
zone.groundZero.description = Optymalna lokalizacja, aby rozpocząć jeszcze raz. Niskie zagrożenie. Niewiele zasobów.\nZbierz jak najwięcej miedzi i ołowiu, tyle ile jest możliwe.\nPrzejdź do następnej strefy jak najszybciej.
|
zone.groundZero.description = Optymalna lokalizacja, aby rozpocząć jeszcze raz. Niskie zagrożenie. Niewiele zasobów.\nZbierz jak najwięcej miedzi i ołowiu, tyle ile jest możliwe.\nPrzejdź do następnej strefy jak najszybciej.
|
||||||
zone.frozenForest.description = Nawet tutaj, bliżej gór, zarodniki rozprzestrzeniły się. Niskie temperatury nie mogą ich zatrzymać na zawsze.\n\nRozpocznij przedsięwzięcie od władzy. Buduj generatory spalinowe. Naucz się korzystać z naprawiaczy.
|
zone.frozenForest.description = Nawet tutaj, bliżej gór, zarodniki rozprzestrzeniły się. Niskie temperatury nie mogą ich zatrzymać na zawsze.\n\nRozpocznij przedsięwzięcie od władzy. Buduj generatory spalinowe. Naucz się korzystać z naprawiaczy.
|
||||||
zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed.
|
zone.desertWastes.description = Te pustkowia są rozległe, nieprzewidywalne, i znajdują się na nich opuszczone struktury.\nWęgiel jest obecny w tym regionie. Użyj go do produkcji energii, lub do stworzenia grafitu.\n\n[lightgray]Miejsce lądowania nie jest pewne.
|
||||||
zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing.
|
zone.saltFlats.description = Na obrzeżach pustyni spoczywają Solne Równiny. Można tu znaleźć niewiele surowców.\n\nWrogowie zbudowali tu bazę składującą surowce. Zniszcz ich rdżeń. Zniszcz wszystko co stanie ci na drodze.
|
||||||
zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills.
|
zone.craters.description = W tym kraterze zebrała się woda. Pozostałość dawnych wojen. Odzyskaj ten teren. Wykop piasek. Wytop metaszkło. Pompuj wodę do działek obronnych i wierteł by je schłodzić
|
||||||
zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology.
|
zone.ruinousShores.description = Za pustkowiami ciągnie się linia brzegowa. Kiedyś znajdowała się tu przybrzeżna linia obronna. Niewiele z niej zostało. Ostały się tylko podstawowe struktury obronne, z reszty został tylko złom.\nKontynuuj eksploracje. Odkryj pozostawioną tu technologię.
|
||||||
zone.stainedMountains.description = W głębi lądu leżą góry, jeszcze nieskażone przez zarodniki.\nWydobądź obfity tytan w tym obszarze. Dowiedz się, jak z niego korzystać.\n\nObecność wroga jest tutaj większa. Nie daj im czasu na wysłanie swoich najsilniejszych jednostek.
|
zone.stainedMountains.description = W głębi lądu leżą góry, jeszcze nieskażone przez zarodniki.\nWydobądź obfity tytan w tym obszarze. Dowiedz się, jak z niego korzystać.\n\nObecność wroga jest tutaj większa. Nie daj im czasu na wysłanie swoich najsilniejszych jednostek.
|
||||||
zone.overgrowth.description = Obszar ten jest zarośnięty, bliżej źródła zarodników.\nWróg założył tu placówkę. Zbuduj jednostki Nóż. Zniszcz to. Odzyskaj to, co nam odebrano.
|
zone.overgrowth.description = Obszar ten jest zarośnięty, bliżej źródła zarodników.\nWróg założył tu placówkę. Zbuduj jednostki Nóż. Zniszcz to. Odzyskaj to, co nam odebrano.
|
||||||
zone.tarFields.description = Obrzeża strefy produkcji ropy, między górami a pustynią. Jeden z niewielu obszarów z rezerwami użytecznej smoły.\nMimo że ta strefa jest opuszczona, w pobliżu znajdują się niebezpieczne siły wroga. Nie lekceważ ich.\n\n[lightgray]Jeśli to możliwe, zbadaj technologię przetwarzania oleju.
|
zone.tarFields.description = Obrzeża strefy produkcji ropy, między górami a pustynią. Jeden z niewielu obszarów z rezerwami użytecznej smoły.\nMimo że ta strefa jest opuszczona, w pobliżu znajdują się niebezpieczne siły wroga. Nie lekceważ ich.\n\n[lightgray]Jeśli to możliwe, zbadaj technologię przetwarzania oleju.
|
||||||
zone.desolateRift.description = Strefa wyjątkowo niebezpieczna. Opfita w zasoby ale mało miejsca. Wysokie ryzyko zniszczenia. Opuść tę strefe jak najszybciej. Nie daj się zwieść długiemu odstępowi między atakami wroga.
|
zone.desolateRift.description = Strefa wyjątkowo niebezpieczna. Obfita w zasoby ale mało miejsca. Wysokie ryzyko zniszczenia. Opuść tę strefe jak najszybciej. Nie daj się zwieść długiemu odstępowi między atakami wroga.
|
||||||
zone.nuclearComplex.description = Dawny zakład produkcji i przetwarzania toru, zredukowny do ruin.\n[lightgray]Zbadaj tor i jego zastosowania.\n\nWróg jest tutaj obecny w dużej ilości, nieustannie poszukuje napastników.
|
zone.nuclearComplex.description = Dawny zakład produkcji i przetwarzania toru, zredukowny do ruin.\n[lightgray]Zbadaj tor i jego zastosowania.\n\nWróg jest tutaj obecny w dużej ilości, nieustannie poszukuje napastników.
|
||||||
zone.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores.
|
zone.fungalPass.description = Przejściowy obszar pomiędzy wysokimi górami a nisko znajdującymi się, ogarniętymi przez zarodniki równinami. Znajduje się tu mała postawiona przez wrogów baza zwiadowcza.\nZniszcz ją.\nUżyj jednostek Nóż i Pełzak. Zniszcz oba rdżenie.
|
||||||
zone.impact0078.description = <insert description here>
|
zone.impact0078.description = <insert description here>
|
||||||
zone.crags.description = <insert description here>
|
zone.crags.description = <insert description here>
|
||||||
|
|
||||||
settings.language = Język
|
settings.language = Język
|
||||||
settings.data = Game Data
|
settings.data = Dane Gry
|
||||||
settings.reset = Przywróć domyślne
|
settings.reset = Przywróć domyślne
|
||||||
settings.rebind = Zmień
|
settings.rebind = Zmień
|
||||||
settings.controls = Sterowanie
|
settings.controls = Sterowanie
|
||||||
@@ -404,14 +435,14 @@ no = Nie ma mowy!
|
|||||||
info.title = Informacje
|
info.title = 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
|
||||||
attackpvponly = [scarlet]Only available in Attack/PvP modes
|
attackpvponly = [scarlet]Dostępne tylko w trybach Atak/PvP
|
||||||
blocks.input = Wejście
|
blocks.input = Wejście
|
||||||
blocks.output = Wyjście
|
blocks.output = Wyjście
|
||||||
blocks.booster = Wzmacniacz
|
blocks.booster = Wzmacniacz
|
||||||
block.unknown = [LIGHT_GRAY]???
|
block.unknown = [LIGHT_GRAY]???
|
||||||
blocks.powercapacity = Pojemność mocy
|
blocks.powercapacity = Pojemność mocy
|
||||||
blocks.powershot = moc/strzał
|
blocks.powershot = moc/strzał
|
||||||
blocks.damage = Damage
|
blocks.damage = Obrażenia
|
||||||
blocks.targetsair = Namierzanie wrogów powietrznych
|
blocks.targetsair = Namierzanie wrogów powietrznych
|
||||||
blocks.targetsground = Namierzanie wrogów lądowych
|
blocks.targetsground = Namierzanie wrogów lądowych
|
||||||
blocks.itemsmoved = Prędkość poruszania się
|
blocks.itemsmoved = Prędkość poruszania się
|
||||||
@@ -434,22 +465,26 @@ blocks.boosteffect = Efekt wzmocnienia
|
|||||||
blocks.maxunits = Maksymalna ilość jednostek
|
blocks.maxunits = Maksymalna ilość jednostek
|
||||||
blocks.health = Zdrowie
|
blocks.health = Zdrowie
|
||||||
blocks.buildtime = Czas budowy
|
blocks.buildtime = Czas budowy
|
||||||
|
blocks.buildcost = Koszt budowy
|
||||||
blocks.inaccuracy = Niedokładność
|
blocks.inaccuracy = Niedokładność
|
||||||
blocks.shots = Strzały
|
blocks.shots = Strzały
|
||||||
blocks.reload = Strzałów/sekundę
|
blocks.reload = Strzałów/sekundę
|
||||||
blocks.ammo = Amunicja
|
blocks.ammo = Amunicja
|
||||||
bar.drilltierreq = Better Drill Required
|
|
||||||
|
bar.drilltierreq = Wymagane Lepsze Wiertło
|
||||||
bar.drillspeed = Prędkość wiertła: {0}/s
|
bar.drillspeed = Prędkość wiertła: {0}/s
|
||||||
bar.efficiency = Efektywność: {0}%
|
bar.efficiency = Efektywność: {0}%
|
||||||
bar.powerbalance = Moc: {0}
|
bar.powerbalance = Moc: {0}
|
||||||
bar.poweramount = Moc: {0}
|
bar.poweramount = Moc: {0}
|
||||||
bar.poweroutput = Wyjście mocy: {0}
|
bar.poweroutput = Wyjście mocy: {0}
|
||||||
bar.items = Przedmiotów: {0}
|
bar.items = Przedmiotów: {0}
|
||||||
|
bar.capacity = Pojemność: {0}
|
||||||
bar.liquid = Płyn
|
bar.liquid = Płyn
|
||||||
bar.heat = Ciepło
|
bar.heat = Ciepło
|
||||||
bar.power = Prąd
|
bar.power = Prąd
|
||||||
bar.progress = Postęp Budowy
|
bar.progress = Postęp Budowy
|
||||||
bar.spawned = Jednostki: {0}/{1}
|
bar.spawned = Jednostki: {0}/{1}
|
||||||
|
|
||||||
bullet.damage = [stat]{0}[lightgray] Obrażenia
|
bullet.damage = [stat]{0}[lightgray] Obrażenia
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[lightgray] kratki
|
bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[lightgray] kratki
|
||||||
bullet.incendiary = [stat]zapalający
|
bullet.incendiary = [stat]zapalający
|
||||||
@@ -461,6 +496,7 @@ bullet.freezing = [stat]zamrażający
|
|||||||
bullet.tarred = [stat]smolny
|
bullet.tarred = [stat]smolny
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x mnożnik amunicji
|
bullet.multiplier = [stat]{0}[lightgray]x mnożnik amunicji
|
||||||
bullet.reload = [stat]{0}[lightgray]x szybkość ataku
|
bullet.reload = [stat]{0}[lightgray]x szybkość ataku
|
||||||
|
|
||||||
unit.blocks = Klocki
|
unit.blocks = Klocki
|
||||||
unit.powersecond = jednostek prądu na sekundę
|
unit.powersecond = jednostek prądu na sekundę
|
||||||
unit.liquidsecond = jednostek płynów na sekundę
|
unit.liquidsecond = jednostek płynów na sekundę
|
||||||
@@ -482,17 +518,17 @@ category.shooting = Strzelanie
|
|||||||
category.optional = Dodatkowe ulepszenia
|
category.optional = Dodatkowe ulepszenia
|
||||||
setting.landscape.name = Zablokuj tryb panoramiczny
|
setting.landscape.name = Zablokuj tryb panoramiczny
|
||||||
setting.shadows.name = Cienie
|
setting.shadows.name = Cienie
|
||||||
setting.linear.name = Linear Filtering
|
setting.linear.name = Filtrowanie Liniowe
|
||||||
setting.animatedwater.name = Animowana woda
|
setting.animatedwater.name = Animowana woda
|
||||||
setting.animatedshields.name = Animowana Tarcza
|
setting.animatedshields.name = Animowana Tarcza
|
||||||
setting.antialias.name = Antialias[LIGHT_GRAY] (wymaga restartu)[]
|
setting.antialias.name = Antialias[LIGHT_GRAY] (wymaga restartu)[]
|
||||||
setting.indicators.name = Wskaźniki Przyjaciół
|
setting.indicators.name = Wskaźniki Przyjaciół
|
||||||
setting.autotarget.name = Automatyczne Celowanie
|
setting.autotarget.name = Automatyczne Celowanie
|
||||||
setting.keyboard.name = Mouse+Keyboard Controls
|
setting.keyboard.name = Sterowanie Myszka+Klawiatura
|
||||||
setting.fpscap.name = Maksymalny FPS
|
setting.fpscap.name = Maksymalny FPS
|
||||||
setting.fpscap.none = Nieograniczone
|
setting.fpscap.none = Nieograniczone
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
setting.uiscale.name = UI Scaling[lightgray] (require restart)[]
|
setting.uiscale.name = Skalowanie Interfejsu[lightgray] (wymaga restartu)[]
|
||||||
setting.swapdiagonal.name = Pozwala na ukośne stawianie
|
setting.swapdiagonal.name = Pozwala na ukośne stawianie
|
||||||
setting.difficulty.training = trening
|
setting.difficulty.training = trening
|
||||||
setting.difficulty.easy = Łatwy
|
setting.difficulty.easy = Łatwy
|
||||||
@@ -513,19 +549,21 @@ setting.lasers.name = Pokaż lasery zasilające
|
|||||||
setting.pixelate.name = Pikselacja [LIGHT_GRAY](wyłącza animacje)
|
setting.pixelate.name = Pikselacja [LIGHT_GRAY](wyłącza animacje)
|
||||||
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.ambientvol.name = Ambient Volume
|
setting.ambientvol.name = Głośność otoczenia
|
||||||
setting.mutemusic.name = Wycisz muzykę
|
setting.mutemusic.name = Wycisz muzykę
|
||||||
setting.sfxvol.name = Głośność dźwięków
|
setting.sfxvol.name = Głośność dźwięków
|
||||||
setting.mutesound.name = Wycisz dźwięki
|
setting.mutesound.name = Wycisz dźwięki
|
||||||
setting.crashreport.name = Wysyłaj anonimowo dane o crashu gry
|
setting.crashreport.name = Wysyłaj anonimowo dane o crashu gry
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = Automatyczne tworzenie zapisu
|
||||||
|
setting.publichost.name = Widoczność gry publicznej
|
||||||
|
|
||||||
setting.chatopacity.name = Przezroczystość czatu
|
setting.chatopacity.name = Przezroczystość czatu
|
||||||
setting.playerchat.name = Wyświetlaj czat w grze
|
setting.playerchat.name = Wyświetlaj czat w grze
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
|
||||||
uiscale.cancel = Cancel & Exit
|
uiscale.cancel = Anuluj i wyjdź
|
||||||
setting.bloom.name = Bloom
|
setting.bloom.name = Bloom
|
||||||
keybind.title = Zmień
|
keybind.title = Zmień
|
||||||
keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported.
|
keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane.
|
||||||
category.general.name = Ogólne
|
category.general.name = Ogólne
|
||||||
category.view.name = Wyświetl
|
category.view.name = Wyświetl
|
||||||
category.multiplayer.name = Multiplayer
|
category.multiplayer.name = Multiplayer
|
||||||
@@ -541,7 +579,7 @@ keybind.move_x.name = Poruszanie w poziomie
|
|||||||
keybind.move_y.name = Poruszanie w pionie
|
keybind.move_y.name = Poruszanie w pionie
|
||||||
keybind.fullscreen.name = Toggle Fullscreen
|
keybind.fullscreen.name = Toggle Fullscreen
|
||||||
keybind.select.name = Zaznacz
|
keybind.select.name = Zaznacz
|
||||||
keybind.diagonal_placement.name = Diagonal Placement
|
keybind.diagonal_placement.name = Budowa po skosie
|
||||||
keybind.pick.name = Wybierz Blok
|
keybind.pick.name = Wybierz Blok
|
||||||
keybind.break_block.name = Zniszcz Blok
|
keybind.break_block.name = Zniszcz Blok
|
||||||
keybind.deselect.name = Odznacz
|
keybind.deselect.name = Odznacz
|
||||||
@@ -550,7 +588,7 @@ keybind.zoom_hold.name = Inicjator przybliżania
|
|||||||
keybind.zoom.name = Przybliżanie
|
keybind.zoom.name = Przybliżanie
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pauza
|
keybind.pause.name = Pauza
|
||||||
keybind.minimap.name = Minimap
|
keybind.minimap.name = Minimapa
|
||||||
keybind.dash.name = Przyspieszenie
|
keybind.dash.name = Przyspieszenie
|
||||||
keybind.chat.name = Czat
|
keybind.chat.name = Czat
|
||||||
keybind.player_list.name = Lista graczy
|
keybind.player_list.name = Lista graczy
|
||||||
@@ -572,24 +610,25 @@ mode.pvp.description = Walcz przeciwko innym graczom.
|
|||||||
mode.attack.name = Atak
|
mode.attack.name = Atak
|
||||||
mode.attack.description = Brak fal, celem jest zniszczenie bazy przeciwnika.
|
mode.attack.description = Brak fal, celem jest zniszczenie bazy przeciwnika.
|
||||||
mode.custom = Własny tryb
|
mode.custom = Własny tryb
|
||||||
|
|
||||||
rules.infiniteresources = Nieskończone zasoby
|
rules.infiniteresources = Nieskończone zasoby
|
||||||
rules.wavetimer = Zegar fal
|
rules.wavetimer = Zegar fal
|
||||||
rules.waves = Fale
|
rules.waves = Fale
|
||||||
rules.attack = Attack Mode
|
rules.attack = Tryb Ataku
|
||||||
rules.enemyCheat = Nieskończone zasoby komputera-przeciwnika (czerwonego zespołu)
|
rules.enemyCheat = Nieskończone zasoby komputera-przeciwnika (czerwonego zespołu)
|
||||||
rules.unitdrops = Unit Drops
|
rules.unitdrops = Surowce z zniszczonych jednostek
|
||||||
rules.unitbuildspeedmultiplier = Mnożnik Prędkości Tworzenia Jednostek
|
rules.unitbuildspeedmultiplier = Mnożnik Prędkości Tworzenia Jednostek
|
||||||
rules.unithealthmultiplier = Mnożnik Życia Jednostek
|
rules.unithealthmultiplier = Mnożnik Życia Jednostek
|
||||||
rules.playerhealthmultiplier = Mnożnik Życia Gracza
|
rules.playerhealthmultiplier = Mnożnik Życia Gracza
|
||||||
rules.playerdamagemultiplier = Mnożnik Obrażeń Gracza
|
rules.playerdamagemultiplier = Mnożnik Obrażeń Gracza
|
||||||
rules.unitdamagemultiplier = Mnożnik Obrażeń Jednostek
|
rules.unitdamagemultiplier = Mnożnik Obrażeń Jednostek
|
||||||
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
|
rules.enemycorebuildradius = Zasięg blokady budowy przy rdżeniu wroga:[LIGHT_GRAY] (kratki)
|
||||||
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
|
rules.respawntime = Czas Odrodzenia:[LIGHT_GRAY] (sek)
|
||||||
rules.wavespacing = Odstępy między falami:[LIGHT_GRAY] (sek)
|
rules.wavespacing = Odstępy między falami:[LIGHT_GRAY] (sek)
|
||||||
rules.buildcostmultiplier = Mnożnik Kosztów Budowania
|
rules.buildcostmultiplier = Mnożnik Kosztów Budowania
|
||||||
rules.buildspeedmultiplier = Mnożnik Prędkości Budowania
|
rules.buildspeedmultiplier = Mnożnik Prędkości Budowania
|
||||||
rules.waitForWaveToEnd = Fale czekają na przeciwników
|
rules.waitForWaveToEnd = Fale czekają na przeciwników
|
||||||
rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles)
|
rules.dropzoneradius = Zasięg strefy zrzutu:[LIGHT_GRAY] (kratki)
|
||||||
rules.respawns = Maksymalna ilośc odrodzeń na falę
|
rules.respawns = Maksymalna ilośc odrodzeń na falę
|
||||||
rules.limitedRespawns = Ogranicz Odrodzenia
|
rules.limitedRespawns = Ogranicz Odrodzenia
|
||||||
rules.title.waves = Fale
|
rules.title.waves = Fale
|
||||||
@@ -598,11 +637,12 @@ rules.title.resourcesbuilding = Zasoby i Budowanie
|
|||||||
rules.title.player = Gracze
|
rules.title.player = Gracze
|
||||||
rules.title.enemy = Przeciwnicy
|
rules.title.enemy = Przeciwnicy
|
||||||
rules.title.unit = Jednostki
|
rules.title.unit = Jednostki
|
||||||
|
|
||||||
content.item.name = Przedmioty
|
content.item.name = Przedmioty
|
||||||
content.liquid.name = Płyny
|
content.liquid.name = Płyny
|
||||||
content.unit.name = Jednostki
|
content.unit.name = Jednostki
|
||||||
content.block.name = Klocki
|
content.block.name = Klocki
|
||||||
content.mech.name = Mechs
|
content.mech.name = Mechy
|
||||||
item.copper.name = Miedź
|
item.copper.name = Miedź
|
||||||
item.lead.name = Ołów
|
item.lead.name = Ołów
|
||||||
item.coal.name = Węgiel
|
item.coal.name = Węgiel
|
||||||
@@ -637,7 +677,7 @@ mech.omega-mech.weapon = Rakiety Chmarowe
|
|||||||
mech.omega-mech.ability = Układ Obronny
|
mech.omega-mech.ability = Układ Obronny
|
||||||
mech.dart-ship.name = Strzałka
|
mech.dart-ship.name = Strzałka
|
||||||
mech.dart-ship.weapon = Karabin
|
mech.dart-ship.weapon = Karabin
|
||||||
mech.javelin-ship.name = Javelin
|
mech.javelin-ship.name = Oszczep
|
||||||
mech.javelin-ship.weapon = Seria Rakiet
|
mech.javelin-ship.weapon = Seria Rakiet
|
||||||
mech.javelin-ship.ability = Wyładowania Dopalacza
|
mech.javelin-ship.ability = Wyładowania Dopalacza
|
||||||
mech.trident-ship.name = Trójząb
|
mech.trident-ship.name = Trójząb
|
||||||
@@ -655,11 +695,12 @@ 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}%
|
mech.buildspeed = [LIGHT_GRAY]Szybkość Budowy: {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}
|
||||||
block.sand-boulder.name = Sand Boulder
|
|
||||||
|
block.sand-boulder.name = Piaskowy Głaz
|
||||||
block.grass.name = Trawa
|
block.grass.name = Trawa
|
||||||
block.salt.name = Sól
|
block.salt.name = Sól
|
||||||
block.saltrocks.name = Skały Solne
|
block.saltrocks.name = Skały Solne
|
||||||
@@ -670,7 +711,7 @@ block.spore-pine.name = Sosna Zarodkowa
|
|||||||
block.sporerocks.name = Skała z Zarodkami
|
block.sporerocks.name = Skała z Zarodkami
|
||||||
block.rock.name = Skały
|
block.rock.name = Skały
|
||||||
block.snowrock.name = Skały śnieżne
|
block.snowrock.name = Skały śnieżne
|
||||||
block.snow-pine.name = Snow Pine
|
block.snow-pine.name = Sosna śniegowa
|
||||||
block.shale.name = Łupek
|
block.shale.name = Łupek
|
||||||
block.shale-boulder.name = Głaz Łupkowy
|
block.shale-boulder.name = Głaz Łupkowy
|
||||||
block.moss.name = Mech
|
block.moss.name = Mech
|
||||||
@@ -703,13 +744,13 @@ block.snow.name = Śnieg
|
|||||||
block.craters.name = Kratery
|
block.craters.name = Kratery
|
||||||
block.sand-water.name = Woda z Piaskiem
|
block.sand-water.name = Woda z Piaskiem
|
||||||
block.darksand-water.name = Woda z Ciemnym Piaskiem
|
block.darksand-water.name = Woda z Ciemnym Piaskiem
|
||||||
block.char.name = Char
|
block.char.name = Popiół
|
||||||
block.holostone.name = Holo stone
|
block.holostone.name = Błyszczący kamień
|
||||||
block.ice-snow.name = Lodowy Śnieg
|
block.ice-snow.name = Lodowy Śnieg
|
||||||
block.rocks.name = Skały
|
block.rocks.name = Skały
|
||||||
block.icerocks.name = Lodowe skały
|
block.icerocks.name = Lodowe skały
|
||||||
block.snowrocks.name = Śnieżne Skały
|
block.snowrocks.name = Śnieżne Skały
|
||||||
block.dunerocks.name = Dune Rocks
|
block.dunerocks.name = Skały wydmowe
|
||||||
block.pine.name = Sosna
|
block.pine.name = Sosna
|
||||||
block.white-tree-dead.name = Białe Drzewo Martwe
|
block.white-tree-dead.name = Białe Drzewo Martwe
|
||||||
block.white-tree.name = Białe Drzewo
|
block.white-tree.name = Białe Drzewo
|
||||||
@@ -728,7 +769,7 @@ block.dark-panel-6.name = Ciemny Panel 6
|
|||||||
block.dark-metal.name = Ciemny Metal
|
block.dark-metal.name = Ciemny Metal
|
||||||
block.ignarock.name = Skała Wulkaniczna
|
block.ignarock.name = Skała Wulkaniczna
|
||||||
block.hotrock.name = Gorący Kamień
|
block.hotrock.name = Gorący Kamień
|
||||||
block.magmarock.name = Magma Rock
|
block.magmarock.name = Skała magmowa
|
||||||
block.cliffs.name = Klify
|
block.cliffs.name = Klify
|
||||||
block.copper-wall.name = Miedziana Ściana
|
block.copper-wall.name = Miedziana Ściana
|
||||||
block.copper-wall-large.name = Duża miedziana ściana
|
block.copper-wall-large.name = Duża miedziana ściana
|
||||||
@@ -743,7 +784,7 @@ block.door-large.name = Duże drzwi
|
|||||||
block.duo.name = Podwójne działko
|
block.duo.name = Podwójne działko
|
||||||
block.scorch.name = Płomień
|
block.scorch.name = Płomień
|
||||||
block.scatter.name = Flak
|
block.scatter.name = Flak
|
||||||
block.hail.name = Hail
|
block.hail.name = Grad
|
||||||
block.lancer.name = Lancer
|
block.lancer.name = Lancer
|
||||||
block.conveyor.name = Przenośnik
|
block.conveyor.name = Przenośnik
|
||||||
block.titanium-conveyor.name = Tytanowy przenośnik
|
block.titanium-conveyor.name = Tytanowy przenośnik
|
||||||
@@ -760,7 +801,7 @@ block.melter.name = Przetapiacz
|
|||||||
block.incinerator.name = Spalacz
|
block.incinerator.name = Spalacz
|
||||||
block.spore-press.name = Prasa Zarodni
|
block.spore-press.name = Prasa Zarodni
|
||||||
block.separator.name = Rozdzielacz
|
block.separator.name = Rozdzielacz
|
||||||
block.coal-centrifuge.name = Coal Centrifuge
|
block.coal-centrifuge.name = Wirówka węglowa
|
||||||
block.power-node.name = Węzeł Prądu
|
block.power-node.name = Węzeł Prądu
|
||||||
block.power-node-large.name = Duży Węzeł Prądu
|
block.power-node-large.name = Duży Węzeł Prądu
|
||||||
block.surge-tower.name = Wieża Energetyczna
|
block.surge-tower.name = Wieża Energetyczna
|
||||||
@@ -791,7 +832,7 @@ block.power-void.name = Próżnia prądu
|
|||||||
block.power-source.name = Nieskończony Prąd
|
block.power-source.name = Nieskończony Prąd
|
||||||
block.unloader.name = Ekstraktor
|
block.unloader.name = Ekstraktor
|
||||||
block.vault.name = Magazyn
|
block.vault.name = Magazyn
|
||||||
block.wave.name = Wave
|
block.wave.name = Strumyk
|
||||||
block.swarmer.name = Działo Rojowe
|
block.swarmer.name = Działo Rojowe
|
||||||
block.salvo.name = Działo Salwowe
|
block.salvo.name = Działo Salwowe
|
||||||
block.ripple.name = Działo falowe
|
block.ripple.name = Działo falowe
|
||||||
@@ -812,7 +853,7 @@ block.ghoul-factory.name = Fabryka Bombowców Upiór
|
|||||||
block.dagger-factory.name = Fabryka Mechów Nóż
|
block.dagger-factory.name = Fabryka Mechów Nóż
|
||||||
block.crawler-factory.name = Fabryka Mechów Pełzacz
|
block.crawler-factory.name = Fabryka Mechów Pełzacz
|
||||||
block.titan-factory.name = Fabryka Mechów Tytan
|
block.titan-factory.name = Fabryka Mechów Tytan
|
||||||
block.fortress-factory.name = Fabryka Mechów Fortreca
|
block.fortress-factory.name = Fabryka Mechów Forteca
|
||||||
block.revenant-factory.name = Fabryka Wojowników Zjawa
|
block.revenant-factory.name = Fabryka Wojowników Zjawa
|
||||||
block.repair-point.name = Punkt Napraw
|
block.repair-point.name = Punkt Napraw
|
||||||
block.pulse-conduit.name = Rura Pulsacyjna
|
block.pulse-conduit.name = Rura Pulsacyjna
|
||||||
@@ -846,8 +887,8 @@ block.launch-pad.name = Wyrzutnia
|
|||||||
block.launch-pad-large.name = Duża Wyrzutnia
|
block.launch-pad-large.name = Duża Wyrzutnia
|
||||||
team.blue.name = niebieski
|
team.blue.name = niebieski
|
||||||
team.crux.name = czerwony
|
team.crux.name = czerwony
|
||||||
team.sharded.name = pomarańczowy
|
team.sharded.name = żółty
|
||||||
team.orange.name = orange
|
team.orange.name = pomarańczowy
|
||||||
team.derelict.name = szary
|
team.derelict.name = szary
|
||||||
team.green.name = zielony
|
team.green.name = zielony
|
||||||
team.purple.name = fioletowy
|
team.purple.name = fioletowy
|
||||||
@@ -868,32 +909,32 @@ unit.lich.name = Obudzony
|
|||||||
unit.reaper.name = Żeniec
|
unit.reaper.name = Żeniec
|
||||||
tutorial.next = [lightgray]<Kliknij, aby kontynuować>
|
tutorial.next = [lightgray]<Kliknij, aby kontynuować>
|
||||||
tutorial.intro = Wszedłeś do[scarlet] Samouczka Mindustry.[]\nZacznij od[accent] wydobycia miedzi[]. Aby to zrobić, dotknij żyły rudy miedzi w pobliżu rdzenia.\n\n[accent]{0}/{1} miedź
|
tutorial.intro = Wszedłeś do[scarlet] Samouczka Mindustry.[]\nZacznij od[accent] wydobycia miedzi[]. Aby to zrobić, dotknij żyły rudy miedzi w pobliżu rdzenia.\n\n[accent]{0}/{1} miedź
|
||||||
tutorial.drill = Wydobywanie ręczne jest nieefektywne.\n[accent]Wiertła []mogą kopać automatycznie.\nKliknij zakładkę wiertła w prawym dolnym rogu.\nWybierz[accent] wiertło mechaniczne[]. Umieść go na złożu miedzi, klikając.\n[accent]Kliknij prawym przyciskiem myszy[], aby przestać budować.
|
tutorial.drill = Wydobywanie ręczne nie jest efektywne.\n[accent]Wiertła []mogą kopać automatycznie.\nKliknij zakładkę wiertła w prawym dolnym rogu.\nWybierz[accent] wiertło mechaniczne[]. Umieść go na złożu miedzi, klikając.\n[accent]Kliknij prawym przyciskiem myszy[], aby przestać budować.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Wydobywanie ręczne jest nieefektywne.\n[accent]Wiertła []mogą kopać automatycznie.\nDotknij zakładkę wiertła w prawym dolnym rogu.\nWybierz[accent] wiertło mechaniczne[].\nUmieść go na złożu miedzi poprzez Stuknięcie, potem wciśnij[accent] ptaszek[] na dole by potwierdzić wybór.\nNaciśnij przycisk[accent] X[] by anulować budowe.
|
||||||
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
tutorial.blockinfo = Każdy blok ma inne statystyki. Każde wiertło może kopać tylko wybrane rudy.\nBy sprawdzić informacje i statystyki bloku,[accent] kliknij przycisk "?" podczas jego wyboru w menu budowy.[]\n\n[accent]Sprawdź teraz statystyki mechanicznego wiertła.[]
|
||||||
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
|
tutorial.conveyor = [accent]Przenośnik[] jest używany do transportowania przedmiotów do rdzenia.\nStwórz linie przenośników z wierteł do rdzenia.\n[accent]Przytrzymaj przycisk myszy by położyć w linii.[]\nPrzytrzymaj[accent] CTRL[] podczas wybierania linii, by budować po skosie.\n\n[accent]{0}/{1} Przenośniki położone w linii\n[accent]0/1 Przedmioty dostarczone
|
||||||
tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
|
tutorial.conveyor.mobile = [accent]Przenośnik[] jest używany do transportowania przedmiotów do rdzenia.\nStwórz linie przenośników z wierteł do rdzenia.\n[accent] Zbuduj w linii poprzez przytrzymanie palcem przez moment[] i przesunięcie w którymś kierunku.\n\n[accent]{0}/{1} Przenośniki położone w linii\n[accent]0/1 Przedmioty dostarczone
|
||||||
tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base.
|
tutorial.turret = Kiedy przedmiot dociera do rdzenia, może zostać użyty do budowy.\nPamiętaj że nie każdy przedmiot może zostać użyty do budowy.\nprzedmioty które nie są używane do budowy, takie jak[accent] Węgiel[] lub[accent] złom[], nie moga zostać wprowadzone do rdzenia.\nStruktury obronne muszą zostać zbudowane by odeprzeć[lightgray] wroga[].\nZbuduj[accent] podwójne działko[] niedaleko swojej bazy.
|
||||||
tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1
|
tutorial.drillturret = Podwójne działka wymagają[accent] miedzianej amunicji []do strzelania.\nPołóż wiertło obok działka.\nPoprowadź przenośniki do działek by zaopatrzyć je w miedź.\n\n[accent]Amunicja dostarczona: 0/1
|
||||||
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
tutorial.pause = Podczas gry, możesz[accent] zatrzymać grę.[]\nMożesz ustalić kolejkę budowy podczas pauzy.\n\n[accent]Naciśnij spacje by zapauzować.
|
||||||
tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause.
|
tutorial.pause.mobile = Podczas gry, możesz[accent] zatrzymać grę.[]\nMożesz ustalić kolejkę budowy podczas pauzy.\n\n[accent]Nacniśnij przycisk w lewym górnym rogu by zapauzować.
|
||||||
tutorial.unpause = Now press space again to unpause.
|
tutorial.unpause = Teraz znowu naciśnij spacje by odpauzować.
|
||||||
tutorial.unpause.mobile = Now press it again to unpause.
|
tutorial.unpause.mobile = Naciśnij go znowu by odpauzować.
|
||||||
tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
|
tutorial.breaking = Bloki często wymagają rozbiórki.\n[accent]Przytrzymaj prawy przcisk myszy[] by niszczyć wszystkie wybrane bloki.[]\n\n[accent]Zniszcz wszystkie bloki złomu na lewo od twojego rdzenia używając selekcji obszarowej.
|
||||||
tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
|
tutorial.breaking.mobile = Bloki często wymagają rozbiórki.\n[accent]Wybierz tryb dekonstrukcji[], a następnie dotknij blok by zacząć go niszczyć.\nZdekonstruuj obszarowo poprzez przytrzymanie palcem przez moment[] i przesunięcie go w jakimś kierunku.\nNaciśnij przycisk ptaszka by potwierdzić rozbiórkę.\n\n[accent]Zniszcz wszystkie bloki złomu na lewo od twojego rdzenia używając selekcji obszarowej.
|
||||||
tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[]
|
tutorial.withdraw = Czasami, konieczne jest wyjmowanie przedmiotów prosto z bloków.\nBy tego dokonać, [accent]kliknij blok[] z przedmiotami w nim, potem [accent]kliknij przedmiot[] w inwentarzu.\nMożesz zebrać wiele przedmiotów naraz poprzez [accent]kliknięcie i przytrzymanie[].\n\n[accent]Zabierz trochę miedzi z rdzenia.[]
|
||||||
tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[]
|
tutorial.deposit = Włóż przedmioty do bloków poprzez przeciągnięcie z twojego statku do danego bloku.\n\n[accent]Włóż miedź z powrotem do rdzenia .[]
|
||||||
tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves.[accent] Click[] to shoot.\nBuild more turrets and drills. Mine more copper.
|
tutorial.waves = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdżeń przez 2 fale.[accent] Kliknij[] by strzelać.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi.
|
||||||
tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
|
tutorial.waves.mobile = [lightgray] Wrogowie[] nadchodzą.\n\nBroń swój rdzeń przez 2 fale. Twój statek będzie automatycznie atakował wrogów.\nZbuduj wiecej działek i wierteł. Wydobądź więcej miedzi.
|
||||||
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
tutorial.launch = Kiedy dotrzesz do określonej fali, masz możliwość[accent] wystrzelenia rdzenia[], pozostawiając struktury obronne za sobą i[accent] otrzymując wszystkie surowce znajdujące się w rdzeniu.[]\nSurowce te mogą potem zostać użyte do odkrywania nowych technologii.\n\n[accent]Naciśnij przycisk Wystrzału.
|
||||||
item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji.
|
item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji.
|
||||||
item.lead.description = Podstawowy matriał. Używany w przesyle przemiotów i płynów. Nie jest on przypadkiem szkodliwy?
|
item.lead.description = Podstawowy matriał. Używany w przesyle przemiotów i płynów. Nie jest on przypadkiem szkodliwy?
|
||||||
item.metaglass.description = Niesamowite silne szkło. Szeroko używane w transporcie i przechowywaniu płynów.
|
item.metaglass.description = Wyjątkowo wytrzymały stop szkła. Szeroko używany w transporcie i przechowywaniu płynów.
|
||||||
item.graphite.description = Zmineralizowany węgiel, wykorzystywany do amunicji i izolacji elektrycznej.
|
item.graphite.description = Zmineralizowany węgiel, wykorzystywany do amunicji i izolacji elektrycznej.
|
||||||
item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne.
|
item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne.
|
||||||
item.coal.description = Zwykły i łatwo dostępny materiał energetyczny.
|
item.coal.description = Zwykły i łatwo dostępny materiał energetyczny.
|
||||||
item.titanium.description = Rzadki i bardzo lekki materiał. Używany w bardzo zaawansowanym przewodnictwie, wiertłach i samolotach. Poczuj się jak Tytan!
|
item.titanium.description = Rzadki i bardzo lekki materiał. Używany w bardzo zaawansowanym przewodnictwie, wiertłach i samolotach. Poczuj się jak Tytan!
|
||||||
item.thorium.description = Zwarty i radioaktywny materiał używany w struktucrach i paliwie nuklearnym. Nie trzymaj go w rękach!
|
item.thorium.description = Zwarty i radioaktywny materiał używany w strukturach i paliwie nuklearnym. Nie trzymaj go w rękach!
|
||||||
item.scrap.description = Pozostałości starych budynków i jednostek. Składa się z małej ilości wszystkiego.
|
item.scrap.description = Pozostałości starych budynków i jednostek. Składa się z małej ilości wszystkiego.
|
||||||
item.silicon.description = Niesamowicie przydatny półprzewodnk uźywany w panelach słonecznych i skomplikowanej elektronice. Nie, w Dolinie Krzemowej już nie ma krzemu.
|
item.silicon.description = Niesamowicie przydatny półprzewodnk uźywany w panelach słonecznych i skomplikowanej elektronice. Nie, w Dolinie Krzemowej już nie ma krzemu.
|
||||||
item.plastanium.description = Lekki i plastyczny materiał używany w amunicji odłamkowej i samolotach. Używany też w klockach LEGO (dlatego są niezniszczalne)!
|
item.plastanium.description = Lekki i plastyczny materiał używany w amunicji odłamkowej i samolotach. Używany też w klockach LEGO (dlatego są niezniszczalne)!
|
||||||
@@ -903,12 +944,12 @@ item.spore-pod.description = Używany do wyrobu oleju, materiałów wybuchowych
|
|||||||
item.blast-compound.description = Lotny związek używany w pirotechnice. Może być używany jako materiał energetyczny, ale nie polecam, ale i tak warto spróbować.
|
item.blast-compound.description = Lotny związek używany w pirotechnice. Może być używany jako materiał energetyczny, ale nie polecam, ale i tak warto spróbować.
|
||||||
item.pyratite.description = Niesamowicie palny związek używany w zbrojeniu. Nielegalny w 9 państwach.
|
item.pyratite.description = Niesamowicie palny związek używany w zbrojeniu. Nielegalny w 9 państwach.
|
||||||
liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów.
|
liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów.
|
||||||
liquid.slag.description = Various different types of molten metal mixed together. Can be separated into its constituent minerals, or sprayed at enemy units as a weapon.
|
liquid.slag.description = Wiele różnych metali stopionych i zmieszanych razem. Może zostać rozdzielony na jego metale składowe, albo wystrzelony w wrogie jednostki i użyty jako broń.
|
||||||
liquid.oil.description = Może się palić, eksplodować lub być używana do schładzania.
|
liquid.oil.description = Używany w do produkcji złożonych materiałów. Może zostać przetworzony na węgiel, lub wystrzelony w wrogów przez wieżyczke.
|
||||||
liquid.cryofluid.description = Najefektywniejsza ciecz do schładzania budowli.
|
liquid.cryofluid.description = Najefektywniejsza ciecz do schładzania budowli.
|
||||||
mech.alpha-mech.description = Standardowy mech. Średnia broń i prędkość, leć potrafi stworzyć trzy małe drony do walki.
|
mech.alpha-mech.description = Standardowy mech. Średnia broń i prędkość, leć potrafi stworzyć trzy małe drony do walki.
|
||||||
mech.delta-mech.description = Szybki i wrażliwy mech stworzony do szybkih ataków i ucieczki. Budynką robi prawie nic, lec jest wstanie szybko rozwalić grupę wrogich jednostek piorunami.
|
mech.delta-mech.description = Szybki i wrażliwy mech stworzony do szybkich ataków i ucieczki. Zadaje niewielkie obrażenia strukturom, lecz może bardzo szybko niszczyć spore grupy jednostek wroga przy pomocy jego działek tesli.
|
||||||
mech.tau-mech.description = Mech pomocny. Naprawia budynki drużyny, strzelając w nie. Potrafi wygasić niedalekie pożary i uleczyć bliskich przyjaciół.
|
mech.tau-mech.description = Mech wsparcia. Naprawia budynki drużyny, strzelając w nie. Potrafi wygasić niedalekie pożary i uleczyć bliskich przyjaciół.
|
||||||
mech.omega-mech.description = Duży i silny mech, zaprojektowany na ataki. Jego zdolność pozwala mu na zablokowanie do 90% obrażeń.
|
mech.omega-mech.description = Duży i silny mech, zaprojektowany na ataki. Jego zdolność pozwala mu na zablokowanie do 90% obrażeń.
|
||||||
mech.dart-ship.description = Standardowy statek. Lekki i szybki, ale jest kiepski jak chodzi o walkę i kopanie.
|
mech.dart-ship.description = Standardowy statek. Lekki i szybki, ale jest kiepski jak chodzi o walkę i kopanie.
|
||||||
mech.javelin-ship.description = Statek do ataku i szybkiej ucieczki. Zaczyna powoli, ale przyspiesza do wielkiej prędkości. Przy tej prędkości, może przelecieć koło wrogiej bazy i atakować piorunami czy rakietami.
|
mech.javelin-ship.description = Statek do ataku i szybkiej ucieczki. Zaczyna powoli, ale przyspiesza do wielkiej prędkości. Przy tej prędkości, może przelecieć koło wrogiej bazy i atakować piorunami czy rakietami.
|
||||||
@@ -921,12 +962,12 @@ unit.dagger.description = Podstawowy mech lądowy. Sam jest słaby, lecz przydat
|
|||||||
unit.crawler.description = Jednostka naziemna składająca się z rozebranej ramy z przypiętymi na górze materiałami wybuchowymi. Niezbyt trwały. Wybucha przy kontakcie z wrogami. Chodzi na czterech nogach jak pies.
|
unit.crawler.description = Jednostka naziemna składająca się z rozebranej ramy z przypiętymi na górze materiałami wybuchowymi. Niezbyt trwały. Wybucha przy kontakcie z wrogami. Chodzi na czterech nogach jak pies.
|
||||||
unit.titan.description = Zaawansowana, opancerzona jednostka naziemna. Atakuje zarówno cele naziemne, jak i powietrzne. Wyposażony w dwa miniaturowe miotacze ognia typu Płomień.
|
unit.titan.description = Zaawansowana, opancerzona jednostka naziemna. Atakuje zarówno cele naziemne, jak i powietrzne. Wyposażony w dwa miniaturowe miotacze ognia typu Płomień.
|
||||||
unit.fortress.description = Ciężki mech artyleryjski. Wyposażony w dwa zmodyfikowane działa typu gradowego do ataku na dalekie odległości na konstrukcje i jednostki wroga.
|
unit.fortress.description = Ciężki mech artyleryjski. Wyposażony w dwa zmodyfikowane działa typu gradowego do ataku na dalekie odległości na konstrukcje i jednostki wroga.
|
||||||
unit.eruptor.description = A heavy mech designed to take down structures. Fires a stream of slag at enemy fortifications, melting them and setting volatiles on fire.
|
unit.eruptor.description = Ciężki mech stworzony do niszczenia struktur. Strzela wiązką żużlu w kierunku fortyfikacji wroga, Topiąc je oraz podpalając łatwopalne przedmioty.
|
||||||
unit.wraith.description = Szybka jednostka, stosuje taktyke uderz-uciekaj Namierza jakiekolwiek źródło prądu.
|
unit.wraith.description = Szybka jednostka, stosuje taktyke uderz-uciekaj Namierza jakiekolwiek źródło prądu.
|
||||||
unit.ghoul.description = Ciężki bombowiec dywanowy. Rozdziera struktury wroga, atakując krytyczną infrastrukturę.
|
unit.ghoul.description = Ciężki bombowiec dywanowy. Rozdziera struktury wroga, atakując krytyczną infrastrukturę.
|
||||||
unit.revenant.description = Ciężka, unosząca sie platforma z rakietami.
|
unit.revenant.description = Ciężka, unosząca sie platforma z rakietami.
|
||||||
block.graphite-press.description = Kompresuje kawałki węgla w czyste blaszki grafitu.
|
block.graphite-press.description = Kompresuje kawałki węgla w czyste blaszki grafitu.
|
||||||
block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently.
|
block.multi-press.description = Ulepszona wersja prasy grafitowej. Używa wody i prądu do kompresowania węgla szybko i efektywnie.
|
||||||
block.silicon-smelter.description = Redukuje piasek za pomocą wysoce czystego węgla w celu wytworzenia krzemu.
|
block.silicon-smelter.description = Redukuje piasek za pomocą wysoce czystego węgla w celu wytworzenia krzemu.
|
||||||
block.kiln.description = Stapia ołów i piasek na metaszkło. Wymaga małej ilości energii.
|
block.kiln.description = Stapia ołów i piasek na metaszkło. Wymaga małej ilości energii.
|
||||||
block.plastanium-compressor.description = Wytwarza plastan z oleju i tytanu.
|
block.plastanium-compressor.description = Wytwarza plastan z oleju i tytanu.
|
||||||
@@ -934,9 +975,9 @@ block.phase-weaver.description = Produkuje Włókna Fazowe z radioaktywnego toru
|
|||||||
block.alloy-smelter.description = Produkuje stop Elektrum z tytanu, ołowiu, krzemu i miedzi.
|
block.alloy-smelter.description = Produkuje stop Elektrum z tytanu, ołowiu, krzemu i miedzi.
|
||||||
block.cryofluidmixer.description = Łączy wodę i tytan w lodociecz, który jest znacznie bardziej wydajny w chłodzeniu niż woda.
|
block.cryofluidmixer.description = Łączy wodę i tytan w lodociecz, który jest znacznie bardziej wydajny w chłodzeniu niż woda.
|
||||||
block.blast-mixer.description = Kruszy i miesza skupiska zarodników z piratytem, tworząc związek wybuchowy.
|
block.blast-mixer.description = Kruszy i miesza skupiska zarodników z piratytem, tworząc związek wybuchowy.
|
||||||
block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite.
|
block.pyratite-mixer.description = Miesza węgiel, ołów i piasek tworząc bardzo łatwopalny piratian.
|
||||||
block.melter.description = Przetapia złom na żużel do dalszego przetwarzania lub użycia w wieżyczkach
|
block.melter.description = Przetapia złom na żużel do dalszego przetwarzania lub użycia w wieżyczkach
|
||||||
block.separator.description = Oddziel użyteczne materiały z mieszaniny jaką jest żużel.
|
block.separator.description = Oddziela użyteczne materiały z mieszaniny jaką jest żużel.
|
||||||
block.spore-press.description = Kompresuje kapsułki zarodników w olej.
|
block.spore-press.description = Kompresuje kapsułki zarodników w olej.
|
||||||
block.pulverizer.description = Mieli złom w drobny piasek. Przydatne, gdy brakuje naturalnego piasku.
|
block.pulverizer.description = Mieli złom w drobny piasek. Przydatne, gdy brakuje naturalnego piasku.
|
||||||
block.coal-centrifuge.description = Zestala olej w kawałki węgla.
|
block.coal-centrifuge.description = Zestala olej w kawałki węgla.
|
||||||
@@ -958,21 +999,21 @@ block.surge-wall.description = Najsilniejszy blok obronny.\nMa niewielką szans
|
|||||||
block.surge-wall-large.description = Najsilniejszy blok obronny.\nMa niewielką szansę na wywołanie błyskawicy w kierunku atakującego.\nObejmuje wiele kratek.
|
block.surge-wall-large.description = Najsilniejszy blok obronny.\nMa niewielką szansę na wywołanie błyskawicy w kierunku atakującego.\nObejmuje wiele kratek.
|
||||||
block.door.description = Małe drzwi, które można otwierać i zamykać, klikając na nie.\nJeśli są otwarte, wrogowie mogą strzelać i się przemieszczać przez nie.
|
block.door.description = Małe drzwi, które można otwierać i zamykać, klikając na nie.\nJeśli są otwarte, wrogowie mogą strzelać i się przemieszczać przez nie.
|
||||||
block.door-large.description = Duże drzwi, które można otwierać i zamykać, klikając na nie.\nJeśli są otwarte, wrogowie mogą strzelać i się przemieszczać przez nie.\nObejmuje wiele kratek.
|
block.door-large.description = Duże drzwi, które można otwierać i zamykać, klikając na nie.\nJeśli są otwarte, wrogowie mogą strzelać i się przemieszczać przez nie.\nObejmuje wiele kratek.
|
||||||
block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency.
|
block.mender.description = Co jakiś czas naprawia bloki w zasięgu. Utrzymuje struktury obronne w dobrym stanie.\nOpcjonalnie używa silikonu do zwiększenia zasięgu i szybkości naprawy.
|
||||||
block.mend-projector.description = Periodically heals blocks in its vicinity.
|
block.mend-projector.description = Co jakiś czas naprawia bloki w zasięgu. Lepsza wersja naprawiacza.
|
||||||
block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors.
|
block.overdrive-projector.description = Zwiększa szybkość budynków w zasięgu takich jak wiertła czy przenośniki.
|
||||||
block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets.
|
block.force-projector.description = Wytwarza pole siłowe w kształcie sześciokąta wokół siebie, chroniąc budynki i jednostki wewnątrz od obrażeń zadanych przez pociski.
|
||||||
block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy.
|
block.shock-mine.description = Zadaje obrażenia jednostkom wroga którzy na nią wejdą. Ledwo widoczne dla wrogów.
|
||||||
block.conveyor.description = Basic item transport block. Moves items forward and automatically deposits them into turrets or crafters. Rotatable.
|
block.conveyor.description = Podstawowy blok transportowy dla przedmiotów. Automatycznie przesyła przedmioty naprzód do działek oraz maszyn. Można obrócić.
|
||||||
block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors.
|
block.titanium-conveyor.description = Zaawansowany blok transportowy dla przedmiotów. Przesyła przedmioty szybciej od zwykłego przenośnika.
|
||||||
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.junction.description = Używany jako most dla dwóch krzyżujących się przenośników. Przydatne w sytuacjach kiedy dwa różne przenośniki transportują różne surowce do różnych miejsc.
|
||||||
block.bridge-conveyor.description = Zaawansowany blok transportujący. Pozwala na przenoszenie przedmiotów nawet do 3 bloków na każdym terenie, przez każdy budynek.
|
block.bridge-conveyor.description = Zaawansowany blok transportujący. Pozwala na przenoszenie przedmiotów nawet do 3 bloków na każdym terenie, przez każdy budynek.
|
||||||
block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles.
|
block.phase-conveyor.description = Zaawansowany blok transportowy dla przedmiotów. Używa energii przy teleportacji przedmiotów do podłączonego transportera fazowego na spore odległości.
|
||||||
block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki.
|
block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki.
|
||||||
block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów.
|
block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów.
|
||||||
block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków.
|
block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków.
|
||||||
block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona
|
block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona
|
||||||
block.mass-driver.description = Ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range.
|
block.mass-driver.description = Najlepszy blok do transportu przedmiotów. Zbiera wiele przedmiotów naraz a potem wystrzeliwuje je do kolejnej katapulty masy na bardzo duże odległości.
|
||||||
block.mechanical-pump.description = Tania pompa o niskiej przepustowości. Nie wymaga prądu.
|
block.mechanical-pump.description = Tania pompa o niskiej przepustowości. Nie wymaga prądu.
|
||||||
block.rotary-pump.description = Zaawansowana pompa, dwukrotnie większa przepustowość od mechanicznej pompy. Wymaga prądu.
|
block.rotary-pump.description = Zaawansowana pompa, dwukrotnie większa przepustowość od mechanicznej pompy. Wymaga prądu.
|
||||||
block.thermal-pump.description = Najlepsza pompa. Trzy razy szybsza od mechanicznej pompy i jedyna, która może wypompować lawę.
|
block.thermal-pump.description = Najlepsza pompa. Trzy razy szybsza od mechanicznej pompy i jedyna, która może wypompować lawę.
|
||||||
@@ -984,41 +1025,41 @@ block.liquid-junction.description = Działa jak most dla dwóch krzyżujących s
|
|||||||
block.bridge-conduit.description = Zaawansowany blok przenoszący ciecze. Pozwala na przenoszenie cieczy nawet do 3 bloków na każdym terenie, przez każdy budynek.
|
block.bridge-conduit.description = Zaawansowany blok przenoszący ciecze. Pozwala na przenoszenie cieczy nawet do 3 bloków na każdym terenie, przez każdy budynek.
|
||||||
block.phase-conduit.description = Zaawansowany blok do przenoszenia cieczy. Używa prądu, aby przenieść ciecz do połączonego transportera fazowego przez kilka bloków.
|
block.phase-conduit.description = Zaawansowany blok do przenoszenia cieczy. Używa prądu, aby przenieść ciecz do połączonego transportera fazowego przez kilka bloków.
|
||||||
block.power-node.description = Przesyła moc do połączonych węzłów. Można podłączyć do czterech źródeł zasilania, zlewów lub węzłów. Zasila też bloki które go dotykają.
|
block.power-node.description = Przesyła moc do połączonych węzłów. Można podłączyć do czterech źródeł zasilania, zlewów lub węzłów. Zasila też bloki które go dotykają.
|
||||||
block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes.
|
block.power-node-large.description = Posiada większy zasięg niż zwykły węzeł prądu. Można podłączyć do sześciu źródeł zasilania, zlewów lub węzłów.
|
||||||
block.surge-tower.description = An extremely long-range power node with fewer available connections.
|
block.surge-tower.description = Węzęł prądu z bardzo dużym zasięgiem, posiadający mniej możliwych podłączeń.
|
||||||
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.description = Przechowuje energię przy nadwyżce produkcji oraz dostarcza energię kiedy jest jej brak, dopóki jest w niej miejsce.
|
||||||
block.battery-large.description = Stores much more power than a regular battery.
|
block.battery-large.description = Przechowuje o wiele wiecej prądu niż standardowa bateria.
|
||||||
block.combustion-generator.description = Wytwarza energię poprzez spalanie łatwopalnych materiałów.
|
block.combustion-generator.description = Wytwarza energię poprzez spalanie łatwopalnych materiałów.
|
||||||
block.thermal-generator.description = Generates power when placed in hot locations.
|
block.thermal-generator.description = Generuje prąd kiedy jest postawiony na źródłach ciepła.
|
||||||
block.turbine-generator.description = Bardziej wydajny niż generator spalania, ale wymaga dodatkowej wody.
|
block.turbine-generator.description = Bardziej wydajny niż generator spalania, ale wymaga dodatkowej wody.
|
||||||
block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite.
|
block.differential-generator.description = Generuje duże ilości prądu. Wykorzystuje różnice temperatur pomiędzy Lodocieczą a spalanym Piratianem.
|
||||||
block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor.
|
block.rtg-generator.description = Termoelektryczny generator wykorzystujący izotopy promieniotwórcze. Nie wymaga chłodzenia, ale produkuje mniej energii od reaktora torowego.
|
||||||
block.solar-panel.description = Provides a small amount of power from the sun.
|
block.solar-panel.description = Wytwarza małe ilości prądu wykorzystując energię słoneczną.
|
||||||
block.solar-panel-large.description = Provides much better power supply than a standard solar panel, but is also much more expensive to build.
|
block.solar-panel-large.description = Wytwarza o wiele więcej prądu niż zwykły panel słoneczny, ale jest o wiele droższy w budowie.
|
||||||
block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. Power output depends on fullness, with base power generated at full capacity.
|
block.thorium-reactor.description = Produkuje bardzo duże ilości prądu z wysoce radioaktywnego toru. Wymaga ciągłego chłodzenia. Silnie eksploduje jeśli nie zostanie dostarczona wystarczająca ilość chłodziwa. Produkcja energii zależy od zapełnienia, produkując bazową ilość energii przy całkowitym zapełnieniu.
|
||||||
block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process.
|
block.impact-reactor.description = Zaawansowany generator, zdolny do produkcji ogromnych ilości prądu u szczytu swoich możliwości. Wymaga znacznych ilości energii do rozpoczęcia procesu.
|
||||||
block.mechanical-drill.description = Tanie wiertło. Kiedy położnone na odpowiednich polach, wysyła przedmioty w wolnym tempie.
|
block.mechanical-drill.description = Tanie wiertło. Kiedy położnone na odpowiednich polach, wysyła przedmioty w wolnym tempie.
|
||||||
block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure.
|
block.pneumatic-drill.description = Ulepszone wiertło, które jest szybsze i może wykopywać twardsze surowce przy użyciu ciśnienia.
|
||||||
block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill.
|
block.laser-drill.description = Pozwala kopać jeszcze szybciej poprzez technologię laserową, ale wymaga energii. Dodatkowo, radioaktywny tor może zostać wydobyty przez to wiertło.
|
||||||
block.blast-drill.description = The ultimate drill. Requires large amounts of power.
|
block.blast-drill.description = Najlepsze wiertło. Wymaga dużych ilości energii.
|
||||||
block.water-extractor.description = Wydobywa wodę z ziemi. Użyj go, gdy w pobliżu nie ma jeziora.
|
block.water-extractor.description = Wydobywa wodę z ziemi. Użyj go, gdy w pobliżu nie ma jeziora.
|
||||||
block.cultivator.description = Uprawia małe skupiska zarodników w gotowe do użytku kapsułki.
|
block.cultivator.description = Uprawia małe skupiska zarodników w gotowe do użytku kapsułki.
|
||||||
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.oil-extractor.description = Używa bardzo dużych ilości energii do ekstrakcji ropy z piasku. Używaj go w sytuacji kiedy nie ma bezpośredniego źródła ropy w okolicy.
|
||||||
block.core-shard.description = The first iteration of the core capsule. Once destroyed, all contact to the region is lost. Do not let this happen.
|
block.core-shard.description = Pierwsza wersja rdzenia. Gdy zostaje zniszczony, wszelki kontakt do regionu zostaje utracony. Nie pozwól na to.
|
||||||
block.core-foundation.description = The second version of the core. Better armored. Stores more resources.
|
block.core-foundation.description = Druga wersja rdzenia. Lepiej opancerzony. Przechowuje więcej surowców.
|
||||||
block.core-nucleus.description = The third and final iteration of the core capsule. Extremely well armored. Stores massive amounts of resources.
|
block.core-nucleus.description = Trzecia i ostatnia wersja rdzenia. Bardzo dobrze opanczerzony. Przechowuje ogromne ilości surowców.
|
||||||
block.vault.description = Stores a large amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault.
|
block.vault.description = Przechowuje duże ilości przedmiotów każdego rodzaju. [LIGHT_GRAY] Ekstraktor[] może zostać użyty do rozładowania magazynu.
|
||||||
block.container.description = Stores a small amount of items of each type. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container.
|
block.container.description = Przechowuje małe ilości przedmiotów każdego rodzaju. [LIGHT_GRAY] ekstraktor[] może zostać użyty do rozładowania kontenera.
|
||||||
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.unloader.description = Wyciąga przedmioty z kontenera, magazynu oraz rdżenia na przenośniki lub bezpośrednio na przyległe bloki. Typ przedmiotu jaki zostanie wyciągniety może zostać zmieniony poprzez kliknięcie.
|
||||||
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
|
block.launch-pad.description = Wysyła pakiety przedmiotów bez potrzeby wystrzeliwania rdżenia. Niedokończona.
|
||||||
block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently.
|
block.launch-pad-large.description = Ulepszona wersja wyrzutni. Magazynuje więcej przedmiotów. Wysyła częściej.
|
||||||
block.duo.description = Mała, tania wieża. Przydatny przeciwko jednostkom naziemnym.
|
block.duo.description = Mała, tania wieża. Przydatna przeciwko jednostkom naziemnym.
|
||||||
block.scatter.description = Średniej wielkości wieża przeciwlotnicza. Rozsiewa śruty z ołowiu lub strzępy złomu na jednostki wroga.
|
block.scatter.description = Średniej wielkości wieża przeciwlotnicza. Rozsiewa śruty z ołowiu lub strzępy złomu na jednostki wroga.
|
||||||
block.scorch.description = Spala wszystkich wrogów naziemnych w pobliżu. Bardzo skuteczny z bliskiej odległości.
|
block.scorch.description = Spala wszystkich wrogów naziemnych w pobliżu. Bardzo skuteczny z bliskiej odległości.
|
||||||
block.hail.description = Mała wieża artyleryjska, bardzo przydatna, atakuje tylko jednostki naziemne.
|
block.hail.description = Mała wieża artyleryjska, bardzo przydatna, atakuje tylko jednostki naziemne.
|
||||||
block.wave.description = Średniej wielkości szybkostrzelna wieżyczka, która wystrzeliwuje płynne bąbelki. Gasi ogień jeżeli jest w niej woda lub lodociecz
|
block.wave.description = Średniej wielkości szybkostrzelna wieżyczka, która wystrzeliwuje płynne bąbelki. Gasi ogień jeżeli jest w niej woda lub lodociecz
|
||||||
block.lancer.description = Średniej wielkości wieżyczka, która strzela naładowanymi wiązkami elektryczności.
|
block.lancer.description = Średniej wielkości wieżyczka, która strzela naładowanymi wiązkami elektryczności.
|
||||||
block.arc.description = Mała wieża bliskiego zasięgu, która wystrzeliwuje elektryczność losowym łukiem w kierunku wroga.
|
block.arc.description = Mała wieża bliskiego zasięgu, która wystrzeliwuje wiązki tesli losowym łukiem w kierunku wroga.
|
||||||
block.swarmer.description = Średniej wielkości wieżyczka, która strzela rakietami wybuchowymi.
|
block.swarmer.description = Średniej wielkości wieżyczka, która strzela rakietami wybuchowymi.
|
||||||
block.salvo.description = Średniej wielkości wieża strzelająca salwami.
|
block.salvo.description = Średniej wielkości wieża strzelająca salwami.
|
||||||
block.fuse.description = Duża wieża, która strzela potężnymi wiązkami krótkiego zasięgu.
|
block.fuse.description = Duża wieża, która strzela potężnymi wiązkami krótkiego zasięgu.
|
||||||
@@ -1029,19 +1070,19 @@ block.meltdown.description = Duża wieża, która strzela potężnymi wiązkami
|
|||||||
block.command-center.description = Wydaje polecenia ruchu sojuszniczym jednostkom na całej mapie.\nPowoduje patrolowanie jednostek, atakowanie wrogiego rdzenia lub wycofanie się do rdzenia / fabryki. Gdy nie ma rdzenia wroga, jednostki będą domyślnie patrolować pod dowództwem ataku.
|
block.command-center.description = Wydaje polecenia ruchu sojuszniczym jednostkom na całej mapie.\nPowoduje patrolowanie jednostek, atakowanie wrogiego rdzenia lub wycofanie się do rdzenia / fabryki. Gdy nie ma rdzenia wroga, jednostki będą domyślnie patrolować pod dowództwem ataku.
|
||||||
block.draug-factory.description = Produkuje drony wydobywcze Draug.
|
block.draug-factory.description = Produkuje drony wydobywcze Draug.
|
||||||
block.spirit-factory.description = Produkuje lekkie drony, które naprawiają bloki.
|
block.spirit-factory.description = Produkuje lekkie drony, które naprawiają bloki.
|
||||||
block.phantom-factory.description = Produkuje zaawansowane drony które pomgają przy budowie.
|
block.phantom-factory.description = Produkuje zaawansowane drony które pomagają przy budowie.
|
||||||
block.wraith-factory.description = Produces fast, hit-and-run interceptor units.
|
block.wraith-factory.description = Produkuje szybkie jednostki powietrzne typu "uderz-uciekaj".
|
||||||
block.ghoul-factory.description = Produces heavy carpet bombers.
|
block.ghoul-factory.description = Produkuje ciężkie bombowce dywanowe.
|
||||||
block.revenant-factory.description = Produces heavy laser air units.
|
block.revenant-factory.description = Produkuje ciężkie jednostki powietrzne z wyrzutniami rakiet.
|
||||||
block.dagger-factory.description = Produces basic ground units.
|
block.dagger-factory.description = Produkuje podstawowe jednostki lądowe.
|
||||||
block.crawler-factory.description = Produces fast self-destructing swarm units.
|
block.crawler-factory.description = Produkuje szybkie jednostki lądowe typu "kamikaze".
|
||||||
block.titan-factory.description = Produces advanced, armored ground units.
|
block.titan-factory.description = Produkuje zaawansowane, opancerzone jednostki lądowe.
|
||||||
block.fortress-factory.description = Produces heavy artillery ground units.
|
block.fortress-factory.description = Produkuje naziemne jednostki ciężkiej artylerii.
|
||||||
block.repair-point.description = Bez przerw ulecza najbliższą zniszczoną jednostkę w jego zasięgu.
|
block.repair-point.description = Bez przerw ulecza najbliższą zniszczoną jednostkę w jego zasięgu.
|
||||||
block.dart-mech-pad.description = Provides transformation into a basic attack mech.\nUse by tapping while standing on it.
|
block.dart-mech-pad.description = Umożliwia transformacje w podstawowego mecha bojowego.\nUżyj klikając podczas stania na nim.
|
||||||
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.delta-mech-pad.description = Opuść swój obecny statek i zamień go na szybki, lekko opancerzony mech stworzony do ataków typu uderz-uciekaj.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
|
||||||
block.tau-mech-pad.description = 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.tau-mech-pad.description = Opuść swój obecny statek i zamień go na mech wsparcia który może leczyć sojusznicze struktury i jednostki.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
|
||||||
block.omega-mech-pad.description = 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.omega-mech-pad.description = Opuść swój obecny statek i zamień go na masywny, dobrze opancerzony mech, przeznaczony do ataków na froncie.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
|
||||||
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.javelin-ship-pad.description = Opuść swój obecny statek i zamień go na silny i szybki statek przechwytujący z bronią błyskawicową.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
|
||||||
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.trident-ship-pad.description = Opuść swój obecny statek i zamień go na dość dobrze opancerzony ciężki bombowiec.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
|
||||||
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.glaive-ship-pad.description = Opuść swój obecny statek i zamień go na duży, mocno opancerzony statek bojowy.\nUżyj, klikając dwukrotnie podczas stania na lądowisku.
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
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[]
|
||||||
credits = Creditos
|
credits = Créditos
|
||||||
contributors = Tradutores e contribuidores
|
contributors = Tradutores e contribuidores
|
||||||
discord = Junte-se ao Discord do Mindustry! (Lá nós falamos em inglês)
|
discord = Junte-se ao Discord do Mindustry! (Lá nós falamos em inglês)
|
||||||
link.discord.description = O discord oficial do Mindustry
|
link.discord.description = O discord oficial do Mindustry
|
||||||
link.github.description = Codigo fonte do jogo.
|
link.github.description = Código fonte do jogo.
|
||||||
link.changelog.description = List of update changes
|
link.changelog.description = List of update changes
|
||||||
link.dev-builds.description = Desenvolvimentos Instaveis
|
link.dev-builds.description = Desenvolvimentos Instáveis
|
||||||
link.trello.description = Trello Oficial para Updates Planejados
|
link.trello.description = Trello Oficial para Updates Planejados
|
||||||
link.itch.io.description = Pagina da Itch.io com os Downloads
|
link.itch.io.description = Pagina da Itch.io com os Downloads
|
||||||
link.google-play.description = Listamento do google play store
|
link.google-play.description = Listamento do google play store
|
||||||
link.wiki.description = Wiki oficial do Mindustry
|
link.wiki.description = Wiki oficial do Mindustry
|
||||||
linkfail = Falha ao abrir o link\nO Url foi copiado
|
linkfail = Falha ao abrir o link\nO Url foi copiado
|
||||||
screenshot = Screenshot salvo para {0}
|
screenshot = Screenshot salvo para {0}
|
||||||
screenshot.invalid = Mapa grande demais, Potencialmente sem memoria suficiente para captura.
|
screenshot.invalid = Mapa grande demais, Potencialmente sem memória suficiente para captura.
|
||||||
gameover = O núcleo foi destruído.
|
gameover = O núcleo foi destruído.
|
||||||
gameover.pvp = O time[accent] {0}[] É vitorioso!
|
gameover.pvp = O time[accent] {0}[] É vitorioso!
|
||||||
highscore = [YELLOW]Novo recorde!
|
highscore = [YELLOW]Novo recorde!
|
||||||
load.sound = Sounds
|
load.sound = Sons
|
||||||
load.map = Maps
|
load.map = Mapas
|
||||||
load.image = Images
|
load.image = Imagens
|
||||||
load.content = Content
|
load.content = Conteúdo
|
||||||
load.system = System
|
load.system = Sistema
|
||||||
stat.wave = Hordas derrotadas:[accent] {0}
|
stat.wave = Hordas derrotadas:[accent] {0}
|
||||||
stat.enemiesDestroyed = Enimigos Destruídos:[accent] {0}
|
stat.enemiesDestroyed = Inimigos Destruídos:[accent] {0}
|
||||||
stat.built = Construções construídas:[accent] {0}
|
stat.built = Construções construídas:[accent] {0}
|
||||||
stat.destroyed = Construções destruídas:[accent] {0}
|
stat.destroyed = Construções destruídas:[accent] {0}
|
||||||
stat.deconstructed = Construções desconstruídas:[accent] {0}
|
stat.deconstructed = Construções desconstruídas:[accent] {0}
|
||||||
@@ -66,18 +66,18 @@ players.single = {0} Jogador Ativo
|
|||||||
server.closing = [accent]Fechando servidor...
|
server.closing = [accent]Fechando servidor...
|
||||||
server.kicked.kick = Voce foi expulso do servidor!
|
server.kicked.kick = Voce foi expulso do servidor!
|
||||||
server.kicked.serverClose = Servidor Fechado.
|
server.kicked.serverClose = Servidor Fechado.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Você foi expulso desse servidor. Tchau.
|
||||||
server.kicked.clientOutdated = Cliente desatualizado! Atualize seu jogo!
|
server.kicked.clientOutdated = Cliente desatualizado! Atualize seu jogo!
|
||||||
server.kicked.serverOutdated = Servidor desatualiado! Peca ao dono para atualizar!
|
server.kicked.serverOutdated = Servidor desatualiado! Peça ao dono para atualizar!
|
||||||
server.kicked.banned = Voce foi banido do servidor.
|
server.kicked.banned = Você foi banido do servidor.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = Este servidor não é compatível com a sua versão.
|
||||||
server.kicked.recentKick = Voce foi banido recentemente.\nEspere para conectar de novo.
|
server.kicked.recentKick = Voce foi banido recentemente.\nEspere para conectar de novo.
|
||||||
server.kicked.nameInUse = Este nome ja esta sendo usado\nneste servidor.
|
server.kicked.nameInUse = Este nome já esta sendo usado\nneste servidor.
|
||||||
server.kicked.nameEmpty = Voce deve ter pelo menos uma letra ou numero.
|
server.kicked.nameEmpty = Voce deve ter pelo menos uma letra ou número.
|
||||||
server.kicked.idInUse = Voce ja esta neste servidor! Conectar com duas contas não é permitido.
|
server.kicked.idInUse = Voce ja está neste servidor! Conectar com duas contas não é permitido.
|
||||||
server.kicked.customClient = Este servidor não suporta construções customizadas. Baixe a versão original.
|
server.kicked.customClient = Este servidor não suporta construções customizadas. Baixe a versão original.
|
||||||
server.kicked.gameover = Fim de jogo!
|
server.kicked.gameover = Fim de jogo!
|
||||||
server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
|
server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[]
|
||||||
host.info = The [accent]Hospedar[]Botão Hopeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguem esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall
|
host.info = The [accent]Hospedar[]Botão Hopeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguem esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall
|
||||||
join.info = Aqui, Você pode entar em um [accent]IP De servidor[] Para conectar, Ou descobrir [accent]Servidores[] Da rede local.\nAmbos os servidores LAN e WAN São suportados.\n\n[LIGHT_GRAY]Note: Não tem uma lista de servidores automaticos; Se você quer conectar ao IP de alguem, Você precisa pedir o IP Ao Rosteador.
|
join.info = Aqui, Você pode entar em um [accent]IP De servidor[] Para conectar, Ou descobrir [accent]Servidores[] Da rede local.\nAmbos os servidores LAN e WAN São suportados.\n\n[LIGHT_GRAY]Note: Não tem uma lista de servidores automaticos; Se você quer conectar ao IP de alguem, Você precisa pedir o IP Ao Rosteador.
|
||||||
hostserver = Hospedar servidor
|
hostserver = Hospedar servidor
|
||||||
@@ -115,12 +115,12 @@ confirmunadmin = Certeza que quer remover o estatus de adminstrador deste jogado
|
|||||||
joingame.title = Entrar no jogo
|
joingame.title = Entrar no jogo
|
||||||
joingame.ip = IP:
|
joingame.ip = IP:
|
||||||
disconnect = Desconectado.
|
disconnect = Desconectado.
|
||||||
disconnect.data = Falha ao abrir a data do mundo!
|
disconnect.data = Falha ao abrir os dados do mundo!
|
||||||
connecting = [accent]Conectando...
|
connecting = [accent]Conectando...
|
||||||
connecting.data = [accent]Carregando data do mundo...
|
connecting.data = [accent]Carregando dados do mundo...
|
||||||
server.port = Porte:
|
server.port = Porte:
|
||||||
server.addressinuse = Senha em uso!
|
server.addressinuse = Senha em uso!
|
||||||
server.invalidport = Numero de port invalido!
|
server.invalidport = Numero de porta invalido!
|
||||||
server.error = [crimson]Erro ao hospedar o servidor: [accent]{0}
|
server.error = [crimson]Erro ao hospedar o servidor: [accent]{0}
|
||||||
save.old = Este save é para uma versão antiga do jogo, E não pode ser usado.\n\n[LIGHT_GRAY]Salvar Versões antigas vai ser Implementado Na versão 4.0 completa
|
save.old = Este save é para uma versão antiga do jogo, E não pode ser usado.\n\n[LIGHT_GRAY]Salvar Versões antigas vai ser Implementado Na versão 4.0 completa
|
||||||
save.new = Novo Save
|
save.new = Novo Save
|
||||||
@@ -161,15 +161,15 @@ cancel = Cancelar
|
|||||||
openlink = Abrir Link
|
openlink = Abrir Link
|
||||||
copylink = Copiar link
|
copylink = Copiar link
|
||||||
back = Voltar
|
back = Voltar
|
||||||
data.export = Export Data
|
data.export = Exportar Data
|
||||||
data.import = Import Data
|
data.import = Importar Data
|
||||||
data.exported = Data exported.
|
data.exported = Data exportada.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Isso não é daa de jogo válida.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Importal data externa irá deletar[scarlet] toda[] sua data atual.\n[accent]Isso não pode ser desfeito![]\n\nQuando sua data é importada, seu jogo ira sair imediatamente.
|
||||||
classic.export = Export Classic Data
|
classic.export = Exportar data classica
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
||||||
quit.confirm = Você tem certeza que quer sair?
|
quit.confirm = Você tem certeza que quer sair?
|
||||||
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
|
quit.confirm.tutorial = Você tem certeza você sabe oque Você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[]
|
||||||
loading = [accent]Carregando...
|
loading = [accent]Carregando...
|
||||||
saving = [accent]Salvando...
|
saving = [accent]Salvando...
|
||||||
wave = [accent]Horda {0}
|
wave = [accent]Horda {0}
|
||||||
@@ -188,7 +188,7 @@ map.delete.confirm = Certeza que quer deletar este mapa? Isto não pode ser desf
|
|||||||
map.random = [accent]Mapa aleatório
|
map.random = [accent]Mapa aleatório
|
||||||
map.nospawn = Esse mapa não contém um [yellow]núcleo[] para o jogador Nascer! [ROYAL]blue[] Coloque um [yellow]núcleo[] no editor de mapa.
|
map.nospawn = Esse mapa não contém um [yellow]núcleo[] para o jogador Nascer! [ROYAL]blue[] Coloque um [yellow]núcleo[] no editor de mapa.
|
||||||
map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[SCARLET] Núcleos vermelhos[] no mapa no editor.
|
map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[SCARLET] Núcleos vermelhos[] no mapa no 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.nospawn.attack = Esse mapa não tem nenhum núcleos enimigos para o jogador atacar! coloque[SCARLET] Núcleos[] vermelhos no editor.
|
||||||
map.invalid = Erro ao carregar o mapa: Arquivo de mapa invalido ou corrupto.
|
map.invalid = Erro ao carregar o mapa: Arquivo de mapa invalido ou corrupto.
|
||||||
editor.brush = Pincel
|
editor.brush = Pincel
|
||||||
editor.openin = Abrir no Editor
|
editor.openin = Abrir no Editor
|
||||||
@@ -200,8 +200,8 @@ editor.description = Descrição:
|
|||||||
editor.waves = Ondas:
|
editor.waves = Ondas:
|
||||||
editor.rules = Regras:
|
editor.rules = Regras:
|
||||||
editor.generation = Generation:
|
editor.generation = Generation:
|
||||||
editor.ingame = Editar em-jogo
|
editor.ingame = Editar em jogo
|
||||||
editor.newmap = New Map
|
editor.newmap = Novo mapa
|
||||||
waves.title = Hordas
|
waves.title = Hordas
|
||||||
waves.remove = Remover
|
waves.remove = Remover
|
||||||
waves.never = <nunca>
|
waves.never = <nunca>
|
||||||
@@ -227,7 +227,7 @@ editor.errorload = Erro carregando arquivo:\n[accent]{0}
|
|||||||
editor.errorsave = Erro salvando arquivo:\n[accent]{0}
|
editor.errorsave = Erro salvando arquivo:\n[accent]{0}
|
||||||
editor.errorimage = Isso é uma imagem, Não um mapa. Não vá por aí mudando extensões esperando que funcione.\n\nSe você quer importar um mapa legacy, Use o botão 'Importar mapa legacy'no editor.
|
editor.errorimage = Isso é uma imagem, Não um mapa. Não vá por aí mudando extensões esperando que funcione.\n\nSe você quer importar um mapa legacy, Use o botão 'Importar mapa legacy'no editor.
|
||||||
editor.errorlegacy = Esse mapa é velho demais, E usa um formato de mapa legacy que não é mais suportado.
|
editor.errorlegacy = Esse mapa é velho demais, E usa um formato de mapa legacy que não é mais suportado.
|
||||||
editor.errorheader = Este arquivo de mapa não é mais valido, Ou esta corrompido.
|
editor.errorheader = Este arquivo de mapa não é mais válido ou está corrompido.
|
||||||
editor.errorname = Mapa não tem nome definido.
|
editor.errorname = Mapa não tem nome definido.
|
||||||
editor.update = atualizar
|
editor.update = atualizar
|
||||||
editor.randomize = Randomizar
|
editor.randomize = Randomizar
|
||||||
@@ -240,14 +240,14 @@ editor.saved = Salvo!
|
|||||||
editor.save.noname = Seu mapa não tem um nome! Coloque um no menu de "Informação do mapa"
|
editor.save.noname = Seu mapa não tem um nome! Coloque um no menu de "Informação do mapa"
|
||||||
editor.save.overwrite = O seu mapa Substitui um mapa já construído! Coloque um nome diferente no menu "Informação do mapa"
|
editor.save.overwrite = O seu mapa Substitui um mapa já construído! Coloque um nome diferente no menu "Informação do mapa"
|
||||||
editor.import.exists = [scarlet]Não foi possivel importar:[] Um mapa Construído chamado '{0}' Já existe!
|
editor.import.exists = [scarlet]Não foi possivel importar:[] Um mapa Construído chamado '{0}' Já existe!
|
||||||
editor.import = Importando...
|
editor.import = Importar...
|
||||||
editor.importmap = Importar Mapa
|
editor.importmap = Importar Mapa
|
||||||
editor.importmap.description = Importar um mapa existente
|
editor.importmap.description = Importar um mapa existente
|
||||||
editor.importfile = Importar arquivo
|
editor.importfile = Importar arquivo
|
||||||
editor.importfile.description = Importar um arquivo externo
|
editor.importfile.description = Importar um arquivo externo
|
||||||
editor.importimage = Importar imagem do terreno
|
editor.importimage = Importar imagem do terreno
|
||||||
editor.importimage.description = Importar uma imagem de terreno externa
|
editor.importimage.description = Importar uma imagem de terreno externa
|
||||||
editor.export = Exportando...
|
editor.export = Exportar...
|
||||||
editor.exportfile = Exportar arquivo
|
editor.exportfile = Exportar arquivo
|
||||||
editor.exportfile.description = Exportar um arquivo de mapa
|
editor.exportfile.description = Exportar um arquivo de mapa
|
||||||
editor.exportimage = Exportar imagem de terreno
|
editor.exportimage = Exportar imagem de terreno
|
||||||
@@ -260,16 +260,16 @@ editor.mapname = Nome do Mapa:
|
|||||||
editor.overwrite = [accent]Aviso!\nIsso Subistitui um mapa existente.
|
editor.overwrite = [accent]Aviso!\nIsso Subistitui um mapa existente.
|
||||||
editor.overwrite.confirm = [scarlet]Aviso![] Um mapa com esse nome já existe. Tem certeza que deseja substituir?
|
editor.overwrite.confirm = [scarlet]Aviso![] Um mapa com esse nome já existe. Tem certeza que deseja substituir?
|
||||||
editor.selectmap = Selecione uma mapa para carregar:
|
editor.selectmap = Selecione uma mapa para carregar:
|
||||||
toolmode.replace = Replace
|
toolmode.replace = Substituir
|
||||||
toolmode.replace.description = Draws only on solid blocks.
|
toolmode.replace.description = Draws only on solid blocks.
|
||||||
toolmode.replaceall = Replace All
|
toolmode.replaceall = Substituir tudo
|
||||||
toolmode.replaceall.description = Replace all blocks in map.
|
toolmode.replaceall.description = Substitui todos os blocos no mapa
|
||||||
toolmode.orthogonal = Orthogonal
|
toolmode.orthogonal = Orthogonal
|
||||||
toolmode.orthogonal.description = Draws only orthogonal lines.
|
toolmode.orthogonal.description = Draws only orthogonal lines.
|
||||||
toolmode.square = Square
|
toolmode.square = Square
|
||||||
toolmode.square.description = Square brush.
|
toolmode.square.description = Square brush.
|
||||||
toolmode.eraseores = Erase Ores
|
toolmode.eraseores = Apagar minérios
|
||||||
toolmode.eraseores.description = Erase only ores.
|
toolmode.eraseores.description = Apaga apenas minérios.
|
||||||
toolmode.fillteams = Fill Teams
|
toolmode.fillteams = Fill Teams
|
||||||
toolmode.fillteams.description = Fill teams instead of blocks.
|
toolmode.fillteams.description = Fill teams instead of blocks.
|
||||||
toolmode.drawteams = Draw Teams
|
toolmode.drawteams = Draw Teams
|
||||||
@@ -309,7 +309,7 @@ width = Largura:
|
|||||||
height = Altura:
|
height = Altura:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
play = Jogar
|
play = Jogar
|
||||||
campaign = Campaign
|
campaign = Campanha
|
||||||
load = Carregar
|
load = Carregar
|
||||||
save = Salvar
|
save = Salvar
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
@@ -318,14 +318,14 @@ ping = Ping: {0}ms
|
|||||||
language.restart = Por favor Reinicie seu jogo para a tradução tomar efeito.
|
language.restart = Por favor Reinicie seu jogo para a tradução tomar efeito.
|
||||||
settings = Configurações
|
settings = Configurações
|
||||||
tutorial = Tutorial
|
tutorial = Tutorial
|
||||||
tutorial.retake = Re-Take Tutorial
|
tutorial.retake = Refazer Tutorial
|
||||||
editor = Editor
|
editor = Editor
|
||||||
mapeditor = Editor de mapa
|
mapeditor = Editor de mapa
|
||||||
donate = Doar
|
donate = Doar
|
||||||
abandon = Abandonar
|
abandon = Abandonar
|
||||||
abandon.text = Esta zona e todos os seus recursos serão perdidos para o enimigo.
|
abandon.text = Esta zona e todos os seus recursos serão perdidos para o inimigo.
|
||||||
locked = Trancado
|
locked = Trancado
|
||||||
complete = [LIGHT_GRAY]Complete:
|
complete = [LIGHT_GRAY]Completo:
|
||||||
zone.requirement = Onda {0} Na zona {1}
|
zone.requirement = Onda {0} Na zona {1}
|
||||||
resume = Resumir Zona:\n[LIGHT_GRAY]{0}
|
resume = Resumir Zona:\n[LIGHT_GRAY]{0}
|
||||||
bestwave = [LIGHT_GRAY]Melhor: {0}
|
bestwave = [LIGHT_GRAY]Melhor: {0}
|
||||||
@@ -334,7 +334,7 @@ launch.title = Lançamento feito com sucesso
|
|||||||
launch.next = [LIGHT_GRAY]próxima oportunidade na onda {0}
|
launch.next = [LIGHT_GRAY]próxima oportunidade na onda {0}
|
||||||
launch.unable2 = [scarlet]Unable to LAUNCH.[]
|
launch.unable2 = [scarlet]Unable to LAUNCH.[]
|
||||||
launch.confirm = Isto vai lançar todos os seus recursos no seu núcleo.\nVoce não será capaz de retornar para esta base.
|
launch.confirm = Isto vai lançar todos os seus recursos no seu núcleo.\nVoce não será capaz de retornar para esta base.
|
||||||
launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
|
launch.skip.confirm = Se você pular a onda agora, você não será capaz de lançar até ondas mais avançadas.
|
||||||
uncover = Descobrir
|
uncover = Descobrir
|
||||||
configure = Configurar carregamento
|
configure = Configurar carregamento
|
||||||
configure.locked = [LIGHT_GRAY]Alcançe a onda {0}\npara Configurar o Loadout.
|
configure.locked = [LIGHT_GRAY]Alcançe a onda {0}\npara Configurar o Loadout.
|
||||||
@@ -342,9 +342,9 @@ zone.unlocked = [LIGHT_GRAY]{0} Desbloqueado.
|
|||||||
zone.requirement.complete = Onda {0} alcançada:\n{1} Requerimentos da zona alcançada.
|
zone.requirement.complete = Onda {0} alcançada:\n{1} Requerimentos da zona alcançada.
|
||||||
zone.config.complete = Onda {0} Alcançada:\nLoadout config desbloqueado.
|
zone.config.complete = Onda {0} Alcançada:\nLoadout config desbloqueado.
|
||||||
zone.resources = Recursos detectados:
|
zone.resources = Recursos detectados:
|
||||||
zone.objective = [lightgray]Objective: [accent]{0}
|
zone.objective = [lightgray]Objetivo: [accent]{0}
|
||||||
zone.objective.survival = Survive
|
zone.objective.survival = Sobreviver
|
||||||
zone.objective.attack = Destroy Enemy Core
|
zone.objective.attack = Destruir o núcleo inimigo
|
||||||
add = Adicionar...
|
add = Adicionar...
|
||||||
boss.health = Saúde do chefe
|
boss.health = Saúde do chefe
|
||||||
connectfail = [crimson]Falha ao entrar no servidor: [accent]{0}
|
connectfail = [crimson]Falha ao entrar no servidor: [accent]{0}
|
||||||
@@ -371,8 +371,8 @@ zone.saltFlats.name = Salt Flats
|
|||||||
zone.impact0078.name = Impact 0078
|
zone.impact0078.name = Impact 0078
|
||||||
zone.crags.name = Crags
|
zone.crags.name = Crags
|
||||||
zone.fungalPass.name = Fungal Pass
|
zone.fungalPass.name = Fungal Pass
|
||||||
zone.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on.
|
zone.groundZero.description = Uma ótima localização para começar de novo. Baixa ameaça inimiga. Poucos recursos.\nColete o máximo de chumbo e cobre possível.\nBora!
|
||||||
zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The fridgid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders.
|
zone.frozenForest.description = Até aqui, perto das montanhas, os esporos se espalharam. As baixas temperaturas não podem contê-los para sempre.\n\nComeçe a busca por energia. Construa geradores à combustão. Aprenda a usar os reparadores (menders).
|
||||||
zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed.
|
zone.desertWastes.description = These wastes are vast, unpredictable, and criss-crossed with derelict sector structures.\nCoal is present in the region. Burn it for power, or synthesize graphite.\n\n[lightgray]This landing location cannot be guaranteed.
|
||||||
zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing.
|
zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing.
|
||||||
zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills.
|
zone.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills.
|
||||||
@@ -393,8 +393,8 @@ settings.controls = Controles
|
|||||||
settings.game = Jogo
|
settings.game = Jogo
|
||||||
settings.sound = Som
|
settings.sound = Som
|
||||||
settings.graphics = Gráficos
|
settings.graphics = Gráficos
|
||||||
settings.cleardata = Data do jogo limpa...
|
settings.cleardata = Apagar dados...
|
||||||
settings.clear.confirm = Certeza que quer limpar a data?\nOque é feito não pode ser desfeito!
|
settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito!
|
||||||
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar toda a data, Incluindo saves, mapas, Keybinds e desbloqueados.\nQuando apertar 'ok' Vai apagar toda a data e sair automaticamente.
|
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar toda a data, Incluindo saves, mapas, Keybinds e desbloqueados.\nQuando apertar 'ok' Vai apagar toda a data e sair automaticamente.
|
||||||
settings.clearunlocks = Limpar liberados
|
settings.clearunlocks = Limpar liberados
|
||||||
settings.clearall = Limpar tudo
|
settings.clearall = Limpar tudo
|
||||||
@@ -411,7 +411,7 @@ blocks.booster = Booster
|
|||||||
block.unknown = [LIGHT_GRAY]???
|
block.unknown = [LIGHT_GRAY]???
|
||||||
blocks.powercapacity = Capacidade de Energia
|
blocks.powercapacity = Capacidade de Energia
|
||||||
blocks.powershot = Energia/tiro
|
blocks.powershot = Energia/tiro
|
||||||
blocks.damage = Damage
|
blocks.damage = Dano
|
||||||
blocks.targetsair = Mirar no ar
|
blocks.targetsair = Mirar no ar
|
||||||
blocks.targetsground = Mirar no chão
|
blocks.targetsground = Mirar no chão
|
||||||
blocks.itemsmoved = Velocidade de movimento
|
blocks.itemsmoved = Velocidade de movimento
|
||||||
@@ -429,7 +429,7 @@ blocks.repairtime = Tempo de reparo total do bloco
|
|||||||
blocks.speedincrease = Aumento de velocidade
|
blocks.speedincrease = Aumento de velocidade
|
||||||
blocks.range = Distancia
|
blocks.range = Distancia
|
||||||
blocks.drilltier = Furaveis
|
blocks.drilltier = Furaveis
|
||||||
blocks.drillspeed = Velocidade da furadeira base
|
blocks.drillspeed = Velocidade da broca base
|
||||||
blocks.boosteffect = Efeito do Boost
|
blocks.boosteffect = Efeito do Boost
|
||||||
blocks.maxunits = Maximo de unidades ativas
|
blocks.maxunits = Maximo de unidades ativas
|
||||||
blocks.health = Saúde
|
blocks.health = Saúde
|
||||||
@@ -438,8 +438,8 @@ blocks.inaccuracy = Imprecisão
|
|||||||
blocks.shots = Tiros
|
blocks.shots = Tiros
|
||||||
blocks.reload = Recarregar
|
blocks.reload = Recarregar
|
||||||
blocks.ammo = Munição
|
blocks.ammo = Munição
|
||||||
bar.drilltierreq = Better Drill Required
|
bar.drilltierreq = Broca melhor requerida.
|
||||||
bar.drillspeed = Velocidade da furadeira: {0}/s
|
bar.drillspeed = Velocidade da broca: {0}/s
|
||||||
bar.efficiency = Eficiencia: {0}%
|
bar.efficiency = Eficiencia: {0}%
|
||||||
bar.powerbalance = Energia: {0}
|
bar.powerbalance = Energia: {0}
|
||||||
bar.poweramount = Energia: {0}
|
bar.poweramount = Energia: {0}
|
||||||
@@ -513,15 +513,15 @@ setting.lasers.name = Mostrar lasers
|
|||||||
setting.pixelate.name = Pixelizado [LIGHT_GRAY](Pode diminuir a performace)
|
setting.pixelate.name = Pixelizado [LIGHT_GRAY](Pode diminuir a performace)
|
||||||
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.ambientvol.name = Ambient Volume
|
setting.ambientvol.name = Volume do ambiente
|
||||||
setting.mutemusic.name = Desligar Música
|
setting.mutemusic.name = Desligar Música
|
||||||
setting.sfxvol.name = Volume de Efeitos
|
setting.sfxvol.name = Volume de Efeitos
|
||||||
setting.mutesound.name = Desligar Som
|
setting.mutesound.name = Desligar Som
|
||||||
setting.crashreport.name = Enviar denuncias de crash anonimas
|
setting.crashreport.name = Enviar denuncias de crash anonimas
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = Auto-Create Saves
|
||||||
setting.chatopacity.name = Opacidade do chat
|
setting.chatopacity.name = Opacidade do chat
|
||||||
setting.playerchat.name = Mostrar chat em-jogo
|
setting.playerchat.name = Mostrar chat em jogo
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
uiscale.reset = A escala da interface do usuário foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
|
||||||
uiscale.cancel = Cancel & Exit
|
uiscale.cancel = Cancel & Exit
|
||||||
setting.bloom.name = Bloom
|
setting.bloom.name = Bloom
|
||||||
keybind.title = Refazer teclas
|
keybind.title = Refazer teclas
|
||||||
@@ -687,9 +687,9 @@ block.graphite-press.name = Prensa de grafite
|
|||||||
block.multi-press.name = Multi-Prensa
|
block.multi-press.name = Multi-Prensa
|
||||||
block.constructing = {0}\n[LIGHT_GRAY](Construindo)
|
block.constructing = {0}\n[LIGHT_GRAY](Construindo)
|
||||||
block.spawn.name = Spawn dos inimigos
|
block.spawn.name = Spawn dos inimigos
|
||||||
block.core-shard.name = Core: Fragmento
|
block.core-shard.name = Fragmento do núcleo
|
||||||
block.core-foundation.name = Core: Fundação
|
block.core-foundation.name = Fundação do núcleo
|
||||||
block.core-nucleus.name = Core: Nucleus
|
block.core-nucleus.name = Núcleo do núcleo
|
||||||
block.deepwater.name = água funda
|
block.deepwater.name = água funda
|
||||||
block.water.name = Água
|
block.water.name = Água
|
||||||
block.tainted-water.name = Água contaminada
|
block.tainted-water.name = Água contaminada
|
||||||
@@ -770,8 +770,8 @@ block.combustion-generator.name = Gerador de combustão
|
|||||||
block.turbine-generator.name = Gerador de Turbina
|
block.turbine-generator.name = Gerador de Turbina
|
||||||
block.differential-generator.name = Gerador diferencial
|
block.differential-generator.name = Gerador diferencial
|
||||||
block.impact-reactor.name = Reator De Impacto
|
block.impact-reactor.name = Reator De Impacto
|
||||||
block.mechanical-drill.name = Furadera Mecânica
|
block.mechanical-drill.name = Broca Mecânica
|
||||||
block.pneumatic-drill.name = Mineradora Pneumatica
|
block.pneumatic-drill.name = Broca Pneumática
|
||||||
block.laser-drill.name = Broca a Laser
|
block.laser-drill.name = Broca a Laser
|
||||||
block.water-extractor.name = Extrator de Agua
|
block.water-extractor.name = Extrator de Agua
|
||||||
block.cultivator.name = Cultivador
|
block.cultivator.name = Cultivador
|
||||||
@@ -824,7 +824,7 @@ block.bridge-conduit.name = Conduto-Ponte
|
|||||||
block.rotary-pump.name = Bomba Rotatoria
|
block.rotary-pump.name = Bomba Rotatoria
|
||||||
block.thorium-reactor.name = Reator Torio
|
block.thorium-reactor.name = Reator Torio
|
||||||
block.mass-driver.name = Drive de Massa
|
block.mass-driver.name = Drive de Massa
|
||||||
block.blast-drill.name = Mineradora de Explosão
|
block.blast-drill.name = Broca de Explosão
|
||||||
block.thermal-pump.name = Cano termico
|
block.thermal-pump.name = Cano termico
|
||||||
block.thermal-generator.name = Gerador Térmico
|
block.thermal-generator.name = Gerador Térmico
|
||||||
block.alloy-smelter.name = Fundidora de Liga
|
block.alloy-smelter.name = Fundidora de Liga
|
||||||
@@ -868,13 +868,13 @@ unit.lich.name = Lich
|
|||||||
unit.reaper.name = Ceifador
|
unit.reaper.name = Ceifador
|
||||||
tutorial.next = [lightgray]<Tap to continue>
|
tutorial.next = [lightgray]<Tap to continue>
|
||||||
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Mineradoras []podem minerar automaticamente.\nColoque uma numa veia de cobre.
|
tutorial.drill = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nColoque uma numa veia de cobre.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Minerar manualmente é ineficiente.\n[accent]Brocas []podem minerar automaticamente.\nToque na aba de brocas no canto inferior direito.\nSelecione a[accent] broca mecânica[].\nToque em um veio de cobre para colocá-la, então pressione a[accent] marca de verificação[] abaixo para confirmar sua seleção.\nPressione o[accent] botão "X"[] para cancelar o posicionamento.
|
||||||
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
tutorial.blockinfo = Cada bloco tem diferentes status. Cada broca pode extrair certos minérios.\nPara checar as informações e os status de um bloco,[accent] toque o botão "?" enquanto o seleciona no menu de construção.[]\n\n[accent]Acesse os status da broca mecânica agora.[]
|
||||||
tutorial.conveyor = [accent]Esteiras[] São usadas para transportar itens até o core.\nFaça uma linha de Esteiras da mineradora até o core.
|
tutorial.conveyor = [accent]Esteiras[] São usadas para transportar itens até o núcleo.\nFaça uma linha de Esteiras da mineradora até o núcleo.
|
||||||
tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
|
tutorial.conveyor.mobile = [accent]Esteiras[] são usadas para transportar itens até o núcleo.\nFaça uma linha de esteiras da broca até o núcleo.\n[accent] Coloque uma linha segurando por alguns segundos[] e arrastando em uma direção.\n\n[accent]{0}/{1} conveyors placed in line\n[accent]0/1 items delivered
|
||||||
tutorial.turret = Estruturas defensivas devem ser construidas para repelir[LIGHT_GRAY] O inimigo[].\nConstrua uma torre dupla perto de sua base.
|
tutorial.turret = Estruturas defensivas devem ser construidas para repelir[LIGHT_GRAY] O inimigo[].\nConstrua uma torre dupla perto de sua base.
|
||||||
tutorial.drillturret = Torres duplas precisam de[accent] Cobre como munição []Para atirar.\nColoque uma mineradoura Proxima a torre Para carregar ela com cobre minerado.
|
tutorial.drillturret = Torres duplas precisam de[accent] Cobre como munição []Para atirar.\nColoque uma broca próxima à torre para carregá-la com o cobre minerado.
|
||||||
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
||||||
tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause.
|
tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause.
|
||||||
tutorial.unpause = Now press space again to unpause.
|
tutorial.unpause = Now press space again to unpause.
|
||||||
@@ -883,7 +883,7 @@ tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down r
|
|||||||
tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
|
tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection.
|
||||||
tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[]
|
tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[]
|
||||||
tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[]
|
tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[]
|
||||||
tutorial.waves = O[LIGHT_GRAY] Inimigo[] se aproxima.\n\nDefenda seu core por 2 ondas. Construa mais torres.
|
tutorial.waves = O[LIGHT_GRAY] Inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 ondas. Construa mais torres.
|
||||||
tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
|
tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper.
|
||||||
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
||||||
item.copper.description = Um material de estrutura util. Usado extensivamente em Maioria dos blocos.
|
item.copper.description = Um material de estrutura util. Usado extensivamente em Maioria dos blocos.
|
||||||
@@ -915,7 +915,7 @@ mech.javelin-ship.description = Uma nave de espinhos de atacar e correr. Quando
|
|||||||
mech.trident-ship.description = Um bombardeiro pesado. Consideravelmente bem armadurado.
|
mech.trident-ship.description = Um bombardeiro pesado. Consideravelmente bem armadurado.
|
||||||
mech.glaive-ship.description = Uma nave armada, bem armadurada. Com um repetidor incendario equipado. Boa aceleração e maxima velocidade.
|
mech.glaive-ship.description = Uma nave armada, bem armadurada. Com um repetidor incendario equipado. Boa aceleração e maxima velocidade.
|
||||||
unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core.
|
unit.draug.description = A primitive mining drone. Cheap to produce. Expendable. Automatically mines copper and lead in the vicinity. Delivers mined resources to the closest core.
|
||||||
unit.spirit.description = A unidade de drone inicial. Ele nasce no core por padrão. Minera minérios automaticamente, Coleta itens e repara blocos.
|
unit.spirit.description = A unidade de drone inicial. Ele nasce no núcleo por padrão. Minera minérios automaticamente, Coleta itens e repara blocos.
|
||||||
unit.phantom.description = Uma unidade de drone avançada. Minera minérios automaticamente, Coleta itens e repara blocos automaticamente. Significantemente mais efetiva.
|
unit.phantom.description = Uma unidade de drone avançada. Minera minérios automaticamente, Coleta itens e repara blocos automaticamente. Significantemente mais efetiva.
|
||||||
unit.dagger.description = Unidade terrestre basica, Forte em grupos.
|
unit.dagger.description = Unidade terrestre basica, Forte em grupos.
|
||||||
unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies.
|
unit.crawler.description = A ground unit consisting of a stripped-down frame with high explosives strapped on top. Not particular durable. Explodes on contact with enemies.
|
||||||
@@ -946,8 +946,8 @@ block.power-source.description = Infinitivamente da energia. Apenas caixa de are
|
|||||||
block.item-source.description = Infinivamente da itens. Apenas caixa de areia.
|
block.item-source.description = Infinivamente da itens. Apenas caixa de areia.
|
||||||
block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia.
|
block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia.
|
||||||
block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia.
|
block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia.
|
||||||
block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o core e torres no começo.
|
block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torres no começo.
|
||||||
block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o core e torres no começo.\nOcupa multiplos espaços.
|
block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torres no começo.\nOcupa multiplos espaços.
|
||||||
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
|
block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies.
|
||||||
block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles.
|
block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles.
|
||||||
block.thorium-wall.description = A strong defensive block.\nBoa proteção contra inimigos.
|
block.thorium-wall.description = A strong defensive block.\nBoa proteção contra inimigos.
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ screenshot.invalid = Harita çok büyük, ekran görüntüsü için potansiyel o
|
|||||||
gameover = Kaybettin
|
gameover = Kaybettin
|
||||||
gameover.pvp = [accent] {0}[] Takımı kazandı!
|
gameover.pvp = [accent] {0}[] Takımı kazandı!
|
||||||
highscore = [accent]Yeni rekor!
|
highscore = [accent]Yeni rekor!
|
||||||
load.sound = Sounds
|
load.sound = Sesler
|
||||||
load.map = Maps
|
load.map = Haritalar
|
||||||
load.image = Images
|
load.image = Resimler
|
||||||
load.content = Content
|
load.content = İçerik
|
||||||
load.system = System
|
load.system = Sistem
|
||||||
stat.wave = Yenilen Dalgalar:[accent] {0}
|
stat.wave = Yenilen Dalgalar:[accent] {0}
|
||||||
stat.enemiesDestroyed = Yok Edilen Düşmanlar:[accent] {0}
|
stat.enemiesDestroyed = Yok Edilen Düşmanlar:[accent] {0}
|
||||||
stat.built = İnşa Edilen Yapılar:[accent] {0}
|
stat.built = İnşa Edilen Yapılar:[accent] {0}
|
||||||
@@ -35,7 +35,7 @@ level.select = Seviye Seçimi
|
|||||||
level.mode = Oyun Modu:
|
level.mode = Oyun Modu:
|
||||||
showagain = Bir daha gösterme
|
showagain = Bir daha gösterme
|
||||||
coreattack = < Çekirdek saldırı altında! >
|
coreattack = < Çekirdek saldırı altında! >
|
||||||
nearpoint = [[ [scarlet]İNİŞ PİSTİNDEN AYRIL[] ]\nimha riski yüksek
|
nearpoint = [[ [scarlet]İNİŞ PİSTİNDEN AYRIL[] ]\nimha tehlikesi
|
||||||
database = Çekirdek Veritabanı
|
database = Çekirdek Veritabanı
|
||||||
savegame = Oyunu Kaydet
|
savegame = Oyunu Kaydet
|
||||||
loadgame = Oyunu Yükle
|
loadgame = Oyunu Yükle
|
||||||
@@ -49,8 +49,17 @@ close = Kapat
|
|||||||
website = Website
|
website = Website
|
||||||
quit = Çık
|
quit = Çık
|
||||||
maps = Haritalar
|
maps = Haritalar
|
||||||
|
maps.browse = Haritaları gör
|
||||||
continue = Devam et
|
continue = Devam et
|
||||||
maps.none = [lightgray]Harita Bulunamadı!
|
maps.none = [lightgray]Harita Bulunamadı!
|
||||||
|
invalid = Invalid
|
||||||
|
preparingconfig = Yapılandırma Hazırlanıyor
|
||||||
|
preparingcontent = İçerik Hazırlanıyor
|
||||||
|
uploadingcontent = İçerik Yükleniyor
|
||||||
|
uploadingpreviewfile = Önizleme Dosyası Yükleniyor
|
||||||
|
committingchanges = Değişiklikler Uygulanıyor
|
||||||
|
done = Bittti
|
||||||
|
|
||||||
about.button = Hakkında
|
about.button = Hakkında
|
||||||
name = İsim:
|
name = İsim:
|
||||||
noname = Bir[accent] kullanıcı adı[] seçmelisin.
|
noname = Bir[accent] kullanıcı adı[] seçmelisin.
|
||||||
@@ -58,113 +67,118 @@ filename = Dosya Adı:
|
|||||||
unlocked = Yeni içerik açıldı!
|
unlocked = Yeni içerik açıldı!
|
||||||
completed = [accent]Tamamlandı
|
completed = [accent]Tamamlandı
|
||||||
techtree = Yetenek Ağacı
|
techtree = Yetenek Ağacı
|
||||||
research.list = [lightgray]Araştır:
|
research.list = [lightgray]Araştırmalar:
|
||||||
research = Araştır
|
research = Araştır
|
||||||
researched = [lightgray]{0} Araştırıldı.
|
researched = [lightgray]{0} Araştırıldı.
|
||||||
players = {0} oyuncu çevrimiçi
|
players = {0} çevrimiçi oyuncu
|
||||||
players.single = {0} oyuncu çevrimiçi
|
players.single = {0} çevrimiçi oyuncu
|
||||||
server.closing = [accent]Sunucu kapanıyor...
|
server.closing = [accent]Sunucu kapatılıyor...
|
||||||
|
server.kicked.whitelist = Beyaz listede değilsin.
|
||||||
server.kicked.kick = Sunucudan atıldın!
|
server.kicked.kick = Sunucudan atıldın!
|
||||||
server.kicked.serverClose = Sunucu kapandı.
|
server.kicked.serverClose = Sunucu kapandı.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Oylama ile atıldın. Görüşürüz.
|
||||||
server.kicked.clientOutdated = Geçersiz sürüm! Oyununu güncelle!
|
server.kicked.clientOutdated = Eski sürüm! Oyununu güncelle!
|
||||||
server.kicked.serverOutdated = Geçersiz sunucu!\nKurucudan oyununu güncellemesini iste!
|
server.kicked.serverOutdated = Geçersiz sunucu!\nKurucudan oyununu güncellemesini iste!
|
||||||
server.kicked.banned = Bu sunucudan yasaklandın.
|
server.kicked.banned = Bu sunucudan yasaklandın.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = Bu sunucu senin inşa türünle uyumlu değil.
|
||||||
server.kicked.recentKick = Yakın bir zamanda bir sunucudan atıldın.\nBağlanmadan önce biraz bekle.
|
server.kicked.playerLimit = Sunucu dolu. Yer açılmasını bekle.
|
||||||
|
server.kicked.recentKick = Yakın bir zamanda bir sunucudan atıldın.\nBağlanmadan önce bir süre bekle.
|
||||||
server.kicked.nameInUse = Sunucuda zaten o isimde biri var.
|
server.kicked.nameInUse = Sunucuda zaten o isimde biri var.
|
||||||
server.kicked.nameEmpty = İsmin geçersiz.
|
server.kicked.nameEmpty = Seçtiğin isim geçersiz.
|
||||||
server.kicked.idInUse = Zaten bu sunucudasın! İki hesapla bir sunucuya bağlanamazsın.
|
server.kicked.idInUse = Zaten bu sunucudasın! İki hesapla bir sunucuya bağlanamazsın.
|
||||||
server.kicked.customClient = Bu sunucu özel sürümleri kabul etmiyor. Resmi bir sürüm indir.
|
server.kicked.customClient = Bu sunucu özel sürümleri kabul etmiyor. Resmi bir sürüm indir.
|
||||||
server.kicked.gameover = Game over!
|
server.kicked.gameover = Oyun bitti!
|
||||||
server.versions = Senin versiyon:[accent] {0}[]\nSunucunun versiyonu:[accent] {1}[]
|
server.versions = Kullandığın surum:[accent] {0}[]\nSunucunun sürümü:[accent] {1}[]
|
||||||
host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[lightgray]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. Note that public networks sometimes do not allow server discovery.
|
host.info = [accent]host[], [scarlet]6567[] portunda bir sunucuya ev sahipliği yapıyor. \nAynı [lightgray]wifi veya yerel ağdaki[] herkes sunucu listelerinde senin sunucunu görebiliyor olmalı.\n\nEğer diğerlerinin herhangi bir yerden IP ile bağlanabilmesini istiyorsan [accent]port yönlendirmesi[] gerekli.\n\n[lightgray]Not: Eğer birisi senin yerel ağ oyununa katılmakta sorun yaşıyorsa güvenlik duvarı ayarlarında Mindustry'ye yerel ağ bağlantısı izni verdiğinden emin olun. Halka açık ağların zaman zaman sunucu aramaya engel olduğunu unutmayın.
|
||||||
join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[lightgray]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP.
|
join.info = Burada, bağlanmak istediğin sunucunun [accent]IP[] adresini girebilir veya [accent]yerel ağ[] sunucularını görebilirsin..\nHem yerel ağ hem de geniş alan ağı çoklu oyuncu için destekleniyor.\n\n[lightgray]Not: Otomatik bir global sunucu listesi yok; eğer birisine IP adresi kullanarak bağlanmak istiyorsan IP adresini istemelisin.
|
||||||
hostserver = Çok Oyunculu Oyun Aç
|
hostserver = Çok Oyunculu Oyun Aç
|
||||||
hostserver.mobile = Oyun\nKur
|
hostserver.mobile = Oyun\nKur
|
||||||
host = Kur
|
host = Kur
|
||||||
hosting = [accent]Sunucu açılıyor...
|
hosting = [accent]Sunucu açılıyor...
|
||||||
hosts.refresh = Yenile
|
hosts.refresh = Yenile
|
||||||
hosts.discovering = LAN oyunu aranıyor
|
hosts.discovering = Yerel ağ oyunu aranıyor
|
||||||
server.refreshing = Sunucular yenileniyor
|
server.refreshing = Sunucu yenileniyor
|
||||||
hosts.none = [lightgray]LAN oyunu bulunamadı!
|
hosts.none = [lightgray]Yerel oyun bulunamadı!
|
||||||
host.invalid = [scarlet]Kurucuya bağlanılamıyor.
|
host.invalid = [scarlet]Kurucuya bağlanılamıyor.
|
||||||
trace = Oyuncuyu takip et
|
trace = Oyuncuyu Takip Et
|
||||||
trace.playername = Oyuncu İsmi: [accent]{0}
|
trace.playername = Oyuncu İsmi: [accent]{0}
|
||||||
trace.ip = IP: [accent]{0}
|
trace.ip = IP: [accent]{0}
|
||||||
trace.id = Özel ID: [accent]{0}
|
trace.id = Özel ID: [accent]{0}
|
||||||
trace.mobile = Mobil Sürüm: [accent]{0}
|
trace.mobile = Mobil Sürüm: [accent]{0}
|
||||||
trace.modclient = Özel Sürüm: [accent]{0}
|
trace.modclient = Özel Sürüm: [accent]{0}
|
||||||
invalidid = Geçersiz Sürüm ID'si! Bir hata raporu gönder.
|
invalidid = Geçersiz Sürüm ID'si! Bir hata raporu gönder.
|
||||||
server.bans = Yasaklar
|
server.bans = Yasaklılar
|
||||||
server.bans.none = Yasaklanmış oyuncu bulunamadı!
|
server.bans.none = Yasaklanmış oyuncu bulunamadı!
|
||||||
server.admins = Yetkililer
|
server.admins = Yönetici
|
||||||
server.admins.none = Yetkili bulunamadı!
|
server.admins.none = Yönetici bulunamadı!
|
||||||
server.add = Add Server
|
server.add = Sunucu Ekle
|
||||||
server.delete = Are you sure you want to delete this server?
|
server.delete = Bu sunucuyu silmek istediğine emin misin?
|
||||||
server.edit = Edit Server
|
server.edit = Sunucuyu Düzenle
|
||||||
server.outdated = [crimson]Outdated Server![]
|
server.outdated = [crimson]Güncel Olmayan Sunucu![]
|
||||||
server.outdated.client = [crimson]Outdated Client![]
|
server.outdated.client = [crimson]Güncel Olmayan Sürüm![]
|
||||||
server.version = [gray]v{0} {1}
|
server.version = [gray]v{0} {1}
|
||||||
server.custombuild = [yellow]Custom Build
|
server.custombuild = [yellow]Özel Sürüm
|
||||||
confirmban = Are you sure you want to ban this player?
|
confirmban = Bu kullanıcıyı yasaklamak istediğine emin misin?confirmkick = Bu kullanıcıyı atmak istediğine emin misin?
|
||||||
confirmkick = Are you sure you want to kick this player?
|
confirmunban = Bu kullanıcının yasağını kaldırmak istediğine emin misin?
|
||||||
confirmunban = Are you sure you want to unban this player?
|
confirmadmin = Bu kullanıcıyı bir yönetici yapmak istediğine emin misin?
|
||||||
confirmadmin = Are you sure you want to make this player an admin?
|
confirmunadmin = Bu kullanıcının yönetici yetkilerini almak istediğine istediğine emin misin?
|
||||||
confirmunadmin = Are you sure you want to remove admin status from this player?
|
joingame.title = Oyuna Katıl
|
||||||
joingame.title = Join Game
|
joingame.ip = Adres:
|
||||||
joingame.ip = Address:
|
disconnect = Bağlantı kesildi.
|
||||||
disconnect = Disconnected.
|
disconnect.error = Bağlantı hatası.
|
||||||
disconnect.data = Failed to load world data!
|
disconnect.closed = Bağlantı kapatıldı.
|
||||||
connecting = [accent]Connecting...
|
disconnect.timeout = Zaman aşımı.
|
||||||
connecting.data = [accent]Loading world data...
|
disconnect.data = Dünya verisi yüklenemedi!
|
||||||
|
connecting = [accent]Bağlanılıyor...
|
||||||
|
connecting.data = [accent]Dünya verisi yükleniyor...
|
||||||
server.port = Port:
|
server.port = Port:
|
||||||
server.addressinuse = Address already in use!
|
server.addressinuse = Adres zaten kullanılıyor!
|
||||||
server.invalidport = Invalid port number!
|
server.invalidport = Geçersiz port sayısı!
|
||||||
server.error = [crimson]Error hosting server: [accent]{0}
|
server.error = [crimson]Sunucu kurulamadı: [accent]{0}
|
||||||
save.old = This save is for an older version of the game, and can no longer be used.\n\n[lightgray]Save backwards compatibility will be implemented in the full 4.0 release.
|
save.old = Bu kayıt oyunun eski bir sürümü için ve artık kullanılamaz.\n\n[lightgray]Tam 4.0 sürümü yayınlandığında geri kayıt özelliği eklenecek.
|
||||||
save.new = New Save
|
save.new = Yeni kayıt
|
||||||
save.overwrite = Are you sure you want to overwrite\nthis save slot?
|
save.overwrite = Bu kayıdın üstüne yazmak istediğine\nemin misin?
|
||||||
overwrite = Overwrite
|
overwrite = Üstüne yaz
|
||||||
save.none = No saves found!
|
save.none = Kayıt bulunamadı!
|
||||||
saveload = Saving...
|
saveload = Kaydediliyor...
|
||||||
savefail = Failed to save game!
|
savefail = Oyun kaydedilemedi!
|
||||||
save.delete.confirm = Are you sure you want to delete this save?
|
save.delete.confirm = Bu kaydı silmek istediğine emin misin?
|
||||||
save.delete = Delete
|
save.delete = Sil
|
||||||
save.export = Export Save
|
save.export = Kayıdı Dışa Aktar
|
||||||
save.import.invalid = [accent]This save is invalid!
|
save.import.invalid = [accent]Bu kayıt geçersiz!
|
||||||
save.import.fail = [crimson]Failed to import save: [accent]{0}
|
save.import.fail = [crimson]Kayıt içe aktarılamadı: [accent]{0}
|
||||||
save.export.fail = [crimson]Failed to export save: [accent]{0}
|
save.export.fail = [crimson]Kayıt dışa aktarılamadı: [accent]{0}
|
||||||
save.import = Import Save
|
save.import = Kayıdı İçe Aktar
|
||||||
save.newslot = Save name:
|
save.newslot = İsmi kaydet:
|
||||||
save.rename = Rename
|
save.rename = Yeniden isimlendir
|
||||||
save.rename.text = New name:
|
save.rename.text = Yeni isim:
|
||||||
selectslot = Select a save.
|
selectslot = Bir kayıt seçin.
|
||||||
slot = [accent]Slot {0}
|
slot = [accent]Slot {0}
|
||||||
save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug.
|
save.corrupted = [accent]Kayıt dosyası bozuk veya geçersiz!\nEğer oyununuzu kısa süre öce güncellediyseniz bu, kayıt formatındaki bir değişiklik. Bir hata [scarlet]değil[].
|
||||||
empty = <empty>
|
empty = <boş>
|
||||||
on = On
|
on = Aç
|
||||||
off = Off
|
off = Kapa
|
||||||
save.autosave = Autosave: {0}
|
save.autosave = Otomatk kayıt: {0}
|
||||||
save.map = Map: {0}
|
save.map = Harita: {0}
|
||||||
save.wave = Wave {0}
|
save.wave = Dalga {0}
|
||||||
save.difficulty = Difficulty: {0}
|
save.mode = Oyun modu: {0}
|
||||||
save.date = Last Saved: {0}
|
save.difficulty = Zorluk: {0}
|
||||||
save.playtime = Playtime: {0}
|
save.date = Son Kayıt: {0}
|
||||||
warning = Warning.
|
save.playtime = Oynama süresi: {0}
|
||||||
confirm = Confirm
|
warning = Uyarı.
|
||||||
delete = Delete
|
confirm = Doğrula
|
||||||
|
delete = Sil
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Open
|
open = Aç
|
||||||
customize = Customize Rules
|
customize = Kuralları Özelleştir
|
||||||
cancel = Cancel
|
cancel = İptal
|
||||||
openlink = Open Link
|
openlink = Bağlantıyı Aç
|
||||||
copylink = Copy Link
|
copylink = Bağlantıyı Kopyala
|
||||||
back = Back
|
back = Geri
|
||||||
data.export = Export Data
|
data.export = Veriyi Dışa Aktar
|
||||||
data.import = Import Data
|
data.import = Veriyi İçe Aktar
|
||||||
data.exported = Data exported.
|
data.exported = Veri dışa aktarıldı.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Bu oyun verisi geçerli değil.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
||||||
classic.export = Export Classic Data
|
classic.export = Export Classic Data
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
||||||
|
|||||||
@@ -1,33 +1,36 @@
|
|||||||
credits.text = Створив [ROYAL]Anuken[] — [SKY]anukendev@gmail.com[]\n\nЄ питання по грі або проблеми з перекладом?\nЙдіть в офіційний сервер discord Mindustry у канал #український.\nПерекладач: [blue]Prosta4ok_ua[green]#[yellow]6336
|
credits.text = Створив [ROYAL]Anuken[] — [SKY]anukendev@gmail.com[]\n\nЄ питання по грі або проблеми з перекладом?\nЙдіть в офіційний сервер discord Mindustrу\nу канал #український.\nПерекладач: [blue]Prosta4ok_ua[green]#[yellow]6336
|
||||||
credits = Творці
|
credits = Творці
|
||||||
contributors = Перекладачі та помічники
|
contributors = Перекладачі та помічники
|
||||||
discord = Приєднуйтесь до нашого Discord!
|
discord = Приєднуйтесь до Mindustry Discord!
|
||||||
link.discord.description = Офіційний Discord-сервер Mindustry
|
link.discord.description = Офіційний Discord-сервер Mindustry
|
||||||
link.github.description = Вихідний код гри
|
link.github.description = Вихідний код гри
|
||||||
link.changelog.description = Список змін
|
link.changelog.description = Список змін
|
||||||
link.dev-builds.description = Нестабільні версії
|
link.dev-builds.description = Нестабільні версії
|
||||||
link.trello.description = Офіційна дошка Trello для запланованих функцій
|
link.trello.description = Офіційна дошка Trello для запланованих функцій
|
||||||
link.itch.io.description = Завантаж гру на Itch.io
|
link.itch.io.description = Itch.io сторінка, на якій можна завантажити гру
|
||||||
link.google-play.description = Скачати для Android з Google Play
|
link.google-play.description = Завантажити для Android з Google Play
|
||||||
link.wiki.description = Офіційна вікі
|
link.wiki.description = Офіційна Mindustry wiki
|
||||||
linkfail = Не вдалося відкрити посилання!\nURL-адреса була скопійована у буфер обміну.
|
linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійована в буфер обміну.
|
||||||
screenshot = Зняток мапи збережено у {0}
|
screenshot = Зняток мапи збережено в {0}
|
||||||
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку екрана.
|
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
|
||||||
gameover = Гру закінчено
|
gameover = Гра завершена
|
||||||
gameover.pvp = [accent] {0}[] команда перемогла!
|
gameover.pvp = [accent] {0}[] команда перемогла!
|
||||||
highscore = [YELLOW]Новий рекорд!
|
highscore = [YELLOW]Новий рекорд!
|
||||||
|
|
||||||
load.sound = Звуки
|
load.sound = Звуки
|
||||||
load.map = Мапи
|
load.map = Мапи
|
||||||
load.image = Зображення
|
load.image = Зображення
|
||||||
load.content = Зміст
|
load.content = Зміст
|
||||||
load.system = Система
|
load.system = Система
|
||||||
|
|
||||||
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}
|
||||||
|
|
||||||
launcheditems = [accent]Запущені предмети
|
launcheditems = [accent]Запущені предмети
|
||||||
map.delete = Ви впевнені, що хочете видалити мапу «[accent]{0}[]»?
|
map.delete = Ви впевнені, що хочете видалити мапу «[accent]{0}[]»?
|
||||||
level.highscore = Рекорд: [accent]{0}
|
level.highscore = Рекорд: [accent]{0}
|
||||||
@@ -35,27 +38,36 @@ level.select = Вибір мапи
|
|||||||
level.mode = Режим гри:
|
level.mode = Режим гри:
|
||||||
showagain = Не показувати знову до наступного сеансу
|
showagain = Не показувати знову до наступного сеансу
|
||||||
coreattack = < Ядро знаходиться під атакою! >
|
coreattack = < Ядро знаходиться під атакою! >
|
||||||
nearpoint = [[ [scarlet]ЗАЛИШТЕ ЦЮ ЗОНУ НЕГАЙНО[] ]\nАннігіляція неминуча.
|
nearpoint = [[ [scarlet]ЗАЛИШТЕ ЗОНУ ВИСАДКИ НЕГАЙНО[] ]\nАннігіляція неминуча.
|
||||||
database = База даних ядра
|
database = База даних ядра
|
||||||
savegame = Зберегти гру
|
savegame = Зберегти гру
|
||||||
loadgame = Завантажити гру
|
loadgame = Завантажити гру
|
||||||
joingame = Мережева гра
|
joingame = Мережева гра
|
||||||
addplayers = Дод./Видалити гравців
|
addplayers = Додати/Видалити гравців
|
||||||
customgame = Користувальницька гра
|
customgame = Користувацька гра
|
||||||
newgame = Нова гра
|
newgame = Нова гра
|
||||||
none = <нічого>
|
none = <нічого>
|
||||||
minimap = Міні-мапа
|
minimap = Мінімапа
|
||||||
close = Закрити
|
close = Закрити
|
||||||
website = Веб-сайт
|
website = Веб-сайт
|
||||||
quit = Вихід
|
quit = Вихід
|
||||||
maps = Мапи
|
maps = Мапи
|
||||||
|
maps.browse = Перегляд мап
|
||||||
continue = Продовжити
|
continue = Продовжити
|
||||||
maps.none = [lightgray]Мап не знайдено!
|
maps.none = [lightgray]Мап не знайдено!
|
||||||
|
invalid = Недійсне
|
||||||
|
preparingconfig = Підготовка конфігурації
|
||||||
|
preparingcontent = Підготовка вмісту
|
||||||
|
uploadingcontent = Вивантаження вмісту
|
||||||
|
uploadingpreviewfile = Вивантаження файлу передперегляду
|
||||||
|
committingchanges = Здійснення змін
|
||||||
|
done = Зроблено
|
||||||
|
|
||||||
about.button = Про гру
|
about.button = Про гру
|
||||||
name = Ім’я:
|
name = Ім’я:
|
||||||
noname = Спочатку придумайте[accent] собі ім’я[].
|
noname = Спочатку придумайте[accent] собі ім’я[].
|
||||||
filename = Ім’я файлу:
|
filename = Ім’я файлу:
|
||||||
unlocked = Новий контент розблоковано!
|
unlocked = Доступний новий вміст!
|
||||||
completed = [accent]Завершено
|
completed = [accent]Завершено
|
||||||
techtree = Дерево технологій
|
techtree = Дерево технологій
|
||||||
research.list = [lightgray]Дослідження:
|
research.list = [lightgray]Дослідження:
|
||||||
@@ -63,32 +75,35 @@ research = Дослідження
|
|||||||
researched = [lightgray]{0} досліджено.
|
researched = [lightgray]{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.whitelist = Ви не в білому спискі сервері.
|
||||||
server.kicked.serverClose = Сервер закрито.
|
server.kicked.serverClose = Сервер закрито.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Вас було вигнано із сервера за допомогою голосування. Прощавайте.
|
||||||
server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
|
server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
|
||||||
server.kicked.serverOutdated = Застарілий сервер! Попросіть адміністратора серверу оновити сервер/гру!
|
server.kicked.serverOutdated = Застарілий сервер! Попросіть адміністратора сервера оновити сервер/гру!
|
||||||
server.kicked.banned = Ви заблоковані на цьому сервері.
|
server.kicked.banned = Ви заблоковані на цьому сервері.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = Цей сервер не сумісний з вашим типом збірки.
|
||||||
server.kicked.recentKick = Нещодавно Вас вигнали. \nПочекайте трохи перед наступним підключенням.
|
server.kicked.playerLimit = Цей сервер — заповнений. Дочекайтесь вільного слота.
|
||||||
|
server.kicked.recentKick = Нещодавно вас вигнали. \nПочекайте трохи перед наступним підключенням.
|
||||||
server.kicked.nameInUse = На цьому сервері є хтось з таким ім’ям.
|
server.kicked.nameInUse = На цьому сервері є хтось з таким ім’ям.
|
||||||
server.kicked.nameEmpty = Ваше ім’я має містити принаймні один символ або цифру.
|
server.kicked.nameEmpty = Ваше ім’я має містити принаймні один символ або цифру.
|
||||||
server.kicked.idInUse = Ви вже на цьому сервері! Підключення двох облікових записів не допускається.
|
server.kicked.idInUse = Ви вже на цьому сервері! Підключення двох облікових записів не дозволяється.
|
||||||
server.kicked.customClient = Цей сервер не підтримує користувальницькі збірки. Завантажте офіційну версію.
|
server.kicked.customClient = Цей сервер не підтримує користувацькі збірки. Завантажте офіційну версію.
|
||||||
server.kicked.gameover = Гра завершена!
|
server.kicked.gameover = Гра завершена!
|
||||||
server.versions = Ваша версія:[accent] {0}[]\nВерсія на сервері:[accent] {1}[]
|
server.versions = Ваша версія:[accent] {0}[]\nВерсія на сервері:[accent] {1}[]
|
||||||
host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [lightgray]WiFi або локальній мережі[], повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то [accent] переадресація порту [] обов’язкова.\n\n[lightgray] Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дозволяють виявити сервер.
|
host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [lightgray]WiFi або локальній мережі[], повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то[accent] переадресація порту []обов’язкова.\n\n[lightgray]Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дозволяють виявити сервер.
|
||||||
join.info = Тут Ви можете ввести [accent]IP серверу[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Тут немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити створювача серверу дати свій ip.
|
join.info = Тут ви можете ввести [accent]IP сервера[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Тут немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити створювача сервера дати свій ip.
|
||||||
hostserver = Запустити багатокористувальницький сервер
|
hostserver = Запустити багатокористувацький сервер
|
||||||
|
invitefriends = Запросити друзів
|
||||||
hostserver.mobile = Запустити\nсервер
|
hostserver.mobile = Запустити\nсервер
|
||||||
host = Сервер
|
host = Сервер
|
||||||
hosting = [accent]Відкриття серверу…
|
hosting = [accent]Відкриття сервера…
|
||||||
hosts.refresh = Оновити
|
hosts.refresh = Оновити
|
||||||
hosts.discovering = Пошук локальних ігор
|
hosts.discovering = Пошук локальних ігор
|
||||||
server.refreshing = Оновлення серверу
|
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}
|
||||||
@@ -116,12 +131,13 @@ joingame.title = Приєднатися до гри
|
|||||||
joingame.ip = IP:
|
joingame.ip = IP:
|
||||||
disconnect = Відключено.
|
disconnect = Відключено.
|
||||||
disconnect.data = Не вдалося завантажити дані світу!
|
disconnect.data = Не вдалося завантажити дані світу!
|
||||||
|
cantconnect = Не вдалося під’єднатися до гри ([accent]{0}[]).
|
||||||
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 [lightgray]Зворотна сумісність буде реалізована у фінальній версії 4.0.
|
save.old = Це збереження для старої версії гри, і його більше не можна використовувати.\n\n [lightgray]Зворотна сумісність буде реалізована у фінальній версії 4.0.
|
||||||
save.new = Нове збереження
|
save.new = Нове збереження
|
||||||
save.overwrite = Ви впевнені, що хочете перезаписати цей слот для збереження?
|
save.overwrite = Ви впевнені, що хочете перезаписати цей слот для збереження?
|
||||||
@@ -129,19 +145,19 @@ 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] не є[] помилкою.
|
save.corrupted = [accent]Збережений файл пошкоджено або недійсний! \nЯкщо ви щойно оновили свою гру, це, мабуть, є зміною формату збереження та [scarlet] не є[] помилкою.
|
||||||
empty = <Порожньо>
|
empty = <Порожньо>
|
||||||
on = Увімкнено
|
on = Увімкнено
|
||||||
off = Вимкнено
|
off = Вимкнено
|
||||||
@@ -154,6 +170,7 @@ save.playtime = Час гри: {0}
|
|||||||
warning = Попередження
|
warning = Попередження
|
||||||
confirm = Підтвердження
|
confirm = Підтвердження
|
||||||
delete = Видалити
|
delete = Видалити
|
||||||
|
view.workshop = Переглянути в Майстерні
|
||||||
ok = ОК
|
ok = ОК
|
||||||
open = Відкрити
|
open = Відкрити
|
||||||
customize = Налаштувати правила
|
customize = Налаштувати правила
|
||||||
@@ -161,13 +178,13 @@ cancel = Скасувати
|
|||||||
openlink = Відкрити посилання
|
openlink = Відкрити посилання
|
||||||
copylink = Скопіювати посилання
|
copylink = Скопіювати посилання
|
||||||
back = Назад
|
back = Назад
|
||||||
data.export = Export Data
|
data.export = Експортувати дані
|
||||||
data.import = Import Data
|
data.import = Импортувати дані
|
||||||
data.exported = Data exported.
|
data.exported = Дані імпортовано.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Це не дійсні ігрові дані.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Імпорт зовнішніх даних видалить[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється.
|
||||||
classic.export = Експортувати класичні дані
|
classic.export = Експортувати класичні дані
|
||||||
classic.export.text = Класичне (версія 3.5 збірка 40) збереження або мапа були знайдені. Ви хочете експортувати ці дані в домашню теку телефону, для використання у додатку Mindustry Classic?
|
classic.export.text = Класичне (версія 3.5 збірка 40) збереження або мапа були знайдені. Ви хочете експортувати ці дані в домашню теку телефону, для використання у застосунку Mindustry Classic?
|
||||||
quit.confirm = Ви впевнені, що хочете вийти?
|
quit.confirm = Ви впевнені, що хочете вийти?
|
||||||
quit.confirm.tutorial = Ви впевнені, що хочете вийти з навчання?
|
quit.confirm.tutorial = Ви впевнені, що хочете вийти з навчання?
|
||||||
loading = [accent]Завантаження…
|
loading = [accent]Завантаження…
|
||||||
@@ -184,12 +201,15 @@ 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 = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [SCARLET]не помаранчеве[] ядро до цієї мапи в редакторі.
|
map.nospawn.pvp = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [SCARLET]не помаранчеве[] ядро до цієї мапи в редакторі.
|
||||||
map.nospawn.attack = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [SCARLET]червоне[] ядро до цієї мапи в редакторі.
|
map.nospawn.attack = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [SCARLET]червоне[] ядро до цієї мапи в редакторі.
|
||||||
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
||||||
|
map.publish.error = Помилка при опублікуванні мапи: {0}
|
||||||
|
map.publish.confirm = Ви дійсно хочете опублікувати цю мапу?\n\n[lightgray]Переконайтеся, що спершу ви згодні з Ліцензійною угодою Steam, або ваші мапи не з’являться!
|
||||||
|
eula = Ліцензійна угода
|
||||||
editor.brush = Пензлик
|
editor.brush = Пензлик
|
||||||
editor.openin = Відкрити в редакторі
|
editor.openin = Відкрити в редакторі
|
||||||
editor.oregen = Генерація руд
|
editor.oregen = Генерація руд
|
||||||
@@ -201,7 +221,9 @@ editor.waves = Хвилі:
|
|||||||
editor.rules = Правила:
|
editor.rules = Правила:
|
||||||
editor.generation = Генерація:
|
editor.generation = Генерація:
|
||||||
editor.ingame = Редагувати у грі
|
editor.ingame = Редагувати у грі
|
||||||
|
editor.publish.workshop = Опублікувати в Майстерні Steam
|
||||||
editor.newmap = Нова мапа
|
editor.newmap = Нова мапа
|
||||||
|
workshop = Майстерня
|
||||||
waves.title = Хвилі
|
waves.title = Хвилі
|
||||||
waves.remove = Видалити
|
waves.remove = Видалити
|
||||||
waves.never = <ніколи>
|
waves.never = <ніколи>
|
||||||
@@ -351,7 +373,7 @@ connectfail = [crimson]Помилка підключення: [accent]{0}
|
|||||||
error.unreachable = Сервер не доступний.
|
error.unreachable = Сервер не доступний.
|
||||||
error.invalidaddress = Некоректна адреса.
|
error.invalidaddress = Некоректна адреса.
|
||||||
error.timedout = Час очікування вийшов.\nПереконайтеся, що адреса коректна і що власник сервера налаштував переадресацію порту!
|
error.timedout = Час очікування вийшов.\nПереконайтеся, що адреса коректна і що власник сервера налаштував переадресацію порту!
|
||||||
error.mismatch = Помилка пакету:\nможливе невідповідність версії клієнта/сервера.\nПереконайтеся, що у Вас та у володара сервера встановлена остання версія Mindustry!
|
error.mismatch = Помилка пакету:\nможливе невідповідність версії клієнта/сервера.\nПереконайтеся, що у вас та у володара сервера встановлена остання версія Mindustry!
|
||||||
error.alreadyconnected = Ви вже підключилися.
|
error.alreadyconnected = Ви вже підключилися.
|
||||||
error.mapnotfound = Файл мапи не знайдено
|
error.mapnotfound = Файл мапи не знайдено
|
||||||
error.io = Мережева помилка введення-виведення
|
error.io = Мережева помилка введення-виведення
|
||||||
@@ -386,7 +408,7 @@ zone.fungalPass.description = Перехідна зона між високим
|
|||||||
zone.impact0078.description = <вставити опис тут>
|
zone.impact0078.description = <вставити опис тут>
|
||||||
zone.crags.description = <вставити опис тут>
|
zone.crags.description = <вставити опис тут>
|
||||||
settings.language = Мова
|
settings.language = Мова
|
||||||
settings.data = Game Data
|
settings.data = Ігрові дані
|
||||||
settings.reset = Скинути за замовчуванням
|
settings.reset = Скинути за замовчуванням
|
||||||
settings.rebind = Зміна
|
settings.rebind = Зміна
|
||||||
settings.controls = Керування
|
settings.controls = Керування
|
||||||
@@ -445,6 +467,7 @@ bar.powerbalance = Енергія: {0}/с
|
|||||||
bar.poweramount = Енергія: {0}
|
bar.poweramount = Енергія: {0}
|
||||||
bar.poweroutput = Вихідна енергія: {0}
|
bar.poweroutput = Вихідна енергія: {0}
|
||||||
bar.items = Предмети: {0}
|
bar.items = Предмети: {0}
|
||||||
|
bar.capacity = Місткість: {0}
|
||||||
bar.liquid = Рідина
|
bar.liquid = Рідина
|
||||||
bar.heat = Нагрівання
|
bar.heat = Нагрівання
|
||||||
bar.power = Енергія
|
bar.power = Енергія
|
||||||
@@ -518,9 +541,9 @@ setting.mutemusic.name = Заглушити музику
|
|||||||
setting.sfxvol.name = Гучність звукових ефектів
|
setting.sfxvol.name = Гучність звукових ефектів
|
||||||
setting.mutesound.name = Заглушити звук
|
setting.mutesound.name = Заглушити звук
|
||||||
setting.crashreport.name = Відсилати анонімні звіти про аварійне завершення гри
|
setting.crashreport.name = Відсилати анонімні звіти про аварійне завершення гри
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = Автоматичне створення збережень
|
||||||
setting.chatopacity.name = Непрозорість чату
|
setting.chatopacity.name = Непрозорість чату
|
||||||
setting.playerchat.name = Відображати чат у грі
|
setting.playerchat.name = Відображати хмару чата над гравцями
|
||||||
uiscale.reset = Масштаб користувальницького інтерфейсу було змінено.\nНатисніть «ОК» для підтверждення цього масшатабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] …
|
uiscale.reset = Масштаб користувальницького інтерфейсу було змінено.\nНатисніть «ОК» для підтверждення цього масшатабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] …
|
||||||
uiscale.cancel = Скасувати & Вийти
|
uiscale.cancel = Скасувати & Вийти
|
||||||
setting.bloom.name = Світіння
|
setting.bloom.name = Світіння
|
||||||
@@ -547,11 +570,11 @@ keybind.break_block.name = Зламати блок
|
|||||||
keybind.deselect.name = Скасувати
|
keybind.deselect.name = Скасувати
|
||||||
keybind.shoot.name = Постріл
|
keybind.shoot.name = Постріл
|
||||||
keybind.zoom_hold.name = Керування масштабом
|
keybind.zoom_hold.name = Керування масштабом
|
||||||
keybind.zoom.name = Приблизить
|
keybind.zoom.name = Приблизити
|
||||||
keybind.menu.name = Меню
|
keybind.menu.name = Меню
|
||||||
keybind.pause.name = Пауза
|
keybind.pause.name = Пауза
|
||||||
keybind.minimap.name = Міні-мапа
|
keybind.minimap.name = Мінімапа
|
||||||
keybind.dash.name = Мчатися
|
keybind.dash.name = Прискоритися/Літати
|
||||||
keybind.chat.name = Чат
|
keybind.chat.name = Чат
|
||||||
keybind.player_list.name = Список гравців
|
keybind.player_list.name = Список гравців
|
||||||
keybind.console.name = Консоль
|
keybind.console.name = Консоль
|
||||||
@@ -560,7 +583,7 @@ keybind.toggle_menus.name = Меню перемикання
|
|||||||
keybind.chat_history_prev.name = Попередня історія чату
|
keybind.chat_history_prev.name = Попередня історія чату
|
||||||
keybind.chat_history_next.name = Наступна історія чату
|
keybind.chat_history_next.name = Наступна історія чату
|
||||||
keybind.chat_scroll.name = Прокрутка чату
|
keybind.chat_scroll.name = Прокрутка чату
|
||||||
keybind.drop_unit.name = Скинути бой. од.
|
keybind.drop_unit.name = Скинути бойову одиницю
|
||||||
keybind.zoom_minimap.name = Збільшити міні-мапу
|
keybind.zoom_minimap.name = Збільшити міні-мапу
|
||||||
mode.help.title = Опис режимів
|
mode.help.title = Опис режимів
|
||||||
mode.survival.name = Хвилі
|
mode.survival.name = Хвилі
|
||||||
@@ -571,15 +594,15 @@ mode.pvp.name = PVP
|
|||||||
mode.pvp.description = боріться проти інших гравців.\n[gray]Для гри потрібно принаймні 2 ядра різного кольору на мапі.
|
mode.pvp.description = боріться проти інших гравців.\n[gray]Для гри потрібно принаймні 2 ядра різного кольору на мапі.
|
||||||
mode.attack.name = Атака
|
mode.attack.name = Атака
|
||||||
mode.attack.description = Зруйнуйте ворожу базу.\n[gray]Потрібно червоне ядро на мапі для гри.
|
mode.attack.description = Зруйнуйте ворожу базу.\n[gray]Потрібно червоне ядро на мапі для гри.
|
||||||
mode.custom = Користувальницькі правила
|
mode.custom = Користувацькі правила
|
||||||
rules.infiniteresources = Нескінченні ресурси
|
rules.infiniteresources = Нескінченні ресурси
|
||||||
rules.wavetimer = Таймер хвиль
|
rules.wavetimer = Таймер хвиль
|
||||||
rules.waves = Хвилі
|
rules.waves = Хвилі
|
||||||
rules.attack = Режим атаки
|
rules.attack = Режим атаки
|
||||||
rules.enemyCheat = Нескінченні ресурси для ШІ
|
rules.enemyCheat = Нескінченні ресурси для ШІ
|
||||||
rules.unitdrops = Ресурс бойових одиниць
|
rules.unitdrops = Ресурс бойових одиниць
|
||||||
rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойов. Од.
|
rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць
|
||||||
rules.unithealthmultiplier = Множник здоров’я бойов. од.
|
rules.unithealthmultiplier = Множник здоров’я бойових одиниць
|
||||||
rules.playerhealthmultiplier = Множник здоров’я гравця
|
rules.playerhealthmultiplier = Множник здоров’я гравця
|
||||||
rules.playerdamagemultiplier = Множник шкоди гравця
|
rules.playerdamagemultiplier = Множник шкоди гравця
|
||||||
rules.unitdamagemultiplier = Множник шкоди бойових одиниць
|
rules.unitdamagemultiplier = Множник шкоди бойових одиниць
|
||||||
@@ -659,6 +682,8 @@ mech.buildspeed = [lightgray]Швидкість будування: {0}%
|
|||||||
liquid.heatcapacity = [lightgray]Теплоємність: {0}
|
liquid.heatcapacity = [lightgray]Теплоємність: {0}
|
||||||
liquid.viscosity = [lightgray]В’язкість: {0}
|
liquid.viscosity = [lightgray]В’язкість: {0}
|
||||||
liquid.temperature = [lightgray]Температура: {0}
|
liquid.temperature = [lightgray]Температура: {0}
|
||||||
|
block.sand-boulder.name = Sand Boulder
|
||||||
|
block.grass.name = Трава
|
||||||
block.sand-boulder.name = Пісочний валун
|
block.sand-boulder.name = Пісочний валун
|
||||||
block.grass.name = Трава
|
block.grass.name = Трава
|
||||||
block.salt.name = Сіль
|
block.salt.name = Сіль
|
||||||
@@ -709,10 +734,10 @@ block.ice-snow.name = Крижаний сніг
|
|||||||
block.rocks.name = Камені
|
block.rocks.name = Камені
|
||||||
block.icerocks.name = Крижані камені
|
block.icerocks.name = Крижані камені
|
||||||
block.snowrocks.name = Снігові камені
|
block.snowrocks.name = Снігові камені
|
||||||
block.dunerocks.name = Піщані Камені
|
block.dunerocks.name = Піщані камені
|
||||||
block.pine.name = Сосна
|
block.pine.name = Сосна
|
||||||
block.white-tree-dead.name = Мертве біле дерево
|
block.white-tree-dead.name = Мертве біле дерево
|
||||||
block.white-tree.name = Біле Дерево
|
block.white-tree.name = Біле дерево
|
||||||
block.spore-cluster.name = Скупчення спор
|
block.spore-cluster.name = Скупчення спор
|
||||||
block.metal-floor.name = Металевий пол 1
|
block.metal-floor.name = Металевий пол 1
|
||||||
block.metal-floor-2.name = Металевий пол 2
|
block.metal-floor-2.name = Металевий пол 2
|
||||||
|
|||||||
@@ -10,17 +10,19 @@ link.trello.description = Trello board 上的官方计划表
|
|||||||
link.itch.io.description = PC版下载和网页版(itch.io)
|
link.itch.io.description = PC版下载和网页版(itch.io)
|
||||||
link.google-play.description = 从谷歌商店获取安卓版
|
link.google-play.description = 从谷歌商店获取安卓版
|
||||||
link.wiki.description = 官方 Mindustry 维基
|
link.wiki.description = 官方 Mindustry 维基
|
||||||
linkfail = 打开链接失败!\nURL 已经复制到剪贴板。
|
linkfail = 打开链接失败!\n网址已经复制到剪贴板。
|
||||||
screenshot = 荧幕截图已放在 {0}
|
screenshot = 屏幕截图已放在 {0}
|
||||||
screenshot.invalid = 地图太大,可能没有足够的内存用于截图。
|
screenshot.invalid = 地图太大,可能没有足够的内存用于截图。
|
||||||
gameover = 你的核心被摧毁了!
|
gameover = 你的核心被摧毁了!
|
||||||
gameover.pvp = [accent] {0}[] 队获胜!
|
gameover.pvp = [accent] {0}[]队获胜!
|
||||||
highscore = [accent]新纪录!
|
highscore = [accent]新纪录!
|
||||||
load.sound = Sounds
|
|
||||||
load.map = Maps
|
load.sound = 音乐加载中
|
||||||
load.image = Images
|
load.map = 地图加载中
|
||||||
load.content = Content
|
load.image = 图片加载中
|
||||||
load.system = System
|
load.content = 内容加载中
|
||||||
|
load.system = 系统加载中
|
||||||
|
|
||||||
stat.wave = 战胜的波数:[accent]{0}
|
stat.wave = 战胜的波数:[accent]{0}
|
||||||
stat.enemiesDestroyed = 消灭的敌人:[accent]{0}
|
stat.enemiesDestroyed = 消灭的敌人:[accent]{0}
|
||||||
stat.built = 建造的建筑:[accent]{0}
|
stat.built = 建造的建筑:[accent]{0}
|
||||||
@@ -28,6 +30,7 @@ stat.destroyed = 摧毁的建筑:[accent]{0}
|
|||||||
stat.deconstructed = 拆除的建筑:[accent]{0}
|
stat.deconstructed = 拆除的建筑:[accent]{0}
|
||||||
stat.delivered = 发射的资源:
|
stat.delivered = 发射的资源:
|
||||||
stat.rank = 最终等级:[accent]{0}
|
stat.rank = 最终等级:[accent]{0}
|
||||||
|
|
||||||
launcheditems = [accent]发射的资源
|
launcheditems = [accent]发射的资源
|
||||||
map.delete = 确定要删除 "[accent]{0}[]" 地图吗?
|
map.delete = 确定要删除 "[accent]{0}[]" 地图吗?
|
||||||
level.highscore = 最高分:[accent]{0}
|
level.highscore = 最高分:[accent]{0}
|
||||||
@@ -49,8 +52,17 @@ close = 关闭
|
|||||||
website = 官网
|
website = 官网
|
||||||
quit = 退出
|
quit = 退出
|
||||||
maps = 地图
|
maps = 地图
|
||||||
|
maps.browse = 浏览地图
|
||||||
continue = 继续
|
continue = 继续
|
||||||
maps.none = [LIGHT_GRAY]没有找到地图!
|
maps.none = [LIGHT_GRAY]没有找到地图!
|
||||||
|
invalid = 无效
|
||||||
|
preparingconfig = 正在准备配置
|
||||||
|
preparingcontent = 正在准备内容
|
||||||
|
uploadingcontent = 正在上传内容
|
||||||
|
uploadingpreviewfile = 正在上传预览文件
|
||||||
|
committingchanges = 提交更改
|
||||||
|
done = 已完成
|
||||||
|
|
||||||
about.button = 关于
|
about.button = 关于
|
||||||
name = 名字:
|
name = 名字:
|
||||||
noname = 先取一个[accent]玩家名[]。
|
noname = 先取一个[accent]玩家名[]。
|
||||||
@@ -64,38 +76,42 @@ 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.whitelist = 你不在白名单中。
|
||||||
server.kicked.serverClose = 服务器已关闭。
|
server.kicked.serverClose = 服务器已关闭。
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = 你被投票踢出了服务器。永别了。
|
||||||
server.kicked.clientOutdated = 客户端过旧,请更新你的游戏。
|
server.kicked.clientOutdated = 客户端过旧,请更新你的游戏。
|
||||||
server.kicked.serverOutdated = 服务器过旧,请联系房主升级服务器。
|
server.kicked.serverOutdated = 服务器过旧,请联系房主升级服务器。
|
||||||
server.kicked.banned = 你在这个服务器上被拉入黑名单了。
|
server.kicked.banned = 你在这个服务器上被拉入黑名单了。
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = 此服务器与你的不稳定测试版不兼容。
|
||||||
|
server.kicked.playerLimit = 服务器已满,请等待一个空位。
|
||||||
server.kicked.recentKick = 你刚刚被踢出服务器。\n请稍后重新连接!
|
server.kicked.recentKick = 你刚刚被踢出服务器。\n请稍后重新连接!
|
||||||
server.kicked.nameInUse = 你的名字与服务器中的一个人重复了。
|
server.kicked.nameInUse = 你的名字与服务器中的一个人重复了。
|
||||||
server.kicked.nameEmpty = 无效的名字!
|
server.kicked.nameEmpty = 无效的名字!
|
||||||
server.kicked.idInUse = 你已在这个服务器上!不允许用两个账号连接。
|
server.kicked.idInUse = 你已在这个服务器上!不允许用两个账号连接。
|
||||||
server.kicked.customClient = 这个服务器不支持定制版本。下载官方版本。
|
server.kicked.customClient = 这个服务器不支持自定义版本。请下载官方版本。
|
||||||
server.kicked.gameover = 游戏结束!
|
server.kicked.gameover = 游戏结束!
|
||||||
server.versions = 客户端版本:[accent] {0}[]\n服务器版本:[accent] {1}[]
|
server.versions = 客户端版本:[accent] {0}[]\n服务器版本:[accent] {1}[]
|
||||||
host.info = [accent]创建局域网游戏[]按钮会在[scarlet]6567[]端口运行一个服务器。[]\n任何在同一个[LIGHT_GRAY]wifi或本地网络[]下的人都应该可以在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过IP地址连接,你需要设定[accent]端口转发[]。\n\n[LIGHT_GRAY]注意:如果某人无法连接到你的局域网游戏,请确保你在防火墙设置里允许了Mindustry访问本地网络。
|
host.info = [accent]创建局域网游戏[]按钮会在[scarlet] 6567 []端口运行一个服务器。[]\n任何在同一个[LIGHT_GRAY] Wi-Fi 或本地网络[]下的人应该都可以在服务器列表中看到你的服务器。\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 = 创建服务器
|
||||||
|
invitefriends = 邀请朋友
|
||||||
hostserver.mobile = 创建\n服务器
|
hostserver.mobile = 创建\n服务器
|
||||||
host = 创建
|
host = 创建
|
||||||
hosting = [accent]正在打开服务器……
|
hosting = [accent]正在打开服务器……
|
||||||
hosts.refresh = 刷新
|
hosts.refresh = 刷新
|
||||||
hosts.discovering = 正在搜索局域网服务器
|
hosts.discovering = 正在搜索局域网服务器
|
||||||
|
hosts.discovering.any = 正在搜索服务器
|
||||||
server.refreshing = 正在刷新服务器
|
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.mobile = 移动客户端:[accent]{0}
|
trace.mobile = 移动客户端:[accent]{0}
|
||||||
trace.modclient = 定制版客户端:[accent]{0}
|
trace.modclient = 自定义客户端:[accent]{0}
|
||||||
invalidid = 无效的客户端ID!提交一个错误报告。
|
invalidid = 无效的客户端 ID!提交一个错误报告。
|
||||||
server.bans = 黑名单
|
server.bans = 黑名单
|
||||||
server.bans.none = 没有被拉黑的玩家!
|
server.bans.none = 没有被拉黑的玩家!
|
||||||
server.admins = 管理员
|
server.admins = 管理员
|
||||||
@@ -106,16 +122,21 @@ server.edit = 编辑服务器
|
|||||||
server.outdated = [crimson]服务器过旧![]
|
server.outdated = [crimson]服务器过旧![]
|
||||||
server.outdated.client = [crimson]客户端过旧![]
|
server.outdated.client = [crimson]客户端过旧![]
|
||||||
server.version = [lightgray]版本:{0} {1}
|
server.version = [lightgray]版本:{0} {1}
|
||||||
server.custombuild = [yellow]定制版
|
server.custombuild = [yellow]自定义
|
||||||
confirmban = 确认拉黑这名玩家?
|
confirmban = 确认拉黑这名玩家?
|
||||||
confirmkick = 确定踢走这名玩家?
|
confirmkick = 确定踢出这名玩家?
|
||||||
|
confirmvotekick = 确定投票踢出这名玩家?
|
||||||
confirmunban = 确定取消拉黑这名玩家?
|
confirmunban = 确定取消拉黑这名玩家?
|
||||||
confirmadmin = 确定给予这名玩家管理员权限?
|
confirmadmin = 确定给予这名玩家管理员权限?
|
||||||
confirmunadmin = 确定取消这名玩家的管理员权限?
|
confirmunadmin = 确定取消这名玩家的管理员权限?
|
||||||
joingame.title = 加入游戏
|
joingame.title = 加入游戏
|
||||||
joingame.ip = 地址:
|
joingame.ip = 地址:
|
||||||
disconnect = 已断开
|
disconnect = 已断开
|
||||||
disconnect.data = 读取世界数据失败!
|
disconnect.error = 连接错误。
|
||||||
|
disconnect.closed = 连接关闭。
|
||||||
|
disconnect.timeout = 连接超时。
|
||||||
|
disconnect.data = 读取服务器数据失败!
|
||||||
|
cantconnect = 无法加入([accent]{0}[])。
|
||||||
connecting = [accent]连接中……
|
connecting = [accent]连接中……
|
||||||
connecting.data = [accent]加载中……
|
connecting.data = [accent]加载中……
|
||||||
server.port = 端口:
|
server.port = 端口:
|
||||||
@@ -141,38 +162,40 @@ 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.mode = 模式:{0}
|
||||||
save.difficulty = 难度:{0}
|
save.difficulty = 难度:{0}
|
||||||
save.date = 最后保存:{0}
|
save.date = 最后保存:{0}
|
||||||
save.playtime = 游戏时间:{0}
|
save.playtime = 游戏时间:{0}
|
||||||
warning = 警告!
|
warning = 警告!
|
||||||
confirm = 确认
|
confirm = 确认
|
||||||
delete = 删除
|
delete = 删除
|
||||||
|
view.workshop = 浏览创意工坊
|
||||||
ok = 确定
|
ok = 确定
|
||||||
open = 打开
|
open = 打开
|
||||||
customize = 定制
|
customize = 自定义
|
||||||
cancel = 取消
|
cancel = 取消
|
||||||
openlink = 打开链接
|
openlink = 打开链接
|
||||||
copylink = 复制链接
|
copylink = 复制链接
|
||||||
back = 返回
|
back = 返回
|
||||||
data.export = Export Data
|
data.export = 导出数据
|
||||||
data.import = Import Data
|
data.import = 导入数据
|
||||||
data.exported = Data exported.
|
data.exported = 数据已导入。
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = 非有效游戏数据。
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。
|
||||||
classic.export = 导出老版本数据
|
classic.export = 导出老版本数据
|
||||||
classic.export.text = [accent]Mindustry []刚刚有了一个重要的更新。\n检测到此为老版本(v3.5 build 40)的存档或地图。是否要将这些保存导出到手机的主文件夹中,以便在 Mindustry 老版本应用程序中使用?
|
classic.export.text = [accent]Mindustry []已经有了一个重要的更新。\n检测到此为老版本(v3.5 build 40)的存档或地图。是否要将这些保存导出到手机的主文件夹中,以便在 Mindustry 老版本应用程序中使用?
|
||||||
quit.confirm = 确定退出?
|
quit.confirm = 确定退出?
|
||||||
quit.confirm.tutorial = 你确定不玩教程就开始游戏?\n教程可以通过[accent]设置->游戏->重新游玩教程[]来再次游玩。
|
quit.confirm.tutorial = 你确定要跳过教程?\n教程可以通过[accent]设置->游戏->重新游玩教程[]来再次游玩。
|
||||||
loading = [accent]加载中……
|
loading = [accent]加载中……
|
||||||
saving = [accent]保存中……
|
saving = [accent]保存中……
|
||||||
wave = [accent]波次 {0}
|
wave = [accent]波次{0}
|
||||||
wave.waiting = [LIGHT_GRAY]下一波将在{0}秒后到来
|
wave.waiting = [LIGHT_GRAY]下一波将在{0}秒后到来
|
||||||
wave.waveInProgress = [LIGHT_GRAY]波次进行中
|
wave.waveInProgress = [LIGHT_GRAY]波次进行中
|
||||||
waiting = [LIGHT_GRAY]等待中……
|
waiting = [LIGHT_GRAY]等待中……
|
||||||
@@ -186,10 +209,15 @@ 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 = 这个地图没有敌人的核心!请在编辑中向地图添加一个[SCARLET]红色[]的核心。
|
map.nospawn.attack = 这个地图没有敌人的核心!请在编辑中向地图添加一个[SCARLET]敌方[]的核心。
|
||||||
map.invalid = 地图载入错误:地图文件可能已经损坏。
|
map.invalid = 地图载入错误:地图文件可能已经损坏。
|
||||||
|
map.publish.error = 地图上传错误:{0}
|
||||||
|
map.publish.confirm = 确定上传此地图?\n\n[lightgray]确定你同意 Steam 创意工坊的最终用户许可协议,否则你的地图将不会被展示!
|
||||||
|
eula = Steam 最终用户许可协议
|
||||||
|
map.publish = 地图已上传。
|
||||||
|
map.publishing = [accent]地图上传中……
|
||||||
editor.brush = 笔刷
|
editor.brush = 笔刷
|
||||||
editor.openin = 在编辑器中打开
|
editor.openin = 在编辑器中打开
|
||||||
editor.oregen = 矿石的生成
|
editor.oregen = 矿石的生成
|
||||||
@@ -197,14 +225,17 @@ editor.oregen.info = 矿石的生成:
|
|||||||
editor.mapinfo = 地图信息
|
editor.mapinfo = 地图信息
|
||||||
editor.author = 作者:
|
editor.author = 作者:
|
||||||
editor.description = 描述:
|
editor.description = 描述:
|
||||||
|
editor.nodescription = 地图必须要有不少于4个字符的描述才能上传。
|
||||||
editor.waves = 波数:
|
editor.waves = 波数:
|
||||||
editor.rules = 规则:
|
editor.rules = 规则:
|
||||||
editor.generation = 筛选器:
|
editor.generation = 筛选器:
|
||||||
editor.ingame = 游戏内编辑
|
editor.ingame = 游戏内编辑
|
||||||
|
editor.publish.workshop = 上传到创意工坊
|
||||||
editor.newmap = 新地图
|
editor.newmap = 新地图
|
||||||
|
workshop = 创意工坊
|
||||||
waves.title = 波数
|
waves.title = 波数
|
||||||
waves.remove = 移除
|
waves.remove = 移除
|
||||||
waves.never = <永不>
|
waves.never = < 无限 >
|
||||||
waves.every = 每
|
waves.every = 每
|
||||||
waves.waves = 波
|
waves.waves = 波
|
||||||
waves.perspawn = 每次生成
|
waves.perspawn = 每次生成
|
||||||
@@ -218,6 +249,7 @@ waves.invalid = 剪贴板中无效的波次信息。
|
|||||||
waves.copied = 波次信息已复制。
|
waves.copied = 波次信息已复制。
|
||||||
waves.none = 无自定义敌人。\n请注意,空布局将自动替换为默认布局。
|
waves.none = 无自定义敌人。\n请注意,空布局将自动替换为默认布局。
|
||||||
editor.default = [LIGHT_GRAY]<默认>
|
editor.default = [LIGHT_GRAY]<默认>
|
||||||
|
details = 详情……
|
||||||
edit = 编辑……
|
edit = 编辑……
|
||||||
editor.name = 名称:
|
editor.name = 名称:
|
||||||
editor.spawn = 生成单位
|
editor.spawn = 生成单位
|
||||||
@@ -227,8 +259,9 @@ editor.errorload = 读取文件时出现错误:\n[accent]{0}
|
|||||||
editor.errorsave = 保存文件时出现错误:\n[accent]{0}
|
editor.errorsave = 保存文件时出现错误:\n[accent]{0}
|
||||||
editor.errorimage = 这是一幅画,不是地图。不要更改文件的扩展名来让他工作。\n\n如果你想导入地图,请在编辑器中使用“导入地图”这一按钮。
|
editor.errorimage = 这是一幅画,不是地图。不要更改文件的扩展名来让他工作。\n\n如果你想导入地图,请在编辑器中使用“导入地图”这一按钮。
|
||||||
editor.errorlegacy = 此地图太旧,而旧的地图格式不再受支持了。
|
editor.errorlegacy = 此地图太旧,而旧的地图格式不再受支持了。
|
||||||
|
editor.errornot = 这不是地图文件。
|
||||||
editor.errorheader = 此地图文件已失效或损坏。
|
editor.errorheader = 此地图文件已失效或损坏。
|
||||||
editor.errorname = 地图没有被定义的名称。
|
editor.errorname = 地图没有被定义的名称。你是否在尝试加载存档文件?
|
||||||
editor.update = 更新
|
editor.update = 更新
|
||||||
editor.randomize = 随机化
|
editor.randomize = 随机化
|
||||||
editor.apply = 应用
|
editor.apply = 应用
|
||||||
@@ -259,7 +292,9 @@ editor.resizemap = 调整地图大小
|
|||||||
editor.mapname = 地图名称:
|
editor.mapname = 地图名称:
|
||||||
editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。
|
editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。
|
||||||
editor.overwrite.confirm = [scarlet]警告![]存在同名地图。你确定你想要覆盖?
|
editor.overwrite.confirm = [scarlet]警告![]存在同名地图。你确定你想要覆盖?
|
||||||
|
editor.exists = 已经存在同名地图。
|
||||||
editor.selectmap = 选择一个地图加载:
|
editor.selectmap = 选择一个地图加载:
|
||||||
|
|
||||||
toolmode.replace = 替换
|
toolmode.replace = 替换
|
||||||
toolmode.replace.description = 仅在实心块上绘制。
|
toolmode.replace.description = 仅在实心块上绘制。
|
||||||
toolmode.replaceall = 全部替换
|
toolmode.replaceall = 全部替换
|
||||||
@@ -274,37 +309,39 @@ toolmode.fillteams = 填充团队
|
|||||||
toolmode.fillteams.description = 填充团队而不是方块。
|
toolmode.fillteams.description = 填充团队而不是方块。
|
||||||
toolmode.drawteams = 绘制团队
|
toolmode.drawteams = 绘制团队
|
||||||
toolmode.drawteams.description = 绘制团队而不是方块。
|
toolmode.drawteams.description = 绘制团队而不是方块。
|
||||||
|
|
||||||
filters.empty = [LIGHT_GRAY]没有筛选器!用下方的按钮添加一个。
|
filters.empty = [LIGHT_GRAY]没有筛选器!用下方的按钮添加一个。
|
||||||
filter.distort = Distort
|
filter.distort = 扭曲程度
|
||||||
filter.noise = Noise
|
filter.noise = 波动程度
|
||||||
filter.median = Median
|
filter.median = 平均数
|
||||||
filter.oremedian = Ore Median
|
filter.oremedian = 矿石平均数
|
||||||
filter.blend = Blend
|
filter.blend = 混合程度
|
||||||
filter.defaultores = Default Ores
|
filter.defaultores = 默认矿石
|
||||||
filter.ore = Ore
|
filter.ore = 矿石
|
||||||
filter.rivernoise = River Noise
|
filter.rivernoise = 河流波动程度
|
||||||
filter.mirror = Mirror
|
filter.mirror = 镜像
|
||||||
filter.clear = Clear
|
filter.clear = 清理
|
||||||
filter.option.ignore = Ignore
|
filter.option.ignore = 忽略
|
||||||
filter.scatter = Scatter
|
filter.scatter = 分散程度
|
||||||
filter.terrain = Terrain
|
filter.terrain = 地形
|
||||||
filter.option.scale = Scale
|
filter.option.scale = 规模大小
|
||||||
filter.option.chance = Chance
|
filter.option.chance = 几率大小
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = 巨大程度
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = 最大阈值
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = 圆规模
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = 递增
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = 递减
|
||||||
filter.option.angle = Angle
|
filter.option.angle = 角度大小
|
||||||
filter.option.block = Block
|
filter.option.block = 方块
|
||||||
filter.option.floor = Floor
|
filter.option.floor = 地面
|
||||||
filter.option.flooronto = Target Floor
|
filter.option.flooronto = 地面目标
|
||||||
filter.option.wall = Wall
|
filter.option.wall = 墙
|
||||||
filter.option.ore = Ore
|
filter.option.ore = 矿石
|
||||||
filter.option.floor2 = Secondary Floor
|
filter.option.floor2 = 二重地面
|
||||||
filter.option.threshold2 = Secondary Threshold
|
filter.option.threshold2 = 二重阈值
|
||||||
filter.option.radius = Radius
|
filter.option.radius = 半径大小
|
||||||
filter.option.percentile = Percentile
|
filter.option.percentile = 百分比
|
||||||
|
|
||||||
width = 宽度:
|
width = 宽度:
|
||||||
height = 高度:
|
height = 高度:
|
||||||
menu = 菜单
|
menu = 菜单
|
||||||
@@ -322,9 +359,10 @@ tutorial.retake = 重新游玩教程
|
|||||||
editor = 编辑器
|
editor = 编辑器
|
||||||
mapeditor = 地图编辑器
|
mapeditor = 地图编辑器
|
||||||
donate = 打赏
|
donate = 打赏
|
||||||
|
|
||||||
abandon = 放弃
|
abandon = 放弃
|
||||||
abandon.text = 这个区域和它的所有资源会被敌人重置。
|
abandon.text = 这个区域及其资源会被敌人重置。
|
||||||
locked = 已被锁定
|
locked = 已锁定
|
||||||
complete = [LIGHT_GRAY]完成:
|
complete = [LIGHT_GRAY]完成:
|
||||||
zone.requirement = 在{1}中达到{0}波
|
zone.requirement = 在{1}中达到{0}波
|
||||||
resume = 暂停:\n[LIGHT_GRAY]{0}
|
resume = 暂停:\n[LIGHT_GRAY]{0}
|
||||||
@@ -338,6 +376,7 @@ launch.skip.confirm = 如果你现在跳过,在后来的波次前你将无法
|
|||||||
uncover = 解锁
|
uncover = 解锁
|
||||||
configure = 设定发射资源数量
|
configure = 设定发射资源数量
|
||||||
configure.locked = [LIGHT_GRAY]到达第 {0} 波\n才能设定发射资源。
|
configure.locked = [LIGHT_GRAY]到达第 {0} 波\n才能设定发射资源。
|
||||||
|
configure.invalid = 数量必须是0到{0}之间的数字。
|
||||||
zone.unlocked = [LIGHT_GRAY]{0} 已解锁。
|
zone.unlocked = [LIGHT_GRAY]{0} 已解锁。
|
||||||
zone.requirement.complete = 已达到第{0}波。\n达到解锁{1}的需求。
|
zone.requirement.complete = 已达到第{0}波。\n达到解锁{1}的需求。
|
||||||
zone.config.complete = 已达到第{0}波。\n允许携带发射的资源进入此地区。
|
zone.config.complete = 已达到第{0}波。\n允许携带发射的资源进入此地区。
|
||||||
@@ -347,6 +386,7 @@ zone.objective.survival = 生存
|
|||||||
zone.objective.attack = 摧毁敌方核心
|
zone.objective.attack = 摧毁敌方核心
|
||||||
add = 添加……
|
add = 添加……
|
||||||
boss.health = BOSS 生命值
|
boss.health = BOSS 生命值
|
||||||
|
|
||||||
connectfail = [crimson]服务器连接失败:[accent]{0}
|
connectfail = [crimson]服务器连接失败:[accent]{0}
|
||||||
error.unreachable = 服务器无法访问。
|
error.unreachable = 服务器无法访问。
|
||||||
error.invalidaddress = 地址无效。
|
error.invalidaddress = 地址无效。
|
||||||
@@ -357,6 +397,7 @@ error.mapnotfound = 找不到地图文件!
|
|||||||
error.io = 网络 I/O 错误。
|
error.io = 网络 I/O 错误。
|
||||||
error.any = 未知网络错误。
|
error.any = 未知网络错误。
|
||||||
error.bloom = 未能初始化特效。\n您的设备可能不支持它。
|
error.bloom = 未能初始化特效。\n您的设备可能不支持它。
|
||||||
|
|
||||||
zone.groundZero.name = 零号地区
|
zone.groundZero.name = 零号地区
|
||||||
zone.desertWastes.name = 荒芜沙漠
|
zone.desertWastes.name = 荒芜沙漠
|
||||||
zone.craters.name = 陨石带
|
zone.craters.name = 陨石带
|
||||||
@@ -371,22 +412,24 @@ zone.saltFlats.name = 盐碱荒滩
|
|||||||
zone.impact0078.name = 0078号冲击
|
zone.impact0078.name = 0078号冲击
|
||||||
zone.crags.name = 悬崖
|
zone.crags.name = 悬崖
|
||||||
zone.fungalPass.name = 真菌通道
|
zone.fungalPass.name = 真菌通道
|
||||||
zone.groundZero.description = 重新开始的最佳位置。敌人威胁很小,资源少。\n尽可能收集多的铅和铜。\n行动。
|
|
||||||
|
zone.groundZero.description = 重新开始的最佳位置。这儿敌人威胁很小,资源少。\n尽可能收集多的铅和铜。\n行动。
|
||||||
zone.frozenForest.description = 即使在这里,靠近山脉的地方,孢子也已经扩散。寒冷的温度不可能永远容纳它们。\n\n此行动须投入电力。建造燃烧发电机并学会使用修理者。
|
zone.frozenForest.description = 即使在这里,靠近山脉的地方,孢子也已经扩散。寒冷的温度不可能永远容纳它们。\n\n此行动须投入电力。建造燃烧发电机并学会使用修理者。
|
||||||
zone.desertWastes.description = 这些废物是巨大的,不可预测的,并且与废弃的结构交错在一起。燃烧它以获取动力或合成石墨。\n\n[lightgray]无法保证此着陆位置。
|
zone.desertWastes.description = 这些废料规模巨大,难以预测,并且与废弃的结构交错在一起。\n此地区有煤矿存在,燃烧它以获取动力或合成石墨。\n\n[lightgray]无法保证此着陆位置。
|
||||||
zone.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。根除他们的核心。不要留下任何东西。
|
zone.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。摧毁他们的核心。不要留下任何东西。
|
||||||
zone.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水冷却炮塔和钻头。
|
zone.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水来加速炮塔和钻头。
|
||||||
zone.ruinousShores.description = 穿过荒地,就是海岸线。曾经这个地方安置了一个海岸防御阵列。现在剩下的不多了,只有最基本的防御结构仍然毫发无损,其他一切都被销毁了。\n继续向外扩展。继续研究科技。
|
zone.ruinousShores.description = 穿过荒地,就是海岸线。这个地方曾经建造了一个海岸防御线。但现在所剩无几,只有最基本的防御结构仍然毫发无损,其他一切都被摧毁了。\n继续向外扩展。继续研究科技。
|
||||||
zone.stainedMountains.description = 在更远的内陆地区是山脉,但没有被孢子污染。\n在这一地区分布着丰富的钛。学习如何使用它。\n\n这里敌人的存在更大。不要给他们时间派出最强的部队。
|
zone.stainedMountains.description = 在更远的内陆地区是山脉,但这里没有被孢子污染。\n在这一地区分布着丰富的钛,学习如何使用它。\n\n这里敌人的存在更大。不要给他们时间派出最强的部队。
|
||||||
zone.overgrowth.description = 这个地区靠近孢子的来源,生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。
|
zone.overgrowth.description = 这个地区靠近孢子的来源,因此生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。
|
||||||
zone.tarFields.description = 位于山脉和沙漠之间的产油区的郊区是少数几个有可用焦油储量的地区之一。\n尽管被废弃,但附近仍有一些危险的敌军。不要低估它们。\n\n[lightgray]如果可能,研究石油加工技术。
|
zone.tarFields.description = 位于山脉和沙漠之间的产油区的郊区是少数几个有可用石油储量的地区之一。\n尽管被废弃,但附近仍有一些危险的敌军。不要低估它们。\n\n[lightgray]如果可能,研究石油加工技术。
|
||||||
zone.desolateRift.description = 非常危险的区域。资源丰富但空间小。破坏风险高。尽快离开,不要被敌人的攻击间隔太长所愚弄。
|
zone.desolateRift.description = 非常危险的区域。这儿资源丰富但空间小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。
|
||||||
zone.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断侦察入侵者。
|
zone.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。
|
||||||
zone.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来消灭两个核心。
|
zone.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。
|
||||||
zone.impact0078.description = <在此处插入说明>
|
zone.impact0078.description = <在此处插入说明>
|
||||||
zone.crags.description = <在此处插入说明>
|
zone.crags.description = <在此处插入说明>
|
||||||
|
|
||||||
settings.language = 语言
|
settings.language = 语言
|
||||||
settings.data = Game Data
|
settings.data = 游戏数据
|
||||||
settings.reset = 恢复默认
|
settings.reset = 恢复默认
|
||||||
settings.rebind = 重新绑定
|
settings.rebind = 重新绑定
|
||||||
settings.controls = 控制
|
settings.controls = 控制
|
||||||
@@ -434,22 +477,27 @@ blocks.boosteffect = 加成影响
|
|||||||
blocks.maxunits = 最大单位数量
|
blocks.maxunits = 最大单位数量
|
||||||
blocks.health = 生命值
|
blocks.health = 生命值
|
||||||
blocks.buildtime = 建造时间
|
blocks.buildtime = 建造时间
|
||||||
|
blocks.buildcost = 建造花费
|
||||||
blocks.inaccuracy = 误差
|
blocks.inaccuracy = 误差
|
||||||
blocks.shots = 每秒发射数
|
blocks.shots = 每秒发射数
|
||||||
blocks.reload = 重新装弹
|
blocks.reload = 重新装弹
|
||||||
blocks.ammo = 子弹
|
blocks.ammo = 子弹
|
||||||
|
|
||||||
bar.drilltierreq = 需要更好的钻头
|
bar.drilltierreq = 需要更好的钻头
|
||||||
bar.drillspeed = 挖掘速度:{0}/s
|
bar.drillspeed = 挖掘速度:{0}/s
|
||||||
bar.efficiency = 效率:{0}%
|
bar.efficiency = 效率:{0}%
|
||||||
bar.powerbalance = 能量:{0}
|
bar.powerbalance = 能量:{0}/秒
|
||||||
|
bar.powerstored = 储能:{0}/{1}
|
||||||
bar.poweramount = 能量:{0}
|
bar.poweramount = 能量:{0}
|
||||||
bar.poweroutput = 能量输出:{0}
|
bar.poweroutput = 能量输出:{0}
|
||||||
bar.items = 物体:{0}
|
bar.items = 物体:{0}
|
||||||
|
bar.capacity = 容量:{0}
|
||||||
bar.liquid = 液体
|
bar.liquid = 液体
|
||||||
bar.heat = 热量
|
bar.heat = 热量
|
||||||
bar.power = 电力
|
bar.power = 电力
|
||||||
bar.progress = 制造进度
|
bar.progress = 制造进度
|
||||||
bar.spawned = 单位数量:{0}/{1}
|
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] 燃烧
|
||||||
@@ -461,6 +509,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 = 液体单位/秒
|
||||||
@@ -482,13 +531,14 @@ category.shooting = 发射
|
|||||||
category.optional = 可选的增强物品
|
category.optional = 可选的增强物品
|
||||||
setting.landscape.name = 锁定横屏
|
setting.landscape.name = 锁定横屏
|
||||||
setting.shadows.name = 影子
|
setting.shadows.name = 影子
|
||||||
setting.linear.name = 光滑贴图
|
setting.linear.name = 抗锯齿
|
||||||
setting.animatedwater.name = 流动的水
|
setting.animatedwater.name = 流动的水
|
||||||
setting.animatedshields.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.keyboard.name = 鼠标+键盘操控
|
setting.keyboard.name = 鼠标+键盘操控
|
||||||
|
setting.touchscreen.name = 触屏操控
|
||||||
setting.fpscap.name = 最大FPS
|
setting.fpscap.name = 最大FPS
|
||||||
setting.fpscap.none = 无
|
setting.fpscap.none = 无
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
@@ -518,7 +568,8 @@ setting.mutemusic.name = 静音
|
|||||||
setting.sfxvol.name = 音效音量
|
setting.sfxvol.name = 音效音量
|
||||||
setting.mutesound.name = 静音
|
setting.mutesound.name = 静音
|
||||||
setting.crashreport.name = 发送匿名崩溃报告
|
setting.crashreport.name = 发送匿名崩溃报告
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = 自动创建存档
|
||||||
|
setting.publichost.name = 公共游戏旁观
|
||||||
setting.chatopacity.name = 聊天界面透明度
|
setting.chatopacity.name = 聊天界面透明度
|
||||||
setting.playerchat.name = 显示游戏内聊天界面
|
setting.playerchat.name = 显示游戏内聊天界面
|
||||||
uiscale.reset = UI缩放比例已经改变。\n按下“确定”来确定缩放比例\n[accent]{0}[]秒后[scarlet]退出并恢复设定。
|
uiscale.reset = UI缩放比例已经改变。\n按下“确定”来确定缩放比例\n[accent]{0}[]秒后[scarlet]退出并恢复设定。
|
||||||
@@ -572,6 +623,7 @@ mode.pvp.description = 和本地玩家对战。
|
|||||||
mode.attack.name = 攻击
|
mode.attack.name = 攻击
|
||||||
mode.attack.description = 没有波数,但是有摧毁敌人基地的任务。
|
mode.attack.description = 没有波数,但是有摧毁敌人基地的任务。
|
||||||
mode.custom = 自定义模式
|
mode.custom = 自定义模式
|
||||||
|
|
||||||
rules.infiniteresources = 无限资源
|
rules.infiniteresources = 无限资源
|
||||||
rules.wavetimer = 波次计时器
|
rules.wavetimer = 波次计时器
|
||||||
rules.waves = 波次
|
rules.waves = 波次
|
||||||
@@ -589,7 +641,7 @@ rules.wavespacing = 波次间隔时间:[LIGHT_GRAY](秒)
|
|||||||
rules.buildcostmultiplier = 建设花费倍数
|
rules.buildcostmultiplier = 建设花费倍数
|
||||||
rules.buildspeedmultiplier = 建设时间倍数
|
rules.buildspeedmultiplier = 建设时间倍数
|
||||||
rules.waitForWaveToEnd = 等待敌人时间
|
rules.waitForWaveToEnd = 等待敌人时间
|
||||||
rules.dropzoneradius = 敌人出生点毁灭大小:[LIGHT_GRAY](格)
|
rules.dropzoneradius = 敌人出生点毁灭大小:[LIGHT_GRAY](格)
|
||||||
rules.respawns = 每波最大重生次数
|
rules.respawns = 每波最大重生次数
|
||||||
rules.limitedRespawns = 重生限制次数
|
rules.limitedRespawns = 重生限制次数
|
||||||
rules.title.waves = 波次
|
rules.title.waves = 波次
|
||||||
@@ -598,6 +650,7 @@ rules.title.resourcesbuilding = 资源和建造
|
|||||||
rules.title.player = 玩家
|
rules.title.player = 玩家
|
||||||
rules.title.enemy = 敌人
|
rules.title.enemy = 敌人
|
||||||
rules.title.unit = 单位
|
rules.title.unit = 单位
|
||||||
|
|
||||||
content.item.name = 物品
|
content.item.name = 物品
|
||||||
content.liquid.name = 液体
|
content.liquid.name = 液体
|
||||||
content.unit.name = 部队
|
content.unit.name = 部队
|
||||||
@@ -650,7 +703,7 @@ item.radioactivity = [LIGHT_GRAY]放射性:{0}
|
|||||||
unit.health = [LIGHT_GRAY]生命值:{0}
|
unit.health = [LIGHT_GRAY]生命值:{0}
|
||||||
unit.speed = [LIGHT_GRAY]速度:{0}
|
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}
|
||||||
@@ -659,6 +712,7 @@ 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.sand-boulder.name = 沙砂巨石
|
block.sand-boulder.name = 沙砂巨石
|
||||||
block.grass.name = 草地
|
block.grass.name = 草地
|
||||||
block.salt.name = 盐碱地
|
block.salt.name = 盐碱地
|
||||||
@@ -682,9 +736,6 @@ block.scrap-wall-large.name = 大型废墙
|
|||||||
block.scrap-wall-huge.name = 巨型废墙
|
block.scrap-wall-huge.name = 巨型废墙
|
||||||
block.scrap-wall-gigantic.name = 超巨型废墙
|
block.scrap-wall-gigantic.name = 超巨型废墙
|
||||||
block.thruster.name = 助力器
|
block.thruster.name = 助力器
|
||||||
block.kiln.name = 熔炉
|
|
||||||
block.graphite-press.name = 石墨压缩机
|
|
||||||
block.multi-press.name = 多重压缩机
|
|
||||||
block.constructing = {0}\n[LIGHT_GRAY](建造中)
|
block.constructing = {0}\n[LIGHT_GRAY](建造中)
|
||||||
block.spawn.name = 敌人出生点
|
block.spawn.name = 敌人出生点
|
||||||
block.core-shard.name = 小型核心
|
block.core-shard.name = 小型核心
|
||||||
@@ -714,10 +765,10 @@ block.pine.name = 松树
|
|||||||
block.white-tree-dead.name = 枯萎的白树
|
block.white-tree-dead.name = 枯萎的白树
|
||||||
block.white-tree.name = 白树
|
block.white-tree.name = 白树
|
||||||
block.spore-cluster.name = 孢子簇
|
block.spore-cluster.name = 孢子簇
|
||||||
block.metal-floor.name = 金属地板
|
block.metal-floor.name = 金属地板1
|
||||||
block.metal-floor-2.name = 金属地板2
|
block.metal-floor-2.name = 金属地板2
|
||||||
block.metal-floor-3.name = 金属地板3
|
block.metal-floor-3.name = 金属地板3
|
||||||
block.metal-floor-5.name = 金属地板5
|
block.metal-floor-5.name = 金属地板4
|
||||||
block.metal-floor-damaged.name = 损坏的金属地板
|
block.metal-floor-damaged.name = 损坏的金属地板
|
||||||
block.dark-panel-1.name = 暗面板1
|
block.dark-panel-1.name = 暗面板1
|
||||||
block.dark-panel-2.name = 暗面板2
|
block.dark-panel-2.name = 暗面板2
|
||||||
@@ -730,6 +781,27 @@ block.ignarock.name = 伊格纳石头
|
|||||||
block.hotrock.name = 热石头
|
block.hotrock.name = 热石头
|
||||||
block.magmarock.name = 岩浆石头
|
block.magmarock.name = 岩浆石头
|
||||||
block.cliffs.name = 悬崖
|
block.cliffs.name = 悬崖
|
||||||
|
block.duo.name = 双管炮
|
||||||
|
block.scorch.name = 火焰炮
|
||||||
|
block.scatter.name = 分裂炮
|
||||||
|
block.arc.name = 电弧
|
||||||
|
block.hail.name = 冰雹炮
|
||||||
|
block.lancer.name = 蓝瑟炮
|
||||||
|
block.wave.name = 波浪
|
||||||
|
block.swarmer.name = 蜂群
|
||||||
|
block.salvo.name = 齐射炮
|
||||||
|
block.ripple.name = 浪涌
|
||||||
|
block.cyclone.name = 气旋炮
|
||||||
|
block.fuse.name = 融合炮
|
||||||
|
block.spectre.name = 幽灵
|
||||||
|
block.meltdown.name = 熔毁
|
||||||
|
block.mechanical-drill.name = 机械钻头
|
||||||
|
block.pneumatic-drill.name = 气动钻头
|
||||||
|
block.laser-drill.name = 激光钻头
|
||||||
|
block.blast-drill.name = 爆破钻头
|
||||||
|
block.water-extractor.name = 抽水机
|
||||||
|
block.cultivator.name = 培养机
|
||||||
|
block.oil-extractor.name = 石油钻井
|
||||||
block.copper-wall.name = 铜墙
|
block.copper-wall.name = 铜墙
|
||||||
block.copper-wall-large.name = 大型铜墙
|
block.copper-wall-large.name = 大型铜墙
|
||||||
block.titanium-wall.name = 钛墙
|
block.titanium-wall.name = 钛墙
|
||||||
@@ -738,13 +810,10 @@ block.phase-wall.name = 相织布墙
|
|||||||
block.phase-wall-large.name = 大型相织布墙
|
block.phase-wall-large.name = 大型相织布墙
|
||||||
block.thorium-wall.name = 钍墙
|
block.thorium-wall.name = 钍墙
|
||||||
block.thorium-wall-large.name = 大型钍墙
|
block.thorium-wall-large.name = 大型钍墙
|
||||||
|
block.surge-wall.name = 波动墙
|
||||||
|
block.surge-wall-large.name = 大型波动墙
|
||||||
block.door.name = 门
|
block.door.name = 门
|
||||||
block.door-large.name = 大门
|
block.door-large.name = 大门
|
||||||
block.duo.name = 双管炮
|
|
||||||
block.scorch.name = 火焰炮
|
|
||||||
block.scatter.name = 分裂炮
|
|
||||||
block.hail.name = 冰雹炮
|
|
||||||
block.lancer.name = 蓝瑟炮
|
|
||||||
block.conveyor.name = 传送带
|
block.conveyor.name = 传送带
|
||||||
block.titanium-conveyor.name = 钛传送带
|
block.titanium-conveyor.name = 钛传送带
|
||||||
block.junction.name = 连接点
|
block.junction.name = 连接点
|
||||||
@@ -752,15 +821,28 @@ block.router.name = 路由器
|
|||||||
block.distributor.name = 分配器
|
block.distributor.name = 分配器
|
||||||
block.sorter.name = 分类器
|
block.sorter.name = 分类器
|
||||||
block.overflow-gate.name = 溢流门
|
block.overflow-gate.name = 溢流门
|
||||||
|
block.phase-conveyor.name = 相织布传送带桥
|
||||||
|
block.bridge-conveyor.name = 传送带桥
|
||||||
|
block.armored-conveyor.name = 装甲传送带
|
||||||
|
block.armored-conveyor.description = 向钛传送带一样运物品,但有更好的装甲。除其他传送带,不接受任何边的输入。
|
||||||
|
block.kiln.name = 熔炉
|
||||||
|
block.graphite-press.name = 石墨压缩机
|
||||||
|
block.multi-press.name = 多重压缩机
|
||||||
|
block.mass-driver.name = 质量驱动器
|
||||||
block.silicon-smelter.name = 硅冶炼厂
|
block.silicon-smelter.name = 硅冶炼厂
|
||||||
block.phase-weaver.name = 相织布编织器
|
block.phase-weaver.name = 相织布编织器
|
||||||
block.pulverizer.name = 粉碎机
|
block.pulverizer.name = 粉碎机
|
||||||
block.cryofluidmixer.name = 冷冻液混合器
|
block.cryofluidmixer.name = 冷冻液混合器
|
||||||
block.melter.name = 熔炉
|
block.melter.name = 熔炉
|
||||||
block.incinerator.name = 焚化炉
|
block.incinerator.name = 焚化炉
|
||||||
|
block.alloy-smelter.name = 合金冶炼厂
|
||||||
block.spore-press.name = 孢子压缩机
|
block.spore-press.name = 孢子压缩机
|
||||||
block.separator.name = 分离机
|
block.separator.name = 分离机
|
||||||
block.coal-centrifuge.name = 煤炭离心机
|
block.coal-centrifuge.name = 煤炭离心机
|
||||||
|
block.plastanium-compressor.name = 塑钢压缩机
|
||||||
|
block.pyratite-mixer.name = 硫混合器
|
||||||
|
block.blast-mixer.name = 爆炸混合器
|
||||||
|
block.solar-panel.name = 太阳能电池
|
||||||
block.power-node.name = 能量节点
|
block.power-node.name = 能量节点
|
||||||
block.power-node-large.name = 大型能量节点
|
block.power-node-large.name = 大型能量节点
|
||||||
block.surge-tower.name = 巨浪塔
|
block.surge-tower.name = 巨浪塔
|
||||||
@@ -770,11 +852,10 @@ 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.solar-panel-large.name = 大型太阳能电池
|
||||||
block.pneumatic-drill.name = 气动钻头
|
block.thorium-reactor.name = 钍反应堆
|
||||||
block.laser-drill.name = 激光钻头
|
block.thermal-generator.name = 热能发电机
|
||||||
block.water-extractor.name = 抽水机
|
block.rtg-generator.name = RTG 发电机
|
||||||
block.cultivator.name = 培养机
|
|
||||||
block.dart-mech-pad.name = Dart 机甲平台
|
block.dart-mech-pad.name = Dart 机甲平台
|
||||||
block.delta-mech-pad.name = Delta 机甲平台
|
block.delta-mech-pad.name = Delta 机甲平台
|
||||||
block.javelin-ship-pad.name = Javelin 机甲平台
|
block.javelin-ship-pad.name = Javelin 机甲平台
|
||||||
@@ -782,28 +863,24 @@ block.trident-ship-pad.name = Trident 机甲平台
|
|||||||
block.glaive-ship-pad.name = Glaive 机甲平台
|
block.glaive-ship-pad.name = Glaive 机甲平台
|
||||||
block.omega-mech-pad.name = Omega 机甲平台
|
block.omega-mech-pad.name = Omega 机甲平台
|
||||||
block.tau-mech-pad.name = Tau 机甲平台
|
block.tau-mech-pad.name = Tau 机甲平台
|
||||||
|
block.pulse-conduit.name = 脉冲导管
|
||||||
|
block.phase-conduit.name = 相织布导管桥
|
||||||
|
block.liquid-router.name = 液体路由器
|
||||||
|
block.liquid-tank.name = 储液罐
|
||||||
|
block.liquid-junction.name = 液体连接点
|
||||||
|
block.bridge-conduit.name = 导管桥
|
||||||
block.conduit.name = 导管
|
block.conduit.name = 导管
|
||||||
block.mechanical-pump.name = 机械泵
|
block.mechanical-pump.name = 机械泵
|
||||||
|
block.rotary-pump.name = 回旋泵
|
||||||
|
block.thermal-pump.name = 热能泵
|
||||||
block.item-source.name = 物品源
|
block.item-source.name = 物品源
|
||||||
block.item-void.name = 物品黑洞
|
block.item-void.name = 物品黑洞
|
||||||
block.liquid-source.name = 液体源
|
block.liquid-source.name = 液体源
|
||||||
block.power-void.name = 能源黑洞
|
block.power-void.name = 能源黑洞
|
||||||
block.power-source.name = 无限能源
|
block.power-source.name = 无限能源
|
||||||
block.unloader.name = 装卸器
|
|
||||||
block.vault.name = 仓库
|
|
||||||
block.wave.name = 波浪
|
|
||||||
block.swarmer.name = 蜂群
|
|
||||||
block.salvo.name = 齐射炮
|
|
||||||
block.ripple.name = 浪涌
|
|
||||||
block.phase-conveyor.name = 相织布传送带
|
|
||||||
block.bridge-conveyor.name = 传送带桥
|
|
||||||
block.plastanium-compressor.name = 塑钢压缩机
|
|
||||||
block.pyratite-mixer.name = 硫混合器
|
|
||||||
block.blast-mixer.name = 爆炸混合器
|
|
||||||
block.solar-panel.name = 太阳能电池
|
|
||||||
block.solar-panel-large.name = 大型太阳能电池
|
|
||||||
block.oil-extractor.name = 石油钻井
|
|
||||||
block.command-center.name = 指挥中心
|
block.command-center.name = 指挥中心
|
||||||
|
block.rally-point.name = 集合点
|
||||||
|
block.rally-point.description = 用于地面单位集合的标志。需要指挥中心发出“集合”指令才可使用。
|
||||||
block.draug-factory.name = 德鲁格采矿机工厂
|
block.draug-factory.name = 德鲁格采矿机工厂
|
||||||
block.spirit-factory.name = 幽灵修理机工厂
|
block.spirit-factory.name = 幽灵修理机工厂
|
||||||
block.phantom-factory.name = 鬼怪建造机工厂
|
block.phantom-factory.name = 鬼怪建造机工厂
|
||||||
@@ -815,42 +892,24 @@ block.titan-factory.name = 泰坦机甲工厂
|
|||||||
block.fortress-factory.name = 堡垒机甲工厂
|
block.fortress-factory.name = 堡垒机甲工厂
|
||||||
block.revenant-factory.name = 亡魂战机工厂
|
block.revenant-factory.name = 亡魂战机工厂
|
||||||
block.repair-point.name = 维修点
|
block.repair-point.name = 维修点
|
||||||
block.pulse-conduit.name = 脉冲导管
|
block.message.name = 信息
|
||||||
block.phase-conduit.name = 相织布导管
|
|
||||||
block.liquid-router.name = 液体路由器
|
|
||||||
block.liquid-tank.name = 储液罐
|
|
||||||
block.liquid-junction.name = 液体连接点
|
|
||||||
block.bridge-conduit.name = 导管桥
|
|
||||||
block.rotary-pump.name = 回旋泵
|
|
||||||
block.thorium-reactor.name = 钍反应堆
|
|
||||||
block.mass-driver.name = 质量驱动器
|
|
||||||
block.blast-drill.name = 爆破钻头
|
|
||||||
block.thermal-pump.name = 热能泵
|
|
||||||
block.thermal-generator.name = 热能发电机
|
|
||||||
block.alloy-smelter.name = 合金冶炼厂
|
|
||||||
block.mender.name = 修理者
|
block.mender.name = 修理者
|
||||||
block.mend-projector.name = 修理投影器
|
block.mend-projector.name = 修理投影器
|
||||||
block.surge-wall.name = 波动墙
|
block.unloader.name = 装卸器
|
||||||
block.surge-wall-large.name = 大型波动墙
|
block.vault.name = 仓库
|
||||||
block.cyclone.name = 气旋炮
|
|
||||||
block.fuse.name = 融合炮
|
|
||||||
block.shock-mine.name = 脉冲地雷
|
block.shock-mine.name = 脉冲地雷
|
||||||
block.overdrive-projector.name = 超速投影器
|
block.overdrive-projector.name = 超速投影器
|
||||||
block.force-projector.name = 力墙投影器
|
block.force-projector.name = 力墙投影器
|
||||||
block.arc.name = 电弧
|
|
||||||
block.rtg-generator.name = RTG 发电机
|
|
||||||
block.spectre.name = 幽灵
|
|
||||||
block.meltdown.name = 熔毁
|
|
||||||
block.container.name = 容器
|
block.container.name = 容器
|
||||||
block.launch-pad.name = 发射台
|
block.launch-pad.name = 发射台
|
||||||
block.launch-pad-large.name = 大型发射台
|
block.launch-pad-large.name = 大型发射台
|
||||||
team.blue.name = 蓝
|
team.blue.name = 胖次蓝
|
||||||
team.crux.name = red
|
team.crux.name = 姨妈红
|
||||||
team.sharded.name = orange
|
team.sharded.name = 哲学黄
|
||||||
team.orange.name = 橙
|
team.orange.name = 太阳橙
|
||||||
team.derelict.name = derelict
|
team.derelict.name = 高冷灰
|
||||||
team.green.name = 绿
|
team.green.name = 原谅绿
|
||||||
team.purple.name = 紫
|
team.purple.name = 基佬紫
|
||||||
unit.spirit.name = 幽灵修理机
|
unit.spirit.name = 幽灵修理机
|
||||||
unit.draug.name = 德鲁格采矿机
|
unit.draug.name = 德鲁格采矿机
|
||||||
unit.phantom.name = 鬼怪建造机
|
unit.phantom.name = 鬼怪建造机
|
||||||
@@ -873,7 +932,7 @@ tutorial.drill.mobile = 手动采矿效率低。\n[accent]钻头[]可以自动
|
|||||||
tutorial.blockinfo = 每个方块具有不同的数据。每个钻头只能开采某些矿石。\n要检查块的信息和统计信息,[accent]在菜单中点击问号。[]\n\n[accent]现在查看机械钻头的数据吧。[]
|
tutorial.blockinfo = 每个方块具有不同的数据。每个钻头只能开采某些矿石。\n要检查块的信息和统计信息,[accent]在菜单中点击问号。[]\n\n[accent]现在查看机械钻头的数据吧。[]
|
||||||
tutorial.conveyor = [accent]传送带[]可以把物资传送到核心。\n请从钻头到核心间造一条传送带。
|
tutorial.conveyor = [accent]传送带[]可以把物资传送到核心。\n请从钻头到核心间造一条传送带。
|
||||||
tutorial.conveyor.mobile = [accent]传送带[]可以把物资传送到核心。\n请从钻头到核心间造一条传送带。\n[accent]长按数秒[]并向一个方向拖动来直线放置。\n\n[accent]{0}/{1} 条传送带\n[accent]0/1 物品
|
tutorial.conveyor.mobile = [accent]传送带[]可以把物资传送到核心。\n请从钻头到核心间造一条传送带。\n[accent]长按数秒[]并向一个方向拖动来直线放置。\n\n[accent]{0}/{1} 条传送带\n[accent]0/1 物品
|
||||||
tutorial.turret = 必须建造防御建筑来击退[LIGHT_GRAY]敌人[]。\n请在你核心附近造一个双管炮。
|
tutorial.turret = 必须建造防御建筑来击退[LIGHT_GRAY]敌人[]。\n请在核心附近造一个双管炮。
|
||||||
tutorial.drillturret = 双管炮需要[accent]铜[]作弹药来射击。\n可以放一个钻头在炮塔附近供应铜。
|
tutorial.drillturret = 双管炮需要[accent]铜[]作弹药来射击。\n可以放一个钻头在炮塔附近供应铜。
|
||||||
tutorial.pause = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您可以规划建筑物。\n\n按[accent]空格[]暂停。
|
tutorial.pause = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您可以规划建筑物。\n\n按[accent]空格[]暂停。
|
||||||
tutorial.pause.mobile = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您可以规划建筑物。\n\n[accent]点击左上角的按钮以暂停。
|
tutorial.pause.mobile = 在战斗中,您可以[accent]暂停游戏[]。\n暂停时您可以规划建筑物。\n\n[accent]点击左上角的按钮以暂停。
|
||||||
@@ -886,8 +945,9 @@ tutorial.deposit = 将物品从机甲拖向方块来放下物品。\n\n[accent]
|
|||||||
tutorial.waves = [lightgray]敌人[]来了。\n\n保护核心,防御2波攻击。造更多的炮塔。[accent]点击[]以射击。\n建造更多的炮塔和钻头,并采更多的矿。
|
tutorial.waves = [lightgray]敌人[]来了。\n\n保护核心,防御2波攻击。造更多的炮塔。[accent]点击[]以射击。\n建造更多的炮塔和钻头,并采更多的矿。
|
||||||
tutorial.waves.mobile = [lightgray]敌人[]来了。\n\n保护核心,防御2波攻击。造更多的炮塔。你的机甲将对敌人自动开火。\n建造更多的炮塔和钻头,并采更多的矿。
|
tutorial.waves.mobile = [lightgray]敌人[]来了。\n\n保护核心,防御2波攻击。造更多的炮塔。你的机甲将对敌人自动开火。\n建造更多的炮塔和钻头,并采更多的矿。
|
||||||
tutorial.launch = 特定波次中,你可以[accent]发射核心[],[accent]携带核心中所有资源[]离开所有的建筑。\n资源可用来研究科技。\n\n[accent]点击发射按钮。
|
tutorial.launch = 特定波次中,你可以[accent]发射核心[],[accent]携带核心中所有资源[]离开所有的建筑。\n资源可用来研究科技。\n\n[accent]点击发射按钮。
|
||||||
|
|
||||||
item.copper.description = 一种有用的结构材料。在各种类型的方块中广泛使用。
|
item.copper.description = 一种有用的结构材料。在各种类型的方块中广泛使用。
|
||||||
item.lead.description = 一种基本的起始材料。被广泛用于电子设备和液体运输方块。
|
item.lead.description = 一种基本的起始材料。广泛用于电子设备和液体运输。
|
||||||
item.metaglass.description = 一种超级强硬的复合玻璃。通常用来传送和收藏液体。
|
item.metaglass.description = 一种超级强硬的复合玻璃。通常用来传送和收藏液体。
|
||||||
item.graphite.description = 一种用于弹药和电路绝缘的矿化碳。
|
item.graphite.description = 一种用于弹药和电路绝缘的矿化碳。
|
||||||
item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。
|
item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。
|
||||||
@@ -906,7 +966,7 @@ liquid.water.description = 最有用的液体。常用于冷却和废物处理
|
|||||||
liquid.slag.description = 各种不同类型的熔融金属混合在一起的液体。可以被分解成其组成矿物,或作为武器喷向敌方单位。
|
liquid.slag.description = 各种不同类型的熔融金属混合在一起的液体。可以被分解成其组成矿物,或作为武器喷向敌方单位。
|
||||||
liquid.oil.description = 用于先进材料生产的液体。可以转换成煤作为燃料,或作为武器喷射和放火。
|
liquid.oil.description = 用于先进材料生产的液体。可以转换成煤作为燃料,或作为武器喷射和放火。
|
||||||
liquid.cryofluid.description = 一种由水和钛制成的惰性、无腐蚀性的液体。具有极高的热容量。广泛用作冷却剂。
|
liquid.cryofluid.description = 一种由水和钛制成的惰性、无腐蚀性的液体。具有极高的热容量。广泛用作冷却剂。
|
||||||
mech.alpha-mech.description = 标准控制机甲。基于尖刀单位,具有升级的装甲和建筑能力。比Dart有更多的伤害输出。
|
mech.alpha-mech.description = 标准控制机甲。基于尖刀单位,具有升级的装甲和建筑能力。比 Dart 有更多的伤害输出。
|
||||||
mech.delta-mech.description = 一种快速,轻便的机甲,一击即退。对结构造成的伤害很小,但可以用弧形闪电武器快速杀死大量敌方单位。
|
mech.delta-mech.description = 一种快速,轻便的机甲,一击即退。对结构造成的伤害很小,但可以用弧形闪电武器快速杀死大量敌方单位。
|
||||||
mech.tau-mech.description = 后勤机甲。治疗友军。可以熄灭火焰并治疗一定范围内的友军。
|
mech.tau-mech.description = 后勤机甲。治疗友军。可以熄灭火焰并治疗一定范围内的友军。
|
||||||
mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达90%的伤害。
|
mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达90%的伤害。
|
||||||
@@ -925,6 +985,7 @@ unit.eruptor.description = 一种用来拆除建筑物的重型机甲。在敌
|
|||||||
unit.wraith.description = 一种快速、一击即退的拦截器机甲。目标是发电机。
|
unit.wraith.description = 一种快速、一击即退的拦截器机甲。目标是发电机。
|
||||||
unit.ghoul.description = 一种地毯式轰炸机。通过敌人的结构进行攻击,并瞄准关键的基础设施。
|
unit.ghoul.description = 一种地毯式轰炸机。通过敌人的结构进行攻击,并瞄准关键的基础设施。
|
||||||
unit.revenant.description = 一种发射导弹的重型飞行机甲。
|
unit.revenant.description = 一种发射导弹的重型飞行机甲。
|
||||||
|
block.message.description = 储存一条信息。用于在盟军之间交流。
|
||||||
block.graphite-press.description = 把大块的煤压缩成纯石墨片。
|
block.graphite-press.description = 把大块的煤压缩成纯石墨片。
|
||||||
block.multi-press.description = 石墨压缩机的升级版。利用水和电力快速高效地处理煤炭。
|
block.multi-press.description = 石墨压缩机的升级版。利用水和电力快速高效地处理煤炭。
|
||||||
block.silicon-smelter.description = 用高纯度的焦炭来加工沙子以生产硅。
|
block.silicon-smelter.description = 用高纯度的焦炭来加工沙子以生产硅。
|
||||||
@@ -976,7 +1037,7 @@ block.mass-driver.description = 终极传送带。收集物品后将它们射向
|
|||||||
block.mechanical-pump.description = 一种输出速度慢但没有功耗的廉价泵。
|
block.mechanical-pump.description = 一种输出速度慢但没有功耗的廉价泵。
|
||||||
block.rotary-pump.description = 先进的水泵。泵送更多液体,但需要动力。
|
block.rotary-pump.description = 先进的水泵。泵送更多液体,但需要动力。
|
||||||
block.thermal-pump.description = 终级水泵。
|
block.thermal-pump.description = 终级水泵。
|
||||||
block.conduit.description = 基本液体传输块。像传送带一样工作,但用于液体。最适用于提取器,泵或其他导管。
|
block.conduit.description = 基本液体传输块。像传送带一样工作,但用于液体。最适用于从泵或其他导管中提取液体。
|
||||||
block.pulse-conduit.description = 高级液体传输块。比标准导管更快地输送液体并储存更多液体。
|
block.pulse-conduit.description = 高级液体传输块。比标准导管更快地输送液体并储存更多液体。
|
||||||
block.liquid-router.description = 接受来自一个方向的液体并将它们平均输出到最多3个其他方向。也可以储存一定量的液体。用于将液体从一个源分成多个目标。
|
block.liquid-router.description = 接受来自一个方向的液体并将它们平均输出到最多3个其他方向。也可以储存一定量的液体。用于将液体从一个源分成多个目标。
|
||||||
block.liquid-tank.description = 存储大量液体。当存在对材料的非恒定需求或作为冷却重要块的安全措施时,将其用于创建缓冲区。
|
block.liquid-tank.description = 存储大量液体。当存在对材料的非恒定需求或作为冷却重要块的安全措施时,将其用于创建缓冲区。
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
Prosta4okua
|
Prosta4okua
|
||||||
|
Felix Corvus
|
||||||
|
Vanguard
|
||||||
Timmeey86
|
Timmeey86
|
||||||
Epowerj
|
Epowerj
|
||||||
Baltazár Radics
|
Baltazár Radics
|
||||||
@@ -75,3 +77,4 @@ Markus G
|
|||||||
itskatt
|
itskatt
|
||||||
Agent-Laevain
|
Agent-Laevain
|
||||||
AzariasB
|
AzariasB
|
||||||
|
amrsoll
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 719 B After Width: | Height: | Size: 725 B |
|
Before Width: | Height: | Size: 682 KiB After Width: | Height: | Size: 684 KiB |
|
Before Width: | Height: | Size: 274 KiB After Width: | Height: | Size: 278 KiB |
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 278 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 579 KiB After Width: | Height: | Size: 578 KiB |
@@ -1,367 +0,0 @@
|
|||||||
{
|
|
||||||
Color: {
|
|
||||||
black: { a: 1, b: 0, g: 0, r: 0 },
|
|
||||||
white: { a: 1, b: 1, g: 1, r: 1 },
|
|
||||||
gray: { a: 1, b: 0.32, g: 0.32, r: 0.32 },
|
|
||||||
lightgray: { a: 1, b: 0.65, g: 0.65, r: 0.65 }
|
|
||||||
orange: { hex: "FFA500" },
|
|
||||||
accent: { hex: "ffd37f" }
|
|
||||||
},
|
|
||||||
TintedDrawable: {
|
|
||||||
dialogDim: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { r: 0, g: 0, b: 0, a: 0.9 }
|
|
||||||
},
|
|
||||||
guideDim: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { r: 0, g: 0, b: 0, a: 0.3 }
|
|
||||||
},
|
|
||||||
invis: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { r: 0, g: 0, b: 0, a: 0 }
|
|
||||||
}
|
|
||||||
loadDim: {
|
|
||||||
name: white,
|
|
||||||
color: { r: 0, g: 0, b: 0, a: 0.8 }
|
|
||||||
},
|
|
||||||
chatfield: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { r: 0, g: 0, b: 0, a: 0.2 }
|
|
||||||
},
|
|
||||||
dark: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { hex: "#000000ff" }
|
|
||||||
},
|
|
||||||
none: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { r: 0, g: 0, b: 0, a: 0 }
|
|
||||||
},
|
|
||||||
flat-trans: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { r: 0.0, g: 0.0, b: 0.0, a: 0.6 }
|
|
||||||
},
|
|
||||||
flat: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { r: 0.0, g: 0.0, b: 0.0, a: 1 }
|
|
||||||
},
|
|
||||||
flat-over: {
|
|
||||||
name: whiteui,
|
|
||||||
color: { hex: "#454545ff" }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ButtonStyle: {
|
|
||||||
default: {
|
|
||||||
down: button-down,
|
|
||||||
up: button,
|
|
||||||
over: button-over,
|
|
||||||
disabled: button-disabled
|
|
||||||
},
|
|
||||||
square: {
|
|
||||||
over: button-square-over,
|
|
||||||
disabled: button-disabled,
|
|
||||||
down: button-square-down,
|
|
||||||
up: button-square
|
|
||||||
},
|
|
||||||
toggle: {
|
|
||||||
checked: button-down,
|
|
||||||
down: button-down,
|
|
||||||
up: button
|
|
||||||
},
|
|
||||||
wave: {
|
|
||||||
up: button-edge-4,
|
|
||||||
over: button-edge-over-4,
|
|
||||||
disabled: button-edge-4
|
|
||||||
},
|
|
||||||
},
|
|
||||||
TextButtonStyle: {
|
|
||||||
default: {
|
|
||||||
over: button-over,
|
|
||||||
disabled: button-disabled,
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
down: button-down,
|
|
||||||
up: button
|
|
||||||
},
|
|
||||||
square: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
over: button-square-over,
|
|
||||||
disabled: button-disabled,
|
|
||||||
down: button-square-down,
|
|
||||||
up: button-square
|
|
||||||
},
|
|
||||||
node: {
|
|
||||||
disabled: button,
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
up: button-over,
|
|
||||||
over: button-down
|
|
||||||
},
|
|
||||||
right: {
|
|
||||||
over: button-right-over,
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
down: button-right-down,
|
|
||||||
up: button-right
|
|
||||||
},
|
|
||||||
wave: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
up: button-edge-4
|
|
||||||
},
|
|
||||||
clear: {
|
|
||||||
over: flat-over,
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
down: flat-over,
|
|
||||||
up: flat
|
|
||||||
},
|
|
||||||
discord: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
up: discord-banner
|
|
||||||
},
|
|
||||||
info: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
up: info-banner
|
|
||||||
},
|
|
||||||
clear-partial: {
|
|
||||||
down: whiteui,
|
|
||||||
up: pane,
|
|
||||||
over: flat-down,
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray
|
|
||||||
},
|
|
||||||
clear-partial-2: {
|
|
||||||
down: flat-over,
|
|
||||||
up: none,
|
|
||||||
over: flat-over,
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray
|
|
||||||
},
|
|
||||||
empty: {
|
|
||||||
font: default
|
|
||||||
},
|
|
||||||
clear-toggle: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
checked: flat-down,
|
|
||||||
down: flat-down,
|
|
||||||
up: flat,
|
|
||||||
over: flat-over,
|
|
||||||
disabled: flat,
|
|
||||||
disabledFontColor: gray
|
|
||||||
},
|
|
||||||
clear-toggle-menu: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
checked: flat-down,
|
|
||||||
down: flat-down,
|
|
||||||
up: clear,
|
|
||||||
over: flat-over,
|
|
||||||
disabled: flat,
|
|
||||||
disabledFontColor: gray
|
|
||||||
}
|
|
||||||
toggle: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
checked: button-down,
|
|
||||||
down: button-down,
|
|
||||||
up: button,
|
|
||||||
over: button-over,
|
|
||||||
disabled: button-disabled,
|
|
||||||
disabledFontColor: gray
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ImageButtonStyle: {
|
|
||||||
default: {
|
|
||||||
down: button-down,
|
|
||||||
up: button,
|
|
||||||
over: button-over,
|
|
||||||
imageDisabledColor: gray,
|
|
||||||
imageUpColor: white,
|
|
||||||
disabled: button-disabled
|
|
||||||
},
|
|
||||||
node: {
|
|
||||||
up: button-over,
|
|
||||||
over: button-down
|
|
||||||
},
|
|
||||||
right: {
|
|
||||||
over: button-right-over,
|
|
||||||
down: button-right-down,
|
|
||||||
up: button-right
|
|
||||||
},
|
|
||||||
empty: {
|
|
||||||
imageDownColor: accent,
|
|
||||||
imageUpColor: white
|
|
||||||
},
|
|
||||||
emptytoggle: {
|
|
||||||
imageCheckedColor: white,
|
|
||||||
imageDownColor: white,
|
|
||||||
imageUpColor: gray
|
|
||||||
},
|
|
||||||
static: {
|
|
||||||
up: button
|
|
||||||
},
|
|
||||||
static-down: {
|
|
||||||
up: button-down
|
|
||||||
},
|
|
||||||
toggle: {
|
|
||||||
checked: button-down,
|
|
||||||
down: button-down,
|
|
||||||
up: button,
|
|
||||||
imageDisabledColor: gray,
|
|
||||||
imageUpColor: white
|
|
||||||
},
|
|
||||||
select: {
|
|
||||||
checked: button-select,
|
|
||||||
up: none
|
|
||||||
},
|
|
||||||
clear: {
|
|
||||||
down: flat-over,
|
|
||||||
up: flat,
|
|
||||||
over: flat-over
|
|
||||||
},
|
|
||||||
clear-full: {
|
|
||||||
down: whiteui,
|
|
||||||
up: pane,
|
|
||||||
over: flat-down
|
|
||||||
},
|
|
||||||
clear-partial: {
|
|
||||||
down: flat-down,
|
|
||||||
up: none,
|
|
||||||
over: flat-over
|
|
||||||
},
|
|
||||||
clear-toggle: {
|
|
||||||
down: flat-down,
|
|
||||||
checked: flat-down,
|
|
||||||
up: flat,
|
|
||||||
over: flat-over
|
|
||||||
},
|
|
||||||
clear-trans: {
|
|
||||||
down: flat-down,
|
|
||||||
up: flat-trans,
|
|
||||||
over: flat-over
|
|
||||||
},
|
|
||||||
clear-toggle-trans: {
|
|
||||||
down: flat-down,
|
|
||||||
checked: flat-down,
|
|
||||||
up: flat-trans,
|
|
||||||
over: flat-over
|
|
||||||
},
|
|
||||||
clear-toggle-partial: {
|
|
||||||
down: flat-down,
|
|
||||||
checked: flat-down,
|
|
||||||
up: none,
|
|
||||||
over: flat-over
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ScrollPaneStyle: {
|
|
||||||
default: {
|
|
||||||
vScroll: scroll,
|
|
||||||
vScrollKnob: scroll-knob-vertical-black
|
|
||||||
},
|
|
||||||
horizontal: {
|
|
||||||
vScroll: scroll,
|
|
||||||
vScrollKnob: scroll-knob-vertical-black,
|
|
||||||
hScroll: scroll-horizontal,
|
|
||||||
hScrollKnob: scroll-knob-horizontal-black
|
|
||||||
},
|
|
||||||
},
|
|
||||||
WindowStyle: {
|
|
||||||
default: {
|
|
||||||
titleFont: default,
|
|
||||||
titleFontColor: accent
|
|
||||||
},
|
|
||||||
dialog: {
|
|
||||||
stageBackground: dialogDim,
|
|
||||||
titleFont: default,
|
|
||||||
background: window-empty,
|
|
||||||
titleFontColor: accent
|
|
||||||
},
|
|
||||||
fulldialog: {
|
|
||||||
stageBackground: dark,
|
|
||||||
titleFont: default,
|
|
||||||
background: window-empty,
|
|
||||||
titleFontColor: accent
|
|
||||||
}
|
|
||||||
},
|
|
||||||
KeybindDialogStyle: {
|
|
||||||
default: {
|
|
||||||
keyColor: accent,
|
|
||||||
keyNameColor: white,
|
|
||||||
controllerColor: lightgray
|
|
||||||
},
|
|
||||||
},
|
|
||||||
SliderStyle: {
|
|
||||||
default-horizontal: {
|
|
||||||
background: slider,
|
|
||||||
knob: slider-knob,
|
|
||||||
knobOver: slider-knob-over,
|
|
||||||
knobDown: slider-knob-down
|
|
||||||
},
|
|
||||||
default-vertical: {
|
|
||||||
background: slider-vertical,
|
|
||||||
knob: slider-knob,
|
|
||||||
knobOver: slider-knob-over,
|
|
||||||
knobDown: slider-knob-down
|
|
||||||
}
|
|
||||||
},
|
|
||||||
LabelStyle: {
|
|
||||||
default: {
|
|
||||||
font: default,
|
|
||||||
fontColor: white
|
|
||||||
},
|
|
||||||
outline: {
|
|
||||||
font: outline,
|
|
||||||
fontColor: white
|
|
||||||
}
|
|
||||||
},
|
|
||||||
TextFieldStyle: {
|
|
||||||
default: {
|
|
||||||
font: chat,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
disabledBackground: underline-disabled,
|
|
||||||
selection: selection,
|
|
||||||
background: underline,
|
|
||||||
invalidBackground: underline-red,
|
|
||||||
cursor: cursor,
|
|
||||||
messageFont: default,
|
|
||||||
messageFontColor: gray
|
|
||||||
}
|
|
||||||
textarea: {
|
|
||||||
font: chat,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
selection: selection,
|
|
||||||
background: underline,
|
|
||||||
cursor: cursor,
|
|
||||||
messageFont: default,
|
|
||||||
messageFontColor: gray
|
|
||||||
}
|
|
||||||
},
|
|
||||||
CheckBoxStyle: {
|
|
||||||
default: {
|
|
||||||
checkboxOn: check-on,
|
|
||||||
checkboxOff: check-off,
|
|
||||||
checkboxOnOver: check-on-over,
|
|
||||||
checkboxOver: check-over,
|
|
||||||
checkboxOnDisabled: check-on-disabled,
|
|
||||||
checkboxOffDisabled: check-disabled,
|
|
||||||
font: default,
|
|
||||||
fontColor: white,
|
|
||||||
disabledFontColor: gray,
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -13,6 +13,7 @@ import io.anuke.mindustry.game.EventType.*;
|
|||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import io.anuke.mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.maps.*;
|
import io.anuke.mindustry.maps.*;
|
||||||
|
import io.anuke.mindustry.net.Net;
|
||||||
|
|
||||||
import static io.anuke.arc.Core.*;
|
import static io.anuke.arc.Core.*;
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
@@ -39,7 +40,9 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
batch = new SpriteBatch();
|
batch = new SpriteBatch();
|
||||||
assets = new AssetManager();
|
assets = new AssetManager();
|
||||||
assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader());
|
assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader());
|
||||||
|
assets.load("sprites/error.png", Texture.class);
|
||||||
atlas = TextureAtlas.blankAtlas();
|
atlas = TextureAtlas.blankAtlas();
|
||||||
|
Vars.net = new Net(platform.getNet());
|
||||||
|
|
||||||
UI.loadSystemCursors();
|
UI.loadSystemCursors();
|
||||||
|
|
||||||
@@ -47,7 +50,9 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
|
|
||||||
UI.loadDefaultFont();
|
UI.loadDefaultFont();
|
||||||
|
|
||||||
assets.load(new AssetDescriptor<>("sprites/sprites.atlas", TextureAtlas.class)).loaded = t -> atlas = (TextureAtlas)t;
|
assets.load(new AssetDescriptor<>("sprites/sprites.atlas", TextureAtlas.class)).loaded = t -> {
|
||||||
|
atlas = (TextureAtlas)t;
|
||||||
|
};
|
||||||
|
|
||||||
assets.loadRun("maps", Map.class, () -> maps.loadPreviews());
|
assets.loadRun("maps", Map.class, () -> maps.loadPreviews());
|
||||||
|
|
||||||
@@ -84,10 +89,12 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resize(int width, int height){
|
public void resize(int width, int height){
|
||||||
super.resize(width, height);
|
if(assets == null) return;
|
||||||
|
|
||||||
if(!assets.isFinished()){
|
if(!assets.isFinished()){
|
||||||
Draw.proj().setOrtho(0, 0, width, height);
|
Draw.proj().setOrtho(0, 0, width, height);
|
||||||
|
}else{
|
||||||
|
super.resize(width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,6 +107,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
for(ApplicationListener listener : modules){
|
for(ApplicationListener listener : modules){
|
||||||
listener.init();
|
listener.init();
|
||||||
}
|
}
|
||||||
|
super.resize(graphics.getWidth(), graphics.getHeight());
|
||||||
finished = true;
|
finished = true;
|
||||||
Events.fire(new ClientLoadEvent());
|
Events.fire(new ClientLoadEvent());
|
||||||
}
|
}
|
||||||
@@ -149,15 +157,15 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
Core.graphics.clear(Pal.darkerGray);
|
Core.graphics.clear(Pal.darkerGray);
|
||||||
Draw.proj().setOrtho(0, 0, Core.graphics.getWidth(), Core.graphics.getHeight());
|
Draw.proj().setOrtho(0, 0, Core.graphics.getWidth(), Core.graphics.getHeight());
|
||||||
|
|
||||||
float height = UnitScl.dp.scl(50f);
|
float height = Scl.scl(50f);
|
||||||
|
|
||||||
Draw.color(Color.BLACK);
|
Draw.color(Color.black);
|
||||||
Fill.poly(graphics.getWidth()/2f, graphics.getHeight()/2f, 6, Mathf.dst(graphics.getWidth()/2f, graphics.getHeight()/2f) * smoothProgress);
|
Fill.poly(graphics.getWidth()/2f, graphics.getHeight()/2f, 6, Mathf.dst(graphics.getWidth()/2f, graphics.getHeight()/2f) * smoothProgress);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
float w = graphics.getWidth()*0.6f;
|
float w = graphics.getWidth()*0.6f;
|
||||||
|
|
||||||
Draw.color(Color.BLACK);
|
Draw.color(Color.black);
|
||||||
Fill.rect(graphics.getWidth()/2f, graphics.getHeight()/2f, w, height);
|
Fill.rect(graphics.getWidth()/2f, graphics.getHeight()/2f, w, height);
|
||||||
|
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
@@ -169,13 +177,13 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
|
|
||||||
if(assets.isLoaded("outline")){
|
if(assets.isLoaded("outline")){
|
||||||
BitmapFont font = assets.get("outline");
|
BitmapFont font = assets.get("outline");
|
||||||
font.draw((int)(assets.getProgress() * 100) + "%", graphics.getWidth() / 2f, graphics.getHeight() / 2f + UnitScl.dp.scl(10f), Align.center);
|
font.draw((int)(assets.getProgress() * 100) + "%", graphics.getWidth() / 2f, graphics.getHeight() / 2f + Scl.scl(10f), Align.center);
|
||||||
font.draw(bundle.get("loading", "").replace("[accent]", ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f + height / 2f + UnitScl.dp.scl(20), Align.center);
|
font.draw(bundle.get("loading", "").replace("[accent]", ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f + height / 2f + Scl.scl(20), Align.center);
|
||||||
|
|
||||||
if(assets.getCurrentLoading() != null){
|
if(assets.getCurrentLoading() != null){
|
||||||
String name = assets.getCurrentLoading().fileName.toLowerCase();
|
String name = assets.getCurrentLoading().fileName.toLowerCase();
|
||||||
String key = name.contains("content") ? "content" : name.contains("msav") || name.contains("maps") ? "map" : name.contains("ogg") || name.contains("mp3") ? "sound" : name.contains("png") ? "image" : "system";
|
String key = name.contains("content") ? "content" : name.contains("msav") || name.contains("maps") ? "map" : name.contains("ogg") || name.contains("mp3") ? "sound" : name.contains("png") ? "image" : "system";
|
||||||
font.draw(bundle.get("load." + key, ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f - height / 2f - UnitScl.dp.scl(10f), Align.center);
|
font.draw(bundle.get("load." + key, ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f - height / 2f - Scl.scl(10f), Align.center);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Draw.flush();
|
Draw.flush();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package io.anuke.mindustry;
|
|||||||
import io.anuke.arc.Application.*;
|
import io.anuke.arc.Application.*;
|
||||||
import io.anuke.arc.*;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.assets.*;
|
import io.anuke.arc.assets.*;
|
||||||
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.files.*;
|
import io.anuke.arc.files.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
import io.anuke.arc.scene.ui.layout.*;
|
||||||
@@ -10,9 +11,7 @@ import io.anuke.arc.util.*;
|
|||||||
import io.anuke.mindustry.ai.*;
|
import io.anuke.mindustry.ai.*;
|
||||||
import io.anuke.mindustry.core.*;
|
import io.anuke.mindustry.core.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
|
||||||
import io.anuke.mindustry.entities.effect.*;
|
import io.anuke.mindustry.entities.effect.*;
|
||||||
import io.anuke.mindustry.entities.impl.*;
|
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
@@ -20,6 +19,7 @@ import io.anuke.mindustry.gen.*;
|
|||||||
import io.anuke.mindustry.input.*;
|
import io.anuke.mindustry.input.*;
|
||||||
import io.anuke.mindustry.maps.*;
|
import io.anuke.mindustry.maps.*;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
|
import io.anuke.mindustry.plugin.*;
|
||||||
import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
|
import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
|
||||||
|
|
||||||
import java.nio.charset.*;
|
import java.nio.charset.*;
|
||||||
@@ -43,6 +43,8 @@ public class Vars implements Loadable{
|
|||||||
public static final String discordURL = "https://discord.gg/mindustry";
|
public static final String discordURL = "https://discord.gg/mindustry";
|
||||||
/** URL for sending crash reports to */
|
/** URL for sending crash reports to */
|
||||||
public static final String crashReportURL = "http://mins.us.to/report";
|
public static final String crashReportURL = "http://mins.us.to/report";
|
||||||
|
/** list of built-in servers.*/
|
||||||
|
public static final Array<String> defaultServers = Array.with(/*"mins.us.to"*/);
|
||||||
/** maximum distance between mine and core that supports automatic transferring */
|
/** maximum distance between mine and core that supports automatic transferring */
|
||||||
public static final float mineTransferRange = 220f;
|
public static final float mineTransferRange = 220f;
|
||||||
/** team of the player by default */
|
/** team of the player by default */
|
||||||
@@ -59,14 +61,6 @@ public class Vars implements Loadable{
|
|||||||
public static final float itemSize = 5f;
|
public static final float itemSize = 5f;
|
||||||
/** extra padding around the world; units outside this bound will begin to self-destruct. */
|
/** extra padding around the world; units outside this bound will begin to self-destruct. */
|
||||||
public static final float worldBounds = 100f;
|
public static final float worldBounds = 100f;
|
||||||
/** default size of UI icons.*/
|
|
||||||
public static final int iconsize = 48;
|
|
||||||
/** size of UI icons (small)*/
|
|
||||||
public static final int iconsizesmall = 32;
|
|
||||||
/** size of UI icons (medium)*/
|
|
||||||
public static final int iconsizemed = 30;
|
|
||||||
/** size of UI icons (medium)*/
|
|
||||||
public static final int iconsizetiny = 16;
|
|
||||||
/** units outside of this bound will simply die instantly */
|
/** units outside of this bound will simply die instantly */
|
||||||
public static final float finalWorldBounds = worldBounds + 500;
|
public static final float finalWorldBounds = worldBounds + 500;
|
||||||
/** ticks spent out of bound until self destruct. */
|
/** ticks spent out of bound until self destruct. */
|
||||||
@@ -112,6 +106,8 @@ public class Vars implements Loadable{
|
|||||||
public static boolean android;
|
public static boolean android;
|
||||||
/** whether the game is running on a headless server */
|
/** whether the game is running on a headless server */
|
||||||
public static boolean headless;
|
public static boolean headless;
|
||||||
|
/** whether steam is enabled for this game */
|
||||||
|
public static boolean steam;
|
||||||
/** application data directory, equivalent to {@link io.anuke.arc.Settings#getDataDirectory()} */
|
/** application data directory, equivalent to {@link io.anuke.arc.Settings#getDataDirectory()} */
|
||||||
public static FileHandle dataDirectory;
|
public static FileHandle dataDirectory;
|
||||||
/** data subdirectory used for screenshots */
|
/** data subdirectory used for screenshots */
|
||||||
@@ -126,8 +122,6 @@ public class Vars implements Loadable{
|
|||||||
public static FileHandle saveDirectory;
|
public static FileHandle saveDirectory;
|
||||||
/** data subdirectory used for plugins */
|
/** data subdirectory used for plugins */
|
||||||
public static FileHandle pluginDirectory;
|
public static FileHandle pluginDirectory;
|
||||||
/** old map file extension, for conversion */
|
|
||||||
public static final String oldMapExtension = "mmap";
|
|
||||||
/** map file extension */
|
/** map file extension */
|
||||||
public static final String mapExtension = "msav";
|
public static final String mapExtension = "msav";
|
||||||
/** save file extension */
|
/** save file extension */
|
||||||
@@ -136,13 +130,15 @@ public class Vars implements Loadable{
|
|||||||
/** list of all locales that can be switched to */
|
/** list of all locales that can be switched to */
|
||||||
public static Locale[] locales;
|
public static Locale[] locales;
|
||||||
|
|
||||||
|
public static Net net;
|
||||||
public static ContentLoader content;
|
public static ContentLoader content;
|
||||||
public static GameState state;
|
public static GameState state;
|
||||||
public static GlobalData data;
|
public static GlobalData data;
|
||||||
public static EntityCollisions collisions;
|
public static EntityCollisions collisions;
|
||||||
public static DefaultWaves defaultWaves;
|
public static DefaultWaves defaultWaves;
|
||||||
public static LoopControl loops;
|
public static LoopControl loops;
|
||||||
public static Platform platform;
|
public static Platform platform = new Platform(){};
|
||||||
|
public static Plugins plugins;
|
||||||
|
|
||||||
public static World world;
|
public static World world;
|
||||||
public static Maps maps;
|
public static Maps maps;
|
||||||
@@ -168,7 +164,6 @@ public class Vars implements Loadable{
|
|||||||
public static EntityGroup<Fire> fireGroup;
|
public static EntityGroup<Fire> fireGroup;
|
||||||
public static EntityGroup<BaseUnit>[] unitGroups;
|
public static EntityGroup<BaseUnit>[] unitGroups;
|
||||||
|
|
||||||
/** all local players, currently only has one player. may be used for local co-op in the future */
|
|
||||||
public static Player player;
|
public static Player player;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -226,7 +221,7 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
for(EntityGroup<?> group : entities.all()){
|
for(EntityGroup<?> group : entities.all()){
|
||||||
group.setRemoveListener(entity -> {
|
group.setRemoveListener(entity -> {
|
||||||
if(entity instanceof SyncTrait && Net.client()){
|
if(entity instanceof SyncTrait && net.client()){
|
||||||
netClient.addRemovedEntity((entity).getID());
|
netClient.addRemovedEntity((entity).getID());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -252,11 +247,16 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
public static void loadSettings(){
|
public static void loadSettings(){
|
||||||
Core.settings.setAppName(appName);
|
Core.settings.setAppName(appName);
|
||||||
|
|
||||||
|
if(steam){
|
||||||
|
Core.settings.setDataDirectory(Core.files.local("saves/"));
|
||||||
|
}
|
||||||
|
|
||||||
Core.settings.defaults("locale", "default");
|
Core.settings.defaults("locale", "default");
|
||||||
Core.keybinds.setDefaults(Binding.values());
|
Core.keybinds.setDefaults(Binding.values());
|
||||||
Core.settings.load();
|
Core.settings.load();
|
||||||
|
|
||||||
UnitScl.dp.setProduct(settings.getInt("uiscale", 100) / 100f);
|
Scl.setProduct(settings.getInt("uiscale", 100) / 100f);
|
||||||
|
|
||||||
if(!loadLocales) return;
|
if(!loadLocales) return;
|
||||||
|
|
||||||
@@ -268,6 +268,7 @@ public class Vars implements Loadable{
|
|||||||
Core.bundle = I18NBundle.createBundle(handle, locale);
|
Core.bundle = I18NBundle.createBundle(handle, locale);
|
||||||
|
|
||||||
Log.info("NOTE: external translation bundle has been loaded.");
|
Log.info("NOTE: external translation bundle has been loaded.");
|
||||||
|
|
||||||
if(!headless){
|
if(!headless){
|
||||||
Time.run(10f, () -> ui.showInfo("Note: You have successfully loaded an external translation bundle."));
|
Time.run(10f, () -> ui.showInfo("Note: You have successfully loaded an external translation bundle."));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,14 +242,13 @@ public class BlockIndexer{
|
|||||||
int quadrantY = tile.y / quadrantSize;
|
int quadrantY = tile.y / quadrantSize;
|
||||||
itemSet.clear();
|
itemSet.clear();
|
||||||
|
|
||||||
Tile rounded = world.tile(Mathf.clamp(quadrantX * quadrantSize + quadrantSize / 2, 0, world.width() - 1),
|
Tile rounded = world.tile(Mathf.clamp(quadrantX * quadrantSize + quadrantSize / 2, 0, world.width() - 1), Mathf.clamp(quadrantY * quadrantSize + quadrantSize / 2, 0, world.height() - 1));
|
||||||
Mathf.clamp(quadrantY * quadrantSize + quadrantSize / 2, 0, world.height() - 1));
|
|
||||||
|
|
||||||
//find all items that this quadrant contains
|
//find all items that this quadrant contains
|
||||||
for(int x = quadrantX * quadrantSize; x < world.width() && x < (quadrantX + 1) * quadrantSize; x++){
|
for(int x = Math.max(0, rounded.x - quadrantSize / 2); x < rounded.x + quadrantSize / 2 && x < world.width(); x++){
|
||||||
for(int y = quadrantY * quadrantSize; y < world.height() && y < (quadrantY + 1) * quadrantSize; y++){
|
for(int y = Math.max(0, rounded.y - quadrantSize / 2); y < rounded.y + quadrantSize / 2 && y < world.height(); y++){
|
||||||
Tile result = world.tile(x, y);
|
Tile result = world.tile(x, y);
|
||||||
if(result == null || result.drop() == null || !scanOres.contains(result.drop())) continue;
|
if(result == null || result.drop() == null || !scanOres.contains(result.drop()) || result.block() != Blocks.air) continue;
|
||||||
|
|
||||||
itemSet.add(result.drop());
|
itemSet.add(result.drop());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,165 +1,261 @@
|
|||||||
package io.anuke.mindustry.ai;
|
package io.anuke.mindustry.ai;
|
||||||
|
|
||||||
import io.anuke.arc.Events;
|
import io.anuke.annotations.Annotations.*;
|
||||||
import io.anuke.arc.collection.IntArray;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.collection.IntQueue;
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.math.geom.Geometry;
|
import io.anuke.arc.function.*;
|
||||||
import io.anuke.arc.math.geom.Point2;
|
import io.anuke.arc.math.geom.*;
|
||||||
import io.anuke.arc.util.Structs;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.Time;
|
import io.anuke.arc.util.async.*;
|
||||||
import io.anuke.mindustry.game.EventType.TileChangeEvent;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.game.Teams.TeamData;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.world.meta.*;
|
||||||
import io.anuke.mindustry.world.Pos;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
|
||||||
import io.anuke.mindustry.world.meta.BlockFlag;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class Pathfinder{
|
public class Pathfinder implements Runnable{
|
||||||
private static final long maxUpdate = Time.millisToNanos(4);
|
private static final long maxUpdate = Time.millisToNanos(4);
|
||||||
private PathData[] paths;
|
private static final int updateFPS = 60;
|
||||||
private IntArray blocked = new IntArray();
|
private static final int updateInterval = 1000 / updateFPS;
|
||||||
|
private static final int impassable = -1;
|
||||||
|
|
||||||
|
/** tile data, see PathTileStruct */
|
||||||
|
private int[][] tiles;
|
||||||
|
/** unordered array of path data for iteration only. DO NOT iterate ot access this in the main thread.*/
|
||||||
|
private Array<PathData> list = new Array<>();
|
||||||
|
/** Maps teams + flags to a valid path to get to that flag for that team. */
|
||||||
|
private PathData[][] pathMap = new PathData[Team.all.length][PathTarget.all.length];
|
||||||
|
/** Grid map of created path data that should not be queued again. */
|
||||||
|
private GridBits created = new GridBits(Team.all.length, PathTarget.all.length);
|
||||||
|
/** handles task scheduling on the update thread. */
|
||||||
|
private TaskQueue queue = new TaskQueue();
|
||||||
|
/** current pathfinding thread */
|
||||||
|
private @Nullable Thread thread;
|
||||||
|
|
||||||
public Pathfinder(){
|
public Pathfinder(){
|
||||||
Events.on(WorldLoadEvent.class, event -> clear());
|
Events.on(WorldLoadEvent.class, event -> {
|
||||||
Events.on(TileChangeEvent.class, event -> {
|
stop();
|
||||||
if(Net.client()) return;
|
|
||||||
|
|
||||||
for(Team team : Team.all){
|
//reset and update internal tile array
|
||||||
TeamData data = state.teams.get(team);
|
tiles = new int[world.width()][world.height()];
|
||||||
if(state.teams.isActive(team) && data.team != event.tile.getTeam()){
|
pathMap = new PathData[Team.all.length][PathTarget.all.length];
|
||||||
update(event.tile, data.team);
|
created = new GridBits(Team.all.length, PathTarget.all.length);
|
||||||
|
list = new Array<>();
|
||||||
|
|
||||||
|
for(int x = 0; x < world.width(); x++){
|
||||||
|
for(int y = 0; y < world.height(); y++){
|
||||||
|
tiles[x][y] = packTile(world.rawTile(x, y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
update(event.tile, event.tile.getTeam());
|
//special preset which may help speed things up; this is optional
|
||||||
|
preloadPath(waveTeam, PathTarget.enemyCores);
|
||||||
|
|
||||||
|
start();
|
||||||
|
});
|
||||||
|
|
||||||
|
Events.on(ResetEvent.class, event -> stop());
|
||||||
|
|
||||||
|
Events.on(TileChangeEvent.class, event -> updateTile(event.tile));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Packs a tile into its internal representation. */
|
||||||
|
private int packTile(Tile tile){
|
||||||
|
return PathTile.get(tile.cost, tile.getTeamID(), (byte)0, (!tile.solid() || tile.breakable()) && tile.floor().drownTime <= 0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Starts or restarts the pathfinding thread. */
|
||||||
|
private void start(){
|
||||||
|
stop();
|
||||||
|
thread = Threads.daemon(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Stops the pathfinding thread. */
|
||||||
|
private void stop(){
|
||||||
|
if(thread != null){
|
||||||
|
thread.interrupt();
|
||||||
|
thread = null;
|
||||||
|
}
|
||||||
|
queue.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Update a tile in the internal pathfinding grid. Causes a completely pathfinding reclaculation. */
|
||||||
|
public void updateTile(Tile tile){
|
||||||
|
if(net.client()) return;
|
||||||
|
|
||||||
|
int packed = packTile(tile);
|
||||||
|
int x = tile.x, y = tile.y;
|
||||||
|
tiles[x][y] = packed;
|
||||||
|
|
||||||
|
//can't iterate through array so use the map, which should not lead to problems
|
||||||
|
for(PathData[] arr : pathMap){
|
||||||
|
for(PathData path : arr){
|
||||||
|
if(path != null){
|
||||||
|
synchronized(path.targets){
|
||||||
|
path.targets.clear();
|
||||||
|
path.target.getTargets(path.team, path.targets);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
queue.post(() -> {
|
||||||
|
for(PathData data : list){
|
||||||
|
updateTargets(data, x, y);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateSolid(Tile tile){
|
/** Thread implementation. */
|
||||||
update(tile, tile.getTeam());
|
@Override
|
||||||
}
|
public void run(){
|
||||||
|
while(true){
|
||||||
|
if(net.client()) return;
|
||||||
|
|
||||||
public void update(){
|
queue.run();
|
||||||
if(Net.client() || paths == null) return;
|
|
||||||
|
|
||||||
for(Team team : Team.all){
|
//total update time no longer than maxUpdate
|
||||||
if(state.teams.isActive(team)){
|
for(PathData data : list){
|
||||||
updateFrontier(team, maxUpdate);
|
updateFrontier(data, maxUpdate / list.size);
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
Thread.sleep(updateInterval);
|
||||||
|
}catch(InterruptedException e){
|
||||||
|
//stop looping when interrupted externally
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tile getTargetTile(Team team, Tile tile){
|
/** Gets next tile to travel to. Main thread only. */
|
||||||
float[][] values = paths[team.ordinal()].weights;
|
public Tile getTargetTile(Tile tile, Team team, PathTarget target){
|
||||||
|
if(tile == null) return null;
|
||||||
|
|
||||||
if(values == null || tile == null) return tile;
|
PathData data = pathMap[team.ordinal()][target.ordinal()];
|
||||||
|
|
||||||
float value = values[tile.x][tile.y];
|
if(data == null){
|
||||||
|
//if this combination is not found, create it on request
|
||||||
|
if(!created.get(team.ordinal(), target.ordinal())){
|
||||||
|
created.set(team.ordinal(), target.ordinal());
|
||||||
|
//grab targets since this is run on main thread
|
||||||
|
IntArray targets = target.getTargets(team, new IntArray());
|
||||||
|
queue.post(() -> createPath(team, target, targets));
|
||||||
|
}
|
||||||
|
return tile;
|
||||||
|
}
|
||||||
|
|
||||||
Tile target = null;
|
int[][] values = data.weights;
|
||||||
float tl = 0f;
|
int value = values[tile.x][tile.y];
|
||||||
|
|
||||||
|
Tile current = null;
|
||||||
|
int tl = 0;
|
||||||
for(Point2 point : Geometry.d8){
|
for(Point2 point : Geometry.d8){
|
||||||
int dx = tile.x + point.x, dy = tile.y + point.y;
|
int dx = tile.x + point.x, dy = tile.y + point.y;
|
||||||
|
|
||||||
Tile other = world.tile(dx, dy);
|
Tile other = world.tile(dx, dy);
|
||||||
if(other == null) continue;
|
if(other == null) continue;
|
||||||
|
|
||||||
if(values[dx][dy] < value && (target == null || values[dx][dy] < tl) &&
|
if(values[dx][dy] < value && (current == null || values[dx][dy] < tl) && !other.solid() && other.floor().drownTime <= 0 &&
|
||||||
!other.solid() && other.floor().drownTime <= 0 &&
|
|
||||||
!(point.x != 0 && point.y != 0 && (world.solid(tile.x + point.x, tile.y) || world.solid(tile.x, tile.y + point.y)))){ //diagonal corner trap
|
!(point.x != 0 && point.y != 0 && (world.solid(tile.x + point.x, tile.y) || world.solid(tile.x, tile.y + point.y)))){ //diagonal corner trap
|
||||||
target = other;
|
current = other;
|
||||||
tl = values[dx][dy];
|
tl = values[dx][dy];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(target == null || tl == Float.MAX_VALUE) return tile;
|
if(current == null || tl == impassable) return tile;
|
||||||
|
|
||||||
return target;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getValueforTeam(Team team, int x, int y){
|
/** @return whether a tile can be passed through by this team. Pathfinding thread only.*/
|
||||||
return paths == null || paths[team.ordinal()].weights == null || team.ordinal() >= paths.length ? 0 : Structs.inBounds(x, y, paths[team.ordinal()].weights) ? paths[team.ordinal()].weights[x][y] : 0;
|
private boolean passable(int x, int y, Team team){
|
||||||
}
|
int tile = tiles[x][y];
|
||||||
|
return PathTile.passable(tile) || (PathTile.team(tile) != team.ordinal() && PathTile.team(tile) != Team.derelict.ordinal());
|
||||||
private boolean passable(Tile tile, Team team){
|
|
||||||
return (!tile.solid()) || (tile.breakable() && (tile.getTeam() != team));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears the frontier, increments the search and sets up all flow sources.
|
* Clears the frontier, increments the search and sets up all flow sources.
|
||||||
* This only occurs for active teams.
|
* This only occurs for active teams.
|
||||||
*/
|
*/
|
||||||
private void update(Tile tile, Team team){
|
private void updateTargets(PathData path, int x, int y){
|
||||||
//make sure team exists
|
if(!Structs.inBounds(x, y, path.weights)) return;
|
||||||
if(paths != null && paths[team.ordinal()] != null && paths[team.ordinal()].weights != null && Structs.inBounds(tile.x, tile.y, paths[team.ordinal()].weights)){
|
|
||||||
PathData path = paths[team.ordinal()];
|
|
||||||
|
|
||||||
if(path.weights[tile.x][tile.y] <= 0.1f){
|
if(path.weights[x][y] == 0){
|
||||||
//this was a previous target
|
//this was a previous target
|
||||||
path.frontier.clear();
|
|
||||||
}else if(!path.frontier.isEmpty()){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//impassable tiles have a weight of float.max
|
|
||||||
if(!passable(tile, team)){
|
|
||||||
path.weights[tile.x][tile.y] = Float.MAX_VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//increment search, clear frontier
|
|
||||||
path.search++;
|
|
||||||
path.frontier.clear();
|
path.frontier.clear();
|
||||||
path.lastSearchTime = Time.millis();
|
}else if(!path.frontier.isEmpty()){
|
||||||
|
//skip if this path is processing
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//add all targets to the frontier
|
//assign impassability to the tile
|
||||||
for(Tile other : indexer.getEnemy(team, BlockFlag.target)){
|
if(!passable(x, y, path.team)){
|
||||||
path.weights[other.x][other.y] = 0;
|
path.weights[x][y] = impassable;
|
||||||
path.searches[other.x][other.y] = (short)path.search;
|
}
|
||||||
path.frontier.addFirst(other.pos());
|
|
||||||
|
//increment search, clear frontier
|
||||||
|
path.search++;
|
||||||
|
path.frontier.clear();
|
||||||
|
|
||||||
|
synchronized(path.targets){
|
||||||
|
//add targets
|
||||||
|
for(int i = 0; i < path.targets.size; i++){
|
||||||
|
int pos = path.targets.get(i);
|
||||||
|
int tx = Pos.x(pos), ty = Pos.y(pos);
|
||||||
|
|
||||||
|
path.weights[tx][ty] = 0;
|
||||||
|
path.searches[tx][ty] = (short)path.search;
|
||||||
|
path.frontier.addFirst(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createFor(Team team){
|
private void preloadPath(Team team, PathTarget target){
|
||||||
PathData path = new PathData();
|
updateFrontier(createPath(team, target, target.getTargets(team, new IntArray())), -1);
|
||||||
path.weights = new float[world.width()][world.height()];
|
}
|
||||||
path.searches = new short[world.width()][world.height()];
|
|
||||||
path.search++;
|
|
||||||
path.frontier.ensureCapacity((world.width() + world.height()) * 3);
|
|
||||||
|
|
||||||
paths[team.ordinal()] = path;
|
/** Created a new flowfield that aims to get to a certain target for a certain team.
|
||||||
|
* Pathfinding thread only. */
|
||||||
|
private PathData createPath(Team team, PathTarget target, IntArray targets){
|
||||||
|
PathData path = new PathData(team, target, world.width(), world.height());
|
||||||
|
|
||||||
|
list.add(path);
|
||||||
|
pathMap[team.ordinal()][target.ordinal()] = path;
|
||||||
|
|
||||||
|
//grab targets from passed array
|
||||||
|
synchronized(path.targets){
|
||||||
|
path.targets.clear();
|
||||||
|
path.targets.addAll(targets);
|
||||||
|
}
|
||||||
|
|
||||||
|
//fill with impassables by default
|
||||||
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.tile(x, y);
|
path.weights[x][y] = impassable;
|
||||||
|
|
||||||
if(state.teams.areEnemies(tile.getTeam(), team)
|
|
||||||
&& tile.block().flags.contains(BlockFlag.target)){
|
|
||||||
path.frontier.addFirst(tile.pos());
|
|
||||||
path.weights[x][y] = 0;
|
|
||||||
path.searches[x][y] = (short)path.search;
|
|
||||||
}else{
|
|
||||||
path.weights[x][y] = Float.MAX_VALUE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateFrontier(team, -1);
|
//add targets
|
||||||
|
for(int i = 0; i < path.targets.size; i++){
|
||||||
|
int pos = path.targets.get(i);
|
||||||
|
path.weights[Pos.x(pos)][Pos.y(pos)] = 0;
|
||||||
|
path.frontier.addFirst(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateFrontier(Team team, long nsToRun){
|
/** Update the frontier for a path. Pathfinding thread only. */
|
||||||
PathData path = paths[team.ordinal()];
|
private void updateFrontier(PathData path, long nsToRun){
|
||||||
|
|
||||||
long start = Time.nanos();
|
long start = Time.nanos();
|
||||||
|
|
||||||
while(path.frontier.size > 0 && (nsToRun < 0 || Time.timeSinceNanos(start) <= nsToRun)){
|
while(path.frontier.size > 0 && (nsToRun < 0 || Time.timeSinceNanos(start) <= nsToRun)){
|
||||||
Tile tile = world.tile(path.frontier.removeLast());
|
Tile tile = world.tile(path.frontier.removeLast());
|
||||||
if(tile == null || path.weights == null) return; //something went horribly wrong, bail
|
if(tile == null || path.weights == null) return; //something went horribly wrong, bail
|
||||||
float cost = path.weights[tile.x][tile.y];
|
int cost = path.weights[tile.x][tile.y];
|
||||||
|
|
||||||
//pathfinding overflowed for some reason, time to bail. the next block update will handle this, hopefully
|
//pathfinding overflowed for some reason, time to bail. the next block update will handle this, hopefully
|
||||||
if(path.frontier.size >= world.width() * world.height()){
|
if(path.frontier.size >= world.width() * world.height()){
|
||||||
@@ -167,14 +263,13 @@ public class Pathfinder{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cost < Float.MAX_VALUE){
|
if(cost != impassable){
|
||||||
for(Point2 point : Geometry.d4){
|
for(Point2 point : Geometry.d4){
|
||||||
|
|
||||||
int dx = tile.x + point.x, dy = tile.y + point.y;
|
int dx = tile.x + point.x, dy = tile.y + point.y;
|
||||||
Tile other = world.tile(dx, dy);
|
Tile other = world.tile(dx, dy);
|
||||||
|
|
||||||
if(other != null && (path.weights[dx][dy] > cost + other.cost || path.searches[dx][dy] < path.search)
|
if(other != null && (path.weights[dx][dy] > cost + other.cost || path.searches[dx][dy] < path.search) && passable(dx, dy, path.team)){
|
||||||
&& passable(other, team)){
|
|
||||||
if(other.cost < 0) throw new IllegalArgumentException("Tile cost cannot be negative! " + other);
|
if(other.cost < 0) throw new IllegalArgumentException("Tile cost cannot be negative! " + other);
|
||||||
path.frontier.addFirst(Pos.get(dx, dy));
|
path.frontier.addFirst(Pos.get(dx, dy));
|
||||||
path.weights[dx][dy] = cost + other.cost;
|
path.weights[dx][dy] = cost + other.cost;
|
||||||
@@ -185,27 +280,78 @@ public class Pathfinder{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clear(){
|
/** A path target defines a set of targets for a path.*/
|
||||||
Time.mark();
|
public enum PathTarget{
|
||||||
|
enemyCores((team, out) -> {
|
||||||
paths = new PathData[Team.all.length];
|
for(Tile other : indexer.getEnemy(team, BlockFlag.core)){
|
||||||
blocked.clear();
|
out.add(other.pos());
|
||||||
|
|
||||||
for(Team team : Team.all){
|
|
||||||
PathData path = new PathData();
|
|
||||||
paths[team.ordinal()] = path;
|
|
||||||
|
|
||||||
if(state.teams.isActive(team)){
|
|
||||||
createFor(team);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//spawn points are also enemies.
|
||||||
|
if(state.rules.waves && team == defaultTeam){
|
||||||
|
for(Tile other : spawner.getGroundSpawns()){
|
||||||
|
out.add(other.pos());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
rallyPoints((team, out) -> {
|
||||||
|
for(Tile other : indexer.getAllied(team, BlockFlag.rally)){
|
||||||
|
out.add(other.pos());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
public static final PathTarget[] all = values();
|
||||||
|
|
||||||
|
private final BiConsumer<Team, IntArray> targeter;
|
||||||
|
|
||||||
|
PathTarget(BiConsumer<Team, IntArray> targeter){
|
||||||
|
this.targeter = targeter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get targets. This must run on the main thread.*/
|
||||||
|
public IntArray getTargets(Team team, IntArray out){
|
||||||
|
targeter.accept(team, out);
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Data for a specific flow field to some set of destinations. */
|
||||||
class PathData{
|
class PathData{
|
||||||
float[][] weights;
|
/** Team this path is for. */
|
||||||
short[][] searches;
|
final Team team;
|
||||||
int search = 0;
|
/** Flag that is being targeted. */
|
||||||
long lastSearchTime;
|
final PathTarget target;
|
||||||
IntQueue frontier = new IntQueue();
|
/** costs of getting to a specific tile */
|
||||||
|
final int[][] weights;
|
||||||
|
/** search IDs of each position - the highest, most recent search is prioritized and overwritten */
|
||||||
|
final short[][] searches;
|
||||||
|
/** search frontier, these are Pos objects */
|
||||||
|
final IntQueue frontier = new IntQueue();
|
||||||
|
/** all target positions; these positions have a cost of 0, and must be synchronized on! */
|
||||||
|
final IntArray targets = new IntArray();
|
||||||
|
/** current search ID */
|
||||||
|
int search = 1;
|
||||||
|
|
||||||
|
PathData(Team team, PathTarget target, int width, int height){
|
||||||
|
this.team = team;
|
||||||
|
this.target = target;
|
||||||
|
|
||||||
|
this.weights = new int[width][height];
|
||||||
|
this.searches = new short[width][height];
|
||||||
|
this.frontier.ensureCapacity((width + height) * 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Holds a copy of tile data for a specific tile position. */
|
||||||
|
@Struct
|
||||||
|
class PathTileStruct{
|
||||||
|
//traversal cost
|
||||||
|
byte cost;
|
||||||
|
//team of block, if applicable (0 by default)
|
||||||
|
byte team;
|
||||||
|
//type of target; TODO remove
|
||||||
|
byte type;
|
||||||
|
//whether it's viable to pass this block
|
||||||
|
boolean passable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import io.anuke.mindustry.entities.Effects;
|
|||||||
import io.anuke.mindustry.entities.type.BaseUnit;
|
import io.anuke.mindustry.entities.type.BaseUnit;
|
||||||
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
|
||||||
import io.anuke.mindustry.game.SpawnGroup;
|
import io.anuke.mindustry.game.SpawnGroup;
|
||||||
import io.anuke.mindustry.net.Net;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
@@ -116,7 +115,7 @@ public class WaveSpawner{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSpawning(){
|
public boolean isSpawning(){
|
||||||
return spawning && !Net.client();
|
return spawning && !net.client();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reset(){
|
private void reset(){
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package io.anuke.mindustry.content;
|
package io.anuke.mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
import io.anuke.arc.*;
|
||||||
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.*;
|
import io.anuke.arc.math.*;
|
||||||
@@ -8,6 +9,7 @@ import io.anuke.arc.util.*;
|
|||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import io.anuke.mindustry.entities.bullet.*;
|
||||||
|
import io.anuke.mindustry.entities.type.Bullet;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import io.anuke.mindustry.graphics.*;
|
||||||
@@ -17,6 +19,7 @@ import io.anuke.mindustry.world.blocks.*;
|
|||||||
import io.anuke.mindustry.world.blocks.defense.*;
|
import io.anuke.mindustry.world.blocks.defense.*;
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.*;
|
import io.anuke.mindustry.world.blocks.defense.turrets.*;
|
||||||
import io.anuke.mindustry.world.blocks.distribution.*;
|
import io.anuke.mindustry.world.blocks.distribution.*;
|
||||||
|
import io.anuke.mindustry.world.blocks.logic.*;
|
||||||
import io.anuke.mindustry.world.blocks.power.*;
|
import io.anuke.mindustry.world.blocks.power.*;
|
||||||
import io.anuke.mindustry.world.blocks.production.*;
|
import io.anuke.mindustry.world.blocks.production.*;
|
||||||
import io.anuke.mindustry.world.blocks.sandbox.*;
|
import io.anuke.mindustry.world.blocks.sandbox.*;
|
||||||
@@ -47,7 +50,7 @@ public class Blocks implements ContentList{
|
|||||||
melter, separator, sporePress, pulverizer, incinerator, coalCentrifuge,
|
melter, separator, sporePress, pulverizer, incinerator, coalCentrifuge,
|
||||||
|
|
||||||
//sandbox
|
//sandbox
|
||||||
powerVoid, powerSource, itemSource, liquidSource, itemVoid,
|
powerVoid, powerSource, itemSource, liquidSource, itemVoid, message,
|
||||||
|
|
||||||
//defense
|
//defense
|
||||||
scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet
|
scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet
|
||||||
@@ -55,7 +58,7 @@ public class Blocks implements ContentList{
|
|||||||
phaseWall, phaseWallLarge, surgeWall, surgeWallLarge, mender, mendProjector, overdriveProjector, forceProjector, shockMine,
|
phaseWall, phaseWallLarge, surgeWall, surgeWallLarge, mender, mendProjector, overdriveProjector, forceProjector, shockMine,
|
||||||
|
|
||||||
//transport
|
//transport
|
||||||
conveyor, titaniumConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, router, overflowGate, massDriver,
|
conveyor, titaniumConveyor, armoredConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, router, overflowGate, massDriver,
|
||||||
|
|
||||||
//liquids
|
//liquids
|
||||||
mechanicalPump, rotaryPump, thermalPump, conduit, pulseConduit, liquidRouter, liquidTank, liquidJunction, bridgeConduit, phaseConduit,
|
mechanicalPump, rotaryPump, thermalPump, conduit, pulseConduit, liquidRouter, liquidTank, liquidJunction, bridgeConduit, phaseConduit,
|
||||||
@@ -500,6 +503,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
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);
|
||||||
|
itemCapacity = 20;
|
||||||
|
|
||||||
int bottomRegion = reg("-bottom"), weaveRegion = reg("-weave");
|
int bottomRegion = reg("-bottom"), weaveRegion = reg("-weave");
|
||||||
|
|
||||||
@@ -589,7 +593,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
pyratiteMixer = new GenericSmelter("pyratite-mixer"){{
|
pyratiteMixer = new GenericSmelter("pyratite-mixer"){{
|
||||||
requirements(Category.crafting, ItemStack.with(Items.copper, 50, Items.lead, 25));
|
requirements(Category.crafting, ItemStack.with(Items.copper, 50, Items.lead, 25));
|
||||||
flameColor = Color.CLEAR;
|
flameColor = Color.clear;
|
||||||
hasItems = true;
|
hasItems = true;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
outputItem = new ItemStack(Items.pyratite, 1);
|
outputItem = new ItemStack(Items.pyratite, 1);
|
||||||
@@ -660,7 +664,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy());
|
Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
Draw.rect(reg(frameRegions[(int)Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
|
Draw.rect(reg(frameRegions[(int)Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
|
||||||
Draw.color(Color.CLEAR, tile.entity.liquids.current().color, tile.entity.liquids.total() / liquidCapacity);
|
Draw.color(Color.clear, tile.entity.liquids.current().color, tile.entity.liquids.total() / liquidCapacity);
|
||||||
Draw.rect(reg(liquidRegion), tile.drawx(), tile.drawy());
|
Draw.rect(reg(liquidRegion), tile.drawx(), tile.drawy());
|
||||||
Draw.color();
|
Draw.color();
|
||||||
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
|
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
|
||||||
@@ -731,6 +735,9 @@ public class Blocks implements ContentList{
|
|||||||
requirements(Category.liquid, () -> state.rules.infiniteResources, ItemStack.with());
|
requirements(Category.liquid, () -> state.rules.infiniteResources, ItemStack.with());
|
||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
}};
|
}};
|
||||||
|
message = new MessageBlock("message"){{
|
||||||
|
requirements(Category.effect, ItemStack.with(Items.graphite, 5));
|
||||||
|
}};
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
//region defense
|
//region defense
|
||||||
@@ -899,10 +906,16 @@ public class Blocks implements ContentList{
|
|||||||
speed = 0.08f;
|
speed = 0.08f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
armoredConveyor = new ArmoredConveyor("armored-conveyor"){{
|
||||||
|
requirements(Category.distribution, ItemStack.with(Items.metaglass, 1, Items.thorium, 1));
|
||||||
|
health = 180;
|
||||||
|
speed = 0.08f;
|
||||||
|
}};
|
||||||
|
|
||||||
junction = new Junction("junction"){{
|
junction = new Junction("junction"){{
|
||||||
requirements(Category.distribution, ItemStack.with(Items.copper, 1), true);
|
requirements(Category.distribution, ItemStack.with(Items.copper, 1), true);
|
||||||
speed = 26;
|
speed = 26;
|
||||||
capacity = 15;
|
capacity = 12;
|
||||||
health = 30;
|
health = 30;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -910,7 +923,7 @@ public class Blocks implements ContentList{
|
|||||||
requirements(Category.distribution, ItemStack.with(Items.lead, 4, Items.copper, 4));
|
requirements(Category.distribution, ItemStack.with(Items.lead, 4, Items.copper, 4));
|
||||||
range = 4;
|
range = 4;
|
||||||
speed = 70f;
|
speed = 70f;
|
||||||
bufferCapacity = 15;
|
bufferCapacity = 14;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
||||||
@@ -982,7 +995,6 @@ public class Blocks implements ContentList{
|
|||||||
pulseConduit = new Conduit("pulse-conduit"){{
|
pulseConduit = new Conduit("pulse-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.titanium, 1, Items.metaglass, 1));
|
requirements(Category.liquid, ItemStack.with(Items.titanium, 1, Items.metaglass, 1));
|
||||||
liquidCapacity = 16f;
|
liquidCapacity = 16f;
|
||||||
liquidFlowFactor = 4.9f;
|
|
||||||
health = 90;
|
health = 90;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1397,7 +1409,7 @@ public class Blocks implements ContentList{
|
|||||||
smokeEffect = Fx.lancerLaserShootSmoke;
|
smokeEffect = Fx.lancerLaserShootSmoke;
|
||||||
chargeEffect = Fx.lancerLaserCharge;
|
chargeEffect = Fx.lancerLaserCharge;
|
||||||
chargeBeginEffect = Fx.lancerLaserChargeBegin;
|
chargeBeginEffect = Fx.lancerLaserChargeBegin;
|
||||||
heatColor = Color.RED;
|
heatColor = Color.red;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 280 * size * size;
|
health = 280 * size * size;
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
@@ -1405,16 +1417,16 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
arc = new PowerTurret("arc"){{
|
arc = new PowerTurret("arc"){{
|
||||||
requirements(Category.turret, ItemStack.with(Items.copper, 35, Items.lead, 35));
|
requirements(Category.turret, ItemStack.with(Items.copper, 35, Items.lead, 50));
|
||||||
shootType = Bullets.arc;
|
shootType = Bullets.arc;
|
||||||
reload = 24f;
|
reload = 35f;
|
||||||
shootCone = 40f;
|
shootCone = 40f;
|
||||||
rotatespeed = 8f;
|
rotatespeed = 8f;
|
||||||
powerUse = 0.9f;
|
powerUse = 1.5f;
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
range = 95f;
|
range = 90f;
|
||||||
shootEffect = Fx.lightningShoot;
|
shootEffect = Fx.lightningShoot;
|
||||||
heatColor = Color.RED;
|
heatColor = Color.red;
|
||||||
recoil = 1f;
|
recoil = 1f;
|
||||||
size = 1;
|
size = 1;
|
||||||
health = 260;
|
health = 260;
|
||||||
@@ -1493,7 +1505,7 @@ public class Blocks implements ContentList{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Bullet b){
|
public void init(io.anuke.mindustry.entities.type.Bullet b){
|
||||||
for(int i = 0; i < rays; i++){
|
for(int i = 0; i < rays; i++){
|
||||||
Damage.collideLine(b, b.getTeam(), hitEffect, b.x, b.y, b.rot(), rayLength - Math.abs(i - (rays / 2)) * 20f);
|
Damage.collideLine(b, b.getTeam(), hitEffect, b.x, b.y, b.rot(), rayLength - Math.abs(i - (rays / 2)) * 20f);
|
||||||
}
|
}
|
||||||
@@ -1502,7 +1514,7 @@ public class Blocks implements ContentList{
|
|||||||
@Override
|
@Override
|
||||||
public void draw(Bullet b){
|
public void draw(Bullet b){
|
||||||
super.draw(b);
|
super.draw(b);
|
||||||
Draw.color(Color.WHITE, Pal.lancerLaser, b.fin());
|
Draw.color(Color.white, Pal.lancerLaser, b.fin());
|
||||||
//Draw.alpha(b.fout());
|
//Draw.alpha(b.fout());
|
||||||
for(int i = 0; i < 7; i++){
|
for(int i = 0; i < 7; i++){
|
||||||
Tmp.v1.trns(b.rot(), i * 8f);
|
Tmp.v1.trns(b.rot(), i * 8f);
|
||||||
@@ -1645,6 +1657,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
commandCenter = new CommandCenter("command-center"){{
|
commandCenter = new CommandCenter("command-center"){{
|
||||||
requirements(Category.units, ItemStack.with(Items.copper, 200, Items.lead, 250, Items.silicon, 250, Items.graphite, 100));
|
requirements(Category.units, ItemStack.with(Items.copper, 200, Items.lead, 250, Items.silicon, 250, Items.graphite, 100));
|
||||||
|
flags = EnumSet.of(BlockFlag.rally, BlockFlag.comandCenter);
|
||||||
size = 2;
|
size = 2;
|
||||||
health = size * size * 55;
|
health = size * size * 55;
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ import io.anuke.arc.util.*;
|
|||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import io.anuke.mindustry.entities.bullet.*;
|
||||||
import io.anuke.mindustry.entities.effect.*;
|
import io.anuke.mindustry.entities.effect.*;
|
||||||
|
import io.anuke.mindustry.entities.type.*;
|
||||||
|
import io.anuke.mindustry.entities.type.Bullet;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import io.anuke.mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.blocks.*;
|
import io.anuke.mindustry.world.blocks.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.world;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class Bullets implements ContentList{
|
public class Bullets implements ContentList{
|
||||||
public static BulletType
|
public static BulletType
|
||||||
@@ -249,7 +251,7 @@ public class Bullets implements ContentList{
|
|||||||
splashDamageRadius = 25f;
|
splashDamageRadius = 25f;
|
||||||
splashDamage = 10f;
|
splashDamage = 10f;
|
||||||
lifetime = 120f;
|
lifetime = 120f;
|
||||||
trailColor = Color.GRAY;
|
trailColor = Color.gray;
|
||||||
backColor = Pal.bulletYellowBack;
|
backColor = Pal.bulletYellowBack;
|
||||||
frontColor = Pal.bulletYellow;
|
frontColor = Pal.bulletYellow;
|
||||||
hitEffect = Fx.blastExplosion;
|
hitEffect = Fx.blastExplosion;
|
||||||
@@ -395,7 +397,7 @@ public class Bullets implements ContentList{
|
|||||||
Draw.color(Pal.heal);
|
Draw.color(Pal.heal);
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.lineAngleCenter(b.x, b.y, b.rot(), 7f);
|
Lines.lineAngleCenter(b.x, b.y, b.rot(), 7f);
|
||||||
Draw.color(Color.WHITE);
|
Draw.color(Color.white);
|
||||||
Lines.lineAngleCenter(b.x, b.y, b.rot(), 3f);
|
Lines.lineAngleCenter(b.x, b.y, b.rot(), 3f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
@@ -429,7 +431,7 @@ public class Bullets implements ContentList{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Bullet b){
|
public void draw(Bullet b){
|
||||||
Draw.color(Pal.lightFlame, Pal.darkFlame, Color.GRAY, b.fin());
|
Draw.color(Pal.lightFlame, Pal.darkFlame, Color.gray, b.fin());
|
||||||
Fill.circle(b.x, b.y, 3f * b.fout());
|
Fill.circle(b.x, b.y, 3f * b.fout());
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
@@ -497,7 +499,7 @@ public class Bullets implements ContentList{
|
|||||||
};
|
};
|
||||||
|
|
||||||
lancerLaser = new BulletType(0.001f, 140){
|
lancerLaser = new BulletType(0.001f, 140){
|
||||||
Color[] colors = {Pal.lancerLaser.cpy().mul(1f, 1f, 1f, 0.4f), Pal.lancerLaser, Color.WHITE};
|
Color[] colors = {Pal.lancerLaser.cpy().mul(1f, 1f, 1f, 0.4f), Pal.lancerLaser, Color.white};
|
||||||
float[] tscales = {1f, 0.7f, 0.5f, 0.2f};
|
float[] tscales = {1f, 0.7f, 0.5f, 0.2f};
|
||||||
float[] lenscales = {1f, 1.1f, 1.13f, 1.14f};
|
float[] lenscales = {1f, 1.1f, 1.13f, 1.14f};
|
||||||
float length = 160f;
|
float length = 160f;
|
||||||
@@ -539,7 +541,7 @@ public class Bullets implements ContentList{
|
|||||||
|
|
||||||
meltdownLaser = new BulletType(0.001f, 70){
|
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};
|
||||||
@@ -631,11 +633,11 @@ public class Bullets implements ContentList{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(Bullet b){
|
public void init(Bullet b){
|
||||||
Lightning.create(b.getTeam(), Pal.lancerLaser, damage, b.x, b.y, b.rot(), 30);
|
Lightning.create(b.getTeam(), Pal.lancerLaser, damage * (b.getOwner() instanceof Player ? state.rules.playerDamageMultiplier : 1f), b.x, b.y, b.rot(), 30);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
arc = new BulletType(0.001f, 25){
|
arc = new BulletType(0.001f, 21){
|
||||||
{
|
{
|
||||||
lifetime = 1;
|
lifetime = 1;
|
||||||
despawnEffect = Fx.none;
|
despawnEffect = Fx.none;
|
||||||
@@ -687,7 +689,7 @@ public class Bullets implements ContentList{
|
|||||||
bulletHeight = 12f;
|
bulletHeight = 12f;
|
||||||
hitEffect = Fx.pulverize;
|
hitEffect = Fx.pulverize;
|
||||||
backColor = new Color(0x4f4f4fff);
|
backColor = new Color(0x4f4f4fff);
|
||||||
frontColor = Color.GRAY;
|
frontColor = Color.gray;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,19 +1,17 @@
|
|||||||
package io.anuke.mindustry.content;
|
package io.anuke.mindustry.content;
|
||||||
|
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.Angles;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.Tmp;
|
import io.anuke.mindustry.entities.Effects.*;
|
||||||
import io.anuke.mindustry.entities.Effects.Effect;
|
import io.anuke.mindustry.entities.effect.GroundEffectEntity.*;
|
||||||
import io.anuke.mindustry.entities.effect.GroundEffectEntity.GroundEffect;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.entities.type.BaseUnit;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.game.ContentList;
|
import io.anuke.mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.graphics.Pal;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.graphics.Drawf;
|
import io.anuke.mindustry.type.Item.*;
|
||||||
import io.anuke.mindustry.type.Item;
|
|
||||||
import io.anuke.mindustry.type.Item.Icon;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.tilesize;
|
||||||
|
|
||||||
@@ -32,7 +30,7 @@ public class Fx implements ContentList{
|
|||||||
bigShockwave, nuclearShockwave, explosion, blockExplosion, blockExplosionSmoke, shootSmall, shootHeal, shootSmallSmoke, shootBig, shootBig2, shootBigSmoke,
|
bigShockwave, nuclearShockwave, explosion, blockExplosion, blockExplosionSmoke, shootSmall, shootHeal, shootSmallSmoke, shootBig, shootBig2, shootBigSmoke,
|
||||||
shootBigSmoke2, shootSmallFlame, shootPyraFlame, shootLiquid, shellEjectSmall, shellEjectMedium,
|
shootBigSmoke2, shootSmallFlame, shootPyraFlame, shootLiquid, shellEjectSmall, shellEjectMedium,
|
||||||
shellEjectBig, lancerLaserShoot, lancerLaserShootSmoke, lancerLaserCharge, lancerLaserChargeBegin, lightningCharge, lightningShoot,
|
shellEjectBig, lancerLaserShoot, lancerLaserShootSmoke, lancerLaserCharge, lancerLaserChargeBegin, lightningCharge, lightningShoot,
|
||||||
unitSpawn, spawnShockwave, magmasmoke, impactShockwave, impactcloud, impactsmoke, dynamicExplosion, padlaunch, commandSend;
|
unitSpawn, spawnShockwave, magmasmoke, impactShockwave, impactcloud, impactsmoke, dynamicExplosion, padlaunch, commandSend, coreLand;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
@@ -93,14 +91,14 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
smoke = new Effect(100, e -> {
|
smoke = new Effect(100, e -> {
|
||||||
Draw.color(Color.GRAY, Pal.darkishGray, e.fin());
|
Draw.color(Color.gray, Pal.darkishGray, e.fin());
|
||||||
float size = 7f - e.fin() * 7f;
|
float size = 7f - e.fin() * 7f;
|
||||||
Draw.rect("circle", e.x, e.y, size, size);
|
Draw.rect("circle", e.x, e.y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
magmasmoke = new Effect(110, e -> {
|
magmasmoke = new Effect(110, e -> {
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
Fill.circle(e.x, e.y, e.fslope() * 6f);
|
Fill.circle(e.x, e.y, e.fslope() * 6f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -180,7 +178,7 @@ public class Fx implements ContentList{
|
|||||||
|
|
||||||
|
|
||||||
hitBulletSmall = new Effect(14, e -> {
|
hitBulletSmall = new Effect(14, e -> {
|
||||||
Draw.color(Color.WHITE, Pal.lightOrange, e.fin());
|
Draw.color(Color.white, Pal.lightOrange, e.fin());
|
||||||
|
|
||||||
e.scaled(7f, s -> {
|
e.scaled(7f, s -> {
|
||||||
Lines.stroke(0.5f + s.fout());
|
Lines.stroke(0.5f + s.fout());
|
||||||
@@ -199,7 +197,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
hitFuse = new Effect(14, e -> {
|
hitFuse = new Effect(14, e -> {
|
||||||
Draw.color(Color.WHITE, Pal.surge, e.fin());
|
Draw.color(Color.white, Pal.surge, e.fin());
|
||||||
|
|
||||||
e.scaled(7f, s -> {
|
e.scaled(7f, s -> {
|
||||||
Lines.stroke(0.5f + s.fout());
|
Lines.stroke(0.5f + s.fout());
|
||||||
@@ -218,7 +216,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
hitBulletBig = new Effect(13, e -> {
|
hitBulletBig = new Effect(13, e -> {
|
||||||
Draw.color(Color.WHITE, Pal.lightOrange, e.fin());
|
Draw.color(Color.white, Pal.lightOrange, e.fin());
|
||||||
Lines.stroke(0.5f + e.fout() * 1.5f);
|
Lines.stroke(0.5f + e.fout() * 1.5f);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 8, e.finpow() * 30f, e.rotation, 50f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, e.finpow() * 30f, e.rotation, 50f, (x, y) -> {
|
||||||
@@ -252,7 +250,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
hitLancer = new Effect(12, e -> {
|
hitLancer = new Effect(12, e -> {
|
||||||
Draw.color(Color.WHITE);
|
Draw.color(Color.white);
|
||||||
Lines.stroke(e.fout() * 1.5f);
|
Lines.stroke(e.fout() * 1.5f);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 8, e.finpow() * 17f, e.rotation, 360f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, e.finpow() * 17f, e.rotation, 360f, (x, y) -> {
|
||||||
@@ -276,14 +274,14 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
hitLaser = new Effect(8, e -> {
|
hitLaser = new Effect(8, e -> {
|
||||||
Draw.color(Color.WHITE, Pal.heal, e.fin());
|
Draw.color(Color.white, Pal.heal, e.fin());
|
||||||
Lines.stroke(0.5f + e.fout());
|
Lines.stroke(0.5f + e.fout());
|
||||||
Lines.circle(e.x, e.y, e.fin() * 5f);
|
Lines.circle(e.x, e.y, e.fin() * 5f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
despawn = new Effect(12, e -> {
|
despawn = new Effect(12, e -> {
|
||||||
Draw.color(Pal.lighterOrange, Color.GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Color.gray, e.fin());
|
||||||
Lines.stroke(e.fout());
|
Lines.stroke(e.fout());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 7, e.fin() * 7f, e.rotation, 40f, (x, y) -> {
|
Angles.randLenVectors(e.id, 7, e.fin() * 7f, e.rotation, 40f, (x, y) -> {
|
||||||
@@ -302,7 +300,7 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, 3f + i.fin() * 10f);
|
Lines.circle(e.x, e.y, 3f + i.fin() * 10f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 5, 2f + 23f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 2f + 23f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.5f);
|
||||||
@@ -326,7 +324,7 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, 3f + i.fin() * 24f);
|
Lines.circle(e.x, e.y, 3f + i.fin() * 24f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 7, 2f + 28f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 7, 2f + 28f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
||||||
@@ -350,7 +348,7 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, 3f + i.fin() * 34f);
|
Lines.circle(e.x, e.y, 3f + i.fin() * 34f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 7, 2f + 30f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 7, 2f + 30f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
||||||
@@ -374,7 +372,7 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, 3f + i.fin() * 15f);
|
Lines.circle(e.x, e.y, 3f + i.fin() * 15f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 5, 2f + 23f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 2f + 23f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
||||||
@@ -423,7 +421,7 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, 3f + i.fin() * 25f);
|
Lines.circle(e.x, e.y, 3f + i.fin() * 25f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 6, 2f + 23f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 2f + 23f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.5f);
|
||||||
@@ -461,7 +459,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
fireSmoke = new Effect(35f, e -> {
|
fireSmoke = new Effect(35f, e -> {
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 1, 2f + e.fin() * 7f, (x, y) -> {
|
Angles.randLenVectors(e.id, 1, 2f + e.fin() * 7f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
||||||
@@ -471,7 +469,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
steam = new Effect(35f, e -> {
|
steam = new Effect(35f, e -> {
|
||||||
Draw.color(Color.LIGHT_GRAY);
|
Draw.color(Color.lightGray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 2, 2f + e.fin() * 7f, (x, y) -> {
|
Angles.randLenVectors(e.id, 2, 2f + e.fin() * 7f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
||||||
@@ -481,7 +479,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
fireballsmoke = new Effect(25f, e -> {
|
fireballsmoke = new Effect(25f, e -> {
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 1, 2f + e.fin() * 7f, (x, y) -> {
|
Angles.randLenVectors(e.id, 1, 2f + e.fin() * 7f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
||||||
@@ -511,7 +509,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
melting = new Effect(40f, e -> {
|
melting = new Effect(40f, e -> {
|
||||||
Draw.color(Liquids.slag.color, Color.WHITE, e.fout() / 5f + Mathf.randomSeedRange(e.id, 0.12f));
|
Draw.color(Liquids.slag.color, Color.white, e.fout() / 5f + Mathf.randomSeedRange(e.id, 0.12f));
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 2, 1f + e.fin() * 3f, (x, y) -> {
|
Angles.randLenVectors(e.id, 2, 1f + e.fin() * 3f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, .2f + e.fout() * 1.2f);
|
Fill.circle(e.x + x, e.y + y, .2f + e.fout() * 1.2f);
|
||||||
@@ -559,35 +557,35 @@ public class Fx implements ContentList{
|
|||||||
|
|
||||||
|
|
||||||
shockwave = new Effect(10f, 80f, e -> {
|
shockwave = new Effect(10f, 80f, e -> {
|
||||||
Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 2f + 0.2f);
|
Lines.stroke(e.fout() * 2f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 28f);
|
Lines.circle(e.x, e.y, e.fin() * 28f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
bigShockwave = new Effect(10f, 80f, e -> {
|
bigShockwave = new Effect(10f, 80f, e -> {
|
||||||
Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f);
|
Lines.stroke(e.fout() * 3f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 50f);
|
Lines.circle(e.x, e.y, e.fin() * 50f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
nuclearShockwave = new Effect(10f, 200f, e -> {
|
nuclearShockwave = new Effect(10f, 200f, e -> {
|
||||||
Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f + 0.2f);
|
Lines.stroke(e.fout() * 3f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 140f);
|
Lines.circle(e.x, e.y, e.fin() * 140f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
impactShockwave = new Effect(13f, 300f, e -> {
|
impactShockwave = new Effect(13f, 300f, e -> {
|
||||||
Draw.color(Pal.lighterOrange, Color.LIGHT_GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 4f + 0.2f);
|
Lines.stroke(e.fout() * 4f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 200f);
|
Lines.circle(e.x, e.y, e.fin() * 200f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
spawnShockwave = new Effect(20f, 400f, e -> {
|
spawnShockwave = new Effect(20f, 400f, e -> {
|
||||||
Draw.color(Color.WHITE, Color.LIGHT_GRAY, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f + 0.5f);
|
Lines.stroke(e.fout() * 3f + 0.5f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * (e.rotation + 50f));
|
Lines.circle(e.x, e.y, e.fin() * (e.rotation + 50f));
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
@@ -599,14 +597,14 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, 3f + i.fin() * 10f);
|
Lines.circle(e.x, e.y, 3f + i.fin() * 10f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 6, 2f + 19f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 2f + 19f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.5f);
|
||||||
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Pal.lighterOrange, Pal.lightOrange, Color.GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Pal.lightOrange, Color.gray, e.fin());
|
||||||
Lines.stroke(1.5f * e.fout());
|
Lines.stroke(1.5f * e.fout());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id + 1, 8, 1f + 23f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id + 1, 8, 1f + 23f * e.finpow(), (x, y) -> {
|
||||||
@@ -624,14 +622,14 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, (3f + i.fin() * 14f) * intensity);
|
Lines.circle(e.x, e.y, (3f + i.fin() * 14f) * intensity);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, e.finpow(), (int)(6 * intensity), 21f * intensity, (x, y, in, out) -> {
|
Angles.randLenVectors(e.id, e.finpow(), (int)(6 * intensity), 21f * intensity, (x, y, in, out) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, out * (2f + intensity) * 3 + 0.5f);
|
Fill.circle(e.x + x, e.y + y, out * (2f + intensity) * 3 + 0.5f);
|
||||||
Fill.circle(e.x + x / 2f, e.y + y / 2f, out * (intensity) * 3);
|
Fill.circle(e.x + x / 2f, e.y + y / 2f, out * (intensity) * 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Pal.lighterOrange, Pal.lightOrange, Color.GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Pal.lightOrange, Color.gray, e.fin());
|
||||||
Lines.stroke((1.7f * e.fout()) * (1f + (intensity - 1f) / 2f));
|
Lines.stroke((1.7f * e.fout()) * (1f + (intensity - 1f) / 2f));
|
||||||
|
|
||||||
Angles.randLenVectors(e.id + 1, e.finpow(), (int)(9 * intensity), 40f * intensity, (x, y, in, out) -> {
|
Angles.randLenVectors(e.id + 1, e.finpow(), (int)(9 * intensity), 40f * intensity, (x, y, in, out) -> {
|
||||||
@@ -647,14 +645,14 @@ public class Fx implements ContentList{
|
|||||||
Lines.circle(e.x, e.y, 3f + i.fin() * 14f);
|
Lines.circle(e.x, e.y, 3f + i.fin() * 14f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 6, 2f + 19f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 2f + 19f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 3f + 0.5f);
|
||||||
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color(Pal.lighterOrange, Pal.lightOrange, Color.GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Pal.lightOrange, Color.gray, e.fin());
|
||||||
Lines.stroke(1.7f * e.fout());
|
Lines.stroke(1.7f * e.fout());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id + 1, 9, 1f + 23f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id + 1, 9, 1f + 23f * e.finpow(), (x, y) -> {
|
||||||
@@ -665,7 +663,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
blockExplosionSmoke = new Effect(30, e -> {
|
blockExplosionSmoke = new Effect(30, e -> {
|
||||||
Draw.color(Color.GRAY);
|
Draw.color(Color.gray);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 6, 4f + 30f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 4f + 30f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 3f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 3f);
|
||||||
@@ -693,7 +691,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shootSmallSmoke = new Effect(20f, e -> {
|
shootSmallSmoke = new Effect(20f, e -> {
|
||||||
Draw.color(Pal.lighterOrange, Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, Color.gray, e.fin());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 5, e.finpow() * 6f, e.rotation, 20f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, e.finpow() * 6f, e.rotation, 20f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f);
|
||||||
@@ -711,7 +709,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shootBig2 = new Effect(10, e -> {
|
shootBig2 = new Effect(10, e -> {
|
||||||
Draw.color(Pal.lightOrange, Color.GRAY, e.fin());
|
Draw.color(Pal.lightOrange, Color.gray, e.fin());
|
||||||
float w = 1.2f + 8 * e.fout();
|
float w = 1.2f + 8 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 29f * e.fout(), e.rotation);
|
Drawf.tri(e.x, e.y, w, 29f * e.fout(), e.rotation);
|
||||||
Drawf.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f);
|
Drawf.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f);
|
||||||
@@ -719,7 +717,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shootBigSmoke = new Effect(17f, e -> {
|
shootBigSmoke = new Effect(17f, e -> {
|
||||||
Draw.color(Pal.lighterOrange, Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, Color.gray, e.fin());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 8, e.finpow() * 19f, e.rotation, 10f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, e.finpow() * 19f, e.rotation, 10f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2f + 0.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2f + 0.2f);
|
||||||
@@ -729,7 +727,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shootBigSmoke2 = new Effect(18f, e -> {
|
shootBigSmoke2 = new Effect(18f, e -> {
|
||||||
Draw.color(Pal.lightOrange, Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Pal.lightOrange, Color.lightGray, Color.gray, e.fin());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 9, e.finpow() * 23f, e.rotation, 20f, (x, y) -> {
|
Angles.randLenVectors(e.id, 9, e.finpow() * 23f, e.rotation, 20f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2.4f + 0.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2.4f + 0.2f);
|
||||||
@@ -739,7 +737,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shootSmallFlame = new Effect(32f, e -> {
|
shootSmallFlame = new Effect(32f, e -> {
|
||||||
Draw.color(Pal.lightFlame, Pal.darkFlame, Color.GRAY, e.fin());
|
Draw.color(Pal.lightFlame, Pal.darkFlame, Color.gray, e.fin());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 8, e.finpow() * 60f, e.rotation, 10f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, e.finpow() * 60f, e.rotation, 10f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.5f);
|
||||||
@@ -749,7 +747,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shootPyraFlame = new Effect(33f, e -> {
|
shootPyraFlame = new Effect(33f, e -> {
|
||||||
Draw.color(Pal.lightPyraFlame, Pal.darkPyraFlame, Color.GRAY, e.fin());
|
Draw.color(Pal.lightPyraFlame, Pal.darkPyraFlame, Color.gray, e.fin());
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 10, e.finpow() * 70f, e.rotation, 10f, (x, y) -> {
|
Angles.randLenVectors(e.id, 10, e.finpow() * 70f, e.rotation, 10f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.6f);
|
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.6f);
|
||||||
@@ -759,7 +757,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shootLiquid = new Effect(40f, e -> {
|
shootLiquid = new Effect(40f, e -> {
|
||||||
Draw.color(e.color, Color.WHITE, e.fout() / 6f + Mathf.randomSeedRange(e.id, 0.1f));
|
Draw.color(e.color, Color.white, e.fout() / 6f + Mathf.randomSeedRange(e.id, 0.1f));
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 6, e.finpow() * 60f, e.rotation, 11f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, e.finpow() * 60f, e.rotation, 11f, (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, 0.5f + e.fout() * 2.5f);
|
Fill.circle(e.x + x, e.y + y, 0.5f + e.fout() * 2.5f);
|
||||||
@@ -769,7 +767,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shellEjectSmall = new GroundEffect(30f, 400f, e -> {
|
shellEjectSmall = new GroundEffect(30f, 400f, e -> {
|
||||||
Draw.color(Pal.lightOrange, Color.LIGHT_GRAY, Pal.lightishGray, e.fin());
|
Draw.color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin());
|
||||||
float rot = Math.abs(e.rotation) + 90f;
|
float rot = Math.abs(e.rotation) + 90f;
|
||||||
|
|
||||||
int i = Mathf.sign(e.rotation);
|
int i = Mathf.sign(e.rotation);
|
||||||
@@ -784,7 +782,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shellEjectMedium = new GroundEffect(34f, 400f, e -> {
|
shellEjectMedium = new GroundEffect(34f, 400f, e -> {
|
||||||
Draw.color(Pal.lightOrange, Color.LIGHT_GRAY, Pal.lightishGray, e.fin());
|
Draw.color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin());
|
||||||
float rot = e.rotation + 90f;
|
float rot = e.rotation + 90f;
|
||||||
for(int i : Mathf.signs){
|
for(int i : Mathf.signs){
|
||||||
float len = (2f + e.finpow() * 10f) * i;
|
float len = (2f + e.finpow() * 10f) * i;
|
||||||
@@ -795,7 +793,7 @@ public class Fx implements ContentList{
|
|||||||
2f, 3f, rot);
|
2f, 3f, rot);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.color(Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
|
|
||||||
for(int i : Mathf.signs){
|
for(int i : Mathf.signs){
|
||||||
float ex = e.x, ey = e.y, fout = e.fout();
|
float ex = e.x, ey = e.y, fout = e.fout();
|
||||||
@@ -808,7 +806,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
shellEjectBig = new GroundEffect(22f, 400f, e -> {
|
shellEjectBig = new GroundEffect(22f, 400f, e -> {
|
||||||
Draw.color(Pal.lightOrange, Color.LIGHT_GRAY, Pal.lightishGray, e.fin());
|
Draw.color(Pal.lightOrange, Color.lightGray, Pal.lightishGray, e.fin());
|
||||||
float rot = e.rotation + 90f;
|
float rot = e.rotation + 90f;
|
||||||
for(int i : Mathf.signs){
|
for(int i : Mathf.signs){
|
||||||
float len = (4f + e.finpow() * 8f) * i;
|
float len = (4f + e.finpow() * 8f) * i;
|
||||||
@@ -820,7 +818,7 @@ public class Fx implements ContentList{
|
|||||||
rot + e.fin() * 30f * i + Mathf.randomSeedRange(e.id + i + 9, 40f * e.fin()));
|
rot + e.fin() * 30f * i + Mathf.randomSeedRange(e.id + i + 9, 40f * e.fin()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.color(Color.LIGHT_GRAY);
|
Draw.color(Color.lightGray);
|
||||||
|
|
||||||
for(int i : Mathf.signs){
|
for(int i : Mathf.signs){
|
||||||
float ex = e.x, ey = e.y, fout = e.fout();
|
float ex = e.x, ey = e.y, fout = e.fout();
|
||||||
@@ -881,7 +879,7 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
lightningShoot = new Effect(12f, e -> {
|
lightningShoot = new Effect(12f, e -> {
|
||||||
Draw.color(Color.WHITE, Pal.lancerLaser, e.fin());
|
Draw.color(Color.white, Pal.lancerLaser, e.fin());
|
||||||
Lines.stroke(e.fout() * 1.2f + 0.5f);
|
Lines.stroke(e.fout() * 1.2f + 0.5f);
|
||||||
|
|
||||||
Angles.randLenVectors(e.id, 7, 25f * e.finpow(), e.rotation, 50f, (x, y) -> {
|
Angles.randLenVectors(e.id, 7, 25f * e.finpow(), e.rotation, 50f, (x, y) -> {
|
||||||
@@ -895,7 +893,7 @@ public class Fx implements ContentList{
|
|||||||
reactorsmoke = new Effect(17, e -> {
|
reactorsmoke = new Effect(17, e -> {
|
||||||
Angles.randLenVectors(e.id, 4, e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 4, e.fin() * 8f, (x, y) -> {
|
||||||
float size = 1f + e.fout() * 5f;
|
float size = 1f + e.fout() * 5f;
|
||||||
Draw.color(Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -903,7 +901,7 @@ public class Fx implements ContentList{
|
|||||||
nuclearsmoke = new Effect(40, e -> {
|
nuclearsmoke = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 4, e.fin() * 13f, (x, y) -> {
|
Angles.randLenVectors(e.id, 4, e.fin() * 13f, (x, y) -> {
|
||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -911,7 +909,7 @@ public class Fx implements ContentList{
|
|||||||
nuclearcloud = new Effect(90, 200f, e -> {
|
nuclearcloud = new Effect(90, 200f, e -> {
|
||||||
Angles.randLenVectors(e.id, 10, e.finpow() * 90f, (x, y) -> {
|
Angles.randLenVectors(e.id, 10, e.finpow() * 90f, (x, y) -> {
|
||||||
float size = e.fout() * 14f;
|
float size = e.fout() * 14f;
|
||||||
Draw.color(Color.LIME, Color.GRAY, e.fin());
|
Draw.color(Color.lime, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -919,7 +917,7 @@ public class Fx implements ContentList{
|
|||||||
impactsmoke = new Effect(60, e -> {
|
impactsmoke = new Effect(60, e -> {
|
||||||
Angles.randLenVectors(e.id, 7, e.fin() * 20f, (x, y) -> {
|
Angles.randLenVectors(e.id, 7, e.fin() * 20f, (x, y) -> {
|
||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -927,7 +925,7 @@ public class Fx implements ContentList{
|
|||||||
impactcloud = new Effect(140, 400f, e -> {
|
impactcloud = new Effect(140, 400f, e -> {
|
||||||
Angles.randLenVectors(e.id, 20, e.finpow() * 160f, (x, y) -> {
|
Angles.randLenVectors(e.id, 20, e.finpow() * 160f, (x, y) -> {
|
||||||
float size = e.fout() * 15f;
|
float size = e.fout() * 15f;
|
||||||
Draw.color(Pal.lighterOrange, Color.LIGHT_GRAY, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -935,7 +933,7 @@ public class Fx implements ContentList{
|
|||||||
redgeneratespark = new Effect(18, e -> {
|
redgeneratespark = new Effect(18, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, e.fin() * 8f, (x, y) -> {
|
||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Pal.redSpark, Color.GRAY, e.fin());
|
Draw.color(Pal.redSpark, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -943,7 +941,7 @@ public class Fx implements ContentList{
|
|||||||
generatespark = new Effect(18, e -> {
|
generatespark = new Effect(18, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, e.fin() * 8f, (x, y) -> {
|
||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Pal.orangeSpark, Color.GRAY, e.fin());
|
Draw.color(Pal.orangeSpark, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -951,14 +949,14 @@ public class Fx implements ContentList{
|
|||||||
fuelburn = new Effect(23, e -> {
|
fuelburn = new Effect(23, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, e.fin() * 9f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, e.fin() * 9f, (x, y) -> {
|
||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Color.LIGHT_GRAY, Color.GRAY, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
plasticburn = new Effect(40, e -> {
|
plasticburn = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.valueOf("e9ead3"), Color.GRAY, e.fin());
|
Draw.color(Color.valueOf("e9ead3"), Color.gray, e.fin());
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -1000,21 +998,21 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
producesmoke = new Effect(12, e -> {
|
producesmoke = new Effect(12, e -> {
|
||||||
Angles.randLenVectors(e.id, 8, 4f + e.fin() * 18f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, 4f + e.fin() * 18f, (x, y) -> {
|
||||||
Draw.color(Color.WHITE, Pal.accent, e.fin());
|
Draw.color(Color.white, Pal.accent, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 1f + e.fout() * 3f, 45);
|
Fill.square(e.x + x, e.y + y, 1f + e.fout() * 3f, 45);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
smeltsmoke = new Effect(15, e -> {
|
smeltsmoke = new Effect(15, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.WHITE, e.color, e.fin());
|
Draw.color(Color.white, e.color, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
formsmoke = new Effect(40, e -> {
|
formsmoke = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.plasticSmoke, Color.LIGHT_GRAY, e.fin());
|
Draw.color(Pal.plasticSmoke, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.2f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.2f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -1022,7 +1020,7 @@ public class Fx implements ContentList{
|
|||||||
blastsmoke = new Effect(26, e -> {
|
blastsmoke = new Effect(26, e -> {
|
||||||
Angles.randLenVectors(e.id, 12, 1f + e.fin() * 23f, (x, y) -> {
|
Angles.randLenVectors(e.id, 12, 1f + e.fin() * 23f, (x, y) -> {
|
||||||
float size = 2f + e.fout() * 6f;
|
float size = 2f + e.fout() * 6f;
|
||||||
Draw.color(Color.LIGHT_GRAY, Color.DARK_GRAY, e.fin());
|
Draw.color(Color.lightGray, Color.darkGray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -1030,7 +1028,7 @@ public class Fx implements ContentList{
|
|||||||
lava = new Effect(18, e -> {
|
lava = new Effect(18, e -> {
|
||||||
Angles.randLenVectors(e.id, 3, 1f + e.fin() * 10f, (x, y) -> {
|
Angles.randLenVectors(e.id, 3, 1f + e.fin() * 10f, (x, y) -> {
|
||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.ORANGE, Color.GRAY, e.fin());
|
Draw.color(Color.orange, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -1056,53 +1054,53 @@ public class Fx implements ContentList{
|
|||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
purify = new Effect(10, e -> {
|
purify = new Effect(10, e -> {
|
||||||
Draw.color(Color.ROYAL, Color.GRAY, e.fin());
|
Draw.color(Color.royal, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
purifyoil = new Effect(10, e -> {
|
purifyoil = new Effect(10, e -> {
|
||||||
Draw.color(Color.BLACK, Color.GRAY, e.fin());
|
Draw.color(Color.black, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
purifystone = new Effect(10, e -> {
|
purifystone = new Effect(10, e -> {
|
||||||
Draw.color(Color.ORANGE, Color.GRAY, e.fin());
|
Draw.color(Color.orange, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
generate = new Effect(11, e -> {
|
generate = new Effect(11, e -> {
|
||||||
Draw.color(Color.ORANGE, Color.YELLOW, e.fin());
|
Draw.color(Color.orange, Color.yellow, e.fin());
|
||||||
Lines.stroke(1f);
|
Lines.stroke(1f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 5f, 2, 8);
|
Lines.spikes(e.x, e.y, e.fin() * 5f, 2, 8);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
mine = new Effect(20, e -> {
|
mine = new Effect(20, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 3f + e.fin() * 6f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 3f + e.fin() * 6f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.LIGHT_GRAY, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
mineBig = new Effect(30, e -> {
|
mineBig = new Effect(30, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.LIGHT_GRAY, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.2f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.2f, 45);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
mineHuge = new Effect(40, e -> {
|
mineHuge = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 8, 5f + e.fin() * 10f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, 5f + e.fin() * 10f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.LIGHT_GRAY, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
smelt = new Effect(20, e -> {
|
smelt = new Effect(20, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 2f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 2f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.WHITE, e.color, e.fin());
|
Draw.color(Color.white, e.color, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
@@ -1209,5 +1207,8 @@ public class Fx implements ContentList{
|
|||||||
Lines.poly(e.x, e.y, 6, e.rotation + e.fin(), 90);
|
Lines.poly(e.x, e.y, 6, e.rotation + e.fin(), 90);
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
coreLand = new Effect(120f, e -> {
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class Items implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
coal = new Item("coal", Color.valueOf("272727")){{
|
coal = new Item("coal", Color.valueOf("272727")){{
|
||||||
explosiveness = 0.4f;
|
explosiveness = 0.2f;
|
||||||
flammability = 1f;
|
flammability = 1f;
|
||||||
hardness = 2;
|
hardness = 2;
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
package io.anuke.mindustry.content;
|
package io.anuke.mindustry.content;
|
||||||
|
|
||||||
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.mindustry.entities.Effects;
|
import io.anuke.mindustry.entities.Effects;
|
||||||
import io.anuke.mindustry.game.ContentList;
|
import io.anuke.mindustry.game.ContentList;
|
||||||
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.type.StatusEffect;
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
|
|
||||||
|
import static io.anuke.mindustry.Vars.waveTeam;
|
||||||
|
|
||||||
public class StatusEffects implements ContentList{
|
public class StatusEffects implements ContentList{
|
||||||
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss;
|
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss;
|
||||||
|
|
||||||
@@ -37,8 +41,14 @@ public class StatusEffects implements ContentList{
|
|||||||
speedMultiplier = 0.9f;
|
speedMultiplier = 0.9f;
|
||||||
effect = Fx.wet;
|
effect = Fx.wet;
|
||||||
|
|
||||||
trans(() -> shocked, ((unit, time, newTime, result) -> unit.damage(15f)));
|
trans(() -> shocked, ((unit, time, newTime, result) -> {
|
||||||
opposite(() -> burning, () -> shocked);
|
unit.damage(20f);
|
||||||
|
if(unit.getTeam() == waveTeam){
|
||||||
|
Events.fire(Trigger.shock);
|
||||||
|
}
|
||||||
|
result.set(this, time);
|
||||||
|
}));
|
||||||
|
opposite(() -> burning);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
melting = new StatusEffect(){{
|
melting = new StatusEffect(){{
|
||||||
|
|||||||
@@ -8,10 +8,13 @@ import io.anuke.mindustry.world.Block;
|
|||||||
import static io.anuke.mindustry.content.Blocks.*;
|
import static io.anuke.mindustry.content.Blocks.*;
|
||||||
|
|
||||||
public class TechTree implements ContentList{
|
public class TechTree implements ContentList{
|
||||||
|
public static Array<TechNode> all;
|
||||||
public static TechNode root;
|
public static TechNode root;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
|
all = new Array<>();
|
||||||
|
|
||||||
root = node(coreShard, () -> {
|
root = node(coreShard, () -> {
|
||||||
|
|
||||||
node(conveyor, () -> {
|
node(conveyor, () -> {
|
||||||
@@ -42,6 +45,10 @@ public class TechTree implements ContentList{
|
|||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
node(armoredConveyor, () -> {
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -326,6 +333,7 @@ public class TechTree implements ContentList{
|
|||||||
context = this;
|
context = this;
|
||||||
children.run();
|
children.run();
|
||||||
context = last;
|
context = last;
|
||||||
|
all.add(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package io.anuke.mindustry.content;
|
|||||||
import io.anuke.arc.collection.*;
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import io.anuke.mindustry.entities.bullet.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
|
import io.anuke.mindustry.entities.type.Bullet;
|
||||||
import io.anuke.mindustry.entities.type.base.*;
|
import io.anuke.mindustry.entities.type.base.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package io.anuke.mindustry.core;
|
|||||||
|
|
||||||
import io.anuke.arc.*;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.assets.*;
|
import io.anuke.arc.assets.*;
|
||||||
import io.anuke.arc.files.*;
|
|
||||||
import io.anuke.arc.graphics.*;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.input.*;
|
import io.anuke.arc.input.*;
|
||||||
@@ -18,7 +17,6 @@ import io.anuke.mindustry.game.*;
|
|||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.input.*;
|
import io.anuke.mindustry.input.*;
|
||||||
import io.anuke.mindustry.maps.Map;
|
import io.anuke.mindustry.maps.Map;
|
||||||
import io.anuke.mindustry.net.Net;
|
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.ui.dialogs.*;
|
import io.anuke.mindustry.ui.dialogs.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
@@ -30,6 +28,7 @@ import java.util.*;
|
|||||||
|
|
||||||
import static io.anuke.arc.Core.*;
|
import static io.anuke.arc.Core.*;
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
import static io.anuke.mindustry.Vars.net;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Control module.
|
* Control module.
|
||||||
@@ -48,6 +47,10 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
private boolean wasPaused = false;
|
private boolean wasPaused = false;
|
||||||
|
|
||||||
public Control(){
|
public Control(){
|
||||||
|
saves = new Saves();
|
||||||
|
tutorial = new Tutorial();
|
||||||
|
music = new MusicControl();
|
||||||
|
|
||||||
Events.on(StateChangeEvent.class, event -> {
|
Events.on(StateChangeEvent.class, event -> {
|
||||||
if((event.from == State.playing && event.to == State.menu) || (event.from == State.menu && event.to != State.menu)){
|
if((event.from == State.playing && event.to == State.menu) || (event.from == State.menu && event.to != State.menu)){
|
||||||
Time.runTask(5f, platform::updateRPC);
|
Time.runTask(5f, platform::updateRPC);
|
||||||
@@ -64,7 +67,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
|
|
||||||
Events.on(WorldLoadEvent.class, event -> {
|
Events.on(WorldLoadEvent.class, event -> {
|
||||||
Core.app.post(() -> Core.app.post(() -> {
|
Core.app.post(() -> Core.app.post(() -> {
|
||||||
if(Net.active() && player.getClosestCore() != null){
|
if(net.active() && player.getClosestCore() != null){
|
||||||
//set to closest core since that's where the player will probably respawn; prevents camera jumps
|
//set to closest core since that's where the player will probably respawn; prevents camera jumps
|
||||||
Core.camera.position.set(player.isDead() ? player.getClosestCore() : player);
|
Core.camera.position.set(player.isDead() ? player.getClosestCore() : player);
|
||||||
}else{
|
}else{
|
||||||
@@ -96,7 +99,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
Effects.shake(5, 6, Core.camera.position.x, Core.camera.position.y);
|
Effects.shake(5, 6, Core.camera.position.x, Core.camera.position.y);
|
||||||
//the restart dialog can show info for any number of scenarios
|
//the restart dialog can show info for any number of scenarios
|
||||||
Call.onGameOver(event.winner);
|
Call.onGameOver(event.winner);
|
||||||
if(state.rules.zone != null && !Net.client()){
|
if(state.rules.zone != null && !net.client()){
|
||||||
//remove zone save on game over
|
//remove zone save on game over
|
||||||
if(saves.getZoneSlot() != null && !state.rules.tutorial){
|
if(saves.getZoneSlot() != null && !state.rules.tutorial){
|
||||||
saves.getZoneSlot().delete();
|
saves.getZoneSlot().delete();
|
||||||
@@ -106,12 +109,12 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
|
|
||||||
//autohost for pvp maps
|
//autohost for pvp maps
|
||||||
Events.on(WorldLoadEvent.class, event -> {
|
Events.on(WorldLoadEvent.class, event -> {
|
||||||
if(state.rules.pvp && !Net.active()){
|
if(state.rules.pvp && !net.active()){
|
||||||
try{
|
try{
|
||||||
Net.host(port);
|
net.host(port);
|
||||||
player.isAdmin = true;
|
player.isAdmin = true;
|
||||||
}catch(IOException e){
|
}catch(IOException e){
|
||||||
ui.showError(Core.bundle.format("server.error", Strings.parseException(e, true)));
|
ui.showException("$server.error", e);
|
||||||
Core.app.post(() -> state.set(State.menu));
|
Core.app.post(() -> state.set(State.menu));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,14 +151,24 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
Events.on(ZoneConfigureCompleteEvent.class, e -> {
|
Events.on(ZoneConfigureCompleteEvent.class, e -> {
|
||||||
ui.hudfrag.showToast(Core.bundle.format("zone.config.complete", e.zone.configureWave));
|
ui.hudfrag.showToast(Core.bundle.format("zone.config.complete", e.zone.configureWave));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Events.on(Trigger.newGame, () -> {
|
||||||
|
TileEntity core = player.getClosestCore();
|
||||||
|
|
||||||
|
if(core == null) return;
|
||||||
|
|
||||||
|
app.post(() -> ui.hudfrag.showLand());
|
||||||
|
renderer.zoomIn(Fx.coreLand.lifetime);
|
||||||
|
app.post(() -> Effects.effect(Fx.coreLand, core.x, core.y, 0, core.block));
|
||||||
|
Time.run(Fx.coreLand.lifetime, () -> {
|
||||||
|
Effects.effect(Fx.launch, core);
|
||||||
|
Effects.shake(5f, 5f, core);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadAsync(){
|
public void loadAsync(){
|
||||||
saves = new Saves();
|
|
||||||
tutorial = new Tutorial();
|
|
||||||
music = new MusicControl();
|
|
||||||
|
|
||||||
Draw.scl = 1f / Core.atlas.find("scale_marker").getWidth();
|
Draw.scl = 1f / Core.atlas.find("scale_marker").getWidth();
|
||||||
|
|
||||||
Core.input.setCatch(KeyCode.BACK, true);
|
Core.input.setCatch(KeyCode.BACK, true);
|
||||||
@@ -174,35 +187,6 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
saves.load();
|
saves.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
//checks for existing 3.5 app data, android only
|
|
||||||
public void checkClassicData(){
|
|
||||||
try{
|
|
||||||
if(files.local("mindustry-maps").exists() || files.local("mindustry-saves").exists()){
|
|
||||||
settings.getBoolOnce("classic-backup-check", () -> {
|
|
||||||
app.post(() -> app.post(() -> ui.showConfirm("$classic.export", "$classic.export.text", () -> {
|
|
||||||
try{
|
|
||||||
platform.requestExternalPerms(() -> {
|
|
||||||
FileHandle external = files.external("MindustryClassic");
|
|
||||||
if(files.local("mindustry-maps").exists()){
|
|
||||||
files.local("mindustry-maps").copyTo(external);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(files.local("mindustry-saves").exists()){
|
|
||||||
files.local("mindustry-saves").copyTo(external);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}catch(Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
ui.showError(Strings.parseException(e, true));
|
|
||||||
}
|
|
||||||
})));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}catch(Throwable t){
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void createPlayer(){
|
void createPlayer(){
|
||||||
player = new Player();
|
player = new Player();
|
||||||
player.name = Core.settings.getString("name");
|
player.name = Core.settings.getString("name");
|
||||||
@@ -220,9 +204,18 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
player.add();
|
player.add();
|
||||||
}
|
}
|
||||||
|
|
||||||
Events.on(ClientLoadEvent.class, e -> {
|
Events.on(ClientLoadEvent.class, e -> input.add());
|
||||||
Core.input.addProcessor(input);
|
}
|
||||||
});
|
|
||||||
|
public void setInput(InputHandler newInput){
|
||||||
|
Block block = input.block;
|
||||||
|
boolean added = Core.input.getInputProcessors().contains(input);
|
||||||
|
input.remove();
|
||||||
|
this.input = newInput;
|
||||||
|
newInput.block = block;
|
||||||
|
if(added){
|
||||||
|
newInput.add();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void playMap(Map map, Rules rules){
|
public void playMap(Map map, Rules rules){
|
||||||
@@ -230,17 +223,20 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
logic.reset();
|
logic.reset();
|
||||||
world.loadMap(map, rules);
|
world.loadMap(map, rules);
|
||||||
state.rules = rules;
|
state.rules = rules;
|
||||||
|
state.rules.zone = null;
|
||||||
|
state.rules.editor = false;
|
||||||
logic.play();
|
logic.play();
|
||||||
if(settings.getBool("savecreate") && !world.isInvalidMap()){
|
if(settings.getBool("savecreate") && !world.isInvalidMap()){
|
||||||
control.saves.addSave(map.name() + " " + new SimpleDateFormat("MMM dd h:mm", Locale.getDefault()).format(new Date()));
|
control.saves.addSave(map.name() + " " + new SimpleDateFormat("MMM dd h:mm", Locale.getDefault()).format(new Date()));
|
||||||
}
|
}
|
||||||
|
Events.fire(Trigger.newGame);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void playZone(Zone zone){
|
public void playZone(Zone zone){
|
||||||
ui.loadAnd(() -> {
|
ui.loadAnd(() -> {
|
||||||
logic.reset();
|
logic.reset();
|
||||||
Net.reset();
|
net.reset();
|
||||||
world.loadGenerator(zone.generator);
|
world.loadGenerator(zone.generator);
|
||||||
zone.rules.accept(state.rules);
|
zone.rules.accept(state.rules);
|
||||||
state.rules.zone = zone;
|
state.rules.zone = zone;
|
||||||
@@ -252,6 +248,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
state.set(State.playing);
|
state.set(State.playing);
|
||||||
control.saves.zoneSave();
|
control.saves.zoneSave();
|
||||||
logic.play();
|
logic.play();
|
||||||
|
Events.fire(Trigger.newGame);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +256,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
Zone zone = Zones.groundZero;
|
Zone zone = Zones.groundZero;
|
||||||
ui.loadAnd(() -> {
|
ui.loadAnd(() -> {
|
||||||
logic.reset();
|
logic.reset();
|
||||||
Net.reset();
|
net.reset();
|
||||||
|
|
||||||
world.beginMapLoad();
|
world.beginMapLoad();
|
||||||
|
|
||||||
@@ -304,6 +301,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
state.rules.waveSpacing = 60f * 30;
|
state.rules.waveSpacing = 60f * 30;
|
||||||
state.rules.buildCostMultiplier = 0.3f;
|
state.rules.buildCostMultiplier = 0.3f;
|
||||||
state.rules.tutorial = true;
|
state.rules.tutorial = true;
|
||||||
|
Events.fire(Trigger.newGame);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,7 +312,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
@Override
|
@Override
|
||||||
public void dispose(){
|
public void dispose(){
|
||||||
content.dispose();
|
content.dispose();
|
||||||
Net.dispose();
|
net.dispose();
|
||||||
Musics.dispose();
|
Musics.dispose();
|
||||||
Sounds.dispose();
|
Sounds.dispose();
|
||||||
ui.editor.dispose();
|
ui.editor.dispose();
|
||||||
@@ -379,17 +377,20 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
|
|
||||||
if(android){
|
if(android){
|
||||||
Sounds.empty.loop(0f, 1f, 0f);
|
Sounds.empty.loop(0f, 1f, 0f);
|
||||||
checkClassicData();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(){
|
public void update(){
|
||||||
|
//TODO find out why this happens on Android
|
||||||
|
if(assets == null) return;
|
||||||
|
|
||||||
saves.update();
|
saves.update();
|
||||||
|
|
||||||
//update and load any requested assets
|
//update and load any requested assets
|
||||||
assets.update();
|
assets.update();
|
||||||
|
|
||||||
input.updateController();
|
input.updateState();
|
||||||
|
|
||||||
//autosave global data if it's modified
|
//autosave global data if it's modified
|
||||||
data.checkSave();
|
data.checkSave();
|
||||||
@@ -414,7 +415,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
if(world.isZone()){
|
if(world.isZone()){
|
||||||
for(Tile tile : state.teams.get(player.getTeam()).cores){
|
for(Tile tile : state.teams.get(player.getTeam()).cores){
|
||||||
for(Item item : content.items()){
|
for(Item item : content.items()){
|
||||||
if(tile.entity.items.has(item)){
|
if(tile.entity != null && tile.entity.items.has(item)){
|
||||||
data.unlockContent(item);
|
data.unlockContent(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
package io.anuke.mindustry.core;
|
package io.anuke.mindustry.core;
|
||||||
|
|
||||||
import io.anuke.arc.Events;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.mindustry.entities.type.BaseUnit;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.entities.type.base.BaseDrone;
|
import io.anuke.mindustry.entities.type.base.*;
|
||||||
import io.anuke.mindustry.game.EventType.StateChangeEvent;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.net.Net;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.unitGroups;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
import static io.anuke.mindustry.Vars.waveTeam;
|
|
||||||
|
|
||||||
public class GameState{
|
public class GameState{
|
||||||
/** Current wave number, can be anything in non-wave modes. */
|
/** Current wave number, can be anything in non-wave modes. */
|
||||||
@@ -29,7 +27,7 @@ public class GameState{
|
|||||||
private State state = State.menu;
|
private State state = State.menu;
|
||||||
|
|
||||||
public int enemies(){
|
public int enemies(){
|
||||||
return Net.client() ? enemies : unitGroups[waveTeam.ordinal()].count(b -> !(b instanceof BaseDrone));
|
return net.client() ? enemies : unitGroups[waveTeam.ordinal()].count(b -> !(b instanceof BaseDrone));
|
||||||
}
|
}
|
||||||
|
|
||||||
public BaseUnit boss(){
|
public BaseUnit boss(){
|
||||||
@@ -46,7 +44,7 @@ public class GameState{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPaused(){
|
public boolean isPaused(){
|
||||||
return (is(State.paused) && !Net.active()) || (gameOver && !Net.active());
|
return (is(State.paused) && !net.active()) || (gameOver && !net.active());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean is(State astate){
|
public boolean is(State astate){
|
||||||
|
|||||||
@@ -1,28 +1,21 @@
|
|||||||
package io.anuke.mindustry.core;
|
package io.anuke.mindustry.core;
|
||||||
|
|
||||||
import io.anuke.annotations.Annotations.Loc;
|
import io.anuke.annotations.Annotations.*;
|
||||||
import io.anuke.annotations.Annotations.Remote;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.ApplicationListener;
|
import io.anuke.arc.collection.ObjectSet.*;
|
||||||
import io.anuke.arc.Events;
|
|
||||||
import io.anuke.arc.collection.ObjectSet.ObjectSetIterator;
|
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.core.GameState.State;
|
import io.anuke.mindustry.core.GameState.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.type.Player;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.entities.type.TileEntity;
|
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.game.Teams.TeamData;
|
import io.anuke.mindustry.game.Teams.*;
|
||||||
import io.anuke.mindustry.gen.BrokenBlock;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.gen.Call;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.world.blocks.*;
|
||||||
import io.anuke.mindustry.type.ItemStack;
|
import io.anuke.mindustry.world.blocks.BuildBlock.*;
|
||||||
import io.anuke.mindustry.world.Block;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
|
||||||
import io.anuke.mindustry.world.blocks.BuildBlock;
|
|
||||||
import io.anuke.mindustry.world.blocks.BuildBlock.BuildEntity;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -164,6 +157,7 @@ public class Logic implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
state.launched = true;
|
state.launched = true;
|
||||||
state.gameOver = true;
|
state.gameOver = true;
|
||||||
|
Events.fire(new LaunchEvent());
|
||||||
//manually fire game over event now
|
//manually fire game over event now
|
||||||
Events.fire(new GameOverEvent(defaultTeam));
|
Events.fire(new GameOverEvent(defaultTeam));
|
||||||
});
|
});
|
||||||
@@ -190,7 +184,7 @@ public class Logic implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Net.client() && state.wavetime <= 0 && state.rules.waves){
|
if(!net.client() && state.wavetime <= 0 && state.rules.waves){
|
||||||
runWave();
|
runWave();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,11 +227,9 @@ public class Logic implements ApplicationListener{
|
|||||||
|
|
||||||
collisions.collideGroups(bulletGroup, playerGroup);
|
collisions.collideGroups(bulletGroup, playerGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
pathfinder.update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Net.client() && !world.isInvalidMap() && !state.isEditor()){
|
if(!net.client() && !world.isInvalidMap() && !state.isEditor()){
|
||||||
checkGameOver();
|
checkGameOver();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,37 +1,33 @@
|
|||||||
package io.anuke.mindustry.core;
|
package io.anuke.mindustry.core;
|
||||||
|
|
||||||
import io.anuke.annotations.Annotations.*;
|
import io.anuke.annotations.Annotations.*;
|
||||||
import io.anuke.arc.ApplicationListener;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.collection.IntSet;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.math.RandomXS128;
|
|
||||||
import io.anuke.arc.util.*;
|
|
||||||
import io.anuke.arc.util.CommandHandler.*;
|
import io.anuke.arc.util.CommandHandler.*;
|
||||||
import io.anuke.arc.util.io.ReusableByteInStream;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.serialization.Base64Coder;
|
import io.anuke.arc.util.io.*;
|
||||||
import io.anuke.mindustry.Vars;
|
import io.anuke.arc.util.serialization.*;
|
||||||
import io.anuke.mindustry.core.GameState.State;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.entities.EntityGroup;
|
import io.anuke.mindustry.core.GameState.*;
|
||||||
import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.traits.SyncTrait;
|
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
|
||||||
import io.anuke.mindustry.entities.type.Player;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.entities.type.Unit;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.game.TypeID;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.game.Version;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.gen.Call;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.gen.RemoteReadClient;
|
import io.anuke.mindustry.net.Administration.*;
|
||||||
import io.anuke.mindustry.net.Administration.TraceInfo;
|
import io.anuke.mindustry.net.Net.*;
|
||||||
import io.anuke.mindustry.net.*;
|
import io.anuke.mindustry.net.*;
|
||||||
import io.anuke.mindustry.net.Net.SendMode;
|
|
||||||
import io.anuke.mindustry.net.Packets.*;
|
import io.anuke.mindustry.net.Packets.*;
|
||||||
import io.anuke.mindustry.type.ContentType;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.modules.ItemModule;
|
import io.anuke.mindustry.world.modules.*;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.*;
|
||||||
import java.io.IOException;
|
import java.util.zip.*;
|
||||||
import java.util.zip.InflaterInputStream;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -40,6 +36,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
private final static float playerSyncTime = 2;
|
private final static float playerSyncTime = 2;
|
||||||
public final static float viewScale = 2f;
|
public final static float viewScale = 2f;
|
||||||
|
|
||||||
|
private long ping;
|
||||||
private Interval timer = new Interval(5);
|
private Interval timer = new Interval(5);
|
||||||
/** Whether the client is currently connecting. */
|
/** Whether the client is currently connecting. */
|
||||||
private boolean connecting = false;
|
private boolean connecting = false;
|
||||||
@@ -60,7 +57,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);
|
Log.info("Connecting to server: {0}", packet.addressTCP);
|
||||||
|
|
||||||
player.isAdmin = false;
|
player.isAdmin = false;
|
||||||
@@ -74,7 +71,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
ui.loadfrag.hide();
|
ui.loadfrag.hide();
|
||||||
connecting = false;
|
connecting = false;
|
||||||
quiet = true;
|
quiet = true;
|
||||||
Net.disconnect();
|
net.disconnect();
|
||||||
});
|
});
|
||||||
|
|
||||||
ConnectPacket c = new ConnectPacket();
|
ConnectPacket c = new ConnectPacket();
|
||||||
@@ -86,16 +83,16 @@ public class NetClient implements ApplicationListener{
|
|||||||
c.uuid = platform.getUUID();
|
c.uuid = platform.getUUID();
|
||||||
|
|
||||||
if(c.uuid == null){
|
if(c.uuid == null){
|
||||||
ui.showError("$invalidid");
|
ui.showErrorMessage("$invalidid");
|
||||||
ui.loadfrag.hide();
|
ui.loadfrag.hide();
|
||||||
disconnectQuietly();
|
disconnectQuietly();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Net.send(c, SendMode.tcp);
|
net.send(c, SendMode.tcp);
|
||||||
});
|
});
|
||||||
|
|
||||||
Net.handleClient(Disconnect.class, packet -> {
|
net.handleClient(Disconnect.class, packet -> {
|
||||||
if(quietReset) return;
|
if(quietReset) return;
|
||||||
|
|
||||||
connecting = false;
|
connecting = false;
|
||||||
@@ -107,17 +104,27 @@ public class NetClient implements ApplicationListener{
|
|||||||
|
|
||||||
Time.runTask(3f, ui.loadfrag::hide);
|
Time.runTask(3f, ui.loadfrag::hide);
|
||||||
|
|
||||||
ui.showError("$disconnect");
|
if(packet.reason != null){
|
||||||
|
if(packet.reason.equals("closed")){
|
||||||
|
ui.showSmall("$disconnect", "$disconnect.closed");
|
||||||
|
}else if(packet.reason.equals("timeout")){
|
||||||
|
ui.showSmall("$disconnect", "$disconnect.timeout");
|
||||||
|
}else if(packet.reason.equals("error")){
|
||||||
|
ui.showSmall("$disconnect", "$disconnect.error");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
ui.showErrorMessage("$disconnect");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Net.handleClient(WorldStream.class, data -> {
|
net.handleClient(WorldStream.class, data -> {
|
||||||
Log.info("Recieved world data: {0} bytes.", data.stream.available());
|
Log.info("Recieved world data: {0} bytes.", data.stream.available());
|
||||||
NetworkIO.loadWorld(new InflaterInputStream(data.stream));
|
NetworkIO.loadWorld(new InflaterInputStream(data.stream));
|
||||||
|
|
||||||
finishConnecting();
|
finishConnecting();
|
||||||
});
|
});
|
||||||
|
|
||||||
Net.handleClient(InvokePacket.class, packet -> {
|
net.handleClient(InvokePacket.class, packet -> {
|
||||||
packet.writeBuffer.position(0);
|
packet.writeBuffer.position(0);
|
||||||
RemoteReadClient.readPacket(packet.writeBuffer, packet.type);
|
RemoteReadClient.readPacket(packet.writeBuffer, packet.type);
|
||||||
});
|
});
|
||||||
@@ -180,6 +187,8 @@ public class NetClient implements ApplicationListener{
|
|||||||
player.sendMessage(text);
|
player.sendMessage(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Events.fire(new PlayerChatEvent(player, message));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String colorizeName(int id, String name){
|
public static String colorizeName(int id, String name){
|
||||||
@@ -188,6 +197,16 @@ public class NetClient implements ApplicationListener{
|
|||||||
return "[#" + player.color.toString().toUpperCase() + "]" + name;
|
return "[#" + player.color.toString().toUpperCase() + "]" + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Remote(targets = Loc.client)
|
||||||
|
public static void onPing(Player player, long time){
|
||||||
|
Call.onPingResponse(player.con, time);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Remote(variants = Variant.one)
|
||||||
|
public static void onPingResponse(long time){
|
||||||
|
netClient.ping = Time.timeSinceMillis(time);
|
||||||
|
}
|
||||||
|
|
||||||
@Remote(variants = Variant.one)
|
@Remote(variants = Variant.one)
|
||||||
public static void onTraceInfo(Player player, TraceInfo info){
|
public static void onTraceInfo(Player player, TraceInfo info){
|
||||||
if(player != null){
|
if(player != null){
|
||||||
@@ -211,6 +230,15 @@ public class NetClient implements ApplicationListener{
|
|||||||
ui.loadfrag.hide();
|
ui.loadfrag.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Remote(variants = Variant.one, priority = PacketPriority.high)
|
||||||
|
public static void onKick(String reason){
|
||||||
|
netClient.disconnectQuietly();
|
||||||
|
state.set(State.menu);
|
||||||
|
logic.reset();
|
||||||
|
ui.showText("$disconnect", reason);
|
||||||
|
ui.loadfrag.hide();
|
||||||
|
}
|
||||||
|
|
||||||
@Remote(variants = Variant.both)
|
@Remote(variants = Variant.both)
|
||||||
public static void onInfoMessage(String message){
|
public static void onInfoMessage(String message){
|
||||||
ui.showText("", message);
|
ui.showText("", message);
|
||||||
@@ -223,7 +251,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
logic.reset();
|
logic.reset();
|
||||||
|
|
||||||
ui.chatfrag.clearMessages();
|
ui.chatfrag.clearMessages();
|
||||||
Net.setClientLoaded(false);
|
net.setClientLoaded(false);
|
||||||
|
|
||||||
ui.loadfrag.show("$connecting.data");
|
ui.loadfrag.show("$connecting.data");
|
||||||
|
|
||||||
@@ -231,7 +259,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
ui.loadfrag.hide();
|
ui.loadfrag.hide();
|
||||||
netClient.connecting = false;
|
netClient.connecting = false;
|
||||||
netClient.quiet = true;
|
netClient.quiet = true;
|
||||||
Net.disconnect();
|
net.disconnect();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,7 +277,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
@Remote(variants = Variant.one, priority = PacketPriority.low, unreliable = true)
|
@Remote(variants = Variant.one, priority = PacketPriority.low, unreliable = true)
|
||||||
public static void onEntitySnapshot(byte groupID, short amount, short dataLen, byte[] data){
|
public static void onEntitySnapshot(byte groupID, short amount, short dataLen, byte[] data){
|
||||||
try{
|
try{
|
||||||
netClient.byteStream.setBytes(Net.decompressSnapshot(data, dataLen));
|
netClient.byteStream.setBytes(net.decompressSnapshot(data, dataLen));
|
||||||
DataInputStream input = netClient.dataStream;
|
DataInputStream input = netClient.dataStream;
|
||||||
|
|
||||||
EntityGroup group = entities.get(groupID);
|
EntityGroup group = entities.get(groupID);
|
||||||
@@ -305,7 +333,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
state.wave = wave;
|
state.wave = wave;
|
||||||
state.enemies = enemies;
|
state.enemies = enemies;
|
||||||
|
|
||||||
netClient.byteStream.setBytes(Net.decompressSnapshot(coreData, coreDataLen));
|
netClient.byteStream.setBytes(net.decompressSnapshot(coreData, coreDataLen));
|
||||||
DataInputStream input = netClient.dataStream;
|
DataInputStream input = netClient.dataStream;
|
||||||
|
|
||||||
byte cores = input.readByte();
|
byte cores = input.readByte();
|
||||||
@@ -327,20 +355,20 @@ public class NetClient implements ApplicationListener{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(){
|
public void update(){
|
||||||
if(!Net.client()) return;
|
if(!net.client()) return;
|
||||||
|
|
||||||
if(!state.is(State.menu)){
|
if(!state.is(State.menu)){
|
||||||
if(!connecting) sync();
|
if(!connecting) sync();
|
||||||
}else if(!connecting){
|
}else if(!connecting){
|
||||||
Net.disconnect();
|
net.disconnect();
|
||||||
}else{ //...must be connecting
|
}else{ //...must be connecting
|
||||||
timeoutTime += Time.delta();
|
timeoutTime += Time.delta();
|
||||||
if(timeoutTime > dataTimeout){
|
if(timeoutTime > dataTimeout){
|
||||||
Log.err("Failed to load data!");
|
Log.err("Failed to load data!");
|
||||||
ui.loadfrag.hide();
|
ui.loadfrag.hide();
|
||||||
quiet = true;
|
quiet = true;
|
||||||
ui.showError("$disconnect.data");
|
ui.showErrorMessage("$disconnect.data");
|
||||||
Net.disconnect();
|
net.disconnect();
|
||||||
timeoutTime = 0f;
|
timeoutTime = 0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -350,18 +378,22 @@ public class NetClient implements ApplicationListener{
|
|||||||
return connecting;
|
return connecting;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getPing(){
|
||||||
|
return (int)ping;
|
||||||
|
}
|
||||||
|
|
||||||
private void finishConnecting(){
|
private void finishConnecting(){
|
||||||
state.set(State.playing);
|
state.set(State.playing);
|
||||||
connecting = false;
|
connecting = false;
|
||||||
ui.join.hide();
|
ui.join.hide();
|
||||||
Net.setClientLoaded(true);
|
net.setClientLoaded(true);
|
||||||
Core.app.post(Call::connectConfirm);
|
Core.app.post(Call::connectConfirm);
|
||||||
Time.runTask(40f, platform::updateRPC);
|
Time.runTask(40f, platform::updateRPC);
|
||||||
Core.app.post(() -> ui.loadfrag.hide());
|
Core.app.post(() -> ui.loadfrag.hide());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reset(){
|
private void reset(){
|
||||||
Net.setClientLoaded(false);
|
net.setClientLoaded(false);
|
||||||
removed.clear();
|
removed.clear();
|
||||||
timeoutTime = 0f;
|
timeoutTime = 0f;
|
||||||
connecting = true;
|
connecting = true;
|
||||||
@@ -380,13 +412,13 @@ public class NetClient implements ApplicationListener{
|
|||||||
/** Disconnects, resetting state to the menu. */
|
/** Disconnects, resetting state to the menu. */
|
||||||
public void disconnectQuietly(){
|
public void disconnectQuietly(){
|
||||||
quiet = true;
|
quiet = true;
|
||||||
Net.disconnect();
|
net.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Disconnects, causing no further changes or reset.*/
|
/** Disconnects, causing no further changes or reset.*/
|
||||||
public void disconnectNoReset(){
|
public void disconnectNoReset(){
|
||||||
quiet = quietReset = true;
|
quiet = quietReset = true;
|
||||||
Net.disconnect();
|
net.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** When set, any disconnects will be ignored and no dialogs will be shown. */
|
/** When set, any disconnects will be ignored and no dialogs will be shown. */
|
||||||
@@ -425,7 +457,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(timer.get(1, 60)){
|
if(timer.get(1, 60)){
|
||||||
Net.updatePing();
|
Call.onPing(Time.millis());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||