Compare commits

..

36 Commits
v67 ... v68

Author SHA1 Message Date
Anuken
bffae90022 Crash fixes 2019-03-28 17:41:57 -04:00
Anuken
61f6368591 Bundle update 2019-03-28 17:31:22 -04:00
Valen. H
1027ca2a85 Greek (#394)
Made in 2018, might be a bit out of date but seems functional. (4-alpha-63)
**Not complete**
2019-03-28 15:29:11 -06:00
Prosta4okua
5acc42f739 @router & @xzimur Create a PR for the Russian language (#437)
Останній комміт — Code cleanup (97f5bf3cc4 (diff-daade3141498d8856d75ec34b88bbb19))
2019-03-28 15:26:14 -06:00
laohuaji233
1edeaeb94e Update bundle_zh_CN.properties (#436)
more translations
2019-03-28 15:26:08 -06:00
키에르
879acc6077 Update bundle_ko.properties (#435)
* Update bundle_ko.properties

* Oops

* Oops 2

* Update bundle_ko.properties

* Update bundle_ko.properties
2019-03-28 15:25:35 -06:00
Anuken
4e5d87104c Unit AI fixes / Other general fixes 2019-03-28 17:12:49 -04:00
Anuken
e6a24b8ba1 Balancing / Bugfixes / Decreased build duration slightly 2019-03-28 14:38:00 -04:00
Anuken
fd190c7770 UI layout fixes 2019-03-28 12:50:22 -04:00
Anuken
d56869aefa Unit shadows 2019-03-28 12:42:04 -04:00
Anuken
c8a15bb7e4 Shadow optimization: 30 -> 60 FPS on phone tested 2019-03-28 12:19:54 -04:00
Anuken
07c28c3f6d Minor fixes 2019-03-28 11:00:34 -04:00
Anuken
50959317e9 New launch pad / Tech tree tweaks 2019-03-27 22:13:40 -04:00
Anuken
20a681a71f Zone unlocking tweak 2019-03-27 19:21:15 -04:00
Anuken
4e2d558b36 Merge remote-tracking branch 'origin/master' 2019-03-27 09:31:12 -04:00
Anuken
0430b908f4 New requirements for zone unlock, currently broken 2019-03-27 09:31:07 -04:00
Anuken
a84e9f2aaa Updated RoboVM plugin 2019-03-26 20:35:29 -04:00
Anuken
7ce571e59c New tentative edge style / Zone tweaks 2019-03-26 20:10:01 -04:00
Anuken
545a64f7dc Merge remote-tracking branch 'origin/master' 2019-03-26 11:05:55 -04:00
Anuken
10c999a4a2 Bugfixes / Mender block / Extra stats / Balancing 2019-03-26 11:05:47 -04:00
Anuken
d0e026d597 Bugfixes 2019-03-25 13:12:55 -04:00
Anuken
0b1e2bf19b Compile fixes 2019-03-24 21:54:01 -04:00
Anuken
71c2c7ad05 More code cleanup 2019-03-24 21:10:59 -04:00
Anuken
97f5bf3cc4 Code cleanup 2019-03-24 19:58:51 -04:00
Anuken
bb9573b85a Build cost/speed rules 2019-03-24 18:33:07 -04:00
Anuken
e1f53dfc67 Added bundle entries 2019-03-24 17:58:59 -04:00
Anuken
87481e0a4d Ammo stats 2019-03-24 17:55:41 -04:00
Anuken
f7aa58e385 Many small tweaks / Custom rules / Server run files / Balance 2019-03-24 16:29:25 -04:00
Anuken
ea5c78f814 UI scaling fixes 2019-03-23 22:00:41 -04:00
Anuken
c93c016e9c more icons 2019-03-23 19:06:50 -04:00
Anuken
4bb6664c7e Merge remote-tracking branch 'origin/master' 2019-03-23 18:48:00 -04:00
Anuken
9578068a02 another menu attempt 2019-03-23 18:47:57 -04:00
Anuken
30e5f2b17d iOS building fix 2019-03-23 18:33:33 -04:00
Anuken
f959760c07 More iOS icon stuff 2019-03-23 15:05:22 -04:00
Anuken
e7db2350bc Merge remote-tracking branch 'origin/master' 2019-03-23 14:39:08 -04:00
Anuken
0585dabf7a iOS icons 2019-03-23 14:39:04 -04:00
202 changed files with 7867 additions and 5888 deletions

View File

@@ -133,7 +133,7 @@ public class AndroidLauncher extends AndroidApplication{
} }
@Override @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
if(requestCode == PERMISSION_REQUEST_CODE){ if(requestCode == PERMISSION_REQUEST_CODE){
for(int i : grantResults){ for(int i : grantResults){
if(i != PackageManager.PERMISSION_GRANTED) return; if(i != PackageManager.PERMISSION_GRANTED) return;

View File

@@ -7,6 +7,18 @@ import java.lang.annotation.Target;
public class Annotations{ public class Annotations{
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.SOURCE)
public @interface Nullable{
}
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.SOURCE)
public @interface NonNull{
}
/** Marks a class as serializable.*/ /** Marks a class as serializable.*/
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)

View File

@@ -109,7 +109,7 @@ public class RemoteWriteGenerator{
for(VariableElement var : elem.getParameters()){ for(VariableElement var : elem.getParameters()){
//special case: calling local-only methods uses the local player //special case: calling local-only methods uses the local player
if(index == 0 && methodEntry.where == Loc.client){ if(index == 0 && methodEntry.where == Loc.client){
results.append("io.anuke.mindustry.Vars.players[0]"); results.append("io.anuke.mindustry.Vars.player");
}else{ }else{
results.append(var.getSimpleName()); results.append(var.getSimpleName());
} }

View File

@@ -129,7 +129,7 @@ public class StructAnnotationProcessor extends AbstractProcessor{
//floats: need conversion //floats: need conversion
setter.addStatement("return ($T)(($L & $L) | (($T)Float.floatToIntBits(value) << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset); setter.addStatement("return ($T)(($L & $L) | (($T)Float.floatToIntBits(value) << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset);
}else{ }else{
cons.append(" | (").append("(").append(structType).append(")").append(varName).append(" << ").append(offset).append("L)"); cons.append(" | (((").append(structType).append(")").append(varName).append(" << ").append(offset).append("L)").append(" & ").append(bitString(offset, size, structTotalSize)).append(")");
//bytes, shorts, chars, ints //bytes, shorts, chars, ints
setter.addStatement("return ($T)(($L & $L) | (($T)value << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset); setter.addStatement("return ($T)(($L & $L) | (($T)value << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset);

View File

@@ -8,7 +8,7 @@ buildscript{
} }
dependencies{ dependencies{
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.5' classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.6'
classpath "com.badlogicgames.gdx:gdx-tools:1.9.9" classpath "com.badlogicgames.gdx:gdx-tools:1.9.9"
classpath "com.badlogicgames.packr:packr:2.1-SNAPSHOT" classpath "com.badlogicgames.packr:packr:2.1-SNAPSHOT"
} }
@@ -25,7 +25,7 @@ allprojects{
if(!project.hasProperty("versionType")) versionType = 'official' if(!project.hasProperty("versionType")) versionType = 'official'
appName = 'Mindustry' appName = 'Mindustry'
gdxVersion = '1.9.9' gdxVersion = '1.9.9'
roboVMVersion = '2.3.0' roboVMVersion = '2.3.6'
arcHash = null arcHash = null
debugged = { debugged = {
@@ -43,7 +43,7 @@ allprojects{
arcHash = 'git ls-remote https://github.com/Anuken/Arc.git'.execute().text.split("\t")[0] arcHash = 'git ls-remote https://github.com/Anuken/Arc.git'.execute().text.split("\t")[0]
}catch(e){ }catch(e){
e.printStackTrace() e.printStackTrace()
arcHash = "-SNAPSHOT"; arcHash = "-SNAPSHOT"
} }
} }
return arcHash return arcHash
@@ -156,6 +156,7 @@ project(":ios"){
dependencies{ dependencies{
compile project(":core") compile project(":core")
compile project(":net") compile project(":net")
compileOnly project(":annotations")
compile arcModule("backends:backend-robovm") compile arcModule("backends:backend-robovm")

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@@ -184,7 +184,8 @@ builtin = Built-In
map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone! map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone!
map.random = [accent]Random Map map.random = [accent]Random Map
map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor. map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-blue[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file. map.invalid = Error loading map: corrupted or invalid map file.
editor.brush = Brush editor.brush = Brush
editor.openin = Open In Editor editor.openin = Open In Editor
@@ -286,7 +287,8 @@ donate = Donate
abandon = Abandon abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Reach:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best Wave: {0} bestwave = [LIGHT_GRAY]Best Wave: {0}
launch = < LAUNCH > launch = < LAUNCH >
@@ -298,7 +300,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}. configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Wave {0} reached:\nNext zone requirements met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -352,6 +354,7 @@ blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Size blocks.size = Size
blocks.liquidcapacity = Liquid Capacity blocks.liquidcapacity = Liquid Capacity
@@ -365,6 +368,8 @@ blocks.itemcapacity = Item Capacity
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.powertransferspeed = Power Transfer
blocks.craftspeed = Production Speed blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Input Liquid blocks.inputliquid = Input Liquid
blocks.inputliquidaux = Aux Liquid blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Input Item blocks.inputitem = Input Item
@@ -397,6 +402,19 @@ blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Input capacity blocks.inputcapacity = Input capacity
blocks.outputcapacity = Output capacity blocks.outputcapacity = Output capacity
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] damage
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x fire rate
unit.blocks = blocks unit.blocks = blocks
unit.powersecond = power units/second unit.powersecond = power units/second
unit.liquidsecond = liquid units/second unit.liquidsecond = liquid units/second
@@ -413,6 +431,7 @@ category.items = Items
category.crafting = Input/Output category.crafting = Input/Output
category.shooting = Shooting category.shooting = Shooting
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -490,6 +509,20 @@ mode.pvp.name = PvP
mode.pvp.description = Fight against other players locally. mode.pvp.description = Fight against other players locally.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI (Red Team) Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units
@@ -730,6 +763,7 @@ block.blast-drill.name = Airblast Drill
block.thermal-pump.name = Thermal Pump block.thermal-pump.name = Thermal Pump
block.thermal-generator.name = Thermal Generator block.thermal-generator.name = Thermal Generator
block.alloy-smelter.name = Alloy Smelter block.alloy-smelter.name = Alloy Smelter
block.mender.name = Mender
block.mend-projector.name = Mend Projector block.mend-projector.name = Mend Projector
block.surge-wall.name = Surge Wall block.surge-wall.name = Surge Wall
block.surge-wall-large.name = Large Surge Wall block.surge-wall-large.name = Large Surge Wall
@@ -745,6 +779,7 @@ block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = blue team.blue.name = blue
team.red.name = red team.red.name = red
team.orange.name = orange team.orange.name = orange

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Jsi si jistý žechceš tuto mapu smazat? tato akce je nevr
map.random = [accent]Náhodná mapa map.random = [accent]Náhodná mapa
map.nospawn = Tato mapa nemá žádná jádra pro hráče ke spawnutí! přidej[ROYAL] blue[] jádro na tuto mapu v editoru. map.nospawn = Tato mapa nemá žádná jádra pro hráče ke spawnutí! přidej[ROYAL] blue[] jádro na tuto mapu v editoru.
map.nospawn.pvp = Tato mapa nemá žádné nepřátelské jádra pro hráče ke spawnutí! přidej[SCARLET] red[] jádro na tuto mapu v editoru. map.nospawn.pvp = Tato mapa nemá žádné nepřátelské jádra pro hráče ke spawnutí! přidej[SCARLET] red[] jádro na tuto mapu v editoru.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy. map.invalid = Chyba v načítání mapy: poškozený nebo neplatný soubor mapy.
editor.brush = Štětec editor.brush = Štětec
editor.openin = Otevřít v editoru. editor.openin = Otevřít v editoru.
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Zaměřuje vzdušné jednotky
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Dostřel blocks.shootrange = Dostřel
blocks.size = velikost blocks.size = velikost
blocks.liquidcapacity = Kapacita tekutin blocks.liquidcapacity = Kapacita tekutin
@@ -358,6 +361,8 @@ blocks.itemcapacity = kapacita předmětů
blocks.basepowergeneration = Základní generování energie blocks.basepowergeneration = Základní generování energie
blocks.powertransferspeed = Přenos energie blocks.powertransferspeed = Přenos energie
blocks.craftspeed = Rychlost produkce blocks.craftspeed = Rychlost produkce
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Vstupní tekutiny blocks.inputliquid = Vstupní tekutiny
blocks.inputliquidaux = Aux tekutina blocks.inputliquidaux = Aux tekutina
blocks.inputitem = Vstupní předmět blocks.inputitem = Vstupní předmět
@@ -390,6 +395,17 @@ blocks.fuelburntime = Čas spalování paliva
blocks.inputcapacity = Vstupní kapacita blocks.inputcapacity = Vstupní kapacita
blocks.outputcapacity = Výstupní kapacita blocks.outputcapacity = Výstupní kapacita
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = Bloky unit.blocks = Bloky
unit.powersecond = jednotek energie/sekunda unit.powersecond = jednotek energie/sekunda
unit.liquidsecond = jednotek tekutin/sekundu unit.liquidsecond = jednotek tekutin/sekundu
@@ -406,6 +422,7 @@ category.items = Předměty
category.crafting = Vyžaduje category.crafting = Vyžaduje
category.shooting = Střílí category.shooting = Střílí
category.optional = Volitelné vylepšení category.optional = Volitelné vylepšení
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti. mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti.
mode.attack.name = Útok mode.attack.name = Útok
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Předměty content.item.name = Předměty
content.liquid.name = Tekutiny content.liquid.name = Tekutiny
content.unit.name = jednotky content.unit.name = jednotky
@@ -722,6 +751,7 @@ block.blast-drill.name = Tlakovzdušný vrt
block.thermal-pump.name = Termální pumpa block.thermal-pump.name = Termální pumpa
block.thermal-generator.name = Termální Generátor block.thermal-generator.name = Termální Generátor
block.alloy-smelter.name = Slitinová pec block.alloy-smelter.name = Slitinová pec
block.mender.name = Mender
block.mend-projector.name = Opravný projektor block.mend-projector.name = Opravný projektor
block.surge-wall.name = Impulzní stěna block.surge-wall.name = Impulzní stěna
block.surge-wall-large.name = Velká Impulzní stěna block.surge-wall-large.name = Velká Impulzní stěna
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Kontejnér block.container.name = Kontejnér
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = modrá team.blue.name = modrá
team.red.name = červená team.red.name = červená
team.orange.name = oranžová team.orange.name = oranžová

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Bist du sicher, dass du diese Karte löschen willst? Die Ak
map.random = [accent]Zufällige Karte map.random = [accent]Zufällige Karte
map.nospawn = Diese Karte hat keine Kerne in denen die Spieler beginnen können! Füge einen [ROYAL]blue[] Kern zu dieser Karte im Editor hinzu. map.nospawn = Diese Karte hat keine Kerne in denen die Spieler beginnen können! Füge einen [ROYAL]blue[] Kern zu dieser Karte im Editor hinzu.
map.nospawn.pvp = Diese Karte hat keine gegnerischen Kerne wo Gegner starten könnten! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu. map.nospawn.pvp = Diese Karte hat keine gegnerischen Kerne wo Gegner starten könnten! Füge über den Editor [SCARLET] rote[] Kerne zu dieser Karte hinzu.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Fehler beim Laden der Karte: Beschädigtes oder invalide Karten Datei. map.invalid = Fehler beim Laden der Karte: Beschädigtes oder invalide Karten Datei.
editor.brush = Pinsel editor.brush = Pinsel
editor.openin = Öffne im Editor editor.openin = Öffne im Editor
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Visiert Luft Einheiten an
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Reichweite blocks.shootrange = Reichweite
blocks.size = Größe blocks.size = Größe
blocks.liquidcapacity = Flüssigkeitskapazität blocks.liquidcapacity = Flüssigkeitskapazität
@@ -358,6 +361,8 @@ blocks.itemcapacity = Materialkapazität
blocks.basepowergeneration = Basis-Stromerzeugung blocks.basepowergeneration = Basis-Stromerzeugung
blocks.powertransferspeed = Stromübertragung blocks.powertransferspeed = Stromübertragung
blocks.craftspeed = Produktionsgeschwindigkeit blocks.craftspeed = Produktionsgeschwindigkeit
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Benötigte Flüssigkeit blocks.inputliquid = Benötigte Flüssigkeit
blocks.inputliquidaux = Optionale Flüssigkeit blocks.inputliquidaux = Optionale Flüssigkeit
blocks.inputitem = Akzeptiertes Material blocks.inputitem = Akzeptiertes Material
@@ -390,6 +395,17 @@ blocks.fuelburntime = Kraftstoff Verbrennungs-Zeit
blocks.inputcapacity = Annahmekapazität blocks.inputcapacity = Annahmekapazität
blocks.outputcapacity = Ausgabekapazität blocks.outputcapacity = Ausgabekapazität
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = Blöcke unit.blocks = Blöcke
unit.powersecond = Stromeinheiten/Sekunde unit.powersecond = Stromeinheiten/Sekunde
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
@@ -406,6 +422,7 @@ category.items = Materialien
category.crafting = Erzeugung category.crafting = Erzeugung
category.shooting = Schießen category.shooting = Schießen
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = Kämpfe gegen andere Spieler local. mode.pvp.description = Kämpfe gegen andere Spieler local.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Materialien content.item.name = Materialien
content.liquid.name = Flüssigkeiten content.liquid.name = Flüssigkeiten
content.unit.name = Einheiten content.unit.name = Einheiten
@@ -722,6 +751,7 @@ block.blast-drill.name = Sprengbohrer
block.thermal-pump.name = Thermische Pumpe block.thermal-pump.name = Thermische Pumpe
block.thermal-generator.name = Thermischer Generator block.thermal-generator.name = Thermischer Generator
block.alloy-smelter.name = Legierungsschmeltzer block.alloy-smelter.name = Legierungsschmeltzer
block.mender.name = Mender
block.mend-projector.name = Reparaturprojektor block.mend-projector.name = Reparaturprojektor
block.surge-wall.name = Spannungsstoß-Mauer block.surge-wall.name = Spannungsstoß-Mauer
block.surge-wall-large.name = Große Spannungsstoß-Mauer block.surge-wall-large.name = Große Spannungsstoß-Mauer
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = Blau team.blue.name = Blau
team.red.name = Rot team.red.name = Rot
team.orange.name = Orange team.orange.name = Orange

View File

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

View File

@@ -182,6 +182,7 @@ map.delete.confirm = ¿Estás seguro de querer borrar este mapa? ¡Recuerda que
map.random = [accent]Mapa Aleatorio map.random = [accent]Mapa Aleatorio
map.nospawn = ¡Este mapa no tiene ningún núcleo en el cual pueda aparecer el jugador! Agrega un núcleo[ROYAL] blue[] al mapa con el editor. map.nospawn = ¡Este mapa no tiene ningún núcleo en el cual pueda aparecer el jugador! Agrega un núcleo[ROYAL] blue[] al mapa con el editor.
map.nospawn.pvp = ¡Este mapa no tiene ningún núcleo enemigo para que aparezca el jugador! Añade un núcleo[SCARLET] red[] a este mapa en el editor. map.nospawn.pvp = ¡Este mapa no tiene ningún núcleo enemigo para que aparezca el jugador! Añade un núcleo[SCARLET] red[] a este mapa en el editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error cargando el mapa: archivo corrupto o inválido. map.invalid = Error cargando el mapa: archivo corrupto o inválido.
editor.brush = Pincel editor.brush = Pincel
editor.openin = Abrir en el Editor editor.openin = Abrir en el Editor
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Apunta al Aire
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Rango blocks.shootrange = Rango
blocks.size = Tamaño blocks.size = Tamaño
blocks.liquidcapacity = Capacidad de Líquidos blocks.liquidcapacity = Capacidad de Líquidos
@@ -358,6 +361,8 @@ blocks.itemcapacity = Capacidad de Objetos
blocks.basepowergeneration = Generación de energía base blocks.basepowergeneration = Generación de energía base
blocks.powertransferspeed = Transferencia de Energía blocks.powertransferspeed = Transferencia de Energía
blocks.craftspeed = Velocidad de Producción blocks.craftspeed = Velocidad de Producción
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Líquidos de Entrada blocks.inputliquid = Líquidos de Entrada
blocks.inputliquidaux = Líquido Auxiliar blocks.inputliquidaux = Líquido Auxiliar
blocks.inputitem = Objeto de Entrada blocks.inputitem = Objeto de Entrada
@@ -390,6 +395,17 @@ blocks.fuelburntime = Tiempo de Quemado del Combustible
blocks.inputcapacity = Capacidad de entrada blocks.inputcapacity = Capacidad de entrada
blocks.outputcapacity = Capacidad de salida blocks.outputcapacity = Capacidad de salida
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = bloques unit.blocks = bloques
unit.powersecond = unidades de energía/segundo unit.powersecond = unidades de energía/segundo
unit.liquidsecond = unidades de líquido/segundo unit.liquidsecond = unidades de líquido/segundo
@@ -406,6 +422,7 @@ category.items = Objetos
category.crafting = Fabricación category.crafting = Fabricación
category.shooting = Disparo category.shooting = Disparo
category.optional = Mejoras Opcionales category.optional = Mejoras Opcionales
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = Pelea contra otros jugadores localmente. mode.pvp.description = Pelea contra otros jugadores localmente.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Objetos content.item.name = Objetos
content.liquid.name = Líquidos content.liquid.name = Líquidos
content.unit.name = Unidades content.unit.name = Unidades
@@ -722,6 +751,7 @@ block.blast-drill.name = Taladro de explosión
block.thermal-pump.name = Bomba Térmica block.thermal-pump.name = Bomba Térmica
block.thermal-generator.name = Generador Térmico block.thermal-generator.name = Generador Térmico
block.alloy-smelter.name = Alloy Smelter block.alloy-smelter.name = Alloy Smelter
block.mender.name = Mender
block.mend-projector.name = Proyector de reparación block.mend-projector.name = Proyector de reparación
block.surge-wall.name = Surge Wall block.surge-wall.name = Surge Wall
block.surge-wall-large.name = Large Surge Wall block.surge-wall-large.name = Large Surge Wall
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Contenedor block.container.name = Contenedor
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = Azul team.blue.name = Azul
team.red.name = Rojo team.red.name = Rojo
team.orange.name = Naranja team.orange.name = Naranja

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Êtes-vous sûr de supprimer cette carte? Cette action ne p
map.random = [accent]Carte aléatoire map.random = [accent]Carte aléatoire
map.nospawn = Cette carte n'a pas de base pour que le joueur y apparaisse! Ajouter une [ROYAL]base bleue[] sur cette carte dans l'éditeur. map.nospawn = Cette carte n'a pas de base pour que le joueur y apparaisse! Ajouter une [ROYAL]base bleue[] sur cette carte dans l'éditeur.
map.nospawn.pvp = Cette carte n'a pas de base ennemies pour qu'un joueur ennemi y apparaisse! Ajouter au moins une [SCARLET]Base rouge[] sur cette carte dans l'éditeur. map.nospawn.pvp = Cette carte n'a pas de base ennemies pour qu'un joueur ennemi y apparaisse! Ajouter au moins une [SCARLET]Base rouge[] sur cette carte dans l'éditeur.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide. map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide.
editor.brush = Pinceau editor.brush = Pinceau
editor.openin = Ouvrir dans l'éditeur editor.openin = Ouvrir dans l'éditeur
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Cible les unités aériennes
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Portée blocks.shootrange = Portée
blocks.size = Taille blocks.size = Taille
blocks.liquidcapacity = Capacité en liquide blocks.liquidcapacity = Capacité en liquide
@@ -358,6 +361,8 @@ blocks.itemcapacity = Stockage
blocks.basepowergeneration = Generation d'énergie minimale blocks.basepowergeneration = Generation d'énergie minimale
blocks.powertransferspeed = Vitesse de transfert d'énergie blocks.powertransferspeed = Vitesse de transfert d'énergie
blocks.craftspeed = Vitesse de production blocks.craftspeed = Vitesse de production
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Liquide requis blocks.inputliquid = Liquide requis
blocks.inputliquidaux = Liquide optionnel blocks.inputliquidaux = Liquide optionnel
blocks.inputitem = Objets en entrée blocks.inputitem = Objets en entrée
@@ -390,6 +395,17 @@ blocks.fuelburntime = Durée du carburant
blocks.inputcapacity = Capacité d'entrée blocks.inputcapacity = Capacité d'entrée
blocks.outputcapacity = Capacité de production blocks.outputcapacity = Capacité de production
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = blocs unit.blocks = blocs
unit.powersecond = Énergie/seconde unit.powersecond = Énergie/seconde
unit.liquidsecond = Liquides/seconde unit.liquidsecond = Liquides/seconde
@@ -406,6 +422,7 @@ category.items = Objets
category.crafting = Fabrication category.crafting = Fabrication
category.shooting = Défense category.shooting = Défense
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = JcJ
mode.pvp.description = Battez-vous contre d'autres joueurs en local. mode.pvp.description = Battez-vous contre d'autres joueurs en local.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Objets content.item.name = Objets
content.liquid.name = Liquides content.liquid.name = Liquides
content.unit.name = Unités content.unit.name = Unités
@@ -722,6 +751,7 @@ block.blast-drill.name = Foreuse à explosion
block.thermal-pump.name = Pompe thermique block.thermal-pump.name = Pompe thermique
block.thermal-generator.name = Générateur thermique block.thermal-generator.name = Générateur thermique
block.alloy-smelter.name = Fonderie d'alliage superchargé block.alloy-smelter.name = Fonderie d'alliage superchargé
block.mender.name = Mender
block.mend-projector.name = Projecteur soignant block.mend-projector.name = Projecteur soignant
block.surge-wall.name = mur superchargé block.surge-wall.name = mur superchargé
block.surge-wall-large.name = Grand mur superchargé block.surge-wall-large.name = Grand mur superchargé
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Conteneur block.container.name = Conteneur
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = Bleu team.blue.name = Bleu
team.red.name = Rouge team.red.name = Rouge
team.orange.name = Orange team.orange.name = Orange

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Êtes-vous sûr de vouloir effacer cette carte ? Cette acti
map.random = [accent]Carte aléatoire map.random = [accent]Carte aléatoire
map.nospawn = Cette carte ne possède pas de base pour que le joueur puisse apparaître !Ajouter un [ROYAL]base bleue[] sur cette carte dans l'éditeur. map.nospawn = Cette carte ne possède pas de base pour que le joueur puisse apparaître !Ajouter un [ROYAL]base bleue[] sur cette carte dans l'éditeur.
map.nospawn.pvp = Cette carte ne contient aucune base ennemi dans lequel le joueur apparaît!\nAjoutez des bases[SCARLET] rouge[] à cette carte dans l'éditeur. map.nospawn.pvp = Cette carte ne contient aucune base ennemi dans lequel le joueur apparaît!\nAjoutez des bases[SCARLET] rouge[] à cette carte dans l'éditeur.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide. map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide.
editor.brush = Pinceau editor.brush = Pinceau
editor.openin = Ouvrir dans l'éditeur editor.openin = Ouvrir dans l'éditeur
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Cible les unités aériennes
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Portée blocks.shootrange = Portée
blocks.size = Taille blocks.size = Taille
blocks.liquidcapacity = Capacité en liquide blocks.liquidcapacity = Capacité en liquide
@@ -358,6 +361,8 @@ blocks.itemcapacity = Stockage
blocks.basepowergeneration = Production d'énergie de base blocks.basepowergeneration = Production d'énergie de base
blocks.powertransferspeed = Vitesse de transfert d'énergie blocks.powertransferspeed = Vitesse de transfert d'énergie
blocks.craftspeed = Vitesse de production blocks.craftspeed = Vitesse de production
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Liquide requis blocks.inputliquid = Liquide requis
blocks.inputliquidaux = Liquide optionnel blocks.inputliquidaux = Liquide optionnel
blocks.inputitem = Objet utilisé blocks.inputitem = Objet utilisé
@@ -390,6 +395,17 @@ blocks.fuelburntime = Durée du carburant
blocks.inputcapacity = Capacité d'entrée blocks.inputcapacity = Capacité d'entrée
blocks.outputcapacity = Capacité de sortie blocks.outputcapacity = Capacité de sortie
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = Blocs unit.blocks = Blocs
unit.powersecond = Énergie/seconde unit.powersecond = Énergie/seconde
unit.liquidsecond = Liquides/seconde unit.liquidsecond = Liquides/seconde
@@ -406,6 +422,7 @@ category.items = Objets
category.crafting = Fabrication category.crafting = Fabrication
category.shooting = Défense category.shooting = Défense
category.optional = Améliorations facultatives category.optional = Améliorations facultatives
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = Lutter contre d'autres joueurs pour gagner ! mode.pvp.description = Lutter contre d'autres joueurs pour gagner !
mode.attack.name = Attaque mode.attack.name = Attaque
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Objets content.item.name = Objets
content.liquid.name = Liquides content.liquid.name = Liquides
content.unit.name = Unités content.unit.name = Unités
@@ -722,6 +751,7 @@ block.blast-drill.name = Foreuse à explosion
block.thermal-pump.name = Pompe thermique block.thermal-pump.name = Pompe thermique
block.thermal-generator.name = Générateur thermique block.thermal-generator.name = Générateur thermique
block.alloy-smelter.name = Fonderie d'alliage superchargé block.alloy-smelter.name = Fonderie d'alliage superchargé
block.mender.name = Mender
block.mend-projector.name = Projecteur soignant block.mend-projector.name = Projecteur soignant
block.surge-wall.name = Mur superchargé block.surge-wall.name = Mur superchargé
block.surge-wall-large.name = Grand mur superchargé block.surge-wall-large.name = Grand mur superchargé
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Conteneur block.container.name = Conteneur
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = Bleu team.blue.name = Bleu
team.red.name = Rouge team.red.name = Rouge
team.orange.name = Orange team.orange.name = Orange

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Are you sure you want to delete this map? This action canno
map.random = [accent]Random Map map.random = [accent]Random Map
map.nospawn = This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor. map.nospawn = This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file. map.invalid = Error loading map: corrupted or invalid map file.
editor.brush = Brush editor.brush = Brush
editor.openin = Open In Editor editor.openin = Open In Editor
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Ukuran blocks.size = Ukuran
blocks.liquidcapacity = Kapasitas cairan blocks.liquidcapacity = Kapasitas cairan
@@ -358,6 +361,8 @@ blocks.itemcapacity = Kapasitas Barang
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.powertransferspeed = Power Transfer
blocks.craftspeed = Production Speed blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Cairan yang Masuk blocks.inputliquid = Cairan yang Masuk
blocks.inputliquidaux = Aux Liquid blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Barang yang Masuk blocks.inputitem = Barang yang Masuk
@@ -390,6 +395,17 @@ blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Kapasitas masuk blocks.inputcapacity = Kapasitas masuk
blocks.outputcapacity = Kapasitas keluar blocks.outputcapacity = Kapasitas keluar
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = blocks unit.blocks = blocks
unit.powersecond = power units/second unit.powersecond = power units/second
unit.liquidsecond = liquid units/second unit.liquidsecond = liquid units/second
@@ -406,6 +422,7 @@ category.items = Items
category.crafting = Crafting category.crafting = Crafting
category.shooting = Shooting category.shooting = Shooting
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = fight against other players locally. mode.pvp.description = fight against other players locally.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units
@@ -722,6 +751,7 @@ block.blast-drill.name = Blast Drill
block.thermal-pump.name = Thermal Pump block.thermal-pump.name = Thermal Pump
block.thermal-generator.name = Thermal Generator block.thermal-generator.name = Thermal Generator
block.alloy-smelter.name = Alloy Smtler block.alloy-smelter.name = Alloy Smtler
block.mender.name = Mender
block.mend-projector.name = Mend Projector block.mend-projector.name = Mend Projector
block.surge-wall.name = Surge Wall block.surge-wall.name = Surge Wall
block.surge-wall-large.name = Large Surge Wall block.surge-wall-large.name = Large Surge Wall
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = blue team.blue.name = blue
team.red.name = red team.red.name = red
team.orange.name = orange team.orange.name = orange

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Sei sicuro di voler eliminare questa mappa? Non potrai torn
map.random = [accent]Mappa casuale map.random = [accent]Mappa casuale
map.nospawn = Questa mappa non possiede un nucleo dove spawnare! Aggiungine uno nell'editor. map.nospawn = Questa mappa non possiede un nucleo dove spawnare! Aggiungine uno nell'editor.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Errore nel caricamento della mappa: file mappa corrotto o non valido. map.invalid = Errore nel caricamento della mappa: file mappa corrotto o non valido.
editor.brush = Pennello editor.brush = Pennello
editor.openin = Apri nell'editor editor.openin = Apri nell'editor
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Attacca nemici aerei
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Raggio blocks.shootrange = Raggio
blocks.size = Grandezza blocks.size = Grandezza
blocks.liquidcapacity = Capacità del liquido blocks.liquidcapacity = Capacità del liquido
@@ -358,6 +361,8 @@ blocks.itemcapacity = Capacità
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Velocità trasferimento energia blocks.powertransferspeed = Velocità trasferimento energia
blocks.craftspeed = Velocità produzione blocks.craftspeed = Velocità produzione
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Input del liquido blocks.inputliquid = Input del liquido
blocks.inputliquidaux = Liquidi extra blocks.inputliquidaux = Liquidi extra
blocks.inputitem = Input Oggetto blocks.inputitem = Input Oggetto
@@ -390,6 +395,17 @@ blocks.fuelburntime = Tempo combustione carburante
blocks.inputcapacity = Capacità di ingresso blocks.inputcapacity = Capacità di ingresso
blocks.outputcapacity = Capacità di uscita blocks.outputcapacity = Capacità di uscita
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = blocchi unit.blocks = blocchi
unit.powersecond = unità energia/secondo unit.powersecond = unità energia/secondo
unit.liquidsecond = unità liquide/secondo unit.liquidsecond = unità liquide/secondo
@@ -406,6 +422,7 @@ category.items = Oggetti
category.crafting = Produzione category.crafting = Produzione
category.shooting = Potenza di fuoco category.shooting = Potenza di fuoco
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = fight against other players locally. mode.pvp.description = fight against other players locally.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Oggetti content.item.name = Oggetti
content.liquid.name = Liquidi content.liquid.name = Liquidi
content.unit.name = Units content.unit.name = Units
@@ -722,6 +751,7 @@ block.blast-drill.name = Blast Drill
block.thermal-pump.name = Pompa termica block.thermal-pump.name = Pompa termica
block.thermal-generator.name = Generatore termico block.thermal-generator.name = Generatore termico
block.alloy-smelter.name = Altoforno block.alloy-smelter.name = Altoforno
block.mender.name = Mender
block.mend-projector.name = Riparatore block.mend-projector.name = Riparatore
block.surge-wall.name = Surge Wall block.surge-wall.name = Surge Wall
block.surge-wall-large.name = Large Surge Wall block.surge-wall-large.name = Large Surge Wall
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = blue team.blue.name = blue
team.red.name = red team.red.name = red
team.orange.name = orange team.orange.name = orange

View File

@@ -182,6 +182,7 @@ map.delete.confirm = マップを削除してもよろしいですか? これは
map.random = [accent]ランダムマップ map.random = [accent]ランダムマップ
map.nospawn = このマップにはスポーンするためのプレイヤーのコアがありません! [ROYAL]青い[]コアをエディターでマップに追加してください。 map.nospawn = このマップにはスポーンするためのプレイヤーのコアがありません! [ROYAL]青い[]コアをエディターでマップに追加してください。
map.nospawn.pvp = このマップには敵がスポーンするためのプレイヤーのコアがありません! [SCARLET]赤い[]コアをエディターでマップに追加してください。 map.nospawn.pvp = このマップには敵がスポーンするためのプレイヤーのコアがありません! [SCARLET]赤い[]コアをエディターでマップに追加してください。
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。 map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。
editor.brush = ブラシ editor.brush = ブラシ
editor.openin = エディターで開く editor.openin = エディターで開く
@@ -283,6 +284,7 @@ abandon = 撤退
abandon.text = このゾーンとすべての資源が敵に奪われます。 abandon.text = このゾーンとすべての資源が敵に奪われます。
locked = ロック locked = ロック
complete = [LIGHT_GRAY]完了: complete = [LIGHT_GRAY]完了:
zone.requirement = Wave {0} in zone {1}
resume = 再開ゾーン:\n[LIGHT_GRAY]{0} resume = 再開ゾーン:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]最高ウェーブ: {0} bestwave = [LIGHT_GRAY]最高ウェーブ: {0}
launch = 出撃 launch = 出撃
@@ -294,7 +296,7 @@ uncover = 開拓
configure = 積荷の設定 configure = 積荷の設定
configure.locked = [LIGHT_GRAY]ウェーブ {0} を達成すると積荷を設定できるようになります。 configure.locked = [LIGHT_GRAY]ウェーブ {0} を達成すると積荷を設定できるようになります。
zone.unlocked = [LIGHT_GRAY]{0} がアンロックされました. zone.unlocked = [LIGHT_GRAY]{0} がアンロックされました.
zone.complete = ゾーンの条件が達成されました。 zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = ウェーブ {0} を達成:\n積荷の設定が解除されました。 zone.config.complete = ウェーブ {0} を達成:\n積荷の設定が解除されました。
zone.resources = 発見した資源: zone.resources = 発見した資源:
add = 追加... add = 追加...
@@ -345,6 +347,7 @@ blocks.targetsair = 対空攻撃
blocks.targetsground = 対地攻撃 blocks.targetsground = 対地攻撃
blocks.items = アイテム: {0} blocks.items = アイテム: {0}
blocks.itemsmoved = 輸送速度 blocks.itemsmoved = 輸送速度
blocks.launchtime = Time Between Launches
blocks.shootrange = 範囲 blocks.shootrange = 範囲
blocks.size = 大きさ blocks.size = 大きさ
blocks.liquidcapacity = 液体容量 blocks.liquidcapacity = 液体容量
@@ -358,6 +361,8 @@ blocks.itemcapacity = アイテム容量
blocks.basepowergeneration = 基本発電量 blocks.basepowergeneration = 基本発電量
blocks.powertransferspeed = 電力伝送量 blocks.powertransferspeed = 電力伝送量
blocks.craftspeed = 生産速度 blocks.craftspeed = 生産速度
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = 必要な液体 blocks.inputliquid = 必要な液体
blocks.inputliquidaux = 補助液 blocks.inputliquidaux = 補助液
blocks.inputitem = 必要なアイテム blocks.inputitem = 必要なアイテム
@@ -390,6 +395,17 @@ blocks.fuelburntime = 燃焼時間
blocks.inputcapacity = 搬入容量 blocks.inputcapacity = 搬入容量
blocks.outputcapacity = 搬出容量 blocks.outputcapacity = 搬出容量
blocks.ammo = 弾薬 blocks.ammo = 弾薬
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = ブロック unit.blocks = ブロック
unit.powersecond = 電力/秒 unit.powersecond = 電力/秒
unit.liquidsecond = 液体/秒 unit.liquidsecond = 液体/秒
@@ -406,6 +422,7 @@ category.items = アイテム
category.crafting = 製作速度 category.crafting = 製作速度
category.shooting = 攻撃速度 category.shooting = 攻撃速度
category.optional = 機能強化オプション category.optional = 機能強化オプション
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = 水のアニメーション setting.animatedwater.name = 水のアニメーション
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = ローカル内で他のプレイヤーと戦います。 mode.pvp.description = ローカル内で他のプレイヤーと戦います。
mode.attack.name = アタック mode.attack.name = アタック
mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。 mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = アイテム content.item.name = アイテム
content.liquid.name = 液体 content.liquid.name = 液体
content.unit.name = ユニット content.unit.name = ユニット
@@ -722,6 +751,7 @@ block.blast-drill.name = エアブラストドリル
block.thermal-pump.name = サーマルポンプ block.thermal-pump.name = サーマルポンプ
block.thermal-generator.name = サーマル発電機 block.thermal-generator.name = サーマル発電機
block.alloy-smelter.name = 合金溶鉱炉 block.alloy-smelter.name = 合金溶鉱炉
block.mender.name = Mender
block.mend-projector.name = 修復プロジェクター block.mend-projector.name = 修復プロジェクター
block.surge-wall.name = サージの壁 block.surge-wall.name = サージの壁
block.surge-wall-large.name = 大きなサージの壁 block.surge-wall-large.name = 大きなサージの壁
@@ -737,6 +767,7 @@ block.meltdown.name = メルトダウン
block.container.name = コンテナー block.container.name = コンテナー
block.launch-pad.name = 出撃パッド block.launch-pad.name = 出撃パッド
block.launch-pad.description = コアの出撃不要で多くのアイテムを脱出します。これは未完成です。 block.launch-pad.description = コアの出撃不要で多くのアイテムを脱出します。これは未完成です。
block.launch-pad-large.name = Large Launch Pad
team.blue.name = ブルー team.blue.name = ブルー
team.red.name = レッド team.red.name = レッド
team.orange.name = オレンジ team.orange.name = オレンジ

View File

@@ -181,7 +181,8 @@ builtin = 기본맵
map.delete.confirm = 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! map.delete.confirm = 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다!
map.random = [accent]랜덤 맵 map.random = [accent]랜덤 맵
map.nospawn = 이 맵에 플레이어가 스폰 할 코어가 없습니다! 맵 편집기에서 [ROYAL]파란색[]코어를 맵에 추가하세요. map.nospawn = 이 맵에 플레이어가 스폰 할 코어가 없습니다! 맵 편집기에서 [ROYAL]파란색[]코어를 맵에 추가하세요.
map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [SCARLET]빨간팀[] 코어를 추가하세요. map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [SCARLET]파란색 팀이 아닌[] 코어를 추가하세요.
map.nospawn.attack = 이 맵에는 플레이어가 공격할 수 있는 적의 코어가 없습니다! 에디터에서 [SCARLET] 빨간팀[] 코어를 맵에 추가하세요.
map.invalid = 파일이 잘못되었거나 손상되어 맵을 열 수 없습니다. map.invalid = 파일이 잘못되었거나 손상되어 맵을 열 수 없습니다.
editor.brush = 브러쉬 editor.brush = 브러쉬
editor.openin = 편집기 열기 editor.openin = 편집기 열기
@@ -199,12 +200,12 @@ waves.waves = 웨이브마다
waves.perspawn = 스폰. waves.perspawn = 스폰.
waves.to = 부터 waves.to = 부터
waves.boss = 이 몹은 보스임. waves.boss = 이 몹은 보스임.
waves.preview = Preview waves.preview = 미리보기
waves.edit = Edit... waves.edit = 편집...
waves.copy = Copy to Clipboard waves.copy = 클립보드로 복사
waves.load = Load from Clipboard waves.load = 클립보드에서 불러오기
waves.invalid = Invalid waves in clipboard. waves.invalid = 클립보드의 잘못된 웨이브 데이터
waves.copied = Waves copied. waves.copied = 웨이브 복사됨
editor.default = [LIGHT_GRAY]<기본값> editor.default = [LIGHT_GRAY]<기본값>
edit = 편집... edit = 편집...
editor.name = 이름: editor.name = 이름:
@@ -214,7 +215,7 @@ editor.errorload = [accent]{0} 파일을 불러오는데 실패했습니다.
editor.errorsave = [accent]{0} 파일을 저장하는데 실패했습니다. editor.errorsave = [accent]{0} 파일을 저장하는데 실패했습니다.
editor.errorname = 맵에 이름이 지정되어 있지 않습니다. editor.errorname = 맵에 이름이 지정되어 있지 않습니다.
editor.update = 업데이트 editor.update = 업데이트
editor.randomize = Randomize editor.randomize = 랜덤
editor.apply = 적용 editor.apply = 적용
editor.generate = 생성 editor.generate = 생성
editor.resize = 맵 크기조정 editor.resize = 맵 크기조정
@@ -283,6 +284,7 @@ abandon = 버리기
abandon.text = 이 구역과 모든 자원이 적에게 빼앗길 것입니다. abandon.text = 이 구역과 모든 자원이 적에게 빼앗길 것입니다.
locked = 잠김 locked = 잠김
complete = [LIGHT_GRAY]완료: complete = [LIGHT_GRAY]완료:
zone.requirement = Wave {0} in zone {1}
resume = 지역 계속 플레이:\n[LIGHT_GRAY]{0} resume = 지역 계속 플레이:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]최고 점수: {0} bestwave = [LIGHT_GRAY]최고 점수: {0}
launch = < 출격 > launch = < 출격 >
@@ -294,7 +296,7 @@ uncover = 털어넣기
configure = 로드아웃 설정 configure = 로드아웃 설정
configure.locked = {0} 단계에서 로드아웃을 설정할 수 있음. configure.locked = {0} 단계에서 로드아웃을 설정할 수 있음.
zone.unlocked = [LIGHT_GRAY] 잠금 해제됨. zone.unlocked = [LIGHT_GRAY] 잠금 해제됨.
zone.complete = 지역 조건이 충족됨. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = 웨이브 {0} 달성:\n로드아웃 설정 잠금 해제됨. zone.config.complete = 웨이브 {0} 달성:\n로드아웃 설정 잠금 해제됨.
zone.resources = 자원 감지됨: zone.resources = 자원 감지됨:
add = 추가... add = 추가...
@@ -334,7 +336,7 @@ info.title = [accent]정보
error.title = [crimson]오류가 발생했습니다. error.title = [crimson]오류가 발생했습니다.
error.crashtitle = 오류가 발생했습니다. error.crashtitle = 오류가 발생했습니다.
blocks.outputspeed = 채광 속도: {0}/s blocks.outputspeed = 채광 속도: {0}/s
blocks.efficiency = Efficiency: {0}% blocks.efficiency = 효율성: {0}%
blocks.unknown = [LIGHT_GRAY]??? blocks.unknown = [LIGHT_GRAY]???
blocks.blockinfo = 블록 정보 blocks.blockinfo = 블록 정보
blocks.powerbalance = 전력: {0} blocks.powerbalance = 전력: {0}
@@ -345,6 +347,7 @@ blocks.targetsair = 공중공격 가능
blocks.targetsground = 지상공격 가능 blocks.targetsground = 지상공격 가능
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = 이동 속도 blocks.itemsmoved = 이동 속도
blocks.launchtime = Time Between Launches
blocks.shootrange = 사거리 blocks.shootrange = 사거리
blocks.size = 크기 blocks.size = 크기
blocks.liquidcapacity = 액체 용량 blocks.liquidcapacity = 액체 용량
@@ -358,6 +361,8 @@ blocks.itemcapacity = 저장 용량
blocks.basepowergeneration = 기지 전력 생성기 blocks.basepowergeneration = 기지 전력 생성기
blocks.powertransferspeed = 전력 전송량 blocks.powertransferspeed = 전력 전송량
blocks.craftspeed = 생산 속도 blocks.craftspeed = 생산 속도
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = 사용되는 액체 blocks.inputliquid = 사용되는 액체
blocks.inputliquidaux = 보조 액체 blocks.inputliquidaux = 보조 액체
blocks.inputitem = 사용되는 아이템 blocks.inputitem = 사용되는 아이템
@@ -390,6 +395,17 @@ blocks.fuelburntime = 연료 연소 시간
blocks.inputcapacity = 입력 용량 blocks.inputcapacity = 입력 용량
blocks.outputcapacity = 출력 용량 blocks.outputcapacity = 출력 용량
blocks.ammo = 탄약 blocks.ammo = 탄약
bullet.damage = [stat]{0}[lightgray] 데미지
bullet.splashdamage = [stat]{0}[lightgray] area 데미지 ~[stat] {1}[lightgray] 타일
bullet.incendiary = [stat]방화
bullet.homing = [stat]유도탄
bullet.shock = [stat]충격탄
bullet.frag = [stat]파편
bullet.knockback = [stat]{0}[lightgray] 넉백
bullet.freezing = [stat]동결
bullet.tarred = [stat]타르
bullet.multiplier = [stat]{0}[lightgray]x 탄약 배율
bullet.reload = [stat]{0}[lightgray]x 사격 속도
unit.blocks = 블록 unit.blocks = 블록
unit.powersecond = 전력/초 unit.powersecond = 전력/초
unit.liquidsecond = 액체/초 unit.liquidsecond = 액체/초
@@ -406,15 +422,16 @@ category.items = 아이템
category.crafting = 제작 category.crafting = 제작
category.shooting = 사격 category.shooting = 사격
category.optional = 보조 아이템 category.optional = 보조 아이템
setting.shadows.name = Shadows setting.landscape.name = 가로화면으로 고정
setting.shadows.name = 그림자
setting.animatedwater.name = 움직이는 물 setting.animatedwater.name = 움직이는 물
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = 안티에일리어싱[LIGHT_GRAY] (재시작 필요)[]
setting.indicators.name = 아군/적 인디게이터 표시 setting.indicators.name = 아군/적 인디게이터 표시
setting.autotarget.name = 자동 조준 setting.autotarget.name = 자동 조준
setting.fpscap.name = 최대 FPS setting.fpscap.name = 최대 FPS
setting.fpscap.none = 없음 setting.fpscap.none = 없음
setting.fpscap.text = FPS setting.fpscap.text = {0}FPS
setting.swapdiagonal.name = Always Diagonal Placement setting.swapdiagonal.name = 항상 대각선 설치
setting.difficulty.training = 훈련 setting.difficulty.training = 훈련
setting.difficulty.easy = 쉬움 setting.difficulty.easy = 쉬움
setting.difficulty.normal = 보통 setting.difficulty.normal = 보통
@@ -427,7 +444,7 @@ setting.sensitivity.name = 컨트롤러 감도
setting.saveinterval.name = 자동저장 간격 setting.saveinterval.name = 자동저장 간격
setting.seconds = setting.seconds =
setting.fullscreen.name = 전체 화면 setting.fullscreen.name = 전체 화면
setting.borderless.name = Borderless Window setting.borderless.name = 테두리 없는 창모드
setting.fps.name = FPS 표시 setting.fps.name = FPS 표시
setting.vsync.name = VSync 활성화 setting.vsync.name = VSync 활성화
setting.lasers.name = 전력 노드 레이저 표시 setting.lasers.name = 전력 노드 레이저 표시
@@ -452,7 +469,7 @@ keybind.screenshot.name = 맵 스크린샷
keybind.move_x.name = 오른쪽/왼쪽 이동 keybind.move_x.name = 오른쪽/왼쪽 이동
keybind.move_y.name = 위 / 아래 중간 keybind.move_y.name = 위 / 아래 중간
keybind.select.name = 선택 keybind.select.name = 선택
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = 대각선 설치
keybind.pick.name = 블록 선택 keybind.pick.name = 블록 선택
keybind.break_block.name = 블록 파괴 keybind.break_block.name = 블록 파괴
keybind.deselect.name = 선택해제 keybind.deselect.name = 선택해제
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = 실제 플레이어와 PvP를 합니다. mode.pvp.description = 실제 플레이어와 PvP를 합니다.
mode.attack.name = 공격 mode.attack.name = 공격
mode.attack.description = 일정 시간마다 적이 오는 단계가 없으며, 적의 기지를 파괴하는 것을 목표로 합니다. mode.attack.description = 일정 시간마다 적이 오는 단계가 없으며, 적의 기지를 파괴하는 것을 목표로 합니다.
mode.custom = Custom Rules
rules.infiniteresources = 무한 자원
rules.wavetimer = 웨이브 타이머
rules.waves = 웨이브
rules.enemyCheat = 무한 AI 자원
rules.pvp = PvP
rules.unitdrops = 유닛 드롭
rules.enemycorebuildradius = 적 코어 건설 금지구역:[LIGHT_GRAY] (타일)
rules.respawntime = 리스폰 시간:[LIGHT_GRAY] (초)
rules.wavespacing = 웨이브 간격:[LIGHT_GRAY] (초)
rules.buildcostmultiplier = 건설 소모 배율
rules.buildspeedmultiplier = 건설 속도 배율
content.item.name = 아이템 content.item.name = 아이템
content.liquid.name = 액체 content.liquid.name = 액체
content.unit.name = 유닛 content.unit.name = 유닛
@@ -572,7 +601,7 @@ block.sandrocks.name = 모래 바위
block.spore-pine.name = 포자 소나무 block.spore-pine.name = 포자 소나무
block.sporerocks.name = 포자 바위 block.sporerocks.name = 포자 바위
block.rock.name = 바위 block.rock.name = 바위
block.snowrock.name = Snow Rock block.snowrock.name = 눈바위
block.shale.name = 이판암 block.shale.name = 이판암
block.shale-boulder.name = 둥근 이판암 block.shale-boulder.name = 둥근 이판암
block.moss.name = 이끼 block.moss.name = 이끼
@@ -589,22 +618,22 @@ block.graphite-press.name = 흑연 압축기
block.multi-press.name = 다중 압축기 block.multi-press.name = 다중 압축기
block.constructing = {0} [LIGHT_GRAY](만드는중) block.constructing = {0} [LIGHT_GRAY](만드는중)
block.spawn.name = 적 스폰지점 block.spawn.name = 적 스폰지점
block.core-shard.name = 코어: 공유 block.core-shard.name = 코어-공유
block.core-foundation.name = 코어: 기초 block.core-foundation.name = 코어-기초
block.core-nucleus.name = 코어: block.core-nucleus.name = 코어-
block.deepwater.name = 깊은물 block.deepwater.name = 깊은물
block.water.name = block.water.name =
block.tainted-water.name = Tainted Water block.tainted-water.name = 도색된 물
block.darksand-tainted-water.name = Dark Sand Tainted Water block.darksand-tainted-water.name = 검은 모래로 도색된 물
block.tar.name = 타르 block.tar.name = 타르
block.stone.name = block.stone.name =
block.sand.name = 모래 block.sand.name = 모래
block.darksand.name = Dark Sand block.darksand.name = 검은 모래
block.ice.name = 얼음 block.ice.name = 얼음
block.snow.name = block.snow.name =
block.craters.name = 크레이터 block.craters.name = 크레이터
block.sand-water.name = 젖은모래 block.sand-water.name = 젖은모래
block.darksand-water.name = Dark Sand Water block.darksand-water.name = 검은모래물
block.char.name = block.char.name =
block.holostone.name = 홀로스톤 block.holostone.name = 홀로스톤
block.ice-snow.name = 얼음눈 block.ice-snow.name = 얼음눈
@@ -636,8 +665,8 @@ block.thorium-wall-large.name = 대형 토륨벽
block.door.name = block.door.name =
block.door-large.name = 대형문 block.door-large.name = 대형문
block.duo.name = 듀오 block.duo.name = 듀오
block.scorch.name = Scorch block.scorch.name = 스코어치
block.scatter.name = Scatter block.scatter.name = 스캐터
block.hail.name = 헤일 block.hail.name = 헤일
block.lancer.name = 랜서 block.lancer.name = 랜서
block.conveyor.name = 컨베이어 block.conveyor.name = 컨베이어
@@ -722,6 +751,7 @@ block.blast-drill.name = 압축 공기분사 드릴
block.thermal-pump.name = 화력 펌프 block.thermal-pump.name = 화력 펌프
block.thermal-generator.name = 열발전기 block.thermal-generator.name = 열발전기
block.alloy-smelter.name = 서지 합금 제련소 block.alloy-smelter.name = 서지 합금 제련소
block.mender.name = Mender
block.mend-projector.name = 수리 프로젝터 block.mend-projector.name = 수리 프로젝터
block.surge-wall.name = 서지 합금벽 block.surge-wall.name = 서지 합금벽
block.surge-wall-large.name = 큰 서지 합금벽 block.surge-wall-large.name = 큰 서지 합금벽
@@ -737,6 +767,7 @@ block.meltdown.name = 멜트다운
block.container.name = 컨테이너 block.container.name = 컨테이너
block.launch-pad.name = 발사대 block.launch-pad.name = 발사대
block.launch-pad.description = 출격할 필요 없이 아이템을 수송시킵시다. 미완성. block.launch-pad.description = 출격할 필요 없이 아이템을 수송시킵시다. 미완성.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = 블루팀 team.blue.name = 블루팀
team.red.name = 레드팀 team.red.name = 레드팀
team.orange.name = 오렌지팀 team.orange.name = 오렌지팀

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Are you sure you want to delete this map? This action canno
map.random = [accent]Random Map map.random = [accent]Random Map
map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor. map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file. map.invalid = Error loading map: corrupted or invalid map file.
editor.brush = Brush editor.brush = Brush
editor.openin = Open In Editor editor.openin = Open In Editor
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best Wave: {0} bestwave = [LIGHT_GRAY]Best Wave: {0}
launch = < LAUNCH > launch = < LAUNCH >
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}. configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Wave {0} reached:\nNew zone requirements met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Size blocks.size = Size
blocks.liquidcapacity = Liquid Capacity blocks.liquidcapacity = Liquid Capacity
@@ -358,6 +361,8 @@ blocks.itemcapacity = Item Capacity
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.powertransferspeed = Power Transfer
blocks.craftspeed = Production Speed blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Input Liquid blocks.inputliquid = Input Liquid
blocks.inputliquidaux = Aux Liquid blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Input Item blocks.inputitem = Input Item
@@ -390,6 +395,17 @@ blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Input capacity blocks.inputcapacity = Input capacity
blocks.outputcapacity = Output capacity blocks.outputcapacity = Output capacity
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = blocks unit.blocks = blocks
unit.powersecond = power units/second unit.powersecond = power units/second
unit.liquidsecond = liquid units/second unit.liquidsecond = liquid units/second
@@ -406,6 +422,7 @@ category.items = Items
category.crafting = Crafting category.crafting = Crafting
category.shooting = Shooting category.shooting = Shooting
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = Fight against other players locally. mode.pvp.description = Fight against other players locally.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units
@@ -722,6 +751,7 @@ block.blast-drill.name = Airblast Drill
block.thermal-pump.name = Thermal Pump block.thermal-pump.name = Thermal Pump
block.thermal-generator.name = Thermal Generator block.thermal-generator.name = Thermal Generator
block.alloy-smelter.name = Alloy Smelter block.alloy-smelter.name = Alloy Smelter
block.mender.name = Mender
block.mend-projector.name = Mend Projector block.mend-projector.name = Mend Projector
block.surge-wall.name = Surge Wall block.surge-wall.name = Surge Wall
block.surge-wall-large.name = Large Surge Wall block.surge-wall-large.name = Large Surge Wall
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = blue team.blue.name = blue
team.red.name = red team.red.name = red
team.orange.name = orange team.orange.name = orange

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Jesteś pewny, że chcesz usunąć tę mapę? Nie będzie m
map.random = [accent]Losowa mapa map.random = [accent]Losowa mapa
map.nospawn = Ta mapa nie zawiera żadnego rdzenia! Musisz dodać [ROYAL]niebieski[] rdzeń do tej mapy. map.nospawn = Ta mapa nie zawiera żadnego rdzenia! Musisz dodać [ROYAL]niebieski[] rdzeń do tej mapy.
map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[SCARLET] czerwony[] rdzeń do mapy w edytorze. map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[SCARLET] czerwony[] rdzeń do mapy w edytorze.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error podczas ładowania mapy: uszkodzony lub niepoprawny plik mapy. map.invalid = Error podczas ładowania mapy: uszkodzony lub niepoprawny plik mapy.
editor.brush = Pędzel editor.brush = Pędzel
editor.openin = Otwórz w edytorze editor.openin = Otwórz w edytorze
@@ -283,6 +284,7 @@ abandon = Opuść
abandon.text = Ta strefa i wszystkie jej surowce będą przejęte przez przeciwników. abandon.text = Ta strefa i wszystkie jej surowce będą przejęte przez przeciwników.
locked = Zablokowane locked = Zablokowane
complete = [LIGHT_GRAY]Ukończone: complete = [LIGHT_GRAY]Ukończone:
zone.requirement = Wave {0} in zone {1}
resume = Kontynuuj Strefę:\n[LIGHT_GRAY]{0} resume = Kontynuuj Strefę:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Najwyższa fala: {0} bestwave = [LIGHT_GRAY]Najwyższa fala: {0}
launch = Wystrzel launch = Wystrzel
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY] Strefa {0} odblokowana! zone.unlocked = [LIGHT_GRAY] Strefa {0} odblokowana!
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Może namierzać wrogów powietrznych
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Zasięg blocks.shootrange = Zasięg
blocks.size = Rozmiar blocks.size = Rozmiar
blocks.liquidcapacity = Pojemność cieczy blocks.liquidcapacity = Pojemność cieczy
@@ -358,6 +361,8 @@ blocks.itemcapacity = Pojemność przedmiotów
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Szybość przesyłu prądu blocks.powertransferspeed = Szybość przesyłu prądu
blocks.craftspeed = Szybkość produkcji blocks.craftspeed = Szybkość produkcji
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Potrzebna ciecz blocks.inputliquid = Potrzebna ciecz
blocks.inputliquidaux = Płyny do produkcji blocks.inputliquidaux = Płyny do produkcji
blocks.inputitem = Potrzebne przedmioty blocks.inputitem = Potrzebne przedmioty
@@ -390,6 +395,17 @@ blocks.fuelburntime = Płonięcie paliwa
blocks.inputcapacity = Pojemność wejściowa blocks.inputcapacity = Pojemność wejściowa
blocks.outputcapacity = Wydajność wyjściowa blocks.outputcapacity = Wydajność wyjściowa
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = Klocki unit.blocks = Klocki
unit.powersecond = jednostek prądu na sekundę unit.powersecond = jednostek prądu na sekundę
unit.liquidsecond = jednostek płynów na sekundę unit.liquidsecond = jednostek płynów na sekundę
@@ -406,6 +422,7 @@ category.items = Przedmioty
category.crafting = Przetwórstwo category.crafting = Przetwórstwo
category.shooting = Strzelanie category.shooting = Strzelanie
category.optional = Ulepszenia Nieobowiąskowe category.optional = Ulepszenia Nieobowiąskowe
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = Walcz przeciwko innym graczom. mode.pvp.description = Walcz przeciwko innym graczom.
mode.attack.name = Atak mode.attack.name = Atak
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Przedmioty content.item.name = Przedmioty
content.liquid.name = Płyny content.liquid.name = Płyny
content.unit.name = Jednostki content.unit.name = Jednostki
@@ -722,6 +751,7 @@ block.blast-drill.name = Wiertło Wybuchowe
block.thermal-pump.name = Pompa Termalna block.thermal-pump.name = Pompa Termalna
block.thermal-generator.name = Generator Termalny block.thermal-generator.name = Generator Termalny
block.alloy-smelter.name = Piec Mieszający block.alloy-smelter.name = Piec Mieszający
block.mender.name = Mender
block.mend-projector.name = Projektor Napraw block.mend-projector.name = Projektor Napraw
block.surge-wall.name = Ściana Stopu Energetycznego block.surge-wall.name = Ściana Stopu Energetycznego
block.surge-wall-large.name = Duża Ściana Stopu Energetycznego block.surge-wall-large.name = Duża Ściana Stopu Energetycznego
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Kontener block.container.name = Kontener
block.launch-pad.name = Skocznia block.launch-pad.name = Skocznia
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = niebieski team.blue.name = niebieski
team.red.name = czerwony team.red.name = czerwony
team.orange.name = pomarańczowy team.orange.name = pomarańczowy

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Certeza que quer deletar este mapa? Isto não pode ser desf
map.random = [accent]Mapa aleatório map.random = [accent]Mapa aleatório
map.nospawn = Esse mapa não contém um [yellow]núcleo[] para o jogador Nascer! [ROYAL]blue[] Coloque um [yellow]núcleo[] no editor de mapa. map.nospawn = Esse mapa não contém um [yellow]núcleo[] para o jogador Nascer! [ROYAL]blue[] Coloque um [yellow]núcleo[] no editor de mapa.
map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[SCARLET] Núcleos vermelhos[] no mapa no editor. map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[SCARLET] Núcleos vermelhos[] no mapa no editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Erro ao carregar o mapa: Arquivo de mapa invalido ou corrupto. map.invalid = Erro ao carregar o mapa: Arquivo de mapa invalido ou corrupto.
editor.brush = Pincel editor.brush = Pincel
editor.openin = Abrir no Editor editor.openin = Abrir no Editor
@@ -283,6 +284,7 @@ abandon = Abandonar
abandon.text = Esta zona e todos os seus recursos serão perdidos para o enimigo. abandon.text = Esta zona e todos os seus recursos serão perdidos para o enimigo.
locked = Trancado locked = Trancado
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resumir Zona:\n[LIGHT_GRAY]{0} resume = Resumir Zona:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Melhor: {0} bestwave = [LIGHT_GRAY]Melhor: {0}
launch = Lançar launch = Lançar
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Mirar no ar
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Alcance blocks.shootrange = Alcance
blocks.size = Tamanho blocks.size = Tamanho
blocks.liquidcapacity = Capacidade de Líquido blocks.liquidcapacity = Capacidade de Líquido
@@ -358,6 +361,8 @@ blocks.itemcapacity = Capacidade de Itens
blocks.basepowergeneration = Geração de poder base blocks.basepowergeneration = Geração de poder base
blocks.powertransferspeed = Transferência de energia blocks.powertransferspeed = Transferência de energia
blocks.craftspeed = Velocidade de produção blocks.craftspeed = Velocidade de produção
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Líquido de entrada blocks.inputliquid = Líquido de entrada
blocks.inputliquidaux = Líquido auxiliar blocks.inputliquidaux = Líquido auxiliar
blocks.inputitem = Item de entrada blocks.inputitem = Item de entrada
@@ -390,6 +395,17 @@ blocks.fuelburntime = Tempo de queima de combustivel
blocks.inputcapacity = Capacidade de entrada blocks.inputcapacity = Capacidade de entrada
blocks.outputcapacity = Capacidade de saída blocks.outputcapacity = Capacidade de saída
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = blocos unit.blocks = blocos
unit.powersecond = Unidades de energia/segundo unit.powersecond = Unidades de energia/segundo
unit.liquidsecond = Unidades de líquido/segundo unit.liquidsecond = Unidades de líquido/segundo
@@ -406,6 +422,7 @@ category.items = Itens
category.crafting = Construindo category.crafting = Construindo
category.shooting = Atirando category.shooting = Atirando
category.optional = Melhoras opcionais category.optional = Melhoras opcionais
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = Lutar contra outros jogadores locais. mode.pvp.description = Lutar contra outros jogadores locais.
mode.attack.name = Ataque mode.attack.name = Ataque
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Itens content.item.name = Itens
content.liquid.name = Liquidos content.liquid.name = Liquidos
content.unit.name = Units content.unit.name = Units
@@ -722,6 +751,7 @@ block.blast-drill.name = Mineradora de Explosão
block.thermal-pump.name = Cano termico block.thermal-pump.name = Cano termico
block.thermal-generator.name = Gerador Térmico block.thermal-generator.name = Gerador Térmico
block.alloy-smelter.name = Fundidora de Liga block.alloy-smelter.name = Fundidora de Liga
block.mender.name = Mender
block.mend-projector.name = Projetor Mend block.mend-projector.name = Projetor Mend
block.surge-wall.name = Parede de Surge block.surge-wall.name = Parede de Surge
block.surge-wall-large.name = Parede de Surge grande block.surge-wall-large.name = Parede de Surge grande
@@ -737,6 +767,7 @@ block.meltdown.name = Derreter
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = Azul team.blue.name = Azul
team.red.name = Vermelho team.red.name = Vermelho
team.orange.name = Laranja team.orange.name = Laranja

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Вы действительно хотите удалить
map.random = [accent]Случайная карта map.random = [accent]Случайная карта
map.nospawn = Эта карта не имеет ядер, в которых игрок может появиться! Добавьте[ROYAL] синее[] ядро на эту карту в редакторе карт. map.nospawn = Эта карта не имеет ядер, в которых игрок может появиться! Добавьте[ROYAL] синее[] ядро на эту карту в редакторе карт.
map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте[SCARLET] красные[] ядра к этой карте в редакторе. map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте[SCARLET] красные[] ядра к этой карте в редакторе.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты. map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты.
editor.brush = Кисть editor.brush = Кисть
editor.openin = Открыть в редакторе editor.openin = Открыть в редакторе
@@ -283,6 +284,7 @@ abandon = Покинуть
abandon.text = Эта зона и все ресурсы будут потеряны. abandon.text = Эта зона и все ресурсы будут потеряны.
locked = Заблокировано locked = Заблокировано
complete = [LIGHT_GRAY]Завершено: complete = [LIGHT_GRAY]Завершено:
zone.requirement = Wave {0} in zone {1}
resume = Возобновить зону:\n[LIGHT_GRAY]{0} resume = Возобновить зону:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Наилучшая волна: {0} bestwave = [LIGHT_GRAY]Наилучшая волна: {0}
launch = < ЗАПУСК > launch = < ЗАПУСК >
@@ -294,7 +296,7 @@ uncover = Раскрыть
configure = Выгрузить конфигурацию configure = Выгрузить конфигурацию
configure.locked = [LIGHT_GRAY]Разблокировать настройки выгрузки:\nВолна {0}. configure.locked = [LIGHT_GRAY]Разблокировать настройки выгрузки:\nВолна {0}.
zone.unlocked = [LIGHT_GRAY]{0} разблокировано. zone.unlocked = [LIGHT_GRAY]{0} разблокировано.
zone.complete = {0} волн достигнуто:\nТребования для следующей зоны выполнены. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = {0} волн достигнуто:\nВыгружаемая конфигурация разблокирована zone.config.complete = {0} волн достигнуто:\nВыгружаемая конфигурация разблокирована
zone.resources = Обнаруженные ресурсы: zone.resources = Обнаруженные ресурсы:
add = Добавить... add = Добавить...
@@ -345,6 +347,7 @@ blocks.targetsair = Воздушные цели
blocks.targetsground = Наземные цели blocks.targetsground = Наземные цели
blocks.items = Предметы: {0} blocks.items = Предметы: {0}
blocks.itemsmoved = Скорость перемещения blocks.itemsmoved = Скорость перемещения
blocks.launchtime = Time Between Launches
blocks.shootrange = Радиус действия blocks.shootrange = Радиус действия
blocks.size = Размер blocks.size = Размер
blocks.liquidcapacity = Вместимость жидкости blocks.liquidcapacity = Вместимость жидкости
@@ -358,6 +361,8 @@ blocks.itemcapacity = Вместимость предметов
blocks.basepowergeneration = Базовая генерация энергии blocks.basepowergeneration = Базовая генерация энергии
blocks.powertransferspeed = Скорость передачи энергии blocks.powertransferspeed = Скорость передачи энергии
blocks.craftspeed = Скорость производства blocks.craftspeed = Скорость производства
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Прием жидкости blocks.inputliquid = Прием жидкости
blocks.inputliquidaux = Вспом. жидкость blocks.inputliquidaux = Вспом. жидкость
blocks.inputitem = Входящий предмет blocks.inputitem = Входящий предмет
@@ -390,6 +395,17 @@ blocks.fuelburntime = Время горения топлива
blocks.inputcapacity = Макс. вместимость входящих предметов blocks.inputcapacity = Макс. вместимость входящих предметов
blocks.outputcapacity = Макс. вместимость выходящих предметов blocks.outputcapacity = Макс. вместимость выходящих предметов
blocks.ammo = Боеприпасы blocks.ammo = Боеприпасы
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = блоки unit.blocks = блоки
unit.powersecond = единиц энергии/секунду unit.powersecond = единиц энергии/секунду
unit.liquidsecond = жидкостных единиц/секунду unit.liquidsecond = жидкостных единиц/секунду
@@ -406,6 +422,7 @@ category.items = Предметы
category.crafting = Ввод/вывод category.crafting = Ввод/вывод
category.shooting = рельба category.shooting = рельба
category.optional = Дополнительные улучшения category.optional = Дополнительные улучшения
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Анимированная вода setting.animatedwater.name = Анимированная вода
setting.antialias.name = Сглаживание[LIGHT_GRAY] (требует перезапуска)[] setting.antialias.name = Сглаживание[LIGHT_GRAY] (требует перезапуска)[]
@@ -483,6 +500,18 @@ mode.pvp.name = Противо-\nстояние
mode.pvp.description = боритесь против других игроков. mode.pvp.description = боритесь против других игроков.
mode.attack.name = Атака mode.attack.name = Атака
mode.attack.description = Нет волн, цель - уничтожить базу противника. mode.attack.description = Нет волн, цель - уничтожить базу противника.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Предметы content.item.name = Предметы
content.liquid.name = Жидкости content.liquid.name = Жидкости
content.unit.name = Боевые единицы content.unit.name = Боевые единицы
@@ -722,6 +751,7 @@ block.blast-drill.name = Воздушная буровая установка
block.thermal-pump.name = Термальный насос block.thermal-pump.name = Термальный насос
block.thermal-generator.name = Термальный генератор block.thermal-generator.name = Термальный генератор
block.alloy-smelter.name = Плавильня кинетического сплава block.alloy-smelter.name = Плавильня кинетического сплава
block.mender.name = Mender
block.mend-projector.name = Ремонтирующий гранатомёт block.mend-projector.name = Ремонтирующий гранатомёт
block.surge-wall.name = Стена из кинетического сплава block.surge-wall.name = Стена из кинетического сплава
block.surge-wall-large.name = Большая стена из кинетического сплава block.surge-wall-large.name = Большая стена из кинетического сплава
@@ -737,6 +767,7 @@ block.meltdown.name = Катастрофа
block.container.name = Склад block.container.name = Склад
block.launch-pad.name = Стартовая площадка block.launch-pad.name = Стартовая площадка
block.launch-pad.description = Запускает партии предметов без необходимости запуска ядра. Незавершённое. block.launch-pad.description = Запускает партии предметов без необходимости запуска ядра. Незавершённое.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = Синяя team.blue.name = Синяя
team.red.name = Красная team.red.name = Красная
team.orange.name = Оранжевая team.orange.name = Оранжевая

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Haritayi silmek istedigine emin misin? Bu geri alinamaz!
map.random = [accent]Rasgele harita map.random = [accent]Rasgele harita
map.nospawn = Haritada Oyncularin cikmasi icin cekirdek yok! Haritaya[ROYAL]Mavi[] cekirdek ekle. map.nospawn = Haritada Oyncularin cikmasi icin cekirdek yok! Haritaya[ROYAL]Mavi[] cekirdek ekle.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Harita yuklenemedi. Gecersiz yada bozuk dosya. map.invalid = Harita yuklenemedi. Gecersiz yada bozuk dosya.
editor.brush = Firca editor.brush = Firca
editor.openin = Editorde ac editor.openin = Editorde ac
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Havayi hedef alir mi?
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Menzil blocks.shootrange = Menzil
blocks.size = Buyukluk blocks.size = Buyukluk
blocks.liquidcapacity = Sivi kapasitesi blocks.liquidcapacity = Sivi kapasitesi
@@ -358,6 +361,8 @@ blocks.itemcapacity = Esya kapasitesi
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Guc transfer hizi blocks.powertransferspeed = Guc transfer hizi
blocks.craftspeed = Yapilma hizi blocks.craftspeed = Yapilma hizi
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Giris sivi blocks.inputliquid = Giris sivi
blocks.inputliquidaux = Yardimci sivi blocks.inputliquidaux = Yardimci sivi
blocks.inputitem = Giris esyasi blocks.inputitem = Giris esyasi
@@ -390,6 +395,17 @@ blocks.fuelburntime = Yakit yakilma suresi
blocks.inputcapacity = Giris kapasitesi blocks.inputcapacity = Giris kapasitesi
blocks.outputcapacity = Cikis kapasitesi blocks.outputcapacity = Cikis kapasitesi
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = Yapilar unit.blocks = Yapilar
unit.powersecond = saniyede bir unit.powersecond = saniyede bir
unit.liquidsecond = Saniyede bir unit.liquidsecond = Saniyede bir
@@ -406,6 +422,7 @@ category.items = esyalar
category.crafting = uretim category.crafting = uretim
category.shooting = sikma category.shooting = sikma
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = fight against other players locally. mode.pvp.description = fight against other players locally.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Esyalar content.item.name = Esyalar
content.liquid.name = Sivilar content.liquid.name = Sivilar
content.unit.name = Units content.unit.name = Units
@@ -722,6 +751,7 @@ block.blast-drill.name = Patlatici kazici
block.thermal-pump.name = Termal pompa block.thermal-pump.name = Termal pompa
block.thermal-generator.name = Magma jeneratoru block.thermal-generator.name = Magma jeneratoru
block.alloy-smelter.name = Alloy eritici block.alloy-smelter.name = Alloy eritici
block.mender.name = Mender
block.mend-projector.name = Mend koruyucu block.mend-projector.name = Mend koruyucu
block.surge-wall.name = kabarma duvari block.surge-wall.name = kabarma duvari
block.surge-wall-large.name = genis kabarma duvari block.surge-wall-large.name = genis kabarma duvari
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = blue team.blue.name = blue
team.red.name = red team.red.name = red
team.orange.name = orange team.orange.name = orange

View File

@@ -182,6 +182,7 @@ map.delete.confirm = Are you sure you want to delete this map? This action canno
map.random = [accent]Random Map map.random = [accent]Random Map
map.nospawn = This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor. map.nospawn = This map does not have any cores for the player to spawn in! Add a [ROYAL]blue[] core to this map in the editor.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file. map.invalid = Error loading map: corrupted or invalid map file.
editor.brush = Brush editor.brush = Brush
editor.openin = Open In Editor editor.openin = Open In Editor
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = This zone and all its resources will be lost to the enemy.
locked = Locked locked = Locked
complete = [LIGHT_GRAY]Complete: complete = [LIGHT_GRAY]Complete:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0} bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
@@ -294,7 +296,7 @@ uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout. configure.locked = [LIGHT_GRAY]Reach wave {0}\nto configure loadout.
zone.unlocked = [LIGHT_GRAY]{0} unlocked. zone.unlocked = [LIGHT_GRAY]{0} unlocked.
zone.complete = Zone conditions met. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = Resources Detected: zone.resources = Resources Detected:
add = Add... add = Add...
@@ -345,6 +347,7 @@ blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} blocks.items = Items: {0}
blocks.itemsmoved = Move Speed blocks.itemsmoved = Move Speed
blocks.launchtime = Time Between Launches
blocks.shootrange = Range blocks.shootrange = Range
blocks.size = Boyut blocks.size = Boyut
blocks.liquidcapacity = Sıvı kapasitesi blocks.liquidcapacity = Sıvı kapasitesi
@@ -358,6 +361,8 @@ blocks.itemcapacity = Ürün kapasitesi
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.powertransferspeed = Power Transfer
blocks.craftspeed = Production Speed blocks.craftspeed = Production Speed
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Giriş sıvı blocks.inputliquid = Giriş sıvı
blocks.inputliquidaux = Aux Liquid blocks.inputliquidaux = Aux Liquid
blocks.inputitem = Giriş öğesi blocks.inputitem = Giriş öğesi
@@ -390,6 +395,17 @@ blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Giriş kapasitesi blocks.inputcapacity = Giriş kapasitesi
blocks.outputcapacity = Çıkış kapasitesi blocks.outputcapacity = Çıkış kapasitesi
blocks.ammo = Ammo blocks.ammo = Ammo
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = blocks unit.blocks = blocks
unit.powersecond = power units/second unit.powersecond = power units/second
unit.liquidsecond = liquid units/second unit.liquidsecond = liquid units/second
@@ -406,6 +422,7 @@ category.items = Items
category.crafting = Crafting category.crafting = Crafting
category.shooting = Shooting category.shooting = Shooting
category.optional = Optional Enhancements category.optional = Optional Enhancements
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows setting.shadows.name = Shadows
setting.animatedwater.name = Animated Water setting.animatedwater.name = Animated Water
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = fight against other players locally. mode.pvp.description = fight against other players locally.
mode.attack.name = Attack mode.attack.name = Attack
mode.attack.description = No waves, with the goal to destroy the enemy base. mode.attack.description = No waves, with the goal to destroy the enemy base.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = Items content.item.name = Items
content.liquid.name = Liquids content.liquid.name = Liquids
content.unit.name = Units content.unit.name = Units
@@ -722,6 +751,7 @@ block.blast-drill.name = Blast Drill
block.thermal-pump.name = Thermal Pump block.thermal-pump.name = Thermal Pump
block.thermal-generator.name = Thermal Generator block.thermal-generator.name = Thermal Generator
block.alloy-smelter.name = Alloy Smtler block.alloy-smelter.name = Alloy Smtler
block.mender.name = Mender
block.mend-projector.name = Mend Projector block.mend-projector.name = Mend Projector
block.surge-wall.name = Surge Wall block.surge-wall.name = Surge Wall
block.surge-wall-large.name = Large Surge Wall block.surge-wall-large.name = Large Surge Wall
@@ -737,6 +767,7 @@ block.meltdown.name = Meltdown
block.container.name = Container block.container.name = Container
block.launch-pad.name = Launch Pad block.launch-pad.name = Launch Pad
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = blue team.blue.name = blue
team.red.name = red team.red.name = red
team.orange.name = orange team.orange.name = orange

View File

@@ -181,7 +181,8 @@ builtin = Bбудована
map.delete.confirm = Ви впевнені, що хочете видалити цю мапу? Цю дію не можна скасувати! map.delete.confirm = Ви впевнені, що хочете видалити цю мапу? Цю дію не можна скасувати!
map.random = [accent]Випадкова мапа map.random = [accent]Випадкова мапа
map.nospawn = Ця мапа не має жодного ядра для спавну гравця! Додайте[ROYAL] сине[] ядро в цю мапу редакторі. map.nospawn = Ця мапа не має жодного ядра для спавну гравця! Додайте[ROYAL] сине[] ядро в цю мапу редакторі.
map.nospawn.pvp = У цієї мапи немає ворожих ядер, в яких гравець може з'явитися! Додайте[SCARLET] червоне[] ядро до цієї мапи в редакторі. map.nospawn.pvp = У цієї мапи немає ворожих ядер, в яких гравець може з'явитися! Додайте[SCARLET] не сине[] ядро до цієї мапи в редакторі.
map.nospawn.attack = У цієї мапи немає ворожих ядер,які гравець може атакувати! Додайте[SCARLET] червоне[] ядро до цієї мапи в редакторі.
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи. map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
editor.brush = Пензлик editor.brush = Пензлик
editor.openin = Відкрити в редакторі editor.openin = Відкрити в редакторі
@@ -283,6 +284,7 @@ abandon = Покинути
abandon.text = Ця зона і всі її ресурси будуть втрачені для ворога. abandon.text = Ця зона і всі її ресурси будуть втрачені для ворога.
locked = Заблоковано locked = Заблоковано
complete = [LIGHT_GRAY]Завершено: complete = [LIGHT_GRAY]Завершено:
zone.requirement = Wave {0} in zone {1}
resume = Відновити зону:\n[LIGHT_GRAY]{0} resume = Відновити зону:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Найкраща хвиля: {0} bestwave = [LIGHT_GRAY]Найкраща хвиля: {0}
launch = < ЗАПУСК > launch = < ЗАПУСК >
@@ -294,7 +296,7 @@ uncover = Розкрити
configure = Вивантаження configure = Вивантаження
configure.locked = [LIGHT_GRAY]Розблокувати можливість вивантаження ресурсів:\nWave {0}. configure.locked = [LIGHT_GRAY]Розблокувати можливість вивантаження ресурсів:\nWave {0}.
zone.unlocked = [LIGHT_GRAY]{0} розблоковано zone.unlocked = [LIGHT_GRAY]{0} розблоковано
zone.complete = {0} хвиль досягнено:\nВимоги для нової зони виконані. zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = {0} хвиль досягнено. reached:\nРозблоковано можливість вивантаження. zone.config.complete = {0} хвиль досягнено. reached:\nРозблоковано можливість вивантаження.
zone.resources = Виявлені ресурси: zone.resources = Виявлені ресурси:
add = Додати... add = Додати...
@@ -345,6 +347,7 @@ blocks.targetsair = Повітряні мішені
blocks.targetsground = Наземні мішені blocks.targetsground = Наземні мішені
blocks.items = Предмети: {0} blocks.items = Предмети: {0}
blocks.itemsmoved = Швидкість переміщення blocks.itemsmoved = Швидкість переміщення
blocks.launchtime = Time Between Launches
blocks.shootrange = Діапазон дії blocks.shootrange = Діапазон дії
blocks.size = Розмір blocks.size = Розмір
blocks.liquidcapacity = Місткість рідини blocks.liquidcapacity = Місткість рідини
@@ -358,6 +361,8 @@ blocks.itemcapacity = Місткість предметів
blocks.basepowergeneration = Базова генерація енергії blocks.basepowergeneration = Базова генерація енергії
blocks.powertransferspeed = Швидкість передачі енергії blocks.powertransferspeed = Швидкість передачі енергії
blocks.craftspeed = Швидкість виробництва blocks.craftspeed = Швидкість виробництва
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = Прийом рідини blocks.inputliquid = Прийом рідини
blocks.inputliquidaux = Допоміжна рідина blocks.inputliquidaux = Допоміжна рідина
blocks.inputitem = Вхідний предмет blocks.inputitem = Вхідний предмет
@@ -390,6 +395,17 @@ blocks.fuelburntime = Час горіння топлива
blocks.inputcapacity = Макс. місткість вхідних предметів blocks.inputcapacity = Макс. місткість вхідних предметів
blocks.outputcapacity = Макс. місткість вихідних предметів blocks.outputcapacity = Макс. місткість вихідних предметів
blocks.ammo = Боєприпаси blocks.ammo = Боєприпаси
bullet.damage = [stat]{0}[lightgray] шкода
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] плитк.
bullet.incendiary = [stat]запальний
bullet.homing = [stat]самонаведення
bullet.shock = [stat]шок
bullet.frag = [stat]осколкова граната
bullet.knockback = [stat]{0}[lightgray] відкидання
bullet.freezing = [stat]заморожування
bullet.tarred = [stat]дьогтьовий
bullet.multiplier = [stat]{0}[lightgray]x множник патронів
bullet.reload = [stat]{0}[lightgray]x перезаряджання
unit.blocks = блоки unit.blocks = блоки
unit.powersecond = одиниць енергії/секунду unit.powersecond = одиниць енергії/секунду
unit.liquidsecond = рідких одиниць/секунду unit.liquidsecond = рідких одиниць/секунду
@@ -406,7 +422,8 @@ category.items = Предмети
category.crafting = Введення/виведення category.crafting = Введення/виведення
category.shooting = Стрільба category.shooting = Стрільба
category.optional = Додаткові поліпшення category.optional = Додаткові поліпшення
setting.shadows.name = Shadows setting.landscape.name = Заблокований пейхаж
setting.shadows.name = Тіні
setting.animatedwater.name = Анімована вода setting.animatedwater.name = Анімована вода
setting.antialias.name = Згладжування[LIGHT_GRAY] (потребує перезапуску)[] setting.antialias.name = Згладжування[LIGHT_GRAY] (потребує перезапуску)[]
setting.indicators.name = Показувати у сторону ворогів та союзників setting.indicators.name = Показувати у сторону ворогів та союзників
@@ -476,13 +493,25 @@ mode.help.title = Опис режимів
mode.survival.name = Хвилі mode.survival.name = Хвилі
mode.survival.description = Звичайний режим. В цьому режимі треба самим добувати ресурси та хвилі йдуть беззупинно. mode.survival.description = Звичайний режим. В цьому режимі треба самим добувати ресурси та хвилі йдуть беззупинно.
mode.sandbox.name = Пісочниця mode.sandbox.name = Пісочниця
mode.sandbox.description = В режимі "Пісочниця" бескінечні ресурси(але їх все одно можно добувати) та хвилі йдуть за вашим бажанням. mode.sandbox.description = В режимі "Пісочниця" незкінченні ресурси(але їх все одно можно добувати) та хвилі йдуть за вашим бажанням.
mode.freebuild.name = Вільне\nбудівництво mode.freebuild.name = Вільне\nбудівництво
mode.freebuild.description = В режимі "Пісочниця" треба самим добувати ресурси та хвилі йдуть за вашим бажанням. mode.freebuild.description = В режимі "Пісочниця" треба самим добувати ресурси та хвилі йдуть за вашим бажанням.
mode.pvp.name = PVP mode.pvp.name = PVP
mode.pvp.description = боріться проти інших гравців. mode.pvp.description = боріться проти інших гравців.
mode.attack.name = Атака mode.attack.name = Атака
mode.attack.description = Немає хвиль, мета - знищити базу противника. mode.attack.description = Немає хвиль, мета - знищити базу противника.
mode.custom = Користувальницькі правила
rules.infiniteresources = Нескінченні ресурси
rules.wavetimer = Таймер Хвиль
rules.waves = Хвилі
rules.enemyCheat = Нескінченні ресурси для ШІ
rules.pvp = PvP
rules.unitdrops = Падіння бойових одиниць
rules.enemycorebuildradius = Радіус заборони будування для Ворожого Ядра:[LIGHT_GRAY] (плитки)
rules.respawntime = Час відродження:[LIGHT_GRAY] (sec)
rules.wavespacing = Інтервал хвиль:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Множник затрат на будівництво
rules.buildspeedmultiplier = Множник швидкості будування
content.item.name = Предмети content.item.name = Предмети
content.liquid.name = Рідини content.liquid.name = Рідини
content.unit.name = Бойові одиниці content.unit.name = Бойові одиниці
@@ -594,8 +623,8 @@ block.core-foundation.name = Ядро: Штаб
block.core-nucleus.name = Ядро: Атом block.core-nucleus.name = Ядро: Атом
block.deepwater.name = Глибоководдя block.deepwater.name = Глибоководдя
block.water.name = Вода block.water.name = Вода
block.tainted-water.name = Tainted Water block.tainted-water.name = Забруднена вода
block.darksand-tainted-water.name = Dark Sand Tainted Water block.darksand-tainted-water.name = Темний пісок з забрудненою водою
block.tar.name = Tar block.tar.name = Tar
block.stone.name = Камінь block.stone.name = Камінь
block.sand.name = Пісок block.sand.name = Пісок
@@ -616,10 +645,10 @@ block.pine.name = Сосна
block.white-tree-dead.name = Мертве Біле Дерево block.white-tree-dead.name = Мертве Біле Дерево
block.white-tree.name = Біле Дерево block.white-tree.name = Біле Дерево
block.spore-cluster.name = Скупчення спор block.spore-cluster.name = Скупчення спор
block.metal-floor.name = Металевий Пол block.metal-floor.name = Металевий Пол 1
block.metal-floor-2.name = Металевий Пол 2 block.metal-floor-2.name = Металевий Пол 2
block.metal-floor-3.name = Металевий Пол 3 block.metal-floor-3.name = Металевий Пол 3
block.metal-floor-5.name = Металевий Пол 5 block.metal-floor-5.name = Металевий Пол 4
block.metal-floor-damaged.name = Пошкоджений Металевий Пол block.metal-floor-damaged.name = Пошкоджений Металевий Пол
block.ignarock.name = Магматичні Гірські Породи block.ignarock.name = Магматичні Гірські Породи
block.hotrock.name = Гарячий Камінь block.hotrock.name = Гарячий Камінь
@@ -722,6 +751,7 @@ block.blast-drill.name = Бурова установка
block.thermal-pump.name = Тепловий насос block.thermal-pump.name = Тепловий насос
block.thermal-generator.name = Тепловий генератор block.thermal-generator.name = Тепловий генератор
block.alloy-smelter.name = Сплавовий завод block.alloy-smelter.name = Сплавовий завод
block.mender.name = Mender
block.mend-projector.name = Ремонту гранатомет block.mend-projector.name = Ремонту гранатомет
block.surge-wall.name = Хвиляста стіна block.surge-wall.name = Хвиляста стіна
block.surge-wall-large.name = Велика хвиляста стіна block.surge-wall-large.name = Велика хвиляста стіна
@@ -737,6 +767,7 @@ block.meltdown.name = Розтоплення
block.container.name = Склад block.container.name = Склад
block.launch-pad.name = Стартовий майданчик block.launch-pad.name = Стартовий майданчик
block.launch-pad.description = Запускає партії елементів без необхідності запуску ядра. Незакінчено. block.launch-pad.description = Запускає партії елементів без необхідності запуску ядра. Незакінчено.
block.launch-pad-large.name = Large Launch Pad
team.blue.name = Синя team.blue.name = Синя
team.red.name = Червона team.red.name = Червона
team.orange.name = Помаренчева team.orange.name = Помаренчева

View File

@@ -32,7 +32,7 @@ showagain = 不再显示
coreattack = < 核心正在受到攻击! > coreattack = < 核心正在受到攻击! >
nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent nearpoint = [[ [scarlet]LEAVE DROP POINT IMMEDIATELY[] ]\nannihilation imminent
outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0} outofbounds = [[ OUT OF BOUNDS ]\n[]self-destruct in {0}
database = Core Database database = 核心数据
savegame = 保存游戏 savegame = 保存游戏
loadgame = 载入游戏 loadgame = 载入游戏
joingame = 加入游戏 joingame = 加入游戏
@@ -51,7 +51,7 @@ noname = Pick a[accent] player name[] first.
filename = 文件名: filename = 文件名:
unlocked = 新方块已解锁! unlocked = 新方块已解锁!
completed = [accent]Completed completed = [accent]Completed
techtree = Tech Tree techtree = 科技树
research.list = [LIGHT_GRAY]Research: research.list = [LIGHT_GRAY]Research:
research = Research research = Research
researched = [LIGHT_GRAY]{0} researched. researched = [LIGHT_GRAY]{0} researched.
@@ -182,6 +182,7 @@ map.delete.confirm = 确认要删除地图吗?这个操作无法撤销!
map.random = [accent]随机地图 map.random = [accent]随机地图
map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]蓝色[]的核心。 map.nospawn = 这个地图没有核心!请在编辑器中添加一个[ROYAL]蓝色[]的核心。
map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[ROYAL]红色[]的核心。 map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[ROYAL]红色[]的核心。
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = 地图载入错误:地图文件可能已经损坏。 map.invalid = 地图载入错误:地图文件可能已经损坏。
editor.brush = 笔刷 editor.brush = 笔刷
editor.openin = 在编辑器中打开 editor.openin = 在编辑器中打开
@@ -283,6 +284,7 @@ abandon = Abandon
abandon.text = 这个区域和它的所有资源会被敌人没收. abandon.text = 这个区域和它的所有资源会被敌人没收.
locked = 已被锁定 locked = 已被锁定
complete = [LIGHT_GRAY]完成: complete = [LIGHT_GRAY]完成:
zone.requirement = Wave {0} in zone {1}
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]最好: {0} bestwave = [LIGHT_GRAY]最好: {0}
launch = < 发射 > launch = < 发射 >
@@ -294,7 +296,7 @@ uncover = Uncover
configure = 设定 Loadout configure = 设定 Loadout
configure.locked = [LIGHT_GRAY]到达第 {0} 波\n才设定 loadout. configure.locked = [LIGHT_GRAY]到达第 {0} 波\n才设定 loadout.
zone.unlocked = [LIGHT_GRAY]{0} 已解锁。 zone.unlocked = [LIGHT_GRAY]{0} 已解锁。
zone.complete = 区域条件达成。 zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = Wave {0} reached:\nLoadout config unlocked. zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
zone.resources = 已被发现的资源: zone.resources = 已被发现的资源:
add = Add... add = Add...
@@ -308,13 +310,13 @@ error.alreadyconnected = 已连接。
error.mapnotfound = 找不到地图文件! error.mapnotfound = 找不到地图文件!
error.io = 网络 I/O 错误。 error.io = 网络 I/O 错误。
error.any = 未知网络错误。 error.any = 未知网络错误。
zone.groundZero.name = Ground Zero zone.groundZero.name = 零号地区
zone.craters.name = The Craters zone.craters.name = 陨石地带
zone.frozenForest.name = Frozen Forest zone.frozenForest.name = 冰冻森林
zone.ruinousShores.name = Ruinous Shores zone.ruinousShores.name = 毁灭海岸
zone.stainedMountains.name = Stained Mountains zone.stainedMountains.name = 绵延群山
zone.desolateRift.name = Desolate Rift zone.desolateRift.name = 荒芜裂谷
zone.nuclearComplex.name = Nuclear Production Complex zone.nuclearComplex.name = 核能生产
settings.language = 语言 settings.language = 语言
settings.reset = 恢复默认 settings.reset = 恢复默认
settings.rebind = 重新绑定 settings.rebind = 重新绑定
@@ -333,18 +335,19 @@ no = 不
info.title = [accent]详情 info.title = [accent]详情
error.title = [crimson]发生了一个错误 error.title = [crimson]发生了一个错误
error.crashtitle = 发生了一个错误 error.crashtitle = 发生了一个错误
blocks.outputspeed = Drill Speed: {0}/s blocks.outputspeed = 挖掘速度: {0}/s
blocks.efficiency = Efficiency: {0}% blocks.efficiency = 效率: {0}%
blocks.unknown = [LIGHT_GRAY]??? blocks.unknown = [LIGHT_GRAY]???
blocks.blockinfo = 方块详情 blocks.blockinfo = 方块详情
blocks.powerbalance = Power: {0} blocks.powerbalance = 能量: {0}
blocks.poweroutput = Power Output: {0} blocks.poweroutput = 能量输出: {0}
blocks.powercapacity = 能量容量 blocks.powercapacity = 能量容量
blocks.powershot = 能量/发射 blocks.powershot = 能量/发射
blocks.targetsair = 攻击空中单位 blocks.targetsair = 攻击空中单位
blocks.targetsground = Targets Ground blocks.targetsground = 攻击地面单位
blocks.items = Items: {0} blocks.items = 物体: {0}
blocks.itemsmoved = 移动速度 blocks.itemsmoved = 移动速度
blocks.launchtime = Time Between Launches
blocks.shootrange = 范围 blocks.shootrange = 范围
blocks.size = 尺寸 blocks.size = 尺寸
blocks.liquidcapacity = 液体容量 blocks.liquidcapacity = 液体容量
@@ -358,6 +361,8 @@ blocks.itemcapacity = 物品容量
blocks.basepowergeneration = 基础能源输出 blocks.basepowergeneration = 基础能源输出
blocks.powertransferspeed = 能量传输 blocks.powertransferspeed = 能量传输
blocks.craftspeed = 生产速度 blocks.craftspeed = 生产速度
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = 液体输入 blocks.inputliquid = 液体输入
blocks.inputliquidaux = 辅助液体 blocks.inputliquidaux = 辅助液体
blocks.inputitem = 物品输入 blocks.inputitem = 物品输入
@@ -365,12 +370,12 @@ blocks.inputitems = 物品输入
blocks.outputitem = 物品输出 blocks.outputitem = 物品输出
blocks.drilltier = 可钻探矿物 blocks.drilltier = 可钻探矿物
blocks.drillspeed = 基础钻探速度 blocks.drillspeed = 基础钻探速度
blocks.maxunits = Max Active Units blocks.maxunits = 最大单位数量
blocks.liquidoutput = 液体输出 blocks.liquidoutput = 液体输出
blocks.liquidoutputspeed = 液体输出速度 blocks.liquidoutputspeed = 液体输出速度
blocks.liquiduse = 液体使用速度 blocks.liquiduse = 液体使用速度
blocks.coolant = 冷却剂 blocks.coolant = 冷却剂
blocks.liquid = Liquid blocks.liquid = 液体
blocks.coolantuse = 冷却剂使用速度 blocks.coolantuse = 冷却剂使用速度
blocks.inputliquidfuel = 液体燃料输入 blocks.inputliquidfuel = 液体燃料输入
blocks.liquidfueluse = 液体燃料使用速度 blocks.liquidfueluse = 液体燃料使用速度
@@ -379,9 +384,9 @@ blocks.boostliquid = 强化液体
blocks.health = 生命值 blocks.health = 生命值
blocks.heat = Heat blocks.heat = Heat
blocks.power = 电力 blocks.power = 电力
blocks.progress = Build Progress blocks.progress = 制造进度
blocks.spawned = Units: {0}/{1} blocks.spawned = 单位数量: {0}/{1}
blocks.power.satisfaction = 电力见面 blocks.power.satisfaction = 电力输入
blocks.inaccuracy = 误差 blocks.inaccuracy = 误差
blocks.shots = 发射数 blocks.shots = 发射数
blocks.reload = 重新装弹 blocks.reload = 重新装弹
@@ -390,6 +395,17 @@ blocks.fuelburntime = 燃料燃烧时间
blocks.inputcapacity = 输入容量 blocks.inputcapacity = 输入容量
blocks.outputcapacity = 输出容量 blocks.outputcapacity = 输出容量
blocks.ammo = 子弹 blocks.ammo = 子弹
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = 方块 unit.blocks = 方块
unit.powersecond = 能量单位/秒 unit.powersecond = 能量单位/秒
unit.liquidsecond = 液体单位/秒 unit.liquidsecond = 液体单位/秒
@@ -406,15 +422,16 @@ category.items = 物品
category.crafting = 制造 category.crafting = 制造
category.shooting = 发射 category.shooting = 发射
category.optional = 可选的增强物品 category.optional = 可选的增强物品
setting.shadows.name = Shadows setting.landscape.name = 锁定地形
setting.animatedwater.name = Animated Water setting.shadows.name = 影子
setting.animatedwater.name = 流动的水
setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[] setting.antialias.name = Antialias[LIGHT_GRAY] (requires restart)[]
setting.indicators.name = 队友指示器 setting.indicators.name = 队友指示器
setting.autotarget.name = 自动发射 setting.autotarget.name = 自动发射
setting.fpscap.name = 最高 FPS setting.fpscap.name = 最高 FPS
setting.fpscap.none = setting.fpscap.none =
setting.fpscap.text = {0} FPS setting.fpscap.text = {0} FPS
setting.swapdiagonal.name = Always Diagonal Placement setting.swapdiagonal.name = 总是自动铺设
setting.difficulty.training = 训练 setting.difficulty.training = 训练
setting.difficulty.easy = 简单 setting.difficulty.easy = 简单
setting.difficulty.normal = 普通 setting.difficulty.normal = 普通
@@ -452,7 +469,7 @@ keybind.screenshot.name = 地图截图
keybind.move_x.name = 水平移动 keybind.move_x.name = 水平移动
keybind.move_y.name = 垂直移动 keybind.move_y.name = 垂直移动
keybind.select.name = 选择 keybind.select.name = 选择
keybind.diagonal_placement.name = Diagonal Placement keybind.diagonal_placement.name = 自动铺设
keybind.pick.name = 选择方块 keybind.pick.name = 选择方块
keybind.break_block.name = 破坏方块 keybind.break_block.name = 破坏方块
keybind.deselect.name = 取消 keybind.deselect.name = 取消
@@ -483,6 +500,18 @@ mode.pvp.name = PvP
mode.pvp.description = 和本地玩家对战. mode.pvp.description = 和本地玩家对战.
mode.attack.name = 攻击 mode.attack.name = 攻击
mode.attack.description = 没有波数,但是有吹毁敌人基地的任务. mode.attack.description = 没有波数,但是有吹毁敌人基地的任务.
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = 物品 content.item.name = 物品
content.liquid.name = 液体 content.liquid.name = 液体
content.unit.name = 部队 content.unit.name = 部队
@@ -494,7 +523,7 @@ item.lead.name = 铅
item.lead.description = 一种基本的起始材料。被广泛用于电子设备和液体运输方块。 item.lead.description = 一种基本的起始材料。被广泛用于电子设备和液体运输方块。
item.coal.name = item.coal.name =
item.coal.description = 一种常见并容易获得的燃料。 item.coal.description = 一种常见并容易获得的燃料。
item.graphite.name = Graphite item.graphite.name = 石墨
item.titanium.name = item.titanium.name =
item.titanium.description = 一种罕见的超轻金属,被广泛运用于液体运输、钻头和飞机。 item.titanium.description = 一种罕见的超轻金属,被广泛运用于液体运输、钻头和飞机。
item.thorium.name = item.thorium.name =
@@ -507,39 +536,39 @@ item.phase-fabric.name = 相织物
item.phase-fabric.description = 一种接近0重量的物质用于先进的电子技术和自我修复技术。 item.phase-fabric.description = 一种接近0重量的物质用于先进的电子技术和自我修复技术。
item.surge-alloy.name = 巨浪合金 item.surge-alloy.name = 巨浪合金
item.surge-alloy.description = 一种具有独特电气性能的高级合金。 item.surge-alloy.description = 一种具有独特电气性能的高级合金。
item.spore-pod.name = Spore Pod item.spore-pod.name = 孢子荚
item.spore-pod.description = Used for conversion into oil, explosives and fuel. item.spore-pod.description = 一种用于制造石油,炸药及燃料的生物质。
item.sand.name = item.sand.name =
item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。 item.sand.description = 一种常见的材料,广泛用于冶炼,包括制作合金和助熔剂。
item.blast-compound.name = 爆炸混合物 item.blast-compound.name = 爆炸混合物
item.blast-compound.description = 一种用于炸弹和炸药的挥发性混合物。虽然它可以作为燃料燃烧,但不建议这样做。 item.blast-compound.description = 一种用于炸弹和炸药的挥发性混合物。虽然它可以作为燃料燃烧,但不建议这样做。
item.pyratite.name = item.pyratite.name =
item.pyratite.description = 一种燃烧武器中使用的极易燃物质。 item.pyratite.description = 一种燃烧武器中使用的极易燃物质。
item.metaglass.name = Metaglass item.metaglass.name = 钢化玻璃
item.metaglass.description = 一种超级强硬的复合玻璃。通常用来传送和收藏液体 item.metaglass.description = 一种超级强硬的复合玻璃。通常用来传送和收藏液体
item.scrap.name = Scrap item.scrap.name = 废料
item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. item.scrap.description = 一种废弃的建筑物及废弃单位的残骸,富含多种金属元素。
liquid.water.name = liquid.water.name =
liquid.slag.name = Slag liquid.slag.name = 岩浆
liquid.oil.name = 石油 liquid.oil.name = 石油
liquid.cryofluid.name = 冷冻液 liquid.cryofluid.name = 冷冻液
mech.alpha-mech.name = Alpha mech.alpha-mech.name = 阿尔法
mech.alpha-mech.weapon = 重型机枪 mech.alpha-mech.weapon = 重型机枪
mech.alpha-mech.ability = 无人机群 mech.alpha-mech.ability = 无人机群
mech.alpha-mech.description = 标准的机甲。具有不错的速度和伤害输出;,可以制造多达 3 架无人机以提高进攻能力。 mech.alpha-mech.description = 标准的机甲。具有不错的速度和伤害输出;,可以制造多达 3 架无人机以提高进攻能力。
mech.delta-mech.name = Delta mech.delta-mech.name = 德尔塔
mech.delta-mech.weapon = 电弧发电机 mech.delta-mech.weapon = 电弧发电机
mech.delta-mech.ability = 放电 mech.delta-mech.ability = 放电
mech.delta-mech.description = 一种快速,轻便的机甲,一击即退。对结构造成的伤害很小,但可以用弧形闪电武器很快杀死大量敌方单位。 mech.delta-mech.description = 一种快速,轻便的机甲,一击即退。对结构造成的伤害很小,但可以用弧形闪电武器很快杀死大量敌方单位。
mech.tau-mech.name = Tau mech.tau-mech.name = 医疗机
mech.tau-mech.weapon = 重构激光 mech.tau-mech.weapon = 重构激光
mech.tau-mech.ability = 修复 mech.tau-mech.ability = 修复
mech.tau-mech.description = 后勤机甲。治疗友军。可以熄灭火焰并治疗一定范围内的友军。 mech.tau-mech.description = 后勤机甲。治疗友军。可以熄灭火焰并治疗一定范围内的友军。
mech.omega-mech.name = Omega mech.omega-mech.name = 欧米茄
mech.omega-mech.weapon = 导弹群 mech.omega-mech.weapon = 导弹群
mech.omega-mech.ability = 配置装甲 mech.omega-mech.ability = 配置装甲
mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达 90% 的伤害。 mech.omega-mech.description = 一种装甲厚重的机甲,用于在前线攻击。它的护甲可以阻挡高达 90% 的伤害。
mech.dart-ship.name = Dart mech.dart-ship.name = 沉思者
mech.dart-ship.weapon = 机枪 mech.dart-ship.weapon = 机枪
mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。 mech.dart-ship.description = 标准飞船。快速轻便,但攻击能力低,采矿速度快。
mech.javelin-ship.name = 标枪 mech.javelin-ship.name = 标枪
@@ -549,7 +578,7 @@ mech.javelin-ship.ability = 放电助推器
mech.trident-ship.name = 三叉戟 mech.trident-ship.name = 三叉戟
mech.trident-ship.description = 一种重型轰炸机。有厚装甲。 mech.trident-ship.description = 一种重型轰炸机。有厚装甲。
mech.trident-ship.weapon = 炸弹 mech.trident-ship.weapon = 炸弹
mech.glaive-ship.name = Glaive mech.glaive-ship.name = 阔剑
mech.glaive-ship.description = 一种大型,装甲厚重的武装直升机。配备燃烧机枪。有优秀的加速能力和最快的速度。 mech.glaive-ship.description = 一种大型,装甲厚重的武装直升机。配备燃烧机枪。有优秀的加速能力和最快的速度。
mech.glaive-ship.weapon = 火焰机枪 mech.glaive-ship.weapon = 火焰机枪
item.explosiveness = [LIGHT_GRAY]爆炸性:{0} item.explosiveness = [LIGHT_GRAY]爆炸性:{0}
@@ -558,7 +587,7 @@ item.radioactivity = [LIGHT_GRAY]放射性:{0}
unit.health = [LIGHT_GRAY]生命值:{0} unit.health = [LIGHT_GRAY]生命值:{0}
unit.speed = [LIGHT_GRAY]速度:{0} unit.speed = [LIGHT_GRAY]速度:{0}
mech.weapon = [LIGHT_GRAY]武器:{0} mech.weapon = [LIGHT_GRAY]武器:{0}
mech.health = [LIGHT_GRAY]Health: {0} mech.health = [LIGHT_GRAY]生命值: {0}
mech.itemcapacity = [LIGHT_GRAY]物品容量:{0} mech.itemcapacity = [LIGHT_GRAY]物品容量:{0}
mech.minespeed = [LIGHT_GRAY]采矿速度:{0} mech.minespeed = [LIGHT_GRAY]采矿速度:{0}
mech.minepower = [LIGHT_GRAY]采矿力量:{0} mech.minepower = [LIGHT_GRAY]采矿力量:{0}
@@ -583,15 +612,15 @@ block.scrap-wall-large.name = Large Scrap Wall
block.scrap-wall-huge.name = Huge Scrap Wall block.scrap-wall-huge.name = Huge Scrap Wall
block.scrap-wall-gigantic.name = Gigantic Scrap Wall block.scrap-wall-gigantic.name = Gigantic Scrap Wall
block.thruster.name = Thruster block.thruster.name = Thruster
block.kiln.name = Kiln block.kiln.name = 熔炉
block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power. block.kiln.description = 将铅和沙子熔炼成钢化玻璃,需要少量电力。
block.graphite-press.name = Graphite Press block.graphite-press.name = 石墨压缩机
block.multi-press.name = Multi-Press block.multi-press.name = 大型石墨压缩机
block.constructing = {0}\n[LIGHT_GRAY](Constructing) block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = 敌人出生点 block.spawn.name = 敌人出生点
block.core-shard.name = Core: Shard block.core-shard.name = 小型核心
block.core-foundation.name = Core: Foundation block.core-foundation.name = 中型核心
block.core-nucleus.name = Core: Nucleus block.core-nucleus.name = 大型核心
block.deepwater.name = 深水 block.deepwater.name = 深水
block.water.name = block.water.name =
block.tainted-water.name = Tainted Water block.tainted-water.name = Tainted Water
@@ -627,8 +656,8 @@ block.magmarock.name = Magma Rock
block.cliffs.name = Cliffs block.cliffs.name = Cliffs
block.copper-wall.name = 铜墙 block.copper-wall.name = 铜墙
block.copper-wall-large.name = 大型铜墙 block.copper-wall-large.name = 大型铜墙
block.titanium-wall.name = Titanium Wall block.titanium-wall.name = 钛墙
block.titanium-wall-large.name = Large Titanium Wall block.titanium-wall-large.name = 大型钛墙
block.phase-wall.name = 相织布墙 block.phase-wall.name = 相织布墙
block.phase-wall-large.name = 大型相织布墙 block.phase-wall-large.name = 大型相织布墙
block.thorium-wall.name = 钍墙 block.thorium-wall.name = 钍墙
@@ -636,8 +665,8 @@ block.thorium-wall-large.name = 大型钍墙
block.door.name = block.door.name =
block.door-large.name = 大门 block.door-large.name = 大门
block.duo.name = 双管炮 block.duo.name = 双管炮
block.scorch.name = Scorch block.scorch.name = 火焰炮
block.scatter.name = Scatter block.scatter.name = 分裂炮
block.hail.name = 冰雹炮 block.hail.name = 冰雹炮
block.lancer.name = 蓝瑟炮 block.lancer.name = 蓝瑟炮
block.conveyor.name = 传送带 block.conveyor.name = 传送带
@@ -655,29 +684,29 @@ block.pulverizer.name = 粉碎机
block.cryofluidmixer.name = 冷冻液混合器 block.cryofluidmixer.name = 冷冻液混合器
block.melter.name = 熔炉 block.melter.name = 熔炉
block.incinerator.name = 焚化炉 block.incinerator.name = 焚化炉
block.spore-press.name = Spore Press block.spore-press.name = 孢子压缩机
block.separator.name = 分离机 block.separator.name = 分离机
block.power-node.name = 能量节点 block.power-node.name = 能量节点
block.power-node-large.name = 大型能量节点 block.power-node-large.name = 大型能量节点
block.surge-tower.name = Surge Tower block.surge-tower.name = 远程输电塔
block.battery.name = 电池 block.battery.name = 电池
block.battery-large.name = 大型电池 block.battery-large.name = 大型电池
block.combustion-generator.name = 燃烧发电机 block.combustion-generator.name = 燃烧发电机
block.turbine-generator.name = 涡轮发电机 block.turbine-generator.name = 涡轮发电机
block.differential-generator.name = Differential Generator block.differential-generator.name = 差动发电机
block.impact-reactor.name = Impact Reactor block.impact-reactor.name = 冲击反应堆
block.mechanical-drill.name = 机械钻头 block.mechanical-drill.name = 机械钻头
block.pneumatic-drill.name = 气动钻头 block.pneumatic-drill.name = 气动钻头
block.laser-drill.name = 激光钻头 block.laser-drill.name = 激光钻头
block.water-extractor.name = 抽水机 block.water-extractor.name = 抽水机
block.cultivator.name = 耕种机 block.cultivator.name = 耕种机
block.alpha-dart-mech-pad.name = Alpha-Dart Mech Pad block.alpha-dart-mech-pad.name = 阿尔法-沉思者 机甲平台
block.delta-mech-pad.name = Delta 机甲平台 block.delta-mech-pad.name = 德尔塔 机甲平台
block.javelin-ship-pad.name = 标枪 机甲平台 block.javelin-ship-pad.name = 标枪 机甲平台
block.trident-ship-pad.name = 三叉戟 机甲平台 block.trident-ship-pad.name = 三叉戟 机甲平台
block.glaive-ship-pad.name = Glaive 机甲平台 block.glaive-ship-pad.name = 阔剑 机甲平台
block.omega-mech-pad.name = Omega 机甲平台 block.omega-mech-pad.name = 欧米茄 机甲平台
block.tau-mech-pad.name = Tau 机甲平台 block.tau-mech-pad.name = 医疗机 机甲平台
block.conduit.name = 导管 block.conduit.name = 导管
block.mechanical-pump.name = 机械泵 block.mechanical-pump.name = 机械泵
block.item-source.name = 物品源 block.item-source.name = 物品源
@@ -704,7 +733,7 @@ block.phantom-factory.name = 鬼怪无人机工厂
block.wraith-factory.name = 幻影战机工厂 block.wraith-factory.name = 幻影战机工厂
block.ghoul-factory.name = 食尸鬼轰炸机工厂 block.ghoul-factory.name = 食尸鬼轰炸机工厂
block.dagger-factory.name = 尖刀机甲工厂 block.dagger-factory.name = 尖刀机甲工厂
block.crawler-factory.name = Crawler Mech Factory block.crawler-factory.name = 爬行者机甲工厂
block.titan-factory.name = 泰坦机甲工厂 block.titan-factory.name = 泰坦机甲工厂
block.fortress-factory.name = 堡垒机甲工厂 block.fortress-factory.name = 堡垒机甲工厂
block.revenant-factory.name = 亡魂战机工厂 block.revenant-factory.name = 亡魂战机工厂
@@ -722,6 +751,7 @@ block.blast-drill.name = 爆破钻头
block.thermal-pump.name = 热能泵 block.thermal-pump.name = 热能泵
block.thermal-generator.name = 热能发电机 block.thermal-generator.name = 热能发电机
block.alloy-smelter.name = 合金冶炼厂 block.alloy-smelter.name = 合金冶炼厂
block.mender.name = Mender
block.mend-projector.name = 修理投影器 block.mend-projector.name = 修理投影器
block.surge-wall.name = 波动墙 block.surge-wall.name = 波动墙
block.surge-wall-large.name = 大型波动墙 block.surge-wall-large.name = 大型波动墙
@@ -735,8 +765,9 @@ block.rtg-generator.name = RTG 发电机
block.spectre.name = 幽灵 block.spectre.name = 幽灵
block.meltdown.name = 熔毁 block.meltdown.name = 熔毁
block.container.name = 容器 block.container.name = 容器
block.launch-pad.name = Launch Pad block.launch-pad.name = 发射台
block.launch-pad.description = Launches batches of items without any need for a core launch. Unfinished. block.launch-pad.description = 不通过核心发射物体。尚未完成。
block.launch-pad-large.name = Large Launch Pad
team.blue.name = team.blue.name =
team.red.name = team.red.name =
team.orange.name = team.orange.name =
@@ -749,7 +780,7 @@ unit.phantom.name = 鬼怪无人机
unit.phantom.description = 一种先进的无人机单位。自动开采矿石,收集物品和修理块。比初始无人机有效得多。 unit.phantom.description = 一种先进的无人机单位。自动开采矿石,收集物品和修理块。比初始无人机有效得多。
unit.dagger.name = 尖刀 unit.dagger.name = 尖刀
unit.dagger.description = 基础的地面单位,在蜂群中很有用。 unit.dagger.description = 基础的地面单位,在蜂群中很有用。
unit.crawler.name = Crawler unit.crawler.name = 爬行者
unit.titan.name = 泰坦 unit.titan.name = 泰坦
unit.titan.description = 高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位. unit.titan.description = 高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位.
unit.ghoul.name = 食尸鬼轰炸机 unit.ghoul.name = 食尸鬼轰炸机
@@ -759,11 +790,11 @@ unit.wraith.description = 一种快速,打了就跑的截击机。
unit.fortress.name = 堡垒 unit.fortress.name = 堡垒
unit.fortress.description = 一种重炮地面部队。 unit.fortress.description = 一种重炮地面部队。
unit.revenant.name = 亡魂 unit.revenant.name = 亡魂
unit.eruptor.name = Eruptor unit.eruptor.name = 爆发者
unit.chaos-array.name = Chaos Array unit.chaos-array.name = 混沌者
unit.eradicator.name = Eradicator unit.eradicator.name = 根除者
unit.lich.name = Lich unit.lich.name = 尸鬼
unit.reaper.name = Reaper unit.reaper.name = 死神
tutorial.begin = 你的任务是消灭[LIGHT_GRAY] 敌人 [].\n\n首先开始[accent] 采集铜矿 []。点击核心附近的铜矿开始。 tutorial.begin = 你的任务是消灭[LIGHT_GRAY] 敌人 [].\n\n首先开始[accent] 采集铜矿 []。点击核心附近的铜矿开始。
tutorial.drill = 手动采矿效率低.\n[accent] 钻头 []可以自动采矿.\n放一个在铜矿上吧. tutorial.drill = 手动采矿效率低.\n[accent] 钻头 []可以自动采矿.\n放一个在铜矿上吧.
tutorial.conveyor = [accent]传送带[] 可以把物资传送到核心.\n请造一个传送线从钻头到核心. tutorial.conveyor = [accent]传送带[] 可以把物资传送到核心.\n请造一个传送线从钻头到核心.
@@ -800,7 +831,7 @@ block.overdrive-projector.description = 提高附近建筑物的速度,如钻
block.force-projector.description = 自身周围创建一个六边形力场,保护建筑物和内部单位免受子弹的伤害。 block.force-projector.description = 自身周围创建一个六边形力场,保护建筑物和内部单位免受子弹的伤害。
block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。 block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。
block.duo.description = 小而便宜的炮塔。 block.duo.description = 小而便宜的炮塔。
block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.scatter.description = 中型防空炮塔,向空中单位发射铅或废料。.
block.arc.description = 小型炮塔,发射电弧。 block.arc.description = 小型炮塔,发射电弧。
block.hail.description = 小型炮兵炮台。 block.hail.description = 小型炮兵炮台。
block.lancer.description = 中型炮塔,发射带电的电子束。 block.lancer.description = 中型炮塔,发射带电的电子束。
@@ -827,7 +858,7 @@ block.blast-mixer.description = 用油将硫转化为不易燃但更具爆炸性
block.cryofluidmixer.description = 水和钛结合到低温流体中,冷却效率更高。 block.cryofluidmixer.description = 水和钛结合到低温流体中,冷却效率更高。
block.melter.description = 石头加热到很高的温度以获得熔岩。 block.melter.description = 石头加热到很高的温度以获得熔岩。
block.incinerator.description = 用于除掉任何多余的物品或液体。 block.incinerator.description = 用于除掉任何多余的物品或液体。
block.spore-press.description = Compresses spore pods into oil. block.spore-press.description = 压缩孢子荚得到石油。
block.separator.description = 将石头暴露在水压下,以获得石头中含有的各种矿物质。 block.separator.description = 将石头暴露在水压下,以获得石头中含有的各种矿物质。
block.power-node.description = 连接节点传输电源。最多可连接四个电源,接收器或节点。节点将从任何相邻块接收电力或向其供电。 block.power-node.description = 连接节点传输电源。最多可连接四个电源,接收器或节点。节点将从任何相邻块接收电力或向其供电。
block.power-node-large.description = 传输径大于电源节点,最多可连接六个电源,接收器或节点。 block.power-node-large.description = 传输径大于电源节点,最多可连接六个电源,接收器或节点。

View File

@@ -14,7 +14,6 @@ screenshot = 截圖保存到{0}
gameover = 遊戲結束 gameover = 遊戲結束
gameover.pvp = [accent]{0}[]隊獲勝! gameover.pvp = [accent]{0}[]隊獲勝!
highscore = [accent]新的高分紀錄! highscore = [accent]新的高分紀錄!
stat.wave = 打敗的波次:[accent]{0} stat.wave = 打敗的波次:[accent]{0}
stat.enemiesDestroyed = 摧毀的敵人:[accent]{0} stat.enemiesDestroyed = 摧毀的敵人:[accent]{0}
stat.built = 建設的建築:[accent]{0} stat.built = 建設的建築:[accent]{0}
@@ -22,10 +21,8 @@ stat.destroyed = 摧毀的建築:[accent]{0}
stat.deconstructed = 移除的建築:[accent]{0} stat.deconstructed = 移除的建築:[accent]{0}
stat.delivered = 發射的資源: stat.delivered = 發射的資源:
stat.rank = 最終排名:[accent]{0} stat.rank = 最終排名:[accent]{0}
placeline = 你選擇了一個方塊。\n[accent]按住你的手指幾秒鐘[]並拖動以[accent]直線放置方塊[]。\n試試吧。 placeline = 你選擇了一個方塊。\n[accent]按住你的手指幾秒鐘[]並拖動以[accent]直線放置方塊[]。\n試試吧。
removearea = 你選擇了移除模式。\n[accent]按住你的手指幾秒鐘[]並拖動以[accent]移除矩形中的方塊[]。\n試試吧。 removearea = 你選擇了移除模式。\n[accent]按住你的手指幾秒鐘[]並拖動以[accent]移除矩形中的方塊[]。\n試試吧。
launcheditems = [accent]發射了的物品 launcheditems = [accent]發射了的物品
map.delete = 確認要刪除「[accent]{0}[]」地圖嗎? map.delete = 確認要刪除「[accent]{0}[]」地圖嗎?
level.highscore = 最高分:[accent]{0} level.highscore = 最高分:[accent]{0}
@@ -185,6 +182,7 @@ map.delete.confirm = 確認要刪除地圖嗎?此操作無法撤回!
map.random = [accent]隨機地圖 map.random = [accent]隨機地圖
map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[ROYAL]藍色[]的核心。 map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[ROYAL]藍色[]的核心。
map.nospawn.pvp = 這個地圖沒有核心讓敵人重生!請在編輯器中添加一個[SCARLET]紅色[]的核心。 map.nospawn.pvp = 這個地圖沒有核心讓敵人重生!請在編輯器中添加一個[SCARLET]紅色[]的核心。
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = 地圖載入錯誤:地圖可能已經損壞。 map.invalid = 地圖載入錯誤:地圖可能已經損壞。
editor.brush = 粉刷 editor.brush = 粉刷
editor.openin = 在編輯器中開啟 editor.openin = 在編輯器中開啟
@@ -282,11 +280,11 @@ tutorial = 教學
editor = 地圖編輯器 editor = 地圖編輯器
mapeditor = 地圖編輯器 mapeditor = 地圖編輯器
donate = 贊助 donate = 贊助
abandon = 放棄 abandon = 放棄
abandon.text = 此區域及其所有資源將會丟失給敵人。 abandon.text = 此區域及其所有資源將會丟失給敵人。
locked = 鎖定 locked = 鎖定
complete = [LIGHT_GRAY]完成: complete = [LIGHT_GRAY]完成:
zone.requirement = Wave {0} in zone {1}
resume = 繼續區域:\n[LIGHT_GRAY]{0} resume = 繼續區域:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]高分:{0} bestwave = [LIGHT_GRAY]高分:{0}
launch = 發射 launch = 發射
@@ -298,12 +296,11 @@ uncover = 揭露
configure = 配置裝載 configure = 配置裝載
configure.locked = [LIGHT_GRAY]到達波次{0}\n以配置裝載。 configure.locked = [LIGHT_GRAY]到達波次{0}\n以配置裝載。
zone.unlocked = [LIGHT_GRAY]{0}已解鎖。 zone.unlocked = [LIGHT_GRAY]{0}已解鎖。
zone.complete = 符合區域條件。 zone.requirement.complete = Wave {0} reached:\n{1} zone requirements met.
zone.config.complete = 到達波次{0}\n裝載配置已解鎖。 zone.config.complete = 到達波次{0}\n裝載配置已解鎖。
zone.resources = 檢測到的資源: zone.resources = 檢測到的資源:
add = 新增…… add = 新增……
boss.health = 頭目血量 boss.health = 頭目血量
connectfail = [crimson]無法連線到伺服器:[accent]{0} connectfail = [crimson]無法連線到伺服器:[accent]{0}
error.unreachable = 無法到達伺服器。 error.unreachable = 無法到達伺服器。
error.invalidaddress = 無效地址。 error.invalidaddress = 無效地址。
@@ -313,7 +310,6 @@ error.alreadyconnected = 已連接。
error.mapnotfound = 找不到地圖! error.mapnotfound = 找不到地圖!
error.io = 網絡輸入輸出錯誤。 error.io = 網絡輸入輸出錯誤。
error.any = 未知網絡錯誤。 error.any = 未知網絡錯誤。
zone.groundZero.name = 歸零地 zone.groundZero.name = 歸零地
zone.craters.name = 隕石坑 zone.craters.name = 隕石坑
zone.frozenForest.name = 冰凍森林 zone.frozenForest.name = 冰凍森林
@@ -321,7 +317,6 @@ zone.ruinousShores.name = 毀滅性的海岸
zone.stainedMountains.name = 染山 zone.stainedMountains.name = 染山
zone.desolateRift.name = 荒涼的裂痕 zone.desolateRift.name = 荒涼的裂痕
zone.nuclearComplex.name = 核生產綜合體 zone.nuclearComplex.name = 核生產綜合體
settings.language = 語言 settings.language = 語言
settings.reset = 重設為預設設定 settings.reset = 重設為預設設定
settings.rebind = 重新綁定 settings.rebind = 重新綁定
@@ -352,6 +347,7 @@ blocks.targetsair = 攻擊空中目標
blocks.targetsground = 攻擊地面 blocks.targetsground = 攻擊地面
blocks.items = 物品:{0} blocks.items = 物品:{0}
blocks.itemsmoved = 移動速度 blocks.itemsmoved = 移動速度
blocks.launchtime = Time Between Launches
blocks.shootrange = 範圍 blocks.shootrange = 範圍
blocks.size = 尺寸 blocks.size = 尺寸
blocks.liquidcapacity = 液體容量 blocks.liquidcapacity = 液體容量
@@ -365,6 +361,8 @@ blocks.itemcapacity = 物品容量
blocks.basepowergeneration = 基本能量生产 blocks.basepowergeneration = 基本能量生产
blocks.powertransferspeed = 能量傳輸 blocks.powertransferspeed = 能量傳輸
blocks.craftspeed = 產生速度 blocks.craftspeed = 產生速度
blocks.repairtime = Block Full Repair Time
blocks.range = Range
blocks.inputliquid = 輸入液體 blocks.inputliquid = 輸入液體
blocks.inputliquidaux = 輔助液體 blocks.inputliquidaux = 輔助液體
blocks.inputitem = 輸入物品 blocks.inputitem = 輸入物品
@@ -397,6 +395,17 @@ blocks.fuelburntime = 燃燒燃料時間
blocks.inputcapacity = 輸入容量 blocks.inputcapacity = 輸入容量
blocks.outputcapacity = 輸出容量 blocks.outputcapacity = 輸出容量
blocks.ammo = 彈藥 blocks.ammo = 彈藥
bullet.damage = [stat]{0}[lightgray] dmg
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
bullet.incendiary = [stat]incendiary
bullet.homing = [stat]homing
bullet.shock = [stat]shock
bullet.frag = [stat]frag
bullet.knockback = [stat]{0}[lightgray] knockback
bullet.freezing = [stat]freezing
bullet.tarred = [stat]tarred
bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier
bullet.reload = [stat]{0}[lightgray]x reload
unit.blocks = 方塊 unit.blocks = 方塊
unit.powersecond = 能量單位/秒 unit.powersecond = 能量單位/秒
unit.liquidsecond = 液體單位/秒 unit.liquidsecond = 液體單位/秒
@@ -413,9 +422,10 @@ category.items = 物品
category.crafting = 合成 category.crafting = 合成
category.shooting = 射擊 category.shooting = 射擊
category.optional = 可選的強化 category.optional = 可選的強化
setting.landscape.name = Lock Landscape
setting.shadows.name = Shadows
setting.animatedwater.name = 動畫水 setting.animatedwater.name = 動畫水
setting.antialias.name = 消除鋸齒[LIGHT_GRAY](需要重啟)[] setting.antialias.name = 消除鋸齒[LIGHT_GRAY](需要重啟)[]
setting.shadows.name = Shadows
setting.indicators.name = 盟友指標 setting.indicators.name = 盟友指標
setting.autotarget.name = 自動射擊 setting.autotarget.name = 自動射擊
setting.fpscap.name = 最大FPS setting.fpscap.name = 最大FPS
@@ -490,6 +500,18 @@ mode.pvp.name = 對戰
mode.pvp.description = 和其他玩家鬥爭。 mode.pvp.description = 和其他玩家鬥爭。
mode.attack.name = 攻擊 mode.attack.name = 攻擊
mode.attack.description = 沒有波次,目標是摧毀敵人的基地。 mode.attack.description = 沒有波次,目標是摧毀敵人的基地。
mode.custom = Custom Rules
rules.infiniteresources = Infinite Resources
rules.wavetimer = Wave Timer
rules.waves = Waves
rules.enemyCheat = Infinite AI Resources
rules.pvp = PvP
rules.unitdrops = Unit Drops
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
rules.buildcostmultiplier = Build Cost Multiplier
rules.buildspeedmultiplier = Build Speed Multiplier
content.item.name = 物品 content.item.name = 物品
content.liquid.name = 液體 content.liquid.name = 液體
content.unit.name = 機組 content.unit.name = 機組
@@ -573,7 +595,6 @@ mech.ability = [LIGHT_GRAY]能力:{0}
liquid.heatcapacity = [LIGHT_GRAY]熱容量:{0} liquid.heatcapacity = [LIGHT_GRAY]熱容量:{0}
liquid.viscosity = [LIGHT_GRAY]粘性:{0} liquid.viscosity = [LIGHT_GRAY]粘性:{0}
liquid.temperature = [LIGHT_GRAY]温度:{0} liquid.temperature = [LIGHT_GRAY]温度:{0}
block.grass.name = block.grass.name =
block.salt.name = block.salt.name =
block.sandrocks.name = 沙岩 block.sandrocks.name = 沙岩
@@ -730,6 +751,7 @@ block.blast-drill.name = 爆破鑽頭
block.thermal-pump.name = 熱能泵 block.thermal-pump.name = 熱能泵
block.thermal-generator.name = 熱能發電機 block.thermal-generator.name = 熱能發電機
block.alloy-smelter.name = 合金冶煉廠 block.alloy-smelter.name = 合金冶煉廠
block.mender.name = Mender
block.mend-projector.name = 修理投影器 block.mend-projector.name = 修理投影器
block.surge-wall.name = 波動牆 block.surge-wall.name = 波動牆
block.surge-wall-large.name = 大型波動牆 block.surge-wall-large.name = 大型波動牆
@@ -745,6 +767,7 @@ block.meltdown.name = 熔毀炮
block.container.name = 容器 block.container.name = 容器
block.launch-pad.name = 發射台 block.launch-pad.name = 發射台
block.launch-pad.description = 無需從核心發射即可發射物品。未完成。 block.launch-pad.description = 無需從核心發射即可發射物品。未完成。
block.launch-pad-large.name = Large Launch Pad
team.blue.name = team.blue.name =
team.red.name = team.red.name =
team.orange.name = team.orange.name =
@@ -870,7 +893,6 @@ block.wraith-factory.description = 生產快速、打了就跑的攔截機單位
block.ghoul-factory.description = 生產重型鋪蓋轟炸機。 block.ghoul-factory.description = 生產重型鋪蓋轟炸機。
block.dagger-factory.description = 產生基本地面單位。 block.dagger-factory.description = 產生基本地面單位。
block.titan-factory.description = 生產具有裝甲的高級地面單位。 block.titan-factory.description = 生產具有裝甲的高級地面單位。
block.fortress-factory.description = 生產重型火砲地面單位。 block.fortress-factory.description = 生產重型火砲地面單位。
block.revenant-factory.description = 生產重型激光地面單位。 block.revenant-factory.description = 生產重型激光地面單位。
block.repair-point.description = 持續治療附近最近的受損單位。 block.repair-point.description = 持續治療附近最近的受損單位。

View File

@@ -10,6 +10,5 @@ varying vec2 v_texCoord;
void main(){ void main(){
vec4 color = texture2D(u_texture, v_texCoord.xy); vec4 color = texture2D(u_texture, v_texCoord.xy);
color = vec4(0.0, 0.0, 0.0, 1.0 - color.r); gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0 - color.r);
gl_FragColor = color;
} }

View File

@@ -56,7 +56,6 @@ void main() {
if(color.r > 0.01){ if(color.r > 0.01){
color = texture2D(u_texture, c + vec2(sin(stime/3.0 + coords.y/0.75) * v.x, 0.0)) * vec4(0.9, 0.9, 1, 1.0); color = texture2D(u_texture, c + vec2(sin(stime/3.0 + coords.y/0.75) * v.x, 0.0)) * vec4(0.9, 0.9, 1, 1.0);
color.a = 1.0;
float n1 = snoise(coords / 22.0 + vec2(-time) / 540.0); float n1 = snoise(coords / 22.0 + vec2(-time) / 540.0);
float n2 = snoise((coords + vec2(632.0)) / 8.0 + vec2(0.0, time) / 510.0); float n2 = snoise((coords + vec2(632.0)) / 8.0 + vec2(0.0, time) / 510.0);
@@ -65,7 +64,6 @@ void main() {
if(r < -0.3 && r > -0.6){ if(r < -0.3 && r > -0.6){
color *= 1.4; color *= 1.4;
color.a = 1.0;
} }
} }

View File

@@ -61,14 +61,14 @@ void main() {
float n2 = snoise((coords + vec2(632.0)) / 25.0 + vec2(0.0, -time) / 190.0); float n2 = snoise((coords + vec2(632.0)) / 25.0 + vec2(0.0, -time) / 190.0);
float r = (n1 + n2) * 3.0; float r = (n1 + n2) * 3.0;
float tester = mod(float(int(coords.x + coords.y*1.1 + sin(stime / 8.0 + coords.x/5.0 - coords.y/100.0)*2.0)) +
if(mod(float(int(coords.x + coords.y*1.1 + sin(stime / 8.0 + coords.x/5.0 - coords.y/100.0)*2.0)) +
sin(stime / 20.0 + coords.y/3.0) * 1.0 + sin(stime / 20.0 + coords.y/3.0) * 1.0 +
sin(stime / 10.0 + coords.y/2.0) * 2.0 + sin(stime / 10.0 + coords.y/2.0) * 2.0 +
sin(stime / 7.0 + coords.y/1.0) * 0.5 + sin(stime / 7.0 + coords.y/1.0) * 0.5 +
sin(coords.x + coords.y) + sin(coords.x + coords.y) +
sin(stime / 20.0 + coords.x/4.0) * 1.0, mscl) + r < mth){ sin(stime / 20.0 + coords.x/4.0) * 1.0, mscl) + r;
if(tester < mth){
color *= 1.2; color *= 1.2;
color.a = 1.0; color.a = 1.0;
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 B

After

Width:  |  Height:  |  Size: 505 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 KiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 981 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 KiB

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 KiB

After

Width:  |  Height:  |  Size: 535 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 748 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 107 KiB

View File

@@ -283,6 +283,7 @@
disabledFontColor: gray, disabledFontColor: gray,
selection: selection, selection: selection,
background: underline, background: underline,
invalidBackground: underline-red,
cursor: cursor, cursor: cursor,
messageFont: default-font, messageFont: default-font,
messageFontColor: gray messageFontColor: gray

View File

@@ -142,7 +142,7 @@ public class Vars{
public static EntityGroup<BaseUnit>[] unitGroups; public static EntityGroup<BaseUnit>[] unitGroups;
/**all local players, currently only has one player. may be used for local co-op in the future*/ /**all local players, currently only has one player. may be used for local co-op in the future*/
public static Player[] players = {}; public static Player player;
public static void init(){ public static void init(){
Serialization.init(); Serialization.init();

View File

@@ -14,6 +14,7 @@ import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.type.BaseUnit; import io.anuke.mindustry.entities.type.BaseUnit;
import io.anuke.mindustry.game.EventType.WorldLoadEvent; import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.game.SpawnGroup; import io.anuke.mindustry.game.SpawnGroup;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.world.Pos; import io.anuke.mindustry.world.Pos;
import java.io.DataInput; import java.io.DataInput;
@@ -54,7 +55,7 @@ public class WaveSpawner{
/**@return true if the player is near a ground spawn point.*/ /**@return true if the player is near a ground spawn point.*/
public boolean playerNear(){ public boolean playerNear(){
return groundSpawns.count(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, players[0].x, players[0].y) < maxShockwaveDst) > 0; return groundSpawns.count(g -> Mathf.dst(g.x * tilesize, g.y * tilesize, player.x, player.y) < maxShockwaveDst) > 0;
} }
public void spawnEnemies(){ public void spawnEnemies(){
@@ -105,7 +106,7 @@ public class WaveSpawner{
} }
public boolean isSpawning(){ public boolean isSpawning(){
return spawning; return spawning && !Net.client();
} }
private void reset(){ private void reset(){

View File

@@ -53,7 +53,7 @@ public class Blocks implements ContentList{
//defense //defense
scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet
copperWall, copperWallLarge, titaniumWall, titaniumWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge, copperWall, copperWallLarge, titaniumWall, titaniumWallLarge, thoriumWall, thoriumWallLarge, door, doorLarge,
phaseWall, phaseWallLarge, surgeWall, surgeWallLarge, mendProjector, overdriveProjector, forceProjector, shockMine, phaseWall, phaseWallLarge, surgeWall, surgeWallLarge, mender, mendProjector, overdriveProjector, forceProjector, shockMine,
//transport //transport
conveyor, titaniumConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, router, overflowGate, massDriver, conveyor, titaniumConveyor, distributor, junction, itemBridge, phaseConveyor, sorter, router, overflowGate, massDriver,
@@ -69,7 +69,7 @@ public class Blocks implements ContentList{
mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator, mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator,
//storage //storage
coreShard, coreFoundation, coreNucleus, vault, container, unloader, launchPad, coreShard, coreFoundation, coreNucleus, vault, container, unloader, launchPad, launchPadLarge,
//turrets //turrets
duo, scatter, scorch, hail, arc, wave, lancer, swarmer, salvo, fuse, ripple, cyclone, spectre, meltdown, duo, scatter, scorch, hail, arc, wave, lancer, swarmer, salvo, fuse, ripple, cyclone, spectre, meltdown,
@@ -199,6 +199,21 @@ public class Blocks implements ContentList{
blendGroup = stone; blendGroup = stone;
}}; }};
ignarock = new Floor("ignarock"){{
}};
hotrock = new Floor("hotrock"){{
attributes.set(Attribute.heat, 0.5f);
blendGroup = ignarock;
}};
magmarock = new Floor("magmarock"){{
attributes.set(Attribute.heat, 0.75f);
updateEffect = Fx.magmasmoke;
blendGroup = ignarock;
}};
sand = new Floor("sand"){{ sand = new Floor("sand"){{
itemDrop = Items.sand; itemDrop = Items.sand;
playerUnmineable = true; playerUnmineable = true;
@@ -230,6 +245,7 @@ public class Blocks implements ContentList{
dragMultiplier = 1f; dragMultiplier = 1f;
speedMultiplier = 1f; speedMultiplier = 1f;
attributes.set(Attribute.water, 0.4f); attributes.set(Attribute.water, 0.4f);
edgeStyle = "blocky";
}}; }};
iceSnow = new Floor("ice-snow"){{ iceSnow = new Floor("ice-snow"){{
@@ -337,21 +353,6 @@ public class Blocks implements ContentList{
variants = 0; variants = 0;
}}; }};
ignarock = new Floor("ignarock"){{
blendGroup = darksand;
}};
hotrock = new Floor("hotrock"){{
attributes.set(Attribute.heat, 0.5f);
blendGroup = ignarock;
}};
magmarock = new Floor("magmarock"){{
attributes.set(Attribute.heat, 0.75f);
updateEffect = Fx.magmasmoke;
blendGroup = ignarock;
}};
//endregion //endregion
//region ore //region ore
@@ -529,7 +530,7 @@ public class Blocks implements ContentList{
cultivator = new Cultivator("cultivator"){{ cultivator = new Cultivator("cultivator"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 20, Items.lead, 50, Items.silicon, 20)); requirements(Category.crafting, ItemStack.with(Items.copper, 20, Items.lead, 50, Items.silicon, 20));
output = Items.sporePod; output = Items.sporePod;
craftTime = 200; craftTime = 160;
size = 2; size = 2;
hasLiquids = true; hasLiquids = true;
hasPower = true; hasPower = true;
@@ -544,7 +545,7 @@ public class Blocks implements ContentList{
liquidCapacity = 60f; liquidCapacity = 60f;
craftTime = 20f; craftTime = 20f;
outputLiquid = Liquids.oil; outputLiquid = Liquids.oil;
outputLiquidAmount = 2.5f; outputLiquidAmount = 4f;
size = 2; size = 2;
health = 320; health = 320;
hasLiquids = true; hasLiquids = true;
@@ -598,7 +599,7 @@ public class Blocks implements ContentList{
//endregion //endregion
//region defense //region defense
int wallHealthMultiplier = 3; int wallHealthMultiplier = 4;
scrapWall = new Wall("scrap-wall"){{ scrapWall = new Wall("scrap-wall"){{
health = 60 * wallHealthMultiplier; health = 60 * wallHealthMultiplier;
@@ -695,10 +696,27 @@ public class Blocks implements ContentList{
size = 2; size = 2;
}}; }};
mender = new MendProjector("mender"){{
requirements(Category.effect, ItemStack.with(Items.lead, 60, Items.copper, 50));
consumes.power(0.7f);
size = 1;
reload = 200f;
range = 40f;
healPercent = 5f;
phaseBoost = 4f;
phaseRangeBoost = 20f;
health = 80;
consumes.item(Items.silicon).optional(true);
}};
mendProjector = new MendProjector("mend-projector"){{ mendProjector = new MendProjector("mend-projector"){{
requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 50, Items.silicon, 180)); requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 50, Items.silicon, 80));
consumes.power(2f); consumes.power(1.8f);
size = 2; size = 2;
reload = 250f;
range = 85f;
healPercent = 14f;
health = 80 * size * size;
consumes.item(Items.phasefabric).optional(true); consumes.item(Items.phasefabric).optional(true);
}}; }};
@@ -736,7 +754,7 @@ public class Blocks implements ContentList{
titaniumConveyor = new Conveyor("titanium-conveyor"){{ titaniumConveyor = new Conveyor("titanium-conveyor"){{
requirements(Category.distribution, ItemStack.with(Items.copper, 2, Items.lead, 1, Items.titanium, 1)); requirements(Category.distribution, ItemStack.with(Items.copper, 2, Items.lead, 1, Items.titanium, 1));
health = 65; health = 65;
speed = 0.07f; speed = 0.08f;
}}; }};
junction = new Junction("junction"){{ junction = new Junction("junction"){{
@@ -1083,7 +1101,7 @@ public class Blocks implements ContentList{
}}; }};
launchPad = new LaunchPad("launch-pad"){{ launchPad = new LaunchPad("launch-pad"){{
requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.copper, 500, Items.titanium, 200, Items.silicon, 200, Items.lead, 200)); requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.copper, 500, Items.silicon, 150, Items.lead, 200));
size = 3; size = 3;
itemCapacity = 100; itemCapacity = 100;
launchTime = 60f * 8; launchTime = 60f * 8;
@@ -1091,6 +1109,16 @@ public class Blocks implements ContentList{
consumes.power(1f); consumes.power(1f);
}}; }};
launchPadLarge = new LaunchPad("launch-pad-large"){{
requirements(Category.effect, () -> world.isZone(), ItemStack.with(Items.titanium, 400, Items.silicon, 300, Items.lead, 500, Items.plastanium, 150));
size = 4;
itemCapacity = 250;
launchTime = 60f * 7;
hasPower = true;
consumes.power(2f);
}};
//endregion //endregion
//region turrets //region turrets
@@ -1118,15 +1146,15 @@ public class Blocks implements ContentList{
Items.scrap, Bullets.flakScrap, Items.scrap, Bullets.flakScrap,
Items.lead, Bullets.flakLead Items.lead, Bullets.flakLead
); );
reload = 43f; reload = 20f;
range = 160f; range = 180f;
size = 2; size = 2;
burstSpacing = 5f; burstSpacing = 5f;
shots = 2; shots = 2;
targetGround = false; targetGround = false;
recoil = 2f; recoil = 2f;
rotatespeed = 10f; rotatespeed = 15f;
inaccuracy = 17f; inaccuracy = 17f;
shootCone = 35f; shootCone = 35f;
@@ -1141,7 +1169,7 @@ public class Blocks implements ContentList{
); );
recoil = 0f; recoil = 0f;
reload = 4f; reload = 4f;
range = 53f; range = 60f;
shootCone = 50f; shootCone = 50f;
targetAir = false; targetAir = false;
ammoUseEffect = Fx.none; ammoUseEffect = Fx.none;
@@ -1173,11 +1201,11 @@ public class Blocks implements ContentList{
); );
size = 2; size = 2;
recoil = 0f; recoil = 0f;
reload = 3f; reload = 2f;
inaccuracy = 5f; inaccuracy = 5f;
shootCone = 50f; shootCone = 50f;
shootEffect = Fx.shootLiquid; shootEffect = Fx.shootLiquid;
range = 100f; range = 110f;
health = 250*size*size; health = 250*size*size;
drawer = (tile, entity) -> { drawer = (tile, entity) -> {
@@ -1216,13 +1244,13 @@ public class Blocks implements ContentList{
arc = new PowerTurret("arc"){{ arc = new PowerTurret("arc"){{
requirements(Category.turret, ItemStack.with(Items.copper, 70, Items.lead, 70)); requirements(Category.turret, ItemStack.with(Items.copper, 70, Items.lead, 70));
shootType = Bullets.arc; shootType = Bullets.arc;
reload = 25f; reload = 24f;
shootCone = 40f; shootCone = 40f;
rotatespeed = 8f; rotatespeed = 8f;
powerUsed = 1f / 2f; powerUsed = 1f / 2f;
targetAir = false; targetAir = false;
consumes.powerBuffered(80f); consumes.powerBuffered(60f, 60f);
range = 80f; range = 95f;
shootEffect = Fx.lightningShoot; shootEffect = Fx.lightningShoot;
heatColor = Color.RED; heatColor = Color.RED;
recoil = 1f; recoil = 1f;
@@ -1304,8 +1332,8 @@ public class Blocks implements ContentList{
Items.surgealloy, Bullets.flakSurge Items.surgealloy, Bullets.flakSurge
); );
xRand = 4f; xRand = 4f;
reload = 8f; reload = 7f;
range = 160f; range = 170f;
size = 3; size = 3;
recoil = 3f; recoil = 3f;
rotatespeed = 10f; rotatespeed = 10f;

View File

@@ -134,28 +134,32 @@ public class Bullets implements ContentList{
bulletWidth = bulletHeight = 14f; bulletWidth = bulletHeight = 14f;
collides = true; collides = true;
collidesTiles = true; collidesTiles = true;
splashDamageRadius = 45f; splashDamageRadius = 20f;
splashDamage = 50f; splashDamage = 38f;
backColor = Pal.bulletYellowBack; backColor = Pal.bulletYellowBack;
frontColor = Pal.bulletYellow; frontColor = Pal.bulletYellow;
}}; }};
flakLead = new FlakBulletType(3.9f, 3){{ flakLead = new FlakBulletType(4.2f, 3){{
lifetime = 60f;
ammoMultiplier = 3f;
shootEffect = Fx.shootSmall; shootEffect = Fx.shootSmall;
bulletWidth = 6f; bulletWidth = 6f;
bulletHeight = 8f; bulletHeight = 8f;
hitEffect = Fx.flakExplosion; hitEffect = Fx.flakExplosion;
splashDamage = 25f; splashDamage = 35f;
splashDamageRadius = 15f; splashDamageRadius = 15f;
}}; }};
flakScrap = new FlakBulletType(3.5f, 3){{ flakScrap = new FlakBulletType(4f, 3){{
lifetime = 60f;
ammoMultiplier = 3f;
shootEffect = Fx.shootSmall; shootEffect = Fx.shootSmall;
reloadMultiplier = 0.5f; reloadMultiplier = 0.5f;
bulletWidth = 6f; bulletWidth = 6f;
bulletHeight = 8f; bulletHeight = 8f;
hitEffect = Fx.flakExplosion; hitEffect = Fx.flakExplosion;
splashDamage = 16f; splashDamage = 26f;
splashDamageRadius = 24f; splashDamageRadius = 24f;
}}; }};
@@ -290,7 +294,6 @@ public class Bullets implements ContentList{
standardDense = new BasicBulletType(3.5f, 18, "bullet"){{ standardDense = new BasicBulletType(3.5f, 18, "bullet"){{
bulletWidth = 9f; bulletWidth = 9f;
bulletHeight = 12f; bulletHeight = 12f;
armorPierce = 0.2f;
reloadMultiplier = 0.6f; reloadMultiplier = 0.6f;
ammoMultiplier = 2; ammoMultiplier = 2;
}}; }};
@@ -298,7 +301,6 @@ public class Bullets implements ContentList{
standardThorium = new BasicBulletType(4f, 29, "bullet"){{ standardThorium = new BasicBulletType(4f, 29, "bullet"){{
bulletWidth = 10f; bulletWidth = 10f;
bulletHeight = 13f; bulletHeight = 13f;
armorPierce = 0.5f;
shootEffect = Fx.shootBig; shootEffect = Fx.shootBig;
smokeEffect = Fx.shootBigSmoke; smokeEffect = Fx.shootBigSmoke;
ammoMultiplier = 2; ammoMultiplier = 2;
@@ -344,14 +346,12 @@ public class Bullets implements ContentList{
standardDenseBig = new BasicBulletType(7f, 42, "bullet"){{ standardDenseBig = new BasicBulletType(7f, 42, "bullet"){{
bulletWidth = 15f; bulletWidth = 15f;
bulletHeight = 21f; bulletHeight = 21f;
armorPierce = 0.2f;
shootEffect = Fx.shootBig; shootEffect = Fx.shootBig;
}}; }};
standardThoriumBig = new BasicBulletType(8f, 65, "bullet"){{ standardThoriumBig = new BasicBulletType(8f, 65, "bullet"){{
bulletWidth = 16f; bulletWidth = 16f;
bulletHeight = 23f; bulletHeight = 23f;
armorPierce = 0.5f;
shootEffect = Fx.shootBig; shootEffect = Fx.shootBig;
}}; }};
@@ -454,11 +454,11 @@ public class Bullets implements ContentList{
} }
}; };
basicFlame = new BulletType(2.5f, 5){ basicFlame = new BulletType(3f, 6f){
{ {
ammoMultiplier = 3f; ammoMultiplier = 3f;
hitSize = 7f; hitSize = 7f;
lifetime = 40f; lifetime = 42f;
pierce = true; pierce = true;
drag = 0.05f; drag = 0.05f;
statusDuration = 60f * 4; statusDuration = 60f * 4;
@@ -473,11 +473,11 @@ public class Bullets implements ContentList{
} }
}; };
pyraFlame = new BulletType(2.7f, 8){ pyraFlame = new BulletType(3.3f, 9f){
{ {
ammoMultiplier = 4f; ammoMultiplier = 4f;
hitSize = 7f; hitSize = 7f;
lifetime = 40f; lifetime = 42f;
pierce = true; pierce = true;
drag = 0.05f; drag = 0.05f;
statusDuration = 60f * 6; statusDuration = 60f * 6;
@@ -664,7 +664,7 @@ public class Bullets implements ContentList{
} }
}; };
arc = new BulletType(0.001f, 21){{ arc = new BulletType(0.001f, 25){{
lifetime = 1; lifetime = 1;
despawnEffect = Fx.none; despawnEffect = Fx.none;
hitEffect = Fx.hitLancer; hitEffect = Fx.hitLancer;
@@ -675,7 +675,7 @@ public class Bullets implements ContentList{
@Override @Override
public void init(Bullet b){ public void init(Bullet b){
Lightning.create(b.getTeam(), Pal.lancerLaser, damage, b.x, b.y, b.rot(), 15); Lightning.create(b.getTeam(), Pal.lancerLaser, damage, b.x, b.y, b.rot(), 25);
} }
}; };

View File

@@ -34,7 +34,7 @@ public class Fx implements ContentList{
bigShockwave, nuclearShockwave, explosion, blockExplosion, blockExplosionSmoke, shootSmall, shootHeal, shootSmallSmoke, shootBig, shootBig2, shootBigSmoke, bigShockwave, nuclearShockwave, explosion, blockExplosion, blockExplosionSmoke, shootSmall, shootHeal, shootSmallSmoke, shootBig, shootBig2, shootBigSmoke,
shootBigSmoke2, shootSmallFlame, shootPyraFlame, shootLiquid, shellEjectSmall, shellEjectMedium, shootBigSmoke2, shootSmallFlame, shootPyraFlame, shootLiquid, shellEjectSmall, shellEjectMedium,
shellEjectBig, lancerLaserShoot, lancerLaserShootSmoke, lancerLaserCharge, lancerLaserChargeBegin, lightningCharge, lightningShoot, shellEjectBig, lancerLaserShoot, lancerLaserShootSmoke, lancerLaserCharge, lancerLaserChargeBegin, lightningCharge, lightningShoot,
unitSpawn, spawnShockwave, magmasmoke, impactShockwave, impactcloud, impactsmoke, dynamicExplosion; unitSpawn, spawnShockwave, magmasmoke, impactShockwave, impactcloud, impactsmoke, dynamicExplosion, padlaunch;
@Override @Override
public void load(){ public void load(){
@@ -107,6 +107,13 @@ public class Fx implements ContentList{
Draw.reset(); Draw.reset();
}); });
padlaunch = new Effect(10, e -> {
Lines.stroke(4f * e.fout());
Draw.color(Pal.accent);
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 60f);
Draw.reset();
});
vtolHover = new Effect(40f, e -> { vtolHover = new Effect(40f, e -> {
float len = e.finpow() * 10f; float len = e.finpow() * 10f;
float ang = e.rotation + Mathf.randomSeedRange(e.id, 30f); float ang = e.rotation + Mathf.randomSeedRange(e.id, 30f);

View File

@@ -14,24 +14,24 @@ public class Items implements ContentList{
copper = new Item("copper", Color.valueOf("d99d73")){{ copper = new Item("copper", Color.valueOf("d99d73")){{
type = ItemType.material; type = ItemType.material;
hardness = 1; hardness = 1;
cost = 0.6f; cost = 0.5f;
alwaysUnlocked = true; alwaysUnlocked = true;
}}; }};
lead = new Item("lead", Color.valueOf("8c7fa9")){{ lead = new Item("lead", Color.valueOf("8c7fa9")){{
type = ItemType.material; type = ItemType.material;
hardness = 1; hardness = 1;
cost = 0.9f; cost = 0.7f;
}}; }};
metaglass = new Item("metaglass", Color.valueOf("ebeef5")){{ metaglass = new Item("metaglass", Color.valueOf("ebeef5")){{
type = ItemType.material; type = ItemType.material;
cost = 2f; cost = 1.5f;
}}; }};
graphite = new Item("graphite", Color.valueOf("b2c6d2")){{ graphite = new Item("graphite", Color.valueOf("b2c6d2")){{
type = ItemType.material; type = ItemType.material;
cost = 1.3f; cost = 1f;
}}; }};
coal = new Item("coal", Color.valueOf("272727")){{ coal = new Item("coal", Color.valueOf("272727")){{
@@ -43,7 +43,7 @@ public class Items implements ContentList{
titanium = new Item("titanium", Color.valueOf("8da1e3")){{ titanium = new Item("titanium", Color.valueOf("8da1e3")){{
type = ItemType.material; type = ItemType.material;
hardness = 3; hardness = 3;
cost = 1.1f; cost = 1f;
}}; }};
thorium = new Item("thorium", Color.valueOf("f9a3c7")){{ thorium = new Item("thorium", Color.valueOf("f9a3c7")){{
@@ -51,7 +51,7 @@ public class Items implements ContentList{
explosiveness = 0.2f; explosiveness = 0.2f;
hardness = 4; hardness = 4;
radioactivity = 1f; radioactivity = 1f;
cost = 1.4f; cost = 1.1f;
}}; }};
scrap = new Item("scrap", Color.valueOf("777777")){{ scrap = new Item("scrap", Color.valueOf("777777")){{
@@ -60,19 +60,19 @@ public class Items implements ContentList{
silicon = new Item("silicon", Color.valueOf("53565c")){{ silicon = new Item("silicon", Color.valueOf("53565c")){{
type = ItemType.material; type = ItemType.material;
cost = 0.9f; cost = 0.8f;
}}; }};
plastanium = new Item("plastanium", Color.valueOf("cbd97f")){{ plastanium = new Item("plastanium", Color.valueOf("cbd97f")){{
type = ItemType.material; type = ItemType.material;
flammability = 0.2f; flammability = 0.2f;
explosiveness = 0.2f; explosiveness = 0.2f;
cost = 1.6f; cost = 1.3f;
}}; }};
phasefabric = new Item("phase-fabric", Color.valueOf("f4ba6e")){{ phasefabric = new Item("phase-fabric", Color.valueOf("f4ba6e")){{
type = ItemType.material; type = ItemType.material;
cost = 1.5f; cost = 1.3f;
radioactivity = 0.6f; radioactivity = 0.6f;
}}; }};

View File

@@ -19,17 +19,22 @@ public class TechTree implements ContentList{
node(junction, () -> { node(junction, () -> {
node(itemBridge); node(itemBridge);
node(router, () -> { node(router, () -> {
node(launchPad, () -> {
node(launchPadLarge, () -> {
});
});
node(distributor); node(distributor);
node(sorter, () -> {
node(overflowGate); node(overflowGate);
node(sorter); });
node(container, () -> { node(container, () -> {
node(unloader); node(unloader);
node(vault, () -> { node(vault, () -> {
node(launchPad, () -> {
}); });
}); });
});
node(titaniumConveyor, () -> { node(titaniumConveyor, () -> {
node(phaseConveyor, () -> { node(phaseConveyor, () -> {
@@ -201,7 +206,9 @@ public class TechTree implements ContentList{
}); });
}); });
}); });
});
node(mender, () -> {
node(mendProjector, () -> { node(mendProjector, () -> {
node(forceProjector, () -> { node(forceProjector, () -> {
node(overdriveProjector, () -> { node(overdriveProjector, () -> {
@@ -263,7 +270,7 @@ public class TechTree implements ContentList{
private TechNode node(Block block, Runnable children){ private TechNode node(Block block, Runnable children){
ItemStack[] requirements = new ItemStack[block.buildRequirements.length]; ItemStack[] requirements = new ItemStack[block.buildRequirements.length];
for(int i = 0; i < requirements.length; i++){ for(int i = 0; i < requirements.length; i++){
requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 6); requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 5);
} }
return new TechNode(block, requirements, children); return new TechNode(block, requirements, children);

View File

@@ -91,7 +91,7 @@ public class UnitTypes implements ContentList{
hitsize = 10f; hitsize = 10f;
rotatespeed = 0.06f; rotatespeed = 0.06f;
targetAir = false; targetAir = false;
health = 800; health = 750;
weapon = new Weapon("artillery"){{ weapon = new Weapon("artillery"){{
length = 1f; length = 1f;
reload = 60f; reload = 60f;
@@ -178,8 +178,9 @@ public class UnitTypes implements ContentList{
drag = 0.01f; drag = 0.01f;
mass = 1.5f; mass = 1.5f;
isFlying = true; isFlying = true;
health = 70; health = 75;
engineOffset = 5.5f; engineOffset = 5.5f;
range = 140f;
weapon = new Weapon("chain-blaster"){{ weapon = new Weapon("chain-blaster"){{
length = 1.5f; length = 1.5f;
reload = 28f; reload = 28f;
@@ -190,7 +191,7 @@ public class UnitTypes implements ContentList{
}}; }};
ghoul = new UnitType("ghoul", Ghoul.class, Ghoul::new){{ ghoul = new UnitType("ghoul", Ghoul.class, Ghoul::new){{
health = 250; health = 220;
speed = 0.2f; speed = 0.2f;
maxVelocity = 1.4f; maxVelocity = 1.4f;
mass = 3f; mass = 3f;
@@ -198,6 +199,7 @@ public class UnitTypes implements ContentList{
isFlying = true; isFlying = true;
targetAir = false; targetAir = false;
engineOffset = 7.8f; engineOffset = 7.8f;
range = 140f;
weapon = new Weapon("bomber"){{ weapon = new Weapon("bomber"){{
length = 0f; length = 0f;
width = 2f; width = 2f;

View File

@@ -33,8 +33,7 @@ public class Zones implements ContentList{
craters = new Zone("craters", new MapGenerator("craters", 1).dist(0).decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01))){{ craters = new Zone("craters", new MapGenerator("craters", 1).dist(0).decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01))){{
startingItems = ItemStack.list(Items.copper, 200); startingItems = ItemStack.list(Items.copper, 200);
conditionWave = 10; conditionWave = 10;
itemRequirements = ItemStack.with(Items.copper, 2000); zoneRequirements = ZoneRequirement.with(groundZero, 10);
zoneRequirements = new Zone[]{groundZero};
blockRequirements = new Block[]{Blocks.router}; blockRequirements = new Block[]{Blocks.router};
resources = new Item[]{Items.copper, Items.lead}; resources = new Item[]{Items.copper, Items.lead};
rules = () -> new Rules(){{ rules = () -> new Rules(){{
@@ -50,8 +49,7 @@ public class Zones implements ContentList{
baseLaunchCost = ItemStack.with(); baseLaunchCost = ItemStack.with();
startingItems = ItemStack.list(Items.copper, 400); startingItems = ItemStack.list(Items.copper, 400);
conditionWave = 10; conditionWave = 10;
zoneRequirements = new Zone[]{craters}; zoneRequirements = ZoneRequirement.with(craters, 10);
itemRequirements = ItemStack.with(Items.copper, 4000, Items.lead, 2000);
resources = new Item[]{Items.copper, Items.lead, Items.coal}; resources = new Item[]{Items.copper, Items.lead, Items.coal};
rules = () -> new Rules(){{ rules = () -> new Rules(){{
waves = true; waves = true;
@@ -66,8 +64,7 @@ public class Zones implements ContentList{
startingItems = ItemStack.list(Items.copper, 400); startingItems = ItemStack.list(Items.copper, 400);
conditionWave = 20; conditionWave = 20;
launchPeriod = 20; launchPeriod = 20;
zoneRequirements = new Zone[]{frozenForest}; zoneRequirements = ZoneRequirement.with(frozenForest, 10, craters, 15);
itemRequirements = ItemStack.with(Items.lead, 6000, Items.graphite, 2000);
blockRequirements = new Block[]{Blocks.graphitePress, Blocks.combustionGenerator}; blockRequirements = new Block[]{Blocks.graphitePress, Blocks.combustionGenerator};
resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.sand}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.sand};
rules = () -> new Rules(){{ rules = () -> new Rules(){{
@@ -99,9 +96,8 @@ public class Zones implements ContentList{
startingItems = ItemStack.list(Items.copper, 400, Items.lead, 100); startingItems = ItemStack.list(Items.copper, 400, Items.lead, 100);
conditionWave = 10; conditionWave = 10;
launchPeriod = 10; launchPeriod = 10;
zoneRequirements = new Zone[]{frozenForest}; zoneRequirements = ZoneRequirement.with(frozenForest, 15);
blockRequirements = new Block[]{Blocks.pneumaticDrill}; blockRequirements = new Block[]{Blocks.pneumaticDrill};
itemRequirements = ItemStack.with(Items.copper, 8000, Items.silicon, 2000);
resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium};
rules = () -> new Rules(){{ rules = () -> new Rules(){{
waves = true; waves = true;
@@ -114,10 +110,9 @@ public class Zones implements ContentList{
loadout = Loadouts.basicNucleus; loadout = Loadouts.basicNucleus;
baseLaunchCost = ItemStack.with(); baseLaunchCost = ItemStack.with();
startingItems = ItemStack.list(Items.copper, 1500); startingItems = ItemStack.list(Items.copper, 1500);
itemRequirements = ItemStack.with(Items.copper, 8000, Items.metaglass, 2000, Items.graphite, 3000);
conditionWave = 10; conditionWave = 10;
launchPeriod = 20; launchPeriod = 20;
zoneRequirements = new Zone[]{ruinousShores}; zoneRequirements = ZoneRequirement.with(stainedMountains, 20);
blockRequirements = new Block[]{Blocks.thermalGenerator}; blockRequirements = new Block[]{Blocks.thermalGenerator};
resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.sand}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.sand};
rules = () -> new Rules(){{ rules = () -> new Rules(){{
@@ -133,11 +128,10 @@ public class Zones implements ContentList{
loadout = Loadouts.basicNucleus; loadout = Loadouts.basicNucleus;
baseLaunchCost = ItemStack.with(); baseLaunchCost = ItemStack.with();
startingItems = ItemStack.list(Items.copper, 2500, Items.lead, 3000, Items.silicon, 800, Items.metaglass, 400); startingItems = ItemStack.list(Items.copper, 2500, Items.lead, 3000, Items.silicon, 800, Items.metaglass, 400);
itemRequirements = ItemStack.with(Items.copper, 10000, Items.titanium, 8000, Items.metaglass, 6000, Items.plastanium, 2000);
conditionWave = 30; conditionWave = 30;
launchPeriod = 15; launchPeriod = 15;
zoneRequirements = new Zone[]{desolateRift}; zoneRequirements = ZoneRequirement.with(desolateRift, 20);
blockRequirements = new Block[]{Blocks.blastDrill, Blocks.thermalGenerator}; blockRequirements = new Block[]{Blocks.thermalGenerator};
resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.thorium, Items.sand}; resources = new Item[]{Items.copper, Items.scrap, Items.lead, Items.coal, Items.titanium, Items.thorium, Items.sand};
rules = () -> new Rules(){{ rules = () -> new Rules(){{
waves = true; waves = true;

View File

@@ -8,7 +8,10 @@ import io.anuke.arc.graphics.GL20;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureAtlas; import io.anuke.arc.graphics.g2d.TextureAtlas;
import io.anuke.arc.input.KeyCode; import io.anuke.arc.input.KeyCode;
import io.anuke.arc.util.*; import io.anuke.arc.util.BufferUtils;
import io.anuke.arc.util.Interval;
import io.anuke.arc.util.Strings;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.content.Mechs;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
@@ -48,7 +51,7 @@ public class Control implements ApplicationListener{
private Interval timer = new Interval(2); private Interval timer = new Interval(2);
private boolean hiscore = false; private boolean hiscore = false;
private boolean wasPaused = false; private boolean wasPaused = false;
private InputHandler[] inputs = {}; private InputHandler input;
public Control(){ public Control(){
IntBuffer buf = BufferUtils.newIntBuffer(1); IntBuffer buf = BufferUtils.newIntBuffer(1);
@@ -80,7 +83,7 @@ public class Control implements ApplicationListener{
"lastBuild", 0 "lastBuild", 0
); );
addPlayer(0); createPlayer();
saves.load(); saves.load();
@@ -91,21 +94,17 @@ public class Control implements ApplicationListener{
}); });
Events.on(PlayEvent.class, event -> { Events.on(PlayEvent.class, event -> {
for(Player player : players){
player.add(); player.add();
}
state.set(State.playing); state.set(State.playing);
}); });
Events.on(WorldLoadEvent.class, event -> { Events.on(WorldLoadEvent.class, event -> {
Core.app.post(() -> Core.camera.position.set(players[0])); Core.app.post(() -> Core.camera.position.set(player));
}); });
Events.on(ResetEvent.class, event -> { Events.on(ResetEvent.class, event -> {
for(Player player : players){
player.reset(); player.reset();
}
hiscore = false; hiscore = false;
@@ -139,7 +138,7 @@ public class Control implements ApplicationListener{
if(state.rules.pvp && !Net.active()){ if(state.rules.pvp && !Net.active()){
try{ try{
Net.host(port); Net.host(port);
players[0].isAdmin = true; player.isAdmin = true;
}catch(IOException e){ }catch(IOException e){
ui.showError(Core.bundle.format("server.error", Strings.parseException(e, false))); ui.showError(Core.bundle.format("server.error", Strings.parseException(e, false)));
Core.app.post(() -> state.set(State.menu)); Core.app.post(() -> state.set(State.menu));
@@ -150,7 +149,7 @@ public class Control implements ApplicationListener{
Events.on(UnlockEvent.class, e -> ui.hudfrag.showUnlock(e.content)); Events.on(UnlockEvent.class, e -> ui.hudfrag.showUnlock(e.content));
Events.on(BlockBuildEndEvent.class, e -> { Events.on(BlockBuildEndEvent.class, e -> {
if(e.team == players[0].getTeam()){ if(e.team == player.getTeam()){
if(e.breaking){ if(e.breaking){
state.stats.buildingsDeconstructed++; state.stats.buildingsDeconstructed++;
}else{ }else{
@@ -160,19 +159,19 @@ public class Control implements ApplicationListener{
}); });
Events.on(BlockDestroyEvent.class, e -> { Events.on(BlockDestroyEvent.class, e -> {
if(e.tile.getTeam() == players[0].getTeam()){ if(e.tile.getTeam() == player.getTeam()){
state.stats.buildingsDestroyed ++; state.stats.buildingsDestroyed ++;
} }
}); });
Events.on(UnitDestroyEvent.class, e -> { Events.on(UnitDestroyEvent.class, e -> {
if(e.unit.getTeam() != players[0].getTeam()){ if(e.unit.getTeam() != player.getTeam()){
state.stats.enemyUnitsDestroyed ++; state.stats.enemyUnitsDestroyed ++;
} }
}); });
Events.on(ZoneCompleteEvent.class, e -> { Events.on(ZoneRequireCompleteEvent.class, e -> {
ui.hudfrag.showToast(Core.bundle.format("zone.complete", e.zone.conditionWave)); ui.hudfrag.showToast(Core.bundle.format("zone.requirement.complete", state.wave, e.zone.localizedName));
}); });
Events.on(ZoneConfigureCompleteEvent.class, e -> { Events.on(ZoneConfigureCompleteEvent.class, e -> {
@@ -180,65 +179,29 @@ public class Control implements ApplicationListener{
}); });
} }
public void addPlayer(int index){ void createPlayer(){
if(players.length != index + 1){ player = new Player();
Player[] old = players;
players = new Player[index + 1];
System.arraycopy(old, 0, players, 0, old.length);
}
if(inputs.length != index + 1){
InputHandler[] oldi = inputs;
inputs = new InputHandler[index + 1];
System.arraycopy(oldi, 0, inputs, 0, oldi.length);
}
Player setTo = (index == 0 ? null : players[0]);
Player player = new Player();
player.name = Core.settings.getString("name"); player.name = Core.settings.getString("name");
player.mech = mobile ? Mechs.starterMobile : Mechs.starterDesktop; player.mech = mobile ? Mechs.starterMobile : Mechs.starterDesktop;
player.color.set(Core.settings.getInt("color-" + index)); player.color.set(Core.settings.getInt("color-0"));
player.isLocal = true; player.isLocal = true;
player.playerIndex = index;
player.isMobile = mobile; player.isMobile = mobile;
players[index] = player;
if(setTo != null){ if(mobile){
player.set(setTo.x, setTo.y); input = new MobileInput();
}else{
input = new DesktopInput();
} }
if(!state.is(State.menu)){ if(!state.is(State.menu)){
player.add(); player.add();
} }
InputHandler input;
if(mobile){
input = new MobileInput(player);
}else{
input = new DesktopInput(player);
}
inputs[index] = input;
Core.input.addProcessor(input); Core.input.addProcessor(input);
} }
public void removePlayer(){ public InputHandler input(){
players[players.length - 1].remove(); return input;
inputs[inputs.length - 1].remove();
Player[] old = players;
players = new Player[players.length - 1];
System.arraycopy(old, 0, players, 0, players.length);
InputHandler[] oldi = inputs;
inputs = new InputHandler[inputs.length - 1];
System.arraycopy(oldi, 0, inputs, 0, inputs.length);
}
public InputHandler input(int index){
return inputs[index];
} }
public void playMap(Map map, Rules rules){ public void playMap(Map map, Rules rules){
@@ -259,8 +222,6 @@ public class Control implements ApplicationListener{
content.dispose(); content.dispose();
Net.dispose(); Net.dispose();
ui.editor.dispose(); ui.editor.dispose();
inputs = new InputHandler[]{};
players = new Player[]{};
} }
@Override @Override
@@ -304,20 +265,16 @@ public class Control implements ApplicationListener{
public void update(){ public void update(){
saves.update(); saves.update();
for(InputHandler inputHandler : inputs){ input.updateController();
inputHandler.updateController();
}
//autosave global data if it's modified //autosave global data if it's modified
data.checkSave(); data.checkSave();
if(!state.is(State.menu)){ if(!state.is(State.menu)){
for(InputHandler input : inputs){
input.update(); input.update();
}
if(world.isZone()){ if(world.isZone()){
for(Tile tile : state.teams.get(players[0].getTeam()).cores){ for(Tile tile : state.teams.get(player.getTeam()).cores){
for(Item item : content.items()){ for(Item item : content.items()){
if(tile.entity.items.has(item)){ if(tile.entity.items.has(item)){
data.unlockContent(item); data.unlockContent(item);

View File

@@ -63,7 +63,6 @@ public class NetClient implements ApplicationListener{
public NetClient(){ public NetClient(){
Net.handleClient(Connect.class, packet -> { Net.handleClient(Connect.class, packet -> {
Player player = players[0];
player.isAdmin = false; player.isAdmin = false;
@@ -188,8 +187,8 @@ public class NetClient implements ApplicationListener{
@Remote(variants = Variant.one) @Remote(variants = Variant.one)
public static void onPositionSet(float x, float y){ public static void onPositionSet(float x, float y){
players[0].x = x; player.x = x;
players[0].y = y; player.y = y;
} }
@Remote @Remote
@@ -249,6 +248,7 @@ public class NetClient implements ApplicationListener{
for(int i = 0; i < cores; i++){ for(int i = 0; i < cores; i++){
int pos = input.readInt(); int pos = input.readInt();
Tile tile = world.tile(pos); Tile tile = world.tile(pos);
if(tile != null && tile.entity != null){ if(tile != null && tile.entity != null){
tile.entity.items.read(input); tile.entity.items.read(input);
}else{ }else{
@@ -333,8 +333,6 @@ public class NetClient implements ApplicationListener{
void sync(){ void sync(){
if(timer.get(0, playerSyncTime)){ if(timer.get(0, playerSyncTime)){
Player player = players[0];
BuildRequest[] requests; BuildRequest[] requests;
//limit to 10 to prevent buffer overflows //limit to 10 to prevent buffer overflows
int usedRequests = Math.min(player.getPlaceQueue().size, 10); int usedRequests = Math.min(player.getPlaceQueue().size, 10);

View File

@@ -458,7 +458,7 @@ public class NetServer implements ApplicationListener{
byte[] stateBytes = syncStream.toByteArray(); byte[] stateBytes = syncStream.toByteArray();
//write basic state data. //write basic state data.
Call.onStateSnapshot(player.con.id, state.wavetime, state.wave, state.enemies, (short)stateBytes.length, Net.compressSnapshot(stateBytes)); Call.onStateSnapshot(player.con.id, state.wavetime, state.wave, state.enemies(), (short)stateBytes.length, Net.compressSnapshot(stateBytes));
viewport.setSize(player.con.viewWidth, player.con.viewHeight).setCenter(player.con.viewX, player.con.viewY); viewport.setSize(player.con.viewWidth, player.con.viewHeight).setCenter(player.con.viewX, player.con.viewY);

View File

@@ -53,7 +53,7 @@ public class Renderer implements ApplicationListener{
public Renderer(){ public Renderer(){
batch = new SpriteBatch(4096); batch = new SpriteBatch(4096);
camera = new Camera(); camera = new Camera();
Lines.setCircleVertices(14); Lines.setCircleVertices(20);
Shaders.init(); Shaders.init();
Effects.setScreenShakeProvider((intensity, duration) -> { Effects.setScreenShakeProvider((intensity, duration) -> {
@@ -113,11 +113,11 @@ public class Renderer implements ApplicationListener{
if(state.is(State.menu)){ if(state.is(State.menu)){
graphics.clear(Color.BLACK); graphics.clear(Color.BLACK);
}else{ }else{
Vector2 position = Tmp.v3.set(players[0]); Vector2 position = Tmp.v3.set(player);
if(players[0].isDead()){ if(player.isDead()){
TileEntity core = players[0].getClosestCore(); TileEntity core = player.getClosestCore();
if(core != null && players[0].spawner == null){ if(core != null && player.spawner == null){
camera.position.lerpDelta(core.x, core.y, 0.08f); camera.position.lerpDelta(core.x, core.y, 0.08f);
}else{ }else{
camera.position.lerpDelta(position, 0.08f); camera.position.lerpDelta(position, 0.08f);
@@ -148,8 +148,8 @@ public class Renderer implements ApplicationListener{
camera.update(); camera.update();
if(Float.isNaN(camera.position.x) || Float.isNaN(camera.position.y)){ if(Float.isNaN(camera.position.x) || Float.isNaN(camera.position.y)){
camera.position.x = players[0].x; camera.position.x = player.x;
camera.position.y = players[0].y; camera.position.y = player.y;
} }
graphics.clear(clearColor); graphics.clear(clearColor);
@@ -169,6 +169,7 @@ public class Renderer implements ApplicationListener{
blocks.processBlocks(); blocks.processBlocks();
blocks.drawShadows(); blocks.drawShadows();
Draw.color();
blocks.floor.beginDraw(); blocks.floor.beginDraw();
blocks.floor.drawLayer(CacheLayer.walls); blocks.floor.drawLayer(CacheLayer.walls);
@@ -183,6 +184,8 @@ public class Renderer implements ApplicationListener{
blocks.drawBlocks(Layer.overlay); blocks.drawBlocks(Layer.overlay);
drawGroundShadows();
drawAllTeams(false); drawAllTeams(false);
blocks.skipLayer(Layer.turret); blocks.skipLayer(Layer.turret);
@@ -223,6 +226,28 @@ public class Renderer implements ApplicationListener{
Draw.flush(); Draw.flush();
} }
private void drawGroundShadows(){
Draw.color(0, 0, 0, 0.4f);
float rad = 1.6f;
Consumer<Unit> draw = u -> {
float size = Math.max(u.getIconRegion().getWidth(), u.getIconRegion().getHeight()) * Draw.scl;
Draw.rect("circle-shadow", u.x, u.y, size * rad, size * rad);
};
for(EntityGroup<? extends BaseUnit> group : unitGroups){
if(!group.isEmpty()){
drawAndInterpolate(group, unit -> !unit.isDead(), draw::accept);
}
}
if(!playerGroup.isEmpty()){
drawAndInterpolate(playerGroup, unit -> !unit.isDead(), draw::accept);
}
Draw.color();
}
private void drawFlyerShadows(){ private void drawFlyerShadows(){
float trnsX = -12, trnsY = -13; float trnsX = -12, trnsY = -13;
Draw.color(0, 0, 0, 0.22f); Draw.color(0, 0, 0, 0.22f);
@@ -282,7 +307,7 @@ public class Renderer implements ApplicationListener{
public void clampScale(){ public void clampScale(){
float s = io.anuke.arc.scene.ui.layout.Unit.dp.scl(1f); float s = io.anuke.arc.scene.ui.layout.Unit.dp.scl(1f);
targetscale = Mathf.clamp(targetscale, s * 1.5f, Math.round(s * 5)); targetscale = Mathf.clamp(targetscale, s * 1.5f, Math.round(s * 6));
} }
} }

View File

@@ -63,7 +63,6 @@ public class UI implements ApplicationListener{
public AdminsDialog admins; public AdminsDialog admins;
public TraceDialog traces; public TraceDialog traces;
public ChangelogDialog changelog; public ChangelogDialog changelog;
public LocalPlayerDialog localplayers;
public DatabaseDialog database; public DatabaseDialog database;
public ContentInfoDialog content; public ContentInfoDialog content;
public DeployDialog deploy; public DeployDialog deploy;
@@ -109,6 +108,7 @@ public class UI implements ApplicationListener{
}); });
Colors.put("accent", Pal.accent); Colors.put("accent", Pal.accent);
Colors.put("stat", Pal.stat);
loadCursors(); loadCursors();
} }
@@ -175,7 +175,6 @@ public class UI implements ApplicationListener{
admins = new AdminsDialog(); admins = new AdminsDialog();
traces = new TraceDialog(); traces = new TraceDialog();
maps = new MapsDialog(); maps = new MapsDialog();
localplayers = new LocalPlayerDialog();
content = new ContentInfoDialog(); content = new ContentInfoDialog();
deploy = new DeployDialog(); deploy = new DeployDialog();
tech = new TechTreeDialog(); tech = new TechTreeDialog();
@@ -183,7 +182,7 @@ public class UI implements ApplicationListener{
Group group = Core.scene.root; Group group = Core.scene.root;
backfrag.build(group); backfrag.build(group);
control.input(0).getFrag().build(group); control.input().getFrag().build(group);
hudfrag.build(group); hudfrag.build(group);
menufrag.build(group); menufrag.build(group);
chatfrag.container().build(group); chatfrag.container().build(group);
@@ -219,7 +218,7 @@ public class UI implements ApplicationListener{
cont.margin(30).add(text).padRight(6f); cont.margin(30).add(text).padRight(6f);
TextField field = cont.addField(def, t -> { TextField field = cont.addField(def, t -> {
}).size(170f, 50f).get(); }).size(170f, 50f).get();
field.setTextFieldFilter((f, c) -> field.getText().length() < 12 && filter.acceptChar(f, c)); field.setFilter((f, c) -> field.getText().length() < 12 && filter.acceptChar(f, c));
Platform.instance.addDialog(field); Platform.instance.addDialog(field);
buttons.defaults().size(120, 54).pad(4); buttons.defaults().size(120, 54).pad(4);
buttons.addButton("$ok", () -> { buttons.addButton("$ok", () -> {

View File

@@ -1,5 +1,6 @@
package io.anuke.mindustry.core; package io.anuke.mindustry.core;
import io.anuke.annotations.Annotations.Nullable;
import io.anuke.arc.ApplicationListener; import io.anuke.arc.ApplicationListener;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.Events; import io.anuke.arc.Events;
@@ -96,11 +97,11 @@ public class World implements ApplicationListener{
return tiles == null ? 0 : tiles[0].length; return tiles == null ? 0 : tiles[0].length;
} }
public Tile tile(int pos){ public @Nullable Tile tile(int pos){
return tiles == null ? null : tile(Pos.x(pos), Pos.y(pos)); return tiles == null ? null : tile(Pos.x(pos), Pos.y(pos));
} }
public Tile tile(int x, int y){ public @Nullable Tile tile(int x, int y){
if(tiles == null){ if(tiles == null){
return null; return null;
} }
@@ -112,7 +113,7 @@ public class World implements ApplicationListener{
return tiles[x][y]; return tiles[x][y];
} }
public Tile tileWorld(float x, float y){ public @Nullable Tile tileWorld(float x, float y){
return tile(Math.round(x / tilesize), Math.round(y / tilesize)); return tile(Math.round(x / tilesize), Math.round(y / tilesize));
} }
@@ -258,19 +259,24 @@ public class World implements ApplicationListener{
invalidMap = false; invalidMap = false;
if(!headless){ if(!headless){
if(state.teams.get(players[0].getTeam()).cores.size == 0){ if(state.teams.get(player.getTeam()).cores.size == 0){
ui.showError("$map.nospawn"); ui.showError("$map.nospawn");
invalidMap = true; invalidMap = true;
}else if(state.rules.pvp){ //pvp maps need two cores to be valid }else if(state.rules.pvp){ //pvp maps need two cores to be valid
invalidMap = true; invalidMap = true;
for(Team team : Team.all){ for(Team team : Team.all){
if(state.teams.get(team).cores.size != 0 && team != players[0].getTeam()){ if(state.teams.get(team).cores.size != 0 && team != player.getTeam()){
invalidMap = false; invalidMap = false;
} }
} }
if(invalidMap){ if(invalidMap){
ui.showError("$map.nospawn.pvp"); ui.showError("$map.nospawn.pvp");
} }
}else if(!state.rules.waves){ //pvp maps need two cores to be valid
invalidMap = state.teams.get(waveTeam).cores.isEmpty();
if(invalidMap){
ui.showError("$map.nospawn.attack");
}
} }
}else{ }else{
invalidMap = true; invalidMap = true;
@@ -451,9 +457,7 @@ public class World implements ApplicationListener{
} }
for(int x = 0; x < tiles.length; x++){ for(int x = 0; x < tiles.length; x++){
for(int y = 0; y < tiles[0].length; y++){ System.arraycopy(writeBuffer[x], 0, dark[x], 0, tiles[0].length);
dark[x][y] = writeBuffer[x][y];
}
} }
} }

View File

@@ -4,6 +4,7 @@ import io.anuke.annotations.Annotations.Struct;
import io.anuke.arc.collection.LongArray; import io.anuke.arc.collection.LongArray;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.gen.TileOp; import io.anuke.mindustry.gen.TileOp;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.Floor; import io.anuke.mindustry.world.blocks.Floor;
@@ -39,7 +40,11 @@ public class DrawOperation{
if(type == OpType.floor.ordinal()){ if(type == OpType.floor.ordinal()){
tile.setFloor((Floor)content.block(to)); tile.setFloor((Floor)content.block(to));
}else if(type == OpType.block.ordinal()){ }else if(type == OpType.block.ordinal()){
tile.setBlock(content.block(to)); Block block = content.block(to);
tile.setBlock(block);
if(block.isMultiblock()){
editor.updateLinks(block, tile.x, tile.y);
}
}else if(type == OpType.rotation.ordinal()){ }else if(type == OpType.rotation.ordinal()){
tile.setRotation(to); tile.setRotation(to);
}else if(type == OpType.team.ordinal()){ }else if(type == OpType.team.ordinal()){

View File

@@ -49,7 +49,7 @@ public class EditorTile extends Tile{
@Override @Override
public void setBlock(Block type){ public void setBlock(Block type){
Block previous = wall == null ? Blocks.air : wall; Block previous =wall;
if(previous == type) return; if(previous == type) return;
super.setBlock(type); super.setBlock(type);
op(TileOp.get(x, y, (byte)OpType.block.ordinal(), previous.id, type.id)); op(TileOp.get(x, y, (byte)OpType.block.ordinal(), previous.id, type.id));

View File

@@ -146,6 +146,27 @@ public class MapEditor{
return tiles[0].length; return tiles[0].length;
} }
public void updateLinks(Block block, int x, int y){
int offsetx = -(block.size - 1) / 2;
int offsety = -(block.size - 1) / 2;
for(int dx = 0; dx < block.size; dx++){
for(int dy = 0; dy < block.size; dy++){
int worldx = dx + offsetx + x;
int worldy = dy + offsety + y;
if(Structs.inBounds(worldx, worldy, width(), height())){
Tile tile = tiles[worldx][worldy];
if(!(worldx == x && worldy == y)){
tile.setBlock(Blocks.part);
tile.setLinkByte(Pack.byteByte((byte)(dx + offsetx + 8), (byte)(dy + offsety + 8)));
}
}
}
}
}
public void draw(int x, int y, boolean paint){ public void draw(int x, int y, boolean paint){
draw(x, y, paint, drawBlock); draw(x, y, paint, drawBlock);
} }

View File

@@ -181,7 +181,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
shown(() -> { shown(() -> {
saved = true; saved = true;
Platform.instance.beginForceLandscape(); if(!Core.settings.getBool("landscape")) Platform.instance.beginForceLandscape();
editor.clearOp(); editor.clearOp();
Core.scene.setScrollFocus(view); Core.scene.setScrollFocus(view);
if(!shownWithMap){ if(!shownWithMap){
@@ -195,7 +195,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
hidden(() -> { hidden(() -> {
editor.clearOp(); editor.clearOp();
Platform.instance.updateRPC(); Platform.instance.updateRPC();
Platform.instance.endForceLandscape(); if(!Core.settings.getBool("landscape")) Platform.instance.endForceLandscape();
}); });
} }

View File

@@ -233,7 +233,7 @@ public class MapGenerateDialog extends FloatingDialog{
Tile tile = editor.tile(x, y); Tile tile = editor.tile(x, y);
DummyTile write = writeTiles[x][y]; DummyTile write = writeTiles[x][y];
tile.setRotation((byte)write.rotation); tile.setRotation(write.rotation);
tile.setFloor((Floor)content.block(write.floor)); tile.setFloor((Floor)content.block(write.floor));
tile.setBlock(content.block(write.block)); tile.setBlock(content.block(write.block));
tile.setTeam(Team.all[write.team]); tile.setTeam(Team.all[write.team]);

View File

@@ -72,8 +72,7 @@ public class MapRenderer implements Disposable{
IndexedRenderer mesh = chunks[x][y]; IndexedRenderer mesh = chunks[x][y];
if(mesh == null){ if(mesh == null){
chunks[x][y] = new IndexedRenderer(chunksize * chunksize * 2); continue;
mesh = chunks[x][y];
} }
mesh.getTransformMatrix().setToTranslation(tx, ty).scale(tw / (width * tilesize), th / (height * tilesize)); mesh.getTransformMatrix().setToTranslation(tx, ty).scale(tw / (width * tilesize), th / (height * tilesize));
@@ -140,7 +139,7 @@ public class MapRenderer implements Disposable{
offsetX = tilesize/2f - region.getWidth()/2f * Draw.scl; offsetX = tilesize/2f - region.getWidth()/2f * Draw.scl;
offsetY = tilesize/2f - region.getHeight()/2f * Draw.scl; offsetY = tilesize/2f - region.getHeight()/2f * Draw.scl;
}else if(wall == Blocks.air && tile.ore() != null){ }else if(wall == Blocks.air && tile.ore() != null){
region = tile.ore().editorVariantRegions()[Mathf.randomSeed(idxWall, 0, tile.ore().editorVariantRegions().length-1)];; region = tile.ore().editorVariantRegions()[Mathf.randomSeed(idxWall, 0, tile.ore().editorVariantRegions().length-1)];
}else{ }else{
region = Core.atlas.find("clear-editor"); region = Core.atlas.find("clear-editor");
} }

View File

@@ -1,7 +1,6 @@
package io.anuke.mindustry.editor.generation; package io.anuke.mindustry.editor.generation;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.editor.generation.FilterOption.BlockOption;
import io.anuke.mindustry.editor.generation.FilterOption.SliderOption; import io.anuke.mindustry.editor.generation.FilterOption.SliderOption;
import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Block;

View File

@@ -156,11 +156,11 @@ public class Effects{
} }
} }
public static interface EffectProvider{ public interface EffectProvider{
void createEffect(Effect effect, Color color, float x, float y, float rotation, Object data); void createEffect(Effect effect, Color color, float x, float y, float rotation, Object data);
} }
public static interface EffectRenderer{ public interface EffectRenderer{
void render(EffectContainer effect); void render(EffectContainer effect);
} }
} }

View File

@@ -4,13 +4,6 @@ import io.anuke.arc.Core;
import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Angles;
import io.anuke.arc.math.Mathf;
import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.effect.Lightning;
import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.graphics.Pal;
/**An extended BulletType for most ammo-based bullets shot from turrets and units.*/ /**An extended BulletType for most ammo-based bullets shot from turrets and units.*/
@@ -20,28 +13,9 @@ public class BasicBulletType extends BulletType{
public float bulletShrink = 0.5f; public float bulletShrink = 0.5f;
public String bulletSprite; public String bulletSprite;
public int fragBullets = 9;
public float fragVelocityMin = 0.2f, fragVelocityMax = 1f;
public BulletType fragBullet = null;
/**Use a negative value to disable splash damage.*/
public float splashDamageRadius = -1f;
public int incendAmount = 0;
public float incendSpread = 8f;
public float incendChance = 1f;
public float homingPower = 0f;
public float homingRange = 50f;
public int lightining;
public int lightningLength = 5;
public TextureRegion backRegion; public TextureRegion backRegion;
public TextureRegion frontRegion; public TextureRegion frontRegion;
public float hitShake = 0f;
public BasicBulletType(float speed, float damage, String bulletSprite){ public BasicBulletType(float speed, float damage, String bulletSprite){
super(speed, damage); super(speed, damage);
this.bulletSprite = bulletSprite; this.bulletSprite = bulletSprite;
@@ -63,51 +37,4 @@ public class BasicBulletType extends BulletType{
Draw.rect(frontRegion, b.x, b.y, bulletWidth, height, b.rot() - 90); Draw.rect(frontRegion, b.x, b.y, bulletWidth, height, b.rot() - 90);
Draw.color(); Draw.color();
} }
@Override
public void update(Bullet b){
super.update(b);
if(homingPower > 0.0001f){
TargetTrait target = Units.getClosestTarget(b.getTeam(), b.x, b.y, homingRange);
if(target != null){
b.velocity().setAngle(Mathf.slerpDelta(b.velocity().angle(), b.angleTo(target), 0.08f));
}
}
}
@Override
public void hit(Bullet b, float x, float y){
super.hit(b, x, y);
Effects.shake(hitShake, hitShake, b);
if(fragBullet != null){
for(int i = 0; i < fragBullets; i++){
float len = Mathf.random(1f, 7f);
float a = Mathf.random(360f);
Bullet.create(fragBullet, b, x + Angles.trnsx(a, len), y + Angles.trnsy(a, len), a, Mathf.random(fragVelocityMin, fragVelocityMax));
}
}
if(Mathf.chance(incendChance)){
Damage.createIncend(x, y, incendSpread, incendAmount);
}
if(splashDamageRadius > 0){
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage);
}
}
@Override
public void despawned(Bullet b){
super.despawned(b);
if(fragBullet != null || splashDamageRadius > 0){
hit(b);
}
for (int i = 0; i < lightining; i++) {
Lightning.create(b.getTeam(), Pal.surge, damage, b.x, b.y, Mathf.random(360f), lightningLength);
}
}
} }

View File

@@ -1,10 +1,17 @@
package io.anuke.mindustry.entities.bullet; package io.anuke.mindustry.entities.bullet;
import io.anuke.arc.math.Angles;
import io.anuke.arc.math.Mathf;
import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.content.StatusEffects;
import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Effects.Effect; import io.anuke.mindustry.entities.Effects.Effect;
import io.anuke.mindustry.content.StatusEffects; import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.entities.effect.Lightning;
import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.game.Content; import io.anuke.mindustry.game.Content;
import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.StatusEffect; import io.anuke.mindustry.type.StatusEffect;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
@@ -41,8 +48,6 @@ public abstract class BulletType extends Content{
public StatusEffect status = StatusEffects.none; public StatusEffect status = StatusEffects.none;
/**Intensity of applied status effect in terms of duration.*/ /**Intensity of applied status effect in terms of duration.*/
public float statusDuration = 60 * 1f; public float statusDuration = 60 * 1f;
/**What fraction of armor is pierced, 0-1*/
public float armorPierce = 0f;
/**Whether to sync this bullet to clients.*/ /**Whether to sync this bullet to clients.*/
public boolean syncable; public boolean syncable;
/**Whether this bullet type collides with tiles.*/ /**Whether this bullet type collides with tiles.*/
@@ -56,6 +61,27 @@ public abstract class BulletType extends Content{
/**Whether velocity is inherited from the shooter.*/ /**Whether velocity is inherited from the shooter.*/
public boolean keepVelocity = true; public boolean keepVelocity = true;
//additional effects
public int fragBullets = 9;
public float fragVelocityMin = 0.2f, fragVelocityMax = 1f;
public BulletType fragBullet = null;
/**Use a negative value to disable splash damage.*/
public float splashDamageRadius = -1f;
public int incendAmount = 0;
public float incendSpread = 8f;
public float incendChance = 1f;
public float homingPower = 0f;
public float homingRange = 50f;
public int lightining;
public int lightningLength = 5;
public float hitShake = 0f;
public BulletType(float speed, float damage){ public BulletType(float speed, float damage){
this.speed = speed; this.speed = speed;
this.damage = damage; this.damage = damage;
@@ -81,12 +107,38 @@ public abstract class BulletType extends Content{
hit(b, b.x, b.y); hit(b, b.x, b.y);
} }
public void hit(Bullet b, float hitx, float hity){ public void hit(Bullet b, float x, float y){
Effects.effect(hitEffect, hitx, hity, b.rot()); Effects.effect(hitEffect, x, y, b.rot());
Effects.shake(hitShake, hitShake, b);
if(fragBullet != null){
for(int i = 0; i < fragBullets; i++){
float len = Mathf.random(1f, 7f);
float a = Mathf.random(360f);
Bullet.create(fragBullet, b, x + Angles.trnsx(a, len), y + Angles.trnsy(a, len), a, Mathf.random(fragVelocityMin, fragVelocityMax));
}
}
if(Mathf.chance(incendChance)){
Damage.createIncend(x, y, incendSpread, incendAmount);
}
if(splashDamageRadius > 0){
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage);
}
} }
public void despawned(Bullet b){ public void despawned(Bullet b){
Effects.effect(despawnEffect, b.x, b.y, b.rot()); Effects.effect(despawnEffect, b.x, b.y, b.rot());
if(fragBullet != null || splashDamageRadius > 0){
hit(b);
}
for (int i = 0; i < lightining; i++) {
Lightning.create(b.getTeam(), Pal.surge, damage, b.x, b.y, Mathf.random(360f), lightningLength);
}
} }
public void draw(Bullet b){ public void draw(Bullet b){
@@ -96,6 +148,13 @@ public abstract class BulletType extends Content{
} }
public void update(Bullet b){ public void update(Bullet b){
if(homingPower > 0.0001f){
TargetTrait target = Units.getClosestTarget(b.getTeam(), b.x, b.y, homingRange);
if(target != null){
b.velocity().setAngle(Mathf.slerpDelta(b.velocity().angle(), b.angleTo(target), 0.08f));
}
}
} }
@Override @Override

View File

@@ -20,7 +20,7 @@ public class LiquidBulletType extends BulletType{
Liquid liquid; Liquid liquid;
public LiquidBulletType(Liquid liquid){ public LiquidBulletType(Liquid liquid){
super(2.8f, 0); super(3.5f, 0);
this.liquid = liquid; this.liquid = liquid;
lifetime = 74f; lifetime = 74f;

View File

@@ -305,9 +305,10 @@ public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrai
y = data.readFloat(); y = data.readFloat();
liquid = content.liquid(data.readByte()); liquid = content.liquid(data.readByte());
targetAmount = data.readShort() / 4f; targetAmount = data.readShort() / 4f;
tile = world.tile(data.readInt()); int pos = data.readInt();
tile = world.tile(pos);
map.put(tile.pos(), this); map.put(pos, this);
} }
@Override @Override

View File

@@ -38,16 +38,21 @@ import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.entities.traits.BuilderTrait.BuildDataStatic.*;
/** /**
* Interface for units that build, break or mine things. * Interface for units that build, break or mine things.
*/ */
public interface BuilderTrait extends Entity, TeamTrait{ public interface BuilderTrait extends Entity, TeamTrait{
//these are not instance variables! //these are not instance variables!
Vector2[] tmptr = new Vector2[]{new Vector2(), new Vector2(), new Vector2(), new Vector2()};
float placeDistance = 220f; float placeDistance = 220f;
float mineDistance = 70f; float mineDistance = 70f;
Array<BuildRequest> removal = new Array<>();
//due to iOS wierdness
class BuildDataStatic{
static Array<BuildRequest> removal = new Array<>();
static Vector2[] tmptr = new Vector2[]{new Vector2(), new Vector2(), new Vector2(), new Vector2()};
}
/**Returns the queue for storing build requests.*/ /**Returns the queue for storing build requests.*/
Queue<BuildRequest> getPlaceQueue(); Queue<BuildRequest> getPlaceQueue();
@@ -229,9 +234,9 @@ public interface BuilderTrait extends Entity, TeamTrait{
if(!Net.client()){ if(!Net.client()){
//deconstructing is 2x as fast //deconstructing is 2x as fast
if(current.breaking){ if(current.breaking){
entity.deconstruct(unit, core, 2f / entity.buildCost * Time.delta() * getBuildPower(tile)); entity.deconstruct(unit, core, 2f / entity.buildCost * Time.delta() * getBuildPower(tile) * state.rules.buildSpeedMultiplier);
}else{ }else{
entity.construct(unit, core, 1f / entity.buildCost * Time.delta() * getBuildPower(tile)); entity.construct(unit, core, 1f / entity.buildCost * Time.delta() * getBuildPower(tile) * state.rules.buildSpeedMultiplier);
} }
current.progress = entity.progress(); current.progress = entity.progress();

View File

@@ -129,7 +129,10 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
} }
public void targetClosest(){ public void targetClosest(){
target = Units.getClosestTarget(team, x, y, Math.max(getWeapon().bullet.range(), type.range), u -> type.targetAir || !u.isFlying()); TargetTrait newTarget = Units.getClosestTarget(team, x, y, Math.max(getWeapon().bullet.range(), type.range), u -> type.targetAir || !u.isFlying());
if(newTarget != null){
target = newTarget;
}
} }
public TileEntity getClosestEnemyCore(){ public TileEntity getClosestEnemyCore(){

View File

@@ -47,7 +47,7 @@ public abstract class FlyingUnit extends BaseUnit{
attack(type.attackLength); attack(type.attackLength);
if((Angles.near(angleTo(target), rotation, type.shootCone) || getWeapon().ignoreRotation) //bombers and such don't care about rotation if((Angles.near(angleTo(target), rotation, type.shootCone) || getWeapon().ignoreRotation) //bombers and such don't care about rotation
&& dst(target) < Math.max(getWeapon().bullet.range(), type.range)){ && dst(target) < getWeapon().bullet.range()){
BulletType ammo = getWeapon().bullet; BulletType ammo = getWeapon().bullet;
if(type.rotateWeapon){ if(type.rotateWeapon){
@@ -75,8 +75,9 @@ public abstract class FlyingUnit extends BaseUnit{
targetClosest(); targetClosest();
targetClosestEnemyFlag(BlockFlag.target); targetClosestEnemyFlag(BlockFlag.target);
if(target != null){ if(target != null && !Units.invalidateTarget(target, team, x, y)){
setState(attack); setState(attack);
return;
} }
target = getClosestCore(); target = getClosestCore();

View File

@@ -54,10 +54,11 @@ public abstract class GroundUnit extends BaseUnit{
patrol = new UnitState(){ patrol = new UnitState(){
public void update(){ public void update(){
TileEntity target = getClosestCore(); TileEntity target = getClosestCore();
if(target != null){ if(target != null){
if(dst(target) > 400f){ if(dst(target) > 400f){
moveAwayFromCore(); moveAwayFromCore();
}else{ }else if(!(!Units.invalidateTarget(GroundUnit.this.target, GroundUnit.this) && dst(GroundUnit.this.target) < getWeapon().bullet.range())){
patrol(); patrol();
} }
} }

View File

@@ -66,7 +66,6 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
public SpawnerTrait spawner, lastSpawner; public SpawnerTrait spawner, lastSpawner;
public NetConnection con; public NetConnection con;
public int playerIndex = 0;
public boolean isLocal = false; public boolean isLocal = false;
public Interval timer = new Interval(4); public Interval timer = new Interval(4);
public TargetTrait target; public TargetTrait target;
@@ -279,7 +278,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
if(dead) return; if(dead) return;
if(!movement.isZero() && moved && !state.isPaused()){ if(!movement.isZero() && moved && !state.isPaused()){
walktime += movement.len() / 1f * getFloorOn().speedMultiplier; walktime += movement.len() * getFloorOn().speedMultiplier * 2f;
baseRotation = Mathf.slerpDelta(baseRotation, movement.angle(), 0.13f); baseRotation = Mathf.slerpDelta(baseRotation, movement.angle(), 0.13f);
} }
@@ -585,7 +584,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
movement.x += xa * speed; movement.x += xa * speed;
} }
Vector2 vec = Core.input.mouseWorld(control.input(playerIndex).getMouseX(), control.input(playerIndex).getMouseY()); Vector2 vec = Core.input.mouseWorld(control.input().getMouseX(), control.input().getMouseY());
pointerX = vec.x; pointerX = vec.x;
pointerY = vec.y; pointerY = vec.y;
updateShooting(); updateShooting();
@@ -608,7 +607,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
rotation = Mathf.slerpDelta(rotation, mech.flying ? velocity.angle() : movement.angle(), 0.13f * baseLerp); rotation = Mathf.slerpDelta(rotation, mech.flying ? velocity.angle() : movement.angle(), 0.13f * baseLerp);
} }
}else{ }else{
float angle = control.input(playerIndex).mouseAngle(x, y); float angle = control.input().mouseAngle(x, y);
this.rotation = Mathf.slerpDelta(this.rotation, angle, 0.1f * baseLerp); this.rotation = Mathf.slerpDelta(this.rotation, angle, 0.1f * baseLerp);
} }
} }
@@ -727,8 +726,8 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
} }
}else if(isShooting()){ }else if(isShooting()){
Vector2 vec = Core.input.mouseWorld(control.input(playerIndex).getMouseX(), Vector2 vec = Core.input.mouseWorld(control.input().getMouseX(),
control.input(playerIndex).getMouseY()); control.input().getMouseY());
pointerX = vec.x; pointerX = vec.x;
pointerY = vec.y; pointerY = vec.y;
@@ -808,7 +807,6 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
if(isLocal){ if(isLocal){
stream.writeByte(mech.id); stream.writeByte(mech.id);
stream.writeByte(playerIndex);
stream.writeInt(lastSpawner == null ? noSpawner : lastSpawner.getTile().pos()); stream.writeInt(lastSpawner == null ? noSpawner : lastSpawner.getTile().pos());
super.writeSave(stream, false); super.writeSave(stream, false);
} }
@@ -820,14 +818,13 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
if(local && !headless){ if(local && !headless){
byte mechid = stream.readByte(); byte mechid = stream.readByte();
int index = stream.readByte();
int spawner = stream.readInt(); int spawner = stream.readInt();
if(world.tile(spawner) != null && world.tile(spawner).entity != null && world.tile(spawner).entity instanceof SpawnerTrait){ if(world.tile(spawner) != null && world.tile(spawner).entity != null && world.tile(spawner).entity instanceof SpawnerTrait){
lastSpawner = (SpawnerTrait)(world.tile(spawner).entity); lastSpawner = (SpawnerTrait)(world.tile(spawner).entity);
} }
players[index].readSaveSuper(stream); player.readSaveSuper(stream);
players[index].mech = content.getByID(ContentType.mech, mechid); player.mech = content.getByID(ContentType.mech, mechid);
players[index].dead = false; player.dead = false;
}else if(local){ }else if(local){
byte mechid = stream.readByte(); byte mechid = stream.readByte();
stream.readByte(); stream.readByte();

View File

@@ -63,6 +63,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public static void onTileDamage(Tile tile, float health){ public static void onTileDamage(Tile tile, float health){
if(tile.entity != null){ if(tile.entity != null){
tile.entity.health = health; tile.entity.health = health;
if(tile.entity.damaged()){
world.indexer.notifyTileDamaged(tile.entity);
}
} }
} }
@@ -151,7 +155,9 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
if(health <= 0){ if(health <= 0){
Call.onTileDestroyed(tile); Call.onTileDestroyed(tile);
}else if(preHealth >= maxHealth() - 0.00001f && health < maxHealth() && world != null){ //when just damaged }
if(preHealth >= maxHealth() - 0.00001f && health < maxHealth() && world != null){ //when just damaged
world.indexer.notifyTileDamaged(this); world.indexer.notifyTileDamaged(this);
} }
} }

View File

@@ -10,11 +10,12 @@ import io.anuke.mindustry.world.Tile;
public class EventType{ public class EventType{
/**Called when a zone's requirements are met.*/ /**Called when a zone's requirements are met.*/
public static class ZoneCompleteEvent implements Event{ public static class ZoneRequireCompleteEvent implements Event{
public final Zone zone; public final Zone zone, required;
public ZoneCompleteEvent(Zone zone){ public ZoneRequireCompleteEvent(Zone zone, Zone required){
this.zone = zone; this.zone = zone;
this.required = required;
} }
} }

View File

@@ -25,6 +25,8 @@ public enum RulePreset{
pvp = true; pvp = true;
enemyCoreBuildRadius = 600f; enemyCoreBuildRadius = 600f;
respawnTime = 60 * 10; respawnTime = 60 * 10;
buildCostMultiplier = 0.5f;
buildSpeedMultiplier = 2f;
}}); }});
private final Supplier<Rules> rules; private final Supplier<Rules> rules;

View File

@@ -19,6 +19,10 @@ public class Rules{
public boolean pvp; public boolean pvp;
/**Whether enemy units drop random items on death.*/ /**Whether enemy units drop random items on death.*/
public boolean unitDrops; public boolean unitDrops;
/**Multiplier for buildings for the player.*/
public float buildCostMultiplier = 1f;
/**Multiplier for building speed.*/
public float buildSpeedMultiplier = 1f;
/**No-build zone around enemy core radius.*/ /**No-build zone around enemy core radius.*/
public float enemyCoreBuildRadius = 400f; public float enemyCoreBuildRadius = 400f;
/**Player respawn time in ticks.*/ /**Player respawn time in ticks.*/

View File

@@ -4,8 +4,6 @@ import io.anuke.arc.Core;
import io.anuke.arc.Events; import io.anuke.arc.Events;
import io.anuke.arc.collection.Array; import io.anuke.arc.collection.Array;
import io.anuke.arc.collection.Sort; import io.anuke.arc.collection.Sort;
import io.anuke.mindustry.entities.EntityDraw;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.Texture.TextureFilter; import io.anuke.arc.graphics.Texture.TextureFilter;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
@@ -13,7 +11,6 @@ import io.anuke.arc.graphics.g2d.Fill;
import io.anuke.arc.graphics.glutils.FrameBuffer; import io.anuke.arc.graphics.glutils.FrameBuffer;
import io.anuke.arc.util.Tmp; import io.anuke.arc.util.Tmp;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.game.EventType.TileChangeEvent; import io.anuke.mindustry.game.EventType.TileChangeEvent;
import io.anuke.mindustry.game.EventType.WorldLoadEvent; import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
@@ -26,7 +23,7 @@ import static io.anuke.mindustry.Vars.*;
public class BlockRenderer{ public class BlockRenderer{
private final static int initialRequests = 32 * 32; private final static int initialRequests = 32 * 32;
private final static int expandr = 9; private final static int expandr = 9;
private final static Color shadowColor = new Color(0, 0, 0, 0.19f); private final static Color shadowColor = new Color(0, 0, 0, 0.71f);
public final FloorRenderer floor = new FloorRenderer(); public final FloorRenderer floor = new FloorRenderer();
@@ -37,6 +34,7 @@ public class BlockRenderer{
private FrameBuffer shadows = new FrameBuffer(2, 2); private FrameBuffer shadows = new FrameBuffer(2, 2);
private FrameBuffer fog = new FrameBuffer(2, 2); private FrameBuffer fog = new FrameBuffer(2, 2);
private Array<Tile> outArray = new Array<>(); private Array<Tile> outArray = new Array<>();
private Array<Tile> shadowEvents = new Array<>();
public BlockRenderer(){ public BlockRenderer(){
@@ -45,16 +43,36 @@ public class BlockRenderer{
} }
Events.on(WorldLoadEvent.class, event -> { Events.on(WorldLoadEvent.class, event -> {
shadowEvents.clear();
lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated
shadows.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
shadows.resize(world.width(), world.height());
shadows.begin();
Core.graphics.clear(Color.WHITE);
Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight());
Draw.color(shadowColor);
for(int x = 0; x < world.width(); x++){
for(int y = 0; y < world.height(); y++){
Tile tile = world.rawTile(x, y);
if(tile.block() != Blocks.air){
Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1);
}
}
}
Draw.flush();
Draw.color();
shadows.end();
fog.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear); fog.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
fog.resize(world.width(), world.height()); fog.resize(world.width(), world.height());
fog.begin(); fog.begin();
Core.graphics.clear(Color.WHITE); Core.graphics.clear(Color.WHITE);
Draw.proj().setOrtho(0, 0, fog.getWidth(), fog.getHeight()); Draw.proj().setOrtho(0, 0, fog.getWidth(), fog.getHeight());
//TODO highly inefficient, width*height rectangles isn't great
//TODO handle shadow rotation generation with GPU blur/erode algorithm
for(int x = 0; x < world.width(); x++){ for(int x = 0; x < world.width(); x++){
for(int y = 0; y < world.height(); y++){ for(int y = 0; y < world.height(); y++){
Tile tile = world.rawTile(x, y); Tile tile = world.rawTile(x, y);
@@ -71,6 +89,8 @@ public class BlockRenderer{
}); });
Events.on(TileChangeEvent.class, event -> { Events.on(TileChangeEvent.class, event -> {
shadowEvents.add(event.tile);
int avgx = (int)(camera.position.x / tilesize); int avgx = (int)(camera.position.x / tilesize);
int avgy = (int)(camera.position. y / tilesize); int avgy = (int)(camera.position. y / tilesize);
int rangex = (int) (camera.width / tilesize / 2) + 2; int rangex = (int) (camera.width / tilesize / 2) + 2;
@@ -99,43 +119,36 @@ public class BlockRenderer{
} }
public void drawShadows(){ public void drawShadows(){
if(!Core.settings.getBool("shadows")) return; if(!shadowEvents.isEmpty()){
Draw.color();
if(!Core.graphics.isHidden() && (shadows.getWidth() != Core.graphics.getWidth() || shadows.getHeight() != Core.graphics.getHeight())){
shadows.resize(Core.graphics.getWidth(), Core.graphics.getHeight());
}
Tmp.tr1.set(shadows.getTexture());
Shaders.shadow.color.set(shadowColor);
Shaders.shadow.scl = renderer.cameraScale()/3f;
Shaders.shadow.region = Tmp.tr1;
Draw.flush(); Draw.flush();
shadows.begin(); shadows.begin();
Core.graphics.clear(Color.CLEAR); Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight());
floor.beginDraw(); for(Tile tile : shadowEvents){
floor.drawLayer(CacheLayer.walls); Draw.color(tile.block() == Blocks.air ? Color.WHITE : shadowColor);
floor.endDraw(); Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1);
drawBlocks(Layer.shadow);
EntityDraw.drawWith(playerGroup, player -> !player.isDead(), Unit::draw);
for(EntityGroup group : unitGroups){
EntityDraw.drawWith(group, unit -> !unit.isDead(), Unit::draw);
} }
Draw.color();
Draw.flush(); Draw.flush();
Draw.color();
shadows.end(); shadows.end();
shadowEvents.clear();
Draw.shader(Shaders.shadow); Draw.proj(camera.projection());
Draw.rect(Draw.wrap(shadows.getTexture()), }
camera.position.x,
camera.position.y, float ww = world.width() * tilesize, wh = world.height() * tilesize;
camera.width, -camera.height); float x = camera.position.x + tilesize/2f, y = camera.position.y + tilesize/2f;
float u = (x - camera.width/2f) / ww,
v = (y - camera.height/2f) / wh,
u2 = (x + camera.width/2f) / ww,
v2 = (y + camera.height/2f) / wh;
Tmp.tr1.set(shadows.getTexture());
Tmp.tr1.set(u, v2, u2, v);
Draw.shader(Shaders.fog);
Draw.rect(Tmp.tr1, camera.position.x, camera.position.y, camera.width, camera.height);
Draw.shader(); Draw.shader();
} }
@@ -218,7 +231,7 @@ public class BlockRenderer{
block.drawShadow(req.tile); block.drawShadow(req.tile);
}else if(req.layer == Layer.block){ }else if(req.layer == Layer.block){
block.draw(req.tile); block.draw(req.tile);
if(block.synthetic() && req.tile.getTeam() != players[0].getTeam()){ if(block.synthetic() && req.tile.getTeam() != player.getTeam()){
block.drawTeam(req.tile); block.drawTeam(req.tile);
} }
}else if(req.layer == block.layer){ }else if(req.layer == block.layer){

View File

@@ -211,7 +211,7 @@ public class FloorRenderer{
int chunksx = Mathf.ceil((float) (world.width()) / chunksize), int chunksx = Mathf.ceil((float) (world.width()) / chunksize),
chunksy = Mathf.ceil((float) (world.height()) / chunksize) ; chunksy = Mathf.ceil((float) (world.height()) / chunksize) ;
cache = new Chunk[chunksx][chunksy]; cache = new Chunk[chunksx][chunksy];
SpriteCache sprites = new SpriteCache(world.width() * world.height() * 5, (world.width() / chunksize) * (world.height() / chunksize) * 2, false); SpriteCache sprites = new SpriteCache(world.width() * world.height() * 6, (world.width() / chunksize) * (world.height() / chunksize) * 2, false);
cbatch = new CacheBatch(sprites); cbatch = new CacheBatch(sprites);
Time.mark(); Time.mark();

View File

@@ -25,20 +25,18 @@ public class OverlayRenderer{
private float buildFadeTime; private float buildFadeTime;
public void drawBottom(){ public void drawBottom(){
for(Player player : players){ InputHandler input = control.input();
InputHandler input = control.input(player.playerIndex);
if(!input.isDrawing() || player.isDead()) continue; if(!input.isDrawing() || player.isDead()) return;
input.drawOutlined(); input.drawOutlined();
} }
}
public void drawTop(){ public void drawTop(){
if(Core.settings.getBool("indicators")){ if(Core.settings.getBool("indicators")){
for(Player player : playerGroup.all()){ for(Player player : playerGroup.all()){
if(player != players[0] && player.getTeam() == players[0].getTeam()){ if(player != player && player.getTeam() == player.getTeam()){
if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f) if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f)
.setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x, player.y)){ .setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x, player.y)){
@@ -52,7 +50,7 @@ public class OverlayRenderer{
} }
Units.allUnits(unit -> { Units.allUnits(unit -> {
if(unit != players[0] && unit.getTeam() != players[0].getTeam() && !rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f).setCenter(Core.camera.position.x, Core.camera.position.y).contains(unit.x, unit.y)){ if(unit != player && unit.getTeam() != player.getTeam() && !rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f).setCenter(Core.camera.position.x, Core.camera.position.y).contains(unit.x, unit.y)){
Tmp.v1.set(unit.x, unit.y).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength); Tmp.v1.set(unit.x, unit.y).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength);
Lines.stroke(1f, unit.getTeam().color); Lines.stroke(1f, unit.getTeam().color);
@@ -62,10 +60,9 @@ public class OverlayRenderer{
}); });
} }
for(Player player : players){ if(player.isDead()) return; //dead players don't draw
if(player.isDead()) continue; //dead players don't draw
InputHandler input = control.input(player.playerIndex); InputHandler input = control.input();
//draw config selected block //draw config selected block
if(input.frag.config.isShown()){ if(input.frag.config.isShown()){
@@ -101,7 +98,7 @@ public class OverlayRenderer{
Vector2 vec = Core.input.mouseWorld(input.getMouseX(), input.getMouseY()); Vector2 vec = Core.input.mouseWorld(input.getMouseX(), input.getMouseY());
Tile tile = world.tileWorld(vec.x, vec.y); Tile tile = world.tileWorld(vec.x, vec.y);
if(tile != null && tile.block() != Blocks.air && tile.target().getTeam() == players[0].getTeam()){ if(tile != null && tile.block() != Blocks.air && tile.target().getTeam() == player.getTeam()){
Tile target = tile.target(); Tile target = tile.target();
target.block().drawSelect(target); target.block().drawSelect(target);
} }
@@ -124,5 +121,5 @@ public class OverlayRenderer{
} }
} }
} }
}
} }

View File

@@ -48,6 +48,7 @@ public class Pal{
heal = Color.valueOf("98ffa9"), heal = Color.valueOf("98ffa9"),
bar = Color.SLATE, bar = Color.SLATE,
accent = Color.valueOf("ffd37f"), accent = Color.valueOf("ffd37f"),
stat = Color.valueOf("ffd37f"),
locked = Color.valueOf("989aa4"), locked = Color.valueOf("989aa4"),
accentBack = Color.valueOf("d4816b"), accentBack = Color.valueOf("d4816b"),
place = Color.valueOf("6335f8"), place = Color.valueOf("6335f8"),

View File

@@ -10,7 +10,6 @@ import io.anuke.arc.math.geom.Geometry;
import io.anuke.arc.math.geom.Point2; import io.anuke.arc.math.geom.Point2;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.input.PlaceUtils.NormalizeDrawResult; import io.anuke.mindustry.input.PlaceUtils.NormalizeDrawResult;
import io.anuke.mindustry.input.PlaceUtils.NormalizeResult; import io.anuke.mindustry.input.PlaceUtils.NormalizeResult;
@@ -34,10 +33,6 @@ public class DesktopInput extends InputHandler{
private int prevX, prevY, prevRotation; private int prevX, prevY, prevRotation;
public DesktopInput(Player player){
super(player);
}
/**Draws a placement icon for a specific block.*/ /**Draws a placement icon for a specific block.*/
void drawPlace(int x, int y, Block block, int rotation, int prevX, int prevY, int prevRotation){ void drawPlace(int x, int y, Block block, int rotation, int prevX, int prevY, int prevRotation){
if(validPlace(x, y, block, rotation)){ if(validPlace(x, y, block, rotation)){

View File

@@ -44,7 +44,6 @@ public abstract class InputHandler implements InputProcessor{
/**Distance on the back from where items originate.*/ /**Distance on the back from where items originate.*/
final static float backTrns = 3f; final static float backTrns = 3f;
public final Player player;
public final OverlayFragment frag = new OverlayFragment(this); public final OverlayFragment frag = new OverlayFragment(this);
public Block block; public Block block;
@@ -54,10 +53,6 @@ public abstract class InputHandler implements InputProcessor{
protected PlaceDraw placeDraw = new PlaceDraw(); protected PlaceDraw placeDraw = new PlaceDraw();
private PlaceLine line = new PlaceLine(); private PlaceLine line = new PlaceLine();
public InputHandler(Player player){
this.player = player;
}
//methods to override //methods to override
@Remote(targets = Loc.client, called = Loc.server) @Remote(targets = Loc.client, called = Loc.server)
@@ -313,25 +308,20 @@ public abstract class InputHandler implements InputProcessor{
} }
} }
public boolean cursorNear(){
return true;
}
public void tryPlaceBlock(int x, int y){ public void tryPlaceBlock(int x, int y){
if(block != null && validPlace(x, y, block, rotation) && cursorNear()){ if(block != null && validPlace(x, y, block, rotation)){
placeBlock(x, y, block, rotation); placeBlock(x, y, block, rotation);
} }
} }
public void tryBreakBlock(int x, int y){ public void tryBreakBlock(int x, int y){
if(cursorNear() && validBreak(x, y)){ if(validBreak(x, y)){
breakBlock(x, y); breakBlock(x, y);
} }
} }
public boolean validPlace(int x, int y, Block type, int rotation){ public boolean validPlace(int x, int y, Block type, int rotation){
return Build.validPlace(player.getTeam(), x, y, type, rotation) && return Build.validPlace(player.getTeam(), x, y, type, rotation);
Mathf.dst(player.x, player.y, x * tilesize, y * tilesize) < Player.placeDistance;
} }
public boolean validBreak(int x, int y){ public boolean validBreak(int x, int y){

View File

@@ -28,7 +28,6 @@ import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.traits.TargetTrait; import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.entities.type.Player;
import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.entities.type.TileEntity;
import io.anuke.mindustry.entities.type.Unit; import io.anuke.mindustry.entities.type.Unit;
import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.graphics.Pal;
@@ -81,8 +80,7 @@ public class MobileInput extends InputHandler implements GestureListener{
private int prevX, prevY, prevRotation; private int prevX, prevY, prevRotation;
public MobileInput(Player player){ public MobileInput(){
super(player);
Core.input.addProcessor(new GestureDetector(20, 0.5f, 0.4f, 0.15f, this)); Core.input.addProcessor(new GestureDetector(20, 0.5f, 0.4f, 0.15f, this));
} }
@@ -231,7 +229,9 @@ public class MobileInput extends InputHandler implements GestureListener{
} }
Draw.color(); Draw.color();
}else{ }else{
float rad = (tile.block().size * tilesize / 2f - 1) * request.scale; float rad = Math.max((tile.block().size * tilesize / 2f - 1) * request.scale, 1f);
if(rad <= 1.01f) return;
Draw.mixcol(); Draw.mixcol();
//draw removing request //draw removing request
Draw.tint(Pal.removeBack); Draw.tint(Pal.removeBack);
@@ -493,6 +493,11 @@ public class MobileInput extends InputHandler implements GestureListener{
if(mode == placing && isPlacing()){ if(mode == placing && isPlacing()){
iterateLine(lineStartX, lineStartY, tileX, tileY, l -> { iterateLine(lineStartX, lineStartY, tileX, tileY, l -> {
Tile tile = world.tile(l.x, l.y);
if(tile != null && hasRequest(tile)){
return;
}
PlaceRequest request = new PlaceRequest(l.x, l.y, block, l.rotation); PlaceRequest request = new PlaceRequest(l.x, l.y, block, l.rotation);
request.scale = 1f; request.scale = 1f;
selection.add(request); selection.add(request);
@@ -724,7 +729,7 @@ public class MobileInput extends InputHandler implements GestureListener{
public boolean zoom(float initialDistance, float distance){ public boolean zoom(float initialDistance, float distance){
if(lastDistance == -1) lastDistance = initialDistance; if(lastDistance == -1) lastDistance = initialDistance;
float amount = (Mathf.sign(distance > lastDistance) * 0.07f) * Time.delta(); float amount = (Mathf.sign(distance > lastDistance) * 0.04f) * Time.delta();
renderer.scaleCamera(io.anuke.arc.scene.ui.layout.Unit.dp.scl(amount)); renderer.scaleCamera(io.anuke.arc.scene.ui.layout.Unit.dp.scl(amount));
lastDistance = distance; lastDistance = distance;
return true; return true;

View File

@@ -71,8 +71,6 @@ public class NetworkIO{
public static void loadWorld(InputStream is){ public static void loadWorld(InputStream is){
Player player = players[0];
try(DataInputStream stream = new DataInputStream(is)){ try(DataInputStream stream = new DataInputStream(is)){
Time.clear(); Time.clear();
@@ -127,7 +125,7 @@ public class NetworkIO{
state.teams.get(team).cores.add(world.tile(stream.readInt())); state.teams.get(team).cores.add(world.tile(stream.readInt()));
} }
if(team == players[0].getTeam() && cores > 0){ if(team == player.getTeam() && cores > 0){
Core.camera.position.set(state.teams.get(team).cores.first().drawx(), state.teams.get(team).cores.first().drawy()); Core.camera.position.set(state.teams.get(team).cores.first().drawx(), state.teams.get(team).cores.first().drawy());
} }
} }
@@ -140,7 +138,7 @@ public class NetworkIO{
public static ByteBuffer writeServerData(){ public static ByteBuffer writeServerData(){
int maxlen = 32; int maxlen = 32;
String host = (headless ? "Server" : players[0].name); String host = (headless ? "Server" : player.name);
String map = world.getMap() == null ? "None" : world.getMap().name(); String map = world.getMap() == null ? "None" : world.getMap().name();
host = host.substring(0, Math.min(host.length(), maxlen)); host = host.substring(0, Math.min(host.length(), maxlen));

View File

@@ -72,7 +72,7 @@ public class Weapon{
if(player == null) return; if(player == null) return;
//clients do not see their own shoot events: they are simulated completely clientside to prevent laggy visuals //clients do not see their own shoot events: they are simulated completely clientside to prevent laggy visuals
//messing with the firerate or any other stats does not affect the server (take that, script kiddies!) //messing with the firerate or any other stats does not affect the server (take that, script kiddies!)
if(Net.client() && player == Vars.players[0]){ if(Net.client() && player == Vars.player){
return; return;
} }

View File

@@ -7,12 +7,11 @@ import io.anuke.arc.function.Consumer;
import io.anuke.arc.function.Supplier; import io.anuke.arc.function.Supplier;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.Structs;
import io.anuke.mindustry.content.Loadouts; import io.anuke.mindustry.content.Loadouts;
import io.anuke.mindustry.content.StatusEffects;
import io.anuke.mindustry.game.EventType.ZoneCompleteEvent;
import io.anuke.mindustry.game.EventType.ZoneConfigureCompleteEvent; import io.anuke.mindustry.game.EventType.ZoneConfigureCompleteEvent;
import io.anuke.mindustry.game.EventType.ZoneRequireCompleteEvent;
import io.anuke.mindustry.game.Rules; import io.anuke.mindustry.game.Rules;
import io.anuke.mindustry.game.SpawnGroup;
import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.maps.generators.Generator; import io.anuke.mindustry.maps.generators.Generator;
import io.anuke.mindustry.maps.generators.MapGenerator; import io.anuke.mindustry.maps.generators.MapGenerator;
@@ -20,19 +19,18 @@ import io.anuke.mindustry.world.Block;
import java.util.Arrays; import java.util.Arrays;
import static io.anuke.mindustry.Vars.data; import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Vars.state;
public class Zone extends UnlockableContent{ public class Zone extends UnlockableContent{
public final Generator generator; public final Generator generator;
public Block[] blockRequirements = {}; public Block[] blockRequirements = {};
public ItemStack[] itemRequirements = {}; public ZoneRequirement[] zoneRequirements = {};
public Zone[] zoneRequirements = {}; //TODO debug verify resources.
public Item[] resources = {}; public Item[] resources = {};
public Supplier<Rules> rules = Rules::new; public Supplier<Rules> rules = Rules::new;
public boolean alwaysUnlocked; public boolean alwaysUnlocked;
public int conditionWave = Integer.MAX_VALUE; public int conditionWave = Integer.MAX_VALUE;
public int configureWave = 40; public int configureWave = 15;
public int launchPeriod = 10; public int launchPeriod = 10;
public Loadout loadout = Loadouts.basicShard; public Loadout loadout = Loadouts.basicShard;
@@ -45,15 +43,6 @@ public class Zone extends UnlockableContent{
this.generator = generator; this.generator = generator;
} }
protected SpawnGroup bossGroup(UnitType type){
return new SpawnGroup(type){{
begin = configureWave-1;
effect = StatusEffects.boss;
unitScaling = 1;
spacing = configureWave;
}};
}
public boolean isBossWave(int wave){ public boolean isBossWave(int wave){
return wave % configureWave == 0 && wave > 0; return wave % configureWave == 0 && wave > 0;
} }
@@ -79,8 +68,11 @@ public class Zone extends UnlockableContent{
Core.settings.put(name + "-wave", wave); Core.settings.put(name + "-wave", wave);
data.modified(); data.modified();
if(wave == conditionWave + 1){ for(Zone zone : content.zones()){
Events.fire(new ZoneCompleteEvent(this)); ZoneRequirement req = Structs.find(zone.zoneRequirements, f -> f.zone == this);
if(req != null && wave == req.wave + 1){
Events.fire(new ZoneRequireCompleteEvent(zone, this));
}
} }
if(wave == configureWave + 1){ if(wave == configureWave + 1){
@@ -170,4 +162,22 @@ public class Zone extends UnlockableContent{
return ContentType.zone; return ContentType.zone;
} }
public static class ZoneRequirement{
public final Zone zone;
public final int wave;
public ZoneRequirement(Zone zone, int wave){
this.zone = zone;
this.wave = wave;
}
public static ZoneRequirement[] with(Object... objects){
ZoneRequirement[] out = new ZoneRequirement[objects.length/2];
for(int i = 0; i < objects.length; i+= 2){
out[i/2] = new ZoneRequirement((Zone)objects[i], (Integer)objects[i + 1]);
}
return out;
}
}
} }

View File

@@ -237,9 +237,8 @@ public class TreeLayout{
} }
executeShifts(v); executeShifts(v);
float midpoint = (v.children[0].prelim + v.children[v.children.length-1].prelim) / 2f; float midpoint = (v.children[0].prelim + v.children[v.children.length-1].prelim) / 2f;
TreeNode w = leftSibling; if(leftSibling != null){
if(w != null){ v.prelim = leftSibling.prelim + getDistance(v, leftSibling);
v.prelim = w.prelim + getDistance(v, w);
v.mode = v.prelim - midpoint; v.mode = v.prelim - midpoint;
}else{ }else{
v.prelim = midpoint; v.prelim = midpoint;

View File

@@ -27,7 +27,9 @@ public class AboutDialog extends FloatingDialog{
public AboutDialog(){ public AboutDialog(){
super("$about.button"); super("$about.button");
if(!ios){
Contributors.getContributors(out -> contributors = out, Throwable::printStackTrace); Contributors.getContributors(out -> contributors = out, Throwable::printStackTrace);
}
shown(this::setup); shown(this::setup);
onResize(this::setup); onResize(this::setup);

View File

@@ -7,8 +7,8 @@ import io.anuke.arc.scene.ui.Dialog;
import io.anuke.arc.scene.ui.ImageButton; import io.anuke.arc.scene.ui.ImageButton;
import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.scene.ui.layout.Table;
import static io.anuke.mindustry.Vars.player;
import static io.anuke.mindustry.Vars.playerColors; import static io.anuke.mindustry.Vars.playerColors;
import static io.anuke.mindustry.Vars.players;
public class ColorPickDialog extends Dialog{ public class ColorPickDialog extends Dialog{
private Consumer<Color> cons; private Consumer<Color> cons;
@@ -29,7 +29,7 @@ public class ColorPickDialog extends Dialog{
cons.accept(color); cons.accept(color);
hide(); hide();
}).size(48).get(); }).size(48).get();
button.setChecked(players[0].color.equals(color)); button.setChecked(player.color.equals(color));
button.getStyle().imageUpColor = color; button.getStyle().imageUpColor = color;
if(i % 4 == 3){ if(i % 4 == 3){

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