This commit is contained in:
Anuken
2018-11-21 10:04:17 -05:00
82 changed files with 2417 additions and 2577 deletions

View File

@@ -25,7 +25,7 @@ allprojects {
appName = 'Mindustry' appName = 'Mindustry'
gdxVersion = '1.9.9' gdxVersion = '1.9.9'
roboVMVersion = '2.3.0' roboVMVersion = '2.3.0'
uCoreVersion = 'c93c55179ec05b44926d59c5878534a3177d804f' uCoreVersion = 'c9aadd4d0b5848dbc4dbbd0fcd701b11c30c02bb'
getVersionString = { getVersionString = {
String buildVersion = getBuildVersion() String buildVersion = getBuildVersion()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 B

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io page with PC downloads and web version
text.link.google-play.description = Google Play store listing text.link.google-play.description = Google Play store listing
text.link.wiki.description = Official Mindustry wiki text.link.wiki.description = Official Mindustry wiki
text.linkfail = Failed to open link\!\nThe URL has been copied to your clipboard. text.linkfail = Failed to open link\!\nThe URL has been copied to your clipboard.
text.editor.web = The web version does not support the editor\!\nDownload the game to use it.
text.web.unsupported = The web version does not support this feature\! Download the game to use it.
text.gameover = Game Over text.gameover = Game Over
text.gameover.pvp = The[accent] {0}[] team is victorious\! text.gameover.pvp = The[accent] {0}[] team is victorious\!
text.sector.gameover = This sector has been lost. Re-deploy? text.sector.gameover = This sector has been lost. Re-deploy?
@@ -290,6 +288,7 @@ text.no = No
text.info.title = Info text.info.title = Info
text.error.title = [crimson]An error has occured text.error.title = [crimson]An error has occured
text.error.crashtitle = An error has occured text.error.crashtitle = An error has occured
text.blocks.unknown=[LIGHT_GRAY]???
text.blocks.blockinfo = Block Info text.blocks.blockinfo = Block Info
text.blocks.powercapacity = Power Capacity text.blocks.powercapacity = Power Capacity
text.blocks.powershot = Power/Shot text.blocks.powershot = Power/Shot
@@ -408,8 +407,6 @@ mode.waves.name = waves
mode.waves.description = the normal mode. limited resources and automatic incoming waves. mode.waves.description = the normal mode. limited resources and automatic incoming waves.
mode.sandbox.name = sandbox mode.sandbox.name = sandbox
mode.sandbox.description = infinite resources and no timer for waves. mode.sandbox.description = infinite resources and no timer for waves.
mode.custom.warning = [scarlet]UNLOCKS IN CUSTOM GAMES OR SERVERS ARE NOT SAVED.[]\n\nPlay in sectors to unlock things.
mode.custom.warning.read = Just to make sure you've read it\:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES\!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is)
mode.freebuild.name = freebuild mode.freebuild.name = freebuild
mode.freebuild.description = limited resources and no timer for waves. mode.freebuild.description = limited resources and no timer for waves.
mode.pvp.name = PvP mode.pvp.name = PvP
@@ -497,6 +494,7 @@ text.mech.ability = [LIGHT_GRAY]Ability\: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity\: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity\: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosity\: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosity\: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperature\: {0} text.liquid.temperature = [LIGHT_GRAY]Temperature\: {0}
block.constructing = {0} [LIGHT_GRAY](Constructing)
block.spawn.name = Enemy Spawn block.spawn.name = Enemy Spawn
block.core.name = Core block.core.name = Core
block.metalfloor.name = Metal Floor block.metalfloor.name = Metal Floor
@@ -504,16 +502,16 @@ block.deepwater.name = deepwater
block.water.name = water block.water.name = water
block.lava.name = lava block.lava.name = lava
block.tar.name = Tar block.tar.name = Tar
block.blackstone.name = blackstone block.blackstone.name = Black Stone
block.stone.name = stone block.stone.name = Stone
block.dirt.name = dirt block.dirt.name = Dirt
block.sand.name = sand block.sand.name = Sand
block.ice.name = ice block.ice.name = Ice
block.snow.name = snow block.snow.name = Snow
block.grass.name = grass block.grass.name = Grass
block.shrub.name = shrub block.shrub.name = Shrub
block.rock.name = rock block.rock.name = Rock
block.blackrock.name = blackrock block.blackrock.name = Black Rock
block.icerock.name = icerock block.icerock.name = icerock
block.copper-wall.name = Copper Wall block.copper-wall.name = Copper Wall
block.copper-wall-large.name = Large Copper Wall block.copper-wall-large.name = Large Copper Wall

View File

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

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io es la página donde podes descargar las
text.link.google-play.description = Ficha en la Google Play Store text.link.google-play.description = Ficha en la Google Play Store
text.link.wiki.description = Wiki oficial de Mindustry text.link.wiki.description = Wiki oficial de Mindustry
text.linkfail = ¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles. text.linkfail = ¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles.
text.editor.web = ¡La versión web no es compatible con el editor!\nDescarga el juego para usarlo.
text.web.unsupported = ¡La versión web no soporta esta característica! Descarga el juego para poder usarla.
text.gameover = Tu núcleo ha sido destruido. text.gameover = Tu núcleo ha sido destruido.
text.gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! text.gameover.pvp = ¡El equipo[accent] {0}[] ha ganado!
text.sector.gameover = Este sector ha sido perdido. ¿Re-desplegar? text.sector.gameover = Este sector ha sido perdido. ¿Re-desplegar?
@@ -184,7 +182,7 @@ text.changelog.title = Registro de Parches
text.changelog.loading = Consiguiendo el registro de parches... text.changelog.loading = Consiguiendo el registro de parches...
text.changelog.error.android = [accent]¡Nota: el registro de parches a veces no funciona en Android 4.4 o inferior!\nEsto es por un error interno de Android. text.changelog.error.android = [accent]¡Nota: el registro de parches a veces no funciona en Android 4.4 o inferior!\nEsto es por un error interno de Android.
text.changelog.error.ios = [accent]El registro de parches no está actualmente soportado para iOS. text.changelog.error.ios = [accent]El registro de parches no está actualmente soportado para iOS.
text.changelog.error = [scarlet]¡Error consiguiendo el registro de parches!\Comprueba tu conexión a Internet. text.changelog.error = [scarlet]¡Error consiguiendo el registro de parches!Comprueba tu conexión a Internet.
text.changelog.current = [yellow][[Versión actual] text.changelog.current = [yellow][[Versión actual]
text.changelog.latest = [accent][[Última version] text.changelog.latest = [accent][[Última version]
text.loading = [accent]Cargando... text.loading = [accent]Cargando...
@@ -370,6 +368,7 @@ setting.musicvol.name = Volumen de la Música
setting.mutemusic.name = Silenciar Musica setting.mutemusic.name = Silenciar Musica
setting.sfxvol.name = Volumen de los efectos de sonido setting.sfxvol.name = Volumen de los efectos de sonido
setting.mutesound.name = Silenciar Sonido setting.mutesound.name = Silenciar Sonido
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Reasignar Teclas text.keybind.title = Reasignar Teclas
category.general.name = General category.general.name = General
category.view.name = Visión category.view.name = Visión
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Hablidad: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0}
text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0} text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Punto de generación block.spawn.name = Punto de generación
block.core.name = Núcleo block.core.name = Núcleo
block.metalfloor.name = Suelo de Metal block.metalfloor.name = Suelo de Metal
@@ -623,6 +623,7 @@ block.rtg-generator.name = Generador RTG
block.spectre.name = Espectro block.spectre.name = Espectro
block.meltdown.name = Meltdown block.meltdown.name = Meltdown
block.container.name = Contenedor block.container.name = Contenedor
block.core.description = The most important building in the game.
team.blue.name = Azul team.blue.name = Azul
team.red.name = Rojo team.red.name = Rojo
team.orange.name = Naranja team.orange.name = Naranja
@@ -743,7 +744,6 @@ block.javelin-ship-pad.description = Deja tu nave actual y transfórmate en una
block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él. block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él.
block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él. block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él.
block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it.
Deja tu nave actual y transfórmate en un mecanoide rápido, con armas ligeras hecho para ataques de ataque y retirada.\nUsa el pad tocándolo dos veces mientras estás en él.
block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él. block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él.
block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques. block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques.
block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu. block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu.

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = page itch.io avec le lien du téléchargement po
text.link.google-play.description = listing par le store google play text.link.google-play.description = listing par le store google play
text.link.wiki.description = wiki officiel de mindustry . text.link.wiki.description = wiki officiel de mindustry .
text.linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copié avec succès. text.linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copié avec succès.
text.editor.web = La version web ne possède pas l'éditeur !\nTéléchargez le jeu pour l'avoir.
text.web.unsupported = La version web ne supporte pas cette fonction ! Téléchargez le jeu pour l'utiliser.
text.gameover = Partie terminée. text.gameover = Partie terminée.
text.gameover.pvp = L'équipe [accent] {0}[] a gagnée ! text.gameover.pvp = L'équipe [accent] {0}[] a gagnée !
text.sector.gameover = Ce secteur a été perdu. Réessayer? text.sector.gameover = Ce secteur a été perdu. Réessayer?
@@ -370,6 +368,7 @@ setting.musicvol.name = volume de la musique
setting.mutemusic.name = Couper la musique setting.mutemusic.name = Couper la musique
setting.sfxvol.name = Volume des SFX setting.sfxvol.name = Volume des SFX
setting.mutesound.name = Couper les SFX setting.mutesound.name = Couper les SFX
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Paramétrer les touches text.keybind.title = Paramétrer les touches
category.general.name = General category.general.name = General
category.view.name = Voir category.view.name = Voir
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Compétence: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique: {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0}
text.liquid.temperature = [LIGHT_GRAY]Température: {0} text.liquid.temperature = [LIGHT_GRAY]Température: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = Générateur d'ennemi block.spawn.name = Générateur d'ennemi
block.core.name = Base block.core.name = Base
block.metalfloor.name = Sol en métal block.metalfloor.name = Sol en métal

View File

@@ -9,8 +9,6 @@ text.link.itch.io.description = Page web itch.io avec les versions ordinateurs t
text.link.google-play.description = Page Google Play Store du jeu text.link.google-play.description = Page Google Play Store du jeu
text.link.wiki.description = Wiki officiel de Mindustry text.link.wiki.description = Wiki officiel de Mindustry
text.linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier. text.linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier.
text.editor.web = La version web ne prend pas en charge l'éditeur !\nTéléchargez le jeu pour l'utiliser.
text.web.unsupported = La version web ne prend pas en charge cette fonctionnalité ! Téléchargez le jeu pour l'utiliser.
text.gameover = Le base a été détruit. text.gameover = Le base a été détruit.
text.gameover.pvp = L'équipe[accent] {0}[] a gagnée ! text.gameover.pvp = L'équipe[accent] {0}[] a gagnée !
text.sector.gameover = Ce secteur a été perdu. Réessayer ? text.sector.gameover = Ce secteur a été perdu. Réessayer ?
@@ -64,7 +62,7 @@ text.mission.linknode = Reliez le transmetteur énergétique
text.mission.display = [accent]Mission:\n[LIGHT_GRAY]{0} text.mission.display = [accent]Mission:\n[LIGHT_GRAY]{0}
text.mission.mech = Changer de mécha[accent] {0}[] text.mission.mech = Changer de mécha[accent] {0}[]
text.mission.create = Créez[accent] {0}[] text.mission.create = Créez[accent] {0}[]
text.none = <none> text.none = <Vide>
text.close = Fermer text.close = Fermer
text.quit = Quitter text.quit = Quitter
text.maps = Cartes text.maps = Cartes
@@ -370,6 +368,7 @@ setting.musicvol.name = Volume de la musique
setting.mutemusic.name = Couper la musique setting.mutemusic.name = Couper la musique
setting.sfxvol.name = Volume des SFX setting.sfxvol.name = Volume des SFX
setting.mutesound.name = Couper les SFX setting.mutesound.name = Couper les SFX
setting.crashreport.name = Send Anonymous Crash Reports
text.keybind.title = Paramétrer les touches text.keybind.title = Paramétrer les touches
category.general.name = Général category.general.name = Général
category.view.name = Voir category.view.name = Voir
@@ -494,6 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Compétence: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0}
text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0}
text.liquid.temperature = [LIGHT_GRAY]Température: {0} text.liquid.temperature = [LIGHT_GRAY]Température: {0}
block.constructing = {0}\n[LIGHT_GRAY](En construction)
block.spawn.name = Générateur d'ennemi block.spawn.name = Générateur d'ennemi
block.core.name = Base block.core.name = Base
block.metalfloor.name = Sol en métal block.metalfloor.name = Sol en métal
@@ -668,7 +668,6 @@ tutorial.daggerfactory = Construire [accent]une usine de "Poignards" []est recom
tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets. tutorial.router = Les usines ont besoin de ressources pour fonctionner.\nCréez un routeur pour séparer les objets.
tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire. tutorial.dagger = Reliez des transmetteurs énergétiques à l'usine.\nUne fois que les conditions seront remplies , un mécha sera créé.\nConstruisez autant de foreuses, de générateurs et de tapis roulants que nécessaire.
tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base.\nDétruisez la avec votre unité et des méchas "Poignard". tutorial.battle = [LIGHT_GRAY]L'Ennemi[] a révélé sa base.\nDétruisez la avec votre unité et des méchas "Poignard".
block.copper-wall.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues. block.copper-wall.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.
block.copper-wall-large.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.\nS'étend sur plusieurs tuiles. block.copper-wall-large.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.\nS'étend sur plusieurs tuiles.
block.dense-alloy-wall.description = Un bloc défensif standard.\nUne protection adéquate contre les ennemis. block.dense-alloy-wall.description = Un bloc défensif standard.\nUne protection adéquate contre les ennemis.
@@ -685,7 +684,7 @@ block.mend-projector.description = Guérit périodiquement les bâtiments situé
block.overdrive-projector.description = Augmente la vitesse des bâtiments à proximité, comme les foreuses et les convoyeurs. block.overdrive-projector.description = Augmente la vitesse des bâtiments à proximité, comme les foreuses et les convoyeurs.
block.force-projector.description = Crée un champ de force hexagonal autour de lui-même, protégeant les bâtiments et les unités internes des dommages causés par les balles. block.force-projector.description = Crée un champ de force hexagonal autour de lui-même, protégeant les bâtiments et les unités internes des dommages causés par les balles.
block.shock-mine.description = Endommage les ennemis qui marchent sur la mine. Presque invisible à l'ennemi. block.shock-mine.description = Endommage les ennemis qui marchent sur la mine. Presque invisible à l'ennemi.
block.duo.description =Une petite tourelle pas chère. block.duo.description = Une petite tourelle pas chère.
block.arc.description = Une petite tourelle qui tire de l'électricité dans un arc au hasard vers l'ennemi. block.arc.description = Une petite tourelle qui tire de l'électricité dans un arc au hasard vers l'ennemi.
block.hail.description = Une petite tourelle d'artillerie. block.hail.description = Une petite tourelle d'artillerie.
block.lancer.description = Une tourelle de taille moyenne qui tire des faisceaux délectricité chargés. block.lancer.description = Une tourelle de taille moyenne qui tire des faisceaux délectricité chargés.

View File

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

View File

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

View File

@@ -1,34 +1,32 @@
text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet\!) text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!)
text.credits = クレジット text.credits = クレジット
text.discord = MindustryのDiscordに参加\! text.discord = DiscordのMindustryに参加!
text.link.discord.description = Mindustryの公式Discordグループ text.link.discord.description = Mindustryの公式Discordグループ
text.link.github.description = ゲームのソースコード text.link.github.description = ゲームのソースコード
text.link.dev-builds.description = 不安定開発ビルド text.link.dev-builds.description = 不安定開発ビルド
text.link.trello.description = 公式 Trelloボード の実装予定の機能をチェック text.link.trello.description = 公式 Trelloボード の実装予定の機能をチェック
text.link.itch.io.description = itch.ioでPC版のダウンロードやweb版をプレイ text.link.itch.io.description = itch.ioでPC版のダウンロードやweb版をプレイ
text.link.google-play.description = Google Playのストアページ text.link.google-play.description = Google Playのストアページ
text.link.wiki.description = 公式 Mindustry Wiki text.link.wiki.description = 公式 Mindustry Wiki
text.linkfail = リンクを開くのに失敗しました\!\nURLをクリップボードにコピーしました。 text.linkfail = リンクを開くのに失敗しました!\nURLをクリップボードにコピーしました。
text.editor.web = Web版はエディターをサポートしていません\!\nゲームをダウンロードして、使用してください。
text.web.unsupported = Web版はこの機能をサポートしてません\! ゲームをダウンロードして、使用してください。
text.gameover = ゲームオーバー text.gameover = ゲームオーバー
text.gameover.pvp = [accent] {0}[] チームの勝利\! text.gameover.pvp = [accent] {0}[] チームの勝利!
text.sector.gameover = この区域は敗北しました。 再配備しますか? text.sector.gameover = この区域は敗北しました。 再配備しますか?
text.sector.retry = リトライ text.sector.retry = リトライ
text.highscore = [accent]ハイスコアを記録\! text.highscore = [accent]ハイスコアを記録!
text.wave.lasted = あなたはウェーブ[accent]{0}[]まで続きました。 text.wave.lasted = あなたはウェーブ[accent]{0}[]まで続きました。
text.level.highscore = ハイスコア\: [accent]{0} text.level.highscore = ハイスコア: [accent]{0}
text.level.delete.title = 削除の確認 text.level.delete.title = 削除の確認
text.map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか? text.map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか?
text.level.select = レベル選択 text.level.select = レベル選択
text.level.mode = ゲームモード\: text.level.mode = ゲームモード:
text.construction.desktop = ブロックの選択や建設を止めるには、[accent]スペースを使用してください[] text.construction.desktop = ブロックの選択や建設を止めるには、[accent]スペースを使用してください[]
text.construction.title = ブロック建設ガイド text.construction.title = ブロック建設ガイド
text.construction = [accent]ブロック建設モード[]になりました。\n設置するには、機体の近くの設置可能な場所をタップしてください。\n一度、ブロックを選択し、チェックボックスを押して確認して下さい。すると、機体が建設始めます。\n\n- [accent]ブロックの削除[]は、タップで範囲を選択してください。\n- [accent]範囲の選択[]は、長押しして、範囲のブロックをドラッグしてください。\n- [accent]一列にブロックを設置[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]建設や範囲の選択をキャンセル[]するには、左下の X ボタンを押してください。 text.construction = [accent]ブロック建設モード[]になりました。\n設置するには、機体の近くの設置可能な場所をタップしてください。\nブロックを選択した状態で、チェックボタンを押して確認すると、機体が建設始めます。\n\n- [accent]ブロックの削除[]は、タップで範囲を選択してください。\n- [accent]範囲の選択[]は、長押しして、範囲のブロックをドラッグしてください。\n- [accent]一列にブロックを設置[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]建設や範囲の選択をキャンセル[]するには、左下の X ボタンを押してください。
text.deconstruction.title = ブロックの破壊ガイド text.deconstruction.title = ブロック撤去ガイド
text.deconstruction = [accent]ブロック破壊モード[]になりました。\n\n破壊するには、機体の近くのブロックをタップしてください。\n一度、ブロックを選択し、チェックボックスを押して確認して下さい。すると、機体がブロックを破壊し始めます。\n\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n[accent]ブロックの破壊[]は、タップで範囲を選択してください。\n- [accent]範囲内のブロックを破壊[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]破壊や範囲選択をキャンセル[]するには、左下の X ボタンを押してください。 text.deconstruction = [accent]ブロック撤去モード[]になりました。\n\nブロックを撤去するには、機体の近くのブロックをタップしてください。\nブロックを選択した状態で、チェックボタンを押して確認すると、機体がブロックの撤去を始めます。\n\n- [accent]ブロックの破壊[]は、タップで範囲を選択してください。\n- [accent]範囲を選択してブロックを撤去[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]撤去や範囲選択をキャンセル[]するには、左下の X ボタンを押してください。
text.showagain = 次回以降表示しない text.showagain = 次回以降表示しない
text.coreattack = < コアが攻撃を受けています\! > text.coreattack = < コアが攻撃を受けています! >
text.unlocks = アンロック text.unlocks = アンロック
text.savegame = ゲームを保存 text.savegame = ゲームを保存
text.loadgame = ゲームを読み込む text.loadgame = ゲームを読み込む
@@ -36,19 +34,19 @@ text.joingame = ゲームに参加
text.addplayers = プレイヤーを追加/削除 text.addplayers = プレイヤーを追加/削除
text.customgame = カスタムゲーム text.customgame = カスタムゲーム
text.sectors = 区域 text.sectors = 区域
text.sector = 区域\: [LIGHT_GRAY]{0} text.sector = 区域: [LIGHT_GRAY]{0}
text.sector.time = 時間\: [LIGHT_GRAY]{0} text.sector.time = 時間: [LIGHT_GRAY]{0}
text.sector.deploy = 配備 text.sector.deploy = 配備
text.sector.abandon = 撤退 text.sector.abandon = 撤退
text.sector.abandon.confirm = 区域のすべての進行を撤退します。\nこれは元に戻すことはできません\! text.sector.abandon.confirm = 区域のすべての進行を撤退します。\nこれは元に戻すことはできません!
text.sector.resume = 再開 text.sector.resume = 再開
text.sector.locked = [scarlet][[Incomplete] text.sector.locked = [scarlet][[不完全]
text.sector.unexplored = [accent][[Unexplored] text.sector.unexplored = [accent][[未調査]
text.missions = ミッション\:[LIGHT_GRAY] {0} text.missions = ミッション:[LIGHT_GRAY] {0}
text.mission = ミッション\:[LIGHT_GRAY] {0} text.mission = ミッション:[LIGHT_GRAY] {0}
text.mission.main = メインミッション\:[LIGHT_GRAY] {0} text.mission.main = メインミッション:[LIGHT_GRAY] {0}
text.mission.info = ミッション情報 text.mission.info = ミッション情報
text.mission.complete = ミッション完了\! text.mission.complete = ミッション完了!
text.mission.complete.body = 区域 {0},{1} を征服しました。 text.mission.complete.body = 区域 {0},{1} を征服しました。
text.mission.wave = 残り[accent] {0}/{1} []ウェーブ\n次のウェーブまで {2} text.mission.wave = 残り[accent] {0}/{1} []ウェーブ\n次のウェーブまで {2}
text.mission.wave.enemies = 残り[accent] {0}/{1} []ウェーブ\n敵の残り {2} 体 text.mission.wave.enemies = 残り[accent] {0}/{1} []ウェーブ\n敵の残り {2} 体
@@ -56,43 +54,43 @@ text.mission.wave.enemy = 残り[accent] {0}/{1} []ウェーブ\n敵の残り {2
text.mission.wave.menu = 残り[accent] {0}[] ウェーブ text.mission.wave.menu = 残り[accent] {0}[] ウェーブ
text.mission.battle = 敵のコアを破壊する text.mission.battle = 敵のコアを破壊する
text.mission.resource.menu = {0} を{1}個を入手する text.mission.resource.menu = {0} を{1}個を入手する
text.mission.resource = {0} を入手する\:\n[accent]{1}/{2}[] text.mission.resource = {0} を入手する :\n[accent]{1}/{2}[]
text.mission.block = {0} を作成す text.mission.block = {0} を作る
text.mission.unit = ユニット {0} を作成す text.mission.unit = ユニット {0} を作る
text.mission.command = ユニットに {0} を命令する text.mission.command = ユニットに {0} を命令する
text.mission.linknode = 電源ノードを接続する text.mission.linknode = 電源ノードを接続する
text.mission.display = [accent]ミッション\:\n[LIGHT_GRAY]{0} text.mission.display = [accent]ミッション:\n[LIGHT_GRAY]{0}
text.mission.mech = メカニック[accent] {0}[]に切り替える text.mission.mech = 機体を[accent]{0}[]に乗り換える
text.mission.create = [accent]{0}[] を作 text.mission.create = [accent]{0}[] を作
text.none = <なし> text.none = <なし>
text.close = 閉じる text.close = 閉じる
text.quit = 終了 text.quit = 終了
text.maps = マップ text.maps = マップ
text.continue = 続ける text.continue = 続ける
text.nextmission = 次のミッションへ text.nextmission = 次のミッションへ
text.maps.none = [LIGHT_GRAY]マップが存在しません\! text.maps.none = [LIGHT_GRAY]マップが存在しません!
text.about.button = About text.about.button = About
text.name = 名前\: text.name = 名前:
text.filename = ファイル名\: text.filename = ファイル名:
text.unlocked = 新しいブロックをアンロック\! text.unlocked = 新しいブロックをアンロック!
text.unlocked.plural = 新しいブロックをアンロック\! text.unlocked.plural = 新しいブロックをアンロック!
text.players = {0} 人がオンライン text.players = {0} 人がオンライン
text.players.single = {0} 人がオンライン text.players.single = {0} 人がオンライン
text.server.closing = [accent]サーバーを閉じています... text.server.closing = [accent]サーバーを閉じています...
text.server.kicked.kick = サーバからキックされました\! text.server.kicked.kick = サーバからキックされました!
text.server.kicked.serverClose = サーバーが閉じました。 text.server.kicked.serverClose = サーバーが閉じました。
text.server.kicked.sectorComplete = 区域を征服しました。 text.server.kicked.sectorComplete = 区域を制覇しました。
text.server.kicked.sectorComplete.text = ミッションが完了しました。\nサーバーは次の区域に移ります。 text.server.kicked.sectorComplete.text = ミッションが完了しました。\nサーバーは次の区域に移ります。
text.server.kicked.clientOutdated = 古いクライアントです\! ゲームをアップデートしてください\! text.server.kicked.clientOutdated = 古いクライアントです! ゲームをアップデートしてください!
text.server.kicked.serverOutdated = 古いサーバーです\! ホストに更新してもらってください\! text.server.kicked.serverOutdated = 古いサーバーです! ホストに更新してもらってください!
text.server.kicked.banned = サーバーからBanされています。 text.server.kicked.banned = サーバーからBanされています。
text.server.kicked.recentKick = 直前にキックされています。\nもう一度接続できるまでお待ちください。 text.server.kicked.recentKick = 直前にキックされています。\nもう一度接続できるまでお待ちください。
text.server.kicked.nameInUse = このサーバーでは、\nその名前はすでに使用されています。 text.server.kicked.nameInUse = このサーバーでは、\nその名前はすでに使用されています。
text.server.kicked.nameEmpty = 無効な名前です。 text.server.kicked.nameEmpty = 無効な名前です。
text.server.kicked.idInUse = すでにサーバーに参加しています。\! 二つのアカウントでの接続は許可されていません。 text.server.kicked.idInUse = すでにサーバーに参加しています。! 二つのアカウントでの接続は許可されていません。
text.server.kicked.customClient = このサーバーはカスタムビルドをサポートしていません。公式版をダウンロードしてください。 text.server.kicked.customClient = このサーバーはカスタムビルドをサポートしていません。公式版をダウンロードしてください。
text.host.info = [accent]ホスト[]ボタンを押すと、ポート[scarlet]6567[]でサーバーが開かれます。\同じ[LIGHT_GRAY]Wifi や ローカルネットワーク[]からはサーバーリストで見ることができます。\n\nIPアドレスからどこからでもアクセスできるようにするには、[accent]ポート開放[]する必要があります。\n\n[LIGHT_GRAY]注意:\: LAN上のゲームで接続できない場合、Mindustryがファイアウォールの設定でローカルネットワークに接続が許可されているか確認してください。 text.host.info = [accent]ホスト[]ボタンを押すと、ポート[scarlet]6567[]でサーバーが開かれます。同じ[LIGHT_GRAY]Wifi や ローカルネットワーク[]からはサーバーリストで見ることができます。\n\nIPアドレスからどこからでもアクセスできるようにするには、[accent]ポート開放[]する必要があります。\n\n[LIGHT_GRAY]注意:: LAN上のゲームで接続できない場合、Mindustryがファイアウォールの設定でローカルネットワークに接続が許可されているか確認してください。
text.join.info = ここでは、[accent]サーバーのIPアドレス[]から接続したり、[accent]ローカルネットワーク[]のサーバーを探すことができます。\nLANとWANの両方のマルチプレイに対応しています。\n\n[LIGHT_GRAY]注意\:グローバルサーバーリストはありません。誰かのサーバーにIPで接続したい場合、ホストにIPをお尋ねください。 text.join.info = ここでは、[accent]サーバーのIPアドレス[]から接続したり、[accent]ローカルネットワーク[]のサーバーを探すことができます。\nLANとWANの両方のマルチプレイに対応しています。\n\n[LIGHT_GRAY]注意:グローバルサーバーリストはありません。誰かのサーバーにIPで接続したい場合、ホストにIPをお尋ねください。
text.hostserver = ゲームをホスト text.hostserver = ゲームをホスト
text.hostserver.mobile = ホスト text.hostserver.mobile = ホスト
text.host = ホスト text.host = ホスト
@@ -100,31 +98,31 @@ text.hosting = [accent]サーバーを開いています...
text.hosts.refresh = リフレッシュ text.hosts.refresh = リフレッシュ
text.hosts.discovering = LAN上のサーバーを探しています text.hosts.discovering = LAN上のサーバーを探しています
text.server.refreshing = サーバーをリフレッシュ text.server.refreshing = サーバーをリフレッシュ
text.hosts.none = [lightgray]ローカルゲームが見つかりません\! text.hosts.none = [lightgray]ローカルゲームが見つかりません!
text.host.invalid = [scarlet]ホストに接続できません。 text.host.invalid = [scarlet]ホストに接続できません。
text.trace = プレイヤーの記録 text.trace = プレイヤーの記録
text.trace.playername = プレイヤー名\: [accent]{0} text.trace.playername = プレイヤー名: [accent]{0}
text.trace.ip = IP\: [accent]{0} text.trace.ip = IP: [accent]{0}
text.trace.id = ユニークID\: [accent]{0} text.trace.id = ユニークID: [accent]{0}
text.trace.android = Androidクライアント\: [accent]{0} text.trace.android = Androidクライアント: [accent]{0}
text.trace.modclient = カスタムクライアント\: [accent]{0} text.trace.modclient = カスタムクライアント: [accent]{0}
text.trace.totalblocksbroken = 総ブロック破壊数\: [accent]{0} text.trace.totalblocksbroken = 総ブロック破壊数: [accent]{0}
text.trace.structureblocksbroken = 総建設物破壊数\: [accent]{0} text.trace.structureblocksbroken = 総建設物破壊数: [accent]{0}
text.trace.lastblockbroken = 最後に破壊したブロック\: [accent]{0} text.trace.lastblockbroken = 最後に破壊したブロック: [accent]{0}
text.trace.totalblocksplaced = 総ブロック設置数\: [accent]{0} text.trace.totalblocksplaced = 総ブロック設置数: [accent]{0}
text.trace.lastblockplaced = 最後に設置したブロック\: [accent]{0} text.trace.lastblockplaced = 最後に設置したブロック: [accent]{0}
text.invalidid = 無効なクライアントIDです\! バグ報告してください。 text.invalidid = 無効なクライアントIDです! バグ報告してください。
text.server.bans = Ban text.server.bans = Ban
text.server.bans.none = Banされたプレイヤーはいません\! text.server.bans.none = Banされたプレイヤーはいません!
text.server.admins = 管理者 text.server.admins = 管理者
text.server.admins.none = 管理者はいません\! text.server.admins.none = 管理者はいません!
text.server.add = サーバーを追加 text.server.add = サーバーを追加
text.server.delete = サーバーを削除しますか? text.server.delete = サーバーを削除しますか?
text.server.hostname = ホスト\: {0} text.server.hostname = ホスト: {0}
text.server.edit = サーバーを編集 text.server.edit = サーバーを編集
text.server.outdated = [crimson]古いサーバー\![] text.server.outdated = [crimson]古いサーバー![]
text.server.outdated.client = [crimson]古いクライアント\![] text.server.outdated.client = [crimson]古いクライアント![]
text.server.version = [lightgray]バージョン\: {0} {1} text.server.version = [lightgray]バージョン: {0} {1}
text.server.custombuild = [yellow]カスタムビルド text.server.custombuild = [yellow]カスタムビルド
text.confirmban = このプレイヤーを Ban しますか? text.confirmban = このプレイヤーを Ban しますか?
text.confirmkick = このプレイヤーをキックしますか? text.confirmkick = このプレイヤーをキックしますか?
@@ -132,45 +130,45 @@ text.confirmunban = このプレイヤーの Ban を解除しますか?
text.confirmadmin = このプレイヤーを管理者にしますか? text.confirmadmin = このプレイヤーを管理者にしますか?
text.confirmunadmin = このプレイヤーを管理者から削除しますか? text.confirmunadmin = このプレイヤーを管理者から削除しますか?
text.joingame.title = サーバーに参加 text.joingame.title = サーバーに参加
text.joingame.ip = IP\: text.joingame.ip = IP:
text.disconnect = 接続が切断されました。 text.disconnect = 接続が切断されました。
text.disconnect.data = ワールドデータの読み込みに失敗しました\! text.disconnect.data = ワールドデータの読み込みに失敗しました!
text.connecting = [accent]接続中... text.connecting = [accent]接続中...
text.connecting.data = [accent]ワールドデータを読み込んでいます... text.connecting.data = [accent]ワールドデータを読み込んでいます...
text.server.port = ポート\: text.server.port = ポート:
text.server.addressinuse = アドレスがすでに使用されています。\! text.server.addressinuse = アドレスがすでに使用されています。!
text.server.invalidport = 無効なポート番号です。\! text.server.invalidport = 無効なポート番号です。!
text.server.error = [crimson]サーバーエラー\: [accent]{0} text.server.error = [crimson]サーバーエラー: [accent]{0}
text.save.old = これは古いバージョンのセーブデータで、使用することができません。\n\n[LIGHT_GRAY]下位互換性の実装は正式版の4.0行われます。 text.save.old = これは古いバージョンのセーブデータで、使用することができません。\n\n[LIGHT_GRAY]下位互換性の実装は正式版の4.0行われます。
text.save.new = 新しく保存 text.save.new = 新しく保存
text.save.overwrite = このスロットに上書きしてよろしいですか? text.save.overwrite = このスロットに上書きしてよろしいですか?
text.overwrite = 上書き text.overwrite = 上書き
text.save.none = セーブデータがありません\! text.save.none = セーブデータがありません!
text.saveload = [accent]セーブしています... text.saveload = [accent]セーブしています...
text.savefail = ゲームの保存に失敗しました。\! text.savefail = ゲームの保存に失敗しました。!
text.save.delete.confirm = このセーブデータを削除してよろしいですか? text.save.delete.confirm = このセーブデータを削除してよろしいですか?
text.save.delete = 削除 text.save.delete = 削除
text.save.export = エクスポート text.save.export = エクスポート
text.save.import.invalid = [accent]無効なセーブデータです。\! text.save.import.invalid = [accent]無効なセーブデータです。!
text.save.import.fail = [crimson]セーブのインポートに失敗\: [accent]{0} text.save.import.fail = [crimson]セーブのインポートに失敗: [accent]{0}
text.save.export.fail = [crimson]セーブのエクスポートに失敗\: [accent]{0} text.save.export.fail = [crimson]セーブのエクスポートに失敗: [accent]{0}
text.save.import = セーブデータを読み込む text.save.import = セーブデータを読み込む
text.save.newslot = セーブデータ名\: text.save.newslot = セーブデータ名:
text.save.rename = リネーム text.save.rename = リネーム
text.save.rename.text = 新しい名前\: text.save.rename.text = 新しい名前:
text.selectslot = セーブデータを選択 text.selectslot = セーブデータを選択
text.slot = [accent]スロット {0} text.slot = [accent]スロット {0}
text.save.corrupted = [accent]セーブファイルが無効、または破損しました\!\nゲームのアップデート直後の場合、恐らくセーブデータのフォーマットの変更によるもので、バグではありません。 text.save.corrupted = [accent]セーブファイルが無効、または破損しました!\nゲームのアップデート直後の場合、恐らくセーブデータのフォーマットの変更によるもので、バグではありません。
text.sector.corrupted = [accent]区域のセーブファイルが見つかりましたが、読み込みに失敗しました。\n新しく区域がが作成されます。 text.sector.corrupted = [accent]区域のセーブファイルが見つかりましたが、読み込みに失敗しました。\n新しく区域がが作成されます。
text.empty = <空> text.empty = <空>
text.on = オン text.on = オン
text.off = オフ text.off = オフ
text.save.autosave = 自動保存\: {0} text.save.autosave = 自動保存: {0}
text.save.map = マップ\: {0} text.save.map = マップ: {0}
text.save.wave = ウェーブ {0} text.save.wave = ウェーブ {0}
text.save.difficulty = 難易度\: {0} text.save.difficulty = 難易度: {0}
text.save.date = 最終保存\: {0} text.save.date = 最終保存: {0}
text.save.playtime = プレイ時間\: {0} text.save.playtime = プレイ時間: {0}
text.confirm = 確認 text.confirm = 確認
text.delete = 削除 text.delete = 削除
text.ok = OK text.ok = OK
@@ -182,9 +180,9 @@ text.back = 戻る
text.quit.confirm = 終了してもよろしいですか? text.quit.confirm = 終了してもよろしいですか?
text.changelog.title = 変更履歴 text.changelog.title = 変更履歴
text.changelog.loading = 変更履歴を取得しています... text.changelog.loading = 変更履歴を取得しています...
text.changelog.error.android = [accent]Android4.4または、それ以下では変更履歴が動作しない場合があります。\!\nこれはAndroidの内部バグによるものです。 text.changelog.error.android = [accent]Android4.4または、それ以下では変更履歴が動作しない場合があります。!\nこれはAndroidの内部バグによるものです。
text.changelog.error.ios = [accent]iOSは変更履歴に対応していません。 text.changelog.error.ios = [accent]iOSは変更履歴に対応していません。
text.changelog.error = [scarlet]変更履歴の取得エラー\!\nインターネット接続を確認してください。 text.changelog.error = [scarlet]変更履歴の取得エラー!\nインターネット接続を確認してください。
text.changelog.current = [yellow][[現在のバージョン] text.changelog.current = [yellow][[現在のバージョン]
text.changelog.latest = [accent][[最新バージョン] text.changelog.latest = [accent][[最新バージョン]
text.loading = [accent]読み込み中... text.loading = [accent]読み込み中...
@@ -200,32 +198,32 @@ text.saveimage = イメージを保存
text.unknown = 不明 text.unknown = 不明
text.custom = カスタム text.custom = カスタム
text.builtin = 組み込み text.builtin = 組み込み
text.map.delete.confirm = マップを削除してもよろしいですか? これは戻すことができません\! text.map.delete.confirm = マップを削除してもよろしいですか? これは戻すことができません!
text.map.random = [accent]ランダムマップ text.map.random = [accent]ランダムマップ
text.map.nospawn = このマップにはスポーンするためのプレイヤーのコアがありません\! [ROYAL]青い[]コアをエディターでマップに追加してください。 text.map.nospawn = このマップにはスポーンするためのプレイヤーのコアがありません! [ROYAL]青い[]コアをエディターでマップに追加してください。
text.map.nospawn.pvp = このマップには敵がスポーンするためのプレイヤーのコアがありません\! [SCARLET]赤い[]コアをエディターでマップに追加してください。 text.map.nospawn.pvp = このマップには敵がスポーンするためのプレイヤーのコアがありません! [SCARLET]赤い[]コアをエディターでマップに追加してください。
text.map.invalid = マップの読み込みエラー\: ファイルが無効、または破損しています。 text.map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。
text.editor.brush = ブラシ text.editor.brush = ブラシ
text.editor.slope = \\ text.editor.slope = \\
text.editor.openin = エディターで開く text.editor.openin = エディターで開く
text.editor.oregen = 鉱石の生成 text.editor.oregen = 鉱石の生成
text.editor.oregen.info = 鉱石の生成\: text.editor.oregen.info = 鉱石の生成:
text.editor.mapinfo = マップ情報 text.editor.mapinfo = マップ情報
text.editor.author = 作者\: text.editor.author = 作者:
text.editor.description = 説明\: text.editor.description = 説明:
text.editor.name = 名前\: text.editor.name = 名前:
text.editor.teams = チーム text.editor.teams = チーム
text.editor.elevation = 標高 text.editor.elevation = 標高
text.editor.errorimageload = ファイルの読み込みエラー\:\n[accent]{0} text.editor.errorimageload = ファイルの読み込みエラー:\n[accent]{0}
text.editor.errorimagesave = ファイルの保存エラー\:\n[accent]{0} text.editor.errorimagesave = ファイルの保存エラー:\n[accent]{0}
text.editor.generate = 生成 text.editor.generate = 生成
text.editor.resize = リサイズ text.editor.resize = リサイズ
text.editor.loadmap = マップを読み込む text.editor.loadmap = マップを読み込む
text.editor.savemap = マップを保存 text.editor.savemap = マップを保存
text.editor.saved = 保存しました\! text.editor.saved = 保存しました!
text.editor.save.noname = マップに名前がありません\! メニューの 'マップ情報' から設定してください。 text.editor.save.noname = マップに名前がありません! メニューの 'マップ情報' から設定してください。
text.editor.save.overwrite = マップが組み込みマップを上書きしようとしています。\! メニューの 'マップ情報' から異なる名前に設定してください。 text.editor.save.overwrite = マップが組み込みマップを上書きしようとしています。! メニューの 'マップ情報' から異なる名前に設定してください。
text.editor.import.exists = [scarlet]インポートできません\:[] '{0}' はすでに組み込みマップの名前として存在します\! text.editor.import.exists = [scarlet]インポートできません:[] '{0}' はすでに組み込みマップの名前として存在します!
text.editor.import = インポート... text.editor.import = インポート...
text.editor.importmap = マップをインポート text.editor.importmap = マップをインポート
text.editor.importmap.description = すでに存在しているマップをインポート text.editor.importmap.description = すでに存在しているマップをインポート
@@ -240,37 +238,35 @@ text.editor.exportimage = 地形イメージをエクスポート
text.editor.exportimage.description = イメージファイルをエクスポート text.editor.exportimage.description = イメージファイルをエクスポート
text.editor.loadimage = 地形をインポート text.editor.loadimage = 地形をインポート
text.editor.saveimage = 地形をエクスポート text.editor.saveimage = 地形をエクスポート
text.editor.unsaved = [scarlet]保存されていない変更があります\![]\n終了してもよろしいですか? text.editor.unsaved = [scarlet]保存されていない変更があります![]\n終了してもよろしいですか?
text.editor.resizemap = マップをリサイズ text.editor.resizemap = マップをリサイズ
text.editor.mapname = マップ名\: text.editor.mapname = マップ名:
text.editor.overwrite = [accent]警告\!\n存在するマップを上書きします。 text.editor.overwrite = [accent]警告!\n存在するマップを上書きします。
text.editor.overwrite.confirm = [scarlet]警告\![] この名前のマップがすでに存在します。上書きしてもよろしいですか? text.editor.overwrite.confirm = [scarlet]警告![] この名前のマップがすでに存在します。上書きしてもよろしいですか?
text.editor.selectmap = 読み込むマップを選択\: text.editor.selectmap = 読み込むマップを選択:
text.width = \: text.width = 幅:
text.height = 高さ\: text.height = 高さ:
text.menu = メニュー text.menu = メニュー
text.play = プレイ text.play = プレイ
text.load = 読み込む text.load = 読み込む
text.save = 保存 text.save = 保存
text.fps = FPS\: {0} text.fps = FPS: {0}
text.tps = TPS\: {0} text.tps = TPS: {0}
text.ping = Ping\: {0}ms text.ping = Ping: {0}ms
text.language.restart = 言語設定を有効にするにはゲームを再起動してください。 text.language.restart = 言語設定を有効にするにはゲームを再起動してください。
text.settings = 設定 text.settings = 設定
text.tutorial = チュートリアル text.tutorial = チュートリアル
text.editor = エディター text.editor = エディター
text.mapeditor = マップエディター text.mapeditor = マップエディター
text.donate = 寄附 text.donate = 寄附
text.connectfail = [crimson]サーバーへの接続できませんでした:\n\n[accent]{0}
text.connectfail = [crimson]サーバーへの接続できませんでした\:\n\n[accent]{0}
text.error.unreachable = サーバーに到達できません。\nアドレスは正しいですか? text.error.unreachable = サーバーに到達できません。\nアドレスは正しいですか?
text.error.invalidaddress = 無効なアドレスです。 text.error.invalidaddress = 無効なアドレスです。
text.error.timedout = タイムアウトしました!\nホストがポート開放されているか確認してください。アドレスは正しいです! text.error.timedout = タイムアウトしました!\nホストがポート開放されているか確認してください。アドレスは正しいです!
text.error.mismatch =パケットエラー:\nクライアント/サーバーのバージョンが一致しません。\nゲームとホストが最新のMindustryか確認してください! text.error.mismatch = パケットエラー:\nクライアント/サーバーのバージョンが一致しません。\nゲームとホストが最新のMindustryか確認してください!
text.error.alreadyconnected = すでに接続されています。 text.error.alreadyconnected = すでに接続されています。
text.error.mapnotfound = マップファイルが見つかりません! text.error.mapnotfound = マップファイルが見つかりません!
text.error.any = 不明なネットワークエラーです。 text.error.any = 不明なネットワークエラーです。
text.settings.language = 言語 text.settings.language = 言語
text.settings.reset = デフォルトにリセット text.settings.reset = デフォルトにリセット
text.settings.rebind = 再設定 text.settings.rebind = 再設定
@@ -279,8 +275,8 @@ text.settings.game = ゲーム
text.settings.sound = サウンド text.settings.sound = サウンド
text.settings.graphics = グラフィック text.settings.graphics = グラフィック
text.settings.cleardata = データを削除... text.settings.cleardata = データを削除...
text.settings.clear.confirm = データを削除してもよろしいですか?\n元に戻すことはできません\! text.settings.clear.confirm = データを削除してもよろしいですか?\n元に戻すことはできません!
text.settings.clearall.confirm = [scarlet]警告\![]\nこれはすべてのデータが削除されます。これにはセーブデータ、マップ、アンロック、キーバインドが含まれます。\n「ok」 を押すと、すべてのデータが削除され、自動的に終了します。 text.settings.clearall.confirm = [scarlet]警告![]\nこれはすべてのデータが削除されます。これにはセーブデータ、マップ、アンロック、キーバインドが含まれます。\n「ok」 を押すと、すべてのデータが削除され、自動的に終了します。
text.settings.clearsectors = 区域を削除 text.settings.clearsectors = 区域を削除
text.settings.clearunlocks = アンロックを削除 text.settings.clearunlocks = アンロックを削除
text.settings.clearall = すべてを削除 text.settings.clearall = すべてを削除
@@ -318,11 +314,11 @@ text.blocks.drillspeed = 採掘速度
text.blocks.liquidoutput = 搬出液体 text.blocks.liquidoutput = 搬出液体
text.blocks.liquidoutputspeed = 液体搬出速度 text.blocks.liquidoutputspeed = 液体搬出速度
text.blocks.liquiduse = 液体使用量 text.blocks.liquiduse = 液体使用量
text.blocks.coolant = text.blocks.coolant =
text.blocks.coolantuse = 使用量 text.blocks.coolantuse = 使用量
text.blocks.inputliquidfuel = 液体燃料 text.blocks.inputliquidfuel = 液体燃料
text.blocks.liquidfueluse = 液体燃料使用量 text.blocks.liquidfueluse = 液体燃料使用量
text.blocks.explosive = 高い爆発性\! text.blocks.explosive = 高い爆発性!
text.blocks.health = 耐久値 text.blocks.health = 耐久値
text.blocks.inaccuracy = 不正確 text.blocks.inaccuracy = 不正確
text.blocks.shots = ショット text.blocks.shots = ショット
@@ -356,7 +352,7 @@ setting.difficulty.easy = イージー
setting.difficulty.normal = ノーマル setting.difficulty.normal = ノーマル
setting.difficulty.hard = ハード setting.difficulty.hard = ハード
setting.difficulty.insane = クレイジー setting.difficulty.insane = クレイジー
setting.difficulty.name = 難易度\: setting.difficulty.name = 難易度:
setting.screenshake.name = 画面を振る setting.screenshake.name = 画面を振る
setting.effects.name = 画面効果 setting.effects.name = 画面効果
setting.sensitivity.name = 操作感度 setting.sensitivity.name = 操作感度
@@ -388,7 +384,7 @@ keybind.select.name = 選択/ショット
keybind.break.name = 破壊 keybind.break.name = 破壊
keybind.deselect.name = 選択解除 keybind.deselect.name = 選択解除
keybind.shoot.name = ショット keybind.shoot.name = ショット
keybind.zoom_hold.name = 長押しズーム keybind.zoom_hold.name = ズーム長押し
keybind.zoom.name = ズーム keybind.zoom.name = ズーム
keybind.menu.name = メニュー keybind.menu.name = メニュー
keybind.pause.name = ポーズ keybind.pause.name = ポーズ
@@ -409,7 +405,7 @@ mode.waves.description = ノーマルモードです。限られた資源でウ
mode.sandbox.name = サンドボックス mode.sandbox.name = サンドボックス
mode.sandbox.description = 無限の資源でウェーブを自由に始められます。 mode.sandbox.description = 無限の資源でウェーブを自由に始められます。
mode.custom.warning = [scarlet]カスタムゲームまたは、サーバ内でのアンロックは保存されません。[]\n\nアンロックするには区域でプレイしてください。 mode.custom.warning = [scarlet]カスタムゲームまたは、サーバ内でのアンロックは保存されません。[]\n\nアンロックするには区域でプレイしてください。
mode.custom.warning.read = 必ずお読みください\:\n[scarlet]カスタムゲーム内でのアンロックは区域やほかのモードには影響しません\!\n\n[LIGHT_GRAY](多分必要ないと思いますが) mode.custom.warning.read = 必ずお読みください:\n[scarlet]カスタムゲーム内でのアンロックは区域やほかのモードには影響しません!\n\n[LIGHT_GRAY](多分必要ないと思いますが)
mode.freebuild.name = フリービルド mode.freebuild.name = フリービルド
mode.freebuild.description = 限られた資源でウェーブを自由に始められます。 mode.freebuild.description = 限られた資源でウェーブを自由に始められます。
mode.pvp.name = PvP mode.pvp.name = PvP
@@ -454,49 +450,50 @@ liquid.lava.name = 溶岩
liquid.oil.name = 石油 liquid.oil.name = 石油
liquid.cryofluid.name = 冷却水 liquid.cryofluid.name = 冷却水
mech.alpha-mech.name = アルファ 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 = デルタ 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 = タウ 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 = オメガ 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 = ダート 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 = ジャベリン
mech.javelin-ship.description = 最初は遅いですが、敵の基地では速度と飛行能力が飛躍的に高まり、電撃やミサイルで多量のダメージを与えることができます。 mech.javelin-ship.description = 最初は遅いですが、敵の基地では速度と飛行能力が飛躍的に高まり、電撃やミサイルで多量のダメージを与えることができます。
mech.javelin-ship.weapon = バーストミサイル mech.javelin-ship.weapon = バーストミサイル
mech.javelin-ship.ability = 放電ブースター mech.javelin-ship.ability = 放電ブースター
mech.trident-ship.name = トライデント mech.trident-ship.name = トライデント
mech.trident-ship.description = 強力な爆撃機です。しっかりとした装甲です。 mech.trident-ship.description = 強力な爆撃機です。頑丈な装甲です。
mech.trident-ship.weapon = 爆弾 mech.trident-ship.weapon = 爆弾
mech.glaive-ship.name = グライブ mech.glaive-ship.name = グライブ
mech.glaive-ship.description = 大きく、重武装された攻撃機です。焼夷弾が装備され、優れた加速と最高速度を保有しています。 mech.glaive-ship.description = 大きく、重武装された攻撃機です。焼夷弾が装備され、優れた加速と最高速度を保有しています。
mech.glaive-ship.weapon = 焼夷弾 mech.glaive-ship.weapon = 焼夷弾
text.item.explosiveness = [LIGHT_GRAY]爆発性\: {0}% text.item.explosiveness = [LIGHT_GRAY]爆発性: {0}%
text.item.flammability = [LIGHT_GRAY]可燃性\: {0}% text.item.flammability = [LIGHT_GRAY]可燃性: {0}%
text.item.radioactivity = [LIGHT_GRAY]放射能\: {0}% text.item.radioactivity = [LIGHT_GRAY]放射能: {0}%
text.item.fluxiness = [LIGHT_GRAY]流動性\: {0}% text.item.fluxiness = [LIGHT_GRAY]流動性: {0}%
text.unit.health = [LIGHT_GRAY]耐久値\: {0} text.unit.health = [LIGHT_GRAY]耐久値: {0}
text.unit.speed = [LIGHT_GRAY]速度\: {0} text.unit.speed = [LIGHT_GRAY]速度: {0}
text.mech.weapon = [LIGHT_GRAY]武器\: {0} text.mech.weapon = [LIGHT_GRAY]武器: {0}
text.mech.armor = [LIGHT_GRAY]装備\: {0} text.mech.armor = [LIGHT_GRAY]装備: {0}
text.mech.itemcapacity = [LIGHT_GRAY]アイテム容量\: {0} text.mech.itemcapacity = [LIGHT_GRAY]アイテム容量: {0}
text.mech.minespeed = [LIGHT_GRAY]採掘速度\: {0} text.mech.minespeed = [LIGHT_GRAY]採掘速度: {0}
text.mech.minepower = [LIGHT_GRAY]採掘力\: {0} text.mech.minepower = [LIGHT_GRAY]採掘力: {0}
text.mech.ability = [LIGHT_GRAY]能力\: {0} text.mech.ability = [LIGHT_GRAY]能力: {0}
text.liquid.heatcapacity = [LIGHT_GRAY]熱容量\: {0} text.liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0}
text.liquid.viscosity = [LIGHT_GRAY]粘度\: {0} text.liquid.viscosity = [LIGHT_GRAY]粘度: {0}
text.liquid.temperature = [LIGHT_GRAY]温度\: {0} text.liquid.temperature = [LIGHT_GRAY]温度: {0}
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
block.spawn.name = エネミースポーン block.spawn.name = エネミースポーン
block.core.name = コア block.core.name = コア
block.metalfloor.name = 金属製の床 block.metalfloor.name = 金属製の床
@@ -516,7 +513,7 @@ block.rock.name = 岩
block.blackrock.name = 黒い岩 block.blackrock.name = 黒い岩
block.icerock.name = 氷岩 block.icerock.name = 氷岩
block.copper-wall.name = 銅の壁 block.copper-wall.name = 銅の壁
block.copper-wall-large.name = 大きな銅の壁 block.copper-wall-large.name = 大きな銅の壁
block.dense-alloy-wall.name = 高密度合金の壁 block.dense-alloy-wall.name = 高密度合金の壁
block.dense-alloy-wall-large.name = 大きな高密度合金の壁 block.dense-alloy-wall-large.name = 大きな高密度合金の壁
block.phase-wall.name = フェーズファイバーの壁 block.phase-wall.name = フェーズファイバーの壁
@@ -541,9 +538,9 @@ block.overflow-gate.description = 搬出先がいっぱいの場合に左右に
block.smelter.name = 溶鉱炉 block.smelter.name = 溶鉱炉
block.arc-smelter.name = 電気式溶鉱炉 block.arc-smelter.name = 電気式溶鉱炉
block.silicon-smelter.name = シリコン溶鉱炉 block.silicon-smelter.name = シリコン溶鉱炉
block.phase-weaver.name = フェーズ紡績 block.phase-weaver.name = フェーズ
block.pulverizer.name = 粉砕機 block.pulverizer.name = 粉砕機
block.cryofluidmixer.name = 凍結流体ミキサー block.cryofluidmixer.name = 冷却ミキサー
block.melter.name = 融合機 block.melter.name = 融合機
block.incinerator.name = 焼却炉 block.incinerator.name = 焼却炉
block.biomattercompressor.name = バイオメター圧縮機 block.biomattercompressor.name = バイオメター圧縮機
@@ -638,10 +635,10 @@ unit.spirit.name = スピリットドローン
unit.spirit.description = 初期のユニットです。デフォルトでコアからスポーンします。自動で鉱石の採掘やブロックの修理をします。 unit.spirit.description = 初期のユニットです。デフォルトでコアからスポーンします。自動で鉱石の採掘やブロックの修理をします。
unit.phantom.name = ファントムドローン unit.phantom.name = ファントムドローン
unit.phantom.description = 強化されたユニットです。自動で鉱石の採掘やブロックの修理をします。スピリットドローンよりも効率的に行います。 unit.phantom.description = 強化されたユニットです。自動で鉱石の採掘やブロックの修理をします。スピリットドローンよりも効率的に行います。
unit.dagger.name = ダガ unit.dagger.name = ダガ
unit.dagger.description = 一般的な地上ユニットです。集団になると便利です。 unit.dagger.description = 一般的な地上ユニットです。集団になると便利です。
unit.titan.name = タイタン unit.titan.name = タイタン
unit.titan.description = 強化版の武装した地上ユニットです。地上と空の敵の両方に攻撃します。 unit.titan.description = 強化された地上戦闘ユニットです。地上と空の敵の両方に攻撃します。
unit.ghoul.name = グール爆撃機 unit.ghoul.name = グール爆撃機
unit.ghoul.description = 地上爆撃機です。 unit.ghoul.description = 地上爆撃機です。
unit.wraith.name = レースファイター unit.wraith.name = レースファイター
@@ -650,29 +647,29 @@ unit.fortress.name = フォートレス
unit.fortress.description = 砲撃地上ユニットです。 unit.fortress.description = 砲撃地上ユニットです。
unit.revenant.name = レベナント unit.revenant.name = レベナント
unit.revenant.description = レーザープラットフォームです。 unit.revenant.description = レーザープラットフォームです。
tutorial.begin = 最終ミッションは[LIGHT_GRAY]敵[]を倒すことです。\n\nまずは、[accent]銅の採掘[]から始めましょう。コアの近くの銅鉱石の鉱脈をタップしましょう。 tutorial.begin = ここでのミッションは[LIGHT_GRAY]敵[]を倒すことです。\n\nまずは、[accent]銅の採掘[]から始めましょう。コアの近くの銅鉱石の鉱脈をタップしましょう。
tutorial.drill = 手動で採掘するのは非効率的です。\n[accent]ドリル[]を使えば自動で採掘できます。\n銅鉱石の鉱脈の上に1つ置いてみましょう。 tutorial.drill = 手動で採掘するのは非効率的です。\n[accent]ドリル[]を使えば自動で採掘できます。\n銅鉱石の鉱脈の上に1つ置いてみましょう。
tutorial.conveyor = [accent]コンベアー[]はコアにアイテムを送することができます。\nドリルからコアまでコンベアーのラインを作りましょう。 tutorial.conveyor = [accent]コンベアー[]はコアにアイテムを送することができます。\nドリルからコアまでコンベアー作りましょう。
tutorial.morecopper = まだまだ銅が必要です。\n\n手動で採掘するか、ドリルをもっと設置しましょう。 tutorial.morecopper = まだまだ銅が必要です。\n\n手動で採掘するか、ドリルをもっと設置しましょう。
tutorial.turret = [LIGHT_GRAY]敵[]を撃退するために防衛体制を作らなければなりません。\n基地の近くにターレットのデュオを設置しましょう。 tutorial.turret = [LIGHT_GRAY]敵[]を撃退するために防衛体制を作らなければなりません。\n基地の近くにターレットのデュオを設置しましょう。
tutorial.drillturret = デュオには弾として[accent]銅の弾薬[]が必要です。\nデュオの横にドリルを置き、採掘した銅を供給しましょう。 tutorial.drillturret = デュオには弾として[accent]銅の弾薬[]が必要です。\nデュオの横にドリルを置き、採掘した銅を供給しましょう。
tutorial.waves = [LIGHT_GRAY]敵[]が近づいてきます。\n\n2ウェーブの間、コアを守ってください。ターレットをもっと設置しましょう。 tutorial.waves = [LIGHT_GRAY]敵[]が近づいてきます。\n\n2ウェーブの間、コアを守ってください。ターレットをもっと設置しましょう。
tutorial.lead = 他の鉱石も使ってみましょう。[accent]鉛[]を見つけて、採掘しましょう。\n\nユニットからコアにドラッグして、資源を転送できます。 tutorial.lead = 他の鉱石も使ってみましょう。[accent]鉛[]を見つけて、採掘しましょう。\n\nユニットからコアにドラッグして、資源を転送できます。
tutorial.smelter = と鉛は弱い金属です。優れた[アクセント]密な合金[]は製錬所で作ることができます。 1つを構築します。\n\n銅を鉛はやわらかい金属です。\nより硬い[accent]高密度合金[]を溶鉱炉で作りましょう。 tutorial.smelter = 銅を鉛はやわらかい金属です。\nより硬い[accent]高密度合金[]を溶鉱炉で作りましょう。
tutorial.densealloy = 溶鉱炉で作った合金を回収しましょう。\n\nまた、必要に応じて効率化しましょう。 tutorial.densealloy = 溶鉱炉で作った合金を回収しましょう。\n\nまた、必要に応じて効率化しましょう。
tutorial.siliconsmelter = コアは、採掘やブロックの修復のために[accent]スピリットドローン[]を作成しています。\n\n他のユニットを作るには[accent]シリコン[]が要ります。\nシリコン溶鉱炉を作りましょう。 tutorial.siliconsmelter = コアは、採掘やブロックの修復のために[accent]スピリットドローン[]を作成しています。\n\n他のユニットを作るには[accent]シリコン[]が必要です。\nシリコン溶鉱炉を作りましょう。
tutorial.silicondrill = シリコンには[accent]石炭[]と[accent]砂[]が必要です。\nまず、ドリルを作りましょう。 tutorial.silicondrill = シリコンには[accent]石炭[]と[accent]砂[]が必要です。\nまず、ドリルを作りましょう。
tutorial.generator = この技術には電力が必要です。それに対して[accent]燃焼ジェネレーター[]を作成します。\n\nこの技術には電力が必要です。\n[accent]火力発電機[]を作りましょう。 tutorial.generator = この技術には電力が必要です。\n[accent]火力発電機[]を作りましょう。
tutorial.generatordrill = 火力発電機には燃料が必要です。\nドリルから石炭を補給しましょう。 tutorial.generatordrill = 火力発電機には燃料が必要です。\nドリルから石炭を補給しましょう。
tutorial.node = 電力を送する必要があります。\n火力発電機の隣に[accent]電源ノード[]を作って、電力を転送しましょう。 tutorial.node = 電力を送する必要があります。\n火力発電機の隣に[accent]電源ノード[]を作って、電力を供給しましょう。
tutorial.nodelink = 電力は接触する電力ブロックや発電機接続された電源ノードによって転送することができます。\n\nードをタップしてから、発電機とシリコン溶鉱炉を選択して電力を繋げましょう。 tutorial.nodelink = 電力は隣接している電力ブロックや発電機接続された状態の電源ノードを使って送電することができます。\n\nードをタップしてから、発電機とシリコン溶鉱炉を選択して電力を繋げましょう。
tutorial.silicon = シリコン溶鉱炉で製造したシリコンを回収しましょう。\n\nまた、効率化をすることをお勧めします。 tutorial.silicon = シリコン溶鉱炉で製造したシリコンを回収しましょう。\n\nまた、効率化をすることをお勧めします。
tutorial.daggerfactory = [accent]ダガユニット生産機[]を作りましょう。\n\nこれを使うと攻撃ユニットを作ってくれます。 tutorial.daggerfactory = [accent]ダガユニット製造機[]を作りましょう。\n\nこれを使うと攻撃ユニットを作ってくれます。
tutorial.router = 生産機には電力が必要です。\nコンベアーから資源を分けるためにルーターを作りましょう。 tutorial.router = 生産機には電力が必要です。\nコンベアーから資源を分けるためにルーターを作りましょう。
tutorial.dagger = 電源ノードを生産機に接続しましょう。\n要件が揃うと、ユニットを作り始めます。\n\n必要に応じて、ドリルや発電機、コンベアーを増やしましょう。 tutorial.dagger = 電源ノードを生産機に接続しましょう。\n要件が揃うと、ユニットを作り始めます。\n\n必要に応じて、ドリルや発電機、コンベアーを増やしましょう。
tutorial.battle = [LIGHT_GRAY]敵[]のコアが見つかりました。\nユニットやダガで破壊しましょう。 tutorial.battle = [LIGHT_GRAY]敵[]のコアが見つかりました。\nユニットやダガで破壊しましょう。
block.copper-wall.description = 安価な防壁ブロックです。\n初のウェーブでコアやターレットを保護するのに便利です。 block.copper-wall.description = 安価な防壁ブロックです。\n初のウェーブでコアやターレットを保護するのに便利です。
block.copper-wall-large.description = 安価な大型防壁ブロックです。\n初のウェーブでコアやターレットを保護するのに便利です。 block.copper-wall-large.description = 安価な大型防壁ブロックです。\n初のウェーブでコアやターレットを保護するのに便利です。
block.dense-alloy-wall.description = 標準的な防壁ブロックです。\n敵からの保護に最適です。 block.dense-alloy-wall.description = 標準的な防壁ブロックです。\n敵からの保護に最適です。
block.dense-alloy-wall-large.description = 標準的な大型防壁ブロックです。\n敵からの保護に最適です。 block.dense-alloy-wall-large.description = 標準的な大型防壁ブロックです。\n敵からの保護に最適です。
block.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。 block.thorium-wall.description = 強化された防壁ブロックです。\n敵からの保護により強固です。
@@ -699,9 +696,9 @@ block.cyclone.description = 大型連射ターレットです。
block.fuse.description = 短距離攻撃をする大型ターレットです。 block.fuse.description = 短距離攻撃をする大型ターレットです。
block.spectre.description = 一度に2発の強力な弾を撃つ大型ターレットです。 block.spectre.description = 一度に2発の強力な弾を撃つ大型ターレットです。
block.meltdown.description = 強力な長距離攻撃をする大型ターレットです。 block.meltdown.description = 強力な長距離攻撃をする大型ターレットです。
block.conveyor.description = 一般的なアイテム輸送ブロックです。アイテムを前方に移動し、自動的にターレットや製造機などに入れます。回転可能です。 block.conveyor.description = 一般的なアイテム輸送ブロックです。アイテムを前方に移動し、自動的にターレットや製造機などに入れます。回転できます。
block.titanium-conveyor.description = 強化されたアイテム輸送ブロックです。通常のコンベアーよりも速くアイテムを移動します。 block.titanium-conveyor.description = 強化されたアイテム輸送ブロックです。通常のコンベアーよりも速くアイテムを移動します。
block.phase-conveyor.description = 強化されたアイテム送ブロックです。電力を使用して、離れたフェーズコンベアーにアイテムを転送ます。 block.phase-conveyor.description = 強化されたアイテム送ブロックです。電力を使用して、離れた場所にあるフェーズコンベアーにアイテムを転送することができます。
block.junction.description = 交差している2つのコンベアーをブリッジします。2つの異なるコンベアーが異なる場所に異なる材料を運んでいるときに便利です。 block.junction.description = 交差している2つのコンベアーをブリッジします。2つの異なるコンベアーが異なる場所に異なる材料を運んでいるときに便利です。
block.mass-driver.description = 長距離の輸送が可能なアイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。 block.mass-driver.description = 長距離の輸送が可能なアイテム輸送ブロックです。離れた別のマスドライバーにアイテムを発射します。
block.smelter.description = 石炭を燃やして、銅と鉛から高密度合金を製錬します。 block.smelter.description = 石炭を燃やして、銅と鉛から高密度合金を製錬します。
@@ -726,9 +723,9 @@ block.battery.description = 電源ノード間で電力が余っていれば充
block.battery-large.description = 通常のバッテリーより多くの電力を貯めて置くことができます。 block.battery-large.description = 通常のバッテリーより多くの電力を貯めて置くことができます。
block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。 block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。
block.turbine-generator.description = 火力発電機より効率的ですが、水が必要です。 block.turbine-generator.description = 火力発電機より効率的ですが、水が必要です。
block.thermal-generator.description = 溶岩からたくさんの電力を発電します。 block.thermal-generator.description = 溶岩から大量の電力を発電します。
block.solar-panel.description = 太陽光から少ない電力を供給します。 block.solar-panel.description = 太陽光から少量の電力を発電します。
block.solar-panel-large.description = 通常のソーラーパネルよりたくさんの電力を供給しますが、建設費が高価です。 block.solar-panel-large.description = 通常のソーラーパネルより大量の電力を発電できますが、建設費が高価です。
block.thorium-reactor.description = 高放射性のトリウムから大量の電力を発電します。これには一定の冷却が必要です。冷却が不十分な場合大きな爆発が発生します。 block.thorium-reactor.description = 高放射性のトリウムから大量の電力を発電します。これには一定の冷却が必要です。冷却が不十分な場合大きな爆発が発生します。
block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。 block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。
block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。アンローダーをタップすると搬出するアイテムを変更することができます。 block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。アンローダーをタップすると搬出するアイテムを変更することができます。
@@ -737,15 +734,15 @@ block.vault.description = 各種類のアイテムを大量に保管します。
block.mechanical-drill.description = 安価なドリルです。採掘可能な鉱脈に設置すると、アイテムを採掘して搬出します。 block.mechanical-drill.description = 安価なドリルです。採掘可能な鉱脈に設置すると、アイテムを採掘して搬出します。
block.pneumatic-drill.description = 速く採掘できるように改善されたドリルです。また、より硬い鉱石も採掘することができます。 block.pneumatic-drill.description = 速く採掘できるように改善されたドリルです。また、より硬い鉱石も採掘することができます。
block.laser-drill.description = 電力を使用して、レーザー技術でより速く採掘することができます。また、このドリルで放射性トリウムを回収することができます。 block.laser-drill.description = 電力を使用して、レーザー技術でより速く採掘することができます。また、このドリルで放射性トリウムを回収することができます。
block.blast-drill.description = 究極のドリルです。大量の電力が必要です。 block.blast-drill.description = 高級ドリルです。大量の電力が必要です。
block.water-extractor.description = 地面から水を汲み上げます。近くに湖がない場合に便利です。 block.water-extractor.description = 地面から水を汲み上げます。近くに湖がない場合に便利です。
block.cultivator.description = 水で土壌を耕して、バイオメターを回収します。 block.cultivator.description = 水で土壌を耕して、バイオメターを回収します。
block.oil-extractor.description = 大量の電力を使用して、砂から石油を回収します。近くに油田がない場合に便利です。 block.oil-extractor.description = 大量の電力を使用して、砂から石油を回収します。近くに油田がない場合に便利です。
block.dart-ship-pad.description = 今使っている機体から一般的な戦闘機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。 block.dart-ship-pad.description =  今使っている機体から一般的な戦闘機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.trident-ship-pad.description = 今使っている機体から武装した爆撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。 block.trident-ship-pad.description = 今使っている機体から武装した爆撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.javelin-ship-pad.description = 今使っている機体から速くて強い電撃を放つ要撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。 block.javelin-ship-pad.description = 今使っている機体から速くて強い電撃を放つ要撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.glaive-ship-pad.description = 今使っている機体から大きく、重武装された攻撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。 block.glaive-ship-pad.description = 今使っている機体から大きく、重武装された攻撃機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.tau-mech-pad.description =今使っている機体から仲間の建物やユニットを修復する支援型機体に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。 block.tau-mech-pad.description = 今使っている機体から仲間の建物やユニットを修復する支援型機体に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.delta-mech-pad.description = 今使っている機体から速く突撃攻撃に向いた軽装備の戦闘機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。 block.delta-mech-pad.description = 今使っている機体から速く突撃攻撃に向いた軽装備の戦闘機に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.omega-mech-pad.description = 今使っている機体から最前線での戦いに向けた重装備の大型機体に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。 block.omega-mech-pad.description = 今使っている機体から最前線での戦いに向けた重装備の大型機体に乗り換えます。\nパッドに乗って、パッドをダブルタップすることで使用できます。
block.spirit-factory.description = 鉱石の採掘やブロックの修復を行う軽いドローンを製造します。 block.spirit-factory.description = 鉱石の採掘やブロックの修復を行う軽いドローンを製造します。
@@ -767,7 +764,7 @@ block.liquid-junction.description = 交差している2つのコンベアーを
block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に輸送することができます。 block.bridge-conduit.description = 高度な液体輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に輸送することができます。
block.mechanical-pump.description = 安価で性能の低いポンプです。電力が必要ありません。 block.mechanical-pump.description = 安価で性能の低いポンプです。電力が必要ありません。
block.rotary-pump.description = 強化されたポンプです。電力を使用して2倍速く搬出します。 block.rotary-pump.description = 強化されたポンプです。電力を使用して2倍速く搬出します。
block.thermal-pump.description = 究極のポンプです。機械ポンプより3倍速く、唯一溶岩を採取できるポンプです。 block.thermal-pump.description = 高級ポンプです。機械ポンプより3倍速く、唯一溶岩を採取できるポンプです。
block.router.description = 一つの方向から受け取ったアイテムを他の3方向に搬出します。一つの資源から複数に分ける際に便利です。 block.router.description = 一つの方向から受け取ったアイテムを他の3方向に搬出します。一つの資源から複数に分ける際に便利です。
block.distributor.description = 高度なルーターです。アイテムを7方向に均等に分けて搬出します。 block.distributor.description = 高度なルーターです。アイテムを7方向に均等に分けて搬出します。
block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に輸送することができます。 block.bridge-conveyor.description = 高度な輸送ブロックです。地形や建物を超えて、3ブロック離れた場所に輸送することができます。

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -50,7 +50,7 @@ public class Vars{
public static final int maxNameLength = 40; public static final int maxNameLength = 40;
public static final float itemSize = 5f; public static final float itemSize = 5f;
public static final int tilesize = 8; public static final int tilesize = 8;
public static final int sectorSize = 250; public static final int sectorSize = 256;
public static final int invalidSector = Integer.MAX_VALUE; public static final int invalidSector = Integer.MAX_VALUE;
public static Locale[] locales; public static Locale[] locales;
public static final Color[] playerColors = { public static final Color[] playerColors = {

View File

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

View File

@@ -33,9 +33,9 @@ public class DistributionBlocks extends BlockList implements ContentList{
}}; }};
phaseConveyor = new ItemBridge("phase-conveyor"){{ phaseConveyor = new ItemBridge("phase-conveyor"){{
range = 11; range = 12;
hasPower = true; hasPower = true;
consumes.power(0.05f); consumes.power(0.03f);
}}; }};
sorter = new Sorter("sorter"); sorter = new Sorter("sorter");
@@ -50,8 +50,8 @@ public class DistributionBlocks extends BlockList implements ContentList{
massDriver = new MassDriver("mass-driver"){{ massDriver = new MassDriver("mass-driver"){{
size = 3; size = 3;
itemCapacity = 80; itemCapacity = 60;
range = 340f; range = 440f;
}}; }};
} }
} }

View File

@@ -21,7 +21,7 @@ public class UnitBlocks extends BlockList implements ContentList{
produceTime = 5700; produceTime = 5700;
size = 2; size = 2;
consumes.power(0.08f); consumes.power(0.08f);
consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30)}); consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30));
}}; }};
phantomFactory = new UnitFactory("phantom-factory"){{ phantomFactory = new UnitFactory("phantom-factory"){{
@@ -29,7 +29,7 @@ public class UnitBlocks extends BlockList implements ContentList{
produceTime = 7300; produceTime = 7300;
size = 2; size = 2;
consumes.power(0.2f); consumes.power(0.2f);
consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80)}); consumes.items(new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80));
}}; }};
wraithFactory = new UnitFactory("wraith-factory"){{ wraithFactory = new UnitFactory("wraith-factory"){{
@@ -37,7 +37,7 @@ public class UnitBlocks extends BlockList implements ContentList{
produceTime = 1800; produceTime = 1800;
size = 2; size = 2;
consumes.power(0.1f); consumes.power(0.1f);
consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 10), new ItemStack(Items.titanium, 10)}); consumes.items(new ItemStack(Items.silicon, 10), new ItemStack(Items.titanium, 10));
}}; }};
ghoulFactory = new UnitFactory("ghoul-factory"){{ ghoulFactory = new UnitFactory("ghoul-factory"){{
@@ -61,7 +61,7 @@ public class UnitBlocks extends BlockList implements ContentList{
produceTime = 1700; produceTime = 1700;
size = 2; size = 2;
consumes.power(0.05f); consumes.power(0.05f);
consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 10)}); consumes.items(new ItemStack(Items.silicon, 10));
}}; }};
titanFactory = new UnitFactory("titan-factory"){{ titanFactory = new UnitFactory("titan-factory"){{

View File

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

View File

@@ -34,7 +34,6 @@ import static io.anuke.mindustry.Vars.*;
* This class should <i>not</i> call any outside methods to change state of modules, but instead fire events. * This class should <i>not</i> call any outside methods to change state of modules, but instead fire events.
*/ */
public class Logic extends Module{ public class Logic extends Module{
public boolean doUpdate = true;
public Logic(){ public Logic(){
Events.on(TileChangeEvent.class, event -> { Events.on(TileChangeEvent.class, event -> {

View File

@@ -28,6 +28,7 @@ import io.anuke.ucore.scene.ui.TextField.TextFieldFilter;
import io.anuke.ucore.scene.ui.TooltipManager; import io.anuke.ucore.scene.ui.TooltipManager;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.scene.ui.layout.Unit;
import io.anuke.ucore.util.Strings;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
import static io.anuke.ucore.scene.actions.Actions.*; import static io.anuke.ucore.scene.actions.Actions.*;
@@ -293,4 +294,16 @@ public class UI extends SceneModule{
dialog.keyDown(Keys.BACK, dialog::hide); dialog.keyDown(Keys.BACK, dialog::hide);
dialog.show(); dialog.show();
} }
public String formatAmount(int number){
if(number >= 1000000){
return Strings.toFixed(number / 1000000f, 1) + "[gray]mil[]";
}else if(number >= 10000){
return number / 1000 + "[gray]k[]";
}else if(number >= 1000){
return Strings.toFixed(number / 1000f, 1) + "[gray]k[]";
}else{
return number + "";
}
}
} }

View File

@@ -236,7 +236,7 @@ public interface BuilderTrait extends Entity{
Tile tile = getMineTile(); Tile tile = getMineTile();
TileEntity core = unit.getClosestCore(); TileEntity core = unit.getClosestCore();
if(core == null || tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance || !unit.inventory.canAcceptItem(tile.floor().drops.item)){ if(core == null || tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance || tile.floor().drops == null || !unit.inventory.canAcceptItem(tile.floor().drops.item)){
setMineTile(null); setMineTile(null);
}else{ }else{
Item item = tile.floor().drops.item; Item item = tile.floor().drops.item;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -66,7 +66,7 @@ public class Net{
}else if(error.contains("connection refused") || error.contains("route to host") || type.contains("unknownhost")){ }else if(error.contains("connection refused") || error.contains("route to host") || type.contains("unknownhost")){
error = Bundles.get("text.error.unreachable"); error = Bundles.get("text.error.unreachable");
}else if(type.contains("timeout")){ }else if(type.contains("timeout")){
error = Bundles.get("text.error.timeout"); error = Bundles.get("text.error.timedout");
}else if(error.equals("alreadyconnected")){ }else if(error.equals("alreadyconnected")){
error = Bundles.get("text.error.alreadyconnected"); error = Bundles.get("text.error.alreadyconnected");
}else if(!error.isEmpty()){ }else if(!error.isEmpty()){

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,14 @@
package io.anuke.mindustry.ui;
import io.anuke.mindustry.type.Liquid;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.layout.Table;
/**An ItemDisplay, but for liquids.*/
public class LiquidDisplay extends Table{
public LiquidDisplay(Liquid liquid){
add(new Image(liquid.getContentIcon())).size(8*3);
add(liquid.localizedName()).padLeft(3);
}
}

View File

@@ -6,10 +6,10 @@ import io.anuke.mindustry.game.Content;
import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.world.meta.StatValue;
import io.anuke.ucore.scene.event.HandCursorListener; import io.anuke.ucore.scene.event.HandCursorListener;
import io.anuke.ucore.scene.ui.Image; import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.ScrollPane; import io.anuke.ucore.scene.ui.ScrollPane;
import io.anuke.ucore.scene.ui.Tooltip;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.scene.utils.UIUtils; import io.anuke.ucore.scene.utils.UIUtils;
@@ -65,7 +65,10 @@ public class UnlocksDialog extends FloatingDialog{
if(control.unlocks.isUnlocked(unlock)){ if(control.unlocks.isUnlocked(unlock)){
image.clicked(() -> Vars.ui.content.show(unlock)); image.clicked(() -> Vars.ui.content.show(unlock));
StatValue.addToolTip(image, unlock); image.addListener(new Tooltip<>(new Table("clear"){{
add(unlock.localizedName());
margin(4);
}}));
} }
if((++count) % maxWidth == 0){ if((++count) % maxWidth == 0){

View File

@@ -180,7 +180,9 @@ public class BlockInventoryFragment extends Fragment{
private String round(float f){ private String round(float f){
f = (int) f; f = (int) f;
if(f >= 1000){ if(f >= 1000000){
return Strings.toFixed(f / 1000000f, 1) + "[gray]mil[]";
}else if(f >= 1000){
return Strings.toFixed(f / 1000, 1) + "k"; return Strings.toFixed(f / 1000, 1) + "k";
}else{ }else{
return (int) f + ""; return (int) f + "";

View File

@@ -1,349 +0,0 @@
package io.anuke.mindustry.ui.fragments;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.game.EventType.WorldLoadEvent;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.type.Category;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Recipe;
import io.anuke.ucore.core.Core;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.scene.Element;
import io.anuke.ucore.scene.Group;
import io.anuke.ucore.scene.actions.Actions;
import io.anuke.ucore.scene.event.ClickListener;
import io.anuke.ucore.scene.event.InputEvent;
import io.anuke.ucore.scene.event.Touchable;
import io.anuke.ucore.scene.ui.*;
import io.anuke.ucore.scene.ui.layout.Stack;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Strings;
import static io.anuke.mindustry.Vars.*;
public class BlocksFragment extends Fragment{
//number of block icon rows
private static final int rows = 4;
//number of category button rows
private static final int secrows = 4;
//size of each block icon
private static final float size = 48;
//maximum recipe rows
private static final int maxrow = 3;
/** Table containing description that is shown on top.*/
private Table descTable;
/** Main table containing the whole menu.*/
private Table mainTable;
/** Table for all section buttons and blocks.*/
private Table selectTable;
/** Whether the whole thing is shown or hidden by the popup button.*/
private boolean shown = true;
/** Recipe currently hovering over.*/
private Recipe hoverRecipe;
/** Last category selected.*/
private Category lastCategory;
/** Last block pane scroll Y position.*/
private float lastScroll;
/** Temporary recipe array for storage*/
private Array<Recipe> recipes = new Array<>();
public void build(Group parent){
InputHandler input = control.input(0);
parent.fill(container -> {
container.bottom().right().visible(() -> !state.is(State.menu));
mainTable = container.table(main -> {
//add top description table
descTable = new Table("button");
descTable.visible(() -> (hoverRecipe != null || input.recipe != null) && shown); //make sure it's visible when necessary
descTable.update(() -> {
if(state.is(State.menu)){
descTable.clear();
control.input(0).recipe = null;
}
// note: This is required because there is no direct connection between input.recipe and the description ui.
// If input.recipe gets set to null, a proper cleanup of the ui elements is required.
boolean anyRecipeShown = input.recipe != null || hoverRecipe != null;
boolean descriptionTableClean = descTable.getChildren().size == 0;
boolean cleanupRequired = (!anyRecipeShown && !descriptionTableClean);
if(cleanupRequired){
descTable.clear();
}
});
float w = 246f;
main.add(descTable).width(w);
main.row();
//now add the block selection menu
selectTable = main.table("pane", select -> {})
.margin(10f).marginLeft(0f).marginRight(0f).marginTop(-5)
.touchable(Touchable.enabled).right().bottom().width(w).get();
}).bottom().right().get();
});
Events.on(WorldLoadEvent.class, event -> rebuild());
rebuild();
}
/**Rebuilds the whole placement menu, attempting to preserve previous state.*/
void rebuild(){
selectTable.clear();
InputHandler input = control.input(0);
Stack stack = new Stack();
ButtonGroup<ImageButton> group = new ButtonGroup<>();
Table catTable = selectTable;
int cati = 0;
int checkedi = 0;
int rowsUsed = 0;
//add categories
for(Category cat : Category.values()){
//get recipes out by category
Recipe.getUnlockedByCategory(cat, recipes);
//empty section, nothing to see here
if(recipes.size == 0){
continue;
}
//table where actual recipes go
Table recipeTable = new Table();
recipeTable.margin(4).top().left().marginRight(15);
//add a new row here when needed
if(cati == secrows){
catTable = new Table();
selectTable.row();
selectTable.add(catTable).colspan(secrows).padTop(-5).growX();
}
//add category button
ImageButton catb = catTable.addImageButton("icon-" + cat.name(), "toggle", 40, () -> {
if(!recipeTable.isVisible() && input.recipe != null){
input.recipe = null;
}
lastCategory = cat;
stack.act(Gdx.graphics.getDeltaTime());
stack.act(Gdx.graphics.getDeltaTime());
}).growX().height(54).group(group)
.name("sectionbutton" + cat.name()).get();
if(lastCategory == cat || lastCategory == null){
checkedi = cati;
lastCategory = cat;
}
//scrollpane for recipes
ScrollPane pane = new ScrollPane(recipeTable, "clear-black");
pane.setOverscroll(false, false);
pane.visible(catb::isChecked);
pane.setScrollYForce(lastScroll);
pane.update(() -> {
Element e = Core.scene.hit(Graphics.mouse().x, Graphics.mouse().y, true);
if(e != null && e.isDescendantOf(pane)){
Core.scene.setScrollFocus(pane);
}else if(Core.scene.getScrollFocus() == pane){
Core.scene.setScrollFocus(null);
}
if(lastCategory == cat){
lastScroll = pane.getVisualScrollY();
}
});
stack.add(pane);
int i = 0;
//add actual recipes
for(Recipe r : recipes){
if((r.mode != null && r.mode != state.mode) || !r.visibility.shown()) continue;
ImageButton image = new ImageButton(new TextureRegion(), "select");
TextureRegion[] regions = r.result.getCompactIcon();
Stack istack = new Stack();
for(TextureRegion region : regions){
Image u = new Image(region);
u.update(() -> u.setColor(istack.getColor()));
istack.add(u);
}
image.getImageCell().setActor(istack).size(size);
image.addChild(istack);
image.setTouchable(Touchable.enabled);
image.getImage().remove();
image.addListener(new ClickListener(){
@Override
public void enter(InputEvent event, float x, float y, int pointer, Element fromActor){
super.enter(event, x, y, pointer, fromActor);
if(hoverRecipe != r){
hoverRecipe = r;
updateRecipe(r);
}
}
@Override
public void exit(InputEvent event, float x, float y, int pointer, Element toActor){
super.exit(event, x, y, pointer, toActor);
hoverRecipe = null;
updateRecipe(input.recipe);
}
});
image.clicked(() -> {
// note: input.recipe only gets set here during a click.
// during a hover only the visual description will be updated.
InputHandler handler = mobile ? input : control.input(0);
boolean nothingSelectedYet = handler.recipe == null;
boolean selectedSomethingElse = !nothingSelectedYet && handler.recipe != r;
boolean shouldMakeSelection = nothingSelectedYet || selectedSomethingElse;
if(shouldMakeSelection){
handler.recipe = r;
hoverRecipe = r;
updateRecipe(r);
}else{
handler.recipe = null;
hoverRecipe = null;
updateRecipe(null);
}
});
recipeTable.add(image).size(size + 8);
image.update(() -> {
image.setChecked(r == control.input(0).recipe);
TileEntity entity = players[0].getClosestCore();
if(entity == null) return;
if(!state.mode.infiniteResources){
for(ItemStack s : r.requirements){
if(!entity.items.has(s.item, Mathf.ceil(s.amount))){
istack.setColor(Color.GRAY);
return;
}
}
}
istack.setColor(Color.WHITE);
});
if(i % rows == rows - 1){
rowsUsed = Math.max((i + 1) / rows, rowsUsed);
recipeTable.row();
}
i++;
}
cati++;
}
if(group.getButtons().size > 0){
group.getButtons().get(checkedi).setChecked(true);
}
selectTable.row();
selectTable.add(stack).growX().left().top().colspan(Category.values().length).padBottom(-5).height((size + 12) * Math.min(rowsUsed, 3));
}
void toggle(float t, Interpolation ip){
if(shown){
shown = false;
mainTable.actions(Actions.translateBy(0, mainTable.getTranslation().y + (-mainTable.getHeight() - descTable.getHeight()), t, ip));
}else{
shown = true;
mainTable.actions(Actions.translateBy(0, -mainTable.getTranslation().y, t, ip));
}
}
private void updateRecipe(Recipe recipe){
if(recipe == null){
descTable.clear();
return;
}
descTable.clear();
descTable.setTouchable(Touchable.enabled);
descTable.defaults().left();
descTable.left();
descTable.margin(12);
Table header = new Table();
descTable.add(header).left();
descTable.row();
TextureRegion[] regions = recipe.result.getCompactIcon();
Stack istack = new Stack();
for(TextureRegion region : regions) istack.add(new Image(region));
header.add(istack).size(8 * 5).padTop(4);
Label nameLabel = new Label(recipe.result.formalName);
nameLabel.setWrap(true);
header.add(nameLabel).padLeft(2).width(120f);
header.addButton("?", () -> ui.content.show(recipe)).expandX().padLeft(3).top().right().size(40f, 44f).padTop(-2);
descTable.add().pad(2);
Table requirements = new Table();
descTable.row();
descTable.left();
descTable.add(requirements);
for(ItemStack stack : recipe.requirements){
requirements.addImage(stack.item.region).size(8 * 3);
Label reqlabel = new Label(() -> {
TileEntity core = players[0].getClosestCore();
if(core == null || state.mode.infiniteResources) return "*/*";
int amount = core.items.get(stack.item);
String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]");
return color + format(amount) + "[white]/" + stack.amount;
});
requirements.add(reqlabel).left();
requirements.row();
}
descTable.row();
}
String format(int number){
if(number >= 1000000){
return Strings.toFixed(number / 1000000f, 1) + "[gray]mil[]";
}else if(number >= 10000){
return number / 1000 + "[gray]k[]";
}else if(number >= 1000){
return Strings.toFixed(number / 1000f, 1) + "[gray]k[]";
}else{
return number + "";
}
}
}

View File

@@ -32,7 +32,7 @@ import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
public class HudFragment extends Fragment{ public class HudFragment extends Fragment{
public final BlocksFragment blockfrag = new BlocksFragment(); public final PlacementFragment blockfrag = new PlacementFragment();
private ImageButton menu, flip; private ImageButton menu, flip;
private Stack wavetable; private Stack wavetable;
@@ -224,7 +224,6 @@ public class HudFragment extends Fragment{
/**Show unlock notification for a new recipe.*/ /**Show unlock notification for a new recipe.*/
public void showUnlock(Recipe recipe){ public void showUnlock(Recipe recipe){
blockfrag.rebuild();
//if there's currently no unlock notification... //if there's currently no unlock notification...
if(lastUnlockTable == null){ if(lastUnlockTable == null){

View File

@@ -31,7 +31,7 @@ public class OverlayFragment extends Fragment{
config.build(group); config.build(group);
consume.build(group); consume.build(group);
input.buildUI(group); //input.buildUI(group);
} }
public void remove(){ public void remove(){

View File

@@ -0,0 +1,238 @@
package io.anuke.mindustry.ui.fragments;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Interpolation;
import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.game.EventType.WorldLoadGraphicsEvent;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.type.Category;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.ui.ImageStack;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.OreBlock;
import io.anuke.ucore.core.Events;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.scene.Group;
import io.anuke.ucore.scene.actions.Actions;
import io.anuke.ucore.scene.event.Touchable;
import io.anuke.ucore.scene.ui.ButtonGroup;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.ImageButton;
import io.anuke.ucore.scene.ui.layout.Table;
import io.anuke.ucore.util.Bundles;
import static io.anuke.mindustry.Vars.*;
public class PlacementFragment extends Fragment{
final int rowWidth = 4;
Category currentCategory = Category.turret;
Block hovered, lastDisplay;
Tile hoverTile;
Table blockTable, toggler;
boolean shown = true;
public PlacementFragment(){
Events.on(WorldLoadGraphicsEvent.class, event -> {
Group group = toggler.getParent();
toggler.remove();
build(group);
});
}
@Override
public void build(Group parent){
parent.fill(full -> {
toggler = full;
full.bottom().right().visible(() -> !state.is(State.menu));
full.table(frame -> {
InputHandler input = control.input(0);
//rebuilds the category table with the correct recipes
Runnable rebuildCategory = () -> {
blockTable.clear();
blockTable.top().margin(5);
int index = 0;
ButtonGroup<ImageButton> group = new ButtonGroup<>();
group.setMinCheckCount(0);
for(Recipe recipe : Recipe.getByCategory(currentCategory)){
if(index++ % rowWidth == 0){
blockTable.row();
}
boolean[] unlocked = {false};
ImageButton button = blockTable.addImageButton("icon-locked", "select", 8*4, () -> {
if(control.unlocks.isUnlocked(recipe)){
input.recipe = input.recipe == recipe ? null : recipe;
}
}).size(46f).group(group).get();
button.update(() -> { //color unplacable things gray
boolean ulock = control.unlocks.isUnlocked(recipe);
TileEntity core = players[0].getClosestCore();
Color color = core != null && (core.items.has(recipe.requirements) || state.mode.infiniteResources) ? Color.WHITE : ulock ? Color.GRAY : Color.WHITE;
button.forEach(elem -> elem.setColor(color));
button.setChecked(input.recipe == recipe);
if(ulock == unlocked[0]) return;
unlocked[0] = ulock;
if(!ulock){
button.replaceImage(new Image("icon-locked"));
}else{
button.replaceImage(new ImageStack(recipe.result.getCompactIcon()));
}
});
button.hovered(() -> hovered = recipe.result);
button.exited(() -> {
if(hovered == recipe.result){
hovered = null;
}
});
}
blockTable.act(0f);
};
//top table with hover info
frame.table("clear", top -> {
top.add(new Table()).growX().update(topTable -> {
if((tileDisplayBlock() == null && lastDisplay == getSelected()) ||
(tileDisplayBlock() != null && lastDisplay == tileDisplayBlock())) return;
topTable.clear();
topTable.top().left().margin(5);
lastDisplay = getSelected();
if(lastDisplay != null){ //show selected recipe
topTable.table(header -> {
header.left();
header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4);
header.labelWrap(() ->
!control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay)) ? Bundles.get("text.blocks.unknown") : lastDisplay.formalName)
.left().width(190f).padLeft(5);
header.add().growX();
if(control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay))){
header.addButton("?", "clear-partial", () -> ui.content.show(Recipe.getByResult(lastDisplay)))
.size(8 * 5).padTop(-5).padRight(-5).right().grow();
}
}).growX().left();
topTable.row();
//add requirement table
topTable.table(req -> {
req.top().left();
for(ItemStack stack : Recipe.getByResult(lastDisplay).requirements){
req.table(line -> {
line.left();
line.addImage(stack.item.region).size(8*2);
line.add(stack.item.localizedName()).color(Color.LIGHT_GRAY).padLeft(2).left();
line.labelWrap(() -> {
TileEntity core = players[0].getClosestCore();
if(core == null || state.mode.infiniteResources) return "*/*";
int amount = core.items.get(stack.item);
String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]");
return color + ui.formatAmount(amount) + "[white]/" + stack.amount;
}).padLeft(5);
}).left();
req.row();
}
}).growX().left().margin(3);
}else if(tileDisplayBlock() != null){ //show selected tile
lastDisplay = tileDisplayBlock();
topTable.add(new ImageStack(lastDisplay.getDisplayIcon(hoverTile))).size(8*4);
topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(190f).padLeft(5);
}
});
top.row();
top.addImage("blank").growX().color(Palette.accent).height(3f);
}).colspan(3).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null).touchable(Touchable.enabled);
frame.row();
frame.table("clear", blocksSelect -> {
blocksSelect.table(blocks -> blockTable = blocks).grow();
blocksSelect.row();
blocksSelect.table(input::buildUI).growX();
}).fillY().bottom().touchable(Touchable.enabled);
frame.addImage("blank").width(3f).fillY().color(Palette.accent);
frame.table(categories -> {
categories.defaults().size(50f);
ButtonGroup<ImageButton> group = new ButtonGroup<>();
for(Category cat : Category.values()){
if(Recipe.getByCategory(cat).isEmpty()) continue;
categories.addImageButton("icon-" + cat.name(), "clear-toggle", 16*2, () -> {
currentCategory = cat;
rebuildCategory.run();
}).group(group);
if(cat.ordinal() %2 == 1) categories.row();
}
}).touchable(Touchable.enabled);
rebuildCategory.run();
});
});
}
/**Returns the currently displayed block in the top box.*/
Block getSelected(){
Block toDisplay = null;
//setup hovering tile
if(!ui.hasMouse()){
Tile tile = world.tileWorld(Graphics.mouseWorld().x, Graphics.mouseWorld().y);
if(tile != null){
hoverTile = tile.target();
}else{
hoverTile = null;
}
}else{
hoverTile = null;
}
//block currently selected
if(control.input(0).recipe != null){
toDisplay = control.input(0).recipe.result;
}
//block hovered on in build menu
if(hovered != null){
toDisplay = hovered;
}
return toDisplay;
}
/**Returns the block currently being hovered over in the world.*/
Block tileDisplayBlock(){
return hoverTile == null ? null : hoverTile.block().synthetic() ? hoverTile.block() : hoverTile.floor() instanceof OreBlock ? hoverTile.floor() : null;
}
/**Show or hide the placement menu.*/
void toggle(float t, Interpolation ip){
toggler.clearActions();
if(shown){
shown = false;
toggler.actions(Actions.translateBy(toggler.getTranslation().x + toggler.getWidth(), 0, t, ip));
}else{
shown = true;
toggler.actions(Actions.translateBy(-toggler.getTranslation().x, 0, t, ip));
}
}
}

View File

@@ -448,6 +448,14 @@ public class Block extends BaseBlock {
} }
} }
public String getDisplayName(Tile tile){
return formalName;
}
public TextureRegion getDisplayIcon(Tile tile){
return getEditorIcon();
}
public TextureRegion getEditorIcon(){ public TextureRegion getEditorIcon(){
if(editorIcon == null){ if(editorIcon == null){
editorIcon = Draw.region("block-icon-" + name, Draw.region("clear")); editorIcon = Draw.region("block-icon-" + name, Draw.region("clear"));

View File

@@ -16,6 +16,7 @@ import io.anuke.mindustry.graphics.Layer;
import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.graphics.Shaders; import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.input.CursorType; import io.anuke.mindustry.input.CursorType;
import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BarType;
@@ -26,6 +27,7 @@ import io.anuke.mindustry.world.modules.ItemModule;
import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
import java.io.DataInput; import java.io.DataInput;
@@ -40,7 +42,7 @@ public class BuildBlock extends Block{
super(name); super(name);
update = true; update = true;
size = Integer.parseInt(name.charAt(name.length() - 1) + ""); size = Integer.parseInt(name.charAt(name.length() - 1) + "");
health = 1; health = 10;
layer = Layer.placement; layer = Layer.placement;
consumesTap = true; consumesTap = true;
solidifes = true; solidifes = true;
@@ -68,6 +70,18 @@ public class BuildBlock extends Block{
} }
} }
@Override
public String getDisplayName(Tile tile){
BuildEntity entity = tile.entity();
return Bundles.format("block.constructing", entity.recipe == null ? entity.previous.formalName : entity.recipe.result.formalName);
}
@Override
public TextureRegion getDisplayIcon(Tile tile){
BuildEntity entity = tile.entity();
return (entity.recipe == null ? entity.previous : entity.recipe.result).getEditorIcon();
}
@Override @Override
public boolean isSolidFor(Tile tile){ public boolean isSolidFor(Tile tile){
BuildEntity entity = tile.entity(); BuildEntity entity = tile.entity();
@@ -104,15 +118,6 @@ public class BuildBlock extends Block{
} }
} }
@Override
public void afterDestroyed(Tile tile, TileEntity e){
BuildEntity entity = (BuildEntity) e;
if(entity.previous != null && entity.previous.synthetic()){
tile.setBlock(entity.previous);
}
}
@Override @Override
public void draw(Tile tile){ public void draw(Tile tile){
BuildEntity entity = tile.entity(); BuildEntity entity = tile.entity();

View File

@@ -21,6 +21,11 @@ public class OreBlock extends Floor{
this.edge = base.name; this.edge = base.name;
} }
@Override
public String getDisplayName(Tile tile){
return drops.item.localizedName();
}
@Override @Override
public TextureRegion getEditorIcon(){ public TextureRegion getEditorIcon(){
if(editorIcon == null){ if(editorIcon == null){

View File

@@ -5,7 +5,6 @@ import com.badlogic.gdx.utils.IntSet;
import com.badlogic.gdx.utils.ObjectSet; import com.badlogic.gdx.utils.ObjectSet;
import com.badlogic.gdx.utils.Queue; import com.badlogic.gdx.utils.Queue;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
import static io.anuke.mindustry.Vars.threads; import static io.anuke.mindustry.Vars.threads;
@@ -38,38 +37,63 @@ public class PowerGraph{
lastFrameUpdated = threads.getFrameID(); lastFrameUpdated = threads.getFrameID();
float totalInput = 0f; boolean charge = false;
float totalInput = 0f;
float bufferInput = 0f;
for(Tile producer : producers){ for(Tile producer : producers){
totalInput += producer.entity.power.amount; if(producer.block().consumesPower){
bufferInput += producer.entity.power.amount;
}else{
totalInput += producer.entity.power.amount;
}
} }
for(Tile producer : producers){ float maxOutput = 0f;
float accumulator = producer.entity.power.amount; float bufferOutput = 0f;
for(Tile consumer : consumers){
if(accumulator <= 0.0001f) continue; if(consumer.block().outputsPower){
bufferOutput += consumer.block().powerCapacity - consumer.entity.power.amount;
float toEach = accumulator / consumers.size; }else{
float outputs = 0f; maxOutput += consumer.block().powerCapacity - consumer.entity.power.amount;
for(Tile tile : consumers){
outputs += Math.min(tile.block().powerCapacity - tile.entity.power.amount, toEach) / toEach;
} }
}
float finalEach = toEach / outputs * Timers.delta(); if(maxOutput < totalInput){
float buffer = 0f; charge = true;
}
if(Float.isNaN(finalEach) || Float.isInfinite(finalEach)){ if(totalInput + bufferInput <= 0.0001f || maxOutput + bufferOutput <= 0.0001f){
return;
}
float bufferUsed;
if(charge){
bufferUsed = Math.min((totalInput - maxOutput) / bufferOutput, 1f);
}else{
bufferUsed = Math.min((maxOutput - totalInput) / bufferInput, 1f);
}
float inputUsed = charge ? Math.min((maxOutput + bufferOutput) / totalInput, 1f) : 1f;
for(Tile producer : producers){
if(producer.block().consumesPower){
if(!charge){
producer.entity.power.amount -= producer.entity.power.amount * bufferUsed;
}
continue; continue;
} }
producer.entity.power.amount -= producer.entity.power.amount * inputUsed;
}
for(Tile tile : consumers){ float outputSatisfied = charge ? 1f : Math.min((totalInput + bufferInput) / maxOutput, 1f);
float used = Math.min(tile.block().powerCapacity - tile.entity.power.amount, finalEach) * accumulator / totalInput; for(Tile consumer : consumers){
buffer += used; if(consumer.block().outputsPower){
tile.entity.power.amount += used; if(charge){
consumer.entity.power.amount += (consumer.block().powerCapacity - consumer.entity.power.amount) * bufferUsed;
}
continue;
} }
consumer.entity.power.amount += (consumer.block().powerCapacity - consumer.entity.power.amount) * outputSatisfied;
producer.entity.power.amount -= buffer;
} }
} }

View File

@@ -16,14 +16,11 @@ import io.anuke.mindustry.world.consumers.ConsumeLiquid;
import io.anuke.mindustry.world.meta.BlockGroup; import io.anuke.mindustry.world.meta.BlockGroup;
import io.anuke.mindustry.world.meta.BlockStat; import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.StatUnit; import io.anuke.mindustry.world.meta.StatUnit;
import io.anuke.mindustry.world.meta.StatValue;
import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.layout.Cell;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.content; import static io.anuke.mindustry.Vars.content;
@@ -135,8 +132,9 @@ public class Drill extends Block{
for(int i = 0; i < list.size; i++){ for(int i = 0; i < list.size; i++){
Item item = list.get(i); Item item = list.get(i);
Cell<Image> imageCell = table.addImage(item.name + "1").size(8 * 3).padRight(2).padLeft(2).padTop(3).padBottom(3);
StatValue.addToolTip(imageCell.getElement(), item); table.addImage(item.name + "1").size(8 * 3).padRight(2).padLeft(2).padTop(3).padBottom(3);
table.add(item.localizedName());
if(i != list.size - 1){ if(i != list.size - 1){
table.add("/"); table.add("/");
} }

View File

@@ -52,7 +52,7 @@ public class Consumers{
return i; return i;
} }
public ConsumeItems items(ItemStack[] items){ public ConsumeItems items(ItemStack... items){
ConsumeItems i = new ConsumeItems(items); ConsumeItems i = new ConsumeItems(items);
add(i); add(i);
return i; return i;

View File

@@ -1,10 +1,5 @@
package io.anuke.mindustry.world.meta; package io.anuke.mindustry.world.meta;
import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.ucore.scene.Element;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.Tooltip;
import io.anuke.ucore.scene.ui.layout.Cell;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
/** /**
@@ -13,37 +8,7 @@ import io.anuke.ucore.scene.ui.layout.Table;
public interface StatValue{ public interface StatValue{
/** /**
* This method should provide all elements necessary to display this stat to the specified table. * This method should provide all elements necessary to display this stat to the specified table.
* For example, a stat that is just text would add label to the table. * For example, a stat that is just text would add a label to the table.
*/ */
void display(Table table); void display(Table table);
/**
* This method adds an icon image together with a tool tip which contains the name of the item.
* @param table the table to add the image cell to.
* @param item The item which provides the tool tip content.
* @return the image cell which was created. The cell is not yet sized or padded.
*/
static Cell<Image> addImageWithToolTip(Table table, UnlockableContent item){
// Create a table cell with a new image as provided by the item
Cell<Image> imageCell = table.addImage(item.getContentIcon());
// Retrieve the image and add a tool tip with the item's name
addToolTip(imageCell.getElement(), item);
// Return the table cell for further processing (sizing, padding, ...)
return imageCell;
}
/**
* Adds a tool tip containing the item's localized name to the given element.
* @param element The element to assign the tool tip to.
* @param item The item which provides the tool tip content.
*/
static void addToolTip(Element element, UnlockableContent item){
element.addListener(new Tooltip<>(new Table("clear"){{
add(item.localizedName());
margin(4);
}}));
}
} }

View File

@@ -2,12 +2,12 @@ package io.anuke.mindustry.world.meta.values;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.ui.ItemDisplay;
import io.anuke.mindustry.world.meta.StatValue; import io.anuke.mindustry.world.meta.StatValue;
import io.anuke.ucore.function.Predicate; import io.anuke.ucore.function.Predicate;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.layout.Cell;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Vars.content;
public class ItemFilterValue implements StatValue{ public class ItemFilterValue implements StatValue{
private final Predicate<Item> filter; private final Predicate<Item> filter;
@@ -27,10 +27,7 @@ public class ItemFilterValue implements StatValue{
for(int i = 0; i < list.size; i++){ for(int i = 0; i < list.size; i++){
Item item = list.get(i); Item item = list.get(i);
Cell<Image> imageCell = table.addImage(item.region); table.add(new ItemDisplay(item)).padRight(5);
imageCell.size(8 * 3).padRight(2).padLeft(2);
StatValue.addToolTip(imageCell.getElement(), item);
if(i != list.size - 1){ if(i != list.size - 1){
table.add("/"); table.add("/");

View File

@@ -3,11 +3,8 @@ package io.anuke.mindustry.world.meta.values;
import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.ui.ItemImage; import io.anuke.mindustry.ui.ItemDisplay;
import io.anuke.mindustry.world.meta.ContentStatValue; import io.anuke.mindustry.world.meta.ContentStatValue;
import io.anuke.mindustry.world.meta.StatValue;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.layout.Cell;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
public class ItemListValue implements ContentStatValue{ public class ItemListValue implements ContentStatValue{
@@ -41,17 +38,11 @@ public class ItemListValue implements ContentStatValue{
public void display(Table table){ public void display(Table table){
if(items != null){ if(items != null){
for(Item item : items){ for(Item item : items){
Cell<Image> imageCell = table.addImage(item.region); table.add(new ItemDisplay(item)).padRight(5);
imageCell.size(8 * 3).padRight(5);
StatValue.addToolTip(imageCell.getElement(), item);
} }
}else{ }else{
for(ItemStack stack : stacks){ for(ItemStack stack : stacks){
ItemImage image = new ItemImage(stack); table.add(new ItemDisplay(stack.item, stack.amount)).padRight(5);
table.add(image).size(8 * 3).padRight(5);
StatValue.addToolTip(image, stack.item);
} }
} }
} }

View File

@@ -3,9 +3,8 @@ package io.anuke.mindustry.world.meta.values;
import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.ui.ItemImage; import io.anuke.mindustry.ui.ItemDisplay;
import io.anuke.mindustry.world.meta.ContentStatValue; import io.anuke.mindustry.world.meta.ContentStatValue;
import io.anuke.mindustry.world.meta.StatValue;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
public class ItemValue implements ContentStatValue{ public class ItemValue implements ContentStatValue{
@@ -22,9 +21,6 @@ public class ItemValue implements ContentStatValue{
@Override @Override
public void display(Table table){ public void display(Table table){
//TODO better implementation, quantity support table.add(new ItemDisplay(item.item, item.amount));
ItemImage image = new ItemImage(item);
table.add(image).size(8 * 3);
StatValue.addToolTip(image, item.item);
} }
} }

View File

@@ -2,13 +2,12 @@ package io.anuke.mindustry.world.meta.values;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.ui.LiquidDisplay;
import io.anuke.mindustry.world.meta.StatValue; import io.anuke.mindustry.world.meta.StatValue;
import io.anuke.ucore.function.Predicate; import io.anuke.ucore.function.Predicate;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.Tooltip;
import io.anuke.ucore.scene.ui.layout.Cell;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Vars.content;
public class LiquidFilterValue implements StatValue{ public class LiquidFilterValue implements StatValue{
private final Predicate<Liquid> filter; private final Predicate<Liquid> filter;
@@ -26,10 +25,7 @@ public class LiquidFilterValue implements StatValue{
} }
for(int i = 0; i < list.size; i++){ for(int i = 0; i < list.size; i++){
Liquid item = list.get(i); table.add(new LiquidDisplay(list.get(i))).padRight(5);
Cell<Image> imageCell = StatValue.addImageWithToolTip(table, item);
imageCell.size(8 * 3).padRight(2).padLeft(2).padTop(2).padBottom(2);
if(i != list.size - 1){ if(i != list.size - 1){
table.add("/"); table.add("/");

View File

@@ -2,10 +2,8 @@ package io.anuke.mindustry.world.meta.values;
import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.ui.LiquidDisplay;
import io.anuke.mindustry.world.meta.ContentStatValue; import io.anuke.mindustry.world.meta.ContentStatValue;
import io.anuke.mindustry.world.meta.StatValue;
import io.anuke.ucore.scene.ui.Image;
import io.anuke.ucore.scene.ui.layout.Cell;
import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Table;
public class LiquidValue implements ContentStatValue{ public class LiquidValue implements ContentStatValue{
@@ -22,7 +20,6 @@ public class LiquidValue implements ContentStatValue{
@Override @Override
public void display(Table table){ public void display(Table table){
Cell<Image> imageCell = StatValue.addImageWithToolTip(table, liquid); table.add(new LiquidDisplay(liquid));
imageCell.size(8 * 3);
} }
} }

View File

@@ -85,7 +85,7 @@ public class CrashHandler{
try{ try{
Path path = Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes", Path path = Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes",
"crash-report-" + DateTimeFormatter.ofPattern("MM-dd-yyyy-HH:mm:ss").format(LocalDateTime.now()) + ".txt"); "crash-report-" + DateTimeFormatter.ofPattern("MM dd yyyy HH mm ss").format(LocalDateTime.now()) + ".txt");
Files.createDirectories(Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes")); Files.createDirectories(Paths.get(OS.getAppDataDirectoryString(Vars.appName), "crashes"));
Files.write(path, parseException(e).getBytes()); Files.write(path, parseException(e).getBytes());
@@ -117,7 +117,7 @@ public class CrashHandler{
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw); PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw); e.printStackTrace(pw);
return sw.toString().replace(e.getMessage(), e.getMessage().replace(System.getProperty("user.name"), "[USERNAME]")); return sw.toString();
} }
private static void ex(Runnable r){ private static void ex(Runnable r){

View File

@@ -356,12 +356,19 @@ public class ServerControl extends Module{
return; return;
} }
for(Item item : content.items()){ try{
if(item.type == ItemType.material){ Team team = Team.valueOf(arg[0]);
state.teams.get(Team.blue).cores.first().entity.items.add(item, 2000);
for(Item item : content.items()){
if(item.type == ItemType.material){
state.teams.get(team).cores.first().entity.items.add(item, 2000);
}
} }
info("Core filled.");
}catch(IllegalArgumentException ignored){
err("No such team exists.");
} }
info("Core filled.");
}); });
handler.register("crashreport", "<on/off>", "Disables or enables automatic crash reporting", arg -> { handler.register("crashreport", "<on/off>", "Disables or enables automatic crash reporting", arg -> {