Compare commits
122 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afbac48a45 | ||
|
|
e7d9cddbae | ||
|
|
a6fe1275c7 | ||
|
|
2f3fd9de3b | ||
|
|
8b2e78ab1e | ||
|
|
d04eaa81e0 | ||
|
|
b71d5837e9 | ||
|
|
332b1ce100 | ||
|
|
c17040b1ab | ||
|
|
a3bd7ba3ad | ||
|
|
2a7525cdf1 | ||
|
|
43602caab2 | ||
|
|
793e957d0d | ||
|
|
66594a2b32 | ||
|
|
e81219dd3e | ||
|
|
d11a26c568 | ||
|
|
cf3543ec07 | ||
|
|
886d8752b7 | ||
|
|
496d6b139e | ||
|
|
3ce064ca11 | ||
|
|
1be7f3b36c | ||
|
|
3fddd6eea7 | ||
|
|
339fc8113b | ||
|
|
025bf5ffc3 | ||
|
|
1dc2906343 | ||
|
|
eea276118f | ||
|
|
36aa9d5696 | ||
|
|
1fc1efc410 | ||
|
|
7924d9b9ef | ||
|
|
3336e6cdde | ||
|
|
4ec81b0669 | ||
|
|
d10123295c | ||
|
|
0929593efc | ||
|
|
ace6eed653 | ||
|
|
a40731624a | ||
|
|
268672adb8 | ||
|
|
af20db4cf7 | ||
|
|
8a76e7ea25 | ||
|
|
d72db58b3f | ||
|
|
975043d439 | ||
|
|
40b5ee391d | ||
|
|
e87e678d0f | ||
|
|
d098a9ddc2 | ||
|
|
7145ffaf28 | ||
|
|
d4afc3ecde | ||
|
|
1ecc49f9b7 | ||
|
|
7ffd46aee9 | ||
|
|
afd6570ced | ||
|
|
49c099a03c | ||
|
|
851fa09e0c | ||
|
|
b0c8426d0f | ||
|
|
9384d661c1 | ||
|
|
a06e0a325b | ||
|
|
a8c31d838f | ||
|
|
46cf48e012 | ||
|
|
bfa9d65314 | ||
|
|
aa7936100e | ||
|
|
b20ef104b9 | ||
|
|
53b99a650c | ||
|
|
2025d6ad2d | ||
|
|
c7cbe50876 | ||
|
|
267d822771 | ||
|
|
786d638ad0 | ||
|
|
89997ad8d4 | ||
|
|
036ab282e0 | ||
|
|
e9df213d0a | ||
|
|
150aab3530 | ||
|
|
96607ef753 | ||
|
|
075ddf104b | ||
|
|
671ca5c94f | ||
|
|
e7ed7c0765 | ||
|
|
92db8349dc | ||
|
|
ea3f6cf4a0 | ||
|
|
dd191493c0 | ||
|
|
2c08b82fef | ||
|
|
f7c5315599 | ||
|
|
ad6e458636 | ||
|
|
f04e763667 | ||
|
|
d545dc0d02 | ||
|
|
f895dfe341 | ||
|
|
c5bea40e7d | ||
|
|
e08052d7d6 | ||
|
|
78a7d15f3e | ||
|
|
b2e2cfb48d | ||
|
|
f694e42c78 | ||
|
|
8e52d8a272 | ||
|
|
1a6843ef2c | ||
|
|
4b9fa9a79e | ||
|
|
c15a8b52d2 | ||
|
|
bd36ca821d | ||
|
|
d4e6817232 | ||
|
|
096b54305d | ||
|
|
8b52561a31 | ||
|
|
b1e8001ae8 | ||
|
|
8aba480148 | ||
|
|
429ff738f9 | ||
|
|
ae2736d393 | ||
|
|
fc28fbc662 | ||
|
|
4f37f29ae8 | ||
|
|
c4da670a7c | ||
|
|
57dca33c2b | ||
|
|
4a1419af0e | ||
|
|
25c61590d1 | ||
|
|
f6925953ad | ||
|
|
e1b0e07f3c | ||
|
|
b2d16f69da | ||
|
|
a60772a81e | ||
|
|
6151ebf716 | ||
|
|
cccb8d6d19 | ||
|
|
a2c7c38a3e | ||
|
|
b51d34e893 | ||
|
|
79a62cd74c | ||
|
|
18c669ae3e | ||
|
|
8474c921ec | ||
|
|
7c7c57c64e | ||
|
|
f7e8412b4b | ||
|
|
0d3be917b2 | ||
|
|
5c85ba84db | ||
|
|
07d11f02d8 | ||
|
|
fce30e6ae5 | ||
|
|
315cbaec47 | ||
|
|
68535bfcaa |
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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") ?
|
||||||
|
|||||||
17
build.gradle
@@ -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{
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 178 B After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 499 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 420 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 405 B After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 382 B After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 353 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 2.2 KiB |
BIN
core/assets-raw/sprites/statuses/status-blasted.png
Normal file
|
After Width: | Height: | Size: 298 B |
BIN
core/assets-raw/sprites/statuses/status-burning.png
Normal file
|
After Width: | Height: | Size: 276 B |
BIN
core/assets-raw/sprites/statuses/status-corroded.png
Normal file
|
After Width: | Height: | Size: 324 B |
BIN
core/assets-raw/sprites/statuses/status-disarmed.png
Normal file
|
After Width: | Height: | Size: 343 B |
BIN
core/assets-raw/sprites/statuses/status-freezing.png
Normal file
|
After Width: | Height: | Size: 329 B |
BIN
core/assets-raw/sprites/statuses/status-melting.png
Normal file
|
After Width: | Height: | Size: 304 B |
BIN
core/assets-raw/sprites/statuses/status-muddy.png
Normal file
|
After Width: | Height: | Size: 286 B |
BIN
core/assets-raw/sprites/statuses/status-overclock.png
Normal file
|
After Width: | Height: | Size: 387 B |
BIN
core/assets-raw/sprites/statuses/status-overdrive.png
Normal file
|
After Width: | Height: | Size: 387 B |
BIN
core/assets-raw/sprites/statuses/status-sapped.png
Normal file
|
After Width: | Height: | Size: 274 B |
BIN
core/assets-raw/sprites/statuses/status-shocked.png
Normal file
|
After Width: | Height: | Size: 232 B |
BIN
core/assets-raw/sprites/statuses/status-slow.png
Normal file
|
After Width: | Height: | Size: 274 B |
BIN
core/assets-raw/sprites/statuses/status-spore-slowed.png
Normal file
|
After Width: | Height: | Size: 322 B |
BIN
core/assets-raw/sprites/statuses/status-tarred.png
Normal file
|
After Width: | Height: | Size: 286 B |
BIN
core/assets-raw/sprites/statuses/status-unmoving.png
Normal file
|
After Width: | Height: | Size: 197 B |
BIN
core/assets-raw/sprites/statuses/status-wet.png
Normal file
|
After Width: | Height: | Size: 283 B |
@@ -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
|
||||||
|
|||||||
1685
core/assets/bundles/bundle_bg.properties
Normal 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.
|
||||||
|
|||||||
@@ -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 = 공중 목표물을 끌어오는 견인 광선을 발사하며, 견인 과정에서 데미지를 줍니다.
|
||||||
|
|||||||
@@ -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ż mikro procesor.
|
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ącą przeciwników i leczącą 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.
|
||||||
|
|||||||
@@ -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ă.
|
||||||
|
|||||||
@@ -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 = Медь
|
||||||
|
|||||||
@@ -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 = Почати чи зупинити політ.
|
||||||
|
|||||||
@@ -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 = 开始/停止助推
|
||||||
@@ -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 = 移動到距離指定位置一段距離的地方
|
||||||
|
|||||||
@@ -114,3 +114,8 @@ simba-fs
|
|||||||
RedRadiation
|
RedRadiation
|
||||||
Marko Zajc
|
Marko Zajc
|
||||||
CPX MC
|
CPX MC
|
||||||
|
Phinner
|
||||||
|
BTA_Susideur
|
||||||
|
nilq
|
||||||
|
AsgerHB
|
||||||
|
AzCraft
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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)));
|
||||||
});
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()){
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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)){
|
||||||
|
|||||||
@@ -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())){
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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())){
|
||||||
|
|||||||
@@ -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(){
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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()]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(){
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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)){
|
||||||
|
|||||||
@@ -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)){
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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. */
|
||||||
|
|||||||
@@ -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{
|
||||||
|
|||||||
195
core/src/mindustry/logic/LParser.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||