Compare commits

..

28 Commits
v140 ... v140.1

Author SHA1 Message Date
Anuken
4a6791ab43 Merge remote-tracking branch 'origin/master' 2022-11-03 11:39:16 -04:00
Anuken
3a142507d1 redundant log 2022-11-03 11:39:11 -04:00
Ilya246
78f2a21a92 Update servers_v7.json (#7807) 2022-11-03 11:38:03 -04:00
Anuken
b8e245f945 Tested and fixed Steam achievements 2022-11-03 11:37:37 -04:00
Anuken
b1be360180 Merge remote-tracking branch 'origin/master' 2022-11-03 09:08:53 -04:00
Anuken
679e6bd27b Removed screenshots from game data export 2022-11-03 09:08:49 -04:00
Github Actions
f21cea225b Automatic bundle update 2022-11-03 13:04:48 +00:00
osoitz
e12aee6961 Update bundle_eu.properties (#7727)
Co-authored-by: Anuken <arnukren@gmail.com>
2022-11-03 09:03:55 -04:00
Github Actions
6abb549b18 Automatic bundle update 2022-11-03 12:59:57 +00:00
Nunting
161bb87eb8 Update bundle_ko.properties (#7800) 2022-11-03 08:58:59 -04:00
Anuken
7e0a6b985c Fixed #7804 / Fixed #7803 2022-11-03 08:57:15 -04:00
Anuken
d1f7fce7f9 Merge remote-tracking branch 'origin/master' 2022-11-03 08:45:13 -04:00
Anuken
cef2778d43 Fixed #7803 2022-11-03 08:45:07 -04:00
Lucky Clover
993f3973d2 worldMessage.targetable=false (#7802)
turret would try to attack worldMessage but cant hit it
so why not combine privileged with targetable(
2022-11-02 23:52:23 -04:00
Github Actions
4c0664c068 Automatic bundle update 2022-11-02 14:02:46 +00:00
Anuken
ebb37f4abe Fixed ability descriptions 2022-11-02 10:01:43 -04:00
Anuken
696d5e77ca Merge remote-tracking branch 'origin/master' 2022-11-02 08:37:16 -04:00
Anuken
74839a7f8d Fixed #7801 2022-11-02 08:37:11 -04:00
Catchears
5c353b1807 this game -> mod caused errors (#7799) 2022-11-01 19:38:53 -04:00
Anuken
3e6c54069d Merge remote-tracking branch 'origin/master' 2022-11-01 16:28:30 -04:00
Anuken
34a83de3cf Misc fixes 2022-11-01 16:28:24 -04:00
null
1624bb4502 fix factory plan icon scaling, unhardcode node beam regions (#7796)
* unfuck factory plan icon scaling, unhardcode node beam regions

* fix
2022-11-01 11:25:28 -04:00
Anuken
ff115ee376 Heat icon 2022-11-01 10:57:41 -04:00
Anuken
5a44bf6023 Merge remote-tracking branch 'origin/master' 2022-11-01 08:47:05 -04:00
Anuken
7f37b97861 Removed serverPaused 2022-11-01 08:47:00 -04:00
null
d5bea214cb make small paydriver have dark shade and palette change (#7794) 2022-11-01 07:57:09 -04:00
Anuken
bc2664994e Fixed #7793 2022-11-01 07:53:47 -04:00
Anuken
aef18b8696 Fixed #7795 2022-11-01 07:52:24 -04:00
74 changed files with 374 additions and 281 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 341 B

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 887 B

After

Width:  |  Height:  |  Size: 912 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 889 B

After

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 899 B

View File

@@ -155,7 +155,7 @@ mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
mod.errors = Errors have occurred loading content. mod.errors = Errors have occurred loading content.
mod.noerrorplay = [red]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. mod.noerrorplay = [red]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
@@ -645,7 +645,7 @@ objective.destroycore = [accent]Destroy Enemy Core
objective.command = [accent]Command Units objective.command = [accent]Command Units
objective.nuclearlaunch = [accent]\u26A0 Nuclear launch detected: [lightgray]{0} objective.nuclearlaunch = [accent]\u26A0 Nuclear launch detected: [lightgray]{0}
announce.nuclearstrike = [red]\u26A0 NUCLEAR STRIKE INBOUND \u26A0 announce.nuclearstrike = [red]\u26A0 NUCLEAR STRIKE INBOUND \u26A0\n[lightgray]construct backup cores immediately
loadout = Loadout loadout = Loadout
resources = Resources resources = Resources
@@ -934,6 +934,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed
@@ -1771,7 +1772,7 @@ hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a pay
hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires.
hint.generator = \uF879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uF87F [accent]Power Nodes[]. hint.generator = \uF879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uF87F [accent]Power Nodes[].
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uF835 [accent]Graphite[] \uF861Duo/\uF859Salvo ammunition to take Guardians down. hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uF835 [accent]Graphite[] \uF861Duo/\uF859Salvo ammunition to take Guardians down.
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a \u00EF\u00A1\u00A8 [accent]Foundation[] core over the \u00EF\u00A1\u00A9 [accent]Shard[] core. Make sure it is free from nearby obstructions. hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a \uf868 [accent]Foundation[] core over the \uf869 [accent]Shard[] core. Make sure it is free from nearby obstructions.
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[]. hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation. hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation.
hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[]. hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[].

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -921,6 +921,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Възстановяващо броня Поле ability.shieldregenfield = Възстановяващо броня Поле
ability.movelightning = Подвижна светкавица ability.movelightning = Подвижна светкавица
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -926,6 +926,7 @@ ability.unitspawn = Fàbrica de {0}
ability.shieldregenfield = Regenerador de camps de força ability.shieldregenfield = Regenerador de camps de força
ability.movelightning = Moviment llampec ability.movelightning = Moviment llampec
ability.shieldarc = Escut de descàrregues ability.shieldarc = Escut de descàrregues
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Camp de força: [accent]{0}[] de dany ~ [accent]{1}[] blocs / [accent]{2}[] objectius ability.energyfield = Camp de força: [accent]{0}[] de dany ~ [accent]{1}[] blocs / [accent]{2}[] objectius
bar.onlycoredeposit = Només es permet depositar al nucli. bar.onlycoredeposit = Només es permet depositar al nucli.

View File

@@ -923,6 +923,7 @@ ability.unitspawn = {0} továrna
ability.shieldregenfield = Silově opravné pole ability.shieldregenfield = Silově opravné pole
ability.movelightning = Pohybující se blesk ability.movelightning = Pohybující se blesk
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energetické pole: [accent]{0}[] poškození ~ [accent]{1}[] dlaždic / [accent]{2}[] cílu ability.energyfield = Energetické pole: [accent]{0}[] poškození ~ [accent]{1}[] dlaždic / [accent]{2}[] cílu
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Fabrik
ability.shieldregenfield = Skjold-regenereringsfelt ability.shieldregenfield = Skjold-regenereringsfelt
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -926,6 +926,7 @@ ability.unitspawn = {0} Fabrik
ability.shieldregenfield = Schild-regenerations-Feld ability.shieldregenfield = Schild-regenerations-Feld
ability.movelightning = Bewegungsblitze ability.movelightning = Bewegungsblitze
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energiefeld: [accent]{0}[] Schaden ~ [accent]{1}[] Blöcke / [accent]{2}[] Ziele ability.energyfield = Energiefeld: [accent]{0}[] Schaden ~ [accent]{1}[] Blöcke / [accent]{2}[] Ziele
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -932,6 +932,7 @@ ability.unitspawn = Fábrica de {0}
ability.shieldregenfield = Área de Regeneración de Armaduras ability.shieldregenfield = Área de Regeneración de Armaduras
ability.movelightning = Movimiento Relámpago ability.movelightning = Movimiento Relámpago
ability.shieldarc = Sector de Escudo ability.shieldarc = Sector de Escudo
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Campo de Energía: [accent]{0}[] daño ~ [accent]{1}[] bloques / [accent]{2}[] objetivos ability.energyfield = Campo de Energía: [accent]{0}[] daño ~ [accent]{1}[] bloques / [accent]{2}[] objetivos
bar.onlycoredeposit = Sólo se permite depositar en el Núcleo bar.onlycoredeposit = Sólo se permite depositar en el Núcleo

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -12,19 +12,19 @@ link.itch.io.description = PC deskargen itch.io orria
link.google-play.description = Google Play dendako sarrera link.google-play.description = Google Play dendako sarrera
link.f-droid.description = F-Droid catalogue listing link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Mindustry wiki ofiziala link.wiki.description = Mindustry wiki ofiziala
link.suggestions.description = Suggest new features link.suggestions.description = Proposatu ezaugarri berriak
link.bug.description = Found one? Report it here link.bug.description = Akatsen bat aurkitu duzu? Eman berri hemen
linkopen = This server has sent you a link. Are you sure you want to open it?\n\n[sky]{0} linkopen = Zerbitzari honek esteka bat bidali dizu. Ziur ireki nahi duzula?\n\n[sky]{0}
linkfail = Huts egin du esteka irekitzean!\nURL-a zure arbelera kopiatu da. linkfail = Huts egin du esteka irekitzean!\nURL-a zure arbelera kopiatu da.
screenshot = Pantaila-argazkia {0} helbidean gorde da screenshot = Pantaila-argazkia {0} helbidean gorde da
screenshot.invalid = Mapa handiegia, baliteke pantaila-argazkirako memoria nahiko ez egotea. screenshot.invalid = Mapa handiegia, baliteke pantaila-argazkirako memoria nahiko ez egotea.
gameover = Partida amaitu da gameover = Partida amaitu da
gameover.disconnect = Disconnect gameover.disconnect = Deskonektatu
gameover.pvp = [accent] {0}[] taldeak irabazi du! gameover.pvp = [accent] {0}[] taldeak irabazi du!
gameover.waiting = [accent]Waiting for next map... gameover.waiting = [accent]Hurrengo maparen zain...
highscore = [accent]Marka berria! highscore = [accent]Marka berria!
copied = Kopiatuta. copied = Kopiatuta.
indev.notready = This part of the game isn't ready yet indev.notready = Jolasaren atal hau ez dago prest
load.sound = Soinuak load.sound = Soinuak
load.map = Mapak load.map = Mapak
@@ -32,32 +32,32 @@ load.image = Irudiak
load.content = Edukia load.content = Edukia
load.system = Sistema load.system = Sistema
load.mod = Mod-ak load.mod = Mod-ak
load.scripts = Scripts load.scripts = Scriptak
be.update = A new Bleeding Edge build is available: be.update = Konpilazio berri bat eskuragarri dago:
be.update.confirm = Download it and restart now? be.update.confirm = Deskargatu eta berrabiarazi orain?
be.updating = Updating... be.updating = Eguneratzen...
be.ignore = Ignore be.ignore = Ezikusi
be.noupdates = No updates found. be.noupdates = Ez da eguneratzerik aurkitu.
be.check = Check for updates be.check = Egiaztatu eguneratzeak
mods.browser = Mod Browser mods.browser = Mod arakatzailea
mods.browser.selected = Selected mod mods.browser.selected = Hautatutako mod-a
mods.browser.add = Install mods.browser.add = Instalatu
mods.browser.reinstall = Reinstall mods.browser.reinstall = Berrinstalatu
mods.browser.view-releases = View Releases mods.browser.view-releases = Ikusi bertsioak
mods.browser.noreleases = [scarlet]No Releases Found\n[accent]Couldn't find any releases for this mod. Check if the mod's repository has any releases published. mods.browser.noreleases = [scarlet]Ez da bertsiorik aurkitu\n[accent]Ez da mod honen bertsiorik aurkitu. Egiaztatu mod-aren biltegian bertsiorik argitaratu ote den.
mods.browser.latest = <Latest> mods.browser.latest = <Azkena>
mods.browser.releases = Releases mods.browser.releases = Bersioak
mods.github.open = Repo mods.github.open = Biltegia
mods.github.open-release = Release Page mods.github.open-release = Bertsioaren orria
mods.browser.sortdate = Sort by recent mods.browser.sortdate = Ordenatu dataren arabera
mods.browser.sortstars = Sort by stars mods.browser.sortstars = Ordenatu izarren arabera
schematic = Eskama schematic = Eskema
schematic.add = Gorde eskema... schematic.add = Gorde eskema...
schematics = Eskemak schematics = Eskemak
schematic.replace = Badago izen bereko eskema bat. Ordeztu nahi duzu? schematic.replace = Badago izen bereko eskema bat. Ordeztu nahi duzu?
schematic.exists = A schematic by that name already exists. schematic.exists = Badago izen bereko eskema bat.
schematic.import = Inportatu eskema... schematic.import = Inportatu eskema...
schematic.exportfile = Esportatu fitxategia schematic.exportfile = Esportatu fitxategia
schematic.importfile = Inportatu fitxategia schematic.importfile = Inportatu fitxategia
@@ -70,25 +70,25 @@ schematic.saved = Eskema gordeta.
schematic.delete.confirm = Eskema hau behin betiko suntsituko da. schematic.delete.confirm = Eskema hau behin betiko suntsituko da.
schematic.rename = Aldatu izena eskemari schematic.rename = Aldatu izena eskemari
schematic.info = {0}x{1}, {2} bloke schematic.info = {0}x{1}, {2} bloke
schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. schematic.disabled = [scarlet]Eskemak desgaituta[]\nEz duzu eskemak erabiltzeko baimenik [accent]mapa[] edo [accent]zerbitzari[] honetan.
schematic.tags = Tags: schematic.tags = Etiketak:
schematic.edittags = Edit Tags schematic.edittags = Editatu etiketak
schematic.addtag = Add Tag schematic.addtag = Gehitu etiketa
schematic.texttag = Text Tag schematic.texttag = Etiketaren testua
schematic.icontag = Icon Tag schematic.icontag = Etiketaren ikonoa
schematic.renametag = Rename Tag schematic.renametag = Aldatu etiketaren izena
schematic.tagdelconfirm = Delete this tag completely? schematic.tagdelconfirm = Ezabatu etiketa hau erabat?
schematic.tagexists = That tag already exists. schematic.tagexists = Etiketa badago aurretik.
stats = Stats stats = Estatistikak
stats.wave = Waves Defeated stats.wave = Gainditutako boladak
stats.unitsCreated = Units Created stats.unitsCreated = Sortutako unitateak
stats.enemiesDestroyed = Enemies Destroyed stats.enemiesDestroyed = Suntsitutako etsaiak
stats.built = Buildings Built stats.built = Eraikitako eraikinak
stats.destroyed = Buildings Destroyed stats.destroyed = Suntsitutako eraikinak
stats.deconstructed = Buildings Deconstructed stats.deconstructed = Deseraikitako eraikinak
stats.playtime = Time Played stats.playtime = Jolastutako denbora
globalitems = [accent]Global Items globalitems = [accent]Elementu globalak
map.delete = Ziur al zaude "[accent]{0}[]" mapa ezabatu nahi duzula? map.delete = Ziur al zaude "[accent]{0}[]" mapa ezabatu nahi duzula?
level.highscore = Marka: [accent]{0} level.highscore = Marka: [accent]{0}
level.select = Maila hautaketa level.select = Maila hautaketa
@@ -103,8 +103,8 @@ joingame = Batu partidara
customgame = Partida pertsonalizatua customgame = Partida pertsonalizatua
newgame = Partida berria newgame = Partida berria
none = <bat ere ez> none = <bat ere ez>
none.found = [lightgray]<none found> none.found = [lightgray]<ez da aurkitu>
none.inmap = [lightgray]<none in map> none.inmap = [lightgray]<ez da aurkitu mapan>
minimap = Mapatxoa minimap = Mapatxoa
position = Posizioa position = Posizioa
close = Itxi close = Itxi
@@ -116,7 +116,7 @@ maps.browse = Arakatu mapak
continue = Jarraitu continue = Jarraitu
maps.none = [lightgray]Ez da maparik aurkitu! maps.none = [lightgray]Ez da maparik aurkitu!
invalid = Baliogabea invalid = Baliogabea
pickcolor = Pick Color pickcolor = Hautatu kolorea
preparingconfig = Konfigurazioa prestatzen preparingconfig = Konfigurazioa prestatzen
preparingcontent = Edukia prestatzen preparingcontent = Edukia prestatzen
uploadingcontent = Edukia igotzen uploadingcontent = Edukia igotzen
@@ -124,80 +124,82 @@ uploadingpreviewfile = Aurrebista fitxategia igotzen
committingchanges = Aldaketak aplikatzen committingchanges = Aldaketak aplikatzen
done = Egina done = Egina
feature.unsupported = Zure gailuak ez du ezaugarri hau onartzen. feature.unsupported = Zure gailuak ez du ezaugarri hau onartzen.
mods.initfailed = [red]⚠[] The previous Mindustry instance failed to initialize. This was likely caused by misbehaving mods.\n\nTo prevent a crash loop, [red]all mods have been disabled.[] mods.initfailed = [red]⚠[] Aurreko Mindustry instantziak ezin izan du abiatu. Ziur aski mod-en erruz.\n\nEtengabeko kraskatzean ekiditeko, [red]mod guztiak desgaitu dira.[]
mods = Mod-ak mods = Mod-ak
mods.none = [lightgray]Ez da mod-ik aurkitu! mods.none = [lightgray]Ez da mod-ik aurkitu!
mods.guide = Mod-ak sortzeko gida mods.guide = Mod-ak sortzeko gida
mods.report = Eman akatsaren berri mods.report = Eman akatsaren berri
mods.openfolder = Ireki Mod-en karpeta mods.openfolder = Ireki Mod-en karpeta
mods.viewcontent = View Content mods.viewcontent = Ikusi edukia
mods.reload = Reload mods.reload = Birkargatu
mods.reloadexit = The game will now exit, to reload mods. mods.reloadexit = Jolsa irten egingo da, mod-ak birkargatzeko.
mod.installed = [[Installed] mod.installed = [[Instalatuta]
mod.display = [gray]Mod:[orange] {0} mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Gaituta mod.enabled = [lightgray]Gaituta
mod.disabled = [scarlet]Desgaituta mod.disabled = [scarlet]Desgaituta
mod.multiplayer.compatible = [gray]Multiplayer Compatible mod.multiplayer.compatible = [gray]Hainbat jokalariekin bateragarria
mod.disable = Desgaitu mod.disable = Desgaitu
mod.content = Content: mod.content = Edukia:
mod.delete.error = Ezin izan da mod-a ezabatu. Agian fitxategia erabilia izaten ari da. mod.delete.error = Ezin izan da mod-a ezabatu. Agian fitxategia erabilia izaten ari da.
mod.incompatiblegame = [red]Outdated Game mod.incompatiblegame = [red]Outdated Game
mod.incompatiblemod = [red]Incompatible mod.incompatiblemod = [red]Incompatible
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]Unsupported
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]Unmet Dependencies
mod.erroredcontent = [scarlet]Content Errors mod.erroredcontent = [scarlet]Edukiaren erroreak
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function.
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = This mod is missing dependencies: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = This mod caused errors when loading. Ask the mod author to fix them.
mod.errors = Errors have occurred loading content. mod.errors = Erroreak gertatu dira edukia kargatzean.
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. mod.noerrorplay = [scarlet]Erroreak dituzten mod-ak dituzu.[] Desgaitu kaltetutako mod-ak edo konpondu erroreak jolastu aurretik.
mod.nowdisabled = [scarlet]'{0}' mod-ak menpekotasunak ditu faltan:[accent] {1}\n[lightgray]Aurretik beste mod hauek deskargatu behar dira.\nMod hau automatikoki desgaituko da. mod.nowdisabled = [scarlet]'{0}' mod-ak menpekotasunak ditu faltan:[accent] {1}\n[lightgray]Aurretik beste mod hauek deskargatu behar dira.\nMod hau automatikoki desgaituko da.
mod.enable = Gaitu mod.enable = Gaitu
mod.requiresrestart = Jolasa itxi egingo da mod-aren aldaketak aplikatzeko. mod.requiresrestart = Jolasa itxi egingo da mod-aren aldaketak aplikatzeko.
mod.reloadrequired = [scarlet]Birkargatu behar da mod.reloadrequired = [scarlet]Birkargatu behar da
mod.import = Importatu Mod-a mod.import = Inportatu Mod-a
mod.import.file = Import File mod.import.file = Inportatu fitxategia
mod.import.github = Inportatu GitHub Mod-a mod.import.github = Inportatu GitHub Mod-a
mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! mod.jarwarn = [scarlet]JAR mod-ak ez-ziurrak dira berez.[]\nEgiaztatu konfidantzako itur batetik inportatzen duzula!
mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. mod.item.remove = Hau[accent] '{0}'[] mod-aren parte da. Kentzeko, desinstalatu mod-a.
mod.remove.confirm = Mod hau ezabatuko da. mod.remove.confirm = Mod hau ezabatuko da.
mod.author = [lightgray]Egilea:[] {0} mod.author = [lightgray]Egilea:[] {0}
mod.missing = Gordetako partida honek eguneratu dituzun edo jada instalatuta ez dituzun mod-ak ditu. Gordetako partida izorratu daiteke. Ziur kargatu nahi duzula?\n[lightgray]Mod-ak:\n{0} mod.missing = Gordetako partida honek eguneratu dituzun edo jada instalatuta ez dituzun mod-ak ditu. Gordetako partida izorratu daiteke. Ziur kargatu nahi duzula?\n[lightgray]Mod-ak:\n{0}
mod.preview.missing = Mod hau tailerrean argitaratu aurretik, aurrebista bat gehitu behar diozu.\nKokatu[accent] preview.png[] izeneko irudi bat mod-aren karpetan eta saiatu berriro. mod.preview.missing = Mod hau tailerrean argitaratu aurretik, aurrebista bat gehitu behar diozu.\nKokatu[accent] preview.png[] izeneko irudi bat mod-aren karpetan eta saiatu berriro.
mod.folder.missing = Karpeta formatuko mod-ak besterik ezin dira argitaratu tailerrean.\nEdozein mod karpetara bihurtzeko, deskopnrimitu fitxategia eta ezabatu zip zaharra, gero berrabiarazi jolasa edo birkargatu zure mod-ak. mod.folder.missing = Karpeta formatuko mod-ak besterik ezin dira argitaratu tailerrean.\nEdozein mod karpetara bihurtzeko, deskopnrimitu fitxategia eta ezabatu zip zaharra, gero berrabiarazi jolasa edo birkargatu zure mod-ak.
mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. mod.scripts.disable = Zure gailuak ez ditu scrit-ak dituzten mod-ak onartzen. Mod hauek desgaitu behar dituzu jolasteko.
about.button = Honi buruz about.button = Honi buruz
name = Izena: name = Izena:
noname = Hautatu[accent] jokalari-izena[] aurretik. noname = Hautatu[accent] jokalari-izena[] aurretik.
search = Search: search = Bilatu:
planetmap = Planet Map planetmap = Planeta-mapa
launchcore = Launch Core launchcore = Egotzi muina
filename = Fitxategi-izena: filename = Fitxategi-izena:
unlocked = Eduki berria desblokeatuta! unlocked = Eduki berria desblokeatuta!
available = New research available! available = Ikerketa berria eskuragarri!
unlock.incampaign = < Unlock in campaign for details > unlock.incampaign = < Desblokeatu kanpainan xehetasunetarako >
campaign.select = Select Starting Campaign campaign.select = Hautatu hasierako kanpaina
campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. campaign.none = [lightgray]hautatu hasteko planeta.\nHau edonoiz aldatu daiteke.
campaign.erekir = Newer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. campaign.erekir = [accent]Jokalari berrientzak aholkatua.[]\n\nEduki berriagoa eta landuagoa. Kanpaina aurreratze lineala.\n\nKalitate hobeko mapak eta esperientzia orokorra.
campaign.serpulo = Older content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. campaign.serpulo = [scarlet]Ez aholkatua jokalari berrientzat.[]\n\nEduki zaharra; esperientzia klasikoa. Irekiagoa.\n\nAgian desorekatuak dauden mapak eta kanpainaren mekanikak. Ez horren landua.
completed = [accent]Ikertua completed = [accent]Ikertua
techtree = Teknologia zuhaitza techtree = Teknologia zuhaitza
techtree.select = Tech Tree Selection techtree.select = Teknologia zuhaitzeko hautaketa
techtree.serpulo = Serpulo techtree.serpulo = Serpulo
techtree.erekir = Erekir techtree.erekir = Erekir
research.load = Load research.load = Kargatu
research.discard = Discard research.discard = Baztertu
research.list = [lightgray]Ikertu: research.list = [lightgray]Ikertu:
research = Ikertu research = Ikertu
researched = [lightgray]{0} ikertuta. researched = [lightgray]{0} ikertuta.
research.progress = {0}% complete research.progress = {0}% osatuta
players = {0} jokalari konektatuta players = {0} jokalari konektatuta
players.single = Jokalari {0} konektatuta players.single = Jokalari {0} konektatuta
players.search = search players.search = bilatu
players.notfound = [gray]no players found players.notfound = [gray]ez da jokalaririk aurkitu
server.closing = [accent]Zerbitzaria ixten... server.closing = [accent]Zerbitzaria ixten...
server.kicked.kick = Zerbitzaritik kanporatu zaituzte! server.kicked.kick = Zerbitzaritik kanporatu zaituzte!
server.kicked.whitelist = Ez zaude hemengo zerrenda zurian. server.kicked.whitelist = Ez zaude hemengo zerrenda zurian.
@@ -214,7 +216,7 @@ server.kicked.nameEmpty = Aukeratu duzun izena baliogabea da.
server.kicked.idInUse = Bazaude zerbitzari honetan! Ezin zara bi kontu desberdinekin konektatu. server.kicked.idInUse = Bazaude zerbitzari honetan! Ezin zara bi kontu desberdinekin konektatu.
server.kicked.customClient = Zerbitzari honek ez ditu konpilazio pertsonalizatuak onartzen. Deskargatu bertsio ofizial bat. server.kicked.customClient = Zerbitzari honek ez ditu konpilazio pertsonalizatuak onartzen. Deskargatu bertsio ofizial bat.
server.kicked.gameover = Partida amaitu da! server.kicked.gameover = Partida amaitu da!
server.kicked.serverRestarting = The server is restarting. server.kicked.serverRestarting = Zerbitzaria berrabiaratzen ari da.
server.versions = Zure bertsioa:[accent] {0}[]\nZerbitzariaren bertsioa:[accent] {1}[] server.versions = Zure bertsioa:[accent] {0}[]\nZerbitzariaren bertsioa:[accent] {1}[]
host.info = [accent]Ostalaria[] botoiak zerbitzari bat abiatzen du [scarlet]6567[] atakan.\n[lightgray]wifi edo sare lokal[] berean dagoen edonor zure zerbitzaria ikusi ahal beharko luke.\n\nJendea edonondik IP-a erabilita konektatu ahal izatea nahi baduzu, [accent]ataka birbidaltzea[] ezinbestekoa da.\n\n[lightgray]Oharra: Inork zure sare lokalean partidara elkartzeko arazoak baditu, egiaztatu Mindustry-k baimena duela sare lokalera elkartzeko suebakiaren ezarpenetan. Kontuan izan sare publiko batzuk ez dutela zerbitzarien bilaketa baimentzen. host.info = [accent]Ostalaria[] botoiak zerbitzari bat abiatzen du [scarlet]6567[] atakan.\n[lightgray]wifi edo sare lokal[] berean dagoen edonor zure zerbitzaria ikusi ahal beharko luke.\n\nJendea edonondik IP-a erabilita konektatu ahal izatea nahi baduzu, [accent]ataka birbidaltzea[] ezinbestekoa da.\n\n[lightgray]Oharra: Inork zure sare lokalean partidara elkartzeko arazoak baditu, egiaztatu Mindustry-k baimena duela sare lokalera elkartzeko suebakiaren ezarpenetan. Kontuan izan sare publiko batzuk ez dutela zerbitzarien bilaketa baimentzen.
join.info = Hemen, konektatzeko [accent]zerbitzari baten IP-a[] sartu dezakezu konektatzeko, edo [accent]sare lokaleko[] zerbitzariak bilatu.\nLAN zein WAN sareetan onartzen dira hainbat jokalarien partidak .\n\n[lightgray]Oharra: Ez dago zerbitzarien zerrenda global automatikorik, beste inorekin IP bidez konektatu nahi baduzu, ostalariari bere IP helbidea eskatu beharko diozu. join.info = Hemen, konektatzeko [accent]zerbitzari baten IP-a[] sartu dezakezu konektatzeko, edo [accent]sare lokaleko[] zerbitzariak bilatu.\nLAN zein WAN sareetan onartzen dira hainbat jokalarien partidak .\n\n[lightgray]Oharra: Ez dago zerbitzarien zerrenda global automatikorik, beste inorekin IP bidez konektatu nahi baduzu, ostalariari bere IP helbidea eskatu beharko diozu.
@@ -230,14 +232,14 @@ server.refreshing = Zerbitzaria freskatzen
hosts.none = [lightgray]Ez da partida lokalik aurkitu! hosts.none = [lightgray]Ez da partida lokalik aurkitu!
host.invalid = [scarlet]Ezin da ostalarira konektatu. host.invalid = [scarlet]Ezin da ostalarira konektatu.
servers.local = Local Servers servers.local = Zerbitzari lokalak
servers.local.steam = Open Games & Local Servers servers.local.steam = Ireki partidak eta zerbitzari lokalak
servers.remote = Remote Servers servers.remote = Urruneko zerbitzariak
servers.global = Community Servers servers.global = Komunitatearen zerbitzariak
servers.disclaimer = Community servers are [accent]not[] owned or controlled by the developer.\n\nServers may contain user-generated content that is not appropriate for all ages. servers.disclaimer = Komunitatearen zerbitzariak [accent]ez[] ditu garatzaileak kontrolatzen.\n\nZerbitzari hauek erabiltzaileek sortutako edukia izan dezakete, eta ez du zertan adin guztientzat egokia izan behar.
servers.showhidden = Show Hidden Servers servers.showhidden = Erakutsi ezkutatutako zerbitzariak
server.shown = Shown server.shown = Erakutsita
server.hidden = Hidden server.hidden = Ezkutatuta
viewplayer = Viewing Player: [accent]{0} viewplayer = Viewing Player: [accent]{0}
trace = Trazatu jokalaria trace = Trazatu jokalaria
@@ -911,6 +913,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Tehdas
ability.shieldregenfield = Kilvenvahvistuskenttä ability.shieldregenfield = Kilvenvahvistuskenttä
ability.movelightning = Salamointi liikkuessa ability.movelightning = Salamointi liikkuessa
ability.shieldarc = Kilpikaari ability.shieldarc = Kilpikaari
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energiakenttä: [accent]{0}[] vahinko ~ [accent]{1}[] palikkaa / [accent]{2}[] kohdetta ability.energyfield = Energiakenttä: [accent]{0}[] vahinko ~ [accent]{1}[] palikkaa / [accent]{2}[] kohdetta
bar.onlycoredeposit = Sijoittaminen sallittua vain ytimeen bar.onlycoredeposit = Sijoittaminen sallittua vain ytimeen

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -931,6 +931,7 @@ ability.unitspawn = Usine de {0}
ability.shieldregenfield = Champ de régénération de bouclier ability.shieldregenfield = Champ de régénération de bouclier
ability.movelightning = Déplacement éclair ability.movelightning = Déplacement éclair
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Champ d'énergie: [accent]{0}[] dégâts ~ [accent]{1}[] blocs / [accent]{2}[] cibles ability.energyfield = Champ d'énergie: [accent]{0}[] dégâts ~ [accent]{1}[] blocs / [accent]{2}[] cibles
bar.onlycoredeposit = Seul le dépôt de ressources dans le Noyau est autorisé bar.onlycoredeposit = Seul le dépôt de ressources dans le Noyau est autorisé

View File

@@ -920,6 +920,7 @@ ability.unitspawn = {0} Gyár
ability.shieldregenfield = Pajzsos regeneráló mező ability.shieldregenfield = Pajzsos regeneráló mező
ability.movelightning = Világítás ability.movelightning = Világítás
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -931,6 +931,7 @@ ability.unitspawn = {0} Pabrik
ability.shieldregenfield = Bidang Regenerasi Perisai ability.shieldregenfield = Bidang Regenerasi Perisai
ability.movelightning = Pergerakan Petir ability.movelightning = Pergerakan Petir
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Bidang Tenaga: [accent]{0}[] kerusakan ~ [accent]{1}[] blok / [accent]{2}[] target ability.energyfield = Bidang Tenaga: [accent]{0}[] kerusakan ~ [accent]{1}[] blok / [accent]{2}[] target
bar.onlycoredeposit = Hanya Penyetoran Inti yang Diizinkan bar.onlycoredeposit = Hanya Penyetoran Inti yang Diizinkan

View File

@@ -918,6 +918,7 @@ ability.unitspawn = {0} Fabbrica
ability.shieldregenfield = Campo di Rigenerazione Scudo ability.shieldregenfield = Campo di Rigenerazione Scudo
ability.movelightning = Movimento Fulminante ability.movelightning = Movimento Fulminante
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Campo energetico: [accent]{0}[] danno ~ [accent]{1}[] blocchi / [accent]{2}[] obbiettivi ability.energyfield = Campo energetico: [accent]{0}[] danno ~ [accent]{1}[] blocchi / [accent]{2}[] obbiettivi
bar.onlycoredeposit = Concesso solo il deposito al nucleo bar.onlycoredeposit = Concesso solo il deposito al nucleo

View File

@@ -923,6 +923,7 @@ ability.unitspawn = {0} 生産
ability.shieldregenfield = シールドリペアフィールド ability.shieldregenfield = シールドリペアフィールド
ability.movelightning = ムーブメントライトニング ability.movelightning = ムーブメントライトニング
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = エネルギー範囲: [accent]{0}[] ダメージ ~ [accent]{1}[] ブロック / [accent]{2}[] ターゲット ability.energyfield = エネルギー範囲: [accent]{0}[] ダメージ ~ [accent]{1}[] ブロック / [accent]{2}[] ターゲット
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -144,16 +144,16 @@ mod.multiplayer.compatible = [gray]멀티플레이어 호환 가능
mod.disable = 비활성화 mod.disable = 비활성화
mod.content = 콘텐츠: mod.content = 콘텐츠:
mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다.
mod.incompatiblegame = [red]Outdated Game mod.incompatiblegame = [red]구버전 게임
mod.incompatiblemod = [red]Incompatible mod.incompatiblemod = [red]호환되지 않음
mod.blacklisted = [red]Unsupported mod.blacklisted = [red]지원하지 않음
mod.unmetdependencies = [red]Unmet Dependencies mod.unmetdependencies = [red]충촉되지 않은 종속성
mod.erroredcontent = [scarlet]콘텐츠 오류 mod.erroredcontent = [scarlet]콘텐츠 오류
mod.requiresversion.details = Requires game version: [accent]{0}[]\nYour game is outdated. This mod requires a newer version of the game (possibly a beta/alpha release) to function. mod.requiresversion.details = 게임 버전 요구: [accent]{0}[]\n당신의 게임은 구버전입니다. 이 모드가 작동하려면 최신 버전의 게임이 필요합니다. (베타/알파 릴리즈일 가능성이 있음).
mod.outdatedv7.details = This mod is incompatible with the latest version of the game. The author must update it, and add [accent]minGameVersion: 136[] to its [accent]mod.json[] file. mod.outdatedv7.details = 이 모드는 최신 버전의 게임과 호환되지 않습니다. 반드시 작성자가 업데이트해야 하고, [accent]mod.json[] 파일에 [accent]최소게임버전: 136[]을 추가해야 합니다.
mod.blacklisted.details = This mod has been manually blacklisted for causing crashes or other issues with this version of the game. Do not use it. mod.blacklisted.details = 이 모드는 이 버전의 게임에서 충돌 또는 기타 문제를 일으키는 것으로 인해 수동으로 블랙리스트에 올라와 있습니다. 사용하지 마세요.
mod.missingdependencies.details = This mod is missing dependencies: {0} mod.missingdependencies.details = 이 모드에는 종속성이 없음: {0}
mod.erroredcontent.details = This game caused errors when loading. Ask the mod author to fix them. mod.erroredcontent.details = 이 게임은 로딩하는 동안 오류가 발생했습니다. 모드 작성자에게 수정하도록 요청하세요.
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함 mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함
mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요. mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요.
mod.nowdisabled = [scarlet]모드 '{0}'에 필요한 종속성이 없습니다:[accent] {1}\n[lightgray]이 모드를 먼저 내려받아야 합니다.\n이 모드는 자동으로 비활성화됩니다. mod.nowdisabled = [scarlet]모드 '{0}'에 필요한 종속성이 없습니다:[accent] {1}\n[lightgray]이 모드를 먼저 내려받아야 합니다.\n이 모드는 자동으로 비활성화됩니다.
@@ -767,12 +767,12 @@ sector.marsh.name = 습지
sector.peaks.name = 산봉우리 sector.peaks.name = 산봉우리
sector.ravine.name = 협곡 sector.ravine.name = 협곡
sector.caldera-erekir.name = 칼데라 sector.caldera-erekir.name = 칼데라
sector.stronghold.name = Stronghold sector.stronghold.name = 거점
sector.crevice.name = Crevice sector.crevice.name = 틈새
sector.siege.name = Siege sector.siege.name = 포위
sector.crossroads.name = Crossroads sector.crossroads.name = 교차로
sector.karst.name = Karst sector.karst.name = 카르스트
sector.origin.name = Origin sector.origin.name = 근원
sector.onset.description = 튜토리얼 지역. 아직 목표가 만들어지지 않았습니다. 정보를 더 기다리십시오. sector.onset.description = 튜토리얼 지역. 아직 목표가 만들어지지 않았습니다. 정보를 더 기다리십시오.
sector.aegis.description = 적은 방어막으로 보호받고 있습니다. 이 구역에서 실험적인 방어막 차단기 모듈이 감지되었습니다.\n이 구조물을 찾으십시오. 텅스텐을 공급해 방어막 차단기를 가동하고 적의 기지를 파괴하십시오. sector.aegis.description = 적은 방어막으로 보호받고 있습니다. 이 구역에서 실험적인 방어막 차단기 모듈이 감지되었습니다.\n이 구조물을 찾으십시오. 텅스텐을 공급해 방어막 차단기를 가동하고 적의 기지를 파괴하십시오.
sector.lake.description = 이 지역의 광재 호수는 기체의 활동범위를 크게 제한시킵니다. 호버 유닛이 유일한 선택지입니다.\n[accent]함선 재구성기[]를 연구하고 [accent]일루드[]를 가능한 한 빨리 생산하십시오. sector.lake.description = 이 지역의 광재 호수는 기체의 활동범위를 크게 제한시킵니다. 호버 유닛이 유일한 선택지입니다.\n[accent]함선 재구성기[]를 연구하고 [accent]일루드[]를 가능한 한 빨리 생산하십시오.
@@ -924,6 +924,7 @@ ability.unitspawn = {0} 공장
ability.shieldregenfield = 방어막 복구 필드 ability.shieldregenfield = 방어막 복구 필드
ability.movelightning = 가속 전격 ability.movelightning = 가속 전격
ability.shieldarc = 방어막 아크 ability.shieldarc = 방어막 아크
ability.suppressionfield = Regen Suppression Field
ability.energyfield = 에너지 필드: [accent]{1}[]타일 내 [accent]{2}[]개 목표물에게 [accent]{0}[]피해량 ability.energyfield = 에너지 필드: [accent]{1}[]타일 내 [accent]{2}[]개 목표물에게 [accent]{0}[]피해량
bar.onlycoredeposit = 코어에만 투입할 수 있습니다 bar.onlycoredeposit = 코어에만 투입할 수 있습니다
@@ -1104,7 +1105,7 @@ keybind.mouse_move.name = 커서를 따라서 이동
keybind.pan.name = 팬 보기 keybind.pan.name = 팬 보기
keybind.boost.name = 이륙 keybind.boost.name = 이륙
keybind.command_mode.name = 명령 모드 keybind.command_mode.name = 명령 모드
keybind.rebuild_select.name = Rebuild Region keybind.rebuild_select.name = 지역 재건
keybind.schematic_select.name = 영역 설정 keybind.schematic_select.name = 영역 설정
keybind.schematic_menu.name = 설계도 메뉴 keybind.schematic_menu.name = 설계도 메뉴
keybind.schematic_flip_x.name = 설계도 X축 뒤집기 keybind.schematic_flip_x.name = 설계도 X축 뒤집기
@@ -1130,7 +1131,7 @@ keybind.select.name = 선택/공격
keybind.diagonal_placement.name = 대각선 설치 keybind.diagonal_placement.name = 대각선 설치
keybind.pick.name = 블록 선택 keybind.pick.name = 블록 선택
keybind.break_block.name = 블록 파괴 keybind.break_block.name = 블록 파괴
keybind.select_all_units = Select All Units keybind.select_all_units = 전체 기체 선택
keybind.deselect.name = 선택해제 keybind.deselect.name = 선택해제
keybind.pickupCargo.name = 화물 집기 keybind.pickupCargo.name = 화물 집기
keybind.dropCargo.name = 화물 내려놓기 keybind.dropCargo.name = 화물 내려놓기
@@ -1442,8 +1443,8 @@ block.distributor.name = 대형 분배기
block.sorter.name = 필터 block.sorter.name = 필터
block.inverted-sorter.name = 반전 필터 block.inverted-sorter.name = 반전 필터
block.message.name = 메모 블록 block.message.name = 메모 블록
block.reinforced-message.name = Reinforced Message block.reinforced-message.name = 보강된 메모 블록
block.world-message.name = World Message block.world-message.name = 세계 메모 블록
block.illuminator.name = 조명 block.illuminator.name = 조명
block.overflow-gate.name = 포화 필터 block.overflow-gate.name = 포화 필터
block.underflow-gate.name = 불포화 필터 block.underflow-gate.name = 불포화 필터
@@ -1540,7 +1541,7 @@ block.payload-router.name = 화물 분배기
block.duct.name = 도관 block.duct.name = 도관
block.duct-router.name = 도관 분배기 block.duct-router.name = 도관 분배기
block.duct-bridge.name = 도관 다리 block.duct-bridge.name = 도관 다리
block.large-payload-mass-driver.name = Large Payload Mass Driver block.large-payload-mass-driver.name = 대형 화물 매스 드라이버
block.payload-void.name = 화물 소멸기 block.payload-void.name = 화물 소멸기
block.payload-source.name = 화물 공급기 block.payload-source.name = 화물 공급기
block.disassembler.name = 광재 분해기 block.disassembler.name = 광재 분해기
@@ -1620,7 +1621,7 @@ block.electric-heater.name = 전기 가열기
block.slag-heater.name = 광재 가열기 block.slag-heater.name = 광재 가열기
block.phase-heater.name = 메타 가열기 block.phase-heater.name = 메타 가열기
block.heat-redirector.name = 열 전송기 block.heat-redirector.name = 열 전송기
block.heat-router.name = Heat Router block.heat-router.name = 열 분배기
block.slag-incinerator.name = 광재 소각로 block.slag-incinerator.name = 광재 소각로
block.carbide-crucible.name = 탄화물 도가니 block.carbide-crucible.name = 탄화물 도가니
block.slag-centrifuge.name = 광재 원심분리기 block.slag-centrifuge.name = 광재 원심분리기
@@ -1696,7 +1697,7 @@ block.payload-mass-driver.name = 화물 매스 드라이버
block.small-deconstructor.name = 소형 화물 분해기 block.small-deconstructor.name = 소형 화물 분해기
block.canvas.name = 도화지 block.canvas.name = 도화지
block.world-processor.name = 월드 프로세서 block.world-processor.name = 월드 프로세서
block.world-cell.name = 월드 block.world-cell.name = 세계
block.tank-fabricator.name = 전차 조립기 block.tank-fabricator.name = 전차 조립기
block.mech-fabricator.name = 기계 조립기 block.mech-fabricator.name = 기계 조립기
block.ship-fabricator.name = 함선 조립기 block.ship-fabricator.name = 함선 조립기
@@ -1740,8 +1741,8 @@ hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을
hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오. hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오.
hint.unitControl = 아군 기체와 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오. hint.unitControl = 아군 기체와 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오.
hint.unitControl.mobile = 아군 기체와 포탑을 조종하려면 해당 개체를 [accent]빠르게 두 번 누르십시오[]. hint.unitControl.mobile = 아군 기체와 포탑을 조종하려면 해당 개체를 [accent]빠르게 두 번 누르십시오[].
hint.unitSelectControl = To control units, enter [accent]command mode[] by holding [accent]L-shift.[]\nWhile in command mode, click and drag to select units. [accent]Right-click[] a location or target to command units there. hint.unitSelectControl = 기체를 조종하려면, [accent]왼쪽 shift[]를 눌러 [accent]명령 모드[]를 활성화하시오.\n명령 모드가 활성화되어 있을 때 누르거나 끌어서 기체를 선택합니다. [accent]우클릭[]으로 기체에게 이동과 공격을 명령할 수 있습니다.
hint.unitSelectControl.mobile = To control units, enter [accent]command mode[] by pressing the [accent]command[] button in the bottom left.\nWhile in command mode, long-press and drag to select units. Tap a location or target to command units there. hint.unitSelectControl.mobile = 기체를 조종하려면, 왼쪽 아래에 있는 [accent]명령[]을 눌러 [accent]명령 모드[]를 활성화하시오.\n명령 모드가 활성화되어 있을 때 길게 누르거나 끌어서 기체를 선택합니다. 눌러서 기체에게 이동과 공격을 명령할 수 있습니다.
hint.launch = 충분한 자원을 모았으면, 오른쪽 아래의 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다. hint.launch = 충분한 자원을 모았으면, 오른쪽 아래의 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다.
hint.launch.mobile = 충분한 자원을 모았으면, 오른쪽 아래의 \ue88c [accent]메뉴[]에 있는 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다. hint.launch.mobile = 충분한 자원을 모았으면, 오른쪽 아래의 \ue88c [accent]메뉴[]에 있는 \ue827 [accent]지도[]에서 주변 지역을 선택해서 [accent]출격[]할 수 있습니다.
hint.schematicSelect = [accent][[F][]를 누른 채로 끌어서 복사하고 붙여넣을 블록을 선택하십시오. \n\n [accent][[마우스 휠][]을 누르면 한 개의 블록만 복사할 수 있습니다. hint.schematicSelect = [accent][[F][]를 누른 채로 끌어서 복사하고 붙여넣을 블록을 선택하십시오. \n\n [accent][[마우스 휠][]을 누르면 한 개의 블록만 복사할 수 있습니다.
@@ -1761,52 +1762,52 @@ hint.presetDifficulty = 이 지역은 [scarlet]위험도가 높은[] 지역입
hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다. hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다.
hint.factoryControl = 기체 공장의 [accent]출력 방향[]을 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 마우스 오른쪽 버튼으로 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다. hint.factoryControl = 기체 공장의 [accent]출력 방향[]을 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 마우스 오른쪽 버튼으로 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다.
hint.factoryControl.mobile = 기체 공장의 [accent]출력 방향[]을 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 눌러서 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다. hint.factoryControl.mobile = 기체 공장의 [accent]출력 방향[]을 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 눌러서 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다.
gz.mine = Move near the \uf8c4 [accent]copper ore[] on the ground and click to begin mining. gz.mine = 주변 바닥에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
gz.mine.mobile = Move near the \uf8c4 [accent]copper ore[] on the ground and tap it to begin mining. gz.mine.mobile = 주변 바닥에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
gz.research = Open the \ue875 tech tree.\nResearch the \uf870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nClick on a copper patch to place it. gz.research = \ue875 연구 기록을 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 오른쪽 아래에 있는 메뉴에서 선택하세요.\n구리조각 위를 눌러서 배치합니다.
gz.research.mobile = Open the \ue875 tech tree.\nResearch the \uf870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nTap on a copper patch to place it.\n\nPress the \ue800 [accent]checkmark[] at the bottom right to confirm. gz.research.mobile = \ue875 연구 기록을 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 오른쪽 아래에 있는 메뉴에서 선택하세요.\n구리조각 위를 눌러서 배치합니다.\n\n오른쪽 아래에서 \ue800 [accent]체크마크[]를 눌러 확정지으세요.
gz.conveyors = Research and place \uf896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate. gz.conveyors = \uf896 [accent]컨베이어[]를 연구하고 배치하여 채굴된 자원을 운반하세요.\n드릴에서 코어로 말이죠.\n\n클릭하고 끌어서 컨베이어를 길게 배치하세요.\n[accent]스크롤[]해서 방향을 회전할 수 있습니다.
gz.conveyors.mobile = Research and place \uf896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nHold down your finger for a second and drag to place multiple conveyors. gz.conveyors.mobile = \uf896 [accent]컨베이어[]를 연구하고 배치하여 채굴된 자원을 운반하세요.\n드릴에서 코어로 말이죠.\n\n손가락을 길게 누르고 끌어서 컨베이어를 길게 배치하세요.
gz.drills = Expand the mining operation.\nPlace more Mechanical Drills.\nMine 100 copper. gz.drills = 채굴 작업을 확장하세요.\n기계식 드릴을 더 배치하세요.\n구리 100개 채굴하기.
gz.lead = \uf837 [accent]Lead[] is another commonly used resource.\nSet up drills to mine lead. gz.lead = \uf837 [accent]납[]은 일반적으로 사용되는 또 다른 자원입니다.\n납을 채굴하기 위한 드릴을 설치하세요.
gz.moveup = \ue804 Move up for further objectives. gz.moveup = \ue804 추가 목표를 위해 위로 이동하세요.
gz.turrets = Research and place 2 \uf861 [accent]Duo[] turrets to defend the core.\nDuo turrets require \uf838 [accent]ammo[] from conveyors. gz.turrets = 코어를 보호하기 위해 \uf861 [accent]듀오[] 포탑을 연구하고 2개를 설치하세요.\n듀오 포탑은 컨베이어로부터 \uf838 [accent]탄약[]을 공급받아야 합니다.
gz.duoammo = Supply the Duo turrets with [accent]copper[], using conveyors. gz.duoammo = 컨베이어를 활용하여, 듀오 포탑에 [accent]구리[]를 공급하세요.
gz.walls = [accent]Walls[] can prevent oncoming damage from reaching buildings.\nPlace \uf8ae [accent]copper walls[] around the turrets. gz.walls = [accent]벽[]은 건물로 날아오는 공격을 막을 수 있습니다. \n포탑 주변에 \uf8ae [accent]구리 벽[]을 배치하세요.
gz.defend = Enemy incoming, prepare to defend. gz.defend = 적이 다가옵니다, 방어 태세를 갖추세요.
gz.aa = Flying units cannot easily be dispatched with standard turrets.\n\uf860 [accent]Scatter[] turrets provide excellent anti-air, but require \uf837 [accent]lead[] as ammo. gz.aa = 비행 기체는 기본 포탑으로는 쉽게 처리할 수 없습니다.\n\uf860 [accent]스캐터[] 포탑은 훌륭한 대공 방어를 자랑하지만, 탄환으로 \uf837 [accent]납[]이 필요합니다.
gz.scatterammo = Supply the Scatter turret with [accent]lead[], using conveyors. gz.scatterammo = 컨베이어를 활용하여,스캐터 포탑에 [accent]납[]을 공급하세요.
gz.supplyturret = [accent]Supply Turret gz.supplyturret = [accent]보급 포탑
gz.zone1 = This is the enemy drop zone. gz.zone1 = 이건 적의 착륙 지점입니다.
gz.zone2 = Anything built in the radius is destroyed when a wave starts. gz.zone2 = 반경에 세워진 모든 것은 단계가 시작되면 파괴됩니다.
gz.zone3 = A wave will begin now.\nGet ready. gz.zone3 = 단계가 지금 시작됩니다.\n준비하세요.
gz.finish = Build more turrets, mine more resources,\nand defend against all the waves to [accent]capture the sector[]. gz.finish = 포탑을 더 건설하고, 자원을 더 채굴하고,\n그리고 모든 단계를 막아내어 [accent]지역을 점령[]하세요.
onset.mine = Click to mine \uf748 [accent]beryllium[] from walls.\n\nUse [accent][[WASD] to move. onset.mine = 벽에 붙어있는 \uf748 [accent]베릴륨[]을 클릭하여 채굴하세요.\n\n[accent][[WASD]로 움직이세요.
onset.mine.mobile = Tap to mine \uf748 [accent]beryllium[] from walls. onset.mine.mobile = Tap to mine \uf748 [accent]beryllium[] from walls.
onset.research = Open the \ue875 tech tree.\nResearch, then place a \uf73e [accent]turbine condenser[] on the vent.\nThis will generate [accent]power[]. onset.research = \ue875 연구 기록을 여세요.\n \uf73e [accent]터빈 응결기[]를 연구하고, 구덩이 위에 배치하세요.\n[accent]전력[]을 생산합니다.
onset.bore = Research and place a \uf741 [accent]plasma bore[].\nThis automatically mines resources from walls. onset.bore = \uf741 [accent]플라즈마 채광기[]를 연구하고 배치하세요.\n벽으로부터 자동으로 자원을 채굴합니다.
onset.power = To [accent]power[] the plasma bore, research and place a \uf73d [accent]beam node[].\nConnect the turbine condenser to the plasma bore. onset.power = [accent]전력[]을 플라즈마 채광기로 전달하기 위해선, \uf73d [accent]빔 노드[]를 연구하고 배치하세요.\n터빈 응결기와 플라즈마 채광기를 연결하세요.
onset.ducts = Research and place \uf799 [accent]ducts[] to move the mined resources from the plasma bore to the core.\nClick and drag to place multiple ducts.\n[accent]Scroll[] to rotate. onset.ducts = \uf799 [accent]도관[]을 연구하고 배치하여 플라즈마 채광기에서 채굴한 자원을 코어로 운반하세요.\n클릭하고 끌어서 도관을 길게 연결하세요.\n[accent]스크롤해서[]해서 방향을 회전할 수 있습니다.
onset.ducts.mobile = Research and place \uf799 [accent]ducts[] to move the mined resources from the plasma bore to the core.\n\nHold down your finger for a second and drag to place multiple ducts. onset.ducts.mobile = \uf799 [accent]도관[]을 연구하고 배치하여 플라즈마 채광기에서 채굴한 자원을 코어로 운반하세요.\n손가락을 길게 누르고 끌어서 도관을 길게 연결하세요.
onset.moremine = Expand the mining operation.\nPlace more Plasma Bores and use beam nodes and ducts to support them.\nMine 200 beryllium. onset.moremine = 채굴 작업을 확장하세요.\n더 많은 플라즈마 채광기를 배치하고 빔 노드와 덕트를 사용하여 보조하세요.\n베릴륨 200개 채굴하기.
onset.graphite = More complex blocks require \uf835 [accent]graphite[].\nSet up plasma bores to mine graphite. onset.graphite = 더 복잡한 건물은 \uf835 [accent]흑연[]이 필요합니다.\n흑연을 채굴하는 플라즈마 채광기를 배치하세요.
onset.research2 = Begin researching [accent]factories[].\nResearch the \uf74d [accent]cliff crusher[] and \uf779 [accent]silicon arc furnace[]. onset.research2 = [accent]공장[]을 연구할 시간입니다.\n \uf74d [accent]벽 분쇄기[]와 \uf779 [accent]실리콘 아크 화로[]를 연구하세요.
onset.arcfurnace = The arc furnace needs \uf834 [accent]sand[] and \uf835 [accent]graphite[] to create \uf82f [accent]silicon[].\n[accent]Power[] is also required. onset.arcfurnace = 아크 화로는 \uf834 [accent]모래[]와 \uf835 [accent]흑연[]을 가공하여 \uf82f [accent]실리콘[]을 생산합니다.\n[accent]전력[] 또한 필수입니다.
onset.crusher = Use \uf74d [accent]cliff crushers[] to mine sand. onset.crusher = \uf74d [accent]벽 분쇄기[]를 사용하여 모래를 채굴하세요.
onset.fabricator = Use [accent]units[] to explore the map, defend buildings, and attack the enemy. Research and place a \uf6a2 [accent]tank fabricator[]. onset.fabricator = [accent]기체[]는 지도를 정찰하거나, 건물을 보호하거나, 적을 공격할 때 활용할 수 있습니다. \uf6a2 [accent]전차 재조립기[]를 연구하고 배치하세요.
onset.makeunit = Produce a unit.\nUse the "?" button to see selected factory requirements. onset.makeunit = 기체를 생산하세요.\n"?" 버튼을 눌러 선택한 공장의 요구사항을 확인할 수 있습니다.
onset.turrets = Units are effective, but [accent]turrets[] provide better defensive capabilities if used effectively.\nPlace a \uf6eb [accent]Breach[] turret.\nTurrets require \uf748 [accent]ammo[]. onset.turrets = 기체는 유용하지만, [accent]포탑[]은 사용하기에 따라 더 나은 방어 성능을 보여줍니다.\n \uf6eb [accent]브리치[] 포탑을 배치하세요.\n포탑은 \uf748 [accent]탄약[]이 필요합니다.
onset.turretammo = Supply the turret with [accent]beryllium ammo.[] onset.turretammo = Supply the turret with [accent]beryllium ammo.[]
onset.walls = [accent]Walls[] can prevent oncoming damage from reaching buildings.\nPlace some \uf6ee [accent]beryllium walls[] around the turret. onset.walls = [accent]벽[]은 건물로 날아오는 공격을 막을 수 있습니다. \n포탑 주변에 \uf6ee [accent]베릴륨 벽[]을 배치하세요.
onset.enemies = Enemy incoming, prepare to defend. onset.enemies = 적이 다가옵니다, 방어 태세를 갖추세요.
onset.attack = The enemy is vulnerable. Counter-attack. onset.attack = 적은 취약한 상태입니다. 반격하세요.
onset.cores = New cores can be placed on [accent]core tiles[].\nNew cores function as forward bases and share a resource inventory with other cores.\nPlace a \uf725 core. onset.cores = 새로운 코어는 [accent]코어 타일[]위에 배치할 수 있습니다.\n새로운 코어는 전진기지 역할을 하며 다른 코어와 저장된 자원을 공유합니다.\n \uf725 코어를 배치하세요.
onset.detect = The enemy will be able to detect you in 2 minutes.\nSet up defenses, mining, and production. onset.detect = 적은 2분 이내에 당신을 탐지할 것입니다.\n생산, 채굴, 방어시설을 구성하세요.
split.pickup = Some blocks can be picked up by the core unit.\nPick up this [accent]container[] and place it onto the [accent]payload loader[].\n(Default keys are [ and ] to pick up and drop) split.pickup = 일부 블록은 코어 기체로 집어올릴 수 있습니다.\n이 [accent]컨테이너[]를 집어올리고 [accent]화물 로더[] 속에 내려놓으세요.\n(화물을 집어올리거나 내리는 기본 키는 [ 그리고 ]입니다)
split.pickup.mobile = Some blocks can be picked up by the core unit.\nPick up this [accent]container[] and place it onto the [accent]payload loader[].\n(To pick up or drop something, long-press it.) split.pickup.mobile = 일부 블록은 코어 기체로 집어올릴 수 있습니다.\n이 [accent]컨테이너[]를 집어올리고 [accent]화물 로더[] 속에 내려놓으세요.\n(무언가를 집어올리거나 내려놓으려면, 길게 누르세요.)
split.acquire = You must acquire some tungsten to build units. split.acquire = 기체를 제조하려면 텅스텐을 습득해야 합니다.
split.build = Units must be transported to the other side of the wall.\nPlace two [accent]Payload Mass Drivers[], one on each side of the wall.\nSet up the link by pressing one of them, then selecting the other. split.build = 기체를 벽의 반대편으로 운반해야 합니다.\n두 개의 [accent]회물 매스 드라이버[]를 각 벽면에 하나씩 배치하세요.\n둘 중 하나를 누른 다음 다른 하나를 선택하여 연결을 설정합니다.
split.container = Similar to the container, units can also be transported using a [accent]Payload Mass Driver[].\nPlace a unit fabricator adjacent to a mass driver to load them, then send them across the wall to attack the enemy base. split.container = 컨테이너와 마찬가지로, 기체도 [accent]화물 매스 드라이버[]를 사용하여 운송할 수 있습니다.\n기체 조립대를 매스 드라이버 근처에 배치하여 기체를 적재한 후, 벽을 가로질러 보내 적 기지를 공격합니다.
item.copper.description = 모든 종류의 구조물 및 탄약으로 사용하는 기본 자원입니다. item.copper.description = 모든 종류의 구조물 및 탄약으로 사용하는 기본 자원입니다.
item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포함. 보강되지 않는 한 구조적으로 약함. item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포함. 보강되지 않는 한 구조적으로 약함.
@@ -1850,8 +1851,8 @@ block.derelict = \ue815 [lightgray]잔해
block.armored-conveyor.description = 자원을 앞으로 운반합니다. 측면에서 자원을 받아들이지 않습니다. block.armored-conveyor.description = 자원을 앞으로 운반합니다. 측면에서 자원을 받아들이지 않습니다.
block.illuminator.description = 발광합니다. block.illuminator.description = 발광합니다.
block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다. block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다.
block.reinforced-message.description = Stores a message for communication between allies. block.reinforced-message.description = 동맹 간의 소통을 위한 메시지를 저장합니다.
block.world-message.description = A message block for use in mapmaking. Cannot be destroyed. block.world-message.description = 지도 작성에 사용되는 메시지 블록. 파괴할 수 없습니다.
block.graphite-press.description = 석탄을 흑연으로 압축합니다. block.graphite-press.description = 석탄을 흑연으로 압축합니다.
block.multi-press.description = 석탄을 흑연으로 압축합니다. 냉각수로 물이 필요합니다. block.multi-press.description = 석탄을 흑연으로 압축합니다. 냉각수로 물이 필요합니다.
block.silicon-smelter.description = 석탄과 모래에서 실리콘을 정제합니다. block.silicon-smelter.description = 석탄과 모래에서 실리콘을 정제합니다.
@@ -2003,7 +2004,7 @@ block.core-acropolis.description = 기지의 핵심입니다. 매우 튼튼합
block.breach.description = 적 대상에게 관통하는 베릴륨 또는 텅스텐 탄환을 발사합니다. block.breach.description = 적 대상에게 관통하는 베릴륨 또는 텅스텐 탄환을 발사합니다.
block.diffuse.description = 넓은 원뿔 모양으로 탄환을 발사합니다. 적 대상을 뒤로 밀어냅니다. block.diffuse.description = 넓은 원뿔 모양으로 탄환을 발사합니다. 적 대상을 뒤로 밀어냅니다.
block.sublimate.description = 적 대상에게 화염을 연속 분사합니다. 장갑을 관통합니다. block.sublimate.description = 적 대상에게 화염을 연속 분사합니다. 장갑을 관통합니다.
block.titan.description = 지상 목표물을 향해 거대한 폭발 포탄을 발사합니다. 하이드로겐이 필요합니다. block.titan.description = 지상 목표물을 향해 거대한 폭발 포탄을 발사합니다. 수소가 필요합니다.
block.afflict.description = 대전된 거대한 조각덩어리 구체를 발사합니다. 열이 필요합니다. block.afflict.description = 대전된 거대한 조각덩어리 구체를 발사합니다. 열이 필요합니다.
block.disperse.description = 공중 목표물을 향해 파편 폭격을 가합니다. block.disperse.description = 공중 목표물을 향해 파편 폭격을 가합니다.
block.lustre.description = 적 대상에게 느리게 움직이는 단일 표적 레이저를 발사합니다. block.lustre.description = 적 대상에게 느리게 움직이는 단일 표적 레이저를 발사합니다.
@@ -2016,7 +2017,7 @@ block.electric-heater.description = 블록에 열을 가합니다. 많은 양의
block.slag-heater.description = 블록에 열을 가합니다. 광재가 필요합니다. block.slag-heater.description = 블록에 열을 가합니다. 광재가 필요합니다.
block.phase-heater.description = 블록에 열을 가합니다. 메타가 필요합니다. block.phase-heater.description = 블록에 열을 가합니다. 메타가 필요합니다.
block.heat-redirector.description = 누적된 열을 다른 블록으로 전달합니다. block.heat-redirector.description = 누적된 열을 다른 블록으로 전달합니다.
block.heat-router.description = Spreads accumulated heat in three output directions. block.heat-router.description = 축적된 열을 세 가지 출력 방향으로 분산시킵니다.
block.electrolyzer.description = 물을 수소와 오존 가스로 변환합니다. block.electrolyzer.description = 물을 수소와 오존 가스로 변환합니다.
block.atmospheric-concentrator.description = 대기에서 질소를 농축합니다. 열이 필요합니다. block.atmospheric-concentrator.description = 대기에서 질소를 농축합니다. 열이 필요합니다.
block.surge-crucible.description = 광재와 실리콘으로 설금을 형성합니다. 열이 필요합니다. block.surge-crucible.description = 광재와 실리콘으로 설금을 형성합니다. 열이 필요합니다.

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -922,6 +922,7 @@ ability.unitspawn = Fabryka Jednostek {0}
ability.shieldregenfield = Strefa Tarczy Regenerującej ability.shieldregenfield = Strefa Tarczy Regenerującej
ability.movelightning = Pioruny Poruszania ability.movelightning = Pioruny Poruszania
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Pole Energii: [accent]{0}[] obrażenia ~ [accent]{1}[] bloki / [accent]{2}[] cele ability.energyfield = Pole Energii: [accent]{0}[] obrażenia ~ [accent]{1}[] bloki / [accent]{2}[] cele
bar.onlycoredeposit = Dozwolone jest tylko przeniesienie z rdzenia bar.onlycoredeposit = Dozwolone jest tylko przeniesienie z rdzenia

View File

@@ -933,6 +933,7 @@ ability.unitspawn = Fábrica de {0}
ability.shieldregenfield = Raio de Regeneração do Escudo ability.shieldregenfield = Raio de Regeneração do Escudo
ability.movelightning = Raio de Movimento ability.movelightning = Raio de Movimento
ability.shieldarc = Arco do Escudo ability.shieldarc = Arco do Escudo
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Campo de Energia: dano [accent]{0}[] ~ blocos [accent]{1}[] / alvos [accent]{2}[] ability.energyfield = Campo de Energia: dano [accent]{0}[] ~ blocos [accent]{1}[] / alvos [accent]{2}[]
bar.onlycoredeposit = Somente depósito no núcleo permitido bar.onlycoredeposit = Somente depósito no núcleo permitido

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -923,6 +923,7 @@ ability.unitspawn = Fabrică de {0}
ability.shieldregenfield = Câmp Regenerare Scut ability.shieldregenfield = Câmp Regenerare Scut
ability.movelightning = Mișcare Fulger ability.movelightning = Mișcare Fulger
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Câmp de Energie: [accent]{0}[] forță pe ~ [accent]{1}[] blocuri / [accent]{2}[] ținte ability.energyfield = Câmp de Energie: [accent]{0}[] forță pe ~ [accent]{1}[] blocuri / [accent]{2}[] ținte
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -922,6 +922,7 @@ ability.unitspawn = Завод единиц «{0}»
ability.shieldregenfield = Поле восстановления щита ability.shieldregenfield = Поле восстановления щита
ability.movelightning = Молнии при движении ability.movelightning = Молнии при движении
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Энергетическое поле: [accent]{0}[] урона ~ [accent]{1}[] блоков / [accent]{2}[] целей ability.energyfield = Энергетическое поле: [accent]{0}[] урона ~ [accent]{1}[] блоков / [accent]{2}[] целей
bar.onlycoredeposit = Доступен перенос только в ядро bar.onlycoredeposit = Доступен перенос только в ядро

View File

@@ -923,6 +923,7 @@ ability.unitspawn = {0} Fabrika
ability.shieldregenfield = Brzina obnove štita ability.shieldregenfield = Brzina obnove štita
ability.movelightning = Munje pri kretanju ability.movelightning = Munje pri kretanju
ability.shieldarc = Elektrolučni Štit ability.shieldarc = Elektrolučni Štit
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energetsko Polje: [accent]{0}[] štete ~ [accent]{1}[] polja / [accent]{2}[] maksimalnih meta ability.energyfield = Energetsko Polje: [accent]{0}[] štete ~ [accent]{1}[] polja / [accent]{2}[] maksimalnih meta
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -924,6 +924,7 @@ ability.unitspawn = โรงงาน'{0}
ability.shieldregenfield = สนามรักษาโล่ ability.shieldregenfield = สนามรักษาโล่
ability.movelightning = ปล่อยสายฟ้าเมื่อเคลื่อนที่ ability.movelightning = ปล่อยสายฟ้าเมื่อเคลื่อนที่
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = สนามพลังงาน: [accent]{0}[] ดาเมจ ~ [accent]{1}[] บล็อก / [accent]{2}[] เป้าหมาย ability.energyfield = สนามพลังงาน: [accent]{0}[] ดาเมจ ~ [accent]{1}[] บล็อก / [accent]{2}[] เป้าหมาย
bar.onlycoredeposit = ขนย้ายทรัพยากรลงแกนกลางได้เท่านั้น bar.onlycoredeposit = ขนย้ายทรัพยากรลงแกนกลางได้เท่านั้น

View File

@@ -911,6 +911,7 @@ ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field ability.shieldregenfield = Shield Regen Field
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -923,6 +923,7 @@ ability.unitspawn = {0} Birliği Fabrikası
ability.shieldregenfield = Kalkan Yenileme Alanı ability.shieldregenfield = Kalkan Yenileme Alanı
ability.movelightning = Hareket Enerjisi ability.movelightning = Hareket Enerjisi
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Güç Kalkanı: [accent]{0}[] hasar ~ [accent]{1}[] blok / [accent]{2}[] hedef ability.energyfield = Güç Kalkanı: [accent]{0}[] hasar ~ [accent]{1}[] blok / [accent]{2}[] hedef
bar.onlycoredeposit = Sadece Merkeze Aktarım Mümkün bar.onlycoredeposit = Sadece Merkeze Aktarım Mümkün

View File

@@ -929,6 +929,7 @@ ability.unitspawn = Завод одиниць «{0}»
ability.shieldregenfield = Щитовідновлювальне поле ability.shieldregenfield = Щитовідновлювальне поле
ability.movelightning = Блискавки під час руху ability.movelightning = Блискавки під час руху
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Енергетичне поле: [accent]{0}[] шкоди ~ [accent]{1}[] блоків / [accent]{2}[] цілей ability.energyfield = Енергетичне поле: [accent]{0}[] шкоди ~ [accent]{1}[] блоків / [accent]{2}[] цілей
bar.onlycoredeposit = Передача предметів дозволена лише до ядра bar.onlycoredeposit = Передача предметів дозволена лише до ядра

View File

@@ -923,6 +923,7 @@ ability.unitspawn = Sản xuất {0}
ability.shieldregenfield = Tạo khiên nhỏ ability.shieldregenfield = Tạo khiên nhỏ
ability.movelightning = Movement Lightning ability.movelightning = Movement Lightning
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets ability.energyfield = Energy Field: [accent]{0}[] damage ~ [accent]{1}[] blocks / [accent]{2}[] targets
bar.onlycoredeposit = Only Core Depositing Allowed bar.onlycoredeposit = Only Core Depositing Allowed

View File

@@ -924,6 +924,7 @@ ability.unitspawn = {0}单位工厂
ability.shieldregenfield = 护盾再生场 ability.shieldregenfield = 护盾再生场
ability.movelightning = 闪电助推器 ability.movelightning = 闪电助推器
ability.shieldarc = 弧形护盾 ability.shieldarc = 弧形护盾
ability.suppressionfield = Regen Suppression Field
ability.energyfield = 能量场:[accent]{0}[]伤害~[accent]{1}[]格/[accent]{2}[]目标 ability.energyfield = 能量场:[accent]{0}[]伤害~[accent]{1}[]格/[accent]{2}[]目标
bar.onlycoredeposit = 仅核心可丢入资源 bar.onlycoredeposit = 仅核心可丢入资源

View File

@@ -931,6 +931,7 @@ ability.unitspawn = {0}工廠
ability.shieldregenfield = 護盾充能力場 ability.shieldregenfield = 護盾充能力場
ability.movelightning = 移動閃電 ability.movelightning = 移動閃電
ability.shieldarc = Shield Arc ability.shieldarc = Shield Arc
ability.suppressionfield = Regen Suppression Field
ability.energyfield = 能量場: [accent]{0}[] 傷害 ~ [accent]{1}[] 方格 / [accent]{2}[] 目標數 ability.energyfield = 能量場: [accent]{0}[] 傷害 ~ [accent]{1}[] 方格 / [accent]{2}[] 目標數
bar.onlycoredeposit = 僅允許向核心放置物品 bar.onlycoredeposit = 僅允許向核心放置物品

View File

@@ -1004,6 +1004,7 @@ public class Blocks{
drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(Liquids.water), new DrawLiquidTile(Liquids.cryofluid){{drawLiquidLight = true;}}, new DrawDefault()); drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(Liquids.water), new DrawLiquidTile(Liquids.cryofluid){{drawLiquidLight = true;}}, new DrawDefault());
liquidCapacity = 24f; liquidCapacity = 24f;
craftTime = 120; craftTime = 120;
lightLiquid = Liquids.cryofluid;
consumePower(1f); consumePower(1f);
consumeItem(Items.titanium); consumeItem(Items.titanium);
@@ -1808,7 +1809,7 @@ public class Blocks{
requirements(Category.effect, with(Items.silicon, 150, Items.oxide, 40, Items.thorium, 60)); requirements(Category.effect, with(Items.silicon, 150, Items.oxide, 40, Items.thorium, 60));
outlineColor = Pal.darkOutline; outlineColor = Pal.darkOutline;
range = 180f; range = 200f;
size = 3; size = 3;
buildSpeed = 1.5f; buildSpeed = 1.5f;
@@ -1863,6 +1864,8 @@ public class Blocks{
size = 3; size = 3;
consumeLiquids(LiquidStack.with(Liquids.cyanogen, 1.5f / 60f)); consumeLiquids(LiquidStack.with(Liquids.cyanogen, 1.5f / 60f));
consumePower(100f / 60f); consumePower(100f / 60f);
range = 170f;
reload = 80f;
}}; }};
//TODO 5x5?? //TODO 5x5??
@@ -2550,6 +2553,9 @@ public class Blocks{
liquidCapacity = 30f; liquidCapacity = 30f;
explosionMinWarmup = 0.5f; explosionMinWarmup = 0.5f;
explosionRadius = 17;
explosionDamage = 2500;
ambientSound = Sounds.flux; ambientSound = Sounds.flux;
ambientSoundVolume = 0.13f; ambientSoundVolume = 0.13f;
@@ -2592,8 +2598,8 @@ public class Blocks{
itemDuration = 60f * 3f; itemDuration = 60f * 3f;
itemCapacity = 10; itemCapacity = 10;
explosionRadius = 7; explosionRadius = 9;
explosionDamage = 1000; explosionDamage = 2000;
explodeEffect = new MultiEffect(Fx.bigShockwave, new WrapEffect(Fx.titanSmoke, Liquids.neoplasm.color), Fx.neoplasmSplat); explodeEffect = new MultiEffect(Fx.bigShockwave, new WrapEffect(Fx.titanSmoke, Liquids.neoplasm.color), Fx.neoplasmSplat);
explodeSound = Sounds.largeExplosion; explodeSound = Sounds.largeExplosion;
@@ -5615,7 +5621,7 @@ public class Blocks{
requirements(Category.units, with(Items.silicon, 100, Items.beryllium, 150, Items.tungsten, 80)); requirements(Category.units, with(Items.silicon, 100, Items.beryllium, 150, Items.tungsten, 80));
regionSuffix = "-dark"; regionSuffix = "-dark";
hasPower = true; hasPower = true;
buildSpeed = 0.5f; buildSpeed = 0.6f;
consumePower(2f); consumePower(2f);
size = 3; size = 3;
//TODO expand this list //TODO expand this list
@@ -5627,7 +5633,7 @@ public class Blocks{
requirements(Category.units, with(Items.silicon, 150, Items.oxide, 150, Items.tungsten, 200, Items.phaseFabric, 40)); requirements(Category.units, with(Items.silicon, 150, Items.oxide, 150, Items.tungsten, 200, Items.phaseFabric, 40));
regionSuffix = "-dark"; regionSuffix = "-dark";
hasPower = true; hasPower = true;
buildSpeed = 0.6f; buildSpeed = 0.75f;
maxBlockSize = 4; maxBlockSize = 4;
minBlockSize = 3; minBlockSize = 3;
size = 5; size = 5;
@@ -5861,6 +5867,8 @@ public class Blocks{
worldMessage = new MessageBlock("world-message"){{ worldMessage = new MessageBlock("world-message"){{
requirements(Category.logic, BuildVisibility.editorOnly, with()); requirements(Category.logic, BuildVisibility.editorOnly, with());
targetable = false;
privileged = true; privileged = true;
}}; }};

View File

@@ -15,6 +15,7 @@ public class Liquids{
effect = StatusEffects.wet; effect = StatusEffects.wet;
boilPoint = 0.5f; boilPoint = 0.5f;
gasColor = Color.grays(0.9f); gasColor = Color.grays(0.9f);
alwaysUnlocked = true;
}}; }};
slag = new Liquid("slag", Color.valueOf("ffa166")){{ slag = new Liquid("slag", Color.valueOf("ffa166")){{
@@ -72,7 +73,6 @@ public class Liquids{
hidden = true; hidden = true;
}}; }};
//TODO reactivity, etc
ozone = new Liquid("ozone", Color.valueOf("fc81dd")){{ ozone = new Liquid("ozone", Color.valueOf("fc81dd")){{
gas = true; gas = true;
barColor = Color.valueOf("d699f0"); barColor = Color.valueOf("d699f0");
@@ -80,7 +80,6 @@ public class Liquids{
flammability = 1f; flammability = 1f;
}}; }};
//TODO combustion
hydrogen = new Liquid("hydrogen", Color.valueOf("9eabf7")){{ hydrogen = new Liquid("hydrogen", Color.valueOf("9eabf7")){{
gas = true; gas = true;
flammability = 1f; flammability = 1f;

View File

@@ -269,6 +269,9 @@ public class Control implements ApplicationListener, Loadable{
Events.on(SaveWriteEvent.class, e -> forcePlaceAll()); Events.on(SaveWriteEvent.class, e -> forcePlaceAll());
Events.on(HostEvent.class, e -> forcePlaceAll()); Events.on(HostEvent.class, e -> forcePlaceAll());
Events.on(HostEvent.class, e -> {
state.set(State.playing);
});
} }
private void forcePlaceAll(){ private void forcePlaceAll(){

View File

@@ -24,8 +24,6 @@ public class GameState{
public boolean gameOver = false; public boolean gameOver = false;
/** Whether the player's team won the match. */ /** Whether the player's team won the match. */
public boolean won = false; public boolean won = false;
/** If true, the server has been put into the paused state on multiplayer. This is synced. */
public boolean serverPaused = false;
/** Server ticks/second. Only valid in multiplayer. */ /** Server ticks/second. Only valid in multiplayer. */
public int serverTps = -1; public int serverTps = -1;
/** Map that is currently being played on. */ /** Map that is currently being played on. */
@@ -51,12 +49,8 @@ public class GameState{
} }
public void set(State astate){ public void set(State astate){
//horrible horrible horrible //nothing to change.
if(astate == State.paused && net.server() && !headless) serverPaused = true; if(state == astate) return;
if(astate != State.paused && net.server() && !headless) serverPaused = false;
//cannot pause when in multiplayer
if(astate == State.paused && net.active()) return;
Events.fire(new StateChangeEvent(state, astate)); Events.fire(new StateChangeEvent(state, astate));
state = astate; state = astate;
@@ -88,7 +82,7 @@ public class GameState{
} }
public boolean isPaused(){ public boolean isPaused(){
return (is(State.paused) && !net.active()) || (serverPaused && !isMenu()); return is(State.paused);
} }
public boolean isPlaying(){ public boolean isPlaying(){

View File

@@ -488,7 +488,9 @@ public class NetClient implements ApplicationListener{
state.wavetime = waveTime; state.wavetime = waveTime;
state.wave = wave; state.wave = wave;
state.enemies = enemies; state.enemies = enemies;
state.serverPaused = paused; if(!state.isMenu()){
state.set(paused ? State.paused : State.playing);
}
state.serverTps = tps & 0xff; state.serverTps = tps & 0xff;
//note that this is far from a guarantee that random state is synced - tiny changes in delta and ping can throw everything off again. //note that this is far from a guarantee that random state is synced - tiny changes in delta and ping can throw everything off again.

View File

@@ -96,7 +96,7 @@ public class NetServer implements ApplicationListener{
} }
}; };
private boolean closing = false; private boolean closing = false, pvpAutoPaused = true;
private Interval timer = new Interval(10); private Interval timer = new Interval(10);
private IntSet buildHealthChanged = new IntSet(); private IntSet buildHealthChanged = new IntSet();
@@ -862,7 +862,18 @@ public class NetServer implements ApplicationListener{
if(state.isGame() && net.server()){ if(state.isGame() && net.server()){
if(state.rules.pvp){ if(state.rules.pvp){
state.serverPaused = isWaitingForPlayers(); boolean waiting = isWaitingForPlayers(), paused = state.isPaused();
if(waiting != paused){
if(waiting){
//is now waiting, enable pausing, flag it correctly
pvpAutoPaused = true;
state.set(State.paused);
}else if(pvpAutoPaused){
//no longer waiting, stop pausing
state.set(State.playing);
pvpAutoPaused = false;
}
}
} }
sync(); sync();
@@ -941,7 +952,7 @@ public class NetServer implements ApplicationListener{
dataStream.close(); dataStream.close();
//write basic state data. //write basic state data.
Call.stateSnapshot(player.con, state.wavetime, state.wave, state.enemies, state.serverPaused, state.gameOver, Call.stateSnapshot(player.con, state.wavetime, state.wave, state.enemies, state.isPaused(), state.gameOver,
universe.seconds(), tps, GlobalVars.rand.seed0, GlobalVars.rand.seed1, syncStream.toByteArray()); universe.seconds(), tps, GlobalVars.rand.seed0, GlobalVars.rand.seed1, syncStream.toByteArray());
syncStream.reset(); syncStream.reset();

View File

@@ -31,6 +31,7 @@ public abstract class Ability implements Cloneable{
/** @return localized ability name; mods should override this. */ /** @return localized ability name; mods should override this. */
public String localized(){ public String localized(){
return Core.bundle.get("ability." + getClass().getSimpleName().replace("Ability", "").toLowerCase()); var type = getClass();
return Core.bundle.get("ability." + (type.isAnonymousClass() ? type.getSuperclass() : type).getSimpleName().replace("Ability", "").toLowerCase());
} }
} }

View File

@@ -272,11 +272,13 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
//region utility methods //region utility methods
public boolean isDiscovered(Team viewer){ public boolean isDiscovered(Team viewer){
if(state.rules.borderDarkness && world.getDarkness(tile.x, tile.y) >= 3){ if(state.rules.limitMapArea && world.getDarkness(tile.x, tile.y) >= 3){
return false; return false;
} }
if(viewer == null) return true; if(viewer == null || !state.rules.staticFog || !state.rules.fog){
return true;
}
if(block.size <= 2){ if(block.size <= 2){
return fogControl.isDiscovered(viewer, tile.x, tile.y); return fogControl.isDiscovered(viewer, tile.x, tile.y);
}else{ }else{
@@ -1199,10 +1201,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
} }
public void drawLight(){ public void drawLight(){
if(block.hasLiquids && block.drawLiquidLight && liquids.current().lightColor.a > 0.001f){ Liquid liq = block.hasLiquids && block.lightLiquid == null ? liquids.current() : block.lightLiquid;
if(block.hasLiquids && block.drawLiquidLight && liq.lightColor.a > 0.001f){
//yes, I am updating in draw()... but this is purely visual anyway, better have it here than in update() where it wastes time //yes, I am updating in draw()... but this is purely visual anyway, better have it here than in update() where it wastes time
visualLiquid = Mathf.lerpDelta(visualLiquid, liquids.currentAmount(), 0.07f); visualLiquid = Mathf.lerpDelta(visualLiquid, liquids.get(liq)>= 0.01f ? 1f : 0f, 0.06f);
drawLiquidLight(liquids.current(), visualLiquid); drawLiquidLight(liq, visualLiquid);
} }
} }
@@ -1212,7 +1215,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
float fract = 1f; float fract = 1f;
float opacity = color.a * fract; float opacity = color.a * fract;
if(opacity > 0.001f){ if(opacity > 0.001f){
Drawf.light(x, y, block.size * 30f * fract, color, opacity); Drawf.light(x, y, block.size * 30f * fract, color, opacity * amount);
} }
} }
} }
@@ -1588,12 +1591,12 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
/** Handle a bullet collision. /** Handle a bullet collision.
* @return whether the bullet should be removed. */ * @return whether the bullet should be removed. */
public boolean collision(Bullet other){ public boolean collision(Bullet other){
boolean wasDead = dead(); boolean wasDead = health <= 0;
damage(other.team, other.damage() * other.type().buildingDamageMultiplier); damage(other.team, other.damage() * other.type().buildingDamageMultiplier);
Events.fire(bulletDamageEvent.set(self(), other)); Events.fire(bulletDamageEvent.set(self(), other));
if(dead() && !wasDead){ if(health <= 0 && !wasDead){
Events.fire(new BuildingBulletDestroyEvent(self(), other)); Events.fire(new BuildingBulletDestroyEvent(self(), other));
} }

View File

@@ -16,6 +16,7 @@ public class EventType{
//events that occur very often //events that occur very often
public enum Trigger{ public enum Trigger{
shock, shock,
openConsole,
blastFreeze, blastFreeze,
impactPower, impactPower,
blastGenerator, blastGenerator,

View File

@@ -101,7 +101,7 @@ public final class FogControl implements CustomChunk{
} }
public boolean isDiscovered(Team team, int x, int y){ public boolean isDiscovered(Team team, int x, int y){
if(!state.rules.staticFog || team == null || team.isAI()) return true; if(!state.rules.staticFog || !state.rules.fog || team == null || team.isAI()) return true;
var data = getDiscovered(team); var data = getDiscovered(team);
if(data == null) return false; if(data == null) return false;

View File

@@ -205,9 +205,7 @@ public class Saves{
} }
public void save(){ public void save(){
long time = totalPlaytime;
long prev = totalPlaytime; long prev = totalPlaytime;
totalPlaytime = time;
SaveIO.save(file); SaveIO.save(file);
meta = SaveIO.getMeta(file); meta = SaveIO.getMeta(file);

View File

@@ -116,13 +116,13 @@ public class LogicDialog extends BaseDialog{
buttons.button("@variables", Icon.menu, () -> { buttons.button("@variables", Icon.menu, () -> {
BaseDialog dialog = new BaseDialog("@variables"); BaseDialog dialog = new BaseDialog("@variables");
dialog.hidden(() -> { dialog.hidden(() -> {
if(!wasPaused){ if(!wasPaused && !net.active()){
state.set(State.paused); state.set(State.paused);
} }
}); });
dialog.shown(() -> { dialog.shown(() -> {
if(!wasPaused){ if(!wasPaused && !net.active()){
state.set(State.playing); state.set(State.playing);
} }
}); });

View File

@@ -17,7 +17,7 @@ public enum Achievement{
launch30Times(SStat.timesLaunched, 30), launch30Times(SStat.timesLaunched, 30),
captureBackground, captureBackground,
survive100Waves(SStat.maxWavesSurvived, 100), survive100Waves(SStat.maxWavesSurvived, 100),
researchAll, //TODO - remake/change? researchAll,
shockWetEnemy, shockWetEnemy,
killEnemyPhaseWall, killEnemyPhaseWall,
researchRouter, researchRouter,
@@ -36,7 +36,7 @@ public enum Achievement{
obtainTitanium, obtainTitanium,
suicideBomb, suicideBomb,
buildGroundFactory, buildGroundFactory,
issueAttackCommand, //TODO - test issueAttackCommand,
active100Units(SStat.maxUnitActive, 100), active100Units(SStat.maxUnitActive, 100),
build1000Units(SStat.unitsBuilt, 1000), build1000Units(SStat.unitsBuilt, 1000),
buildAllUnits(SStat.unitTypesBuilt, 30), buildAllUnits(SStat.unitTypesBuilt, 30),
@@ -53,71 +53,62 @@ public enum Achievement{
circleConveyor, circleConveyor,
becomeRouter, becomeRouter,
create20Schematics(SStat.schematicsCreated, 20), create20Schematics(SStat.schematicsCreated, 20),
create500Schematics(SStat.schematicsCreated, 500), //TODO - test create500Schematics(SStat.schematicsCreated, 500),
survive10WavesNoBlocks, survive10WavesNoBlocks,
captureNoBlocksBroken, captureNoBlocksBroken,
useFlameAmmo, useFlameAmmo,
coolTurret, coolTurret,
enablePixelation, enablePixelation,
openWiki, openWiki,
allTransportOneMap,
buildOverdriveProjector,
buildMendProjector,
buildWexWater,
//TODO new ones have10mItems(SStat.totalCampaignItems, 10_000_000),
killEclipseDuo,
allTransportOneMap, //TODO - test completeErekir,
buildOverdriveProjector, //TODO - test completeSerpulo,
buildMendProjector, //TODO - test
buildWexWater, //TODO - test
have10mItems(SStat.totalCampaignItems, 10_000_000), //TODO - test launchCoreSchematic,
killEclipseDuo, //TODO - test nucleusGroundZero,
completeErekir, //TODO - test neoplasmWater,
completeSerpulo, //TODO - test blastFrozenUnit,
launchCoreSchematic, //TODO - test allBlocksSerpulo,
nucleusGroundZero, //TODO - test allBlocksErekir,
neoplasmWater, //TODO - test breakForceProjector,
blastFrozenUnit, //TODO - test researchLogic,
allBlocksSerpulo, //TODO - test negative10kPower,
allBlocksErekir, //TODO - test positive100kPower,
store1milPower,
//TODO are these necessary? blastGenerator,
//allTurretsSerpulo, //TODO neoplasiaExplosion,
//allTurretsErekir, //TODO
//allTechSerpulo, //TODO
//allTechErekir, //TODO
breakForceProjector, //TODO - test installMod,
researchLogic, //TODO - Steam - test routerLanguage,
joinCommunityServer,
openConsole,
negative10kPower, //TODO - test controlTurret,
positive100kPower, //TODO - test dropUnitsCoreZone,
store1milPower, //TODO - test destroyScatterFlare,
boostUnit,
boostBuildingFloor,
blastGenerator, //TODO - test hoverUnitLiquid,
neoplasiaExplosion, //TODO - test
installMod, //TODO - test break100Boulders(SStat.bouldersDeconstructed, 100),
routerLanguage, //TODO - test break10000Boulders(SStat.bouldersDeconstructed, 10_000),
joinCommunityServer, //TODO - test
openConsole, //TODO - test
controlTurret, //TODO - test shockwaveTowerUse,
dropUnitsCoreZone, //TODO - test
destroyScatterFlare, //TODO - test
boostUnit, //TODO - test
boostBuildingFloor, //TODO - test
hoverUnitLiquid, //TODO - test useAnimdustryEmoji,
break100Boulders(SStat.bouldersDeconstructed, 100), //TODO - test
break10000Boulders(SStat.bouldersDeconstructed, 10_000), //TODO - test
shockwaveTowerUse, //TODO - test
useAnimdustryEmoji, //TODO - Steam - icon done
; ;
@@ -140,7 +131,7 @@ public enum Achievement{
public void complete(){ public void complete(){
if(!isAchieved()){ if(!isAchieved()){
//can't complete achievements with the dev console shown. //can't complete achievements with the dev console shown.
if(ui != null && ui.consolefrag != null && ui.consolefrag.shown() && !OS.username.equals("anuke")) return; if(ui != null && ui.consolefrag != null && ui.consolefrag.shown() && !OS.username.equals("anuke") && this != openConsole) return;
service.completeAchievement(name()); service.completeAchievement(name());
service.storeStats(); service.storeStats();
@@ -148,6 +139,13 @@ public enum Achievement{
} }
} }
public void uncomplete(){
if(isAchieved()){
service.clearAchievement(name());
completed = false;
}
}
public void checkCompletion(){ public void checkCompletion(){
if(!isAchieved() && stat != null && stat.get() >= statGoal){ if(!isAchieved() && stat != null && stat.get() >= statGoal){
complete(); complete();

View File

@@ -16,6 +16,7 @@ import mindustry.world.blocks.defense.turrets.Turret.*;
import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.distribution.*;
import mindustry.world.blocks.production.AttributeCrafter.*; import mindustry.world.blocks.production.AttributeCrafter.*;
import mindustry.world.blocks.production.SolidPump.*; import mindustry.world.blocks.production.SolidPump.*;
import mindustry.world.blocks.storage.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
import static mindustry.Vars.*; import static mindustry.Vars.*;
@@ -54,6 +55,10 @@ public class GameService{
} }
public void clearAchievement(String name){
}
public boolean isAchieved(String name){ public boolean isAchieved(String name){
return false; return false;
} }
@@ -80,8 +85,9 @@ public class GameService{
allTransportSerpulo = content.blocks().select(b -> b.category == Category.distribution && b.isVisibleOn(Planets.serpulo) && b.isVanilla() && b.buildVisibility == BuildVisibility.shown).toArray(Block.class); allTransportSerpulo = content.blocks().select(b -> b.category == Category.distribution && b.isVisibleOn(Planets.serpulo) && b.isVanilla() && b.buildVisibility == BuildVisibility.shown).toArray(Block.class);
allTransportErekir = content.blocks().select(b -> b.category == Category.distribution && b.isVisibleOn(Planets.erekir) && b.isVanilla() && b.buildVisibility == BuildVisibility.shown).toArray(Block.class); allTransportErekir = content.blocks().select(b -> b.category == Category.distribution && b.isVisibleOn(Planets.erekir) && b.isVanilla() && b.buildVisibility == BuildVisibility.shown).toArray(Block.class);
allSerpuloBlocks = content.blocks().select(b -> b.synthetic() && b.isVisibleOn(Planets.serpulo) && b.isVanilla() && b.buildVisibility == BuildVisibility.shown).toArray(Block.class); //cores are ignored since they're upgrades and can be skipped
allErekirBlocks = content.blocks().select(b -> b.synthetic() && b.isVisibleOn(Planets.erekir) && b.isVanilla() && b.buildVisibility == BuildVisibility.shown).toArray(Block.class); allSerpuloBlocks = content.blocks().select(b -> b.synthetic() && b.isVisibleOn(Planets.serpulo) && b.isVanilla() && !(b instanceof CoreBlock) && b.buildVisibility == BuildVisibility.shown).toArray(Block.class);
allErekirBlocks = content.blocks().select(b -> b.synthetic() && b.isVisibleOn(Planets.erekir) && b.isVanilla() && !(b instanceof CoreBlock) && b.buildVisibility == BuildVisibility.shown).toArray(Block.class);
unitsBuilt = Core.settings.getJson("units-built" , ObjectSet.class, String.class, ObjectSet::new); unitsBuilt = Core.settings.getJson("units-built" , ObjectSet.class, String.class, ObjectSet::new);
blocksBuilt = Core.settings.getJson("blocks-built" , ObjectSet.class, String.class, ObjectSet::new); blocksBuilt = Core.settings.getJson("blocks-built" , ObjectSet.class, String.class, ObjectSet::new);
@@ -117,6 +123,8 @@ public class GameService{
captureAllSectors.complete(); captureAllSectors.complete();
} }
Events.run(Trigger.openConsole, () -> openConsole.complete());
Events.run(Trigger.unitCommandAttack, () -> { Events.run(Trigger.unitCommandAttack, () -> {
if(campaign()){ if(campaign()){
issueAttackCommand.complete(); issueAttackCommand.complete();
@@ -526,18 +534,15 @@ public class GameService{
for(var up : Groups.powerGraph){ for(var up : Groups.powerGraph){
var graph = up.graph(); var graph = up.graph();
if(graph.all.size > 0 && graph.all.first().team == player.team()){ if(graph.all.size > 1 && graph.all.first().team == player.team() && graph.hasPowerBalanceSamples()){
float balance = graph.getPowerBalance() * 60f; float balance = graph.getPowerBalance() * 60f;
if(balance < 10_000) negative10kPower.complete();
if(balance < -10_000) negative10kPower.complete();
if(balance > 100_000) positive100kPower.complete(); if(balance > 100_000) positive100kPower.complete();
if(graph.getBatteryStored() > 1_000_000) store1milPower.complete(); if(graph.getBatteryStored() > 1_000_000) store1milPower.complete();
} }
} }
} }
if(ui.consolefrag.shown()){
openConsole.complete();
}
} }
private void save(){ private void save(){

View File

@@ -24,11 +24,9 @@ public class BaseDialog extends Dialog{
.growX().height(3f).pad(4f); .growX().height(3f).pad(4f);
hidden(() -> { hidden(() -> {
if(shouldPause && state.isGame() && !net.active()){ if(shouldPause && state.isGame() && !net.active() && !wasPaused){
if(!wasPaused || net.active()){
state.set(State.playing); state.set(State.playing);
} }
}
Sounds.back.play(); Sounds.back.play();
}); });

View File

@@ -501,7 +501,6 @@ public class SettingsMenuDialog extends BaseDialog{
files.add(Core.settings.getSettingsFile()); files.add(Core.settings.getSettingsFile());
files.addAll(customMapDirectory.list()); files.addAll(customMapDirectory.list());
files.addAll(saveDirectory.list()); files.addAll(saveDirectory.list());
files.addAll(screenshotDirectory.list());
files.addAll(modDirectory.list()); files.addAll(modDirectory.list());
files.addAll(schematicDirectory.list()); files.addAll(schematicDirectory.list());
String base = Core.settings.getDataDirectory().path(); String base = Core.settings.getDataDirectory().path();

View File

@@ -12,6 +12,7 @@ import arc.scene.ui.TextField.*;
import arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import arc.struct.*; import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.game.EventType.*;
import mindustry.input.*; import mindustry.input.*;
import mindustry.ui.*; import mindustry.ui.*;
@@ -175,6 +176,7 @@ public class ConsoleFragment extends Table{
public void toggle(){ public void toggle(){
if(!open){ if(!open){
Events.fire(Trigger.openConsole);
scene.setKeyboardFocus(chatfield); scene.setKeyboardFocus(chatfield);
open = !open; open = !open;
if(mobile){ if(mobile){

View File

@@ -166,6 +166,8 @@ public class Block extends UnlockableContent implements Senseable{
public float baseExplosiveness = 0f; public float baseExplosiveness = 0f;
/** bullet that this block spawns when destroyed */ /** bullet that this block spawns when destroyed */
public @Nullable BulletType destroyBullet = null; public @Nullable BulletType destroyBullet = null;
/** liquid used for lighting */
public @Nullable Liquid lightLiquid;
/** whether cracks are drawn when this block is damaged */ /** whether cracks are drawn when this block is damaged */
public boolean drawCracks = true; public boolean drawCracks = true;
/** whether rubble is created when this block is destroyed */ /** whether rubble is created when this block is destroyed */
@@ -1081,13 +1083,15 @@ public class Block extends UnlockableContent implements Senseable{
for(ItemStack stack : i.items){ for(ItemStack stack : i.items){
cons.get(stack.item); cons.get(stack.item);
} }
}else if(c instanceof ConsumeLiquid i){ }
//TODO: requiring liquid dependencies is usually a bad idea, because there is no reason to pump/produce something until you actually need it.
/*else if(c instanceof ConsumeLiquid i){
cons.get(i.liquid); cons.get(i.liquid);
}else if(c instanceof ConsumeLiquids i){ }else if(c instanceof ConsumeLiquids i){
for(var stack : i.liquids){ for(var stack : i.liquids){
cons.get(stack.liquid); cons.get(stack.liquid);
} }
} }*/
} }
} }

View File

@@ -71,6 +71,11 @@ public class Radar extends Block{
totalProgress += efficiency * edelta(); totalProgress += efficiency * edelta();
} }
@Override
public boolean canPickup(){
return false;
}
@Override @Override
public void drawSelect(){ public void drawSelect(){
Drawf.dashCircle(x, y, fogRadius() * tilesize, Pal.accent); Drawf.dashCircle(x, y, fogRadius() * tilesize, Pal.accent);

View File

@@ -31,6 +31,7 @@ public class ShockwaveTower extends Block{
public Sound shootSound = Sounds.bang; public Sound shootSound = Sounds.bang;
public Color waveColor = Pal.accent, heatColor = Pal.turretHeat, shapeColor = Color.valueOf("f29c83"); public Color waveColor = Pal.accent, heatColor = Pal.turretHeat, shapeColor = Color.valueOf("f29c83");
public float cooldownMultiplier = 1f; public float cooldownMultiplier = 1f;
public Effect hitEffect = Fx.hitSquaresColor;
public Effect waveEffect = Fx.pointShockwave; public Effect waveEffect = Fx.pointShockwave;
//TODO switch to drawers eventually or something //TODO switch to drawers eventually or something
@@ -90,6 +91,7 @@ public class ShockwaveTower extends Block{
}else{ }else{
target.remove(); target.remove();
} }
hitEffect.at(target.x, target.y, waveColor);
} }
if(team == state.rules.defaultTeam){ if(team == state.rules.defaultTeam){

View File

@@ -1,5 +1,6 @@
package mindustry.world.blocks.power; package mindustry.world.blocks.power;
import arc.Core;
import arc.graphics.*; import arc.graphics.*;
import arc.graphics.g2d.*; import arc.graphics.g2d.*;
import arc.math.*; import arc.math.*;
@@ -22,8 +23,8 @@ import static mindustry.Vars.*;
public class BeamNode extends PowerBlock{ public class BeamNode extends PowerBlock{
public int range = 5; public int range = 5;
public @Load("power-beam") TextureRegion laser; public @Load(value = "@-beam", fallback = "power-beam") TextureRegion laser;
public @Load("power-beam-end") TextureRegion laserEnd; public @Load(value = "@-beam-end", fallback = "power-beam-end") TextureRegion laserEnd;
public Color laserColor1 = Color.white; public Color laserColor1 = Color.white;
public Color laserColor2 = Color.valueOf("ffd9c2"); public Color laserColor2 = Color.valueOf("ffd9c2");

View File

@@ -22,8 +22,8 @@ public class LongPowerNode extends PowerNode{
public void load(){ public void load(){
super.load(); super.load();
laser = Core.atlas.find("power-beam"); laser = Core.atlas.find(name + "-beam", Core.atlas.find("power-beam"));
laserEnd = Core.atlas.find("power-beam-end"); laserEnd = Core.atlas.find(name + "-beam-end", Core.atlas.find("power-beam-end"));
} }
public class LongPowerNodeBuild extends PowerNodeBuild{ public class LongPowerNodeBuild extends PowerNodeBuild{

View File

@@ -59,6 +59,10 @@ public class PowerGraph{
return powerBalance.rawMean(); return powerBalance.rawMean();
} }
public boolean hasPowerBalanceSamples(){
return powerBalance.hasEnoughData();
}
public float getLastPowerNeeded(){ public float getLastPowerNeeded(){
return lastPowerNeeded; return lastPowerNeeded;
} }

View File

@@ -29,8 +29,8 @@ public class PowerNode extends PowerBlock{
/** The maximum range of all power nodes on the map */ /** The maximum range of all power nodes on the map */
protected static float maxRange; protected static float maxRange;
public @Load("laser") TextureRegion laser; public @Load(value = "@-laser", fallback = "laser") TextureRegion laser;
public @Load("laser-end") TextureRegion laserEnd; public @Load(value = "@-laser-end", fallback = "laser-end") TextureRegion laserEnd;
public float laserRange = 6; public float laserRange = 6;
public int maxNodes = 3; public int maxNodes = 3;
public boolean autolink = true, drawRange = true; public boolean autolink = true, drawRange = true;

View File

@@ -38,6 +38,11 @@ public class UnitCargoLoader extends Block{
ambientSound = Sounds.respawning; ambientSound = Sounds.respawning;
} }
@Override
public boolean outputsItems(){
return false;
}
@Override @Override
public void setBars(){ public void setBars(){
super.setBars(); super.setBars();

View File

@@ -34,11 +34,6 @@ public class UnitCargoUnloadPoint extends Block{
configClear((UnitCargoUnloadPointBuild build) -> build.item = null); configClear((UnitCargoUnloadPointBuild build) -> build.item = null);
} }
@Override
public boolean outputsItems(){
return false;
}
public class UnitCargoUnloadPointBuild extends Building{ public class UnitCargoUnloadPointBuild extends Building{
public Item item; public Item item;
public float staleTimer; public float staleTimer;

View File

@@ -122,7 +122,7 @@ public class UnitFactory extends UnitBlock{
} }
if(plan.unit.unlockedNow()){ if(plan.unit.unlockedNow()){
t.image(plan.unit.uiIcon).size(40).pad(10f).left(); t.image(plan.unit.uiIcon).size(40).pad(10f).left().scaling(Scaling.fit);
t.table(info -> { t.table(info -> {
info.add(plan.unit.localizedName).left(); info.add(plan.unit.localizedName).left();
info.row(); info.row();

View File

@@ -1,6 +1,8 @@
package mindustry.world.meta; package mindustry.world.meta;
import arc.*; import arc.*;
import arc.util.*;
import mindustry.gen.*;
import java.util.*; import java.util.*;
@@ -18,7 +20,7 @@ public class StatUnit{
itemsSecond = new StatUnit("itemsSecond"), itemsSecond = new StatUnit("itemsSecond"),
liquidUnits = new StatUnit("liquidUnits"), liquidUnits = new StatUnit("liquidUnits"),
powerUnits = new StatUnit("powerUnits"), powerUnits = new StatUnit("powerUnits"),
heatUnits = new StatUnit("heatUnits"), heatUnits = new StatUnit("heatUnits", "[red]" + Iconc.waves + "[]"),
degrees = new StatUnit("degrees"), degrees = new StatUnit("degrees"),
seconds = new StatUnit("seconds"), seconds = new StatUnit("seconds"),
minutes = new StatUnit("minutes"), minutes = new StatUnit("minutes"),
@@ -33,6 +35,7 @@ public class StatUnit{
public final boolean space; public final boolean space;
public final String name; public final String name;
public @Nullable String icon;
public StatUnit(String name, boolean space){ public StatUnit(String name, boolean space){
this.name = name; this.name = name;
@@ -43,6 +46,11 @@ public class StatUnit{
this(name, true); this(name, true);
} }
public StatUnit(String name, String icon){
this(name, true);
this.icon = icon;
}
public String localized(){ public String localized(){
if(this == none) return ""; if(this == none) return "";
return Core.bundle.get("unit." + name.toLowerCase(Locale.ROOT)); return Core.bundle.get("unit." + name.toLowerCase(Locale.ROOT));

View File

@@ -49,7 +49,7 @@ public class StatValues{
public static StatValue number(float value, StatUnit unit, boolean merge){ public static StatValue number(float value, StatUnit unit, boolean merge){
return table -> { return table -> {
String l1 = fixValue(value), l2 = (unit.space ? " " : "") + unit.localized(); String l1 = (unit.icon == null ? "" : unit.icon + " ") + fixValue(value), l2 = (unit.space ? " " : "") + unit.localized();
if(merge){ if(merge){
table.add(l1 + l2); table.add(l1 + l2);

View File

@@ -147,6 +147,12 @@ public class DesktopLauncher extends ClientLauncher{
SVars.stats.stats.storeStats(); SVars.stats.stats.storeStats();
} }
@Override
public void clearAchievement(String name){
SVars.stats.stats.clearAchievement(name);
SVars.stats.stats.storeStats();
}
@Override @Override
public boolean isAchieved(String name){ public boolean isAchieved(String name){
return SVars.stats.stats.isAchieved(name, false); return SVars.stats.stats.isAchieved(name, false);

View File

@@ -272,8 +272,8 @@ public class ServerControl implements ApplicationListener{
}); });
Events.on(PlayerJoin.class, e -> { Events.on(PlayerJoin.class, e -> {
if(state.serverPaused && autoPaused && Config.autoPause.bool()){ if(state.isPaused() && autoPaused && Config.autoPause.bool()){
state.serverPaused = false; state.set(State.playing);
autoPaused = false; autoPaused = false;
} }
}); });
@@ -281,8 +281,8 @@ public class ServerControl implements ApplicationListener{
Events.on(PlayerLeave.class, e -> { Events.on(PlayerLeave.class, e -> {
// The player list length is compared with 1 and not 0 here, // The player list length is compared with 1 and not 0 here,
// because when PlayerLeave gets fired, the player hasn't been removed from the player list yet // because when PlayerLeave gets fired, the player hasn't been removed from the player list yet
if(!state.serverPaused && Config.autoPause.bool() && Groups.player.size() == 1){ if(!state.isPaused() && Config.autoPause.bool() && Groups.player.size() == 1){
state.serverPaused = true; state.set(State.paused);
autoPaused = true; autoPaused = true;
} }
}); });
@@ -372,7 +372,7 @@ public class ServerControl implements ApplicationListener{
netServer.openServer(); netServer.openServer();
if(Config.autoPause.bool()){ if(Config.autoPause.bool()){
state.serverPaused = true; state.set(State.paused);
autoPaused = true; autoPaused = true;
} }
}catch(MapException e){ }catch(MapException e){
@@ -489,9 +489,13 @@ public class ServerControl implements ApplicationListener{
}); });
handler.register("pause", "<on/off>", "Pause or unpause the game.", arg -> { handler.register("pause", "<on/off>", "Pause or unpause the game.", arg -> {
if(!state.isMenu()){
err("Cannot pause without a game running.");
return;
}
boolean pause = arg[0].equals("on"); boolean pause = arg[0].equals("on");
autoPaused = false; autoPaused = false;
state.serverPaused = pause; state.set(state.isPaused() ? State.playing : State.paused);
info(pause ? "Game paused." : "Game unpaused."); info(pause ? "Game paused." : "Game unpaused.");
}); });

View File

@@ -5,7 +5,7 @@
}, },
{ {
"name": "mindustry.pl", "name": "mindustry.pl",
"address": ["0.baseduser.eu.org:6966", "0.baseduser.eu.org:6666", "0.baseduser.eu.org:6000"] "address": ["0.baseduser.eu.org:6966", "0.baseduser.eu.org:6666", "0.baseduser.eu.org:6000", "1.baseduser.eu.org:6966", "1.baseduser.eu.org:6666", "1.baseduser.eu.org:6000"]
}, },
{ {
"name": "SynapseOS", "name": "SynapseOS",