Compare commits

...

76 Commits
v59 ... v60

Author SHA1 Message Date
Anuken
de508ee68f "Legacy" unlock loading 2018-11-19 15:08:18 -05:00
Anuken
a932111040 Removed ContentUnlockSet 2018-11-19 14:38:46 -05:00
Anuken
8c437eb815 New UI 2018-11-19 14:30:40 -05:00
Anuken
1ad4815983 Added all placement controls 2018-11-19 14:20:57 -05:00
Anuken
c75cdc6d28 Placement toggle support 2018-11-19 12:27:42 -05:00
Anuken
b9fae7fb7d Bundle update 2018-11-19 10:47:18 -05:00
Anuken
e74a3da5cd Merge remote-tracking branch 'origin/master' 2018-11-19 10:20:46 -05:00
Anuken
08cf986cae Fixed destruction of broken blocks leading to neutral team block 2018-11-19 10:20:41 -05:00
Anuken
ba01ed0153 Flipped place menu 2018-11-18 23:19:39 -05:00
Anuken
19ac8bd9b2 Info menu 2018-11-18 20:50:12 -05:00
Anuken
ab79ccb02b Implemented unlocks for placement 2018-11-18 20:04:15 -05:00
Anuken
d862498516 Replaced tooltips with names 2018-11-18 15:17:19 -05:00
Prosta4okua
b09b03a427 [COMPLETE]Update bundle_ru.properties (#313)
* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties
2018-11-18 14:12:44 -05:00
Sonnicon
4ef2ede4cf Important comment repair. (#343) 2018-11-18 14:10:35 -05:00
Anuken
0efaa11553 2 new categories, less space used 2018-11-18 14:10:02 -05:00
LQ
ea87b958ef update zh_CN translations (#342)
* Update bundle_zh_CN.properties

Add descriptions translate for zh_CN

* Update bundle_zh_CN.properties
2018-11-18 09:46:13 -05:00
Anuken
ff62f075d0 New place menu 2018-11-18 00:07:25 -05:00
Anuken
348744086d Broken BlocksFragment 2018-11-17 18:30:13 -05:00
Anuken
d1d4f79973 Fixed ores appearing as 'air' 2018-11-17 18:01:08 -05:00
Anuken
2a3f7f8cb3 Bundle update 2018-11-17 17:08:31 -05:00
Anuken
7eaef11a84 Improved hover block system 2018-11-17 17:04:16 -05:00
Anuken
efe93d0117 Added tile selection view 2018-11-17 14:45:29 -05:00
Anuken
7d12e18b98 Merge remote-tracking branch 'origin/master' 2018-11-17 13:04:39 -05:00
Anuken
de6bca424f Re-added hacky power graph fix 2018-11-17 13:04:34 -05:00
Milinai
03268a5575 Update ServerControl.java (#339)
* Update ServerControl.java

Hopefully made core fill for teams.

* Fixed compile errors and incorrect team handling
2018-11-17 12:57:10 -05:00
Sonnicon
1251680a1c Fixed BlocksFragment categories row limit (#340) 2018-11-17 12:56:59 -05:00
William So
cd0e49914b Complete most of the Chinese translations (#338)
* Update some Chinese translations

* Translate control guides

* Translate mission text, server text, and others

* Translate generic text

* Translate a lot of short strings

* Translate a bunch of mech strings

* Translate rest of the strings except mainly the descriptions

The descriptions will probably take 3 more days to translate. I will stop here now.

I will translate the rest later.
2018-11-17 12:36:31 -05:00
beito
700e845727 Update Japanese translations (#337)
* Add new japanese translation

It translated on commit 66810c8.
so it don't apply changes from commit 17e0489.

* Update Japanese translation

Applies commit 7a51693. and small changes.

* Upadte Japanese translations

* Update Japanese

* Update Japanese
2018-11-17 12:26:57 -05:00
Anuken
bab8120814 Crash reporting fixes 2018-11-17 12:25:38 -05:00
Anuken
afec65eb56 New mobile text dialog / Cleanup / Minimap fix / Collision optimization 2018-11-17 11:13:59 -05:00
Anuken
d6661da0a7 Syncing enemy display 2018-11-17 00:04:11 -05:00
Anuken
dcc4732748 Updated to libGDX 1.9.9 2018-11-16 23:36:11 -05:00
Anuken
6a5bf08d55 Implemented local server configs 2018-11-16 22:28:27 -05:00
Anuken
ca5db2bff8 Fixed bugs with waiting for players, world border 2018-11-16 18:17:24 -05:00
Anuken
658698ed2f Merge remote-tracking branch 'origin/master' 2018-11-16 17:28:47 -05:00
Anuken
7f391dacbd Fixed low-FPS movement getting broken 2018-11-16 17:28:42 -05:00
Timmeey86
90e0bf95d1 Negative power values will be fixed by reloading the map (#335) 2018-11-15 19:02:17 -05:00
Anuken
930bfb26f4 Merge remote-tracking branch 'origin/master' 2018-11-15 12:40:29 -05:00
Anuken
7e788f212a Additional fixes 2018-11-15 12:38:36 -05:00
Anuken
8f99530795 Fix for off-screen players and laggy interpolation 2018-11-15 12:37:07 -05:00
VizardAlpha
434af4b998 Updates bundle_fr_BE.properties (#333)
* Updates bundle_fr_BE.properties

* Updates

* last update
2018-11-15 10:50:21 -05:00
Anuken
a7c8526f3e Merge remote-tracking branch 'origin/master' 2018-11-14 23:46:37 -05:00
Anuken
459256e83a Slower unloader 2018-11-14 23:46:33 -05:00
beito
8dbfb87246 Add Japanese translations (#332)
* Add new japanese translation

It translated on commit 66810c8.
so it don't apply changes from commit 17e0489.

* Update Japanese translation

Applies commit 7a51693. and small changes.

* Upadte Japanese translations
2018-11-14 14:12:41 -05:00
Anuken
9f97ed331b Various bugfixes / Updated uCore 2018-11-14 09:55:54 -05:00
Anuken
ee043e67a4 Probable crash fix 2018-11-13 22:43:10 -05:00
Anuken
6c3b449f74 Merge remote-tracking branch 'origin/master' 2018-11-13 18:51:38 -05:00
Anuken
536c6a7b2c Various bugfixes 2018-11-13 18:51:34 -05:00
Baramos666
e90e0fc615 update descriptions (#325) 2018-11-13 18:15:20 -05:00
VizardAlpha
b704121dcb Minor Update bundle_fr_BE.properties (#326) 2018-11-13 18:14:31 -05:00
Anuken
5e0886d744 Compile fix 2018-11-13 15:53:01 -05:00
Anuken
f819e4829b Writing of player nick bytes 2018-11-13 15:27:50 -05:00
Anuken
8873948e9e String encoding fix 2018-11-13 15:18:50 -05:00
Anuken
a25ea14436 Removed ancient comment 2018-11-13 14:49:58 -05:00
Anuken
1a922f05c1 Fixed sectors carrying over to multiplayer 2018-11-13 12:54:33 -05:00
elmenda452
e8268b1dab Update bundle_es.properties (#327)
There wasn't much to translate, this is just a second check.
2018-11-13 11:07:32 -05:00
Anuken
7a516930b1 Bugfixes of various kinds 2018-11-13 09:13:53 -05:00
Anuken
92b68bdb8f Merge branch 'remove-multithreading' of https://github.com/Anuken/Mindustry 2018-11-12 11:00:09 -05:00
Anuken
a86bb9f6e6 Merge branch 'master' of https://github.com/Anuken/Mindustry 2018-11-12 10:59:19 -05:00
Timmeey86
c9777af91c Added Unlocks menu button to Escape menu on desktop (#324) 2018-11-11 13:03:15 -05:00
Anuken
2d1a97e042 Removed unnecessary synchronized() blocks 2018-11-11 11:12:54 -05:00
Anuken
ece3f96867 Fixed net errors not being displayed properly 2018-11-11 10:50:33 -05:00
Anuken
65a48b324d Removed multithreading 2018-11-11 10:32:00 -05:00
Anuken
53bf622065 Merge remote-tracking branch 'origin/master' 2018-11-10 21:26:17 -05:00
Anuken
075be18123 Fixed wave button layout 2018-11-10 21:26:11 -05:00
Timmeey86
044390b4b4 Sector -2 0 fix (#322)
* Added a battle mission to Sector (-2,0) as otherwise no core would be spawned

* Fixed a crash which occurred during test execution...

... and could maybe occur during any startup with bad timing

* Added a new class for sector tests ...

... and added a test which makes sure that any predefined sector defines
a spawn point

* Added fix after applying test driven bugfixing
2018-11-10 21:19:27 -05:00
Anuken
37d03aaebe iOS build update 2018-11-09 13:12:04 -05:00
Anuken
51a51833d4 iOS build fix 2018-11-09 10:18:53 -05:00
Anuken
a8cfc1ef7a Mobile input tweak 2018-11-09 08:49:23 -05:00
Anuken
1d238c8315 Crash fix 2018-11-09 08:33:43 -05:00
Anuken
4f96744ff2 Shield shader simplification 2018-11-08 23:50:03 -05:00
Anuken
e9783ecccc Possible minimap fix 2018-11-08 23:19:47 -05:00
Anuken
6342cc41ac Better lake generation 2018-11-08 22:18:34 -05:00
Anuken
c554390de5 Crash fix 2018-11-08 18:48:19 -05:00
Anuken
4d8bbe3023 ita -> it 2018-11-08 17:40:50 -05:00
Anuken
969076f1ef Fixed sector data carry-over 2018-11-08 17:38:51 -05:00
144 changed files with 4582 additions and 4921 deletions

1
.gitignore vendored
View File

@@ -26,6 +26,7 @@ logs/
/core/assets/version.properties /core/assets/version.properties
/core/assets/locales /core/assets/locales
/ios/src/io/anuke/mindustry/gen/ /ios/src/io/anuke/mindustry/gen/
/core/src/io/anuke/mindustry/gen/
*.gif *.gif
version.properties version.properties

View File

@@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >
<EditText
android:id="@+id/gdxDialogsEditTextInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
>
<requestFocus />
</EditText>
</LinearLayout>

View File

@@ -27,7 +27,6 @@ import io.anuke.mindustry.io.SaveIO;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.ui.dialogs.FileChooser; import io.anuke.mindustry.ui.dialogs.FileChooser;
import io.anuke.ucore.function.Consumer; import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.scene.ui.TextField;
import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.scene.ui.layout.Unit;
import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Strings; import io.anuke.ucore.util.Strings;
@@ -52,11 +51,6 @@ public class AndroidLauncher extends PatchedAndroidApplication{
config.useImmersiveMode = true; config.useImmersiveMode = true;
Platform.instance = new Platform(){ Platform.instance = new Platform(){
@Override
public void addDialog(TextField field, int length){
TextFieldDialogListener.add(field, 0, length);
}
@Override @Override
public void openDonations(){ public void openDonations(){
showDonations(); showDonations();

View File

@@ -1,119 +0,0 @@
package io.anuke.mindustry;
import android.app.Activity;
import android.app.AlertDialog;
import android.text.InputFilter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.widget.EditText;
import com.badlogic.gdx.Gdx;
public class AndroidTextFieldDialog{
private Activity activity;
private EditText userInput;
private AlertDialog.Builder builder;
private TextPromptListener listener;
private boolean isBuild;
public AndroidTextFieldDialog(){
this.activity = (Activity) Gdx.app;
load();
}
public AndroidTextFieldDialog show(){
activity.runOnUiThread(() -> {
AlertDialog dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.show();
});
return this;
}
private AndroidTextFieldDialog load(){
activity.runOnUiThread(() -> {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
LayoutInflater li = LayoutInflater.from(activity);
View promptsView = li.inflate(getResourceId("gdxdialogs_inputtext", "layout"), null);
alertDialogBuilder.setView(promptsView);
userInput = promptsView.findViewById(getResourceId("gdxDialogsEditTextInput", "id"));
alertDialogBuilder.setCancelable(false);
builder = alertDialogBuilder;
isBuild = true;
});
// Wait till TextPrompt is built.
while(!isBuild){
try{
Thread.sleep(10);
}catch(InterruptedException ignored){
}
}
return this;
}
public int getResourceId(String pVariableName, String pVariableType){
try{
return activity.getResources().getIdentifier(pVariableName, pVariableType, activity.getPackageName());
}catch(Exception e){
Gdx.app.error("Android Dialogs", "Cannot find resouce with name: " + pVariableName
+ " Did you copy the layouts to /res/layouts and /res/layouts_v14 ?");
e.printStackTrace();
return -1;
}
}
public AndroidTextFieldDialog setText(CharSequence value){
userInput.append(value);
return this;
}
public AndroidTextFieldDialog setCancelButtonLabel(CharSequence label){
builder.setNegativeButton(label, (dialog, id) -> dialog.cancel());
return this;
}
public AndroidTextFieldDialog setConfirmButtonLabel(CharSequence label){
builder.setPositiveButton(label, (dialog, id) -> {
if(listener != null && !userInput.getText().toString().isEmpty()){
listener.confirm(userInput.getText().toString());
}
});
return this;
}
public AndroidTextFieldDialog setTextPromptListener(TextPromptListener listener){
this.listener = listener;
return this;
}
public AndroidTextFieldDialog setInputType(int type){
userInput.setInputType(type);
return this;
}
public AndroidTextFieldDialog setMaxLength(int length){
userInput.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)});
return this;
}
public interface TextPromptListener{
void confirm(String text);
}
}

View File

@@ -1,68 +0,0 @@
package io.anuke.mindustry;
import android.text.InputType;
import com.badlogic.gdx.Application.ApplicationType;
import com.badlogic.gdx.Gdx;
import io.anuke.ucore.scene.event.ChangeListener;
import io.anuke.ucore.scene.event.ClickListener;
import io.anuke.ucore.scene.event.InputEvent;
import io.anuke.ucore.scene.event.InputListener;
import io.anuke.ucore.scene.ui.TextField;
public class TextFieldDialogListener extends ClickListener{
private TextField field;
private int type;
private int max;
//type - 0 is text, 1 is numbers, 2 is decimals
public TextFieldDialogListener(TextField field, int type, int max){
this.field = field;
this.type = type;
this.max = max;
}
public static void add(TextField field, int type, int max){
field.addListener(new TextFieldDialogListener(field, type, max));
field.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){
Gdx.input.setOnscreenKeyboardVisible(false);
return false;
}
});
}
public static void add(TextField field){
add(field, 0, 16);
}
public void clicked(final InputEvent event, float x, float y){
if(Gdx.app.getType() == ApplicationType.Desktop) return;
AndroidTextFieldDialog dialog = new AndroidTextFieldDialog();
dialog.setTextPromptListener(text ->
Gdx.app.postRunnable(() -> {
field.clearText();
field.appendText(text);
field.fire(new ChangeListener.ChangeEvent());
Gdx.graphics.requestRendering();
}));
if(type == 0){
dialog.setInputType(InputType.TYPE_CLASS_TEXT);
}else if(type == 1){
dialog.setInputType(InputType.TYPE_CLASS_NUMBER);
}else if(type == 2){
dialog.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
}
dialog.setConfirmButtonLabel("OK").setText(field.getText());
dialog.setCancelButtonLabel("Cancel");
dialog.setMaxLength(max);
dialog.show();
event.cancel();
}
}

View File

@@ -23,9 +23,9 @@ allprojects {
versionModifier = 'alpha' versionModifier = 'alpha'
versionType = 'official' versionType = 'official'
appName = 'Mindustry' appName = 'Mindustry'
gdxVersion = '1.9.8' gdxVersion = '1.9.9'
roboVMVersion = '2.3.0' roboVMVersion = '2.3.0'
uCoreVersion = 'eb1503dfb786f5f727bdb4b6a302718490444335' uCoreVersion = 'c9aadd4d0b5848dbc4dbbd0fcd701b11c30c02bb'
getVersionString = { getVersionString = {
String buildVersion = getBuildVersion() String buildVersion = getBuildVersion()
@@ -120,7 +120,7 @@ project(":ios") {
} }
} }
build.dependsOn(copyGen) //build.dependsOn(copyGen)
dependencies { dependencies {
compile project(":core") compile project(":core")
@@ -131,6 +131,7 @@ project(":ios") {
compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion" compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios" compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios"
compileOnly project(":annotations")
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 B

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io page with PC downloads and web version
text.link.google-play.description = Google Play store listing text.link.google-play.description = Google Play store listing
text.link.wiki.description = Official Mindustry wiki text.link.wiki.description = Official Mindustry wiki
text.linkfail = Failed to open link\!\nThe URL has been copied to your clipboard. text.linkfail = Failed to open link\!\nThe URL has been copied to your clipboard.
text.editor.web = The web version does not support the editor\!\nDownload the game to use it.
text.web.unsupported = The web version does not support this feature\! Download the game to use it.
text.gameover = Game Over text.gameover = Game Over
text.gameover.pvp = The[accent] {0}[] team is victorious\! text.gameover.pvp = The[accent] {0}[] team is victorious\!
text.sector.gameover = This sector has been lost. Re-deploy? text.sector.gameover = This sector has been lost. Re-deploy?
@@ -263,7 +261,7 @@ text.mapeditor = Map Editor
text.donate = Donate text.donate = Donate
text.connectfail = [crimson]Failed to connect to server\:\n\n[accent]{0} text.connectfail = [crimson]Failed to connect to server\:\n\n[accent]{0}
text.error.unreachable = Server unreachable. text.error.unreachable = Server unreachable.\nIs the address spelled correctly?
text.error.invalidaddress = Invalid address. text.error.invalidaddress = Invalid address.
text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct! text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct!
text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry! text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry!
@@ -290,6 +288,7 @@ text.no = No
text.info.title = Info text.info.title = Info
text.error.title = [crimson]An error has occured text.error.title = [crimson]An error has occured
text.error.crashtitle = An error has occured text.error.crashtitle = An error has occured
text.blocks.unknown=[LIGHT_GRAY]???
text.blocks.blockinfo = Block Info text.blocks.blockinfo = Block Info
text.blocks.powercapacity = Power Capacity text.blocks.powercapacity = Power Capacity
text.blocks.powershot = Power/Shot text.blocks.powershot = Power/Shot
@@ -408,8 +407,6 @@ mode.waves.name = waves
mode.waves.description = the normal mode. limited resources and automatic incoming waves. mode.waves.description = the normal mode. limited resources and automatic incoming waves.
mode.sandbox.name = sandbox mode.sandbox.name = sandbox
mode.sandbox.description = infinite resources and no timer for waves. mode.sandbox.description = infinite resources and no timer for waves.
mode.custom.warning = [scarlet]UNLOCKS IN CUSTOM GAMES OR SERVERS ARE NOT SAVED.[]\n\nPlay in sectors to unlock things.
mode.custom.warning.read = Just to make sure you've read it\:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES\!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is)
mode.freebuild.name = freebuild mode.freebuild.name = freebuild
mode.freebuild.description = limited resources and no timer for waves. mode.freebuild.description = limited resources and no timer for waves.
mode.pvp.name = PvP mode.pvp.name = PvP
@@ -497,6 +494,7 @@ text.mech.ability = [LIGHT_GRAY]Ability\: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity\: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity\: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosity\: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosity\: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperature\: {0} text.liquid.temperature = [LIGHT_GRAY]Temperature\: {0}
block.constructing = {0} [LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = Core block.core.name = Core
block.metalfloor.name = Metal Floor block.metalfloor.name = Metal Floor
@@ -504,16 +502,16 @@ block.deepwater.name = deepwater
block.water.name = water block.water.name = water
block.lava.name = lava block.lava.name = lava
block.tar.name = Tar block.tar.name = Tar
block.blackstone.name = blackstone block.blackstone.name = Black Stone
block.stone.name = stone block.stone.name = Stone
block.dirt.name = dirt block.dirt.name = Dirt
block.sand.name = sand block.sand.name = Sand
block.ice.name = ice block.ice.name = Ice
block.snow.name = snow block.snow.name = Snow
block.grass.name = grass block.grass.name = Grass
block.shrub.name = shrub block.shrub.name = Shrub
block.rock.name = rock block.rock.name = Rock
block.blackrock.name = blackrock block.blackrock.name = Black Rock
block.icerock.name = icerock block.icerock.name = icerock
block.copper-wall.name = Copper Wall block.copper-wall.name = Copper Wall
block.copper-wall-large.name = Large Copper Wall block.copper-wall-large.name = Large Copper Wall
@@ -755,7 +753,7 @@ block.ghoul-factory.description = Produces heavy carpet bombers.
block.dagger-factory.description = Produces basic ground units. block.dagger-factory.description = Produces basic ground units.
block.titan-factory.description = Produces advanced, armored ground units. block.titan-factory.description = Produces advanced, armored ground units.
block.fortress-factory.description = Produces heavy artillery ground units. block.fortress-factory.description = Produces heavy artillery ground units.
block.revenant-factory.description = Produces heavy laser ground units. block.revenant-factory.description = Produces heavy laser air units.
block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. block.repair-point.description = Continuously heals the closest damaged unit in its vicinity.
block.command-center.description = Allows changing friendly AI behavior. Currently, attack, retreat and patrol commands are supported. block.command-center.description = Allows changing friendly AI behavior. Currently, attack, retreat and patrol commands are supported.
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits.

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io Seite mit Downloads und der Web-Version
text.link.google-play.description = Google Play Store Seite text.link.google-play.description = Google Play Store Seite
text.link.wiki.description = Offizelles Mindustry Wiki text.link.wiki.description = Offizelles Mindustry Wiki
text.linkfail = Fehler beim Öffnen des Links!\nDie URL wurde in die Zwischenablage kopiert. text.linkfail = Fehler beim Öffnen des Links!\nDie URL wurde in die Zwischenablage kopiert.
text.editor.web = Die Web-Version unterstützt den Editor nicht!\nLade das Spiel herunter um ihn zu benutzen.
text.web.unsupported = Die Web-Version unterstützt dieses Feature nicht! Lade das Spiel herunter um es zu benutzen.
text.gameover = Der Kern wurde zerstört. text.gameover = Der Kern wurde zerstört.
text.gameover.pvp = Das[accent] {0}[] Team ist siegreich! text.gameover.pvp = Das[accent] {0}[] Team ist siegreich!
text.sector.gameover = Du hast diesen Sektor verloren. Erneuter Einsatz? text.sector.gameover = Du hast diesen Sektor verloren. Erneuter Einsatz?
@@ -267,6 +265,7 @@ text.error.invalidaddress = Ungültige Adresse.
text.error.timedout = Zeitüberschreitung!\nStelle sicher, dass die Portweiterleitung auf dem Host richtig eingerichtet ist, und die Adresse stimmt! text.error.timedout = Zeitüberschreitung!\nStelle sicher, dass die Portweiterleitung auf dem Host richtig eingerichtet ist, und die Adresse stimmt!
text.error.mismatch = Paketfehler:\nClient und Server passen möglicherweise nicht zusammen.\nStelle sicher, dass du und der Host jeweils die neueste Version von Mindustry haben! text.error.mismatch = Paketfehler:\nClient und Server passen möglicherweise nicht zusammen.\nStelle sicher, dass du und der Host jeweils die neueste Version von Mindustry haben!
text.error.alreadyconnected = Bereits verbunden. text.error.alreadyconnected = Bereits verbunden.
text.error.mapnotfound = Map file not found!
text.error.any = Unbekannter Netzwerkfehler. text.error.any = Unbekannter Netzwerkfehler.
text.settings.language = Sprache text.settings.language = Sprache
text.settings.reset = Auf Standard zurücksetzen text.settings.reset = Auf Standard zurücksetzen
@@ -369,6 +368,7 @@ setting.musicvol.name = Musiklautstärke
setting.mutemusic.name = Musik stummschalten setting.mutemusic.name = Musik stummschalten
setting.sfxvol.name = Audioeffekt-Lautstärke setting.sfxvol.name = Audioeffekt-Lautstärke
setting.mutesound.name = Audioeffekte stummschalten setting.mutesound.name = Audioeffekte stummschalten
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Tasten zuweisen text.keybind.title = Tasten zuweisen
category.general.name = Allgemein category.general.name = Allgemein
category.view.name = Ansicht category.view.name = Ansicht
@@ -493,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Fähigkeit: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Wärmekapazität: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Wärmekapazität: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viskosität: {0} text.liquid.viscosity = [LIGHT_GRAY]Viskosität: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperatur: {0} text.liquid.temperature = [LIGHT_GRAY]Temperatur: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Gegnerischer Startpunkt block.spawn.name = Gegnerischer Startpunkt
block.core.name = Basis block.core.name = Basis
block.metalfloor.name = Metallboden block.metalfloor.name = Metallboden
@@ -622,7 +623,7 @@ block.rtg-generator.name = RTG Generator
block.spectre.name = Spectre block.spectre.name = Spectre
block.meltdown.name = Meltdown block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.core.description = The most important building in the game. block.core.description = Das wichtigste Gebäude im Spiel
team.blue.name = Blau team.blue.name = Blau
team.red.name = Rot team.red.name = Rot
team.orange.name = Orange team.orange.name = Orange
@@ -650,8 +651,8 @@ tutorial.begin = Deine Mission ist es den [LIGHT_GRAY]Gegner[] auszurotten.\n\n
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 von Ressourcen ist ineffizient.\n[accent]Bohrer[] können automatisch abbauen.\n Platziere einen auf einem Kupfer Vorkommen.
tutorial.conveyor = [accent]Transportbänder[] werden dazu benutzt Materialien zum Kern zu transportieren.\n Erstelle eine Reihe von Transportbändern zum Kern. tutorial.conveyor = [accent]Transportbänder[] werden dazu benutzt Materialien zum Kern zu transportieren.\n Erstelle eine Reihe von Transportbändern zum Kern.
tutorial.morecopper = Du brauchst [accent]mehr Kupfer[]!\n\nEntweder du baust es manuell ab, oder du platzierst weitere Bohrer. tutorial.morecopper = Du brauchst [accent]mehr Kupfer[]!\n\nEntweder du baust es manuell ab, oder du platzierst weitere Bohrer.
tutorial.Geschützturm = Wir benötigen Verteidigung gegen den [LIGHT_GRAY] Gegner[].\n Baue einen Duo Turm nahe deiner Basis. tutorial.turret = Defensive structures must be built to repel the[LIGHT_GRAY] enemy[].\nBuild a duo turret near your base.
tutorial.drillGeschützturm = Der Duo Turm benötigt[accent] Kupfer[] als Munition. Platziere einen Bohrer neben dem Turm, um ihn mit Kupfer zu versorgen. tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill next to the turret to supply it with mined copper.
tutorial.waves = 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. Bau mehr Türme.
tutorial.lead = Mehr Erz ist verfügbar. Finde Blei und bau es ab.\n\n Klicke auf deine Einheit und ziehe die Maus auf den Kern um Ressourcen zu übertragen. tutorial.lead = Mehr Erz ist verfügbar. Finde Blei und bau es ab.\n\n Klicke auf deine Einheit und ziehe die Maus auf den Kern um Ressourcen zu übertragen.
tutorial.smelter = Kupfer und Blei sind schwache Metalle.\n Super [accent]dichte Legierung [] kann in einem Schmeltzer erzeugt werden.\n\n Bau einen. tutorial.smelter = Kupfer und Blei sind schwache Metalle.\n Super [accent]dichte Legierung [] kann in einem Schmeltzer erzeugt werden.\n\n Bau einen.
@@ -667,7 +668,6 @@ tutorial.daggerfactory = Konstruiere eine Dagger Mech Fabrik.\n\n Diese wird ver
tutorial.router = Fabriken benötigen Ressourcen um zu funktionieren.\n Platziere ein Router um Materialien auf Transportbändern aufzuteilen. tutorial.router = Fabriken benötigen Ressourcen um zu funktionieren.\n Platziere ein Router um Materialien auf Transportbändern aufzuteilen.
tutorial.dagger = Verbinde die Fabrik mit einem Stromknoten. Wenn alle Voraussetzungen gegeben sind, beginnt die Fabrik Mechs zu konstruieren.\n\n Platziere mehr Bohrer und Transportbänder um die Versorgung der Fabrik zu sichern. tutorial.dagger = Verbinde die Fabrik mit einem Stromknoten. Wenn alle Voraussetzungen gegeben sind, beginnt die Fabrik Mechs zu konstruieren.\n\n Platziere mehr Bohrer und Transportbänder um die Versorgung der Fabrik zu sichern.
tutorial.battle = Der[LIGHT_GRAY] Gegner[] hat seinen Kern offenbart.\nZerstöre ihn mit deiner Einheit und den Dagger Mechs. tutorial.battle = Der[LIGHT_GRAY] Gegner[] hat seinen Kern offenbart.\nZerstöre ihn mit deiner Einheit und den Dagger Mechs.
block.core.description = Das wichtigste Gebäude im Spiel
block.copper-wall.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen. block.copper-wall.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen.
block.copper-wall-large.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen.\nBenötigt mehrere Kacheln. block.copper-wall-large.description = Ein günstiger Verteidigungsblock.\nNützlich, um die Basis und Türme in den ersten Wellen zu beschützen.\nBenötigt mehrere Kacheln.
block.dense-alloy-wall.description = Ein Standard-Verteidigungsblock.\nAngemessener Schutz vor Feinden. block.dense-alloy-wall.description = Ein Standard-Verteidigungsblock.\nAngemessener Schutz vor Feinden.

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io es la página donde podes descargar las
text.link.google-play.description = Ficha en la Google Play Store text.link.google-play.description = Ficha en la Google Play Store
text.link.wiki.description = Wiki oficial de Mindustry text.link.wiki.description = Wiki oficial de Mindustry
text.linkfail = ¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles. text.linkfail = ¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles.
text.editor.web = ¡La versión web no es compatible con el editor!\nDescarga el juego para usarlo.
text.web.unsupported = ¡La versión web no soporta esta característica! Descarga el juego para poder usarla.
text.gameover = Tu núcleo ha sido destruido. text.gameover = Tu núcleo ha sido destruido.
text.gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! text.gameover.pvp = ¡El equipo[accent] {0}[] ha ganado!
text.sector.gameover = Este sector ha sido perdido. ¿Re-desplegar? text.sector.gameover = Este sector ha sido perdido. ¿Re-desplegar?
@@ -184,7 +182,7 @@ text.changelog.title = Registro de Parches
text.changelog.loading = Consiguiendo el registro de parches... text.changelog.loading = Consiguiendo el registro de parches...
text.changelog.error.android = [accent]¡Nota: el registro de parches a veces no funciona en Android 4.4 o inferior!\nEsto es por un error interno de Android. text.changelog.error.android = [accent]¡Nota: el registro de parches a veces no funciona en Android 4.4 o inferior!\nEsto es por un error interno de Android.
text.changelog.error.ios = [accent]El registro de parches no está actualmente soportado para iOS. text.changelog.error.ios = [accent]El registro de parches no está actualmente soportado para iOS.
text.changelog.error = [scarlet]¡Error consiguiendo el registro de parches!\Comprueba tu conexión a Internet. text.changelog.error = [scarlet]¡Error consiguiendo el registro de parches!Comprueba tu conexión a Internet.
text.changelog.current = [yellow][[Versión actual] text.changelog.current = [yellow][[Versión actual]
text.changelog.latest = [accent][[Última version] text.changelog.latest = [accent][[Última version]
text.loading = [accent]Cargando... text.loading = [accent]Cargando...
@@ -370,6 +368,7 @@ setting.musicvol.name = Volumen de la Música
setting.mutemusic.name = Silenciar Musica setting.mutemusic.name = Silenciar Musica
setting.sfxvol.name = Volumen de los efectos de sonido setting.sfxvol.name = Volumen de los efectos de sonido
setting.mutesound.name = Silenciar Sonido setting.mutesound.name = Silenciar Sonido
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Reasignar Teclas text.keybind.title = Reasignar Teclas
category.general.name = General category.general.name = General
category.view.name = Visión category.view.name = Visión
@@ -452,7 +451,7 @@ liquid.oil.name = Petróleo
liquid.cryofluid.name = Criogénico liquid.cryofluid.name = Criogénico
mech.alpha-mech.name = Alpha mech.alpha-mech.name = Alpha
mech.alpha-mech.weapon = Repetidor Pesado mech.alpha-mech.weapon = Repetidor Pesado
mech.alpha-mech.ability = Drone Swarm mech.alpha-mech.ability = Enjambre de Drones
mech.alpha-mech.description = El mecanoide estándar. Tiene velocidad y daño decentes, puede crear hasta 3 drones para poder ofensivo incremenado. mech.alpha-mech.description = El mecanoide estándar. Tiene velocidad y daño decentes, puede crear hasta 3 drones para poder ofensivo incremenado.
mech.delta-mech.name = Delta mech.delta-mech.name = Delta
mech.delta-mech.weapon = Generador de arco mech.delta-mech.weapon = Generador de arco
@@ -463,7 +462,7 @@ mech.tau-mech.weapon = Láser de reestructuración
mech.tau-mech.ability = Repair Burst mech.tau-mech.ability = Repair Burst
mech.tau-mech.description = El mecanoide de soporte. Repara bloques aliados disparándolos. Puede extinguir el fuego y reparar aliados en un rango con su habilidad de reparación. mech.tau-mech.description = El mecanoide de soporte. Repara bloques aliados disparándolos. Puede extinguir el fuego y reparar aliados en un rango con su habilidad de reparación.
mech.omega-mech.name = Omega mech.omega-mech.name = Omega
mech.omega-mech.weapon = Swarm Missiles mech.omega-mech.weapon = Enjambre de misiles
mech.omega-mech.ability = Armored Configuration mech.omega-mech.ability = Armored Configuration
mech.omega-mech.description = Un mecanoide grande y bien armado, hecho para asaltos en primera línea. Su habilidad de armadura puede bloquear hasta el 90% del daño que recibe. mech.omega-mech.description = Un mecanoide grande y bien armado, hecho para asaltos en primera línea. Su habilidad de armadura puede bloquear hasta el 90% del daño que recibe.
mech.dart-ship.name = Dardo mech.dart-ship.name = Dardo
@@ -471,7 +470,7 @@ mech.dart-ship.weapon = Repetidor
mech.dart-ship.description = La nave normal. Bastante ligera y rápida, pero tiene poca capacidad ofensiva y baja velocidad minado. mech.dart-ship.description = La nave normal. Bastante ligera y rápida, pero tiene poca capacidad ofensiva y baja velocidad minado.
mech.javelin-ship.name = Jabalina mech.javelin-ship.name = Jabalina
mech.javelin-ship.description = Una nave de ataque y retirada. Aunque inicialmente lento, puede acelerar a altas velocidades y volar sobre puestos enemigos, causando gran daño con su habilidad de rayos y misiles. mech.javelin-ship.description = Una nave de ataque y retirada. Aunque inicialmente lento, puede acelerar a altas velocidades y volar sobre puestos enemigos, causando gran daño con su habilidad de rayos y misiles.
mech.javelin-ship.weapon = Burst Missiles mech.javelin-ship.weapon = Ráfaga de misiles
mech.javelin-ship.ability = Discharge Booster mech.javelin-ship.ability = Discharge Booster
mech.trident-ship.name = Tridente mech.trident-ship.name = Tridente
mech.trident-ship.description = Un bombardero pesado. Razonablemente bien equipado. mech.trident-ship.description = Un bombardero pesado. Razonablemente bien equipado.
@@ -494,24 +493,25 @@ text.mech.ability = [LIGHT_GRAY]Hablidad: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0} text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Punto de generación block.spawn.name = Punto de generación
block.core.name = núcleo block.core.name = Núcleo
block.metalfloor.name = Suelo de Metal block.metalfloor.name = Suelo de Metal
block.deepwater.name = aguas profundas block.deepwater.name = Aguas profundas
block.water.name = agua block.water.name = Agua
block.lava.name = lava block.lava.name = Lava
block.tar.name = Tar block.tar.name = Tar
block.blackstone.name = piedra negra block.blackstone.name = Piedra negra
block.stone.name = piedra block.stone.name = Piedra
block.dirt.name = tierra block.dirt.name = Tierra
block.sand.name = arena block.sand.name = Arena
block.ice.name = hielo block.ice.name = Hielo
block.snow.name = nieve block.snow.name = Nieve
block.grass.name = pasto block.grass.name = Pasto
block.shrub.name = arbusto block.shrub.name = Arbusto
block.rock.name = roca block.rock.name = Roca
block.blackrock.name = roca negra block.blackrock.name = Roca negra
block.icerock.name = roca de hielo block.icerock.name = Roca de hielo
block.copper-wall.name = Muro de cobre block.copper-wall.name = Muro de cobre
block.copper-wall-large.name = Muro de cobre grande block.copper-wall-large.name = Muro de cobre grande
block.dense-alloy-wall.name = Muro de aleación densa block.dense-alloy-wall.name = Muro de aleación densa
@@ -567,10 +567,10 @@ block.omega-mech-pad.name = Pad de mecanoide Omega
block.tau-mech-pad.name = Pad de mecanoide Tau block.tau-mech-pad.name = Pad de mecanoide Tau
block.conduit.name = Conducto block.conduit.name = Conducto
block.mechanical-pump.name = Bomba Mecánica block.mechanical-pump.name = Bomba Mecánica
block.itemsource.name = Objeto Fuente block.itemsource.name = Fuente de objetos
block.itemvoid.name = Objeto Vacío block.itemvoid.name = Vacío de objetos
block.liquidsource.name = Líquido Fuente block.liquidsource.name = Fuente de líquidos
block.powervoid.name = Energía Vacía block.powervoid.name = Vacío de energía
block.powerinfinite.name = Energía Infinita block.powerinfinite.name = Energía Infinita
block.unloader.name = Descargador block.unloader.name = Descargador
block.vault.name = Bóveda block.vault.name = Bóveda
@@ -599,7 +599,7 @@ block.repair-point.name = Punto de Reparación
block.pulse-conduit.name = Conducto de Pulso block.pulse-conduit.name = Conducto de Pulso
block.phase-conduit.name = Conducto de Fase block.phase-conduit.name = Conducto de Fase
block.liquid-router.name = Enrutador de Líquidos block.liquid-router.name = Enrutador de Líquidos
block.liquid-tank.name = Tanque de Líquido block.liquid-tank.name = Tanque de Líquidos
block.liquid-junction.name = Cruce de Líquidos block.liquid-junction.name = Cruce de Líquidos
block.bridge-conduit.name = Conducto Puente block.bridge-conduit.name = Conducto Puente
block.rotary-pump.name = Bomba Rotatoria block.rotary-pump.name = Bomba Rotatoria
@@ -620,15 +620,16 @@ block.overdrive-projector.name = Overdrive Projector
block.force-projector.name = Force Projector block.force-projector.name = Force Projector
block.arc.name = Arc block.arc.name = Arc
block.rtg-generator.name = Generador RTG block.rtg-generator.name = Generador RTG
block.spectre.name = Spectre block.spectre.name = Espectro
block.meltdown.name = Meltdown block.meltdown.name = Meltdown
block.container.name = Contenedor block.container.name = Contenedor
team.blue.name = azul block.core.description = The most important building in the game.
team.red.name = rojo team.blue.name = Azul
team.orange.name = naranja team.red.name = Rojo
team.none.name = gris team.orange.name = Naranja
team.green.name = verde team.none.name = Gris
team.purple.name = púrpura team.green.name = Verde
team.purple.name = Púrpura
unit.alpha-drone.name = Dron Alpha unit.alpha-drone.name = Dron Alpha
unit.spirit.name = Dron Espíritu unit.spirit.name = Dron Espíritu
unit.spirit.description = El dron del comienzo. Aparece en el núcleo por defecto. Mina automáticamente minerales, recoge objetos y repara bloques. unit.spirit.description = El dron del comienzo. Aparece en el núcleo por defecto. Mina automáticamente minerales, recoge objetos y repara bloques.
@@ -743,7 +744,6 @@ block.javelin-ship-pad.description = Deja tu nave actual y transfórmate en una
block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él. block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él.
block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él. block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él.
block.delta-mech-pad.description = 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 = 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.
Deja tu nave actual y transfórmate en un mecanoide rápido, con armas ligeras hecho para ataques de ataque y retirada.\nUsa el pad tocándolo dos veces mientras estás en él.
block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él. block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él.
block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques. block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques.
block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu. block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu.

View File

@@ -8,9 +8,7 @@ text.link.trello.description = Trello officiel pour les futurs ajouts .
text.link.itch.io.description = page itch.io avec le lien du téléchargement pour PC et la version web . text.link.itch.io.description = page itch.io avec le lien du téléchargement pour PC et la version web .
text.link.google-play.description = listing par le store google play text.link.google-play.description = listing par le store google play
text.link.wiki.description = wiki officiel de mindustry . text.link.wiki.description = wiki officiel de mindustry .
text.linkfail = Failed to open link!\nThe URL has been copied to your cliboard. text.linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copié avec succès.
text.editor.web = The web version does not support the editor!\nDownload the game to use it.
text.web.unsupported = La version web ne supporte pas cette fonction ! Téléchargez le jeu pour l'utiliser.
text.gameover = Partie terminée. text.gameover = Partie terminée.
text.gameover.pvp = L'équipe [accent] {0}[] a gagnée ! text.gameover.pvp = L'équipe [accent] {0}[] a gagnée !
text.sector.gameover = Ce secteur a été perdu. Réessayer? text.sector.gameover = Ce secteur a été perdu. Réessayer?
@@ -64,7 +62,7 @@ text.mission.linknode = Reliez un transmetteur
text.mission.display = [accent]Mission:\n[LIGHT_GRAY]{0} text.mission.display = [accent]Mission:\n[LIGHT_GRAY]{0}
text.mission.mech = Équiper ce mécha[accent] {0}[] text.mission.mech = Équiper ce mécha[accent] {0}[]
text.mission.create = Créez[accent] {0}[] text.mission.create = Créez[accent] {0}[]
text.none = <none> text.none = <vide>
text.close = Fermer text.close = Fermer
text.quit = Quitter text.quit = Quitter
text.maps = Cartes text.maps = Cartes
@@ -262,13 +260,13 @@ text.editor = Éditeur
text.mapeditor = Éditeur de carte text.mapeditor = Éditeur de carte
text.donate = Faire un\ndon text.donate = Faire un\ndon
text.connectfail = [crimson]Échec de la connexion au serveur : [accent]{0} text.connectfail = [crimson]Échec de la connexion au serveur : [accent]{0}
text.error.unreachable = Server unreachable. text.error.unreachable = Server injoignable.
text.error.invalidaddress = Invalid address. text.error.invalidaddress = Adresse invalide.
text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct! text.error.timedout = Délai de connexion dépassé!\nAssurez-vous que l'hôte a autorisé l'accès au port, et que l'adresse soit correcte!
text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry! text.error.mismatch = Erreur de paquet:\nPossible différence de verison entre le client et le serveur .\nVérifiez que vous et l'hôte avez la plus récente version de Mindustry !
text.error.alreadyconnected = Already connected. text.error.alreadyconnected = Déjà connecté.
text.error.mapnotfound = Map file not found! text.error.mapnotfound = Fichier de la carte introuvable!
text.error.any = Unkown network error. text.error.any = Erreur réseau inconnue.
text.settings.language = Langage text.settings.language = Langage
text.settings.reset = Valeur par défaut. text.settings.reset = Valeur par défaut.
text.settings.rebind = Réatttribuer text.settings.rebind = Réatttribuer
@@ -370,6 +368,7 @@ setting.musicvol.name = volume de la musique
setting.mutemusic.name = Couper la musique setting.mutemusic.name = Couper la musique
setting.sfxvol.name = Volume des SFX setting.sfxvol.name = Volume des SFX
setting.mutesound.name = Couper les SFX setting.mutesound.name = Couper les SFX
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Paramétrer les touches text.keybind.title = Paramétrer les touches
category.general.name = General category.general.name = General
category.view.name = Voir category.view.name = Voir
@@ -417,7 +416,7 @@ content.unit.name = Unités
content.recipe.name = Blocs content.recipe.name = Blocs
content.mech.name = Méchas content.mech.name = Méchas
item.stone.name = Pierre item.stone.name = Pierre
item.stone.description = Un matériau brut commun. Peut-être séparé et raffiné en d'autres matériaux, ou fondus en lave. item.stone.description = Un matériau brut commun. Peut être séparé et raffiné en d'autres matériaux, ou fondu en lave.
item.copper.name = Cuivre item.copper.name = Cuivre
item.copper.description = Un matériau de construction utile.Utilisé intensivement dans tout les blocs. item.copper.description = Un matériau de construction utile.Utilisé intensivement dans tout les blocs.
item.lead.name = Plomb item.lead.name = Plomb
@@ -434,10 +433,10 @@ item.silicon.name = Silicone
item.silicon.description = Un matériau semi-conducteur extrêmement utile, avec des utilisations dans les panneaux solaires et beaucoup d'autre composants électroniques complexes. item.silicon.description = Un matériau semi-conducteur extrêmement utile, avec des utilisations dans les panneaux solaires et beaucoup d'autre composants électroniques complexes.
item.plastanium.name = Plastanium item.plastanium.name = Plastanium
item.plastanium.description = Un matériau léger et docile utilisé dans l'aviation avancée et dans les munitions à fragmentation. item.plastanium.description = Un matériau léger et docile utilisé dans l'aviation avancée et dans les munitions à fragmentation.
item.phase-fabric.name = Phase Fabric item.phase-fabric.name = Tissu phasé
item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.phase-fabric.description = Une substance au poids quasiment inexistant utilisé pour l'électronique avancé et la technologie auto-réparatrice.
item.surge-alloy.name = alliage superchargé item.surge-alloy.name = alliage superchargé
item.surge-alloy.description = An advanced alloy with unique electrical properties. item.surge-alloy.description = Un alliage avancé avec des propriétés électriques avancées.
item.biomatter.name = Biomasse item.biomatter.name = Biomasse
item.biomatter.description = Un mélange de matières organiques; utilisé pour la transformation en huile ou en tant que carburant de base. item.biomatter.description = Un mélange de matières organiques; utilisé pour la transformation en huile ou en tant que carburant de base.
item.sand.name = Sable item.sand.name = Sable
@@ -494,13 +493,14 @@ text.mech.ability = [LIGHT_GRAY]Compétence: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0}
text.liquid.temperature = [LIGHT_GRAY]Température: {0} text.liquid.temperature = [LIGHT_GRAY]Température: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Générateur d'ennemi block.spawn.name = Générateur d'ennemi
block.core.name = Base block.core.name = Base
block.metalfloor.name = Sol en métal block.metalfloor.name = Sol en métal
block.deepwater.name = eau profonde block.deepwater.name = eau profonde
block.water.name = eau block.water.name = eau
block.lava.name = lave block.lava.name = lave
block.tar.name = Tar block.tar.name = pétrole
block.blackstone.name = roche sombre block.blackstone.name = roche sombre
block.stone.name = roche block.stone.name = roche
block.dirt.name = terre block.dirt.name = terre
@@ -623,7 +623,7 @@ block.rtg-generator.name = G.T.R.
block.spectre.name = Spectre block.spectre.name = Spectre
block.meltdown.name = Meltdown block.meltdown.name = Meltdown
block.container.name = Conteneur block.container.name = Conteneur
block.core.description = The most important building in the game. block.core.description = Le batiment le plus important du jeu .
team.blue.name = bleu team.blue.name = bleu
team.red.name = rouge team.red.name = rouge
team.orange.name = orange team.orange.name = orange
@@ -668,113 +668,113 @@ tutorial.daggerfactory = Construire [accent]une usine de "Poignards" []est recom
tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets. tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets.
tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire. tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire.
tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base .\nDétruisez la avec votre unité et des méchas "Poignard". tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base .\nDétruisez la avec votre unité et des méchas "Poignard".
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves. block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles dans les premières lors des premières vagues.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles. block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles dans les premières lors des premières vagues.\nFait du 2 sur 2.
block.dense-alloy-wall.description = A standard defensive block.\nAdequate protection from enemies. block.dense-alloy-wall.description = Un bloc défensif standard .\nProcure une bonne protection contre les ennemis.
block.dense-alloy-wall-large.description = A standard defensive block.\nAdequate protection from enemies.\nSpans multiple tiles. block.dense-alloy-wall-large.description = Un bloc défensif standard .\nProcure une bonne protection contre les ennemis.\nFait du 2 sur 2.
block.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les ennemis.
block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.thorium-wall-large.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les ennemis.\nFait du 2 sur 2.
block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. block.phase-wall.description = Moins puissant qu'un mur en Thorium mais déviera les balles sauf si elles sont trop puissantes.
block.phase-wall-large.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful.\nSpans multiple tiles. block.phase-wall-large.description = Moins puissant qu'un mur en Thorium mais déviera les balles sauf si elles sont trop puissantes.\nFait du 2 sur 2.
block.surge-wall.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker. block.surge-wall.description = Le plus puissant bloc défensif .\nA une faible chance de créer des éclairs vers les ennemis .
block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.surge-wall-large.description = Le plus puissant bloc défensif .\nA une faible chance de créer des éclairs vers les ennemis .\nFait du 2 sur 2.
block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door.description = Une petite porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte les ennemis peuvent tirer et passer à travers.
block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\nSpans multiple tiles. block.door-large.description = Une large porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte les ennemis peuvent tirer et passer à travers.\nFait du 2 sur 2.
block.mend-projector.description = Periodically heals buildings in its vicinity. block.mend-projector.description = Soigne périodiquement les batiments autour de lui.
block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.overdrive-projector.description = Accélère les batiments autour de lui, notamment les foreuses et les convoyeurs.
block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.force-projector.description = Crée un champ de force hexagonal autour de lui qui protège les batiments et les unités à l'intérieur de prendre des dégâts à cause des balles.
block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.shock-mine.description = Blesse les ennemis qui marchent dessus. Quasiment invisble pour l'ennemi.
block.duo.description = A small, cheap turret. block.duo.description = une petite tourelle avec un coût faible .
block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.arc.description = une petite tourelle tirant des arcs électrques vers les ennemis.
block.hail.description = A small artillery turret. block.hail.description = une petite tourelle d'artillerie.
block.lancer.description = A medium-sized turret which shoots charged electricity beams. block.lancer.description = une tourelle de taille moyenne tirant des rayons chargés en électricité.
block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. block.wave.description = une tourelle de taille moyenne tirant rapidement des bulles de liquide .
block.salvo.description = A medium-sized turret which fires shots in salvos. block.salvo.description = une tourelle de taille moyenne qui tire par salves.
block.swarmer.description = A medium-sized turret which shoots burst missiles. block.swarmer.description = une tourelle de taille moyenne qui tire des missiles qui se dispersent.
block.ripple.description = A large artillery turret which fires several shots simultaneously. block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs tirs simultanément.
block.cyclone.description = A large rapid fire turret. block.cyclone.description = Une grande tourelle tirant rapidement ... très rapidement .
block.fuse.description = A large turret which shoots powerful short-range beams. block.fuse.description = Une grande tourelle qui tire de puissants rayons lasers avec une faible portée.
block.spectre.description = A large turret which shoots two powerful bullets at once. block.spectre.description = Une grande tourelle qui tire deux puissantes balles simultanément.
block.meltdown.description = A large turret which shoots powerful long-range beams. block.meltdown.description = Une grande tourelle tirant de puissants rayons lasers avec une grande portée.
block.conveyor.description = Basic item transport block. Moved items forward and automatically deposits them into turrets or crafters. Rotatable. block.conveyor.description = Convoyeur basique servant à transporter des objets. Les objets déplacés en avant sont automatiquement déposés dans les tourelles ou les batiments. Peut être tourné.
block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. block.titanium-conveyor.description = Convoyeur avancé . Déplace les objets plus rapidement que les convoyeurs standards.
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 = convoyeur très avancé . Utilise de l'énergie pour téléporter des objets à un convoyeur phasé connecté jusqu'à une longue distance .
block.junction.description = 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 = Agit comme un pont pour deux ligne de convoyeurs se croisant. Utile lorsque deux différents convoyeurs déplacent différents matériaux à différents endroits.
block.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 = Batiment de transport d'objet [accent]ultime[]. Collecte un grand nombre d'objets puis les tire à un autre transporteur de masse sur une très longue distance.
block.smelter.description = Burns coal for smelting copper and lead into dense alloy. block.smelter.description = Brûle du charbon pour fondre du cuivre et du plomb en un alliage lourd.
block.arc-smelter.description = Smelts copper and lead into dense alloy by using an external power source. block.arc-smelter.description = Fait fondre du cuivre et du plomb en un alliage lourd en utilisant une source d'énergie extérieure .
block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon. block.silicon-smelter.description = Utilise du sable, du charbon et de l'énergie afin de produire du silicone.
block.plastanium-compressor.description = Produces plastanium from oil and titanium. block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane.
block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. block.phase-weaver.description = Produit du tissu phasé à partir de thorium et de grandes quantités de sable.
block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. block.alloy-smelter.description = Produit un alliage superchargé à l'aide de titane de plomb de silicone et de cuivre.
block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. block.pulverizer.description = Écrase la pierre pour en faire du sable. Utile quand il y a un manque de sable naturel.
block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. block.pyratite-mixer.description = Mélange charbon, plomb et sable en l'hautement inflammable pyratite.
block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. block.blast-mixer.description = Utilise du pétrole pour transformer la pyratite en un mélange explosif moins inflammable mais plus explosif que la pyratite.
block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. block.cryofluidmixer.description = Combine de l'eau et du titane en un liquide cryogénique bien plus efficace pour refroidir.
block.solidifer.description = Cools lava to stone at a fast pace. block.solidifer.description = Refroidit de la lave en pierre très rapidement.
block.melter.description = Heats up stone to very high temperatures to obtain lava. block.melter.description = chauffe de la pierre à de très hautes températures pour obtenir de la lave.
block.incinerator.description = Gets rid of any excess item or liquid. block.incinerator.description = Permet de se débarasser de n'importe quel objet ou liquide en exces .
block.biomattercompressor.description = Compresses biomatter in order to retrieve oil. block.biomattercompressor.description = Compresse de la biomasse pour en récupérer le pétrole.
block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. block.separator.description = Expose la pierre à de l'eau sous pression afin d'obtenir différents minéraux contenus dansla pierre.
block.centrifuge.description = More efficient than the separator, but also more expensive to build and requires power. block.centrifuge.description = Plus efficace qu'un séparateur mais aussi plus cher à construire et demande plus d'énergie.
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node.description = Transmet l'énergie aux transmetteurs énergétiques connectés . Jusqu'à quatre sources d'énergie, consommateurs ou transmetteurs peuvent être connectés. Le transmetteur recevra de l'énergie ou le transmettra à n'importe quel batiment adjacent.
block.power-node-large.description = Has a larger radius than the power node and connects to up to six power sources, sinks or nodes. block.power-node-large.description = A un plus grand rayon que le transmetteur énergétique standard et jusqu'à six sources d'énergie, consommateurs ou transmetteurs peuvent être connectés.
block.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 = Stocke l'énergie quand elle est en abondance et le distribue si il y a trop peu d'énergie tant qu'il lui reste de l'énergie.
block.battery-large.description = Stores much more power than a regular battery. block.battery-large.description = Stocke bien plus d'énergie qu'une batterie normale.
block.combustion-generator.description = Generates power by burning oil or flammable materials. block.combustion-generator.description = Génère de l'énergie en brûlant du pétrole ou des matériaux inflammables.
block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.turbine-generator.description = Plus efficace qu'un générateur à combustion, mais requiert de l'eau .
block.thermal-generator.description = Generates a large amount of power from lava. block.thermal-generator.description = Génère une grande quantité d'énergie à partir de lave .
block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel.description = Génère une faible quantité d'énergie .
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 = Génère bien plus d'énergie qu'un panneau solaire standard, Mais est aussi bien plus cher à construire.
block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. block.thorium-reactor.description = Génère énormément d'énergie à l'aide de la radioactivité du thorium. Requiert néanmoins un refroidissement constant. Explosera violemment en cas de surchauffe.
block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.rtg-generator.description = Un générateur thermolectrique à radioisotope qui ne demande pas de refroidissement mais produit moins d'énergie qu'un réacteur à Thorium.
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 = Décharge des objets depuis des conteneurs, coffres-forts ou de la base sur un convoyeur ou directement dans un bloc adjacent . Le type d'objet peut être changé en appuyant sur le déchargeur.
block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. block.container.description = Stocke un petit nombre d'objet . Utile pour réguler le flux d'objet quand la demande de matériaux est inconstante.un [LIGHT_GRAY] déchargeur[] peut être utilisé pour récupérer des objets depuis le conteneur.
block.vault.description = Stores a large amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. block.vault.description = Stocke un grand nombre d'objets. Utile pour réguler le flux d'objet quand la demande de matériaux est inconstante.un [LIGHT_GRAY] déchargeur[] peut être utilisé pour récupérer des objets depuis le coffre-fort.
block.mechanical-drill.description = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely. block.mechanical-drill.description = Une foreuse de faible coût. Si elle est placée sur à un endroit approprié, produit des matériaux lentement à l'infini.
block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.pneumatic-drill.description = Une foreuse amélioré plus rapide et capable de forer des matériaux plus dur grâce à l'usage de vérins à air comprimé.
block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. block.laser-drill.description = Permet de forer bien plus vite grâce à la technologie laser, cela demande néanmoins de l'énergie . Additionnellement, le thorium, un matériau radioactif, peut-être récupéré avec cette foreuse.
block.blast-drill.description = The ultimate drill. Requires large amounts of power. block.blast-drill.description = La Foreuse ultime . Demande une grande quantité d'énergie .
block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.water-extractor.description = Extrait l'eau des nappes phréatiques. Utile quand il n'y a pas d'eau à proximité.
block.cultivator.description = Cultivates the soil with water in order to obtain biomatter. block.cultivator.description = Cultive le sol avec de l'eau afin d'obtenir de la biomasse.
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 = Utilise une grande quantité d'énergie afin d'extraire du pétrole du sable . Utile quand il n'y a pas de lacs de pétrole à proximité.
block.dart-ship-pad.description = Leave your current vessel and change into a basic fighter aircraft.\nUse the pad by double tapping while standing on it. block.dart-ship-pad.description = Quitte ton mécha ou ton vaisseau actuel pour un avion de combat basique .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus.
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 = Quitte ton mécha ou ton vaisseau actuel pour un bombardier lourd raisonnablement cuirassé .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus.
block.javelin-ship-pad.description = 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 = Quitte ton mécha ou ton vaisseau actuel pour un intercepteur rapide et puissant avec des armes électriques.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus.
block.glaive-ship-pad.description = 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 = Quitte ton mécha ou ton vaisseau actuel pour un large vaisseau cuirassé .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus.
block.tau-mech-pad.description = 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 = Quitte ton mécha ou ton vaisseau actuel pour un mécha de support qui peut soigner les batiments et unités alliées.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus.
block.delta-mech-pad.description = 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 = Quitte ton mécha ou ton vaisseau actuel pour un mécha rapide mais peu résistant fait pour les stratégies de harcèlement.\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus.
block.omega-mech-pad.description = 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 = Quitte ton mécha ou ton vaisseau actuel pour un mécha cuirassé et large, fait pour les assauts frontaux .\nUtilisez le reconstructeur en double cliquant dessus lorsque vous êtes dessus.
block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.spirit-factory.description = Produit des petits drones qui réparent les batiments et minent des matériaux.
block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.phantom-factory.description = Produit des drones avancés qui sont bien plus efficaces que les drones spirituels.
block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.wraith-factory.description = Produit des intercepteurs rapides qui harcèlent l'ennemi.
block.ghoul-factory.description = Produces heavy carpet bombers. block.ghoul-factory.description = Produit des bombardiers lourds.
block.dagger-factory.description = Produces basic ground units. block.dagger-factory.description = Produit des unités terrestres basiques.
block.titan-factory.description = Produces advanced, armored ground units. block.titan-factory.description = Produit des unités terrestres avancées et cuirassées.
block.fortress-factory.description = Produces heavy artillery ground units. block.fortress-factory.description = Produit des unités terrestres d'artillerie lourde .
block.revenant-factory.description = Produces heavy laser ground units. block.revenant-factory.description = Produit des unités terrestres lourdes avec des lasers.
block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. block.repair-point.description = Soigne en continu l'unité blessée la plus proche tant qu'elle est à sa portée.
block.command-center.description = Allows changing friendly AI behavior. Currently, attack, retreat and patrol commands are supported. block.command-center.description = Permet de changer le comportement des IA alliées. Pour le moment, l'attaque, la retraite et les patrouilles sont supportées.
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. block.conduit.description = tuyau basique permettant le transport de liquide . Marche comme un convoyeur mais avec les liquides. Utile si utilisé avec des extracteurs, des pompes ou d'autres conduits.
block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. block.pulse-conduit.description = tuyau avancé permettant le transport de liquide . Transporte les liquides plus rapidement et en stocke plus que les tuyaux standards.
block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. block.phase-conduit.description = tuyau très avancé permettant le transport de liquide. Utilise de l'énergie pour téléporter les liquides à un autre tuyau phasé sur une longue distance.
block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. block.liquid-router.description = Accepte les liquide en une direction et les rejete de tout les côtés équitablement. Peut aussi stocker une certaine quantité de liquide. Utile pour envoyer un liquide à plusieurs endroits.
block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. block.liquid-tank.description = Stocke une grande quantité de liquides . Utile pour réguler la sortie quand la demande est inconstante ou comme sécurité pour refroidir des batiments important.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. block.liquid-junction.description = Agit comme une intersection pour deux conduits se croisant.Utile si deux conduits amènent différents liquides à différents endroits.
block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. block.bridge-conduit.description = bloc de transport de liquide avancé . Permet le transport de liquides jusqu'à 3 blocs de n'importe quel terrain ou batiment .
block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. block.mechanical-pump.description = Une pompe de faible prix pompant lentement, mais ne consomme pas d'énergie.
block.rotary-pump.description = An advanced pump which doubles up speed by using power. block.rotary-pump.description = Une pompe avancée qui double sa vitesse en utilisant de l'énergie.
block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. block.thermal-pump.description = La pompe ultime . Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave.
block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. block.router.description = Accepte les objets depuis une ou plus directions et le renvoie dans n'importe quelle direction. Utile pour séparer une chaîne de convoyeurs en plusieurs.[accent]Le seul et l'Unique[]
block.distributor.description = An advanced router which splits items to up to 7 other directions equally. block.distributor.description = Un routeur avancé qui sépare les objets jusqu'à 7 autres directions équitablement.
block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. block.bridge-conveyor.description = bloc de transport avancé permettant de traverser jusqu'à 3 blocs de n'importe quel terrain ou batiment.
block.alpha-mech-pad.description = When given enough power, rebuilds your ship into the[accent] Alpha[] mech. block.alpha-mech-pad.description = Avec assez d'énergie, reconstruit votre vaisseau en un mécha [accent] Alpha[].
block.itemsource.description = Infinitely outputs items. Sandbox only. block.itemsource.description = Produit des objets à l'infini. Bac à sable uniquement .
block.liquidsource.description = Infinitely outputs liquids. Sandbox only. block.liquidsource.description = Source de liquide infinie . Bac à sable uniquement.
block.itemvoid.description = Destroys any items which go into it without using power. Sandbox only. block.itemvoid.description = Désintègre n'importe quel objet qui va à l'intérieur sans utiliser d'énergie. Bac à sable uniquement.
block.powerinfinite.description = Infinitely outputs power. Sandbox only. block.powerinfinite.description = Produit de l'énergie à l'infini. Bac à sable uniquement.
block.powervoid.description = Voids all power inputted into it. Sandbox only. block.powervoid.description = Supprime toute l'énergie allant à l'intérieur.Bac à sable uniquement
liquid.water.description = Commonly used for cooling machines and waste processing. liquid.water.description = Couramment utilisé pour le refroidissement et le traitement des déchets.
liquid.lava.description = Can be transformed into[LIGHT_GRAY] stone[], used for generating power or used as ammo for certain turrets. liquid.lava.description = Peut être transformé en [LIGHT_GRAY]pierre[], utilisé pour produire de l'énergie ou utilisé comme munition par certaines tourelles.
liquid.oil.description = Can be burnt, exploded or used as a coolant. liquid.oil.description = Peut être brûlé, utilisé comme explosif ou comme liquide de refroidissement.
liquid.cryofluid.description = The most efficient liquid for cooling things down. liquid.cryofluid.description = Le liquide de refroidissement le plus efficace.

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = Page web itch.io avec les versions ordinateurs t
text.link.google-play.description = Page Google Play Store du jeu text.link.google-play.description = Page Google Play Store du jeu
text.link.wiki.description = Wiki officiel de Mindustry text.link.wiki.description = Wiki officiel de Mindustry
text.linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier. text.linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier.
text.editor.web = La version web ne prend pas en charge l'éditeur !\nTéléchargez le jeu pour l'utiliser.
text.web.unsupported = La version web ne prend pas en charge cette fonctionnalité ! Téléchargez le jeu pour l'utiliser.
text.gameover = Le base a été détruit. text.gameover = Le base a été détruit.
text.gameover.pvp = L'équipe[accent] {0}[] a gagnée ! text.gameover.pvp = L'équipe[accent] {0}[] a gagnée !
text.sector.gameover = Ce secteur a été perdu. Réessayer ? text.sector.gameover = Ce secteur a été perdu. Réessayer ?
@@ -73,7 +71,7 @@ text.nextmission = Prochaine Mission
text.maps.none = [LIGHT_GRAY]Aucune carte trouvée! text.maps.none = [LIGHT_GRAY]Aucune carte trouvée!
text.about.button = À propos text.about.button = À propos
text.name = Nom: text.name = Nom:
text.filename = File Name: text.filename = Nom du fichier:
text.unlocked = Nouveau bloc debloqué! text.unlocked = Nouveau bloc debloqué!
text.unlocked.plural = Nouveaux blocs débloqués! text.unlocked.plural = Nouveaux blocs débloqués!
text.players = {0} joueurs en ligne text.players = {0} joueurs en ligne
@@ -262,13 +260,13 @@ text.editor = Éditeur
text.mapeditor = Éditeur de carte text.mapeditor = Éditeur de carte
text.donate = Faire un\ndon text.donate = Faire un\ndon
text.connectfail = [crimson]Échec de la connexion au serveur: [accent]{0} text.connectfail = [crimson]Échec de la connexion au serveur: [accent]{0}
text.error.unreachable = Server unreachable. text.error.unreachable = Serveur inaccessible.
text.error.invalidaddress = Invalid address. text.error.invalidaddress = Adresse invalide.
text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct! text.error.timedout = Expiration du délai !\nAssurez-vous que la redirection de port est configurée sur l'hôte et que l'adresse est correcte !
text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry! text.error.mismatch = Erreur de paquet:\nPossible d'incompatibilité de version client/serveur.\nAssurez-vous que l'hôte et vous disposez de la dernière version de Mindustry !
text.error.alreadyconnected = Already connected. text.error.alreadyconnected = Déjà connecté.
text.error.mapnotfound = Map file not found! text.error.mapnotfound = Fichier de carte introuvable !
text.error.any = Unkown network error. text.error.any = Erreur réseau inconnue.
text.settings.language = Langage text.settings.language = Langage
text.settings.reset = Valeur par défaut. text.settings.reset = Valeur par défaut.
text.settings.rebind = Réatttribuer text.settings.rebind = Réatttribuer
@@ -370,6 +368,7 @@ setting.musicvol.name = Volume de la musique
setting.mutemusic.name = Couper la musique setting.mutemusic.name = Couper la musique
setting.sfxvol.name = Volume des SFX setting.sfxvol.name = Volume des SFX
setting.mutesound.name = Couper les SFX setting.mutesound.name = Couper les SFX
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Paramétrer les touches text.keybind.title = Paramétrer les touches
category.general.name = Général category.general.name = Général
category.view.name = Voir category.view.name = Voir
@@ -419,9 +418,9 @@ content.mech.name = Mécha
item.stone.name = Pierre item.stone.name = Pierre
item.stone.description = Un matériau brut commun. Peut-être séparé et raffiné en d'autres matériaux, ou fondus en lave. item.stone.description = Un matériau brut commun. Peut-être séparé et raffiné en d'autres matériaux, ou fondus en lave.
item.copper.name = Cuivre item.copper.name = Cuivre
item.copper.description = Un matériau de construction utile.Utilisé intensivement dans tout les blocs. item.copper.description = Un matériau de construction utile. Utilisé intensivement dans tout les blocs.
item.lead.name = Plomb item.lead.name = Plomb
item.lead.description = Un matériau de départ . Utilisé intensivement en électronique et pour le transport de blocs. item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et pour le transport de blocs.
item.coal.name = Charbon item.coal.name = Charbon
item.coal.description = Un carburant commun et facile à obtenir. item.coal.description = Un carburant commun et facile à obtenir.
item.dense-alloy.name = Alliage lourd item.dense-alloy.name = Alliage lourd
@@ -494,13 +493,14 @@ text.mech.ability = [LIGHT_GRAY]Compétence: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0}
text.liquid.temperature = [LIGHT_GRAY]Température: {0} text.liquid.temperature = [LIGHT_GRAY]Température: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Générateur d'ennemi block.spawn.name = Générateur d'ennemi
block.core.name = Base block.core.name = Base
block.metalfloor.name = Sol en métal block.metalfloor.name = Sol en métal
block.deepwater.name = Eau profonde block.deepwater.name = Eau profonde
block.water.name = Eau block.water.name = Eau
block.lava.name = Lave block.lava.name = Lave
block.tar.name = Tar block.tar.name = Pétrole
block.blackstone.name = Roche sombre block.blackstone.name = Roche sombre
block.stone.name = Roche block.stone.name = Roche
block.dirt.name = Terre block.dirt.name = Terre
@@ -623,7 +623,7 @@ block.rtg-generator.name = G.T.R.
block.spectre.name = Spectre block.spectre.name = Spectre
block.meltdown.name = Meltdown block.meltdown.name = Meltdown
block.container.name = Conteneur block.container.name = Conteneur
block.core.description = The most important building in the game. block.core.description = Sert de point de base pour le/les joueur(s). Ce bâtiment est le plus [scarlet]important[] du jeu !
team.blue.name = Bleu team.blue.name = Bleu
team.red.name = Rouge team.red.name = Rouge
team.orange.name = Orange team.orange.name = Orange
@@ -632,7 +632,7 @@ team.green.name = Vert
team.purple.name = Violet team.purple.name = Violet
unit.alpha-drone.name = Drone alpha unit.alpha-drone.name = Drone alpha
unit.spirit.name = Drone spirituel unit.spirit.name = Drone spirituel
unit.spirit.description = TL'unité de soutien de départ. Apparaît dans la base par défaut. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. unit.spirit.description = L'unité de soutien de départ. Apparaît dans la base par défaut. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs.
unit.phantom.name = Drone Fantôme unit.phantom.name = Drone Fantôme
unit.phantom.description = Une unité de soutien avancée. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. Bien plus efficace qu'un drone spirituel. unit.phantom.description = Une unité de soutien avancée. Mine automatiquement les minerais, récupère les objets au sol et répare les blocs. Bien plus efficace qu'un drone spirituel.
unit.dagger.name = Poignard unit.dagger.name = Poignard
@@ -667,114 +667,114 @@ tutorial.silicon = Du silicone est maintenant produit. Obtenez-en.\n\nAugmenter
tutorial.daggerfactory = Construire [accent]une usine de "Poignards" []est recommandé .\n\nElle sera utilisée pour produire des unités d'attaque. tutorial.daggerfactory = Construire [accent]une usine de "Poignards" []est recommandé .\n\nElle sera utilisée pour produire des unités d'attaque.
tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets. tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets.
tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire. tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire.
tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base .\nDétruisez la avec votre unité et des méchas "Poignard". tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base.\nDétruisez la avec votre unité et des méchas "Poignard".
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves. block.copper-wall.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles. block.copper-wall-large.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.\nS'étend sur plusieurs tuiles.
block.dense-alloy-wall.description = A standard defensive block.\nAdequate protection from enemies. block.dense-alloy-wall.description = Un bloc défensif standard.\nUne protection adéquate contre les ennemis.
block.dense-alloy-wall-large.description = A standard defensive block.\nAdequate protection from enemies.\nSpans multiple tiles. block.dense-alloy-wall-large.description = Un bloc défensif standard.\nUne protection adéquate contre les ennemis.\nS'étend sur plusieurs tuiles.
block.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall.description = Un puissant bloc défensif.\nBonne protection contre les ennemis.
block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.thorium-wall-large.description = Un puissant bloc défensif.\nBonne protection contre les ennemis.\nS'étend sur plusieurs tuiles.
block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. block.phase-wall.description = Pas aussi fort qu'un mur de thorium, mais détournera les balles à moins qu'elles ne soient trop puissantes.
block.phase-wall-large.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful.\nSpans multiple tiles. block.phase-wall-large.description = Pas aussi fort qu'un mur de thorium, mais détournera les balles à moins qu'elles ne soient trop puissantes.\nS'étend sur plusieurs tuiles.
block.surge-wall.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker. block.surge-wall.description = Le bloc défensif le plus puissant.\nPeu de chances de déclencher des éclairs en direction de l'attaquant.
block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.surge-wall-large.description = Le bloc défensif le plus puissant.\nPeu de chances de déclencher des éclairs en direction de l'attaquant.\nS'étend sur plusieurs tuiles.
block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door.description = Une petite porte qui peut être ouverte et fermée en tapotant dessus.\nSi elle est ouverte, les ennemis peuvent tirer et se déplacer.
block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\nSpans multiple tiles. block.door-large.description = Une grande porte qui peut être ouverte et fermée en tapotant dessus.\nSi elle est ouverte, les ennemis peuvent tirer et se déplacer.\nS'étend sur plusieurs tuiles.
block.mend-projector.description = Periodically heals buildings in its vicinity. block.mend-projector.description = Guérit périodiquement les bâtiments situés à proximité.
block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.overdrive-projector.description = Augmente la vitesse des bâtiments à proximité, comme les foreuses et les convoyeurs.
block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.force-projector.description = Crée un champ de force hexagonal autour de lui-même, protégeant les bâtiments et les unités internes des dommages causés par les balles.
block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.shock-mine.description = Endommage les ennemis qui marchent sur la mine. Presque invisible à l'ennemi.
block.duo.description = A small, cheap turret. block.duo.description = Une petite tourelle pas chère.
block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.arc.description = Une petite tourelle qui tire de l'électricité dans un arc au hasard vers l'ennemi.
block.hail.description = A small artillery turret. block.hail.description = Une petite tourelle d'artillerie.
block.lancer.description = A medium-sized turret which shoots charged electricity beams. block.lancer.description = Une tourelle de taille moyenne qui tire des faisceaux délectricité chargés.
block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. block.wave.description = Une tourelle de taille moyenne à tir rapide qui tire des bulles de liquide.
block.salvo.description = A medium-sized turret which fires shots in salvos. block.salvo.description = Une tourelle de taille moyenne qui tire des coups de salves.
block.swarmer.description = A medium-sized turret which shoots burst missiles. block.swarmer.description = Une tourelle de taille moyenne qui tire des missiles éclatés.
block.ripple.description = A large artillery turret which fires several shots simultaneously. block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs coups simultanément.
block.cyclone.description = A large rapid fire turret. block.cyclone.description = Une grande tourelle à tir rapide.
block.fuse.description = A large turret which shoots powerful short-range beams. block.fuse.description = Une grande tourelle qui tire de puissants faisceaux à courte portée.
block.spectre.description = A large turret which shoots two powerful bullets at once. block.spectre.description = Une grande tourelle qui tire deux balles puissantes à la fois.
block.meltdown.description = A large turret which shoots powerful long-range beams. block.meltdown.description = Une grande tourelle qui tire de puissants faisceaux à longue portée.
block.conveyor.description = Basic item transport block. Moved items forward and automatically deposits them into turrets or crafters. Rotatable. block.conveyor.description = Bloc de transport d'articles standard.\nDéplace les objets et les déposes automatiquement dans des tourelles ou des usines. Rotatif.
block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. block.titanium-conveyor.description = Bloc de transport d'articles avancé.\nDéplace les articles plus rapidement que les convoyeurs standard.
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 = Bloc de transport d'articles avancé.\nUtilise le pouvoir de téléporter des articles vers un convoyeur de phase connecté sur plusieurs carreaux.
block.junction.description = 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 = Agit comme un pont pour deux bandes transporteuses qui se croisent.\nUtile dans les situations avec deux convoyeurs différents transportant des matériaux différents à des endroits différents.
block.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 = Bloc de transport d'articles ultime.\nRecueille plusieurs objets et les envoie ensuite à un autre pilote de masse sur une longue distance.
block.smelter.description = Burns coal for smelting copper and lead into dense alloy. block.smelter.description = Brûle le charbon pour fondre le cuivre et le plomb en un alliage dense.
block.arc-smelter.description = Smelts copper and lead into dense alloy by using an external power source. block.arc-smelter.description = Fait fondre le cuivre et le plomb en un alliage dense en utilisant une source d'alimentation externe.
block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon. block.silicon-smelter.description = Réduit le sable avec du coke* très pur afin de produire du silicium. (*Coke produit à partir de charbon:REF)
block.plastanium-compressor.description = Produces plastanium from oil and titanium. block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane.
block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. block.phase-weaver.description = Produit un tissu de phase à partir de thorium radioactif et de grandes quantités de sable.
block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. block.alloy-smelter.description = Produit un alliage de surtension à partir de titane, plomb, silicium et cuivre.
block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. block.pulverizer.description = Brise la pierre en sable. Utile en cas de manque de sable naturel.
block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. block.pyratite-mixer.description = Mélange le charbon, le plomb et le sable en pyratite hautement inflammable.
block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. block.blast-mixer.description = Utilise du pétrole pour transformer la pyratite en un composé explosif moins inflammable mais plus explosif.
block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. block.cryofluidmixer.description = L'eau et le titane combinés forment un fluide cryo beaucoup plus efficace pour le refroidissement.
block.solidifer.description = Cools lava to stone at a fast pace. block.solidifer.description = Refroidit la lave en pierre à un rythme rapide.
block.melter.description = Heats up stone to very high temperatures to obtain lava. block.melter.description = Chauffe la pierre à des températures très élevées pour obtenir de la lave.
block.incinerator.description = Gets rid of any excess item or liquid. block.incinerator.description = Se débarrasse de tout article ou liquide en excès.
block.biomattercompressor.description = Compresses biomatter in order to retrieve oil. block.biomattercompressor.description = Compresse biomatter afin de récupérer du pétrole.
block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. block.separator.description = Exposer la pierre à la pression de l'eau afin d'obtenir différents minéraux contenus dans la pierre.
block.centrifuge.description = More efficient than the separator, but also more expensive to build and requires power. block.centrifuge.description = Plus efficace que le séparateur, mais aussi plus coûteux à construire et à alimenter.
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node.description = Transmet la puissance à des noeuds connectés. Il est possible de connecter jusqu'à quatre sources d'alimentation, puits ou nœuds.\nLe nœud recevra de lalimentation ou fournira lalimentation à tous les blocs adjacents.
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 = Son rayon d'action est supérieur à celui du nœud d'alimentation et peut être connecté à six sources d'alimentation, puits ou nœuds au maximum.
block.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 = Stocke lénergie chaque fois quil ya abondance et en cas de pénurie, tant quil reste de la capacité.
block.battery-large.description = Stores much more power than a regular battery. block.battery-large.description = Stocke beaucoup plus d'énergie qu'une batterie ordinaire.
block.combustion-generator.description = Generates power by burning oil or flammable materials. block.combustion-generator.description = Génère de l'énergie en brûlant du pétrole ou des matériaux inflammables.
block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.turbine-generator.description = Plus efficace qu'un générateur de combustion, mais nécessite de l'eau supplémentaire.
block.thermal-generator.description = Generates a large amount of power from lava. block.thermal-generator.description = Génère une grande quantité d'énergie grâce à la lave.
block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel.description = Fournit une petite quantité d'énergie grâce au soleil.
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 = Fournit une bien meilleure alimentation qu'un panneau solaire standard, mais coûte également beaucoup plus cher à construire.
block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. block.thorium-reactor.description = Génère d'énormes quantités d'énergie à partir de thorium hautement radioactif. Nécessite un refroidissement constant.\nExplose violemment si des quantités insuffisantes de liquide de refroidissement ne sont pas fournies.
block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. block.rtg-generator.description = Générateur thermoélectrique à radio-isotopes ne nécessitant pas de refroidissement mais fournissant moins d'énergie qu'un réacteur à thorium.
block.unloader.description = 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 = Décharge des articles d'un conteneur, d'une chambre forte ou d'un noyau sur un convoyeur ou directement dans un bloc adjacent.\nLe type d'élément à décharger peut être modifié en tapotant sur le déchargeur.
block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. block.container.description = Stocke une petite quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [LIGHT_GRAY]Un déchargeur[] peut être utilisé pour récupérer des éléments du conteneur.
block.vault.description = Stores a large amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. block.vault.description = Stocke une grande quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [LIGHT_GRAY]Un déchargeur[] peut être utilisé pour récupérer des éléments du coffre-fort.
block.mechanical-drill.description = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely. block.mechanical-drill.description = Un extracteur bon marché. Lorsqu'il est placé sur des carreaux appropriés, les objets sortent à un rythme lent et indéfiniment.
block.pneumatic-drill.description = An improved drill which is faster and able to process harder materials by making use of air pressure. block.pneumatic-drill.description = Un extracteur améliorée, plus rapide et capable de traiter des matériaux plus durs en utilisant la pression atmosphérique.
block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Additionally, radioactive thorium can be retrieved with this drill. block.laser-drill.description = Permet de forer encore plus rapidement grâce à la technologie laser, mais nécessite de l'énergie. De plus, le thorium radioactif peut être récupéré avec cet extracteur.
block.blast-drill.description = The ultimate drill. Requires large amounts of power. block.blast-drill.description = L'extracteur ultime. Nécessite de grandes quantités d'énergie.
block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.water-extractor.description = Extrait l'eau du sol. Utilisez-le quand il n'y a pas de lac à proximité.
block.cultivator.description = Cultivates the soil with water in order to obtain biomatter. block.cultivator.description = Cultiver le sol avec de l'eau afin d'obtenir du biomatter.
block.oil-extractor.description = Uses large amounts of power in order to extract oil from sand. Use it when there is no direct source of oil nearby. block.oil-extractor.description = Utilise de grandes quantités d'énergie pour extraire le pétrole du sable. Utilisez-le lorsqu'il n'y a pas de source directe de pétrole à proximité.
block.dart-ship-pad.description = Leave your current vessel and change into a basic fighter aircraft.\nUse the pad by double tapping while standing on it. block.dart-ship-pad.description = Quittez votre vaisseau actuel et changez-vous en avion de combat de base.\nUtilisez la plate-forme en tapotant deux fois dessus.
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 = Quittez votre vaisseau actuel et changez-vous en un bombardier lourd raisonnablement bien blindé.\nUtilisez la plate-forme en tapotant deux fois dessus.
block.javelin-ship-pad.description = 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 = Quittez votre vaisseau actuel et changez-vous en un intercepteur puissant et rapide doté darmes légères.\nUtilisez la plate-forme en tapotant deux fois dessus.
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 = Quittez votre vaisseau actuel et changez-vous en un grand vaisseau de combat bien blindé.\nUtilisez la plate-forme en tapotant deux fois dessus.
block.tau-mech-pad.description = 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 = Quittez votre vaisseau actuel et changez-vous en un centre de support capable de soigner les bâtiments et unités amis.\nUtilisez la plate-forme en tapotant deux fois dessus.
block.delta-mech-pad.description = 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 = Quittez votre vaisseau actuel et changez-vous en un méchant rapide, légèrement blindé, conçu pour les attaques à la volée.\nUtilisez la plate-forme en tapotant deux fois dessus.
block.omega-mech-pad.description = 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 = Quittez votre vaisseau actuel et changez-vous en un mech encombrant et bien blindé, conçu pour les assauts de première ligne.\nUtilisez la plate-forme en tapotant deux fois dessus.
block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.spirit-factory.description = Produit des drones légers qui extraient du minerai et réparent des blocs.
block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.phantom-factory.description = Produit des unités de drones avancées qui sont nettement plus efficaces qu'un drone spirituel.
block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.wraith-factory.description = Produit des intercepteurs rapides qui harcèlent l'ennemi.
block.ghoul-factory.description = Produces heavy carpet bombers. block.ghoul-factory.description = Produit des tapis de bombardiers lourds.
block.dagger-factory.description = Produces basic ground units. block.dagger-factory.description = Produit des unités terrestres de base.
block.titan-factory.description = Produces advanced, armored ground units. block.titan-factory.description = Produit des unités terrestres avancées et blindées.
block.fortress-factory.description = Produces heavy artillery ground units. block.fortress-factory.description = Produit des unités terrestres d'artillerie lourde.
block.revenant-factory.description = Produces heavy laser ground units. block.revenant-factory.description = Produit des unités terrestres laser lourdes.
block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. block.repair-point.description = Soigne en permanence l'unité endommagée la plus proche à proximité.
block.command-center.description = Allows changing friendly AI behavior. Currently, attack, retreat and patrol commands are supported. block.command-center.description = Permet de changer le comportement amical de l'IA. Actuellement, les commandes d'attaque, de retraite et de patrouille sont prises en charge.
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. block.conduit.description = Bloc de transport liquide de base. Fonctionne comme un convoyeur, mais avec des liquides. Utilisation optimale avec des extracteurs, des pompes ou dautres conduits.
block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. block.pulse-conduit.description = Bloc de transport de liquide avancé. Transporte les liquides plus rapidement et stocke plus que des conduits standard.
block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. block.phase-conduit.description = Bloc de transport de liquide avancé. Utilise le pouvoir de téléporter des liquides vers un conduit de phase connecté sur plusieurs carreaux.
block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. block.liquid-router.description = Accepte les liquides d'une direction et les envoie dans 3 autres directions de manière égale. Peut également stocker une certaine quantité de liquide. Utile pour séparer les liquides d'une source à plusieurs cibles.
block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. block.liquid-tank.description = Stocke une grande quantité de liquides. Utilisez-le pour créer des tampons en cas de demande non constante de matériaux ou comme protection pour le refroidissement des blocs vitaux.
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. block.liquid-junction.description = Agit comme un pont pour deux conduits de croisement. Utile dans les situations avec deux conduits différents transportant des liquides différents à des endroits différents.
block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. block.bridge-conduit.description = Bloc de transport de liquide avancé. Permet de transporter des liquides jusqu'à 3 tuiles de n'importe quel terrain ou bâtiment.
block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. block.mechanical-pump.description = Une pompe bon marché avec un débit lent, mais aucune consommation d'énergie.
block.rotary-pump.description = An advanced pump which doubles up speed by using power. block.rotary-pump.description = Une pompe avancée qui double la vitesse en utilisant lénergie.
block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. block.thermal-pump.description = La pompe ultime. Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave.
block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. block.router.description = Accepte les éléments d'une direction et les envoie dans 3 autres directions de manière égale. Utile pour séparer les matériaux d'une source en plusieurs cibles.
block.distributor.description = An advanced router which splits items to up to 7 other directions equally. block.distributor.description = Un routeur avancé qui divise les articles en 7 autres directions de manière égale. [scarlet]Seule et unique ![]
block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. block.bridge-conveyor.description = Bloc de transport d'articles avancé. Permet de transporter des objets sur plus de 3 tuiles de n'importe quel terrain ou bâtiment.
block.alpha-mech-pad.description = When given enough power, rebuilds your ship into the[accent] Alpha[] mech. block.alpha-mech-pad.description = Lorsque vous avez assez de puissance, reconstruisez votre vaisseau dans le [accent]Alpha[] mech.
block.itemsource.description = Infinitely outputs items. Sandbox only. block.itemsource.description = Sort infiniment les articles. Bac à sable seulement.
block.liquidsource.description = Infinitely outputs liquids. Sandbox only. block.liquidsource.description = Débit infini de liquides. Bac à sable seulement.
block.itemvoid.description = Destroys any items which go into it without using power. Sandbox only. block.itemvoid.description = Détruit tous les objets qui y entrent sans utiliser d'énergie. Bac à sable seulement.
block.powerinfinite.description = Infinitely outputs power. Sandbox only. block.powerinfinite.description = Débit infini d'énergie. Bac à sable seulement.
block.powervoid.description = Voids all power inputted into it. Sandbox only. block.powervoid.description = Annule toute l'énergie qui y est introduite. Bac à sable seulement.
liquid.water.description = Commonly used for cooling machines and waste processing. liquid.water.description = Couramment utilisé pour les machines de refroidissement et le traitement des déchets.
liquid.lava.description = Can be transformed into[LIGHT_GRAY] stone[], used for generating power or used as ammo for certain turrets. liquid.lava.description = Peut être transformé en [LIGHT_GRAY]pierre[], utilisé pour générer de l'énergie ou utilisé comme munition pour certaines tourelles.
liquid.oil.description = Can be burnt, exploded or used as a coolant. liquid.oil.description = Peut être brûlé, explo ou utilisé comme liquide de refroidissement.
liquid.cryofluid.description = The most efficient liquid for cooling things down. liquid.cryofluid.description = Le liquide de refroidissement le plus efficace.

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io page with PC downloads and web version
text.link.google-play.description = Google Play store listing text.link.google-play.description = Google Play store listing
text.link.wiki.description = official Mindustry wiki text.link.wiki.description = official Mindustry wiki
text.linkfail = Failed to open link!\nThe URL has been copied to your cliboard. text.linkfail = Failed to open link!\nThe URL has been copied to your cliboard.
text.editor.web = The web version does not support the editor!\nDownload the game to use it.
text.web.unsupported = The web version does not support this feature! Download the game to use it.
text.gameover = Intinya hancur. text.gameover = Intinya hancur.
text.gameover.pvp = The[accent] {0}[] team is victorious! text.gameover.pvp = The[accent] {0}[] team is victorious!
text.sector.gameover = This sector has been lost. Re-deploy? text.sector.gameover = This sector has been lost. Re-deploy?
@@ -370,6 +368,7 @@ setting.musicvol.name = Volume Musik
setting.mutemusic.name = Bisukan Musik setting.mutemusic.name = Bisukan Musik
setting.sfxvol.name = Volume Suara setting.sfxvol.name = Volume Suara
setting.mutesound.name = Bisukan Suara setting.mutesound.name = Bisukan Suara
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Rebind Keys text.keybind.title = Rebind Keys
category.general.name = General category.general.name = General
category.view.name = View category.view.name = View
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Ability: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperature: {0} text.liquid.temperature = [LIGHT_GRAY]Temperature: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = Core block.core.name = Core
block.metalfloor.name = Metal Floor block.metalfloor.name = Metal Floor

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = pagina di itch.io con download per PC e versione
text.link.google-play.description = Elenco di Google Play Store text.link.google-play.description = Elenco di Google Play Store
text.link.wiki.description = wiki ufficiale di Mindustry text.link.wiki.description = wiki ufficiale di Mindustry
text.linkfail = Impossibile aprire il link! L'URL è stato copiato nella tua bacheca. text.linkfail = Impossibile aprire il link! L'URL è stato copiato nella tua bacheca.
text.editor.web = La versione web non supporta l'editor! Scarica il gioco per usarlo.
text.web.unsupported = La vcersione web non supporta questa funzione! Sacrica il gioco per utilizzarla.
text.gameover = Il nucleo è stato distrutto. text.gameover = Il nucleo è stato distrutto.
text.gameover.pvp = The[accent] {0}[] team is victorious! text.gameover.pvp = The[accent] {0}[] team is victorious!
text.sector.gameover = Hai perso questo settore. Attaccare di nuovo? text.sector.gameover = Hai perso questo settore. Attaccare di nuovo?
@@ -370,6 +368,7 @@ setting.musicvol.name = Volume Musica
setting.mutemusic.name = Silenzia musica setting.mutemusic.name = Silenzia musica
setting.sfxvol.name = Volume SFX setting.sfxvol.name = Volume SFX
setting.mutesound.name = Togli suoni setting.mutesound.name = Togli suoni
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Configurazione Tasti text.keybind.title = Configurazione Tasti
category.general.name = Generale category.general.name = Generale
category.view.name = Visualizzazione category.view.name = Visualizzazione
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Abilità: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacità calorifica: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacità calorifica: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosità: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosità: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0} text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = Nucleo block.core.name = Nucleo
block.metalfloor.name = Pavimento di ferro block.metalfloor.name = Pavimento di ferro

View File

@@ -0,0 +1,780 @@
text.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!)
text.credits = クレジット
text.discord = DiscordのMindustryに参加!
text.link.discord.description = Mindustryの公式Discordグループ
text.link.github.description = ゲームのソースコード
text.link.dev-builds.description = 不安定な開発ビルド
text.link.trello.description = 公式 Trelloボード の実装予定の機能をチェック
text.link.itch.io.description = itch.ioでPC版のダウンロードやweb版をプレイ
text.link.google-play.description = Google Playのストアページ
text.link.wiki.description = 公式 Mindustry Wiki
text.linkfail = リンクを開くのに失敗しました!\nURLをクリップボードにコピーしました。
text.gameover = ゲームオーバー
text.gameover.pvp = [accent] {0}[] チームの勝利!
text.sector.gameover = この区域は敗北しました。 再配備しますか?
text.sector.retry = リトライ
text.highscore = [accent]ハイスコアを記録!
text.wave.lasted = あなたはウェーブ[accent]{0}[]まで続きました。
text.level.highscore = ハイスコア: [accent]{0}
text.level.delete.title = 削除の確認
text.map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
text.level.select = レベル選択
text.level.mode = ゲームモード:
text.construction.desktop = ブロックの選択や建設を止めるには、[accent]スペースを使用してください[]。
text.construction.title = ブロック建設ガイド
text.construction = [accent]ブロック建設モード[]になりました。\n設置するには、機体の近くの設置可能な場所をタップしてください。\nブロックを選択した状態で、チェックボタンを押して確認すると、機体が建設を始めます。\n\n- [accent]ブロックの削除[]は、タップで範囲を選択してください。\n- [accent]範囲の選択[]は、長押しして、範囲のブロックをドラッグしてください。\n- [accent]一列にブロックを設置[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]建設や範囲の選択をキャンセル[]するには、左下の X ボタンを押してください。
text.deconstruction.title = ブロック撤去ガイド
text.deconstruction = [accent]ブロック撤去モード[]になりました。\n\nブロックを撤去するには、機体の近くのブロックをタップしてください。\nブロックを選択した状態で、チェックボタンを押して確認すると、機体がブロックの撤去を始めます。\n\n- [accent]ブロックの破壊[]は、タップで範囲を選択してください。\n- [accent]範囲を選択してブロックを撤去[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]撤去や範囲選択をキャンセル[]するには、左下の X ボタンを押してください。
text.showagain = 次回以降表示しない
text.coreattack = < コアが攻撃を受けています! >
text.unlocks = アンロック
text.savegame = ゲームを保存
text.loadgame = ゲームを読み込む
text.joingame = ゲームに参加
text.addplayers = プレイヤーを追加/削除
text.customgame = カスタムゲーム
text.sectors = 区域
text.sector = 区域: [LIGHT_GRAY]{0}
text.sector.time = 時間: [LIGHT_GRAY]{0}
text.sector.deploy = 配備
text.sector.abandon = 撤退
text.sector.abandon.confirm = 区域のすべての進行を撤退します。\nこれは元に戻すことはできません!
text.sector.resume = 再開
text.sector.locked = [scarlet][[不完全]
text.sector.unexplored = [accent][[未調査]
text.missions = ミッション:[LIGHT_GRAY] {0}
text.mission = ミッション:[LIGHT_GRAY] {0}
text.mission.main = メインミッション:[LIGHT_GRAY] {0}
text.mission.info = ミッション情報
text.mission.complete = ミッション完了!
text.mission.complete.body = 区域 {0},{1} を征服しました。
text.mission.wave = 残り[accent] {0}/{1} []ウェーブ\n次のウェーブまで {2}
text.mission.wave.enemies = 残り[accent] {0}/{1} []ウェーブ\n敵の残り {2} 体
text.mission.wave.enemy = 残り[accent] {0}/{1} []ウェーブ\n敵の残り {2} 体
text.mission.wave.menu = 残り[accent] {0}[] ウェーブ
text.mission.battle = 敵のコアを破壊する
text.mission.resource.menu = {0} を{1}個を入手する
text.mission.resource = {0} を入手する :\n[accent]{1}/{2}[]
text.mission.block = {0} を作る
text.mission.unit = ユニット {0} を作る
text.mission.command = ユニットに {0} を命令する
text.mission.linknode = 電源ノードを接続する
text.mission.display = [accent]ミッション:\n[LIGHT_GRAY]{0}
text.mission.mech = 機体を[accent]{0}[]に乗り換える
text.mission.create = [accent]{0}[] を作る
text.none = <なし>
text.close = 閉じる
text.quit = 終了
text.maps = マップ
text.continue = 続ける
text.nextmission = 次のミッションへ
text.maps.none = [LIGHT_GRAY]マップが存在しません!
text.about.button = About
text.name = 名前:
text.filename = ファイル名:
text.unlocked = 新しいブロックをアンロック!
text.unlocked.plural = 新しいブロックをアンロック!
text.players = {0} 人がオンライン
text.players.single = {0} 人がオンライン
text.server.closing = [accent]サーバーを閉じています...
text.server.kicked.kick = サーバからキックされました!
text.server.kicked.serverClose = サーバーが閉じました。
text.server.kicked.sectorComplete = 区域を制覇しました。
text.server.kicked.sectorComplete.text = ミッションが完了しました。\nサーバーは次の区域に移ります。
text.server.kicked.clientOutdated = 古いクライアントです! ゲームをアップデートしてください!
text.server.kicked.serverOutdated = 古いサーバーです! ホストに更新してもらってください!
text.server.kicked.banned = サーバーからBanされています。
text.server.kicked.recentKick = 直前にキックされています。\nもう一度接続できるまでお待ちください。
text.server.kicked.nameInUse = このサーバーでは、\nその名前はすでに使用されています。
text.server.kicked.nameEmpty = 無効な名前です。
text.server.kicked.idInUse = すでにサーバーに参加しています。! 二つのアカウントでの接続は許可されていません。
text.server.kicked.customClient = このサーバーはカスタムビルドをサポートしていません。公式版をダウンロードしてください。
text.host.info = [accent]ホスト[]ボタンを押すと、ポート[scarlet]6567[]でサーバーが開かれます。同じ[LIGHT_GRAY]Wifi や ローカルネットワーク[]からはサーバーリストで見ることができます。\n\nIPアドレスからどこからでもアクセスできるようにするには、[accent]ポート開放[]する必要があります。\n\n[LIGHT_GRAY]注意:: LAN上のゲームで接続できない場合、Mindustryがファイアウォールの設定でローカルネットワークに接続が許可されているか確認してください。
text.join.info = ここでは、[accent]サーバーのIPアドレス[]から接続したり、[accent]ローカルネットワーク[]のサーバーを探すことができます。\nLANとWANの両方のマルチプレイに対応しています。\n\n[LIGHT_GRAY]注意:グローバルサーバーリストはありません。誰かのサーバーにIPで接続したい場合、ホストにIPをお尋ねください。
text.hostserver = ゲームをホスト
text.hostserver.mobile = ホスト
text.host = ホスト
text.hosting = [accent]サーバーを開いています...
text.hosts.refresh = リフレッシュ
text.hosts.discovering = LAN上のサーバーを探しています
text.server.refreshing = サーバーをリフレッシュ
text.hosts.none = [lightgray]ローカルゲームが見つかりません!
text.host.invalid = [scarlet]ホストに接続できません。
text.trace = プレイヤーの記録
text.trace.playername = プレイヤー名: [accent]{0}
text.trace.ip = IP: [accent]{0}
text.trace.id = ユニークID: [accent]{0}
text.trace.android = Androidクライアント: [accent]{0}
text.trace.modclient = カスタムクライアント: [accent]{0}
text.trace.totalblocksbroken = 総ブロック破壊数: [accent]{0}
text.trace.structureblocksbroken = 総建設物破壊数: [accent]{0}
text.trace.lastblockbroken = 最後に破壊したブロック: [accent]{0}
text.trace.totalblocksplaced = 総ブロック設置数: [accent]{0}
text.trace.lastblockplaced = 最後に設置したブロック: [accent]{0}
text.invalidid = 無効なクライアントIDです! バグ報告してください。
text.server.bans = Ban
text.server.bans.none = Banされたプレイヤーはいません!
text.server.admins = 管理者
text.server.admins.none = 管理者はいません!
text.server.add = サーバーを追加
text.server.delete = サーバーを削除しますか?
text.server.hostname = ホスト: {0}
text.server.edit = サーバーを編集
text.server.outdated = [crimson]古いサーバー![]
text.server.outdated.client = [crimson]古いクライアント![]
text.server.version = [lightgray]バージョン: {0} {1}
text.server.custombuild = [yellow]カスタムビルド
text.confirmban = このプレイヤーを Ban しますか?
text.confirmkick = このプレイヤーをキックしますか?
text.confirmunban = このプレイヤーの Ban を解除しますか?
text.confirmadmin = このプレイヤーを管理者にしますか?
text.confirmunadmin = このプレイヤーを管理者から削除しますか?
text.joingame.title = サーバーに参加
text.joingame.ip = IP:
text.disconnect = 接続が切断されました。
text.disconnect.data = ワールドデータの読み込みに失敗しました!
text.connecting = [accent]接続中...
text.connecting.data = [accent]ワールドデータを読み込んでいます...
text.server.port = ポート:
text.server.addressinuse = アドレスがすでに使用されています。!
text.server.invalidport = 無効なポート番号です。!
text.server.error = [crimson]サーバーエラー: [accent]{0}
text.save.old = これは古いバージョンのセーブデータで、使用することができません。\n\n[LIGHT_GRAY]下位互換性の実装は正式版の4.0行われます。
text.save.new = 新しく保存
text.save.overwrite = このスロットに上書きしてよろしいですか?
text.overwrite = 上書き
text.save.none = セーブデータがありません!
text.saveload = [accent]セーブしています...
text.savefail = ゲームの保存に失敗しました。!
text.save.delete.confirm = このセーブデータを削除してよろしいですか?
text.save.delete = 削除
text.save.export = エクスポート
text.save.import.invalid = [accent]無効なセーブデータです。!
text.save.import.fail = [crimson]セーブのインポートに失敗: [accent]{0}
text.save.export.fail = [crimson]セーブのエクスポートに失敗: [accent]{0}
text.save.import = セーブデータを読み込む
text.save.newslot = セーブデータ名:
text.save.rename = リネーム
text.save.rename.text = 新しい名前:
text.selectslot = セーブデータを選択
text.slot = [accent]スロット {0}
text.save.corrupted = [accent]セーブファイルが無効、または破損しました!\nゲームのアップデート直後の場合、恐らくセーブデータのフォーマットの変更によるもので、バグではありません。
text.sector.corrupted = [accent]区域のセーブファイルが見つかりましたが、読み込みに失敗しました。\n新しく区域がが作成されます。
text.empty = <空>
text.on = オン
text.off = オフ
text.save.autosave = 自動保存: {0}
text.save.map = マップ: {0}
text.save.wave = ウェーブ {0}
text.save.difficulty = 難易度: {0}
text.save.date = 最終保存: {0}
text.save.playtime = プレイ時間: {0}
text.confirm = 確認
text.delete = 削除
text.ok = OK
text.open = 開く
text.cancel = キャンセル
text.openlink = リンクを開く
text.copylink = リンクをコピー
text.back = 戻る
text.quit.confirm = 終了してもよろしいですか?
text.changelog.title = 変更履歴
text.changelog.loading = 変更履歴を取得しています...
text.changelog.error.android = [accent]Android4.4または、それ以下では変更履歴が動作しない場合があります。!\nこれはAndroidの内部バグによるものです。
text.changelog.error.ios = [accent]iOSは変更履歴に対応していません。
text.changelog.error = [scarlet]変更履歴の取得エラー!\nインターネット接続を確認してください。
text.changelog.current = [yellow][[現在のバージョン]
text.changelog.latest = [accent][[最新バージョン]
text.loading = [accent]読み込み中...
text.saving = [accent]保存中...
text.wave = [accent]ウェーブ {0}
text.wave.waiting = [LIGHT_GRAY]次のウェーブまで {0} 秒
text.waiting = [LIGHT_GRAY]待機中...
text.waiting.players = プレイヤーを待っています...
text.wave.enemies = [LIGHT_GRAY]残り {0} 体
text.wave.enemy = [LIGHT_GRAY]残り {0} 体
text.loadimage = イメージを読み込む
text.saveimage = イメージを保存
text.unknown = 不明
text.custom = カスタム
text.builtin = 組み込み
text.map.delete.confirm = マップを削除してもよろしいですか? これは戻すことができません!
text.map.random = [accent]ランダムマップ
text.map.nospawn = このマップにはスポーンするためのプレイヤーのコアがありません! [ROYAL]青い[]コアをエディターでマップに追加してください。
text.map.nospawn.pvp = このマップには敵がスポーンするためのプレイヤーのコアがありません! [SCARLET]赤い[]コアをエディターでマップに追加してください。
text.map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。
text.editor.brush = ブラシ
text.editor.slope = \\
text.editor.openin = エディターで開く
text.editor.oregen = 鉱石の生成
text.editor.oregen.info = 鉱石の生成:
text.editor.mapinfo = マップ情報
text.editor.author = 作者:
text.editor.description = 説明:
text.editor.name = 名前:
text.editor.teams = チーム
text.editor.elevation = 標高
text.editor.errorimageload = ファイルの読み込みエラー:\n[accent]{0}
text.editor.errorimagesave = ファイルの保存エラー:\n[accent]{0}
text.editor.generate = 生成
text.editor.resize = リサイズ
text.editor.loadmap = マップを読み込む
text.editor.savemap = マップを保存
text.editor.saved = 保存しました!
text.editor.save.noname = マップに名前がありません! メニューの 'マップ情報' から設定してください。
text.editor.save.overwrite = マップが組み込みマップを上書きしようとしています。! メニューの 'マップ情報' から異なる名前に設定してください。
text.editor.import.exists = [scarlet]インポートできません:[] '{0}' はすでに組み込みマップの名前として存在します!
text.editor.import = インポート...
text.editor.importmap = マップをインポート
text.editor.importmap.description = すでに存在しているマップをインポート
text.editor.importfile = ファイルをインポート
text.editor.importfile.description = 外部マップファイルをインポート
text.editor.importimage = 古いイメージをインポート
text.editor.importimage.description = 外部イメージファイルをインポート
text.editor.export = エクスポート...
text.editor.exportfile = ファイルをエクスポート
text.editor.exportfile.description = マップファイルをエクスポート
text.editor.exportimage = 地形イメージをエクスポート
text.editor.exportimage.description = イメージファイルをエクスポート
text.editor.loadimage = 地形をインポート
text.editor.saveimage = 地形をエクスポート
text.editor.unsaved = [scarlet]保存されていない変更があります![]\n終了してもよろしいですか?
text.editor.resizemap = マップをリサイズ
text.editor.mapname = マップ名:
text.editor.overwrite = [accent]警告!\n存在するマップを上書きします。
text.editor.overwrite.confirm = [scarlet]警告![] この名前のマップがすでに存在します。上書きしてもよろしいですか?
text.editor.selectmap = 読み込むマップを選択:
text.width = 幅:
text.height = 高さ:
text.menu = メニュー
text.play = プレイ
text.load = 読み込む
text.save = 保存
text.fps = FPS: {0}
text.tps = TPS: {0}
text.ping = Ping: {0}ms
text.language.restart = 言語設定を有効にするにはゲームを再起動してください。
text.settings = 設定
text.tutorial = チュートリアル
text.editor = エディター
text.mapeditor = マップエディター
text.donate = 寄附
text.connectfail = [crimson]サーバーへの接続できませんでした:\n\n[accent]{0}
text.error.unreachable = サーバーに到達できません。\nアドレスは正しいですか?
text.error.invalidaddress = 無効なアドレスです。
text.error.timedout = タイムアウトしました!\nホストがポート開放されているか確認してください。アドレスは正しいです!
text.error.mismatch = パケットエラー:\nクライアント/サーバーのバージョンが一致しません。\nゲームとホストが最新のMindustryか確認してください!
text.error.alreadyconnected = すでに接続されています。
text.error.mapnotfound = マップファイルが見つかりません!
text.error.any = 不明なネットワークエラーです。
text.settings.language = 言語
text.settings.reset = デフォルトにリセット
text.settings.rebind = 再設定
text.settings.controls = コントロール
text.settings.game = ゲーム
text.settings.sound = サウンド
text.settings.graphics = グラフィック
text.settings.cleardata = データを削除...
text.settings.clear.confirm = データを削除してもよろしいですか?\n元に戻すことはできません!
text.settings.clearall.confirm = [scarlet]警告![]\nこれはすべてのデータが削除されます。これにはセーブデータ、マップ、アンロック、キーバインドが含まれます。\n「ok」 を押すと、すべてのデータが削除され、自動的に終了します。
text.settings.clearsectors = 区域を削除
text.settings.clearunlocks = アンロックを削除
text.settings.clearall = すべてを削除
text.paused = [accent]< ポーズ >
text.yes = はい
text.no = いいえ
text.info.title = 情報
text.error.title = [crimson]エラーが発生しました
text.error.crashtitle = エラーが発生しました
text.blocks.blockinfo = ブロック情報
text.blocks.powercapacity = 電力容量
text.blocks.powershot = 電力/ショット
text.blocks.targetsair = 対空攻撃
text.blocks.itemspeed = ユニットの移動速度
text.blocks.shootrange = 範囲
text.blocks.size = 大きさ
text.blocks.liquidcapacity = 液体容量
text.blocks.maxitemssecond = 最大アイテム量
text.blocks.powerrange = 電力範囲
text.blocks.poweruse = 電力使用量
text.blocks.powerdamage = 電力/ダメージ
text.blocks.inputitemcapacity = 搬入アイテム容量
text.blocks.outputitemcapacity = 搬出アイテム容量
text.blocks.itemcapacity = アイテム容量
text.blocks.basepowergeneration = 電力発電量
text.blocks.powertransferspeed = 電力伝送量
text.blocks.craftspeed = 生産速度
text.blocks.inputliquid = 必要な液体
text.blocks.inputliquidaux = 補助液
text.blocks.inputitem = 必要なアイテム
text.blocks.inputitems = 必要なアイテム
text.blocks.outputitem = 搬出アイテム
text.blocks.drilltier = ドリル
text.blocks.drillspeed = 採掘速度
text.blocks.liquidoutput = 搬出液体
text.blocks.liquidoutputspeed = 液体搬出速度
text.blocks.liquiduse = 液体使用量
text.blocks.coolant = 冷却
text.blocks.coolantuse = 冷却使用量
text.blocks.inputliquidfuel = 液体燃料
text.blocks.liquidfueluse = 液体燃料使用量
text.blocks.explosive = 高い爆発性!
text.blocks.health = 耐久値
text.blocks.inaccuracy = 不正確
text.blocks.shots = ショット
text.blocks.reload = ショット/秒
text.blocks.inputfuel = 燃料
text.blocks.fuelburntime = 燃焼時間
text.blocks.inputcapacity = 搬入容量
text.blocks.outputcapacity = 搬出容量
text.unit.blocks = ブロック
text.unit.powersecond = 電力/秒
text.unit.liquidsecond = 液体/秒
text.unit.itemssecond = アイテム/秒
text.unit.pixelssecond = ピクセル/秒
text.unit.liquidunits = 液体
text.unit.powerunits = 電力
text.unit.degrees =
text.unit.seconds =
text.unit.items = アイテム
text.category.general = 一般
text.category.power = 電力
text.category.liquids = 液体
text.category.items = アイテム
text.category.crafting = 製作速度
text.category.shooting = 攻撃速度
setting.autotarget.name = 自動ターゲット
setting.fpscap.name = 最大FPS
setting.fpscap.none = なし
setting.fpscap.text = {0} FPS
setting.difficulty.training = トレーニング
setting.difficulty.easy = イージー
setting.difficulty.normal = ノーマル
setting.difficulty.hard = ハード
setting.difficulty.insane = クレイジー
setting.difficulty.name = 難易度:
setting.screenshake.name = 画面を振る
setting.effects.name = 画面効果
setting.sensitivity.name = 操作感度
setting.saveinterval.name = 自動保存間隔
setting.seconds = {0} 秒
setting.fullscreen.name = フルスクリーン
setting.multithread.name = マルチスレッド
setting.fps.name = FPSを表示
setting.vsync.name = VSync
setting.lasers.name = 電力レーザーを表示
setting.minimap.name = ミニマップを表示
setting.musicvol.name = 音楽 音量
setting.mutemusic.name = 音楽をミュート
setting.sfxvol.name = 効果音 音量
setting.mutesound.name = 効果音をミュート
setting.crashreport.name = 匿名でクラッシュレポートを送信する
text.keybind.title = キーバインド
category.general.name = 一般
category.view.name = 表示
category.multiplayer.name = マルチプレイ
command.attack = 攻撃
command.retreat = 退却
command.patrol = 警戒
keybind.press = キーを押してください...
keybind.press.axis = 軸またはキーを押してください...
keybind.move_x.name = 左右移動
keybind.move_y.name = 上下移動
keybind.select.name = 選択/ショット
keybind.break.name = 破壊
keybind.deselect.name = 選択解除
keybind.shoot.name = ショット
keybind.zoom_hold.name = ズーム長押し
keybind.zoom.name = ズーム
keybind.menu.name = メニュー
keybind.pause.name = ポーズ
keybind.dash.name = ダッシュ
keybind.chat.name = チャット
keybind.player_list.name = プレイヤーリスト
keybind.console.name = コンソール
keybind.rotate.name = 回転
keybind.toggle_menus.name = メニュー切り替え
keybind.chat_history_prev.name = 前のチャット履歴
keybind.chat_history_next.name = 次のチャット履歴
keybind.chat_scroll.name = チャットスクロール
keybind.drop_unit.name = ドロップユニット
keybind.zoom_minimap.name = ミニマップのズーム
mode.text.help.title = モードの説明
mode.waves.name = ウェーブ
mode.waves.description = ノーマルモードです。限られた資源でウェーブが自動的に始まります。
mode.sandbox.name = サンドボックス
mode.sandbox.description = 無限の資源でウェーブを自由に始められます。
mode.custom.warning = [scarlet]カスタムゲームまたは、サーバ内でのアンロックは保存されません。[]\n\nアンロックするには区域でプレイしてください。
mode.custom.warning.read = 必ずお読みください:\n[scarlet]カスタムゲーム内でのアンロックは区域やほかのモードには影響しません!\n\n[LIGHT_GRAY](多分必要ないと思いますが)
mode.freebuild.name = フリービルド
mode.freebuild.description = 限られた資源でウェーブを自由に始められます。
mode.pvp.name = PvP
mode.pvp.description = ローカルで他のプレイヤー戦います。
content.item.name = アイテム
content.liquid.name = 液体
content.unit.name = ユニット
content.recipe.name = ブロック
content.mech.name = 機体
item.stone.name =
item.stone.description = 基本的な原材料です。他の材料を分離したり、精製や溶岩を溶かしたりするのに使用します。
item.copper.name =
item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。
item.lead.name =
item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。
item.coal.name = 石炭
item.coal.description = 一般的で有用な燃料です。
item.dense-alloy.name = 高密度合金
item.dense-alloy.description = 銅と鉛でできた丈夫な合金です。高性能な戦争ブロックやドリルに使われます。
item.titanium.name = チタン
item.titanium.description = 希少で超軽量な金属です。液体輸送やドリル、航空機などで使われます。
item.thorium.name = トリウム
item.thorium.description = 高密度で放射性の金属です。構造的な支援や核燃料に使われます。
item.silicon.name = シリコン
item.silicon.description = 非常に有用な半導体でソーラーパネルや多くの複雑な機械に応用できます。
item.plastanium.name = プラスタニウム
item.plastanium.description = 軽量で伸縮性のある材料です。飛行機や弾薬に使用されます。
item.phase-fabric.name = フェーズファイバー
item.phase-fabric.description = 軽くない物質です。高度な機械や自己修復技術に使用されます。
item.surge-alloy.name = サージ合金
item.surge-alloy.description = 独特な電気的特性を持った特殊合金です。
item.biomatter.name = バイオメター
item.biomatter.description = 有機物の混ざったの塊です。石油への転換や燃料として使われます。
item.sand.name =
item.sand.description = 合金や融剤など広く使用されている一般的な材料です。
item.blast-compound.name = 爆発性化合物
item.blast-compound.description = 爆弾や爆発物に使われる揮発性化合物です。燃料として燃やすこともできますが、推奨されません。
item.pyratite.name = ピラタイト
item.pyratite.description = 兵器に使われる非常に燃えやすい物質です。
liquid.water.name =
liquid.lava.name = 溶岩
liquid.oil.name = 石油
liquid.cryofluid.name = 冷却水
mech.alpha-mech.name = アルファ
mech.alpha-mech.weapon = 重武装機関砲
mech.alpha-mech.ability = ドローン部隊
mech.alpha-mech.description = 一般的な機体です。標準的な速度と攻撃力を持っています。攻撃力を高めるために最大3体のドローンを作成することができます。
mech.delta-mech.name = デルタ
mech.delta-mech.weapon = 電撃砲
mech.delta-mech.ability = 電撃チャージ
mech.delta-mech.description = 高速に移動する敵のために素早く軽装化された機体です。建造物にはほとんどダメージを与えませんが、電撃を使って、たくさんの敵を素早く倒すことができます。
mech.tau-mech.name = タウ
mech.tau-mech.weapon = 修復レーザー
mech.tau-mech.ability = リペアバースト
mech.tau-mech.description = 支援型機体です。ダメージを受けたブロックを修復や火災の消火、半径内の味方を治療を行います。
mech.omega-mech.name = オメガ
mech.omega-mech.weapon = ロケット弾
mech.omega-mech.ability = 重装備
mech.omega-mech.description = 最前線での攻撃向けに作られた大型機体です。重装備によってダメージの90%を防ぐことができます。
mech.dart-ship.name = ダート
mech.dart-ship.weapon = 機関砲
mech.dart-ship.description = 一般的な機体です。高速で軽く使いやすいですが、攻撃能力はほとんどなく採掘速度が遅いのが欠点です。
mech.javelin-ship.name = ジャベリン
mech.javelin-ship.description = 最初は遅いですが、敵の基地では速度と飛行能力が飛躍的に高まり、電撃やミサイルで多量のダメージを与えることができます。
mech.javelin-ship.weapon = バーストミサイル
mech.javelin-ship.ability = 放電ブースター
mech.trident-ship.name = トライデント
mech.trident-ship.description = 強力な爆撃機です。頑丈な装甲です。
mech.trident-ship.weapon = 爆弾
mech.glaive-ship.name = グライブ
mech.glaive-ship.description = 大きく、重武装された攻撃機です。焼夷弾が装備され、優れた加速と最高速度を保有しています。
mech.glaive-ship.weapon = 焼夷弾
text.item.explosiveness = [LIGHT_GRAY]爆発性: {0}%
text.item.flammability = [LIGHT_GRAY]可燃性: {0}%
text.item.radioactivity = [LIGHT_GRAY]放射能: {0}%
text.item.fluxiness = [LIGHT_GRAY]流動性: {0}%
text.unit.health = [LIGHT_GRAY]耐久値: {0}
text.unit.speed = [LIGHT_GRAY]速度: {0}
text.mech.weapon = [LIGHT_GRAY]武器: {0}
text.mech.armor = [LIGHT_GRAY]装備: {0}
text.mech.itemcapacity = [LIGHT_GRAY]アイテム容量: {0}
text.mech.minespeed = [LIGHT_GRAY]採掘速度: {0}
text.mech.minepower = [LIGHT_GRAY]採掘力: {0}
text.mech.ability = [LIGHT_GRAY]能力: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0}
text.liquid.viscosity = [LIGHT_GRAY]粘度: {0}
text.liquid.temperature = [LIGHT_GRAY]温度: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = エネミースポーン
block.core.name = コア
block.metalfloor.name = 金属製の床
block.deepwater.name = 深層水
block.water.name =
block.lava.name = 溶岩
block.tar.name = タール
block.blackstone.name = 黒い石
block.stone.name =
block.dirt.name =
block.sand.name =
block.ice.name =
block.snow.name =
block.grass.name =
block.shrub.name = 低木
block.rock.name =
block.blackrock.name = 黒い岩
block.icerock.name = 氷岩
block.copper-wall.name = 銅の壁
block.copper-wall-large.name = 大きな銅の壁
block.dense-alloy-wall.name = 高密度合金の壁
block.dense-alloy-wall-large.name = 大きな高密度合金の壁
block.phase-wall.name = フェーズファイバーの壁
block.phase-wall-large.name = 大きなフェーズファイバーの壁
block.thorium-wall.name = トリウムの壁
block.thorium-wall-large.name = 大きなトリウムの壁
block.door.name = ドア
block.door-large.name = 大きなドア
block.duo.name = デュオ
block.scorch.name = スコッチ
block.hail.name = ヘイル
block.lancer.name = ランサー
block.conveyor.name = コンベアー
block.titanium-conveyor.name = チタンコンベアー
block.junction.name = ジャンクション
block.router.name = ルーター
block.distributor.name = ディストリビューター
block.sorter.name = ソーター
block.sorter.description = アイテムを分別します。設定されたアイテムを通します。異なるアイテムの場合、左右に搬出します。
block.overflow-gate.name = オーバーフローゲート
block.overflow-gate.description = 搬出先がいっぱいの場合に左右にアイテムを搬出します。
block.smelter.name = 溶鉱炉
block.arc-smelter.name = 電気式溶鉱炉
block.silicon-smelter.name = シリコン溶鉱炉
block.phase-weaver.name = フェーズ織機
block.pulverizer.name = 粉砕機
block.cryofluidmixer.name = 冷却ミキサー
block.melter.name = 融合機
block.incinerator.name = 焼却炉
block.biomattercompressor.name = バイオメター圧縮機
block.separator.name = 分離機
block.centrifuge.name = 遠心分離機
block.power-node.name = 電源ノード
block.power-node-large.name = 大型電源ノード
block.battery.name = バッテリー
block.battery-large.name = 大型バッテリー
block.combustion-generator.name = 火力発電機
block.turbine-generator.name = タービン発電機
block.mechanical-drill.name = 機械ドリル
block.pneumatic-drill.name = 空気圧ドリル
block.laser-drill.name = レーザードリル
block.water-extractor.name = ウォーターポンプ
block.cultivator.name = 耕作機
block.alpha-mech-pad.name = アルファパッド
block.dart-ship-pad.name = ダートパッド
block.delta-mech-pad.name = デルタパッド
block.javelin-ship-pad.name = ジャベリンパッド
block.trident-ship-pad.name = トライデントパッド
block.glaive-ship-pad.name = グライブパッド
block.omega-mech-pad.name = オメガパッド
block.tau-mech-pad.name = タウパッド
block.conduit.name = パイプ
block.mechanical-pump.name = 機械ポンプ
block.itemsource.name = アイテムソース
block.itemvoid.name = アイテムボイド
block.liquidsource.name = 液体ソース
block.powervoid.name = 電力ボイド
block.powerinfinite.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.solidifer.name = 冷却機
block.solar-panel.name = ソーラーパネル
block.solar-panel-large.name = 大型ソーラーパネル
block.oil-extractor.name = 石油抽出機
block.spirit-factory.name = スピリットドローン製造機
block.phantom-factory.name = ファントムドローン製造機
block.wraith-factory.name = レースファイター製造機
block.ghoul-factory.name = グールボンバー製造機
block.dagger-factory.name = ダガーユニット製造機
block.titan-factory.name = タイタンユニット製造機
block.fortress-factory.name = フォートレスユニット製造機
block.revenant-factory.name = レベナントファイター製造機
block.repair-point.name = 修理ポイント
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.rotary-pump.name = ロータリーポンプ
block.thorium-reactor.name = トリウムリアクター
block.command-center.name = コマンドセンター
block.mass-driver.name = マスドライバー
block.blast-drill.name = エアブラシドリル
block.thermal-pump.name = サーマルポンプ
block.thermal-generator.name = サーマル発電機
block.alloy-smelter.name = 合金溶鉱炉
block.mend-projector.name = 修復プロジェクター
block.surge-wall.name = サージの壁
block.surge-wall-large.name = 大きなサージの壁
block.cyclone.name = サイクロン
block.fuse.name = ヒューズ
block.shock-mine.name = 地雷
block.overdrive-projector.name = 加速プロジェクター
block.force-projector.name = 力場プロジェクター
block.arc.name = アーク
block.rtg-generator.name = RTG発電機
block.spectre.name = スペクター
block.meltdown.name = メルトダウン
block.container.name = コンテナー
block.core.description = ゲームで最も重要な建物です。
team.blue.name = ブルー
team.red.name = レッド
team.orange.name = オレンジ
team.none.name = グレー
team.green.name = グリーン
team.purple.name = パープル
unit.alpha-drone.name = アルファドローン
unit.spirit.name = スピリットドローン
unit.spirit.description = 初期のユニットです。デフォルトでコアからスポーンします。自動で鉱石の採掘やブロックの修理をします。
unit.phantom.name = ファントムドローン
unit.phantom.description = 強化されたユニットです。自動で鉱石の採掘やブロックの修理をします。スピリットドローンよりも効率的に行います。
unit.dagger.name = ダガー
unit.dagger.description = 一般的な地上ユニットです。集団になると便利です。
unit.titan.name = タイタン
unit.titan.description = 強化された地上戦闘ユニットです。地上と空の敵の両方に攻撃します。
unit.ghoul.name = グール爆撃機
unit.ghoul.description = 地上爆撃機です。
unit.wraith.name = レースファイター
unit.wraith.description = 高速な攻撃機ユニットです。
unit.fortress.name = フォートレス
unit.fortress.description = 砲撃地上ユニットです。
unit.revenant.name = レベナント
unit.revenant.description = レーザープラットフォームです。
tutorial.begin = ここでのミッションは[LIGHT_GRAY]敵[]を倒すことです。\n\nまずは、[accent]銅の採掘[]から始めましょう。コアの近くの銅鉱石の鉱脈をタップしましょう。
tutorial.drill = 手動で採掘するのは非効率的です。\n[accent]ドリル[]を使えば自動で採掘できます。\n銅鉱石の鉱脈の上に1つ置いてみましょう。
tutorial.conveyor = [accent]コンベアー[]はコアにアイテムを輸送することができます。\nドリルからコアまでコンベアー作りましょう。
tutorial.morecopper = まだまだ銅が必要です。\n\n手動で採掘するか、ドリルをもっと設置しましょう。
tutorial.turret = [LIGHT_GRAY]敵[]を撃退するために防衛体制を作らなければなりません。\n基地の近くにターレットのデュオを設置しましょう。
tutorial.drillturret = デュオには弾として[accent]銅の弾薬[]が必要です。\nデュオの横にドリルを置き、採掘した銅を供給しましょう。
tutorial.waves = [LIGHT_GRAY]敵[]が近づいてきます。\n\n2ウェーブの間、コアを守ってください。ターレットをもっと設置しましょう。
tutorial.lead = 他の鉱石も使ってみましょう。[accent]鉛[]を見つけて、採掘しましょう。\n\nユニットからコアにドラッグして、資源を転送できます。
tutorial.smelter = 銅を鉛はやわらかい金属です。\nより硬い[accent]高密度合金[]を溶鉱炉で作りましょう。
tutorial.densealloy = 溶鉱炉で作った合金を回収しましょう。\n\nまた、必要に応じて効率化しましょう。
tutorial.siliconsmelter = コアは、採掘やブロックの修復のために[accent]スピリットドローン[]を作成しています。\n\n他のユニットを作るには[accent]シリコン[]が必要です。\nシリコン溶鉱炉を作りましょう。
tutorial.silicondrill = シリコンには[accent]石炭[]と[accent]砂[]が必要です。\nまず、ドリルを作りましょう。
tutorial.generator = この技術には電力が必要です。\n[accent]火力発電機[]を作りましょう。
tutorial.generatordrill = 火力発電機には燃料が必要です。\nドリルから石炭を補給しましょう。
tutorial.node = 電力を送電する必要があります。\n火力発電機の隣に[accent]電源ノード[]を作って、電力を供給しましょう。
tutorial.nodelink = 電力は隣接している電力ブロックや発電機、接続された状態の電源ノードを使って送電することができます。\n\nードをタップしてから、発電機とシリコン溶鉱炉を選択して電力を繋げましょう。
tutorial.silicon = シリコン溶鉱炉で製造したシリコンを回収しましょう。\n\nまた、効率化をすることをお勧めします。
tutorial.daggerfactory = [accent]ダガーユニット製造機[]を作りましょう。\n\nこれを使うと攻撃ユニットを作ってくれます。
tutorial.router = 生産機には電力が必要です。\nコンベアーから資源を分けるためにルーターを作りましょう。
tutorial.dagger = 電源ノードを生産機に接続しましょう。\n要件が揃うと、ユニットを作り始めます。\n\n必要に応じて、ドリルや発電機、コンベアーを増やしましょう。
tutorial.battle = [LIGHT_GRAY]敵[]のコアが見つかりました。\nユニットやダガーで破壊しましょう。
block.copper-wall.description = 安価な防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに便利です。
block.copper-wall-large.description = 安価な大型防壁ブロックです。\n最初のウェーブでコアやターレットを保護するのに便利です。
block.dense-alloy-wall.description = 標準的な防壁ブロックです。\n敵からの保護に最適です。
block.dense-alloy-wall-large.description = 標準的な大型防壁ブロックです。\n敵からの保護に最適です。
block.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。
block.thorium-wall-large.description = 強化された大型防壁ブロックです。\n敵からの保護により強固です。
block.phase-wall.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
block.phase-wall-large.description = トリウムの壁ほど強固ではないが、強力な弾でなければ弾き返すことができます。
block.surge-wall.description = 最も硬い防壁ブロックです。\n偶に攻撃されると敵に電撃を与えます。
block.surge-wall-large.description = 最も硬い大型防壁ブロックです。\n偶に攻撃されると敵に電撃を与えます。
block.door.description = 小さなドアです。タップすることで開閉することができます。\nただし、ドアが開いている場合、弾や敵も通過できます。
block.door-large.description = 大きなドアです。タップすることで開閉することができます。\nただし、ドアが開いている場合、弾や敵も通過できます。
block.mend-projector.description = 周辺のブロックを修復します。
block.overdrive-projector.description = ドリルやコンベアなどの近くの施設の速度を向上させます。
block.force-projector.description = 六角形の力場を作り出し、内部の建造物やユニットなどを守ります。
block.shock-mine.description = 敵が踏むと、ダメージを与えます。敵には見えません。
block.duo.description = 小さく安価なターレットです。
block.arc.description = 小さな電撃ターレットです。敵に向かってランダムな半円状に電撃を放ちます。
block.hail.description = 小さな砲撃ターレットです。
block.lancer.description = チャージビームを放つ中型ターレットです。
block.wave.description = バブルの連射攻撃をする中型ターレットです。
block.salvo.description = 一斉に攻撃を行う中型のターレットです。
block.swarmer.description = バーストミサイルで攻撃する中型ターレットです。
block.ripple.description = 同時に複数ショットを発射する大型ターレットです。
block.cyclone.description = 大型連射ターレットです。
block.fuse.description = 短距離攻撃をする大型ターレットです。
block.spectre.description = 一度に2発の強力な弾を撃つ大型ターレットです。
block.meltdown.description = 強力な長距離攻撃をする大型ターレットです。
block.conveyor.description = 一般的なアイテム輸送ブロックです。アイテムを前方に移動し、自動的にターレットや製造機などに入れます。回転できます。
block.titanium-conveyor.description = 強化されたアイテム輸送ブロックです。通常のコンベアーよりも速くアイテムを移動します。
block.phase-conveyor.description = 強化されたアイテム転送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。
block.junction.description = 交差している2つのコンベアーをブリッジします。2つの異なるコンベアーが異なる場所に異なる材料を運んでいるときに便利です。
block.mass-driver.description = 長距離の輸送が可能なアイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。
block.smelter.description = 石炭を燃やして、銅と鉛から高密度合金を製錬します。
block.arc-smelter.description = 電力を使用して銅と鉛から高密度合金を製錬します。
block.silicon-smelter.description = 石炭と砂からシリコンを製造します。
block.plastanium-compressor.description = オイルとチタンからプラスチナニウムを製造します。
block.phase-weaver.description = 放射性トリウムと多量の砂からフェーズファイバーを作り出します。
block.alloy-smelter.description = チタンや鉛、シリコン、銅からサージ合金を製造します。
block.pulverizer.description = 石を砕いて砂にします。自然の砂がない時に便利です。
block.pyratite-mixer.description = 石炭、鉛、砂から燃えやすいピラタイトを作成します。
block.blast-mixer.description = 可燃性のピラタイトを石油を使用してさらに爆発性化合物にします。
block.cryofluidmixer.description = 水とチタンから冷却に効率的な冷却水を生成します。
block.solidifer.description = 溶岩から急速に冷やして石を生成します。
block.melter.description = 石を高温にして溶岩を生成します。
block.incinerator.description = 不要なアイテムや液体を焼却します。
block.biomattercompressor.description = バイオメターを圧縮し、石油を回収します。
block.separator.description = 石に水圧をかけて、石に含まれる様々な鉱石を回収します。
block.centrifuge.description = 分離機よりも効率的ですが、建設費が高価で電力が必要です。
block.power-node.description = 他のードに接続して電気を送ります。最大で4つの電力源やードなどに接続できます。隣接するブロックから電力を受け取ったり、電力の供給を行います。
block.power-node-large.description = 電源ードよりも大きく、最大で6つの電力源やードなどに接続できます。
block.battery.description = 電源ノード間で電力が余っていれば充電し、不足していれば供給します。
block.battery-large.description = 通常のバッテリーより多くの電力を貯めて置くことができます。
block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。
block.turbine-generator.description = 火力発電機より効率的ですが、水が必要です。
block.thermal-generator.description = 溶岩から大量の電力を発電します。
block.solar-panel.description = 太陽光から少量の電力を発電します。
block.solar-panel-large.description = 通常のソーラーパネルより大量の電力を発電できますが、建設費が高価です。
block.thorium-reactor.description = 高放射性のトリウムから大量の電力を発電します。これには一定の冷却が必要です。冷却が不十分な場合大きな爆発が発生します。
block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。
block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。アンローダーをタップすると搬出するアイテムを変更することができます。
block.container.description = 各種類のアイテムを少量ずつ保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。 [LIGHT_GRAY]アンローダー[]を使って、コンテナーからアイテムを搬出できます。
block.vault.description = 各種類のアイテムを大量に保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。[LIGHT_GRAY]アンローダー[]を使って、ボールトからアイテムを搬出できます。
block.mechanical-drill.description = 安価なドリルです。採掘可能な鉱脈に設置すると、アイテムを採掘して搬出します。
block.pneumatic-drill.description = 速く採掘できるように改善されたドリルです。また、より硬い鉱石も採掘することができます。
block.laser-drill.description = 電力を使用して、レーザー技術でより速く採掘することができます。また、このドリルで放射性トリウムを回収することができます。
block.blast-drill.description = 高級ドリルです。大量の電力が必要です。
block.water-extractor.description = 地面から水を汲み上げます。近くに湖がない場合に便利です。
block.cultivator.description = 水で土壌を耕して、バイオメターを回収します。
block.oil-extractor.description = 大量の電力を使用して、砂から石油を回収します。近くに油田がない場合に便利です。
block.dart-ship-pad.description =  今使っている機体から一般的な戦闘機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.trident-ship-pad.description = 今使っている機体から武装した爆撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.javelin-ship-pad.description = 今使っている機体から速くて強い電撃を放つ要撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.glaive-ship-pad.description = 今使っている機体から大きく、重武装された攻撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.tau-mech-pad.description = 今使っている機体から仲間の建物やユニットを修復する支援型機体に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.delta-mech-pad.description = 今使っている機体から速く突撃攻撃に向いた軽装備の戦闘機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.omega-mech-pad.description = 今使っている機体から最前線での戦いに向けた重装備の大型機体に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.spirit-factory.description = 鉱石の採掘やブロックの修復を行う軽いドローンを製造します。
block.phantom-factory.description = スピリットドローンより効率的な強化されたドローンユニットを製造します。
block.wraith-factory.description = 素速く、突撃攻撃が得意な戦闘ユニットを製造します。
block.ghoul-factory.description = 重爆撃機を製造します。
block.dagger-factory.description = 一般的な地上ユニットを製造します。
block.titan-factory.description = 強化され武装した地上ユニットを製造します。
block.fortress-factory.description = 地上砲撃ユニットを製造します。
block.revenant-factory.description = 航空レーザーユニットを製造します。
block.repair-point.description = 近くの負傷したユニットを修復します。
block.command-center.description = 仲間のAIの動作を変更できるようにします。現在は攻撃、撤退、警戒に対応しています。
block.conduit.description = 一般的な液体輸送ブロックです。液体版のコンベアーです。ポンプや他のパイプに使うことができます。
block.pulse-conduit.description = 強化された液体輸送ブロックです。通常のパイプより速く多くのアイテムを輸送することができます。
block.phase-conduit.description = 強化された液体転送ブロックです。電力を使用して、液体を他の離れたフューズコンベアーに転送することができます。
block.liquid-router.description = 一つの方向から受け取った液体を他の3方向に搬出します。一定の量の液体を貯めておくこともできます。一つの資源から複数に分ける際に便利です。
block.liquid-tank.description = たくさんの量の水を保管できます。需要が安定しない素材の製造時や重要な施設の冷却水の予備として使えます。
block.liquid-junction.description = 交差している2つのコンベアーをブリッジします。2つの異なるパイプが異なる場所に異なる材料を運んでいるときに便利です。
block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に輸送することができます。
block.mechanical-pump.description = 安価で性能の低いポンプです。電力が必要ありません。
block.rotary-pump.description = 強化されたポンプです。電力を使用して2倍速く搬出します。
block.thermal-pump.description = 高級ポンプです。機械ポンプより3倍速く、唯一溶岩を採取できるポンプです。
block.router.description = 一つの方向から受け取ったアイテムを他の3方向に搬出します。一つの資源から複数に分ける際に便利です。
block.distributor.description = 高度なルーターです。アイテムを7方向に均等に分けて搬出します。
block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に輸送することができます。
block.alpha-mech-pad.description = 電力を使用して、機体を[accent]アルファ[]機体に作り直します。
block.itemsource.description = アイテムを無限に搬出します。サンドボックスのみ。
block.liquidsource.description = 液体を無限に搬出します。サンドボックスのみ。
block.itemvoid.description = 電力なしでアイテムを廃棄します。サンドボックスのみ。
block.powerinfinite.description = 無限に電力を搬出します。サンドボックスのみ。
block.powervoid.description = 入力されたすべての電力を破棄します。サンドボックスのみ。
liquid.water.description = 機械の冷却や廃棄物の処理に一般的に使用されます。
liquid.lava.description = 冷却して石にしたり、発電や一部ターレットの弾薬として使用することができます。
liquid.oil.description = 燃焼させたり、爆発させたり、冷却水しても使えます。
liquid.cryofluid.description = 冷却させるのに最も効率的な液体です。

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는
text.link.google-play.description = Google Play 스토어 정보 text.link.google-play.description = Google Play 스토어 정보
text.link.wiki.description = 공식 Mindustry 위키 (영어) text.link.wiki.description = 공식 Mindustry 위키 (영어)
text.linkfail = 링크를 여는데 실패했습니다! URL이 기기의 클립보드에 복사되었습니다. text.linkfail = 링크를 여는데 실패했습니다! URL이 기기의 클립보드에 복사되었습니다.
text.editor.web = HTML5 버전은 에디터 기능을 지원하지 않습니다! 게임을 다운로드 한 뒤에 사용 해 주세요.
text.web.unsupported = HTML5 버전은 이 기능을 지원하지 않습니다! 게임을 다운로드 한 뒤에 사용 해 주세요.
text.gameover = 코어가 터졌습니다. 게임 오버! text.gameover = 코어가 터졌습니다. 게임 오버!
text.gameover.pvp = [accent]{0}[] 팀이 승리했습니다! text.gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
text.sector.gameover = 이 구역을 공략하는데 실패했습니다. 포기 하시겠습니까? text.sector.gameover = 이 구역을 공략하는데 실패했습니다. 포기 하시겠습니까?
@@ -495,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]능력 : {0}
text.liquid.heatcapacity = [LIGHT_GRAY]발열량 : {0} text.liquid.heatcapacity = [LIGHT_GRAY]발열량 : {0}
text.liquid.viscosity = [LIGHT_GRAY]점도 : {0} text.liquid.viscosity = [LIGHT_GRAY]점도 : {0}
text.liquid.temperature = [LIGHT_GRAY]온도 : {0} text.liquid.temperature = [LIGHT_GRAY]온도 : {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = 적 스폰지점 block.spawn.name = 적 스폰지점
block.core.name = 코어 block.core.name = 코어
block.metalfloor.name = 철판 block.metalfloor.name = 철판
@@ -624,6 +623,7 @@ block.rtg-generator.name = 토륨 발전소
block.spectre.name = 스펙터 block.spectre.name = 스펙터
block.meltdown.name = 멜트다운 block.meltdown.name = 멜트다운
block.container.name = 컨테이너 block.container.name = 컨테이너
block.core.description = 게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다.
team.blue.name = 블루팀 team.blue.name = 블루팀
team.red.name = 레드팀 team.red.name = 레드팀
team.orange.name = 오렌지팀 team.orange.name = 오렌지팀
@@ -637,7 +637,6 @@ unit.phantom.name = 팬텀 드론
unit.phantom.description = 첨단 드론 유닛. 광석을 자동으로 채광하며, 아이템을 수집하고 블록을 수리합니다. 일반 드론보다 훨씬 효과적입니다. unit.phantom.description = 첨단 드론 유닛. 광석을 자동으로 채광하며, 아이템을 수집하고 블록을 수리합니다. 일반 드론보다 훨씬 효과적입니다.
unit.dagger.name = 귀여운 디거 unit.dagger.name = 귀여운 디거
unit.dagger.description = 밈의 대상으로 지정되어 이름이 바뀐 기본 지상 유닛입니다. unit.dagger.description = 밈의 대상으로 지정되어 이름이 바뀐 기본 지상 유닛입니다.
## unit.dagger.description = 기본 지상 유닛입니다. 스웜과 같이 쓰면 유용합니다.
unit.titan.name = 타이탄 unit.titan.name = 타이탄
unit.titan.description = 고급 지상 유닛입니다. 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다. unit.titan.description = 고급 지상 유닛입니다. 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다.
unit.ghoul.name = 구울 폭격기 unit.ghoul.name = 구울 폭격기
@@ -669,7 +668,6 @@ tutorial.daggerfactory = 이[accent] 귀여운 디거 기체 공장[]은\n\n공
tutorial.router = 공장을 작동시키기 위해 자원이 필요합니다.\n컨베이어에 운반되고 있는 자원을 분할할 분배기를 만드세요. tutorial.router = 공장을 작동시키기 위해 자원이 필요합니다.\n컨베이어에 운반되고 있는 자원을 분할할 분배기를 만드세요.
tutorial.dagger = 전력 노드를 공장에 연결하세요.\n일단 요구 사항이 충족되면 기체 생산을 시작합니다.\n\n필요에 따라 드릴 및 발전기, 컨베이어를 더 많이 만들 수 있습니다. tutorial.dagger = 전력 노드를 공장에 연결하세요.\n일단 요구 사항이 충족되면 기체 생산을 시작합니다.\n\n필요에 따라 드릴 및 발전기, 컨베이어를 더 많이 만들 수 있습니다.
tutorial.battle = [LIGHT_GRAY]적[]의 코어가 드러났습니다.\n당신의 부대와 귀여운 디거를 사용하여 파괴하세요. tutorial.battle = [LIGHT_GRAY]적[]의 코어가 드러났습니다.\n당신의 부대와 귀여운 디거를 사용하여 파괴하세요.
block.core.description = 게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다.
block.copper-wall.description = 구리로 만든 벽. block.copper-wall.description = 구리로 만든 벽.
block.copper-wall-large.description = 구리로 만든 큰 벽. block.copper-wall-large.description = 구리로 만든 큰 벽.
block.dense-alloy-wall.description = 합금으로 만든 벽. 구리벽보다 체력이 높습니다. block.dense-alloy-wall.description = 합금으로 만든 벽. 구리벽보다 체력이 높습니다.

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania
text.link.google-play.description = Google Play store listing text.link.google-play.description = Google Play store listing
text.link.wiki.description = Oficjana Wiki Mindustry text.link.wiki.description = Oficjana Wiki Mindustry
text.linkfail = Nie udało się otworzyć linku!\nURL został skopiowany. text.linkfail = Nie udało się otworzyć linku!\nURL został skopiowany.
text.editor.web = Wersja przeglądarkowa nie wspomaga edytora map!\nPobierz grę aby użyć edytora.
text.web.unsupported = Wersja przeglądarkowa nie wspomaga tej fukcji!\nPobierz grę aby użyć tej funkcji.
text.gameover = Rdzeń został zniszczony. text.gameover = Rdzeń został zniszczony.
text.gameover.pvp = The[accent] {0}[] team is victorious! text.gameover.pvp = The[accent] {0}[] team is victorious!
text.sector.gameover = This sector has been lost. Re-deploy? text.sector.gameover = This sector has been lost. Re-deploy?
@@ -370,6 +368,7 @@ setting.musicvol.name = Głośność muzyki
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 = Send Anonymous Crash Reports
text.keybind.title = Zmień ustawienia przycisków text.keybind.title = Zmień ustawienia przycisków
category.general.name = General category.general.name = General
category.view.name = View category.view.name = View
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Ability: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Wytrzymałość na przegrzewanie: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Wytrzymałość na przegrzewanie: {0}
text.liquid.viscosity = [LIGHT_GRAY]Lepkość: {0} text.liquid.viscosity = [LIGHT_GRAY]Lepkość: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0} text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = Core block.core.name = Core
block.metalfloor.name = Metal Floor block.metalfloor.name = Metal Floor

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = Pagina da Itch.io com os Downloads
text.link.google-play.description = Google Play store listing text.link.google-play.description = Google Play store listing
text.link.wiki.description = Wiki oficial do Mindustry text.link.wiki.description = Wiki oficial do Mindustry
text.linkfail = Falha ao abrir o link\nO Url foi copiado text.linkfail = Falha ao abrir o link\nO Url foi copiado
text.editor.web = A versão web não suporta o editor!\nBaixe o jogo para usar.
text.web.unsupported = A versão web não suporta este recurso! Baixe o jogo para usar.
text.gameover = O núcleo foi destruído. text.gameover = O núcleo foi destruído.
text.gameover.pvp = The[accent] {0}[] team is victorious! text.gameover.pvp = The[accent] {0}[] team is victorious!
text.sector.gameover = Esse setor foi perdido! Soltar Novamente? text.sector.gameover = Esse setor foi perdido! Soltar Novamente?
@@ -370,6 +368,7 @@ setting.musicvol.name = Volume da Música
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 = Send Anonymous Crash Reports
text.keybind.title = Refazer teclas text.keybind.title = Refazer teclas
category.general.name = General category.general.name = General
category.view.name = View category.view.name = View
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Ability: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacidade de aquecimento: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacidade de aquecimento: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosidade: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosidade: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0} text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = Core block.core.name = Core
block.metalfloor.name = Metal Floor block.metalfloor.name = Metal Floor

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io страница с загрузкой
text.link.google-play.description = Скачать для Android c Google play text.link.google-play.description = Скачать для Android c Google play
text.link.wiki.description = Официальная вики Mindustry(англ.) text.link.wiki.description = Официальная вики Mindustry(англ.)
text.linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена. text.linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена.
text.editor.web = Веб-версия не поддерживает редактор!\nЗагрузите игру, чтобы использовать его.
text.web.unsupported = Веб-версия не поддерживает эту функцию! Загрузите игру, чтобы использовать её.
text.gameover = Игра окончена text.gameover = Игра окончена
text.gameover.pvp = [accent] {0}[] команда победила! text.gameover.pvp = [accent] {0}[] команда победила!
text.sector.gameover = Этот сектор потерян. Высадится повторно? text.sector.gameover = Этот сектор потерян. Высадится повторно?
@@ -50,9 +48,9 @@ text.mission.main = Главная мисия:[LIGHT_GRAY] {0}
text.mission.info = Информация о миссии text.mission.info = Информация о миссии
text.mission.complete = Миссия выполнена! text.mission.complete = Миссия выполнена!
text.mission.complete.body = Сектор {0},{1} был завоёван. text.mission.complete.body = Сектор {0},{1} был завоёван.
text.mission.wave = Пережить следующее количество волн: [accent]{0}/{1}[]\nВолна в {2} text.mission.wave = Осталось[accent] {0}[] волн из[accent] {1}[]\nВолна через {2}
text.mission.wave.enemies = Осталось волн:[accent] {0}/{1}[]\n{2} враг. text.mission.wave.enemies = Осталось[accent] {0}/{1}[] волн:\n{2} враг.
text.mission.wave.enemy = Осталось волн:[accent] {0}/{1}[]\n{2} враг text.mission.wave.enemy = Осталось[accent] {0}/{1}[] волн\n{2} враг
text.mission.wave.menu = Пережить[accent] {0} []волн text.mission.wave.menu = Пережить[accent] {0} []волн
text.mission.battle = Уничтожьте ядро противника. text.mission.battle = Уничтожьте ядро противника.
text.mission.resource.menu = Добыть {0} х{1} text.mission.resource.menu = Добыть {0} х{1}
@@ -262,13 +260,13 @@ text.editor = Редактор
text.mapeditor = Редактор карт text.mapeditor = Редактор карт
text.donate = Донат text.donate = Донат
text.connectfail = [crimson]Не удалось подключиться к серверу: [accent] {0} text.connectfail = [crimson]Не удалось подключиться к серверу: [accent] {0}
text.error.unreachable = Server unreachable. text.error.unreachable = Сервер недоступен.
text.error.invalidaddress = Invalid address. text.error.invalidaddress = Некорректный адрес.
text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct! text.error.timedout = Время ожидания истекло!\nУбедитесь, что хост настроен для перенаправления портов и адрес корректный!
text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry! text.error.mismatch = Ошибка пакета:\nвозможное несоответствие версии клиента/сервера. \nУбедитесь, что у вас и у создателя сервера установлена последняя версия Mindustry\\!
text.error.alreadyconnected = Already connected. text.error.alreadyconnected = Вы уже подключены.
text.error.mapnotfound = Map file not found! text.error.mapnotfound = Map file not found!
text.error.any = Unkown network error. text.error.any = Неизвестная сетевая ошибка.
text.settings.language = Язык text.settings.language = Язык
text.settings.reset = Сбросить по умолчанию text.settings.reset = Сбросить по умолчанию
text.settings.rebind = Смена text.settings.rebind = Смена
@@ -370,6 +368,7 @@ setting.musicvol.name = Громкость музыки
setting.mutemusic.name = Заглушить музыку setting.mutemusic.name = Заглушить музыку
setting.sfxvol.name = Громкость звуковых эффектов setting.sfxvol.name = Громкость звуковых эффектов
setting.mutesound.name = Заглушить звук setting.mutesound.name = Заглушить звук
setting.crashreport.name = Отправлять анонимные отчёты о сбоях
text.keybind.title = Настройка управления text.keybind.title = Настройка управления
category.general.name = Основное category.general.name = Основное
category.view.name = Просмотр category.view.name = Просмотр
@@ -434,10 +433,10 @@ item.silicon.name = Кремень
item.silicon.description = Очень полезный полупроводник с применениями в солнечных батареях и множестве сложной электроники. item.silicon.description = Очень полезный полупроводник с применениями в солнечных батареях и множестве сложной электроники.
item.plastanium.name = Пластиний item.plastanium.name = Пластиний
item.plastanium.description = Легкий, пластичный материал, используемый в современных самолетах и боеприпасах для фрагментации. item.plastanium.description = Легкий, пластичный материал, используемый в современных самолетах и боеприпасах для фрагментации.
item.phase-fabric.name = Phase Fabric item.phase-fabric.name = Фазовая ткань
item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.phase-fabric.description = Невесомое вещество, используемое в современной электронике и технологии самовосстановления.
item.surge-alloy.name = Высокопрочный сплав item.surge-alloy.name = Высокопрочный сплав
item.surge-alloy.description = An advanced alloy with unique electrical properties. item.surge-alloy.description = Передовой сплав с уникальными электрическими свойствами.
item.biomatter.name = Биоматерия item.biomatter.name = Биоматерия
item.biomatter.description = Скопление органической кашки; используется для переработки в нефть или в качестве топлива. item.biomatter.description = Скопление органической кашки; используется для переработки в нефть или в качестве топлива.
item.sand.name = Песок item.sand.name = Песок
@@ -494,13 +493,14 @@ text.mech.ability = [LIGHT_GRAY]Способность: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Теплоёмкость: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Теплоёмкость: {0}
text.liquid.viscosity = [LIGHT_GRAY]Вязкость: {0} text.liquid.viscosity = [LIGHT_GRAY]Вязкость: {0}
text.liquid.temperature = [LIGHT_GRAY]Температура: {0} text.liquid.temperature = [LIGHT_GRAY]Температура: {0}
block.constructing = {0}\n[LIGHT_GRAY](В процессе)
block.spawn.name = Спаун врагов block.spawn.name = Спаун врагов
block.core.name = Ядро block.core.name = Ядро
block.metalfloor.name = Маличeский пoл block.metalfloor.name = Маличeский пoл
block.deepwater.name = Глубоководье block.deepwater.name = Глубоководье
block.water.name = Вода block.water.name = Вода
block.lava.name = Лава block.lava.name = Лава
block.tar.name = Tar block.tar.name = Дёготь
block.blackstone.name = Чёрный камень block.blackstone.name = Чёрный камень
block.stone.name = Камень block.stone.name = Камень
block.dirt.name = Земля block.dirt.name = Земля
@@ -557,9 +557,9 @@ block.pneumatic-drill.name = Пневматический бур
block.laser-drill.name = Лазерный бур block.laser-drill.name = Лазерный бур
block.water-extractor.name = Экстрактор воды block.water-extractor.name = Экстрактор воды
block.cultivator.name = Культиватор block.cultivator.name = Культиватор
block.alpha-mech-pad.name = Завод мехов "Альфа" block.alpha-mech-pad.name = Реконструктор мехов "Альфа"
block.dart-ship-pad.name = Реконструктор дротиковых самолётов block.dart-ship-pad.name = Реконструктор кораблей "Дротик"
block.delta-mech-pad.name = Завод мехов "Дельта" block.delta-mech-pad.name = Реконструктор мехов "Дельта"
block.javelin-ship-pad.name = Реконструктор кораблей "Джавелин" block.javelin-ship-pad.name = Реконструктор кораблей "Джавелин"
block.trident-ship-pad.name = Реконструктор кораблей "Трезубeц" block.trident-ship-pad.name = Реконструктор кораблей "Трезубeц"
block.glaive-ship-pad.name = Реконструктор кораблей "Копьё" block.glaive-ship-pad.name = Реконструктор кораблей "Копьё"
@@ -668,7 +668,7 @@ tutorial.daggerfactory = Постройте[accent] завод по произв
tutorial.router = Заводы нуждаются в ресурсах для работы.\nСоздайте маршрутизатор для разделения ресурсов конвейера. tutorial.router = Заводы нуждаются в ресурсах для работы.\nСоздайте маршрутизатор для разделения ресурсов конвейера.
tutorial.dagger = Соедините силовой узел с заводом.\nПосле выполнения требований будет создан мех. \n\nПри необходимости создайте дополнительные буры, генераторы и конвейеры. tutorial.dagger = Соедините силовой узел с заводом.\nПосле выполнения требований будет создан мех. \n\nПри необходимости создайте дополнительные буры, генераторы и конвейеры.
tutorial.battle = [LIGHT_GRAY] Враг[] показал своё ядро.\nУничтожьте его своим мехом и вашой новой боевой единицой. tutorial.battle = [LIGHT_GRAY] Враг[] показал своё ядро.\nУничтожьте его своим мехом и вашой новой боевой единицой.
block.copper-wall.description = Стена с самым маленьким запасом прочности.\n Хороша в начале игры для защиты. block.copper-wall.description = Дешевый оборонительный блок.\nПолезно для защиты ядра и турелей во время первых волн.
block.copper-wall-large.description = Большая стена самым маленьким запасом прочности.\n Хороша в начале игры. block.copper-wall-large.description = Большая стена самым маленьким запасом прочности.\n Хороша в начале игры.
block.dense-alloy-wall.description = Стена с показателем прочности "ниже среднего". block.dense-alloy-wall.description = Стена с показателем прочности "ниже среднего".
block.dense-alloy-wall-large.description = Большая стена с показателем прочности "ниже среднего". block.dense-alloy-wall-large.description = Большая стена с показателем прочности "ниже среднего".
@@ -684,7 +684,7 @@ block.mend-projector.description = Ремонтирует строения в н
block.overdrive-projector.description = Ускоряет в небольшом радиусе все ваши действия. block.overdrive-projector.description = Ускоряет в небольшом радиусе все ваши действия.
block.force-projector.description = Создаёт в небольшом радиусе силовое поле, которое защищает от атак противника. block.force-projector.description = Создаёт в небольшом радиусе силовое поле, которое защищает от атак противника.
block.shock-mine.description = Поставьте её на землю. Она бьётся ЭЛЕКТРИЧЕСТВОМ О_О block.shock-mine.description = Поставьте её на землю. Она бьётся ЭЛЕКТРИЧЕСТВОМ О_О
block.duo.description = Хорошая турель начальная турель. Используйте стены для её зашиты.\n\nИспользует в качестве снарядов медь, плотный сплав, кремний и пиротит.\n\nМожно подвести воду и криогенную жидкость для ускорения стрельбы. block.duo.description = Маленькая и дешёвая турель.
block.arc.description = Турель с малым радиусом атаки. В качестве патронов требует воду или криогенную жидкость. Также нужна энергия. block.arc.description = Турель с малым радиусом атаки. В качестве патронов требует воду или криогенную жидкость. Также нужна энергия.
block.hail.description = Дальнобойная начальная турель.\nИспользует в качестве снарядов плотный сплав, кремний и пиротит.\nДля ускорения стрельбы можно подвести воду и криогенную жидкость. block.hail.description = Дальнобойная начальная турель.\nИспользует в качестве снарядов плотный сплав, кремний и пиротит.\nДля ускорения стрельбы можно подвести воду и криогенную жидкость.
block.lancer.description = Турель, которая стреляет лазером на среднее расстояние.\nИспользует в качестве снарядов энергию.\nДля ускорения стрельбы можно подвести воду, нефть и криогенную жидкость. block.lancer.description = Турель, которая стреляет лазером на среднее расстояние.\nИспользует в качестве снарядов энергию.\nДля ускорения стрельбы можно подвести воду, нефть и криогенную жидкость.
@@ -727,54 +727,54 @@ block.thermal-generator.description = [accent]Горячее восприним
block.solar-panel.description = Зелёная энергия. Бесконечный источник энергии. block.solar-panel.description = Зелёная энергия. Бесконечный источник энергии.
block.solar-panel-large.description = Зелёная энергия. Большой и бесконечный источник энергии. block.solar-panel-large.description = Зелёная энергия. Большой и бесконечный источник энергии.
block.thorium-reactor.description = Производит энергию в большом количестве. Может взорваться. Требуется торий и жидкость для охлаждения (вода или криогенная). block.thorium-reactor.description = Производит энергию в большом количестве. Может взорваться. Требуется торий и жидкость для охлаждения (вода или криогенная).
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 = Радиоизотопный термоэлектрический генератор, который не требует охлаждения, но обеспечивает меньшую мощность, чем ториевый реактор.
block.unloader.description = Выгружает из ядра или хранилища верхний левый предмет. block.unloader.description = Выгружает из ядра или хранилища верхний левый предмет.
block.container.description = Может хранить 500 ед. ресурсов. С помощью разгрузчика можно достать ресурсы из него. block.container.description = Хранит небольшое количество предметов(250). Используйте его для создания буферов, когда существует непостоянная потребность в материалах. [LIGHT_GRAY] Разгрузчик[] можно использовать для извлечения элементов из хранилища.
block.vault.description = Хранит предметы в количестве до 2 000. block.vault.description = Хранит большое количество предметов(1000). Используйте его для создания буферов, когда существует непостоянная потребность в материалах.[LIGHT_GRAY] Разгрузчик[] можно использовать для извлечения элементов из хранилища.
block.mechanical-drill.description = Самый первый доступный бур. Добывает медь, свинец, уголь, песок. Можно подвести к нему [BLUE] воду[] для увеличения скорости сверления. block.mechanical-drill.description = Самый первый доступный бур. \n\nДобывает медь, свинец, уголь, песок. \n\nМожно подвести к нему [BLUE] воду[] для увеличения скорости сверления.
block.pneumatic-drill.description = Улучшенная версия механического бура.\n\nДобывает тоже самое, что и механический бур. Также может добывать титан и камень.\n\nМожно подвести к нему[BLUE] воду[] для увеличения скорости сверления. block.pneumatic-drill.description = Улучшенная версия механического бура.\n\nДобывает тоже самое, что и механический бур. Также может добывать титан и камень.\n\nМожно подвести к нему[BLUE] воду[] для увеличения скорости сверления.
block.laser-drill.description = Улучшенная версия пневматического бура.\n\nДобывает тоже самое, что и пневматический бур. Также может добывать торий.\n\nМожно подвести к нему[BLUE] воду[] для увеличения скорости сверления. block.laser-drill.description = Улучшенная версия пневматического бура.\n\nДобывает тоже самое, что и пневматический бур. Также может добывать торий.\n\nМожно подвести к нему[BLUE] воду[] для увеличения скорости сверления.
block.blast-drill.description = Самый мощный бур.\n\n Добывает тоже самое, что и лазерный бур. Сверлит быстрей всех буров, но требует ещё больше энергии.\n\n Можно подвести к нему [BLUE]воду[] для увеличения скорости сверления. block.blast-drill.description = Самый мощный бур.\n\nДобывает тоже самое, что и лазерный бур. Сверлит быстрей всех буров, но требует ещё больше энергии.\n\nМожно подвести к нему [BLUE]воду[] для увеличения скорости сверления.
block.water-extractor.description = Добывает воду из земли. Требует Энергию. block.water-extractor.description = Извлекает воду из земли. Используйте его, когда поблизости нет озера.
block.cultivator.description = Производит биоматерию из травы и воды. Требует энергии. block.cultivator.description = Культирует почву водой для получения биоматерии.
block.oil-extractor.description = Производит нефть из динозавров(зачёркнуто), воды и песка. Требует энергии. block.oil-extractor.description = Использует большое количество энергии для добычи нефти из песка, динозавров(зачёркнуто). Используйте его, когда поблизости нет прямого источника нефти.
block.dart-ship-pad.description = Превращает вас в дротиковый самолёт. Реконструктор требует энергию.\nПодробности про дротиковых самолётов в "разблокированное". block.dart-ship-pad.description = Оставьте свое текущее судно и перейдите на основной истребитель.\nИспользуйте двойное нажатие, стоя на реконструкторе, чтобы превратиться в этот мех.
block.trident-ship-pad.description = Превращает вас в Трезубeц. Реконструктор требует энергию.\nПодробности про Трезубeц в "разблокированное". block.trident-ship-pad.description = Оставьте свой текущий корабль и перейдите в достаточно хорошо бронированный тяжёлый бомбардировщик.\nИспользуйте двойное нажатие, стоя на реконструкторе, чтобы превратиться в этот мех.
block.javelin-ship-pad.description = Превращает вас в Джавелин. Реконструктор требует энергию.\nПодробности про Джавелин в "разблокированное". block.javelin-ship-pad.description = Оставьте свой текущий корабль и перейдите в сильный и быстрый перехватчик с молниеносным оружием.\nИспользуйте двойное нажатие, стоя на реконструкторе, чтобы превратиться в этот мех.
block.glaive-ship-pad.description = Превращает вас в Копьё. Реконструктор требует энергию.\nПодробности про Копьё в "разблокированное". block.glaive-ship-pad.description = Превращает вас в Копьё. Реконструктор требует энергию.\nПодробности про Копьё в "разблокированное".
block.tau-mech-pad.description = Превращает вас в Тау. Реконструктор требует энергию.\nПодробности про Тау в "разблокированное". block.tau-mech-pad.description = Покиньте свой текущий корабль и превратитесь в мех поддержки, который может исцелять дружественные здания и юниты.\nИспользуйте двойное нажатие, стоя на реконструкторе, чтобы превратиться в этот мех.
block.delta-mech-pad.description = Превращает вас в "Дельта". Реконструктор требует энергию.\nПодробности про "Дельта" в "разблокированное". block.delta-mech-pad.description = Оставьте свой текущий корабль и перейдите в большой, хорошо бронированный боевой корабль.\nИспользуйте двойное нажатие, стоя на реконструкторе, чтобы превратиться в этот мех.
block.omega-mech-pad.description = Превращает вас в Омега. Реконструктор требует энергию.\nПодробности про Омега в "разблокированное". block.omega-mech-pad.description = Оставьте свой текущий корабль и превратите его в громоздкий и хорошо бронированный мех, сделанный для фронтовых нападений. \nИспользуйте двойное нажатие, стоя на реконструкторе, чтобы превратиться в этот мех.
block.spirit-factory.description = Производит дронов типа "призрак" block.spirit-factory.description = Производит легкие дроны, которые добывают руду(медную и свинцовую) и ремонтирует блоки.
block.phantom-factory.description = Производит дронов типа "фантом"\nПодробности в "разблокированное" block.phantom-factory.description = Производит усовершенствованные единицы, которые значительно эффективнее, чем дрон-привидение.
block.wraith-factory.description = Производит призрачных истребителей\nПодробности в "разблокированное" block.wraith-factory.description = Производит быстрые и летающие боевые единицы.
block.ghoul-factory.description = Производит гулевых бомбардировщиков\nПодробности в "разблокированное" block.ghoul-factory.description = Производит тяжёлых ковровых бомбардировщиков.
block.dagger-factory.description = Производит\nПодробности в "разблокированное" block.dagger-factory.description = Производит основных наземных боевых единиц.
block.titan-factory.description = Производит мехов типа "Титан".\nПодробности в "разблокированное" block.titan-factory.description = Производит продвинутые защищённые боевые единицы.
block.fortress-factory.description = Огромный медленный мех обладающий такой-же огромной пушкой. block.fortress-factory.description = Производит тяжелые артиллерийские боевые единицы.
block.revenant-factory.description = Производит бомбардировщиков типа "Потусторонний убийца"\nПодробности в "разблокированное" block.revenant-factory.description = Производит тяжелые наземные боевые единицы.
block.repair-point.description = Может ремонтировать вас и ваши боевые единицы block.repair-point.description = Может ремонтировать вас и ваши боевые единицы
block.command-center.description = Позволяет управлять боевыми единицами.\nСтрелочка - атаковать\nЩит - отступать. block.command-center.description = Позволяет изменять дружественное поведение ИИ. В настоящее время поддерживаются команды атаки, отступления и патрулирования.
block.conduit.description = Конвейер для жидкостей первого поколения. Медленная скорость передачи жидкости. block.conduit.description = Основной блок транспортировки жидкости. Работает как конвейер, но с жидкостями. Лучше всего использовать экстракторы, насосы или т.п..
block.pulse-conduit.description = Конвейер для жидкостей второго поколения. block.pulse-conduit.description = Улучшенный блок транспортировки жидкости. Транспортирует жидкости быстрее и хранит больше, чем стандартные.
block.phase-conduit.description = Лучший трубопровод, требует энергию. Похоже, он из будущего. block.phase-conduit.description = Улучшенный блок транспортировки жидкости. Использует энергию для передачи жидкостей на подключенный фазовый канал на несколько плиток.
block.liquid-router.description = Распределяет жидкость на 4 стороны. block.liquid-router.description = Принимает жидкости с одного направления и равномерно выводит их до трех других направлений. Может также хранить определенное количество жидкости. Полезно для разделения жидкостей из одного источника на несколько целей.
block.liquid-tank.description = Хранит жидкость. block.liquid-tank.description = Хранит большое количество жидкостей. Используйте его для создания буферов, когда существует непостоянная потребность в материалах или в качестве защиты для охлаждения жизненно важных блоков.
block.liquid-junction.description = Название говорит само за себя. С помощью него можно сделать две трубы, которые проходят через друг-друга и не смешиваются. block.liquid-junction.description = Действует как мост для двух пересекающихся каналов. Полезно в ситуациях с двумя различными каналами, перевозящими различные жидкости в разные места.
block.bridge-conduit.description = Позволяет проходить над возвышенностями(блоками). Лучше всего подключать последовательно и в линию. block.bridge-conduit.description = Расширенный блок транспортировки жидкости. Позволяет транспортировать жидкости до 3 блоков любого ландшафта или здания. Лучше всего подключать последовательно и в линию.
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.router.description = Принимает предметы из одного направления и равномерно выводит их до трех других направлений. Полезно для разделения материалов из одного источника на несколько целей. block.router.description = Принимает предметы из одного направления и равномерно выводит их до трёх других направлений. Полезно для разделения материалов из одного источника на несколько целей.
block.distributor.description = Продвинутый маршрутизатор, который равномерно разбивает элементы до 7 направлений. block.distributor.description = Передовой маршрутизатор, который равномерно разбивает элементы до 7 других направлений.
block.bridge-conveyor.description = Продвинутый транспортный блок элемента. Позволяет транспортировать предметы до 3-х плиток любого ландшафта или здания. block.bridge-conveyor.description = Улучшенный транспортный блок элементов. Позволяет транспортировать предметы до 3-х блоков над любым ландшафтом или зданием.
block.alpha-mech-pad.description = Превращает вас в "Альфа". Требует энергию.\n Подробности про "Альфа" в "разблокированное". block.alpha-mech-pad.description = Превращает вас в мех [accent] Альфа[]. Требует энергию.
block.itemsource.description = Из этого блока можно получить любой предмет. block.itemsource.description = Бесконечно выводит предметы. Работает только в песочнице.
block.liquidsource.description = Из этого блока можно получить любую жидкость. block.liquidsource.description = Бесконечно выводит жидкости. Работает только в песочнице.
block.itemvoid.description = Предметы просто уходят в пустоту block.itemvoid.description = Уничтожает любые предметы, которые входят в него, без использования энергии. Работает только в песочнице.
block.powerinfinite.description = Бесконечность — не предел. block.powerinfinite.description = Бесконечность — не предел. Бесконечно выводит энергию. Доступен только в песочнице.
block.powervoid.description = Жидкости просто уходят в пустоту block.powervoid.description = Энергия просто уходит в пустоту. Присутствует только в песочнице.
liquid.water.description = Намного лучше чем [BLUE]монооксид дигидрогена[].\n\n Для получения воды используйте помпу(насос) на источнике(блоке) или экстрактор воды.\n\n Эту жидкость можно подвести к бурам для ускорения скорости добычи или к турелям для ускорения стрельбы. liquid.water.description = Намного лучше чем [BLUE]монооксид дигидрогена[].\n\n Для получения воды используйте помпу(насос) на источнике(блоке) или экстрактор воды.\n\n Эту жидкость можно подвести к бурам для ускорения скорости добычи или к турелям для ускорения стрельбы.
liquid.lava.description = [accent]Горячо...\nВещество расплавленное из горно-каменных пород.\nСлужит как топливо для термального генератора. liquid.lava.description = [accent]Горячо...\nВещество расплавленное из горно-каменных пород.\nСлужит как топливо для термального генератора.
liquid.oil.description = Кто-то писал о добавлении золота в игру. Его добавили, правда оно какое-то чёрное...\nСмесь жидких углеводородов, выделяющаяся из природного газа в результате снижения температуры и пластового давления.\nСлужит для пластиенивого компрессора и т.д.. liquid.oil.description = Кто-то писал о добавлении золота в игру. Его добавили, правда оно какое-то чёрное...\nСмесь жидких углеводородов, выделяющаяся из природного газа в результате снижения температуры и пластового давления.\nСлужит для пластиниевого компрессора и т.д..
liquid.cryofluid.description = Жидкость с температурой ниже чем -273 градусов по цельсию. Может быть использована для ускорения стрельбы турелей или для охлаждения чего-то. liquid.cryofluid.description = Жидкость с температурой ниже чем -273 градусов по цельсию. Может быть использована для ускорения стрельбы турелей или для охлаждения чего-то.

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = Bilgisayar ve Site versiyonunun bulundugu Site
text.link.google-play.description = Google Play magaza sayfasi text.link.google-play.description = Google Play magaza sayfasi
text.link.wiki.description = Orjinal Mindustry Bilgilendirme Sayfasi text.link.wiki.description = Orjinal Mindustry Bilgilendirme Sayfasi
text.linkfail = Link Acilamadi!\nLink sizin icin kopyalandi. text.linkfail = Link Acilamadi!\nLink sizin icin kopyalandi.
text.editor.web = The web version does not support the editor!\nDownload the game to use it.
text.web.unsupported = Site versiyonu bunu desteklemiyor! Bilgisayar versiyonunu indirmeniz gerek.
text.gameover = Cekirdegin yok edildi. text.gameover = Cekirdegin yok edildi.
text.gameover.pvp = The[accent] {0}[] team is victorious! text.gameover.pvp = The[accent] {0}[] team is victorious!
text.sector.gameover = Sektor kaybedildi. Geri gitmek ister misin? text.sector.gameover = Sektor kaybedildi. Geri gitmek ister misin?
@@ -370,6 +368,7 @@ setting.musicvol.name = Ses yuksekligi
setting.mutemusic.name = Sesi kapat setting.mutemusic.name = Sesi kapat
setting.sfxvol.name = Ses seviyesi setting.sfxvol.name = Ses seviyesi
setting.mutesound.name = Sesi kapat setting.mutesound.name = Sesi kapat
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Tuslari ayarla text.keybind.title = Tuslari ayarla
category.general.name = General category.general.name = General
category.view.name = Goster category.view.name = Goster
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]yetenek gucu: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]isinma kapasitesi: {0} text.liquid.heatcapacity = [LIGHT_GRAY]isinma kapasitesi: {0}
text.liquid.viscosity = [LIGHT_GRAY]Yari sivilik: {0} text.liquid.viscosity = [LIGHT_GRAY]Yari sivilik: {0}
text.liquid.temperature = [LIGHT_GRAY]isi: {0} text.liquid.temperature = [LIGHT_GRAY]isi: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = cekirdek block.core.name = cekirdek
block.metalfloor.name = metal zemin block.metalfloor.name = metal zemin

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = PC yüklemeleri ve web sürümü ile itch.io say
text.link.google-play.description = Google Play mağaza sayfası text.link.google-play.description = Google Play mağaza sayfası
text.link.wiki.description = Resmi Mindustry Wikipedi'si text.link.wiki.description = Resmi Mindustry Wikipedi'si
text.linkfail = Bağlantıılamadı! URL, yazı tahtanıza kopyalandı. text.linkfail = Bağlantıılamadı! URL, yazı tahtanıza kopyalandı.
text.editor.web = Web sürümü editörü desteklemiyor! Editörü kullanmak için oyunu indirin.
text.web.unsupported = The web version does not support this feature! Download the game to use it.
text.gameover = Çekirdek yok edildi. text.gameover = Çekirdek yok edildi.
text.gameover.pvp = The[accent] {0}[] team is victorious! text.gameover.pvp = The[accent] {0}[] team is victorious!
text.sector.gameover = This sector has been lost. Re-deploy? text.sector.gameover = This sector has been lost. Re-deploy?
@@ -370,6 +368,7 @@ setting.musicvol.name = Müzik sesi
setting.mutemusic.name = Müziği Kapat setting.mutemusic.name = Müziği Kapat
setting.sfxvol.name = SFX Hacmi setting.sfxvol.name = SFX Hacmi
setting.mutesound.name = Sesi kapat setting.mutesound.name = Sesi kapat
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Tuşları yeniden ayarla text.keybind.title = Tuşları yeniden ayarla
category.general.name = General category.general.name = General
category.view.name = View category.view.name = View
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Ability: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperature: {0} text.liquid.temperature = [LIGHT_GRAY]Temperature: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = Core block.core.name = Core
block.metalfloor.name = Metal Floor block.metalfloor.name = Metal Floor

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = Itch.io сторінка з веб-версіє
text.link.google-play.description = Скачати з Google Play для Android text.link.google-play.description = Скачати з Google Play для Android
text.link.wiki.description = Офіційна Mindustry вікі (англ.) text.link.wiki.description = Офіційна Mindustry вікі (англ.)
text.linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійовано у ваш буфер обміну. text.linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійовано у ваш буфер обміну.
text.editor.web = Веб-версія не підтримує редактора! \nЗавантажте гру, щоб використовувати його.
text.web.unsupported = Веб-версія не підтримує цю функцію! Завантажте гру, щоб використовувати її.
text.gameover = Гру закінчено text.gameover = Гру закінчено
text.gameover.pvp = [accent] {0}[] команда перемогла! text.gameover.pvp = [accent] {0}[] команда перемогла!
text.sector.gameover = Цей сектор було втрачено. Повторно висадитися? text.sector.gameover = Цей сектор було втрачено. Повторно висадитися?
@@ -370,6 +368,7 @@ setting.musicvol.name = Гучність музики
setting.mutemusic.name = Заглушити музику setting.mutemusic.name = Заглушити музику
setting.sfxvol.name = Гучність звукових ефектів setting.sfxvol.name = Гучність звукових ефектів
setting.mutesound.name = Заглушити звук setting.mutesound.name = Заглушити звук
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Налаштування управління text.keybind.title = Налаштування управління
category.general.name = Основне category.general.name = Основне
category.view.name = Перегляд category.view.name = Перегляд
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Здібність: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Теплоємність: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Теплоємність: {0}
text.liquid.viscosity = [LIGHT_GRAY]В'язкість: {0} text.liquid.viscosity = [LIGHT_GRAY]В'язкість: {0}
text.liquid.temperature = [LIGHT_GRAY]Температура: {0} text.liquid.temperature = [LIGHT_GRAY]Температура: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Спавн ворога block.spawn.name = Спавн ворога
block.core.name = Ядро block.core.name = Ядро
block.metalfloor.name = Металічна підлога block.metalfloor.name = Металічна підлога

View File

@@ -9,10 +9,8 @@ text.link.itch.io.description = PC版下载和网页版(itch.io)
text.link.google-play.description = 从谷歌商店获取安卓版 text.link.google-play.description = 从谷歌商店获取安卓版
text.link.wiki.description = 官方 Mindustry 维基 text.link.wiki.description = 官方 Mindustry 维基
text.linkfail = 打开链接失败!\nURL 已经复制到剪贴板。 text.linkfail = 打开链接失败!\nURL 已经复制到剪贴板。
text.editor.web = 网页版不支持地图编辑器!\n下载以使用编辑器。
text.web.unsupported = 网页版不支持此功能,请下载以使用此功能。
text.gameover = 你的核心被摧毁了! text.gameover = 你的核心被摧毁了!
text.gameover.pvp = The[accent] {0}[] team is victorious! text.gameover.pvp = accent] {0}[] 队获胜!
text.sector.gameover = 这个区域失守了,要重新部署吗? text.sector.gameover = 这个区域失守了,要重新部署吗?
text.sector.retry = 重试 text.sector.retry = 重试
text.highscore = [accent]新纪录! text.highscore = [accent]新纪录!
@@ -39,32 +37,32 @@ text.sectors = 区域
text.sector = 区域: [LIGHT_GRAY]{0} text.sector = 区域: [LIGHT_GRAY]{0}
text.sector.time = 时间: [LIGHT_GRAY]{0} text.sector.time = 时间: [LIGHT_GRAY]{0}
text.sector.deploy = 部署 text.sector.deploy = 部署
text.sector.abandon = Abandon text.sector.abandon = 放弃
text.sector.abandon.confirm = Are you sure you want to abandon all progress at this sector?\nThis cannot be undone! text.sector.abandon.confirm = 你确定要放弃这个区域的所有进展吗?\n此操作不可撤销
text.sector.resume = 继续 text.sector.resume = 继续
text.sector.locked = [scarlet][[Incomplete] text.sector.locked = [scarlet][[Incomplete]
text.sector.unexplored = [accent][[Unexplored] text.sector.unexplored = [accent][[Unexplored]
text.missions = Missions:[LIGHT_GRAY] {0} text.missions = 任务:[LIGHT_GRAY] {0}
text.mission = 任务[LIGHT_GRAY] {0} text.mission = 任务[LIGHT_GRAY] {0}
text.mission.main = Main Mission:[LIGHT_GRAY] {0} text.mission.main = 主要任务:[LIGHT_GRAY] {0}
text.mission.info = Mission Info text.mission.info = 任务信息
text.mission.complete = 任务完成! text.mission.complete = 任务完成!
text.mission.complete.body = 区域 {0},攻占了 {1} 个 text.mission.complete.body = 区域 {0},攻占了 {1} 个
text.mission.wave = 存活了 [accent]{0}/{1}[] 波。\nWave in {2} text.mission.wave = 存活了 [accent]{0}/{1}[] 波。\n下一波 {2}
text.mission.wave.enemies = Survive[accent] {0}/{1} []waves\n{2} Enemies text.mission.wave.enemies = 存活[accent] {0}/{1} []\n{2} 敌人
text.mission.wave.enemy = Survive[accent] {0}/{1} []waves\n{2} Enemy text.mission.wave.enemy = 存活[accent] {0}/{1} []\n{2} 敌人
text.mission.wave.menu = Survive[accent] {0} []waves text.mission.wave.menu = 存活[accent] {0} []
text.mission.battle = 摧毁敌方基地。 text.mission.battle = 摧毁敌方基地。
text.mission.resource.menu = Obtain {0} x{1} text.mission.resource.menu = 获取{0}x{1}
text.mission.resource = {0}:\n[accent]{1}/{2}[] text.mission.resource = {0}\n[accent]{1}/{2}[]
text.mission.block = Create {0} text.mission.block = 建造{0}
text.mission.unit = Create {0} Unit text.mission.unit = 生产{0}机组
text.mission.command = Send Command {0} To Units text.mission.command = 发送{0}指令至机组
text.mission.linknode = Link Power Node text.mission.linknode = 连接能源节点
text.mission.display = [accent]Mission:\n[LIGHT_GRAY]{0} text.mission.display = [accent]任务︰\n[LIGHT_GRAY]{0}
text.mission.mech = Switch to mech[accent] {0}[] text.mission.mech = 转换至[accent]{0}[]机甲
text.mission.create = Create[accent] {0}[] text.mission.create = 制造[accent] {0}[]
text.none = <none> text.none = <>
text.close = 关闭 text.close = 关闭
text.quit = 退出 text.quit = 退出
text.maps = 地图 text.maps = 地图
@@ -73,30 +71,30 @@ text.nextmission = 下一个任务
text.maps.none = [LIGHT_GRAY]未发现地图! text.maps.none = [LIGHT_GRAY]未发现地图!
text.about.button = 关于 text.about.button = 关于
text.name = 名字: text.name = 名字:
text.filename = File Name: text.filename = 文件名:
text.unlocked = 新方块解锁! text.unlocked = 新方块解锁!
text.unlocked.plural = 新方块解锁! text.unlocked.plural = 新方块解锁!
text.players = {0} 玩家在线 text.players = {0} 玩家在线
text.players.single = {0} 玩家在线 text.players.single = {0} 玩家在线
text.server.closing = [accent]正在关闭服务器... text.server.closing = [accent]正在关闭服务器……
text.server.kicked.kick = 你被踢出服务器了! text.server.kicked.kick = 你被踢出服务器了
text.server.kicked.serverClose = 服务器已关闭 text.server.kicked.serverClose = 服务器已关闭
text.server.kicked.sectorComplete = 区域已完成 text.server.kicked.sectorComplete = 区域已完成
text.server.kicked.sectorComplete.text = 任务已完成。\n服务器将在下一个区域继续。 text.server.kicked.sectorComplete.text = 任务已完成。\n服务器将在下一个区域继续。
text.server.kicked.clientOutdated = 客户端版本过旧!请升级! text.server.kicked.clientOutdated = 客户端版本过旧!请升级!
text.server.kicked.serverOutdated = 服务器版本过旧!请联系房主升级! text.server.kicked.serverOutdated = 服务器版本过旧!请联系房主升级!
text.server.kicked.banned = 你被这个服务器拉黑了。 text.server.kicked.banned = 你被这个服务器拉黑了。
text.server.kicked.recentKick = 你刚刚被踢出服务器\n请稍后重新连接! text.server.kicked.recentKick = 你刚刚被踢出服务器\n请稍后重新连接
text.server.kicked.nameInUse = 服务器中已经\n有相同的名字了。 text.server.kicked.nameInUse = 服务器中已经\n有人有相同的名字了。
text.server.kicked.nameEmpty = 你的名字必须至少包含一个字母或数字。 text.server.kicked.nameEmpty = 你的名字必须至少包含一个字母或数字。
text.server.kicked.idInUse = 你已经在服务器中!不允许用两个账号。 text.server.kicked.idInUse = 你已经在服务器中!不允许用两个账号。
text.server.kicked.customClient = 这个服务器不支持修改版连接,请下载官方版本。 text.server.kicked.customClient = 这个服务器不支持修改版客户端,请下载官方版本。
text.host.info = [accent]创建局域网游戏[] 按钮会在 [scarlet]6567[] 端口运行一个服务器并且 [scarlet]6568.[]\n任何在同一个 [LIGHT_GRAY]wifi或本地网络[] 下的人都将在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过ip地址连接, 那么需要[accent]端口转发[]。\n\n[LIGHT_GRAY]请注意:如果某人无法连接到你的局域网游戏,请确保你在防火墙设置里允许了 Mindustry 连接本地网络。 text.host.info = [accent]创建局域网游戏[]按钮会在[scarlet]6567[]端口运行一个服务器[]\n任何在同一个[LIGHT_GRAY]网络或本地网络[]下的人都将在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过IP地址连接,你需要设定[accent]端口转发[]。\n\n[LIGHT_GRAY]请注意如果某人无法连接到你的局域网游戏请确保你在防火墙设置里允许了Mindustry连接本地网络。
text.join.info = 你可以在这里输入[accent]服务器的IP地址[]以连接,或寻找[accent]本地网络[]中的服务器以连接。\n支持局域网或广域网多人游戏。\n\n[LIGHT_GRAY]请注意没有全球服务器列表如果你想通过IP地址连接某个服务器你需要向房主询问IP地址。 text.join.info = 你可以在这里输入[accent]服务器的IP地址[]以连接,或寻找[accent]本地网络[]中的服务器以连接。\n目前支持局域网或广域网多人游戏。\n\n[LIGHT_GRAY]请注意没有全球服务器列表如果你想通过IP地址连接某个服务器你需要向房主询问IP地址。
text.hostserver = 服务器 text.hostserver = 创建服务器
text.hostserver.mobile = Host\nGame text.hostserver.mobile = 创建\n服务器
text.host = 创建服务器 text.host = 创建
text.hosting = [accent]正在打开服务器... text.hosting = [accent]正在打开服务器……
text.hosts.refresh = 刷新 text.hosts.refresh = 刷新
text.hosts.discovering = 正在搜索局域网服务器 text.hosts.discovering = 正在搜索局域网服务器
text.server.refreshing = 正在刷新服务器 text.server.refreshing = 正在刷新服务器
@@ -105,64 +103,64 @@ text.host.invalid = [scarlet]无法连接服务器。
text.trace = 跟踪玩家 text.trace = 跟踪玩家
text.trace.playername = 玩家名字: [accent]{0} text.trace.playername = 玩家名字: [accent]{0}
text.trace.ip = IP地址 [accent]{0} text.trace.ip = IP地址 [accent]{0}
text.trace.id = ID: [accent]{0} text.trace.id = ID[accent]{0}
text.trace.android = 安卓客户端: [accent]{0} text.trace.android = 安卓客户端: [accent]{0}
text.trace.modclient = 修改版客户端: [accent]{0} text.trace.modclient = 修改版客户端: [accent]{0}
text.trace.totalblocksbroken = 总共破坏了 [accent]{0} 个方块。 text.trace.totalblocksbroken = 总共破坏了 [accent]{0} 个方块。
text.trace.structureblocksbroken = 总共破坏了 [accent]{0} 个结构 text.trace.structureblocksbroken = 总共破坏了[accent]{0}个方块
text.trace.lastblockbroken = 最后破坏的方块: [accent]{0} text.trace.lastblockbroken = 最后破坏的方块: [accent]{0}
text.trace.totalblocksplaced = 总共放置了 [accent]{0} 个方块。 text.trace.totalblocksplaced = 总共放置了 [accent]{0} 个方块。
text.trace.lastblockplaced = 最后放置的方块: [accent]{0} text.trace.lastblockplaced = 最后放置的方块: [accent]{0}
text.invalidid = 无效的客户端ID请提交 bug 报告。 text.invalidid = 无效的客户端ID请提交错误报告。
text.server.bans = 黑名单 text.server.bans = 黑名单
text.server.bans.none = 没有被拉黑的玩家! text.server.bans.none = 没有被拉黑的玩家!
text.server.admins = 管理员 text.server.admins = 管理员
text.server.admins.none = 没有管理员! text.server.admins.none = 没有管理员!
text.server.add = 添加服务器 text.server.add = 添加服务器
text.server.delete = 确定要删除这个服务器吗? text.server.delete = 确定要删除这个服务器吗?
text.server.hostname = 主机: {0} text.server.hostname = 主机{0}
text.server.edit = 编辑服务器 text.server.edit = 编辑服务器
text.server.outdated = [crimson]服务器过旧![] text.server.outdated = [crimson]服务器过旧![]
text.server.outdated.client = [crimson]客户端过旧![] text.server.outdated.client = [crimson]客户端过旧![]
text.server.version = [lightgray]版本: {0} text.server.version = [lightgray]版本: {0}
text.server.custombuild = [yellow]修改版 text.server.custombuild = [yellow]修改版
text.confirmban = 确认拉黑这个玩家? text.confirmban = 确认拉黑这个玩家
text.confirmkick = 您确定要删除此播放器吗? text.confirmkick = 您确定要踢出这个玩家吗?
text.confirmunban = 确认要取消拉黑这个玩家吗? text.confirmunban = 确认要取消拉黑这个玩家吗?
text.confirmadmin = 确认要添加这个玩家为管理员吗? text.confirmadmin = 确认要添加这个玩家为管理员吗?
text.confirmunadmin = 确认要取消这个玩家的管理员身份吗? text.confirmunadmin = 确认要取消这个玩家的管理员身份吗?
text.joingame.title = 加入游戏 text.joingame.title = 加入游戏
text.joingame.ip = IP: text.joingame.ip = IP
text.disconnect = 已断开 text.disconnect = 已断开
text.disconnect.data = 载入世界失败! text.disconnect.data = 载入世界失败!
text.connecting = [accent]连接中... text.connecting = [accent]连接中……
text.connecting.data = [accent]加载世界中... text.connecting.data = [accent]加载世界中……
text.server.port = 端口: text.server.port = 端口
text.server.addressinuse = 地址已经使用! text.server.addressinuse = 地址已经使用!
text.server.invalidport = 无效的端口! text.server.invalidport = 无效的端口!
text.server.error = [crimson]创建服务器错误:[accent]{0} text.server.error = [crimson]创建服务器错误:[accent]{0}
text.save.old = 这个存档属于旧版本游戏,无法继续使用了。\n\n[LIGHT_GRAY]存档向下兼容将在 4.0 版本中实现。 text.save.old = 这个存档属于旧版本游戏,无法继续使用了。\n\n[LIGHT_GRAY]存档向下兼容将在 4.0 版本中实现。
text.save.new = 新存档 text.save.new = 新存档
text.save.overwrite = 确认要\n覆盖这个存档吗? text.save.overwrite = 确认要覆盖这个存档吗?
text.overwrite = 覆盖 text.overwrite = 覆盖
text.save.none = 没有存档! text.save.none = 没有存档!
text.saveload = [accent]保存中... text.saveload = [accent]保存中……
text.savefail = 保存失败! text.savefail = 保存失败!
text.save.delete.confirm = 确认要删除这个存档吗? text.save.delete.confirm = 确认要删除这个存档吗?
text.save.delete = 删除 text.save.delete = 删除
text.save.export = 导出存档 text.save.export = 导出存档
text.save.import.invalid = [accent]存档无效! text.save.import.invalid = [accent]存档无效!
text.save.import.fail = [crimson]导入存档:[accent]{0} 失败 text.save.import.fail = [crimson]导入存档失败[accent]{0}
text.save.export.fail = [crimson]导出存档[accent]{0} 失败 text.save.export.fail = [crimson]导出存档失败:[accent]{0}
text.save.import = 导入存档 text.save.import = 导入存档
text.save.newslot = 保存游戏: text.save.newslot = 保存游戏:
text.save.rename = 重命名 text.save.rename = 重命名
text.save.rename.text = 新名字: text.save.rename.text = 新名字:
text.selectslot = 选择一个存档 text.selectslot = 选择一个存档
text.slot = [accent]存档 {0} text.slot = [accent]存档 {0}
text.save.corrupted = [accent]存档损坏或无效!\n如果你刚刚升级了游戏那么这可能是因为存档格式改变了而[scarlet]不是[] bug 。 text.save.corrupted = [accent]存档损坏或无效!\n如果你刚刚升级了游戏那么这可能是因为存档格式改变了而[scarlet]不是[] bug 。
text.sector.corrupted = [accent]发现了一个此区域的保存文件,但是加载失败。\n已经创建了一个新的。 text.sector.corrupted = [accent]发现了一个此区域的保存文件,但是加载失败。\n已经创建了一个新的。
text.empty = <empty> text.empty = <>
text.on = text.on =
text.off = text.off =
text.save.autosave = 自动保存:{0} text.save.autosave = 自动保存:{0}
@@ -187,14 +185,14 @@ text.changelog.error.ios = [accent]iOS还不支持更新日志。
text.changelog.error = [scarlet]获取更新日志失败!\n请检查你的网络。 text.changelog.error = [scarlet]获取更新日志失败!\n请检查你的网络。
text.changelog.current = [yellow][[Current version] text.changelog.current = [yellow][[Current version]
text.changelog.latest = [accent][[Latest version] text.changelog.latest = [accent][[Latest version]
text.loading = [accent]加载中... text.loading = [accent]加载中……
text.saving = [accent]保存中... text.saving = [accent]保存中……
text.wave = [accent]第 {0} 波 text.wave = [accent]第 {0} 波
text.wave.waiting = 下一波将在 {0} 秒后到来 text.wave.waiting = 下一波将在 {0} 秒后到来
text.waiting = 等待中... text.waiting = 等待中……
text.waiting.players = Waiting for players... text.waiting.players = 等待玩家中……
text.wave.enemies = [LIGHT_GRAY]{0} Enemies Remaining text.wave.enemies = 剩下 [LIGHT_GRAY]{0} 敌人
text.wave.enemy = [LIGHT_GRAY]{0} Enemy Remaining text.wave.enemy = 剩下 [LIGHT_GRAY]{0} 敌人
text.loadimage = 加载图片 text.loadimage = 加载图片
text.saveimage = 保存图片 text.saveimage = 保存图片
text.unknown = 未知 text.unknown = 未知
@@ -203,7 +201,7 @@ text.builtin = 内建的
text.map.delete.confirm = 确认要删除地图吗?这个操作无法撤销! text.map.delete.confirm = 确认要删除地图吗?这个操作无法撤销!
text.map.random = [accent]随机地图 text.map.random = [accent]随机地图
text.map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]蓝色[]的核心。 text.map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]蓝色[]的核心。
text.map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. text.map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[ROYAL]红色[]的核心。
text.map.invalid = 地图载入错误:地图文件可能已经损坏。 text.map.invalid = 地图载入错误:地图文件可能已经损坏。
text.editor.brush = 笔刷 text.editor.brush = 笔刷
text.editor.slope = \\ text.editor.slope = \\
@@ -226,14 +224,14 @@ text.editor.saved = 已保存!
text.editor.save.noname = 你的地图还没有名字!在“地图信息”菜单里设置一个名字。 text.editor.save.noname = 你的地图还没有名字!在“地图信息”菜单里设置一个名字。
text.editor.save.overwrite = 你的地图覆盖了一个内建的地图!在“地图信息”菜单里重新设置一个。 text.editor.save.overwrite = 你的地图覆盖了一个内建的地图!在“地图信息”菜单里重新设置一个。
text.editor.import.exists = [scarlet]无法导入:[] 一个叫 '{0}' 的内建地图已经存在。 text.editor.import.exists = [scarlet]无法导入:[] 一个叫 '{0}' 的内建地图已经存在。
text.editor.import = 导入... text.editor.import = 导入……
text.editor.importmap = 导入地图 text.editor.importmap = 导入地图
text.editor.importmap.description = 导入一个已经存在的地图 text.editor.importmap.description = 导入一个已经存在的地图
text.editor.importfile = 导入文件 text.editor.importfile = 导入文件
text.editor.importfile.description = 导入一个外置的地图文件 text.editor.importfile.description = 导入一个外置的地图文件
text.editor.importimage = 导入地形图像 text.editor.importimage = 导入地形图像
text.editor.importimage.description = 导入外置地图图像文件 text.editor.importimage.description = 导入外置地图图像文件
text.editor.export = 导出... text.editor.export = 导出……
text.editor.exportfile = 导出文件 text.editor.exportfile = 导出文件
text.editor.exportfile.description = 导出一个地图文件 text.editor.exportfile.description = 导出一个地图文件
text.editor.exportimage = 导出一个地形文件 text.editor.exportimage = 导出一个地形文件
@@ -262,13 +260,13 @@ text.editor = 编辑器
text.mapeditor = 地图编辑器 text.mapeditor = 地图编辑器
text.donate = 捐赠 text.donate = 捐赠
text.connectfail = [crimson]服务器连接失败: [accent]{0} text.connectfail = [crimson]服务器连接失败: [accent]{0}
text.error.unreachable = Server unreachable. text.error.unreachable = 服务器无法访问。
text.error.invalidaddress = Invalid address. text.error.invalidaddress = 地址无效。
text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct! text.error.timedout = 连接超时!\n确保服务器设置了端口转发并且地址正确
text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry! text.error.mismatch = 包错误:\n可能是客户端/服务器版本不匹配.\n请确保客户端和服务器都是最新的版本!
text.error.alreadyconnected = Already connected. text.error.alreadyconnected = 已连接。
text.error.mapnotfound = Map file not found! text.error.mapnotfound = 找不到地图文件!
text.error.any = Unkown network error. text.error.any = 未知网络错误.
text.settings.language = 语言 text.settings.language = 语言
text.settings.reset = 恢复默认 text.settings.reset = 恢复默认
text.settings.rebind = 重新绑定 text.settings.rebind = 重新绑定
@@ -276,11 +274,11 @@ text.settings.controls = 控制
text.settings.game = 游戏 text.settings.game = 游戏
text.settings.sound = 声音 text.settings.sound = 声音
text.settings.graphics = 图像 text.settings.graphics = 图像
text.settings.cleardata = 清除游戏数据... text.settings.cleardata = 清除游戏数据……
text.settings.clear.confirm = 您确定要清除数据吗?\n无法撤销这个! text.settings.clear.confirm = 您确定要清除数据吗?\n这个操作无法撤销
text.settings.clearall.confirm = [scarlet]报警![]\n这将清除所有数据包括已保存,解锁和见帮定.\n按“OK”后,游戏将删除所有并自动推出. text.settings.clearall.confirm = [scarlet]警告![]\n这将清除所有数据包括存档、地图、解锁和键绑定。\n按「是」后,游戏将删除所有数据并自动退出。
text.settings.clearsectors = 楚任务 text.settings.clearsectors = 除区域
text.settings.clearunlocks = 清除未锁定的快 text.settings.clearunlocks = 清除解锁
text.settings.clearall = 清除所有 text.settings.clearall = 清除所有
text.paused = 暂停 text.paused = 暂停
text.yes = text.yes =
@@ -303,27 +301,27 @@ text.blocks.powerdamage = 功率/损伤
text.blocks.inputitemcapacity = 最大输入 text.blocks.inputitemcapacity = 最大输入
text.blocks.outputitemcapacity = 最大输出 text.blocks.outputitemcapacity = 最大输出
text.blocks.itemcapacity = 物品容量 text.blocks.itemcapacity = 物品容量
text.blocks.basepowergeneration = Base Power Generation text.blocks.basepowergeneration = 基础能源输出
text.blocks.powertransferspeed = 能量传输 text.blocks.powertransferspeed = 能量传输
text.blocks.craftspeed = 生产速度 text.blocks.craftspeed = 生产速度
text.blocks.inputliquid = 输入液体 text.blocks.inputliquid = 液体输入
text.blocks.inputliquidaux = Aux 液体 text.blocks.inputliquidaux = 辅助液体
text.blocks.inputitem = 输入物品 text.blocks.inputitem = 物品输入
text.blocks.inputitems = 输入物品 text.blocks.inputitems = 物品输入
text.blocks.outputitem = 输出物品 text.blocks.outputitem = 物品输出
text.blocks.drilltier = 可钻探矿物 text.blocks.drilltier = 可钻探矿物
text.blocks.drillspeed = 基础钻探速度 text.blocks.drillspeed = 基础钻探速度
text.blocks.liquidoutput = 液体输出 text.blocks.liquidoutput = 液体输出
text.blocks.liquidoutputspeed = 液体输出速度 text.blocks.liquidoutputspeed = 液体输出速度
text.blocks.liquiduse = 使用液体 text.blocks.liquiduse = 液体使用速度
text.blocks.coolant = 冷却剂 text.blocks.coolant = 冷却剂
text.blocks.coolantuse = 使用冷却剂 text.blocks.coolantuse = 冷却剂使用速度
text.blocks.inputliquidfuel = 使用燃料 text.blocks.inputliquidfuel = 液体燃料输入
text.blocks.liquidfueluse = 使用液体燃料 text.blocks.liquidfueluse = 液体燃料使用速度
text.blocks.explosive = 高度易燃易爆! text.blocks.explosive = 易爆
text.blocks.health = 生命值 text.blocks.health = 生命值
text.blocks.inaccuracy = 误差 text.blocks.inaccuracy = 误差
text.blocks.shots = 发射 text.blocks.shots = 发射
text.blocks.reload = 重新装弹 text.blocks.reload = 重新装弹
text.blocks.inputfuel = 燃料 text.blocks.inputfuel = 燃料
text.blocks.fuelburntime = 燃料燃烧时间 text.blocks.fuelburntime = 燃料燃烧时间
@@ -343,18 +341,18 @@ text.category.general = 普通
text.category.power = 能量 text.category.power = 能量
text.category.liquids = 液体 text.category.liquids = 液体
text.category.items = 物品 text.category.items = 物品
text.category.crafting = 制造速度 text.category.crafting = 制造
text.category.shooting = text.category.shooting =
setting.autotarget.name = Auto-Target setting.autotarget.name = 自动发射
setting.fpscap.name = 最高 FPS setting.fpscap.name = 最高 FPS
setting.fpscap.none = None setting.fpscap.none =
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.difficulty.training = training setting.difficulty.training = 训练
setting.difficulty.easy = 简单 setting.difficulty.easy = 简单
setting.difficulty.normal = 普通 setting.difficulty.normal = 普通
setting.difficulty.hard = 困难 setting.difficulty.hard = 困难
setting.difficulty.insane = 疯狂 setting.difficulty.insane = 疯狂
setting.difficulty.name = 难度: setting.difficulty.name = 难度
setting.screenshake.name = 屏幕抖动 setting.screenshake.name = 屏幕抖动
setting.effects.name = 显示效果 setting.effects.name = 显示效果
setting.sensitivity.name = 控制器灵敏度 setting.sensitivity.name = 控制器灵敏度
@@ -370,17 +368,18 @@ setting.musicvol.name = 音乐音量
setting.mutemusic.name = 静音 setting.mutemusic.name = 静音
setting.sfxvol.name = 音效音量 setting.sfxvol.name = 音效音量
setting.mutesound.name = 静音 setting.mutesound.name = 静音
setting.crashreport.name = 发送匿名崩溃报告
text.keybind.title = 重新绑定按键 text.keybind.title = 重新绑定按键
category.general.name = 普通 category.general.name = 普通
category.view.name = 查看 category.view.name = 查看
category.multiplayer.name = 多人 category.multiplayer.name = 多人
command.attack = Attack command.attack = 攻击
command.retreat = Retreat command.retreat = 撤退
command.patrol = Patrol command.patrol = 巡逻
keybind.press = 按一下键... keybind.press = 按一下键……
keybind.press.axis = 按轴或键... keybind.press.axis = 一下轴或键……
keybind.move_x.name = X轴移动 keybind.move_x.name = 水平移动
keybind.move_y.name = Y轴移动 keybind.move_y.name = 垂直移动
keybind.select.name = 选择 keybind.select.name = 选择
keybind.break.name = 破坏 keybind.break.name = 破坏
keybind.deselect.name = 取消 keybind.deselect.name = 取消
@@ -405,47 +404,47 @@ mode.waves.name = 普通
mode.waves.description = 普通模式,有限的资源和自动生成敌人。 mode.waves.description = 普通模式,有限的资源和自动生成敌人。
mode.sandbox.name = 沙盒 mode.sandbox.name = 沙盒
mode.sandbox.description = 无限的资源,不会自动生成敌人。 mode.sandbox.description = 无限的资源,不会自动生成敌人。
mode.custom.warning = 请注意,在区域内解锁之前,区块不能用于自定义游戏.\n\n[LIGHT_GRAY]如果您没有解锁任何块,则不会出现任何块. mode.custom.warning = 请注意,方块在区域内解锁之前,不能用于自定义游戏\n\n[LIGHT_GRAY]如果您没有解锁任何块,则不会出现任何方块。
mode.custom.warning.read = Just to make sure you've read it:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.custom.warning.read = 确保你已经阅读过它:\n[scarlet]自定义游戏的解锁不带至区域或其他模式!\n\n[LIGHT_GRAY](我希望这不是必要的,但显然是必要的)
mode.freebuild.name = 自由建造 mode.freebuild.name = 自由建造
mode.freebuild.description = 有限的资源,不会自动生成敌人。 mode.freebuild.description = 有限的资源,不会自动生成敌人。
mode.pvp.name = PvP mode.pvp.name = PvP
mode.pvp.description = fight against other players locally. mode.pvp.description = 和本地玩家对战.
content.item.name = 物品 content.item.name = 物品
content.liquid.name = 液体 content.liquid.name = 液体
content.unit.name = 单位 content.unit.name = 部队
content.recipe.name = 方块 content.recipe.name = 方块
content.mech.name = 机甲 content.mech.name = 机甲
item.stone.name = 石头 item.stone.name = 石头
item.stone.description = 一种常见的原料。用于分离和提炼成其他材料,或熔化成熔岩。 item.stone.description = 一种常见的原料。用于分离和提炼成其他材料,或熔化成熔岩。
item.copper.name = item.copper.name =
item.copper.description = 有用的结构材料。在各种类型的方块中广泛使用。 item.copper.description = 一种有用的结构材料。在各种类型的方块中广泛使用。
item.lead.name = item.lead.name =
item.lead.description = 基本的起始材料。被广泛用于电和液体运输方块。 item.lead.description = 一种基本的起始材料。被广泛用于电子设备和液体运输方块。
item.coal.name = item.coal.name =
item.coal.description = 一种常见并容易获得的燃料。 item.coal.description = 一种常见并容易获得的燃料。
item.dense-alloy.name = 致密合金 item.dense-alloy.name = 致密合金
item.dense-alloy.description = 由铅和铜制成的坚韧合金。 用于高级的运输方块和深层钻头。 item.dense-alloy.description = 一种由铅和铜制成的坚韧合金。用于高级的运输方块和高级钻头。
item.titanium.name = item.titanium.name =
item.titanium.description = 一种罕见的超轻金属,被广泛运用于液体运输,钻机和飞机。 item.titanium.description = 一种罕见的超轻金属,被广泛运用于液体运输、钻头和飞机。
item.thorium.name = item.thorium.name =
item.thorium.description = 一种致密的放射性金属,用作支撑结构和核燃料。 item.thorium.description = 一种致密的放射性金属,用作结构支撑和核燃料。
item.silicon.name = item.silicon.name =
item.silicon.description = 非常有用的半导体,被用于太阳能电池板和很多复杂的电子设备。 item.silicon.description = 一种非常有用的半导体,被用于太阳能电池板和很多复杂的电子设备。
item.plastanium.name = item.plastanium.name =
item.plastanium.description = 一种轻质,可延展的材料,用于高级的飞机和碎片弹药。 item.plastanium.description = 一种轻质,可延展的材料,用于高级的飞机和碎片弹药。
item.phase-fabric.name = Phase Fabric item.phase-fabric.name = 相织物
item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. item.phase-fabric.description = 一种接近0重量的物质用于先进的电子技术和自我修复技术。
item.surge-alloy.name = 巨浪合金 item.surge-alloy.name = 巨浪合金
item.surge-alloy.description = An advanced alloy with unique electrical properties. item.surge-alloy.description = 一种具有独特电气性能的高级合金。
item.biomatter.name = 生物质 item.biomatter.name = 生物质
item.biomatter.description = 一种有机糊;用于转化为油或作为基本燃料。 item.biomatter.description = 一种有机物;用于转化为油或作为基本燃料。
item.sand.name = item.sand.name =
item.sand.description = 一种常见的材料,广泛用于冶炼,制作合金和助熔剂。 item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。
item.blast-compound.name = 爆炸混合物 item.blast-compound.name = 爆炸混合物
item.blast-compound.description = 一种用于炸弹和炸药的挥发性合物。虽然它可以作为燃料燃烧,但不建议这样做。 item.blast-compound.description = 一种用于炸弹和炸药的挥发性合物。虽然它可以作为燃料燃烧,但不建议这样做。
item.pyratite.name = item.pyratite.name =
item.pyratite.description = 燃烧武器中使用的极易燃物质。 item.pyratite.description = 一种燃烧武器中使用的极易燃物质。
liquid.water.name = liquid.water.name =
liquid.lava.name = 岩浆 liquid.lava.name = 岩浆
liquid.oil.name = 石油 liquid.oil.name = 石油
@@ -469,32 +468,33 @@ mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻
mech.dart-ship.name = Dart mech.dart-ship.name = Dart
mech.dart-ship.weapon = 机枪 mech.dart-ship.weapon = 机枪
mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。 mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。
mech.javelin-ship.name = Javelin mech.javelin-ship.name = 标枪
mech.javelin-ship.description = 一艘一击即退的攻击船。虽然最初很慢,但它可以加速到很快的速度,并飞过敌人的前哨,利用其闪电能力和导弹造成大量伤害。 mech.javelin-ship.description = 一艘一击即退的攻击船。虽然最初很慢,但它可以加速到很快的速度,并飞过敌人的前哨,利用其闪电能力和导弹造成大量伤害。
mech.javelin-ship.weapon = 爆裂导弹 mech.javelin-ship.weapon = 爆裂导弹
mech.javelin-ship.ability = 放电助推器 mech.javelin-ship.ability = 放电助推器
mech.trident-ship.name = Trident mech.trident-ship.name = 三叉戟
mech.trident-ship.description = 重型轰炸机。有厚装甲。 mech.trident-ship.description = 重型轰炸机。有厚装甲。
mech.trident-ship.weapon = 炸弹 mech.trident-ship.weapon = 炸弹
mech.glaive-ship.name = Glaive mech.glaive-ship.name = Glaive
mech.glaive-ship.description = 大型,装甲厚重的武装直升机。配备燃烧机枪。有优秀的加速能力和最快的速度。 mech.glaive-ship.description = 大型,装甲厚重的武装直升机。配备燃烧机枪。有优秀的加速能力和最快的速度。
mech.glaive-ship.weapon = 火焰机枪 mech.glaive-ship.weapon = 火焰机枪
text.item.explosiveness = [LIGHT_GRAY]爆炸威力{0} text.item.explosiveness = [LIGHT_GRAY]爆炸{0}
text.item.flammability = [LIGHT_GRAY]易燃性:{0} text.item.flammability = [LIGHT_GRAY]易燃性:{0}
text.item.radioactivity = [LIGHT_GRAY]放射性:{0} text.item.radioactivity = [LIGHT_GRAY]放射性:{0}
text.item.fluxiness = [LIGHT_GRAY]流通力{0} text.item.fluxiness = [LIGHT_GRAY]助熔性{0}
text.unit.health = [LIGHT_GRAY]生命值: {0} text.unit.health = [LIGHT_GRAY]生命值{0}
text.unit.speed = [LIGHT_GRAY]速度: {0} text.unit.speed = [LIGHT_GRAY]速度{0}
text.mech.weapon = [LIGHT_GRAY]武器: {0} text.mech.weapon = [LIGHT_GRAY]武器{0}
text.mech.armor = [LIGHT_GRAY]装甲: {0} text.mech.armor = [LIGHT_GRAY]装甲{0}
text.mech.itemcapacity = [LIGHT_GRAY]物品容量: {0} text.mech.itemcapacity = [LIGHT_GRAY]物品容量{0}
text.mech.minespeed = [LIGHT_GRAY]采矿速度: {0} text.mech.minespeed = [LIGHT_GRAY]采矿速度{0}
text.mech.minepower = [LIGHT_GRAY]采矿能量: {0} text.mech.minepower = [LIGHT_GRAY]采矿力量:{0}
text.mech.ability = [LIGHT_GRAY]能力: {0} text.mech.ability = [LIGHT_GRAY]能力{0}
text.liquid.heatcapacity = [LIGHT_GRAY]热容量:{0} text.liquid.heatcapacity = [LIGHT_GRAY]热容量:{0}
text.liquid.viscosity = [LIGHT_GRAY]粘度:{0} text.liquid.viscosity = [LIGHT_GRAY]粘度:{0}
text.liquid.temperature = [LIGHT_GRAY]温度:{0} text.liquid.temperature = [LIGHT_GRAY]温度:{0}
block.spawn.name = Enemy Spawn block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = 敌人出生点
block.core.name = 核心 block.core.name = 核心
block.metalfloor.name = 金属地板 block.metalfloor.name = 金属地板
block.deepwater.name = 深水 block.deepwater.name = 深水
@@ -514,18 +514,18 @@ block.blackrock.name = 黑岩
block.icerock.name = 冰岩 block.icerock.name = 冰岩
block.copper-wall.name = 铜墙 block.copper-wall.name = 铜墙
block.copper-wall-large.name = 大型铜墙 block.copper-wall-large.name = 大型铜墙
block.dense-alloy-wall.name = Dense Alloy Wall block.dense-alloy-wall.name = 致密合金墙
block.dense-alloy-wall-large.name = Large Dense Alloy Wall block.dense-alloy-wall-large.name = 大型致密合金墙
block.phase-wall.name = 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.door.name = block.door.name =
block.door-large.name = 大门 block.door-large.name = 大门
block.duo.name = block.duo.name = 双管
block.scorch.name = 灼烧炮 block.scorch.name = 灼烧炮
block.hail.name = Hail block.hail.name = 冰雹炮
block.lancer.name = 枪骑兵 block.lancer.name = 蓝瑟炮
block.conveyor.name = 传送带 block.conveyor.name = 传送带
block.titanium-conveyor.name = 钛传送带 block.titanium-conveyor.name = 钛传送带
block.junction.name = 连接点 block.junction.name = 连接点
@@ -538,7 +538,7 @@ block.overflow-gate.description = 分离器和路由器的组合,如果前面
block.smelter.name = 冶炼厂 block.smelter.name = 冶炼厂
block.arc-smelter.name = 电弧冶炼厂 block.arc-smelter.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 = 熔炉
@@ -557,47 +557,47 @@ block.pneumatic-drill.name = 气动钻头
block.laser-drill.name = 激光钻头 block.laser-drill.name = 激光钻头
block.water-extractor.name = 抽水机 block.water-extractor.name = 抽水机
block.cultivator.name = 耕种机 block.cultivator.name = 耕种机
block.alpha-mech-pad.name = Alpha Mech Pad block.alpha-mech-pad.name = Alpha 机甲平台
block.dart-ship-pad.name = Dart Ship Pad block.dart-ship-pad.name = Dart 机甲平台
block.delta-mech-pad.name = Delta Mech Pad block.delta-mech-pad.name = Delta 机甲平台
block.javelin-ship-pad.name = Javelin Ship Pad block.javelin-ship-pad.name = 标枪 机甲平台
block.trident-ship-pad.name = Trident Ship Pad block.trident-ship-pad.name = 三叉戟 机甲平台
block.glaive-ship-pad.name = Glaive Ship Pad block.glaive-ship-pad.name = Glaive 机甲平台
block.omega-mech-pad.name = Omega Mech Pad block.omega-mech-pad.name = Omega 机甲平台
block.tau-mech-pad.name = Tau Mech Pad block.tau-mech-pad.name = Tau 机甲平台
block.conduit.name = 导管 block.conduit.name = 导管
block.mechanical-pump.name = 机械泵 block.mechanical-pump.name = 机械泵
block.itemsource.name = 物品源 block.itemsource.name = 物品源
block.itemvoid.name = Item Void block.itemvoid.name = 物品黑洞
block.liquidsource.name = 液体源 block.liquidsource.name = 液体源
block.powervoid.name = Power Void block.powervoid.name = 能源黑洞
block.powerinfinite.name = 无限能源 block.powerinfinite.name = 无限能源
block.unloader.name = 装卸器 block.unloader.name = 装卸器
block.vault.name = 仓库 block.vault.name = 仓库
block.wave.name = 波浪 block.wave.name = 波浪
block.swarmer.name = 蜂群 block.swarmer.name = 蜂群
block.salvo.name = 齐射炮 block.salvo.name = 齐射炮
block.ripple.name = 波纹 block.ripple.name = 浪涌
block.phase-conveyor.name = 传送带 block.phase-conveyor.name = 织布传送带
block.bridge-conveyor.name = 传送带桥 block.bridge-conveyor.name = 传送带桥
block.plastanium-compressor.name = 压缩机 block.plastanium-compressor.name = 压缩机
block.pyratite-mixer.name = 硫混合器 block.pyratite-mixer.name = 硫混合器
block.blast-mixer.name = 爆炸混合器 block.blast-mixer.name = 爆炸混合器
block.solidifer.name = 凝固 block.solidifer.name = 凝固
block.solar-panel.name = 太阳能电池 block.solar-panel.name = 太阳能电池
block.solar-panel-large.name = 大型太阳能电池 block.solar-panel-large.name = 大型太阳能电池
block.oil-extractor.name = 石油钻井 block.oil-extractor.name = 石油钻井
block.spirit-factory.name = Spirit Drone Factory block.spirit-factory.name = 轻型无人机工厂
block.phantom-factory.name = Phantom Drone Factory block.phantom-factory.name = 鬼怪无人机工厂
block.wraith-factory.name = Wraith Fighter Factory block.wraith-factory.name = 幻影战机工厂
block.ghoul-factory.name = Ghoul Bomber Factory block.ghoul-factory.name = 食尸鬼轰炸机工厂
block.dagger-factory.name = Dagger Mech Factory block.dagger-factory.name = 尖刀机甲工厂
block.titan-factory.name = Titan Mech Factory block.titan-factory.name = 泰坦机甲工厂
block.fortress-factory.name = Fortress Mech Factory block.fortress-factory.name = 堡垒机甲工厂
block.revenant-factory.name = Revenant Fighter Factory block.revenant-factory.name = 亡魂战机工厂
block.repair-point.name = 维修点 block.repair-point.name = 维修点
block.pulse-conduit.name = 脉冲导管 block.pulse-conduit.name = 脉冲导管
block.phase-conduit.name = 导管 block.phase-conduit.name = 织布导管
block.liquid-router.name = 液体路由器 block.liquid-router.name = 液体路由器
block.liquid-tank.name = 储液罐 block.liquid-tank.name = 储液罐
block.liquid-junction.name = 液体连接点 block.liquid-junction.name = 液体连接点
@@ -610,171 +610,171 @@ block.blast-drill.name = 爆破钻头
block.thermal-pump.name = 热能泵 block.thermal-pump.name = 热能泵
block.thermal-generator.name = 热能发电机 block.thermal-generator.name = 热能发电机
block.alloy-smelter.name = 合金冶炼厂 block.alloy-smelter.name = 合金冶炼厂
block.mend-projector.name = 修理投影 block.mend-projector.name = 修理投影
block.surge-wall.name = 浪涌 block.surge-wall.name = 波动
block.surge-wall-large.name = 浪涌 block.surge-wall-large.name = 型波动
block.cyclone.name = 气旋 block.cyclone.name = 气旋
block.fuse.name = 保险丝 block.fuse.name = 融合炮
block.shock-mine.name = Shock Mine block.shock-mine.name = 休克地雷
block.overdrive-projector.name = 超速投影 block.overdrive-projector.name = 超速投影
block.force-projector.name = Force Projector block.force-projector.name = 力墙投影器
block.arc.name = Arc block.arc.name = 电弧
block.rtg-generator.name = RTG Generator block.rtg-generator.name = RTG 发电机
block.spectre.name = Spectre block.spectre.name = 幽灵
block.meltdown.name = Meltdown block.meltdown.name = 熔毁
block.container.name = Container block.container.name = 容器
block.core.description = The most important building in the game. block.core.description = 游戏中最重要的建筑。
team.blue.name = blue team.blue.name =
team.red.name = red team.red.name =
team.orange.name = orange team.orange.name =
team.none.name = gray team.none.name =
team.green.name = green team.green.name = 绿
team.purple.name = purple team.purple.name =
unit.alpha-drone.name = Alpha 无人机 unit.alpha-drone.name = Alpha 无人机
unit.spirit.name = Spirit Drone unit.spirit.name = 轻型无人机
unit.spirit.description = The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks. unit.spirit.description = 初始无人机。默认情况下在内核中生成。自动开采矿石,收集物品和修理块。
unit.phantom.name = Phantom Drone unit.phantom.name = 鬼怪无人机
unit.phantom.description = An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone. unit.phantom.description = 一种先进的无人机单位。自动开采矿石,收集物品和修理块。比初始无人机有效得多。
unit.dagger.name = 尖刀 unit.dagger.name = 尖刀
unit.dagger.description = 基础的地面单位,在蜂群中很有用。 unit.dagger.description = 基础的地面单位,在蜂群中很有用。
unit.titan.name = 泰坦 unit.titan.name = 泰坦
unit.titan.description = 高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位. unit.titan.description = 高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位.
unit.ghoul.name = Ghoul Bomber unit.ghoul.name = 食尸鬼轰炸机
unit.ghoul.description = A heavy carpet bomber. Uses blast compound or pyratite as ammo. unit.ghoul.description = 重型地毯轰炸机。用爆炸化合物或黄铁矿作为弹药。
unit.wraith.name = Wraith Fighter unit.wraith.name = 幻影战机
unit.wraith.description = A fast, hit-and-run interceptor unit. unit.wraith.description = 一种快速,打了就跑的截击机。
unit.fortress.name = Fortress unit.fortress.name = 堡垒
unit.fortress.description = A heavy artillery ground unit. unit.fortress.description = 一种重炮地面部队。
unit.revenant.name = Revenant unit.revenant.name = 亡魂
unit.revenant.description = A heavy laser platform. unit.revenant.description = 一种重型激光平台。
tutorial.begin = Your mission here is to eradicate the[LIGHT_GRAY] enemy[].\n\nBegin by[accent] mining copper[]. Tap a copper ore vein near your core to do this. tutorial.begin = 你的任务是消灭[LIGHT_GRAY] 敌人 [].\n\n首先开始[accent] 采集铜矿 []。点击核心附近的铜矿开始。
tutorial.drill = Mining manually is inefficient.\n[accent]Drills []can mine automatically.\nPlace one on a copper vein. tutorial.drill = 手动采矿效率低.\n[accent] 钻头 []可以自动采矿.\n放一个在铜矿上吧.
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core. tutorial.conveyor = [accent]传送带[] 可以把物资传送到核心.\n请造一个传送线从钻头到核心.
tutorial.morecopper = More copper is required.\n\nEither mine it manually, or place more drills. tutorial.morecopper = 需要更多的铜.\n\n手动采矿或者放更多的钻头吧.
tutorial.turret = Defensive structures must be built to repel the[LIGHT_GRAY] enemy[].\nBuild a duo turret near your base. tutorial.turret = 必须建造防御建筑来击退[LIGHT_GRAY] 敌人[].\n请在你核心附近造一个双人炮塔.
tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill next to the turret to supply it with mined copper. tutorial.drillturret = 双人炮塔需要[accent] 铜质弹药 []来射击.\n可以放一个钻头在炮塔附近供应铜.
tutorial.waves = The[LIGHT_GRAY] enemy[] approaches.\n\nDefend your core for 2 waves. Build more turrets. tutorial.waves = [LIGHT_GRAY]敌人[] 来了.\n\n保护基地防御2波攻击. 造更多的炮塔.
tutorial.lead = More ores are available. Explore and mine[accent] lead[].\n\nDrag from your unit to the core to transfer resources. tutorial.lead = 有更多的矿可用. 探索和采集[accent] [].\n\n按住你的采矿单位拖放到核心来传送资源.
tutorial.smelter = Copper and lead are weak metals.\nSuperior[accent] Dense Alloy[] can be created in a smelter.\n\nBuild one. tutorial.smelter = 铜和铅是弱金属.\n超级[accent] 致密合金[] 可以从冶炼厂生产.\n\n造一个吧.
tutorial.densealloy = The smelter will now produce alloy.\nGet some.\nImprove the production if necessary. tutorial.densealloy = 冶炼厂将生产合金.\n生产一些.\n有必要可以改进一下生产.
tutorial.siliconsmelter = The core will now create a[accent] spirit drone[] for mining and repairing blocks.\n\nFactories for other units can be created with [accent] silicon.\nMake a silicon smelter. tutorial.siliconsmelter = 基地现在将制作一个[accent] 无人机[] 来采矿和维修方块.\n\n其他单位的工程可以用[accent] 硅 []来建造.\n造一个硅冶炼厂.
tutorial.silicondrill = Silicon requires[accent] coal[] and[accent] sand[].\nStart by making drills. tutorial.silicondrill = 硅需要[accent] 煤[] 和[accent] [].\n开始制作钻头吧.
tutorial.generator = This technology requires power.\nCreate a[accent] combustion generator[] for it. tutorial.generator = 这项技术需要能源.\n造一个[accent] 燃烧发电机[] 来发电.
tutorial.generatordrill = Combustion generators need fuel.\nFuel it with coal from a drill. tutorial.generatordrill = 燃烧发电机需要燃料.\n用钻头采集煤来供给燃料.
tutorial.node = Power requires transport.\nCreate a[accent] power node[] next to your combustion generator to transfer its power. tutorial.node = 能源需要传输.\n造一个[accent] 能量节点[] 靠近火力发电机来传输它的能源.
tutorial.nodelink = Power can be transferred through contacting power blocks and generators, or by linked power nodes.\n\nLink power by tapping the node and selecting the generator and silicon smelter. tutorial.nodelink = 使耗能方块紧靠发电机或者用能源节点连接来传输电力.\n\n点击能源节点并选择发电机和硅冶炼厂来链接能源.
tutorial.silicon = Silicon is being produced. Get some.\n\nImproving the production system is advised. tutorial.silicon = 正在生产硅. 多生产点.\n\n建议优化一下生产系统.
tutorial.daggerfactory = Construct a[accent] dagger mech factory.[]\n\nThis will be used to create attack mechs. tutorial.daggerfactory = 建造一个[accent] 尖刀机甲工厂.[]\n\n它可以用来生产机甲
tutorial.router = Factories need resources to function.\nCreate a router to split conveyor resources. tutorial.router = 工厂需要资源来运作.\n造一个路由器来分发传送资源.
tutorial.dagger = Link power nodes to the factory.\nOnce requirements are met, a mech will be created.\n\nCreate more drills, generators and conveyors as necessary. tutorial.dagger = 链接能源节点到工厂.\n一旦需求满足, 将会制作一个机甲.\n\n根据需要制作更多的钻头发电机传送带.
tutorial.battle = The[LIGHT_GRAY] enemy[] has revealed their core.\nDestroy it with your unit and dagger mechs. tutorial.battle = [LIGHT_GRAY] 敌人[] 的核心已经暴露。\n用你的尖刀机甲摧毁它。
block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves. block.copper-wall.description = 廉价的防守区块。\n用于保护前几波中的核心和炮塔。
block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles. block.copper-wall-large.description = 廉价的防御块。\n用于保护前几个波浪中的核心和炮塔。\n跨越多个块。
block.dense-alloy-wall.description = A standard defensive block.\nAdequate protection from enemies. block.dense-alloy-wall.description = 标准的防守区块。\n可以较好的防御敌人。
block.dense-alloy-wall-large.description = A standard defensive block.\nAdequate protection from enemies.\nSpans multiple tiles. block.dense-alloy-wall-large.description = 标准的防守区块。\n可以较好的防御敌人。\n跨越多个块。
block.thorium-wall.description = A strong defensive block.\nGood protection from enemies. block.thorium-wall.description = 强大的防守区块。\n很好的防御敌人。
block.thorium-wall-large.description = A strong defensive block.\nGood protection from enemies.\nSpans multiple tiles. block.thorium-wall-large.description = 强大的防守区块。\n很好地防御敌人。\n跨越多个块。
block.phase-wall.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful. block.phase-wall.description = 没有钍墙那样坚固,但是它可以使不太强的子弹发生偏转。
block.phase-wall-large.description = Not as strong as a thorium wall but will deflect bullets unless they are too powerful.\nSpans multiple tiles. block.phase-wall-large.description = 没有钍墙那样坚固,但是它可以使不太强的子弹发生偏转。\n跨越多个块。
block.surge-wall.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker. block.surge-wall.description = 强大的防守区块。\n有很小的机会向攻击者发射闪电。
block.surge-wall-large.description = The strongest defensive block.\nHas a small chance of triggering lightning towards the attacker.\nSpans multiple tiles. block.surge-wall-large.description = 强大的防御区块。\n有很小的机会向攻击者发射闪电。\n跨越多个区块。
block.door.description = A small door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through. block.door.description = 一扇小门,可以通过点击打开和关闭。\n如果打开敌人可以射击并穿过。
block.door-large.description = A large door that can be opened and closed by tapping on it.\nIf opened, enemies can shoot and move through.\nSpans multiple tiles. block.door-large.description = 一扇大门,可以通过点击打开和关闭。\n如果打开敌人可以射击并穿过。\n扫过多个瓷砖。
block.mend-projector.description = Periodically heals buildings in its vicinity. block.mend-projector.description = 定期修复附近的建筑物。
block.overdrive-projector.description = Increases the speed of nearby buildings like drills and conveyors. block.overdrive-projector.description = 提高附近建筑物的速度,如钻机和传送带。
block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.force-projector.description = 自身周围创建一个六边形力场,保护建筑物和内部单位免受子弹的伤害。
block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。
block.duo.description = A small, cheap turret. block.duo.description = 小而便宜的炮塔。
block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.arc.description = 小型炮塔,发射电弧。
block.hail.description = A small artillery turret. block.hail.description = 小型炮兵炮台。
block.lancer.description = A medium-sized turret which shoots charged electricity beams. block.lancer.description = 中型炮塔,发射带电的电子束。
block.wave.description = A medium-sized rapid-fire turret which shoots liquid bubbles. block.wave.description = 中型快速炮塔,射出液体泡泡。
block.salvo.description = A medium-sized turret which fires shots in salvos. block.salvo.description = 中型炮塔,齐射射击。
block.swarmer.description = A medium-sized turret which shoots burst missiles. block.swarmer.description = 发射爆炸导弹的中型炮塔。
block.ripple.description = A large artillery turret which fires several shots simultaneously. block.ripple.description = 大型炮兵炮塔,可同时向多个目标开火。
block.cyclone.description = A large rapid fire turret. block.cyclone.description = 大型快速炮塔。
block.fuse.description = A large turret which shoots powerful short-range beams. block.fuse.description = 发射强大的短程光束的大型炮塔。
block.spectre.description = A large turret which shoots two powerful bullets at once. block.spectre.description = 大型炮塔,一次射出两颗强大的子弹。
block.meltdown.description = A large turret which shoots powerful long-range beams. block.meltdown.description = 发射强大的远程光束的大型炮塔。
block.conveyor.description = Basic item transport block. Moved items forward and automatically deposits them into turrets or crafters. Rotatable. block.conveyor.description = 初级传送带。将物品向前移动并自动将它们放入炮塔或工厂中。可旋转方向。
block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. block.titanium-conveyor.description = 高级传送带。能比初级传送带更快地移动物品。
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 = 高级传送带。使用电力将物品传送到距离几个块的相位传送带上。
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 = 为两条交叉传送带的桥梁。适用于两种不同传送带将不同材料运送到不同位置的情况。
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 = 终极传送带。收集几件物品,然后将它们射向长距离外的另一个批量传送带。
block.smelter.description = Burns coal for smelting copper and lead into dense alloy. block.smelter.description = 烧煤,用于冶炼铜和铅成致密合金。
block.arc-smelter.description = Smelts copper and lead into dense alloy by using an external power source. block.arc-smelter.description = 用外部电源熔炼铜和铅成致密合金。
block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon. block.silicon-smelter.description = 用高纯度的焦炭来加工沙子以生产硅。
block.plastanium-compressor.description = Produces plastanium from oil and titanium. block.plastanium-compressor.description = 用油和钛生产塑钢。
block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. block.phase-weaver.description = 用放射性钍和大量沙子生产相织物。
block.alloy-smelter.description = Produces surge alloy from titanium, lead, silicon and copper. block.alloy-smelter.description = 用钛,铅,硅和铜生产浪涌合金。
block.pulverizer.description = Crushes stone into sand. Useful when there is a lack of natural sand. block.pulverizer.description = 将石头压成沙子。当缺少天然沙子时很有用。
block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. block.pyratite-mixer.description = 用煤,铅和沙子混合成高度易燃的硫。
block.blast-mixer.description = Uses oil for transforming pyratite into the less flammable but more explosive blast compound. block.blast-mixer.description = 用油将硫转化为不易燃但更具爆炸性的爆炸化合物。
block.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling. block.cryofluidmixer.description = 水和钛结合到低温流体中,冷却效率更高。
block.solidifer.description = Cools lava to stone at a fast pace. block.solidifer.description = 快速冷却熔岩为石头。
block.melter.description = Heats up stone to very high temperatures to obtain lava. block.melter.description = 石头加热到很高的温度以获得熔岩。
block.incinerator.description = Gets rid of any excess item or liquid. block.incinerator.description = 用于除掉任何多余的物品或液体。
block.biomattercompressor.description = Compresses biomatter in order to retrieve oil. block.biomattercompressor.description = 压缩生物质以获取油。
block.separator.description = Exposes stone to water pressure in order to obtain various minerals contained in the stone. block.separator.description = 将石头暴露在水压下,以获得石头中含有的各种矿物质。
block.centrifuge.description = More efficient than the separator, but also more expensive to build and requires power. block.centrifuge.description = 比分离器更有效,但构建起来也更昂贵并且需要动力。
block.power-node.description = Transmits power to connected nodes. Up to four power sources, sinks or nodes can be connected. The node will receive power from or supply power to any adjacent blocks. block.power-node.description = 连接节点传输电源。最多可连接四个电源,接收器或节点。节点将从任何相邻块接收电力或向其供电。
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 = 传输径大于电源节点,最多可连接六个电源,接收器或节点。
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 = 储存电力,当储存有能量时,可在电力短缺时提供电力。
block.battery-large.description = Stores much more power than a regular battery. block.battery-large.description = 比普通电池容量更大。
block.combustion-generator.description = Generates power by burning oil or flammable materials. block.combustion-generator.description = 通过燃烧油或易燃材料产生电力。
block.turbine-generator.description = More efficient than a combustion generator, but requires additional water. block.turbine-generator.description = 比燃烧发电机更有效,但需要额外的水。
block.thermal-generator.description = Generates a large amount of power from lava. block.thermal-generator.description = 从熔岩中产生大量的能量。
block.solar-panel.description = Provides a small amount of power from the sun. block.solar-panel.description = 标准太阳能面板,提供少量电力。
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 = 比标准太阳能电池板提供更好的电源,但构建起来要贵得多。
block.thorium-reactor.description = Generates huge amounts of power from highly radioactive thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. block.thorium-reactor.description = 高放射性钍产生大量电力。需要持续冷却。如果供应的冷却剂量不足,会剧烈爆炸。
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 = 一种放射性同位素热电发电机,它不需要冷却,但功率低于钍反应堆。
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 = 物品从容器,仓库或核心卸载到传送带上或直接卸载到相邻的块中。可以通过点击卸载器来更改要卸载的项目类型。
block.container.description = Stores a small amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the container. block.container.description = 存储少量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。 [LIGHT_GRAY]卸载器[]可用于从容器中获取物品。
block.vault.description = Stores a large amount of items. Use it for creating buffers when there is a non-constant demand of materials. An[LIGHT_GRAY] unloader[] can be used to retrieve items from the vault. block.vault.description = 存储大量物品。当存在非恒定的材料需求时,使用它来创建缓冲区。 [LIGHT_GRAY]卸载器[]可用于从仓库中获取物品。
block.mechanical-drill.description = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely. block.mechanical-drill.description = 便宜的钻头。放置在适当的块上时,无限期地以缓慢的速度输出物品。
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 = 一种改进的钻头,它更快,能够利用气压处理更硬的材料。
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 = 通过激光技术更快地钻孔,但需要电源。此外,这种钻头可以回收放射性钍。
block.blast-drill.description = The ultimate drill. Requires large amounts of power. block.blast-drill.description = 终极钻头,需要大量电力。
block.water-extractor.description = Extracts water from the ground. Use it when there is no lake nearby. block.water-extractor.description = 从地下提取水。当附近没有湖泊时使用它。
block.cultivator.description = Cultivates the soil with water in order to obtain biomatter. block.cultivator.description = 用水培育土壤以获得生物物质。
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 = 使用大量的电力从沙子中提取石油。当附近没有直接的石油来源时使用它。
block.dart-ship-pad.description = Leave your current vessel and change into a basic fighter aircraft.\nUse the pad by double tapping while standing on it. block.dart-ship-pad.description = 离开你当前的装置,换成基本的战斗机。\n站在上面时双击切换。
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 = 离开你当前的装置,换成一个装甲合理的重型轰炸机。\n站在上面时双击切换。
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 = 离开你当前的装置,换上一个强大而快速的截击机,用闪电武器。\n站在上面时双击切换。
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 = 离开现有的装置,换成装甲良好的大型武装直升机。\n站在上面时双击切换。
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 = 离开你当前的装置并换成一个可以治愈友方建筑物和单位的支撑机械。\n站在上面时双击切换。
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 = 离开你当前的装置并换成一个快速,轻装甲的机械装置,用于快速攻击。\n站在上面时双击切换。
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 = 离开你当前的装置并换成一个笨重且装甲良好的机甲,用于前线攻击。\n站在上面时双击切换。
block.spirit-factory.description = Produces light drones which mine ore and repair blocks. block.spirit-factory.description = 生产轻型无人机,用于开采矿石和修复块。
block.phantom-factory.description = Produces advanced drone units which are significantly more effective than a spirit drone. block.phantom-factory.description = 生产高级无人机单元,它比轻型无人机更有效。
block.wraith-factory.description = Produces fast, hit-and-run interceptor units. block.wraith-factory.description = 生产快速截击机。
block.ghoul-factory.description = Produces heavy carpet bombers. block.ghoul-factory.description = 生产重型地毯轰炸机。
block.dagger-factory.description = Produces basic ground units. block.dagger-factory.description = 生产基本地面单位。
block.titan-factory.description = Produces advanced, armored ground units. block.titan-factory.description = 生产先进的装甲地面单位。
block.fortress-factory.description = Produces heavy artillery ground units. block.fortress-factory.description = 生产重型火炮地面部队。
block.revenant-factory.description = Produces heavy laser ground units. block.revenant-factory.description = 生产重型激光地面单元。
block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. block.repair-point.description = 连续治疗附近最近的受损单位。
block.command-center.description = Allows changing friendly AI behavior. Currently, attack, retreat and patrol commands are supported. block.command-center.description = 允许更改友方AI行为。目前支持攻击撤退和巡逻命令。
block.conduit.description = Basic liquid transport block. Works like a conveyor, but with liquids. Best used with extractors, pumps or other conduits. block.conduit.description = 基本液体传输块。像输送机一样工作,但用于液体。最适用于提取器,泵或其他导管。
block.pulse-conduit.description = Advanced liquid transport block. Transports liquids faster and stores more than standard conduits. block.pulse-conduit.description = 高级液体传输块。比标准导管更快地输送液体并储存更多液体。
block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. block.phase-conduit.description = 高级液体传输块。使用电力将液体传送到多个块上的连接相管道。
block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. block.liquid-router.description = 接受来自一个方向的液体并将它们平均输出到最多3个其他方向。也可以储存一定量的液体。用于将液体从一个源分成多个目标。
block.liquid-tank.description = Stores a large amount of liquids. Use it for creating buffers when there is a non-constant demand of materials or as a safeguard for cooling vital blocks. block.liquid-tank.description = 存储大量液体。当存在对材料的非恒定需求或作为冷却重要块的安全措施时,将其用于创建缓冲区。
block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. block.liquid-junction.description = 作为两个交叉管道的桥梁。适用于两种不同导管将不同液体输送到不同位置的情况。
block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. block.bridge-conduit.description = 高级液体传输块。允许在任何地形或建筑物的最多3个块上运输液体。
block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. block.mechanical-pump.description = 一种输出速度慢但没有功耗的廉价泵。
block.rotary-pump.description = An advanced pump which doubles up speed by using power. block.rotary-pump.description = 一种先进的泵,通过使用动力使速度加倍。
block.thermal-pump.description = The ultimate pump. Three times as fast as a mechanical pump and the only pump which is able to retrieve lava. block.thermal-pump.description = 终级水泵。速度是机械泵的三倍。是唯一能够回收熔岩的泵。
block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. block.router.description = 从一个方向接受物品并将它们平均输出到最多3个其他方向。用于将材料从一个源分割为多个目标。
block.distributor.description = An advanced router which splits items to up to 7 other directions equally. block.distributor.description = 一个高级路由器可以将物品分成最多7个方向。
block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. block.bridge-conveyor.description = 高级项目传输块。允许在跨越任何地形或建筑物上运输物品最多跨越3个块。
block.alpha-mech-pad.description = When given enough power, rebuilds your ship into the[accent] Alpha[] mech. block.alpha-mech-pad.description = 当给予足够的电力时,将你的装置重建为[accent] Alpha []机甲。
block.itemsource.description = Infinitely outputs items. Sandbox only. block.itemsource.description = 无限输出物品。仅限沙箱。
block.liquidsource.description = Infinitely outputs liquids. Sandbox only. block.liquidsource.description = 无限输出液体。仅限沙箱。
block.itemvoid.description = Destroys any items which go into it without using power. Sandbox only. block.itemvoid.description = 在不使用电源的情况下销毁任何进入它的物品。仅限沙箱。
block.powerinfinite.description = Infinitely outputs power. Sandbox only. block.powerinfinite.description = 无限输出功率。仅限沙箱。
block.powervoid.description = Voids all power inputted into it. Sandbox only. block.powervoid.description = 消耗输入的所有功率。仅限沙箱。
liquid.water.description = Commonly used for cooling machines and waste processing. liquid.water.description = 通常用于冷却和废物处理。
liquid.lava.description = Can be transformed into[LIGHT_GRAY] stone[], used for generating power or used as ammo for certain turrets. liquid.lava.description = 可以转换成[LIGHT_GRAY] 石头 [],用于发电或用作某些炮塔的弹药。
liquid.oil.description = Can be burnt, exploded or used as a coolant. liquid.oil.description = 可以燃烧,爆炸或用作冷却液。
liquid.cryofluid.description = The most efficient liquid for cooling things down. liquid.cryofluid.description = 用于降温的最有效液体。

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -6,17 +6,15 @@ precision highp int;
#define MAX_HITS 64 #define MAX_HITS 64
#define HIT_RADIUS 12.0 #define HIT_RADIUS 12.0
#define ALPHA 0.18 #define ALPHA 0.18
#define thickness 1.0
#define step 2.0
uniform sampler2D u_texture; uniform sampler2D u_texture;
uniform vec4 u_color;
uniform vec2 u_texsize; uniform vec2 u_texsize;
uniform float u_time; uniform float u_time;
uniform float u_scaling; uniform float u_scaling;
uniform float u_dp; uniform float u_dp;
uniform vec2 u_offset; uniform vec2 u_offset;
uniform int u_hitamount;
uniform vec3 u_hits[MAX_HITS];
varying vec4 v_color; varying vec4 v_color;
varying vec2 v_texCoord; varying vec2 v_texCoord;
@@ -28,29 +26,19 @@ float round(float f){
void main() { void main() {
vec2 T = v_texCoord.xy; vec2 T = v_texCoord.xy;
vec2 coords = (T * u_texsize) + u_offset; vec2 coords = (T * u_texsize) + u_offset;
T += vec2(sin(coords.y / 3.0 + u_time / 20.0) / 240.0, sin(coords.x / 3.0 + u_time / 20.0) / 240.0) * u_scaling; T += vec2(sin(coords.y / 3.0 + u_time / 20.0) / 240.0, sin(coords.x / 3.0 + u_time / 20.0) / 240.0) * u_scaling;
float si = sin(u_time / 20.0) / 8.0; float si = sin(u_time / 20.0) / 8.0;
vec4 color = texture2D(u_texture, T); vec4 color = texture2D(u_texture, T);
vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y); vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y);
bool any = false;
float thickness = 1.0;
float step = 2.0;
if(texture2D(u_texture, T).a < 0.1 && if(texture2D(u_texture, T).a < 0.1 &&
(texture2D(u_texture, T + vec2(0, step) * v).a > 0.1 || texture2D(u_texture, T + vec2(0, -step) * v).a > 0.1 || (texture2D(u_texture, T + vec2(0, step) * v).a > 0.1 || texture2D(u_texture, T + vec2(0, -step) * v).a > 0.1 ||
texture2D(u_texture, T + vec2(step, 0) * v).a > 0.1 || texture2D(u_texture, T + vec2(-step, 0) * v).a > 0.1)) texture2D(u_texture, T + vec2(step, 0) * v).a > 0.1 || texture2D(u_texture, T + vec2(-step, 0) * v).a > 0.1)){
any = true;
if(any){ gl_FragColor = mix(v_color, vec4(1.0), si);
gl_FragColor = mix(u_color, vec4(1.0), si);
}else{ }else{
if(color.a > 0.1){ if(color.a > 0.1){
@@ -59,18 +47,6 @@ void main() {
} }
color.a = ALPHA; color.a = ALPHA;
for(int i = 0; i < MAX_HITS; i ++){
if(i >= u_hitamount) break;
vec3 hit = u_hits[i];
float rad = hit.z * HIT_RADIUS;
float fin = 1.0 - hit.z;
if(abs(distance(vec2(hit.x, hit.y), coords - u_texsize/2.0) - rad) < 1.0){
color = mix(color, mix(u_color, vec4(1.0), si), (1.0 * fin));
color.a = ALPHA + 0.82 *fin;
}
}
} }
gl_FragColor = color; gl_FragColor = color;

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -5,8 +5,7 @@ Color: {
gray: {a: 1, b: 0.32, g: 0.32, r: 0.32 }, gray: {a: 1, b: 0.32, g: 0.32, r: 0.32 },
lightgray: {a: 1, b: 0.65, g: 0.65, r: 0.65 } lightgray: {a: 1, b: 0.65, g: 0.65, r: 0.65 }
orange: {hex: "FFA500"}, orange: {hex: "FFA500"},
accent: {hex: "f4ba6e"}, accent: {hex: "ffd37f"}
accentDark: {hex: "f4ba6e"},
}, },
TintedDrawable: { TintedDrawable: {
dialogDim: {name: white, color: {r: 0, g: 0, b: 0, a: 0.9} }, dialogDim: {name: white, color: {r: 0, g: 0, b: 0, a: 0.9} },
@@ -15,12 +14,12 @@ TintedDrawable: {
chatfield: {name: white, color: {r: 0, g: 0, b: 0, a: 0.2}}, chatfield: {name: white, color: {r: 0, g: 0, b: 0, a: 0.2}},
clear: {name: white, color: {r: 0.1, g: 0.1, b: 0.1, a: 0.75}}, clear: {name: white, color: {r: 0.1, g: 0.1, b: 0.1, a: 0.75}},
none: {name: white, color: {r: 0, g: 0, b: 0, a: 0}}, none: {name: white, color: {r: 0, g: 0, b: 0, a: 0}},
clear-over: {name: white, color: {r: 1, g: 1, b: 1, a: 0.2} }, clear-over: {name: white, color: { hex: "#ffffff82" }},
clear-down: {name: white, color: {r: 1, g: 1, b: 1, a: 0.4} } clear-alpha: {name: white, color: { hex: "#ffd37fff" }},
clear-down: {name: white, color: { hex: "#ffd37fff" }}
}, },
ButtonStyle: { ButtonStyle: {
default: {down: button-down, up: button }, default: {down: button-down, up: button },
menu: {up: text-sides, over: text-sides-over, down: text-sides-down},
toggle: {checked: button-down, down: button-down, up: button } toggle: {checked: button-down, down: button-down, up: button }
}, },
TextButtonStyle: { TextButtonStyle: {
@@ -28,6 +27,7 @@ TextButtonStyle: {
discord: {font: default-font, fontColor: white, up: discord-banner}, discord: {font: default-font, fontColor: white, up: discord-banner},
info: {font: default-font, fontColor: white, up: info-banner}, info: {font: default-font, fontColor: white, up: info-banner},
clear: {down: clear-down, up: clear, over: clear-over, font: default-font, fontColor: white, disabledFontColor: gray }, clear: {down: clear-down, up: clear, over: clear-over, font: default-font, fontColor: white, disabledFontColor: gray },
clear-partial: {down: white, up: button-select, over: clear-down, font: default-font, fontColor: white, disabledFontColor: gray },
empty: {font: default-font}, empty: {font: default-font},
toggle: {font: default-font, fontColor: white, checked: button-down, down: button-down, up: button, over: button-over, disabled: button, disabledFontColor: gray } toggle: {font: default-font, fontColor: white, checked: button-down, down: button-down, up: button, over: button-over, disabled: button, disabledFontColor: gray }
}, },
@@ -40,6 +40,9 @@ ImageButtonStyle: {
toggle: {checked: button-down, down: button-down, up: button, imageDisabledColor: gray, imageUpColor: white }, toggle: {checked: button-down, down: button-down, up: button, imageDisabledColor: gray, imageUpColor: white },
select: {checked: button-select, up: none }, select: {checked: button-select, up: none },
clear: {down: clear-down, up: clear, over: clear-over}, clear: {down: clear-down, up: clear, over: clear-over},
clear-partial: {down: clear-down, up: none, over: clear-over},
clear-toggle: {down: clear-down, checked: clear-down, up: clear, over: clear-over},
clear-toggle-partial: {down: clear-down, checked: clear-down, up: none, over: clear-over},
}, },
ScrollPaneStyle: { ScrollPaneStyle: {
default: {background: border, vScroll: scroll, vScrollKnob: scroll-knob-vertical-black}, default: {background: border, vScroll: scroll, vScrollKnob: scroll-knob-vertical-black},

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module>
<source path="io/anuke/mindustry"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.Tile"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.Content"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.type.ItemStack"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.maps.Maps"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.Map"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.SpawnGroup"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.core.GameState"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.io.SaveFileVersion"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.ucore.entities.impl.EffectEntity"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.effect"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.bullet.Bullet"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.game.Team"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.maps.missions.Mission"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.type.Item"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.world.meta.BlockBar"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.maps.generation.WorldGenerator"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.entities.StatusController"/>
<extend-configuration-property name="gdx.reflect.include" value="io.anuke.mindustry.maps.Sector"/>
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.Predicate"/>
</module>

View File

@@ -17,12 +17,12 @@ import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.gen.Serialization; import io.anuke.mindustry.gen.Serialization;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.world.blocks.defense.ForceProjector.ShieldEntity; import io.anuke.mindustry.world.blocks.defense.ForceProjector.ShieldEntity;
import io.anuke.ucore.core.Settings;
import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.Entities;
import io.anuke.ucore.entities.EntityGroup; import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.entities.impl.EffectEntity; import io.anuke.ucore.entities.impl.EffectEntity;
import io.anuke.ucore.entities.trait.DrawTrait; import io.anuke.ucore.entities.trait.DrawTrait;
import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.scene.ui.layout.Unit;
import io.anuke.ucore.util.OS;
import io.anuke.ucore.util.Translator; import io.anuke.ucore.util.Translator;
import java.util.Arrays; import java.util.Arrays;
@@ -170,7 +170,7 @@ public class Vars{
ios = Gdx.app.getType() == ApplicationType.iOS; ios = Gdx.app.getType() == ApplicationType.iOS;
android = Gdx.app.getType() == ApplicationType.Android; android = Gdx.app.getType() == ApplicationType.Android;
dataDirectory = OS.getAppDataDirectory(appName); dataDirectory = Settings.getDataDirectory(appName);
customMapDirectory = dataDirectory.child("maps/"); customMapDirectory = dataDirectory.child("maps/");
saveDirectory = dataDirectory.child("saves/"); saveDirectory = dataDirectory.child("saves/");
baseCameraScale = Math.round(Unit.dp.scl(4)); baseCameraScale = Math.round(Unit.dp.scl(4));

View File

@@ -247,7 +247,7 @@ public class BlockIndexer{
for(int x = quadrantX * structQuadrantSize; x < world.width() && x < (quadrantX + 1) * structQuadrantSize; x++){ for(int x = quadrantX * structQuadrantSize; x < world.width() && x < (quadrantX + 1) * structQuadrantSize; x++){
for(int y = quadrantY * structQuadrantSize; y < world.height() && y < (quadrantY + 1) * structQuadrantSize; y++){ for(int y = quadrantY * structQuadrantSize; y < world.height() && y < (quadrantY + 1) * structQuadrantSize; y++){
Tile result = world.tile(x, y); Tile result = world.tile(x, y);
if(result.block().drops == null || !scanOres.contains(result.block().drops.item)) continue; if( result == null || result.block().drops == null || !scanOres.contains(result.block().drops.item)) continue;
itemSet.add(result.block().drops.item); itemSet.add(result.block().drops.item);
} }

View File

@@ -43,38 +43,41 @@ public class Recipes implements ContentList{
new Recipe(defense, DefenseBlocks.surgeWallLarge, new ItemStack(Items.surgealloy, 12 * 4)); new Recipe(defense, DefenseBlocks.surgeWallLarge, new ItemStack(Items.surgealloy, 12 * 4));
//projectors //projectors
new Recipe(defense, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 50), new ItemStack(Items.silicon, 180)); new Recipe(effect, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 50), new ItemStack(Items.silicon, 180));
new Recipe(defense, DefenseBlocks.overdriveProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); new Recipe(effect, DefenseBlocks.overdriveProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250));
new Recipe(defense, DefenseBlocks.forceProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); new Recipe(effect, DefenseBlocks.forceProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250));
//extra blocks new Recipe(effect, StorageBlocks.unloader, new ItemStack(Items.densealloy, 50), new ItemStack(Items.silicon, 60));
new Recipe(defense, DefenseBlocks.shockMine, new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 25)) new Recipe(effect, StorageBlocks.container, new ItemStack(Items.densealloy, 200));
new Recipe(effect, StorageBlocks.vault, new ItemStack(Items.densealloy, 500), new ItemStack(Items.thorium, 250));
new Recipe(effect, DefenseBlocks.shockMine, new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 25))
.setDependencies(Items.blastCompound); .setDependencies(Items.blastCompound);
//TURRETS //TURRETS
new Recipe(weapon, TurretBlocks.duo, new ItemStack(Items.copper, 40)).setAlwaysUnlocked(true); new Recipe(turret, TurretBlocks.duo, new ItemStack(Items.copper, 40)).setAlwaysUnlocked(true);
new Recipe(weapon, TurretBlocks.arc, new ItemStack(Items.copper, 50), new ItemStack(Items.lead, 30), new ItemStack(Items.silicon, 20)); new Recipe(turret, TurretBlocks.arc, new ItemStack(Items.copper, 50), new ItemStack(Items.lead, 30), new ItemStack(Items.silicon, 20));
new Recipe(weapon, TurretBlocks.hail, new ItemStack(Items.copper, 60), new ItemStack(Items.densealloy, 35)); new Recipe(turret, TurretBlocks.hail, new ItemStack(Items.copper, 60), new ItemStack(Items.densealloy, 35));
new Recipe(weapon, TurretBlocks.lancer, new ItemStack(Items.copper, 50), new ItemStack(Items.lead, 100), new ItemStack(Items.silicon, 90)); new Recipe(turret, TurretBlocks.lancer, new ItemStack(Items.copper, 50), new ItemStack(Items.lead, 100), new ItemStack(Items.silicon, 90));
new Recipe(weapon, TurretBlocks.wave, new ItemStack(Items.densealloy, 60), new ItemStack(Items.titanium, 70), new ItemStack(Items.lead, 150)); new Recipe(turret, TurretBlocks.wave, new ItemStack(Items.densealloy, 60), new ItemStack(Items.titanium, 70), new ItemStack(Items.lead, 150));
new Recipe(weapon, TurretBlocks.salvo, new ItemStack(Items.copper, 210), new ItemStack(Items.densealloy, 190), new ItemStack(Items.thorium, 130)); new Recipe(turret, TurretBlocks.salvo, new ItemStack(Items.copper, 210), new ItemStack(Items.densealloy, 190), new ItemStack(Items.thorium, 130));
new Recipe(weapon, TurretBlocks.swarmer, new ItemStack(Items.densealloy, 70), new ItemStack(Items.titanium, 70), new ItemStack(Items.plastanium, 90), new ItemStack(Items.silicon, 60)); new Recipe(turret, TurretBlocks.swarmer, new ItemStack(Items.densealloy, 70), new ItemStack(Items.titanium, 70), new ItemStack(Items.plastanium, 90), new ItemStack(Items.silicon, 60));
new Recipe(weapon, TurretBlocks.ripple, new ItemStack(Items.copper, 300), new ItemStack(Items.densealloy, 220), new ItemStack(Items.thorium, 120)); new Recipe(turret, TurretBlocks.ripple, new ItemStack(Items.copper, 300), new ItemStack(Items.densealloy, 220), new ItemStack(Items.thorium, 120));
new Recipe(weapon, TurretBlocks.cyclone, new ItemStack(Items.copper, 400), new ItemStack(Items.densealloy, 400), new ItemStack(Items.surgealloy, 200), new ItemStack(Items.plastanium, 150)); new Recipe(turret, TurretBlocks.cyclone, new ItemStack(Items.copper, 400), new ItemStack(Items.densealloy, 400), new ItemStack(Items.surgealloy, 200), new ItemStack(Items.plastanium, 150));
new Recipe(weapon, TurretBlocks.fuse, new ItemStack(Items.copper, 450), new ItemStack(Items.densealloy, 450), new ItemStack(Items.surgealloy, 250)); new Recipe(turret, TurretBlocks.fuse, new ItemStack(Items.copper, 450), new ItemStack(Items.densealloy, 450), new ItemStack(Items.surgealloy, 250));
new Recipe(weapon, TurretBlocks.spectre, new ItemStack(Items.copper, 700), new ItemStack(Items.densealloy, 600), new ItemStack(Items.surgealloy, 500), new ItemStack(Items.plastanium, 350), new ItemStack(Items.thorium, 500)); new Recipe(turret, TurretBlocks.spectre, new ItemStack(Items.copper, 700), new ItemStack(Items.densealloy, 600), new ItemStack(Items.surgealloy, 500), new ItemStack(Items.plastanium, 350), new ItemStack(Items.thorium, 500));
new Recipe(weapon, TurretBlocks.meltdown, new ItemStack(Items.copper, 500), new ItemStack(Items.lead, 700), new ItemStack(Items.densealloy, 600), new ItemStack(Items.surgealloy, 650), new ItemStack(Items.silicon, 650)); new Recipe(turret, TurretBlocks.meltdown, new ItemStack(Items.copper, 500), new ItemStack(Items.lead, 700), new ItemStack(Items.densealloy, 600), new ItemStack(Items.surgealloy, 650), new ItemStack(Items.silicon, 650));
//DISTRIBUTION //DISTRIBUTION
new Recipe(distribution, DistributionBlocks.conveyor, new ItemStack(Items.copper, 1)).setAlwaysUnlocked(true); new Recipe(distribution, DistributionBlocks.conveyor, new ItemStack(Items.copper, 1)).setAlwaysUnlocked(true);
new Recipe(distribution, DistributionBlocks.titaniumconveyor, new ItemStack(Items.copper, 2), new ItemStack(Items.titanium, 1)); new Recipe(distribution, DistributionBlocks.titaniumconveyor, new ItemStack(Items.copper, 2), new ItemStack(Items.titanium, 1));
new Recipe(distribution, DistributionBlocks.phaseConveyor, new ItemStack(Items.phasefabric, 10), new ItemStack(Items.silicon, 15), new ItemStack(Items.lead, 20), new ItemStack(Items.densealloy, 20)); new Recipe(distribution, DistributionBlocks.phaseConveyor, new ItemStack(Items.phasefabric, 10), new ItemStack(Items.silicon, 15), new ItemStack(Items.lead, 20), new ItemStack(Items.densealloy, 20));
//starter lead transportation //starter transport
new Recipe(distribution, DistributionBlocks.junction, new ItemStack(Items.copper, 2)).setAlwaysUnlocked(true); new Recipe(distribution, DistributionBlocks.junction, new ItemStack(Items.copper, 2)).setAlwaysUnlocked(true);
new Recipe(distribution, DistributionBlocks.router, new ItemStack(Items.copper, 6)).setAlwaysUnlocked(true); new Recipe(distribution, DistributionBlocks.router, new ItemStack(Items.copper, 6)).setAlwaysUnlocked(true);
//advanced densealloy transporation //advanced densealloy transporat
new Recipe(distribution, DistributionBlocks.distributor, new ItemStack(Items.densealloy, 8), new ItemStack(Items.copper, 8)); new Recipe(distribution, DistributionBlocks.distributor, new ItemStack(Items.densealloy, 8), new ItemStack(Items.copper, 8));
new Recipe(distribution, DistributionBlocks.sorter, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 4)); new Recipe(distribution, DistributionBlocks.sorter, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 4));
new Recipe(distribution, DistributionBlocks.overflowGate, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 8)); new Recipe(distribution, DistributionBlocks.overflowGate, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 8));
@@ -131,9 +134,6 @@ public class Recipes implements ContentList{
new Recipe(power, PowerBlocks.thoriumReactor, new ItemStack(Items.lead, 600), new ItemStack(Items.silicon, 400), new ItemStack(Items.densealloy, 300), new ItemStack(Items.thorium, 300)); new Recipe(power, PowerBlocks.thoriumReactor, new ItemStack(Items.lead, 600), new ItemStack(Items.silicon, 400), new ItemStack(Items.densealloy, 300), new ItemStack(Items.thorium, 300));
new Recipe(power, PowerBlocks.rtgGenerator, new ItemStack(Items.lead, 200), new ItemStack(Items.silicon, 150), new ItemStack(Items.phasefabric, 50), new ItemStack(Items.plastanium, 150), new ItemStack(Items.thorium, 100)); new Recipe(power, PowerBlocks.rtgGenerator, new ItemStack(Items.lead, 200), new ItemStack(Items.silicon, 150), new ItemStack(Items.phasefabric, 50), new ItemStack(Items.plastanium, 150), new ItemStack(Items.thorium, 100));
new Recipe(distribution, StorageBlocks.unloader, new ItemStack(Items.densealloy, 40), new ItemStack(Items.silicon, 50));
new Recipe(distribution, StorageBlocks.container, new ItemStack(Items.densealloy, 200));
new Recipe(distribution, StorageBlocks.vault, new ItemStack(Items.densealloy, 500), new ItemStack(Items.thorium, 250));
//core disabled due to being broken //core disabled due to being broken
/*new Recipe(distribution, StorageBlocks.core, /*new Recipe(distribution, StorageBlocks.core,
new ItemStack(Items.copper, 2000), new ItemStack(Items.densealloy, 1500), new ItemStack(Items.copper, 2000), new ItemStack(Items.densealloy, 1500),
@@ -153,16 +153,16 @@ public class Recipes implements ContentList{
//UNITS //UNITS
//bodies //upgrades
new Recipe(units, UpgradeBlocks.dartPad, new ItemStack(Items.lead, 150), new ItemStack(Items.copper, 150), new ItemStack(Items.silicon, 200), new ItemStack(Items.titanium, 240)).setVisible(RecipeVisibility.desktopOnly); new Recipe(upgrade, UpgradeBlocks.dartPad, new ItemStack(Items.lead, 150), new ItemStack(Items.copper, 150), new ItemStack(Items.silicon, 200), new ItemStack(Items.titanium, 240)).setVisible(RecipeVisibility.desktopOnly);
new Recipe(units, UpgradeBlocks.tridentPad, new ItemStack(Items.lead, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250), new ItemStack(Items.titanium, 300), new ItemStack(Items.plastanium, 200)); new Recipe(upgrade, UpgradeBlocks.tridentPad, new ItemStack(Items.lead, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250), new ItemStack(Items.titanium, 300), new ItemStack(Items.plastanium, 200));
new Recipe(units, UpgradeBlocks.javelinPad, new ItemStack(Items.lead, 350), new ItemStack(Items.silicon, 450), new ItemStack(Items.titanium, 500), new ItemStack(Items.plastanium, 400), new ItemStack(Items.phasefabric, 200)); new Recipe(upgrade, UpgradeBlocks.javelinPad, new ItemStack(Items.lead, 350), new ItemStack(Items.silicon, 450), new ItemStack(Items.titanium, 500), new ItemStack(Items.plastanium, 400), new ItemStack(Items.phasefabric, 200));
new Recipe(units, UpgradeBlocks.glaivePad, new ItemStack(Items.lead, 450), new ItemStack(Items.silicon, 650), new ItemStack(Items.titanium, 700), new ItemStack(Items.plastanium, 600), new ItemStack(Items.surgealloy, 200)); new Recipe(upgrade, UpgradeBlocks.glaivePad, new ItemStack(Items.lead, 450), new ItemStack(Items.silicon, 650), new ItemStack(Items.titanium, 700), new ItemStack(Items.plastanium, 600), new ItemStack(Items.surgealloy, 200));
new Recipe(units, UpgradeBlocks.alphaPad, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 100), new ItemStack(Items.copper, 150)).setVisible(RecipeVisibility.mobileOnly); new Recipe(upgrade, UpgradeBlocks.alphaPad, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 100), new ItemStack(Items.copper, 150)).setVisible(RecipeVisibility.mobileOnly);
new Recipe(units, UpgradeBlocks.tauPad, new ItemStack(Items.lead, 250), new ItemStack(Items.densealloy, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250)); new Recipe(upgrade, UpgradeBlocks.tauPad, new ItemStack(Items.lead, 250), new ItemStack(Items.densealloy, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250));
new Recipe(units, UpgradeBlocks.deltaPad, new ItemStack(Items.lead, 350), new ItemStack(Items.densealloy, 350), new ItemStack(Items.copper, 400), new ItemStack(Items.silicon, 450), new ItemStack(Items.thorium, 300)); new Recipe(upgrade, UpgradeBlocks.deltaPad, new ItemStack(Items.lead, 350), new ItemStack(Items.densealloy, 350), new ItemStack(Items.copper, 400), new ItemStack(Items.silicon, 450), new ItemStack(Items.thorium, 300));
new Recipe(units, UpgradeBlocks.omegaPad, new ItemStack(Items.lead, 450), new ItemStack(Items.densealloy, 550), new ItemStack(Items.silicon, 650), new ItemStack(Items.thorium, 600), new ItemStack(Items.surgealloy, 240)); new Recipe(upgrade, UpgradeBlocks.omegaPad, new ItemStack(Items.lead, 450), new ItemStack(Items.densealloy, 550), new ItemStack(Items.silicon, 650), new ItemStack(Items.thorium, 600), new ItemStack(Items.surgealloy, 240));
//actual unit related stuff //actual unit related stuff
new Recipe(units, UnitBlocks.spiritFactory, new ItemStack(Items.copper, 70), new ItemStack(Items.lead, 110), new ItemStack(Items.silicon, 130)); new Recipe(units, UnitBlocks.spiritFactory, new ItemStack(Items.copper, 70), new ItemStack(Items.lead, 110), new ItemStack(Items.silicon, 130));

View File

@@ -45,6 +45,8 @@ public class Blocks extends BlockList implements ContentList{
} }
}; };
//Registers build blocks from size 1-6
//no reference is needed here since they can be looked up by name later
for(int i = 1; i <= 6; i++){ for(int i = 1; i <= 6; i++){
new BuildBlock("build" + i); new BuildBlock("build" + i);
} }

View File

@@ -4,12 +4,11 @@ import io.anuke.mindustry.content.Liquids;
import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.content.fx.BlockFx;
import io.anuke.mindustry.game.ContentList; import io.anuke.mindustry.game.ContentList;
import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.blocks.distribution.WarpGate;
import io.anuke.mindustry.world.blocks.power.*; import io.anuke.mindustry.world.blocks.power.*;
public class PowerBlocks extends BlockList implements ContentList{ public class PowerBlocks extends BlockList implements ContentList{
public static Block combustionGenerator, thermalGenerator, turbineGenerator, rtgGenerator, solarPanel, largeSolarPanel, public static Block combustionGenerator, thermalGenerator, turbineGenerator, rtgGenerator, solarPanel, largeSolarPanel,
thoriumReactor, fusionReactor, battery, batteryLarge, powerNode, powerNodeLarge, warpGate; thoriumReactor, fusionReactor, battery, batteryLarge, powerNode, powerNodeLarge;
@Override @Override
public void load(){ public void load(){
@@ -85,7 +84,5 @@ public class PowerBlocks extends BlockList implements ContentList{
shadow = "shadow-round-2"; shadow = "shadow-round-2";
}}; }};
warpGate = new WarpGate("warp-gate");
} }
} }

View File

@@ -17,16 +17,16 @@ public class StorageBlocks extends BlockList implements ContentList{
vault = new Vault("vault"){{ vault = new Vault("vault"){{
size = 3; size = 3;
itemCapacity = 1000; itemCapacity = 900;
}}; }};
container = new Vault("container"){{ container = new Vault("container"){{
size = 2; size = 2;
itemCapacity = 250; itemCapacity = 200;
}}; }};
unloader = new SortedUnloader("unloader"){{ unloader = new SortedUnloader("unloader"){{
speed = 5; speed = 12f;
}}; }};
} }
} }

View File

@@ -111,15 +111,6 @@ public class Control extends Module{
} }
state.set(State.playing); state.set(State.playing);
if(world.getSector() == null && !Settings.getBool("custom-warning-for-real-1", false)){
threads.runGraphics(() -> ui.showInfo("$mode.custom.warning", () ->
ui.showInfo("$mode.custom.warning.read", () -> {
Settings.putBool("custom-warning-for-real-1", true);
Settings.save();
})));
}
}); });
Events.on(WorldLoadGraphicsEvent.class, event -> { Events.on(WorldLoadGraphicsEvent.class, event -> {

View File

@@ -8,6 +8,9 @@ import io.anuke.mindustry.game.Teams;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.ucore.core.Events; import io.anuke.ucore.core.Events;
import static io.anuke.mindustry.Vars.unitGroups;
import static io.anuke.mindustry.Vars.waveTeam;
public class GameState{ public class GameState{
public int wave = 1; public int wave = 1;
public float wavetime; public float wavetime;
@@ -16,8 +19,13 @@ public class GameState{
public Difficulty difficulty = Difficulty.normal; public Difficulty difficulty = Difficulty.normal;
public WaveSpawner spawner = new WaveSpawner(); public WaveSpawner spawner = new WaveSpawner();
public Teams teams = new Teams(); public Teams teams = new Teams();
public int enemies;
private State state = State.menu; private State state = State.menu;
public int enemies(){
return Net.client() ? enemies : unitGroups[waveTeam.ordinal()].size();
}
public void set(State astate){ public void set(State astate){
Events.fire(new StateChangeEvent(state, astate)); Events.fire(new StateChangeEvent(state, astate));
state = astate; state = astate;

View File

@@ -34,7 +34,6 @@ import static io.anuke.mindustry.Vars.*;
* This class should <i>not</i> call any outside methods to change state of modules, but instead fire events. * This class should <i>not</i> call any outside methods to change state of modules, but instead fire events.
*/ */
public class Logic extends Module{ public class Logic extends Module{
public boolean doUpdate = true;
public Logic(){ public Logic(){
Events.on(TileChangeEvent.class, event -> { Events.on(TileChangeEvent.class, event -> {
@@ -125,7 +124,7 @@ public class Logic extends Module{
} }
private void updateSectors(){ private void updateSectors(){
if(world.getSector() == null) return; if(world.getSector() == null || state.gameOver) return;
world.getSector().currentMission().update(); world.getSector().currentMission().update();
@@ -172,7 +171,6 @@ public class Logic extends Module{
@Override @Override
public void update(){ public void update(){
if(threads.isEnabled() && !threads.isOnThread()) return;
if(Vars.control != null){ if(Vars.control != null){
control.runUpdateLogic(); control.runUpdateLogic();
@@ -219,12 +217,6 @@ public class Logic extends Module{
if(group.isEmpty()) continue; if(group.isEmpty()) continue;
EntityQuery.collideGroups(bulletGroup, group); EntityQuery.collideGroups(bulletGroup, group);
EntityQuery.collideGroups(group, playerGroup);
for(EntityGroup other : unitGroups){
if(other.isEmpty()) continue;
EntityQuery.collideGroups(group, other);
}
} }
EntityQuery.collideGroups(bulletGroup, playerGroup); EntityQuery.collideGroups(bulletGroup, playerGroup);
@@ -238,9 +230,5 @@ public class Logic extends Module{
checkGameOver(); checkGameOver();
} }
} }
if(threads.isEnabled()){
netServer.update();
}
} }
} }

View File

@@ -45,7 +45,7 @@ import static io.anuke.mindustry.Vars.*;
public class NetClient extends Module{ public class NetClient extends Module{
private final static float dataTimeout = 60 * 18; private final static float dataTimeout = 60 * 18;
private final static float playerSyncTime = 2; private final static float playerSyncTime = 2;
private final static float viewScale = 1.75f; public final static float viewScale = 2f;
private Timer timer = new Timer(5); private Timer timer = new Timer(5);
/**Whether the client is currently connecting.*/ /**Whether the client is currently connecting.*/
@@ -284,6 +284,7 @@ public class NetClient extends Module{
//read wave info //read wave info
state.wavetime = input.readFloat(); state.wavetime = input.readFloat();
state.wave = input.readInt(); state.wave = input.readInt();
state.enemies = input.readInt();
byte cores = input.readByte(); byte cores = input.readByte();
for(int i = 0; i < cores; i++){ for(int i = 0; i < cores; i++){
@@ -399,11 +400,11 @@ public class NetClient extends Module{
quiet = true; quiet = true;
} }
public synchronized void addRemovedEntity(int id){ public void addRemovedEntity(int id){
removed.add(id); removed.add(id);
} }
public synchronized boolean isEntityUsed(int id){ public boolean isEntityUsed(int id){
return removed.contains(id); return removed.contains(id);
} }
@@ -414,11 +415,9 @@ public class NetClient extends Module{
BuildRequest[] requests; BuildRequest[] requests;
synchronized(player.getPlaceQueue()){ requests = new BuildRequest[player.getPlaceQueue().size];
requests = new BuildRequest[player.getPlaceQueue().size]; for(int i = 0; i < requests.length; i++){
for(int i = 0; i < requests.length; i++){ requests[i] = player.getPlaceQueue().get(i);
requests[i] = player.getPlaceQueue().get(i);
}
} }
Call.onClientShapshot(lastSent++, TimeUtils.millis(), player.x, player.y, Call.onClientShapshot(lastSent++, TimeUtils.millis(), player.x, player.y,

View File

@@ -412,11 +412,19 @@ public class NetServer extends Module{
} }
public boolean isWaitingForPlayers(){ public boolean isWaitingForPlayers(){
return state.mode.isPvp && playerGroup.size() < 2; if(state.mode.isPvp){
int used = 0;
for(Team t : Team.all){
if(playerGroup.count(p -> p.getTeam() == t) > 0){
used ++;
}
}
return used < 2;
}
return false;
} }
public void update(){ public void update(){
if(threads.isEnabled() && !threads.isOnThread()) return;
if(!headless && !closing && Net.server() && state.is(State.menu)){ if(!headless && !closing && Net.server() && state.is(State.menu)){
closing = true; closing = true;
@@ -469,6 +477,7 @@ public class NetServer extends Module{
//write wave datas //write wave datas
dataStream.writeFloat(state.wavetime); dataStream.writeFloat(state.wavetime);
dataStream.writeInt(state.wave); dataStream.writeInt(state.wave);
dataStream.writeInt(state.enemies());
ObjectSet<Tile> cores = state.teams.get(player.getTeam()).cores; ObjectSet<Tile> cores = state.teams.get(player.getTeam()).cores;
@@ -495,7 +504,7 @@ public class NetServer extends Module{
//check for syncable groups //check for syncable groups
for(EntityGroup<?> group : Entities.getAllGroups()){ for(EntityGroup<?> group : Entities.getAllGroups()){
if(group.isEmpty() || !(group.all().get(0) instanceof SyncTrait)) continue; if(group.isEmpty() || !(group.all().get(0) instanceof SyncTrait)) continue;
//clipping is done by represntatives //clipping is done by representatives
SyncTrait represent = (SyncTrait) group.all().get(0); SyncTrait represent = (SyncTrait) group.all().get(0);
//make sure mapping is enabled for this group //make sure mapping is enabled for this group

View File

@@ -1,13 +1,21 @@
package io.anuke.mindustry.core; package io.anuke.mindustry.core;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Base64Coder; import com.badlogic.gdx.utils.Base64Coder;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Settings;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.function.Consumer; import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.scene.ui.Dialog;
import io.anuke.ucore.scene.ui.TextField; import io.anuke.ucore.scene.ui.TextField;
import io.anuke.ucore.util.Log;
import java.util.Random; import java.util.Random;
import static io.anuke.mindustry.Vars.mobile;
public abstract class Platform { public abstract class Platform {
/**Each separate game platform should set this instance to their own implementation.*/ /**Each separate game platform should set this instance to their own implementation.*/
public static Platform instance = new Platform() {}; public static Platform instance = new Platform() {};
@@ -17,7 +25,34 @@ public abstract class Platform {
addDialog(field, 16); addDialog(field, 16);
} }
/**See addDialog().*/ /**See addDialog().*/
public void addDialog(TextField field, int maxLength){} public void addDialog(TextField field, int maxLength){
if(!mobile) return; //this is mobile only, desktop doesn't need dialogs
field.tapped(() -> {
Log.info("yappd");
Dialog dialog = new Dialog("", "dialog");
dialog.setFillParent(true);
dialog.content().top();
dialog.content().defaults().height(65f);
TextField to = dialog.content().addField(field.getText(), t-> {}).pad(15).width(250f).get();
to.setMaxLength(maxLength);
to.keyDown(Keys.ENTER, () -> dialog.content().find("okb").fireClick());
dialog.content().addButton("$text.ok", () -> {
field.clearText();
field.appendText(to.getText());
field.change();
dialog.hide();
Gdx.input.setOnscreenKeyboardVisible(false);
}).width(90f).name("okb");
dialog.show();
Timers.runTask(1f, () -> {
to.setCursorPosition(to.getText().length());
Core.scene.setKeyboardFocus(to);
Gdx.input.setOnscreenKeyboardVisible(true);
});
});
}
/**Update discord RPC.*/ /**Update discord RPC.*/
public void updateRPC(){} public void updateRPC(){}
/**Called when the game is exited.*/ /**Called when the game is exited.*/

View File

@@ -248,11 +248,12 @@ public class Renderer extends RendererModule{
overlays.drawBottom(); overlays.drawBottom();
drawAndInterpolate(playerGroup, p -> true, Player::drawBuildRequests); drawAndInterpolate(playerGroup, p -> true, Player::drawBuildRequests);
Shaders.shield.color.set(Palette.accent);
Graphics.beginShaders(Shaders.shield); Graphics.beginShaders(Shaders.shield);
EntityDraw.draw(shieldGroup); EntityDraw.draw(shieldGroup);
EntityDraw.drawWith(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawOver()); EntityDraw.drawWith(shieldGroup, shield -> true, shield -> ((ShieldEntity)shield).drawOver());
Draw.color(Palette.accent);
Graphics.endShaders(); Graphics.endShaders();
Draw.color();
overlays.drawTop(); overlays.drawTop();

View File

@@ -1,80 +1,34 @@
package io.anuke.mindustry.core; package io.anuke.mindustry.core;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Queue;
import com.badlogic.gdx.utils.TimeUtils; import com.badlogic.gdx.utils.TimeUtils;
import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Settings;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Log;
import io.anuke.ucore.util.Threads;
import io.anuke.ucore.util.Threads.ThreadInfoProvider;
import static io.anuke.mindustry.Vars.control; public class ThreadHandler{
import static io.anuke.mindustry.Vars.logic;
public class ThreadHandler implements ThreadInfoProvider{
private final Queue<Runnable> toRun = new Queue<>();
private Thread thread, graphicsThread;
private final Object updateLock = new Object();
private float delta = 1f;
private float smoothDelta = 1f;
private long frame = 0, lastDeltaUpdate;
private float framesSinceUpdate;
private boolean enabled;
private boolean rendered = true;
private long lastFrameTime; private long lastFrameTime;
public ThreadHandler(){ public ThreadHandler(){
Threads.setThreadInfoProvider(this);
graphicsThread = Thread.currentThread();
Timers.setDeltaProvider(() -> { Timers.setDeltaProvider(() -> {
float result = isOnThread() ? delta : Gdx.graphics.getDeltaTime() * 60f; float result = Gdx.graphics.getDeltaTime() * 60f;
return Math.min(Float.isNaN(result) ? 1f : result, 15f); return Float.isNaN(result) || Float.isInfinite(result) ? 1f : Math.min(result, 60f / 10f);
}); });
} }
public void run(Runnable r){ public void run(Runnable r){
if(enabled){ r.run();
synchronized(toRun){
toRun.addLast(r);
}
}else{
r.run();
}
} }
public void runGraphics(Runnable r){ public void runGraphics(Runnable r){
if(enabled){ r.run();
Gdx.app.postRunnable(r);
}else{
r.run();
}
} }
public void runDelay(Runnable r){ public void runDelay(Runnable r){
if(enabled){ Gdx.app.postRunnable(r);
synchronized(toRun){
toRun.addLast(r);
}
}else{
Gdx.app.postRunnable(r);
}
}
public int getTPS(){
if(smoothDelta == 0f){
return 60;
}
return (int) (60 / smoothDelta);
} }
public long getFrameID(){ public long getFrameID(){
return enabled ? frame : Gdx.graphics.getFrameId(); return Gdx.graphics.getFrameId();
}
public float getFramesSinceUpdate(){
return framesSinceUpdate;
} }
public void handleBeginRender(){ public void handleBeginRender(){
@@ -95,119 +49,6 @@ public class ThreadHandler implements ThreadInfoProvider{
} }
} }
} }
if(!enabled) return;
framesSinceUpdate += Timers.delta();
synchronized(updateLock){
rendered = true;
updateLock.notify();
}
} }
public boolean isEnabled(){
return enabled;
}
public void setEnabled(boolean enabled){
if(enabled){
logic.doUpdate = false;
Timers.runTask(2f, () -> {
if(thread != null){
thread.interrupt();
thread = null;
}
thread = new Thread(this::runLogic);
thread.setDaemon(true);
thread.setName("Update Thread");
thread.start();
Log.info("Starting logic thread.");
this.enabled = true;
});
}else{
this.enabled = false;
if(thread != null){
thread.interrupt();
thread = null;
}
Timers.runTask(2f, () -> {
logic.doUpdate = true;
});
}
}
public boolean doInterpolate(){
return enabled && Gdx.graphics.getFramesPerSecond() - getTPS() > 20 && getTPS() < 30;
}
public boolean isOnThread(){
return Thread.currentThread() == thread;
}
@Override
public boolean isOnLogicThread() {
return !enabled || Thread.currentThread() == thread;
}
@Override
public boolean isOnGraphicsThread() {
return !enabled || Thread.currentThread() == graphicsThread;
}
private void runLogic(){
try{
while(true){
long time = TimeUtils.nanoTime();
while(true){
Runnable r;
synchronized(toRun){
if(toRun.size > 0){
r = toRun.removeFirst();
}else{
break;
}
}
r.run();
}
logic.doUpdate = true;
logic.update();
logic.doUpdate = false;
long elapsed = TimeUtils.nanosToMillis(TimeUtils.timeSinceNanos(time));
long target = (long) ((1000) / 60f);
if(elapsed < target){
Thread.sleep(target - elapsed);
}
synchronized(updateLock){
while(!rendered){
updateLock.wait();
}
rendered = false;
}
long actuallyElapsed = TimeUtils.nanosToMillis(TimeUtils.timeSinceNanos(time));
delta = Math.max(actuallyElapsed, target) / 1000f * 60f;
if(TimeUtils.timeSinceMillis(lastDeltaUpdate) > 1000){
lastDeltaUpdate = TimeUtils.millis();
smoothDelta = delta;
}
frame++;
framesSinceUpdate = 0;
}
}catch(InterruptedException ex){
Log.info("Stopping logic thread.");
}catch(Throwable ex){
control.setError(ex);
}
}
} }

View File

@@ -28,7 +28,7 @@ import io.anuke.ucore.scene.ui.TextField.TextFieldFilter;
import io.anuke.ucore.scene.ui.TooltipManager; import io.anuke.ucore.scene.ui.TooltipManager;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.scene.ui.layout.Unit;
import io.anuke.ucore.util.Threads; import io.anuke.ucore.util.Strings;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
import static io.anuke.ucore.scene.actions.Actions.*; import static io.anuke.ucore.scene.actions.Actions.*;
@@ -155,6 +155,7 @@ public class UI extends SceneModule{
load = new LoadDialog(); load = new LoadDialog();
levels = new CustomGameDialog(); levels = new CustomGameDialog();
language = new LanguageDialog(); language = new LanguageDialog();
unlocks = new UnlocksDialog();
settings = new SettingsMenuDialog(); settings = new SettingsMenuDialog();
host = new HostDialog(); host = new HostDialog();
paused = new PausedDialog(); paused = new PausedDialog();
@@ -165,7 +166,6 @@ public class UI extends SceneModule{
traces = new TraceDialog(); traces = new TraceDialog();
maps = new MapsDialog(); maps = new MapsDialog();
localplayers = new LocalPlayerDialog(); localplayers = new LocalPlayerDialog();
unlocks = new UnlocksDialog();
content = new ContentInfoDialog(); content = new ContentInfoDialog();
sectors = new SectorsDialog(); sectors = new SectorsDialog();
missions = new MissionDialog(); missions = new MissionDialog();
@@ -240,8 +240,6 @@ public class UI extends SceneModule{
} }
public void showInfoFade(String info){ public void showInfoFade(String info){
Threads.assertGraphics();
Table table = new Table(); Table table = new Table();
table.setFillParent(true); table.setFillParent(true);
table.actions(Actions.fadeOut(7f, Interpolation.fade), Actions.removeActor()); table.actions(Actions.fadeOut(7f, Interpolation.fade), Actions.removeActor());
@@ -250,9 +248,7 @@ public class UI extends SceneModule{
} }
public void showInfo(String info){ public void showInfo(String info){
Threads.assertGraphics(); new Dialog("", "dialog"){{
new Dialog("$text.info.title", "dialog"){{
getCell(content()).growX(); getCell(content()).growX();
content().margin(15).add(info).width(400f).wrap().get().setAlignment(Align.center, Align.center); content().margin(15).add(info).width(400f).wrap().get().setAlignment(Align.center, Align.center);
buttons().addButton("$text.ok", this::hide).size(90, 50).pad(4); buttons().addButton("$text.ok", this::hide).size(90, 50).pad(4);
@@ -260,9 +256,7 @@ public class UI extends SceneModule{
} }
public void showInfo(String info, Runnable clicked){ public void showInfo(String info, Runnable clicked){
Threads.assertGraphics(); new Dialog("", "dialog"){{
new Dialog("$text.info.title", "dialog"){{
getCell(content()).growX(); getCell(content()).growX();
content().margin(15).add(info).width(400f).wrap().get().setAlignment(Align.center, Align.center); content().margin(15).add(info).width(400f).wrap().get().setAlignment(Align.center, Align.center);
buttons().addButton("$text.ok", () -> { buttons().addButton("$text.ok", () -> {
@@ -300,4 +294,16 @@ public class UI extends SceneModule{
dialog.keyDown(Keys.BACK, dialog::hide); dialog.keyDown(Keys.BACK, dialog::hide);
dialog.show(); dialog.show();
} }
public String formatAmount(int number){
if(number >= 1000000){
return Strings.toFixed(number / 1000000f, 1) + "[gray]mil[]";
}else if(number >= 10000){
return number / 1000 + "[gray]k[]";
}else if(number >= 1000){
return Strings.toFixed(number / 1000f, 1) + "[gray]k[]";
}else{
return number + "";
}
}
} }

View File

@@ -16,6 +16,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.graphics.Trail; import io.anuke.mindustry.graphics.Trail;
import io.anuke.mindustry.io.TypeIO;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.net.NetConnection; import io.anuke.mindustry.net.NetConnection;
import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.ContentType;
@@ -70,7 +71,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
public TargetTrait moveTarget; public TargetTrait moveTarget;
private float walktime; private float walktime;
private Queue<BuildRequest> placeQueue = new ThreadQueue<>(); private Queue<BuildRequest> placeQueue = new Queue<>();
private Tile mining; private Tile mining;
private CarriableTrait carrying; private CarriableTrait carrying;
private Trail trail = new Trail(12); private Trail trail = new Trail(12);
@@ -292,7 +293,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
float x = snappedX(), y = snappedY(); float x = snappedX(), y = snappedY();
if(!movement.isZero() && moved && !state.isPaused()){ if(!movement.isZero() && moved && !state.isPaused()){
walktime += Timers.delta() * movement.len() / 0.7f * getFloorOn().speedMultiplier; walktime += movement.len() / 0.7f * getFloorOn().speedMultiplier;
baseRotation = Mathf.slerpDelta(baseRotation, movement.angle(), 0.13f); baseRotation = Mathf.slerpDelta(baseRotation, movement.angle(), 0.13f);
} }
@@ -421,55 +422,53 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
/**Draw all current build requests. Does not draw the beam effect, only the positions.*/ /**Draw all current build requests. Does not draw the beam effect, only the positions.*/
public void drawBuildRequests(){ public void drawBuildRequests(){
synchronized(getPlaceQueue()){ for(BuildRequest request : getPlaceQueue()){
for(BuildRequest request : getPlaceQueue()){ if(getCurrentRequest() == request) continue;
if(getCurrentRequest() == request) continue;
if(request.breaking){ if(request.breaking){
Block block = world.tile(request.x, request.y).target().block(); Block block = world.tile(request.x, request.y).target().block();
//draw removal request //draw removal request
Lines.stroke(2f); Lines.stroke(2f);
Draw.color(Palette.removeBack); Draw.color(Palette.removeBack);
float rad = Mathf.absin(Timers.time(), 7f, 1f) + block.size * tilesize / 2f - 1; float rad = Mathf.absin(Timers.time(), 7f, 1f) + block.size * tilesize / 2f - 1;
Lines.square( Lines.square(
request.x * tilesize + block.offset(), request.x * tilesize + block.offset(),
request.y * tilesize + block.offset() - 1, request.y * tilesize + block.offset() - 1,
rad); rad);
Draw.color(Palette.remove); Draw.color(Palette.remove);
Lines.square( Lines.square(
request.x * tilesize + block.offset(), request.x * tilesize + block.offset(),
request.y * tilesize + block.offset(), request.y * tilesize + block.offset(),
rad); rad);
}else{ }else{
//draw place request //draw place request
Lines.stroke(2f); Lines.stroke(2f);
Draw.color(Palette.accentBack); Draw.color(Palette.accentBack);
float rad = Mathf.absin(Timers.time(), 7f, 1f) - 2f + request.recipe.result.size * tilesize / 2f; float rad = Mathf.absin(Timers.time(), 7f, 1f) - 2f + request.recipe.result.size * tilesize / 2f;
Lines.square( Lines.square(
request.x * tilesize + request.recipe.result.offset(), request.x * tilesize + request.recipe.result.offset(),
request.y * tilesize + request.recipe.result.offset() - 1, request.y * tilesize + request.recipe.result.offset() - 1,
rad); rad);
Draw.color(Palette.accent); Draw.color(Palette.accent);
Lines.square( Lines.square(
request.x * tilesize + request.recipe.result.offset(), request.x * tilesize + request.recipe.result.offset(),
request.y * tilesize + request.recipe.result.offset(), request.y * tilesize + request.recipe.result.offset(),
rad); rad);
}
} }
Draw.reset();
} }
Draw.reset();
} }
//endregion //endregion
@@ -551,8 +550,8 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
updateBuilding(this); updateBuilding(this);
x = Mathf.clamp(x, 0, world.width() * tilesize); x = Mathf.clamp(x, tilesize, world.width() * tilesize - tilesize);
y = Mathf.clamp(y, 0, world.height() * tilesize); y = Mathf.clamp(y, tilesize, world.height() * tilesize - tilesize);
} }
protected void updateMech(){ protected void updateMech(){
@@ -609,11 +608,11 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
pointerY = vec.y; pointerY = vec.y;
updateShooting(); updateShooting();
movement.limit(speed * Timers.delta()); movement.limit(speed).scl(Timers.delta());
if(getCarrier() == null){ if(getCarrier() == null){
if(!ui.chatfrag.chatOpen()){ if(!ui.chatfrag.chatOpen()){
velocity.add(movement); velocity.add(movement.x, movement.y);
} }
float prex = x, prey = y; float prex = x, prey = y;
updateVelocityStatus(); updateVelocityStatus();
@@ -810,6 +809,12 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
//region read and write methods //region read and write methods
@Override
public boolean isClipped(){
return false;
}
@Override @Override
public void writeSave(DataOutput stream) throws IOException{ public void writeSave(DataOutput stream) throws IOException{
stream.writeBoolean(isLocal); stream.writeBoolean(isLocal);
@@ -849,7 +854,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
@Override @Override
public void write(DataOutput buffer) throws IOException{ public void write(DataOutput buffer) throws IOException{
super.writeSave(buffer, !isLocal); super.writeSave(buffer, !isLocal);
buffer.writeUTF(name); //TODO writing strings is very inefficient TypeIO.writeStringData(buffer, name); //TODO writing strings is very inefficient
buffer.writeByte(Bits.toByte(isAdmin) | (Bits.toByte(dead) << 1) | (Bits.toByte(isBoosting) << 2)); buffer.writeByte(Bits.toByte(isAdmin) | (Bits.toByte(dead) << 1) | (Bits.toByte(isBoosting) << 2));
buffer.writeInt(Color.rgba8888(color)); buffer.writeInt(Color.rgba8888(color));
buffer.writeByte(mech.id); buffer.writeByte(mech.id);
@@ -864,7 +869,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
public void read(DataInput buffer, long time) throws IOException{ public void read(DataInput buffer, long time) throws IOException{
float lastx = x, lasty = y, lastrot = rotation; float lastx = x, lasty = y, lastrot = rotation;
super.readSave(buffer); super.readSave(buffer);
name = buffer.readUTF(); name = TypeIO.readStringData(buffer);
byte bools = buffer.readByte(); byte bools = buffer.readByte();
isAdmin = (bools & 1) != 0; isAdmin = (bools & 1) != 0;
dead = (bools & 2) != 0; dead = (bools & 2) != 0;

View File

@@ -259,27 +259,25 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@Override @Override
public void update(){ public void update(){
synchronized(Tile.tileSetLock){ //TODO better smoke effect, this one is awful
//TODO better smoke effect, this one is awful if(health != 0 && health < tile.block().health && !(tile.block() instanceof Wall) &&
if(health != 0 && health < tile.block().health && !(tile.block() instanceof Wall) && Mathf.chance(0.009f * Timers.delta() * (1f - health / tile.block().health))){
Mathf.chance(0.009f * Timers.delta() * (1f - health / tile.block().health))){
Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4)); Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4));
} }
timeScaleDuration -= Timers.delta(); timeScaleDuration -= Timers.delta();
if(timeScaleDuration <= 0f || !tile.block().canOverdrive){ if(timeScaleDuration <= 0f || !tile.block().canOverdrive){
timeScale = 1f; timeScale = 1f;
} }
if(health <= 0){ if(health <= 0){
onDeath(); onDeath();
} }
Block previous = tile.block(); Block previous = tile.block();
tile.block().update(tile); tile.block().update(tile);
if(tile.block() == previous && cons != null){ if(tile.block() == previous && cons != null){
cons.update(this); cons.update(this);
}
} }
} }

View File

@@ -233,7 +233,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
status.update(this); status.update(this);
velocity.limit(getMaxVelocity()).scl(status.getSpeedMultiplier()); velocity.limit(getMaxVelocity()).scl(1f + (status.getSpeedMultiplier()-1f) * Timers.delta());
if(isFlying()){ if(isFlying()){
x += velocity.x * Timers.delta(); x += velocity.x * Timers.delta();

View File

@@ -13,7 +13,6 @@ import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.function.Predicate; import io.anuke.ucore.function.Predicate;
import io.anuke.ucore.util.EnumSet; import io.anuke.ucore.util.EnumSet;
import io.anuke.ucore.util.Geometry; import io.anuke.ucore.util.Geometry;
import io.anuke.ucore.util.Threads;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -63,45 +62,20 @@ public class Units{
/**Can be called from any thread.*/ /**Can be called from any thread.*/
public static boolean anyEntities(Rectangle rect){ public static boolean anyEntities(Rectangle rect){
if(Threads.isLogic()){ boolResult = false;
boolResult = false;
Units.getNearby(rect, unit -> { Units.getNearby(rect, unit -> {
if(boolResult) return; if(boolResult) return;
if(!unit.isFlying()){ if(!unit.isFlying()){
unit.getHitbox(hitrect); unit.getHitbox(hitrect);
if(hitrect.overlaps(rect)){ if(hitrect.overlaps(rect)){
boolResult = true; boolResult = true;
}
} }
});
return boolResult;
}else{
boolResultGraphics = false;
for(EntityGroup<? extends BaseUnit> g : unitGroups){
g.forEach(u -> {
if(u.isFlying()) return;
u.getHitbox(rectGraphics);
if(rectGraphics.overlaps(rect)){
boolResultGraphics = true;
}
});
if(boolResultGraphics) return true;
} }
});
playerGroup.forEach(u -> { return boolResult;
if(u.isFlying()) return;
u.getHitbox(rectGraphics);
if(rectGraphics.overlaps(rect)){
boolResultGraphics = true;
}
});
return boolResultGraphics;
}
} }
/**Returns whether there are any entities on this tile, with the hitbox expanded.*/ /**Returns whether there are any entities on this tile, with the hitbox expanded.*/

View File

@@ -84,30 +84,28 @@ public interface BuilderTrait extends Entity{
} }
default void readBuilding(DataInput input, boolean applyChanges) throws IOException{ default void readBuilding(DataInput input, boolean applyChanges) throws IOException{
synchronized(getPlaceQueue()){ if(applyChanges) getPlaceQueue().clear();
if(applyChanges) getPlaceQueue().clear();
byte type = input.readByte(); byte type = input.readByte();
if(type != -1){ if(type != -1){
int position = input.readInt(); int position = input.readInt();
float progress = input.readFloat(); float progress = input.readFloat();
BuildRequest request; BuildRequest request;
if(type == 1){ //remove if(type == 1){ //remove
request = new BuildRequest(position % world.width(), position / world.width()); request = new BuildRequest(position % world.width(), position / world.width());
}else{ //place }else{ //place
byte recipe = input.readByte(); byte recipe = input.readByte();
byte rotation = input.readByte(); byte rotation = input.readByte();
request = new BuildRequest(position % world.width(), position / world.width(), rotation, content.recipe(recipe)); request = new BuildRequest(position % world.width(), position / world.width(), rotation, content.recipe(recipe));
} }
request.progress = progress; request.progress = progress;
if(applyChanges){ if(applyChanges){
getPlaceQueue().addLast(request); getPlaceQueue().addLast(request);
}else if(isBuilding()){ }else if(isBuilding()){
getCurrentRequest().progress = progress; getCurrentRequest().progress = progress;
}
} }
} }
} }
@@ -122,13 +120,11 @@ public interface BuilderTrait extends Entity{
* Otherwise, a new place request is added to the queue. * Otherwise, a new place request is added to the queue.
*/ */
default void replaceBuilding(int x, int y, int rotation, Recipe recipe){ default void replaceBuilding(int x, int y, int rotation, Recipe recipe){
synchronized(getPlaceQueue()){ for(BuildRequest request : getPlaceQueue()){
for(BuildRequest request : getPlaceQueue()){ if(request.x == x && request.y == y){
if(request.x == x && request.y == y){ clearBuilding();
clearBuilding(); addBuildRequest(request);
addBuildRequest(request); return;
return;
}
} }
} }
@@ -142,18 +138,16 @@ public interface BuilderTrait extends Entity{
/**Add another build requests to the tail of the queue, if it doesn't exist there yet.*/ /**Add another build requests to the tail of the queue, if it doesn't exist there yet.*/
default void addBuildRequest(BuildRequest place){ default void addBuildRequest(BuildRequest place){
synchronized(getPlaceQueue()){ for(BuildRequest request : getPlaceQueue()){
for(BuildRequest request : getPlaceQueue()){ if(request.x == place.x && request.y == place.y){
if(request.x == place.x && request.y == place.y){ return;
return;
}
} }
Tile tile = world.tile(place.x, place.y);
if(tile != null && tile.entity instanceof BuildEntity){
place.progress = tile.<BuildEntity>entity().progress;
}
getPlaceQueue().addLast(place);
} }
Tile tile = world.tile(place.x, place.y);
if(tile != null && tile.entity instanceof BuildEntity){
place.progress = tile.<BuildEntity>entity().progress;
}
getPlaceQueue().addLast(place);
} }
/** /**
@@ -161,9 +155,7 @@ public interface BuilderTrait extends Entity{
* May return null. * May return null.
*/ */
default BuildRequest getCurrentRequest(){ default BuildRequest getCurrentRequest(){
synchronized(getPlaceQueue()){ return getPlaceQueue().size == 0 ? null : getPlaceQueue().first();
return getPlaceQueue().size == 0 ? null : getPlaceQueue().first();
}
} }
/** /**
@@ -275,18 +267,15 @@ public interface BuilderTrait extends Entity{
/**Draw placement effects for an entity. This includes mining*/ /**Draw placement effects for an entity. This includes mining*/
default void drawBuilding(Unit unit){ default void drawBuilding(Unit unit){
BuildRequest request; BuildRequest request;
if(!isBuilding()){
synchronized(getPlaceQueue()){ if(getMineTile() != null){
if(!isBuilding()){ drawMining(unit);
if(getMineTile() != null){
drawMining(unit);
}
return;
} }
return;
request = getCurrentRequest();
} }
request = getCurrentRequest();
Tile tile = world.tile(request.x, request.y); Tile tile = world.tile(request.x, request.y);
if(unit.distanceTo(tile) > placeDistance){ if(unit.distanceTo(tile) > placeDistance){
@@ -311,10 +300,6 @@ public interface BuilderTrait extends Entity{
float x1 = tmptr[0].x, y1 = tmptr[0].y, float x1 = tmptr[0].x, y1 = tmptr[0].y,
x3 = tmptr[1].x, y3 = tmptr[1].y; x3 = tmptr[1].x, y3 = tmptr[1].y;
Translator close = Geometry.findClosest(unit.x, unit.y, tmptr);
float x2 = close.x, y2 = close.y;
Draw.alpha(0.3f + Mathf.absin(Timers.time(), 0.9f, 0.2f));
Draw.alpha(1f); Draw.alpha(1f);

View File

@@ -1,7 +1,10 @@
package io.anuke.mindustry.entities.traits; package io.anuke.mindustry.entities.traits;
import io.anuke.mindustry.core.NetClient;
import io.anuke.mindustry.net.Interpolator; import io.anuke.mindustry.net.Interpolator;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.entities.trait.Entity; import io.anuke.ucore.entities.trait.Entity;
import io.anuke.ucore.util.Tmp;
import java.io.DataInput; import java.io.DataInput;
import java.io.DataOutput; import java.io.DataOutput;
@@ -24,8 +27,21 @@ public interface SyncTrait extends Entity, TypeTrait{
/**Interpolate entity position only. Override if you need to interpolate rotations or other values.*/ /**Interpolate entity position only. Override if you need to interpolate rotations or other values.*/
default void interpolate(){ default void interpolate(){
if(getInterpolator() == null) if(getInterpolator() == null){
throw new RuntimeException("This entity must have an interpolator to interpolate()!"); throw new RuntimeException("This entity must have an interpolator to interpolate()!");
}
if(isClipped()){
//move off screen when no longer in bounds
Tmp.r1.setSize(Core.camera.viewportWidth * Core.camera.zoom * NetClient.viewScale,
Core.camera.viewportHeight * Core.camera.zoom * NetClient.viewScale)
.setCenter(Core.camera.position.x, Core.camera.position.y);
if(!Tmp.r1.contains(getX(), getY()) && !Tmp.r1.contains(getInterpolator().last.x, getInterpolator().last.y)){
set(-99999f, -99999f);
return;
}
}
getInterpolator().update(); getInterpolator().update();

View File

@@ -320,10 +320,8 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
if(target != null) behavior(); if(target != null) behavior();
if(!isWave && !isFlying()){ x = Mathf.clamp(x, tilesize, world.width() * tilesize - tilesize);
x = Mathf.clamp(x, tilesize/2f, world.width() * tilesize - tilesize/2f); y = Mathf.clamp(y, tilesize, world.height() * tilesize - tilesize);
y = Mathf.clamp(y, tilesize/2f, world.height() * tilesize - tilesize/2f);
}
} }
@Override @Override

View File

@@ -238,7 +238,7 @@ public abstract class GroundUnit extends BaseUnit{
} }
protected void patrol(){ protected void patrol(){
vec.trns(baseRotation, type.speed); vec.trns(baseRotation, type.speed * Timers.delta());
velocity.add(vec.x, vec.y); velocity.add(vec.x, vec.y);
vec.trns(baseRotation, type.hitsizeTile); vec.trns(baseRotation, type.hitsizeTile);
Tile tile = world.tileWorld(x + vec.x, y + vec.y); Tile tile = world.tileWorld(x + vec.x, y + vec.y);

View File

@@ -40,12 +40,11 @@ import static io.anuke.mindustry.Vars.unitGroups;
import static io.anuke.mindustry.Vars.world; import static io.anuke.mindustry.Vars.world;
public class Drone extends FlyingUnit implements BuilderTrait{ public class Drone extends FlyingUnit implements BuilderTrait{
protected static float discoverRange = 120f;
protected static int timerRepairEffect = timerIndex++; protected static int timerRepairEffect = timerIndex++;
protected Item targetItem; protected Item targetItem;
protected Tile mineTile; protected Tile mineTile;
protected Queue<BuildRequest> placeQueue = new ThreadQueue<>(); protected Queue<BuildRequest> placeQueue = new Queue<>();
protected boolean isBreaking; protected boolean isBreaking;
public final UnitState public final UnitState
@@ -250,14 +249,12 @@ public class Drone extends FlyingUnit implements BuilderTrait{
for(BaseUnit unit : group.all()){ for(BaseUnit unit : group.all()){
if(unit instanceof Drone){ if(unit instanceof Drone){
Drone drone = (Drone)unit; Drone drone = (Drone)unit;
synchronized(drone.getPlaceQueue()){ if(drone.isBuilding()){
if(drone.isBuilding()){ //stop building if opposite building begins.
//stop building if opposite building begins. BuildRequest req = drone.getCurrentRequest();
BuildRequest req = drone.getCurrentRequest(); if(req.breaking != event.breaking && req.x == event.tile.x && req.y == event.tile.y){
if(req.breaking != event.breaking && req.x == event.tile.x && req.y == event.tile.y){ drone.clearBuilding();
drone.clearBuilding(); drone.setState(drone.repair);
drone.setState(drone.repair);
}
} }
} }

View File

@@ -1,51 +0,0 @@
package io.anuke.mindustry.game;
import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.ObjectSet;
import io.anuke.mindustry.game.EventType.UnlockEvent;
import io.anuke.mindustry.type.ContentType;
import io.anuke.ucore.core.Events;
public class ContentUnlockSet {
private ObjectMap<ContentType, ObjectSet<String>> unlocked = new ObjectMap<>();
private boolean dirty;
public boolean isUnlocked(UnlockableContent content){
if(content.alwaysUnlocked()) return true;
if(!unlocked.containsKey(content.getContentType())){
unlocked.put(content.getContentType(), new ObjectSet<>());
}
ObjectSet<String> set = unlocked.get(content.getContentType());
return set.contains(content.getContentName());
}
public boolean unlockContent(UnlockableContent content){
if(!content.canBeUnlocked() || content.alwaysUnlocked()) return false;
if(!unlocked.containsKey(content.getContentType())){
unlocked.put(content.getContentType(), new ObjectSet<>());
}
boolean ret = unlocked.get(content.getContentType()).add(content.getContentName());
//fire unlock event so other classes can use it
if(ret){
content.onUnlock();
Events.fire(new UnlockEvent(content));
dirty = true;
}
return ret;
}
public boolean isDirty() {
return dirty;
}
public ObjectMap<ContentType, ObjectSet<String>> getUnlocked() {
return unlocked;
}
}

View File

@@ -4,16 +4,15 @@ import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.ObjectMap;
import com.badlogic.gdx.utils.ObjectMap.Entry; import com.badlogic.gdx.utils.ObjectMap.Entry;
import com.badlogic.gdx.utils.ObjectSet; import com.badlogic.gdx.utils.ObjectSet;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.EventType.UnlockEvent;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.ContentType;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Settings;
import static io.anuke.mindustry.Vars.*;
/**Stores player unlocks. Clientside only.*/ /**Stores player unlocks. Clientside only.*/
public class Unlocks{ public class Unlocks{
private ObjectMap<String, ContentUnlockSet> sets = new ObjectMap<>(); private ObjectMap<ContentType, ObjectSet<String>> unlocked = new ObjectMap<>();
private boolean dirty;
static{ static{
Settings.setSerializer(ContentType.class, (stream, t) -> stream.writeInt(t.ordinal()), stream -> ContentType.values()[stream.readInt()]); Settings.setSerializer(ContentType.class, (stream, t) -> stream.writeInt(t.ordinal()), stream -> ContentType.values()[stream.readInt()]);
@@ -21,7 +20,15 @@ public class Unlocks{
/** Returns whether or not this piece of content is unlocked yet.*/ /** Returns whether or not this piece of content is unlocked yet.*/
public boolean isUnlocked(UnlockableContent content){ public boolean isUnlocked(UnlockableContent content){
return rootSet().isUnlocked(content) || currentSet().isUnlocked(content); if(content.alwaysUnlocked()) return true;
if(!unlocked.containsKey(content.getContentType())){
unlocked.put(content.getContentType(), new ObjectSet<>());
}
ObjectSet<String> set = unlocked.get(content.getContentType());
return set.contains(content.getContentName());
} }
/** /**
@@ -32,77 +39,59 @@ public class Unlocks{
* @return whether or not this content was newly unlocked. * @return whether or not this content was newly unlocked.
*/ */
public boolean unlockContent(UnlockableContent content){ public boolean unlockContent(UnlockableContent content){
return !rootSet().isUnlocked(content) && currentSet().unlockContent(content); if(!content.canBeUnlocked() || content.alwaysUnlocked()) return false;
}
private ContentUnlockSet currentSet(){ if(!unlocked.containsKey(content.getContentType())){
//client connected to server: always return the IP-specific set unlocked.put(content.getContentType(), new ObjectSet<>());
if(Net.client()){
return getSet(Net.getLastIP());
}else if((world.getSector() != null || state.mode.infiniteResources) || state.is(State.menu)){ //sector-sandbox have shared set
return rootSet();
}else{ //per-mode set
return getSet(state.mode.name());
} }
}
private ContentUnlockSet rootSet(){ boolean ret = unlocked.get(content.getContentType()).add(content.getContentName());
return getSet("root");
}
private ContentUnlockSet getSet(String name){ //fire unlock event so other classes can use it
if(!sets.containsKey(name)){ if(ret){
sets.put(name, new ContentUnlockSet()); content.onUnlock();
Events.fire(new UnlockEvent(content));
dirty = true;
} }
return sets.get(name);
return ret;
} }
/** Returns whether unlockables have changed since the last save.*/ /** Returns whether unlockables have changed since the last save.*/
public boolean isDirty(){ public boolean isDirty(){
for(ContentUnlockSet set : sets.values()){ return dirty;
if(set.isDirty()){
return true;
}
}
return false;
} }
/** Clears all unlocked content. Automatically saves.*/ /** Clears all unlocked content. Automatically saves.*/
public void reset(){ public void reset(){
sets.clear();
save(); save();
} }
public void load(){ /**Loads 'legacy' unlocks. Will be removed in final release.*/
sets.clear(); public void tryLoadLegacy(){
try{
ObjectMap<String, ObjectMap<ContentType, Array<String>>> result = Settings.getObject("content-sets", ObjectMap.class, ObjectMap::new); ObjectMap<String, ObjectMap<ContentType, Array<String>>> sets = Settings.getObject("content-sets", ObjectMap.class, ObjectMap::new);
for(Entry<ContentType, Array<String>> entry : sets.get("root").entries()){
for(Entry<String, ObjectMap<ContentType, Array<String>>> outer : result.entries()){ unlocked.put(entry.key, new ObjectSet<>());
ContentUnlockSet cset = new ContentUnlockSet(); unlocked.get(entry.key).addAll(entry.value);
for (Entry<ContentType, Array<String>> entry : outer.value.entries()){
ObjectSet<String> set = new ObjectSet<>();
set.addAll(entry.value);
cset.getUnlocked().put(entry.key, set);
} }
sets.put(outer.key, cset); }catch(Throwable t){
t.printStackTrace();
}
Settings.prefs().remove("content-sets");
Settings.save();
}
public void load(){
unlocked = Settings.getObject("unlockset", ObjectMap.class, ObjectMap::new);
if(Settings.has("content-sets")){
tryLoadLegacy();
} }
} }
public void save(){ public void save(){
ObjectMap<String, ObjectMap<ContentType, Array<String>>> output = new ObjectMap<>(); Settings.putObject("unlockset", unlocked);
for(Entry<String, ContentUnlockSet> centry : sets.entries()){
ObjectMap<ContentType, Array<String>> write = new ObjectMap<>();
for(Entry<ContentType, ObjectSet<String>> entry : centry.value.getUnlocked().entries()){
write.put(entry.key, entry.value.iterator().toArray());
}
output.put(centry.key, write);
}
Settings.putObject("content-sets", output);
Settings.save(); Settings.save();
} }

View File

@@ -106,32 +106,29 @@ public class BlockRenderer{
for(int x = minx; x <= maxx; x++){ for(int x = minx; x <= maxx; x++){
for(int y = miny; y <= maxy; y++){ for(int y = miny; y <= maxy; y++){
boolean expanded = (Math.abs(x - avgx) > rangex || Math.abs(y - avgy) > rangey); boolean expanded = (Math.abs(x - avgx) > rangex || Math.abs(y - avgy) > rangey);
Tile tile = world.rawTile(x, y);
synchronized(Tile.tileSetLock){ if(tile != null){
Tile tile = world.rawTile(x, y); Block block = tile.block();
Team team = tile.getTeam();
if(tile != null){ if(!expanded && block != Blocks.air && world.isAccessible(x, y)){
Block block = tile.block(); tile.block().drawShadow(tile);
Team team = tile.getTeam(); }
if(!expanded && block != Blocks.air && world.isAccessible(x, y)){ if(block != Blocks.air){
tile.block().drawShadow(tile); if(!expanded){
addRequest(tile, Layer.block);
teamChecks.add(team.ordinal());
} }
if(block != Blocks.air){ if(block.expanded || !expanded){
if(!expanded){ if(block.layer != null && block.isLayer(tile)){
addRequest(tile, Layer.block); addRequest(tile, block.layer);
teamChecks.add(team.ordinal());
} }
if(block.expanded || !expanded){ if(block.layer2 != null && block.isLayer2(tile)){
if(block.layer != null && block.isLayer(tile)){ addRequest(tile, block.layer2);
addRequest(tile, block.layer);
}
if(block.layer2 != null && block.isLayer2(tile)){
addRequest(tile, block.layer2);
}
} }
} }
} }
@@ -171,16 +168,14 @@ public class BlockRenderer{
layerBegins(req.layer); layerBegins(req.layer);
} }
synchronized(Tile.tileSetLock){ Block block = req.tile.block();
Block block = req.tile.block();
if(req.layer == Layer.block){ if(req.layer == Layer.block){
block.draw(req.tile); block.draw(req.tile);
}else if(req.layer == block.layer){ }else if(req.layer == block.layer){
block.drawLayer(req.tile); block.drawLayer(req.tile);
}else if(req.layer == block.layer2){ }else if(req.layer == block.layer2){
block.drawLayer2(req.tile); block.drawLayer2(req.tile);
}
} }
lastLayer = req.layer; lastLayer = req.layer;
@@ -199,17 +194,16 @@ public class BlockRenderer{
BlockRequest req = requests.get(index); BlockRequest req = requests.get(index);
if(req.tile.getTeam() != team) continue; if(req.tile.getTeam() != team) continue;
synchronized(Tile.tileSetLock){ Block block = req.tile.block();
Block block = req.tile.block();
if(req.layer == Layer.block){ if(req.layer == Layer.block){
block.draw(req.tile); block.draw(req.tile);
}else if(req.layer == block.layer){ }else if(req.layer == block.layer){
block.drawLayer(req.tile); block.drawLayer(req.tile);
}else if(req.layer == block.layer2){ }else if(req.layer == block.layer2){
block.drawLayer2(req.tile); block.drawLayer2(req.tile);
}
} }
} }
} }

View File

@@ -74,20 +74,18 @@ public class MinimapRenderer implements Disposable{
dx = Mathf.clamp(dx, sz, world.width() - sz); dx = Mathf.clamp(dx, sz, world.width() - sz);
dy = Mathf.clamp(dy, sz, world.height() - sz); dy = Mathf.clamp(dy, sz, world.height() - sz);
synchronized(units){ rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize);
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize); Graphics.beginClip(x, y, w, h);
Graphics.beginClip(x, y, w, h);
for(Unit unit : units){ for(Unit unit : units){
float rx = (unit.x - rect.x) / rect.width * w, ry = (unit.y - rect.y) / rect.width * h; float rx = (unit.x - rect.x) / rect.width * w, ry = (unit.y - rect.y) / rect.width * h;
Draw.color(unit.getTeam().color); Draw.color(unit.getTeam().color);
Draw.rect("white", x + rx, y + ry, w / (sz * 2), h / (sz * 2)); Draw.crect(Draw.getBlankRegion(), x + rx, y + ry, w / (sz * 2), h / (sz * 2));
}
Draw.color();
Graphics.endClip();
} }
Draw.color();
Graphics.endClip();
} }
public TextureRegion getRegion(){ public TextureRegion getRegion(){
@@ -128,11 +126,9 @@ public class MinimapRenderer implements Disposable{
dx = Mathf.clamp(dx, sz, world.width() - sz); dx = Mathf.clamp(dx, sz, world.width() - sz);
dy = Mathf.clamp(dy, sz, world.height() - sz); dy = Mathf.clamp(dy, sz, world.height() - sz);
synchronized(units){ rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize);
rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize); units.clear();
units.clear(); Units.getNearby(rect, units::add);
Units.getNearby(rect, units::add);
}
} }
private int colorFor(Tile tile){ private int colorFor(Tile tile){

View File

@@ -53,10 +53,7 @@ public class OverlayRenderer{
//draw config selected block //draw config selected block
if(input.frag.config.isShown()){ if(input.frag.config.isShown()){
Tile tile = input.frag.config.getSelectedTile(); Tile tile = input.frag.config.getSelectedTile();
tile.block().drawConfigure(tile);
synchronized(Tile.tileSetLock){
tile.block().drawConfigure(tile);
}
} }
input.drawTop(); input.drawTop();
@@ -113,53 +110,52 @@ public class OverlayRenderer{
Draw.reset(); Draw.reset();
} }
synchronized(Tile.tileSetLock){ Block block = target.block();
Block block = target.block(); TileEntity entity = target.entity;
TileEntity entity = target.entity;
if(entity != null){ if(entity != null){
int[] values = {0, 0}; int[] values = {0, 0};
boolean[] doDraw = {false}; boolean[] doDraw = {false};
Runnable drawbars = () -> { Runnable drawbars = () -> {
for(BlockBar bar : block.bars.list()){ for(BlockBar bar : block.bars.list()){
float offset = Mathf.sign(bar.top) * (block.size / 2f * tilesize + 2f + (bar.top ? values[0] : values[1])); float offset = Mathf.sign(bar.top) * (block.size / 2f * tilesize + 2f + (bar.top ? values[0] : values[1]));
float value = bar.value.get(target); float value = bar.value.get(target);
if(MathUtils.isEqual(value, -1f)) continue; if(MathUtils.isEqual(value, -1f)) continue;
if(doDraw[0]){ if(doDraw[0]){
drawBar(bar.type.color, target.drawx(), target.drawy() + offset, value); drawBar(bar.type.color, target.drawx(), target.drawy() + offset, value);
}
if(bar.top)
values[0]++;
else
values[1]++;
} }
};
drawbars.run(); if(bar.top)
values[0]++;
if(values[0] > 0){ else
drawEncloser(target.drawx(), target.drawy() + block.size * tilesize / 2f + 2f, values[0]); values[1]++;
} }
};
if(values[1] > 0){ drawbars.run();
drawEncloser(target.drawx(), target.drawy() - block.size * tilesize / 2f - 2f - values[1], values[1]);
}
doDraw[0] = true; if(values[0] > 0){
values[0] = 0; drawEncloser(target.drawx(), target.drawy() + block.size * tilesize / 2f + 2f, values[0]);
values[1] = 1;
drawbars.run();
} }
if(values[1] > 0){
drawEncloser(target.drawx(), target.drawy() - block.size * tilesize / 2f - 2f - values[1], values[1]);
}
target.block().drawSelect(target); doDraw[0] = true;
values[0] = 0;
values[1] = 1;
drawbars.run();
} }
target.block().drawSelect(target);
} }
} }

View File

@@ -29,6 +29,7 @@ public class Palette{
lightishGray = Color.valueOf("a2a2a2"), lightishGray = Color.valueOf("a2a2a2"),
darkishGray = new Color(0.3f, 0.3f, 0.3f, 1f), darkishGray = new Color(0.3f, 0.3f, 0.3f, 1f),
darkerGray = new Color(0.2f, 0.2f, 0.2f, 1f),
boostTo = Color.valueOf("ffad4d"), boostTo = Color.valueOf("ffad4d"),
boostFrom = Color.valueOf("ff7f57"), boostFrom = Color.valueOf("ff7f57"),

View File

@@ -3,7 +3,6 @@ package io.anuke.mindustry.graphics;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.FloatArray;
import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Draw;
@@ -168,9 +167,7 @@ public class Shaders{
} }
public static class Shield extends Shader{ public static class Shield extends Shader{
public static final int MAX_HITS = 3 * 64; //public Color color = new Color();
public Color color = new Color();
public FloatArray hits = new FloatArray();
public Shield(){ public Shield(){
super("shield", "default"); super("shield", "default");
@@ -179,12 +176,9 @@ public class Shaders{
@Override @Override
public void apply(){ public void apply(){
float scaling = Core.cameraScale / 4f / Core.camera.zoom; float scaling = Core.cameraScale / 4f / Core.camera.zoom;
if(hits.size > 0){
shader.setUniform3fv("u_hits[0]", hits.items, 0, Math.min(hits.size, MAX_HITS));
shader.setUniformi("u_hitamount", Math.min(hits.size, MAX_HITS) / 3);
}
shader.setUniformf("u_dp", Unit.dp.scl(1f)); shader.setUniformf("u_dp", Unit.dp.scl(1f));
shader.setUniformf("u_color", color); //shader.setUniformf("u_color", color);
shader.setUniformf("u_time", Timers.time() / Unit.dp.scl(1f)); shader.setUniformf("u_time", Timers.time() / Unit.dp.scl(1f));
shader.setUniformf("u_scaling", scaling); shader.setUniformf("u_scaling", scaling);
shader.setUniformf("u_offset", shader.setUniformf("u_offset",

View File

@@ -22,7 +22,7 @@ public class Trail{
this.length = length; this.length = length;
} }
public synchronized void update(float curx, float cury){ public void update(float curx, float cury){
if(Vector2.dst(curx, cury, lastX, lastY) >= maxJump){ if(Vector2.dst(curx, cury, lastX, lastY) >= maxJump){
points.clear(); points.clear();
} }
@@ -39,11 +39,11 @@ public class Trail{
lastY = cury; lastY = cury;
} }
public synchronized void clear(){ public void clear(){
points.clear(); points.clear();
} }
public synchronized void draw(Color color, float stroke){ public void draw(Color color, float stroke){
Draw.color(color); Draw.color(color);
for(int i = 0; i < points.size - 2; i += 2){ for(int i = 0; i < points.size - 2; i += 2){

View File

@@ -25,7 +25,7 @@ import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Inputs;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.scene.Group; import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Angles; import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Translator; import io.anuke.ucore.util.Translator;
@@ -145,7 +145,7 @@ public abstract class InputHandler extends InputAdapter{
return false; return false;
} }
public void buildUI(Group group){ public void buildUI(Table table){
} }

View File

@@ -30,8 +30,7 @@ import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.*; import io.anuke.ucore.core.*;
import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Lines; import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.scene.Group; import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.scene.event.Touchable;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -208,78 +207,53 @@ public class MobileInput extends InputHandler implements GestureListener{
//region UI and drawing //region UI and drawing
@Override @Override
public void buildUI(Group group){ public void buildUI(Table table){
table.addImage("blank").color(Palette.accent).height(3f).colspan(4).growX();
table.row();
table.left().margin(0f).defaults().size(48f);
//Create confirm/cancel table table.addImageButton("icon-break", "clear-toggle-partial", 16 * 2f, () -> {
group.fill(c -> { mode = mode == breaking ? recipe == null ? none : placing : breaking;
c.bottom().left().visible(() -> !state.is(State.menu)); lastRecipe = recipe;
if(mode == breaking){
showGuide("deconstruction");
}
}).update(l -> l.setChecked(mode == breaking));
c.table("pane", act -> { //rotate button
act.margin(5); table.addImageButton("icon-arrow", "clear-partial", 16 * 2f, () -> rotation = Mathf.mod(rotation + 1, 4))
act.defaults().size(60f); .update(i -> i.getImage().setRotationOrigin(rotation * 90, Align.center))
.visible(() -> recipe != null && recipe.result.rotate);
//Add a cancel button //cancel button
act.addImageButton("icon-cancel", 16*2f, () -> { table.addImageButton("icon-cancel", "clear-partial", 16 * 2f, () -> {
mode = none; player.clearBuilding();
recipe = null; mode = none;
}); recipe = null;
}).visible(() -> player.isBuilding() || mode != none);
act.row(); //confirm button
table.addImageButton("icon-check", "clear-partial", 16 * 2f, () -> {
for(PlaceRequest request : selection){
Tile tile = request.tile();
//Add an accept button, which places everything. //actually place/break all selected blocks
act.addImageButton("icon-check", 16 * 2f, () -> { if(tile != null){
for(PlaceRequest request : selection){ if(!request.remove){
Tile tile = request.tile(); rotation = request.rotation;
recipe = request.recipe;
//actually place/break all selected blocks tryPlaceBlock(tile.x, tile.y);
if(tile != null){ }else{
if(!request.remove){ tryBreakBlock(tile.x, tile.y);
rotation = request.rotation;
recipe = request.recipe;
tryPlaceBlock(tile.x, tile.y);
}else{
tryBreakBlock(tile.x, tile.y);
}
}
} }
}
}
//move all current requests to removal array so they fade out //move all current requests to removal array so they fade out
removals.addAll(selection); removals.addAll(selection);
selection.clear(); selection.clear();
selecting = false; selecting = false;
}).disabled(i -> selection.size == 0); }).visible(() -> !selection.isEmpty());
act.row();
//Add a rotate button
act.addImageButton("icon-arrow", 16 * 2f, () -> rotation = Mathf.mod(rotation + 1, 4))
.update(i -> i.getImage().setRotationOrigin(rotation * 90, Align.center))
.disabled(i -> recipe == null || !recipe.result.rotate);
}).visible(() -> mode != none).touchable(Touchable.enabled);
c.row();
c.table("pane", remove -> {
remove.defaults().size(60f);
//Add a break button.
remove.addImageButton("icon-break", "toggle", 16 * 2f, () -> {
mode = mode == breaking ? recipe == null ? none : placing : breaking;
lastRecipe = recipe;
if(mode == breaking){
showGuide("deconstruction");
}
}).update(l -> l.setChecked(mode == breaking));
}).margin(5).touchable(Touchable.enabled);
c.table("pane", cancel -> {
cancel.defaults().size(60f);
//Add a 'cancel building' button.
cancel.addImageButton("icon-cancel", 16 * 2f, player::clearBuilding);
}).left().colspan(2).margin(5).touchable(Touchable.enabled).visible(() -> player.getPlaceQueue().size > 0);
});
} }
@Override @Override
@@ -430,7 +404,7 @@ public class MobileInput extends InputHandler implements GestureListener{
@Override @Override
public boolean touchDown(int screenX, int screenY, int pointer, int button){ public boolean touchDown(int screenX, int screenY, int pointer, int button){
if(state.is(State.menu)) return false; if(state.is(State.menu) || player.isDead()) return false;
//get tile on cursor //get tile on cursor
Tile cursor = tileAt(screenX, screenY); Tile cursor = tileAt(screenX, screenY);
@@ -519,7 +493,7 @@ public class MobileInput extends InputHandler implements GestureListener{
@Override @Override
public boolean longPress(float x, float y){ public boolean longPress(float x, float y){
if(state.is(State.menu) || mode == none) return false; if(state.is(State.menu) || mode == none || player.isDead()) return false;
//get tile on cursor //get tile on cursor
Tile cursor = tileAt(x, y); Tile cursor = tileAt(x, y);
@@ -535,7 +509,7 @@ public class MobileInput extends InputHandler implements GestureListener{
if(mode == breaking){ if(mode == breaking){
Effects.effect(Fx.tapBlock, cursor.worldx(), cursor.worldy(), 1f); Effects.effect(Fx.tapBlock, cursor.worldx(), cursor.worldy(), 1f);
}else{ }else if(recipe != null){
Effects.effect(Fx.tapBlock, cursor.worldx() + recipe.result.offset(), cursor.worldy() + recipe.result.offset(), recipe.result.size); Effects.effect(Fx.tapBlock, cursor.worldx() + recipe.result.offset(), cursor.worldy() + recipe.result.offset(), recipe.result.size);
} }
@@ -595,7 +569,7 @@ public class MobileInput extends InputHandler implements GestureListener{
@Override @Override
public void update(){ public void update(){
if(state.is(State.menu)){ if(state.is(State.menu) || player.isDead()){
selection.clear(); selection.clear();
removals.clear(); removals.clear();
mode = none; mode = none;

View File

@@ -23,15 +23,18 @@ import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.Entities;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
/** Class for specifying read/write methods for code generation.*/ /** Class for specifying read/write methods for code generation.*/
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class TypeIO{ public class TypeIO{
private static final Charset charset = Charset.forName("UTF-8");
@WriteClass(Player.class) @WriteClass(Player.class)
public static void writePlayer(ByteBuffer buffer, Player player){ public static void writePlayer(ByteBuffer buffer, Player player){
@@ -329,19 +332,29 @@ public class TypeIO{
@WriteClass(String.class) @WriteClass(String.class)
public static void writeString(ByteBuffer buffer, String string){ public static void writeString(ByteBuffer buffer, String string){
if(string != null){ if(string != null){
Charset charset = Charset.defaultCharset();
byte[] nameBytes = charset.name().getBytes(StandardCharsets.UTF_8);
buffer.put((byte)nameBytes.length);
buffer.put(nameBytes);
byte[] bytes = string.getBytes(charset); byte[] bytes = string.getBytes(charset);
buffer.putShort((short) bytes.length); buffer.putShort((short) bytes.length);
buffer.put(bytes); buffer.put(bytes);
}else{ }else{
buffer.putShort((short) -1); buffer.put((byte) -1);
} }
} }
@ReadClass(String.class) @ReadClass(String.class)
public static String readString(ByteBuffer buffer){ public static String readString(ByteBuffer buffer){
short length = buffer.getShort(); byte length = buffer.get();
if(length != -1){ if(length != -1){
byte[] bytes = new byte[length]; byte[] cbytes = new byte[length];
buffer.get(cbytes);
Charset charset = Charset.forName(new String(cbytes, StandardCharsets.UTF_8));
short slength = buffer.getShort();
byte[] bytes = new byte[slength];
buffer.get(bytes); buffer.get(bytes);
return new String(bytes, charset); return new String(bytes, charset);
}else{ }else{
@@ -362,4 +375,35 @@ public class TypeIO{
buffer.get(bytes); buffer.get(bytes);
return bytes; return bytes;
} }
public static void writeStringData(DataOutput buffer, String string) throws IOException{
if(string != null){
Charset charset = Charset.defaultCharset();
byte[] nameBytes = charset.name().getBytes(StandardCharsets.UTF_8);
buffer.writeByte((byte)nameBytes.length);
buffer.write(nameBytes);
byte[] bytes = string.getBytes(charset);
buffer.writeShort((short) bytes.length);
buffer.write(bytes);
}else{
buffer.writeByte((byte) -1);
}
}
public static String readStringData(DataInput buffer) throws IOException{
byte length = buffer.readByte();
if(length != -1){
byte[] cbytes = new byte[length];
buffer.readFully(cbytes);
Charset charset = Charset.forName(new String(cbytes, StandardCharsets.UTF_8));
short slength = buffer.readShort();
byte[] bytes = new byte[slength];
buffer.readFully(bytes);
return new String(bytes, charset);
}else{
return null;
}
}
} }

View File

@@ -56,7 +56,8 @@ public class SectorPresets{
Missions.blockRecipe(ProductionBlocks.waterExtractor), Missions.blockRecipe(ProductionBlocks.waterExtractor),
new ContentMission(Items.biomatter), new ContentMission(Items.biomatter),
Missions.blockRecipe(CraftingBlocks.biomatterCompressor), Missions.blockRecipe(CraftingBlocks.biomatterCompressor),
new ContentMission(Liquids.oil) new ContentMission(Liquids.oil),
new BattleMission()
), ),
Array.with(Items.copper, Items.lead, Items.coal, Items.titanium))); Array.with(Items.copper, Items.lead, Items.coal, Items.titanium)));
} }
@@ -69,6 +70,8 @@ public class SectorPresets{
return presets.get(x, y); return presets.get(x, y);
} }
public GridMap<SectorPreset> getPresets() { return presets; }
private void add(SectorPreset preset){ private void add(SectorPreset preset){
presets.put(preset.x, preset.y, preset); presets.put(preset.x, preset.y, preset);
orePresets.put(preset.x, preset.y, preset.ores); orePresets.put(preset.x, preset.y, preset.ores);

View File

@@ -156,7 +156,7 @@ public class Sectors{
} }
grid.clear(); grid.clear();
Array<Sector> out = Settings.getObject("sectors", Array.class, Array::new); Array<Sector> out = Settings.getObject("sector-data-2", Array.class, Array::new);
for(Sector sector : out){ for(Sector sector : out){
@@ -185,7 +185,7 @@ public class Sectors{
} }
} }
Settings.putObject("sectors", out); Settings.putObject("sector-data-2", out);
Settings.save(); Settings.save();
} }

View File

@@ -311,7 +311,7 @@ public class WorldGenerator{
+ sim3.octaveNoise2D(detailed ? 12 : 9, 0.6, 1f / 1100f, x - 120, y); + sim3.octaveNoise2D(detailed ? 12 : 9, 0.6, 1f / 1100f, x - 120, y);
double lake = sim2.octaveNoise2D(1, 1, 1f / 110f, x, y); double lake = sim2.octaveNoise2D(1, 1, 1f / 110f, x, y);
elevation -= lake/3f; elevation -= Math.pow(lake + 0.15, 5);
int lerpDst = 20; int lerpDst = 20;
lerpDst *= lerpDst; lerpDst *= lerpDst;
@@ -329,9 +329,9 @@ public class WorldGenerator{
} }
} }
if(elevation < 0.7 || lake > 0.96){ if(elevation < 0.7){
floor = Blocks.deepwater; floor = Blocks.deepwater;
}else if(elevation < 0.79 || lake > 0.948){ }else if(elevation < 0.79){
floor = Blocks.water; floor = Blocks.water;
}else if(elevation < 0.85){ }else if(elevation < 0.85){
floor = Blocks.sand; floor = Blocks.sand;

View File

@@ -1,77 +0,0 @@
package io.anuke.mindustry.maps.generation.pathfinding;
import com.badlogic.gdx.math.GridPoint2;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Queue;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.function.Predicate;
import io.anuke.ucore.util.Geometry;
public class FlowPathFinder extends TilePathfinder{
protected float[][] weights;
public FlowPathFinder(Tile[][] tiles){
super(tiles);
this.weights = new float[tiles.length][tiles[0].length];
}
@Override
public void search(Tile start, Tile end, Array<Tile> out){
}
public void search(Tile start, Predicate<Tile> result, Array<Tile> out){
Queue<Tile> queue = new Queue<>();
for(int i = 0; i < weights.length; i++){
for(int j = 0; j < weights[0].length; j++){
if(result.test(tiles[i][j])){
weights[i][j] = 100000;
queue.addLast(tiles[i][j]);
}else{
weights[i][j] = 0f;
}
}
}
while(queue.size > 0){
Tile tile = queue.first();
for(GridPoint2 point : Geometry.d4){
int nx = tile.x + point.x, ny = tile.y + point.y;
if(inBounds(nx, ny) && weights[nx][ny] < weights[tile.x][tile.y] - 1f && tiles[nx][ny].passable()){
weights[nx][ny] = weights[tile.x][tile.y] - 1;
queue.addLast(tiles[nx][ny]);
if(result.test(tiles[nx][ny])){
break;
}
}
}
}
out.add(start);
while(true){
Tile tile = out.peek();
Tile max = null;
float maxf = weights[tile.x][tile.y];
for(GridPoint2 point : Geometry.d4){
int nx = tile.x + point.x, ny = tile.y + point.y;
if(inBounds(nx, ny) && (weights[nx][ny] > maxf)){
max = tiles[nx][ny];
maxf = weights[nx][ny];
if(MathUtils.isEqual(maxf, 100000)){
out.add(max);
return;
}
}
}
if(max == null){
break;
}
out.add(max);
}
}
}

View File

@@ -1,19 +0,0 @@
package io.anuke.mindustry.maps.generation.pathfinding;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.util.Structs;
public abstract class TilePathfinder{
protected Tile[][] tiles;
public TilePathfinder(Tile[][] tiles){
this.tiles = tiles;
}
protected boolean inBounds(int x, int y){
return Structs.inBounds(x, y, tiles);
}
public abstract void search(Tile start, Tile end, Array<Tile> out);
}

View File

@@ -1,14 +1,12 @@
package io.anuke.mindustry.maps.missions; package io.anuke.mindustry.maps.missions;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.game.GameMode; import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.game.SpawnGroup; import io.anuke.mindustry.game.SpawnGroup;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.Waves; import io.anuke.mindustry.game.Waves;
import io.anuke.mindustry.maps.Sector; import io.anuke.mindustry.maps.Sector;
import io.anuke.mindustry.maps.generation.Generation; import io.anuke.mindustry.maps.generation.Generation;
import io.anuke.mindustry.net.Net;
import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Bundles;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -62,9 +60,9 @@ public class WaveMission extends MissionWithStartingCore{
public String displayString(){ public String displayString(){
return state.wave > target ? return state.wave > target ?
Bundles.format( Bundles.format(
Vars.unitGroups[Vars.waveTeam.ordinal()].size() > 1 && !Net.client() ? state.enemies() > 1 ?
"text.mission.wave.enemies" : "text.mission.wave.enemies" :
"text.mission.wave.enemy", target, target, Vars.unitGroups[Vars.waveTeam.ordinal()].size()) : "text.mission.wave.enemy", target, target, state.enemies()) :
Bundles.format("text.mission.wave", state.wave, target, (int)(state.wavetime/60)); Bundles.format("text.mission.wave", state.wave, target, (int)(state.wavetime/60));
} }
@@ -82,6 +80,6 @@ public class WaveMission extends MissionWithStartingCore{
@Override @Override
public boolean isComplete(){ public boolean isComplete(){
return state.wave > target && Vars.unitGroups[Vars.waveTeam.ordinal()].size() == 0; return state.wave > target && state.enemies() == 0;
} }
} }

View File

@@ -20,7 +20,6 @@ import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Log; import io.anuke.ucore.util.Log;
import io.anuke.ucore.util.Pooling; import io.anuke.ucore.util.Pooling;
import io.anuke.ucore.util.Threads;
import java.io.IOException; import java.io.IOException;
@@ -51,7 +50,6 @@ public class Net{
public static void showError(Throwable e){ public static void showError(Throwable e){
if(!headless){ if(!headless){
Threads.assertGraphics();
Throwable t = e; Throwable t = e;
while(t.getCause() != null){ while(t.getCause() != null){
@@ -59,7 +57,7 @@ public class Net{
} }
String error = t.getMessage() == null ? "" : t.getMessage().toLowerCase(); String error = t.getMessage() == null ? "" : t.getMessage().toLowerCase();
String type = error.getClass().toString().toLowerCase(); String type = t.getClass().toString().toLowerCase();
if(error.equals("mismatch")){ if(error.equals("mismatch")){
error = Bundles.get("text.error.mismatch"); error = Bundles.get("text.error.mismatch");

View File

@@ -145,9 +145,6 @@ public class NetworkIO{
} }
} }
/**
* Return whether a custom map is expected, and thus whether the client should wait for additional data.
*/
public static void loadWorld(InputStream is){ public static void loadWorld(InputStream is){
Player player = players[0]; Player player = players[0];
@@ -165,6 +162,8 @@ public class NetworkIO{
world.sectors.createSector(Bits.getLeftShort(sector), Bits.getRightShort(sector)); world.sectors.createSector(Bits.getLeftShort(sector), Bits.getRightShort(sector));
world.setSector(world.sectors.get(sector)); world.setSector(world.sectors.get(sector));
world.getSector().completedMissions = missions; world.getSector().completedMissions = missions;
}else{
world.setSector(null);
} }
ObjectMap<String, String> tags = new ObjectMap<>(); ObjectMap<String, String> tags = new ObjectMap<>();

View File

@@ -1,5 +1,24 @@
package io.anuke.mindustry.type; package io.anuke.mindustry.type;
public enum Category{ public enum Category{
weapon, production, distribution, liquid, power, defense, crafting, units /**Offensive turrets.*/
turret,
/**Blocks that produce raw resources, such as drills.*/
production,
/**Blocks that move items around.*/
distribution,
/**Blocks that move liquids around.*/
liquid,
/**Blocks that generate or transport power.*/
power,
/**Walls and other defensive structures.*/
defense,
/**Blocks that craft things.*/
crafting,
/**Blocks that create units.*/
units,
/**Things that upgrade the player such as mech pads.*/
upgrade,
/**Things for storage or passive effects.*/
effect
} }

View File

@@ -18,7 +18,7 @@ public class Liquid extends UnlockableContent{
public float flammability; public float flammability;
/**temperature: 0.5 is 'room' temperature, 0 is very cold, 1 is molten hot*/ /**temperature: 0.5 is 'room' temperature, 0 is very cold, 1 is molten hot*/
public float temperature = 0.5f; public float temperature = 0.5f;
/**how much heat this liquid can store. 0.75=water (high), anything lower is probably less dense and bad at cooling.*/ /**how much heat this liquid can store. 0.4=water (decent), anything lower is probably less dense and bad at cooling.*/
public float heatCapacity = 0.5f; public float heatCapacity = 0.5f;
/**how thick this liquid is. 0.5=water (relatively viscous), 1 would be something like tar (very slow)*/ /**how thick this liquid is. 0.5=water (relatively viscous), 1 would be something like tar (very slow)*/
public float viscosity = 0.5f; public float viscosity = 0.5f;

View File

@@ -23,6 +23,7 @@ import static io.anuke.mindustry.Vars.*;
public class Recipe extends UnlockableContent{ public class Recipe extends UnlockableContent{
private static ObjectMap<Block, Recipe> recipeMap = new ObjectMap<>(); private static ObjectMap<Block, Recipe> recipeMap = new ObjectMap<>();
private static Array<Recipe> returnArray = new Array<>();
public final Block result; public final Block result;
public final ItemStack[] requirements; public final ItemStack[] requirements;
@@ -55,34 +56,15 @@ public class Recipe extends UnlockableContent{
recipeMap.put(result, this); recipeMap.put(result, this);
} }
/** /**Returns all non-hidden recipes in a category.*/
* Returns unlocked recipes in a category. public static Array<Recipe> getByCategory(Category category){
* Do not call on the server backend, as unlocking does not exist! returnArray.clear();
*/
public static void getUnlockedByCategory(Category category, Array<Recipe> arr){
if(headless){
throw new RuntimeException("Not implemented on the headless backend!");
}
arr.clear();
for(Recipe r : content.recipes()){
if(r.category == category && (control.unlocks.isUnlocked(r)) &&
!((r.mode != null && r.mode != state.mode) || !r.visibility.shown())){
arr.add(r);
}
}
}
/**
* Returns all recipes in a category.
*/
public static void getByCategory(Category category, Array<Recipe> r){
r.clear();
for(Recipe recipe : content.recipes()){ for(Recipe recipe : content.recipes()){
if(recipe.category == category){ if(recipe.category == category && !recipe.isHidden()){
r.add(recipe); returnArray.add(recipe);
} }
} }
return returnArray;
} }
public static Recipe getByResult(Block block){ public static Recipe getByResult(Block block){

View File

@@ -0,0 +1,14 @@
package io.anuke.mindustry.ui;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.layout.Stack;
public class ImageStack extends Stack{
public ImageStack(TextureRegion... regions){
for(TextureRegion region : regions){
add(new Image(region));
}
}
}

View File

@@ -0,0 +1,18 @@
package io.anuke.mindustry.ui;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.ucore.scene.ui.layout.Table;
/**An item image with text.*/
public class ItemDisplay extends Table{
public ItemDisplay(Item item){
this(item, 0);
}
public ItemDisplay(Item item, int amount){
add(new ItemImage(new ItemStack(item, amount))).size(8*3);
add(item.localizedName()).padLeft(4);
}
}

View File

@@ -18,10 +18,12 @@ public class ItemImage extends Stack{
} }
public ItemImage(ItemStack stack){ public ItemImage(ItemStack stack){
Table t = new Table().left().bottom();
t.add(stack.amount + "");
add(new Image(stack.item.region)); add(new Image(stack.item.region));
add(t);
if(stack.amount != 0){
Table t = new Table().left().bottom();
t.add(stack.amount + "");
add(t);
}
} }
} }

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