Compare commits

..

122 Commits
v126 ... v126.2

Author SHA1 Message Date
OSP
afbac48a45 Change ip hub (#5014)
transition to new hosting
2021-03-29 09:38:56 -04:00
liuxilu
e7d9cddbae update zh-CN for logic hints (#4655)
* add new logic hints to zh-CN

* logic hints for zh-CN completed

* more hints and fix

* draw operations

* update command hint

* 载荷

* up to d7f848f
2021-03-28 18:44:29 -04:00
YellOw139
a6fe1275c7 [Bundle][RO] Update (#4860)
* [Bundle][RO] Update

This PR ~~was~~ will soon be tested in-game ~~and is ready to merge at any time~~.

Changelog:

- New strings/changes up to commit b75a8d5260
- Typo fixes & various other improvements

* Status effects

* Minor change

* Improve, adapt

* After test bundles be like

* cleanup

* typo

* options, options...

* Added block_info keybind name
2021-03-28 18:42:50 -04:00
Prosta4okua
2f3fd9de3b [Bundle][uk_UA] Update Ukrainian (#4868)
* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

03.06.2021

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties
2021-03-28 18:42:41 -04:00
MEEP of Faith
8b2e78ab1e maxRange overriding on laser bulllets (#4873) 2021-03-28 18:42:26 -04:00
Catchears
d04eaa81e0 german translation (#4897)
* update german translation to b75a8d5260

* update german translation to 8e52d8a272

* foreshadow improvements

* block info keybind
2021-03-28 18:41:06 -04:00
cinnx
b71d5837e9 Update bundle_pl.properties (#4910)
Added missing part of the translation from the English bundle file, fixed a lot of typos.

Huge thanks to:
Somka#9325
count sudoku#9564
Zielony Trójkąt#9074
for pointing out those errors :D
2021-03-28 18:40:55 -04:00
MEEP of Faith
332b1ce100 collidesGround targetting in GroundAI (#4911) 2021-03-28 18:40:47 -04:00
Vanguard
c17040b1ab [Bundle][RU] Update (#4927)
* 21 new, 4 changed, 4 deleted

New:
status.burning.name
status.freezing.name
status.wet.name
status.muddy.name
status.melting.name
status.sapped.name
status.spore-slowed.name
status.tarred.name
status.overclock.name
status.shocked.name
status.blasted.name
status.unmoving.name
stat.opposites
stat.damagemultiplier
stat.healthmultiplier
stat.speedmultiplier
stat.reloadmultiplier
stat.buildspeedmultiplier
stat.reactive
bullet.lightning
content.status.name

Changed:
wavemode.health
boss.health
rules.blockhealthmultiplier
rules.unithealthmultiplier

Deleted:
bullet.sapping
bullet.shock
bullet.freezing
bullet.tarred

* 1 new line

keybind.block_info.name
2021-03-28 18:38:50 -04:00
Sharlotte
a3bd7ba3ad [KO]Update Bundle (#4935) 2021-03-28 18:38:44 -04:00
MEEP of Faith
2a7525cdf1 Allow for dynamic counting (#4988) 2021-03-28 18:38:16 -04:00
AzCraft
43602caab2 Added Bulgarian translations. [bundle_bg.properties] (#5013) 2021-03-28 09:42:37 -04:00
RebornTrack970
793e957d0d OmegaHub Updated (#5011)
Moved Annexation and Rush from Minecraft hosting to Mindustry host and improved ping.
Added Castle Wars by Xusx.
2021-03-28 09:42:03 -04:00
Anuken
66594a2b32 Fixed #5012 2021-03-28 09:41:08 -04:00
Anuken
e81219dd3e Merge remote-tracking branch 'origin/master' 2021-03-27 22:12:54 -04:00
Anuken
d11a26c568 Pack effect icons in UI spritesheet 2021-03-27 22:12:47 -04:00
Skat
cf3543ec07 Change int parameters to long type (#5008) 2021-03-27 17:38:55 -04:00
Valeriy
886d8752b7 Update servers_v6.json (#4753) 2021-03-27 16:45:52 -04:00
fuzzbuck
496d6b139e Update servers_v6.json (#5003)
TLD change
2021-03-26 20:30:42 -04:00
Darkness6030
3ce064ca11 Update mindurka ip (#5002)
Mindurka.ru come back!)
[RU]Заспидранил восстановление сервера с нуля за один день!) Гений мысли...
2021-03-26 14:17:48 -04:00
Anuken
1be7f3b36c Merge remote-tracking branch 'origin/master' 2021-03-26 10:13:46 -04:00
Anuken
3fddd6eea7 .size 2021-03-26 10:13:42 -04:00
CxZxRainzz
339fc8113b Shutting down CxZx (#4996)
* Shutting down CxZx

I shutting down the servers because of family issues i hope to rejoin the community later

* Update servers_v6.json

Co-authored-by: Joshua Fan <joshuaptfan@gmail.com>

Co-authored-by: Joshua Fan <joshuaptfan@gmail.com>
2021-03-25 23:00:37 -04:00
Anuken
025bf5ffc3 Merge remote-tracking branch 'origin/master' 2021-03-25 22:42:01 -04:00
Anuken
1dc2906343 Fixed #4997 2021-03-25 22:41:55 -04:00
L0615T1C5-216AC-9437
eea276118f Add more ports for Chaotic Neutral (#4981) 2021-03-25 16:33:12 -04:00
Anuken
36aa9d5696 Fixed #4994 2021-03-25 13:51:13 -04:00
Anuken
1fc1efc410 Merge remote-tracking branch 'origin/master' 2021-03-25 12:51:31 -04:00
Anuken
7924d9b9ef Fixed #4993 2021-03-25 12:51:24 -04:00
Patrick 'Quezler' Mounier
3336e6cdde Exclude derelict targets from Units.bestEnemy (#4990) 2021-03-25 09:52:35 -04:00
MEEP of Faith
4ec81b0669 Make Repair Points affected by overdrive (#4985) 2021-03-24 19:09:20 -04:00
Anuken
d10123295c More pattern variables 2021-03-24 12:55:57 -04:00
Anuken
0929593efc Buildscript cleanup 2021-03-24 12:41:50 -04:00
way-zer
ace6eed653 Add assetsJar artifact for core (#4983)
* Add assetsJar artifact for core

* Add musicJar artifact for core
2021-03-24 12:38:02 -04:00
키에르
a40731624a Add uuid return to PlayerBanEvent (#4982)
* Update EventType.java

* Update Administration.java
2021-03-24 10:02:21 -04:00
VizardAlpha
268672adb8 Update bundle_fr.properties (#4973)
* Update bundle_fr.properties

Minor correction on the translation.
Addition of commits validated in the translation of Mar 10, 2021 ...

* Update bundle_fr.properties

* Update bundle_fr.properties

* Update bundle_fr.properties
2021-03-23 13:03:23 -04:00
Patrick 'Quezler' Mounier
af20db4cf7 Colorize the inner corners of other conduit sprites (#4978) 2021-03-23 09:44:09 -04:00
OSP
8a76e7ea25 Add Mindustry.Defense to global server list (#4960) 2021-03-23 09:23:12 -04:00
Anuken
d72db58b3f Minor ConstructBlock logic tweak 2021-03-22 17:02:09 -04:00
Anuken
975043d439 Use more ping threads 2021-03-22 12:47:02 -04:00
Anuken
40b5ee391d Merge remote-tracking branch 'origin/master' 2021-03-22 11:32:44 -04:00
Anuken
e87e678d0f Use AsyncExecutor for pings 2021-03-22 11:32:36 -04:00
Susideur-YT
d098a9ddc2 Just some change in frensh (#4862) 2021-03-22 10:20:30 -04:00
Joshua Fan
7145ffaf28 Add block info keybind (#4284)
* Add block info keybind

* Change block info keybind to backtick

* Change block info keybind to F1
2021-03-21 14:08:53 -04:00
彭瑞暄
d4afc3ecde Large Update & Sync (#4968) 2021-03-20 21:02:44 -04:00
MEEP of Faith
1ecc49f9b7 Use continuous damage (#4966) 2021-03-20 08:38:17 -04:00
Anuken
7ffd46aee9 #4964 2021-03-19 14:36:25 -04:00
Anuken
afd6570ced More floor render optimization 2021-03-18 22:18:21 -04:00
Anuken
49c099a03c Minor floor renderer optimization 2021-03-18 21:55:33 -04:00
Anuken
851fa09e0c More dispose() cleanup 2021-03-18 16:29:40 -04:00
Anuken
b0c8426d0f arc 2021-03-18 16:16:28 -04:00
Anuken
9384d661c1 Removed unnecessary dispose() 2021-03-18 16:14:53 -04:00
Anuken
a06e0a325b Kill Android app on exit (Arc) 2021-03-18 15:39:26 -04:00
Anuken
a8c31d838f Mesh attribute cleanup 2021-03-18 15:18:59 -04:00
Anuken
46cf48e012 Reverted IntelliJ's "cleanup" 2021-03-18 12:58:57 -04:00
Anuken
bfa9d65314 Ban player ID before IP 2021-03-18 12:57:27 -04:00
Anuken
aa7936100e Merge remote-tracking branch 'origin/master' 2021-03-17 20:53:09 -04:00
Anuken
b20ef104b9 Fixed #4952 2021-03-17 20:53:04 -04:00
Anuken
53b99a650c Update Damage.java 2021-03-17 19:32:32 -04:00
Anuken
2025d6ad2d Merge remote-tracking branch 'origin/master' 2021-03-17 17:40:14 -04:00
Anuken
c7cbe50876 More misc cleanup 2021-03-17 17:39:50 -04:00
Darkness6030
267d822771 Change mindurka's ip address (#4939)
I've changed ip address of Mindurka.ru
2021-03-17 09:16:30 -04:00
Anuken
786d638ad0 Misc cleanup 2021-03-16 21:51:12 -04:00
Anuken
89997ad8d4 Merge remote-tracking branch 'origin/master' 2021-03-16 21:29:22 -04:00
Anuken
036ab282e0 Update bug_report.md 2021-03-16 18:26:19 -04:00
Anuken
e9df213d0a Decreased sector damage check radius 2021-03-16 18:25:30 -04:00
Anuken
150aab3530 Server crash fix / Disabled logic config sync / Faster logic parsing 2021-03-15 17:13:27 -04:00
Anuken
96607ef753 Non-recursive door floodfill 2021-03-15 11:39:06 -04:00
Anuken
075ddf104b Merge remote-tracking branch 'origin/master' 2021-03-13 20:01:14 -05:00
Anuken
671ca5c94f Disabled logicUnitBuild on servers by default 2021-03-13 20:01:01 -05:00
CxZxRainzz
e7ed7c0765 Update servers_v6.json (#4933)
Remove 1 server and add another
2021-03-13 09:13:53 -05:00
Anuken
92db8349dc Don't log irrelevant payload errors 2021-03-12 18:31:41 -05:00
Anuken
ea3f6cf4a0 PowerNode link cleanup & bugfixes 2021-03-12 13:38:28 -05:00
Anuken
dd191493c0 Merge remote-tracking branch 'origin/master' 2021-03-12 13:16:39 -05:00
Anuken
2c08b82fef Fixed blocks linking through insulated walls 2021-03-12 13:16:35 -05:00
thedimas3007
f7c5315599 Update servers_v6.json (#4834)
* Update servers_v6.json

* missing `,`

Co-authored-by: Кусь Пчелов <srthmnt@gmail.com>
Co-authored-by: Anuken <arnukren@gmail.com>
2021-03-12 09:49:30 -05:00
Noah van der Aa
ad6e458636 Add mindustry.party server to server list. (#4926) 2021-03-12 09:48:03 -05:00
Anuken
f04e763667 Merge remote-tracking branch 'origin/master' 2021-03-12 09:35:37 -05:00
Anuken
d545dc0d02 Logic negative coordinate support 2021-03-12 09:35:32 -05:00
Sunny Kim
f895dfe341 dragMultiplier for status effects (#4870) 2021-03-11 18:41:03 -05:00
Anuken
c5bea40e7d Votekick cleanup 2021-03-11 16:55:00 -05:00
TranquillyUnpleasant
e08052d7d6 Votekick edit (#4924)
* Add "yes" and "no" compatibility to votekicks

* Lowercase
2021-03-11 16:54:10 -05:00
Anuken
78a7d15f3e Merge remote-tracking branch 'origin/master' 2021-03-11 10:53:01 -05:00
Anuken
b2e2cfb48d Log client commands before handling 2021-03-11 10:52:53 -05:00
BasedUser
f694e42c78 Add mindustry.ru to global server list (#4697) 2021-03-10 20:52:57 -05:00
Anuken
8e52d8a272 Stat reactivity cleanup 2021-03-10 17:34:39 -05:00
Anuken
1a6843ef2c Re-added unused corroded effect to ensure compatibility 2021-03-10 17:15:18 -05:00
Anuken
4b9fa9a79e Status effect display for bullets 2021-03-10 16:42:28 -05:00
Anuken
c15a8b52d2 Status sprites 2021-03-10 16:22:35 -05:00
Anuken
bd36ca821d Improvements of status effects in database 2021-03-10 16:22:07 -05:00
MEEP of Faith
d4e6817232 Boosting Rise Speed (#4918) 2021-03-10 13:48:33 -05:00
genNAowl
096b54305d Add Status Effect Stats to Core Database (#4883)
* Status Effect Stats

* import cleanup

* Add Sk7725's icons

Tinting still a WIP

Co-authored-by: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com>
2021-03-10 12:04:09 -05:00
RebornTrack970
8b52561a31 Added the Expansion gamemode to Omega Hub (#4913) 2021-03-10 09:38:56 -05:00
Anuken
b1e8001ae8 Minor cleanup 2021-03-09 19:04:29 -05:00
Anuken
8aba480148 Merge remote-tracking branch 'origin/master' 2021-03-09 15:52:29 -05:00
Anuken
429ff738f9 Error on unknown jump locations 2021-03-09 15:51:36 -05:00
Anuken
ae2736d393 New logic parser 2021-03-09 15:47:19 -05:00
Niels Horn
fc28fbc662 Translate the entire bundle into Danish. (#4900)
* Translate the entire bundle into Danish.

There were close to no existing translations of Mindustry in Danish, and the ones there were had concord issues, spelling issues or contained a mix of Danish and English.
This pull-request provides a thourough translation, covering all names - unit names have remained mostly the same, - as well as tutorials and descriptions.

A collaborative effort with @AsgerHB.

* Update contributors
2021-03-09 09:56:22 -05:00
Anuken
4f37f29ae8 progress 2021-03-09 09:51:37 -05:00
MEEP of Faith
c4da670a7c do not the multi charge (#4905) 2021-03-08 19:14:04 -05:00
Anuken
57dca33c2b Merge branch 'master' into new-logic-parser
# Conflicts:
#	gradle.properties
2021-03-08 18:03:00 -05:00
Anuken
4a1419af0e Merge remote-tracking branch 'origin/master' 2021-03-08 17:12:56 -05:00
Anuken
25c61590d1 Minor cleanup / Another slight vela buff 2021-03-08 17:12:53 -05:00
CxZxRainzz
f6925953ad Update servers_v6.json (#4901)
add PvP server for CxZx
2021-03-08 15:05:26 -05:00
Anuken
e1b0e07f3c Return 1 for sensing dead in null objects 2021-03-08 09:52:36 -05:00
Anuken
b2d16f69da Merge remote-tracking branch 'origin/master' 2021-03-07 17:54:47 -05:00
Anuken
a60772a81e Fixed #4891 2021-03-07 17:54:43 -05:00
buthed010203
6151ebf716 Fix button background (#4892)
This button had a black background which stuck out from everything else on the page, this fixes that.
2021-03-07 16:35:04 -05:00
Anuken
cccb8d6d19 Fixed #4890 2021-03-07 15:45:28 -05:00
Anuken
a2c7c38a3e Reduced Nova range 2021-03-07 09:32:52 -05:00
Anuken
b51d34e893 Fixed #4882 2021-03-06 17:25:03 -05:00
Anuken
79a62cd74c Merge remote-tracking branch 'origin/master' 2021-03-06 14:23:14 -05:00
Anuken
18c669ae3e Fixed #4879 / Fixed server speed validation check 2021-03-06 14:23:10 -05:00
buthed010203
8474c921ec Fix indentation (#4877)
Indents are 4 spaces not 3
2021-03-06 11:11:17 -05:00
Anuken
7c7c57c64e Various parsing bugfixes 2021-03-06 11:10:32 -05:00
Anuken
f7e8412b4b Fixed #4875 2021-03-06 10:41:31 -05:00
Anuken
0d3be917b2 Extra checks for crash fix 2021-03-06 00:05:15 -05:00
Anuken
5c85ba84db Actual JSON weather (?) 2021-03-05 23:20:19 -05:00
Anuken
07d11f02d8 Fixed #4869 2021-03-05 22:16:29 -05:00
Anuken
fce30e6ae5 Sync based on system time 2021-03-05 17:22:44 -05:00
Anuken
315cbaec47 progress 2021-01-05 11:17:20 -05:00
Anuken
68535bfcaa progress 2021-01-03 16:21:17 -05:00
135 changed files with 4528 additions and 1941 deletions

View File

@@ -17,7 +17,7 @@ assignees: ''
**Link(s) to mod(s) used**: *The mod repositories or zip files that are related to the issue, if applicable.* **Link(s) to mod(s) used**: *The mod repositories or zip files that are related to the issue, if applicable.*
**Save file**: *The (zipped) save file you were playing on when the bug happened. THIS IS REQUIRED FOR ANY ISSUE HAPPENING IN-GAME OR IN MULTIPLAYER, REGARDLESS OF WHETHER YOU THINK IT HAPPENS EVERYWHERE. DO NOT DELETE OR OMIT THIS LINE UNLESS YOU ARE SURE THAT THE ISSUE DOES NOT HAPPEN IN-GAME.* **Save file**: *The (zipped) save file you were playing on when the bug happened. THIS IS REQUIRED FOR ANY ISSUE HAPPENING IN-GAME OR IN MULTIPLAYER, REGARDLESS OF WHETHER YOU THINK IT HAPPENS EVERYWHERE. DO NOT DELETE OR OMIT THIS LINE UNLESS YOU ARE SURE THAT THE ISSUE DOES NOT HAPPEN IN-GAME. IF YOU DO NOT HAVE A SAVE, DON'T WASTE TIME OPENING THIS ISSUE.*
If you remove the line above without reading it properly and understanding what it means, I will reap your soul. Even if you're playing on someone's server, you can still save the game to a slot. If you remove the line above without reading it properly and understanding what it means, I will reap your soul. Even if you're playing on someone's server, you can still save the game to a slot.

View File

@@ -44,7 +44,6 @@ public class AndroidLauncher extends AndroidApplication{
if(handler != null){ if(handler != null){
handler.uncaughtException(thread, error); handler.uncaughtException(thread, error);
}else{ }else{
error.printStackTrace();
Log.err(error); Log.err(error);
System.exit(1); System.exit(1);
} }

View File

@@ -117,7 +117,6 @@ public class AssetsProcess extends BaseProcessor{
void processSounds(String classname, String path, String rtype) throws Exception{ void processSounds(String classname, String path, String rtype) throws Exception{
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC); TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
HashSet<String> names = new HashSet<>(); HashSet<String> names = new HashSet<>();
@@ -137,8 +136,6 @@ public class AssetsProcess extends BaseProcessor{
String filename = "\"" + filepath + "\""; String filename = "\"" + filepath + "\"";
loadBegin.addStatement("arc.Core.assets.load(" + filename + ", " + rtype + ".class).loaded = a -> " + name + " = (" + rtype + ")a", filepath, filepath.replace(".ogg", ".mp3")); loadBegin.addStatement("arc.Core.assets.load(" + filename + ", " + rtype + ".class).loaded = a -> " + name + " = (" + rtype + ")a", filepath, filepath.replace(".ogg", ".mp3"));
dispose.addStatement("arc.Core.assets.unload(" + filename + ")");
dispose.addStatement(name + " = null");
type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio." + rtype.substring(rtype.lastIndexOf(".") + 1) + "()").build()); type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio." + rtype.substring(rtype.lastIndexOf(".") + 1) + "()").build());
}); });
@@ -147,7 +144,6 @@ public class AssetsProcess extends BaseProcessor{
} }
type.addMethod(loadBegin.build()); type.addMethod(loadBegin.build());
type.addMethod(dispose.build());
JavaFile.builder(packageName, type.build()).build().writeTo(BaseProcessor.filer); JavaFile.builder(packageName, type.build()).build().writeTo(BaseProcessor.filer);
} }

View File

@@ -26,7 +26,8 @@ public class LogicStatementProcessor extends BaseProcessor{
MethodSpec.Builder reader = MethodSpec.methodBuilder("read") MethodSpec.Builder reader = MethodSpec.methodBuilder("read")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC) .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(tname("mindustry.logic.LStatement")) .returns(tname("mindustry.logic.LStatement"))
.addParameter(String[].class, "tokens"); .addParameter(String[].class, "tokens")
.addParameter(int.class, "length");
Seq<Stype> types = types(RegisterStatement.class); Seq<Stype> types = types(RegisterStatement.class);
@@ -76,7 +77,7 @@ public class LogicStatementProcessor extends BaseProcessor{
""); "");
//reading primitives, strings and enums is supported; nothing else is //reading primitives, strings and enums is supported; nothing else is
reader.addStatement("if(tokens.length > $L) result.$L = $L(tokens[$L])", reader.addStatement("if(length > $L) result.$L = $L(tokens[$L])",
index + 1, index + 1,
field.name(), field.name(),
field.mirror().toString().equals("java.lang.String") ? field.mirror().toString().equals("java.lang.String") ?

View File

@@ -319,12 +319,27 @@ project(":core"){
} }
task sourcesJar(type: Jar, dependsOn: classes){ task sourcesJar(type: Jar, dependsOn: classes){
classifier = 'sources' archiveClassifier = 'sources'
from sourceSets.main.allSource from sourceSets.main.allSource
} }
task assetsJar(type: Jar, dependsOn: ":tools:pack"){
archiveClassifier = 'assets'
from files("assets"){
exclude "config", "cache", "music", "sounds"
}
}
task musicJar(type: Jar){
archiveClassifier = 'music'
from files("assets"){
include "music/*", "sounds/*"
}
}
artifacts{ artifacts{
archives sourcesJar archives sourcesJar
archives assetsJar
} }
dependencies{ dependencies{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

View File

@@ -620,6 +620,19 @@ sector.extractionOutpost.description = A remote outpost, constructed by the enem
sector.impact0078.description = Here lie remnants of the interstellar transport vessel that first entered this system.\n\nSalvage as much as possible from the wreckage. Research any intact technology. sector.impact0078.description = Here lie remnants of the interstellar transport vessel that first entered this system.\n\nSalvage as much as possible from the wreckage. Research any intact technology.
sector.planetaryTerminal.description = The final target.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure. sector.planetaryTerminal.description = The final target.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure.
status.burning.name = Burning
status.freezing.name = Freezing
status.wet.name = Wet
status.muddy.name = Muddy
status.melting.name = Melting
status.sapped.name = Sapped
status.spore-slowed.name = Spore Slowed
status.tarred.name = Tarred
status.overclock.name = Overclock
status.shocked.name = Shocked
status.blasted.name = Blasted
status.unmoving.name = Unmoving
settings.language = Language settings.language = Language
settings.data = Game Data settings.data = Game Data
settings.reset = Reset to Defaults settings.reset = Reset to Defaults
@@ -656,6 +669,7 @@ stat.output = Output
stat.booster = Booster stat.booster = Booster
stat.tiles = Required Tiles stat.tiles = Required Tiles
stat.affinities = Affinities stat.affinities = Affinities
stat.opposites = Opposites
stat.powercapacity = Power Capacity stat.powercapacity = Power Capacity
stat.powershot = Power/Shot stat.powershot = Power/Shot
stat.damage = Damage stat.damage = Damage
@@ -717,6 +731,12 @@ stat.abilities = Abilities
stat.canboost = Can Boost stat.canboost = Can Boost
stat.flying = Flying stat.flying = Flying
stat.ammouse = Ammo Use stat.ammouse = Ammo Use
stat.damagemultiplier = Damage Multiplier
stat.healthmultiplier = Health Multiplier
stat.speedmultiplier = Speed Multiplier
stat.reloadmultiplier = Reload Multiplier
stat.buildspeedmultiplier = Build Speed Multiplier
stat.reactive = Reacts
ability.forcefield = Force Field ability.forcefield = Force Field
ability.repairfield = Repair Field ability.repairfield = Repair Field
@@ -752,17 +772,14 @@ units.processorcontrol = [lightgray]Processor Controlled
bullet.damage = [stat]{0}[lightgray] damage bullet.damage = [stat]{0}[lightgray] damage
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary bullet.incendiary = [stat]incendiary
bullet.sapping = [stat]sapping
bullet.homing = [stat]homing bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag bullet.frag = [stat]frag
bullet.lightning = [stat]{0}[lightgray]x lightning ~[stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.buildingdamage = [stat]{0}%[lightgray] building damage
bullet.knockback = [stat]{0}[lightgray] knockback bullet.knockback = [stat]{0}[lightgray] knockback
bullet.pierce = [stat]{0}[lightgray]x pierce bullet.pierce = [stat]{0}[lightgray]x pierce
bullet.infinitepierce = [stat]pierce bullet.infinitepierce = [stat]pierce
bullet.healpercent = [stat]{0}[lightgray]% healing bullet.healpercent = [stat]{0}[lightgray]% healing
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x fire rate bullet.reload = [stat]{0}[lightgray]x fire rate
@@ -924,6 +941,7 @@ keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Minimap keybind.minimap.name = Minimap
keybind.planet_map.name = Planet Map keybind.planet_map.name = Planet Map
keybind.research.name = Research keybind.research.name = Research
keybind.block_info.name = Block Info
keybind.chat.name = Chat keybind.chat.name = Chat
keybind.player_list.name = Player List keybind.player_list.name = Player List
keybind.console.name = Console keybind.console.name = Console
@@ -992,6 +1010,7 @@ content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units
content.block.name = Blocks content.block.name = Blocks
content.status.name = Status Effects
content.sector.name = Sectors content.sector.name = Sectors
item.copper.name = Copper item.copper.name = Copper

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -126,6 +126,7 @@ mod.installed = [[Installiert]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Aktiviert mod.enabled = [lightgray]Aktiviert
mod.disabled = [scarlet]Deaktiviert mod.disabled = [scarlet]Deaktiviert
mod.multiplayer.compatible = [gray]Mehrspieler-kompatibel
mod.disable = Deaktivieren mod.disable = Deaktivieren
mod.content = Inhalt: mod.content = Inhalt:
mod.delete.error = Unfähig Mod zu löschen. Datei könnte in Benutzung sein. mod.delete.error = Unfähig Mod zu löschen. Datei könnte in Benutzung sein.
@@ -619,6 +620,19 @@ sector.extractionOutpost.description = Ein Außenposten, der vom Gegner erstellt
sector.impact0078.description = Hier liegen Reste der interplanetarischen Transporteinheit, die dieses Sonnensystem zuerst betreten hat.\n\nRette so viel wie möglich von den Ruinen. Erforsche jede intakte Technologie. sector.impact0078.description = Hier liegen Reste der interplanetarischen Transporteinheit, die dieses Sonnensystem zuerst betreten hat.\n\nRette so viel wie möglich von den Ruinen. Erforsche jede intakte Technologie.
sector.planetaryTerminal.description = Das Endziel.\n\nDiese Uferbasis besitzt ein Gerät, mit dem es möglich ist, Kerne auf andere Planeten zu schicken. Es ist [accent]sehr[] gut beschützt.\n\nStelle Wassereinheiten her. Eliminiere den Gegner so schnell wie möglich. Erforsche das Launchgerät. sector.planetaryTerminal.description = Das Endziel.\n\nDiese Uferbasis besitzt ein Gerät, mit dem es möglich ist, Kerne auf andere Planeten zu schicken. Es ist [accent]sehr[] gut beschützt.\n\nStelle Wassereinheiten her. Eliminiere den Gegner so schnell wie möglich. Erforsche das Launchgerät.
status.burning.name = Brennend
status.freezing.name = Frierend
status.wet.name = Nass
status.muddy.name = Schlammig
status.melting.name = Schmelzend
status.sapped.name = Schwächend
status.spore-slowed.name = Sporen-verlangsamt
status.tarred.name = Teerend
status.overclock.name = Übertaktend
status.shocked.name = Schockend
status.blasted.name = Sprengend
status.unmoving.name = Unbeweglich
settings.language = Sprache settings.language = Sprache
settings.data = Spieldaten settings.data = Spieldaten
settings.reset = Auf Standard zurücksetzen settings.reset = Auf Standard zurücksetzen
@@ -655,6 +669,7 @@ stat.output = Ausgang
stat.booster = Verstärkung stat.booster = Verstärkung
stat.tiles = Erforderte Untergründe stat.tiles = Erforderte Untergründe
stat.affinities = Affinitäten stat.affinities = Affinitäten
stat.opposites = Gegenteile
stat.powercapacity = Kapazität stat.powercapacity = Kapazität
stat.powershot = Stromverbrauch/Schuss stat.powershot = Stromverbrauch/Schuss
stat.damage = Schaden stat.damage = Schaden
@@ -716,6 +731,12 @@ stat.abilities = Fähigkeiten
stat.canboost = Kann boosten stat.canboost = Kann boosten
stat.flying = Flug stat.flying = Flug
stat.ammouse = Muntionsverbrauch stat.ammouse = Muntionsverbrauch
stat.damagemultiplier = Schaden-Multiplikator
stat.healthmultiplier = Lebenspunkte-Multiplikator
stat.speedmultiplier = Geschwindigkeit-Multiplikator
stat.reloadmultiplier = Nachlade-Multiplikator
stat.buildspeedmultiplier = Baugeschwindigkeit-Multiplikator
stat.reactive = Reagiert mit
ability.forcefield = Kraftfeld ability.forcefield = Kraftfeld
ability.repairfield = Heilungsfeld ability.repairfield = Heilungsfeld
@@ -752,16 +773,13 @@ bullet.damage = [stat]{0}[lightgray] Schaden
bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln bullet.splashdamage = [stat]{0}[lightgray] Flächenschaden ~[stat] {1}[lightgray] Kacheln
bullet.incendiary = [stat]entzündend bullet.incendiary = [stat]entzündend
bullet.homing = [stat]zielsuchend bullet.homing = [stat]zielsuchend
bullet.sapping = [stat]entzieht Lebenspunkte
bullet.shock = [stat]schockend
bullet.frag = [stat]explosiv bullet.frag = [stat]explosiv
bullet.lightning = [stat]{0}[lightgray]x Blitz ~[stat]{1}[lightgray] Schaden
bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden bullet.buildingdamage = [stat]{0}%[lightgray]Blockschaden
bullet.knockback = [stat]{0}[lightgray] zurückstoßend bullet.knockback = [stat]{0}[lightgray] zurückstoßend
bullet.pierce = [stat]{0}[lightgray]x Durchstechkraft bullet.pierce = [stat]{0}[lightgray]x Durchstechkraft
bullet.infinitepierce = [stat]Durchstechkraft bullet.infinitepierce = [stat]Durchstechkraft
bullet.freezing = [stat]frierend
bullet.healpercent = [stat]{0}[lightgray]% Heilung bullet.healpercent = [stat]{0}[lightgray]% Heilung
bullet.tarred = [stat]teerend
bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator
bullet.reload = [stat]{0}[lightgray]x Feuerrate bullet.reload = [stat]{0}[lightgray]x Feuerrate
@@ -923,6 +941,7 @@ keybind.pause_building.name = Pausieren/Fortsetzen des Bauens
keybind.minimap.name = Minimap keybind.minimap.name = Minimap
keybind.planet_map.name = Planetenkarte keybind.planet_map.name = Planetenkarte
keybind.research.name = Forschen keybind.research.name = Forschen
keybind.block_info.name = Blockinformationen anzeigen
keybind.chat.name = Chat keybind.chat.name = Chat
keybind.player_list.name = Spielerliste keybind.player_list.name = Spielerliste
keybind.console.name = Konsole keybind.console.name = Konsole
@@ -991,6 +1010,7 @@ content.item.name = Materialien
content.liquid.name = Flüssigkeiten content.liquid.name = Flüssigkeiten
content.unit.name = Einheiten content.unit.name = Einheiten
content.block.name = Blöcke content.block.name = Blöcke
content.status.name = Effekte
content.sector.name = Sektoren content.sector.name = Sektoren
item.copper.name = Kupfer item.copper.name = Kupfer
@@ -1459,7 +1479,7 @@ block.ripple.description = Schießt mehrere Schüsse gleichzeitig auf weit entfe
block.cyclone.description = Schießt explodierende Geschosse auf Gegner. block.cyclone.description = Schießt explodierende Geschosse auf Gegner.
block.spectre.description = Schießt große, panzerbrechende Kugeln auf Luft- und Bodenziele. block.spectre.description = Schießt große, panzerbrechende Kugeln auf Luft- und Bodenziele.
block.meltdown.description = Lädt sich auf und schießt einen starken, durchgängigen Laser auf Gegner. Braucht Kühlung. block.meltdown.description = Lädt sich auf und schießt einen starken, durchgängigen Laser auf Gegner. Braucht Kühlung.
block.foreshadow.description = Schießt einen einzigen Schuss mit einem einzigen Ziel über eine erstaunlich große Distanz. block.foreshadow.description = Schießt einen starken Schuss auf ein einziges Ziel über hohe Distanzen. Zielt auf Gegner mit den meisten Lebenspunkten.
block.repair-point.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung. block.repair-point.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung.
block.segment.description = Beschädigt und zerstört gegnerische Projektile. Laser werden nicht anvisiert. block.segment.description = Beschädigt und zerstört gegnerische Projektile. Laser werden nicht anvisiert.
block.parallax.description = Benutzt einen Traktorstrahl, um Gegner heranzuziehen und sie dabei anzugreifen. block.parallax.description = Benutzt einen Traktorstrahl, um Gegner heranzuziehen und sie dabei anzugreifen.

View File

@@ -7,23 +7,23 @@ link.reddit.description = Subreddit de Mindustry
link.github.description = Code source du jeu link.github.description = Code source du jeu
link.changelog.description = Liste des mises à jour link.changelog.description = Liste des mises à jour
link.dev-builds.description = Versions expérimentales du jeu link.dev-builds.description = Versions expérimentales du jeu
link.trello.description = Trello officiel pour les nouvelles fonctionalités planifiées link.trello.description = Trello officiel pour les nouvelles fonctionnalités planifiées
link.itch.io.description = Page itch.io avec les différentes versions du jeu. link.itch.io.description = Page itch.io avec les différentes versions du jeu.
link.google-play.description = Page Google Play du jeu link.google-play.description = Page Google Play du jeu
link.f-droid.description = Page F-Droid du jeu link.f-droid.description = Page F-Droid du jeu
link.wiki.description = Wiki officiel de Mindustry link.wiki.description = Wiki officiel de Mindustry
link.suggestions.description = Suggérez de nouvelles fonctionallités link.suggestions.description = Suggérez de nouvelles fonctionnalités
link.bug.description = Vous avez trouvé un bug ? Reportez le ici link.bug.description = Vous avez trouvé un bug ? Reportez le ici
linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier. linkfail = L'ouverture du lien a échouée ! \nL'URL a été copiée dans votre presse-papier.
screenshot = Capture d'écran sauvegardée dans {0} screenshot = Capture d'écran sauvegardée dans {0}
screenshot.invalid = Carte trop grande, potentiellement pas assez de mémoire pour la capture d'écran. screenshot.invalid = Carte trop grande, potentiellement pas assez de mémoire pour la capture d'écran.
gameover = Partie terminée gameover = Partie terminée
gameover.disconnect = Déconnecté gameover.disconnect = Déconnecter
gameover.pvp = L'équipe[accent] {0}[] a gagnée! gameover.pvp = L'équipe[accent] {0}[] a gagné !
gameover.waiting = [accent]Attente de la nouvelle carte... gameover.waiting = [accent]Attente de la nouvelle carte...
highscore = [accent]Nouveau meilleur score ! highscore = [accent]Nouveau meilleur score !
copied = Copié. copied = Copié.
indev.notready = Cette partie du jeu n'est pas encore prête indev.notready = Cette partie du jeu n'est pas encore prête.
indev.campaign = [accent]Félicitations! Vous avez atteint la fin de la campagne ![]\n\nC'est ici que le contenu actuel s'arrête. Le voyage interplanétaire sera ajouté dans de futures mises à jour. indev.campaign = [accent]Félicitations! Vous avez atteint la fin de la campagne ![]\n\nC'est ici que le contenu actuel s'arrête. Le voyage interplanétaire sera ajouté dans de futures mises à jour.
load.sound = Son load.sound = Son
@@ -35,16 +35,16 @@ load.mod = Mods
load.scripts = Scripts load.scripts = Scripts
be.update = Une nouvelle version expérimentale est disponible: be.update = Une nouvelle version expérimentale est disponible:
be.update.confirm = Télécharger et Redémarrer le jeu maintenenant? be.update.confirm = Télécharger et Redémarrer le jeu maintenant ?
be.updating = Mise à jour en cours... be.updating = Mise à jour en cours...
be.ignore = Ignorer be.ignore = Ignorer
be.noupdates = Aucune mise à jour trouvée. be.noupdates = Aucune mise à jour trouvée.
be.check = Chercher des mises à jour be.check = Chercher des mises à jour.
mods.browser = Navigateur de Mods mods.browser = Navigateur de Mods
mods.browser.selected = Mod sélectionné mods.browser.selected = Mod sélectionné
mods.browser.add = Installer mods.browser.add = Installer
mods.browser.reinstall = Reinstaller mods.browser.reinstall = Réinstaller
mods.github.open = Voir sur Github mods.github.open = Voir sur Github
mods.browser.sortdate = Classer par date mods.browser.sortdate = Classer par date
mods.browser.sortstars = Classer par étoiles mods.browser.sortstars = Classer par étoiles
@@ -63,12 +63,12 @@ schematic.copy.import = Importer depuis presse-papier
schematic.shareworkshop = Partager sur le Steam Workshop schematic.shareworkshop = Partager sur le Steam Workshop
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner le schéma schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner le schéma
schematic.saved = Schéma enregistré. schematic.saved = Schéma enregistré.
schematic.delete.confirm = Ce schéma sera supprimé définitivement. schematic.delete.confirm = Ce schéma sera supprimé définitivement !
schematic.rename = Renommer le Schéma schematic.rename = Renommer le Schéma
schematic.info = {0}x{1}, {2} blocs schematic.info = {0}x{1}, {2} blocs
schematic.disabled = [scarlet]Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]carte[] ou dans ce [accent]serveur. schematic.disabled = [scarlet]Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]carte[] ou dans ce [accent]serveur.
stats = Stats stats = Statistiques
stat.wave = Vagues vaincues : [accent] {0} stat.wave = Vagues vaincues : [accent] {0}
stat.enemiesDestroyed = Ennemis détruits : [accent] {0} stat.enemiesDestroyed = Ennemis détruits : [accent] {0}
stat.built = Bâtiments construits : [accent] {0} stat.built = Bâtiments construits : [accent] {0}
@@ -113,7 +113,7 @@ committingchanges = Validation des modifications
done = Fait done = Fait
feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité. feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité.
mods.alphainfo = Gardez à l'esprit que les mods sont en alpha et[scarlet] qu'ils peuvent être très buggés[].\nMerci de signaler les problèmes que vous rencontrez via le GitHub de Mindustry. mods.initfailed = [red]⚠[] L'instance précédente de Mindustry na pas pu sinitialiser. Cela a probablement été causé par des mods..\n\nPour éviter une boucle de crash, [red]tous les mods ont été désactivés.[]\n\nPour désactiver cette fonctionnalité, désactivez-la dans [accent]Paramètres->Jeu->Désactiver les mods lors d'un crash au démarrage[].
mods = Mods mods = Mods
mods.none = [lightgray]Aucun Mod trouvé ! mods.none = [lightgray]Aucun Mod trouvé !
mods.guide = Guide de Modding mods.guide = Guide de Modding
@@ -126,13 +126,14 @@ mod.installed = [[Installé]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Activé mod.enabled = [lightgray]Activé
mod.disabled = [scarlet]Désactivé mod.disabled = [scarlet]Désactivé
mod.multiplayer.compatible = [gray]Compatible en Multijoueur
mod.disable = Désactiver mod.disable = Désactiver
mod.content = Contenu : mod.content = Contenu :
mod.delete.error = Impossible de supprimer le mod. Le fichier est probablement en cours d'utilisation. mod.delete.error = Impossible de supprimer le mod. Le fichier est probablement en cours d'utilisation.
mod.requiresversion = [scarlet]Version minimale du jeu requise : [accent]{0} mod.requiresversion = [scarlet]Version minimale du jeu requise : [accent]{0}
mod.outdated = [scarlet]Non compatible avec la V6 (no minGameVersion: 105) mod.outdated = [scarlet]Non compatible avec la V6 (no minGameVersion: 105)
mod.missingdependencies = [scarlet]Dépendances manquantes : {0} mod.missingdependencies = [scarlet]Dépendances manquantes : {0}
mod.erroredcontent = [scarlet]Erreurs de contenu mod.erroredcontent = [scarlet]Erreurs de contenu !
mod.errors = Des erreurs se sont produites lors du chargement du contenu. mod.errors = Des erreurs se sont produites lors du chargement du contenu.
mod.noerrorplay = [scarlet]Vous avez des mods avec des erreurs.[] Désactivez les mods concernés ou corrigez les erreurs avant de jouer. mod.noerrorplay = [scarlet]Vous avez des mods avec des erreurs.[] Désactivez les mods concernés ou corrigez les erreurs avant de jouer.
mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes: [accent]{1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé. mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes: [accent]{1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé.
@@ -143,13 +144,13 @@ mod.import = Importer un mod
mod.import.file = Importer un fichier mod.import.file = Importer un fichier
mod.import.github = Importer un mod depuis GitHub mod.import.github = Importer un mod depuis GitHub
mod.jarwarn = [scarlet]Les mods JAR sont par nature peu sûrs.[]\nFaites en sorte d'importer ce mod depuis une source digne de confiance. mod.jarwarn = [scarlet]Les mods JAR sont par nature peu sûrs.[]\nFaites en sorte d'importer ce mod depuis une source digne de confiance.
mod.item.remove = Cet objet fait partie du mod[accent] '{0}'[]. Pour le supprimer, désinstallez le mod en question. mod.item.remove = Cet objet fait partie du mod[accent] '{0}'[]. Pour le supprimer, désinstaller le mod en question.
mod.remove.confirm = Ce mod sera supprimé. mod.remove.confirm = Ce mod sera supprimé.
mod.author = [lightgray]Auteur : [] {0} mod.author = [lightgray]Auteur : [] {0}
mod.missing = Cette sauvegarde contient des mods que vous avez récemment mis à jour ou que vous avez désinstallés. Votre sauvegarde risque d'être corrompue. Êtes-vous sûr de vouloir l'importer ?\n[lightgray]Mods:\n{0} mod.missing = Cette sauvegarde contient des mods que vous avez récemment mis à jour ou que vous avez désinstallés. Votre sauvegarde risque d'être corrompue. Êtes-vous sûr de vouloir l'importer ?\n[lightgray]Mods:\n{0}
mod.preview.missing = Avant de publier ce mod dans le Steam Workshop, vous devez ajouter une image servant d'aperçu.\nPlacez une image nommée [accent]preview.png[] dans le dossier du mod et réessayez. mod.preview.missing = Avant de publier ce mod dans le Steam Workshop, vous devez ajouter une image servant d'aperçu.\nPlacez une image nommée [accent]preview.png[] dans le dossier du mod et réessayez.
mod.folder.missing = Seuls les mods sous forme de dossiers peuvent être publiés sur le Steam Workshop.\nPour convertir n'importe quel mod en un dossier, décompressez-le tout simplement dans un dossier et supprimez l'ancien zip, puis redémarrez votre jeu ou rechargez vos mods. mod.folder.missing = Seuls les mods sous forme de dossiers peuvent être publiés sur le Steam Workshop.\nPour convertir n'importe quel mod en un dossier, décompressez-le tout simplement dans un dossier et supprimez l'ancien zip, puis redémarrez votre jeu ou rechargez vos mods.
mod.scripts.disable = Votre appareil ne prend pas an charge les mods avec des scripts. Vous devez désactiver ces mods pour pouvoir jouer. mod.scripts.disable = Votre appareil ne prend pas en charge les mods avec des scripts. Vous devez désactiver ces mods pour pouvoir jouer.
about.button = À propos about.button = À propos
name = Nom : name = Nom :
@@ -174,24 +175,24 @@ players.search = Recherche
players.notfound = [gray]Aucun joueur trouvé players.notfound = [gray]Aucun joueur trouvé
server.closing = [accent]Fermeture du serveur... server.closing = [accent]Fermeture du serveur...
server.kicked.kick = Vous avez été expulsé du serveur ! server.kicked.kick = Vous avez été expulsé du serveur !
server.kicked.whitelist = Vous n'êtes pas sur liste blanche ici. server.kicked.whitelist = Vous n'êtes pas sur liste blanche de ce serveur.
server.kicked.serverClose = Serveur fermé. server.kicked.serverClose = Serveur fermé !
server.kicked.vote = Vous avez été expulsé suite à un vote. Au revoir. server.kicked.vote = Vous avez été expulsé à la suite d'un vote. Au revoir !
server.kicked.clientOutdated = Client obsolète! Mettez votre jeu à jour! server.kicked.clientOutdated = Client obsolète !\nMettez votre jeu à jour !
server.kicked.serverOutdated = Serveur obsolète! Demandez à l'hôte de le mettre à jour! server.kicked.serverOutdated = Serveur obsolète !\nDemandez à l'hôte de le mettre à jour !
server.kicked.banned = Vous avez été banni de ce serveur. server.kicked.banned = Vous avez été banni de ce serveur !
server.kicked.typeMismatch = Ce serveur n'est pas compatible avec votre version du jeu. server.kicked.typeMismatch = Ce serveur n'est pas compatible avec votre version du jeu.
server.kicked.playerLimit = Ce serveur est complet. Attendez qu'une place se libère. server.kicked.playerLimit = Ce serveur est complet. Attendez qu'une place se libère.
server.kicked.recentKick = Vous avez été expulsé récemment.\nAttendez avant de vous reconnecter. server.kicked.recentKick = Vous avez été expulsé récemment.\nAttendez avant de vous reconnecter...
server.kicked.nameInUse = Il y a déjà quelqu'un avec\nce nom sur ce serveur. server.kicked.nameInUse = Il y a déjà quelqu'un avec\nce nom sur ce serveur.
server.kicked.nameEmpty = Votre nom est invalide. server.kicked.nameEmpty = Votre nom est invalide.
server.kicked.idInUse = Vous êtes déjà sur ce serveur! Se connecter avec deux comptes n'est pas permis! server.kicked.idInUse = Vous êtes déjà sur ce serveur !\nSe connecter avec deux comptes n'est pas permis !
server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Téléchargez une version officielle. server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Téléchargez une version officielle.
server.kicked.gameover = Partie terminée ! server.kicked.gameover = Partie terminée !
server.kicked.serverRestarting = Le serveur est en train de redémarrer. server.kicked.serverRestarting = Le serveur est en train de redémarrer...
server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[] server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[]
host.info = Le bouton [accent]héberger[] héberge un serveur sur le port [scarlet]6567[].\nN'importe qui sur le même [lightgray]réseau wifi ou local[] devrait pouvoir voir votre serveur dans sa liste de serveurs.\n\nSi vous voulez que les gens puissent se connecter de n'importe où grâce à l'IP, [accent]une ouverture des ports[] est requise.\n\n[lightgray]Note: Si quelqu'un éprouve des difficultés à se connecter à votre partie LAN, assurez-vous que vous avez autorisé Mindustry à accéder à votre réseau local dans les paramètres de votre pare-feu. host.info = Le bouton [accent]héberger[] héberge un serveur sur le port [scarlet]6567[].\nN'importe qui sur le même [lightgray]réseau wifi ou local[] devrait pouvoir voir votre serveur dans sa liste de serveurs.\n\nSi vous voulez que les gens puissent se connecter de n'importe où grâce à l'IP, [accent]une ouverture des ports[] est requise.\n\n[lightgray]Note: Si quelqu'un éprouve des difficultés à se connecter à votre partie LAN, assurez-vous que vous avez autorisé Mindustry à accéder à votre réseau local dans les paramètres de votre pare-feu.
join.info = Ici, vous pouvez entrer l'[accent]IP d'un serveur[] pour vous y connecter, ou découvrir les serveurs sur votre [accent]réseau local[] ou les serveurs [accent]globaux[].\nLes parties multijoueur LAN et WAN sont toutes deux supportées.\n\n[lightgray]Note: Si vous voulez vous connecter à un serveur par IP, vous devrez demander l'IP à l'hébergeur. Celle-ci peut-être trouvée en recherchant "Mon IP" sur un moteur de recherche depuis son appareil. join.info = Ici, vous pouvez entrer l'[accent]IP d'un serveur[] pour vous y connecter, ou découvrir les serveurs sur votre [accent]réseau local[] ou les serveurs [accent]globaux[].\nLes parties multijoueur LAN et WAN sont toutes deux supportées.\n\n[lightgray]Note: Si vous voulez vous connecter à un serveur par IP, vous devrez demander l'IP à l'hébergeur. Celle-ci peut-être trouvée en cherchant "Mon IP" sur un moteur de recherche depuis son appareil.
hostserver = Héberger une partie multijoueur hostserver = Héberger une partie multijoueur
invitefriends = Inviter des Amis invitefriends = Inviter des Amis
hostserver.mobile = Héberger\nune partie hostserver.mobile = Héberger\nune partie
@@ -208,7 +209,7 @@ servers.local = Serveurs locaux
servers.remote = Serveurs distants servers.remote = Serveurs distants
servers.global = Serveurs communautaires servers.global = Serveurs communautaires
servers.disclaimer = Les serveurs communautaires ne sont [accent]pas[] gérés, ni controllés par le développeur.\n\nCes serveurs peuvent contenir du contenu qui ne convient pas à tout les âges. servers.disclaimer = Les serveurs communautaires ne sont [accent]pas[] gérés, ni contrôlés par le développeur.\n\nCes serveurs peuvent contenir du contenu qui ne convient pas à tous les âges.
servers.showhidden = Montrer les serveurs cachés servers.showhidden = Montrer les serveurs cachés
server.shown = Visible server.shown = Visible
server.hidden = Caché server.hidden = Caché
@@ -219,6 +220,8 @@ trace.ip = IP: [accent]{0}
trace.id = ID Unique : [accent]{0} trace.id = ID Unique : [accent]{0}
trace.mobile = Client Mobile : [accent]{0} trace.mobile = Client Mobile : [accent]{0}
trace.modclient = Client personnalisé : [accent]{0} trace.modclient = Client personnalisé : [accent]{0}
trace.times.joined = Nombre de fois rejoint: [accent]{0}
trace.times.kicked = Nombre de kicks: [accent]{0}
invalidid = ID du client invalide ! Veuillez soumettre un rapport d'erreur. invalidid = ID du client invalide ! Veuillez soumettre un rapport d'erreur.
server.bans = Bans server.bans = Bans
server.bans.none = Aucun joueur banni trouvé ! server.bans.none = Aucun joueur banni trouvé !
@@ -240,7 +243,7 @@ confirmunadmin = Êtes-vous sûr de vouloir supprimer le statut d'administrateur
joingame.title = Rejoindre une partie joingame.title = Rejoindre une partie
joingame.ip = IP : joingame.ip = IP :
disconnect = Déconnecté. disconnect = Déconnecté.
disconnect.error = Un problème est survenu lors de la connection. disconnect.error = Un problème est survenu lors de la connexion.
disconnect.closed = Connection fermée. disconnect.closed = Connection fermée.
disconnect.timeout = Délai de connexion expiré. disconnect.timeout = Délai de connexion expiré.
disconnect.data = Les données du monde n'ont pas pu être chargées ! disconnect.data = Les données du monde n'ont pas pu être chargées !
@@ -331,11 +334,11 @@ saveimage = Sauvegarder l'image
unknown = Inconnu unknown = Inconnu
custom = Personnalisé custom = Personnalisé
builtin = Pré-fait builtin = Pré-fait
map.delete.confirm = Voulez-vous vraiment supprimer cette carte? Il n'y aura pas de retour en arrière! map.delete.confirm = Voulez-vous vraiment supprimer cette carte ?\nIl n'y aura pas de retour en arrière !
map.random = [accent]Carte aléatoire map.random = [accent]Carte aléatoire
map.nospawn = Cette carte ne possède pas de base pour que le joueur puisse apparaître! Ajouter un [accent]Noyau orange[] sur cette carte dans l'éditeur. map.nospawn = Cette carte ne possède pas de base pour que le joueur puisse apparaître !\nAjoutez un [accent]Noyau orange[] sur cette carte dans l'éditeur.
map.nospawn.pvp = Cette carte n'a pas de base ennemie pour qu'un joueur ennemi puisse y apparaître! Ajoutez au moins un Noyau[scarlet] non-orange[] dans l'éditeur. map.nospawn.pvp = Cette carte n'a pas de base ennemie pour qu'un joueur ennemi puisse y apparaître !\nAjoutez au moins un Noyau[scarlet] non-orange[] dans l'éditeur.
map.nospawn.attack = Cette carte n'a aucune base ennemie à attaquer! Veuillez ajouter un Noyau[scarlet] rouge[] sur cette carte dans l'éditeur. map.nospawn.attack = Cette carte n'a aucune base ennemie à attaquer !\nVeuillez ajouter [scarlet]un Noyau rouge[] sur cette carte dans l'éditeur.
map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide. map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide.
workshop.update = Mettre à jour workshop.update = Mettre à jour
workshop.error = Erreur lors de la récupération des détails du Steam Workshop: {0} workshop.error = Erreur lors de la récupération des détails du Steam Workshop: {0}
@@ -409,9 +412,9 @@ editor.resize = Redimensionner
editor.loadmap = Charger la carte editor.loadmap = Charger la carte
editor.savemap = Sauvegarder la carte editor.savemap = Sauvegarder la carte
editor.saved = Sauvegardé ! editor.saved = Sauvegardé !
editor.save.noname = Votre carte n'a pas de nom! Ajoutez un nom dans le menu 'Infos de la Carte' editor.save.noname = Votre carte n'a pas de nom !\nAjoutez un nom dans le menu 'Infos de la Carte'.
editor.save.overwrite = Votre carte écrase une carte de base du jeu! Choisissez un nom différent dans le menu 'Infos de la Carte'. editor.save.overwrite = Votre carte écrase une carte de base du jeu !\nChoisissez un nom différent dans le menu 'Infos de la Carte'.
editor.import.exists = [scarlet]Importation impossible :[] '{0}' est le nom d'une carte de base du jeu! editor.import.exists = [scarlet]Importation impossible :[] '{0}' est le nom d'une carte par défaut du jeu !
editor.import = Importer editor.import = Importer
editor.importmap = Importer une carte editor.importmap = Importer une carte
editor.importmap.description = Importer une carte déjà existante editor.importmap.description = Importer une carte déjà existante
@@ -430,29 +433,29 @@ editor.unsaved = [scarlet]Vous n'avez pas sauvegardé vos modifications![] Voule
editor.resizemap = Redimensionner\nla carte editor.resizemap = Redimensionner\nla carte
editor.mapname = Nom de la carte : editor.mapname = Nom de la carte :
editor.overwrite = [accent]Attention !\nCeci écrase une carte existante. editor.overwrite = [accent]Attention !\nCeci écrase une carte existante.
editor.overwrite.confirm = [scarlet]Attention![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir l'écraser? editor.overwrite.confirm = [scarlet]Attention ![]\nUne carte avec ce nom existe déjà. Êtes-vous sûr de vouloir l'écraser ?
editor.exists = Une carte avec ce nom existe déjà. editor.exists = Une carte avec ce nom existe déjà.
editor.selectmap = Sélectionnez une carte : editor.selectmap = Sélectionnez une carte :
toolmode.replace = Remplacer toolmode.replace = Remplacer
toolmode.replace.description = Dessine seulement sur les blocs solides. toolmode.replace.description = Dessine seulement\nsur les blocs solides.
toolmode.replaceall = Tout Remplacer toolmode.replaceall = Tout Remplacer
toolmode.replaceall.description = Remplace tous les blocs de la carte. toolmode.replaceall.description = Remplace tous les blocs\nde la carte.
toolmode.orthogonal = Orthogonal toolmode.orthogonal = Orthogonal
toolmode.orthogonal.description = Dessine seulement des lignes orthogonales. toolmode.orthogonal.description = Dessine seulement\ndes lignes orthogonales.
toolmode.square = Carré toolmode.square = Carré
toolmode.square.description = Pinceau carré. toolmode.square.description = Pinceau carré.
toolmode.eraseores = Effacer les minerais toolmode.eraseores = Effacer les minerais
toolmode.eraseores.description = Efface seulement les minerais. toolmode.eraseores.description = Efface seulement\nles minerais.
toolmode.fillteams = Remplir les équipes toolmode.fillteams = Remplir les équipes
toolmode.fillteams.description = Remplit les équipes au lieu des blocs. toolmode.fillteams.description = Remplit les équipes\nau lieu des blocs.
toolmode.drawteams = Dessiner les équipes toolmode.drawteams = Dessiner les équipes
toolmode.drawteams.description = Dessine les équipes au lieu de blocs. toolmode.drawteams.description = Change les équipes\nau lieu de blocs.
filters.empty = [lightgray]Aucun filtre! Ajoutez-en un avec les boutons ci-dessous. filters.empty = [lightgray]Aucun filtre !\nAjoutez-en un avec les boutons ci-dessous.
filter.distort = Déformation filter.distort = Déformation
filter.noise = Bruit filter.noise = Bruit
filter.enemyspawn = Zone d'apparition enemie filter.enemyspawn = Zone d'apparition ennemie
filter.spawnpath = Chemin vers la zone d'apparition filter.spawnpath = Chemin vers la zone d'apparition
filter.corespawn = Zone d'apparition du Noyau filter.corespawn = Zone d'apparition du Noyau
filter.median = Médian filter.median = Médian
@@ -472,7 +475,7 @@ filter.option.mag = Magnitude
filter.option.threshold = Seuil filter.option.threshold = Seuil
filter.option.circle-scale = Échelle circulaire filter.option.circle-scale = Échelle circulaire
filter.option.octaves = Octaves filter.option.octaves = Octaves
filter.option.falloff = Détachemment filter.option.falloff = Détachement
filter.option.angle = Angle filter.option.angle = Angle
filter.option.amount = Quantité filter.option.amount = Quantité
filter.option.block = Bloc filter.option.block = Bloc
@@ -549,7 +552,7 @@ weather.fog.name = Brouillard
sectors.unexplored = [lightgray]Inexploré sectors.unexplored = [lightgray]Inexploré
sectors.resources = Ressources : sectors.resources = Ressources :
sectors.production = Production : sectors.production = Production :
sectors.export = Exporté: sectors.export = Exporter :
sectors.time = Temps de jeu : sectors.time = Temps de jeu :
sectors.threat = Menace : sectors.threat = Menace :
sectors.wave = Vague : sectors.wave = Vague :
@@ -566,7 +569,7 @@ sectors.survives = [accent]Survécu à {0} vagues
sectors.go = Aller sectors.go = Aller
sector.curcapture = Secteur capturé sector.curcapture = Secteur capturé
sector.curlost = Secteur perdu sector.curlost = Secteur perdu
sector.missingresources = [scarlet]Ressources du Noyau insuffisantes sector.missingresources = [scarlet]Ressources du Noyau insuffisantes !
sector.attacked = Secteur [accent]{0}[white] attaqué ! sector.attacked = Secteur [accent]{0}[white] attaqué !
sector.lost = Secteur [accent]{0}[white] perdu ! sector.lost = Secteur [accent]{0}[white] perdu !
#note: the missing space in the line below is intentional #note: the missing space in the line below is intentional
@@ -601,22 +604,35 @@ sector.extractionOutpost.name = Extraction Outpost
sector.planetaryTerminal.name = Planetary Launch Terminal sector.planetaryTerminal.name = Planetary Launch Terminal
sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration. sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration.
sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprennez à utiliser les bâtiments de soin. sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprenez à utiliser les bâtiments de soin.
sector.saltFlats.description = À la périphérie du désert se trouvent les déserts de sel. Peu de ressources s'y trouvent.\n\nLà-bas, l'ennemi a construit un complexe de stockage de ressource. Détruisez leur Noyau et ne laissez rien debout. sector.saltFlats.description = À la périphérie du désert se trouvent les déserts de sel. Peu de ressources s'y trouvent.\n\nLà-bas, l'ennemi a construit un complexe de stockage de ressource. Détruisez leur Noyau et ne laissez rien debout.
sector.craters.description = Ce cratère est une relique d'anciennes guerres. De l'eau s'est accumulée au fond. Prenez le contrôle de la zone.\nCollectez du Sable et faites fondre du Verre trempé. Pompez de l'eau pour refroidir vos tourelles et vos foreuses. sector.craters.description = Ce cratère est une relique d'anciennes guerres. De l'eau s'est accumulée au fond. Prenez le contrôle de la zone.\nCollectez du Sable et faites fondre du Verre trempé. Pompez de l'eau pour refroidir vos tourelles et vos foreuses.
sector.ruinousShores.description = Au-delà des déchets, se trouve le littoral. Autrefois, cet endroit abritait un réseau de défense côtière, mais il nen reste pas grand-chose. Seules quelques structures de défense basiques sont restées intactes, tout le reste a été réduit en ferraille.\nContinuez votre exploration en redécouvrant la technologie. sector.ruinousShores.description = Au-delà des déchets, se trouve le littoral. Autrefois, cet endroit abritait un réseau de défense côtière, mais il nen reste pas grand-chose. Seules quelques structures de défense basiques sont restées intactes, tout le reste a été réduit en ferraille.\nContinuez votre exploration en redécouvrant la technologie.
sector.stainedMountains.description = Plus loin, à lintérieur des terres, se trouvent des montagnes qui n'ont pas touchées par les spores.\nExploitez le Titane présent en abondance dans cette zone et apprenez comment l'utiliser.\n\nLa présence ennemie est bien plus grande ici. Ne leur donnez pas le temps denvoyer leurs unités les plus fortes. sector.stainedMountains.description = Plus loin, à lintérieur des terres, se trouvent des montagnes qui n'ont pas touchées par les spores.\nExploitez le Titane présent en abondance dans cette zone et apprenez comment l'utiliser.\n\nLa présence ennemie est bien plus grande ici. Ne leur donnez pas le temps denvoyer leurs unités les plus fortes.
sector.overgrowth.description = Étant plus proche de la source des spores, cette zone a été complètement envahie.\nL'ennemi y a établi un avant-poste. Formez des Titans et détruisez-le. sector.overgrowth.description = Étant plus proche de la source des spores, cette zone a été complètement envahie.\nL'ennemi y a établi un avant-poste. Formez des Titans et détruisez-le.
sector.tarFields.description = La périphérie dune zone de production de pétrole, situé entre les montagnes et le désert. Lune des rares avec des réserves de goudron utilisables.\nBien quabandonnée, quelques forces ennemies dangereuses se trouvent à proximité. Ne les sous-estimez pas!\n\n[lightgray]Recherchez la technologie de traitement de pétrole si possible. sector.tarFields.description = La périphérie dune zone de production de pétrole, située entre les montagnes et le désert. Lune des rares avec des réserves de goudron utilisables.\nBien que abandonnée, quelques forces ennemies dangereuses se trouvent à proximité. Ne les sous-estimez pas!\n\n[lightgray]Recherchez la technologie de traitement de pétrole si possible.
sector.desolateRift.description = Une zone extrêmement dangereuse. Des ressources abondantes, mais peu despace. Un risque élevé de destruction donc partez dès que possible! Ne vous laissez surtout pas berner par le long temps d'attente entre les vagues ennemies. Vous risquerez de le regretter. sector.desolateRift.description = Une zone extrêmement dangereuse. Des ressources abondantes, mais peu despace. Un risque élevé de destruction donc partez dès que possible! Ne vous laissez surtout pas berner par le long temps d'attente entre les vagues ennemies. Vous risquez de le regretter.
sector.nuclearComplex.description = Une ancienne installation de production et de traitement de thorium, réduite en ruines.\n[lightgray]Faites des recherches sur ce minerai et ses nombreuses utilisations.\n\nLennemi est présent ici en grand nombre, recherchant constamment des attaquants. sector.nuclearComplex.description = Une ancienne installation de production et de traitement de thorium, réduite en ruines.\n[lightgray]Faites des recherches sur ce minerai et ses nombreuses utilisations.\n\nLennemi est présent ici en grand nombre, recherchant constamment des attaquants.
sector.fungalPass.description = Une zone de transition entre les hautes montagnes et les terres plus basses, infestées de spores. Une petite base de reconnaissance ennemie se trouve ici.\nDétruisez les 2 Noyaux ennemis en utilisant des Poingnards et des Rampeurs. sector.fungalPass.description = Une zone de transition entre les hautes montagnes et les terres plus basses, infestées de spores. Une petite base de reconnaissance ennemie se trouve ici.\nDétruisez les 2 Noyaux ennemis en utilisant des Poignards et des Rampeurs.
sector.biomassFacility.description = Lorigine des spores. Il sagit de linstallation dans laquelle elles ont été étudiées et initialement produites.\nRecherchez la technologie présente sur les lieux et cultivez des spores pour la production de carburant et de plastique.\n\n[lightgray]Lors de la destruction de cette installation, les spores ont été libérées. Rien dans lécosystème local ne pouvait concurrencer un organisme aussi envahissant. sector.biomassFacility.description = Lorigine des spores. Il sagit de linstallation dans laquelle elles ont été étudiées et initialement produites.\nRecherchez la technologie présente sur les lieux et cultivez des spores pour la production de carburant et de plastique.\n\n[lightgray]Lors de la destruction de cette installation, les spores ont été libérées. Rien dans lécosystème local ne pouvait concurrencer un organisme aussi envahissant.
sector.windsweptIslands.description = Au delà du rivage se trouve cette chaîne dîles reculées. Les registres montrent quil y avait autrefois des usines de [accent]Plastanium[].\n\nDéfendez-vous contre les unités navales ennemies, établissez-y une base et faites des recherches sur ces usines. sector.windsweptIslands.description = Au delà du rivage se trouve cette chaîne dîles reculées. Les registres montrent quil y avait autrefois des usines de [accent]Plastanium[].\n\nDéfendez-vous contre les unités navales ennemies, établissez-y une base et faites des recherches sur ces usines.
sector.extractionOutpost.description = Un avant-poste éloigné, construit par lennemi dans le but de transférer des ressources vers dautres secteurs.\n\nCette technologie de transport inter-secteur est essentielle pour de nouvelles conquêtes. Détruisez la base et recherchez leurs Rampes de lancement. sector.extractionOutpost.description = Un avant-poste éloigné, construit par lennemi dans le but de transférer des ressources vers dautres secteurs.\n\nCette technologie de transport inter-secteur est essentielle pour de nouvelles conquêtes. Détruisez la base et recherchez leurs Rampes de lancement.
sector.impact0078.description = Ici reposent les vestiges d'un vaisseau de transport interstellaire, premier à être rentré dans ce système.\n\nRécuperez et recherchez autant de technologies que possible dans cette épave. sector.impact0078.description = Ici reposent les vestiges d'un vaisseau de transport interstellaire, premier à être entré dans ce système.\n\nRécuperez et recherchez autant de technologies que possible dans cette épave.
sector.planetaryTerminal.description = La cible finale.\n\nCette base côtière contient une structure capable de lancer des Noyaux sur les planètes voisines. Elle est extrêmement bien gardée.\n\nProduisez des unités navales, éliminez lennemi le plus rapidement possible et recherchez la structure de lancement. sector.planetaryTerminal.description = La cible finale.\n\nCette base côtière contient une structure capable de lancer des Noyaux sur les planètes voisines. Elle est extrêmement bien gardée.\n\nProduisez des unités navales, éliminez lennemi le plus rapidement possible et recherchez la structure de lancement.
status.burning.name = Brûle
status.freezing.name = Gelé
status.wet.name = Humide
status.muddy.name = Boueux
status.melting.name = Fusion
status.sapped.name = Sapé
status.spore-slowed.name = Spore ralentie
status.tarred.name = Goudronné
status.overclock.name = Overclocker
status.shocked.name = Étourdie
status.blasted.name = Foudroyé
status.unmoving.name = Immobile
settings.language = Language settings.language = Language
settings.data = Données du Jeu settings.data = Données du Jeu
settings.reset = Valeurs par Défaut settings.reset = Valeurs par Défaut
@@ -653,6 +669,7 @@ stat.output = Ressource(s) produite(s)
stat.booster = Boosteur stat.booster = Boosteur
stat.tiles = Sol requis stat.tiles = Sol requis
stat.affinities = Affinités stat.affinities = Affinités
stat.opposites = Opposés
stat.powercapacity = Capacité d'énergie stat.powercapacity = Capacité d'énergie
stat.powershot = Unités d'énergie/Tir stat.powershot = Unités d'énergie/Tir
stat.damage = Dégâts stat.damage = Dégâts
@@ -669,7 +686,7 @@ stat.linkrange = Portée des liens
stat.instructions = Instructions stat.instructions = Instructions
stat.powerconnections = Nombre maximal de connections stat.powerconnections = Nombre maximal de connections
stat.poweruse = Énergie utilisée stat.poweruse = Énergie utilisée
stat.powerdamage = Unités d'énergie/Dégat stat.powerdamage = Unités d'énergie/Dégât
stat.itemcapacity = Stockage stat.itemcapacity = Stockage
stat.memorycapacity = Mémoire stat.memorycapacity = Mémoire
stat.basepowergeneration = Production d'énergie de Base stat.basepowergeneration = Production d'énergie de Base
@@ -697,7 +714,7 @@ stat.cooldowntime = Temps de refroidissement
stat.explosiveness = Explosivité stat.explosiveness = Explosivité
stat.basedeflectchance = Chance de Détournement de Base stat.basedeflectchance = Chance de Détournement de Base
stat.lightningchance = Chance d'Éclairs stat.lightningchance = Chance d'Éclairs
stat.lightningdamage = Dégats des Éclairs stat.lightningdamage = Dégâts des Éclairs
stat.flammability = Inflammabilité stat.flammability = Inflammabilité
stat.radioactivity = Radioactivité stat.radioactivity = Radioactivité
stat.charge = Charge stat.charge = Charge
@@ -714,12 +731,18 @@ stat.abilities = Abilités
stat.canboost = Boost stat.canboost = Boost
stat.flying = Unité volante stat.flying = Unité volante
stat.ammouse = Utilisation de munitions stat.ammouse = Utilisation de munitions
stat.damagemultiplier = Multiplicateur de dégâts
stat.healthmultiplier = Multiplicateur de santé
stat.speedmultiplier = Multiplicateur de vitesse
stat.reloadmultiplier = Multiplicateur de rechargement
stat.buildspeedmultiplier = Multiplicateur de vitesse de construction
stat.reactive = Reacts
ability.forcefield = Champ de Force ability.forcefield = Champ de Force
ability.repairfield = Champ de Réparation ability.repairfield = Champ de Réparation
ability.statusfield = Champ d'Amélioration ability.statusfield = Champ d'Amélioration
ability.unitspawn = Usine de {0} ability.unitspawn = Usine de {0}
ability.shieldregenfield = Champ de regénération de bouclier ability.shieldregenfield = Champ de régénération de bouclier
ability.movelightning = Déplacement éclair ability.movelightning = Déplacement éclair
bar.drilltierreq = Meilleure Foreuse Requise bar.drilltierreq = Meilleure Foreuse Requise
@@ -744,22 +767,19 @@ bar.progress = Construction en cours
bar.input = Entrée bar.input = Entrée
bar.output = Sortie bar.output = Sortie
units.processorcontrol = [lightgray]Contrôlé par un processeur units.processorcontrol = [lightgray]Contrôlé par un processeur.
bullet.damage = [stat]{0}[lightgray] dégâts bullet.damage = [stat]{0}[lightgray] dégâts
bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgray] blocs bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgray] blocs
bullet.incendiary = [stat]incendiaire bullet.incendiary = [stat]incendiaire
bullet.sapping = [stat]vol de vie
bullet.homing = [stat]autoguidé bullet.homing = [stat]autoguidé
bullet.shock = [stat]choc électrique
bullet.frag = [stat]fragmentation bullet.frag = [stat]fragmentation
bullet.lightning = [stat]{0}[lightgray]x lightning ~[stat]{1}[lightgray] damage
bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments
bullet.knockback = [stat]{0}[lightgray] recul bullet.knockback = [stat]{0}[lightgray] recul
bullet.pierce = [stat]{0}[lightgray]x perforant bullet.pierce = [stat]{0}[lightgray]x perforant
bullet.infinitepierce = [stat]perforant bullet.infinitepierce = [stat]perforant
bullet.healpercent = [stat]{0}[lightgray]% soins bullet.healpercent = [stat]{0}[lightgray]% soins
bullet.freezing = [stat]gel
bullet.tarred = [stat]goudronné
bullet.multiplier = [stat]{0}[lightgray]x multiplicateur de munitions bullet.multiplier = [stat]{0}[lightgray]x multiplicateur de munitions
bullet.reload = [stat]{0}[lightgray]x vitesse de tir bullet.reload = [stat]{0}[lightgray]x vitesse de tir
@@ -800,6 +820,8 @@ setting.logichints.name = Astuces pour les commandes des processeurs
setting.flow.name = Afficher le Débit des ressources setting.flow.name = Afficher le Débit des ressources
setting.backgroundpause.name = Pause en Arrière-plan setting.backgroundpause.name = Pause en Arrière-plan
setting.buildautopause.name = Confirmation avant construction setting.buildautopause.name = Confirmation avant construction
setting.doubletapmine.name = Double-clic pour Miner
setting.modcrashdisable.name = Désactiver les mods lors d'un crash au démarrage
setting.animatedwater.name = Surfaces Animées setting.animatedwater.name = Surfaces Animées
setting.animatedshields.name = Boucliers Animés setting.animatedshields.name = Boucliers Animés
setting.antialias.name = Anticrénelage[lightgray] (redémarrage du jeu nécessaire)[] setting.antialias.name = Anticrénelage[lightgray] (redémarrage du jeu nécessaire)[]
@@ -919,6 +941,7 @@ keybind.pause_building.name = Pauser/Reprendre la Construction
keybind.minimap.name = Mini-carte keybind.minimap.name = Mini-carte
keybind.planet_map.name = Carte de la Planète keybind.planet_map.name = Carte de la Planète
keybind.research.name = Recherche keybind.research.name = Recherche
keybind.block_info.name = Bloc information
keybind.chat.name = Tchat keybind.chat.name = Tchat
keybind.player_list.name = Liste des joueurs keybind.player_list.name = Liste des joueurs
keybind.console.name = Console keybind.console.name = Console
@@ -968,7 +991,7 @@ rules.waitForWaveToEnd = Les Vagues attendent la mort des ennemis
rules.dropzoneradius = Rayon d'Apparition des ennemis :[lightgray] (tuiles) rules.dropzoneradius = Rayon d'Apparition des ennemis :[lightgray] (tuiles)
rules.unitammo = Les Unités nécessitent des munitions rules.unitammo = Les Unités nécessitent des munitions
rules.title.waves = Vagues rules.title.waves = Vagues
rules.title.resourcesbuilding = Ressources & Construction rules.title.resourcesbuilding = Resources & Construction
rules.title.enemy = Ennemis rules.title.enemy = Ennemis
rules.title.unit = Unités rules.title.unit = Unités
rules.title.experimental = Expérimental rules.title.experimental = Expérimental
@@ -987,6 +1010,7 @@ content.item.name = Objets
content.liquid.name = Liquides content.liquid.name = Liquides
content.unit.name = Unités content.unit.name = Unités
content.block.name = Blocs content.block.name = Blocs
content.status.name = Effet
content.sector.name = Secteurs content.sector.name = Secteurs
item.copper.name = Cuivre item.copper.name = Cuivre
@@ -999,7 +1023,7 @@ item.silicon.name = Silicium
item.plastanium.name = Plastanium item.plastanium.name = Plastanium
item.phase-fabric.name = Tissu Phasé item.phase-fabric.name = Tissu Phasé
item.surge-alloy.name = Alliage Superchargé item.surge-alloy.name = Alliage Superchargé
item.spore-pod.name = Bulbe Sporifère item.spore-pod.name = Spore
item.sand.name = Sable item.sand.name = Sable
item.blast-compound.name = Mélange Explosif item.blast-compound.name = Mélange Explosif
item.pyratite.name = Pyratite item.pyratite.name = Pyratite
@@ -1141,7 +1165,7 @@ block.duo.name = Duo
block.scorch.name = Brûleur block.scorch.name = Brûleur
block.scatter.name = Disperseur block.scatter.name = Disperseur
block.hail.name = Grêle block.hail.name = Grêle
block.lancer.name = Perforateur block.lancer.name = Lancier
block.conveyor.name = Convoyeur block.conveyor.name = Convoyeur
block.titanium-conveyor.name = Convoyeur en Titane block.titanium-conveyor.name = Convoyeur en Titane
block.plastanium-conveyor.name = Convoyeur en Plastanium block.plastanium-conveyor.name = Convoyeur en Plastanium
@@ -1229,7 +1253,7 @@ block.force-projector.name = Projecteur de Champ de force
block.arc.name = Arc block.arc.name = Arc
block.rtg-generator.name = G.T.R block.rtg-generator.name = G.T.R
block.spectre.name = Spectre block.spectre.name = Spectre
block.meltdown.name = Meltdown block.meltdown.name = Fusion
block.foreshadow.name = Présage block.foreshadow.name = Présage
block.container.name = Conteneur block.container.name = Conteneur
block.launch-pad.name = Rampe de lancement block.launch-pad.name = Rampe de lancement
@@ -1267,49 +1291,49 @@ team.blue.name = bleu
team.crux.name = rouge team.crux.name = rouge
team.sharded.name = orange team.sharded.name = orange
team.orange.name = orange team.orange.name = orange
team.derelict.name = derelict team.derelict.name = abandonné
team.green.name = vert team.green.name = vert
team.purple.name = mauve team.purple.name = mauve
hint.skip = Passer hint.skip = Passer
hint.desktopMove = Utilisez [accent][[ZQSD][] pour bouger. hint.desktopMove = Utilisez [accent][[ZQSD][] pour bouger.
hint.zoom = [accent]Scroller[] pour zoomer et dézoomer. hint.zoom = [accent]Scroller[] pour zoomer et dézoomer.
hint.mine = Bougez vers le \uf8c4 minerai de cuivre et [accent]cliquez[] dessus mour le miner manuellement. hint.mine = Bougez vers le \uf8c4 minerai de cuivre et [accent]cliquez[] dessus pour le miner manuellement.
hint.desktopShoot = [accent][[Clic-gauche][] pour tirer. hint.desktopShoot = [accent][[Clic-gauche][] pour tirer.
hint.depositItems = Pour déposer des ressources dans le Noyau, déplacez-les depuis votre vaisseau, vers ce dernier. hint.depositItems = Pour déposer des ressources dans le Noyau, déplacez-les depuis votre vaisseau, vers ce dernier.
hint.respawn = Pour réapparaître en tant que vaisseau, presser [accent][[V][]. hint.respawn = Pour réapparaître en tant que vaisseau, presser [accent][[V][].
hint.respawn.mobile = Vous avez pris le contrôle d'une unité/structure. Pour réapparaître en tant que vaisseau, [accent]touchez l'avatar en haut à gauche.[] hint.respawn.mobile = Vous avez pris le contrôle d'une unité/structure. Pour réapparaître en tant que vaisseau, [accent]touchez l'avatar en haut à gauche.[]
hint.desktopPause = Pressez [accent][[Espace][] pour pauser et reprendre le jeu. hint.desktopPause = Pressez [accent][[Espace][] pour mettre en pause et reprendre le jeu.
hint.placeDrill = Sélectionnez l'onglet \ue85e [accent]Foreuses[] dans le menu en bas à droite, sélectionnez une \uf870 [accent]Foreuse[] et cliquez sur un filon de cuivre pour la placer. hint.placeDrill = Sélectionnez l'onglet \ue85e [accent]Foreuses[] dans le menu en bas à droite, sélectionnez une \uf870 [accent]Foreuse[] et cliquez sur un filon de cuivre pour la placer.
hint.placeDrill.mobile = Sélectionnez l'onglet \ue85e [accent]Foreuses[] dans le menu en bas à droite, sélectionnez une \uf870 [accent]Foreuse Méchanique[] et touchez un filon de cuivre pour la placer.\n\nPressez le \ue800 [accent]V[] en bas à droite pour confirmer. hint.placeDrill.mobile = Sélectionnez l'onglet \ue85e [accent]Foreuses[] dans le menu en bas à droite, sélectionnez une \uf870 [accent]Foreuse Méchanique[] et touchez un filon de cuivre pour la placer.\n\nPressez le \ue800 [accent]V[] en bas à droite pour confirmer.
hint.placeConveyor = Les Convoyeurs transportent les ressources des foreuses, vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nCliquez et maintenez pour placer plusieurs convoyeurs.\n[accent]Scrollez[] pour les faire pivoter. hint.placeConveyor = Les Convoyeurs transportent les ressources des foreuses vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nCliquez et maintenez pour placer plusieurs convoyeurs.\n[accent]Scrollez[] pour les faire pivoter.
hint.placeConveyor.mobile = Les Convoyeurs transportent les ressources des foreuses, vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nMaintenez votre doigt et déplacez-le pour placer plusieurs convoyeurs. hint.placeConveyor.mobile = Les Convoyeurs transportent les ressources des foreuses vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nMaintenez votre doigt et déplacez-le pour placer plusieurs convoyeurs.
hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler. hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler.
hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs. hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs.
hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection. hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection.
hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies. hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies.
hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies. hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies.
hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] Pour contrôler une tourelle ou une unité alliée. hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] Pour contrôler une tourelle ou une unité alliée.
hint.unitControl.mobile = [accent][[Tapez][] 2 fois une tourelle ou une unité alliée pour la controler. hint.unitControl.mobile = [accent][[Tapez][] 2 fois une tourelle ou une unité alliée pour la contrôler.
hint.launch = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] en bas à droite. hint.launch = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] en bas à droite.
hint.launch.mobile = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] dans le \ue88c [accent]Menu[]. hint.launch.mobile = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] dans le \ue88c [accent]Menu[].
hint.schematicSelect = Retenez [accent][[F][] pour sélectionner des blocs dans une zone afin de les copier et les coller.\n\n[accent][[Clic du milieu][] pour copier un seule type de bloc. hint.schematicSelect = Retenez [accent][[F][] pour sélectionner des blocs dans une zone afin de les copier et les coller.\n\n[accent][[Clic du milieu][] pour copier un seul type de bloc.
hint.conveyorPathfind = Retenez [accent][[Ctrl-gauche][] pendant que vous placez des convoyeurs, afin de générer un chemin automatiquement. hint.conveyorPathfind = Retenez [accent][[Ctrl-gauche][] pendant que vous placez des convoyeurs, afin de générer un chemin automatiquement.
hint.conveyorPathfind.mobile = Activez le mode \ue844 [accent]Diagonale[] et déplacez des convoyeurs, afin de générer un chemin automatiquement. hint.conveyorPathfind.mobile = Activez le mode \ue844 [accent]Diagonale[] et déplacez des convoyeurs, afin de générer un chemin automatiquement.
hint.boost = Retenez [accent][[Maj-gauche][] pour voler au-dessus des obstacles avec votre unité actuelle.\n\nSeules quelques unités terrestres peuvent voler. hint.boost = Retenez [accent][[Maj-gauche][] pour voler au-dessus des obstacles avec votre unité actuelle.\n\nSeules quelques unités terrestres peuvent voler.
hint.command = Pressez [accent][[G][] pour commander les unités proches d'un [accent]type similaire[] et bouger en formation.\n\nSeules les unités terrestres peuvent controller d'autres unités terrestres. hint.command = Pressez [accent][[G][] pour commander les unités proches d'un [accent]type similaire[] et bouger en formation.\n\nSeules les unités terrestres peuvent contrôler d'autres unités terrestres.
hint.command.mobile = [accent][[Tapez][] 2 fois votre unité pour commander les unités proches d'un [accent]type similaire[] et bouger en formation. hint.command.mobile = [accent][[Tapez][] 2 fois votre unité pour commander les unités proches d'un [accent]type similaire[] et bouger en formation.
hint.payloadPickup = Pressez [accent][[[] pour transporter des blocs ou des unités. hint.payloadPickup = Pressez [accent][[[] pour transporter des blocs ou des unités.
hint.payloadPickup.mobile = [accent]Tapez et retenez[] votre doigt pour transporter des blocs ou des unités. hint.payloadPickup.mobile = [accent]Tapez et retenez[] votre doigt pour transporter des blocs ou des unités.
hint.payloadDrop = Pressez [accent]][] pour larguer votre chargement. hint.payloadDrop = Pressez [accent]][] pour larguer votre chargement.
hint.payloadDrop.mobile = [accent]Tapez et retenez[] votre doigt pour larguer votre chargement. hint.payloadDrop.mobile = [accent]Tapez et retenez[] votre doigt pour larguer votre chargement.
hint.waveFire = [accent]Les tourelles à liquides[] approvisionnées en eau en tant que munition, vont automatiquement éteindre les incendies proches. hint.waveFire = [accent]Les tourelles à liquides[] approvisionnées en eau en tant que munitions, vont automatiquement éteindre les incendies proches.
hint.generator = \uf879 Les [accent]Générateurs à combustion[] brûlent du Charbon et transmettent de l'énergie aux blocs adjacents.\n\nLa transmission d'énergie peut être étendue avec des \uf87f [accent]Transmetteurs Énergétiques[]. hint.generator = \uf879 Les [accent]Générateurs à combustion[] brûlent du Charbon et transmettent de l'énergie aux blocs adjacents.\n\nLa transmission d'énergie peut être étendue avec des \uf87f [accent]Transmetteurs Énergétiques[].
hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien. hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien.
hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un  Noyau [accent]Fondation[] sur le  Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction. hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un  Noyau [accent]Fondation[] sur le  Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction.
hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[]. hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[].
hint.coreIncinerate = Lorsqu'un Noyau est remplit d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[]. hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[].
hint.coopCampaign = Quand vous jouez en [accent]campagne multi-joueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées. hint.coopCampaign = Quand vous jouez en [accent]campagne multijoueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées.
item.copper.description = Le matériau structurel de base. Utilisation très répandue dans tous les types de blocs et en tant que munition. item.copper.description = Le matériau structurel de base. Utilisation très répandue dans tous les types de blocs et en tant que munition.
item.copper.details = Le cuivre est un matériau anormalement abondant sur Serpulo. Il est structurellement faible à moins d'être renforcé. item.copper.details = Le cuivre est un matériau anormalement abondant sur Serpulo. Il est structurellement faible à moins d'être renforcé.
@@ -1322,14 +1346,14 @@ item.coal.description = Un carburant commun et facile à obtenir.
item.coal.details = De la matière végétale fossilisée, formée bien avant lensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources. item.coal.details = De la matière végétale fossilisée, formée bien avant lensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources.
item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans l'aviation. item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans l'aviation.
item.thorium.description = Un métal dense et radioactif, utilisé comme support structurel et comme carburant nucléaire. item.thorium.description = Un métal dense et radioactif, utilisé comme support structurel et comme carburant nucléaire.
item.scrap.description = Il est utilisé dans les fours à fusion et les pulvériseurs, pour être raffiné en d'autres matériauxs. item.scrap.description = Il est utilisé dans les fours à fusion et les pulvériseurs, pour être raffiné en d'autres matériaux.
item.scrap.details = Un mix de métaux provenant des restes de vieilles structures et d'unités. Contient des traces de nombreux métaux différents. item.scrap.details = Un mix de métaux provenant des restes de vieilles structures et d'unités. Il contient des traces de nombreux métaux différents.
item.silicon.description = Un matériau semi-conducteur extrêmement pratique utilisé dans les panneaux solaires, dans les munitions autoguidées et dans beaucoup d'autres composants électroniques complexes. item.silicon.description = Un matériau semi-conducteur extrêmement pratique utilisé dans les panneaux solaires, dans les munitions autoguidées et dans beaucoup d'autres composants électroniques complexes.
item.plastanium.description = Un matériau léger et ductile, utilisé dans l'isolation, la fabrication d'unités avancées et dans les munitions à fragmentation. item.plastanium.description = Un matériau léger et ductile, utilisé dans l'isolation, la fabrication d'unités avancées et dans les munitions à fragmentation.
item.phase-fabric.description = Une substance au poids quasiment inexistant, utilisée pour l'électronique avancée et la technologie auto-réparatrice. item.phase-fabric.description = Une substance au poids quasiment inexistant, utilisée pour l'électronique avancée et la technologie auto-réparatrice.
item.surge-alloy.description = Un alliage avancé aux propriétés électriques uniques, utilisé dans l'armement avancé. item.surge-alloy.description = Un alliage avancé aux propriétés électriques uniques, utilisé dans l'armement avancé.
item.spore-pod.description = Les bulbes sporifères sont utilisés pour l'obtention d'huile, d'explosifs et de carburants. item.spore-pod.description = Les bulbes sporifères sont utilisés pour l'obtention d'huile, d'explosifs et de carburants.
item.spore-pod.details = Les spores dont des formes de vies synthetiques, émettant des gaz qui sont toxiques pour les autres formes de vie biologiques. Elles sont extrêmement invasives et Très inflammables dans certaines conditions. item.spore-pod.details = Les spores dont des formes de vies synthétiques, émettant des gaz qui sont toxiques pour les autres formes de vie biologiques. Elles sont extrêmement invasives et très inflammables dans certaines conditions.
item.blast-compound.description = Un matériau utilisé dans les bombes et les munitions explosives. item.blast-compound.description = Un matériau utilisé dans les bombes et les munitions explosives.
item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires et comme combustible pour les générateurs. item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires et comme combustible pour les générateurs.
@@ -1368,8 +1392,8 @@ block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour p
block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues. block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.
block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies. block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies.
block.titanium-wall-large.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies. block.titanium-wall-large.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies.
block.plastanium-wall.description = Un mur spécial qui peut absorber les arcs électriques et bloquer les connections automatiques des transmetteurs énergétiques. block.plastanium-wall.description = Un mur spécial qui peut absorber les arcs électriques et bloquer les connexions automatiques des transmetteurs énergétiques.
block.plastanium-wall-large.description = Un mur spécial qui absorber les arcs électriques et bloquer les connections automatiques des transmetteurs énergétiques. block.plastanium-wall-large.description = Un mur spécial qui peut absorber les arcs électriques et bloquer les connexions automatiques des transmetteurs énergétiques.
block.thorium-wall.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les attaques ennemies. block.thorium-wall.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les attaques ennemies.
block.thorium-wall-large.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les attaques ennemies. block.thorium-wall-large.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les attaques ennemies.
block.phase-wall.description = Ce mur est moins puissant qu'un mur en thorium, mais il peut dévier les balles, sauf si elles sont trop puissantes. block.phase-wall.description = Ce mur est moins puissant qu'un mur en thorium, mais il peut dévier les balles, sauf si elles sont trop puissantes.
@@ -1394,8 +1418,8 @@ block.inverted-sorter.description = Trie les ressources comme un trieur standard
block.router.description = Accepte les objets depuis une ou plusieurs directions et les renvoie équitablement dans n'importe quelle direction. Utile pour séparer une chaîne de convoyeurs en plusieurs. block.router.description = Accepte les objets depuis une ou plusieurs directions et les renvoie équitablement dans n'importe quelle direction. Utile pour séparer une chaîne de convoyeurs en plusieurs.
block.router.details = Un mal nécessaire... Utiliser un routeur à côté d'une usine est très déconseillé, car ceux-ci peuvent être bloqués par les matériaux produits par celle-ci. block.router.details = Un mal nécessaire... Utiliser un routeur à côté d'une usine est très déconseillé, car ceux-ci peuvent être bloqués par les matériaux produits par celle-ci.
block.distributor.description = Un routeur avancé qui répartit équitablement les objets jusqu'à 7 directions différentes. block.distributor.description = Un routeur avancé qui répartit équitablement les objets jusqu'à 7 directions différentes.
block.overflow-gate.description = Bloc envoyant les ressources à gauche et à droite si le chemin de devant est bloqué. Ne peut pas être utilisée si elle est à côté d'une autre barrière. block.overflow-gate.description = Bloc envoyant les ressources à gauche et à droite si le chemin de devant est bloqué.
block.underflow-gate.description = Le contraire d'une barrière de débordement. Envoie les ressources vers l'avant si les chemins de gauche et de droite sont bloqués. Ne peut pas être utilisée si elle est à côté d'une autre barrière. block.underflow-gate.description = Le contraire d'une barrière de débordement. Envoie les ressources vers l'avant si les chemins de gauche et de droite sont bloqués.
block.mass-driver.description = Le moyen de transport de ressources ultime! Cette structure collecte des lots de ressources et les envoie à un autre transporteur de masse, sur une longue distance. Nécessite de l'énergie pour fonctionner. block.mass-driver.description = Le moyen de transport de ressources ultime! Cette structure collecte des lots de ressources et les envoie à un autre transporteur de masse, sur une longue distance. Nécessite de l'énergie pour fonctionner.
block.mechanical-pump.description = Une pompe basique et bon marché qui pompe lentement des liquides. Elle ne consomme pas d'énergie. block.mechanical-pump.description = Une pompe basique et bon marché qui pompe lentement des liquides. Elle ne consomme pas d'énergie.
block.rotary-pump.description = Une pompe avancée, plus rapide, mais utilisant de l'énergie. block.rotary-pump.description = Une pompe avancée, plus rapide, mais utilisant de l'énergie.
@@ -1410,7 +1434,7 @@ block.bridge-conduit.description = Bloc de transport de liquide avancé permetta
block.phase-conduit.description = Conduit très avancé permettant le transport de liquide. Utilise de l'énergie pour téléporter les liquides à un autre conduit phasé sur une longue distance. block.phase-conduit.description = Conduit très avancé permettant le transport de liquide. Utilise de l'énergie pour téléporter les liquides à un autre conduit phasé sur une longue distance.
block.power-node.description = Transmet de l'énergie aux autres transmetteurs énergétiques connectés. Le transmetteur recevra de l'énergie ou la transmettra à n'importe quel bâtiment adjacent. La connexion peut être activée/désactivée manuellement. block.power-node.description = Transmet de l'énergie aux autres transmetteurs énergétiques connectés. Le transmetteur recevra de l'énergie ou la transmettra à n'importe quel bâtiment adjacent. La connexion peut être activée/désactivée manuellement.
block.power-node-large.description = Ce transmetteur possède un rayon plus grand que le transmetteur énergétique standard. Il peut aussi accepter plus de connexions. block.power-node-large.description = Ce transmetteur possède un rayon plus grand que le transmetteur énergétique standard. Il peut aussi accepter plus de connexions.
block.surge-tower.description = Un transmetteur énergétique à très grande portée mais avec moins de connections disponibles. block.surge-tower.description = Un transmetteur énergétique à très grande portée mais avec moins de connexions disponibles.
block.diode.description = L'énergie ne circule que dans un sens à travers ce bloc, et uniquement si lautre côté présente moins dénergie en stock. Idéal pour protéger les lieux de production d'énergie. block.diode.description = L'énergie ne circule que dans un sens à travers ce bloc, et uniquement si lautre côté présente moins dénergie en stock. Idéal pour protéger les lieux de production d'énergie.
block.battery.description = Stocke le surplus d'énergie et le redistribue en cas de besoin. block.battery.description = Stocke le surplus d'énergie et le redistribue en cas de besoin.
block.battery-large.description = Stocke bien plus d'énergie qu'une batterie normale. block.battery-large.description = Stocke bien plus d'énergie qu'une batterie normale.
@@ -1418,7 +1442,7 @@ block.combustion-generator.description = Génère de l'énergie en brûlant du c
block.thermal-generator.description = Génère une grande quantité d'énergie à partir de zones de chaleur. block.thermal-generator.description = Génère une grande quantité d'énergie à partir de zones de chaleur.
block.steam-generator.description = Plus efficace qu'un générateur à combustion, mais requiert de l'eau. block.steam-generator.description = Plus efficace qu'un générateur à combustion, mais requiert de l'eau.
block.differential-generator.description = Génère de grandes quantités d'énergie en utilisant la différence de température entre le liquide cryogénique et la pyratite brûlante. block.differential-generator.description = Génère de grandes quantités d'énergie en utilisant la différence de température entre le liquide cryogénique et la pyratite brûlante.
block.rtg-generator.description = Un générateur thermo-électrique à radioisotope qui ne demande pas de refroidissement, mais produit moins d'énergie qu'un réacteur à Thorium. block.rtg-generator.description = Un générateur thermoélectrique à radioisotope qui ne demande pas de refroidissement, mais produit moins d'énergie qu'un réacteur à Thorium.
block.solar-panel.description = Génère une faible quantité d'énergie grâce aux rayons du soleil. block.solar-panel.description = Génère une faible quantité d'énergie grâce aux rayons du soleil.
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.solar-panel-large.description = Génère bien plus d'énergie qu'un panneau solaire standard, mais est aussi bien plus cher à construire.
block.thorium-reactor.description = Génère énormément d'énergie à l'aide de la radioactivité du thorium. Requiert néanmoins un refroidissement constant. Explosera violemment en cas de surchauffe. block.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.
@@ -1432,7 +1456,7 @@ block.cultivator.description = Cultive une petite quantité de spores atmosphér
block.cultivator.details = Technologie de récupération. Utilisée pour produire des quantités massives de biomasse aussi efficacement que possible. Probablement lincubateur initial des spores, qui couvrent maintenant Serpulo. block.cultivator.details = Technologie de récupération. Utilisée pour produire des quantités massives de biomasse aussi efficacement que possible. Probablement lincubateur initial des spores, qui couvrent maintenant Serpulo.
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.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.core-shard.description = Le coeur de votre base. Une fois détruit, le secteur est perdu. Ne laissez pas cela arriver. block.core-shard.description = Le coeur de votre base. Une fois détruit, le secteur est perdu. Ne laissez pas cela arriver.
block.core-shard.details = La première version du Noyau. Il est compact, doté d'un module d'auto-réplication et est équippé de propulseurs de lancement à usage unique. Equipped with single-use launch thrusters. Ceux-ci n'ont pas été conçus pour le voyage interplanétaire. block.core-shard.details = La première version du Noyau. Il est compact, doté d'un module d'auto-réplication et est équipé de propulseurs de lancement à usage unique. Equipped with single-use launch thrusters. Ceux-ci n'ont pas été conçus pour le voyage interplanétaire.
block.core-foundation.description = Le coeur de votre base. Cette version améliorée possède un meilleur blindage et stocke plus de ressources qu'un Noyau fragment. block.core-foundation.description = Le coeur de votre base. Cette version améliorée possède un meilleur blindage et stocke plus de ressources qu'un Noyau fragment.
block.core-foundation.details = La seconde version. block.core-foundation.details = La seconde version.
block.core-nucleus.description = Le coeur de votre base. Ce Noyau est extrêmement bien blindé et stocke des quantités massives de ressources. block.core-nucleus.description = Le coeur de votre base. Ce Noyau est extrêmement bien blindé et stocke des quantités massives de ressources.
@@ -1450,20 +1474,20 @@ block.lancer.description = Une tourelle de taille moyenne chargeant et tirant de
block.arc.description = Une petite tourelle tirant des arcs électriques sur les ennemis. block.arc.description = Une petite tourelle tirant des arcs électriques sur les ennemis.
block.swarmer.description = Une tourelle de taille moyenne attaquant les ennemis terrestres et aériens à l'aide de missiles autoguidés. Consomme beaucoup de munitions. block.swarmer.description = Une tourelle de taille moyenne attaquant les ennemis terrestres et aériens à l'aide de missiles autoguidés. Consomme beaucoup de munitions.
block.salvo.description = Une version plus grande et améliorée de la tourelle Duo. Tire par salves. block.salvo.description = Une version plus grande et améliorée de la tourelle Duo. Tire par salves.
block.fuse.description = Une tourelle de grande taille et de petite portée. Elle perce les lignées ennemis avec ses trois tirs de sharpnel. block.fuse.description = Une tourelle de grande taille et de petite portée. Elle perce les lignes ennemies avec ses trois tirs de sharpnel.
block.ripple.description = Lance des amas dobus sur les ennemis terrestres sur de très longues distances. block.ripple.description = Lance des amas dobus sur les ennemis terrestres sur de très longues distances.
block.cyclone.description = Une grande tourelle qui tire rapidement des balles explosives aux ennemis proches. block.cyclone.description = Une grande tourelle qui tire rapidement des balles explosives aux ennemis proches.
block.spectre.description = Une tourelle massive à double cannon qui tire de puissantes balles perçantes. block.spectre.description = Une tourelle massive à double canon qui tire de puissantes balles perçantes.
block.meltdown.description = Une tourelle massive chargeant et tirant de puissants rayons lasers. Nécessite un liquide de refroidissement. block.meltdown.description = Une tourelle massive chargeant et tirant de puissants rayons lasers. Nécessite un liquide de refroidissement.
block.foreshadow.description = Une tourelle massive tirant une puissante balle sur une cible, sur de très longues distances. Elle vise les unités ayant le plus de santé en priorité. block.foreshadow.description = Une tourelle massive tirant une puissante balle sur une cible, sur de très longues distances. Elle vise les unités ayant le plus de santé en priorité.
block.repair-point.description = Soigne l'unité endommagée la plus proche. block.repair-point.description = Soigne l'unité endommagée la plus proche.
block.segment.description = Endommage et détruit les tirs ennemis. Les lasers ne peuvent pas être ciblés. block.segment.description = Endommage et détruit les tirs ennemis. Les lasers ne peuvent pas être ciblés.
block.parallax.description = Tire un rayon tracteur qui attire les ennemis volants, infligeant aussi des dégâts. block.parallax.description = Tire un rayon tracteur qui attire les ennemis volants, infligeant aussi des dégâts.
block.tsunami.description = Tire un puissant jet de liquide aux ennemis. Peut éteindre les incendies automatiquement si elle est alimentée en eau. block.tsunami.description = Tire un puissant jet de liquide aux ennemis. Peut éteindre les incendies automatiquement si elle est alimentée en eau.
block.silicon-crucible.description = Raffine du silicium avec du sable et du charbon en utilisant de la pyratite comme source de chaleur additionelle. Cette usine est plus efficace dans les endroits chauds. block.silicon-crucible.description = Raffine du silicium avec du sable et du charbon en utilisant de la pyratite comme source de chaleur additionnelle. Cette usine est plus efficace dans les endroits chauds.
block.disassembler.description = Cette verion avancée du séparateur peut produire du thorium. block.disassembler.description = Cette version avancée du séparateur peut produire du thorium.
block.overdrive-dome.description = Accélère le fonctionnement des bâtiments autour de lui. Requiert du silicium et du tissu phasé pour fonctionner. block.overdrive-dome.description = Accélère le fonctionnement des bâtiments autour de lui. Requiert du silicium et du tissu phasé pour fonctionner.
block.payload-conveyor.description = Ce grand convoyeur peut déplacer de gros chargements, comme des unité depuis leurs usines ou bien des conteneurs. block.payload-conveyor.description = Ce grand convoyeur peut déplacer de gros chargements, comme des unités depuis leurs usines ou bien des conteneurs.
block.payload-router.description = Distribue les chargements qui entrent jusqu'à 3 directions différentes. block.payload-router.description = Distribue les chargements qui entrent jusqu'à 3 directions différentes.
block.command-center.description = Contrôle le comportement des unités avec plusieurs commandes différentes. block.command-center.description = Contrôle le comportement des unités avec plusieurs commandes différentes.
block.ground-factory.description = Produit des unités terrestres. Elles peuvent être soit utilisées directement, soit envoyées vers des reconstructeurs pour être améliorées. block.ground-factory.description = Produit des unités terrestres. Elles peuvent être soit utilisées directement, soit envoyées vers des reconstructeurs pour être améliorées.
@@ -1473,15 +1497,15 @@ block.additive-reconstructor.description = Améliore les unités entrantes au se
block.multiplicative-reconstructor.description = Améliore les unités entrantes au troisième niveau. block.multiplicative-reconstructor.description = Améliore les unités entrantes au troisième niveau.
block.exponential-reconstructor.description = Améliore les unités entrantes au quatrième niveau. block.exponential-reconstructor.description = Améliore les unités entrantes au quatrième niveau.
block.tetrative-reconstructor.description = Améliore les unités entrantes au cinquième niveau. block.tetrative-reconstructor.description = Améliore les unités entrantes au cinquième niveau.
block.switch.description = Un interupteur pouvant être activé/désactivé. Le statut peut être lu et controllé avec des processeurs logiques. block.switch.description = Un interrupteur pouvant être activé/désactivé. Le statut peut être lu et contrôlé avec des processeurs logiques.
block.micro-processor.description = Exécute une séquence d'instructions en bloucle. Peut être utilisé pour controller des unités ou des bâtiments. block.micro-processor.description = Exécute une séquence d'instructions en boucle. Peut être utilisé pour contrôler des unités ou des bâtiments.
block.logic-processor.description = Exécute une séquence d'instructions en bloucle. Peut être utilisé pour controller des unités ou des bâtiments. Plus rapide qu'un micro processeur. block.logic-processor.description = Exécute une séquence d'instructions en boucle. Peut être utilisé pour contrôler des unités ou des bâtiments. Plus rapide qu'un microprocesseur.
block.hyper-processor.description = Exécute une séquence d'instructions en bloucle. Peut être utilisé pour controller des unités ou des bâtiments. Plus rapide qu'un processeur. block.hyper-processor.description = Exécute une séquence d'instructions en boucle. Peut être utilisé pour contrôler des unités ou des bâtiments. Plus rapide qu'un processeur.
block.memory-cell.description = Stocke des informations pour un processeur logique. block.memory-cell.description = Stocke des informations pour un processeur logique.
block.memory-bank.description = Stocke des informations pour un processeur logique. Possède une plus grande capacité. block.memory-bank.description = Stocke des informations pour un processeur logique. Possède une plus grande capacité.
block.logic-display.description = Affiche des images à partir des instructions d'un processeur logique. block.logic-display.description = Affiche des images à partir des instructions d'un processeur logique.
block.large-logic-display.description = Affiche des images à partir des instructions d'un processeur logique. Possède une plus grande résolution qu'un écran. block.large-logic-display.description = Affiche des images à partir des instructions d'un processeur logique. Possède une plus grande résolution qu'un écran.
block.interplanetary-accelerator.description = Un énorme canon électromagnétique à rails. Accélère les Noyaux pour qu'ils échappent à la gravité de leur planète et leur permettre un déploiement interplanétaire. block.interplanetary-accelerator.description = Un énorme canon électromagnétique à rails. Accélère les Noyaux pour qu'ils échappent à la gravité de leur planète et leur permettent un déploiement interplanétaire.
unit.dagger.description = Tire des balles normales aux ennemis proches. unit.dagger.description = Tire des balles normales aux ennemis proches.
unit.mace.description = Tire des jets de flammes aux ennemis proches. unit.mace.description = Tire des jets de flammes aux ennemis proches.
@@ -1507,7 +1531,7 @@ unit.mono.description = Mine automatiquement du cuivre et du plomb et le dépose
unit.poly.description = Reconstruit automatiquement les structures détruites (sauf les réacteurs à thorium) et assiste les autres unités lorsqu'elles construisent. unit.poly.description = Reconstruit automatiquement les structures détruites (sauf les réacteurs à thorium) et assiste les autres unités lorsqu'elles construisent.
unit.mega.description = Répare automatiquement les structures endommagées. Capable de transporter des blocs et de petites unités terrestres. unit.mega.description = Répare automatiquement les structures endommagées. Capable de transporter des blocs et de petites unités terrestres.
unit.quad.description = Largue de grosses bombes sur des cibles terrestres, réparant les structures alliées et infligeant des dégâts aux ennemis. Capable de transporter des blocs et des unités terrestres de taille moyenne. unit.quad.description = Largue de grosses bombes sur des cibles terrestres, réparant les structures alliées et infligeant des dégâts aux ennemis. Capable de transporter des blocs et des unités terrestres de taille moyenne.
unit.oct.description = Protège les alliés proches avec son champ de force auto-regénérant. Capable de transporter des blocs et de grosses unités terrestres. unit.oct.description = Protège les alliés proches avec son champ de force auto-régénérant. Capable de transporter des blocs et de grosses unités terrestres.
unit.risso.description = Tire un barrage de missiles et de balles aux ennemis proches. unit.risso.description = Tire un barrage de missiles et de balles aux ennemis proches.
unit.minke.description = Tire des obus et des balles normales aux ennemis proches. unit.minke.description = Tire des obus et des balles normales aux ennemis proches.
unit.bryde.description = Tire des obus d'artillerie à longue portée et des missiles aux ennemis proches. unit.bryde.description = Tire des obus d'artillerie à longue portée et des missiles aux ennemis proches.
@@ -1528,14 +1552,16 @@ lst.control = Contrôle un bâtiment.
lst.radar = Localise des unités dans la portée d'un bâtiment. lst.radar = Localise des unités dans la portée d'un bâtiment.
lst.sensor = Récupère des données depuis un bâtiment ou une unité. lst.sensor = Récupère des données depuis un bâtiment ou une unité.
lst.set = Définit une variable. lst.set = Définit une variable.
lst.operation = Éffectue une opération sur 1 ou 2 variables. lst.operation = Effectue une opération sur 1 ou 2 variables.
lst.end = Saute au sommet de la série dinstructions. lst.end = Saute au sommet de la série dinstructions.
lst.jump = Saute conditionnelement vers une autre instruction. lst.jump = Saute conditionnellement vers une autre instruction.
lst.unitbind = Se lie à une unité du type donné et la stocke dans [accent]@unit[]. lst.unitbind = Se lie à une unité du type donné et la stocke dans [accent]@unit[].
lst.unitcontrol = Contrôle l'unité actuellement liée. lst.unitcontrol = Contrôle l'unité actuellement liée.
lst.unitradar = Localise des unités dans la portée de l'unité actuellement liée. lst.unitradar = Localise des unités dans la portée de l'unité actuellement liée.
lst.unitlocate = Localise une position ou un type spécifique de bâtiment, n'importe où sur la carte.\nRequiert une unité reliée. lst.unitlocate = Localise une position ou un type spécifique de bâtiment, n'importe où sur la carte.\nRequiert une unité reliée.
logic.nounitbuild = [red]Les unités contrôlées par des processeurs ne peuvent pas construire ici.
lenum.type = Type de bâtiment/unité.\nPar exemple, pour tout routeur, cela retournera [accent]@router[].\nPas en texte. lenum.type = Type de bâtiment/unité.\nPar exemple, pour tout routeur, cela retournera [accent]@router[].\nPas en texte.
lenum.shoot = Tire à une position donnée. lenum.shoot = Tire à une position donnée.
lenum.shootp = Tire à une unité/bâtiment avec la prédiction de mouvement. lenum.shootp = Tire à une unité/bâtiment avec la prédiction de mouvement.
@@ -1543,6 +1569,10 @@ lenum.configure = La configuration d'un bâtiment. Par exemple, l'objet sélecti
lenum.enabled = Retourne si le bloc est activé ou pas. lenum.enabled = Retourne si le bloc est activé ou pas.
laccess.color = La couleur d'un illuminateur. laccess.color = La couleur d'un illuminateur.
laccess.controller = Le contrôleur de l'Unité.\nSi l'Unité est contrôlée par un processeur, cela retournera le processeur en question.\nSi l'Unité est en formation, cela retournera le leader de la formation.\nSinon, renvoie lunité elle-même.
laccess.dead = Retourne si l'Unité/Bâtiment est morte/détruit ou plus valide.
laccess.controlled = Retourne:\n[accent]@ctrlProcessor[] si le contrôleur de l'Unité est un processeur\n[accent]@ctrlPlayer[] si l'Unité/Bâtiment est contrôlé par un joueur\n[accent]@ctrlFormation[] si l'Unité est en formation\nSinon, retourne 0.
laccess.commanded = [red]Obsolète! Cette commande sera supprimée.[]\nUtilisez [accent]controlled[] à la place.
graphicstype.clear = Remplit lécran dune couleur. graphicstype.clear = Remplit lécran dune couleur.
graphicstype.color = Définit une couleur pour les prochaines opérations de dessin. graphicstype.color = Définit une couleur pour les prochaines opérations de dessin.
@@ -1551,9 +1581,9 @@ graphicstype.line = Dessine un segment de droite.
graphicstype.rect = Dessine un rectangle. graphicstype.rect = Dessine un rectangle.
graphicstype.linerect = Dessine le contour d'un rectangle. graphicstype.linerect = Dessine le contour d'un rectangle.
graphicstype.poly = Dessine un polygone régulier. graphicstype.poly = Dessine un polygone régulier.
graphicstype.linepoly = Dessine le contour un polygone régulier. graphicstype.linepoly = Dessine le contour d'un polygone régulier.
graphicstype.triangle = Dessine un triangle. graphicstype.triangle = Dessine un triangle.
graphicstype.image = Dessine une image venant du contenu du jeu.\nex: [accent]@router[] ou [accent]@dagger[]. graphicstype.image = Dessine une image provenant du contenu du jeu.\nexemple: [accent]@router[] ou [accent]@dagger[].
lenum.always = Toujours [accent]true[]. lenum.always = Toujours [accent]true[].
lenum.idiv = Division entière. lenum.idiv = Division entière.
@@ -1574,11 +1604,11 @@ lenum.min = Le minimum des 2 nombres.
lenum.max = Le maximum des 2 nombres. lenum.max = Le maximum des 2 nombres.
lenum.angle = Angle d'un vecteur en degrés. lenum.angle = Angle d'un vecteur en degrés.
lenum.len = Longueur d'un vecteur. lenum.len = Longueur d'un vecteur.
lenum.sin = Sinus, en degrés. lenum.sin = Calcule le Sinus, en degrés.
lenum.cos = Cosinus, en degrés. lenum.cos = Calcule le Cosinus, en degrés.
lenum.tan = Tangente, en degrés. lenum.tan = Calcule la Tangente, en degrés.
#not a typo, look up 'range notation' #not a typo, look up 'range notation'
lenum.rand = Nombre aléatoire dans la plage [0, valeur]. lenum.rand = Nombre aléatoire dans la plage [0, valeur).
lenum.log = Logarithme naturel (ln). lenum.log = Logarithme naturel (ln).
lenum.log10 = Logarithme de base 10. lenum.log10 = Logarithme de base 10.
lenum.noise = Bruit simplex 2D. lenum.noise = Bruit simplex 2D.
@@ -1592,7 +1622,7 @@ lenum.enemy = Unité ennemie.
lenum.boss = Gardien. lenum.boss = Gardien.
lenum.flying = Unité volante. lenum.flying = Unité volante.
lenum.ground = Unité terrestre. lenum.ground = Unité terrestre.
lenum.player = Unité controllée par un joueur. lenum.player = Unité contrôlée par un joueur.
lenum.ore = Gisement de minerai. lenum.ore = Gisement de minerai.
lenum.damaged = Bâtiments alliés endommagés. lenum.damaged = Bâtiments alliés endommagés.
@@ -1630,12 +1660,13 @@ control.unit = Unité/bâtiment à viser.
control.shoot = Sil faut tirer ou non. control.shoot = Sil faut tirer ou non.
unitlocate.enemy = S'il faut détecter les bâtiments ennemis au non. unitlocate.enemy = S'il faut détecter les bâtiments ennemis au non.
unitlocate.found = Retourne un boolean s'il l'objet a été trouvé ou non. unitlocate.found = Retourne un booléen s'il l'objet a été trouvé ou non.
unitlocate.building = Retourne une variable pour le bâtiment localisé. unitlocate.building = Retourne une variable pour le bâtiment localisé.
unitlocate.outx = Retourne la coordonnée X. unitlocate.outx = Retourne la coordonnée X.
unitlocate.outy = Retourne la coordonnée Y. unitlocate.outy = Retourne la coordonnée Y.
unitlocate.group = Le groupe de bâtiments à rechercher. unitlocate.group = Le groupe de bâtiments à rechercher.
lenum.idle = L'Unité ne bouge plus, mais elle continue de construire/miner.\nL'état par défaut.
lenum.stop = Empêche l'unité de bouger/miner/construire. lenum.stop = Empêche l'unité de bouger/miner/construire.
lenum.move = Bouge vers la position exacte. lenum.move = Bouge vers la position exacte.
lenum.approach = Approche une position avec un rayon. lenum.approach = Approche une position avec un rayon.
@@ -1649,6 +1680,10 @@ lenum.paytake = Prend un chargement à la position actuelle.
lenum.flag = Drapeau numérique d'une unité. lenum.flag = Drapeau numérique d'une unité.
lenum.mine = Mine à une position donnée. lenum.mine = Mine à une position donnée.
lenum.build = Construit une structure. lenum.build = Construit une structure.
lenum.getblock = Récupère des données sur un bâtiment et son type aux coordonnées données.\nL'unité doit se trouver dans la portée de la position.\nLes blocs solides qui ne sont pas des bâtiments auront le type [accent]@solid[]. lenum.getblock = Récupére des données sur un bâtiment et son type aux coordonnées données.\nL'unité doit se trouver dans la portée de la position.\nLes blocs solides qui ne sont pas des bâtiments auront le type [accent]@solid[].
lenum.within = Vérifie si l'unité est près de la position. lenum.within = Vérifie si l'unité est près de la position.
lenum.boost = Active/Désactive le boost. lenum.boost = Active/Désactive le boost.
#Added French translations
lenum.floor = Retourne le plus grand nombre entier,\nqui est inférieur ou égal au nombre donné (12.5 -> 12).
lenum.ceil = Retourne le nombre entier le plus petit,\nsupérieur ou égal au nombre donné (12.5 -> 13).

View File

@@ -126,6 +126,7 @@ mod.installed = [[설치됨]
mod.display = [gray]모드:[orange] {0} mod.display = [gray]모드:[orange] {0}
mod.enabled = [lightgray]활성화됨 mod.enabled = [lightgray]활성화됨
mod.disabled = [scarlet]비활성화됨 mod.disabled = [scarlet]비활성화됨
mod.multiplayer.compatible = [gray]멀티플레이어 호환 가능
mod.disable = 비활성화 mod.disable = 비활성화
mod.content = 콘텐츠: mod.content = 콘텐츠:
mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다.
@@ -619,6 +620,19 @@ sector.extractionOutpost.description = 적이 다른 지역에 자원을 보내
sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요. sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요.
sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[] sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 준비하세요.\n\n적이 필사의 각오로 지키고 있는 이 해안 기지엔 우주에 코어를 발사할 수 있는 시설이 있습니다.\n\n해군을 생산하여 적을 신속하게 제거하고, 그들의 코어 발사 기술을 약탈하십시오.\n\n[royal] 건투를 빕니다.[]
status.burning.name = 방화
status.freezing.name = 빙결
status.wet.name = 젖음
status.muddy.name = 질척해짐
status.melting.name = 융해
status.sapped.name = 흡혈됨
status.spore-slowed.name = 포자 느려짐
status.tarred.name = Tarred
status.overclock.name = 과부하
status.shocked.name = 충격
status.blasted.name = 폭파됨
status.unmoving.name = 멈춤
settings.language = 언어 settings.language = 언어
settings.data = 게임 데이터 settings.data = 게임 데이터
settings.reset = 기본값으로 초기화 settings.reset = 기본값으로 초기화
@@ -655,6 +669,7 @@ stat.output = 출력
stat.booster = 가속 stat.booster = 가속
stat.tiles = 필요한 타일 stat.tiles = 필요한 타일
stat.affinities = 친화력 stat.affinities = 친화력
stat.opposites = 상성
stat.powercapacity = 전력 용량 stat.powercapacity = 전력 용량
stat.powershot = 전력/발 stat.powershot = 전력/발
stat.damage = 피해량 stat.damage = 피해량
@@ -716,6 +731,12 @@ stat.abilities = 능력
stat.canboost = 이륙 가능 stat.canboost = 이륙 가능
stat.flying = 비행 stat.flying = 비행
stat.ammouse = 탄약 사용 stat.ammouse = 탄약 사용
stat.damagemultiplier = 피해량 배수
stat.healthmultiplier = 체력 배수
stat.speedmultiplier = 이동속도 배수
stat.reloadmultiplier = 재장전 배수
stat.buildspeedmultiplier = 건설속도 배수
stat.reactive = 반응성
ability.forcefield = 보호막 필드 ability.forcefield = 보호막 필드
ability.repairfield = 수리 필드 ability.repairfield = 수리 필드
@@ -751,17 +772,14 @@ units.processorcontrol = [lightgray]프로세서 제어됨
bullet.damage = [stat]{0}[lightgray] 피해량 bullet.damage = [stat]{0}[lightgray] 피해량
bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat] {1}[lightgray] 타일 bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat] {1}[lightgray] 타일
bullet.incendiary = [stat]방화 bullet.incendiary = [stat]방화
bullet.sapping = [stat]흡혈
bullet.homing = [stat]유도 bullet.homing = [stat]유도
bullet.shock = [stat]전격
bullet.frag = [stat]파편 bullet.frag = [stat]파편
bullet.lightning = [stat]{0}[lightgray]x 전격 ~[stat]{1}[lightgray] 피해량
bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량 bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량
bullet.knockback = [stat]{0}[lightgray] 넉백 bullet.knockback = [stat]{0}[lightgray] 넉백
bullet.pierce = [stat]{0}[lightgray]번 관통 bullet.pierce = [stat]{0}[lightgray]번 관통
bullet.infinitepierce = [stat]관통 bullet.infinitepierce = [stat]관통
bullet.healpercent = [stat]{0}[lightgray]% 회복 bullet.healpercent = [stat]{0}[lightgray]% 회복
bullet.freezing = [stat]빙결
bullet.tarred = [stat]타르
bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수 bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수
bullet.reload = [stat]{0}[lightgray]배 발사 속도 bullet.reload = [stat]{0}[lightgray]배 발사 속도
@@ -923,6 +941,7 @@ keybind.pause_building.name = 건설 일시정지/재개
keybind.minimap.name = 미니맵 keybind.minimap.name = 미니맵
keybind.planet_map.name = 행성 지도 keybind.planet_map.name = 행성 지도
keybind.research.name = 연구 keybind.research.name = 연구
keybind.block_info.name = 블록 정보
keybind.chat.name = 채팅 keybind.chat.name = 채팅
keybind.player_list.name = 플레이어 목록 keybind.player_list.name = 플레이어 목록
keybind.console.name = 콘솔 keybind.console.name = 콘솔
@@ -991,6 +1010,7 @@ content.item.name = 자원
content.liquid.name = 액체 content.liquid.name = 액체
content.unit.name = 유닛 content.unit.name = 유닛
content.block.name = 블록 content.block.name = 블록
content.status.name = 상태 이상
content.sector.name = 지역 content.sector.name = 지역
item.copper.name = 구리 item.copper.name = 구리
@@ -1459,7 +1479,7 @@ block.ripple.description = 장거리에 걸쳐 지상 적에게 포탄 무리를
block.cyclone.description = 근처 적에게 폭발 파편 덩어리를 발사합니다. block.cyclone.description = 근처 적에게 폭발 파편 덩어리를 발사합니다.
block.spectre.description = 공중 및 지상 목표물에 큰 관통 철갑탄을 발사합니다. block.spectre.description = 공중 및 지상 목표물에 큰 관통 철갑탄을 발사합니다.
block.meltdown.description = 주변 적에게 지속적인 레이저 빔을 충전하여 발사합니다. 냉각 액체가 있어야 작동합니다. block.meltdown.description = 주변 적에게 지속적인 레이저 빔을 충전하여 발사합니다. 냉각 액체가 있어야 작동합니다.
block.foreshadow.description = 장거리에 걸친 거대한 단일 목표 저격탄을 발사합니다. block.foreshadow.description = 장거리에 걸친 거대한 단일 목표 저격탄을 발사합니다. 최대 체력이 높은 적을 먼저 조준합니다.
block.repair-point.description = 인근에 가장 가까운 유닛을 지속해서 치료합니다. block.repair-point.description = 인근에 가장 가까운 유닛을 지속해서 치료합니다.
block.segment.description = 날아오는 발사체를 요격합니다. 큰 발사체엔 조준하지 않습니다. block.segment.description = 날아오는 발사체를 요격합니다. 큰 발사체엔 조준하지 않습니다.
block.parallax.description = 공중 목표물을 끌어오는 견인 광선을 발사하며, 견인 과정에서 데미지를 줍니다. block.parallax.description = 공중 목표물을 끌어오는 견인 광선을 발사하며, 견인 과정에서 데미지를 줍니다.

View File

@@ -10,7 +10,7 @@ link.dev-builds.description = Niestabilne wersje gry
link.trello.description = Oficjalna tablica Trello z planowanym funkcjami link.trello.description = Oficjalna tablica Trello z planowanym funkcjami
link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania
link.google-play.description = Strona w sklepie Google Play link.google-play.description = Strona w sklepie Google Play
link.f-droid.description = Wykaz Katalogu F-Droid link.f-droid.description = Pozycja w F-Droid
link.wiki.description = Oficjalna Wiki Mindustry link.wiki.description = Oficjalna Wiki Mindustry
link.suggestions.description = Zaproponuj nowe funkcje link.suggestions.description = Zaproponuj nowe funkcje
link.bug.description = Znalazłeś błąd? Zgłoś go tutaj link.bug.description = Znalazłeś błąd? Zgłoś go tutaj
@@ -20,11 +20,11 @@ screenshot.invalid = Zrzut ekranu jest zbyt duży. Najprawdopodobniej brakuje mi
gameover = Koniec Gry gameover = Koniec Gry
gameover.disconnect = Odłącz gameover.disconnect = Odłącz
gameover.pvp = Zwyciężyła drużyna [accent]{0}[]! gameover.pvp = Zwyciężyła drużyna [accent]{0}[]!
gameover.waiting =[accent]Czekanie na następną mapę... gameover.waiting = [accent]Oczekiwanie na następną mapę...
highscore = [accent]Nowy rekord! highscore = [accent]Nowy rekord!
copied = Skopiowano. copied = Skopiowano.
indev.notready = Ta część gry nie jest jeszcze ukończona indev.notready = Ta część gry nie jest jeszcze ukończona
indev.campaign = [accent]Udało ci się zakończyć kampanie![]\n\nZawartość kończy się na tym. Podróż międzyplanetarna zostanie dodana w przyszłych aktualizacjach. indev.campaign = [accent]Udało ci się zakończyć kampanię![]\n\nZawartość kończy się na tym. Podróż międzyplanetarna zostanie dodana w przyszłych aktualizacjach.
load.sound = Dźwięki load.sound = Dźwięki
load.map = Mapy load.map = Mapy
@@ -41,10 +41,13 @@ be.ignore = Zignoruj
be.noupdates = Nie znaleziono aktualizacji. be.noupdates = Nie znaleziono aktualizacji.
be.check = Sprawdź aktualizacje be.check = Sprawdź aktualizacje
mod.featured.dialog.title = Wyszukiwarka Modów mod.featured.dialog.title = Przeglądarka Modów
mods.browser.selected = Wybrany Mod mods.browser.selected = Wybrany Mod
mods.browser.add = Zainstaluj Moda mods.browser.add = Zainsta-\nluj Moda
mods.browser.reinstall = Przeins-\ntaluj
mods.github.open = Otwórz w GitHub'ie mods.github.open = Otwórz w GitHub'ie
mods.browser.sortdate = Sortuj wg ostatnich
mods.browser.sortstars = Sortuj wg gwiazdek
schematic = Schemat schematic = Schemat
schematic.add = Zapisz schemat... schematic.add = Zapisz schemat...
@@ -75,7 +78,7 @@ stat.delivered = Surowce wystrzelone:
stat.playtime = Czas Gry:[accent] {0} stat.playtime = Czas Gry:[accent] {0}
stat.rank = Ocena: [accent]{0} stat.rank = Ocena: [accent]{0}
globalitems = [accent]Global Items globalitems = [accent]Wszystkie przedmioty
map.delete = Jesteś pewny, że chcesz usunąć "[accent]{0}[]"? map.delete = Jesteś pewny, że chcesz usunąć "[accent]{0}[]"?
level.highscore = Rekord: [accent]{0} level.highscore = Rekord: [accent]{0}
level.select = Wybrany poziom level.select = Wybrany poziom
@@ -110,17 +113,20 @@ committingchanges = Zatwierdzanie Zmian
done = Gotowe done = Gotowe
feature.unsupported = Twoje urządzenie nie wspiera tej funkcji. feature.unsupported = Twoje urządzenie nie wspiera tej funkcji.
mods.alphainfo = Pamiętaj, że mody są wersji alpha, i[scarlet] mogą być pełne błędów[].\nZgłaszaj wszystkie znalezione problemy na Mindustry GitHub lub Discord. mods.initfailed = [red]⚠[] Inicjalizacja poprzedniej instancji Mindustry nie powiodła się. Najprawdopodobniej było to spowodowane niewłaściwym działaniem modów.\n\nAby zapobiec pętli awarii, [red]wszystkie mody zostały wyłączone.[]\n\nAby wyłączyć tę funkcję, należy wyłączyć ją w ustawieniach [accent]Ustawienia->Gra->Wyłącz mody w przypadku awarii podczas uruchamiania[].
mods = Mody mods = Mody
mods.none = [lightgray]Nie znaleziono modów! mods.none = [lightgray]Nie znaleziono modów!
mods.guide = Poradnik do modów mods.guide = Poradnik do modów
mods.report = Zgłoś Błąd mods.report = Zgłoś Błąd
mods.openfolder = Otwórz folder z modami mods.openfolder = Otwórz folder z modami
mods.viewcontent = View Content
mods.reload = Przeładuj mods.reload = Przeładuj
mods.reloadexit = Gra zostanie teraz zamknięta, aby ponownie załadować mody. mods.reloadexit = Gra zostanie teraz zamknięta, aby ponownie załadować mody.
mod.installed = [[Installed]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Włączony mod.enabled = [lightgray]Włączony
mod.disabled = [scarlet]Wyłączony mod.disabled = [scarlet]Wyłączony
mod.multiplayer.compatible = [gray]Kompatybilny z trybem wieloosobowym
mod.disable = Wyłącz mod.disable = Wyłącz
mod.content = Zawartość: mod.content = Zawartość:
mod.delete.error = Nie udało się usunąć moda. Plik może być w użyciu. mod.delete.error = Nie udało się usunąć moda. Plik może być w użyciu.
@@ -155,12 +161,12 @@ filename = Nazwa Pliku:
unlocked = Odblokowano nową zawartość! unlocked = Odblokowano nową zawartość!
available =Nowe Odkrycie dostępne available =Nowe Odkrycie dostępne
completed = [accent]Ukończony completed = [accent]Ukończony
techtree = Drzewo Technologiczne techtree = Drzewo Techno-\nlogiczne
research.legacy = Znaleziono badania z wersji [accent]5.0[].\nCzy chcesz [accent]załadować je[], albo [accent]usunąć[] dane z drzewa technologiczno (rekomendowane)? research.legacy = Znaleziono badania z wersji [accent]5.0[].\nChcesz [accent]załadować je[], czy [accent]usunąć[] dane z drzewa technologicznego w nowej kampanii (zalecane)?
research.load = Załaduj research.load = Załaduj
research.discard = Odrzuć research.discard = Odrzuć
research.list = [lightgray]Badania: research.list = [lightgray]Badania:
research = Badaj research = Badania
researched = [lightgray]{0} zbadane. researched = [lightgray]{0} zbadane.
research.progress = {0}% ukończone research.progress = {0}% ukończone
players = {0} graczy players = {0} graczy
@@ -169,7 +175,7 @@ players.search = wyszukaj
players.notfound = [gray]nie znaleziono graczy players.notfound = [gray]nie znaleziono graczy
server.closing = [accent]Zamykanie serwera... server.closing = [accent]Zamykanie serwera...
server.kicked.kick = Zostałeś wyrzucony z serwera! server.kicked.kick = Zostałeś wyrzucony z serwera!
server.kicked.whitelist = Nie ma cię tu na białej liście. server.kicked.whitelist = Nie jesteś na białej liście.
server.kicked.serverClose = Serwer został zamknięty. server.kicked.serverClose = Serwer został zamknięty.
server.kicked.vote = Zostałeś wyrzucony z gry. Żegnaj. server.kicked.vote = Zostałeś wyrzucony z gry. Żegnaj.
server.kicked.clientOutdated = Nieaktualna gra! Zaktualizują ją! server.kicked.clientOutdated = Nieaktualna gra! Zaktualizują ją!
@@ -214,7 +220,9 @@ trace.ip = IP: [accent]{0}
trace.id = Wyjątkowe ID: [accent]{0} trace.id = Wyjątkowe ID: [accent]{0}
trace.mobile = Klient Mobilny: [accent]{0} trace.mobile = Klient Mobilny: [accent]{0}
trace.modclient = Zmodowany klient: [accent]{0} trace.modclient = Zmodowany klient: [accent]{0}
invalidid = Złe ID klienta! Udostępnij raport błędu. trace.times.joined = Dołączył: [accent]{0}[] razy
trace.times.kicked = Wyrzucony: [accent]{0}[] razy
invalidid = Złe ID klienta! Wyślij raport błędu.
server.bans = Bany server.bans = Bany
server.bans.none = Nie znaleziono zbanowanych osób! server.bans.none = Nie znaleziono zbanowanych osób!
server.admins = Admini server.admins = Admini
@@ -230,8 +238,8 @@ confirmban = Jesteś pewny, że chcesz zbanować "{0}[white]"?
confirmkick = Jesteś pewny, że chcesz wyrzucić "{0}[white]"? confirmkick = Jesteś pewny, że chcesz wyrzucić "{0}[white]"?
confirmvotekick = Jesteś pewny, że chcesz głosować za wyrzuceniem "{0}[white]"? confirmvotekick = Jesteś pewny, że chcesz głosować za wyrzuceniem "{0}[white]"?
confirmunban = Jesteś pewny, że chcesz odbanować tego gracza? confirmunban = Jesteś pewny, że chcesz odbanować tego gracza?
confirmadmin = Jesteś pewny, że chcesz dać rangę admina "{0}[white]"? confirmadmin = Jesteś pewny, że chcesz dać rangę administratora "{0}[white]"?
confirmunadmin = Jesteś pewny, że chcesz zabrać rangę admina "{0}[white]"? confirmunadmin = Jesteś pewny, że chcesz zabrać rangę administratora "{0}[white]"?
joingame.title = Dołącz do gry joingame.title = Dołącz do gry
joingame.ip = IP: joingame.ip = IP:
disconnect = Rozłączono. disconnect = Rozłączono.
@@ -258,7 +266,7 @@ save.export = Eksportuj
save.import.invalid = [accent]Zapis gry jest niepoprawny! save.import.invalid = [accent]Zapis gry jest niepoprawny!
save.import.fail = [crimson]Nie udało się zaimportować zapisu: [accent]{0} save.import.fail = [crimson]Nie udało się zaimportować zapisu: [accent]{0}
save.export.fail = [crimson]Nie udało się wyeksportować zapisu: [accent]{0} save.export.fail = [crimson]Nie udało się wyeksportować zapisu: [accent]{0}
save.import = Importuj Zapis save.import = Importuj zapis
save.newslot = Zapisz nazwę: save.newslot = Zapisz nazwę:
save.rename = Zmień nazwę save.rename = Zmień nazwę
save.rename.text = Nowa nazwa: save.rename.text = Nowa nazwa:
@@ -272,8 +280,8 @@ off = Wyłączone
save.autosave = Autozapis: {0} save.autosave = Autozapis: {0}
save.map = Mapa: {0} save.map = Mapa: {0}
save.wave = Fala {0} save.wave = Fala {0}
save.mode = Tryb Gry: {0} save.mode = Tryb gry: {0}
save.date = Ostatnio Zapisane: {0} save.date = Ostatnio zapisane: {0}
save.playtime = Czas gry: {0} save.playtime = Czas gry: {0}
warning = Uwaga. warning = Uwaga.
confirm = Potwierdź confirm = Potwierdź
@@ -288,25 +296,26 @@ openlink = Otwórz Link
copylink = Kopiuj Link copylink = Kopiuj Link
back = Wróć back = Wróć
max = Max max = Max
crash.export = Eksportuj logi błędów. crash.export = Eksportuj Logi Błędów
crash.none = Nie znaleziono logów błędów. crash.none = Nie znaleziono logów błędów.
crash.exported = Logi zostały przeniesione. crash.exported = Logi zostały wyeksportowane.
data.export = Eksportuj Dane data.export = Eksportuj Dane
data.import = Importuj Dane data.import = Importuj Dane
data.openfolder = Otwórz folder danych data.openfolder = Otwórz Folder Danych
data.exported = Dane wyeksportowane. data.exported = Dane wyeksportowane.
data.invalid = Nieprawidłowe dane gry. data.invalid = Nieprawidłowe dane gry.
data.import.confirm = Zaimportowanie zewnętrznych danych nadpisze[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zaimportowane, gra automatycznie się wyłączy. data.import.confirm = Zaimportowanie zewnętrznych danych nadpisze[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zaimportowane, gra automatycznie się wyłączy.
quit.confirm = Czy na pewno chcesz wyjść? quit.confirm = Czy na pewno chcesz wyjść?
quit.confirm.tutorial = Jesteś pewien?\nSamouczek może zostać powtórzony w[accent] Ustawienia->Gra->Ponów samouczek.[] quit.confirm.tutorial = Jesteś pewien?\nSamouczek może zostać powtórzony w[accent] Ustawienia->Gra->Ponów samouczek.[]
loading = [accent]Ładowanie... loading = [accent]Ładowanie...
reloading = [accent]Przeładowywanie Modów... reloading = [accent]Przeładowywanie modów...
saving = [accent]Zapisywanie... saving = [accent]Zapisywanie...
respawn = [accent][[{0}][] by odrodzić się w rdzeniu respawn = [accent][[{0}][] by odrodzić się w rdzeniu
cancelbuilding = [accent][[{0}][] by wyczyścić plan cancelbuilding = [accent][[{0}][] by wyczyścić plan
selectschematic = [accent][[{0}][] by wybrać+skopiować selectschematic = [accent][[{0}][] by wybrać+skopiować
pausebuilding = [accent][[{0}][] by wstrzymać budowę pausebuilding = [accent][[{0}][] by wstrzymać budowę
resumebuilding = [scarlet][[{0}][] by kontynuować budowę resumebuilding = [scarlet][[{0}][] by kontynuować budowę
enablebuilding = [scarlet][[{0}][] wznów budowę
showui = Interfejs ukryty.\nNaciśnij [accent][[{0}][] by go pokazać. showui = Interfejs ukryty.\nNaciśnij [accent][[{0}][] by go pokazać.
wave = [accent]Fala {0} wave = [accent]Fala {0}
wave.cap = [accent]Fala {0}/{1} wave.cap = [accent]Fala {0}/{1}
@@ -358,7 +367,7 @@ editor.generation = Generacja:
editor.ingame = Edytuj w Grze editor.ingame = Edytuj w Grze
editor.publish.workshop = Opublikuj w Warsztacie editor.publish.workshop = Opublikuj w Warsztacie
editor.newmap = Nowa Mapa editor.newmap = Nowa Mapa
editor.center = Center editor.center = Wyśrodkuj
workshop = Warsztat workshop = Warsztat
waves.title = Fale waves.title = Fale
waves.remove = Usuń waves.remove = Usuń
@@ -472,7 +481,7 @@ filter.option.amount = Ilość
filter.option.block = Blok filter.option.block = Blok
filter.option.floor = Podłoga filter.option.floor = Podłoga
filter.option.flooronto = Podłoga Docelowa filter.option.flooronto = Podłoga Docelowa
filter.option.target = Target filter.option.target = Cel
filter.option.wall = Ściana filter.option.wall = Ściana
filter.option.ore = Ruda filter.option.ore = Ruda
filter.option.floor2 = Druga Podłoga filter.option.floor2 = Druga Podłoga
@@ -499,11 +508,11 @@ editor = Edytor
mapeditor = Edytor Map mapeditor = Edytor Map
abandon = Opuść abandon = Opuść
abandon.text = Ta strefa i wszystkie jej surowce będą przejęte przez przeciwników. abandon.text = Ta strefa i wszystkie jej surowce zostaną przejęte przez przeciwników.
locked = Zablokowane locked = Zablokowane
complete = [lightgray]Ukończone: complete = [lightgray]Ukończone:
requirement.wave = Osiągnij falę {0} w {1} requirement.wave = Osiągnij falę {0} w {1}
requirement.core = Zniszcz Rdzeń wroga w {0} requirement.core = Zniszcz rdzeń wroga w {0}
requirement.research = Zbadaj {0} requirement.research = Zbadaj {0}
requirement.produce = Produkcja {0} requirement.produce = Produkcja {0}
requirement.capture = Zdobądź {0} requirement.capture = Zdobądź {0}
@@ -513,18 +522,18 @@ map.multiplayer = Tylko host może widzieć sektory
uncover = Odkryj uncover = Odkryj
configure = Skonfiguruj Ładunek configure = Skonfiguruj Ładunek
loadout = Loadout loadout = Ładunek
resources = Zasoby resources = Zasoby
bannedblocks = Zabronione bloki bannedblocks = Zabronione bloki
addall = Dodaj wszystkie addall = Dodaj wszystkie
launch.from = Wstrzelony Z: [accent]{0} launch.from = Wystrzelony z: [accent]{0}
launch.destination = Cel: {0} launch.destination = Cel: {0}
configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}. configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}.
add = Dodaj... add = Dodaj...
boss.health = Zdrowie Strażnika boss.health = Zdrowie Strażnika
connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0} connectfail = [crimson]Nie można połączyć się z serwerem:\n\n[accent]{0}
error.unreachable = Serwer niedostępny.\nCzy adres jest wpisany poprawnie? error.unreachable = Serwer niedostępny.\nSprawdź, czy adres jest wpisany poprawnie.
error.invalidaddress = Niepoprawny adres. error.invalidaddress = Niepoprawny adres.
error.timedout = Przekroczono limit czasu!\nUpewnij się, że host ma ustawione przekierowanie portu oraz sprawdź poprawność wpisanego adresu! error.timedout = Przekroczono limit czasu!\nUpewnij się, że host ma ustawione przekierowanie portu oraz sprawdź poprawność wpisanego adresu!
error.mismatch = Błąd pakietu:\nprawdopodobne niedopasowanie klienta/serwera.\nUpewnij się, że ty i host macie najnowszą wersję Mindustry! error.mismatch = Błąd pakietu:\nprawdopodobne niedopasowanie klienta/serwera.\nUpewnij się, że ty i host macie najnowszą wersję Mindustry!
@@ -599,14 +608,14 @@ sector.frozenForest.description = Nawet tutaj, bliżej gór, zarodniki rozprzest
sector.saltFlats.description = Na obrzeżach pustyni spoczywają Solne Równiny. Można tu znaleźć niewiele surowców.\n\nWrogowie zbudowali tu bazę składującą surowce. Zniszcz ich rdzeń. Zniszcz wszystko co stanie ci na drodze. sector.saltFlats.description = Na obrzeżach pustyni spoczywają Solne Równiny. Można tu znaleźć niewiele surowców.\n\nWrogowie zbudowali tu bazę składującą surowce. Zniszcz ich rdzeń. Zniszcz wszystko co stanie ci na drodze.
sector.craters.description = W tym kraterze zebrała się woda. Pozostałość dawnych wojen. Odzyskaj ten teren. Wykop piasek. Wytop metaszkło. Pompuj wodę do działek obronnych i wierteł by je schłodzić sector.craters.description = W tym kraterze zebrała się woda. Pozostałość dawnych wojen. Odzyskaj ten teren. Wykop piasek. Wytop metaszkło. Pompuj wodę do działek obronnych i wierteł by je schłodzić
sector.ruinousShores.description = Za pustkowiami ciągnie się linia brzegowa. Kiedyś znajdowała się tu przybrzeżna linia obronna. Niewiele z niej zostało. Ostały się tylko podstawowe struktury obronne, z reszty został tylko złom.\nKontynuuj eksploracje. Odkryj pozostawioną tu technologię. sector.ruinousShores.description = Za pustkowiami ciągnie się linia brzegowa. Kiedyś znajdowała się tu przybrzeżna linia obronna. Niewiele z niej zostało. Ostały się tylko podstawowe struktury obronne, z reszty został tylko złom.\nKontynuuj eksploracje. Odkryj pozostawioną tu technologię.
sector.stainedMountains.description = W głębi lądu leżą góry, jeszcze nieskażone przez zarodniki.\nWydobądź obfity tytan w tym obszarze. Dowiedz się, jak z niego korzystać.\n\nObecność wroga jest tutaj większa. Nie daj im czasu na wysłanie swoich najsilniejszych jednostek. sector.stainedMountains.description = W głębi lądu leżą góry, jeszcze nieskażone przez zarodniki.\nWydobądź bogate złoża tytanu w tym obszarze. Dowiedz się, jak z niego korzystać.\n\nObecność wroga jest tutaj większa. Nie daj im czasu na wysłanie swoich najsilniejszych jednostek.
sector.overgrowth.description = Obszar ten jest zarośnięty, bliżej źródła zarodników.\nWróg założył tu placówkę. Zbuduj jednostki Nóż. Zniszcz to. Odzyskaj to, co nam odebrano. sector.overgrowth.description = Obszar ten jest zarośnięty, bliżej źródła zarodników.\nWróg założył tu placówkę. Zbuduj jednostki Nóż. Zniszcz to. Odzyskaj to, co nam odebrano.
sector.tarFields.description = Obrzeża strefy produkcji ropy, między górami a pustynią. Jeden z niewielu obszarów z rezerwami użytecznej smoły.\nMimo że ta strefa jest opuszczona, w pobliżu znajdują się niebezpieczne siły wroga. Nie lekceważ ich.\n\n[lightgray]Jeśli to możliwe, zbadaj technologię przetwarzania oleju. sector.tarFields.description = Obrzeża strefy produkcji ropy, między górami a pustynią. Jeden z niewielu obszarów z rezerwami użytecznej smoły.\nMimo że ta strefa jest opuszczona, w pobliżu znajdują się niebezpieczne siły wroga. Nie lekceważ ich.\n\n[lightgray]Jeśli to możliwe, zbadaj technologię przetwarzania oleju.
sector.desolateRift.description = Strefa wyjątkowo niebezpieczna. Obfita w zasoby ale mało miejsca. Wysokie ryzyko zniszczenia. Opuść tę strefe jak najszybciej. Nie daj się zwieść długiemu odstępowi między atakami wroga. sector.desolateRift.description = Strefa wyjątkowo niebezpieczna. Obfita w zasoby ale mało miejsca. Wysokie ryzyko zniszczenia. Opuść tę strefe jak najszybciej. Nie daj się zwieść długiemu odstępowi między atakami wroga.
sector.nuclearComplex.description = Dawny zakład produkcji i przetwarzania toru, zredukowny do ruin.\n[lightgray]Zbadaj tor i jego zastosowania.\n\nWróg jest tutaj obecny w dużej ilości, nieustannie poszukuje napastników. sector.nuclearComplex.description = Dawny zakład produkcji i przetwarzania toru, zredukowny do ruin.\n[lightgray]Zbadaj tor i jego zastosowania.\n\nWróg jest tutaj obecny w dużej ilości, nieustannie poszukuje napastników.
sector.fungalPass.description = Przejściowy obszar pomiędzy wysokimi górami a nisko znajdującymi się, ogarniętymi przez zarodniki równinami. Znajduje się tu mała postawiona przez wrogów baza zwiadowcza.\nZniszcz ją.\nUżyj jednostek Nóż i Pełzak. Zniszcz oba rdzenie. sector.fungalPass.description = Przejściowy obszar pomiędzy wysokimi górami a nisko znajdującymi się, ogarniętymi przez zarodniki, równinami. Znajduje się tu mała, postawiona przez wrogów, baza zwiadowcza.\nZniszcz ją.\nUżyj jednostek Nóż i Pełzak. Zniszcz oba rdzenie.
sector.biomassFacility.description = Miejsce powstania zarodników. Tutał były badane i początkowo produkowane.\nZbadaj zawartą w nim technologię. Hoduj zarodniki dla paliwa i tworzyw sztucznych.\n\n[lightgray]Po upadku tej placówki zarodniki zostały uwolnione. Nic w lokalnym ekosystemie nie mogło konkurować z tak inwazyjnym organizmem. sector.biomassFacility.description = Miejsce powstania zarodników. Tutał były badane i początkowo produkowane.\nZbadaj zawartą w nim technologię. Hoduj zarodniki dla paliwa i tworzyw sztucznych.\n\n[lightgray]Po upadku tej placówki zarodniki zostały uwolnione. Nic w lokalnym ekosystemie nie mogło konkurować z tak inwazyjnym organizmem.
sector.windsweptIslands.description = Dalej za linią brzegową znajduje się ten odległy łańcuch wysp. Zapisy wyakzują ze były tu struktury produkujące [accent]Plastan[].\n\nOdeprzyj morskie jednostki wroga. Załóż bazę na wyspach. Odkryj te fabryki. sector.windsweptIslands.description = Dalej za linią brzegową znajduje się ten odległy łańcuch wysp. Zapisy wykazują, że były tu struktury produkujące [accent]Plastan[].\n\nOdeprzyj morskie jednostki wroga. Załóż bazę na wyspach. Odkryj te fabryki.
sector.extractionOutpost.description = Odległa placówka zbudowana przez wroga w celu wystrzeliwania zasobów do innych sektorów.\n\nDo dalszych podbojów niezbędna jest międzysektorowa technologia transportu. Zniszcz bazę. Zbadaj ich Wyrzutnie. sector.extractionOutpost.description = Odległa placówka zbudowana przez wroga w celu wystrzeliwania zasobów do innych sektorów.\n\nDo dalszych podbojów niezbędna jest międzysektorowa technologia transportu. Zniszcz bazę. Zbadaj ich Wyrzutnie.
sector.impact0078.description = Tutaj leżą pozostałości międzygwiezdnego statku transportowego, który jako pierwszy wszedł do tego układu.\n\nWydobądź jak najwięcej z wraku. Zbadaj każdą nienaruszoną technologię. sector.impact0078.description = Tutaj leżą pozostałości międzygwiezdnego statku transportowego, który jako pierwszy wszedł do tego układu.\n\nWydobądź jak najwięcej z wraku. Zbadaj każdą nienaruszoną technologię.
sector.planetaryTerminal.description = Ostatni cel.\n\nTa baza przybrzeżna zawiera strukturę zdolną do wyrzucania rdzeni na lokalne planety. Jest wyjątkowo dobrze strzeżona.\n\nProdukuj jednostki morskie. Jak najszybciej wyeliminuj wroga. Zbadaj tą strukturę. sector.planetaryTerminal.description = Ostatni cel.\n\nTa baza przybrzeżna zawiera strukturę zdolną do wyrzucania rdzeni na lokalne planety. Jest wyjątkowo dobrze strzeżona.\n\nProdukuj jednostki morskie. Jak najszybciej wyeliminuj wroga. Zbadaj tą strukturę.
@@ -622,7 +631,7 @@ settings.sound = Dźwięk
settings.graphics = Grafika settings.graphics = Grafika
settings.cleardata = Wyczyść Dane Gry... settings.cleardata = Wyczyść Dane Gry...
settings.clear.confirm = Czy jesteś pewien że chcesz usunąć te dane?\nPo tym nie ma powrotu! settings.clear.confirm = Czy jesteś pewien że chcesz usunąć te dane?\nPo tym nie ma powrotu!
settings.clearall.confirm = [scarlet]UWAGA![]\nTo wykasuje wszystkie dane, włącznie z zapisanymi grami i mapami, ustawienami, i znanymi technologiami.\nKiedy naciśniesz 'ok', gra usunie wszystkie swoje dane i automatycznie wyłączy się. settings.clearall.confirm = [scarlet]UWAGA![]\nTo wykasuje wszystkie dane, włącznie z zapisami, drzewem technologicznym, mapami, ustawieniami i przypisanymi klawiszami.\nKiedy naciśniesz 'ok', gra usunie wszystkie swoje dane i automatycznie wyłączy się.
settings.clearsaves.confirm = Jesteś pewny że chcesz usunąć wszystkie zapisy? settings.clearsaves.confirm = Jesteś pewny że chcesz usunąć wszystkie zapisy?
settings.clearsaves = Usuń Zapisy settings.clearsaves = Usuń Zapisy
settings.clearresearch = Usuń Postęp Drzewa Tech. settings.clearresearch = Usuń Postęp Drzewa Tech.
@@ -638,7 +647,7 @@ info.title = Informacje
error.title = [crimson]Wystąpił błąd error.title = [crimson]Wystąpił błąd
error.crashtitle = Wystąpił błąd error.crashtitle = Wystąpił błąd
unit.nobuild = [scarlet]Jednostka nie może budować unit.nobuild = [scarlet]Jednostka nie może budować
lastaccessed = [lightgray]Osatino wpłynął: {0} lastaccessed = [lightgray]Ostatnia interakcja: {0}
block.unknown = [lightgray]??? block.unknown = [lightgray]???
stat.description = Opis stat.description = Opis
@@ -678,10 +687,11 @@ stat.drillspeed = Podstawowa szybkość kopania
stat.boosteffect = Efekt wzmocnienia stat.boosteffect = Efekt wzmocnienia
stat.maxunits = Maksymalna ilość jednostek stat.maxunits = Maksymalna ilość jednostek
stat.health = Zdrowie stat.health = Zdrowie
stat.armor = Pancerz
stat.buildtime = Czas budowy stat.buildtime = Czas budowy
stat.maxconsecutive = Maksymalnie Kolejny stat.maxconsecutive = Maksymalnie Kolejny
stat.buildcost = Koszt budowy stat.buildcost = Koszt budowy
stat.inaccuracy = Niecelność stat.inaccuracy = Niedokładność
stat.shots = Strzały stat.shots = Strzały
stat.reload = Strzałów/Sekundę stat.reload = Strzałów/Sekundę
stat.ammo = Amunicja stat.ammo = Amunicja
@@ -693,18 +703,19 @@ stat.lightningchance = Szansa Na Błyskawicę
stat.lightningdamage = Obrażenia Błyskawic stat.lightningdamage = Obrażenia Błyskawic
stat.flammability = Palność stat.flammability = Palność
stat.radioactivity = Radioaktywność stat.radioactivity = Radioaktywność
stat.charge = Charge
stat.heatcapacity = Pojemność Cieplna stat.heatcapacity = Pojemność Cieplna
stat.viscosity = Lepkość stat.viscosity = Lepkość
stat.temperature = Temperatura stat.temperature = Temperatura
stat.speed = Prędość stat.speed = Prędkość
stat.buildspeed = Prędkość Budowy stat.buildspeed = Prędkość Budowy
stat.minespeed = Prędkość Wydobycia stat.minespeed = Prędkość Wydobycia
stat.minetier = Stopień Wydobycia stat.minetier = Stopień Wydobycia
stat.payloadcapacity = Ładowność stat.payloadcapacity = Ładowność
stat.commandlimit = Limit Jednostek Zarządanych stat.commandlimit = Limit Zarządanych Jednostek
stat.abilities = Umiejętności stat.abilities = Umiejętności
stat.canboost = Może przyspieszyć stat.canboost = Może przyspieszyć
stat.flying = Latanie stat.flying = Może latać
stat.ammouse = Zużycie Amunicji stat.ammouse = Zużycie Amunicji
ability.forcefield = Pole Mocy ability.forcefield = Pole Mocy
@@ -736,7 +747,7 @@ bar.progress = Postęp Budowy
bar.input = Wejście bar.input = Wejście
bar.output = Wyjście bar.output = Wyjście
units.processorcontrol = [lightgray]Kontrolowany Procesorem units.processorcontrol = [lightgray]Kontrolowany przez procesor
bullet.damage = [stat]{0}[lightgray] Obrażenia bullet.damage = [stat]{0}[lightgray] Obrażenia
bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[lightgray] kratki bullet.splashdamage = [stat]{0}[lightgray] Obrażenia obszarowe ~[stat] {1}[lightgray] kratki
@@ -773,8 +784,8 @@ unit.shieldhealth = życie tarczy
unit.items = przedmioty unit.items = przedmioty
unit.thousands = tys. unit.thousands = tys.
unit.millions = mln unit.millions = mln
unit.billions = b unit.billions = mld
unit.pershot = /szczał unit.pershot = /strzał
category.purpose = Opis category.purpose = Opis
category.general = Główne category.general = Główne
category.power = Prąd category.power = Prąd
@@ -786,23 +797,26 @@ category.optional = Dodatkowe ulepszenia
setting.landscape.name = Zablokuj tryb panoramiczny setting.landscape.name = Zablokuj tryb panoramiczny
setting.shadows.name = Cienie setting.shadows.name = Cienie
setting.blockreplace.name = Automatyczne sugestie bloków setting.blockreplace.name = Automatyczne sugestie bloków
setting.linear.name = Filtrowanie Liniowe setting.linear.name = Filtrowanie liniowe
setting.hints.name = Podpowiedzi setting.hints.name = Podpowiedzi
setting.flow.name = Wyświetl szybkość przepływu zasobów[scarlet] (eksperymentalne) setting.logichints.name = Wskazówki dot. logiki
setting.flow.name = Wyświetl szybkość przepływu zasobów
setting.backgroundpause.name = Wstrzymaj w tle setting.backgroundpause.name = Wstrzymaj w tle
setting.buildautopause.name = Automatycznie zatrzymaj budowanie setting.buildautopause.name = Automatycznie zatrzymaj budowanie
setting.doubletapmine.name = Kliknij podwójnie, aby wydobywać
setting.modcrashdisable.name = Wyłącz mody w przypadku awarii podczas uruchamiania
setting.animatedwater.name = Animowana woda setting.animatedwater.name = Animowana woda
setting.animatedshields.name = Animowana tarcza setting.animatedshields.name = Animowana tarcza
setting.antialias.name = Antyaliasing[lightgray] (wymaga restartu)[] setting.antialias.name = Antyaliasing[lightgray] (wymaga restartu)[]
setting.playerindicators.name = Znaczniki Graczy setting.playerindicators.name = Znaczniki graczy
setting.indicators.name = Znaczniki Przyjaciół setting.indicators.name = Znaczniki przyjaciół
setting.autotarget.name = Automatyczne Celowanie setting.autotarget.name = Automatyczne celowanie
setting.keyboard.name = Sterowanie - Myszka+Klawiatura setting.keyboard.name = Sterowanie - Myszka+Klawiatura
setting.touchscreen.name = Sterowanie - Ekran Dotykowy setting.touchscreen.name = Sterowanie - Ekran Dotykowy
setting.fpscap.name = Maksymalny FPS setting.fpscap.name = Maksymalny FPS
setting.fpscap.none = Nieograniczone setting.fpscap.none = Nieograniczone
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.uiscale.name = Skalowanie Interfejsu[lightgray] (wymaga restartu)[] setting.uiscale.name = Skalowanie interfejsu[lightgray] (wymaga restartu)[]
setting.swapdiagonal.name = Pozwala na ukośną budowę setting.swapdiagonal.name = Pozwala na ukośną budowę
setting.difficulty.training = Treningowy setting.difficulty.training = Treningowy
setting.difficulty.easy = Łatwy setting.difficulty.easy = Łatwy
@@ -822,11 +836,11 @@ setting.milliseconds = {0} milisekund
setting.fullscreen.name = Pełny ekran setting.fullscreen.name = Pełny ekran
setting.borderlesswindow.name = Bezramkowe okno[lightgray] (może wymagać restartu) setting.borderlesswindow.name = Bezramkowe okno[lightgray] (może wymagać restartu)
setting.fps.name = Pokazuj FPS oraz ping setting.fps.name = Pokazuj FPS oraz ping
setting.smoothcamera.name = Gładka Kamera setting.smoothcamera.name = Płynna kamera
setting.vsync.name = Synchronizacja pionowa setting.vsync.name = Synchronizacja pionowa
setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje) setting.pixelate.name = Pikselacja [lightgray](wyłącza animacje)
setting.minimap.name = Pokaż Minimapę setting.minimap.name = Pokaż minimapę
setting.coreitems.name = Poazuj Przedmoty W Rdzeniu (WIP) setting.coreitems.name = Pokazuj przedmoty w rdzeniu
setting.position.name = Pokazuj położenie gracza setting.position.name = Pokazuj położenie gracza
setting.musicvol.name = Głośność muzyki setting.musicvol.name = Głośność muzyki
setting.atmosphere.name = Pokazuj atmosferę planety setting.atmosphere.name = Pokazuj atmosferę planety
@@ -835,19 +849,19 @@ setting.mutemusic.name = Wycisz muzykę
setting.sfxvol.name = Głośność dźwięków setting.sfxvol.name = Głośność dźwięków
setting.mutesound.name = Wycisz dźwięki setting.mutesound.name = Wycisz dźwięki
setting.crashreport.name = Wysyłaj anonimowo dane o crashu gry setting.crashreport.name = Wysyłaj anonimowo dane o crashu gry
setting.savecreate.name = Automatyczne tworzenie zapisu setting.savecreate.name = Automatyczne tworzenie zapisów
setting.publichost.name = Widoczność Gry Publicznej setting.publichost.name = Widoczność gry publicznej
setting.playerlimit.name = Limit Graczy setting.playerlimit.name = Limit graczy
setting.chatopacity.name = Przezroczystość czatu setting.chatopacity.name = Przezroczystość czatu
setting.lasersopacity.name = Przezroczystość laserów zasilających setting.lasersopacity.name = Przezroczystość laserów zasilających
setting.bridgeopacity.name = Przezroczystość mostów setting.bridgeopacity.name = Przezroczystość mostów
setting.playerchat.name = Wyświetlaj czat w grze setting.playerchat.name = Wyświetlaj dymek czatu w grze
setting.showweather.name = Pokaż pogodę setting.showweather.name = Pokaż pogodę
public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do Twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej. public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do Twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej.
public.confirm.really = Jeśli chcesz grać z przyjaciółmi, użyj [green]Zaproś Przyjaciela[] zamiast [scarlet]Punliczny serwer[]!\nJesteś pewny że chcesz rozpocząć grę [scarlet]publiczą[]? public.confirm.really = Jeśli chcesz zagrać ze znajomymi, użyj opcji [green]Zaproś Znajomych[] zamiast [scarlet]Publiczny serwer[]!\nJesteś pewny że chcesz rozpocząć grę [scarlet]publiczną[]?
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi. public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[] uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
uiscale.cancel = Anuluj i Wyjdź uiscale.cancel = Anuluj i wyjdź
setting.bloom.name = Efekt Bloom setting.bloom.name = Efekt Bloom
keybind.title = Zmień keybind.title = Zmień
keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane. keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane.
@@ -860,8 +874,8 @@ command.rally = Zbierz
command.retreat = Wycofaj command.retreat = Wycofaj
command.idle = Nieaktywny command.idle = Nieaktywny
placement.blockselectkeys = \n[lightgray]Klawisz: [{0}, placement.blockselectkeys = \n[lightgray]Klawisz: [{0},
keybind.respawn.name = Respawn keybind.respawn.name = Odrodzenie
keybind.control.name = Control Unit keybind.control.name = Kontroluj jednostkę
keybind.clear_building.name = Wyczyść budynek keybind.clear_building.name = Wyczyść budynek
keybind.press = Naciśnij wybrany klawisz... keybind.press = Naciśnij wybrany klawisz...
keybind.press.axis = Naciśnij oś lub klawisz... keybind.press.axis = Naciśnij oś lub klawisz...
@@ -901,7 +915,7 @@ keybind.break_block.name = Zniszcz Blok
keybind.deselect.name = Odznacz keybind.deselect.name = Odznacz
keybind.pickupCargo.name = Podnieś Ładunek keybind.pickupCargo.name = Podnieś Ładunek
keybind.dropCargo.name = Opuść Ładunek keybind.dropCargo.name = Opuść Ładunek
keybind.command.name = Command keybind.command.name = Rozkazuj
keybind.shoot.name = Strzelanie keybind.shoot.name = Strzelanie
keybind.zoom.name = Przybliżanie keybind.zoom.name = Przybliżanie
keybind.menu.name = Menu keybind.menu.name = Menu
@@ -914,7 +928,7 @@ keybind.chat.name = Czat
keybind.player_list.name = Lista graczy keybind.player_list.name = Lista graczy
keybind.console.name = Konsola keybind.console.name = Konsola
keybind.rotate.name = Obracanie keybind.rotate.name = Obracanie
keybind.rotateplaced.name = Rotate Existing (Hold) keybind.rotateplaced.name = Obracanie bloku pod kursorem (przytrzymaj)
keybind.toggle_menus.name = Zmiana widoczności menu keybind.toggle_menus.name = Zmiana widoczności menu
keybind.chat_history_prev.name = Przewiń wiadomości w górę keybind.chat_history_prev.name = Przewiń wiadomości w górę
keybind.chat_history_next.name = Przewiń wiadomości w dół keybind.chat_history_next.name = Przewiń wiadomości w dół
@@ -936,8 +950,8 @@ mode.custom = Własny Tryb
rules.infiniteresources = Nieskończone Zasoby rules.infiniteresources = Nieskończone Zasoby
rules.reactorexplosions = Eksplozje Reaktorów rules.reactorexplosions = Eksplozje Reaktorów
rules.coreincinerates = Rdzeń Spala Przepełnienie rules.coreincinerates = Rdzeń Spala Nadmarowe Przedmioty
rules.schematic = Schematy Są Dozwolone rules.schematic = Zezwalaj na schematy
rules.wavetimer = Zegar Fal rules.wavetimer = Zegar Fal
rules.waves = Fale rules.waves = Fale
rules.attack = Tryb Ataku rules.attack = Tryb Ataku
@@ -948,6 +962,8 @@ rules.blockdamagemultiplier = Mnożnik Uszkodzeń Bloków
rules.unitbuildspeedmultiplier = Mnożnik Prędkości Tworzenia Jednostek rules.unitbuildspeedmultiplier = Mnożnik Prędkości Tworzenia Jednostek
rules.unithealthmultiplier = Mnożnik Życia Jednostek rules.unithealthmultiplier = Mnożnik Życia Jednostek
rules.unitdamagemultiplier = Mnożnik Obrażeń jednostek rules.unitdamagemultiplier = Mnożnik Obrażeń jednostek
rules.unitcapvariable = Rdzenie mają wpływ na limit jednostek
rules.unitcap = Podstawowy limit jednostek
rules.enemycorebuildradius = Zasięg Blokady Budowy Przy Rdzeniu Wroga:[lightgray] (kratki) rules.enemycorebuildradius = Zasięg Blokady Budowy Przy Rdzeniu Wroga:[lightgray] (kratki)
rules.wavespacing = Odstępy Między Falami:[lightgray] (sek) rules.wavespacing = Odstępy Między Falami:[lightgray] (sek)
rules.buildcostmultiplier = Mnożnik Kosztów Budowania rules.buildcostmultiplier = Mnożnik Kosztów Budowania
@@ -961,12 +977,12 @@ rules.title.resourcesbuilding = Zasoby i Budowanie
rules.title.enemy = Przeciwnicy rules.title.enemy = Przeciwnicy
rules.title.unit = Jednostki rules.title.unit = Jednostki
rules.title.experimental = Eksperymentalne rules.title.experimental = Eksperymentalne
rules.title.environment = Environment rules.title.environment = Otoczenie
rules.lighting = Oświetlenie rules.lighting = Oświetlenie
rules.enemyLights = Wrogowie Emitują Światło rules.enemyLights = Wrogowie Emitują Światło
rules.fire = Ogień rules.fire = Ogień
rules.explosions = Uszkodzenia Wybuchu Klocka/Jednostki rules.explosions = Uszkodzenia Wybuchu Bloku/Jednostki
rules.ambientlight = Otaczające Światło rules.ambientlight = Otaczające\nŚwiatło
rules.weather = Pogoda rules.weather = Pogoda
rules.weather.frequency = Częstotliwość: rules.weather.frequency = Częstotliwość:
rules.weather.always = Zawsze rules.weather.always = Zawsze
@@ -999,22 +1015,22 @@ liquid.slag.name = Żużel
liquid.oil.name = Ropa liquid.oil.name = Ropa
liquid.cryofluid.name = Lodociecz liquid.cryofluid.name = Lodociecz
unit.dagger.name = Nóż unit.dagger.name = Dagger
unit.mace.name = Mace unit.mace.name = Mace
unit.fortress.name = Forteca unit.fortress.name = Fortress
unit.nova.name = Nova unit.nova.name = Nova
unit.pulsar.name = Pulsar unit.pulsar.name = Pulsar
unit.quasar.name = Quasar unit.quasar.name = Quasar
unit.crawler.name = Pełzak unit.crawler.name = Crawler
unit.atrax.name = Atrax unit.atrax.name = Atrax
unit.spiroct.name = Spiroct unit.spiroct.name = Spiroct
unit.arkyid.name = Arkyid unit.arkyid.name = Arkyid
unit.toxopid.name = Toxopid unit.toxopid.name = Toxopid
unit.flare.name = Błysk unit.flare.name = Flare
unit.horizon.name = Horyzont unit.horizon.name = Horizon
unit.zenith.name = Zenit unit.zenith.name = Zenith
unit.antumbra.name = Antumbra unit.antumbra.name = Antumbra
unit.eclipse.name = Zaćmienie unit.eclipse.name = Eclipse
unit.mono.name = Mono unit.mono.name = Mono
unit.poly.name = Poly unit.poly.name = Poly
unit.mega.name = Mega unit.mega.name = Mega
@@ -1040,11 +1056,11 @@ block.sand-boulder.name = Piaskowy Głaz
block.basalt-boulder.name = Bazaltowy Głaz block.basalt-boulder.name = Bazaltowy Głaz
block.grass.name = Trawa block.grass.name = Trawa
block.slag.name = Żużel block.slag.name = Żużel
block.space.name = Space block.space.name = Kosmos
block.salt.name = Sól block.salt.name = Sól
block.salt-wall.name = Solna Ściana block.salt-wall.name = Ściana Solna
block.pebbles.name = Kamyki block.pebbles.name = Kamyki
block.tendrils.name = Wić block.tendrils.name = Pnącza
block.sand-wall.name = Piaskowa Ściana block.sand-wall.name = Piaskowa Ściana
block.spore-pine.name = Sosna Zarodnikowa block.spore-pine.name = Sosna Zarodnikowa
block.spore-wall.name = Zarodinkowa Ściana block.spore-wall.name = Zarodinkowa Ściana
@@ -1056,7 +1072,7 @@ block.shale-boulder.name = Głaz Łupkowy
block.moss.name = Mech block.moss.name = Mech
block.shrubs.name = Krzewy block.shrubs.name = Krzewy
block.spore-moss.name = Mech Zarodnikowy block.spore-moss.name = Mech Zarodnikowy
block.shale-wall.name = Ściana Z Łupku block.shale-wall.name = Ściana z Łupku
block.scrap-wall.name = Ściana ze Złomu block.scrap-wall.name = Ściana ze Złomu
block.scrap-wall-large.name = Duża Ściana ze Złomu block.scrap-wall-large.name = Duża Ściana ze Złomu
block.scrap-wall-huge.name = Ogromna Ściana ze Złomu block.scrap-wall-huge.name = Ogromna Ściana ze Złomu
@@ -1102,7 +1118,7 @@ block.spore-cluster.name = Skupisko Zarodników
block.metal-floor.name = Metalowa Podłoga block.metal-floor.name = Metalowa Podłoga
block.metal-floor-2.name = Metalowa Podłoga 2 block.metal-floor-2.name = Metalowa Podłoga 2
block.metal-floor-3.name = Metalowa Podłoga 3 block.metal-floor-3.name = Metalowa Podłoga 3
block.metal-floor-5.name = Metalowa Podłoga 5 block.metal-floor-5.name = Metalowa Podłoga 4
block.metal-floor-damaged.name = Uszkodzona Metalowa Podłoga block.metal-floor-damaged.name = Uszkodzona Metalowa Podłoga
block.dark-panel-1.name = Ciemny Panel 1 block.dark-panel-1.name = Ciemny Panel 1
block.dark-panel-2.name = Ciemny Panel 2 block.dark-panel-2.name = Ciemny Panel 2
@@ -1113,7 +1129,7 @@ block.dark-panel-6.name = Ciemny Panel 6
block.dark-metal.name = Ciemny Metal block.dark-metal.name = Ciemny Metal
block.basalt.name = Bazalt block.basalt.name = Bazalt
block.hotrock.name = Gorący Kamień block.hotrock.name = Gorący Kamień
block.magmarock.name = Skała magmowa block.magmarock.name = Skała Magmowa
block.copper-wall.name = Miedziana Ściana block.copper-wall.name = Miedziana Ściana
block.copper-wall-large.name = Duża Miedziana Ściana block.copper-wall-large.name = Duża Miedziana Ściana
block.titanium-wall.name = Tytanowa Ściana block.titanium-wall.name = Tytanowa Ściana
@@ -1241,12 +1257,12 @@ block.overdrive-dome.name = Kopuła Pola Overdrive
block.block-forge.name = Piec Bloków block.block-forge.name = Piec Bloków
block.block-loader.name = Ładownik Bloków block.block-loader.name = Ładownik Bloków
block.block-unloader.name = Opróżniacz Bloków block.block-unloader.name = Opróżniacz Bloków
block.interplanetary-accelerator.name = Przspieszacz Międzyplanetarny block.interplanetary-accelerator.name = Przyspieszacz Międzyplanetarny
block.switch.name = Przełącznik block.switch.name = Przełącznik
block.micro-processor.name = Micro Procesor block.micro-processor.name = Mikroprocesor
block.logic-processor.name = Logiczny Procesor block.logic-processor.name = Procesor Logiczny
block.hyper-processor.name = Hyper Procesor block.hyper-processor.name = Hiperprocesor
block.logic-display.name = Wyświetlacz Logiczny block.logic-display.name = Wyświetlacz Logiczny
block.large-logic-display.name = Duży Wyświetlacz Logiczny block.large-logic-display.name = Duży Wyświetlacz Logiczny
block.memory-cell.name = Komórka Pamięci block.memory-cell.name = Komórka Pamięci
@@ -1262,12 +1278,12 @@ team.purple.name = fioletowy
hint.skip = Pomiń hint.skip = Pomiń
hint.desktopMove = Użyj [accent][[WASD][] by się poruszać. hint.desktopMove = Użyj [accent][[WASD][] by się poruszać.
hint.zoom = [accent]Przewiń[] by przybliżać lub oddlać obraz. hint.zoom = [accent]Użyj[] by przybliżać lub oddalać obraz.
hint.mine = Zbliż się do \uf8c4 rudy miedzi i [accent]kliknij[] by kopać manualnie. hint.mine = Zbliż się do \uf8c4 rudy miedzi i [accent]kliknij[] by kopać manualnie.
hint.desktopShoot = Kliknij [accent][[Lewy przycisk myszy][] by strzelać. hint.desktopShoot = Kliknij [accent][[Lewy przycisk myszy][] by strzelać.
hint.depositItems = By przenosić przedmoty, przeciągij je ze swojego statku do rdzenia. hint.depositItems = By przenosić przedmoty, przeciągij je ze swojego statku do rdzenia.
hint.respawn = By się odrodzić jako statek, kliknij [accent][[V][]. hint.respawn = By się odrodzić jako statek, kliknij [accent][[V][].
hint.respawn.mobile = Przełączyłeś się na inną jednoskę/strukturę. By odrodzić się jako statek, [accent]kliknij w awatar w górnym lewym rogu.[] hint.respawn.mobile = Przełączyłeś się na inną jednoskę/strukturę. By odrodzić się jako statek, [accent]kliknij w awatar w lewym górnym rogu.[]
hint.desktopPause = Naciśnij [accent][[Spację][] by zatrzymać lub wznowić grę. hint.desktopPause = Naciśnij [accent][[Spację][] by zatrzymać lub wznowić grę.
hint.placeDrill = Wybierz \ue85e [accent]Wiertło[] w menu w prawym dolnym rogu, i wybierz wtedy \uf870 [accent]Wiertło[] i kliknij na miedzi by je postawić. hint.placeDrill = Wybierz \ue85e [accent]Wiertło[] w menu w prawym dolnym rogu, i wybierz wtedy \uf870 [accent]Wiertło[] i kliknij na miedzi by je postawić.
hint.placeDrill.mobile = Wybierz zakładkę z \ue85e[accent]Wiertłem[] w menu w prawym dolnym rogu, i wtedy wybierz \uf870 [accent]Wietło[] i kliknij na miedzi by je postawić.\n\nNaciśnij \ue800 [accent]znak potwierdzenia[] w dolnym prawym rogu by potwierdzić. hint.placeDrill.mobile = Wybierz zakładkę z \ue85e[accent]Wiertłem[] w menu w prawym dolnym rogu, i wtedy wybierz \uf870 [accent]Wietło[] i kliknij na miedzi by je postawić.\n\nNaciśnij \ue800 [accent]znak potwierdzenia[] w dolnym prawym rogu by potwierdzić.
@@ -1278,7 +1294,7 @@ hint.breaking = Użyj [accent]Prawego przycisku myszy[] i przeciągnij by zniszc
hint.breaking.mobile = Aktywuj \ue817 [accent]ikonę młota[] w dolnym prawym rogu by zniszczyć bloki.\n\nPrzytrymaj swój palec i przeciągij by wybrać wiele bloków do zniszczenia. hint.breaking.mobile = Aktywuj \ue817 [accent]ikonę młota[] w dolnym prawym rogu by zniszczyć bloki.\n\nPrzytrymaj swój palec i przeciągij by wybrać wiele bloków do zniszczenia.
hint.research = Klikij przycisk \ue875 [accent]Badań[] by odkrwyać nowe technologie. hint.research = Klikij przycisk \ue875 [accent]Badań[] by odkrwyać nowe technologie.
hint.research.mobile = Użyj przycisku \ue875 [accent]Badań[] w \ue88c [accent]Menu[] by odkrywać nowe technologie. hint.research.mobile = Użyj przycisku \ue875 [accent]Badań[] w \ue88c [accent]Menu[] by odkrywać nowe technologie.
hint.unitControl = Przytrzymaj [accent][[Lewy CTRL][] i [accent]kliknij[] by kontrolować sojusznicze jednostki i działka. hint.unitControl = Przytrzymaj [accent][[Lewy CTRL][] i [accent]kliknij[], by kontrolować sojusznicze jednostki i działka.
hint.unitControl.mobile = [accent][Kliknij dwukrotnie[] by kontrolować sojusznicze jednostki i działka. hint.unitControl.mobile = [accent][Kliknij dwukrotnie[] by kontrolować sojusznicze jednostki i działka.
hint.launch = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] wybierając \ue827 [accent]Mapę[] w dolnym prawym rogu. hint.launch = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] wybierając \ue827 [accent]Mapę[] w dolnym prawym rogu.
hint.launch.mobile = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] do pobliskich sektorów klikając w \ue827 [accent]Mape[] w \ue88c [accent]Menu[]. hint.launch.mobile = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] do pobliskich sektorów klikając w \ue827 [accent]Mape[] w \ue88c [accent]Menu[].
@@ -1294,7 +1310,7 @@ hint.payloadDrop = Kliknij [accent]][] by opuścić podniesiony towar.
hint.payloadDrop.mobile = [accent]Kliknij i przytrzymaj[] w puste miejsce by opuścić podniesiony towar. hint.payloadDrop.mobile = [accent]Kliknij i przytrzymaj[] w puste miejsce by opuścić podniesiony towar.
hint.waveFire = [accent]Strumień[] wypełniony wodą będzie gasić pobiskie pożary. hint.waveFire = [accent]Strumień[] wypełniony wodą będzie gasić pobiskie pożary.
hint.generator = \uf879 [accent]Generatory Spalinowe[] spalają węgiel i przekazują moc do pobliskich bloków.\n\nMożesz powiększyć odległość transmitowanej mocy używająć \uf87f [accent]Węzły Prądu[]. hint.generator = \uf879 [accent]Generatory Spalinowe[] spalają węgiel i przekazują moc do pobliskich bloków.\n\nMożesz powiększyć odległość transmitowanej mocy używająć \uf87f [accent]Węzły Prądu[].
hint.guardian = Jednostki [accent]Strażnicze[] są uzbrojone. Słaba amunicja - taka jak [accent]Miedź[] oraz [accent]Ołów[] [scarlet]nie jest efektywna[].\n\nUżyj lepszych działek takich jak \uf835 [accent]Naładowane Grafitem[] \uf861Duo/\uf859Salwa by pozbyć się strażników. hint.guardian = Jednostki [accent]Strażnicze[] są uzbrojone. Słaba amunicja - taka jak [accent]Miedź[] czy [accent]Ołów[] [scarlet]nie jest efektywna[].\n\nUżyj lepszych działek takich jak \uf835 [accent]Naładowane Grafitem[] \uf861Duo/\uf859Salwa by pozbyć się strażników.
hint.coreUpgrade = Rdzenie mogą być ulepszone poprzez [accent]płożenie na nich rdzeń wyższego poziomu[].\n\nPołóż  rdzeń [accent]Fundacji[] na  rdzeń:[accent]Odłamek[] core. Żadna przeszkoda ani blok nie może stać na miejscu rdzenia. hint.coreUpgrade = Rdzenie mogą być ulepszone poprzez [accent]płożenie na nich rdzeń wyższego poziomu[].\n\nPołóż  rdzeń [accent]Fundacji[] na  rdzeń:[accent]Odłamek[] core. Żadna przeszkoda ani blok nie może stać na miejscu rdzenia.
hint.presetLaunch = Szare [accent]sektory[], takie jak [accent]Zamrożony Las[], to sektory do których możesz dotrzeć z każdego miejsca. Nie wymagają podbicia pobliskiego terenu.\n\n[accent]Ponumerowane sektory[], takie jak ten, [accent]są dodatkowe[]. hint.presetLaunch = Szare [accent]sektory[], takie jak [accent]Zamrożony Las[], to sektory do których możesz dotrzeć z każdego miejsca. Nie wymagają podbicia pobliskiego terenu.\n\n[accent]Ponumerowane sektory[], takie jak ten, [accent]są dodatkowe[].
hint.coreIncinerate = Jak rdzeń zostanie w pełni wypełniony danym przedmiotem, reszta przedmiotów tego typu zostanie [accent]spalona[]. hint.coreIncinerate = Jak rdzeń zostanie w pełni wypełniony danym przedmiotem, reszta przedmiotów tego typu zostanie [accent]spalona[].
@@ -1303,7 +1319,7 @@ hint.coopCampaign = Gdy grasz [accent]kooperacyjną kampanię[], przedmioty któ
item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji. item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji.
item.copper.details = Miedź. Nienormalnie obfity metal na Serpulo. Strukturalnie słaba, chyba że zostanie wzmocniona. item.copper.details = Miedź. Nienormalnie obfity metal na Serpulo. Strukturalnie słaba, chyba że zostanie wzmocniona.
item.lead.description = Podstawowy materiał. Używany w przesyle przemiotów i płynów. Nie jest on przypadkiem szkodliwy? item.lead.description = Podstawowy materiał. Używany w przesyle przemiotów i płynów. Nie jest on przypadkiem szkodliwy?
item.lead.details = Gęsty. Obojętny. Intensywnie używany w bateriach. \nUwaga: prawdopodobnie toksyczny dla biologicznych form życia. Nie żeby zostało tu wiele. item.lead.details = Gęsty. Obojętny. Intensywnie używany w bateriach. \nUwaga: prawdopodobnie toksyczny dla biologicznych form życia... nie żeby zostało ich tu wiele...
item.metaglass.description = Wyjątkowo wytrzymały stop szkła. Szeroko używany w transporcie i przechowywaniu płynów. item.metaglass.description = Wyjątkowo wytrzymały stop szkła. Szeroko używany w transporcie i przechowywaniu płynów.
item.graphite.description = Zmineralizowany węgiel, wykorzystywany do amunicji i izolacji elektrycznej. item.graphite.description = Zmineralizowany węgiel, wykorzystywany do amunicji i izolacji elektrycznej.
item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne. item.sand.description = Zwykły materiał używany pospolicie w przepalaniu, stopach i jako topnik. Dostanie piaskiem po oczach nie jest przyjemne.
@@ -1323,8 +1339,8 @@ item.blast-compound.description = Niestabilny związek używany w materiałach w
item.pyratite.description = Niesamowicie palny związek używany w zbrojeniu. Nielegalny w 9 państwach. item.pyratite.description = Niesamowicie palny związek używany w zbrojeniu. Nielegalny w 9 państwach.
liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów. liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów.
liquid.slag.description = Wiele różnych metali stopionych i zmieszanych razem. Może zostać rozdzielony na jego metale składowe, albo wystrzelony w wrogie jednostki i użyty jako broń. liquid.slag.description = Wiele różnych metali stopionych i zmieszanych razem. Może zostać rozdzielony na jego metale składowe, albo wystrzelony we wrogie jednostki i użyty jako broń.
liquid.oil.description = Używany w do produkcji złożonych materiałów. Może zostać przetworzony na węgiel, lub wystrzelony w wrogów przez wieżyczke. liquid.oil.description = Używany w do produkcji złożonych materiałów. Może zostać przetworzony na węgiel, lub wystrzelony we wrogów przez wieżyczke.
liquid.cryofluid.description = Obojętna, niekorozyjna ciecz utworzona z wody i tytanu. liquid.cryofluid.description = Obojętna, niekorozyjna ciecz utworzona z wody i tytanu.
block.resupply-point.description = Wypełnia pobliskie jednostki amunicją z miedzi. Nie jest kompatybilny z jednostkami, które wykorzystują energię z baterii. block.resupply-point.description = Wypełnia pobliskie jednostki amunicją z miedzi. Nie jest kompatybilny z jednostkami, które wykorzystują energię z baterii.
@@ -1334,7 +1350,7 @@ block.message.description = Przechowuje wiadomość. Wykorzystywane do komunikac
block.graphite-press.description = Kompresuje kawałki węgla w czyste blaszki grafitu. block.graphite-press.description = Kompresuje kawałki węgla w czyste blaszki grafitu.
block.multi-press.description = Ulepszona wersja prasy grafitowej. Używa wody i prądu do kompresowania węgla szybko i efektywnie. block.multi-press.description = Ulepszona wersja prasy grafitowej. Używa wody i prądu do kompresowania węgla szybko i efektywnie.
block.silicon-smelter.description = Redukuje piasek za pomocą wysoce czystego węgla w celu wytworzenia krzemu. block.silicon-smelter.description = Redukuje piasek za pomocą wysoce czystego węgla w celu wytworzenia krzemu.
block.kiln.description = Stapia ołów i piasek na metaszkło. Wymaga małej ilości energii. block.kiln.description = Stapia ołów i piasek na metaszkło.
block.plastanium-compressor.description = Wytwarza plastan z oleju i tytanu. block.plastanium-compressor.description = Wytwarza plastan z oleju i tytanu.
block.phase-weaver.description = Produkuje Włókna Fazowe z radioaktywnego toru i dużych ilości piasku. block.phase-weaver.description = Produkuje Włókna Fazowe z radioaktywnego toru i dużych ilości piasku.
block.alloy-smelter.description = Produkuje stop Elektrum z tytanu, ołowiu, krzemu i miedzi. block.alloy-smelter.description = Produkuje stop Elektrum z tytanu, ołowiu, krzemu i miedzi.
@@ -1350,7 +1366,7 @@ block.incinerator.description = Pozbywa się nadmiaru przedmiotów lub płynu
block.power-void.description = Niszczy całą energię wprowadzoną do tego bloku. Dostępny tylko w trybie sandbox. block.power-void.description = Niszczy całą energię wprowadzoną do tego bloku. Dostępny tylko w trybie sandbox.
block.power-source.description = Wydziela prąd w nieskończoność. Dostępny tylko w trybie sandbox. block.power-source.description = Wydziela prąd w nieskończoność. Dostępny tylko w trybie sandbox.
block.item-source.description = Wydziela przedmioty w nieskończoność. Dostępny tylko w trybie sandbox. block.item-source.description = Wydziela przedmioty w nieskończoność. Dostępny tylko w trybie sandbox.
block.item-void.description = Niszczy wszystkie przedmioty, które idą do tego bloku, który nie wymaga prądu. Dostępny tylko w trybie sandbox. block.item-void.description = Niszczy wszystkie przedmioty, które idą do tego bloku. Nie wymaga prądu. Dostępny tylko w trybie sandbox.
block.liquid-source.description = Wydziela ciecz w nieskończoność. Dostępny tylko w trybie sandbox. block.liquid-source.description = Wydziela ciecz w nieskończoność. Dostępny tylko w trybie sandbox.
block.liquid-void.description = Usuwa każdą ciecz. Dostępny tylko w trybie sandbox. block.liquid-void.description = Usuwa każdą ciecz. Dostępny tylko w trybie sandbox.
block.copper-wall.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia i wieżyczek w pierwszych kilku falach. block.copper-wall.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia i wieżyczek w pierwszych kilku falach.
@@ -1371,10 +1387,10 @@ block.mender.description = Co jakiś czas naprawia bloki w zasięgu. Utrzymuje s
block.mend-projector.description = Ulepszona wersja Naprawiacza. Naprawia bloki w jego otoczeniu.\nMoże wykorzystywać włókno fazowe, aby zwiększyć efektywność budowli. block.mend-projector.description = Ulepszona wersja Naprawiacza. Naprawia bloki w jego otoczeniu.\nMoże wykorzystywać włókno fazowe, aby zwiększyć efektywność budowli.
block.overdrive-projector.description = Zwiększa szybkość budynków w zasięgu takich jak wiertła czy przenośniki. Może wykorzystywać włókno fazowe, aby zwiększyć zasięg i efektywność budowli. block.overdrive-projector.description = Zwiększa szybkość budynków w zasięgu takich jak wiertła czy przenośniki. Może wykorzystywać włókno fazowe, aby zwiększyć zasięg i efektywność budowli.
block.force-projector.description = Wytwarza pole siłowe w kształcie sześciokąta wokół siebie, chroniąc budynki i jednostki wewnątrz od obrażeń zadanych przez pociski. block.force-projector.description = Wytwarza pole siłowe w kształcie sześciokąta wokół siebie, chroniąc budynki i jednostki wewnątrz od obrażeń zadanych przez pociski.
block.shock-mine.description = Zadaje obrażenia jednostkom wroga którzy na nią wejdą. Ledwo widoczne dla wrogów. block.shock-mine.description = Zadaje obrażenia jednostkom wroga, które wejdą na nią. Ledwo widoczne dla wrogów.
block.conveyor.description = Podstawowy blok transportowy dla przedmiotów. Automatycznie przesyła przedmioty naprzód do działek oraz maszyn. Można obrócić. block.conveyor.description = Podstawowy blok transportowy dla przedmiotów. Automatycznie przesyła przedmioty naprzód do działek oraz maszyn. Można obrócić.
block.titanium-conveyor.description = Zaawansowany blok transportowy dla przedmiotów. Przesyła przedmioty szybciej od zwykłego przenośnika. block.titanium-conveyor.description = Zaawansowany blok transportowy dla przedmiotów. Przesyła przedmioty szybciej od zwykłego przenośnika.
block.plastanium-conveyor.description = Przenosi przedmity partiami. Przyjmuje przedmioty z tyłu i rozładowuje je w trzech kierunkach z przodu. Wymaga wielu punktów ładujących i rozładowujących w celu osiągnięcia maksymalnej przepustowości. block.plastanium-conveyor.description = Przenosi przedmioty partiami. Przyjmuje przedmioty z tyłu i rozładowuje je w trzech kierunkach z przodu. Wymaga wielu punktów ładujących i rozładowujących w celu osiągnięcia maksymalnej przepustowości.
block.junction.description = Używany jako most dla dwóch krzyżujących się przenośników. Przydatne w sytuacjach kiedy dwa różne przenośniki transportują różne surowce do różnych miejsc. block.junction.description = Używany jako most dla dwóch krzyżujących się przenośników. Przydatne w sytuacjach kiedy dwa różne przenośniki transportują różne surowce do różnych miejsc.
block.bridge-conveyor.description = Zaawansowany blok transportujący. Pozwala na przenoszenie przedmiotów nawet do 3 bloków na każdym terenie, przez każdy budynek. block.bridge-conveyor.description = Zaawansowany blok transportujący. Pozwala na przenoszenie przedmiotów nawet do 3 bloków na każdym terenie, przez każdy budynek.
block.phase-conveyor.description = Zaawansowany blok transportowy dla przedmiotów. Używa energii do teleportacji przedmiotów do połączonego transportera fazowego na spore odległości. block.phase-conveyor.description = Zaawansowany blok transportowy dla przedmiotów. Używa energii do teleportacji przedmiotów do połączonego transportera fazowego na spore odległości.
@@ -1388,7 +1404,7 @@ block.underflow-gate.description = Odwrotność bramy przepełnieniowej, który
block.mass-driver.description = Najlepszy blok do transportu przedmiotów. Zbiera wiele przedmiotów naraz a potem wystrzeliwuje je do kolejnej katapulty masy na bardzo duże odległości. block.mass-driver.description = Najlepszy blok do transportu przedmiotów. Zbiera wiele przedmiotów naraz a potem wystrzeliwuje je do kolejnej katapulty masy na bardzo duże odległości.
block.mechanical-pump.description = Tania pompa o niskiej wydajności. Nie wymaga prądu. block.mechanical-pump.description = Tania pompa o niskiej wydajności. Nie wymaga prądu.
block.rotary-pump.description = Zaawansowana pompa. Pompuje więcej cieczy, ale wymaga zasilania. block.rotary-pump.description = Zaawansowana pompa. Pompuje więcej cieczy, ale wymaga zasilania.
block.thermal-pump.description = Najlepsza pompa. Pompuje ogromne ilości cieczy, ale wymaga zasilaina. block.thermal-pump.description = Najlepsza pompa. Pompuje ogromne ilości cieczy, ale wymaga zasilania.
block.conduit.description = Podstawowy blok do transportowania cieczy. Używany w połączeniu z pompami i innymi rurami. block.conduit.description = Podstawowy blok do transportowania cieczy. Używany w połączeniu z pompami i innymi rurami.
block.pulse-conduit.description = Zaawansowany blok do transportowania cieczy. Transportuje je szybciej i magazynuje więcej niż standardowe rury. block.pulse-conduit.description = Zaawansowany blok do transportowania cieczy. Transportuje je szybciej i magazynuje więcej niż standardowe rury.
block.plated-conduit.description = Przesyła ciecze z taką samą szybkością co rura tytanowa, ale jest bardziej odporna. Wejściami bocznymi mogą być tylko inne rury.\nWycieka z niej mniej cieczy. block.plated-conduit.description = Przesyła ciecze z taką samą szybkością co rura tytanowa, ale jest bardziej odporna. Wejściami bocznymi mogą być tylko inne rury.\nWycieka z niej mniej cieczy.
@@ -1410,7 +1426,7 @@ block.differential-generator.description = Generuje duże ilości prądu. Wykorz
block.rtg-generator.description = Prosty, niezawodny generator. Wykorzystuje ciepło powstałe z rozpadu izotopów promieniotwórczych. Nie wymaga chłodzenia, ale produkuje mniej energii od reaktora torowego. block.rtg-generator.description = Prosty, niezawodny generator. Wykorzystuje ciepło powstałe z rozpadu izotopów promieniotwórczych. Nie wymaga chłodzenia, ale produkuje mniej energii od reaktora torowego.
block.solar-panel.description = Wytwarza małe ilości prądu wykorzystując energię słoneczną. block.solar-panel.description = Wytwarza małe ilości prądu wykorzystując energię słoneczną.
block.solar-panel-large.description = Wytwarza o wiele więcej prądu niż zwykły panel słoneczny. block.solar-panel-large.description = Wytwarza o wiele więcej prądu niż zwykły panel słoneczny.
block.thorium-reactor.description = Produkuje bardzo duże ilości prądu z wysoce radioaktywnego toru. Wymaga ciągłego chłodzenia. Silnie eksploduje jeśli nie zostanie dostarczona wystarczająca ilość chłodziwa. Produkcja energii zależy od zapełnienia, produkując bazową ilość energii przy całkowitym zapełnieniu. block.thorium-reactor.description = Produkuje bardzo duże ilości prądu z wysoce radioaktywnego toru. Wymaga ciągłego chłodzenia. Silnie eksploduje, jeśli nie zostanie dostarczona wystarczająca ilość chłodziwa. Produkcja energii zależy od zapełnienia, produkując bazową ilość energii przy całkowitym zapełnieniu.
block.impact-reactor.description = Zaawansowany generator, zdolny do produkcji ogromnych ilości prądu u szczytu swoich możliwości. Wymaga znacznych ilości energii do rozpoczęcia procesu. block.impact-reactor.description = Zaawansowany generator, zdolny do produkcji ogromnych ilości prądu u szczytu swoich możliwości. Wymaga znacznych ilości energii do rozpoczęcia procesu.
block.mechanical-drill.description = Tanie wiertło. Kiedy zostanie zbudowane na odpowiednich polach, wydobywa surowce w wolnym tempie. Może wydobywać tylko podstawowe rudy. block.mechanical-drill.description = Tanie wiertło. Kiedy zostanie zbudowane na odpowiednich polach, wydobywa surowce w wolnym tempie. Może wydobywać tylko podstawowe rudy.
block.pneumatic-drill.description = Ulepszone wiertło, zdolne do wydobywania tytanu. Wydobywa w szybszym tempie niż wiertło mechaniczne. block.pneumatic-drill.description = Ulepszone wiertło, zdolne do wydobywania tytanu. Wydobywa w szybszym tempie niż wiertło mechaniczne.
@@ -1426,8 +1442,8 @@ block.core-foundation.description = Druga wersja rdzenia. Lepiej opancerzony. Pr
block.core-foundation.details = Druga generacja. block.core-foundation.details = Druga generacja.
block.core-nucleus.description = Trzecia i ostatnia wersja rdzenia. Bardzo dobrze opancerzony. Przechowuje ogromne ilości surowców. block.core-nucleus.description = Trzecia i ostatnia wersja rdzenia. Bardzo dobrze opancerzony. Przechowuje ogromne ilości surowców.
block.core-nucleus.details = Trzecia i ostatnia generacja. block.core-nucleus.details = Trzecia i ostatnia generacja.
block.vault.description = Przechowuje duże ilości przedmiotów każdego rodzaju. Użyj ekstraktora, aby rozładować magazyn. block.vault.description = Przechowuje duże ilości przedmiotów każdego rodzaju. Zawartość magazynu można wyciągnąć za pomocą ekstraktorów.
block.container.description = Przechowuje małe ilości przedmiotów każdego rodzaju. Użyj ekstraktora, aby rozładować kontener. block.container.description = Przechowuje małe ilości przedmiotów każdego rodzaju. Zawartość kontenera można wyciągnąć za pomocą ekstraktorów.
block.unloader.description = Wyciąga przedmioty z przyległych bloków. Typ przedmiotu jaki zostanie wyciągniety może zostać zmieniony poprzez kliknięcie. block.unloader.description = Wyciąga przedmioty z przyległych bloków. Typ przedmiotu jaki zostanie wyciągniety może zostać zmieniony poprzez kliknięcie.
block.launch-pad.description = Wysyła pakiety przedmiotów bez potrzeby wystrzeliwania rdżenia. block.launch-pad.description = Wysyła pakiety przedmiotów bez potrzeby wystrzeliwania rdżenia.
block.duo.description = Mała, tania wieża. Przydatna przeciwko jednostkom naziemnym. block.duo.description = Mała, tania wieża. Przydatna przeciwko jednostkom naziemnym.
@@ -1447,13 +1463,13 @@ block.meltdown.description = Duże działo laserowe, które strzela potężnymi
block.foreshadow.description = Strzela potężnym pociskiem z daleka we wrogów. block.foreshadow.description = Strzela potężnym pociskiem z daleka we wrogów.
block.repair-point.description = Bez przerw naprawia najbliższą uszkodzoną jednostkę w jego zasięgu. block.repair-point.description = Bez przerw naprawia najbliższą uszkodzoną jednostkę w jego zasięgu.
block.segment.description = Uszkadza i niszczy wrogie pociskiski poza laserami. block.segment.description = Uszkadza i niszczy wrogie pociskiski poza laserami.
block.parallax.description = Wykorzystuje laser, który przyciąga do siebie wrogów, zadając im obrażenia. block.parallax.description = Wykorzystuje laser przyciągający do siebie wrogów, zadając im obrażenia.
block.tsunami.description = Strzela wielkim strumieniem cieczy we wrogów. Automatycznie gasi ogień, gdy jest podłączony do wody. block.tsunami.description = Strzela wielkim strumieniem cieczy we wrogów. Automatycznie gasi ogień, gdy jest podłączony do wody.
block.silicon-crucible.description = Oczyszcza krzem z węgla i piasku wykorzystując piratian. Bardziej efektywny w gorących miejscach. block.silicon-crucible.description = Oczyszcza krzem z węgla i piasku wykorzystując piratian. Bardziej efektywny w gorących miejscach.
block.disassembler.description = Oddziela egzotyczne materiały z mieszaniny jaką jest żużel z małą efektywnością. Może wyprodukować tor. block.disassembler.description = Oddziela egzotyczne materiały z mieszaniny jaką jest żużel z małą efektywnością. Może wyprodukować tor.
block.overdrive-dome.description = Zwiększa szybkość budynków w zasięgu. Wymaga włókna fazowego oraz krzemu by działać. block.overdrive-dome.description = Zwiększa szybkość budynków w zasięgu. Wymaga włókna fazowego oraz krzemu by działać.
block.payload-conveyor.description = Przenosi duże ładunki, takie jak jednostki z fabryk. block.payload-conveyor.description = Przenosi duże ładunki, takie jak jednostki z fabryk.
block.payload-router.description = Dzieli wejście z przewoźnika masowego i dzieli je w 3 różne strony. block.payload-router.description = Dzieli wejście z przenośnika masowego w 3 różne strony.
block.command-center.description = Kontroluje zachowanie jednostek paroma różnymi komendami. block.command-center.description = Kontroluje zachowanie jednostek paroma różnymi komendami.
block.ground-factory.description = Produkuje jednostki naziemne. Jednostki mogą być do razu wykorzystane lub przeniesone do rekonstrukota by je ulepszyć. block.ground-factory.description = Produkuje jednostki naziemne. Jednostki mogą być do razu wykorzystane lub przeniesone do rekonstrukota by je ulepszyć.
block.air-factory.description = Produkuje jednostki powietrzne. Jednostki mogą być do razu wykorzystane lub przeniesone do rekonstrukota by je ulepszyć. block.air-factory.description = Produkuje jednostki powietrzne. Jednostki mogą być do razu wykorzystane lub przeniesone do rekonstrukota by je ulepszyć.
@@ -1461,11 +1477,11 @@ block.naval-factory.description = Produkuje jednostki morskie. Jednostki mogą b
block.additive-reconstructor.description = Ulepsza wsadzone jednostki do stopnia drugiego. block.additive-reconstructor.description = Ulepsza wsadzone jednostki do stopnia drugiego.
block.multiplicative-reconstructor.description = Ulepsza wsadzone jednostki do stopnia trzeciego. block.multiplicative-reconstructor.description = Ulepsza wsadzone jednostki do stopnia trzeciego.
block.exponential-reconstructor.description = Ulepsza wsadzone jednostki do stopnia czwartego. block.exponential-reconstructor.description = Ulepsza wsadzone jednostki do stopnia czwartego.
block.tetrative-reconstructor.description = Ulepsza wsadzone jednostki do stopnia piątego i ostatniego. block.tetrative-reconstructor.description = Ulepsza wsadzone jednostki do piątego, ostatniego stopnia.
block.switch.description = Jest Przełączalny. Stan jego może być odczytywany lub kontrolowany przez procesory. block.switch.description = Jest przełączalny. Stan jego może być odczytywany lub kontrolowany przez procesory.
block.micro-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. block.micro-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek.
block.logic-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. Szybszy niż mikroprocesor. block.logic-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. Szybszy niż mikroprocesor.
block.hyper-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. Szybszy niż logiczny procesor. block.hyper-processor.description = Uruchamia sekwencję instrukcji logicznych w pętli. Może być wykorzystany do kontroli bloków lub jednostek. Szybszy niż procesor logiczny.
block.memory-cell.description = Przechowuje informacje dla procesora. block.memory-cell.description = Przechowuje informacje dla procesora.
block.memory-bank.description = Przechowuje informacje dla procesora. Duża pojemność. block.memory-bank.description = Przechowuje informacje dla procesora. Duża pojemność.
block.logic-display.description = Wyświetla obraz z procesora. block.logic-display.description = Wyświetla obraz z procesora.
@@ -1479,23 +1495,23 @@ unit.scepter.description = Strzela salwą naładowanych pocisków we wszystkich
unit.reign.description = Strzela salwą masywnych przebijających pocisków we wszystkich przeciwników. unit.reign.description = Strzela salwą masywnych przebijających pocisków we wszystkich przeciwników.
unit.nova.description = Wystrzeliwuje pioruny, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać. unit.nova.description = Wystrzeliwuje pioruny, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać.
unit.pulsar.description = Wystrzeliwuje elektryczne pioruny, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać. unit.pulsar.description = Wystrzeliwuje elektryczne pioruny, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać.
unit.quasar.description = Wystrzeliwuje wiązki laserowe, które uszkadzają przeciwników i leczą sojusznicze struktury. Może latać. Posiada tarcze. unit.quasar.description = Wystrzeliwuje przeszywającą wiązkę laserową, uszkadzają przeciwników i leczą sojusznicze struktury. Może latać. Posiada tarcze.
unit.vela.description = Wystrzeliwuje masywny ciągły laser, który uszkadza przeciwników i leczy sojusznicze struktury. Może latać. unit.vela.description = Wystrzeliwuje masywny ciągły laser, który uszkadza przeciwników i leczy sojusznicze struktury. Może latać.
unit.corvus.description = Wystrzeliwuje masywny laserowy błysk, który uszkadza przeciwników i leczy sojusznicze struktury. Może przejść po większości terenu. unit.corvus.description = Wystrzeliwuje masywną ciągłą wiązkę laserową, która uszkadza przeciwników i leczy sojusznicze struktury. Może przejść po większości terenu.
unit.crawler.description = Wbiega w przeciwników i dokonuje samozniszczenia powodując dużą eksplozje. unit.crawler.description = Wbiega w przeciwników i dokonuje samozniszczenia powodując dużą eksplozje.
unit.atrax.description = Wystrzeliwuje wyniszczające kule żużlu w cele na ziemi. Może przejść po większości terenu. unit.atrax.description = Wystrzeliwuje wyniszczające kule żużlu w cele na ziemi. Może przejść po większości terenu.
unit.spiroct.description = Strzela wyczerpującymi życie laserami we wrogów, naprawiając siebie. Może przejść po większości terenu. unit.spiroct.description = Strzela wyczerpującymi życie laserami we wrogów, naprawiając siebie. Może przejść po większości terenu.
unit.arkyid.description = Strzela dużymi wyczerpującymi życie laserami we wrogów, naprawiając siebie. Może przejść po większości terenu. unit.arkyid.description = Strzela dużymi wyczerpującymi życie laserami we wrogów, naprawiając siebie. Może przejść po większości terenu.
unit.toxopid.description = Strzela wielkimi elektrycznymi skupionymi kulami i przebijającymi laserami we wrogów. Może przejść po większości terenu. unit.toxopid.description = Strzela wielkimi elektrycznymi skupionymi kulami i przebijającymi laserami we wrogów. Może przejść po większości terenu.
unit.flare.description = Strzela standardowymi pociskami we jednostki naziemne. unit.flare.description = Strzela standardowymi pociskami we jednostki naziemne.
unit.horizon.description = Upuszcza stos bomb na jednostki naziemne. unit.horizon.description = Upuszcza serię bomb na jednostki naziemne.
unit.zenith.description = Strzela salwą rakiet w każdego pobliskiego wroga. unit.zenith.description = Strzela salwą rakiet w każdego pobliskiego wroga.
unit.antumbra.description = Strzela zaporą rakiet w każdego pobliskiego wroga. unit.antumbra.description = Strzela zaporą rakiet w każdego pobliskiego wroga.
unit.eclipse.description = Strzela dwoma przebijającymi laserami i pociskami przeciwlotniczymi we wrogów. unit.eclipse.description = Strzela dwoma przebijającymi laserami i pociskami przeciwlotniczymi we wrogów.
unit.mono.description = Automatycznie wykopuje miedź i ołów i odkłada je do rdzenia. unit.mono.description = Automatycznie wykopuje miedź i ołów i odkłada je do rdzenia.
unit.poly.description = Automatycznie naprawia zniszczone struktury i asystuje w budowie. unit.poly.description = Automatycznie naprawia zniszczone struktury i asystuje w budowie.
unit.mega.description = Automatycznie naprawia zniszczone struktury. Może podnosić małe jednostki i bloki. unit.mega.description = Automatycznie naprawia zniszczone struktury. Może podnosić małe jednostki i bloki.
unit.quad.description = Upuszcza wielkie bomby na cele na ziemi, które uszkadzają przeciwników i leczą sojusznicze struktury. Może podnosić jednostki naziemne średniej wielkości. unit.quad.description = Upuszcza wielkie bomby na cele naziemne, uszkadzając przeciwników i lecząc sojusznicze struktury. Może podnosić jednostki naziemne średniej wielkości.
unit.oct.description = Broni wszystkie jednostki tarczą regeneracyjną. Może podnosić większość jednostek naziemnych. unit.oct.description = Broni wszystkie jednostki tarczą regeneracyjną. Może podnosić większość jednostek naziemnych.
unit.risso.description = Strzela sporą ilością pocisków i rakiet w najbliższych przeciwników. unit.risso.description = Strzela sporą ilością pocisków i rakiet w najbliższych przeciwników.
unit.minke.description = Strzela granatami i standardowymi pociskami w najbliższych przeciwników. unit.minke.description = Strzela granatami i standardowymi pociskami w najbliższych przeciwników.
@@ -1505,3 +1521,146 @@ unit.omura.description = Strzela przebijającym superszybkim pociskiem we wrogó
unit.alpha.description = Chroni Rdzeń: Odłamek przed wrogami. Buduje struktury. unit.alpha.description = Chroni Rdzeń: Odłamek przed wrogami. Buduje struktury.
unit.beta.description = Chroni Rdzeń: Podstawa przed wrogami. Buduje struktury. unit.beta.description = Chroni Rdzeń: Podstawa przed wrogami. Buduje struktury.
unit.gamma.description = Chroni Rdzeń: Jądro przed wrogami. Buduje struktury. unit.gamma.description = Chroni Rdzeń: Jądro przed wrogami. Buduje struktury.
lst.read = Read a number from a linked memory cell.
lst.write = Write a number to a linked memory cell.
lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used.
lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used.
lst.drawflush = Flush queued [accent]Draw[] operations to a display.
lst.printflush = Flush queued [accent]Print[] operations to a message block.
lst.getlink = Get a processor link by index. Starts at 0.
lst.control = Control a building.
lst.radar = Locate units around a building with range.
lst.sensor = Get data from a building or unit.
lst.set = Set a variable.
lst.operation = Perform an operation on 1-2 variables.
lst.end = Jump to the top of the instruction stack.
lst.jump = Conditionally jump to another statement.
lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[].
lst.unitcontrol = Control the currently bound unit.
lst.unitradar = Locate units around the currently bound unit.
lst.unitlocate = Locate a specific type of position/building anywhere on the map.\nRequires a bound unit.
logic.nounitbuild = [red]Unit building logic is not allowed here.
lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string.
lenum.shoot = Shoot at a position.
lenum.shootp = Shoot at a unit/building with velocity prediction.
lenum.configure = Building configuration, e.g. sorter item.
lenum.enabled = Whether the block is enabled.
laccess.color = Illuminator color.
laccess.controller = Unit controller. If processor controlled, returns processor.\nIf in a formation, returns leader.\nOtherwise, returns the unit itself.
laccess.dead = Whether a unit/building is dead or no longer valid.
laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0.
laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead.
graphicstype.clear = Fill the display with a color.
graphicstype.color = Set color for next drawing operations.
graphicstype.stroke = Set line width.
graphicstype.line = Draw line segment.
graphicstype.rect = Fill a rectangle.
graphicstype.linerect = Draw a rectangle outline.
graphicstype.poly = Fill a regular polygon.
graphicstype.linepoly = Draw a regular polygon outline.
graphicstype.triangle = Fill a triangle.
graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[].
lenum.always = Always true.
lenum.idiv = Integer division.
lenum.div = Division.\nReturns [accent]null[] on divide-by-zero.
lenum.mod = Modulo.
lenum.equal = Equal. Coerces types.\nNon-null objects compared with numbers become 1, otherwise 0.
lenum.notequal = Not equal. Coerces types.
lenum.strictequal = Strict equality. Does not coerce types.\nCan be used to check for [accent]null[].
lenum.shl = Bit-shift left.
lenum.shr = Bit-shift right.
lenum.or = Bitwise OR.
lenum.land = Logical AND.
lenum.and = Bitwise AND.
lenum.not = Bitwise flip.
lenum.xor = Bitwise XOR.
lenum.min = Minimum of two numbers.
lenum.max = Maximum of two numbers.
lenum.angle = Angle of vector in degrees.
lenum.len = Length of vector.
lenum.sin = Sine, in degrees.
lenum.cos = Cosine, in degrees.
lenum.tan = Tangent, in degrees.
#not a typo, look up 'range notation'
lenum.rand = Random decimal in range [0, value).
lenum.log = Natural logarithm (ln).
lenum.log10 = Base 10 logarithm.
lenum.noise = 2D simplex noise.
lenum.abs = Absolute value.
lenum.sqrt = Square root.
lenum.any = Any unit.
lenum.ally = Ally unit.
lenum.attacker = Unit with a weapon.
lenum.enemy = Enemy unit.
lenum.boss = Guardian unit.
lenum.flying = Flying unit.
lenum.ground = Ground unit.
lenum.player = Unit controlled by a player.
lenum.ore = Ore deposit.
lenum.damaged = Damaged ally building.
lenum.spawn = Enemy spawn point.\nMay be a core or a position.
lenum.building = Building in a specific group.
lenum.core = Any core.
lenum.storage = Storage building, e.g. Vault.
lenum.generator = Buildings that generate power.
lenum.factory = Buildings that transform resources.
lenum.repair = Repair points.
lenum.rally = Command center.
lenum.battery = Any battery.
lenum.resupply = Resupply points.\nOnly relevant when [accent]"Unit Ammo"[] is enabled.
lenum.reactor = Impact/Thorium reactor.
lenum.turret = Any turret.
sensor.in = The building/unit to sense.
radar.from = Building to sense from.\nSensor range is limited by building range.
radar.target = Filter for units to sense.
radar.and = Additional filters.
radar.order = Sorting order. 0 to reverse.
radar.sort = Metric to sort results by.
radar.output = Variable to write output unit to.
unitradar.target = Filter for units to sense.
unitradar.and = Additional filters.
unitradar.order = Sorting order. 0 to reverse.
unitradar.sort = Metric to sort results by.
unitradar.output = Variable to write output unit to.
control.of = Building to control.
control.unit = Unit/building to aim at.
control.shoot = Whether to shoot.
unitlocate.enemy = Whether to locate enemy buildings.
unitlocate.found = Whether the object was found.
unitlocate.building = Output variable for located building.
unitlocate.outx = Output X coordinate.
unitlocate.outy = Output Y coordinate.
unitlocate.group = Building group to look for.
lenum.idle = Don't move, but keep building/mining.\nThe default state.
lenum.stop = Stop moving/mining/building.
lenum.move = Move to exact position.
lenum.approach = Approach a position with a radius.
lenum.pathfind = Pathfind to the enemy spawn.
lenum.target = Shoot a position.
lenum.targetp = Shoot a target with velocity prediction.
lenum.itemdrop = Drop an item.
lenum.itemtake = Take an item from a building.
lenum.paydrop = Drop current payload.
lenum.paytake = Pick up payload at current location.
lenum.flag = Numeric unit flag.
lenum.mine = Mine at a position.
lenum.build = Build a structure.
lenum.getblock = Fetch a building and type at coordinates.\nUnit must be in range of position.\nSolid non-buildings will have the type [accent]@solid[].
lenum.within = Check if unit is near a position.
lenum.boost = Start/stop boosting.

View File

@@ -126,6 +126,7 @@ mod.installed = [[Instalat]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Activat mod.enabled = [lightgray]Activat
mod.disabled = [scarlet]Dezactivat mod.disabled = [scarlet]Dezactivat
mod.multiplayer.compatible = [gray]Compatibil cu Multiplayer
mod.disable = Dezactivează mod.disable = Dezactivează
mod.content = Conținut: mod.content = Conținut:
mod.delete.error = Nu s-a putut șterge modul. Fișierul ar putea fi în uz. mod.delete.error = Nu s-a putut șterge modul. Fișierul ar putea fi în uz.
@@ -439,7 +440,7 @@ editor.exists = Există deja o hartă cu același nume.
editor.selectmap = Selectează o hartă de încărcat: editor.selectmap = Selectează o hartă de încărcat:
toolmode.replace = Înlocuiește toolmode.replace = Înlocuiește
toolmode.replace.description = Desenează doar pe blocurile solide. toolmode.replace.description = Desenează doar peste blocurile solide.
toolmode.replaceall = Înlocuiește-le pe toate toolmode.replaceall = Înlocuiește-le pe toate
toolmode.replaceall.description = Înlocuiește toate blocurile solide de pe hartă. toolmode.replaceall.description = Înlocuiește toate blocurile solide de pe hartă.
toolmode.orthogonal = Ortogonal toolmode.orthogonal = Ortogonal
@@ -449,7 +450,7 @@ toolmode.square.description = Pensulă pătrată.
toolmode.eraseores = Șterge Minereurile toolmode.eraseores = Șterge Minereurile
toolmode.eraseores.description = Șterge doar minereurile. toolmode.eraseores.description = Șterge doar minereurile.
toolmode.fillteams = Umplere Echipe toolmode.fillteams = Umplere Echipe
toolmode.fillteams.description = Umple hartă cu echipe în loc de blocuri. toolmode.fillteams.description = Umple harta cu echipe în loc de blocuri.
toolmode.drawteams = Desenează Echipe toolmode.drawteams = Desenează Echipe
toolmode.drawteams.description = Desenează echipe în loc de blocuri. toolmode.drawteams.description = Desenează echipe în loc de blocuri.
@@ -619,6 +620,19 @@ sector.extractionOutpost.description = Un avanpost izolat, construit de inamic c
sector.impact0078.description = Aici se află rămășițele primei nave de transport interstelar care a intrat în acest sistem stelar.\n\nSalvează cât de mult posibil din epavă. Cercetează orice tehnologie intactă. sector.impact0078.description = Aici se află rămășițele primei nave de transport interstelar care a intrat în acest sistem stelar.\n\nSalvează cât de mult posibil din epavă. Cercetează orice tehnologie intactă.
sector.planetaryTerminal.description = Ținta finală.\n\nAceastă bază de coastă conține o structură capabilă să lanseze nuclee către alte planete locale. Este extrem de bine păzită.\n\nProdu unități navale. Elimină inamicul cât de rapid se poate. Cercetează structura de lansare. sector.planetaryTerminal.description = Ținta finală.\n\nAceastă bază de coastă conține o structură capabilă să lanseze nuclee către alte planete locale. Este extrem de bine păzită.\n\nProdu unități navale. Elimină inamicul cât de rapid se poate. Cercetează structura de lansare.
status.burning.name = Arde
status.freezing.name = Îngheață
status.wet.name = Umed
status.muddy.name = Noroios
status.melting.name = Topește
status.sapped.name = Slăbește
status.spore-slowed.name = Împiedicat de Spori
status.tarred.name = Păcurit
status.overclock.name = Suprasolicitat
status.shocked.name = Șoc
status.blasted.name = Explozie
status.unmoving.name = Nemișcat
settings.language = Limbă settings.language = Limbă
settings.data = Datele Jocului settings.data = Datele Jocului
settings.reset = Resetează settings.reset = Resetează
@@ -652,9 +666,10 @@ block.unknown = [lightgray]???
stat.description = Utilizare stat.description = Utilizare
stat.input = Necesită stat.input = Necesită
stat.output = Produce stat.output = Produce
stat.opposites = Opuși
stat.booster = Îmbunătățiri stat.booster = Îmbunătățiri
stat.tiles = Teren Necesar stat.tiles = Teren Necesar
stat.affinities = Efecte Teren stat.affinities = Afinități
stat.powercapacity = Capacitate electrică stat.powercapacity = Capacitate electrică
stat.powershot = Electricitate/Glonț stat.powershot = Electricitate/Glonț
stat.damage = Forță stat.damage = Forță
@@ -716,12 +731,18 @@ stat.abilities = Abilități
stat.canboost = Are Propulsor stat.canboost = Are Propulsor
stat.flying = Zboară stat.flying = Zboară
stat.ammouse = Consum muniție stat.ammouse = Consum muniție
stat.damagemultiplier = Multiplicator Forță
stat.healthmultiplier = Multiplicator Viață
stat.speedmultiplier = Multiplicator Viteză
stat.reloadmultiplier = Multiplicator Lovituri/sec
stat.buildspeedmultiplier = Multiplicator Viteză Construcție
stat.reactive = Reacționează la
ability.forcefield = Câmp de Forță ability.forcefield = Câmp de Forță
ability.repairfield = Câmp de Reparare ability.repairfield = Câmp de Reparare
ability.statusfield = Câmp Suprasolicitare Unități ability.statusfield = Câmp Suprasolicitare Unități
ability.unitspawn = Fabrică de {0} ability.unitspawn = Fabrică de {0}
ability.shieldregenfield = Scurt Regenerabil ability.shieldregenfield = Scut Regenerabil
ability.movelightning = Mișcare Fulger ability.movelightning = Mișcare Fulger
bar.drilltierreq = Burghiu Mai Bun Necesar bar.drilltierreq = Burghiu Mai Bun Necesar
@@ -749,19 +770,16 @@ bar.output = Produce
units.processorcontrol = [lightgray]Controlat de Procesor units.processorcontrol = [lightgray]Controlat de Procesor
bullet.damage = [stat]{0}[lightgray] forță bullet.damage = [stat]{0}[lightgray] forță
bullet.splashdamage = [stat]{0}[lightgray] forță explozivă ~[stat] {1}[lightgray] pătrate bullet.splashdamage = [stat]{0}[lightgray] forță pe raza ~[stat] {1}[lightgray] pătrate
bullet.incendiary = [stat]incendiar bullet.incendiary = [stat]incendiar
bullet.sapping = [stat]atragere inamici
bullet.homing = [stat]cu radar bullet.homing = [stat]cu radar
bullet.shock = [stat]șoc bullet.frag = [stat]se sparge
bullet.frag = [stat]fragil bullet.lightning = [stat]{0}[lightgray]x fulgere ~ [stat]{1}[lightgray] forță
bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire bullet.buildingdamage = [stat]{0}%[lightgray] forță/clădire
bullet.knockback = [stat]{0} [lightgray]împingere bullet.knockback = [stat]{0} [lightgray]împingere
bullet.pierce = [stat]{0}[lightgray]x penetrare bullet.pierce = [stat]{0}[lightgray]x penetrează
bullet.infinitepierce = [stat]penetrare bullet.infinitepierce = [stat]penetrează
bullet.healpercent = [stat]{0}[lightgray]% reparare bullet.healpercent = [stat]{0}[lightgray]% reparare
bullet.freezing = [stat]înghețat
bullet.tarred = [stat]lipicios
bullet.multiplier = [stat]{0}[lightgray]x multiplicator muniție bullet.multiplier = [stat]{0}[lightgray]x multiplicator muniție
bullet.reload = [stat]{0}[lightgray]x lovituri bullet.reload = [stat]{0}[lightgray]x lovituri
@@ -923,6 +941,7 @@ keybind.pause_building.name = Pauză/Reia Construit
keybind.minimap.name = Minihartă keybind.minimap.name = Minihartă
keybind.planet_map.name = Harta Planetei keybind.planet_map.name = Harta Planetei
keybind.research.name = Cercetare keybind.research.name = Cercetare
keybind.block_info.name = Informațiile Blocului
keybind.chat.name = Chat keybind.chat.name = Chat
keybind.player_list.name = Listă Jucători keybind.player_list.name = Listă Jucători
keybind.console.name = Consolă keybind.console.name = Consolă
@@ -991,6 +1010,7 @@ content.item.name = Materiale
content.liquid.name = Lichide content.liquid.name = Lichide
content.unit.name = Unități content.unit.name = Unități
content.block.name = Blocuri content.block.name = Blocuri
content.status.name = Efecte de Status
content.sector.name = Sectoare content.sector.name = Sectoare
item.copper.name = Cupru item.copper.name = Cupru
@@ -1339,7 +1359,7 @@ item.pyratite.description = Folosită în armele incendiare și generatoarele pe
liquid.water.description = Folosită pt răcirea mașinăriilor și procesarea deșeurilor. liquid.water.description = Folosită pt răcirea mașinăriilor și procesarea deșeurilor.
liquid.slag.description = Rafinată în separatoare înapoi în materialele constituente, sau pulverizată înspre unitățile inamice ca armă. liquid.slag.description = Rafinată în separatoare înapoi în materialele constituente, sau pulverizată înspre unitățile inamice ca armă.
liquid.oil.description = Folosit în producerea avansată de materialet și ca muniție incendiară. liquid.oil.description = Folosit în producerea avansată de materiale și ca muniție incendiară.
liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici. liquid.cryofluid.description = Folosit ca răcitor în reactoare, arme și fabrici.
block.resupply-point.description = Realimentează unitățile din apropiere cu muniție de cupru. Nu este compatibil cu unitățile care se încarcă din baterii. block.resupply-point.description = Realimentează unitățile din apropiere cu muniție de cupru. Nu este compatibil cu unitățile care se încarcă din baterii.
@@ -1459,7 +1479,7 @@ block.ripple.description = Lovește cu capsule către inamici pe distanțe mari.
block.cyclone.description = Trage cu grămezi explozive de material către unitățile inamice din apropiere. block.cyclone.description = Trage cu grămezi explozive de material către unitățile inamice din apropiere.
block.spectre.description = Trage cu gloanțe mari care penetrează scuturile inamicilor din apropiere. block.spectre.description = Trage cu gloanțe mari care penetrează scuturile inamicilor din apropiere.
block.meltdown.description = Se încarcă și trage cu un laser continuu la inamicii din apropiere. Necesită răcitor pt a opera. block.meltdown.description = Se încarcă și trage cu un laser continuu la inamicii din apropiere. Necesită răcitor pt a opera.
block.foreshadow.description = Trage către o țintă cu un glonț imens pe distanțe lungi. block.foreshadow.description = Trage către o țintă cu un glonț imens pe distanțe lungi. Inamicii cu mai multă viață au prioritate.
block.repair-point.description = Repară încontinuu cea mai deteriorată unitate din vecinătate. block.repair-point.description = Repară încontinuu cea mai deteriorată unitate din vecinătate.
block.segment.description = Deteriorează și distruge proiectilele din apropiere. Laserele nu sunt afectate. block.segment.description = Deteriorează și distruge proiectilele din apropiere. Laserele nu sunt afectate.
block.parallax.description = Trage cu o rază tractoare care atrage aeronavele inamice, deteriorându-le. block.parallax.description = Trage cu o rază tractoare care atrage aeronavele inamice, deteriorându-le.
@@ -1499,8 +1519,8 @@ unit.vela.description = Trage cu un laser masiv, continuu, inflamabil care deter
unit.corvus.description = Trage cu e explozie masivă de lasere care deteriorează inamicii și repară structurile aliate. Poate merge peste majoritatea terenurilor. unit.corvus.description = Trage cu e explozie masivă de lasere care deteriorează inamicii și repară structurile aliate. Poate merge peste majoritatea terenurilor.
unit.crawler.description = Aleargă către inamici și se autodistruge, cauzând o explozie. unit.crawler.description = Aleargă către inamici și se autodistruge, cauzând o explozie.
unit.atrax.description = Trage cu globuri de zgură care slăbesc artileria inamică. Poate merge peste majoritatea terenurilor. unit.atrax.description = Trage cu globuri de zgură care slăbesc artileria inamică. Poate merge peste majoritatea terenurilor.
unit.spiroct.description = Trage cu lasere care apropie inamicii, autoreparându-se în acest proces. Poate merge peste majoritatea terenurilor. unit.spiroct.description = Trage cu lasere care apropie și slăbesc inamicii, autoreparându-se în acest proces. Poate merge peste majoritatea terenurilor.
unit.arkyid.description = Trage cu lasere mari care apropie inamicii, autoreparându-se în acest proces. Poate merge peste majoritatea terenurilor. unit.arkyid.description = Trage cu lasere mari care apropie și slăbesc inamicii, autoreparându-se în acest proces. Poate merge peste majoritatea terenurilor.
unit.toxopid.description = Trage cu capsule electrice mari și lasere care penetrează scuturile inamice. Poate merge peste majoritatea terenurilor. unit.toxopid.description = Trage cu capsule electrice mari și lasere care penetrează scuturile inamice. Poate merge peste majoritatea terenurilor.
unit.flare.description = Trage cu gloanțe standard la artileria inamică din apropiere. unit.flare.description = Trage cu gloanțe standard la artileria inamică din apropiere.
unit.horizon.description = Aruncă grămezi de bombe peste artileria inamică. unit.horizon.description = Aruncă grămezi de bombe peste artileria inamică.

View File

@@ -388,7 +388,7 @@ waves.none = Враги не были определены.\nОбратите в
#these are intentionally in lower case #these are intentionally in lower case
wavemode.counts = количество единиц wavemode.counts = количество единиц
wavemode.totals = всего единиц wavemode.totals = всего единиц
wavemode.health = всего здоровья wavemode.health = всего прочности
editor.default = [lightgray]<По умолчанию> editor.default = [lightgray]<По умолчанию>
details = Подробности… details = Подробности…
@@ -530,7 +530,7 @@ launch.from = Запуск из: [accent]{0}
launch.destination = Место назначения: {0} launch.destination = Место назначения: {0}
configure.invalid = Количество должно быть числом между 0 и {0}. configure.invalid = Количество должно быть числом между 0 и {0}.
add = Добавить… add = Добавить…
boss.health = Здоровье стража boss.health = Прочность стража
connectfail = [scarlet]Ошибка подключения:\n\n[accent]{0} connectfail = [scarlet]Ошибка подключения:\n\n[accent]{0}
error.unreachable = Сервер недоступен.\nВы уверены, что адрес введён корректно? error.unreachable = Сервер недоступен.\nВы уверены, что адрес введён корректно?
@@ -620,6 +620,19 @@ sector.extractionOutpost.description = Отдаленный аванпост, п
sector.impact0078.description = Здесь лежат остатки межзвездного транспортного судна, первым вошедшего в эту систему.\n\nИзвлеките как можно больше из обломков. Изучите любую уцелевшую технологию. sector.impact0078.description = Здесь лежат остатки межзвездного транспортного судна, первым вошедшего в эту систему.\n\nИзвлеките как можно больше из обломков. Изучите любую уцелевшую технологию.
sector.planetaryTerminal.description = Конечная цель.\n\nЭта береговая база содержит сооружение, способное запускать ядра к окрестным планетам. Оно крайне хорошо охраняется.\n\nПроизведите морские единицы. Уничтожьте врага как можно скорее. Изучите пусковую конструкцию. sector.planetaryTerminal.description = Конечная цель.\n\nЭта береговая база содержит сооружение, способное запускать ядра к окрестным планетам. Оно крайне хорошо охраняется.\n\nПроизведите морские единицы. Уничтожьте врага как можно скорее. Изучите пусковую конструкцию.
status.burning.name = Горит
status.freezing.name = Замерзает
status.wet.name = Влажный
status.muddy.name = В грязи
status.melting.name = Плавится
status.sapped.name = Истощён
status.spore-slowed.name = Замедлен спорами
status.tarred.name = Покрыт нефтью
status.overclock.name = Ускорен
status.shocked.name = Шокирован
status.blasted.name = Подорван
status.unmoving.name = Неподвижен
settings.language = Язык settings.language = Язык
settings.data = Игровые данные settings.data = Игровые данные
settings.reset = Сбросить по умолчанию settings.reset = Сбросить по умолчанию
@@ -656,6 +669,7 @@ stat.output = Выход
stat.booster = Ускоритель stat.booster = Ускоритель
stat.tiles = Необходимые плитки stat.tiles = Необходимые плитки
stat.affinities = Увеличение эффективности stat.affinities = Увеличение эффективности
stat.opposites = Уменьшение эффективности
stat.powercapacity = Вместимость энергии stat.powercapacity = Вместимость энергии
stat.powershot = Энергия/выстрел stat.powershot = Энергия/выстрел
stat.damage = Урон stat.damage = Урон
@@ -717,6 +731,12 @@ stat.abilities = Способности
stat.canboost = Может взлететь stat.canboost = Может взлететь
stat.flying = Летающий stat.flying = Летающий
stat.ammouse = Использование боеприпасов stat.ammouse = Использование боеприпасов
stat.damagemultiplier = Множитель урона
stat.healthmultiplier = Множитель прочности
stat.speedmultiplier = Множитель скорости
stat.reloadmultiplier = Множитель перезарядки
stat.buildspeedmultiplier = Множитель скорости строительства
stat.reactive = Реактивен
ability.forcefield = Силовое поле ability.forcefield = Силовое поле
ability.repairfield = Ремонтирующее поле ability.repairfield = Ремонтирующее поле
@@ -752,17 +772,14 @@ units.processorcontrol = [lightgray]Управляется процессоро
bullet.damage = [stat]{0}[lightgray] урона bullet.damage = [stat]{0}[lightgray] урона
bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] блоков bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] блоков
bullet.incendiary = [stat]зажигательный bullet.incendiary = [stat]зажигательный
bullet.sapping = [stat]истощающий
bullet.homing = [stat]самонаводящийся bullet.homing = [stat]самонаводящийся
bullet.shock = [stat]шоковый
bullet.frag = [stat]осколочный bullet.frag = [stat]осколочный
bullet.lightning = [stat]{0}[lightgray]x молнии ~[stat]{1}[lightgray] урона
bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам
bullet.knockback = [stat]{0}[lightgray] отбрасывания bullet.knockback = [stat]{0}[lightgray] отбрасывания
bullet.pierce = [stat]{0}[lightgray]x пробитие bullet.pierce = [stat]{0}[lightgray]x пробитие
bullet.infinitepierce = [stat]бесконечное пробитие bullet.infinitepierce = [stat]бесконечное пробитие
bullet.healpercent = [stat]{0}[lightgray]% лечения bullet.healpercent = [stat]{0}[lightgray]% лечения
bullet.freezing = [stat]замораживающий
bullet.tarred = [stat]замедляющий, горючий
bullet.multiplier = [stat]{0}[lightgray]x множитель боеприпасов bullet.multiplier = [stat]{0}[lightgray]x множитель боеприпасов
bullet.reload = [stat]{0}[lightgray]x скорость стрельбы bullet.reload = [stat]{0}[lightgray]x скорость стрельбы
@@ -924,6 +941,7 @@ keybind.pause_building.name = Приостановить/возобновить
keybind.minimap.name = Мини-карта keybind.minimap.name = Мини-карта
keybind.planet_map.name = Карта планеты keybind.planet_map.name = Карта планеты
keybind.research.name = Исследования keybind.research.name = Исследования
keybind.block_info.name = Информация о блоке
keybind.chat.name = Чат keybind.chat.name = Чат
keybind.player_list.name = Список игроков keybind.player_list.name = Список игроков
keybind.console.name = Консоль keybind.console.name = Консоль
@@ -957,10 +975,10 @@ rules.waves = Волны
rules.attack = Режим атаки rules.attack = Режим атаки
rules.buildai = Строительство ИИ rules.buildai = Строительство ИИ
rules.enemyCheat = Бесконечные ресурсы ИИ (красная команда) rules.enemyCheat = Бесконечные ресурсы ИИ (красная команда)
rules.blockhealthmultiplier = Множитель здоровья блоков rules.blockhealthmultiplier = Множитель прочности блоков
rules.blockdamagemultiplier = Множитель урона блоков rules.blockdamagemultiplier = Множитель урона блоков
rules.unitbuildspeedmultiplier = Множитель скорости производства боев. ед. rules.unitbuildspeedmultiplier = Множитель скорости производства боев. ед.
rules.unithealthmultiplier = Множитель здоровья боев. ед. rules.unithealthmultiplier = Множитель прочности боев. ед.
rules.unitdamagemultiplier = Множитель урона боев. ед. rules.unitdamagemultiplier = Множитель урона боев. ед.
rules.unitcapvariable = Ядра увеличивают лимит единиц rules.unitcapvariable = Ядра увеличивают лимит единиц
rules.unitcap = Начальный лимит единиц rules.unitcap = Начальный лимит единиц
@@ -992,6 +1010,7 @@ content.item.name = Предметы
content.liquid.name = Жидкости content.liquid.name = Жидкости
content.unit.name = Боевые единицы content.unit.name = Боевые единицы
content.block.name = Блоки content.block.name = Блоки
content.status.name = Эффекты статуса
content.sector.name = Секторы content.sector.name = Секторы
item.copper.name = Медь item.copper.name = Медь

View File

@@ -57,9 +57,10 @@ schematic.info = {0}x{1}, блоків: {2}
schematic.disabled = [scarlet]Схеми вимкнені[]\nВам не дозволяється використовувати схеми на цій [accent]мапі[] чи [accent]сервері. schematic.disabled = [scarlet]Схеми вимкнені[]\nВам не дозволяється використовувати схеми на цій [accent]мапі[] чи [accent]сервері.
mod.featured.title = Переглядач модифікацій mod.featured.title = Переглядач модифікацій
mod.featured.dialog.title = Переглядач модифікацій mods.browser = Переглядач модифікацій
mods.browser.selected = Обрана модифікація mods.browser.selected = Обрана модифікація
mods.browser.add = Установити mods.browser.add = Установити
mods.browser.reinstall = Перевстановити
mods.github.open = Відкрити mods.github.open = Відкрити
mods.browser.sortdate = Сортувати за давністю mods.browser.sortdate = Сортувати за давністю
mods.browser.sortstars = Сортувати за кількостю зірок mods.browser.sortstars = Сортувати за кількостю зірок
@@ -107,17 +108,20 @@ uploadingpreviewfile = Вивантаження файлу попередньо
committingchanges = Здійснення змін committingchanges = Здійснення змін
done = Зроблено done = Зроблено
feature.unsupported = Ваш пристрій не підтримує цю функцію feature.unsupported = Ваш пристрій не підтримує цю функцію
mods.alphainfo = Майте на увазі, що модифікації перебувають в альфі, і [scarlet]можуть бути дуже несправними[].\nПовідомте про будь-які проблеми, які ви знайдете до Mindustry Github або Discord. mods.initfailed = [red]⚠[] Попереднього разу не вдалося ініціалізувати Mindustry. Це, ймовірно, було спричинено неправильними поведінкою модифікацій.\n\nДля запобігання нескінченним аварійним циклам [red]треба вимкнути всі модифікації.[]\n\nДля вимкнення цієї функції перейдіть до [accent]Налаштування→Гра→Вимикати модифікації після аварійного запуску[].
mods = Модифікації mods = Модифікації
mods.none = [lightgray]Модифікацій не знайдено! mods.none = [lightgray]Модифікацій не знайдено!
mods.guide = Посібник із модифікацій mods.guide = Посібник із модифікацій
mods.report = Повідомити про ваду mods.report = Повідомити про ваду
mods.openfolder = Відкрити теку mods.openfolder = Відкрити теку
mods.viewcontent = Подивитися вміст
mods.reload = Перезавантажити mods.reload = Перезавантажити
mods.reloadexit = Гра зараз закриється, щоби перезавантажити модифікації mods.reloadexit = Гра зараз закриється, щоби перезавантажити модифікації
mod.installed = [[Установлено]
mod.display = [gray]Модифікація:[orange] {0} mod.display = [gray]Модифікація:[orange] {0}
mod.enabled = [lightgray]Увімкнено mod.enabled = [lightgray]Увімкнено
mod.disabled = [scarlet]Вимкнено mod.disabled = [scarlet]Вимкнено
mod.multiplayer.compatable = [gray]Доступна в мережевій грі
mod.disable = Вимкнути mod.disable = Вимкнути
mod.content = Зміст: mod.content = Зміст:
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується. mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
@@ -205,9 +209,11 @@ server.hidden = Приховано
trace = Стежити за гравцем trace = Стежити за гравцем
trace.playername = Ім’я гравця: [accent]{0} trace.playername = Ім’я гравця: [accent]{0}
trace.ip = IP: [accent]{0} trace.ip = IP: [accent]{0}
trace.id = Унікальний ідентифікатор: [accent]{0} trace.id = Ідентифікатор: [accent]{0}
trace.mobile = Мобільний клієнт: [accent]{0} trace.mobile = Мобільний клієнт: [accent]{0}
trace.modclient = Користувацький клієнт: [accent]{0} trace.modclient = Користувацький клієнт: [accent]{0}
trace.times.joined = Кількість приєднань: [accent]{0}
trace.times.kicked = Кількість вигнань: [accent]{0}
invalidid = Невірний ідентифікатор клієнта! Надішліть звіт про помилку. invalidid = Невірний ідентифікатор клієнта! Надішліть звіт про помилку.
server.bans = Блокування server.bans = Блокування
server.bans.none = Заблокованих гравців немає! server.bans.none = Заблокованих гравців немає!
@@ -297,10 +303,11 @@ loading = [accent]Завантаження…
reloading = [accent]Перезавантаження модифікацій… reloading = [accent]Перезавантаження модифікацій…
saving = [accent]Збереження… saving = [accent]Збереження…
respawn = [accent][[{0}][], щоби відродитися в ядрі respawn = [accent][[{0}][], щоби відродитися в ядрі
cancelbuilding = [accent][[{0}][], щоб очистити план cancelbuilding = [accent][[{0}][] для очищення плану
selectschematic = [accent][[{0}][], щоби вибрати та скопіювати selectschematic = [accent][[{0}][], щоби вибрати та скопіювати
pausebuilding = [accent][[{0}][], щоби призупинити будування pausebuilding = [accent][[{0}][] для призупинення будування
resumebuilding = [scarlet][[{0}][], щоби продовжити будування resumebuilding = [scarlet][[{0}][] для продовження будування
enablebuilding = [scarlet][[{0}][] для увімкнення будування
showui = Користувацький інтерфейс приховано.\nНатисніть [accent][[{0}][], щоби показати його знову. showui = Користувацький інтерфейс приховано.\nНатисніть [accent][[{0}][], щоби показати його знову.
wave = [accent]Хвиля {0} wave = [accent]Хвиля {0}
wave.cap = [accent]Хвиля {0}/{1} wave.cap = [accent]Хвиля {0}/{1}
@@ -586,6 +593,20 @@ sector.windsweptIslands.description = Далі, за береговою ліні
sector.extractionOutpost.description = Віддалений форпост, побудований ворогом для запуску ресурсів в інші сектори. \n\nМіжсекторна транспортна технологія має важливе значення для подальшого завоювання. Знищте базу. Дослідіть їхні пускові майданчики. sector.extractionOutpost.description = Віддалений форпост, побудований ворогом для запуску ресурсів в інші сектори. \n\nМіжсекторна транспортна технологія має важливе значення для подальшого завоювання. Знищте базу. Дослідіть їхні пускові майданчики.
sector.impact0078.description = Тут лежать залишки міжзоряного транспортного судна, яке вперше потрапило в цю систему. \n\nВилучіть якомога більше корисного з уламків. Дослідіть будь-яку вцілілу технологію. sector.impact0078.description = Тут лежать залишки міжзоряного транспортного судна, яке вперше потрапило в цю систему. \n\nВилучіть якомога більше корисного з уламків. Дослідіть будь-яку вцілілу технологію.
sector.planetaryTerminal.description = Кінцева мета.\n\nЦя прибережна база містить структуру, здатну запускати ядра на навколишні планети. Надзвичайно добре охороняється.\n\nВиробляє військово-морські підрозділи. Усуньте ворога якомога швидше. Дослідіть структуру запуску. sector.planetaryTerminal.description = Кінцева мета.\n\nЦя прибережна база містить структуру, здатну запускати ядра на навколишні планети. Надзвичайно добре охороняється.\n\nВиробляє військово-морські підрозділи. Усуньте ворога якомога швидше. Дослідіть структуру запуску.
status.burning.name = Палає
status.freezing.name = Замерзає
status.wet.name = Вологий
status.muddy.name = Забризканий гряззю
status.melting.name = Плавиться
status.sapped.name = Виснажений
status.spore-slowed.name = Сповільнений спорами
status.tarred.name = Покритий нафтою
status.overclock.name = Прискорений
status.shocked.name = Шокований
status.blasted.name = Підірваний
status.unmoving.name = Незворушний
settings.language = Мова settings.language = Мова
settings.data = Ігрові дані settings.data = Ігрові дані
settings.reset = За замовчуванням settings.reset = За замовчуванням
@@ -621,6 +642,7 @@ stat.output = Вивід
stat.booster = Прискорювач stat.booster = Прискорювач
stat.tiles = Необхідні плитки stat.tiles = Необхідні плитки
stat.affinities = Збільшення ефективності stat.affinities = Збільшення ефективності
stat.opposites = Зменшення ефективності
stat.powercapacity = Місткість енергії stat.powercapacity = Місткість енергії
stat.powershot = Енергія за постріл stat.powershot = Енергія за постріл
stat.damage = Шкода stat.damage = Шкода
@@ -634,7 +656,7 @@ stat.displaysize = Розмір дисплею
stat.liquidcapacity = Рідинна місткість stat.liquidcapacity = Рідинна місткість
stat.powerrange = Радіус передачі енергії stat.powerrange = Радіус передачі енергії
stat.linkrange = Радіус з’єднання stat.linkrange = Радіус з’єднання
stat.instructions = Інструкції stat.instructions = Операції
stat.powerconnections = Максимальна кількість з’єднань stat.powerconnections = Максимальна кількість з’єднань
stat.poweruse = Енергії використовує stat.poweruse = Енергії використовує
stat.powerdamage = Енергії за од. шкоди stat.powerdamage = Енергії за од. шкоди
@@ -652,6 +674,7 @@ stat.drillspeed = Базова швидкість буріння
stat.boosteffect = Прискорювальний ефект stat.boosteffect = Прискорювальний ефект
stat.maxunits = Максимальна кількість активних одиниць stat.maxunits = Максимальна кількість активних одиниць
stat.health = Здоров’я stat.health = Здоров’я
stat.armor = Броня
stat.buildtime = Час будування stat.buildtime = Час будування
stat.maxconsecutive = Максимальна послідовність stat.maxconsecutive = Максимальна послідовність
stat.buildcost = Вартість будування stat.buildcost = Вартість будування
@@ -667,6 +690,7 @@ stat.lightningchance = Шанс удару блискавки
stat.lightningdamage = Шкода від удару блискавки stat.lightningdamage = Шкода від удару блискавки
stat.flammability = Займистість stat.flammability = Займистість
stat.radioactivity = Радіоактивність stat.radioactivity = Радіоактивність
stat.charge = Заряд
stat.heatcapacity = Тепломісткість stat.heatcapacity = Тепломісткість
stat.viscosity = В’язкість stat.viscosity = В’язкість
stat.temperature = Температура stat.temperature = Температура
@@ -680,6 +704,13 @@ stat.abilities = Здібності
stat.canboost = Можна прискорити stat.canboost = Можна прискорити
stat.flying = Літає stat.flying = Літає
stat.ammouse = Патронів використовує stat.ammouse = Патронів використовує
stat.damagemultiplier = Множник шкоди
stat.healthmultiplier = Множник здоров’я
stat.speedmultiplier = Множник швидкості
stat.reloadmultiplier = Множник перезарядки
stat.buildspeedmultiplier = Множник швидкості будування
stat.reactive = Реактивний
ability.forcefield = Щитове поле ability.forcefield = Щитове поле
ability.repairfield = Ремонтувальне поле ability.repairfield = Ремонтувальне поле
ability.statusfield = Поле підсилення ability.statusfield = Поле підсилення
@@ -711,17 +742,14 @@ units.processorcontrol = [lightgray]Керується процесором
bullet.damage = [stat]{0}[lightgray] шкода bullet.damage = [stat]{0}[lightgray] шкода
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плиток
bullet.incendiary = [stat]запальний bullet.incendiary = [stat]запальний
bullet.sapping = [stat]виснажує
bullet.homing = [stat]самонаведення bullet.homing = [stat]самонаведення
bullet.shock = [stat]шок
bullet.frag = [stat]шкода по ділянці bullet.frag = [stat]шкода по ділянці
bullet.lightning = [stat]{0}[lightgray]x блискавки ~[stat]{1}[lightgray] шкоди
bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям
bullet.knockback = [stat]{0}[lightgray] відкидання bullet.knockback = [stat]{0}[lightgray] відкидання
bullet.pierce = [stat]{0}[lightgray]x пробиття bullet.pierce = [stat]{0}[lightgray]x пробиття
bullet.infinitepierce = [stat]пробиття bullet.infinitepierce = [stat]пробиття
bullet.healpercent = [stat]{0}[lightgray]% лікування bullet.healpercent = [stat]{0}[lightgray]% лікування
bullet.freezing = [stat]заморожування
bullet.tarred = [stat]дьогтьовий
bullet.multiplier = [stat]{0}[lightgray]x патронів bullet.multiplier = [stat]{0}[lightgray]x патронів
bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджання bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджання
unit.blocks = блоки unit.blocks = блоки
@@ -760,6 +788,8 @@ setting.hints.name = Підказки
setting.flow.name = Показувати темп швидкості ресурсів setting.flow.name = Показувати темп швидкості ресурсів
setting.backgroundpause.name = Пауза в разі згортанні setting.backgroundpause.name = Пауза в разі згортанні
setting.buildautopause.name = Автоматичне призупинення будування setting.buildautopause.name = Автоматичне призупинення будування
setting.doubletapmine.name = Подвійне торкання для початку видобування
setting.modcrashdisable.name = Вимикати модифікації після аварійного запуску
setting.animatedwater.name = Анімаційні рідини setting.animatedwater.name = Анімаційні рідини
setting.animatedshields.name = Анімаційні щити setting.animatedshields.name = Анімаційні щити
setting.antialias.name = Згладжування[lightgray] (потребує перезапуску)[] setting.antialias.name = Згладжування[lightgray] (потребує перезапуску)[]
@@ -915,6 +945,9 @@ rules.blockdamagemultiplier = Множник шкоди блоків
rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць
rules.unithealthmultiplier = Множник здоров’я бойових одиниць rules.unithealthmultiplier = Множник здоров’я бойових одиниць
rules.unitdamagemultiplier = Множник шкоди бойових одиниць rules.unitdamagemultiplier = Множник шкоди бойових одиниць
rules.unitcapvariable = Ядра збільшують обмеження на кількість одиниць
rules.unitcap = Початкове обмеження одиниць
rules.enemycorebuildradius = Радіус оборони для ворожого ядра:[lightgray] (плитки) rules.enemycorebuildradius = Радіус оборони для ворожого ядра:[lightgray] (плитки)
rules.wavespacing = Інтервал хвиль:[lightgray] (секунди) rules.wavespacing = Інтервал хвиль:[lightgray] (секунди)
rules.buildcostmultiplier = Множник затрат на будування rules.buildcostmultiplier = Множник затрат на будування
@@ -941,6 +974,7 @@ content.item.name = Предмети
content.liquid.name = Рідини content.liquid.name = Рідини
content.unit.name = Бойові одиниці content.unit.name = Бойові одиниці
content.block.name = Блоки content.block.name = Блоки
content.status.name = Ефекти стану
content.sector.name = Cектори content.sector.name = Cектори
item.copper.name = Мідь item.copper.name = Мідь
item.lead.name = Свинець item.lead.name = Свинець
@@ -994,7 +1028,7 @@ unit.gamma.name = Гамма
unit.scepter.name = Верховна влада unit.scepter.name = Верховна влада
unit.reign.name = Верховний Порядок unit.reign.name = Верховний Порядок
unit.vela.name = Пульсар Вітрил unit.vela.name = Пульсар Вітрил
unit.corvus.name = Ворон unit.corvus.name = Ґава
block.resupply-point.name = Пункт постачання block.resupply-point.name = Пункт постачання
block.parallax.name = Паралакс block.parallax.name = Паралакс
block.cliff.name = Скеля block.cliff.name = Скеля
@@ -1128,7 +1162,7 @@ block.impact-reactor.name = Імпульсний реактор
block.mechanical-drill.name = Механічний бур block.mechanical-drill.name = Механічний бур
block.pneumatic-drill.name = Пневматичний бур block.pneumatic-drill.name = Пневматичний бур
block.laser-drill.name = Лазерний бур block.laser-drill.name = Лазерний бур
block.water-extractor.name = Конденсатор води block.water-extractor.name = Екстрактор води
block.cultivator.name = Культиватор block.cultivator.name = Культиватор
block.conduit.name = Трубопровід block.conduit.name = Трубопровід
block.mechanical-pump.name = Механічна помпа block.mechanical-pump.name = Механічна помпа
@@ -1359,7 +1393,7 @@ block.diode.description = Живлення акумулятора може пр
block.battery.description = Зберігає енергію як буфер у часи надлишкової енергії. Виводить енергію в періоди дефіциту. block.battery.description = Зберігає енергію як буфер у часи надлишкової енергії. Виводить енергію в періоди дефіциту.
block.battery-large.description = Зберігає енергію як буфер у часи надлишкової енергії. Виводить енергію в періоди дефіциту. Більша ємність ніж у звичайного акумулятора. block.battery-large.description = Зберігає енергію як буфер у часи надлишкової енергії. Виводить енергію в періоди дефіциту. Більша ємність ніж у звичайного акумулятора.
block.combustion-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали, як-от вугілля. block.combustion-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали, як-от вугілля.
block.thermal-generator.description = Виробляє енергію в разі розміщення в спекотних місцях. block.thermal-generator.description = Виробляє енергію в разі розміщення в гарячих місцях.
block.steam-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали й перетворює воду в пару. block.steam-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали й перетворює воду в пару.
block.differential-generator.description = Виробляє велику кількість енергії. Використовує різницю температур між кріогенною рідиною й пиротитом, що горить. block.differential-generator.description = Виробляє велику кількість енергії. Використовує різницю температур між кріогенною рідиною й пиротитом, що горить.
block.rtg-generator.description = Використовує тепло радіоактивних сполук, які розкладаються, для отримання енергії з повільною швидкістю. block.rtg-generator.description = Використовує тепло радіоактивних сполук, які розкладаються, для отримання енергії з повільною швидкістю.
@@ -1399,8 +1433,8 @@ block.ripple.description = Вистрілює скупченням снаряд
block.cyclone.description = Підпалює вибухові грудки скупчення противників. block.cyclone.description = Підпалює вибухові грудки скупчення противників.
block.spectre.description = Вистрілює великі бронебійні кулі в повітряні та наземні цілі. block.spectre.description = Вистрілює великі бронебійні кулі в повітряні та наземні цілі.
block.meltdown.description = Заряджає і вистрілює лазерним променем у найближчих противників. Для роботи потрібен теплоносій. block.meltdown.description = Заряджає і вистрілює лазерним променем у найближчих противників. Для роботи потрібен теплоносій.
block.foreshadow.description = Вистрілює великим болтом в одну ціль на велику дистанцію block.foreshadow.description = Вистрілює великим болтом в одну ціль на велику дистанцію.
block.repair-point.description = Безперервно ремонтує найближчу пошкоджену бойову одиницю у своєму радіусі дії. block.repair-point.description = Безперервно ремонтує найближчу пошкоджену бойову одиницю у своєму радіусі дії. Пріоритетні вороги з вищим максимальним здоров’ям.
block.segment.description = Пошкоджує та руйнує вхідні снаряди. Окрім лазерних. block.segment.description = Пошкоджує та руйнує вхідні снаряди. Окрім лазерних.
block.parallax.description = Притягає ворожі повітряні одиниці, пошкоджуючи їх у процесі. block.parallax.description = Притягає ворожі повітряні одиниці, пошкоджуючи їх у процесі.
block.tsunami.description = Вистрілює потужними потоками рідини у ворогів. Автоматично гасить пожежі в разі постачання води. block.tsunami.description = Вистрілює потужними потоками рідини у ворогів. Автоматично гасить пожежі в разі постачання води.
@@ -1418,9 +1452,9 @@ block.multiplicative-reconstructor.description = Поліпшує введени
block.exponential-reconstructor.description = Поліпшує введених одиниць до четвертого рівня. block.exponential-reconstructor.description = Поліпшує введених одиниць до четвертого рівня.
block.tetrative-reconstructor.description = Поліпшує введених одиниць до п’ятого і фінального рівня. block.tetrative-reconstructor.description = Поліпшує введених одиниць до п’ятого і фінального рівня.
block.switch.description = Перемикач. Стан можна читати й контролювати за допомогою логічних процесорів. block.switch.description = Перемикач. Стан можна читати й контролювати за допомогою логічних процесорів.
block.micro-processor.description = Запускає послідовність логічних вказівок (інструкцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. block.micro-processor.description = Запускає послідовність логічних вказівок (операцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель.
block.logic-processor.description = Запускає послідовність логічних вказівок (інструкцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. Швидше ніж Мікропроцесор. block.logic-processor.description = Запускає послідовність логічних вказівок (операцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. Швидше ніж Мікропроцесор.
block.hyper-processor.description = Запускає послідовність логічних вказівок (інструкцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. Швидше ніж Логічний процесор block.hyper-processor.description = Запускає послідовність логічних вказівок (операцій) у нескінченному циклі. Може використовуватися для керування блоків та будівель. Швидше ніж Логічний процесор
block.memory-cell.description = Зберігає інформацію для логічного процесора. block.memory-cell.description = Зберігає інформацію для логічного процесора.
block.memory-bank.description = Зберігає інформацію для логічного процесора. Висока місткість. block.memory-bank.description = Зберігає інформацію для логічного процесора. Висока місткість.
block.logic-display.description = Показує довільну графіку з логічного процесора. block.logic-display.description = Показує довільну графіку з логічного процесора.
@@ -1459,3 +1493,146 @@ unit.omura.description = Вистрілює у ворогів далекобій
unit.alpha.description = Захищає ядро «Уламок» від противників. Будує споруди. unit.alpha.description = Захищає ядро «Уламок» від противників. Будує споруди.
unit.beta.description = Захищає ядро «Штаб» від противників. Будує споруди. unit.beta.description = Захищає ядро «Штаб» від противників. Будує споруди.
unit.gamma.description = Захищає ядро «Атом» від противників. Будує споруди. unit.gamma.description = Захищає ядро «Атом» від противників. Будує споруди.
lst.read = Зчитує число із з’єднаної комірки пам’яті.
lst.write = Записує числу у з’єднану комірки пам’яті.
lst.print = Додайте текст до буфера друку.\nНічого не відображає, поки [accent]Print Flush[] використовується.
lst.draw = Додає операцію до буфера рисунка.\nНічого не відображає, поки [accent]Draw Flush[] використовується.
lst.drawflush = Скидає буфер операцій [accent]Draw[] на дисплей.
lst.printflush = Скидає буфер операцій [accent]Print[] у блок «Повідомлення».
lst.getlink = Отримати посилання на процесор за допомогою індекса. Починається з 0.
lst.control = Контролює будівлю.
lst.radar = Знаходження одиниць навколо будівлі у радіусі дії.
lst.sensor = Отримати дані з певної будівлі чи одиниці.
lst.set = Установити значення змінної.
lst.operation = Виконує операцію над 1-2 змінними.
lst.end = Перейти до верхньої частини стеку операцій.
lst.jump = Умовне переходження до іншої операції.
lst.unitbind = Прив’язка до одиниці певного типу та його зберігання в [accent]@unit[].
lst.unitcontrol = Контролювати поточну прив’язану одиницю.
lst.unitradar = Знайти одиницю біля поточної прив’язаної одиниці.
lst.unitlocate = Виявляє позицію чи будівлю певного типу де завгодно на мапі.\nПотрібна прив’язана одиниця.
logic.nounitbuild = [red]Будування за допомогою процесорів заборено.
lenum.type = Тип будівлі чи одиниці.\nНаприклад, для будь-якого маршрутизатора (англ. router), функція вертатиме [accent]@router[].\nНе є рядком.
lenum.shoot = Стріляти в зазначену позицію.
lenum.shootp = Стріляти в одиницю чи будівлю із передбаченням швидкості.
lenum.configure = Конфігурація будівлі, як-от в сортувальника.
lenum.enabled = Чи блок увімкнено.
laccess.color = Колір освітлювача.
laccess.controller = Керувач одиницями. Якщо процесор керує одиницею, повертає процесор.\nЯкщо у формуванні, повертається лідер.\nІнакше повертає саму одиницю.
laccess.dead = Чи є одиниця або будівля мертвою або недійсною.
laccess.controlled = Повертає \n[accent]@ctrlProcessor[] якщо одиниця контролюється процесором;\n[accent]@ctrlPlayer[] якщо одиниця чи будівля контролюєть гравцем\n[accent]@ctrlFormation[] якщо одиниця у загоні (формуванні)\nІнакше — 0.
laccess.commanded = [red]Застаріле. Буде видалено![]\nВикористовуйте натомість [accent]controlled[].
graphicstype.clear = Залити дисплей вказаним кольором.
graphicstype.color = Установити колір для подальшої операції малювання.
graphicstype.stroke = Установити ширину ліній.
graphicstype.line = Накреслити відрізок лінії.
graphicstype.rect = Залити кольором прямокутник.
graphicstype.linerect = Намалювати контур прямокутника.
graphicstype.poly = Залити кольором правильний багатокутник.
graphicstype.linepoly = Намалювати контур правильного багатокутника.
graphicstype.triangle = Залити кольором трикутник.
graphicstype.image = Намалювати зображення із деяким вмістом.\nНаприклад: [accent]@router[] чи [accent]@dagger[].
lenum.always = Завжди істинне.
lenum.idiv = Ціле ділення.
lenum.div = Ділення.\nПовертає [accent]null[] при діленні на нуль.
lenum.mod = Залишок від ділення.
lenum.equal = Рівно. Примусове приведення типів.\nНе-null об’єкти порівняно з числами стають 1, інакше — 0.
lenum.notequal = Не рівно. Примусове приведення типів.
lenum.strictequal = Сувора рівність. Примусового приведення типів немає.\nМожна використати для перевірки на [accent]null[].
lenum.shl = Зсув бітів ліворуч.
lenum.shr = Зсув бітів праворуч.
lenum.or = Побітове АБО (OR).
lenum.land = Побітове логічне І.
lenum.and = Побітове І.
lenum.not = Побітове заперечення.
lenum.xor = Виключне АБО (XOR).
lenum.min = Мінімум з двух чисел.
lenum.max = Максимум з двух чисел.
lenum.angle = Кут вектора у градусах.
lenum.len = Довжина вектора.
lenum.sin = Синус, у градусах.
lenum.cos = Косинус, у градусах.
lenum.tan = Тангенс, у градусах.
#це не одруківка, пошукайте 'позначення діапазону'
lenum.rand = Випадкове десяткове число у діапазоні [0, значення).
lenum.log = Натуральний логарифм (ln).
lenum.log10 = Десятковий логарифм.
lenum.noise = Двовимірний симлекс-шум.
lenum.abs = Абсолютне значення.
lenum.sqrt = Квадратний корінь.
lenum.any = Будь-яка одиниця.
lenum.ally = Союзна одиниця.
lenum.attacker = Одиниця зі зброєю.
lenum.enemy = Ворожа одиниця.
lenum.boss = Одиниця «Вартовий».
lenum.flying = Одиниця, що літає.
lenum.ground = Наземна одиниця.
lenum.player = Одиниця, керована гравцем.
lenum.ore = Родовище руди.
lenum.damaged = Пошкоджені союзні будівлі.
lenum.spawn = Точка появи ворогів.\nМоже бути ядром чи позицією.
lenum.building = Будування певної групи.
lenum.core = Будь-яке ядро.
lenum.storage = Складське приміщення, як-от Сховище.
lenum.generator = Будівлі, що виробляють енергію.
lenum.factory = Будівлі, що видозмінюють ресурси.
lenum.repair = Ремонтні пункти.
lenum.rally = Командний центр.
lenum.battery = Будь-який акумулятор.
lenum.resupply = Пункти постачання.\nДоречні лише коли кор. правило [accent]«Бойові одиниці потребують боєприпасів»[] увімкнено.
lenum.reactor = Імпульсний чи Торієвий реактор.
lenum.turret = Будь-яка башта.
sensor.in = Будівля чи одиниця для розпізнавання.
radar.from = Від якої будівлі треба розпізнавати.\nРадіус розпізнавання обмежено радіусом будівництва.
radar.target = Фільтр для розпізнавання одиниць.
radar.and = Додаткові фільтри.
radar.order = Порядок сортування. 0 — сортування у зворотньому порядку.
radar.sort = Показник для сортування результатів.
radar.output = Змінна для записув вихідної одиниці.
unitradar.target = Фільтр для розпізнавання одиниць.
unitradar.and = Додаткові фільтри.
unitradar.order = Порядок сортування. 0 — сортування у зворотньому порядку.
unitradar.sort = Показник для сортування результатів.
unitradar.output = Змінна для записув вихідної одиниці.
control.of = Будівля для контролювання.
control.unit = Одиниця чи будівля для прицілювання.
control.shoot = Чи стріляє.
unitlocate.enemy = Чи знаходити ворожі будівлі.
unitlocate.found = Чи був об’єкт знайдений.
unitlocate.building = Змінна для запису знайденої будівлі
unitlocate.outx = Виводить координату X.
unitlocate.outy = Виводить координату Y.
unitlocate.group = Група будівль для пошуку.
lenum.idle = Зупиняти рух, проте продовжути будувати чи видобувати.\nСтан за замовчуванням.
lenum.stop = Зупинити або рух, або видобуток, або будівництво.
lenum.move = Перемістити в точне положення.
lenum.approach = Наближення до позиції із зазначеним радіусом.
lenum.pathfind = Знайдення шляху до точки появи ворогів.
lenum.target = Стрільба в задану позицію.
lenum.targetp = Стріляти в ціль із передбаченням швидкості.
lenum.itemdrop = Викинути предмет.
lenum.itemtake = Взяти предмет з будівлі.
lenum.paydrop = Скинути поточний вантаж.
lenum.paytake = Підібрати вантаж у поточному місцерозташуванні.
lenum.flag = Числовий флаг одиниці.
lenum.mine = Видобувати у заданій позиції.
lenum.build = Побудувати будівлю.
lenum.getblock = Розпізнавання блока та його типа за координатами.\nОдиниця повинна знаходитися в межах досяжності.\nСуцільні не-будівлі матимуть тип [accent]@solid[].
lenum.within = Чи знаходиться одиниця біля позиції.
lenum.boost = Почати чи зупинити політ.

View File

@@ -787,6 +787,7 @@ setting.shadows.name = 影子
setting.blockreplace.name = 自动推荐合适的建筑 setting.blockreplace.name = 自动推荐合适的建筑
setting.linear.name = 抗锯齿 setting.linear.name = 抗锯齿
setting.hints.name = 提示 setting.hints.name = 提示
setting.logichints.name = 逻辑代码提示
setting.flow.name = 显示资源传送速度[scarlet] setting.flow.name = 显示资源传送速度[scarlet]
setting.backgroundpause.name = 在背景中暂停 setting.backgroundpause.name = 在背景中暂停
setting.buildautopause.name = 自动暂停建造 setting.buildautopause.name = 自动暂停建造
@@ -1503,3 +1504,145 @@ unit.omura.description = 攻击附近所有敌人。发射远程穿透轨道炮
unit.alpha.description = 保护初代核心。可构建结构。 unit.alpha.description = 保护初代核心。可构建结构。
unit.beta.description = 保护次代核心。可构建结构。 unit.beta.description = 保护次代核心。可构建结构。
unit.gamma.description = 保护终代核心。可构建结构。 unit.gamma.description = 保护终代核心。可构建结构。
lst.read = 从连接的内存读取数字
lst.write = 写入数字到连接的内存
lst.print = 添加文字到打印缓存\n用了[accent]Print Flush[]才会显示
lst.draw = 添加操作到绘图队列\n用了[accent]Draw Flush[]才会显示
lst.drawflush = 刷新列队的[accent]Print[]操作到显示屏
lst.printflush = 刷新[accent]Draw[]缓存的文字到消息板
lst.getlink = 获取处理器连接\n索引从0开始
lst.control = 控制建筑
lst.radar = 定位建筑周边的单位\n有范围限制
lst.sensor = 从建筑或单位取得数据
lst.set = 设置变量
lst.operation = 操作一两个变量
lst.end = 跳至指令栈顶\n第一条语句
lst.jump = 有条件地跳到另一语句
lst.unitbind = 绑定下一个某型号单位\n并存到[accent]@unit[]
lst.unitcontrol = 控制绑定的单位
lst.unitradar = 定位绑定的单位周围的单位
lst.unitlocate = 定位指定类型的建筑或位置\n全图范围需要绑定单位
logic.nounitbuild = [red]这儿不允许处理器控制单位去建设
lenum.type = 建筑和单位的类型,不是字串\n比如路由器返回[accent]@router[]
lenum.shoot = 瞄准/射击某个位置
lenum.shootp = 按提前量瞄准/射击目标
lenum.configure = 建筑配置,比如分拣器分拣的物品
lenum.enabled = 建筑的启用状态
laccess.color = 照明器发光的颜色
laccess.controller = 单位控制者\n如果是处理器返回处理器\n如果在编队中返回领队\n其他的返回单位自己
laccess.dead = 单位或建筑是不是死了或无效了
laccess.controlled = 若单位控制者是处理器,返回[accent]@ctrlProcessor[]\n若单位/建筑由玩家控制,返回[accent]@ctrlPlayer[]\n若单位在编队中返回[accent]@ctrlFormation[]\n其他的返回0
laccess.commanded = [red]已弃用,将被移除![]\n应该使用[accent]controlled[]
graphicstype.clear = 用指定颜色填满显示屏
graphicstype.color = 设置后续画图操作的颜色
graphicstype.stroke = 设置线宽
graphicstype.line = 画线段
graphicstype.rect = 填充矩形
graphicstype.linerect = 画矩形框
graphicstype.poly = 填充正多边形
graphicstype.linepoly = 画正多边形框
graphicstype.triangle = 填充三角形
graphicstype.image = 画出游戏内容的图像\n比如[accent]@router[]和[accent]@dagger[]
lenum.always = 总是跳转
lenum.idiv = 整除
lenum.div = 除法除以0时返回[accent]null[]
lenum.mod = 取余数
lenum.equal = 相等。有转换\nnull比较数字时算作0非null对象算作1
lenum.notequal = 不相等。有转换
lenum.strictequal = 严格相等。不转换\n可用于检查[accent]null[]
lenum.shl = 左移位
lenum.shr = 右移位
lenum.or = 按位或
lenum.land = 逻辑与
lenum.and = 按位与
lenum.not = 按位非
lenum.xor = 按位异或
lenum.min = 取小的那个数
lenum.max = 取大的那个数
lenum.angle = 方位角°
lenum.len = 原点到该点距离
lenum.sin = 正弦°(对边:斜边)
lenum.cos = 余弦°(邻边:斜边)
lenum.tan = 正切°(对边:邻边)
lenum.rand = [0, 值) 范围内随机数
lenum.log = 自然对数(ln)
lenum.log10 = 10底对数
lenum.noise = 二维单形噪声
lenum.abs = 绝对值
lenum.sqrt = 二次方根
lenum.any = 任意单位
lenum.ally = 友方单位
lenum.attacker = 有武器的单位
lenum.enemy = 敌方单位
lenum.boss = Boss单位
lenum.flying = 飞行单位
lenum.ground = 地面单位
lenum.player = 玩家控制的单位
lenum.ore = 矿床
lenum.damaged = 受损的友方建筑
lenum.spawn = 敌人出生点\n可能是核心或地点
lenum.building = 分组内的建筑
lenum.core = 核心
lenum.storage = 容器/仓库
lenum.generator = 发电建筑
lenum.factory = 工厂
lenum.repair = 维修点
lenum.rally = 指挥中心
lenum.battery = 电池
lenum.resupply = 补给点\n仅当启用[accent]“单位弹药”[]时有用
lenum.reactor = 钍反应堆/冲击反应堆
lenum.turret = 炮塔
sensor.in = 要传感的建筑或单位
radar.from = 要实施探测的建筑\n探测距离受限于建筑范围
radar.target = 筛选要探测的单位
radar.and = 更多筛子
radar.order = 排序1(true)从小到大 0(false)反序
radar.sort = 排序的量度
radar.output = 输出单位的变量
unitradar.target = 筛选要探测的单位
unitradar.and = 更多筛子
unitradar.order = 排序1(true)从小到大 0(false)反序
unitradar.sort = 排序的量度
unitradar.output = 输出单位的变量
control.of = 要控制的建筑
control.unit = 要瞄准的单位或建筑
control.shoot = 是否射击
unitlocate.enemy = 定位敌方还是我方建筑
unitlocate.found = 有没有找到
unitlocate.building = 找到的建筑的输出变量
unitlocate.outx = 输出X坐标
unitlocate.outy = 输出Y坐标
unitlocate.group = 要找的建筑组
lenum.idle = 不移动,但进行采矿/修建\n默认状态
lenum.stop = 停止移动/采矿/修建
lenum.move = 移动到某个位置
lenum.approach = 接近到某个圆形区域
lenum.pathfind = 找路去敌人出生点
lenum.target = 瞄准/射击某个位置
lenum.targetp = 按提前量瞄准/射击目标
lenum.itemdrop = 放物品到建筑
lenum.itemtake = 从建筑拿物品
lenum.paydrop = 放下当前载荷
lenum.paytake = 从地上拿起载荷
lenum.flag = 数字值的单位旗标
lenum.mine = 采矿
lenum.build = 修建结构
lenum.getblock = 获取某坐标的建筑和类型\n坐标需在单位范围内\n或单位在建筑范围内\n地形物类型是[accent]@solid[]或[accent]@air[]
lenum.within = 检查单位在不在半径内
lenum.boost = 开始/停止助推

View File

@@ -113,7 +113,7 @@ committingchanges = 遞交變更
done = 完成 done = 完成
feature.unsupported = 您的裝置不支援此功能。 feature.unsupported = 您的裝置不支援此功能。
mods.alphainfo = 請記住模組仍處於Alpha狀態[scarlet]可能會有很多臭蟲[]。\n請到Mindustry GitHub或Discord報告發現的任何問題。 mods.initfailed = [red]⚠[] Mindustry 無法啟動。這可能是因模組造成。\n\n為了避免不斷閃退[red]所有的模組已被停用。[]\n\n若要取消此設定可在[accent]設定->遊戲->閃退後停用模組[]關閉設定.
mods = 模組 mods = 模組
mods.none = [lightgray]找不到模組! mods.none = [lightgray]找不到模組!
mods.guide = 模組指南 mods.guide = 模組指南
@@ -126,6 +126,7 @@ mod.display = [gray]模組:[orange]{0}
mod.installed = [[已安裝] mod.installed = [[已安裝]
mod.enabled = [lightgray]已啟用 mod.enabled = [lightgray]已啟用
mod.disabled = [scarlet]已禁用 mod.disabled = [scarlet]已禁用
mod.multiplayer.compatible = [gray]與多人模式相容
mod.disable = 禁用 mod.disable = 禁用
mod.content = 內容: mod.content = 內容:
mod.delete.error = 無法刪除模組,檔案可能在使用中。 mod.delete.error = 無法刪除模組,檔案可能在使用中。
@@ -219,6 +220,8 @@ trace.ip = IP[accent]{0}
trace.id = ID[accent]{0} trace.id = ID[accent]{0}
trace.mobile = 行動客戶端:[accent]{0} trace.mobile = 行動客戶端:[accent]{0}
trace.modclient = 自訂客戶端:[accent]{0} trace.modclient = 自訂客戶端:[accent]{0}
trace.times.joined = 加入次數:[accent]{0}
trace.times.kicked = 踢除次數:[accent]{0}
invalidid = 無效的客戶端 ID請遞交錯誤回報。 invalidid = 無效的客戶端 ID請遞交錯誤回報。
server.bans = 封鎖 server.bans = 封鎖
server.bans.none = 沒有玩家被封鎖! server.bans.none = 沒有玩家被封鎖!
@@ -617,6 +620,19 @@ sector.extractionOutpost.description = 由敵方建造的遠端哨站,用來
sector.impact0078.description = 沉睡在此的是第一個進入本星系的星際運輸船。\n\n回收任何能利用的東西。研究任何含有的科技。 sector.impact0078.description = 沉睡在此的是第一個進入本星系的星際運輸船。\n\n回收任何能利用的東西。研究任何含有的科技。
sector.planetaryTerminal.description = 最終目標。\n\n這麼濱海基地具有能夠發射核心到其他行星的建築。 其防禦非常嚴密。\n\n生產海上單位。盡速摧毀敵人。研究該發射建築。 sector.planetaryTerminal.description = 最終目標。\n\n這麼濱海基地具有能夠發射核心到其他行星的建築。 其防禦非常嚴密。\n\n生產海上單位。盡速摧毀敵人。研究該發射建築。
status.burning.name = 燃燒
status.freezing.name = 凍結
status.wet.name = 浸濕
status.muddy.name = 泥濘
status.melting.name = 融化
status.sapped.name = 被吸血
status.spore-slowed.name = 孢子緩速
status.tarred.name = 焦油
status.overclock.name = 快轉
status.shocked.name = 電擊
status.blasted.name = 爆炸
status.unmoving.name = 立定
settings.language = 語言 settings.language = 語言
settings.data = 遊戲資料 settings.data = 遊戲資料
settings.reset = 重設為預設設定 settings.reset = 重設為預設設定
@@ -653,6 +669,7 @@ stat.output = 輸出
stat.booster = 強化 stat.booster = 強化
stat.tiles = 需求方塊 stat.tiles = 需求方塊
stat.affinities = 親和方塊 stat.affinities = 親和方塊
stat.opposites = 相對方塊
stat.powercapacity = 蓄電量 stat.powercapacity = 蓄電量
stat.powershot = 能量/射擊 stat.powershot = 能量/射擊
stat.damage = 傷害 stat.damage = 傷害
@@ -714,6 +731,12 @@ stat.abilities = 能力
stat.canboost = 可加速 stat.canboost = 可加速
stat.flying = 飛行中 stat.flying = 飛行中
stat.ammouse = 彈藥使用 stat.ammouse = 彈藥使用
stat.damagemultiplier = 傷害加成
stat.healthmultiplier = 血量加成
stat.speedmultiplier = 速度加成
stat.reloadmultiplier = 射速加成
stat.buildspeedmultiplier = 建造速度加成
stat.reactive = 具反應性
ability.forcefield = 防護罩 ability.forcefield = 防護罩
ability.repairfield = 維修力場 ability.repairfield = 維修力場
@@ -749,17 +772,14 @@ units.processorcontrol = [lightgray]由微處理器控制
bullet.damage = [stat]{0}[lightgray]傷害 bullet.damage = [stat]{0}[lightgray]傷害
bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格 bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
bullet.incendiary = [stat]燃燒 bullet.incendiary = [stat]燃燒
bullet.sapping = [stat]吸血
bullet.homing = [stat]追蹤 bullet.homing = [stat]追蹤
bullet.shock = [stat]電擊
bullet.frag = [stat]破片彈 bullet.frag = [stat]破片彈
bullet.lightning = [stat]{0}[lightgray]x 電弧 ~[stat]{1}[lightgray] 傷害
bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害 bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害
bullet.knockback = [stat]{0}[lightgray]擊退 bullet.knockback = [stat]{0}[lightgray]擊退
bullet.pierce = [stat]{0}[lightgray]×穿刺 bullet.pierce = [stat]{0}[lightgray]×穿刺
bullet.infinitepierce = [stat]穿刺 bullet.infinitepierce = [stat]穿刺
bullet.healpercent = [stat]{0}[lightgray]% 回復 bullet.healpercent = [stat]{0}[lightgray]% 回復
bullet.freezing = [stat]冷凍
bullet.tarred = [stat]焦油
bullet.multiplier = [stat]{0}[lightgray]×彈藥倍數 bullet.multiplier = [stat]{0}[lightgray]×彈藥倍數
bullet.reload = [stat]{0}[lightgray]×射擊速率 bullet.reload = [stat]{0}[lightgray]×射擊速率
@@ -800,6 +820,8 @@ setting.logichints.name = 邏輯提示
setting.flow.name = 顯示資源輸送速度 setting.flow.name = 顯示資源輸送速度
setting.backgroundpause.name = 背景執行時暫停 setting.backgroundpause.name = 背景執行時暫停
setting.buildautopause.name = 自動暫停建築 setting.buildautopause.name = 自動暫停建築
setting.doubletapmine.name = 連續點擊以挖礦
setting.modcrashdisable.name = 閃退後停用模組
setting.animatedwater.name = 液體動畫 setting.animatedwater.name = 液體動畫
setting.animatedshields.name = 護盾動畫 setting.animatedshields.name = 護盾動畫
setting.antialias.name = 消除鋸齒[lightgray](需要重新啟動遊戲)[] setting.antialias.name = 消除鋸齒[lightgray](需要重新啟動遊戲)[]
@@ -987,6 +1009,7 @@ content.item.name = 物品
content.liquid.name = 液體 content.liquid.name = 液體
content.unit.name = 單位 content.unit.name = 單位
content.block.name = 方塊 content.block.name = 方塊
content.status.name = 狀態效果
content.sector.name = 地區 content.sector.name = 地區
item.copper.name = item.copper.name =
@@ -1455,7 +1478,7 @@ block.ripple.description = 極為強大的迫擊炮塔。一次向敵人發射
block.cyclone.description = 一種對空和對地的大型砲塔。向附近單位發射爆裂性的碎塊。 block.cyclone.description = 一種對空和對地的大型砲塔。向附近單位發射爆裂性的碎塊。
block.spectre.description = 一種雙炮管的巨型砲塔。向空中及地面敵人發射大型的穿甲彈。 block.spectre.description = 一種雙炮管的巨型砲塔。向空中及地面敵人發射大型的穿甲彈。
block.meltdown.description = 一種巨型雷射砲塔。充電並發射持續性的雷射光束。需要冷卻液以運作。 block.meltdown.description = 一種巨型雷射砲塔。充電並發射持續性的雷射光束。需要冷卻液以運作。
block.foreshadow.description = 在遠方狙擊單一目標。 block.foreshadow.description = 在遠方狙擊單一目標。優先攻擊總血量較高的單位。
block.repair-point.description = 持續治療附近最近的受損單位。 block.repair-point.description = 持續治療附近最近的受損單位。
block.segment.description = 傷害並摧毀來襲的砲彈。無法將雷射武器的光束作為目標。 block.segment.description = 傷害並摧毀來襲的砲彈。無法將雷射武器的光束作為目標。
block.parallax.description = 發射牽引光束,牽引空中目標,並在此過程中損壞它們。 block.parallax.description = 發射牽引光束,牽引空中目標,並在此過程中損壞它們。
@@ -1536,6 +1559,8 @@ lst.unitcontrol = 控制現在綁定的單位
lst.unitradar = 偵測綁定單位附近的單位 lst.unitradar = 偵測綁定單位附近的單位
lst.unitlocate = 尋找整個地圖上特定的位置/建築\n需要綁定的單位 lst.unitlocate = 尋找整個地圖上特定的位置/建築\n需要綁定的單位
logic.nounitbuild = [red]單位建造邏輯已被禁止。
lenum.type = 建築/單位種類。\n例操控單位建造光矛砲應使用[accent]@lancer[],而非字串 lenum.type = 建築/單位種類。\n例操控單位建造光矛砲應使用[accent]@lancer[],而非字串
lenum.shoot = 對該位置開火 lenum.shoot = 對該位置開火
lenum.shootp = 對指定單位/建築開火,具自瞄功能 lenum.shootp = 對指定單位/建築開火,具自瞄功能
@@ -1543,10 +1568,14 @@ lenum.configure = 建築設定,如分類器、兵器工廠
lenum.enabled = 確認該建築是否啟用 lenum.enabled = 確認該建築是否啟用
laacess.color = 設定照明燈的顏色 laacess.color = 設定照明燈的顏色
laccess.controller = 單位的控制者。受處理器控制時回傳處理器。\n在隊形中回傳領導的單位。\n否則回傳單位自己。
laccess.dead = 單位或建築是否已死亡或不存在。
laccess.controlled = 將回傳:\n處理器控制[accent]@ctrlProcessor[]\n玩家控制[accent]@ctrlPlayer[]\n在隊形中[accent]@ctrlFormation[]\n其他[accent]0[]。
laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead.
graphicstype.clear = 重製版面為指定顏色 graphicstype.clear = 重製版面為指定顏色
graphicstype.color = 接下來的圖畫指令設定顏色 graphicstype.color = 後續所有圖畫指令設定顏色
graphicstype.stroke = 接下來的圖畫指令設定直線寬度 graphicstype.stroke = 後續所有圖畫指令設定直線寬度
graphicstype.line = 畫一直線 graphicstype.line = 畫一直線
graphicstype.rect = 畫實心長方形 graphicstype.rect = 畫實心長方形
graphicstype.linerect = 畫空心長方形 graphicstype.linerect = 畫空心長方形
@@ -1636,6 +1665,7 @@ unitlocate.outx = 回傳 X 座標
unitlocate.outy = 回傳 Y 座標 unitlocate.outy = 回傳 Y 座標
unitlocate.group = 搜索建築種類 unitlocate.group = 搜索建築種類
lenum.idle = 預設AI
lenum.stop = 停止移動/挖礦/建造 lenum.stop = 停止移動/挖礦/建造
lenum.move = 移動到指定位置 lenum.move = 移動到指定位置
lenum.approach = 移動到距離指定位置一段距離的地方 lenum.approach = 移動到距離指定位置一段距離的地方

View File

@@ -114,3 +114,8 @@ simba-fs
RedRadiation RedRadiation
Marko Zajc Marko Zajc
CPX MC CPX MC
Phinner
BTA_Susideur
nilq
AsgerHB
AzCraft

View File

@@ -315,3 +315,22 @@
63418=legacy-unit-factory-ground|block-legacy-unit-factory-ground-medium 63418=legacy-unit-factory-ground|block-legacy-unit-factory-ground-medium
63417=interplanetary-accelerator|block-interplanetary-accelerator-medium 63417=interplanetary-accelerator|block-interplanetary-accelerator-medium
63416=basalt-boulder|block-basalt-boulder-medium 63416=basalt-boulder|block-basalt-boulder-medium
63415=none|status-none-icon
63414=burning|status-burning-icon
63413=freezing|status-freezing-icon
63412=unmoving|status-unmoving-icon
63411=slow|status-slow-icon
63410=wet|status-wet-icon
63409=muddy|status-muddy-icon
63408=melting|status-melting-icon
63407=sapped|status-sapped-icon
63406=spore-slowed|status-spore-slowed-icon
63405=tarred|status-tarred-icon
63404=overdrive|status-overdrive-icon
63403=overclock|status-overclock-icon
63402=shielded|status-shielded-icon
63401=boss|status-boss-icon
63400=shocked|status-shocked-icon
63399=blasted|status-blasted-icon
63398=corroded|status-corroded-icon
63397=disarmed|status-disarmed-icon

View File

@@ -143,7 +143,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
if(assets.update(1000 / loadingFPS)){ if(assets.update(1000 / loadingFPS)){
loader.dispose(); loader.dispose();
loader = null; loader = null;
Log.info("Total time to load: @", Time.timeSinceMillis(beginTime)); Log.info("Total time to load: @ms", Time.timeSinceMillis(beginTime));
for(ApplicationListener listener : modules){ for(ApplicationListener listener : modules){
listener.init(); listener.init();
} }

View File

@@ -32,7 +32,6 @@ public class BaseAI{
private static final Seq<Tile> tmpTiles = new Seq<>(); private static final Seq<Tile> tmpTiles = new Seq<>();
private static int correct = 0, incorrect = 0; private static int correct = 0, incorrect = 0;
private static boolean anyDrills;
private int lastX, lastY, lastW, lastH; private int lastX, lastY, lastW, lastH;
private boolean triedWalls, foundPath; private boolean triedWalls, foundPath;
@@ -228,7 +227,7 @@ public class BaseAI{
//make sure at least X% of resource requirements are met //make sure at least X% of resource requirements are met
correct = incorrect = 0; correct = incorrect = 0;
anyDrills = false; boolean anyDrills = false;
if(part.required instanceof Item){ if(part.required instanceof Item){
for(Stile tile : result.tiles){ for(Stile tile : result.tiles){

View File

@@ -108,7 +108,7 @@ public class Pathfinder implements Runnable{
/** Packs a tile into its internal representation. */ /** Packs a tile into its internal representation. */
private int packTile(Tile tile){ private int packTile(Tile tile){
boolean nearLiquid = false, nearSolid = false, nearGround = false; boolean nearLiquid = false, nearSolid = false, nearGround = false, solid = tile.solid();
for(int i = 0; i < 4; i++){ for(int i = 0; i < 4; i++){
Tile other = tile.nearby(i); Tile other = tile.nearby(i);
@@ -120,9 +120,9 @@ public class Pathfinder implements Runnable{
} }
return PathTile.get( return PathTile.get(
tile.build == null || !tile.solid() || tile.block() instanceof CoreBlock ? 0 : Math.min((int)(tile.build.health / 40), 80), tile.build == null || !solid || tile.block() instanceof CoreBlock ? 0 : Math.min((int)(tile.build.health / 40), 80),
tile.getTeamID(), tile.getTeamID(),
tile.solid(), solid,
tile.floor().isLiquid, tile.floor().isLiquid,
tile.staticDarkness() >= 2 || (tile.floor().solid && tile.block() == Blocks.air), tile.staticDarkness() >= 2 || (tile.floor().solid && tile.block() == Blocks.air),
nearLiquid, nearLiquid,
@@ -149,7 +149,7 @@ public class Pathfinder implements Runnable{
} }
/** Update a tile in the internal pathfinding grid. /** Update a tile in the internal pathfinding grid.
* Causes a complete pathfinding reclaculation. Main thread only. */ * Causes a complete pathfinding recalculation. Main thread only. */
public void updateTile(Tile tile){ public void updateTile(Tile tile){
if(net.client()) return; if(net.client()) return;

View File

@@ -33,7 +33,7 @@ public class FormationAI extends AIController implements FormationMember{
} }
if(unit.type.canBoost){ if(unit.type.canBoost){
unit.elevation = Mathf.approachDelta(unit.elevation, unit.onSolid() ? 1f : leader.type.canBoost ? leader.elevation : 0f, 0.08f); unit.elevation = Mathf.approachDelta(unit.elevation, unit.onSolid() ? 1f : leader.type.canBoost ? leader.elevation : 0f, unit.type.riseSpeed);
} }
unit.controlWeapons(true, leader.isShooting); unit.controlWeapons(true, leader.isShooting);

View File

@@ -21,7 +21,11 @@ public class GroundAI extends AIController{
if(core != null && unit.within(core, unit.range() / 1.1f + core.block.size * tilesize / 2f)){ if(core != null && unit.within(core, unit.range() / 1.1f + core.block.size * tilesize / 2f)){
target = core; target = core;
Arrays.fill(targets, core); for(int i = 0; i < targets.length; i++){
if(unit.mounts[i].weapon.bullet.collidesGround){
targets[i] = core;
}
}
} }
if((core == null || !unit.within(core, unit.range() * 0.5f)) && command() == UnitCommand.attack){ if((core == null || !unit.within(core, unit.range() * 0.5f)) && command() == UnitCommand.attack){
@@ -44,7 +48,7 @@ public class GroundAI extends AIController{
} }
if(unit.type.canBoost && !unit.onSolid()){ if(unit.type.canBoost && !unit.onSolid()){
unit.elevation = Mathf.approachDelta(unit.elevation, 0f, 0.08f); unit.elevation = Mathf.approachDelta(unit.elevation, 0f, unit.type.riseSpeed);
} }
if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type.rotateShooting){ if(!Units.invalidateTarget(target, unit, unit.range()) && unit.type.rotateShooting){

View File

@@ -20,14 +20,15 @@ public class StatusEffects implements ContentList{
none = new StatusEffect("none"); none = new StatusEffect("none");
burning = new StatusEffect("burning"){{ burning = new StatusEffect("burning"){{
color = Pal.lightFlame; color = Color.valueOf("ffc455");
damage = 0.12f; //over 8 seconds, this would be ~60 damage damage = 0.12f; //over 8 seconds, this would be ~60 damage
effect = Fx.burning; effect = Fx.burning;
transitionDamage = 8f;
init(() -> { init(() -> {
opposite(wet, freezing); opposite(wet, freezing);
trans(tarred, ((unit, time, newTime, result) -> { affinity(tarred, ((unit, time, newTime, result) -> {
unit.damagePierce(8f); unit.damagePierce(transitionDamage);
Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f)); Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f));
result.set(burning, Math.min(time + newTime, 300f)); result.set(burning, Math.min(time + newTime, 300f));
})); }));
@@ -39,12 +40,13 @@ public class StatusEffects implements ContentList{
speedMultiplier = 0.6f; speedMultiplier = 0.6f;
healthMultiplier = 0.8f; healthMultiplier = 0.8f;
effect = Fx.freezing; effect = Fx.freezing;
transitionDamage = 18f;
init(() -> { init(() -> {
opposite(melting, burning); opposite(melting, burning);
trans(blasted, ((unit, time, newTime, result) -> { affinity(blasted, ((unit, time, newTime, result) -> {
unit.damagePierce(18f); unit.damagePierce(transitionDamage);
result.set(freezing, time); result.set(freezing, time);
})); }));
}); });
@@ -65,10 +67,11 @@ public class StatusEffects implements ContentList{
speedMultiplier = 0.94f; speedMultiplier = 0.94f;
effect = Fx.wet; effect = Fx.wet;
effectChance = 0.09f; effectChance = 0.09f;
transitionDamage = 14;
init(() -> { init(() -> {
trans(shocked, ((unit, time, newTime, result) -> { affinity(shocked, ((unit, time, newTime, result) -> {
unit.damagePierce(14f); unit.damagePierce(transitionDamage);
if(unit.team == state.rules.waveTeam){ if(unit.team == state.rules.waveTeam){
Events.fire(Trigger.shock); Events.fire(Trigger.shock);
} }
@@ -94,7 +97,7 @@ public class StatusEffects implements ContentList{
init(() -> { init(() -> {
opposite(wet, freezing); opposite(wet, freezing);
trans(tarred, ((unit, time, newTime, result) -> { affinity(tarred, ((unit, time, newTime, result) -> {
unit.damagePierce(8f); unit.damagePierce(8f);
Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f)); Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f));
result.set(melting, Math.min(time + newTime, 200f)); result.set(melting, Math.min(time + newTime, 200f));
@@ -123,8 +126,8 @@ public class StatusEffects implements ContentList{
effect = Fx.oily; effect = Fx.oily;
init(() -> { init(() -> {
trans(melting, ((unit, time, newTime, result) -> result.set(melting, newTime + time))); affinity(melting, ((unit, time, newTime, result) -> result.set(melting, newTime + time)));
trans(burning, ((unit, time, newTime, result) -> result.set(burning, newTime + time))); affinity(burning, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
}); });
}}; }};

View File

@@ -292,7 +292,7 @@ public class UnitTypes implements ContentList{
shootSound = Sounds.lasershoot; shootSound = Sounds.lasershoot;
bullet = new LaserBoltBulletType(5.2f, 14){{ bullet = new LaserBoltBulletType(5.2f, 14){{
lifetime = 37f; lifetime = 32f;
healPercent = 5f; healPercent = 5f;
collidesTeam = true; collidesTeam = true;
backColor = Pal.heal; backColor = Pal.heal;
@@ -309,6 +309,7 @@ public class UnitTypes implements ContentList{
health = 320f; health = 320f;
buildSpeed = 0.9f; buildSpeed = 0.9f;
armor = 4f; armor = 4f;
riseSpeed = 0.07f;
mineTier = 2; mineTier = 2;
mineSpeed = 5f; mineSpeed = 5f;
@@ -364,6 +365,7 @@ public class UnitTypes implements ContentList{
canBoost = true; canBoost = true;
armor = 9f; armor = 9f;
landShake = 2f; landShake = 2f;
riseSpeed = 0.05f;
commandLimit = 10; commandLimit = 10;
mechFrontSway = 0.55f; mechFrontSway = 0.55f;
@@ -411,11 +413,12 @@ public class UnitTypes implements ContentList{
mechStepShake = 0.15f; mechStepShake = 0.15f;
ammoType = AmmoTypes.powerHigh; ammoType = AmmoTypes.powerHigh;
speed = 0.38f; speed = 0.39f;
boostMultiplier = 2.2f; boostMultiplier = 2.2f;
engineOffset = 12f; engineOffset = 12f;
engineSize = 6f; engineSize = 6f;
lowAltitude = true; lowAltitude = true;
riseSpeed = 0.02f;
health = 7500f; health = 7500f;
armor = 9f; armor = 9f;
@@ -442,7 +445,7 @@ public class UnitTypes implements ContentList{
cooldownTime = 200f; cooldownTime = 200f;
bullet = new ContinuousLaserBulletType(){{ bullet = new ContinuousLaserBulletType(){{
damage = 28f; damage = 30f;
length = 175f; length = 175f;
hitEffect = Fx.hitMeltHeal; hitEffect = Fx.hitMeltHeal;
drawSize = 420f; drawSize = 420f;
@@ -453,7 +456,7 @@ public class UnitTypes implements ContentList{
shootEffect = Fx.greenLaserChargeSmall; shootEffect = Fx.greenLaserChargeSmall;
incendChance = 0.09f; incendChance = 0.1f;
incendSpread = 5f; incendSpread = 5f;
incendAmount = 1; incendAmount = 1;

View File

@@ -278,6 +278,10 @@ public class ContentLoader{
return getByID(ContentType.bullet, id); return getByID(ContentType.bullet, id);
} }
public Seq<StatusEffect> statusEffects(){
return getBy(ContentType.status);
}
public Seq<SectorPreset> sectors(){ public Seq<SectorPreset> sectors(){
return getBy(ContentType.sector); return getBy(ContentType.sector);
} }

View File

@@ -139,7 +139,9 @@ public class Control implements ApplicationListener, Loadable{
})); }));
Events.on(UnlockEvent.class, e -> { Events.on(UnlockEvent.class, e -> {
if(e.content.showUnlock()){
ui.hudfrag.showUnlock(e.content); ui.hudfrag.showUnlock(e.content);
}
checkAutoUnlocks(); checkAutoUnlocks();
@@ -429,11 +431,7 @@ public class Control implements ApplicationListener, Loadable{
music.stop(); music.stop();
} }
content.dispose();
net.dispose(); net.dispose();
Musics.dispose();
Sounds.dispose();
if(ui != null && ui.editor != null) ui.editor.dispose();
} }
@Override @Override

View File

@@ -368,7 +368,7 @@ public class Logic implements ApplicationListener{
if(state.isGame()){ if(state.isGame()){
if(!net.client()){ if(!net.client()){
state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.type.isCounted); state.enemies = Groups.unit.count(u -> u.team() == state.rules.waveTeam && u.isCounted());
} }
if(!state.isPaused()){ if(!state.isPaused()){

View File

@@ -190,7 +190,7 @@ public class NetClient implements ApplicationListener{
public static void sendChatMessage(Player player, String message){ public static void sendChatMessage(Player player, String message){
//do not receive chat messages from clients that are too young or not registered //do not receive chat messages from clients that are too young or not registered
if(Time.timeSinceMillis(player.con.connectTime) < 500 || !player.con.hasConnected || !player.isAdded()) return; if(net.server() && player != null && player.con != null && (Time.timeSinceMillis(player.con.connectTime) < 500 || !player.con.hasConnected || !player.isAdded())) return;
if(message.length() > maxTextLength){ if(message.length() > maxTextLength){
throw new ValidateException(player, "Player has sent a message above the text limit."); throw new ValidateException(player, "Player has sent a message above the text limit.");
@@ -198,6 +198,12 @@ public class NetClient implements ApplicationListener{
Events.fire(new PlayerChatEvent(player, message)); Events.fire(new PlayerChatEvent(player, message));
//log commands before they are handled
if(message.startsWith(netServer.clientCommands.getPrefix())){
//log with brackets
Log.info("<&fi@: @&fr>", "&lk" + player.name, "&lw" + message);
}
//check if it's a command //check if it's a command
CommandResponse response = netServer.clientCommands.handleMessage(message, player); CommandResponse response = netServer.clientCommands.handleMessage(message, player);
if(response.type == ResponseType.noCommand){ //no command to handle if(response.type == ResponseType.noCommand){ //no command to handle
@@ -209,7 +215,7 @@ public class NetClient implements ApplicationListener{
//special case; graphical server needs to see its message //special case; graphical server needs to see its message
if(!headless){ if(!headless){
sendMessage(message, colorizeName(player.id(), player.name), player); sendMessage(message, colorizeName(player.id, player.name), player);
} }
//server console logging //server console logging
@@ -219,8 +225,6 @@ public class NetClient implements ApplicationListener{
//this is required so other clients get the correct name even if they don't know who's sending it yet //this is required so other clients get the correct name even if they don't know who's sending it yet
Call.sendMessage(message, colorizeName(player.id(), player.name), player); Call.sendMessage(message, colorizeName(player.id(), player.name), player);
}else{ }else{
//log command to console but with brackets
Log.info("<&fi@: @&fr>", "&lk" + player.name, "&lw" + message);
//a command was sent, now get the output //a command was sent, now get the output
if(response.type != ResponseType.valid){ if(response.type != ResponseType.valid){

View File

@@ -35,13 +35,13 @@ import static mindustry.Vars.*;
public class NetServer implements ApplicationListener{ public class NetServer implements ApplicationListener{
/** note that snapshots are compressed, so the max snapshot size here is above the typical UDP safe limit */ /** note that snapshots are compressed, so the max snapshot size here is above the typical UDP safe limit */
private static final int maxSnapshotSize = 800, timerBlockSync = 0; private static final int maxSnapshotSize = 800, timerBlockSync = 0, serverSyncTime = 200;
private static final float serverSyncTime = 12, blockSyncTime = 60 * 6; private static final float blockSyncTime = 60 * 6;
private static final FloatBuffer fbuffer = FloatBuffer.allocate(20); private static final FloatBuffer fbuffer = FloatBuffer.allocate(20);
private static final Vec2 vector = new Vec2(); private static final Vec2 vector = new Vec2();
private static final Rect viewport = new Rect(); private static final Rect viewport = new Rect();
/** If a player goes away of their server-side coordinates by this distance, they get teleported back. */ /** If a player goes away of their server-side coordinates by this distance, they get teleported back. */
private static final float correctDist = tilesize * 12f; private static final float correctDist = tilesize * 14f;
public final Administration admins = new Administration(); public final Administration admins = new Administration();
public final CommandHandler clientCommands = new CommandHandler("/"); public final CommandHandler clientCommands = new CommandHandler("/");
@@ -464,12 +464,17 @@ public class NetServer implements ApplicationListener{
return; return;
} }
if(!arg[0].equalsIgnoreCase("y") && !arg[0].equalsIgnoreCase("n")){ int sign = switch(arg[0].toLowerCase()){
case "y", "yes" -> 1;
case "n", "no" -> -1;
default -> 0;
};
if(sign == 0){
player.sendMessage("[scarlet]Vote either 'y' (yes) or 'n' (no)."); player.sendMessage("[scarlet]Vote either 'y' (yes) or 'n' (no).");
return; return;
} }
int sign = arg[0].equalsIgnoreCase("y") ? 1 : -1;
currentlyKicking[0].vote(player, sign); currentlyKicking[0].vote(player, sign);
} }
}); });
@@ -656,9 +661,6 @@ public class NetServer implements ApplicationListener{
long elapsed = Time.timeSinceMillis(con.lastReceivedClientTime); long elapsed = Time.timeSinceMillis(con.lastReceivedClientTime);
float maxSpeed = unit.realSpeed(); float maxSpeed = unit.realSpeed();
if(unit.isGrounded()){
maxSpeed *= unit.floorSpeedMultiplier();
}
float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.2f; float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.2f;
@@ -734,8 +736,8 @@ public class NetServer implements ApplicationListener{
logic.skipWave(); logic.skipWave();
info("&lc@ has skipped the wave.", player.name); info("&lc@ has skipped the wave.", player.name);
}else if(action == AdminAction.ban){ }else if(action == AdminAction.ban){
netServer.admins.banPlayerIP(other.con.address);
netServer.admins.banPlayerID(other.con.uuid); netServer.admins.banPlayerID(other.con.uuid);
netServer.admins.banPlayerIP(other.con.address);
other.kick(KickReason.banned); other.kick(KickReason.banned);
info("&lc@ has banned @.", player.name, other.name); info("&lc@ has banned @.", player.name, other.name);
}else if(action == AdminAction.kick){ }else if(action == AdminAction.kick){
@@ -967,9 +969,11 @@ public class NetServer implements ApplicationListener{
return; return;
} }
NetConnection connection = player.con; var connection = player.con;
if(!player.timer(0, serverSyncTime) || !connection.hasConnected) return; if(Time.timeSinceMillis(connection.syncTime) < serverSyncTime || !connection.hasConnected) return;
connection.syncTime = Time.millis();
try{ try{
writeEntitySnapshot(player); writeEntitySnapshot(player);

View File

@@ -115,17 +115,6 @@ public class Renderer implements ApplicationListener{
@Override @Override
public void dispose(){ public void dispose(){
minimap.dispose();
effectBuffer.dispose();
blocks.dispose();
if(planets != null){
planets.dispose();
planets = null;
}
if(bloom != null){
bloom.dispose();
bloom = null;
}
Events.fire(new DisposeEvent()); Events.fire(new DisposeEvent());
} }
@@ -325,7 +314,7 @@ public class Renderer implements ApplicationListener{
int w = world.width() * tilesize, h = world.height() * tilesize; int w = world.width() * tilesize, h = world.height() * tilesize;
int memory = w * h * 4 / 1024 / 1024; int memory = w * h * 4 / 1024 / 1024;
if(memory >= 65){ if(memory >= (mobile ? 65 : 120)){
ui.showInfo("@screenshot.invalid"); ui.showInfo("@screenshot.invalid");
return; return;
} }

View File

@@ -225,14 +225,6 @@ public class UI implements ApplicationListener, Loadable{
Events.fire(new ResizeEvent()); Events.fire(new ResizeEvent());
} }
@Override
public void dispose(){
if(packer != null){
packer.dispose();
packer = null;
}
}
public TextureRegionDrawable getIcon(String name){ public TextureRegionDrawable getIcon(String name){
if(Icon.icons.containsKey(name)) return Icon.icons.get(name); if(Icon.icons.containsKey(name)) return Icon.icons.get(name);
return Core.atlas.getDrawable("error"); return Core.atlas.getDrawable("error");

View File

@@ -95,6 +95,10 @@ public abstract class UnlockableContent extends MappableContent{
return cicons[icon.ordinal()]; return cicons[icon.ordinal()];
} }
public Cicon prefDatabaseIcon(){
return Cicon.xlarge;
}
/** Iterates through any implicit dependencies of this content. /** Iterates through any implicit dependencies of this content.
* For blocks, this would be the items required to build it. */ * For blocks, this would be the items required to build it. */
public void getDependencies(Cons<UnlockableContent> cons){ public void getDependencies(Cons<UnlockableContent> cons){
@@ -115,6 +119,11 @@ public abstract class UnlockableContent extends MappableContent{
return false; return false;
} }
/** @return whether to show a notification toast when this is unlocked */
public boolean showUnlock(){
return true;
}
/** Makes this piece of content unlocked; if it already unlocked, nothing happens. */ /** Makes this piece of content unlocked; if it already unlocked, nothing happens. */
public void unlock(){ public void unlock(){
if(!unlocked && !alwaysUnlocked){ if(!unlocked && !alwaysUnlocked){

View File

@@ -177,7 +177,7 @@ public class WaveGraph extends Table{
t.button(b -> { t.button(b -> {
Color tcolor = color(type).cpy(); Color tcolor = color(type).cpy();
b.image().size(32f).update(i -> i.setColor(b.isChecked() ? Tmp.c1.set(tcolor).mul(0.5f) : tcolor)).get().act(1); b.image().size(32f).update(i -> i.setColor(b.isChecked() ? Tmp.c1.set(tcolor).mul(0.5f) : tcolor)).get().act(1);
b.image(type.icon(Cicon.medium)).padRight(20).update(i -> i.setColor(b.isChecked() ? Color.gray : Color.white)).get().act(1); b.image(type.icon(Cicon.medium)).size(32f).padRight(20).update(i -> i.setColor(b.isChecked() ? Color.gray : Color.white)).get().act(1);
b.margin(0f); b.margin(0f);
}, Styles.fullTogglet, () -> { }, Styles.fullTogglet, () -> {
if(!hidden.add(type)){ if(!hidden.add(type)){

View File

@@ -248,7 +248,7 @@ public class Damage{
tmpUnit = null; tmpUnit = null;
Cons<Unit> cons = e -> { Units.nearbyEnemies(hitter.team, rect, e -> {
if((tmpUnit != null && e.dst2(x, y) > tmpUnit.dst2(x, y)) || !e.checkTarget(hitter.type.collidesAir, hitter.type.collidesGround)) return; if((tmpUnit != null && e.dst2(x, y) > tmpUnit.dst2(x, y)) || !e.checkTarget(hitter.type.collidesAir, hitter.type.collidesGround)) return;
e.hitbox(hitrect); e.hitbox(hitrect);
@@ -263,9 +263,7 @@ public class Damage{
if(vec != null){ if(vec != null){
tmpUnit = e; tmpUnit = e;
} }
}; });
Units.nearbyEnemies(hitter.team, rect, cons);
if(tmpBuilding != null && tmpUnit != null){ if(tmpBuilding != null && tmpUnit != null){
if(Mathf.dst2(x, y, tmpUnit.getX(), tmpUnit.getY()) <= Mathf.dst2(x, y, tmpBuilding.getX(), tmpBuilding.getY())){ if(Mathf.dst2(x, y, tmpUnit.getX(), tmpUnit.getY()) <= Mathf.dst2(x, y, tmpBuilding.getX(), tmpBuilding.getY())){

View File

@@ -55,7 +55,9 @@ public class EntityGroup<T extends Entityc> implements Iterable<T>{
} }
public void update(){ public void update(){
each(Entityc::update); for(index = 0; index < array.size; index++){
array.items[index].update();
}
} }
public Seq<T> copy(Seq<T> arr){ public Seq<T> copy(Seq<T> arr){

View File

@@ -128,7 +128,7 @@ public class Units{
nearby(x, y, width, height, unit -> { nearby(x, y, width, height, unit -> {
if(boolResult) return; if(boolResult) return;
if((unit.isGrounded() && !unit.type.hovering) == ground){ if((unit.isGrounded() && !unit.type.hovering) == ground){
unit.hitbox(hitrect); unit.hitboxTile(hitrect);
if(hitrect.overlaps(x, y, width, height)){ if(hitrect.overlaps(x, y, width, height)){
boolResult = true; boolResult = true;
@@ -218,7 +218,7 @@ public class Units{
cdist = 0f; cdist = 0f;
nearbyEnemies(team, x - range, y - range, range*2f, range*2f, e -> { nearbyEnemies(team, x - range, y - range, range*2f, range*2f, e -> {
if(e.dead() || !predicate.get(e) || !e.within(x, y, range + e.hitSize/2f)) return; if(e.dead() || !predicate.get(e) || e.team == Team.derelict || !e.within(x, y, range + e.hitSize/2f)) return;
float cost = sort.cost(e, x, y); float cost = sort.cost(e, x, y);
if(result == null || cost < cdist){ if(result == null || cost < cdist){

View File

@@ -161,6 +161,11 @@ public abstract class BulletType extends Content{
return Math.max(speed * lifetime * (1f - drag), maxRange); return Math.max(speed * lifetime * (1f - drag), maxRange);
} }
/** @return continuous damage in damage/sec, or -1 if not continuous. */
public float continuousDamage(){
return -1f;
}
public boolean testCollision(Bullet bullet, Building tile){ public boolean testCollision(Bullet bullet, Building tile){
return healPercent <= 0.001f || tile.team != bullet.team || tile.healthf() < 1f; return healPercent <= 0.001f || tile.team != bullet.team || tile.healthf() < 1f;
} }

View File

@@ -46,6 +46,11 @@ public class ContinuousLaserBulletType extends BulletType{
this(0); this(0);
} }
@Override
public float continuousDamage(){
return damage / 5f * 60f;
}
@Override @Override
public float estimateDPS(){ public float estimateDPS(){
//assume firing duration is about 100 by default, may not be accurate there's no way of knowing in this method //assume firing duration is about 100 by default, may not be accurate there's no way of knowing in this method
@@ -55,7 +60,7 @@ public class ContinuousLaserBulletType extends BulletType{
@Override @Override
public float range(){ public float range(){
return length; return Math.max(length, maxRange);
} }
@Override @Override

View File

@@ -56,7 +56,7 @@ public class LaserBulletType extends BulletType{
@Override @Override
public float range(){ public float range(){
return length; return Math.max(length, maxRange);
} }
@Override @Override

View File

@@ -19,6 +19,8 @@ public class LightningBulletType extends BulletType{
hitEffect = Fx.hitLancer; hitEffect = Fx.hitLancer;
keepVelocity = false; keepVelocity = false;
hittable = false; hittable = false;
//for stats
status = StatusEffects.shocked;
} }
@Override @Override

View File

@@ -50,7 +50,7 @@ public class SapBulletType extends BulletType{
@Override @Override
public float range(){ public float range(){
return length; return Math.max(length, maxRange);
} }
@Override @Override

View File

@@ -47,7 +47,7 @@ public class ShrapnelBulletType extends BulletType{
@Override @Override
public float range(){ public float range(){
return length; return Math.max(length, maxRange);
} }
@Override @Override

View File

@@ -33,6 +33,7 @@ import mindustry.world.*;
import mindustry.world.blocks.ConstructBlock.*; import mindustry.world.blocks.ConstructBlock.*;
import mindustry.world.blocks.*; import mindustry.world.blocks.*;
import mindustry.world.blocks.environment.*; import mindustry.world.blocks.environment.*;
import mindustry.world.blocks.logic.LogicBlock.*;
import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.payloads.*;
import mindustry.world.blocks.power.*; import mindustry.world.blocks.power.*;
import mindustry.world.consumers.*; import mindustry.world.consumers.*;
@@ -940,7 +941,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
/** Called when arbitrary configuration is applied to a tile. */ /** Called when arbitrary configuration is applied to a tile. */
public void configured(@Nullable Unit builder, @Nullable Object value){ public void configured(@Nullable Unit builder, @Nullable Object value){
//null is of type void.class; anonymous classes use their superclass. //null is of type void.class; anonymous classes use their superclass.
Class<?> type = value == null ? void.class : value.getClass().isAnonymousClass() || value.getClass().getSimpleName().startsWith("adapter") ? value.getClass().getSuperclass() : value.getClass(); Class<?> type = value == null ? void.class : value.getClass().isAnonymousClass() ? value.getClass().getSuperclass() : value.getClass();
if(value instanceof Item) type = Item.class; if(value instanceof Item) type = Item.class;
if(value instanceof Block) type = Block.class; if(value instanceof Block) type = Block.class;
@@ -1360,12 +1361,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
@Override @Override
public void control(LAccess type, Object p1, double p2, double p3, double p4){ public void control(LAccess type, Object p1, double p2, double p3, double p4){
//don't execute configure instructions as the client //don't execute configure instructions that copy logic building configures; this can cause extreme lag
if(type == LAccess.configure && block.logicConfigurable && !net.client()){ if(type == LAccess.configure && block.logicConfigurable && !(p1 instanceof LogicBuild)){
//change config only if it's new //change config only if it's new
Object prev = senseObject(LAccess.config); if(senseObject(LAccess.config) != p1){
if(prev != p1){ configured(null, p1);
configureAny(p1);
} }
} }
} }

View File

@@ -4,6 +4,7 @@ import arc.func.*;
import arc.math.geom.*; import arc.math.geom.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.*;
import mindustry.ai.formations.*; import mindustry.ai.formations.*;
import mindustry.ai.types.*; import mindustry.ai.types.*;
import mindustry.annotations.Annotations.*; import mindustry.annotations.Annotations.*;
@@ -29,7 +30,7 @@ abstract class CommanderComp implements Entityc, Posc{
transient float minFormationSpeed; transient float minFormationSpeed;
public void update(){ public void update(){
if(controlling.isEmpty()){ if(controlling.isEmpty() && !Vars.net.client()){
formation = null; formation = null;
} }

View File

@@ -110,8 +110,12 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
unit.aim(mouseX, mouseY); unit.aim(mouseX, mouseY);
//this is only necessary when the thing being controlled isn't synced //this is only necessary when the thing being controlled isn't synced
unit.controlWeapons(shooting, shooting); unit.controlWeapons(shooting, shooting);
//save previous formation to prevent reset
var formation = unit.formation;
//extra precaution, necessary for non-synced things //extra precaution, necessary for non-synced things
unit.controller(this); unit.controller(this);
//keep previous formation
unit.formation = formation;
} }
@Override @Override
@@ -130,7 +134,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
//update some basic state to sync things //update some basic state to sync things
if(unit.type.canBoost){ if(unit.type.canBoost){
Tile tile = unit.tileOn(); Tile tile = unit.tileOn();
unit.elevation = Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f); unit.elevation = Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, unit.type.riseSpeed);
} }
}else if((core = bestCore()) != null){ }else if((core = bestCore()) != null){
//have a small delay before death to prevent the camera from jumping around too quickly //have a small delay before death to prevent the camera from jumping around too quickly
@@ -219,7 +223,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra
con.kick(reason); con.kick(reason);
} }
void kick(String reason, int duration){ void kick(String reason, long duration){
con.kick(reason, duration); con.kick(reason, duration);
} }

View File

@@ -19,7 +19,7 @@ abstract class StatusComp implements Posc, Flyingc{
private Seq<StatusEntry> statuses = new Seq<>(); private Seq<StatusEntry> statuses = new Seq<>();
private transient Bits applied = new Bits(content.getBy(ContentType.status).size); private transient Bits applied = new Bits(content.getBy(ContentType.status).size);
@ReadOnly transient float speedMultiplier = 1, damageMultiplier = 1, healthMultiplier = 1, reloadMultiplier = 1, buildSpeedMultiplier = 1; @ReadOnly transient float speedMultiplier = 1, damageMultiplier = 1, healthMultiplier = 1, reloadMultiplier = 1, buildSpeedMultiplier = 1, dragMultiplier = 1;
@ReadOnly transient boolean disarmed = false; @ReadOnly transient boolean disarmed = false;
@Import UnitType type; @Import UnitType type;
@@ -33,6 +33,11 @@ abstract class StatusComp implements Posc, Flyingc{
void apply(StatusEffect effect, float duration){ void apply(StatusEffect effect, float duration){
if(effect == StatusEffects.none || effect == null || isImmune(effect)) return; //don't apply empty or immune effects if(effect == StatusEffects.none || effect == null || isImmune(effect)) return; //don't apply empty or immune effects
//unlock status effects regardless of whether they were applied to friendly units
if(state.isCampaign()){
effect.unlock();
}
if(statuses.size > 0){ if(statuses.size > 0){
//check for opposite effects //check for opposite effects
for(int i = 0; i < statuses.size; i ++){ for(int i = 0; i < statuses.size; i ++){
@@ -111,7 +116,7 @@ abstract class StatusComp implements Posc, Flyingc{
} }
applied.clear(); applied.clear();
speedMultiplier = damageMultiplier = healthMultiplier = reloadMultiplier = buildSpeedMultiplier = 1f; speedMultiplier = damageMultiplier = healthMultiplier = reloadMultiplier = buildSpeedMultiplier = dragMultiplier = 1f;
disarmed = false; disarmed = false;
if(statuses.isEmpty()) return; if(statuses.isEmpty()) return;
@@ -135,6 +140,7 @@ abstract class StatusComp implements Posc, Flyingc{
damageMultiplier *= entry.effect.damageMultiplier; damageMultiplier *= entry.effect.damageMultiplier;
reloadMultiplier *= entry.effect.reloadMultiplier; reloadMultiplier *= entry.effect.reloadMultiplier;
buildSpeedMultiplier *= entry.effect.buildSpeedMultiplier; buildSpeedMultiplier *= entry.effect.buildSpeedMultiplier;
dragMultiplier *= entry.effect.dragMultiplier;
disarmed |= entry.effect.disarm; disarmed |= entry.effect.disarm;

View File

@@ -28,12 +28,13 @@ import mindustry.world.blocks.environment.*;
import mindustry.world.blocks.payloads.*; import mindustry.world.blocks.payloads.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
import static mindustry.logic.GlobalConstants.*;
@Component(base = true) @Component(base = true)
abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Commanderc, Displayable, Senseable, Ranged, Minerc, Builderc{ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Commanderc, Displayable, Senseable, Ranged, Minerc, Builderc{
@Import boolean hovering, dead, disarmed; @Import boolean hovering, dead, disarmed;
@Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, minFormationSpeed; @Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, minFormationSpeed, dragMultiplier;
@Import Team team; @Import Team team;
@Import int id; @Import int id;
@Import @Nullable Tile mineTile; @Import @Nullable Tile mineTile;
@@ -140,9 +141,9 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
case mineY -> mining() ? mineTile.y : -1; case mineY -> mining() ? mineTile.y : -1;
case flag -> flag; case flag -> flag;
case controlled -> !isValid() ? 0 : case controlled -> !isValid() ? 0 :
controller instanceof LogicAI ? GlobalConstants.ctrlProcessor : controller instanceof LogicAI ? ctrlProcessor :
controller instanceof Player ? GlobalConstants.ctrlPlayer : controller instanceof Player ? ctrlPlayer :
controller instanceof FormationAI ? GlobalConstants.ctrlFormation : controller instanceof FormationAI ? ctrlFormation :
0; 0;
case commanded -> controller instanceof FormationAI && isValid() ? 1 : 0; case commanded -> controller instanceof FormationAI && isValid() ? 1 : 0;
case payloadCount -> self() instanceof Payloadc pay ? pay.payloads().size : 0; case payloadCount -> self() instanceof Payloadc pay ? pay.payloads().size : 0;
@@ -164,7 +165,6 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
pay.payloads().peek() instanceof BuildPayload p2 ? p2.block() : null) : null; pay.payloads().peek() instanceof BuildPayload p2 ? p2.block() : null) : null;
default -> noSensed; default -> noSensed;
}; };
} }
@Override @Override
@@ -186,6 +186,10 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
return !disarmed && !(type.canBoost && isFlying()); return !disarmed && !(type.canBoost && isFlying());
} }
public boolean isCounted(){
return type.isCounted;
}
@Override @Override
public int itemCapacity(){ public int itemCapacity(){
return type.itemCapacity; return type.itemCapacity;
@@ -325,7 +329,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
} }
} }
drag = type.drag * (isGrounded() ? (floorOn().dragMultiplier) : 1f); drag = type.drag * (isGrounded() ? (floorOn().dragMultiplier) : 1f) * dragMultiplier;
//apply knockback based on spawns //apply knockback based on spawns
if(team != state.rules.waveTeam && state.hasSpawns() && (!net.client() || isLocal())){ if(team != state.rules.waveTeam && state.hasSpawns() && (!net.client() || isLocal())){

View File

@@ -90,7 +90,7 @@ public class AIController implements UnitController{
if(tile == targetTile || (costType == Pathfinder.costNaval && !targetTile.floor().isLiquid)) return; if(tile == targetTile || (costType == Pathfinder.costNaval && !targetTile.floor().isLiquid)) return;
unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.speed())); unit.moveAt(vec.trns(unit.angleTo(targetTile.worldx(), targetTile.worldy()), unit.speed()));
} }
protected void updateWeapons(){ protected void updateWeapons(){

View File

@@ -419,18 +419,24 @@ public class EventType{
} }
public static class PlayerBanEvent{ public static class PlayerBanEvent{
@Nullable
public final Player player; public final Player player;
public final String uuid;
public PlayerBanEvent(Player player){ public PlayerBanEvent(Player player, String uuid){
this.player = player; this.player = player;
this.uuid = uuid;
} }
} }
public static class PlayerUnbanEvent{ public static class PlayerUnbanEvent{
@Nullable
public final Player player; public final Player player;
public final String uuid;
public PlayerUnbanEvent(Player player){ public PlayerUnbanEvent(Player player, String uuid){
this.player = player; this.player = player;
this.uuid = uuid;
} }
} }

View File

@@ -63,15 +63,6 @@ public class Schematics implements Loadable{
private long lastClearTime; private long lastClearTime;
public Schematics(){ public Schematics(){
Events.on(DisposeEvent.class, e -> {
previews.each((schem, m) -> m.dispose());
previews.clear();
shadowBuffer.dispose();
if(errorTexture != null){
errorTexture.dispose();
errorTexture = null;
}
});
Events.on(ClientLoadEvent.class, event -> { Events.on(ClientLoadEvent.class, event -> {
errorTexture = new Texture("sprites/error.png"); errorTexture = new Texture("sprites/error.png");

View File

@@ -19,7 +19,7 @@ import mindustry.world.blocks.power.*;
import static arc.Core.*; import static arc.Core.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class BlockRenderer implements Disposable{ public class BlockRenderer{
public static final int crackRegions = 8, maxCrackSize = 9; public static final int crackRegions = 8, maxCrackSize = 9;
private static final int initialRequests = 32 * 32; private static final int initialRequests = 32 * 32;
@@ -300,11 +300,4 @@ public class BlockRenderer implements Disposable{
} }
@Override
public void dispose(){
shadows.dispose();
dark.dispose();
shadows = dark = null;
floor.dispose();
}
} }

View File

@@ -3,7 +3,6 @@ package mindustry.graphics;
import arc.*; import arc.*;
import arc.graphics.*; import arc.graphics.*;
import arc.graphics.Texture.*; import arc.graphics.Texture.*;
import arc.graphics.VertexAttributes.*;
import arc.graphics.gl.*; import arc.graphics.gl.*;
import arc.math.geom.*; import arc.math.geom.*;
import arc.util.*; import arc.util.*;
@@ -60,9 +59,7 @@ public class CubemapMesh implements Disposable{
public CubemapMesh(Cubemap map){ public CubemapMesh(Cubemap map){
this.map = map; this.map = map;
this.map.setFilter(TextureFilter.linear); this.map.setFilter(TextureFilter.linear);
this.mesh = new Mesh(true, vertices.length, 0, this.mesh = new Mesh(true, vertices.length, 0, VertexAttribute.position3);
new VertexAttribute(Usage.position, 3, "a_position")
);
mesh.getVerticesBuffer().limit(vertices.length); mesh.getVerticesBuffer().limit(vertices.length);
mesh.getVerticesBuffer().put(vertices, 0, vertices.length); mesh.getVerticesBuffer().put(vertices, 0, vertices.length);

View File

@@ -17,7 +17,8 @@ import java.util.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class FloorRenderer implements Disposable{ public class FloorRenderer implements Disposable{
private static final int chunksize = mobile ? 16 : 32; private static final int chunksize = mobile ? 16 : 32, chunkunits = chunksize * tilesize;
private static final float pad = tilesize/2f;
private int[][][] cache; private int[][][] cache;
private MultiCacheBatch cbatch; private MultiCacheBatch cbatch;
@@ -43,11 +44,11 @@ public class FloorRenderer implements Disposable{
Camera camera = Core.camera; Camera camera = Core.camera;
int crangex = (int)(camera.width / (chunksize * tilesize)) + 1; int
int crangey = (int)(camera.height / (chunksize * tilesize)) + 1; minx = (int)((camera.position.x - camera.width/2f - pad) / chunkunits),
miny = (int)((camera.position.y - camera.height/2f - pad) / chunkunits),
int camx = (int)(camera.position.x / (chunksize * tilesize)); maxx = Mathf.ceil((camera.position.x + camera.width/2f + pad) / chunkunits),
int camy = (int)(camera.position.y / (chunksize * tilesize)); maxy = Mathf.ceil((camera.position.y + camera.height/2f + pad) / chunkunits);
int layers = CacheLayer.all.length; int layers = CacheLayer.all.length;
@@ -55,15 +56,12 @@ public class FloorRenderer implements Disposable{
drawnLayerSet.clear(); drawnLayerSet.clear();
//preliminary layer check //preliminary layer check
for(int x = -crangex; x <= crangex; x++){ for(int x = minx; x <= maxx; x++){
for(int y = -crangey; y <= crangey; y++){ for(int y = miny; y <= maxy; y++){
int worldx = camx + x;
int worldy = camy + y;
if(!Structs.inBounds(worldx, worldy, cache)) if(!Structs.inBounds(x, y, cache)) continue;
continue;
int[] chunk = cache[worldx][worldy]; int[] chunk = cache[x][y];
//loop through all layers, and add layer index if it exists //loop through all layers, and add layer index if it exists
for(int i = 0; i < layers; i++){ for(int i = 0; i < layers; i++){
@@ -141,21 +139,22 @@ public class FloorRenderer implements Disposable{
Camera camera = Core.camera; Camera camera = Core.camera;
int crangex = (int)(camera.width / (chunksize * tilesize)) + 1; int
int crangey = (int)(camera.height / (chunksize * tilesize)) + 1; minx = (int)((camera.position.x - camera.width/2f - pad) / chunkunits),
miny = (int)((camera.position.y - camera.height/2f - pad) / chunkunits),
maxx = Mathf.ceil((camera.position.x + camera.width/2f + pad) / chunkunits),
maxy = Mathf.ceil((camera.position.y + camera.height/2f + pad) / chunkunits);
layer.begin(); layer.begin();
for(int x = -crangex; x <= crangex; x++){ for(int x = minx; x <= maxx; x++){
for(int y = -crangey; y <= crangey; y++){ for(int y = miny; y <= maxy; y++){
int worldx = (int)(camera.position.x / (chunksize * tilesize)) + x;
int worldy = (int)(camera.position.y / (chunksize * tilesize)) + y;
if(!Structs.inBounds(worldx, worldy, cache)){ if(!Structs.inBounds(x, y, cache)){
continue; continue;
} }
int[] chunk = cache[worldx][worldy]; int[] chunk = cache[x][y];
if(chunk[layer.ordinal()] == -1) continue; if(chunk[layer.ordinal()] == -1) continue;
cbatch.drawCache(chunk[layer.ordinal()]); cbatch.drawCache(chunk[layer.ordinal()]);
} }

View File

@@ -1,7 +1,6 @@
package mindustry.graphics; package mindustry.graphics;
import arc.graphics.*; import arc.graphics.*;
import arc.graphics.VertexAttributes.*;
import arc.graphics.g2d.*; import arc.graphics.g2d.*;
import arc.graphics.gl.*; import arc.graphics.gl.*;
import arc.math.*; import arc.math.*;
@@ -200,9 +199,9 @@ public class IndexedRenderer implements Disposable{
if(mesh != null) mesh.dispose(); if(mesh != null) mesh.dispose();
mesh = new Mesh(true, 6 * sprites, 0, mesh = new Mesh(true, 6 * sprites, 0,
new VertexAttribute(Usage.position, 2, "a_position"), VertexAttribute.position,
new VertexAttribute(Usage.colorPacked, 4, "a_color"), VertexAttribute.color,
new VertexAttribute(Usage.textureCoordinates, 2, "a_texCoord0")); VertexAttribute.texCoords);
vertices = new float[6 * sprites * vsize]; vertices = new float[6 * sprites * vsize];
mesh.setVertices(vertices); mesh.setVertices(vertices);
} }

View File

@@ -36,7 +36,7 @@ public class MenuRenderer implements Disposable{
Time.mark(); Time.mark();
generate(); generate();
cache(); cache();
Log.info("Time to generate menu: @", Time.elapsed()); Log.debug("Time to generate menu: @", Time.elapsed());
} }
private void generate(){ private void generate(){

View File

@@ -19,7 +19,7 @@ import mindustry.world.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
public class MinimapRenderer implements Disposable{ public class MinimapRenderer{
private static final float baseSize = 16f; private static final float baseSize = 16f;
private final Seq<Unit> units = new Seq<>(); private final Seq<Unit> units = new Seq<>();
private Pixmap pixmap; private Pixmap pixmap;
@@ -170,16 +170,6 @@ public class MinimapRenderer implements Disposable{
return color.rgba(); return color.rgba();
} }
@Override
public void dispose(){
if(pixmap != null && texture != null){
pixmap.dispose();
texture.dispose();
texture = null;
pixmap = null;
}
}
public void drawLabel(float x, float y, String text, Color color){ public void drawLabel(float x, float y, String text, Color color){
Font font = Fonts.outline; Font font = Fonts.outline;
GlyphLayout l = Pools.obtain(GlyphLayout.class, GlyphLayout::new); GlyphLayout l = Pools.obtain(GlyphLayout.class, GlyphLayout::new);

View File

@@ -1,8 +1,6 @@
package mindustry.graphics.g3d; package mindustry.graphics.g3d;
import arc.graphics.*; import arc.graphics.*;
import arc.graphics.VertexAttributes.*;
import arc.graphics.gl.*;
import arc.math.geom.*; import arc.math.geom.*;
import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.graphics.g3d.PlanetGrid.*;
@@ -92,9 +90,9 @@ public class MeshBuilder{
private static void begin(int count){ private static void begin(int count){
mesh = new Mesh(true, count, 0, mesh = new Mesh(true, count, 0,
new VertexAttribute(Usage.position, 3, Shader.positionAttribute), VertexAttribute.position3,
new VertexAttribute(Usage.normal, 3, Shader.normalAttribute), VertexAttribute.normal,
new VertexAttribute(Usage.colorPacked, 4, Shader.colorAttribute) VertexAttribute.color
); );
mesh.getVerticesBuffer().limit(mesh.getMaxVertices()); mesh.getVerticesBuffer().limit(mesh.getMaxVertices());

View File

@@ -60,6 +60,7 @@ public enum Binding implements KeyBind{
minimap(KeyCode.m), minimap(KeyCode.m),
research(KeyCode.b), research(KeyCode.b),
planet_map(KeyCode.n), planet_map(KeyCode.n),
block_info(KeyCode.f1),
toggle_menus(KeyCode.c), toggle_menus(KeyCode.c),
screenshot(KeyCode.p), screenshot(KeyCode.p),
toggle_power_lines(KeyCode.f5), toggle_power_lines(KeyCode.f5),

View File

@@ -259,6 +259,13 @@ public class DesktopInput extends InputHandler{
renderer.scaleCamera(Core.input.axisTap(Binding.zoom)); renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
} }
if(Core.input.keyTap(Binding.select) && !Core.scene.hasMouse()){
Tile selected = world.tileWorld(input.mouseWorldX(), input.mouseWorldY());
if(selected != null){
Call.tileTap(player, selected);
}
}
if(player.dead()){ if(player.dead()){
cursorType = SystemCursor.arrow; cursorType = SystemCursor.arrow;
return; return;
@@ -470,10 +477,6 @@ public class DesktopInput extends InputHandler{
} }
if(Core.input.keyTap(Binding.select) && !Core.scene.hasMouse()){ if(Core.input.keyTap(Binding.select) && !Core.scene.hasMouse()){
if(selected != null){
Call.tileTap(player, selected);
}
BuildPlan req = getRequest(cursorX, cursorY); BuildPlan req = getRequest(cursorX, cursorY);
if(Core.input.keyDown(Binding.break_block)){ if(Core.input.keyDown(Binding.break_block)){

View File

@@ -189,10 +189,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
@Remote(targets = Loc.both, called = Loc.server) @Remote(targets = Loc.both, called = Loc.server)
public static void requestUnitPayload(Player player, Unit target){ public static void requestUnitPayload(Player player, Unit target){
if(player == null) return; if(player == null || !(player.unit() instanceof Payloadc pay)) return;
Unit unit = player.unit(); Unit unit = player.unit();
Payloadc pay = (Payloadc)unit;
if(target.isAI() && target.isGrounded() && pay.canPickup(target) if(target.isAI() && target.isGrounded() && pay.canPickup(target)
&& target.within(unit, unit.type.hitSize * 2f + target.type.hitSize * 2f)){ && target.within(unit, unit.type.hitSize * 2f + target.type.hitSize * 2f)){
@@ -202,10 +201,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
@Remote(targets = Loc.both, called = Loc.server) @Remote(targets = Loc.both, called = Loc.server)
public static void requestBuildPayload(Player player, Building build){ public static void requestBuildPayload(Player player, Building build){
if(player == null) return; if(player == null || !(player.unit() instanceof Payloadc pay)) return;
Unit unit = player.unit(); Unit unit = player.unit();
Payloadc pay = (Payloadc)unit;
if(build != null && build.team == unit.team if(build != null && build.team == unit.team
&& unit.within(build, tilesize * build.block.size * 1.2f + tilesize * 5f)){ && unit.within(build, tilesize * build.block.size * 1.2f + tilesize * 5f)){

View File

@@ -110,7 +110,7 @@ public class Placement{
public static void calculateBridges(Seq<BuildPlan> plans, ItemBridge bridge){ public static void calculateBridges(Seq<BuildPlan> plans, ItemBridge bridge){
//check for orthogonal placement + unlocked state //check for orthogonal placement + unlocked state
if(!(plans.first().x == plans.peek().x || plans.first().y == plans.peek().y || !bridge.unlockedNow())){ if(!(plans.first().x == plans.peek().x || plans.first().y == plans.peek().y) || !bridge.unlockedNow()){
return; return;
} }

View File

@@ -208,9 +208,7 @@ public class JsonIO{
static class CustomJson extends Json{ static class CustomJson extends Json{
private Object baseObject; private Object baseObject;
{ { apply(this); }
apply(this);
}
@Override @Override
public <T> T fromJson(Class<T> type, String json){ public <T> T fromJson(Class<T> type, String json){

View File

@@ -92,6 +92,9 @@ public class TypeIO{
}else if(object instanceof UnitCommand c){ }else if(object instanceof UnitCommand c){
write.b((byte)15); write.b((byte)15);
write.b(c.ordinal()); write.b(c.ordinal());
}else if(object instanceof BuildingBox b){
write.b(12);
write.i(b.pos);
}else{ }else{
throw new IllegalArgumentException("Unknown object type: " + object.getClass()); throw new IllegalArgumentException("Unknown object type: " + object.getClass());
} }
@@ -99,6 +102,12 @@ public class TypeIO{
@Nullable @Nullable
public static Object readObject(Reads read){ public static Object readObject(Reads read){
return readObjectBoxed(read, false);
}
/** Reads an object, but boxes buildings. */
@Nullable
public static Object readObjectBoxed(Reads read, boolean box){
byte type = read.b(); byte type = read.b();
switch(type){ switch(type){
case 0: return null; case 0: return null;
@@ -113,7 +122,7 @@ public class TypeIO{
case 9: return TechTree.getNotNull(content.getByID(ContentType.all[read.b()], read.s())); case 9: return TechTree.getNotNull(content.getByID(ContentType.all[read.b()], read.s()));
case 10: return read.bool(); case 10: return read.bool();
case 11: return read.d(); case 11: return read.d();
case 12: return world.build(read.i()); case 12: return !box ? world.build(read.i()) : new BuildingBox(read.i());
case 13: return LAccess.all[read.s()]; case 13: return LAccess.all[read.s()];
case 14: int blen = read.i(); byte[] bytes = new byte[blen]; read.b(bytes); return bytes; case 14: int blen = read.i(); byte[] bytes = new byte[blen]; read.b(bytes); return bytes;
case 15: return UnitCommand.all[read.b()]; case 15: return UnitCommand.all[read.b()];
@@ -600,4 +609,13 @@ public class TypeIO{
return null; return null;
} }
} }
/** Representes a building that has not been resolved yet. */
public static class BuildingBox{
public int pos;
public BuildingBox(int pos){
this.pos = pos;
}
}
} }

View File

@@ -50,13 +50,11 @@ public enum LAccess{
enabled("to"), //"to" is standard for single parameter access enabled("to"), //"to" is standard for single parameter access
shoot("x", "y", "shoot"), shoot("x", "y", "shoot"),
shootp(true, "unit", "shoot"), shootp(true, "unit", "shoot"),
configure(true, 30, "to"), configure(true, "to"),
color("r", "g", "b"); color("r", "g", "b");
public final String[] params; public final String[] params;
public final boolean isObj; public final boolean isObj;
/** Tick cooldown between invocations. */
public float cooldown = -1;
public static final LAccess[] public static final LAccess[]
all = values(), all = values(),
@@ -73,9 +71,4 @@ public enum LAccess{
isObj = obj; isObj = obj;
} }
LAccess(boolean obj, float cooldown, String... params){
this.params = params;
this.cooldown = cooldown;
isObj = obj;
}
} }

View File

@@ -4,19 +4,14 @@ import arc.func.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.*; import mindustry.*;
import mindustry.gen.*;
import mindustry.logic.LExecutor.*; import mindustry.logic.LExecutor.*;
import mindustry.logic.LStatements.*;
/** "Compiles" a sequence of statements into instructions. */ /** "Compiles" a sequence of statements into instructions. */
public class LAssembler{ public class LAssembler{
public static ObjectMap<String, Func<String[], LStatement>> customParsers = new ObjectMap<>(); public static ObjectMap<String, Func<String[], LStatement>> customParsers = new ObjectMap<>();
public static final int maxTokenLength = 36; public static final int maxTokenLength = 36;
private static final StringMap opNameChanges = StringMap.of( private static final int invalidNum = Integer.MIN_VALUE;
"atan2", "angle",
"dst", "len"
);
private int lastVar; private int lastVar;
/** Maps names to variable IDs. */ /** Maps names to variable IDs. */
@@ -37,10 +32,10 @@ public class LAssembler{
putConst("@tick", 0); putConst("@tick", 0);
} }
public static LAssembler assemble(String data, int maxInstructions){ public static LAssembler assemble(String data){
LAssembler asm = new LAssembler(); LAssembler asm = new LAssembler();
Seq<LStatement> st = read(data, maxInstructions); Seq<LStatement> st = read(data);
asm.instructions = st.map(l -> l.build(asm)).filter(l -> l != null).toArray(LInstruction.class); asm.instructions = st.map(l -> l.build(asm)).filter(l -> l != null).toArray(LInstruction.class);
return asm; return asm;
@@ -57,107 +52,7 @@ public class LAssembler{
} }
public static Seq<LStatement> read(String data){ public static Seq<LStatement> read(String data){
return read(data, LExecutor.maxInstructions); return LParser.parse(data);
}
public static Seq<LStatement> read(String data, int max){
//empty data check
if(data == null || data.isEmpty()) return new Seq<>();
Seq<LStatement> statements = new Seq<>();
String[] lines = data.split("\n");
int index = 0;
for(String line : lines){
if(line.isEmpty()) continue;
//remove trailing semicolons in case someone adds them in for no reason
if(line.endsWith(";")) line = line.substring(0, line.length() - 1);
if(index++ > max) break;
line = line.replace("\t", "").trim();
try{
String[] arr;
if(line.startsWith("#")) continue;
//yes, I am aware that this can be split with regex, but that's slow and even more incomprehensible
if(line.contains(" ")){
Seq<String> tokens = new Seq<>();
boolean inString = false;
int lastIdx = 0;
for(int i = 0; i < line.length() + 1; i++){
char c = i == line.length() ? ' ' : line.charAt(i);
if(c == '#' && !inString){
break;
}else if(c == '"'){
inString = !inString;
}else if(c == ' ' && !inString){
tokens.add(line.substring(lastIdx, Math.min(i, lastIdx + maxTokenLength)));
lastIdx = i + 1;
}
}
arr = tokens.toArray(String.class);
}else{
arr = new String[]{line};
}
//nothing found
if(arr.length == 0) continue;
String type = arr[0];
//legacy stuff
if(type.equals("bop")){
arr[0] = "op";
//field order for bop used to be op a, b, result, but now it's op result a b
String res = arr[4];
arr[4] = arr[3];
arr[3] = arr[2];
arr[2] = res;
}else if(type.equals("uop")){
arr[0] = "op";
if(arr[1].equals("negate")){
arr = new String[]{
"op", "mul", arr[3], arr[2], "-1"
};
}else{
//field order for uop used to be op a, result, but now it's op result a
String res = arr[3];
arr[3] = arr[2];
arr[2] = res;
}
}
//fix up changed operaiton names
if(type.equals("op")){
arr[1] = opNameChanges.get(arr[1], arr[1]);
}
LStatement st = LogicIO.read(arr);
if(st != null){
statements.add(st);
}else{
//attempt parsing using custom parser if a match is found - this is for mods
String first = arr[0];
if(customParsers.containsKey(first)){
statements.add(customParsers.get(first).get(arr));
}else{
//unparseable statement
statements.add(new InvalidStatement());
}
}
}catch(Exception parseFailed){
parseFailed.printStackTrace();
//when parsing fails, add a dummy invalid statement
statements.add(new InvalidStatement());
}
}
return statements;
} }
/** @return a variable ID by name. /** @return a variable ID by name.
@@ -172,30 +67,29 @@ public class LAssembler{
symbol = symbol.trim(); symbol = symbol.trim();
//string case //string case
if(symbol.startsWith("\"") && symbol.endsWith("\"")){ if(!symbol.isEmpty() && symbol.charAt(0) == '\"' && symbol.charAt(symbol.length() - 1) == '\"'){
return putConst("___" + symbol, symbol.substring(1, symbol.length() - 1).replace("\\n", "\n")).id; return putConst("___" + symbol, symbol.substring(1, symbol.length() - 1).replace("\\n", "\n")).id;
} }
//remove spaces for non-strings //remove spaces for non-strings
symbol = symbol.replace(' ', '_'); symbol = symbol.replace(' ', '_');
try{
double value = parseDouble(symbol); double value = parseDouble(symbol);
if(Double.isNaN(value) || Double.isInfinite(value)) value = 0;
if(value == invalidNum){
return putVar(symbol).id;
}else{
//this creates a hidden const variable with the specified value //this creates a hidden const variable with the specified value
return putConst("___" + value, value).id; return putConst("___" + value, value).id;
}catch(NumberFormatException e){
return putVar(symbol).id;
} }
} }
double parseDouble(String symbol) throws NumberFormatException{ double parseDouble(String symbol){
//parse hex/binary syntax //parse hex/binary syntax
if(symbol.startsWith("0b")) return Long.parseLong(symbol.substring(2), 2); if(symbol.startsWith("0b")) return Strings.parseLong(symbol, 2, 2, symbol.length(), invalidNum);
if(symbol.startsWith("0x")) return Long.parseLong(symbol.substring(2), 16); if(symbol.startsWith("0x")) return Strings.parseLong(symbol, 16, 2, symbol.length(), invalidNum);
return Double.parseDouble(symbol); return Strings.parseDouble(symbol, invalidNum);
} }
/** Adds a constant value by name. */ /** Adds a constant value by name. */

View File

@@ -74,8 +74,8 @@ public class LExecutor{
} }
} }
public void load(String data, int maxInstructions){ public void load(String data){
load(LAssembler.assemble(data, maxInstructions)); load(LAssembler.assemble(data));
} }
/** Loads with a specified assembler. Resets all variables. */ /** Loads with a specified assembler. Resets all variables. */
@@ -489,7 +489,7 @@ public class LExecutor{
Building build = exec.building(p1); Building build = exec.building(p1);
int dropped = Math.min(unit.stack.amount, exec.numi(p2)); int dropped = Math.min(unit.stack.amount, exec.numi(p2));
if(build != null && build.isValid() && dropped > 0 && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){ if(build != null && build.team == unit.team && build.isValid() && dropped > 0 && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){
int accepted = build.acceptStack(unit.item(), dropped, unit); int accepted = build.acceptStack(unit.item(), dropped, unit);
if(accepted > 0){ if(accepted > 0){
Call.transferItemTo(unit, unit.item(), accepted, unit.x, unit.y, build); Call.transferItemTo(unit, unit.item(), accepted, unit.x, unit.y, build);
@@ -503,7 +503,8 @@ public class LExecutor{
Building build = exec.building(p1); Building build = exec.building(p1);
int amount = exec.numi(p3); int amount = exec.numi(p3);
if(build != null && build.isValid() && build.items != null && exec.obj(p2) instanceof Item item && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){ if(build != null && build.team == unit.team && build.isValid() && build.items != null &&
exec.obj(p2) instanceof Item item && unit.within(build, logicItemTransferRange + build.block.size * tilesize/2f)){
int taken = Math.min(build.items.get(item), Math.min(amount, unit.maxAccepted(item))); int taken = Math.min(build.items.get(item), Math.min(amount, unit.maxAccepted(item)));
if(taken > 0){ if(taken > 0){
@@ -523,7 +524,6 @@ public class LExecutor{
public int target; public int target;
public LAccess type = LAccess.enabled; public LAccess type = LAccess.enabled;
public int p1, p2, p3, p4; public int p1, p2, p3, p4;
public Interval timer = new Interval(1);
public ControlI(LAccess type, int target, int p1, int p2, int p3, int p4){ public ControlI(LAccess type, int target, int p1, int p2, int p3, int p4){
this.type = type; this.type = type;
@@ -539,7 +539,7 @@ public class LExecutor{
@Override @Override
public void run(LExecutor exec){ public void run(LExecutor exec){
Object obj = exec.obj(target); Object obj = exec.obj(target);
if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id) && (type.cooldown <= 0 || timer.get(type.cooldown))){ if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id)){
if(type.isObj){ if(type.isObj){
b.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4)); b.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4));
}else{ }else{
@@ -636,6 +636,11 @@ public class LExecutor{
Object target = exec.obj(from); Object target = exec.obj(from);
Object sense = exec.obj(type); Object sense = exec.obj(type);
if(target == null && sense == LAccess.dead){
exec.setnum(to, 1);
return;
}
//note that remote units/buildings can be sensed as well //note that remote units/buildings can be sensed as well
if(target instanceof Senseable se){ if(target instanceof Senseable se){
if(sense instanceof Content co){ if(sense instanceof Content co){
@@ -856,9 +861,13 @@ public class LExecutor{
//add graphics calls, cap graphics buffer size //add graphics calls, cap graphics buffer size
if(exec.graphicsBuffer.size < maxGraphicsBuffer){ if(exec.graphicsBuffer.size < maxGraphicsBuffer){
exec.graphicsBuffer.add(DisplayCmd.get(type, exec.numi(x), exec.numi(y), num1, exec.numi(p2), exec.numi(p3), exec.numi(p4))); exec.graphicsBuffer.add(DisplayCmd.get(type, packSign(exec.numi(x)), packSign(exec.numi(y)), packSign(num1), packSign(exec.numi(p2)), packSign(exec.numi(p3)), packSign(exec.numi(p4))));
} }
} }
static int packSign(int value){
return (Math.abs(value) & 0b011111111) | (value < 0 ? 0b1000000000 : 0);
}
} }
public static class DrawFlushI implements LInstruction{ public static class DrawFlushI implements LInstruction{

View File

@@ -0,0 +1,195 @@
package mindustry.logic;
import arc.struct.*;
import arc.util.*;
import mindustry.gen.*;
import mindustry.logic.LStatements.*;
public class LParser{
private static final String[] tokens = new String[16];
private static final int maxJumps = 500;
private static final StringMap opNameChanges = StringMap.of(
"atan2", "angle",
"dst", "len"
);
private static final Seq<JumpIndex> jumps = new Seq<>();
private static final ObjectIntMap<String> jumpLocations = new ObjectIntMap<>();
Seq<LStatement> statements = new Seq<>();
char[] chars;
int pos, line, tok;
LParser(String text){
this.chars = text.toCharArray();
}
/** Parses a sequence of statements from a string. */
public static Seq<LStatement> parse(String text){
//don't waste time parsing null/empty text
if(text == null || text.isEmpty()) return new Seq<>();
return new LParser(text).parse();
}
void comment(){
//read until \n or eof
while(pos < chars.length && chars[pos++] != '\n');
}
void error(String message){
throw new RuntimeException("Invalid code. " + message);
}
String string(){
int from = pos;
while(pos++ < chars.length){
var c = chars[pos];
if(c == '\n'){
error("Missing closing quote \" before end of line.");
}else if(c == '"'){
break;
}
}
if(chars[pos] != '"') error("Missing closing quote \" before end of file.");
return new String(chars, from, ++pos - from);
}
String token(){
int from = pos;
while(pos < chars.length){
char c = chars[pos];
if(c == '\n' || c == ' ' || c == '#' || c == '\t' || c == ';') break;
pos ++;
}
return new String(chars, from, pos - from);
}
/** Apply changes after reading a list of tokens. */
void checkRead(){
if(tokens[0].equals("op")){
//legacy name change
tokens[1] = opNameChanges.get(tokens[1], tokens[1]);
}
}
/** Reads the next statement until EOL/EOF. */
void statement(){
boolean expectNext = false;
tok = 0;
while(pos < chars.length){
char c = chars[pos];
if(tok >= tokens.length) error("Line too long; may only contain " + tokens.length + " tokens");
//reached end of line, bail out.
if(c == '\n' || c == ';') break;
if(expectNext && c != ' ' && c != '#' && c != '\t'){
error("Expected space after string/token.");
}
expectNext = false;
if(c == '#'){
comment();
break;
}else if(c == '"'){
tokens[tok ++] = string();
expectNext = true;
}else if(c != ' ' && c != '\t'){
tokens[tok ++] = token();
expectNext = true;
}else{
pos ++;
}
}
//only process lines with at least 1 token
if(tok > 0){
checkRead();
//store jump location, always ends with colon
if(tok == 1 && tokens[0].charAt(tokens[0].length() - 1) == ':'){
if(jumpLocations.size >= maxJumps){
error("Too many jump locations. Max jumps: " + maxJumps);
}
jumpLocations.put(tokens[0].substring(0, tokens[0].length() - 1), line);
}else{
boolean wasJump;
String jumpLoc = null;
//clean up jump position before parsing
if(wasJump = (tokens[0].equals("jump") && tok > 1 && !Strings.canParseInt(tokens[1]))){
jumpLoc = tokens[1];
tokens[1] = "-1";
}
LStatement st;
try{
st = LogicIO.read(tokens, tok);
}catch(Exception e){
//log invalid statements
Log.err(e);
st = new InvalidStatement();
}
//store jumps that use labels
if(st instanceof JumpStatement jump && wasJump){
jumps.add(new JumpIndex(jump, jumpLoc));
}
if(st != null){
statements.add(st);
}else{
//attempt parsing using custom parser if a match is found; this is for mods
if(LAssembler.customParsers.containsKey(tokens[0])){
statements.add(LAssembler.customParsers.get(tokens[0]).get(tokens));
}else{
//unparseable statement
statements.add(new InvalidStatement());
}
}
line ++;
}
}
}
Seq<LStatement> parse(){
jumps.clear();
jumpLocations.clear();
while(pos < chars.length && line < LExecutor.maxInstructions){
switch(chars[pos]){
case '\n', ' ' -> pos ++; //skip newlines and spaces
case '\r' -> pos += 2; //skip the newline after the \r
default -> statement();
}
}
//load destination indices
for(var i : jumps){
if(!jumpLocations.containsKey(i.location)){
error("Undefined jump location: \"" + i.location + "\". Make sure the jump label exists and is typed correctly.");
}
i.jump.destIndex = jumpLocations.get(i.location, -1);
}
return statements;
}
static class JumpIndex{
JumpStatement jump;
String location;
public JumpIndex(JumpStatement jump, String location){
this.jump = jump;
this.location = location;
}
}
}

View File

@@ -51,7 +51,7 @@ public abstract class LStatement{
} }
protected Cell<TextField> fields(Table table, String desc, String value, Cons<String> setter){ protected Cell<TextField> fields(Table table, String desc, String value, Cons<String> setter){
table.add(desc).padLeft(10).left().self(this::param);; table.add(desc).padLeft(10).left().self(this::param);
return field(table, value, setter).width(85f).padRight(10).left(); return field(table, value, setter).width(85f).padRight(10).left();
} }

View File

@@ -905,7 +905,7 @@ public class LStatements{
void rebuild(Table table){ void rebuild(Table table){
table.clearChildren(); table.clearChildren();
table.add(" find ").left().self(this::param);; table.add(" find ").left().self(this::param);
table.button(b -> { table.button(b -> {
b.label(() -> locate.name()); b.label(() -> locate.name());
@@ -918,14 +918,14 @@ public class LStatements{
switch(locate){ switch(locate){
case building -> { case building -> {
row(table); row(table);
table.add(" group ").left().self(this::param);; table.add(" group ").left().self(this::param);
table.button(b -> { table.button(b -> {
b.label(() -> flag.name()); b.label(() -> flag.name());
b.clicked(() -> showSelect(b, BlockFlag.allLogic, flag, t -> flag = t, 2, cell -> cell.size(110, 50))); b.clicked(() -> showSelect(b, BlockFlag.allLogic, flag, t -> flag = t, 2, cell -> cell.size(110, 50)));
}, Styles.logict, () -> {}).size(110, 40).color(table.color).left().padLeft(2); }, Styles.logict, () -> {}).size(110, 40).color(table.color).left().padLeft(2);
row(table); row(table);
table.add(" enemy ").left().self(this::param);; table.add(" enemy ").left().self(this::param);
fields(table, enemy, str -> enemy = str); fields(table, enemy, str -> enemy = str);

View File

@@ -245,7 +245,7 @@ public class SectorDamage{
//first, calculate the total health of blocks in the path //first, calculate the total health of blocks in the path
//radius around the path that gets counted //radius around the path that gets counted
int radius = 7; int radius = 5;
IntSet counted = new IntSet(); IntSet counted = new IntSet();
for(Tile t : sparse2){ for(Tile t : sparse2){
@@ -273,7 +273,7 @@ public class SectorDamage{
for(Building build : Groups.build){ for(Building build : Groups.build){
float e = build.efficiency(); float e = build.efficiency();
if(e > 0.08f){ if(e > 0.08f){
if(build.team == state.rules.defaultTeam && build instanceof Ranged ranged && sparse.contains(t -> t.within(build, ranged.range() + radius*tilesize))){ if(build.team == state.rules.defaultTeam && build instanceof Ranged ranged && sparse.contains(t -> t.within(build, ranged.range() + 4*tilesize))){
if(build.block instanceof Turret t && build instanceof TurretBuild b && b.hasAmmo()){ if(build.block instanceof Turret t && build instanceof TurretBuild b && b.hasAmmo()){
sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e; sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e;
} }

View File

@@ -115,10 +115,6 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
tile.floor = getBlock(position); tile.floor = getBlock(position);
tile.block = tile.floor.asFloor().wall; tile.block = tile.floor.asFloor().wall;
//if(noise.octaveNoise3D(5, 0.6, 8.0, position.x, position.y, position.z) > 0.65){
//tile.block = Blocks.air;
//}
if(rid.getValue(position.x, position.y, position.z, 22) > 0.32){ if(rid.getValue(position.x, position.y, position.z, 22) > 0.32){
tile.block = Blocks.air; tile.block = Blocks.air;
} }

View File

@@ -317,7 +317,8 @@ public class ContentParser{
readBundle(ContentType.weather, name, value); readBundle(ContentType.weather, name, value);
}else{ }else{
readBundle(ContentType.weather, name, value); readBundle(ContentType.weather, name, value);
item = make(resolve(getType(value), ParticleWeather.class)); item = make(resolve(getType(value), ParticleWeather.class), mod + "-" + name);
value.remove("type");
} }
currentContent = item; currentContent = item;
read(() -> readFields(item, value)); read(() -> readFields(item, value));
@@ -435,6 +436,7 @@ public class ContentParser{
try{ try{
run.run(); run.run();
}catch(Throwable t){ }catch(Throwable t){
Log.err(t);
//don't overwrite double errors //don't overwrite double errors
markError(currentContent, t); markError(currentContent, t);
} }

View File

@@ -25,7 +25,8 @@ public class Scripts implements Disposable{
private static final Seq<String> blacklist = Seq.with(".net.", "java.net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk", private static final Seq<String> blacklist = Seq.with(".net.", "java.net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk",
"runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system", "runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system",
".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream", "org.", "mod.classmap"); ".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream", "org.", "mod.classmap");
private static final Seq<String> whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "mindustry.gen.", "mindustry.logic.", "mindustry.async.", "saveio", "systemcursor", "filetreeinitevent"); private static final Seq<String> whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "jdk.proxy1", "mindustry.gen.",
"mindustry.logic.", "mindustry.async.", "saveio", "systemcursor", "filetreeinitevent");
private final Context context; private final Context context;
private final Scriptable scope; private final Scriptable scope;

View File

@@ -220,7 +220,7 @@ public class Administration{
getCreateInfo(id).banned = true; getCreateInfo(id).banned = true;
save(); save();
Events.fire(new PlayerBanEvent(Groups.player.find(p -> id.equals(p.uuid())))); Events.fire(new PlayerBanEvent(Groups.player.find(p -> id.equals(p.uuid())), id));
return true; return true;
} }
@@ -259,7 +259,7 @@ public class Administration{
info.banned = false; info.banned = false;
bannedIPs.removeAll(info.ips, false); bannedIPs.removeAll(info.ips, false);
save(); save();
Events.fire(new PlayerUnbanEvent(Groups.player.find(p -> id.equals(p.uuid())))); Events.fire(new PlayerUnbanEvent(Groups.player.find(p -> id.equals(p.uuid())), id));
return true; return true;
} }

View File

@@ -22,6 +22,7 @@ import static mindustry.Vars.*;
public class ArcNetProvider implements NetProvider{ public class ArcNetProvider implements NetProvider{
final Client client; final Client client;
final Prov<DatagramPacket> packetSupplier = () -> new DatagramPacket(new byte[512], 512); final Prov<DatagramPacket> packetSupplier = () -> new DatagramPacket(new byte[512], 512);
final AsyncExecutor executor = new AsyncExecutor(Math.max(Runtime.getRuntime().availableProcessors(), 6));
final Server server; final Server server;
final CopyOnWriteArrayList<ArcConnection> connections = new CopyOnWriteArrayList<>(); final CopyOnWriteArrayList<ArcConnection> connections = new CopyOnWriteArrayList<>();
@@ -179,7 +180,7 @@ public class ArcNetProvider implements NetProvider{
@Override @Override
public void pingHost(String address, int port, Cons<Host> valid, Cons<Exception> invalid){ public void pingHost(String address, int port, Cons<Host> valid, Cons<Exception> invalid){
Threads.daemon(() -> { executor.submit(() -> {
try{ try{
DatagramSocket socket = new DatagramSocket(); DatagramSocket socket = new DatagramSocket();
long time = Time.millis(); long time = Time.millis();
@@ -255,7 +256,7 @@ public class ArcNetProvider implements NetProvider{
@Override @Override
public void closeServer(){ public void closeServer(){
connections.clear(); connections.clear();
Threads.daemon(server::stop); executor.submit(server::stop);
} }
ArcConnection getByArcID(int id){ ArcConnection getByArcID(int id){

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