Compare commits

..

63 Commits
v67 ... v69

Author SHA1 Message Date
Anuken
a83c0b2e9a "fixes" 2019-03-31 22:27:11 -04:00
Anuken
8f853c8f18 Back button cleanup 2019-03-31 18:26:52 -04:00
Anuken
b4071f6dcb Merge 2019-03-31 18:24:25 -04:00
Anuken
6b70418861 Cleanup 2019-03-31 18:20:38 -04:00
Anuken
de0235ad94 Sweeping rework 2019-03-31 17:49:15 -04:00
Anuken
c278c632b3 Back button quitting 2019-03-31 13:16:43 -04:00
Anuken
6392330e70 Optimizations / Very broken changes 2019-03-31 13:11:12 -04:00
Anuken
160ae4e244 Fixed startup crashing 2019-03-31 10:37:52 -04:00
Anuken
a6c9bd3182 Class cleanup 2019-03-30 23:23:57 -04:00
Anuken
801eadd8a8 Bugfixes 2019-03-30 19:10:06 -04:00
Anuken
211dab1297 Compilation cleanup 2019-03-30 18:48:54 -04:00
Anuken
0c3b39ffdc Merge branches 'avoidance-optimization' and 'master' of https://github.com/Anuken/Mindustry 2019-03-30 13:52:46 -04:00
Anuken
c31f88a318 Fixes 2019-03-30 13:01:55 -04:00
Anuken
e9eb981782 More optimization / Flying avoidance 2019-03-30 12:54:29 -04:00
Anuken
83bde8a781 Improved avoidance 2019-03-30 12:33:01 -04:00
Anuken
52f352bf94 Fixed nondeterministic drill item sorting 2019-03-30 10:16:48 -04:00
Anuken
b419a96d69 Mech balance / Re-added map screenshot 2019-03-30 00:17:29 -04:00
Anuken
eb3d5b62f5 Tweaks 2019-03-29 22:48:04 -04:00
Anuken
1c5f578d88 Initial implementation 2019-03-29 18:48:03 -04:00
Anuken
db3aae1388 Merge remote-tracking branch 'origin/master' 2019-03-29 18:15:31 -04:00
Anuken
0b08eb72a6 Bugfixes 2019-03-29 18:15:22 -04:00
Skybbles // L5474
cbc81376be pulverizer pulverises scrap not stone (#442) 2019-03-29 13:55:45 -06:00
Anuken
27e9901d05 Removed unused shadow methods; minor tweaks 2019-03-29 09:07:46 -04:00
Anuken
532c36677c Map preview block shadows 2019-03-28 22:23:59 -04:00
Anuken
0c20c6ecb7 Removed greek bundle temporarily, as font does not support it 2019-03-28 20:48:34 -04:00
Anuken
fbb3240ebb Hid 0-damage stat to prevent confusion 2019-03-28 19:20:09 -04:00
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
855957b099 Broke all crafting 2019-03-27 23:24:07 -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
274 changed files with 8237 additions and 7640 deletions

View File

@@ -52,6 +52,11 @@ public class AndroidLauncher extends AndroidApplication{
config.depth = 0; config.depth = 0;
Platform.instance = new Platform(){ Platform.instance = new Platform(){
@Override
public void hide(){
moveTaskToBack(true);
}
@Override @Override
public void openDonations(){ public void openDonations(){
showDonations(); showDonations();
@@ -133,7 +138,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...
@@ -340,63 +342,61 @@ no = No
info.title = Info info.title = Info
error.title = [crimson]An error has occured error.title = [crimson]An error has occured
error.crashtitle = An error has occured error.crashtitle = An error has occured
blocks.outputspeed = Drill Speed: {0}/ blocks.input = Input
blocks.efficiency = Efficiency: {0}% blocks.output = Output
blocks.unknown = [LIGHT_GRAY]??? blocks.booster = Booster
blocks.blockinfo = Block Info block.unknown = [LIGHT_GRAY]???
blocks.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0}
blocks.powercapacity = Power Capacity blocks.powercapacity = Power Capacity
blocks.powershot = Power/Shot blocks.powershot = Power/Shot
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
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
blocks.maxitemssecond = Max Items
blocks.powerrange = Power Range blocks.powerrange = Power Range
blocks.poweruse = Power Use blocks.poweruse = Power Use
blocks.powerdamage = Power/Damage blocks.powerdamage = Power/Damage
blocks.inputitemcapacity = Input Item Capacity
blocks.outputitemcapacity = Output Item Capacity
blocks.itemcapacity = Item Capacity blocks.itemcapacity = Item Capacity
blocks.basepowergeneration = Base Power Generation blocks.basepowergeneration = Base Power Generation
blocks.powertransferspeed = Power Transfer blocks.productiontime = Production Time
blocks.craftspeed = Production Speed blocks.repairtime = Block Full Repair Time
blocks.inputliquid = Input Liquid blocks.speedincrease = Speed Increase
blocks.inputliquidaux = Aux Liquid blocks.range = Range
blocks.inputitem = Input Item
blocks.inputitems = Input Items
blocks.outputitem = Output Item
blocks.drilltier = Drillables blocks.drilltier = Drillables
blocks.drillspeed = Base Drill Speed blocks.drillspeed = Base Drill Speed
blocks.boosteffect = Boost Effect
blocks.maxunits = Max Active Units 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.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.inaccuracy = Inaccuracy
blocks.shots = Shots blocks.shots = Shots
blocks.reload = Shots/Second blocks.reload = Shots/Second
blocks.inputfuel = Fuel
blocks.fuelburntime = Fuel Burn Time
blocks.inputcapacity = Input capacity
blocks.outputcapacity = Output capacity
blocks.ammo = Ammo blocks.ammo = Ammo
bar.drillspeed = Drill Speed: {0}/s
bar.efficiency = Efficiency: {0}%
bar.powerbalance = Power: {0}
bar.poweroutput = Power Output: {0}
bar.items = Items: {0}
bar.liquid = Liquid
bar.heat = Heat
bar.power = Power
bar.progress = Build Progress
bar.spawned = Units: {0}/{1}
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
@@ -405,6 +405,9 @@ unit.liquidunits = liquid units
unit.powerunits = power units unit.powerunits = power units
unit.degrees = degrees unit.degrees = degrees
unit.seconds = seconds unit.seconds = seconds
unit.persecond = /sec
unit.timesspeed = x speed
unit.percent = %
unit.items = items unit.items = items
category.general = General category.general = General
category.power = Power category.power = Power
@@ -413,6 +416,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 +494,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
@@ -532,7 +550,7 @@ liquid.oil.name = Oil
liquid.cryofluid.name = Cryofluid liquid.cryofluid.name = Cryofluid
mech.alpha-mech.name = Alpha mech.alpha-mech.name = Alpha
mech.alpha-mech.weapon = Heavy Repeater mech.alpha-mech.weapon = Heavy Repeater
mech.alpha-mech.ability = None mech.alpha-mech.ability = Regeneration
mech.alpha-mech.description = The standard mech. Has decent speed and damage output. mech.alpha-mech.description = The standard mech. Has decent speed and damage output.
mech.delta-mech.name = Delta mech.delta-mech.name = Delta
mech.delta-mech.weapon = Arc Generator mech.delta-mech.weapon = Arc Generator
@@ -567,9 +585,10 @@ unit.speed = [LIGHT_GRAY]Speed: {0}
mech.weapon = [LIGHT_GRAY]Weapon: {0} mech.weapon = [LIGHT_GRAY]Weapon: {0}
mech.health = [LIGHT_GRAY]Health: {0} mech.health = [LIGHT_GRAY]Health: {0}
mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0} mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0}
mech.minespeed = [LIGHT_GRAY]Mining Speed: {0} mech.minespeed = [LIGHT_GRAY]Mining Speed: {0}%
mech.minepower = [LIGHT_GRAY]Mining Power: {0} mech.minepower = [LIGHT_GRAY]Mining Power: {0}
mech.ability = [LIGHT_GRAY]Ability: {0} mech.ability = [LIGHT_GRAY]Ability: {0}
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0}
liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} liquid.viscosity = [LIGHT_GRAY]Viscosity: {0}
liquid.temperature = [LIGHT_GRAY]Temperature: {0} liquid.temperature = [LIGHT_GRAY]Temperature: {0}
@@ -730,6 +749,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 +765,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
@@ -829,7 +850,7 @@ block.silicon-smelter.description = Reduces sand with highly pure coal in order
block.plastanium-compressor.description = Produces plastanium from oil and titanium. 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.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.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.pulverizer.description = Crushes scrap 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.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.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.cryofluidmixer.description = Combines water and titanium into cryofluid which is much more efficient for cooling.

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...
@@ -333,18 +335,19 @@ no = Ne
info.title = Informace info.title = Informace
error.title = [crimson]Objevila se chyba error.title = [crimson]Objevila se chyba
error.crashtitle = Objevila se chyba error.crashtitle = Objevila se chyba
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Informace o bloku blocks.blockinfo = Informace o bloku
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Kapacita energie blocks.powercapacity = Kapacita energie
blocks.powershot = Energie na výstřel blocks.powershot = Energie na výstřel
blocks.targetsair = Zaměřuje vzdušné jednotky blocks.targetsair = Zaměřuje vzdušné jednotky
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Výstup tekutin
blocks.liquidoutputspeed = Rychlost výstupu tekutin blocks.liquidoutputspeed = Rychlost výstupu tekutin
blocks.liquiduse = Spotřebuje tekutin blocks.liquiduse = Spotřebuje tekutin
blocks.coolant = Chlazení blocks.coolant = Chlazení
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Spotřeba chlazení blocks.coolantuse = Spotřeba chlazení
blocks.inputliquidfuel = Palivo-tekutina blocks.inputliquidfuel = Palivo-tekutina
blocks.liquidfueluse = Spotřeba Paliva-tekutiny blocks.liquidfueluse = Spotřeba Paliva-tekutiny
blocks.boostitem = Předmět pro zrychlení blocks.boostitem = Předmět pro zrychlení
blocks.boostliquid = Tekutina pro zrychlení blocks.boostliquid = Tekutina pro zrychlení
blocks.health = Životy blocks.health = Životy
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Nepřesnost/výchylka blocks.inaccuracy = Nepřesnost/výchylka
blocks.shots = Střely blocks.shots = Střely
@@ -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...
@@ -333,18 +335,19 @@ no = Nein
info.title = [accent]Info info.title = [accent]Info
error.title = [crimson] Ein Fehler ist aufgetreten error.title = [crimson] Ein Fehler ist aufgetreten
error.crashtitle = Ein Fehler ist aufgetreten! error.crashtitle = Ein Fehler ist aufgetreten!
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Blockinfo: blocks.blockinfo = Blockinfo:
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Kapazität blocks.powercapacity = Kapazität
blocks.powershot = Stromverbrauch/Schuss blocks.powershot = Stromverbrauch/Schuss
blocks.targetsair = Visiert Luft Einheiten an blocks.targetsair = Visiert Luft Einheiten an
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Erzeugte Flüssigkeit
blocks.liquidoutputspeed = Ausgabegeschwindigkeit blocks.liquidoutputspeed = Ausgabegeschwindigkeit
blocks.liquiduse = Flüssigkeitsverbrauch blocks.liquiduse = Flüssigkeitsverbrauch
blocks.coolant = Kühlmittel blocks.coolant = Kühlmittel
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Kühlmittelverbrauch blocks.coolantuse = Kühlmittelverbrauch
blocks.inputliquidfuel = Kraftstoff blocks.inputliquidfuel = Kraftstoff
blocks.liquidfueluse = Kraftstoffverbrauch blocks.liquidfueluse = Kraftstoffverbrauch
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Lebenspunkte blocks.health = Lebenspunkte
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Ungenauigkeit blocks.inaccuracy = Ungenauigkeit
blocks.shots = Schüsse blocks.shots = Schüsse
@@ -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

@@ -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...
@@ -333,18 +335,19 @@ no = No
info.title = [accent]Información info.title = [accent]Información
error.title = [crimson]Un error ha ocurrido. error.title = [crimson]Un error ha ocurrido.
error.crashtitle = Un error ha ocurrido. error.crashtitle = Un error ha ocurrido.
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Información del Bloque blocks.blockinfo = Información del Bloque
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Capacidad de Energía blocks.powercapacity = Capacidad de Energía
blocks.powershot = Energía/Disparo blocks.powershot = Energía/Disparo
blocks.targetsair = Apunta al Aire blocks.targetsair = Apunta al Aire
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Líquido de Salida
blocks.liquidoutputspeed = Velocidad de Salida del Líquido blocks.liquidoutputspeed = Velocidad de Salida del Líquido
blocks.liquiduse = Uso de Líquido blocks.liquiduse = Uso de Líquido
blocks.coolant = Refrigerante blocks.coolant = Refrigerante
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Uso del Refrigerante blocks.coolantuse = Uso del Refrigerante
blocks.inputliquidfuel = Combustible Líquido blocks.inputliquidfuel = Combustible Líquido
blocks.liquidfueluse = Uso del Combustible Líquido blocks.liquidfueluse = Uso del Combustible Líquido
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Vida blocks.health = Vida
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Imprecisión blocks.inaccuracy = Imprecisión
blocks.shots = Disparos blocks.shots = Disparos
@@ -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...
@@ -333,18 +335,19 @@ no = Non
info.title = Info info.title = Info
error.title = [crimson]Une erreur s'est produite error.title = [crimson]Une erreur s'est produite
error.crashtitle = Une erreur s'est produite error.crashtitle = Une erreur s'est produite
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Info sur le bloc blocks.blockinfo = Info sur le bloc
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = capacité d'énergie blocks.powercapacity = capacité d'énergie
blocks.powershot = Énergie/Tir blocks.powershot = Énergie/Tir
blocks.targetsair = Cible les unités aériennes blocks.targetsair = Cible les unités aériennes
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Liquide en sortie
blocks.liquidoutputspeed = Vitesse de production de liquide blocks.liquidoutputspeed = Vitesse de production de liquide
blocks.liquiduse = Quantité de liquide utilisée blocks.liquiduse = Quantité de liquide utilisée
blocks.coolant = Liquide de refroidissement blocks.coolant = Liquide de refroidissement
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Quantité de liquide de refroidissement utilisée blocks.coolantuse = Quantité de liquide de refroidissement utilisée
blocks.inputliquidfuel = Carburant liquide blocks.inputliquidfuel = Carburant liquide
blocks.liquidfueluse = Quantité de carburant liquide utilisé blocks.liquidfueluse = Quantité de carburant liquide utilisé
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Santé blocks.health = Santé
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Précision blocks.inaccuracy = Précision
blocks.shots = Tir blocks.shots = Tir
@@ -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...
@@ -333,18 +335,19 @@ no = Non
info.title = Info info.title = Info
error.title = [crimson]Une erreur s'est produite error.title = [crimson]Une erreur s'est produite
error.crashtitle = Une erreur s'est produite error.crashtitle = Une erreur s'est produite
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Info sur le bloc blocks.blockinfo = Info sur le bloc
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Capacité d'énergie blocks.powercapacity = Capacité d'énergie
blocks.powershot = Énergie/Tir blocks.powershot = Énergie/Tir
blocks.targetsair = Cible les unités aériennes blocks.targetsair = Cible les unités aériennes
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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é
@@ -370,17 +375,17 @@ blocks.liquidoutput = Liquide en sortie
blocks.liquidoutputspeed = Vitesse de sortie du liquide blocks.liquidoutputspeed = Vitesse de sortie du liquide
blocks.liquiduse = Quantité de liquide utilisé blocks.liquiduse = Quantité de liquide utilisé
blocks.coolant = Liquide de refroidissement blocks.coolant = Liquide de refroidissement
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Quantité de liquide de refroidissement utilisé blocks.coolantuse = Quantité de liquide de refroidissement utilisé
blocks.inputliquidfuel = Carburant liquide blocks.inputliquidfuel = Carburant liquide
blocks.liquidfueluse = Quantité de carburant liquide utilisé blocks.liquidfueluse = Quantité de carburant liquide utilisé
blocks.boostitem = Objet boostant la production blocks.boostitem = Objet boostant la production
blocks.boostliquid = Liquide boostant la production blocks.boostliquid = Liquide boostant la production
blocks.health = Santé blocks.health = Santé
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Précision blocks.inaccuracy = Précision
blocks.shots = Tirs blocks.shots = Tirs
@@ -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...
@@ -333,18 +335,19 @@ no = No
info.title = [accent]Info info.title = [accent]Info
error.title = [crimson]Telah terjadi kesalahan error.title = [crimson]Telah terjadi kesalahan
error.crashtitle = Telah terjadi kesalahan error.crashtitle = Telah terjadi kesalahan
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Info Blok blocks.blockinfo = Info Blok
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Kapasitas Tenaga blocks.powercapacity = Kapasitas Tenaga
blocks.powershot = Tenaga/tembakan blocks.powershot = Tenaga/tembakan
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use blocks.liquiduse = Liquid Use
blocks.coolant = Coolant blocks.coolant = Coolant
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Coolant Use blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Darah blocks.health = Darah
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Ketidaktelitian blocks.inaccuracy = Ketidaktelitian
blocks.shots = Tembakan blocks.shots = Tembakan
@@ -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...
@@ -333,18 +335,19 @@ no = No
info.title = [accent] Info info.title = [accent] Info
error.title = [crimson]Si è verificato un errore error.title = [crimson]Si è verificato un errore
error.crashtitle = Si è verificato un errore error.crashtitle = Si è verificato un errore
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = info sul blocco blocks.blockinfo = info sul blocco
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Capacità Energetica blocks.powercapacity = Capacità Energetica
blocks.powershot = Danno/Colpo blocks.powershot = Danno/Colpo
blocks.targetsair = Attacca nemici aerei blocks.targetsair = Attacca nemici aerei
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Uscita liquidi
blocks.liquidoutputspeed = Liquid Output Speed blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Uso liquidi blocks.liquiduse = Uso liquidi
blocks.coolant = Refrigerante blocks.coolant = Refrigerante
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = uso refrigerante blocks.coolantuse = uso refrigerante
blocks.inputliquidfuel = carburante liquido blocks.inputliquidfuel = carburante liquido
blocks.liquidfueluse = Utilizzo carburante liquido blocks.liquidfueluse = Utilizzo carburante liquido
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Salute blocks.health = Salute
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Inaccuratezza blocks.inaccuracy = Inaccuratezza
blocks.shots = Colpi blocks.shots = Colpi
@@ -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 = 追加...
@@ -333,18 +335,19 @@ no = いいえ
info.title = 情報 info.title = 情報
error.title = [crimson]エラーが発生しました error.title = [crimson]エラーが発生しました
error.crashtitle = エラーが発生しました error.crashtitle = エラーが発生しました
blocks.outputspeed = 採掘速度: {0}/秒 bar.drillspeed = 採掘速度: {0}/秒
blocks.efficiency = 効率: {0}% bar.efficiency = 効率: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = ブロック情報 blocks.blockinfo = ブロック情報
blocks.powerbalance = 電力: {0} bar.powerbalance = 電力: {0}
blocks.poweroutput = 電力発電量: {0} bar.poweroutput = 電力発電量: {0}
blocks.powercapacity = 電力容量 blocks.powercapacity = 電力容量
blocks.powershot = 電力/ショット blocks.powershot = 電力/ショット
blocks.targetsair = 対空攻撃 blocks.targetsair = 対空攻撃
blocks.targetsground = 対地攻撃 blocks.targetsground = 対地攻撃
blocks.items = アイテム: {0} bar.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 = 必要なアイテム
@@ -370,17 +375,17 @@ blocks.liquidoutput = 搬出液体
blocks.liquidoutputspeed = 液体搬出速度 blocks.liquidoutputspeed = 液体搬出速度
blocks.liquiduse = 液体使用量 blocks.liquiduse = 液体使用量
blocks.coolant = 冷却 blocks.coolant = 冷却
blocks.liquid = 液体 bar.liquid = 液体
blocks.coolantuse = 冷却使用量 blocks.coolantuse = 冷却使用量
blocks.inputliquidfuel = 液体燃料 blocks.inputliquidfuel = 液体燃料
blocks.liquidfueluse = 液体燃料使用量 blocks.liquidfueluse = 液体燃料使用量
blocks.boostitem = 加速アイテム blocks.boostitem = 加速アイテム
blocks.boostliquid = 加速液体 blocks.boostliquid = 加速液体
blocks.health = 耐久値 blocks.health = 耐久値
blocks.heat = bar.heat =
blocks.power = 電力 bar.power = 電力
blocks.progress = 建設状況 bar.progress = 建設状況
blocks.spawned = ユニット数: {0}/{1} bar.spawned = ユニット数: {0}/{1}
blocks.power.satisfaction = 電力需要 blocks.power.satisfaction = 電力需要
blocks.inaccuracy = 精度のずれ blocks.inaccuracy = 精度のずれ
blocks.shots = ショット blocks.shots = ショット
@@ -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 = 추가...
@@ -333,18 +335,19 @@ no = 아니오
info.title = [accent]정보 info.title = [accent]정보
error.title = [crimson]오류가 발생했습니다. error.title = [crimson]오류가 발생했습니다.
error.crashtitle = 오류가 발생했습니다. error.crashtitle = 오류가 발생했습니다.
blocks.outputspeed = 채광 속도: {0}/s bar.outputspeed = 채광 속도: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = 효율성: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = 블록 정보 blocks.blockinfo = 블록 정보
blocks.powerbalance = 전력: {0} bar.powerbalance = 전력: {0}
blocks.poweroutput = 전력 출력: {0} bar.poweroutput = 전력 출력: {0}
blocks.powercapacity = 전력 용량 blocks.powercapacity = 전력 용량
blocks.powershot = 1발당 전력 소모량 blocks.powershot = 1발당 전력 소모량
blocks.targetsair = 공중공격 가능 blocks.targetsair = 공중공격 가능
blocks.targetsground = 지상공격 가능 blocks.targetsground = 지상공격 가능
blocks.items = Items: {0} bar.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 = 사용되는 아이템
@@ -370,17 +375,17 @@ blocks.liquidoutput = 액체 출력
blocks.liquidoutputspeed = 액체 출력속도 blocks.liquidoutputspeed = 액체 출력속도
blocks.liquiduse = 액체 사용량 blocks.liquiduse = 액체 사용량
blocks.coolant = 냉각제 blocks.coolant = 냉각제
blocks.liquid = 액체 bar.liquid = 액체
blocks.coolantuse = 냉각제 사용 blocks.coolantuse = 냉각제 사용
blocks.inputliquidfuel = 연료 액 blocks.inputliquidfuel = 연료 액
blocks.liquidfueluse = 액체 연료 사용 blocks.liquidfueluse = 액체 연료 사용
blocks.boostitem = 가속 아이템 blocks.boostitem = 가속 아이템
blocks.boostliquid = 가속 액체 blocks.boostliquid = 가속 액체
blocks.health = 체력 blocks.health = 체력
blocks.heat = 발열 bar.heat = 발열
blocks.power = 전력 bar.power = 전력
blocks.progress = 건설 진행 bar.progress = 건설 진행
blocks.spawned = 유닛: {0}/{1} bar.spawned = 유닛: {0}/{1}
blocks.power.satisfaction = 전력 만족도 blocks.power.satisfaction = 전력 만족도
blocks.inaccuracy = 오차각 blocks.inaccuracy = 오차각
blocks.shots = 발포 횟수 blocks.shots = 발포 횟수
@@ -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...
@@ -333,18 +335,19 @@ no = No
info.title = Info info.title = Info
error.title = [crimson]An error has occured error.title = [crimson]An error has occured
error.crashtitle = An error has occured error.crashtitle = An error has occured
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Block Info blocks.blockinfo = Block Info
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Power Capacity blocks.powercapacity = Power Capacity
blocks.powershot = Power/Shot blocks.powershot = Power/Shot
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use blocks.liquiduse = Liquid Use
blocks.coolant = Coolant blocks.coolant = Coolant
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Coolant Use blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Health blocks.health = Health
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Inaccuracy blocks.inaccuracy = Inaccuracy
blocks.shots = Shots blocks.shots = Shots
@@ -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...
@@ -333,18 +335,19 @@ no = Nie ma mowy!
info.title = [accent]Informacje info.title = [accent]Informacje
error.title = [crimson]Wystąpił błąd error.title = [crimson]Wystąpił błąd
error.crashtitle = Wystąpił błąd error.crashtitle = Wystąpił błąd
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Informacje o bloku blocks.blockinfo = Informacje o bloku
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Pojemność mocy blocks.powercapacity = Pojemność mocy
blocks.powershot = moc/strzał blocks.powershot = moc/strzał
blocks.targetsair = Może namierzać wrogów powietrznych blocks.targetsair = Może namierzać wrogów powietrznych
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Wyprodukowany płyn
blocks.liquidoutputspeed = Prędkość odpływu cieczy blocks.liquidoutputspeed = Prędkość odpływu cieczy
blocks.liquiduse = Zużycie płynów blocks.liquiduse = Zużycie płynów
blocks.coolant = Płyn chłodzący blocks.coolant = Płyn chłodzący
blocks.liquid = Płyn bar.liquid = Płyn
blocks.coolantuse = Zużycie płynu chłodzącego blocks.coolantuse = Zużycie płynu chłodzącego
blocks.inputliquidfuel = Paliwo blocks.inputliquidfuel = Paliwo
blocks.liquidfueluse = Zużycie paliwa blocks.liquidfueluse = Zużycie paliwa
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Zdrowie blocks.health = Zdrowie
blocks.heat = Heat bar.heat = Heat
blocks.power = Prąd bar.power = Prąd
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Zapotrzebowanie Prądu blocks.power.satisfaction = Zapotrzebowanie Prądu
blocks.inaccuracy = Niedokładność blocks.inaccuracy = Niedokładność
blocks.shots = Strzały blocks.shots = Strzały
@@ -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...
@@ -333,18 +335,19 @@ no = Não
info.title = [accent]Informação info.title = [accent]Informação
error.title = [crimson]Ocorreu um Erro. error.title = [crimson]Ocorreu um Erro.
error.crashtitle = Ocorreu um Erro error.crashtitle = Ocorreu um Erro
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Informação do Bloco blocks.blockinfo = Informação do Bloco
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Capacidade de Energia blocks.powercapacity = Capacidade de Energia
blocks.powershot = Energia/tiro blocks.powershot = Energia/tiro
blocks.targetsair = Mirar no ar blocks.targetsair = Mirar no ar
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Saida de liquido
blocks.liquidoutputspeed = Velocidade da saida de líquido blocks.liquidoutputspeed = Velocidade da saida de líquido
blocks.liquiduse = Uso de liquido blocks.liquiduse = Uso de liquido
blocks.coolant = Esfriador blocks.coolant = Esfriador
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Uso do esfriador blocks.coolantuse = Uso do esfriador
blocks.inputliquidfuel = Liquido de combustivel blocks.inputliquidfuel = Liquido de combustivel
blocks.liquidfueluse = Uso do liquido de combustivel blocks.liquidfueluse = Uso do liquido de combustivel
blocks.boostitem = Acelerar item blocks.boostitem = Acelerar item
blocks.boostliquid = Acelerar líquido blocks.boostliquid = Acelerar líquido
blocks.health = Saúde blocks.health = Saúde
blocks.heat = Heat bar.heat = Heat
blocks.power = Poder bar.power = Poder
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = Imprecisão blocks.inaccuracy = Imprecisão
blocks.shots = Tiros blocks.shots = Tiros
@@ -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 = Добавить...
@@ -333,18 +335,19 @@ no = Нет
info.title = Информация info.title = Информация
error.title = [crimson]Произошла ошибка error.title = [crimson]Произошла ошибка
error.crashtitle = Произошла ошибка error.crashtitle = Произошла ошибка
blocks.outputspeed = Скорость сверления: {0}/с bar.drillspeed = Скорость сверления: {0}/с
blocks.efficiency = Эффективность: {0}% bar.efficiency = Эффективность: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Информация о блоке blocks.blockinfo = Информация о блоке
blocks.powerbalance = Энергия: {0} bar.powerbalance = Энергия: {0}
blocks.poweroutput = Выходная энергия: {0} bar.poweroutput = Выходная энергия: {0}
blocks.powercapacity = Вместимость энергии blocks.powercapacity = Вместимость энергии
blocks.powershot = Энергия/выстрел blocks.powershot = Энергия/выстрел
blocks.targetsair = Воздушные цели blocks.targetsair = Воздушные цели
blocks.targetsground = Наземные цели blocks.targetsground = Наземные цели
blocks.items = Предметы: {0} bar.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 = Входящий предмет
@@ -370,17 +375,17 @@ blocks.liquidoutput = Выходящая жидкость
blocks.liquidoutputspeed = Выходная скорость жидкости blocks.liquidoutputspeed = Выходная скорость жидкости
blocks.liquiduse = Используется жидкости blocks.liquiduse = Используется жидкости
blocks.coolant = Охлаждающая жидкость blocks.coolant = Охлаждающая жидкость
blocks.liquid = Жидкость bar.liquid = Жидкость
blocks.coolantuse = Охлажд. жидкости используется blocks.coolantuse = Охлажд. жидкости используется
blocks.inputliquidfuel = Жидкое топливо blocks.inputliquidfuel = Жидкое топливо
blocks.liquidfueluse = Жидкого топлива используется blocks.liquidfueluse = Жидкого топлива используется
blocks.boostitem = Ускоряющий предмет blocks.boostitem = Ускоряющий предмет
blocks.boostliquid = Ускоряющая жидкость blocks.boostliquid = Ускоряющая жидкость
blocks.health = Здоровье blocks.health = Здоровье
blocks.heat = Температура bar.heat = Температура
blocks.power = Энергия bar.power = Энергия
blocks.progress = Строительство продолжается bar.progress = Строительство продолжается
blocks.spawned = Бой. ед.: {0}/{1} bar.spawned = Бой. ед.: {0}/{1}
blocks.power.satisfaction = Энергия blocks.power.satisfaction = Энергия
blocks.inaccuracy = Разброс blocks.inaccuracy = Разброс
blocks.shots = Выстрелы blocks.shots = Выстрелы
@@ -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...
@@ -333,18 +335,19 @@ no = Hayir
info.title = [accent]Bilgi info.title = [accent]Bilgi
error.title = [crimson]Bir hata olustu error.title = [crimson]Bir hata olustu
error.crashtitle = Bir hata olustu error.crashtitle = Bir hata olustu
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Yapi bilgisi blocks.blockinfo = Yapi bilgisi
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Guc kapasitesi blocks.powercapacity = Guc kapasitesi
blocks.powershot = Guc/Saldiri hizi blocks.powershot = Guc/Saldiri hizi
blocks.targetsair = Havayi hedef alir mi? blocks.targetsair = Havayi hedef alir mi?
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Sivi cikisi
blocks.liquidoutputspeed = Liquid Output Speed blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Sivi kullanimi blocks.liquiduse = Sivi kullanimi
blocks.coolant = Sogutma sivisi blocks.coolant = Sogutma sivisi
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Sogutma sivi kullanimi blocks.coolantuse = Sogutma sivi kullanimi
blocks.inputliquidfuel = Yakit sivisi blocks.inputliquidfuel = Yakit sivisi
blocks.liquidfueluse = Sivi yakit kullanimi blocks.liquidfueluse = Sivi yakit kullanimi
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Can blocks.health = Can
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = sekme blocks.inaccuracy = sekme
blocks.shots = vuruslar blocks.shots = vuruslar
@@ -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...
@@ -333,18 +335,19 @@ no = No
info.title = [Vurgu] Bilgi info.title = [Vurgu] Bilgi
error.title = [crimson] Bir hata oluştu error.title = [crimson] Bir hata oluştu
error.crashtitle = Bir hata oluştu error.crashtitle = Bir hata oluştu
blocks.outputspeed = Drill Speed: {0}/s bar.drillspeed = Drill Speed: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = Efficiency: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Blok Bilgisi blocks.blockinfo = Blok Bilgisi
blocks.powerbalance = Power: {0} bar.powerbalance = Power: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = Power Output: {0}
blocks.powercapacity = Güç kapasitesi blocks.powercapacity = Güç kapasitesi
blocks.powershot = Güç / atış blocks.powershot = Güç / atış
blocks.targetsair = Targets Air blocks.targetsair = Targets Air
blocks.targetsground = Targets Ground blocks.targetsground = Targets Ground
blocks.items = Items: {0} bar.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
@@ -370,17 +375,17 @@ blocks.liquidoutput = Liquid Output
blocks.liquidoutputspeed = Liquid Output Speed blocks.liquidoutputspeed = Liquid Output Speed
blocks.liquiduse = Liquid Use blocks.liquiduse = Liquid Use
blocks.coolant = Coolant blocks.coolant = Coolant
blocks.liquid = Liquid bar.liquid = Liquid
blocks.coolantuse = Coolant Use blocks.coolantuse = Coolant Use
blocks.inputliquidfuel = Fuel Liquid blocks.inputliquidfuel = Fuel Liquid
blocks.liquidfueluse = Liquid Fuel Use blocks.liquidfueluse = Liquid Fuel Use
blocks.boostitem = Boost Item blocks.boostitem = Boost Item
blocks.boostliquid = Boost Liquid blocks.boostliquid = Boost Liquid
blocks.health = Can blocks.health = Can
blocks.heat = Heat bar.heat = Heat
blocks.power = Power bar.power = Power
blocks.progress = Build Progress bar.progress = Build Progress
blocks.spawned = Units: {0}/{1} bar.spawned = Units: {0}/{1}
blocks.power.satisfaction = Power Satisfaction blocks.power.satisfaction = Power Satisfaction
blocks.inaccuracy = yanlışlık blocks.inaccuracy = yanlışlık
blocks.shots = atışlar blocks.shots = atışlar
@@ -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 = Додати...
@@ -333,18 +335,19 @@ no = Ні
info.title = Інформація info.title = Інформація
error.title = [crimson]Виникла помилка error.title = [crimson]Виникла помилка
error.crashtitle = Виникла помилка error.crashtitle = Виникла помилка
blocks.outputspeed = Швидкість свердління: {0}/с bar.drillspeed = Швидкість свердління: {0}/с
blocks.efficiency = Ефективність: {0}% bar.efficiency = Ефективність: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = Інформація про блок blocks.blockinfo = Інформація про блок
blocks.powerbalance = Енергія: {0} bar.powerbalance = Енергія: {0}
blocks.poweroutput = Вихідна енергія: {0} bar.poweroutput = Вихідна енергія: {0}
blocks.powercapacity = Місткість енергії blocks.powercapacity = Місткість енергії
blocks.powershot = Енергія/постріл blocks.powershot = Енергія/постріл
blocks.targetsair = Повітряні мішені blocks.targetsair = Повітряні мішені
blocks.targetsground = Наземні мішені blocks.targetsground = Наземні мішені
blocks.items = Предмети: {0} bar.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 = Вхідний предмет
@@ -370,17 +375,17 @@ blocks.liquidoutput = Вихідна рідина
blocks.liquidoutputspeed = Швидкість вихідної рідини blocks.liquidoutputspeed = Швидкість вихідної рідини
blocks.liquiduse = Використовуеться рідин blocks.liquiduse = Використовуеться рідин
blocks.coolant = Охолоджуюча рідина blocks.coolant = Охолоджуюча рідина
blocks.liquid = Рідина bar.liquid = Рідина
blocks.coolantuse = Охолодж. рідини використовуеться blocks.coolantuse = Охолодж. рідини використовуеться
blocks.inputliquidfuel = Рідке паливо blocks.inputliquidfuel = Рідке паливо
blocks.liquidfueluse = Рідкого палива використовуеться blocks.liquidfueluse = Рідкого палива використовуеться
blocks.boostitem = Прискорюючий предмет blocks.boostitem = Прискорюючий предмет
blocks.boostliquid = Прискорююча рідина blocks.boostliquid = Прискорююча рідина
blocks.health = Здоров'я blocks.health = Здоров'я
blocks.heat = Температура bar.heat = Температура
blocks.power = Енергія bar.power = Енергія
blocks.progress = Будівництво триває bar.progress = Будівництво триває
blocks.spawned = Бой. од.: {0}/{1} bar.spawned = Бой. од.: {0}/{1}
blocks.power.satisfaction = Енергія blocks.power.satisfaction = Енергія
blocks.inaccuracy = Розкид blocks.inaccuracy = Розкид
blocks.shots = Постріли blocks.shots = Постріли
@@ -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 bar.drillspeed = 挖掘速度: {0}/s
blocks.efficiency = Efficiency: {0}% bar.efficiency = 效率: {0}%
blocks.unknown = [LIGHT_GRAY]??? block.unknown = [LIGHT_GRAY]???
blocks.blockinfo = 方块详情 blocks.blockinfo = 方块详情
blocks.powerbalance = Power: {0} bar.powerbalance = 能量: {0}
blocks.poweroutput = Power Output: {0} bar.poweroutput = 能量输出: {0}
blocks.powercapacity = 能量容量 blocks.powercapacity = 能量容量
blocks.powershot = 能量/发射 blocks.powershot = 能量/发射
blocks.targetsair = 攻击空中单位 blocks.targetsair = 攻击空中单位
blocks.targetsground = Targets Ground blocks.targetsground = 攻击地面单位
blocks.items = Items: {0} bar.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,23 +370,22 @@ 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 bar.liquid = 液体
blocks.coolantuse = 冷却剂使用速度 blocks.coolantuse = 冷却剂使用速度
blocks.inputliquidfuel = 液体燃料输入 blocks.inputliquidfuel = 液体燃料输入
blocks.liquidfueluse = 液体燃料使用速度 blocks.liquidfueluse = 液体燃料使用速度
blocks.boostitem = 强化物件 blocks.boostitem = 强化物件
blocks.boostliquid = 强化液体 blocks.boostliquid = 强化液体
blocks.health = 生命值 blocks.health = 生命值
blocks.heat = Heat bar.heat = Heat
blocks.power = 电力 bar.power = 电力
blocks.progress = Build Progress bar.progress = 制造进度
blocks.spawned = Units: {0}/{1} bar.spawned = 单位数量: {0}/{1}
blocks.power.satisfaction = 电力见面
blocks.inaccuracy = 误差 blocks.inaccuracy = 误差
blocks.shots = 发射数 blocks.shots = 发射数
blocks.reload = 重新装弹 blocks.reload = 重新装弹
@@ -390,6 +394,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 +421,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 +468,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 +499,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 +522,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 +535,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 +577,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 +586,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 +611,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 +655,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 +664,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 +683,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 +732,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 +750,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 +764,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 +779,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 +789,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 +830,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 +857,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 = 重新綁定
@@ -340,18 +335,19 @@ no = 否
info.title = [accent]資訊 info.title = [accent]資訊
error.title = [crimson]發生錯誤 error.title = [crimson]發生錯誤
error.crashtitle = 發生錯誤 error.crashtitle = 發生錯誤
blocks.outputspeed = 鑽頭速度:{0}/秒 bar.drillspeed = 鑽頭速度:{0}/秒
blocks.efficiency = 效率:{0}% bar.efficiency = 效率:{0}%
blocks.unknown = [LIGHT_GRAY] block.unknown = [LIGHT_GRAY]
blocks.blockinfo = 方塊資訊 blocks.blockinfo = 方塊資訊
blocks.powerbalance = 能量變化:{0} bar.powerbalance = 能量變化:{0}
blocks.poweroutput = 能量輸出:{0} bar.poweroutput = 能量輸出:{0}
blocks.powercapacity = 蓄電量 blocks.powercapacity = 蓄電量
blocks.powershot = 能量/射擊 blocks.powershot = 能量/射擊
blocks.targetsair = 攻擊空中目標 blocks.targetsair = 攻擊空中目標
blocks.targetsground = 攻擊地面 blocks.targetsground = 攻擊地面
blocks.items = 物品:{0} bar.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 = 輸入物品
@@ -377,17 +375,17 @@ blocks.liquidoutput = 輸出液體
blocks.liquidoutputspeed = 輸出液體速度 blocks.liquidoutputspeed = 輸出液體速度
blocks.liquiduse = 使用液體速度 blocks.liquiduse = 使用液體速度
blocks.coolant = 冷卻劑 blocks.coolant = 冷卻劑
blocks.liquid = 液體 bar.liquid = 液體
blocks.coolantuse = 使用冷卻劑 blocks.coolantuse = 使用冷卻劑
blocks.inputliquidfuel = 輸入液體燃料 blocks.inputliquidfuel = 輸入液體燃料
blocks.liquidfueluse = 使用液體燃料速度 blocks.liquidfueluse = 使用液體燃料速度
blocks.boostitem = 強化物品 blocks.boostitem = 強化物品
blocks.boostliquid = 強化液體 blocks.boostliquid = 強化液體
blocks.health = 耐久度 blocks.health = 耐久度
blocks.heat = bar.heat =
blocks.power = 能量 bar.power = 能量
blocks.progress = 建造進度 bar.progress = 建造進度
blocks.spawned = 單位:{0}/{1} bar.spawned = 單位:{0}/{1}
blocks.power.satisfaction = 能量滿意度 blocks.power.satisfaction = 能量滿意度
blocks.inaccuracy = 誤差 blocks.inaccuracy = 誤差
blocks.shots = 射擊數 blocks.shots = 射擊數
@@ -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

@@ -3,11 +3,17 @@ package io.anuke.mindustry.content;
import io.anuke.arc.Core; 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.Lines;
import io.anuke.arc.graphics.g2d.TextureRegion; import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.game.ContentList; import io.anuke.mindustry.game.ContentList;
import io.anuke.mindustry.graphics.CacheLayer; import io.anuke.mindustry.graphics.CacheLayer;
import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.type.Category; import io.anuke.mindustry.type.Category;
import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.LiquidStack;
import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.blocks.*;
@@ -24,9 +30,9 @@ import io.anuke.mindustry.world.blocks.storage.Vault;
import io.anuke.mindustry.world.blocks.units.MechPad; import io.anuke.mindustry.world.blocks.units.MechPad;
import io.anuke.mindustry.world.blocks.units.RepairPoint; import io.anuke.mindustry.world.blocks.units.RepairPoint;
import io.anuke.mindustry.world.blocks.units.UnitFactory; import io.anuke.mindustry.world.blocks.units.UnitFactory;
import io.anuke.mindustry.world.consumers.ConsumeItemFilter;
import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter; import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter;
import io.anuke.mindustry.world.meta.Attribute; import io.anuke.mindustry.world.meta.Attribute;
import io.anuke.mindustry.world.modules.LiquidModule;
import static io.anuke.mindustry.Vars.state; import static io.anuke.mindustry.Vars.state;
import static io.anuke.mindustry.Vars.world; import static io.anuke.mindustry.Vars.world;
@@ -53,7 +59,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 +75,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,
@@ -87,6 +93,7 @@ public class Blocks implements ContentList{
air = new Floor("air"){{ air = new Floor("air"){{
alwaysReplace = true; alwaysReplace = true;
hasShadow = false;
} }
public void draw(Tile tile){} public void draw(Tile tile){}
@@ -199,6 +206,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 +252,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 +360,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
@@ -369,7 +377,7 @@ public class Blocks implements ContentList{
requirements(Category.crafting, ItemStack.with(Items.copper, 150, Items.lead, 60)); requirements(Category.crafting, ItemStack.with(Items.copper, 150, Items.lead, 60));
craftEffect = Fx.pulverizeMedium; craftEffect = Fx.pulverizeMedium;
output = Items.graphite; outputItem = new ItemStack(Items.graphite, 1);
craftTime = 90f; craftTime = 90f;
size = 2; size = 2;
hasItems = true; hasItems = true;
@@ -381,7 +389,7 @@ public class Blocks implements ContentList{
requirements(Category.crafting, ItemStack.with(Items.titanium, 200, Items.silicon, 50, Items.lead, 200, Items.graphite, 100)); requirements(Category.crafting, ItemStack.with(Items.titanium, 200, Items.silicon, 50, Items.lead, 200, Items.graphite, 100));
craftEffect = Fx.pulverizeMedium; craftEffect = Fx.pulverizeMedium;
output = Items.graphite; outputItem = new ItemStack(Items.graphite, 2);
craftTime = 30f; craftTime = 30f;
size = 3; size = 3;
hasItems = true; hasItems = true;
@@ -389,14 +397,14 @@ public class Blocks implements ContentList{
hasPower = true; hasPower = true;
consumes.power(2f); consumes.power(2f);
consumes.item(Items.coal, 2); consumes.item(Items.coal, 4);
consumes.liquid(Liquids.water, 0.1f); consumes.liquid(Liquids.water, 0.1f);
}}; }};
siliconSmelter = new PowerSmelter("silicon-smelter"){{ siliconSmelter = new GenericSmelter("silicon-smelter"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50)); requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.silicon; outputItem = new ItemStack(Items.silicon, 1);
craftTime = 40f; craftTime = 40f;
size = 2; size = 2;
hasLiquids = false; hasLiquids = false;
@@ -406,10 +414,10 @@ public class Blocks implements ContentList{
consumes.power(0.50f); consumes.power(0.50f);
}}; }};
kiln = new PowerSmelter("kiln"){{ kiln = new GenericSmelter("kiln"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 120, Items.graphite, 60, Items.lead, 60)); requirements(Category.crafting, ItemStack.with(Items.copper, 120, Items.graphite, 60, Items.lead, 60));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.metaglass; outputItem = new ItemStack(Items.metaglass, 1);
craftTime = 30f; craftTime = 30f;
size = 2; size = 2;
hasPower = hasItems = true; hasPower = hasItems = true;
@@ -419,12 +427,12 @@ public class Blocks implements ContentList{
consumes.power(0.60f); consumes.power(0.60f);
}}; }};
plastaniumCompressor = new PlastaniumCompressor("plastanium-compressor"){{ plastaniumCompressor = new GenericCrafter("plastanium-compressor"){{
requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 230, Items.graphite, 120, Items.titanium, 160)); requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 230, Items.graphite, 120, Items.titanium, 160));
hasItems = true; hasItems = true;
liquidCapacity = 60f; liquidCapacity = 60f;
craftTime = 60f; craftTime = 60f;
output = Items.plastanium; outputItem = new ItemStack(Items.plastanium, 1);
size = 2; size = 2;
health = 320; health = 320;
hasPower = hasLiquids = true; hasPower = hasLiquids = true;
@@ -434,23 +442,69 @@ public class Blocks implements ContentList{
consumes.liquid(Liquids.oil, 0.25f); consumes.liquid(Liquids.oil, 0.25f);
consumes.power(3f); consumes.power(3f);
consumes.item(Items.titanium, 2); consumes.item(Items.titanium, 2);
int topRegion = reg("-top");
drawer = tile -> {
super.draw(tile);
GenericCrafterEntity entity = tile.entity();
Draw.alpha(Mathf.absin(entity.totalProgress, 3f, 0.9f) * entity.warmup);
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
Draw.reset();
};
}}; }};
phaseWeaver = new PhaseWeaver("phase-weaver"){{ phaseWeaver = new GenericCrafter("phase-weaver"){{
requirements(Category.crafting, ItemStack.with(Items.silicon, 260, Items.lead, 240, Items.thorium, 150)); requirements(Category.crafting, ItemStack.with(Items.silicon, 260, Items.lead, 240, Items.thorium, 150));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.phasefabric; outputItem = new ItemStack(Items.phasefabric, 1);
craftTime = 120f; craftTime = 120f;
size = 2; size = 2;
consumes.items(new ItemStack(Items.thorium, 4), new ItemStack(Items.sand, 10)); consumes.items(new ItemStack(Items.thorium, 4), new ItemStack(Items.sand, 10));
consumes.power(5f); consumes.power(5f);
int bottomRegion = reg("-bottom"), weaveRegion = reg("-weave");
drawer = tile -> {
GenericCrafterEntity entity = tile.entity();
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy());
float progress = 0.5f;
Shaders.build.region = reg(weaveRegion);
Shaders.build.progress = progress;
Shaders.build.color.set(Pal.accent);
Shaders.build.color.a = entity.warmup;
Shaders.build.time = -entity.totalProgress / 10f;
Draw.shader(Shaders.build, false);
Shaders.build.apply();
Draw.rect(reg(weaveRegion), tile.drawx(), tile.drawy(), entity.totalProgress);
Draw.shader();
Draw.color(Pal.accent);
Draw.alpha(entity.warmup);
Lines.lineAngleCenter(
tile.drawx() + Mathf.sin(entity.totalProgress, 6f, Vars.tilesize / 3f * size),
tile.drawy(),
90,
size * Vars.tilesize / 2f);
Draw.reset();
Draw.rect(region, tile.drawx(), tile.drawy());
};
}}; }};
surgeSmelter = new PowerSmelter("alloy-smelter"){{ surgeSmelter = new GenericSmelter("alloy-smelter"){{
requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 160, Items.thorium, 140)); requirements(Category.crafting, ItemStack.with(Items.silicon, 160, Items.lead, 160, Items.thorium, 140));
craftEffect = Fx.smeltsmoke; craftEffect = Fx.smeltsmoke;
output = Items.surgealloy; outputItem = new ItemStack(Items.surgealloy, 1);
craftTime = 75f; craftTime = 75f;
size = 3; size = 3;
@@ -458,35 +512,60 @@ public class Blocks implements ContentList{
consumes.items(new ItemStack(Items.titanium, 2), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.copper, 3)); consumes.items(new ItemStack(Items.titanium, 2), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.copper, 3));
}}; }};
cryofluidMixer = new LiquidMixer("cryofluidmixer"){{ cryofluidMixer = new GenericCrafter("cryofluidmixer"){{
requirements(Category.crafting, ItemStack.with(Items.lead, 130, Items.silicon, 80, Items.thorium, 90)); requirements(Category.crafting, ItemStack.with(Items.lead, 130, Items.silicon, 80, Items.thorium, 90));
outputLiquid = Liquids.cryofluid; outputLiquid = new LiquidStack(Liquids.cryofluid, 0.3f);
liquidPerItem = 50f; craftTime = 5f;
size = 2; size = 2;
hasPower = true; hasPower = true;
hasItems = true;
rotate = false;
solid = true;
outputsLiquid = true;
consumes.power(1f); consumes.power(1f);
consumes.item(Items.titanium); consumes.item(Items.titanium);
consumes.liquid(Liquids.water, 0.3f); consumes.liquid(Liquids.water, 0.3f);
int liquidRegion = reg("-liquid"), topRegion = reg("-top"), bottomRegion = reg("-bottom");
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name + "-top")};
drawer = tile -> {
LiquidModule mod = tile.entity.liquids;
int rotation = rotate ? tile.getRotation() * 90 : 0;
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy(), rotation);
if(mod.total() > 0.001f){
Draw.color(outputLiquid.liquid.color);
Draw.alpha(mod.get(outputLiquid.liquid) / liquidCapacity);
Draw.rect(reg(liquidRegion), tile.drawx(), tile.drawy(), rotation);
Draw.color();
}
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy(), rotation);
};
}}; }};
blastMixer = new GenericCrafter("blast-mixer"){{ blastMixer = new GenericCrafter("blast-mixer"){{
requirements(Category.crafting, ItemStack.with(Items.lead, 60, Items.titanium, 40)); requirements(Category.crafting, ItemStack.with(Items.lead, 60, Items.titanium, 40));
hasItems = true; hasItems = true;
hasPower = true; hasPower = true;
output = Items.blastCompound; outputItem = new ItemStack(Items.blastCompound, 1);
size = 2; size = 2;
consumes.items(new ItemStack(Items.pyratite, 1), new ItemStack(Items.sporePod, 1)); consumes.items(new ItemStack(Items.pyratite, 1), new ItemStack(Items.sporePod, 1));
consumes.power(0.40f); consumes.power(0.40f);
}}; }};
pyratiteMixer = new PowerSmelter("pyratite-mixer"){{ pyratiteMixer = new GenericSmelter("pyratite-mixer"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 100, Items.lead, 50)); requirements(Category.crafting, ItemStack.with(Items.copper, 100, Items.lead, 50));
flameColor = Color.CLEAR; flameColor = Color.CLEAR;
hasItems = true; hasItems = true;
hasPower = true; hasPower = true;
output = Items.pyratite; outputItem = new ItemStack(Items.pyratite, 1);
size = 2; size = 2;
@@ -494,11 +573,10 @@ public class Blocks implements ContentList{
consumes.items(new ItemStack(Items.coal, 1), new ItemStack(Items.lead, 2), new ItemStack(Items.sand, 2)); consumes.items(new ItemStack(Items.coal, 1), new ItemStack(Items.lead, 2), new ItemStack(Items.sand, 2));
}}; }};
melter = new PowerCrafter("melter"){{ melter = new GenericCrafter("melter"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 70, Items.graphite, 90)); requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 70, Items.graphite, 90));
health = 200; health = 200;
outputLiquid = Liquids.slag; outputLiquid = new LiquidStack(Liquids.slag, 2f);
outputLiquidAmount = 2f;
craftTime = 10f; craftTime = 10f;
hasLiquids = hasPower = true; hasLiquids = hasPower = true;
@@ -515,7 +593,7 @@ public class Blocks implements ContentList{
Items.titanium, 2 Items.titanium, 2
); );
hasPower = true; hasPower = true;
filterTime = 35f; craftTime = 35f;
spinnerLength = 1.5f; spinnerLength = 1.5f;
spinnerRadius = 3.5f; spinnerRadius = 3.5f;
spinnerThickness = 1.5f; spinnerThickness = 1.5f;
@@ -528,8 +606,8 @@ 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; outputItem = new ItemStack(Items.sporePod, 1);
craftTime = 200; craftTime = 160;
size = 2; size = 2;
hasLiquids = true; hasLiquids = true;
hasPower = true; hasPower = true;
@@ -539,23 +617,41 @@ public class Blocks implements ContentList{
consumes.liquid(Liquids.water, 0.15f); consumes.liquid(Liquids.water, 0.15f);
}}; }};
sporePress = new Compressor("spore-press"){{ sporePress = new GenericCrafter("spore-press"){{
requirements(Category.crafting, ItemStack.with(Items.lead, 70, Items.silicon, 60)); requirements(Category.crafting, ItemStack.with(Items.lead, 70, Items.silicon, 60));
liquidCapacity = 60f; liquidCapacity = 60f;
craftTime = 20f; craftTime = 20f;
outputLiquid = Liquids.oil; outputLiquid = new LiquidStack(Liquids.oil, 4f);
outputLiquidAmount = 2.5f;
size = 2; size = 2;
health = 320; health = 320;
hasLiquids = true; hasLiquids = true;
consumes.item(Items.sporePod, 1); consumes.item(Items.sporePod, 1);
consumes.power(0.60f); consumes.power(0.60f);
int[] frameRegions = new int[3];
for(int i = 0; i < 3; i++){
frameRegions[i] = reg("-frame" + i);
}
int liquidRegion = reg("-liquid");
int topRegion =reg("-top");
drawer = tile -> {
GenericCrafterEntity entity = tile.entity();
Draw.rect(region, tile.drawx(), tile.drawy());
Draw.rect(reg(frameRegions[(int) Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
Draw.color(Color.CLEAR, tile.entity.liquids.current().color, tile.entity.liquids.total() / liquidCapacity);
Draw.rect(reg(liquidRegion), tile.drawx(), tile.drawy());
Draw.color();
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
};
}}; }};
pulverizer = new Pulverizer("pulverizer"){{ pulverizer = new GenericCrafter("pulverizer"){{
requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50)); requirements(Category.crafting, ItemStack.with(Items.copper, 60, Items.lead, 50));
output = Items.sand; outputItem = new ItemStack(Items.sand, 1);
craftEffect = Fx.pulverize; craftEffect = Fx.pulverize;
craftTime = 40f; craftTime = 40f;
updateEffect = Fx.pulverizeSmall; updateEffect = Fx.pulverizeSmall;
@@ -563,6 +659,15 @@ public class Blocks implements ContentList{
consumes.item(Items.scrap, 1); consumes.item(Items.scrap, 1);
consumes.power(0.50f); consumes.power(0.50f);
int rotatorRegion = reg("-rotator");
drawer = tile -> {
GenericCrafterEntity entity = tile.entity();
Draw.rect(region, tile.drawx(), tile.drawy());
Draw.rect(reg(rotatorRegion), tile.drawx(), tile.drawy(), entity.totalProgress * 2f);
};
}}; }};
incinerator = new Incinerator("incinerator"){{ incinerator = new Incinerator("incinerator"){{
@@ -598,7 +703,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 +800,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);
}}; }};
@@ -706,17 +828,18 @@ public class Blocks implements ContentList{
requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 150, Items.plastanium, 60)); requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 150, Items.plastanium, 60));
consumes.power(3.50f); consumes.power(3.50f);
size = 2; size = 2;
consumes.item(Items.phasefabric).optional(true).boost(true); consumes.item(Items.phasefabric).optional(true);
}}; }};
forceProjector = new ForceProjector("force-projector"){{ forceProjector = new ForceProjector("force-projector"){{
requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 250)); requirements(Category.effect, ItemStack.with(Items.lead, 200, Items.titanium, 150, Items.silicon, 250));
size = 3; size = 3;
consumes.item(Items.phasefabric).optional(true).boost(true); consumes.item(Items.phasefabric).optional(true);
}}; }};
shockMine = new ShockMine("shock-mine"){{ shockMine = new ShockMine("shock-mine"){{
requirements(Category.effect, ItemStack.with(Items.lead, 50, Items.silicon, 25)); requirements(Category.effect, ItemStack.with(Items.lead, 50, Items.silicon, 25));
hasShadow = false;
health = 40; health = 40;
damage = 11; damage = 11;
tileDamage = 7f; tileDamage = 7f;
@@ -736,7 +859,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"){{
@@ -901,7 +1024,7 @@ public class Blocks implements ContentList{
size = 2; size = 2;
}}; }};
turbineGenerator = new TurbineGenerator("turbine-generator"){{ turbineGenerator = new BurnerGenerator("turbine-generator"){{
requirements(Category.power, ItemStack.with(Items.copper, 70, Items.graphite, 50, Items.lead, 80, Items.silicon, 60)); requirements(Category.power, ItemStack.with(Items.copper, 70, Items.graphite, 50, Items.lead, 80, Items.silicon, 60));
powerProduction = 6f; powerProduction = 6f;
itemDuration = 30f; itemDuration = 30f;
@@ -910,15 +1033,15 @@ public class Blocks implements ContentList{
size = 2; size = 2;
}}; }};
differentialGenerator = new DifferentialGenerator("differential-generator"){{ differentialGenerator = new ItemLiquidGenerator(true, true, "differential-generator"){{
requirements(Category.power, ItemStack.with(Items.copper, 140, Items.titanium, 100, Items.lead, 200, Items.silicon, 130, Items.metaglass, 100)); requirements(Category.power, ItemStack.with(Items.copper, 140, Items.titanium, 100, Items.lead, 200, Items.silicon, 130, Items.metaglass, 100));
powerProduction = 13f; powerProduction = 13f;
itemDuration = 50f; itemDuration = 50f;
consumes.remove(ConsumeItemFilter.class); hasLiquids = true;
consumes.remove(ConsumeLiquidFilter.class); size = 3;
consumes.item(Items.pyratite); consumes.item(Items.pyratite);
consumes.liquid(Liquids.cryofluid, 0.2f); consumes.liquid(Liquids.cryofluid, 0.2f);
size = 3;
}}; }};
rtgGenerator = new DecayGenerator("rtg-generator"){{ rtgGenerator = new DecayGenerator("rtg-generator"){{
@@ -953,7 +1076,7 @@ public class Blocks implements ContentList{
size = 4; size = 4;
health = 900; health = 900;
powerProduction = 80f; powerProduction = 80f;
useTime = 40f; itemDuration = 40f;
consumes.power(23f); consumes.power(23f);
consumes.item(Items.blastCompound); consumes.item(Items.blastCompound);
consumes.liquid(Liquids.cryofluid, 0.8f); consumes.liquid(Liquids.cryofluid, 0.8f);
@@ -968,6 +1091,7 @@ public class Blocks implements ContentList{
drillTime = 600; drillTime = 600;
size = 2; size = 2;
drawMineItem = true; drawMineItem = true;
consumes.liquid(Liquids.water, 0.05f).optional(true);
}}; }};
pneumaticDrill = new Drill("pneumatic-drill"){{ pneumaticDrill = new Drill("pneumatic-drill"){{
@@ -1078,12 +1202,12 @@ public class Blocks implements ContentList{
}}; }};
unloader = new Unloader("unloader"){{ unloader = new Unloader("unloader"){{
requirements(Category.distribution, ItemStack.with(Items.titanium, 50, Items.silicon, 60)); requirements(Category.effect, ItemStack.with(Items.titanium, 50, Items.silicon, 60));
speed = 7f; speed = 7f;
}}; }};
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 +1215,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 +1252,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 +1275,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 +1307,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 +1350,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 +1438,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;
@@ -1337,7 +1471,6 @@ public class Blocks implements ContentList{
); );
reload = 6f; reload = 6f;
coolantMultiplier = 0.5f; coolantMultiplier = 0.5f;
maxCoolantUsed = 1.5f;
restitution = 0.1f; restitution = 0.1f;
ammoUseEffect = Fx.shellEjectBig; ammoUseEffect = Fx.shellEjectBig;
range = 200f; range = 200f;
@@ -1351,6 +1484,7 @@ public class Blocks implements ContentList{
shootCone = 24f; shootCone = 24f;
health = 155 * size * size; health = 155 * size * size;
consumes.add(new ConsumeLiquidFilter(liquid -> liquid.temperature <= 0.5f && liquid.flammability < 0.1f, 2f)).update(false).optional(true);
}}; }};
meltdown = new LaserTurret("meltdown"){{ meltdown = new LaserTurret("meltdown"){{

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,28 @@ 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;
}};
sand = new Item("sand", Color.valueOf("f7cba4")){{
}}; }};
coal = new Item("coal", Color.valueOf("272727")){{ coal = new Item("coal", Color.valueOf("272727")){{
@@ -43,7 +47,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 +55,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 +64,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.1f;
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;
}}; }};
@@ -84,10 +88,6 @@ public class Items implements ContentList{
flammability = 1.05f; flammability = 1.05f;
}}; }};
sand = new Item("sand", Color.valueOf("f7cba4")){{
}};
blastCompound = new Item("blast-compound", Color.valueOf("ff795e")){{ blastCompound = new Item("blast-compound", Color.valueOf("ff795e")){{
flammability = 0.4f; flammability = 0.4f;
explosiveness = 1.2f; explosiveness = 1.2f;

View File

@@ -35,6 +35,7 @@ public class Mechs implements ContentList{
mass = 1.2f; mass = 1.2f;
speed = 0.5f; speed = 0.5f;
boostSpeed = 0.85f; boostSpeed = 0.85f;
buildPower = 1.2f;
engineColor = Color.valueOf("ffd37f"); engineColor = Color.valueOf("ffd37f");
health = 300f; health = 300f;
@@ -47,6 +48,11 @@ public class Mechs implements ContentList{
}}; }};
} }
@Override
public void updateAlt(Player player){
player.healBy(Time.delta() * 0.4f);
}
@Override @Override
public boolean alwaysUnlocked(){ public boolean alwaysUnlocked(){
return true; return true;
@@ -63,6 +69,7 @@ public class Mechs implements ContentList{
itemCapacity = 15; itemCapacity = 15;
mass = 0.9f; mass = 0.9f;
health = 250f; health = 250f;
buildPower = 0.9f;
weaponOffsetX = -1; weaponOffsetX = -1;
weaponOffsetY = -1; weaponOffsetY = -1;
engineColor = Color.valueOf("d3ddff"); engineColor = Color.valueOf("d3ddff");
@@ -110,6 +117,7 @@ public class Mechs implements ContentList{
boostSpeed = 0.8f; boostSpeed = 0.8f;
canHeal = true; canHeal = true;
health = 200f; health = 200f;
buildPower = 1.6f;
engineColor = Pal.heal; engineColor = Pal.heal;
weapon = new Weapon("heal-blaster"){{ weapon = new Weapon("heal-blaster"){{
@@ -161,6 +169,7 @@ public class Mechs implements ContentList{
weaponOffsetY = 0; weaponOffsetY = 0;
engineColor = Color.valueOf("feb380"); engineColor = Color.valueOf("feb380");
health = 300f; health = 300f;
buildPower = 1.5f;
weapon = new Weapon("swarmer"){{ weapon = new Weapon("swarmer"){{
length = 1.5f; length = 1.5f;
recoil = 4f; recoil = 4f;
@@ -227,6 +236,7 @@ public class Mechs implements ContentList{
weaponOffsetY = -1; weaponOffsetY = -1;
engineColor = Pal.lightTrail; engineColor = Pal.lightTrail;
cellTrnsY = 1f; cellTrnsY = 1f;
buildPower = 1.1f;
weapon = new Weapon("blaster"){{ weapon = new Weapon("blaster"){{
length = 1.5f; length = 1.5f;
reload = 20f; reload = 20f;
@@ -315,6 +325,7 @@ public class Mechs implements ContentList{
itemCapacity = 30; itemCapacity = 30;
engineColor = Color.valueOf("84f491"); engineColor = Color.valueOf("84f491");
cellTrnsY = 1f; cellTrnsY = 1f;
buildPower = 2f;
weapon = new Weapon("bomber"){{ weapon = new Weapon("bomber"){{
length = 0f; length = 0f;
width = 2f; width = 2f;
@@ -346,6 +357,7 @@ public class Mechs implements ContentList{
itemCapacity = 60; itemCapacity = 60;
engineColor = Color.valueOf("feb380"); engineColor = Color.valueOf("feb380");
cellTrnsY = 1f; cellTrnsY = 1f;
buildPower = 1.2f;
weapon = new Weapon("bomber"){{ weapon = new Weapon("bomber"){{
length = 1.5f; length = 1.5f;

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,11 @@ 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.scene.ui.TextField;
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 +52,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 +84,7 @@ public class Control implements ApplicationListener{
"lastBuild", 0 "lastBuild", 0
); );
addPlayer(0); createPlayer();
saves.load(); saves.load();
@@ -91,21 +95,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 +139,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 +150,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 +160,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 +180,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 +223,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 +266,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);
@@ -344,10 +302,18 @@ public class Control implements ApplicationListener{
} }
} }
if(!mobile && Core.input.keyTap(Binding.screenshot) && !(scene.getKeyboardFocus() instanceof TextField) && !ui.chatfrag.chatOpen()){
renderer.takeMapScreenshot();
}
}else{ }else{
if(!state.isPaused()){ if(!state.isPaused()){
Time.update(); Time.update();
} }
if(!scene.hasDialog() && Core.input.keyTap(KeyCode.BACK)){
Platform.instance.hide();
}
} }
} }
} }

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

@@ -69,6 +69,9 @@ public abstract class Platform {
*/ */
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype){} public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype){}
/**Hide the app. Android only.*/
public void hide(){}
/**Forces the app into landscape mode. Currently Android only.*/ /**Forces the app into landscape mode. Currently Android only.*/
public void beginForceLandscape(){} public void beginForceLandscape(){}

View File

@@ -2,10 +2,13 @@ package io.anuke.mindustry.core;
import io.anuke.arc.ApplicationListener; import io.anuke.arc.ApplicationListener;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.files.FileHandle;
import io.anuke.arc.function.Consumer; import io.anuke.arc.function.Consumer;
import io.anuke.arc.function.Predicate; import io.anuke.arc.function.Predicate;
import io.anuke.arc.graphics.Camera; import io.anuke.arc.graphics.Camera;
import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.Pixmap;
import io.anuke.arc.graphics.PixmapIO;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.Lines; import io.anuke.arc.graphics.g2d.Lines;
import io.anuke.arc.graphics.g2d.SpriteBatch; import io.anuke.arc.graphics.g2d.SpriteBatch;
@@ -13,6 +16,8 @@ import io.anuke.arc.graphics.glutils.FrameBuffer;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.BufferUtils;
import io.anuke.arc.util.ScreenUtils;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.arc.util.Tmp; import io.anuke.arc.util.Tmp;
import io.anuke.arc.util.pooling.Pools; import io.anuke.arc.util.pooling.Pools;
@@ -53,7 +58,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 +118,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 +153,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 +174,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 +189,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 +231,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);
@@ -271,10 +301,6 @@ public class Renderer implements ApplicationListener{
EntityDraw.drawWith(group, toDraw, drawer); EntityDraw.drawWith(group, toDraw, drawer);
} }
public float cameraScale(){
return camerascale;
}
public void scaleCamera(float amount){ public void scaleCamera(float amount){
targetscale += amount; targetscale += amount;
clampScale(); clampScale();
@@ -282,7 +308,50 @@ 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));
}
public void takeMapScreenshot(){
drawGroundShadows();
int w = world.width()*tilesize, h = world.height()*tilesize;
boolean isWater = settings.getBool("animatedwater");
settings.put("animatedwater", false);
FrameBuffer buffer = new FrameBuffer(w, h);
float vpW = camera.width, vpH = camera.height, px = camera.position.x, py = camera.position.y;
disableUI = true;
camera.width = w;
camera.height = h;
camera.position.x = w/2f + tilesize/2f;
camera.position.y = h/2f + tilesize/2f;
Draw.flush();
buffer.begin();
draw();
Draw.flush();
buffer.end();
disableUI = false;
camera.width = vpW;
camera.height = vpH;
camera.position.set(px, py);
buffer.begin();
byte[] lines = ScreenUtils.getFrameBufferPixels(0, 0, w, h, true);
for(int i = 0; i < lines.length; i+= 4){
lines[i + 3] = (byte)255;
}
buffer.end();
Pixmap fullPixmap = new Pixmap(w, h, Pixmap.Format.RGBA8888);
BufferUtils.copy(lines, 0, fullPixmap.getPixels(), lines.length);
FileHandle file = screenshotDirectory.child("screenshot-" + Time.millis() + ".png");
PixmapIO.writePNG(file, fullPixmap);
fullPixmap.dispose();
ui.showInfoFade(Core.bundle.format("screenshot", file.toString()));
buffer.dispose();
settings.put("animatedwater", isWater);
} }
} }

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", () -> {
@@ -288,11 +287,11 @@ public class UI implements ApplicationListener{
public String formatAmount(int number){ public String formatAmount(int number){
if(number >= 1000000){ if(number >= 1000000){
return Strings.toFixed(number / 1000000f, 1) + "[gray]mil[]"; return Strings.fixed(number / 1000000f, 1) + "[gray]mil[]";
}else if(number >= 10000){ }else if(number >= 10000){
return number / 1000 + "[gray]k[]"; return number / 1000 + "[gray]k[]";
}else if(number >= 1000){ }else if(number >= 1000){
return Strings.toFixed(number / 1000f, 1) + "[gray]k[]"; return Strings.fixed(number / 1000f, 1) + "[gray]k[]";
}else{ }else{
return number + ""; return number + "";
} }

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

@@ -184,7 +184,7 @@ public class WaveInfoDialog extends FloatingDialog{
}).width(80f); }).width(80f);
a.add(" + "); a.add(" + ");
a.addField(Strings.toFixed(Math.max((Mathf.isZero(group.unitScaling) ? 0 : 1f/group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> { a.addField(Strings.fixed(Math.max((Mathf.isZero(group.unitScaling) ? 0 : 1f/group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
if(Strings.canParsePositiveFloat(text)){ if(Strings.canParsePositiveFloat(text)){
group.unitScaling = 1f / Strings.parseFloat(text); group.unitScaling = 1f / Strings.parseFloat(text);
updateWaves(); updateWaves();

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

@@ -6,6 +6,7 @@ import io.anuke.arc.function.Predicate;
import io.anuke.arc.graphics.Camera; import io.anuke.arc.graphics.Camera;
import io.anuke.arc.math.geom.Rectangle; import io.anuke.arc.math.geom.Rectangle;
import io.anuke.mindustry.entities.traits.DrawTrait; import io.anuke.mindustry.entities.traits.DrawTrait;
import io.anuke.mindustry.entities.traits.Entity;
public class EntityDraw{ public class EntityDraw{
private static final Rectangle viewport = new Rectangle(); private static final Rectangle viewport = new Rectangle();
@@ -42,15 +43,12 @@ public class EntityDraw{
viewport.set(cam.position.x - cam.width / 2, cam.position.y - cam.height / 2, cam.width, cam.height); viewport.set(cam.position.x - cam.width / 2, cam.position.y - cam.height / 2, cam.width, cam.height);
} }
group.forEach(e -> { for(Entity e : group.all()){
if(!(e instanceof DrawTrait)) return; if(!(e instanceof DrawTrait) || !toDraw.test((T)e) || !e.isAdded()) continue;
T t = (T) e;
if(!toDraw.test(t) || !e.isAdded()) return;
if(!clip || rect.setSize(((DrawTrait) e).drawSize()).setCenter(e.getX(), e.getY()).overlaps(viewport)){ if(!clip || rect.setSize(((DrawTrait) e).drawSize()).setCenter(e.getX(), e.getY()).overlaps(viewport)){
cons.accept(t); cons.accept((T)e);
} }
}); }
} }
} }

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();
} }
} }
@@ -214,7 +215,7 @@ public abstract class GroundUnit extends BaseUnit{
velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta())); velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta()));
if(Units.invalidateTarget(target, this)){ if(Units.invalidateTarget(target, this)){
rotation = Mathf.slerpDelta(rotation, angle, type.rotatespeed); rotation = Mathf.slerpDelta(rotation, baseRotation, type.rotatespeed);
} }
} }
@@ -239,6 +240,6 @@ public abstract class GroundUnit extends BaseUnit{
float angle = angleTo(targetTile); float angle = angleTo(targetTile);
velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta())); velocity.add(vec.trns(angleTo(targetTile), type.speed*Time.delta()));
rotation = Mathf.slerpDelta(rotation, angle, type.rotatespeed); rotation = Mathf.slerpDelta(rotation, baseRotation, type.rotatespeed);
} }
} }

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

@@ -5,17 +5,17 @@ import io.anuke.annotations.Annotations.Remote;
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.ObjectSet; import io.anuke.arc.collection.ObjectSet;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.impl.BaseEntity;
import io.anuke.mindustry.entities.traits.HealthTrait;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Point2; import io.anuke.arc.math.geom.Point2;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Interval; import io.anuke.arc.util.Interval;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.impl.BaseEntity;
import io.anuke.mindustry.entities.traits.HealthTrait;
import io.anuke.mindustry.entities.traits.TargetTrait; import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.game.EventType.BlockDestroyEvent; import io.anuke.mindustry.game.EventType.BlockDestroyEvent;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
@@ -24,7 +24,6 @@ import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Edges; import io.anuke.mindustry.world.Edges;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.defense.Wall; import io.anuke.mindustry.world.blocks.defense.Wall;
import io.anuke.mindustry.world.consumers.Consume;
import io.anuke.mindustry.world.modules.ConsumeModule; import io.anuke.mindustry.world.modules.ConsumeModule;
import io.anuke.mindustry.world.modules.ItemModule; import io.anuke.mindustry.world.modules.ItemModule;
import io.anuke.mindustry.world.modules.LiquidModule; import io.anuke.mindustry.world.modules.LiquidModule;
@@ -44,6 +43,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public static int sleepingEntities = 0; public static int sleepingEntities = 0;
public Tile tile; public Tile tile;
public Block block;
public Interval timer; public Interval timer;
public float health; public float health;
public float timeScale = 1f, timeScaleDuration; public float timeScale = 1f, timeScaleDuration;
@@ -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);
}
} }
} }
@@ -77,10 +81,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
this.tile = tile; this.tile = tile;
x = tile.drawx(); x = tile.drawx();
y = tile.drawy(); y = tile.drawy();
block = tile.block();
health = tile.block().health; health = block.health;
timer = new Interval(block.timers);
timer = new Interval(tile.block().timers);
if(shouldAdd){ if(shouldAdd){
add(); add();
@@ -135,7 +139,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
} }
public void collision(Bullet other){ public void collision(Bullet other){
tile.block().handleBulletHit(this, other); block.handleBulletHit(this, other);
} }
public void kill(){ public void kill(){
@@ -147,11 +151,13 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
float preHealth = health; float preHealth = health;
Call.onTileDamage(tile, health - tile.block().handleDamage(tile, damage)); Call.onTileDamage(tile, health - block.handleDamage(tile, damage));
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);
} }
} }
@@ -164,14 +170,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
return tile; return tile;
} }
public boolean consumed(Class<? extends Consume> type){
return tile.block().consumes.get(type).valid(tile.block(), this);
}
public void removeFromProximity(){ public void removeFromProximity(){
tile.block().onProximityRemoved(tile); block.onProximityRemoved(tile);
Point2[] nearby = Edges.getEdges(tile.block().size); Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){ for(Point2 point : nearby){
Tile other = world.tile(tile.x + point.x, tile.y + point.y); Tile other = world.tile(tile.x + point.x, tile.y + point.y);
//remove this tile from all nearby tile's proximities //remove this tile from all nearby tile's proximities
@@ -189,7 +191,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
tmpTiles.clear(); tmpTiles.clear();
proximity.clear(); proximity.clear();
Point2[] nearby = Edges.getEdges(tile.block().size); Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){ for(Point2 point : nearby){
Tile other = world.tile(tile.x + point.x, tile.y + point.y); Tile other = world.tile(tile.x + point.x, tile.y + point.y);
@@ -212,8 +214,8 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
proximity.add(tile); proximity.add(tile);
} }
tile.block().onProximityAdded(tile); block.onProximityAdded(tile);
tile.block().onProximityUpdate(tile); block.onProximityUpdate(tile);
} }
public Array<Tile> proximity(){ public Array<Tile> proximity(){
@@ -232,7 +234,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@Override @Override
public float maxHealth(){ public float maxHealth(){
return tile.block().health; return block.health;
} }
@Override @Override
@@ -244,7 +246,6 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public void onDeath(){ public void onDeath(){
if(!dead){ if(!dead){
dead = true; dead = true;
Block block = tile.block();
Events.fire(new BlockDestroyEvent(tile)); Events.fire(new BlockDestroyEvent(tile));
block.onDestroyed(tile); block.onDestroyed(tile);
@@ -267,22 +268,22 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@Override @Override
public void update(){ public void update(){
//TODO better smoke effect, this one is awful //TODO better smoke effect, this one is awful
if(health != 0 && health < tile.block().health && !(tile.block() instanceof Wall) && if(health != 0 && health < block.health && !(block instanceof Wall) &&
Mathf.chance(0.009f * Time.delta() * (1f - health / tile.block().health))){ Mathf.chance(0.009f * Time.delta() * (1f - health / block.health))){
Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4)); Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4));
} }
timeScaleDuration -= Time.delta(); timeScaleDuration -= Time.delta();
if(timeScaleDuration <= 0f || !tile.block().canOverdrive){ if(timeScaleDuration <= 0f || !block.canOverdrive){
timeScale = 1f; timeScale = 1f;
} }
if(health <= 0){ if(health <= 0){
onDeath(); onDeath();
} }
Block previous = tile.block(); Block previous = block;
tile.block().update(tile); block.update(tile);
if(tile.block() == previous && cons != null){ if(block == previous && cons != null){
cons.update(); cons.update();
} }
} }

View File

@@ -7,7 +7,6 @@ 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.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Geometry; import io.anuke.arc.math.geom.Geometry;
import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.arc.util.Tmp; import io.anuke.arc.util.Tmp;
@@ -15,7 +14,6 @@ import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.entities.Damage; import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.effect.ScorchDecal; import io.anuke.mindustry.entities.effect.ScorchDecal;
import io.anuke.mindustry.entities.impl.DestructibleEntity; import io.anuke.mindustry.entities.impl.DestructibleEntity;
import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.traits.*;
@@ -49,9 +47,11 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
public static final float maxAbsVelocity = 127f / velocityPercision; public static final float maxAbsVelocity = 127f / velocityPercision;
public static final int noSpawner = Pos.get(-1, 1); public static final int noSpawner = Pos.get(-1, 1);
private static final Rectangle queryRect = new Rectangle();
private static final Vector2 moveVector = new Vector2(); private static final Vector2 moveVector = new Vector2();
private int lastWeightTile = Pos.invalid, lastWeightDelta;
private boolean wasFlying = false;
public float rotation; public float rotation;
protected final Interpolator interpolator = new Interpolator(); protected final Interpolator interpolator = new Interpolator();
@@ -140,6 +140,15 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
} }
} }
@Override
public void removed(){
Tile tile = world.tile(lastWeightTile);
if(tile != null){
tile.weight -= Math.max(lastWeightDelta, tile.weight);
}
}
@Override @Override
public boolean isValid(){ public boolean isValid(){
return !isDead() && isAdded(); return !isDead() && isAdded();
@@ -190,8 +199,8 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
} }
protected void clampPosition(){ protected void clampPosition(){
x = Mathf.clamp(x, tilesize, world.width() * tilesize - tilesize); x = Mathf.clamp(x, 0, world.width() * tilesize - tilesize);
y = Mathf.clamp(y, tilesize, world.height() * tilesize - tilesize); y = Mathf.clamp(y, 0, world.height() * tilesize - tilesize);
} }
public void kill(){ public void kill(){
@@ -219,17 +228,56 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
return status.hasEffect(effect); return status.hasEffect(effect);
} }
//TODO optimize
public void avoidOthers(float scaling){ public void avoidOthers(float scaling){
hitbox(queryRect); boolean flying = isFlying();
queryRect.setSize(queryRect.getWidth() * scaling);
Units.getNearby(queryRect, t -> { if(lastWeightTile != Pos.invalid){
if(t == this || t.isFlying() != isFlying()) return; Tile tile = world.tile(lastWeightTile);
float dst = dst(t);
moveVector.set(x, y).sub(t.getX(), t.getY()).setLength(1f * (1f - (dst / queryRect.getWidth()))); if(tile != null){
applyImpulse(moveVector.x, moveVector.y); int dec = Math.min(lastWeightDelta, wasFlying ? tile.airWeight : tile.weight);
}); if(!wasFlying){
tile.weight -= dec;
}else{
tile.airWeight -= dec;
}
}
}
final int rad = 2;
moveVector.setZero();
for(int cx = -rad; cx <= rad; cx++){
for(int cy = -rad; cy <= rad; cy++){
Tile tile = world.tileWorld(x + cx*tilesize, y + cy*tilesize);
if(tile == null) continue;
int weight = flying ? tile.airWeight : tile.weight;
float scl = (rad - Mathf.dst(tile.worldx(), tile.worldy(), x, y)/(8f * 1.2f * Mathf.sqrt2)) * 0.1f;
moveVector.add(Mathf.sign(x - tile.worldx()) * scaling * weight * scl, Mathf.sign(y - tile.worldy()) * scaling * weight * scl);
}
}
moveVector.limit(flying ? 0.1f : 0.2f);
velocity.add(moveVector.x / mass() * Time.delta(), moveVector.y / mass() * Time.delta());
Tile tile = world.tileWorld(x, y);
if(tile != null){
int tw = flying ? tile.airWeight : tile.weight;
lastWeightDelta = Math.min((int)(mass()), 127 - tw);
lastWeightTile = tile.pos();
if(!flying){
tile.weight += lastWeightDelta;
}else{
tile.airWeight += lastWeightDelta;
}
}else{
lastWeightTile = Pos.invalid;
}
wasFlying = flying;
} }
public TileEntity getClosestCore(){ public TileEntity getClosestCore(){

View File

@@ -58,7 +58,7 @@ public class Drone extends FlyingUnit implements BuilderTrait{
if(core == null) return; if(core == null) return;
if((entity.progress() < 1f || entity.progress() > 0f) && entity.tile.block() instanceof BuildBlock){ //building is valid if((entity.progress() < 1f || entity.progress() > 0f) && entity.block instanceof BuildBlock){ //building is valid
if(!isBuilding() && dst(target) < placeDistance * 0.9f){ //within distance, begin placing if(!isBuilding() && dst(target) < placeDistance * 0.9f){ //within distance, begin placing
if(isBreaking){ if(isBreaking){
getPlaceQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y)); getPlaceQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y));
@@ -127,7 +127,7 @@ public class Drone extends FlyingUnit implements BuilderTrait{
} }
//core full //core full
if(targetItem != null && entity.tile.block().acceptStack(targetItem, 1, entity.tile, Drone.this) == 0){ if(targetItem != null && entity.block.acceptStack(targetItem, 1, entity.tile, Drone.this) == 0){
setState(repair); setState(repair);
return; return;
} }

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

@@ -53,7 +53,7 @@ public class SpawnGroup implements Serializable{
} }
float scaling = this.unitScaling; float scaling = this.unitScaling;
return Math.min(unitAmount - 1 + Math.max((int) (((wave - begin) / spacing) / scaling), 1), max); return Math.min(unitAmount - 1 + Math.max((int) (((wave - begin + 1) / spacing) / scaling), 1), max);
} }
/** /**

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().hasShadow){
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,40 @@ 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); //clear it first
floor.endDraw(); Draw.color(Color.WHITE);
Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1);
drawBlocks(Layer.shadow); //then draw the shadow
Draw.color(!tile.block().hasShadow ? Color.WHITE : shadowColor);
EntityDraw.drawWith(playerGroup, player -> !player.isDead(), Unit::draw); Fill.rect(tile.x + 0.5f, tile.y + 0.5f, 1, 1);
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();
} }
@@ -173,7 +190,6 @@ public class BlockRenderer{
} }
if(block.expanded || !expanded){ if(block.expanded || !expanded){
addRequest(tile, Layer.shadow);
if(block.layer != null && block.isLayer(tile)){ if(block.layer != null && block.isLayer(tile)){
addRequest(tile, block.layer); addRequest(tile, block.layer);
@@ -214,11 +230,9 @@ public class BlockRenderer{
BlockRequest req = requests.get(iterateidx); BlockRequest req = requests.get(iterateidx);
Block block = req.tile.block(); Block block = req.tile.block();
if(req.layer == Layer.shadow){ if(req.layer == Layer.block){
block.drawShadow(req.tile);
}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

@@ -1,8 +1,6 @@
package io.anuke.mindustry.graphics; package io.anuke.mindustry.graphics;
public enum Layer{ public enum Layer{
/**Drawn under everything.*/
shadow,
/**Base block layer.*/ /**Base block layer.*/
block, block,
/**for placement*/ /**for placement*/

View File

@@ -9,6 +9,7 @@ import io.anuke.arc.math.geom.Rectangle;
import io.anuke.arc.math.geom.Vector2; import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.arc.util.Tmp; import io.anuke.arc.util.Tmp;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.content.Blocks; import io.anuke.mindustry.content.Blocks;
import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.type.Player; import io.anuke.mindustry.entities.type.Player;
@@ -25,20 +26,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(Vars.player != player && Vars.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 +51,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 +61,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 +99,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 +122,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

@@ -25,6 +25,7 @@ public enum Binding implements KeyBind{
menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE), menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE),
pause(KeyCode.SPACE), pause(KeyCode.SPACE),
toggle_menus(KeyCode.C), toggle_menus(KeyCode.C),
screenshot(KeyCode.P),
player_list(KeyCode.TAB, "multiplayer"), player_list(KeyCode.TAB, "multiplayer"),
chat(KeyCode.ENTER), chat(KeyCode.ENTER),
chat_history_prev(KeyCode.UP), chat_history_prev(KeyCode.UP),

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)){

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