Merge branch 'master' into patch-1
This commit is contained in:
@@ -26,6 +26,7 @@ script:
|
|||||||
- cp -a Mindustry/core/build/docs/javadoc/. docs/
|
- cp -a Mindustry/core/build/docs/javadoc/. docs/
|
||||||
- cd docs
|
- cd docs
|
||||||
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then git add .; git commit -m "Update ${TRAVIS_BUILD_NUMBER}"; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/MindustryGame/docs; fi
|
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then git add .; git commit -m "Update ${TRAVIS_BUILD_NUMBER}"; git push https://Anuken:${GH_PUSH_TOKEN}@github.com/MindustryGame/docs; fi
|
||||||
|
- cd ../Mindustry
|
||||||
deploy:
|
deploy:
|
||||||
- provider: releases
|
- provider: releases
|
||||||
skip_cleanup: true
|
skip_cleanup: true
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ dependencies{
|
|||||||
natives "com.github.Anuken.Arc:natives-freetype-android:${getArcHash()}"
|
natives "com.github.Anuken.Arc:natives-freetype-android:${getArcHash()}"
|
||||||
natives "com.github.Anuken.Arc:natives-box2d-android:${getArcHash()}"
|
natives "com.github.Anuken.Arc:natives-box2d-android:${getArcHash()}"
|
||||||
|
|
||||||
if(localArc()) compileOnly fileTree(dir: '../../Arc/backends/backend-android/libs', include: ['*.jar'])
|
//android dependencies magically disappear during compilation, thanks gradle!
|
||||||
|
if(new File(projectDir.parent, '../Arc').exists()) compileOnly fileTree(dir: '../../Arc/backends/backend-android/libs', include: ['*.jar'])
|
||||||
}
|
}
|
||||||
|
|
||||||
task deploy(type: Copy){
|
task deploy(type: Copy){
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ allprojects{
|
|||||||
|
|
||||||
ext{
|
ext{
|
||||||
versionNumber = '6'
|
versionNumber = '6'
|
||||||
if(!project.hasProperty("versionModifier")) versionModifier = 'pre-alpha'
|
if(!project.hasProperty("versionModifier")) versionModifier = 'alpha'
|
||||||
if(!project.hasProperty("versionType")) versionType = 'official'
|
if(!project.hasProperty("versionType")) versionType = 'official'
|
||||||
appName = 'Mindustry'
|
appName = 'Mindustry'
|
||||||
steamworksVersion = '891ed912791e01fe9ee6237a6497e5212b85c256'
|
steamworksVersion = '891ed912791e01fe9ee6237a6497e5212b85c256'
|
||||||
@@ -261,7 +261,6 @@ project(":core"){
|
|||||||
doLast{
|
doLast{
|
||||||
def props = loadVersionProps()
|
def props = loadVersionProps()
|
||||||
def androidVersion = props['androidBuildCode'].toInteger() - 2
|
def androidVersion = props['androidBuildCode'].toInteger() - 2
|
||||||
def buildVersion = props["build"]
|
|
||||||
def loglines = file("../changelog").text.split("\n")
|
def loglines = file("../changelog").text.split("\n")
|
||||||
def maxLength = 460
|
def maxLength = 460
|
||||||
|
|
||||||
@@ -273,7 +272,6 @@ project(":core"){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
def changelogs = file("../fastlane/metadata/android/en-US/changelogs/")
|
def changelogs = file("../fastlane/metadata/android/en-US/changelogs/")
|
||||||
new File(changelogs, buildVersion + ".txt").text = (result)
|
|
||||||
new File(changelogs, androidVersion + ".txt").text = (result)
|
new File(changelogs, androidVersion + ".txt").text = (result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,5 @@
|
|||||||
flattenPaths: true,
|
flattenPaths: true,
|
||||||
maxWidth: 4096,
|
maxWidth: 4096,
|
||||||
maxHeight: 4096,
|
maxHeight: 4096,
|
||||||
minHeight: 2048,
|
|
||||||
fast: true
|
fast: true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ gameover = Game Over
|
|||||||
gameover.pvp = The[accent] {0}[] team is victorious!
|
gameover.pvp = The[accent] {0}[] team is victorious!
|
||||||
highscore = [accent]New highscore!
|
highscore = [accent]New highscore!
|
||||||
copied = Copied.
|
copied = Copied.
|
||||||
indevpopup = [accent]v6[] is currently in [accent]pre-alpha[].\n[lightgray]This means:[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work\n- Many units are unfinished\n- The campaign is completely unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[].
|
indevpopup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[].
|
||||||
|
|
||||||
load.sound = Sounds
|
load.sound = Sounds
|
||||||
load.map = Maps
|
load.map = Maps
|
||||||
@@ -509,6 +509,11 @@ error.io = Network I/O error.
|
|||||||
error.any = Unknown network error.
|
error.any = Unknown network error.
|
||||||
error.bloom = Failed to initialize bloom.\nYour device may not support it.
|
error.bloom = Failed to initialize bloom.\nYour device may not support it.
|
||||||
|
|
||||||
|
weather.rain.name = Rain
|
||||||
|
weather.snow.name = Snow
|
||||||
|
weather.sandstorm.name = Sandstorm
|
||||||
|
weather.sporestorm.name = Sporestorm
|
||||||
|
|
||||||
sectors.unexplored = [lightgray]Unexplored
|
sectors.unexplored = [lightgray]Unexplored
|
||||||
sectors.resources = Resources:
|
sectors.resources = Resources:
|
||||||
sectors.production = Production:
|
sectors.production = Production:
|
||||||
@@ -652,6 +657,7 @@ unit.liquidunits = liquid units
|
|||||||
unit.powerunits = power units
|
unit.powerunits = power units
|
||||||
unit.degrees = degrees
|
unit.degrees = degrees
|
||||||
unit.seconds = seconds
|
unit.seconds = seconds
|
||||||
|
unit.minutes = mins
|
||||||
unit.persecond = /sec
|
unit.persecond = /sec
|
||||||
unit.perminute = /min
|
unit.perminute = /min
|
||||||
unit.timesspeed = x speed
|
unit.timesspeed = x speed
|
||||||
@@ -842,7 +848,9 @@ rules.lighting = Lighting
|
|||||||
rules.fire = Fire
|
rules.fire = Fire
|
||||||
rules.explosions = Block/Unit Explosion Damage
|
rules.explosions = Block/Unit Explosion Damage
|
||||||
rules.ambientlight = Ambient Light
|
rules.ambientlight = Ambient Light
|
||||||
rules.solarpowermultiplier = Solar Power Multiplier
|
rules.weather = Weather
|
||||||
|
rules.weather.frequency = Frequency:
|
||||||
|
rules.weather.duration = Duration:
|
||||||
|
|
||||||
content.item.name = Items
|
content.item.name = Items
|
||||||
content.liquid.name = Liquids
|
content.liquid.name = Liquids
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ link.itch.io.description = Stránka na itch.io s odkazy na stažení hry
|
|||||||
link.google-play.description = Obchod Google Play
|
link.google-play.description = Obchod Google Play
|
||||||
link.f-droid.description = Katalog F-Droid
|
link.f-droid.description = Katalog F-Droid
|
||||||
link.wiki.description = Oficiální Wiki Mindustry
|
link.wiki.description = Oficiální Wiki Mindustry
|
||||||
link.suggestions.description = Navrhni něco nového do hry!
|
link.feathub.description = Navrhni něco nového do hry!
|
||||||
linkfail = Nepodařilo se otevřít odkaz!\nAdresa URL byla zkopírována do schránky.
|
linkfail = Nepodařilo se otevřít odkaz!\nAdresa URL byla zkopírována do schránky.
|
||||||
screenshot = Snímek obrazovky uložen {0}
|
screenshot = Snímek obrazovky uložen {0}
|
||||||
screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro získání snímku obrazovky.
|
screenshot.invalid = Mapa je moc velká, nemusí být dost paměti pro získání snímku obrazovky.
|
||||||
@@ -63,8 +63,7 @@ stat.delivered = Materiálu vysláno:
|
|||||||
stat.playtime = Odehraný čas: [accent]{0}[]
|
stat.playtime = Odehraný čas: [accent]{0}[]
|
||||||
stat.rank = Celková známka: [accent]{0}[]
|
stat.rank = Celková známka: [accent]{0}[]
|
||||||
|
|
||||||
launcheditems = [accent]Získané předměty[]
|
globalitems = [accent]Celkové položky[]
|
||||||
launchinfo = [unlaunched]Je třeba vyslat zpět Tvé jádro, abys získal věci vyznačené modře.[]
|
|
||||||
map.delete = Jsi si jistý, že chceš smazat mapu "[accent]{0}[]"?
|
map.delete = Jsi si jistý, že chceš smazat mapu "[accent]{0}[]"?
|
||||||
level.highscore = Nejvyšší skóre: [accent]{0}[]
|
level.highscore = Nejvyšší skóre: [accent]{0}[]
|
||||||
level.select = Výběr úrovně
|
level.select = Výběr úrovně
|
||||||
@@ -106,7 +105,7 @@ mods.guide = Průvodce modifikacemi
|
|||||||
mods.report = Nahlásit závadu
|
mods.report = Nahlásit závadu
|
||||||
mods.openfolder = Otevřít složku s modifikacemi
|
mods.openfolder = Otevřít složku s modifikacemi
|
||||||
mods.reload = Znovu načíst
|
mods.reload = Znovu načíst
|
||||||
mods.reloadexit = The game will now exit, to reload mods.
|
mods.reloadexit = Hra bude nyní ukončena, aby si znovu načetla modifikace.
|
||||||
mod.display = [gray]Modifikace:[][orange] {0}[]
|
mod.display = [gray]Modifikace:[][orange] {0}[]
|
||||||
mod.enabled = [lightgray]Povoleno[]
|
mod.enabled = [lightgray]Povoleno[]
|
||||||
mod.disabled = [scarlet]Zakázáno[]
|
mod.disabled = [scarlet]Zakázáno[]
|
||||||
@@ -125,7 +124,7 @@ mod.reloadrequired = [scarlet]Je vyžadováno znovuspuštění hry.
|
|||||||
mod.import = Importovat modifikaci
|
mod.import = Importovat modifikaci
|
||||||
mod.import.file = Importovat soubor
|
mod.import.file = Importovat soubor
|
||||||
mod.import.github = Import modifikace z GitHubu
|
mod.import.github = Import modifikace z GitHubu
|
||||||
mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source!
|
mod.jarwarn = [scarlet]JAR modifikace jsou z podstaty nebezpečné.[]\Ujisti se, že je importuješ z důvěryhodného zdroje!
|
||||||
mod.item.remove = Tato položka je součástí [accent]'{0}'[] modifikace. Pokud ji chcete odstranit, odinstalujte tuto modifikaci.
|
mod.item.remove = Tato položka je součástí [accent]'{0}'[] modifikace. Pokud ji chcete odstranit, odinstalujte tuto modifikaci.
|
||||||
mod.remove.confirm = Tato modifikace bude odstraněna.
|
mod.remove.confirm = Tato modifikace bude odstraněna.
|
||||||
mod.author = [lightgray]Autor:[] {0}
|
mod.author = [lightgray]Autor:[] {0}
|
||||||
@@ -144,6 +143,7 @@ techtree = Technologie
|
|||||||
research.list = [lightgray]Výzkum:[]
|
research.list = [lightgray]Výzkum:[]
|
||||||
research = Výzkum
|
research = Výzkum
|
||||||
researched = Dokončen výzkum technologie: [lightgray]{0}[].
|
researched = Dokončen výzkum technologie: [lightgray]{0}[].
|
||||||
|
research.progress = {0}% dokončeno
|
||||||
players = Hráčů: {0}
|
players = Hráčů: {0}
|
||||||
players.single = Hráč: {0}
|
players.single = Hráč: {0}
|
||||||
players.search = hledat
|
players.search = hledat
|
||||||
@@ -198,8 +198,8 @@ server.admins.none = Žádní správci nebyli nalezeni.
|
|||||||
server.add = Přidat server
|
server.add = Přidat server
|
||||||
server.delete = Jsi si jistý, že chceš smazat tento server?
|
server.delete = Jsi si jistý, že chceš smazat tento server?
|
||||||
server.edit = Upravit server
|
server.edit = Upravit server
|
||||||
server.outdated = [crimson]Zastaralá verze serveru![]
|
server.outdated = [scarlet]Zastaralá verze serveru![]
|
||||||
server.outdated.client = [crimson]Zastaralá verze klienta![]
|
server.outdated.client = [scarlet]Zastaralá verze klienta![]
|
||||||
server.version = [gray]Verze: {0} {1}[]
|
server.version = [gray]Verze: {0} {1}[]
|
||||||
server.custombuild = [accent]Upravená verze hry[]
|
server.custombuild = [accent]Upravená verze hry[]
|
||||||
confirmban = Jsi si jistý, že chceš zakázat hráče "{0}[white]"?[]
|
confirmban = Jsi si jistý, že chceš zakázat hráče "{0}[white]"?[]
|
||||||
@@ -221,7 +221,7 @@ connecting.data = [accent]Načítám data ze serveru...[]
|
|||||||
server.port = Port:
|
server.port = Port:
|
||||||
server.addressinuse = Adresu již někdo používá!
|
server.addressinuse = Adresu již někdo používá!
|
||||||
server.invalidport = Neplatné číslo portu!
|
server.invalidport = Neplatné číslo portu!
|
||||||
server.error = [crimson]Chyba při hostování serveru.[]
|
server.error = [scarlet]Chyba při hostování serveru.[]
|
||||||
save.new = Nové uložení hry
|
save.new = Nové uložení hry
|
||||||
save.overwrite = Jsi si jistý, že chceš přepsat\ntuto pozici pro uložení hry?
|
save.overwrite = Jsi si jistý, že chceš přepsat\ntuto pozici pro uložení hry?
|
||||||
overwrite = Přepsat
|
overwrite = Přepsat
|
||||||
@@ -231,8 +231,8 @@ save.delete.confirm = Jsi si jistý, že chceš smazat toto uložení hry?
|
|||||||
save.delete = Smazat
|
save.delete = Smazat
|
||||||
save.export = Exportovat uložení hry
|
save.export = Exportovat uložení hry
|
||||||
save.import.invalid = [accent]Toto uložení není v pořádku![]
|
save.import.invalid = [accent]Toto uložení není v pořádku![]
|
||||||
save.import.fail = [crimson]Nepodařilo se importovat uložení hry: [accent]{0}[]
|
save.import.fail = [scarlet]Nepodařilo se importovat uložení hry: [accent]{0}[]
|
||||||
save.export.fail = [crimson]Nepodařilo se exportovat uložení hry: [accent]{0}[]
|
save.export.fail = [scarlet]Nepodařilo se exportovat uložení hry: [accent]{0}[]
|
||||||
save.import = Importovat uložení hry
|
save.import = Importovat uložení hry
|
||||||
save.newslot = Uložit hru:
|
save.newslot = Uložit hru:
|
||||||
save.rename = Přejmenovat
|
save.rename = Přejmenovat
|
||||||
@@ -340,6 +340,12 @@ waves.load = Načíst ze schránky
|
|||||||
waves.invalid = Neplatné vlny ve schránce.
|
waves.invalid = Neplatné vlny ve schránce.
|
||||||
waves.copied = Vlny byly zkopírovány.
|
waves.copied = Vlny byly zkopírovány.
|
||||||
waves.none = Žádní nepřátelé nebyli definováni.\nVlny s prázdným rozložením budou automaticky upraveny na výchozí rozložení.
|
waves.none = Žádní nepřátelé nebyli definováni.\nVlny s prázdným rozložením budou automaticky upraveny na výchozí rozložení.
|
||||||
|
|
||||||
|
#tyto jsou záměrně malými písmeny
|
||||||
|
wavemode.counts = počty
|
||||||
|
wavemode.totals = součty
|
||||||
|
wavemode.health = zdraví
|
||||||
|
|
||||||
editor.default = [lightgray]<Výchozí>[]
|
editor.default = [lightgray]<Výchozí>[]
|
||||||
details = Podrobnosti...
|
details = Podrobnosti...
|
||||||
edit = Upravit...
|
edit = Upravit...
|
||||||
@@ -379,7 +385,7 @@ editor.exportimage = Exportovat obrázek terénu
|
|||||||
editor.exportimage.description = Exportovat obrázek mapy do souboru
|
editor.exportimage.description = Exportovat obrázek mapy do souboru
|
||||||
editor.loadimage = Importovat terén
|
editor.loadimage = Importovat terén
|
||||||
editor.saveimage = Exportovat terén
|
editor.saveimage = Exportovat terén
|
||||||
editor.unsaved = [scarlet]Máš neuložené změny![]\nPřesto chceš odejít z editoru? Změny budou ztraceny.
|
editor.unsaved = Opravdu chceš odejít z editoru?\n[scarlet]Neuložené změny budou ztraceny.[]
|
||||||
editor.resizemap = Změnit velikost mapy
|
editor.resizemap = Změnit velikost mapy
|
||||||
editor.mapname = Jméno mapy:
|
editor.mapname = Jméno mapy:
|
||||||
editor.overwrite = [accent]Varování!\nToto přepíše již existující mapu.[]
|
editor.overwrite = [accent]Varování!\nToto přepíše již existující mapu.[]
|
||||||
@@ -459,11 +465,13 @@ locked = Zamčeno
|
|||||||
complete = [lightgray]Dokončeno:
|
complete = [lightgray]Dokončeno:
|
||||||
requirement.wave = Dosáhni vlny {0} na mapě {1}
|
requirement.wave = Dosáhni vlny {0} na mapě {1}
|
||||||
requirement.core = Znič nepřátelské jádro na mapě {0}
|
requirement.core = Znič nepřátelské jádro na mapě {0}
|
||||||
requirement.unlock = Odemknuto {0}
|
requirement.research = Vynalezeno {0}
|
||||||
|
requirement.capture = Polapeno {0}
|
||||||
resume = Zpět do mapy:\n[lightgray]{0}[]
|
resume = Zpět do mapy:\n[lightgray]{0}[]
|
||||||
bestwave = [lightgray]Nejvyšší vlna: {0}
|
bestwave = [lightgray]Nejvyšší vlna: {0}
|
||||||
launch = Vyslat do této mapy Tvé jádro
|
#TODO fix/remove this
|
||||||
launch.text = Launch
|
launch = < VYSLAT >
|
||||||
|
launch.text = Vyslat
|
||||||
launch.title = Vyslání bylo úspěšné
|
launch.title = Vyslání bylo úspěšné
|
||||||
launch.next = [lightgray]další možnost bude až ve vlně {0}[]
|
launch.next = [lightgray]další možnost bude až ve vlně {0}[]
|
||||||
launch.unable2 = [scarlet]Není možno se vyslat.[]
|
launch.unable2 = [scarlet]Není možno se vyslat.[]
|
||||||
@@ -471,8 +479,9 @@ launch.confirm = Toto vyšle veškeré suroviny ve Tvém jádře zpět.\nJiž se
|
|||||||
launch.skip.confirm = Jestli teď zůstaneš, budeš moci odejít až po několika dalších vlnách.
|
launch.skip.confirm = Jestli teď zůstaneš, budeš moci odejít až po několika dalších vlnách.
|
||||||
uncover = Odkrýt mapu
|
uncover = Odkrýt mapu
|
||||||
configure = Přizpůsobit vybavení
|
configure = Přizpůsobit vybavení
|
||||||
loadout = Loadout
|
#TODO
|
||||||
resources = Resources
|
loadout = Načtení
|
||||||
|
resources = Zdroje
|
||||||
bannedblocks = Zakázané bloky
|
bannedblocks = Zakázané bloky
|
||||||
addall = Přidat vše
|
addall = Přidat vše
|
||||||
configure.invalid = Hodnota musí být číslo mezi 0 a {0}.
|
configure.invalid = Hodnota musí být číslo mezi 0 a {0}.
|
||||||
@@ -485,7 +494,7 @@ zone.objective.attack = Znič nepřátelské jádro
|
|||||||
add = Přidat...
|
add = Přidat...
|
||||||
boss.health = Životy Strážce
|
boss.health = Životy Strážce
|
||||||
|
|
||||||
connectfail = [crimson]Nepovedlo se připojení k serveru:\n\n[accent]{0}[]
|
connectfail = [scarlet]Nepovedlo se připojení k serveru:\n\n[accent]{0}[]
|
||||||
error.unreachable = Server je nedostupný.\nJe IP adresa napsaná správně (XXX.XXX.XXX.XXX)?
|
error.unreachable = Server je nedostupný.\nJe IP adresa napsaná správně (XXX.XXX.XXX.XXX)?
|
||||||
error.invalidaddress = Neplatná IP adresa.
|
error.invalidaddress = Neplatná IP adresa.
|
||||||
error.timedout = Čas pro spojení se serverem vypršel!\nUjisti se, že IP adresa je napsaná správně. Zkus také zjistit, zda má hostitel správně nastavené přesměrování portů.
|
error.timedout = Čas pro spojení se serverem vypršel!\nUjisti se, že IP adresa je napsaná správně. Zkus také zjistit, zda má hostitel správně nastavené přesměrování portů.
|
||||||
@@ -496,6 +505,7 @@ error.io = Vstupně/výstupní (I/O) chyba sítě.
|
|||||||
error.any = Ueznámá chyba sítě.
|
error.any = Ueznámá chyba sítě.
|
||||||
error.bloom = Chyba inicializace filtru Bloom.\nTvé zařízení ho nejspíš nepodporuje.
|
error.bloom = Chyba inicializace filtru Bloom.\nTvé zařízení ho nejspíš nepodporuje.
|
||||||
|
|
||||||
|
#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway
|
||||||
sector.groundZero.name = Základní tábor
|
sector.groundZero.name = Základní tábor
|
||||||
sector.craters.name = Krátery
|
sector.craters.name = Krátery
|
||||||
sector.frozenForest.name = Zamrzlý les
|
sector.frozenForest.name = Zamrzlý les
|
||||||
@@ -508,6 +518,10 @@ sector.tarFields.name = Dehtová pole
|
|||||||
sector.saltFlats.name = Solné nížiny
|
sector.saltFlats.name = Solné nížiny
|
||||||
sector.fungalPass.name = Plísňový průsmyk
|
sector.fungalPass.name = Plísňový průsmyk
|
||||||
|
|
||||||
|
#unused
|
||||||
|
#sector.impact0078.name = Impact 0078
|
||||||
|
#sector.crags.name = Crags
|
||||||
|
|
||||||
sector.groundZero.description = Optimální místo, kde znovu začít. Nízký výskyt nepřátel. Několik málo surovin.\nPosbírej co nejvíce olova a mědi.\nBěž dál.
|
sector.groundZero.description = Optimální místo, kde znovu začít. Nízký výskyt nepřátel. Několik málo surovin.\nPosbírej co nejvíce olova a mědi.\nBěž dál.
|
||||||
sector.frozenForest.description = Dokonce až sem, blízko hor, se dokázaly spóry rozrůst. Mráz je však nemůže zadržet navěky.\n\nPusť se do práce za pomocí energie. Stav spalovací generátory. Nauč se, jak používat opravovací věže.
|
sector.frozenForest.description = Dokonce až sem, blízko hor, se dokázaly spóry rozrůst. Mráz je však nemůže zadržet navěky.\n\nPusť se do práce za pomocí energie. Stav spalovací generátory. Nauč se, jak používat opravovací věže.
|
||||||
sector.saltFlats.description = Na okraji pouště leží Solné nížiny. V této lokaci se nachází jen několik málo surovin.\n\nNepřítel zde vybudoval zásobovací komplex. Znič jádro v jeho základně. Nenechej kámen na kameni.
|
sector.saltFlats.description = Na okraji pouště leží Solné nížiny. V této lokaci se nachází jen několik málo surovin.\n\nNepřítel zde vybudoval zásobovací komplex. Znič jádro v jeho základně. Nenechej kámen na kameni.
|
||||||
@@ -532,6 +546,8 @@ settings.graphics = Grafika
|
|||||||
settings.cleardata = Vymazat data hry...
|
settings.cleardata = Vymazat data hry...
|
||||||
settings.clear.confirm = Jsi si jistý, že chceš vymazat Tvá data ve hře?\nTento krok je nevratný!
|
settings.clear.confirm = Jsi si jistý, že chceš vymazat Tvá data ve hře?\nTento krok je nevratný!
|
||||||
settings.clearall.confirm = [scarlet]Varování![]\nToto vyresetuje všechna Tvá data ve hře, včetně uložení hry, map, odemknutého postupu v kampani a nastavení ovládání.\nJakmile stiskneš "OK", všechna data se vymažou a hra se automaticky ukončí.
|
settings.clearall.confirm = [scarlet]Varování![]\nToto vyresetuje všechna Tvá data ve hře, včetně uložení hry, map, odemknutého postupu v kampani a nastavení ovládání.\nJakmile stiskneš "OK", všechna data se vymažou a hra se automaticky ukončí.
|
||||||
|
settings.save.clear.confirm = Opravdu chceš smazat všechna Tvá uložení hry?
|
||||||
|
settings.save.clear = Smazat všechna Tvá uložení hry
|
||||||
paused = [accent]< Pozastaveno >[]
|
paused = [accent]< Pozastaveno >[]
|
||||||
clear = Vyčistit
|
clear = Vyčistit
|
||||||
banned = [scarlet]Zakázán[]
|
banned = [scarlet]Zakázán[]
|
||||||
@@ -539,7 +555,7 @@ unplaceable.sectorcaptured = [scarlet]Vyžaduje polapený sektor[]
|
|||||||
yes = Ano
|
yes = Ano
|
||||||
no = Ne
|
no = Ne
|
||||||
info.title = Informace
|
info.title = Informace
|
||||||
error.title = [crimson]Objevila se chyba[]
|
error.title = [scarlet]Objevila se chyba[]
|
||||||
error.crashtitle = Objevila se chyba
|
error.crashtitle = Objevila se chyba
|
||||||
unit.nobuild = [scarlet]Jednotka nemůže stavět
|
unit.nobuild = [scarlet]Jednotka nemůže stavět
|
||||||
blocks.input = Vstup
|
blocks.input = Vstup
|
||||||
@@ -574,6 +590,7 @@ blocks.boosteffect = Účinek posílení
|
|||||||
blocks.maxunits = Nejvýše aktivních jednotek
|
blocks.maxunits = Nejvýše aktivních jednotek
|
||||||
blocks.health = Životy
|
blocks.health = Životy
|
||||||
blocks.buildtime = Čas stavby
|
blocks.buildtime = Čas stavby
|
||||||
|
blocks.maxconsecutive = Nejvýše po sobě
|
||||||
blocks.buildcost = Cena stavby
|
blocks.buildcost = Cena stavby
|
||||||
blocks.inaccuracy = Nepřesnost
|
blocks.inaccuracy = Nepřesnost
|
||||||
blocks.shots = Střely
|
blocks.shots = Střely
|
||||||
@@ -581,8 +598,8 @@ blocks.reload = Střel za 1s
|
|||||||
blocks.ammo = Střelivo
|
blocks.ammo = Střelivo
|
||||||
|
|
||||||
bar.drilltierreq = Je vyžadován lepší vrt
|
bar.drilltierreq = Je vyžadován lepší vrt
|
||||||
bar.noresources = Missing Resources
|
bar.noresources = Chybějí zdroje
|
||||||
bar.corereq = Core Base Required
|
bar.corereq = Je vyžadováno základní jádro
|
||||||
bar.drillspeed = Rychlost vrtu: {0}/s
|
bar.drillspeed = Rychlost vrtu: {0}/s
|
||||||
bar.pumpspeed = Rychlost pumpy: {0}/s
|
bar.pumpspeed = Rychlost pumpy: {0}/s
|
||||||
bar.efficiency = Účinnost: {0}%
|
bar.efficiency = Účinnost: {0}%
|
||||||
@@ -593,7 +610,7 @@ bar.poweroutput = Výstup energie: {0}
|
|||||||
bar.items = Předměty: {0}
|
bar.items = Předměty: {0}
|
||||||
bar.capacity = Kapacita: {0}
|
bar.capacity = Kapacita: {0}
|
||||||
bar.unitcap = {0} {1}/{2}
|
bar.unitcap = {0} {1}/{2}
|
||||||
bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled]
|
bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[jednotka je vypnuta]
|
||||||
bar.liquid = Chlazení
|
bar.liquid = Chlazení
|
||||||
bar.heat = Teplo
|
bar.heat = Teplo
|
||||||
bar.power = Energie
|
bar.power = Energie
|
||||||
@@ -625,8 +642,9 @@ unit.persecond = /s
|
|||||||
unit.timesspeed = x větší rychlost
|
unit.timesspeed = x větší rychlost
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = předměty
|
unit.items = předměty
|
||||||
unit.thousands = t
|
unit.thousands = tis
|
||||||
unit.millions = m
|
unit.millions = mio
|
||||||
|
unit.billions = mld
|
||||||
category.general = Všeobecné
|
category.general = Všeobecné
|
||||||
category.power = Energie
|
category.power = Energie
|
||||||
category.liquids = Kapaliny
|
category.liquids = Kapaliny
|
||||||
@@ -679,7 +697,7 @@ setting.blockselectkeys.name = Ukázat klávesy při práci s blokem
|
|||||||
setting.vsync.name = Vertikální synchronizace
|
setting.vsync.name = Vertikální synchronizace
|
||||||
setting.pixelate.name = Rozpixlovat
|
setting.pixelate.name = Rozpixlovat
|
||||||
setting.minimap.name = Ukázat mapičku
|
setting.minimap.name = Ukázat mapičku
|
||||||
setting.coreitems.name = Display Core Items (WIP)
|
setting.coreitems.name = Ukázat položky jádra (WIP)
|
||||||
setting.position.name = Ukázat pozici hráče
|
setting.position.name = Ukázat pozici hráče
|
||||||
setting.musicvol.name = Hlasitost hudby
|
setting.musicvol.name = Hlasitost hudby
|
||||||
setting.atmosphere.name = Ukázat atmosféru planety
|
setting.atmosphere.name = Ukázat atmosféru planety
|
||||||
@@ -705,7 +723,7 @@ keybinds.mobile = [scarlet]Většina kláves nefunguje v mobilní verzi hry. Je
|
|||||||
category.general.name = Všeobecné
|
category.general.name = Všeobecné
|
||||||
category.view.name = Pohled
|
category.view.name = Pohled
|
||||||
category.multiplayer.name = Hra více hráčů
|
category.multiplayer.name = Hra více hráčů
|
||||||
category.blocks.name = Block Select
|
category.blocks.name = Výběr bloků
|
||||||
command.attack = Útok
|
command.attack = Útok
|
||||||
command.rally = Shromáždění
|
command.rally = Shromáždění
|
||||||
command.retreat = Ústup
|
command.retreat = Ústup
|
||||||
@@ -846,33 +864,33 @@ liquid.heatcapacity = [lightgray]Teplotní kapacita: {0}[]
|
|||||||
liquid.viscosity = [lightgray]Viskozita: {0}[]
|
liquid.viscosity = [lightgray]Viskozita: {0}[]
|
||||||
liquid.temperature = [lightgray]Teplota: {0}[]
|
liquid.temperature = [lightgray]Teplota: {0}[]
|
||||||
|
|
||||||
unit.dagger.name = Mech Dýka
|
unit.dagger.name = Dýka
|
||||||
unit.mace.name = Mace
|
unit.mace.name = Palcát
|
||||||
unit.fortress.name = Mech Pevnost
|
unit.fortress.name = Pevnost
|
||||||
unit.nova.name = Nova
|
unit.nova.name = Nova
|
||||||
unit.pulsar.name = Pulsar
|
unit.pulsar.name = Pulzar
|
||||||
unit.quasar.name = Quasar
|
unit.quasar.name = Kvasar
|
||||||
unit.crawler.name = Mech Slídil
|
unit.crawler.name = Slídil
|
||||||
unit.atrax.name = Atrax
|
unit.atrax.name = Atrax
|
||||||
unit.spiroct.name = Spiroct
|
unit.spiroct.name = Spiroct
|
||||||
unit.arkyid.name = Arkyid
|
unit.arkyid.name = Arkyid
|
||||||
unit.flare.name = Flare
|
unit.flare.name = Záře
|
||||||
unit.horizon.name = Horizon
|
unit.horizon.name = Horizont
|
||||||
unit.zenith.name = Zenith
|
unit.zenith.name = Zenit
|
||||||
unit.antumbra.name = Antumbra
|
unit.antumbra.name = Antumbra
|
||||||
unit.eclipse.name = Eclipse
|
unit.eclipse.name = Zatmění
|
||||||
unit.mono.name = Mono
|
unit.mono.name = Mono
|
||||||
unit.poly.name = Poly
|
unit.poly.name = Poly
|
||||||
unit.mega.name = Mega
|
unit.mega.name = Mega
|
||||||
unit.risso.name = Risso
|
unit.risso.name = Risso
|
||||||
unit.minke.name = Minke
|
unit.minke.name = Minke
|
||||||
unit.bryde.name = Bryde
|
unit.bryde.name = Bryde
|
||||||
unit.alpha.name = Alpha
|
unit.alpha.name = Alfa
|
||||||
unit.beta.name = Beta
|
unit.beta.name = Beta
|
||||||
unit.gamma.name = Gamma
|
unit.gamma.name = Gama
|
||||||
|
|
||||||
block.parallax.name = Parallax
|
block.parallax.name = Paralaxa
|
||||||
block.cliff.name = Cliff
|
block.cliff.name = Útes
|
||||||
block.sand-boulder.name = Pískovec
|
block.sand-boulder.name = Pískovec
|
||||||
block.grass.name = Tráva
|
block.grass.name = Tráva
|
||||||
block.slag.name = Slag
|
block.slag.name = Slag
|
||||||
@@ -1061,12 +1079,19 @@ block.naval-factory.name = Námořní továrna
|
|||||||
block.additive-reconstructor.name = Přídavný přestavbovač
|
block.additive-reconstructor.name = Přídavný přestavbovač
|
||||||
block.multiplicative-reconstructor.name = Násobný přestavbovač
|
block.multiplicative-reconstructor.name = Násobný přestavbovač
|
||||||
block.exponential-reconstructor.name = Exponenciální přestavbovač
|
block.exponential-reconstructor.name = Exponenciální přestavbovač
|
||||||
block.tetrative-reconstructor.name = Umocňující přestavbovač
|
block.tetrative-reconstructor.name = Mocninný přestavbovač
|
||||||
block.payload-conveyor.name = Hromadný dopravník
|
block.payload-conveyor.name = Dopravník nákladu
|
||||||
block.payload-router.name = Směřovač nákladu
|
block.payload-router.name = Směřovač nákladu
|
||||||
block.disassembler.name = Rozebírač
|
block.disassembler.name = Rozebírač
|
||||||
block.silicon-crucible.name = Křemíková nádoba
|
block.silicon-crucible.name = Tavicí tyglík pro křemík
|
||||||
block.large-overdrive-projector.name = Velký urychlující projektor
|
block.overdrive-dome.name = Velká urychlující kupole
|
||||||
|
|
||||||
|
block.switch.name = Přepínač
|
||||||
|
block.micro-processor.name = Mikroprocesor
|
||||||
|
block.logic-processor.name = Logický procesor
|
||||||
|
block.logic-display.name = Zobrazovač logiky
|
||||||
|
block.memory-cell.name = Paměťová buňka
|
||||||
|
|
||||||
team.blue.name = modrý
|
team.blue.name = modrý
|
||||||
team.crux.name = červený
|
team.crux.name = červený
|
||||||
team.sharded.name = oranžový
|
team.sharded.name = oranžový
|
||||||
@@ -1162,7 +1187,7 @@ block.force-projector.description = Vytvoří okolo sebe šestihrané silové po
|
|||||||
block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Takřka neviditelné pro nepřátele (a i v nabídce bloků :) ).
|
block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Takřka neviditelné pro nepřátele (a i v nabídce bloků :) ).
|
||||||
block.conveyor.description = Základní blok pro přepravu předmětů. Unáší předměty kupředu a automaticky plní vhodná úložiště (budovy, kontejnery, jádro), které po cestě potká. Lze jej otáčet dle potřeby.
|
block.conveyor.description = Základní blok pro přepravu předmětů. Unáší předměty kupředu a automaticky plní vhodná úložiště (budovy, kontejnery, jádro), které po cestě potká. Lze jej otáčet dle potřeby.
|
||||||
block.titanium-conveyor.description = Pokročilý blok pro přepravu předmětů. Přenáší předměty rychleji, než základní dopravník.
|
block.titanium-conveyor.description = Pokročilý blok pro přepravu předmětů. Přenáší předměty rychleji, než základní dopravník.
|
||||||
block.plastanium-conveyor.description = Přesouvá položky v dávkích.\nPřijímá položky zezadu, a vykládá je do tří směrů vepředu.
|
block.plastanium-conveyor.description = Přesouvá položky v dávkích.\nPřijímá položky zezadu, a vykládá je do tří směrů vepředu.\nPro špičkový průchod vyžaduje několik nakládacích a vykládacích míst.
|
||||||
block.junction.description = Chová se jako most pro dva křížící se pásy dopravníků. Užitečný při situaci, kdy dva rozdílné dopravníky dopravují dva rozdílné materiály přes jedno pole.
|
block.junction.description = Chová se jako most pro dva křížící se pásy dopravníků. Užitečný při situaci, kdy dva rozdílné dopravníky dopravují dva rozdílné materiály přes jedno pole.
|
||||||
block.bridge-conveyor.description = Pokročilý blok pro přepravu předmětů. Dovoluje transport předmětů až přes tři pole, a to přes jakýkoliv terén nebo budovu.
|
block.bridge-conveyor.description = Pokročilý blok pro přepravu předmětů. Dovoluje transport předmětů až přes tři pole, a to přes jakýkoliv terén nebo budovu.
|
||||||
block.phase-conveyor.description = Pokročilý blok pro přepravu předmětů. Využívá energii k teleportaci předmětů na vzdálenost několika dlaždic mezi jiným propojeným fázovým dopravníkem.
|
block.phase-conveyor.description = Pokročilý blok pro přepravu předmětů. Využívá energii k teleportaci předmětů na vzdálenost několika dlaždic mezi jiným propojeným fázovým dopravníkem.
|
||||||
@@ -1230,3 +1255,4 @@ block.spectre.description = Velká střílna s kanónem s dvěma hlavněmi. Stř
|
|||||||
block.meltdown.description = Masivní laserový kanón. Nabije se a pak pálí nepřetržitý laserový paprsek na nepřátele v okolí. Vyžaduje ke své funkci chlazení.
|
block.meltdown.description = Masivní laserový kanón. Nabije se a pak pálí nepřetržitý laserový paprsek na nepřátele v okolí. Vyžaduje ke své funkci chlazení.
|
||||||
block.repair-point.description = Nepřetržitě léčí nejbližší poškozenou jednotku v poli své působnosti.
|
block.repair-point.description = Nepřetržitě léčí nejbližší poškozenou jednotku v poli své působnosti.
|
||||||
block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted.
|
block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted.
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ mod.import = 모드 가져오기
|
|||||||
mod.import.file = 파일 가져오기
|
mod.import.file = 파일 가져오기
|
||||||
mod.import.github = Github 에서 모드 가져오기
|
mod.import.github = Github 에서 모드 가져오기
|
||||||
mod.jarwarn = [scarlet]JAR 모드는 안전하지 않습니다.[]\n신뢰할 수 있는 소스에서 얻은 모드만을 사용해야 합니다!
|
mod.jarwarn = [scarlet]JAR 모드는 안전하지 않습니다.[]\n신뢰할 수 있는 소스에서 얻은 모드만을 사용해야 합니다!
|
||||||
mod.item.remove = 이 아이템은[accent] '{0}' 모드의 일부입니다. 이를 제거하려면 해당 모드를 제거하세요.
|
mod.item.remove = 이 자원은[accent] '{0}' 모드의 일부입니다. 이를 제거하려면 해당 모드를 제거하세요.
|
||||||
mod.remove.confirm = 이 모드가 삭제될 것입니다.
|
mod.remove.confirm = 이 모드가 삭제될 것입니다.
|
||||||
mod.author = [lightgray]제작자:[] {0}
|
mod.author = [lightgray]제작자:[] {0}
|
||||||
mod.missing = 이 저장 파일에는 최근에 업데이트되었거나 더 이상 설치되지 않은 모드가 포함되어 있습니다. 저장 파일이 손상될 수 있습니다. 정말로 불러 오시겠습니까?\n[lighthray]모드들:\n{0}
|
mod.missing = 이 저장 파일에는 최근에 업데이트되었거나 더 이상 설치되지 않은 모드가 포함되어 있습니다. 저장 파일이 손상될 수 있습니다. 정말로 불러 오시겠습니까?\n[lighthray]모드들:\n{0}
|
||||||
@@ -541,7 +541,7 @@ no = 아니오
|
|||||||
info.title = 정보
|
info.title = 정보
|
||||||
error.title = [scarlet]오류가 발생했습니다.
|
error.title = [scarlet]오류가 발생했습니다.
|
||||||
error.crashtitle = 오류가 발생했습니다
|
error.crashtitle = 오류가 발생했습니다
|
||||||
unit.nobuild = [scarlet]유닛을 만들 수 없습니다
|
unit.nobuild = [scarlet]이 유닛은 건설할 수 없습니다.
|
||||||
blocks.input = 입력
|
blocks.input = 입력
|
||||||
blocks.output = 출력
|
blocks.output = 출력
|
||||||
blocks.booster = 가속
|
blocks.booster = 가속
|
||||||
@@ -554,7 +554,7 @@ blocks.damage = 공격력
|
|||||||
blocks.targetsair = 공중 공격
|
blocks.targetsair = 공중 공격
|
||||||
blocks.targetsground = 지상 공격
|
blocks.targetsground = 지상 공격
|
||||||
blocks.itemsmoved = 이동 속도
|
blocks.itemsmoved = 이동 속도
|
||||||
blocks.launchtime = 출격 사이의 시간
|
blocks.launchtime = 출격 간격
|
||||||
blocks.shootrange = 사거리
|
blocks.shootrange = 사거리
|
||||||
blocks.size = 크기
|
blocks.size = 크기
|
||||||
blocks.liquidcapacity = 액체 용량
|
blocks.liquidcapacity = 액체 용량
|
||||||
@@ -580,7 +580,7 @@ blocks.shots = 공격 속도
|
|||||||
blocks.reload = 발/초
|
blocks.reload = 발/초
|
||||||
blocks.ammo = 탄약
|
blocks.ammo = 탄약
|
||||||
|
|
||||||
bar.drilltierreq = 더 좋은 드릴이 요구됨
|
bar.drilltierreq = 더 좋은 드릴이 필요
|
||||||
bar.noresources = 자원 부족
|
bar.noresources = 자원 부족
|
||||||
bar.corereq = 코어 기지 필요
|
bar.corereq = 코어 기지 필요
|
||||||
bar.drillspeed = 드릴 속도: {0}/s
|
bar.drillspeed = 드릴 속도: {0}/s
|
||||||
@@ -593,7 +593,7 @@ bar.poweroutput = 전력 출력: {0}
|
|||||||
bar.items = 자원량: {0}
|
bar.items = 자원량: {0}
|
||||||
bar.capacity = 용량: {0}
|
bar.capacity = 용량: {0}
|
||||||
bar.unitcap = {0} {1}/{2}
|
bar.unitcap = {0} {1}/{2}
|
||||||
bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled]
|
bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[장비를 정지합니다]
|
||||||
bar.liquid = 액체
|
bar.liquid = 액체
|
||||||
bar.heat = 발열
|
bar.heat = 발열
|
||||||
bar.power = 전력
|
bar.power = 전력
|
||||||
@@ -607,7 +607,7 @@ bullet.incendiary = [stat]방화
|
|||||||
bullet.homing = [stat]유도
|
bullet.homing = [stat]유도
|
||||||
bullet.shock = [stat]전격
|
bullet.shock = [stat]전격
|
||||||
bullet.frag = [stat]파편
|
bullet.frag = [stat]파편
|
||||||
bullet.knockback = [stat]{0}[lightgray] 밀어내기
|
bullet.knockback = [stat]{0}[lightgray] 밀침
|
||||||
bullet.freezing = [stat]빙결
|
bullet.freezing = [stat]빙결
|
||||||
bullet.tarred = [stat]타르
|
bullet.tarred = [stat]타르
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x 탄약 배수
|
bullet.multiplier = [stat]{0}[lightgray]x 탄약 배수
|
||||||
@@ -630,10 +630,10 @@ unit.millions = 백만
|
|||||||
category.general = 일반
|
category.general = 일반
|
||||||
category.power = 전력
|
category.power = 전력
|
||||||
category.liquids = 액체
|
category.liquids = 액체
|
||||||
category.items = 아이템
|
category.items = 자원
|
||||||
category.crafting = 입력/출력
|
category.crafting = 입력/출력
|
||||||
category.shooting = 사격
|
category.shooting = 사격
|
||||||
category.optional = 보조 아이템
|
category.optional = 보조 자원
|
||||||
setting.landscape.name = 가로화면 잠금
|
setting.landscape.name = 가로화면 잠금
|
||||||
setting.shadows.name = 그림자
|
setting.shadows.name = 그림자
|
||||||
setting.blockreplace.name = 자동 블록 제안
|
setting.blockreplace.name = 자동 블록 제안
|
||||||
@@ -679,7 +679,7 @@ setting.blockselectkeys.name = 블록 선택 키 표시
|
|||||||
setting.vsync.name = 수직 동기화
|
setting.vsync.name = 수직 동기화
|
||||||
setting.pixelate.name = 픽셀화
|
setting.pixelate.name = 픽셀화
|
||||||
setting.minimap.name = 미니맵 표시
|
setting.minimap.name = 미니맵 표시
|
||||||
setting.coreitems.name = 코어에 있는 아이템 표시
|
setting.coreitems.name = 코어에 있는 자원 표시
|
||||||
setting.position.name = 플레이어 위치 표시
|
setting.position.name = 플레이어 위치 표시
|
||||||
setting.musicvol.name = 음악 크기
|
setting.musicvol.name = 음악 크기
|
||||||
setting.atmosphere.name = 행성 배경화면 표시
|
setting.atmosphere.name = 행성 배경화면 표시
|
||||||
@@ -699,7 +699,7 @@ public.confirm = 게임을 모두에게 공개하시겠습니까?\n[accent]모
|
|||||||
public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
|
public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
|
||||||
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
|
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
|
||||||
uiscale.cancel = 취소 후 나가기
|
uiscale.cancel = 취소 후 나가기
|
||||||
setting.bloom.name = 블룸
|
setting.bloom.name = 화려한 효과
|
||||||
keybind.title = 조작키 설정
|
keybind.title = 조작키 설정
|
||||||
keybinds.mobile = [scarlet]대부분의 키 맵핑은 모바일에서 작동하지 않습니다. 기본 이동만 지원됩니다.
|
keybinds.mobile = [scarlet]대부분의 키 맵핑은 모바일에서 작동하지 않습니다. 기본 이동만 지원됩니다.
|
||||||
category.general.name = 일반
|
category.general.name = 일반
|
||||||
@@ -803,10 +803,10 @@ rules.title.unit = 유닛
|
|||||||
rules.title.experimental = 실험적인 기능
|
rules.title.experimental = 실험적인 기능
|
||||||
rules.title.environment = 환경
|
rules.title.environment = 환경
|
||||||
rules.lighting = 조명
|
rules.lighting = 조명
|
||||||
rules.ambientlight = 주변 조명
|
rules.ambientlight = 자연 조명
|
||||||
rules.solarpowermultiplier = 태양광 발전 배수
|
rules.solarpowermultiplier = 태양광 발전 배수
|
||||||
|
|
||||||
content.item.name = 아이템
|
content.item.name = 자원
|
||||||
content.liquid.name = 액체
|
content.liquid.name = 액체
|
||||||
content.unit.name = 유닛
|
content.unit.name = 유닛
|
||||||
content.block.name = 블록
|
content.block.name = 블록
|
||||||
@@ -820,58 +820,59 @@ item.silicon.name = 실리콘
|
|||||||
item.plastanium.name = 플라스터늄
|
item.plastanium.name = 플라스터늄
|
||||||
item.phase-fabric.name = 메타
|
item.phase-fabric.name = 메타
|
||||||
item.surge-alloy.name = 설금
|
item.surge-alloy.name = 설금
|
||||||
item.spore-pod.name = 포자 포드
|
item.spore-pod.name = 포자 버섯
|
||||||
item.sand.name = 모래
|
item.sand.name = 모래
|
||||||
item.blast-compound.name = 화합물
|
item.blast-compound.name = 폭발물
|
||||||
item.pyratite.name = 파이라타이트
|
item.pyratite.name = 파이라타이트
|
||||||
item.metaglass.name = 금속유리
|
item.metaglass.name = 강화 유리
|
||||||
item.scrap.name = 고철
|
item.scrap.name = 고철
|
||||||
liquid.water.name = 물
|
liquid.water.name = 물
|
||||||
liquid.slag.name = 광재
|
liquid.slag.name = 광재
|
||||||
liquid.oil.name = 기름
|
liquid.oil.name = 기름
|
||||||
liquid.cryofluid.name = 냉각
|
liquid.cryofluid.name = 냉각수
|
||||||
item.explosiveness = [lightgray]폭발성: {0}
|
item.explosiveness = [lightgray]폭발성: {0}
|
||||||
item.flammability = [lightgray]인화성: {0}
|
item.flammability = [lightgray]인화성: {0}
|
||||||
item.radioactivity = [lightgray]방사능: {0}
|
item.radioactivity = [lightgray]방사능: {0}
|
||||||
unit.health = [lightgray]체력: {0}
|
unit.health = [lightgray]체력: {0}
|
||||||
unit.speed = [lightgray]속도: {0}
|
unit.speed = [lightgray]속도: {0}
|
||||||
unit.weapon = [lightgray]무기: {0}
|
unit.weapon = [lightgray]무기: {0}
|
||||||
unit.itemcapacity = [lightgray]아이템 수용량: {0}
|
unit.itemcapacity = [lightgray]자원 수용량: {0}
|
||||||
unit.minespeed = [lightgray]채광 속도: {0}%
|
unit.minespeed = [lightgray]채광 속도: {0}%
|
||||||
unit.minepower = [lightgray]채광 레벨: {0}
|
unit.minepower = [lightgray]채광 레벨: {0}
|
||||||
unit.ability = [lightgray]능력: {0}
|
unit.ability = [lightgray]능력: {0}
|
||||||
unit.buildspeed = [lightgray]건설 속도: {0}%
|
unit.buildspeed = [lightgray]건설 속도: {0}%
|
||||||
|
|
||||||
liquid.heatcapacity = [lightgray]발열 용량: {0}
|
liquid.heatcapacity = [lightgray]비열: {0}
|
||||||
liquid.viscosity = [lightgray]점도: {0}
|
liquid.viscosity = [lightgray]점도: {0}
|
||||||
liquid.temperature = [lightgray]온도: {0}
|
liquid.temperature = [lightgray]온도: {0}
|
||||||
|
|
||||||
unit.dagger.name = Dagger
|
unit.dagger.name = 대거
|
||||||
unit.mace.name = Mace
|
unit.mace.name = 메이스
|
||||||
unit.fortress.name = Fortress
|
unit.fortress.name = 포트리스
|
||||||
unit.nova.name = Nova
|
unit.nova.name = 노바
|
||||||
unit.pulsar.name = Pulsar
|
unit.pulsar.name = 펄서
|
||||||
unit.quasar.name = Quasar
|
unit.quasar.name = 퀘이사
|
||||||
unit.crawler.name = Crawler
|
unit.crawler.name = 크롤러
|
||||||
unit.atrax.name = Atrax
|
unit.atrax.name = 아트락스
|
||||||
unit.spiroct.name = Spiroct
|
unit.spiroct.name = 스피록트
|
||||||
unit.arkyid.name = Arkyid
|
unit.arkyid.name = 아키드
|
||||||
unit.flare.name = Flare
|
unit.toxipod.name = 독소포드
|
||||||
unit.horizon.name = Horizon
|
unit.flare.name = 플레어
|
||||||
unit.zenith.name = Zenith
|
unit.horizon.name = 호라이즌
|
||||||
unit.antumbra.name = Antumbra
|
unit.zenith.name = 제니스
|
||||||
unit.eclipse.name = Eclipse
|
unit.antumbra.name = 안텀브라
|
||||||
unit.mono.name = Mono
|
unit.eclipse.name = 이클립스
|
||||||
unit.poly.name = Poly
|
unit.mono.name = 모노
|
||||||
unit.mega.name = Mega
|
unit.poly.name = 폴리
|
||||||
unit.risso.name = Risso
|
unit.mega.name = 메가
|
||||||
unit.minke.name = Minke
|
unit.risso.name = 리소
|
||||||
unit.bryde.name = Bryde
|
unit.minke.name = 민케
|
||||||
unit.alpha.name = Alpha
|
unit.bryde.name = 브리드
|
||||||
unit.beta.name = Beta
|
unit.alpha.name = 알파
|
||||||
unit.gamma.name = Gamma
|
unit.beta.name = 베타
|
||||||
|
unit.gamma.name = 감마
|
||||||
|
|
||||||
block.parallax.name = Parallax
|
block.parallax.name = 시차
|
||||||
block.cliff.name = 낭떠러지
|
block.cliff.name = 낭떠러지
|
||||||
block.sand-boulder.name = 사암
|
block.sand-boulder.name = 사암
|
||||||
block.grass.name = 잔디
|
block.grass.name = 잔디
|
||||||
@@ -956,7 +957,7 @@ block.phase-wall-large.name = 대형 메타 벽
|
|||||||
block.thorium-wall.name = 토륨 벽
|
block.thorium-wall.name = 토륨 벽
|
||||||
block.thorium-wall-large.name = 대형 토륨 벽
|
block.thorium-wall-large.name = 대형 토륨 벽
|
||||||
block.door.name = 문
|
block.door.name = 문
|
||||||
block.door-large.name = 대형문
|
block.door-large.name = 대형 문
|
||||||
block.duo.name = 듀오
|
block.duo.name = 듀오
|
||||||
block.scorch.name = 스코치
|
block.scorch.name = 스코치
|
||||||
block.scatter.name = 스캐터
|
block.scatter.name = 스캐터
|
||||||
@@ -966,7 +967,7 @@ block.conveyor.name = 컨베이어
|
|||||||
block.titanium-conveyor.name = 티타늄 컨베이어
|
block.titanium-conveyor.name = 티타늄 컨베이어
|
||||||
block.plastanium-conveyor.name = 플라스터늄 컨베이어
|
block.plastanium-conveyor.name = 플라스터늄 컨베이어
|
||||||
block.armored-conveyor.name = 장갑 컨베이어
|
block.armored-conveyor.name = 장갑 컨베이어
|
||||||
block.armored-conveyor.description = 티타늄 컨베이어와 같은 속도로 아이템을 운송하지만, 더 높은 방어력을 가지고 있습니다. 다른 컨베이어 벨트 이외 측면에서는 아이템을 받을 수 없습니다.
|
block.armored-conveyor.description = 티타늄 컨베이어와 같은 속도로 자원을 운송하지만, 더 높은 방어력을 가지고 있습니다. 다른 컨베이어 벨트 이외 측면에서는 자원을 받을 수 없습니다.
|
||||||
block.junction.name = 교차기
|
block.junction.name = 교차기
|
||||||
block.router.name = 분배기
|
block.router.name = 분배기
|
||||||
block.distributor.name = 대형 분배기
|
block.distributor.name = 대형 분배기
|
||||||
@@ -975,12 +976,12 @@ block.inverted-sorter.name = 반전 필터
|
|||||||
block.message.name = 메모 블록
|
block.message.name = 메모 블록
|
||||||
block.illuminator.name = 조명
|
block.illuminator.name = 조명
|
||||||
block.illuminator.description = 작고, 간단하고, 설정 가능한 광원입니다. 작동하려면 전력이 필요합니다.
|
block.illuminator.description = 작고, 간단하고, 설정 가능한 광원입니다. 작동하려면 전력이 필요합니다.
|
||||||
block.overflow-gate.name = 오버플로 게이트
|
block.overflow-gate.name = 포화 필터
|
||||||
block.underflow-gate.name = 언더플로 게이트
|
block.underflow-gate.name = 불포화 필터
|
||||||
block.silicon-smelter.name = 실리콘 제련소
|
block.silicon-smelter.name = 실리콘 제련소
|
||||||
block.phase-weaver.name = 메타 합성기
|
block.phase-weaver.name = 메타 합성기
|
||||||
block.pulverizer.name = 분쇄기
|
block.pulverizer.name = 분쇄기
|
||||||
block.cryofluidmixer.name = 냉각 유체 제조기
|
block.cryofluidmixer.name = 냉각수 제조기
|
||||||
block.melter.name = 융해기
|
block.melter.name = 융해기
|
||||||
block.incinerator.name = 소각로
|
block.incinerator.name = 소각로
|
||||||
block.spore-press.name = 포자 압축기
|
block.spore-press.name = 포자 압축기
|
||||||
@@ -995,12 +996,12 @@ block.battery-large.name = 대형 배터리
|
|||||||
block.combustion-generator.name = 연소 발전기
|
block.combustion-generator.name = 연소 발전기
|
||||||
block.steam-generator.name = 증기 발전기
|
block.steam-generator.name = 증기 발전기
|
||||||
block.differential-generator.name = 차동 발잔기
|
block.differential-generator.name = 차동 발잔기
|
||||||
block.impact-reactor.name = 임팩트 원자로
|
block.impact-reactor.name = 핵융합 원자로
|
||||||
block.mechanical-drill.name = 기계식 드릴
|
block.mechanical-drill.name = 기계식 드릴
|
||||||
block.pneumatic-drill.name = 공압 드릴
|
block.pneumatic-drill.name = 공압 드릴
|
||||||
block.laser-drill.name = 레이저 드릴
|
block.laser-drill.name = 레이저 드릴
|
||||||
block.water-extractor.name = 물 추출기
|
block.water-extractor.name = 물 추출기
|
||||||
block.cultivator.name = 제초기
|
block.cultivator.name = 온실
|
||||||
block.conduit.name = 파이프
|
block.conduit.name = 파이프
|
||||||
block.mechanical-pump.name = 기계식 펌프
|
block.mechanical-pump.name = 기계식 펌프
|
||||||
block.item-source.name = 자원 공급기
|
block.item-source.name = 자원 공급기
|
||||||
@@ -1018,7 +1019,7 @@ block.ripple.name = 립플
|
|||||||
block.phase-conveyor.name = 메타 컨베이어
|
block.phase-conveyor.name = 메타 컨베이어
|
||||||
block.bridge-conveyor.name = 다리 컨베이어
|
block.bridge-conveyor.name = 다리 컨베이어
|
||||||
block.plastanium-compressor.name = 플라스터늄 압축기
|
block.plastanium-compressor.name = 플라스터늄 압축기
|
||||||
block.pyratite-mixer.name = 라타이트 혼합기
|
block.pyratite-mixer.name = 파이라타이트 혼합기
|
||||||
block.blast-mixer.name = 화합물 혼합기
|
block.blast-mixer.name = 화합물 혼합기
|
||||||
block.solar-panel.name = 태양 전지판
|
block.solar-panel.name = 태양 전지판
|
||||||
block.solar-panel-large.name = 대형 태양 전지판
|
block.solar-panel-large.name = 대형 태양 전지판
|
||||||
@@ -1039,7 +1040,7 @@ block.thermal-pump.name = 화력 펌프
|
|||||||
block.thermal-generator.name = 화력 생성기
|
block.thermal-generator.name = 화력 생성기
|
||||||
block.alloy-smelter.name = 설금 제련소
|
block.alloy-smelter.name = 설금 제련소
|
||||||
block.mender.name = 멘더
|
block.mender.name = 멘더
|
||||||
block.mend-projector.name = 대형 수리 프로젝터
|
block.mend-projector.name = 수리 프로젝터
|
||||||
block.surge-wall.name = 설금 벽
|
block.surge-wall.name = 설금 벽
|
||||||
block.surge-wall-large.name = 큰 설금 벽
|
block.surge-wall-large.name = 큰 설금 벽
|
||||||
block.cyclone.name = 사이클론
|
block.cyclone.name = 사이클론
|
||||||
@@ -1057,7 +1058,7 @@ block.launch-pad-large.name = 대형 출격 패드
|
|||||||
block.segment.name = 세그먼트
|
block.segment.name = 세그먼트
|
||||||
block.ground-factory.name = 지상 공장
|
block.ground-factory.name = 지상 공장
|
||||||
block.air-factory.name = 항공 공장
|
block.air-factory.name = 항공 공장
|
||||||
block.naval-factory.name = 해군 공장
|
block.naval-factory.name = 해양 공장
|
||||||
block.additive-reconstructor.name = 첨가물 재구성기
|
block.additive-reconstructor.name = 첨가물 재구성기
|
||||||
block.multiplicative-reconstructor.name = 다중 재구성기
|
block.multiplicative-reconstructor.name = 다중 재구성기
|
||||||
block.exponential-reconstructor.name = 지수 재구성기
|
block.exponential-reconstructor.name = 지수 재구성기
|
||||||
@@ -1081,18 +1082,18 @@ tutorial.intro.mobile = [scarlet]Mindustry 튜토리얼[]을 시작하겠습니
|
|||||||
tutorial.drill = 수동으로 채광하는 것은 효율이 낮습니다.\n[accent]드릴[]은 자동으로 드릴 바로 아래에 있는 광물들을 채광합니다.\n드릴 카테고리의 기계식 드릴을 선택하여 구리 광맥위에 설치하세요.\n마우스 오른쪽 버튼으로 취소가 가능합니다.
|
tutorial.drill = 수동으로 채광하는 것은 효율이 낮습니다.\n[accent]드릴[]은 자동으로 드릴 바로 아래에 있는 광물들을 채광합니다.\n드릴 카테고리의 기계식 드릴을 선택하여 구리 광맥위에 설치하세요.\n마우스 오른쪽 버튼으로 취소가 가능합니다.
|
||||||
tutorial.drill.mobile = 수동으로 채광하는 것은 효율이 낮습니다.\n[accent]드릴[]은 자동으로 드릴 밑에 있는 광물들을 채광합니다.\n드릴 카테고리의 기계식 드릴을 선택하여 구리 광맥위에 설치하세요.\n취소 버튼을 눌러 건축하기 전의 설계를 취소할 수 있습니다.
|
tutorial.drill.mobile = 수동으로 채광하는 것은 효율이 낮습니다.\n[accent]드릴[]은 자동으로 드릴 밑에 있는 광물들을 채광합니다.\n드릴 카테고리의 기계식 드릴을 선택하여 구리 광맥위에 설치하세요.\n취소 버튼을 눌러 건축하기 전의 설계를 취소할 수 있습니다.
|
||||||
tutorial.blockinfo = 각 블록마다 다른 특성을 가지고 있으며, 각 드릴은 특정 광석만 채굴할 수 있습니다.\n블록의 정보와 특성을 확인하려면, [accent]건설 메뉴에서 "?" 버튼을 선택하세요.[]\n\n[accent]지금 기계식 드릴의 정보를 보세요.
|
tutorial.blockinfo = 각 블록마다 다른 특성을 가지고 있으며, 각 드릴은 특정 광석만 채굴할 수 있습니다.\n블록의 정보와 특성을 확인하려면, [accent]건설 메뉴에서 "?" 버튼을 선택하세요.[]\n\n[accent]지금 기계식 드릴의 정보를 보세요.
|
||||||
tutorial.conveyor = [accent]컨베이어[]는 아이템을 코어로 운반하는데 사용됩니다.\n드릴에서 코어까지 컨베이어 경로를 만드세요.\n[accent]마우스를 길게 눌러 경로에 놓습니다.\n대각선으로 배치할 경로를 선택하는 동안 [accent]CTRL[] 키를 누른 상태로 유지하세요.\n스크롤 휠을 사용하여 블록을 배치하기 전에 블록을 회전시킬 수 있습니다.\n[accent]선 도구를 사용하여 컨베이어 2개를 놓은 다음, 아이템을 코어로 넣으세요.
|
tutorial.conveyor = [accent]컨베이어[]는 자원을 코어로 운반하는데 사용됩니다.\n드릴에서 코어까지 컨베이어 경로를 만드세요.\n[accent]마우스를 길게 눌러 경로에 놓습니다.\n대각선으로 배치할 경로를 선택하는 동안 [accent]CTRL[] 키를 누른 상태로 유지하세요.\n스크롤 휠을 사용하여 블록을 배치하기 전에 블록을 회전시킬 수 있습니다.\n[accent]선 도구를 사용하여 컨베이어 2개를 놓은 다음, 자원을 코어로 넣으세요.
|
||||||
tutorial.conveyor.mobile = [accent]컨베이어[]는 아이템을 코어로 운반하는데 사용됩니다.\n드릴에서 코어까지 컨베이어 경로를 만드세요.\n[accent]몇 초 동안 손가락을 누른 상태에서 드래그 하여 경로를 그립니다.\n\n[accent]선 도구로 컨베이어 2개를 놓은 다음 아이템을 코어에 넣으세요.
|
tutorial.conveyor.mobile = [accent]컨베이어[]는 자원을 코어로 운반하는데 사용됩니다.\n드릴에서 코어까지 컨베이어 경로를 만드세요.\n[accent]몇 초 동안 손가락을 누른 상태에서 드래그 하여 경로를 그립니다.\n\n[accent]선 도구로 컨베이어 2개를 놓은 다음 자원을 코어에 넣으세요.
|
||||||
tutorial.turret = 아이템이 코어에 들어간 후에는 건물을 건설하는데 사용할 수 있습니다.\n모든 아이템이 건물에 사용될 수 있는 것은 아닙니다.\n건물에 사용되지 않는 아이템(예: [accent]석탄[] 또는 [accent]광재[])은 코어에 넣을 수 없습니다.\n[lightgray]적[]을 격추하기 위해 방어 건물을 세워야 합니다.\n기지 근처에 [accent]듀오 포탑[]을 건설하세요.
|
tutorial.turret = 자원이 코어에 들어간 후에는 건물을 건설하는데 사용할 수 있습니다.\n모든 자원이 건물에 사용될 수 있는 것은 아닙니다.\n건물에 사용되지 않는 자원(예: [accent]석탄[] 또는 [accent]광재[])은 코어에 넣을 수 없습니다.\n[lightgray]적[]을 격추하기 위해 방어 건물을 세워야 합니다.\n기지 근처에 [accent]듀오 포탑[]을 건설하세요.
|
||||||
tutorial.drillturret = 듀오 포탑은 사격하는데 [accent]구리 탄약[]이 필요합니다.\n포탑 근처에 드릴을 설치하세요.\n구리를 공급하기 위해 컨베이어를 포탑으로 가도록 건설하세요.\n\n[accnet]탄약 운반: 0/1
|
tutorial.drillturret = 듀오 포탑은 사격하는데 [accent]구리 탄약[]이 필요합니다.\n포탑 근처에 드릴을 설치하세요.\n구리를 공급하기 위해 컨베이어를 포탑으로 가도록 건설하세요.\n\n[accnet]탄약 운반: 0/1
|
||||||
tutorial.pause = 전투 중에는 게임을 [accent]일시정지[] 할 수 있습니다.\n일시정지 되는 동안 건설을 대기시킬 수 있습니다.\n\n[accent]일시정지하려면 스페이스 키를 누르세요.
|
tutorial.pause = 전투 중에는 게임을 [accent]일시정지[] 할 수 있습니다.\n일시정지 되는 동안 건설을 대기시킬 수 있습니다.\n\n[accent]일시정지하려면 스페이스 키를 누르세요.
|
||||||
tutorial.pause.mobile = 싱글 플레이에서는 게임을 [accent]일시정지[]할 수 있습니다.\n일시정지하면 교전과 더불어 건설까지 일시정지됩니다.\n\n[accent]일시정지하려면 왼쪽 상단에 있는 이 버튼을 누르세요.
|
tutorial.pause.mobile = 싱글 플레이에서는 게임을 [accent]일시정지[]할 수 있습니다.\n일시정지하면 교전과 더불어 건설까지 일시정지됩니다.\n\n[accent]일시정지하려면 왼쪽 상단에 있는 이 버튼을 누르세요.
|
||||||
tutorial.unpause = 이제 스페이스를 누르면 일시정지가 해제됩니다.
|
tutorial.unpause = 이제 스페이스를 누르면 일시정지가 해제됩니다.
|
||||||
tutorial.unpause.mobile = 이제 다시 누르면 일시정지가 해제됩니다.
|
tutorial.unpause.mobile = 이제 다시 누르면 일시정지가 해제됩니다.
|
||||||
tutorial.breaking = 블록은 종종 파괴 되어야 합니다.\n선택한 모든 블록을 파괴하려면 [accent]마우스 오른쪽 클릭을 길게 누르세요[].\n\n[accent]영역 선택을 사용하여 코어 왼쪽의 모든 조각벽을 파괴하세요.
|
tutorial.breaking = 블록은 종종 파괴 되어야 합니다.\n선택한 모든 블록을 파괴하려면 [accent]마우스 오른쪽 클릭을 길게 누르세요[].\n\n[accent]영역 선택을 사용하여 코어 왼쪽의 모든 조각벽을 파괴하세요.
|
||||||
tutorial.breaking.mobile = 블록은 종종 파괴 되어야 합니다.\n[accent]삭제 모드[]를 선택한 다음 블록을 탭 하여 파괴할 수 있습니다.\n[accnet]몇 초 동안 손가락을 누르고 원하는 방향으로 드래그[]하여 범위 안에있는 블럭을 파괴하세요.\n그리고 체크 표시 버튼을 눌러 삭제 작업을 할 수 있습니다.\n[accent]영역 선택을 사용하여 코어 왼쪽의 모든 조각 벽을 파괴하세요.
|
tutorial.breaking.mobile = 블록은 종종 파괴 되어야 합니다.\n[accent]삭제 모드[]를 선택한 다음 블록을 탭 하여 파괴할 수 있습니다.\n[accnet]몇 초 동안 손가락을 누르고 원하는 방향으로 드래그[]하여 범위 안에있는 블록을 파괴하세요.\n그리고 체크 표시 버튼을 눌러 삭제 작업을 할 수 있습니다.\n[accent]영역 선택을 사용하여 코어 왼쪽의 모든 조각 벽을 파괴하세요.
|
||||||
tutorial.withdraw = 경우에 따라 블록에서 아이템을 직접 가져와야 합니다.\n이 작업을 하려면 [accent]아이템이 있는 블록[]을 탭한 다음, 인벤토리에서 [accent]아이템[]을 탭하세요.\n[accent]누른 상태를 유지[]하면 여러개를 꺼낼 수 있습니다.\n\n[accent]코어에서 구리를 빼내세요.
|
tutorial.withdraw = 경우에 따라 블록에서 자원을 직접 가져와야 합니다.\n이 작업을 하려면 [accent]자원이 있는 블록[]을 탭한 다음, 인벤토리에서 [accent]자원[]을 탭하세요.\n[accent]누른 상태를 유지[]하면 여러개를 꺼낼 수 있습니다.\n\n[accent]코어에서 구리를 빼내세요.
|
||||||
tutorial.deposit = 기체에서 목적지 블록으로 드래그하여 아이템을 블록에 넣으세요.\n\n[accent]구리를 다시 코어에 넣으세요[].
|
tutorial.deposit = 기체에서 목적지 블록으로 드래그하여 자원을 블록에 넣으세요.\n\n[accent]구리를 다시 코어에 넣으세요[].
|
||||||
tutorial.waves = [lightgray]적[]이 다가옵니다.\n2 웨이브로부터 코어를 방어하세요. [accent]클릭[]하여 사격할 수 있습니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요.
|
tutorial.waves = [lightgray]적[]이 다가옵니다.\n2 웨이브로부터 코어를 방어하세요. [accent]클릭[]하여 사격할 수 있습니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요.
|
||||||
tutorial.waves.mobile = [lightgray]적[]이 다가옵니다.\n2 웨이브로부터 코어를 방어하세요. 당신의 기체는 자동으로 적을 향해 사격합니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요.
|
tutorial.waves.mobile = [lightgray]적[]이 다가옵니다.\n2 웨이브로부터 코어를 방어하세요. 당신의 기체는 자동으로 적을 향해 사격합니다.\n더 많은 포탑과 드릴을 건설하고 구리를 더 모으세요.
|
||||||
tutorial.launch = 특정 웨이브에 도달하면 [accent]코어로 출격[] 을 할 수 있습니다.\n\n이렇게 얻은 자원을 사용하여 새로운 기술을 연구 할 수 있습니다.\n\n[accent]출격 버튼을 누르세요.
|
tutorial.launch = 특정 웨이브에 도달하면 [accent]코어로 출격[] 을 할 수 있습니다.\n\n이렇게 얻은 자원을 사용하여 새로운 기술을 연구 할 수 있습니다.\n\n[accent]출격 버튼을 누르세요.
|
||||||
@@ -1110,15 +1111,15 @@ item.silicon.description = 매우 유용한 반도체. 복잡한 전자 장치
|
|||||||
item.plastanium.description = 고급 기체 및 파편화 탄약에 사용되는 가볍고 연성이 있는 재료입니다.
|
item.plastanium.description = 고급 기체 및 파편화 탄약에 사용되는 가볍고 연성이 있는 재료입니다.
|
||||||
item.phase-fabric.description = 최첨단 전자 제품과 자기수리 기술에 사용되는 거의 무중력에 가까운 물질입니다.
|
item.phase-fabric.description = 최첨단 전자 제품과 자기수리 기술에 사용되는 거의 무중력에 가까운 물질입니다.
|
||||||
item.surge-alloy.description = 독특한 전기적 특성을 가진 고급 합금.
|
item.surge-alloy.description = 독특한 전기적 특성을 가진 고급 합금.
|
||||||
item.spore-pod.description = 산업 목적을 위해 대기 농도에서 합성된 합성 포자 포드. 석유, 폭발물 및 연료로 전환하는 데 사용됩니다.
|
item.spore-pod.description = 산업 목적을 위해 대기 농도에서 합성된 포자 버섯. 석유, 폭발물 및 연료로 전환하는 데 사용됩니다.
|
||||||
item.blast-compound.description = 폭탄과 폭발물에 사용되는 불안정한 화합물. 포자 포드 및 기타 휘발성 물질로 합성할 수 있습니다. 연료로 사용하지 않는 것이 좋습니다.
|
item.blast-compound.description = 폭탄과 폭발물에 사용되는 불안정한 화합물. 포자 버섯 및 기타 휘발성 물질로 합성할 수 있습니다. 연료로 사용하지 않는 것이 좋습니다.
|
||||||
item.pyratite.description = 소이 무기에서 사용되는 매우 높은 가연성 물질.
|
item.pyratite.description = 소이 무기에서 사용되는 매우 높은 가연성 물질.
|
||||||
liquid.water.description = 가장 유용한 액체. 냉각기 및 폐기물 처리에 일반적으로 사용됩니다.
|
liquid.water.description = 가장 유용한 액체. 냉각기 및 폐기물 처리에 일반적으로 사용됩니다.
|
||||||
liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아있습니다. 분리기를 이용해 다른 광물들로 분리하거나 탄약으로 사용해 적 부대를 향해 살포할 수 있습니다.
|
liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아있습니다. 분리기를 이용해 다른 광물들로 분리하거나 탄약으로 사용해 적 부대를 향해 살포할 수 있습니다.
|
||||||
liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다.
|
liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다.
|
||||||
liquid.cryofluid.description = 물과 티타늄으로 만든 비 부식성 액체. 열 용량이 매우 높으며 냉각수로 광범위하게 사용됩니다.
|
liquid.cryofluid.description = 물과 티타늄으로 만든 비 부식성 액체. 열 용량이 매우 높으며 냉각수로 광범위하게 사용됩니다.
|
||||||
|
|
||||||
block.message.description = 메세지를 남깁니다. 같은 팀 간의 소통에 사용됩니다.
|
block.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 = 순수한 석탄과 모래로 실리콘을 생산합니다.
|
||||||
@@ -1131,14 +1132,14 @@ block.blast-mixer.description = 포자 클러스터를 파이라타이트와 분
|
|||||||
block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 파이라타이트로 만듭니다.
|
block.pyratite-mixer.description = 석탄, 납, 모래를 가연성이 높은 파이라타이트로 만듭니다.
|
||||||
block.melter.description = 웨이브 포탑에서 추가 처리 또는 사용을 위해 고철을 광재로 녹입니다.
|
block.melter.description = 웨이브 포탑에서 추가 처리 또는 사용을 위해 고철을 광재로 녹입니다.
|
||||||
block.separator.description = 광재를 미네랄 성분으로 분리합니다. 그리고 냉각된 결과를 출력합니다.
|
block.separator.description = 광재를 미네랄 성분으로 분리합니다. 그리고 냉각된 결과를 출력합니다.
|
||||||
block.spore-press.description = 포자 포드를 극압으로 압축하여 기름을 합성합니다.
|
block.spore-press.description = 포자 버섯을 극압으로 압축하여 기름을 합성합니다.
|
||||||
block.pulverizer.description = 고철을 뭉개서 고운 모래로 만듭니다.
|
block.pulverizer.description = 고철을 뭉개서 고운 모래로 만듭니다.
|
||||||
block.coal-centrifuge.description = 기름에서 석탄 덩어리를 추출합니다.
|
block.coal-centrifuge.description = 기름에서 석탄 덩어리를 추출합니다.
|
||||||
block.incinerator.description = 넘치는 아이템이나 액체를 증발시킵니다.
|
block.incinerator.description = 넘치는 자원이나 액체를 증발시킵니다.
|
||||||
block.power-void.description = 입력된 모든 전력을 무효화합니다. 샌드박스 전용.
|
block.power-void.description = 입력된 모든 전력을 무효화합니다. 샌드박스 전용.
|
||||||
block.power-source.description = 무한한 전력을 공급해주는 블록입니다. 샌드박스 전용.
|
block.power-source.description = 무한한 전력을 공급해주는 블록입니다. 샌드박스 전용.
|
||||||
block.item-source.description = 아이템을 무한대로 출력합니다. 샌드박스 전용.
|
block.item-source.description = 자원을 무한대로 출력합니다. 샌드박스 전용.
|
||||||
block.item-void.description = 모든 아이템을 파괴합니다. 샌드박스 전용.
|
block.item-void.description = 모든 자원을 파괴합니다. 샌드박스 전용.
|
||||||
block.liquid-source.description = 액체를 무한히 출력합니다. 샌드박스 전용.
|
block.liquid-source.description = 액체를 무한히 출력합니다. 샌드박스 전용.
|
||||||
block.liquid-void.description = 액체를 제거합니다. 샌드박스 전용.
|
block.liquid-void.description = 액체를 제거합니다. 샌드박스 전용.
|
||||||
block.copper-wall.description = 저렴한 수비 블록.\n처음 몇 웨이브에서 코어와 포탑을 보호하는데 유용합니다.
|
block.copper-wall.description = 저렴한 수비 블록.\n처음 몇 웨이브에서 코어와 포탑을 보호하는데 유용합니다.
|
||||||
@@ -1162,17 +1163,17 @@ block.force-projector.description = 건물과 내부의 유닛을 공격으로
|
|||||||
block.shock-mine.description = 지뢰를 밟고 있는 적에게 피해를 입힙니다. 적에게는 거의 보이지 않습니다.
|
block.shock-mine.description = 지뢰를 밟고 있는 적에게 피해를 입힙니다. 적에게는 거의 보이지 않습니다.
|
||||||
block.conveyor.description = 기본 자원 수송 레일. 자원을 배치된 방향을 따라 이동시켜 자동으로 건물에 넣어줍니다. 회전식.
|
block.conveyor.description = 기본 자원 수송 레일. 자원을 배치된 방향을 따라 이동시켜 자동으로 건물에 넣어줍니다. 회전식.
|
||||||
block.titanium-conveyor.description = 고급 자원 수송 레일. 기본 컨베이어보다 자원을 더 빨리 이동시킵니다.
|
block.titanium-conveyor.description = 고급 자원 수송 레일. 기본 컨베이어보다 자원을 더 빨리 이동시킵니다.
|
||||||
block.plastanium-conveyor.description = 아이템을 일괄적으로 운송시킵니다. 컨베이에 뒤에서 아이템을 받고 앞쪽에 세 방향으로 내보냅니다.
|
block.plastanium-conveyor.description = 자원을 일괄적으로 운송시킵니다. 컨베이에 뒤에서 자원을 받고 앞쪽에 세 방향으로 내보냅니다.
|
||||||
block.junction.description = 2개의 컨베이어 벨트를 교차시키는 다리 역할을 합니다. 서로 다른 재료를 다른 장소로 운반하는 두 개의 다른 컨베이어의 상황에서 유용합니다.
|
block.junction.description = 2개의 컨베이어 벨트를 교차시키는 다리 역할을 합니다. 서로 다른 재료를 다른 장소로 운반하는 두 개의 다른 컨베이어의 상황에서 유용합니다.
|
||||||
block.bridge-conveyor.description = 고급 자원 운송 블록. 지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다.
|
block.bridge-conveyor.description = 고급 자원 운송 블록. 지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다.
|
||||||
block.phase-conveyor.description = 고급 자원 운송 블록. 전력을 사용하여 여러 타일을 통해 연결된 컨베이어로 아이템을 순간이동 시킵니다.
|
block.phase-conveyor.description = 고급 자원 운송 블록. 전력을 사용하여 여러 타일을 통해 연결된 컨베이어로 자원을 순간이동 시킵니다.
|
||||||
block.sorter.description = 아이템을 정렬합니다. 아이템이 선택과 일치하면 앞방향으로 통과하며, 그렇지 않을 경우 왼쪽과 오른쪽으로 출력됩니다.
|
block.sorter.description = 자원을 정렬합니다. 자원이 선택과 일치하면 앞방향으로 통과하며, 그렇지 않을 경우 왼쪽과 오른쪽으로 출력됩니다.
|
||||||
block.inverted-sorter.description = 표준 분류기와 같은 아이템을 처리하지만, 대신 선택된 아이템을 측면으로 출력합니다.
|
block.inverted-sorter.description = 표준 분류기와 같은 자원을 처리하지만, 대신 선택된 자원을 측면으로 출력합니다.
|
||||||
block.router.description = 아이템을 받아서 최대 3개의 다른 방향으로 동일하게 출력합니다. 하나의 소스에서 여러 대상으로 재료를 분할하는 데 유용합니다.\n\n[scarlet]공장에서 생산된 재료는 출력에 의해 막히게 되므로, 절대로 공장 옆에서 사용하지 마십시오.
|
block.router.description = 자원을 받아서 최대 3개의 다른 방향으로 동일하게 출력합니다. 하나의 소스에서 여러 대상으로 재료를 분할하는 데 유용합니다.\n\n[scarlet]공장에서 생산된 재료는 출력에 의해 막히게 되므로, 절대로 공장 옆에서 사용하지 마십시오.
|
||||||
block.distributor.description = 고급 분배기. 아이템을 최대 7개의 다른 방향으로 동일하게 분할합니다.
|
block.distributor.description = 고급 분배기. 자원을 최대 7개의 다른 방향으로 동일하게 분할합니다.
|
||||||
block.overflow-gate.description = 전면 경로가 차단 된 경우에만 왼쪽과 오른쪽으로 출력됩니다.
|
block.overflow-gate.description = 전면 경로가 차단 된 경우에만 왼쪽과 오른쪽으로 출력됩니다.
|
||||||
block.underflow-gate.description = 오버플로 게이트의 반대. 왼쪽 및 오른쪽 경로가 차단되면 전면으로 출력됩니다.
|
block.underflow-gate.description = 오버플로 게이트의 반대. 왼쪽 및 오른쪽 경로가 차단되면 전면으로 출력됩니다.
|
||||||
block.mass-driver.description = 최고의 아이템 운송 블록. 여러 아이템을 모아서 장거리에 걸쳐 다른 매스 드라이버에게 발사합니다. 작동하려면 전원이 필요합니다.
|
block.mass-driver.description = 최고의 자원 운송 블록. 여러 자원을 모아서 장거리에 걸쳐 다른 매스 드라이버에게 발사합니다. 작동하려면 전원이 필요합니다.
|
||||||
block.mechanical-pump.description = 느린 속도로 액체를 퍼올리지만, 전력를 사용하지 않는 펌프입니다.
|
block.mechanical-pump.description = 느린 속도로 액체를 퍼올리지만, 전력를 사용하지 않는 펌프입니다.
|
||||||
block.rotary-pump.description = 고급 펌프. 더 많은 액체를 퍼올리지만, 전력이 필요합니다.
|
block.rotary-pump.description = 고급 펌프. 더 많은 액체를 퍼올리지만, 전력이 필요합니다.
|
||||||
block.thermal-pump.description = 가장 강력한 펌프.
|
block.thermal-pump.description = 가장 강력한 펌프.
|
||||||
@@ -1199,20 +1200,20 @@ block.solar-panel.description = 태양으로부터 소량의 전력을 생성합
|
|||||||
block.solar-panel-large.description = 표준 태양 전지판보다 훨씬 더 효율적인 버전.
|
block.solar-panel-large.description = 표준 태양 전지판보다 훨씬 더 효율적인 버전.
|
||||||
block.thorium-reactor.description = 토륨으로부터 상당한 양의 전력을 생산합니다. 지속적인 냉각이 필요하며, 충분한 양의 냉각수가 공급되지 않으면 크게 폭발합니다. 전력 출력은 토륨의 양에 따라 달라집니다.
|
block.thorium-reactor.description = 토륨으로부터 상당한 양의 전력을 생산합니다. 지속적인 냉각이 필요하며, 충분한 양의 냉각수가 공급되지 않으면 크게 폭발합니다. 전력 출력은 토륨의 양에 따라 달라집니다.
|
||||||
block.impact-reactor.description = 최고 효율로 대량의 전력을 생산할 수 있는 고급 발전기. 프로세스를 시작하려면 상당한 전력 공급이 필요합니다.
|
block.impact-reactor.description = 최고 효율로 대량의 전력을 생산할 수 있는 고급 발전기. 프로세스를 시작하려면 상당한 전력 공급이 필요합니다.
|
||||||
block.mechanical-drill.description = 가격이 싼 드릴. 적절한 타일에 설치하면 아이템을 천천히 느린 속도로 출력합니다. 기본 자원만 채굴할 수 있습니다.
|
block.mechanical-drill.description = 가격이 싼 드릴. 적절한 타일에 설치하면 자원을 천천히 느린 속도로 출력합니다. 기본 자원만 채굴할 수 있습니다.
|
||||||
block.pneumatic-drill.description = 티타늄을 채광할 수 있는 향상된 드릴. 기계식 드릴보다 더 빠른 속도로 채굴합니다.
|
block.pneumatic-drill.description = 티타늄을 채광할 수 있는 향상된 드릴. 기계식 드릴보다 더 빠른 속도로 채굴합니다.
|
||||||
block.laser-drill.description = 레이저 기술을 통해 더욱 빠르게 드릴링 할 수 있지만 전력이 필요합니다. 토륨 채굴 가능.
|
block.laser-drill.description = 레이저 기술을 통해 더욱 빠르게 드릴링 할 수 있지만 전력이 필요합니다. 토륨 채굴 가능.
|
||||||
block.blast-drill.description = 최상위 드릴. 많은 양의 전력이 필요합니다.
|
block.blast-drill.description = 최상위 드릴. 많은 양의 전력이 필요합니다.
|
||||||
block.water-extractor.description = 지하수를 추출합니다. 지표수가 없는 곳에서 사용합니다.
|
block.water-extractor.description = 지하수를 추출합니다. 지표수가 없는 곳에서 사용합니다.
|
||||||
block.cultivator.description = 대기 중의 작은 농도의 포자를 배양 가능한 포드로 배양합니다.
|
block.cultivator.description = 대기 중의 작은 농도의 포자를 산업용 버섯으로 배양합니다.
|
||||||
block.oil-extractor.description = 석유를 추출하기 위해 많은 양의 전력과 모래 및 물을 사용합니다.
|
block.oil-extractor.description = 석유를 추출하기 위해 많은 양의 전력과 모래 및 물을 사용합니다.
|
||||||
block.core-shard.description = 코어 캡슐의 첫 번째 형태. 파괴되면 해당 지역과의 모든 연결이 끊어집니다. 이런 일이 일어나지 않도록 하십시오.
|
block.core-shard.description = 코어 캡슐의 첫 번째 형태. 파괴되면 해당 지역과의 모든 연결이 끊어집니다. 이런 일이 일어나지 않도록 하십시오.
|
||||||
block.core-foundation.description = 코어의 두 번째 버전. 더 나은 방어력과 자원을 저장합니다.
|
block.core-foundation.description = 코어의 두 번째 버전. 더 나은 방어력과 자원을 저장합니다.
|
||||||
block.core-nucleus.description = 코어 캡슐의 세 번째이자 마지막 형태입니다. 방어력이 매우 높고 대량의 자원을 저장할 수 있습니다.
|
block.core-nucleus.description = 코어 캡슐의 세 번째이자 마지막 형태입니다. 방어력이 매우 높고 대량의 자원을 저장할 수 있습니다.
|
||||||
block.vault.description = 각 유형의 많은 양의 자원을 저장합니다. 언로더 블록을 사용하여 창고에서 아이템을 빼낼 수 있습니다.
|
block.vault.description = 각 유형의 많은 양의 자원을 저장합니다. 언로더 블록을 사용하여 창고에서 자원을 빼낼 수 있습니다.
|
||||||
block.container.description = 각 유형의 소량의 자원을 저장합니다. 언로더 블록을 사용하여 컨테이너에서 아이템을 빼낼 수 있습니다.
|
block.container.description = 각 유형의 소량의 자원을 저장합니다. 언로더 블록을 사용하여 컨테이너에서 자원을 빼낼 수 있습니다.
|
||||||
block.unloader.description = 근처의 비 수송 블록에서 아이템을 빼냅니다. 눌러서 빼낼 자원을 변경할 수 있십니다.
|
block.unloader.description = 근처의 비 수송 블록에서 자원을 빼냅니다. 눌러서 빼낼 자원을 변경할 수 있십니다.
|
||||||
block.launch-pad.description = 코어 출격 없이도 아이템을 묶어 출격시킬 수 있습니다.
|
block.launch-pad.description = 코어 출격 없이도 자원을 묶어 출격시킬 수 있습니다.
|
||||||
block.launch-pad-large.description = 출격 패드의 개선된 버전. 더 많은 자원을 저장하며 더 자주 출격합니다.
|
block.launch-pad-large.description = 출격 패드의 개선된 버전. 더 많은 자원을 저장하며 더 자주 출격합니다.
|
||||||
block.duo.description = 작고 저렴한 포탑. 지상 유닛에 유용합니다.
|
block.duo.description = 작고 저렴한 포탑. 지상 유닛에 유용합니다.
|
||||||
block.scatter.description = 필수 대공 포탑. 적군에게 납 덩어리, 고철, 또는 강화 유리 조각 덩어리를 뿌립니다.
|
block.scatter.description = 필수 대공 포탑. 적군에게 납 덩어리, 고철, 또는 강화 유리 조각 덩어리를 뿌립니다.
|
||||||
|
|||||||
1296
core/assets/bundles/bundle_ro.properties
Normal file
1296
core/assets/bundles/bundle_ro.properties
Normal file
File diff suppressed because it is too large
Load Diff
@@ -20,7 +20,7 @@ gameover = Игра окончена
|
|||||||
gameover.pvp = [accent]{0}[] команда победила!
|
gameover.pvp = [accent]{0}[] команда победила!
|
||||||
highscore = [accent]Новый рекорд!
|
highscore = [accent]Новый рекорд!
|
||||||
copied = Скопировано.
|
copied = Скопировано.
|
||||||
indevpopup = [accent]v6[] находится на стадии [accent]pre-alpha[].\n[lightgray]Это означает следующее:[]\n- Отсутствие контента.\n- Большинство [scarlet]ИИ единиц[] не работает.\n- Множество единиц [scarlet]отсутствует[] или не готово.\n- Кампания не завершена.\n- Всё, что вы видите, может быть изменено или удалено.\n\nСообщайте о багах и вылетах на [accent]Github[].
|
indevpopup = [accent]v6[] находится на стадии [accent]alpha[].\n[lightgray]Это означает следующее:[]\n- Отсутствие контента.\n- Большинство [scarlet]ИИ единиц[] не работает.\n- Множество единиц не готово.\n- Кампания не завершена.\n- Всё, что вы видите, может быть изменено или удалено.\n\nСообщайте о багах и вылетах на [accent]Github[].
|
||||||
|
|
||||||
load.sound = Звуки
|
load.sound = Звуки
|
||||||
load.map = Карты
|
load.map = Карты
|
||||||
@@ -114,6 +114,7 @@ mod.disable = Выкл.
|
|||||||
mod.content = Содержимое:
|
mod.content = Содержимое:
|
||||||
mod.delete.error = Невозможно удалить модификацию. Возможно, файл используется.
|
mod.delete.error = Невозможно удалить модификацию. Возможно, файл используется.
|
||||||
mod.requiresversion = [scarlet]Требуемая минимальная версия игры: [accent]{0}
|
mod.requiresversion = [scarlet]Требуемая минимальная версия игры: [accent]{0}
|
||||||
|
mod.outdated = [scarlet]Не совместим с V6 (нет "min-game-version: 105")
|
||||||
mod.missingdependencies = [scarlet]Не найдены родительские модификации: {0}
|
mod.missingdependencies = [scarlet]Не найдены родительские модификации: {0}
|
||||||
mod.erroredcontent = [scarlet]Ошибки содержимого
|
mod.erroredcontent = [scarlet]Ошибки содержимого
|
||||||
mod.errors = Ошибки были вызваны загружаемым содержимым.
|
mod.errors = Ошибки были вызваны загружаемым содержимым.
|
||||||
@@ -126,9 +127,9 @@ mod.import = Импортировать модификацию
|
|||||||
mod.import.file = Импортировать файл
|
mod.import.file = Импортировать файл
|
||||||
mod.import.github = Импортировать мод с GitHub
|
mod.import.github = Импортировать мод с GitHub
|
||||||
mod.jarwarn = [scarlet]JAR-модификации по сути не безопасны.[]\nУбедитесь, что вы импортируете этот мод из надежного источника!
|
mod.jarwarn = [scarlet]JAR-модификации по сути не безопасны.[]\nУбедитесь, что вы импортируете этот мод из надежного источника!
|
||||||
mod.item.remove = Этот предмет является частью модификации [accent]«{0}»[]. Чтобы удалить его, удалите саму модификацию.
|
mod.item.remove = Этот предмет является частью модификации [accent]«{0}[accent]»[white]. Чтобы удалить его, удалите саму модификацию.
|
||||||
mod.remove.confirm = Эта модификация будет удалена.
|
mod.remove.confirm = Эта модификация будет удалена.
|
||||||
mod.author = [lightgray]Автор:[] {0}
|
mod.author = [lightgray]Автор(ы):[] {0}
|
||||||
mod.missing = В этом сохранении есть следы модификации, которая отсутствует или установлена её обновлённая версия. Может произойти повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
|
mod.missing = В этом сохранении есть следы модификации, которая отсутствует или установлена её обновлённая версия. Может произойти повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
|
||||||
mod.preview.missing = Перед публикацией этой модификации в Мастерской, вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова.
|
mod.preview.missing = Перед публикацией этой модификации в Мастерской, вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова.
|
||||||
mod.folder.missing = Модификации могут быть опубликованы в Мастерской только в виде папки.\nЧтобы конвертировать любой мод в папку, просто извлеките его из архива и удалите старый архив .zip, затем перезапустите игру или перезагрузите модификации.
|
mod.folder.missing = Модификации могут быть опубликованы в Мастерской только в виде папки.\nЧтобы конвертировать любой мод в папку, просто извлеките его из архива и удалите старый архив .zip, затем перезапустите игру или перезагрузите модификации.
|
||||||
@@ -137,6 +138,8 @@ mod.scripts.disable = Ваше устройство не поддерживае
|
|||||||
about.button = Об игре
|
about.button = Об игре
|
||||||
name = Имя:
|
name = Имя:
|
||||||
noname = Для начала, придумайте[accent] себе имя[].
|
noname = Для начала, придумайте[accent] себе имя[].
|
||||||
|
planetmap = Карта планеты
|
||||||
|
launchcore = Запуск ядра
|
||||||
filename = Имя файла:
|
filename = Имя файла:
|
||||||
unlocked = Новый контент разблокирован!
|
unlocked = Новый контент разблокирован!
|
||||||
completed = [accent]Завершено
|
completed = [accent]Завершено
|
||||||
@@ -171,7 +174,7 @@ host.info = Кнопка [accent]Открыть сервер[] запускае
|
|||||||
join.info = Здесь вы можете ввести [accent]IP-адрес сервера[], найти доступные [accent]локальные[] и [accent]глобальные[] серверы для подключения.\nПоддерживаются оба многопользовательских режима: LAN и WAN.\n\n[lightgray]Если вы хотите подключиться к кому-то по IP-адресу, Вам нужно будет попросить IP-адрес у самого хоста. Хост может узнать IP-адрес своего устройства через Google запрос [accent]"my ip"[].
|
join.info = Здесь вы можете ввести [accent]IP-адрес сервера[], найти доступные [accent]локальные[] и [accent]глобальные[] серверы для подключения.\nПоддерживаются оба многопользовательских режима: LAN и WAN.\n\n[lightgray]Если вы хотите подключиться к кому-то по IP-адресу, Вам нужно будет попросить IP-адрес у самого хоста. Хост может узнать IP-адрес своего устройства через Google запрос [accent]"my ip"[].
|
||||||
hostserver = Запустить многопользовательский сервер
|
hostserver = Запустить многопользовательский сервер
|
||||||
invitefriends = Пригласить друзей
|
invitefriends = Пригласить друзей
|
||||||
hostserver.mobile = Запустить\nсервер
|
hostserver.mobile = Запустить сервер
|
||||||
host = Открыть сервер
|
host = Открыть сервер
|
||||||
hosting = [accent]Открытие сервера…
|
hosting = [accent]Открытие сервера…
|
||||||
hosts.refresh = Обновить
|
hosts.refresh = Обновить
|
||||||
@@ -506,7 +509,14 @@ error.io = Сетевая ошибка ввода-вывода.
|
|||||||
error.any = Неизвестная сетевая ошибка.
|
error.any = Неизвестная сетевая ошибка.
|
||||||
error.bloom = Не удалось инициализировать свечение (Bloom).\nВозможно, ваше устройство не поддерживает его.
|
error.bloom = Не удалось инициализировать свечение (Bloom).\nВозможно, ваше устройство не поддерживает его.
|
||||||
|
|
||||||
|
sectors.unexplored = [lightgray]Не исследовано
|
||||||
|
sectors.resources = Ресурсы:
|
||||||
|
sectors.production = Производит:
|
||||||
|
sectors.stored = Накоплено:
|
||||||
|
sectors.resume = Продолжить
|
||||||
|
sectors.launch = Высадка
|
||||||
|
|
||||||
|
#NOTE TO TRANSLATORS: don't bother editing these, they'll be removed and/or rewritten anyway
|
||||||
sector.groundZero.name = Отправная точка
|
sector.groundZero.name = Отправная точка
|
||||||
sector.craters.name = Кратеры
|
sector.craters.name = Кратеры
|
||||||
sector.frozenForest.name = Ледяной лес
|
sector.frozenForest.name = Ледяной лес
|
||||||
@@ -574,8 +584,11 @@ blocks.itemsmoved = Скорость перемещения
|
|||||||
blocks.launchtime = Интервал запусков
|
blocks.launchtime = Интервал запусков
|
||||||
blocks.shootrange = Радиус действия
|
blocks.shootrange = Радиус действия
|
||||||
blocks.size = Размер
|
blocks.size = Размер
|
||||||
|
blocks.displaysize = Размер дисплея
|
||||||
blocks.liquidcapacity = Вместимость жидкости
|
blocks.liquidcapacity = Вместимость жидкости
|
||||||
blocks.powerrange = Дальность передачи энергии
|
blocks.powerrange = Дальность передачи энергии
|
||||||
|
blocks.linkrange = Дальность связи
|
||||||
|
blocks.instructions = Инструкции
|
||||||
blocks.powerconnections = Количество соединений
|
blocks.powerconnections = Количество соединений
|
||||||
blocks.poweruse = Потребляет энергии
|
blocks.poweruse = Потребляет энергии
|
||||||
blocks.powerdamage = Энергия/урон
|
blocks.powerdamage = Энергия/урон
|
||||||
@@ -591,6 +604,7 @@ blocks.boosteffect = Ускоряющий эффект
|
|||||||
blocks.maxunits = Максимальное количество активных единиц
|
blocks.maxunits = Максимальное количество активных единиц
|
||||||
blocks.health = Прочность
|
blocks.health = Прочность
|
||||||
blocks.buildtime = Время строительства
|
blocks.buildtime = Время строительства
|
||||||
|
blocks.maxconsecutive = Макс. последовательность
|
||||||
blocks.buildcost = Стоимость строительства
|
blocks.buildcost = Стоимость строительства
|
||||||
blocks.inaccuracy = Разброс
|
blocks.inaccuracy = Разброс
|
||||||
blocks.shots = Выстрелы
|
blocks.shots = Выстрелы
|
||||||
@@ -638,7 +652,9 @@ unit.liquidunits = жидкостных единиц
|
|||||||
unit.powerunits = энерг. единиц
|
unit.powerunits = энерг. единиц
|
||||||
unit.degrees = град.
|
unit.degrees = град.
|
||||||
unit.seconds = сек.
|
unit.seconds = сек.
|
||||||
|
unit.minutes = мин.
|
||||||
unit.persecond = /сек
|
unit.persecond = /сек
|
||||||
|
unit.perminute = /мин
|
||||||
unit.timesspeed = x скорость
|
unit.timesspeed = x скорость
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = предметов
|
unit.items = предметов
|
||||||
@@ -727,6 +743,7 @@ category.blocks.name = Выбор блока
|
|||||||
command.attack = Атаковать
|
command.attack = Атаковать
|
||||||
command.rally = Точка сбора
|
command.rally = Точка сбора
|
||||||
command.retreat = Отступить
|
command.retreat = Отступить
|
||||||
|
command.idle = Ждать
|
||||||
placement.blockselectkeys = \n[lightgray]Клавиша: [{0},
|
placement.blockselectkeys = \n[lightgray]Клавиша: [{0},
|
||||||
keybind.respawn.name = Возрождение в ядре
|
keybind.respawn.name = Возрождение в ядре
|
||||||
keybind.control.name = Перехватить контроль над единицей
|
keybind.control.name = Перехватить контроль над единицей
|
||||||
@@ -739,6 +756,7 @@ keybind.toggle_block_status.name = Отображение статусов бл
|
|||||||
keybind.move_x.name = Движение по оси X
|
keybind.move_x.name = Движение по оси X
|
||||||
keybind.move_y.name = Движение по оси Y
|
keybind.move_y.name = Движение по оси Y
|
||||||
keybind.mouse_move.name = Следовать за курсором
|
keybind.mouse_move.name = Следовать за курсором
|
||||||
|
keybind.pan.name = Панорамирование камеры
|
||||||
keybind.boost.name = Полёт/Ускорение
|
keybind.boost.name = Полёт/Ускорение
|
||||||
keybind.schematic_select.name = Выбрать область
|
keybind.schematic_select.name = Выбрать область
|
||||||
keybind.schematic_menu.name = Меню схем
|
keybind.schematic_menu.name = Меню схем
|
||||||
@@ -800,6 +818,7 @@ rules.reactorexplosions = Взрывы реакторов
|
|||||||
rules.wavetimer = Интервал волн
|
rules.wavetimer = Интервал волн
|
||||||
rules.waves = Волны
|
rules.waves = Волны
|
||||||
rules.attack = Режим атаки
|
rules.attack = Режим атаки
|
||||||
|
rules.buildai = Строительство ИИ
|
||||||
rules.enemyCheat = Бесконечные ресурсы ИИ (красная команда)
|
rules.enemyCheat = Бесконечные ресурсы ИИ (красная команда)
|
||||||
rules.blockhealthmultiplier = Множитель здоровья блоков
|
rules.blockhealthmultiplier = Множитель здоровья блоков
|
||||||
rules.blockdamagemultiplier = Множитель урона блоков
|
rules.blockdamagemultiplier = Множитель урона блоков
|
||||||
@@ -821,8 +840,11 @@ rules.title.unit = Боевые единицы
|
|||||||
rules.title.experimental = Экспериментально
|
rules.title.experimental = Экспериментально
|
||||||
rules.title.environment = Окружение
|
rules.title.environment = Окружение
|
||||||
rules.lighting = Освещение
|
rules.lighting = Освещение
|
||||||
|
rules.fire = Огонь
|
||||||
|
rules.explosions = Урон от взрывов блоков/единиц
|
||||||
rules.ambientlight = Окружающий свет
|
rules.ambientlight = Окружающий свет
|
||||||
rules.solarpowermultiplier = Множитель солнечной энергии
|
rules.solarpowermultiplier = Множитель солнечной энергии
|
||||||
|
rules.weather = Погода
|
||||||
|
|
||||||
content.item.name = Предметы
|
content.item.name = Предметы
|
||||||
content.liquid.name = Жидкости
|
content.liquid.name = Жидкости
|
||||||
@@ -867,13 +889,16 @@ liquid.temperature = [lightgray]Температура: {0}
|
|||||||
unit.dagger.name = Кинжал
|
unit.dagger.name = Кинжал
|
||||||
unit.mace.name = Булава
|
unit.mace.name = Булава
|
||||||
unit.fortress.name = Крепость
|
unit.fortress.name = Крепость
|
||||||
|
unit.scepter.name = Скипетр
|
||||||
|
unit.reign.name = Власть
|
||||||
unit.nova.name = Нова
|
unit.nova.name = Нова
|
||||||
unit.pulsar.name = Пульсар
|
unit.pulsar.name = Пульсар
|
||||||
unit.quasar.name = Квазар
|
unit.quasar.name = Квазар
|
||||||
unit.crawler.name = Обходчик
|
unit.crawler.name = Ползун
|
||||||
unit.atrax.name = Атракс
|
unit.atrax.name = Атракс
|
||||||
unit.spiroct.name = Спайрокт
|
unit.spiroct.name = Спайрокт
|
||||||
unit.arkyid.name = Аркид
|
unit.arkyid.name = Аркид
|
||||||
|
unit.toxopid.name = Токсопид
|
||||||
unit.flare.name = Вспышка
|
unit.flare.name = Вспышка
|
||||||
unit.horizon.name = Горизонт
|
unit.horizon.name = Горизонт
|
||||||
unit.zenith.name = Зенит
|
unit.zenith.name = Зенит
|
||||||
@@ -889,27 +914,28 @@ unit.alpha.name = Альфа
|
|||||||
unit.beta.name = Бета
|
unit.beta.name = Бета
|
||||||
unit.gamma.name = Гамма
|
unit.gamma.name = Гамма
|
||||||
|
|
||||||
|
block.resupply-point.name = Пункт снабжения
|
||||||
block.parallax.name = Параллакс
|
block.parallax.name = Параллакс
|
||||||
block.cliff.name = Скала
|
block.cliff.name = Скала
|
||||||
block.sand-boulder.name = Песчаный валун
|
block.sand-boulder.name = Песчаный валун
|
||||||
block.grass.name = Трава
|
block.grass.name = Трава
|
||||||
block.slag.name = Шлак
|
block.slag.name = Шлак
|
||||||
block.salt.name = Соль
|
block.salt.name = Соль
|
||||||
block.saltrocks.name = Соляные камни
|
block.salt-wall.name = Соляная стена
|
||||||
block.pebbles.name = Галька
|
block.pebbles.name = Галька
|
||||||
block.tendrils.name = Споровые усики
|
block.tendrils.name = Споровые усики
|
||||||
block.sandrocks.name = Песчаные камни
|
block.sand-wall.name = Песчаная стена
|
||||||
block.spore-pine.name = Споровая сосна
|
block.spore-pine.name = Споровая сосна
|
||||||
block.sporerocks.name = Споровые камни
|
block.spore-wall.name = Споровая стена
|
||||||
block.rock.name = Каменный валун
|
block.boulder.name = Каменный валун
|
||||||
block.snowrock.name = Заснеженный валун
|
block.snow-boulder.name = Заснеженный валун
|
||||||
block.snow-pine.name = Заснеженная сосна
|
block.snow-pine.name = Заснеженная сосна
|
||||||
block.shale.name = Сланец
|
block.shale.name = Сланец
|
||||||
block.shale-boulder.name = Сланцевый валун
|
block.shale-boulder.name = Сланцевый валун
|
||||||
block.moss.name = Мох
|
block.moss.name = Мох
|
||||||
block.shrubs.name = Кусты
|
block.shrubs.name = Кусты
|
||||||
block.spore-moss.name = Споровый мох
|
block.spore-moss.name = Споровый мох
|
||||||
block.shalerocks.name = Сланцевые камни
|
block.shale-wall.name = Сланцевая стена
|
||||||
block.scrap-wall.name = Стена из металлолома
|
block.scrap-wall.name = Стена из металлолома
|
||||||
block.scrap-wall-large.name = Большая стена из металлолома
|
block.scrap-wall-large.name = Большая стена из металлолома
|
||||||
block.scrap-wall-huge.name = Огромная стена из металлолома
|
block.scrap-wall-huge.name = Огромная стена из металлолома
|
||||||
@@ -937,13 +963,16 @@ block.craters.name = Кратеры
|
|||||||
block.sand-water.name = Песок с водой
|
block.sand-water.name = Песок с водой
|
||||||
block.darksand-water.name = Тёмный песок с водой
|
block.darksand-water.name = Тёмный песок с водой
|
||||||
block.char.name = Выжженная земля
|
block.char.name = Выжженная земля
|
||||||
block.holostone.name = Голографический камень
|
block.dacite.name = Дацит
|
||||||
|
block.dacite-wall.name = Дацитовая стена
|
||||||
block.ice-snow.name = Заснеженный лёд
|
block.ice-snow.name = Заснеженный лёд
|
||||||
block.rocks.name = Камни
|
block.stone-wall.name = Каменная стена
|
||||||
block.icerocks.name = Ледяные камни
|
block.ice-wall.name = Ледяная стена
|
||||||
block.snowrocks.name = Снежные камни
|
block.snow-wall.name = Снежная стена
|
||||||
block.dunerocks.name = Тёмные песчаные камни
|
block.dune-wall.name = Тёмная песчаная стена
|
||||||
block.pine.name = Сосна
|
block.pine.name = Сосна
|
||||||
|
block.dirt.name = Земля
|
||||||
|
block.dirt-wall.name = Земляная стена
|
||||||
block.white-tree-dead.name = Мёртвое белое дерево
|
block.white-tree-dead.name = Мёртвое белое дерево
|
||||||
block.white-tree.name = Белое дерево
|
block.white-tree.name = Белое дерево
|
||||||
block.spore-cluster.name = Скопление спор
|
block.spore-cluster.name = Скопление спор
|
||||||
@@ -959,7 +988,7 @@ block.dark-panel-4.name = Тёмная панель 4
|
|||||||
block.dark-panel-5.name = Тёмная панель 5
|
block.dark-panel-5.name = Тёмная панель 5
|
||||||
block.dark-panel-6.name = Тёмная панель 6
|
block.dark-panel-6.name = Тёмная панель 6
|
||||||
block.dark-metal.name = Тёмный металл
|
block.dark-metal.name = Тёмный металл
|
||||||
block.ignarock.name = Обожжённый камень
|
block.basalt.name = Базальт
|
||||||
block.hotrock.name = Горячий камень
|
block.hotrock.name = Горячий камень
|
||||||
block.magmarock.name = Магмовый камень
|
block.magmarock.name = Магмовый камень
|
||||||
block.cliffs.name = Скалы
|
block.cliffs.name = Скалы
|
||||||
@@ -1073,6 +1102,7 @@ block.container.name = Контейнер
|
|||||||
block.launch-pad.name = Пусковая площадка
|
block.launch-pad.name = Пусковая площадка
|
||||||
block.launch-pad-large.name = Большая пусковая площадка
|
block.launch-pad-large.name = Большая пусковая площадка
|
||||||
block.segment.name = Сегмент
|
block.segment.name = Сегмент
|
||||||
|
block.command-center.name = Командный центр
|
||||||
block.ground-factory.name = Наземная фабрика
|
block.ground-factory.name = Наземная фабрика
|
||||||
block.air-factory.name = Воздушная фабрика
|
block.air-factory.name = Воздушная фабрика
|
||||||
block.naval-factory.name = Морская фабрика
|
block.naval-factory.name = Морская фабрика
|
||||||
@@ -1089,7 +1119,9 @@ block.overdrive-dome.name = Сверхприводный купол
|
|||||||
block.switch.name = Переключатель
|
block.switch.name = Переключатель
|
||||||
block.micro-processor.name = Микропроцессор
|
block.micro-processor.name = Микропроцессор
|
||||||
block.logic-processor.name = Логический процессор
|
block.logic-processor.name = Логический процессор
|
||||||
|
block.hyper-processor.name = Гипер процессор
|
||||||
block.logic-display.name = Логический дисплей
|
block.logic-display.name = Логический дисплей
|
||||||
|
block.large-logic-display.name = Большой логический дисплей
|
||||||
block.memory-cell.name = Запоминающее устройство
|
block.memory-cell.name = Запоминающее устройство
|
||||||
|
|
||||||
team.blue.name = Синяя
|
team.blue.name = Синяя
|
||||||
@@ -1226,10 +1258,10 @@ block.thorium-reactor.description = Генерирует значительно
|
|||||||
block.impact-reactor.description = Усовершенствованный генератор, способный создавать огромное количество энергии на пике эффективности. Требуется значительное количество энергии для запуска процесса.
|
block.impact-reactor.description = Усовершенствованный генератор, способный создавать огромное количество энергии на пике эффективности. Требуется значительное количество энергии для запуска процесса.
|
||||||
block.mechanical-drill.description = Дешёвый бур. При размещении на соответствующих плитках, предметы постоянно выдаются в медленном темпе. Способен добывать только базовые ресурсы.
|
block.mechanical-drill.description = Дешёвый бур. При размещении на соответствующих плитках, предметы постоянно выдаются в медленном темпе. Способен добывать только базовые ресурсы.
|
||||||
block.pneumatic-drill.description = Улучшенный бур, способный добывать титан. Добывает быстрее, чем механический бур.
|
block.pneumatic-drill.description = Улучшенный бур, способный добывать титан. Добывает быстрее, чем механический бур.
|
||||||
block.laser-drill.description = Позволяет сверлить еще быстрее с помощью лазерной технологии, но требует энергию. Способен добывать торий.
|
block.laser-drill.description = Позволяет добывать еще быстрее с помощью лазерной технологии, но требует энергию. Способен добывать торий.
|
||||||
block.blast-drill.description = Самый продвинутый бур. Требует большое количество энергии.
|
block.blast-drill.description = Самый продвинутый бур. Требует большое количество энергии.
|
||||||
block.water-extractor.description = Выкачивает подземные воды. Используется в местах, где нет поверхностных вод.
|
block.water-extractor.description = Выкачивает подземные воды. Используется в местах, где нет поверхностных вод.
|
||||||
block.cultivator.description = Выращивает крошечные концентрации спор в атмосфере в готовые к использованию споры.
|
block.cultivator.description = Выращивает крошечные концентрации спор из атмосферы в готовые к использованию споры.
|
||||||
block.oil-extractor.description = Использует большое количество энергии, песка и воды для бурения, добывая нефть.
|
block.oil-extractor.description = Использует большое количество энергии, песка и воды для бурения, добывая нефть.
|
||||||
block.core-shard.description = Первая итерация капсулы ядра. После уничтожения, весь контакт с регионом теряется. Не позволяйте этому случиться.
|
block.core-shard.description = Первая итерация капсулы ядра. После уничтожения, весь контакт с регионом теряется. Не позволяйте этому случиться.
|
||||||
block.core-foundation.description = Вторая версия ядра. Лучше бронировано. Хранит больше ресурсов.
|
block.core-foundation.description = Вторая версия ядра. Лучше бронировано. Хранит больше ресурсов.
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ link.google-play.description = Завантажити для Android з Google P
|
|||||||
link.f-droid.description = Завантажити для Android з F-Droid
|
link.f-droid.description = Завантажити для Android з F-Droid
|
||||||
link.wiki.description = Офіційна ігрова Wiki
|
link.wiki.description = Офіційна ігрова Wiki
|
||||||
link.suggestions.description = Запропонувати нові функції
|
link.suggestions.description = Запропонувати нові функції
|
||||||
linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійована в буфер обміну.
|
linkfail = Не вдалося перейти за посиланням!\nURL-адреса скопійована в буфер обміну.
|
||||||
screenshot = Зняток мапи збережено до {0}
|
screenshot = Зняток мапи збережено до {0}
|
||||||
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
|
screenshot.invalid = Мапа занадто велика, тому, мабуть, не вистачає пам’яті для знятку мапи.
|
||||||
gameover = Гра завершена
|
gameover = Гра завершена
|
||||||
gameover.pvp = [accent]{0}[] команда перемогла!
|
gameover.pvp = [accent]{0}[] команда перемогла!
|
||||||
highscore = [accent]Новий рекорд!
|
highscore = [accent]Новий рекорд!
|
||||||
copied = Скопійовано.
|
copied = Скопійовано.
|
||||||
indevpopup = Наразі [accent]6.0[] знаходиться у стадії [accent]pre-alpha[].\n[lightgray]Це означає наступне:[]\n- Не вистачає наповнення гри;\n- Більшість [scarlet]ШІ бойових одиниць[] не працює;\n- Багато одиниць [scarlet]відсутні[] або незавершені;\n- Кампанія повністю не є завершеною;\n- Усе, що ви бачите, може змінитися або видалитися.\n\nПовідомляйте про вади або збої на [accent]Github[], а про помилки в перекладі в Discord.
|
indevpopup = Наразі [accent]6.0[] знаходиться у стадії [accent]альфа[].\n[lightgray]Це означає наступне:[]\n- Не вистачає наповнення гри;\n- Більшість [scarlet]ШІ бойових одиниць[] не працює належним чином;\n- Багато одиниць [scarlet]відсутні[] або незавершені;\n- Кампанія повністю не є завершеною;\n- Усе, що ви бачите, може змінитися або видалитися.\n\nПовідомляйте про вади або збої на [accent]Github[], а про помилки в перекладі в Discord.
|
||||||
|
|
||||||
load.sound = Звуки
|
load.sound = Звуки
|
||||||
load.map = Мапи
|
load.map = Мапи
|
||||||
@@ -40,8 +40,8 @@ be.check = Перевірити на наявність оновлень
|
|||||||
schematic = Схема
|
schematic = Схема
|
||||||
schematic.add = Зберегти схему…
|
schematic.add = Зберегти схему…
|
||||||
schematics = Схеми
|
schematics = Схеми
|
||||||
schematic.replace = Схема з такою назвою вже існує. Замінити її?
|
schematic.replace = Схема з такою назвою вже є. Замінити її?
|
||||||
schematic.exists = Схема з такою назвою вже існує.
|
schematic.exists = Схема з такою назвою вже є.
|
||||||
schematic.import = Імпортувати схему…
|
schematic.import = Імпортувати схему…
|
||||||
schematic.exportfile = Експортувати файл
|
schematic.exportfile = Експортувати файл
|
||||||
schematic.importfile = Імпортувати файл
|
schematic.importfile = Імпортувати файл
|
||||||
@@ -51,7 +51,7 @@ schematic.copy.import = Імпортувати з клавіатури
|
|||||||
schematic.shareworkshop = Поширити в Майстерню
|
schematic.shareworkshop = Поширити в Майстерню
|
||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Обернути схему
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Обернути схему
|
||||||
schematic.saved = Схема збережена.
|
schematic.saved = Схема збережена.
|
||||||
schematic.delete.confirm = Ця схема буде повністю випалена Викорінювачем.
|
schematic.delete.confirm = Ви справді хочете видалити цю схему?
|
||||||
schematic.rename = Перейменувати схему
|
schematic.rename = Перейменувати схему
|
||||||
schematic.info = {0}x{1}, {2} блоків
|
schematic.info = {0}x{1}, {2} блоків
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ map.delete = Ви впевнені, що хочете видалити мапу
|
|||||||
level.highscore = Рекорд: [accent]{0}
|
level.highscore = Рекорд: [accent]{0}
|
||||||
level.select = Вибір мапи
|
level.select = Вибір мапи
|
||||||
level.mode = Режим гри:
|
level.mode = Режим гри:
|
||||||
coreattack = < Ядро знаходиться під атакою! >
|
coreattack = < Ядро перебуває під атакою! >
|
||||||
nearpoint = [[ [scarlet]ЗАЛИШТЕ ЗОНУ ВИСАДКИ НЕГАЙНО[] ]\nанігіляція неминуча
|
nearpoint = [[ [scarlet]ЗАЛИШТЕ ЗОНУ ВИСАДКИ НЕГАЙНО[] ]\nанігіляція неминуча
|
||||||
database = База даних ядра
|
database = База даних ядра
|
||||||
savegame = Зберегти гру
|
savegame = Зберегти гру
|
||||||
@@ -78,7 +78,7 @@ joingame = Мережева гра
|
|||||||
customgame = Користувацька гра
|
customgame = Користувацька гра
|
||||||
newgame = Нова гра
|
newgame = Нова гра
|
||||||
none = <нічого>
|
none = <нічого>
|
||||||
minimap = Міні-мапа
|
minimap = Мінімапа
|
||||||
position = Місцезнаходження
|
position = Місцезнаходження
|
||||||
close = Закрити
|
close = Закрити
|
||||||
website = Вебсайт
|
website = Вебсайт
|
||||||
@@ -98,15 +98,15 @@ committingchanges = Здійснення змін
|
|||||||
done = Зроблено
|
done = Зроблено
|
||||||
feature.unsupported = Ваш пристрій не підтримує цю функцію
|
feature.unsupported = Ваш пристрій не підтримує цю функцію
|
||||||
|
|
||||||
mods.alphainfo = Майте на увазі, що модифікації знаходяться в альфі, і [scarlet]можуть бути дуже глючними[].\nПовідомте про будь-які проблеми, які ви знайдете до Mindustry Github або Discord.
|
mods.alphainfo = Майте на увазі, що модифікації перебувають в альфі, і [scarlet]можуть бути дуже несправними[].\nПовідомте про будь-які проблеми, які ви знайдете до Mindustry Github або Discord.
|
||||||
mods.alpha = [accent](Альфа)
|
mods.alpha = [accent](Альфа)
|
||||||
mods = Модифікації
|
mods = Модифікації
|
||||||
mods.none = [lightgray]Модифікацій не знайдено!
|
mods.none = [lightgray]Модифікацій не знайдено!
|
||||||
mods.guide = Посібник з модифікацій
|
mods.guide = Посібник із модифікацій
|
||||||
mods.report = Повідомити про ваду
|
mods.report = Повідомити про ваду
|
||||||
mods.openfolder = Відкрити теку
|
mods.openfolder = Відкрити теку
|
||||||
mods.reload = Перезавантажити
|
mods.reload = Перезавантажити
|
||||||
mods.reloadexit = Гра зараз закриється, щоб перезавантажити модифікації
|
mods.reloadexit = Гра зараз закриється, щоби перезавантажити модифікації
|
||||||
mod.display = [gray]Модифікація:[orange] {0}
|
mod.display = [gray]Модифікація:[orange] {0}
|
||||||
mod.enabled = [lightgray]Увімкнено
|
mod.enabled = [lightgray]Увімкнено
|
||||||
mod.disabled = [scarlet]Вимкнено
|
mod.disabled = [scarlet]Вимкнено
|
||||||
@@ -114,29 +114,32 @@ mod.disable = Вимкнути
|
|||||||
mod.content = Зміст:
|
mod.content = Зміст:
|
||||||
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
|
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
|
||||||
mod.requiresversion = [scarlet]Необхідна мінімальна версія гри: [accent]{0}
|
mod.requiresversion = [scarlet]Необхідна мінімальна версія гри: [accent]{0}
|
||||||
|
mod.outdated = [scarlet]Не сумісна з V6 (немає мінімальної версі гри (англ. min-game-version): 105)
|
||||||
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
|
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
|
||||||
mod.erroredcontent = [scarlet]Помилки при завантаженні
|
mod.erroredcontent = [scarlet]Помилки під час завантаження
|
||||||
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Ця модифікація буде автоматично вимкнена.
|
||||||
mod.enable = Увімкнути
|
mod.enable = Увімкнути
|
||||||
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
|
mod.requiresrestart = А тепер гра закриється, щоби застосувати зміни модифікацій.
|
||||||
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
||||||
mod.import = Імпортувати модифікацію
|
mod.import = Імпортувати модифікацію
|
||||||
mod.import.file = Імпортувати файл
|
mod.import.file = Імпортувати файл
|
||||||
mod.import.github = Імпортувати з GitHub
|
mod.import.github = Імпортувати з GitHub
|
||||||
mod.jarwarn = [scarlet]JAR-модифікації по своїй суті небезпечні.[]\nПереконайтеся, що ви імпортуєте цю модифікацію з надійного джерела!
|
mod.jarwarn = [scarlet]JAR-модифікації за своєю суттю небезпечні.[]\nПереконайтеся, що ви імпортуєте цю модифікацію з надійного джерела!
|
||||||
mod.item.remove = Цей предмет є частиною модифікації [accent] «{0}»[]. Щоб видалити його, видаліть цю модифікацію.
|
mod.item.remove = Цей предмет є частиною модифікації [accent] «{0}»[]. Щоби видалити його, видаліть цю модифікацію.
|
||||||
mod.remove.confirm = Цю модифікацію буде видалено.
|
mod.remove.confirm = Цю модифікацію буде видалено.
|
||||||
mod.author = [lightgray]Автор:[] {0}
|
mod.author = [lightgray]Автор:[] {0}
|
||||||
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
||||||
mod.preview.missing = До публікації цієї модифікації в Майстерні, ви повинні додати зображення попереднього перегляду.\nПомістіть зображення з назвою [accent] preview.png[] у теку з модифікаціями та спробуйте знову.
|
mod.preview.missing = До публікації цієї модифікації в Майстерні, ви мусите додати зображення попереднього перегляду.\nПомістіть зображення з назвою [accent] preview.png[] у теку з модифікаціями та спробуйте знову.
|
||||||
mod.folder.missing = Тільки модифікації у формі теці можуть бути опубліковані в Майстерні.\nЩоб перетворити будь-яку модифікацію у теку, просто розархівуйте цей файл у теку та видаліть старий архів, і потім перезапустіть гру або перезавантажте ваші модифікації.
|
mod.folder.missing = Тільки модифікації у формі теці можуть бути опубліковані в Майстерні.\nЩоб перетворити будь-яку модифікацію в теку, просто розархівуйте цей файл у теку та видаліть старий архів, і потім перезапустіть гру або перезавантажте ваші модифікації.
|
||||||
mod.scripts.disable = Ваш пристрій не підтримує модифікації зі скриптами. Вимкніть модифікацію для запуску гри.
|
mod.scripts.disable = Ваш пристрій не підтримує модифікації зі скриптами. Вимкніть модифікацію для запуску гри.
|
||||||
|
|
||||||
about.button = Про гру
|
about.button = Про гру
|
||||||
name = Ім’я:
|
name = Ім’я:
|
||||||
noname = Спочатку придумайте[accent] собі ім’я[].
|
noname = Спочатку придумайте[accent] собі ім’я[].
|
||||||
|
planetmap = Планетна мапа
|
||||||
|
launchcore = Запустити ядро
|
||||||
filename = Назва файлу:
|
filename = Назва файлу:
|
||||||
unlocked = Доступний новий вміст!
|
unlocked = Доступний новий вміст!
|
||||||
completed = [accent]Завершено
|
completed = [accent]Завершено
|
||||||
@@ -150,28 +153,28 @@ players.single = {0} гравець на сервері
|
|||||||
players.search = пошук
|
players.search = пошук
|
||||||
players.notfound = [gray]гравців не знайдено
|
players.notfound = [gray]гравців не знайдено
|
||||||
server.closing = [accent]Закриття сервера…
|
server.closing = [accent]Закриття сервера…
|
||||||
server.kicked.kick = Ви були вигнані з сервера!
|
server.kicked.kick = Ви були вигнані із сервера!
|
||||||
server.kicked.whitelist = Ви не в білому списку сервера.
|
server.kicked.whitelist = Ви не в білому списку сервера.
|
||||||
server.kicked.serverClose = Сервер закрито.
|
server.kicked.serverClose = Сервер зачинено.
|
||||||
server.kicked.vote = Вас було вигнано із сервера за допомогою голосування. Прощавайте.
|
server.kicked.vote = Вас було вигнано із сервера за допомогою голосування. Прощавайте.
|
||||||
server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
|
server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
|
||||||
server.kicked.serverOutdated = Застарілий сервер! Попрохайте адміністратора сервера оновити сервер/гру!
|
server.kicked.serverOutdated = Застарілий сервер! Попрохайте адміністратора сервера оновити сервер/гру!
|
||||||
server.kicked.banned = Ви заблоковані на цьому сервері.
|
server.kicked.banned = Ви заблоковані на цьому сервері.
|
||||||
server.kicked.typeMismatch = Цей сервер не сумісний з вашим типом збірки.
|
server.kicked.typeMismatch = Цей сервер не сумісний із вашим типом збірки.
|
||||||
server.kicked.playerLimit = Цей сервер — заповнений. Дочекайтесь вільного місця.
|
server.kicked.playerLimit = Цей сервер — заповнений. Дочекайтесь вільного місця.
|
||||||
server.kicked.recentKick = Нещодавно вас вигнали.\nПочекайте трохи перед наступним під’єднанням.
|
server.kicked.recentKick = Нещодавно вас вигнали.\nПочекайте трохи перед наступним під’єднанням.
|
||||||
server.kicked.nameInUse = На цьому сервері вже є хтось з таким ім’ям.
|
server.kicked.nameInUse = На цьому сервері вже є хтось із таким ім’ям.
|
||||||
server.kicked.nameEmpty = Ваше ім’я має містити принаймні один символ або цифру.
|
server.kicked.nameEmpty = Ваше ім’я має містити принаймні один символ або цифру.
|
||||||
server.kicked.idInUse = Ви вже на цьому сервері! Під’єднанням двох облікових записів не дозволяється.
|
server.kicked.idInUse = Ви вже на цьому сервері! Під’єднанням двох облікових записів не дозволяється.
|
||||||
server.kicked.customClient = Цей сервер не підтримує користувацькі збірки. Завантажте офіційну версію.
|
server.kicked.customClient = Цей сервер не підтримує користувацькі збірки. Завантажте офіційну версію.
|
||||||
server.kicked.gameover = Гру завершено!
|
server.kicked.gameover = Гру завершено!
|
||||||
server.kicked.serverRestarting = Сервер перезавантажується
|
server.kicked.serverRestarting = Сервер перезавантажується
|
||||||
server.versions = Ваша версія:[accent] {0}[]\nВерсія на сервері:[accent] {1}[]
|
server.versions = Ваша версія:[accent] {0}[]\nВерсія на сервері:[accent] {1}[]
|
||||||
host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [lightgray]WiFi або локальній мережах[], повинні побачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки планети через IP, то потрібно зробити[accent] переадресація порту[].\n\n[lightgray]Примітка. Якщо у вас виникли проблеми з приєднанням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дозволяють виявити сервер.
|
host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які перебувають в тій же [lightgray]WiFi або локальній мережах[], мають побачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоби люди могли приєднуватися з будь-якої точки планети через IP, то потрібно зробити[accent] переадресація порту[].\n\n[lightgray]Примітка. Якщо у вас виникли проблеми з приєднанням до вашої локальної гри, переконайтеся, що ви надали Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. Зауважте, що публічні мережі іноді не дають змогу виявити сервер.
|
||||||
join.info = Тут ви можете ввести [accent]IP сервера[] для під’єднання або знайти сервери у [accent]локальній[] чи [accent]глобальній мережі[] для приєднання до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Це не є автоматичним глобальним списком серверів; якщо ви хочете приєднатися до когось через IP, вам доведеться попросити власника сервера дати свій ip.
|
join.info = Тут ви можете ввести [accent]IP сервера[] для під’єднання або знайти сервери у [accent]локальній[] чи [accent]глобальній мережі[] для приєднання до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[lightgray] Примітка. Це не є автоматичним глобальним списком серверів; якщо ви хочете приєднатися до когось через IP, вам доведеться попросити власника сервера дати свій ip.
|
||||||
hostserver = Запустити багатокористувацький сервер
|
hostserver = Запустити багатокористувацький сервер
|
||||||
invitefriends = Запросити друзів
|
invitefriends = Запросити друзів
|
||||||
hostserver.mobile = Запустити\nсервер
|
hostserver.mobile = Запустити сервер
|
||||||
host = Запустити
|
host = Запустити
|
||||||
hosting = [accent]Відкриття сервера…
|
hosting = [accent]Відкриття сервера…
|
||||||
hosts.refresh = Оновити
|
hosts.refresh = Оновити
|
||||||
@@ -260,25 +263,25 @@ ok = Гаразд
|
|||||||
open = Відкрити
|
open = Відкрити
|
||||||
customize = Налаштувати правила
|
customize = Налаштувати правила
|
||||||
cancel = Скасувати
|
cancel = Скасувати
|
||||||
openlink = Відкрити посилання
|
openlink = Перейти за посиланням
|
||||||
copylink = Скопіювати посилання
|
copylink = Скопіювати посилання
|
||||||
back = Назад
|
back = Назад
|
||||||
data.export = Вивантажити дані
|
data.export = Вивантажити дані
|
||||||
data.import = Завантажити дані
|
data.import = Завантажити дані
|
||||||
data.openfolder = Відкрити теку з даними
|
data.openfolder = Відчинити теку з даними
|
||||||
data.exported = Дані вивантажено.
|
data.exported = Дані вивантажено.
|
||||||
data.invalid = Це не дійсні ігрові дані.
|
data.invalid = Це не дійсні ігрові дані.
|
||||||
data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється.
|
data.import.confirm = Вивантаження зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЯк тільки дані імпортуються, гра негайно закриється.
|
||||||
quit.confirm = Ви дійсно хочете вийти?
|
quit.confirm = Ви дійсно хочете вийти?
|
||||||
quit.confirm.tutorial = Ви впевнені, що знаєте що робите?\nНавчання можна пройти наново[accent] Налаштування->Гра->Пройти навчання ще раз.[]
|
quit.confirm.tutorial = Ви впевнені, що знаєте що робите?\nНавчання можна пройти наново[accent] Налаштування->Гра->Пройти навчання ще раз.[]
|
||||||
loading = [accent]Завантаження…
|
loading = [accent]Завантаження…
|
||||||
reloading = [accent]Перезавантаження модифікацій…
|
reloading = [accent]Перезавантаження модифікацій…
|
||||||
saving = [accent]Збереження…
|
saving = [accent]Збереження…
|
||||||
respawn = [accent][[{0}][], щоб відродитися в ядрі
|
respawn = [accent][[{0}][], щоби відродитися в ядрі
|
||||||
cancelbuilding = [accent][[{0}][], щоб очистити план
|
cancelbuilding = [accent][[{0}][], щоб очистити план
|
||||||
selectschematic = [accent][[{0}][], щоб вибрати та скопіювати
|
selectschematic = [accent][[{0}][], щоби вибрати та скопіювати
|
||||||
pausebuilding = [accent][[{0}][], щоб призупинити будування
|
pausebuilding = [accent][[{0}][], щоби призупинити будування
|
||||||
resumebuilding = [scarlet][[{0}][], щоб продовжити будування
|
resumebuilding = [scarlet][[{0}][], щоби продовжити будування
|
||||||
wave = [accent]Хвиля {0}
|
wave = [accent]Хвиля {0}
|
||||||
wave.waiting = [lightgray]Наступна хвиля\nчерез {0}
|
wave.waiting = [lightgray]Наступна хвиля\nчерез {0}
|
||||||
wave.waveInProgress = [lightgray]Хвиля триває
|
wave.waveInProgress = [lightgray]Хвиля триває
|
||||||
@@ -294,11 +297,11 @@ builtin = Вбудована
|
|||||||
map.delete.confirm = Ви дійсно хочете видалити цю мапу? Цю дію неможливо буде скасувати!
|
map.delete.confirm = Ви дійсно хочете видалити цю мапу? Цю дію неможливо буде скасувати!
|
||||||
map.random = [accent]Випадкова мапа
|
map.random = [accent]Випадкова мапа
|
||||||
map.nospawn = Ця мапа не має жодного ядра для появи гравця! Додайте [accent]помаранчеве[] ядро до цієї мапи в редакторі.
|
map.nospawn = Ця мапа не має жодного ядра для появи гравця! Додайте [accent]помаранчеве[] ядро до цієї мапи в редакторі.
|
||||||
map.nospawn.pvp = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [scarlet]не помаранчеве[] ядро до цієї мапи в редакторі.
|
map.nospawn.pvp = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [scarlet]не помаранчеве[] ядро до цієї мапи в редакторі.
|
||||||
map.nospawn.attack = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [scarlet]червоне[] ядро до цієї мапи в редакторі.
|
map.nospawn.attack = У цієї мапи немає ворожих ядер, у яких гравець може з’явитися! Додайте [scarlet]червоне[] ядро до цієї мапи в редакторі.
|
||||||
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
||||||
workshop.update = Оновити предмет
|
workshop.update = Оновити предмет
|
||||||
workshop.error = Помилка при отриманні інформації з Майстерні: {0}
|
workshop.error = Помилка під час отримання інформації з Майстерні: {0}
|
||||||
map.publish.confirm = Ви дійсно хочете опублікувати цю мапу?\n\n[lightgray]Спершу переконайтеся, що ви згодні з Ліцензійною угодою Steam, або ваші мапи не з’являться!
|
map.publish.confirm = Ви дійсно хочете опублікувати цю мапу?\n\n[lightgray]Спершу переконайтеся, що ви згодні з Ліцензійною угодою Steam, або ваші мапи не з’являться!
|
||||||
workshop.menu = Виберіть, що ви хочете зробити з цим предметом.
|
workshop.menu = Виберіть, що ви хочете зробити з цим предметом.
|
||||||
workshop.info = Інформація про предмет
|
workshop.info = Інформація про предмет
|
||||||
@@ -307,7 +310,7 @@ eula = Ліцензійна угода Steam
|
|||||||
missing = Цей предмет було видалено або переміщено.\n[lightgray]Список Майстерні тепер автоматично від’єднано.
|
missing = Цей предмет було видалено або переміщено.\n[lightgray]Список Майстерні тепер автоматично від’єднано.
|
||||||
publishing = [accent]Публікація…
|
publishing = [accent]Публікація…
|
||||||
publish.confirm = Ви дійсно хочете опублікувати це?\n\n[lightgray]Переконайтеся, що ви спочатку погоджуєтеся з EULA Майстерні, або ваші предмети не з’являться!
|
publish.confirm = Ви дійсно хочете опублікувати це?\n\n[lightgray]Переконайтеся, що ви спочатку погоджуєтеся з EULA Майстерні, або ваші предмети не з’являться!
|
||||||
publish.error = Виникла помилка при публікації предмета: {0}
|
publish.error = Виникла помилка під час публікації предмета: {0}
|
||||||
steam.error = Не вдалося ініціалізувати сервіси Steam.\nПомилка: {0}
|
steam.error = Не вдалося ініціалізувати сервіси Steam.\nПомилка: {0}
|
||||||
|
|
||||||
editor.brush = Пензлик
|
editor.brush = Пензлик
|
||||||
@@ -317,11 +320,11 @@ editor.oregen.info = Генерація руд:
|
|||||||
editor.mapinfo = Інформація про мапу
|
editor.mapinfo = Інформація про мапу
|
||||||
editor.author = Автор:
|
editor.author = Автор:
|
||||||
editor.description = Опис:
|
editor.description = Опис:
|
||||||
editor.nodescription = Мапа повинна мати щонайменше 4 символи для публікації.
|
editor.nodescription = Мапа мусить мати щонайменше 4 символи для публікації.
|
||||||
editor.waves = Хвилі:
|
editor.waves = Хвилі:
|
||||||
editor.rules = Правила:
|
editor.rules = Правила:
|
||||||
editor.generation = Генерація:
|
editor.generation = Генерація:
|
||||||
editor.ingame = Редагувати у грі
|
editor.ingame = Редагувати в грі
|
||||||
editor.publish.workshop = Опублікувати в Майстерні Steam
|
editor.publish.workshop = Опублікувати в Майстерні Steam
|
||||||
editor.newmap = Нова мапа
|
editor.newmap = Нова мапа
|
||||||
workshop = Майстерня
|
workshop = Майстерня
|
||||||
@@ -338,9 +341,12 @@ waves.preview = Попередній перегляд
|
|||||||
waves.edit = Редагувати…
|
waves.edit = Редагувати…
|
||||||
waves.copy = Копіювати в буфер обміну
|
waves.copy = Копіювати в буфер обміну
|
||||||
waves.load = Завантажити з буфера обміну
|
waves.load = Завантажити з буфера обміну
|
||||||
waves.invalid = Недійсні хвилі у буфері обміну.
|
waves.invalid = Недійсні хвилі в буфері обміну.
|
||||||
waves.copied = Хвилі скопійовані.
|
waves.copied = Хвилі скопійовані.
|
||||||
waves.none = Противники не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею.
|
waves.none = Противники не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею.
|
||||||
|
wavemode.counts = кількість
|
||||||
|
wavemode.totals = усього
|
||||||
|
wavemode.health = здоров’я
|
||||||
editor.default = [lightgray]<За замовчуванням>
|
editor.default = [lightgray]<За замовчуванням>
|
||||||
details = Подробиці…
|
details = Подробиці…
|
||||||
edit = Редагувати…
|
edit = Редагувати…
|
||||||
@@ -350,11 +356,11 @@ editor.removeunit = Видалити бойову одиницю
|
|||||||
editor.teams = Команди
|
editor.teams = Команди
|
||||||
editor.errorload = Помилка завантаження зображення.
|
editor.errorload = Помилка завантаження зображення.
|
||||||
editor.errorsave = Помилка збереження зображення.
|
editor.errorsave = Помилка збереження зображення.
|
||||||
editor.errorimage = Це зображення, а не мапа.\n\nЯкщо ви хочете імпортувати застарілу мапу, то використовуйте кнопку «Імпортувати застарілу мапу» у редакторі.
|
editor.errorimage = Це зображення, а не мапа.\n\nЯкщо ви хочете імпортувати застарілу мапу, то використовуйте кнопку «Імпортувати застарілу мапу» в редакторі.
|
||||||
editor.errorlegacy = Ця мапа занадто стара і використовує попередній формат мапи, який більше не підтримується.
|
editor.errorlegacy = Ця мапа занадто стара і використовує попередній формат мапи, який більше не підтримується.
|
||||||
editor.errornot = Це не мапа.
|
editor.errornot = Це не мапа.
|
||||||
editor.errorheader = Цей файл мапи недійсний або пошкоджений.
|
editor.errorheader = Цей файл мапи недійсний або пошкоджений.
|
||||||
editor.errorname = Мапа не має назви. Може Ви намагаєтеся завантажити збереження?
|
editor.errorname = Мапа не має назви. Може, ви намагаєтеся завантажити збереження?
|
||||||
editor.update = Оновити
|
editor.update = Оновити
|
||||||
editor.randomize = Випадково
|
editor.randomize = Випадково
|
||||||
editor.apply = Застосувати
|
editor.apply = Застосувати
|
||||||
@@ -365,7 +371,7 @@ editor.savemap = Зберегти мапу
|
|||||||
editor.saved = Збережено!
|
editor.saved = Збережено!
|
||||||
editor.save.noname = Ваша мапа не має назви! Установіть його в «Інформація про мапу».
|
editor.save.noname = Ваша мапа не має назви! Установіть його в «Інформація про мапу».
|
||||||
editor.save.overwrite = Ваша мапа перезаписує вбудовану мапу! Виберіть іншу назву в «Інформація про мапу».
|
editor.save.overwrite = Ваша мапа перезаписує вбудовану мапу! Виберіть іншу назву в «Інформація про мапу».
|
||||||
editor.import.exists = [scarlet]Неможливо імпортувати:[] вбудована мапа з назвою «{0}» вже існує!
|
editor.import.exists = [scarlet]Неможливо імпортувати:[] вбудована мапа з назвою «{0}» вже є!
|
||||||
editor.import = Імпорт…
|
editor.import = Імпорт…
|
||||||
editor.importmap = Імпортувати мапу
|
editor.importmap = Імпортувати мапу
|
||||||
editor.importmap.description = Імпортувати вже наявну мапу
|
editor.importmap.description = Імпортувати вже наявну мапу
|
||||||
@@ -380,12 +386,12 @@ editor.exportimage = Експорт зображення місцевості
|
|||||||
editor.exportimage.description = Експортувати файл зображення, що містить лише основний рельєф місцевості
|
editor.exportimage.description = Експортувати файл зображення, що містить лише основний рельєф місцевості
|
||||||
editor.loadimage = Завантажити\nзображення
|
editor.loadimage = Завантажити\nзображення
|
||||||
editor.saveimage = Зберегти\nзображення
|
editor.saveimage = Зберегти\nзображення
|
||||||
editor.unsaved = [scarlet]У вас є незбережені зміни![]\nВи впевнені, що хочете вийти?
|
editor.unsaved = Ви впевнені, що хочете вийти?\n[scarlet]Незбережені зміни буде втрачено назавжди![]
|
||||||
editor.resizemap = Змінити розмір мапи
|
editor.resizemap = Змінити розмір мапи
|
||||||
editor.mapname = Назва мапи:
|
editor.mapname = Назва мапи:
|
||||||
editor.overwrite = [accent]Попередження!\nЦе перезаписує наявну мапу.
|
editor.overwrite = [accent]Попередження!\nЦе перезаписує наявну мапу.
|
||||||
editor.overwrite.confirm = [scarlet]Попередження![] Мапа з такою назвою вже існує. Ви впевнені, що хочете переписати її?\n«[accent]{0}[]»
|
editor.overwrite.confirm = [scarlet]Попередження![] Мапа з такою назвою вже є. Ви впевнені, що хочете переписати її?\n«[accent]{0}[]»
|
||||||
editor.exists = Мапа з такою назвою вже існує.
|
editor.exists = Мапа з такою назвою вже є.
|
||||||
editor.selectmap = Виберіть мапу для завантаження:
|
editor.selectmap = Виберіть мапу для завантаження:
|
||||||
|
|
||||||
toolmode.replace = Замінити
|
toolmode.replace = Замінити
|
||||||
@@ -398,7 +404,7 @@ toolmode.square = Прямокутник
|
|||||||
toolmode.square.description = Прямокутна кисть.
|
toolmode.square.description = Прямокутна кисть.
|
||||||
toolmode.eraseores = Видалення руд
|
toolmode.eraseores = Видалення руд
|
||||||
toolmode.eraseores.description = Видалити тільки руди.
|
toolmode.eraseores.description = Видалити тільки руди.
|
||||||
toolmode.fillteams = Змінити блок в команді
|
toolmode.fillteams = Змінити блок у команді
|
||||||
toolmode.fillteams.description = Змінює належність\nблоків до команди.
|
toolmode.fillteams.description = Змінює належність\nблоків до команди.
|
||||||
toolmode.drawteams = Змінити команду блока
|
toolmode.drawteams = Змінити команду блока
|
||||||
toolmode.drawteams.description = Змінює належність\nблока до команди.
|
toolmode.drawteams.description = Змінює належність\nблока до команди.
|
||||||
@@ -447,7 +453,7 @@ load = Завантажити
|
|||||||
save = Зберегти
|
save = Зберегти
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Затримка: {0} мс
|
ping = Затримка: {0} мс
|
||||||
language.restart = Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.
|
language.restart = Будь ласка, перезапустіть свою гру, щоби налаштування мови набули чинності.
|
||||||
settings = Налаштування
|
settings = Налаштування
|
||||||
tutorial = Навчання
|
tutorial = Навчання
|
||||||
tutorial.retake = Пройти навчання ще раз
|
tutorial.retake = Пройти навчання ще раз
|
||||||
@@ -459,7 +465,7 @@ abandon.text = Ця зона і всі її ресурси будуть утра
|
|||||||
locked = Заблоковано
|
locked = Заблоковано
|
||||||
complete = [lightgray]Необхідно:
|
complete = [lightgray]Необхідно:
|
||||||
requirement.wave = Досягніть хвилі {0} у зоні «{1}»
|
requirement.wave = Досягніть хвилі {0} у зоні «{1}»
|
||||||
requirement.core = Знищте вороже ядро у зоні «{0}»
|
requirement.core = Знищте вороже ядро в зоні «{0}»
|
||||||
requirement.unlock = Розблокуйте {0}
|
requirement.unlock = Розблокуйте {0}
|
||||||
resume = Відновити зону:\n[lightgray]{0}
|
resume = Відновити зону:\n[lightgray]{0}
|
||||||
bestwave = [lightgray]Найкраща хвиля: {0}
|
bestwave = [lightgray]Найкраща хвиля: {0}
|
||||||
@@ -468,7 +474,7 @@ launch.text = Запуск
|
|||||||
launch.title = Запуск вдалий
|
launch.title = Запуск вдалий
|
||||||
launch.next = [lightgray]наступна можливість буде на {0}-тій хвилі
|
launch.next = [lightgray]наступна можливість буде на {0}-тій хвилі
|
||||||
launch.unable2 = [scarlet]ЗАПУСК неможливий.[]
|
launch.unable2 = [scarlet]ЗАПУСК неможливий.[]
|
||||||
launch.confirm = Це видалить всі ресурси у вашому ядрі.\nВи не зможете повернутися до цієї бази.
|
launch.confirm = Це видалить усі ресурси у вашому ядрі.\nВи не зможете повернутися до цієї бази.
|
||||||
launch.skip.confirm = Якщо ви пропустите зараз, ви не зможете не запускати до більш пізніх хвиль.
|
launch.skip.confirm = Якщо ви пропустите зараз, ви не зможете не запускати до більш пізніх хвиль.
|
||||||
uncover = Розкрити
|
uncover = Розкрити
|
||||||
configure = Налаштувати вивантаження
|
configure = Налаштувати вивантаження
|
||||||
@@ -476,7 +482,7 @@ loadout = Вивантаження
|
|||||||
resources = Ресурси
|
resources = Ресурси
|
||||||
bannedblocks = Заборонені блоки
|
bannedblocks = Заборонені блоки
|
||||||
addall = Додати все
|
addall = Додати все
|
||||||
configure.invalid = Кількість повинна бути числом між 0 та {0}.
|
configure.invalid = Кількість має бути числом між 0 та {0}.
|
||||||
zone.unlocked = Зона «[lightgray]{0}» тепер розблокована.
|
zone.unlocked = Зона «[lightgray]{0}» тепер розблокована.
|
||||||
zone.requirement.complete = Вимоги до зони «{0}» виконані:[lightgray]\n{1}
|
zone.requirement.complete = Вимоги до зони «{0}» виконані:[lightgray]\n{1}
|
||||||
zone.resources = [lightgray]Виявлені ресурси:
|
zone.resources = [lightgray]Виявлені ресурси:
|
||||||
@@ -489,7 +495,7 @@ boss.health = Здоров’я босу
|
|||||||
connectfail = [crimson]Помилка з’єднання:\n\n[accent]{0}
|
connectfail = [crimson]Помилка з’єднання:\n\n[accent]{0}
|
||||||
error.unreachable = Сервер не є доступним.\nЧи правильно написана адреса?
|
error.unreachable = Сервер не є доступним.\nЧи правильно написана адреса?
|
||||||
error.invalidaddress = Некоректна адреса.
|
error.invalidaddress = Некоректна адреса.
|
||||||
error.timedout = Час очікування вийшов!\nПереконайтеся, що адреса коректна і що власник сервера налаштував переадресацію порту!
|
error.timedout = Час очікування вийшов!\nПереконайтеся, що адреса коректна й що власник сервера налаштував переадресацію порту!
|
||||||
error.mismatch = Помилка пакету:\nможлива невідповідність версії клієнта/сервера.\nПереконайтеся, що у вас та у власника сервера встановлена остання версія Mindustry!
|
error.mismatch = Помилка пакету:\nможлива невідповідність версії клієнта/сервера.\nПереконайтеся, що у вас та у власника сервера встановлена остання версія Mindustry!
|
||||||
error.alreadyconnected = Ви вже під’єдналися.
|
error.alreadyconnected = Ви вже під’єдналися.
|
||||||
error.mapnotfound = Файл мапи не знайдено!
|
error.mapnotfound = Файл мапи не знайдено!
|
||||||
@@ -497,6 +503,18 @@ error.io = Мережева помилка введення-виведення.
|
|||||||
error.any = Невідома мережева помилка
|
error.any = Невідома мережева помилка
|
||||||
error.bloom = Не вдалося ініціалізувати світіння.\nВаш пристрій, мабуть, не підтримує це.
|
error.bloom = Не вдалося ініціалізувати світіння.\nВаш пристрій, мабуть, не підтримує це.
|
||||||
|
|
||||||
|
weather.rain.name = Дощ
|
||||||
|
weather.snow.name = Сніг
|
||||||
|
weather.sandstorm.name = Піщана буря
|
||||||
|
weather.sporestorm.name = Спорова буря
|
||||||
|
|
||||||
|
sectors.unexplored = [lightgray]Не досліджено
|
||||||
|
sectors.resources = Ресурси:
|
||||||
|
sectors.production = Виробництво:
|
||||||
|
sectors.stored = Зберігає:
|
||||||
|
sectors.resume = Продовжити
|
||||||
|
sectors.launch = Запуск
|
||||||
|
|
||||||
sector.groundZero.name = Відправний пункт
|
sector.groundZero.name = Відправний пункт
|
||||||
sector.craters.name = Кратери
|
sector.craters.name = Кратери
|
||||||
sector.frozenForest.name = Крижаний ліс
|
sector.frozenForest.name = Крижаний ліс
|
||||||
@@ -516,7 +534,7 @@ sector.craters.description = У цьому кратері накопичилас
|
|||||||
sector.ruinousShores.description = Саме берегова лінія є минулим цих відходів. Колись у цьому місці розташувався береговий оборонний масив. Проте залишилося не так багато чого. Тільки основні оборонні споруди залишилися неушкодженими, а все інше перетворилося на брухт.\nПродовжуйте експансію назовні. Повторно розкрийте технології.
|
sector.ruinousShores.description = Саме берегова лінія є минулим цих відходів. Колись у цьому місці розташувався береговий оборонний масив. Проте залишилося не так багато чого. Тільки основні оборонні споруди залишилися неушкодженими, а все інше перетворилося на брухт.\nПродовжуйте експансію назовні. Повторно розкрийте технології.
|
||||||
sector.stainedMountains.description = Якщо йти далі у вглиб материка, то можна побачити гори, які ще не заражені спорами.\nВидобудьте надлишковий титан у цій місцевості. Дізнайтеся, як використовувати його.\n\nНа жаль, тут більше противників ніж в інших місцевостях. Не дайте їм часу надіслати свої найсильніші одиниці.
|
sector.stainedMountains.description = Якщо йти далі у вглиб материка, то можна побачити гори, які ще не заражені спорами.\nВидобудьте надлишковий титан у цій місцевості. Дізнайтеся, як використовувати його.\n\nНа жаль, тут більше противників ніж в інших місцевостях. Не дайте їм часу надіслати свої найсильніші одиниці.
|
||||||
sector.overgrowth.description = Ближче до джерела спор є територія, що заросла.\nНе дивуйтеся, що противник встановив тут свій форпост. Побудуйте бойові одиниці під кодовою назвою «Титан». Зруйнуйте її. Поверніть те, що колись належало нам.
|
sector.overgrowth.description = Ближче до джерела спор є територія, що заросла.\nНе дивуйтеся, що противник встановив тут свій форпост. Побудуйте бойові одиниці під кодовою назвою «Титан». Зруйнуйте її. Поверніть те, що колись належало нам.
|
||||||
sector.tarFields.description = Між горами та пустелею простягається окраїна зони видобутку нафти. Це один з небагатьох районів із корисними для використання запасами смоли.\nНе зважаючи на те, що територія покинута, вона має поблизу небезпечні сили противника. Не варто їх недооцінювати.\n\n[lightgray]Якщо можливо, дослідіть технологію перероблювання нафти.
|
sector.tarFields.description = Між горами та пустелею простягається окраїна зони видобутку нафти. Це один із небагатьох районів із корисними для використання запасами смоли.\nНе зважаючи на те, що територія покинута, вона має поблизу небезпечні сили противника. Не варто їх недооцінювати.\n\n[lightgray]Якщо можливо, дослідіть технологію перероблювання нафти.
|
||||||
sector.desolateRift.description = Надзвичайно небезпечна зона. Багато ресурсів, але мало місця. Високий ризик знищення. Евакуюватися потрібно якомога швидше. Не розслабляйтеся між ворожими атаками та знайдіть ахіллесову п’яту супротивника.
|
sector.desolateRift.description = Надзвичайно небезпечна зона. Багато ресурсів, але мало місця. Високий ризик знищення. Евакуюватися потрібно якомога швидше. Не розслабляйтеся між ворожими атаками та знайдіть ахіллесову п’яту супротивника.
|
||||||
sector.nuclearComplex.description = Колишній об’єкт для виробництва та перероблювання торію було зведено до руїн.\n[lightgray]Дослідіть торій та його нескінченну кількість застосувань.\n\n Противник, який постійно шукає нападників, присутній тут у великій кількості, тому не баріться з евакуацією.
|
sector.nuclearComplex.description = Колишній об’єкт для виробництва та перероблювання торію було зведено до руїн.\n[lightgray]Дослідіть торій та його нескінченну кількість застосувань.\n\n Противник, який постійно шукає нападників, присутній тут у великій кількості, тому не баріться з евакуацією.
|
||||||
|
|
||||||
@@ -532,7 +550,9 @@ settings.sound = Звук
|
|||||||
settings.graphics = Графіка
|
settings.graphics = Графіка
|
||||||
settings.cleardata = Очистити дані…
|
settings.cleardata = Очистити дані…
|
||||||
settings.clear.confirm = Ви дійсно хочете очистити ці дані?\nЦю дію не можна скасувати!
|
settings.clear.confirm = Ви дійсно хочете очистити ці дані?\nЦю дію не можна скасувати!
|
||||||
settings.clearall.confirm = [scarlet]УВАГА![]\nЦе очистить усі дані, включаючи збереження, мапи, розблоковане та налаштування керування.\nПісля натискання «Гаразд» гра видалить усі дані та автоматично закриється.
|
settings.clearall.confirm = [scarlet]УВАГА![]\nЦе очистить усі дані, включно із збереженнями, мапами, розблокованим та налаштуваннями керування.\nПісля натискання «Гаразд» гра видалить усі дані та автоматично закриється.
|
||||||
|
settings.clearsaves.confirm = Ви справді хочете видалити всі ваші збереження?
|
||||||
|
settings.clearsaves = Очистити збереження
|
||||||
paused = [accent]< Пауза>
|
paused = [accent]< Пауза>
|
||||||
clear = Очистити
|
clear = Очистити
|
||||||
banned = [scarlet]Заблоковано
|
banned = [scarlet]Заблоковано
|
||||||
@@ -558,8 +578,11 @@ blocks.itemsmoved = Швидкість переміщення
|
|||||||
blocks.launchtime = Час між запусками
|
blocks.launchtime = Час між запусками
|
||||||
blocks.shootrange = Радіус дії
|
blocks.shootrange = Радіус дії
|
||||||
blocks.size = Розмір
|
blocks.size = Розмір
|
||||||
|
blocks.displaysize = Розмір дисплею
|
||||||
blocks.liquidcapacity = Рідинна місткість
|
blocks.liquidcapacity = Рідинна місткість
|
||||||
blocks.powerrange = Діапазон передачі енергії
|
blocks.powerrange = Радіус передачі енергії
|
||||||
|
blocks.linkrange = Радіус з’єднання
|
||||||
|
blocks.instructions = Інструкції
|
||||||
blocks.powerconnections = Максимальна кількість з’єднань
|
blocks.powerconnections = Максимальна кількість з’єднань
|
||||||
blocks.poweruse = Енергії використовує
|
blocks.poweruse = Енергії використовує
|
||||||
blocks.powerdamage = Енергії за од. шкоди
|
blocks.powerdamage = Енергії за од. шкоди
|
||||||
@@ -575,6 +598,7 @@ blocks.boosteffect = Прискорювальний ефект
|
|||||||
blocks.maxunits = Максимальна кількість активних одиниць
|
blocks.maxunits = Максимальна кількість активних одиниць
|
||||||
blocks.health = Здоров’я
|
blocks.health = Здоров’я
|
||||||
blocks.buildtime = Час будування
|
blocks.buildtime = Час будування
|
||||||
|
blocks.maxconsecutive = Максимальна послідовність
|
||||||
blocks.buildcost = Вартість будування
|
blocks.buildcost = Вартість будування
|
||||||
blocks.inaccuracy = Розкид
|
blocks.inaccuracy = Розкид
|
||||||
blocks.shots = Постріли
|
blocks.shots = Постріли
|
||||||
@@ -582,7 +606,7 @@ blocks.reload = Постріли/секунду
|
|||||||
blocks.ammo = Боєприпаси
|
blocks.ammo = Боєприпаси
|
||||||
|
|
||||||
bar.drilltierreq = Потребується кращий бур
|
bar.drilltierreq = Потребується кращий бур
|
||||||
bar.noresources = Відсутні ресурси
|
bar.noresources = Бракує ресурсів
|
||||||
bar.corereq = Необхідне основне ядро
|
bar.corereq = Необхідне основне ядро
|
||||||
bar.drillspeed = Швидкість буріння: {0} за с.
|
bar.drillspeed = Швидкість буріння: {0} за с.
|
||||||
bar.pumpspeed = Швидкість викачування: {0} за с.
|
bar.pumpspeed = Швидкість викачування: {0} за с.
|
||||||
@@ -622,7 +646,9 @@ unit.liquidunits = одиниць рідини
|
|||||||
unit.powerunits = одиниць енергії
|
unit.powerunits = одиниць енергії
|
||||||
unit.degrees = град.
|
unit.degrees = град.
|
||||||
unit.seconds = с
|
unit.seconds = с
|
||||||
|
unit.minutes = хв
|
||||||
unit.persecond = за секунду
|
unit.persecond = за секунду
|
||||||
|
unit.perminute = за хвилину
|
||||||
unit.timesspeed = x швидкість
|
unit.timesspeed = x швидкість
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = предм.
|
unit.items = предм.
|
||||||
@@ -638,7 +664,7 @@ category.shooting = Стрільба
|
|||||||
category.optional = Додаткові поліпшення
|
category.optional = Додаткові поліпшення
|
||||||
setting.landscape.name = Тільки альбомний (горизонтальний) режим
|
setting.landscape.name = Тільки альбомний (горизонтальний) режим
|
||||||
setting.shadows.name = Тіні
|
setting.shadows.name = Тіні
|
||||||
setting.blockreplace.name = Пропозиції щодо автоматичної заміни блоків
|
setting.blockreplace.name = Пропонування щодо автоматичної заміни блоків
|
||||||
setting.linear.name = Лінійна фільтрація
|
setting.linear.name = Лінійна фільтрація
|
||||||
setting.hints.name = Підказки
|
setting.hints.name = Підказки
|
||||||
setting.flow.name = Показувати темп швидкості ресурсів
|
setting.flow.name = Показувати темп швидкості ресурсів
|
||||||
@@ -649,7 +675,7 @@ setting.animatedshields.name = Анімаційні щити
|
|||||||
setting.antialias.name = Згладжування[lightgray] (потребує перезапуску)[]
|
setting.antialias.name = Згладжування[lightgray] (потребує перезапуску)[]
|
||||||
setting.playerindicators.name = Позначки гравців
|
setting.playerindicators.name = Позначки гравців
|
||||||
setting.indicators.name = Позначки противників
|
setting.indicators.name = Позначки противників
|
||||||
setting.autotarget.name = Авто-стрільба
|
setting.autotarget.name = Автострільба
|
||||||
setting.keyboard.name = Миш+Керування з клавіатури
|
setting.keyboard.name = Миш+Керування з клавіатури
|
||||||
setting.touchscreen.name = Керування сенсорним екраном
|
setting.touchscreen.name = Керування сенсорним екраном
|
||||||
setting.fpscap.name = Максимальний FPS
|
setting.fpscap.name = Максимальний FPS
|
||||||
@@ -681,11 +707,11 @@ setting.blockselectkeys.name = Показувати клавіші вибору
|
|||||||
setting.vsync.name = Вертикальна синхронізація
|
setting.vsync.name = Вертикальна синхронізація
|
||||||
setting.pixelate.name = Пікселізація
|
setting.pixelate.name = Пікселізація
|
||||||
setting.minimap.name = Показувати мінімапу
|
setting.minimap.name = Показувати мінімапу
|
||||||
setting.coreitems.name = Показувати предмети в ядрі (в роботі)
|
setting.coreitems.name = Показувати предмети в ядрі (дороблюється)
|
||||||
setting.position.name = Показувати координати гравця
|
setting.position.name = Показувати координати гравця
|
||||||
setting.musicvol.name = Гучність музики
|
setting.musicvol.name = Гучність музики
|
||||||
setting.atmosphere.name = Показувати планетарну атмосферу
|
setting.atmosphere.name = Показувати планетарну атмосферу
|
||||||
setting.ambientvol.name = Звуки навколишнього середовища
|
setting.ambientvol.name = Звуки довкілля
|
||||||
setting.mutemusic.name = Заглушити музику
|
setting.mutemusic.name = Заглушити музику
|
||||||
setting.sfxvol.name = Гучність звукових ефектів
|
setting.sfxvol.name = Гучність звукових ефектів
|
||||||
setting.mutesound.name = Заглушити звук
|
setting.mutesound.name = Заглушити звук
|
||||||
@@ -697,7 +723,7 @@ setting.chatopacity.name = Непрозорість чату
|
|||||||
setting.lasersopacity.name = Непрозорість лазерів енергопостачання
|
setting.lasersopacity.name = Непрозорість лазерів енергопостачання
|
||||||
setting.bridgeopacity.name = Непрозорість мостів
|
setting.bridgeopacity.name = Непрозорість мостів
|
||||||
setting.playerchat.name = Показувати хмару чата над гравцями
|
setting.playerchat.name = Показувати хмару чата над гравцями
|
||||||
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити у Налаштування->Гра->Загальнодоступність гри.
|
public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри.
|
||||||
public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри.
|
public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри.
|
||||||
uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд…
|
uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд…
|
||||||
uiscale.cancel = Скасувати & Вийти
|
uiscale.cancel = Скасувати & Вийти
|
||||||
@@ -711,6 +737,7 @@ category.blocks.name = Вибір блока
|
|||||||
command.attack = Атака
|
command.attack = Атака
|
||||||
command.rally = Точка збору
|
command.rally = Точка збору
|
||||||
command.retreat = Відступити
|
command.retreat = Відступити
|
||||||
|
command.idle = Бездіяти
|
||||||
placement.blockselectkeys = \n[lightgray]Ключ: [{0},
|
placement.blockselectkeys = \n[lightgray]Ключ: [{0},
|
||||||
keybind.respawn.name = Відродження
|
keybind.respawn.name = Відродження
|
||||||
keybind.control.name = Контролювання одиниці
|
keybind.control.name = Контролювання одиниці
|
||||||
@@ -722,7 +749,8 @@ keybind.toggle_power_lines.name = Показувати лазери енерго
|
|||||||
keybind.toggle_block_status.name = Показувати стан блоків
|
keybind.toggle_block_status.name = Показувати стан блоків
|
||||||
keybind.move_x.name = Рух по осі X
|
keybind.move_x.name = Рух по осі X
|
||||||
keybind.move_y.name = Рух по осі Y
|
keybind.move_y.name = Рух по осі Y
|
||||||
keybind.mouse_move.name = Слідкувати за мишею
|
keybind.mouse_move.name = Рухатися за мишею
|
||||||
|
keybind.pan.name = Політ камери за мишею
|
||||||
keybind.boost.name = Прискорення
|
keybind.boost.name = Прискорення
|
||||||
keybind.schematic_select.name = Вибрати ділянку
|
keybind.schematic_select.name = Вибрати ділянку
|
||||||
keybind.schematic_menu.name = Меню схем
|
keybind.schematic_menu.name = Меню схем
|
||||||
@@ -755,7 +783,7 @@ keybind.zoom.name = Наблизити
|
|||||||
keybind.menu.name = Меню
|
keybind.menu.name = Меню
|
||||||
keybind.pause.name = Пауза
|
keybind.pause.name = Пауза
|
||||||
keybind.pause_building.name = Призупинити/Продовжити будування
|
keybind.pause_building.name = Призупинити/Продовжити будування
|
||||||
keybind.minimap.name = Міні-мапа
|
keybind.minimap.name = Мінімапа
|
||||||
keybind.chat.name = Чат
|
keybind.chat.name = Чат
|
||||||
keybind.player_list.name = Список гравців
|
keybind.player_list.name = Список гравців
|
||||||
keybind.console.name = Консоль
|
keybind.console.name = Консоль
|
||||||
@@ -766,10 +794,10 @@ keybind.chat_history_prev.name = Попередня історія чату
|
|||||||
keybind.chat_history_next.name = Наступна історія чату
|
keybind.chat_history_next.name = Наступна історія чату
|
||||||
keybind.chat_scroll.name = Прокрутка чату
|
keybind.chat_scroll.name = Прокрутка чату
|
||||||
keybind.drop_unit.name = Скинути бойову одиницю
|
keybind.drop_unit.name = Скинути бойову одиницю
|
||||||
keybind.zoom_minimap.name = Збільшити міні-мапу
|
keybind.zoom_minimap.name = Збільшити мінімапу
|
||||||
mode.help.title = Опис режимів гри
|
mode.help.title = Опис режимів гри
|
||||||
mode.survival.name = Виживання
|
mode.survival.name = Виживання
|
||||||
mode.survival.description = Звичайний режим. В цьому режимі треба самим видобувати ресурси та хвилі йдуть автоматично.\n[gray]Потребуються точки появи противників для гри.
|
mode.survival.description = Звичайний режим. У цьому режимі треба самим видобувати ресурси та хвилі йдуть автоматично.\n[gray]Потребуються точки появи противників для гри.
|
||||||
mode.sandbox.name = Пісочниця
|
mode.sandbox.name = Пісочниця
|
||||||
mode.sandbox.description = Нескінченні ресурси та хвилі йдуть за вашим бажанням.
|
mode.sandbox.description = Нескінченні ресурси та хвилі йдуть за вашим бажанням.
|
||||||
mode.editor.name = Редактор
|
mode.editor.name = Редактор
|
||||||
@@ -784,28 +812,34 @@ rules.reactorexplosions = Вибухи реактора
|
|||||||
rules.wavetimer = Таймер для хвиль
|
rules.wavetimer = Таймер для хвиль
|
||||||
rules.waves = Хвилі
|
rules.waves = Хвилі
|
||||||
rules.attack = Режим атаки
|
rules.attack = Режим атаки
|
||||||
|
rules.buildai = Будування ШІ
|
||||||
rules.enemyCheat = Нескінченні ресурси для червоної команди ШІ
|
rules.enemyCheat = Нескінченні ресурси для червоної команди ШІ
|
||||||
rules.blockhealthmultiplier = Множник здоров’я блоків
|
rules.blockhealthmultiplier = Множник здоров’я блоків
|
||||||
rules.blockdamagemultiplier = Множник шкоди блоків
|
rules.blockdamagemultiplier = Множник шкоди блоків
|
||||||
rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць
|
rules.unitbuildspeedmultiplier = Множник швидкості виробництва бойових одиниць
|
||||||
rules.unithealthmultiplier = Множник здоров’я бойових одиниць
|
rules.unithealthmultiplier = Множник здоров’я бойових одиниць
|
||||||
rules.unitdamagemultiplier = Множник шкоди бойових одиниць
|
rules.unitdamagemultiplier = Множник шкоди бойових одиниць
|
||||||
rules.enemycorebuildradius = Радіус захисту для ворожого ядра:[lightgray] (плитки)
|
rules.enemycorebuildradius = Радіус оборони для ворожого ядра:[lightgray] (плитки)
|
||||||
rules.wavespacing = Інтервал хвиль:[lightgray] (секунди)
|
rules.wavespacing = Інтервал хвиль:[lightgray] (секунди)
|
||||||
rules.buildcostmultiplier = Множник затрат на будування
|
rules.buildcostmultiplier = Множник затрат на будування
|
||||||
rules.buildspeedmultiplier = Множник швидкості будування
|
rules.buildspeedmultiplier = Множник швидкості будування
|
||||||
rules.deconstructrefundmultiplier = Множник відшкодування при демонтажі
|
rules.deconstructrefundmultiplier = Множник відшкодування у разі демонтажу
|
||||||
rules.waitForWaveToEnd = Хвилі чекають на завершення попередньої
|
rules.waitForWaveToEnd = Хвилі чекають на завершення попередньої
|
||||||
rules.dropzoneradius = Радіус зони висадки:[lightgray] (у плитках)
|
rules.dropzoneradius = Радіус зони висадки:[lightgray] (у плитках)
|
||||||
rules.unitammo = Бойові одиниці потребують боєприпасів
|
rules.unitammo = Бойові одиниці потребують боєприпасів
|
||||||
rules.title.waves = Хвилі
|
rules.title.waves = Хвилі
|
||||||
rules.title.resourcesbuilding = Ресурси & будування
|
rules.title.resourcesbuilding = Ресурси й будування
|
||||||
rules.title.enemy = Противники
|
rules.title.enemy = Противники
|
||||||
rules.title.unit = Бойові одиниці
|
rules.title.unit = Бойові одиниці
|
||||||
rules.title.experimental = Експериментальне
|
rules.title.experimental = Експериментальне
|
||||||
rules.title.environment = Середовище
|
rules.title.environment = Середовище
|
||||||
rules.lighting = Світлотінь
|
rules.lighting = Світлотінь
|
||||||
|
rules.fire = Вогонь
|
||||||
|
rules.explosions = Шкода від вибухів блоків і одиниць
|
||||||
rules.ambientlight = Навколишнє світло
|
rules.ambientlight = Навколишнє світло
|
||||||
|
rules.weather = Погода
|
||||||
|
rules.weather.frequency = Повторюваність:
|
||||||
|
rules.weather.duration = Тривалість:
|
||||||
rules.solarpowermultiplier = Множник сонячної енергії
|
rules.solarpowermultiplier = Множник сонячної енергії
|
||||||
|
|
||||||
content.item.name = Предмети
|
content.item.name = Предмети
|
||||||
@@ -853,11 +887,12 @@ unit.fortress.name = Фортеця
|
|||||||
unit.nova.name = Нова
|
unit.nova.name = Нова
|
||||||
unit.pulsar.name = Пульсар
|
unit.pulsar.name = Пульсар
|
||||||
unit.quasar.name = Квазар
|
unit.quasar.name = Квазар
|
||||||
unit.crawler.name = Камікадзе
|
unit.crawler.name = Плазун
|
||||||
unit.atrax.name = Атракс
|
unit.atrax.name = Атракс
|
||||||
unit.spiroct.name = Павучник
|
unit.spiroct.name = Павучник
|
||||||
unit.arkyid.name = Аркиїд
|
unit.arkyid.name = Аркиїд
|
||||||
unit.flare.name = Фальшфейєр
|
unit.toxopid.name = Отруйник
|
||||||
|
unit.flare.name = Фальшфеєр
|
||||||
unit.horizon.name = Горизонт
|
unit.horizon.name = Горизонт
|
||||||
unit.zenith.name = Зеніт
|
unit.zenith.name = Зеніт
|
||||||
unit.antumbra.name = Тіньовик
|
unit.antumbra.name = Тіньовик
|
||||||
@@ -871,28 +906,31 @@ unit.bryde.name = Смугач Брайда
|
|||||||
unit.alpha.name = Альфа
|
unit.alpha.name = Альфа
|
||||||
unit.beta.name = Бета
|
unit.beta.name = Бета
|
||||||
unit.gamma.name = Гамма
|
unit.gamma.name = Гамма
|
||||||
|
unit.scepter.name = Верховна влада
|
||||||
|
unit.reign.name = Верховний Порядок
|
||||||
|
|
||||||
|
block.resupply-point.name = Пункт постачання
|
||||||
block.parallax.name = Паралакс
|
block.parallax.name = Паралакс
|
||||||
block.cliff.name = Скеля
|
block.cliff.name = Скеля
|
||||||
block.sand-boulder.name = Пісочний валун
|
block.sand-boulder.name = Пісочний валун
|
||||||
block.grass.name = Трава
|
block.grass.name = Трава
|
||||||
block.slag.name = Шлак
|
block.slag.name = Шлак
|
||||||
block.salt.name = Сіль
|
block.salt.name = Сіль
|
||||||
block.saltrocks.name = Соляні камені
|
block.salt-wall.name = Соляна стіна
|
||||||
block.pebbles.name = Галька
|
block.pebbles.name = Галька
|
||||||
block.tendrils.name = Щупальця
|
block.tendrils.name = Щупальця
|
||||||
block.sandrocks.name = Піщані скелі
|
block.sand-wall.name = Піскова стіна
|
||||||
block.spore-pine.name = Спорова сосна
|
block.spore-pine.name = Спорова сосна
|
||||||
block.sporerocks.name = Спорові камені
|
block.spore-wall.name = Спорова стіна
|
||||||
block.rock.name = Камінь
|
block.boulder.name = Брила
|
||||||
block.snowrock.name = Сніжний камінь
|
block.snow-boulder.name = Снігова брила
|
||||||
block.snow-pine.name = Сніжні сосни
|
block.snow-pine.name = Сніжні сосни
|
||||||
block.shale.name = Сланець
|
block.shale.name = Сланець
|
||||||
block.shale-boulder.name = Сланцевий валун
|
block.shale-boulder.name = Сланцевий валун
|
||||||
block.moss.name = Мох
|
block.moss.name = Мох
|
||||||
block.shrubs.name = Кущі
|
block.shrubs.name = Кущі
|
||||||
block.spore-moss.name = Споровий мох
|
block.spore-moss.name = Споровий мох
|
||||||
block.shalerocks.name = Сланцеві породи
|
block.shale-wall.name = Сланцева стіна
|
||||||
block.scrap-wall.name = Стіна з брухту
|
block.scrap-wall.name = Стіна з брухту
|
||||||
block.scrap-wall-large.name = Велика стіна з брухту
|
block.scrap-wall-large.name = Велика стіна з брухту
|
||||||
block.scrap-wall-huge.name = Величезна стіна з брухту
|
block.scrap-wall-huge.name = Величезна стіна з брухту
|
||||||
@@ -917,16 +955,19 @@ block.darksand.name = Темний пісок
|
|||||||
block.ice.name = Лід
|
block.ice.name = Лід
|
||||||
block.snow.name = Сніг
|
block.snow.name = Сніг
|
||||||
block.craters.name = Кратери
|
block.craters.name = Кратери
|
||||||
block.sand-water.name = Пісок з водою
|
block.sand-water.name = Пісок із водою
|
||||||
block.darksand-water.name = Темний пісок з водою
|
block.darksand-water.name = Темний пісок із водою
|
||||||
block.char.name = Випалена земля
|
block.char.name = Випалена земля
|
||||||
block.holostone.name = Голографічний камінь
|
block.dacite.name = Дацит
|
||||||
|
block.dacite-wall.name = Дацитова стіна
|
||||||
block.ice-snow.name = Крижаний сніг
|
block.ice-snow.name = Крижаний сніг
|
||||||
block.rocks.name = Камені
|
block.stone-wall.name = Кам’яна стіна
|
||||||
block.icerocks.name = Крижані камені
|
block.ice-wall.name = Крижана стіна
|
||||||
block.snowrocks.name = Снігові камені
|
block.snow-wall.name = Снігова стіна
|
||||||
block.dunerocks.name = Піщані камені
|
block.dune-wall.name = Дюнова стіна
|
||||||
block.pine.name = Сосна
|
block.pine.name = Сосна
|
||||||
|
block.dirt.name = Ґрунт
|
||||||
|
block.dirt-wall.name = Ґрунтова стіна
|
||||||
block.white-tree-dead.name = Мертве біле дерево
|
block.white-tree-dead.name = Мертве біле дерево
|
||||||
block.white-tree.name = Біле дерево
|
block.white-tree.name = Біле дерево
|
||||||
block.spore-cluster.name = Скупчення спор
|
block.spore-cluster.name = Скупчення спор
|
||||||
@@ -942,7 +983,7 @@ block.dark-panel-4.name = Темна панель 4
|
|||||||
block.dark-panel-5.name = Темна панель 5
|
block.dark-panel-5.name = Темна панель 5
|
||||||
block.dark-panel-6.name = Темна панель 6
|
block.dark-panel-6.name = Темна панель 6
|
||||||
block.dark-metal.name = Темний метал
|
block.dark-metal.name = Темний метал
|
||||||
block.ignarock.name = Магматичні гірські породи
|
block.basalt.name = Базальт
|
||||||
block.hotrock.name = Гарячий камінь
|
block.hotrock.name = Гарячий камінь
|
||||||
block.magmarock.name = Магмовий камінь
|
block.magmarock.name = Магмовий камінь
|
||||||
block.cliffs.name = Скелі
|
block.cliffs.name = Скелі
|
||||||
@@ -967,7 +1008,7 @@ block.conveyor.name = Конвеєр
|
|||||||
block.titanium-conveyor.name = Титановий конвеєр
|
block.titanium-conveyor.name = Титановий конвеєр
|
||||||
block.plastanium-conveyor.name = Пластанієвий конвеєр
|
block.plastanium-conveyor.name = Пластанієвий конвеєр
|
||||||
block.armored-conveyor.name = Броньований конвеєр
|
block.armored-conveyor.name = Броньований конвеєр
|
||||||
block.armored-conveyor.description = Переміщує предмети з тією ж швидкістю, що і титанові конвеєри, але має більше міцності. Не приймає введення з боків ні з чого, крім інших конвеєрних стрічок.
|
block.armored-conveyor.description = Переміщує предмети з тією ж швидкістю, що й титанові конвеєри, але має більше міцності. Не приймає введення з боків ні з чого, крім інших конвеєрних стрічок.
|
||||||
block.junction.name = Перехрестя
|
block.junction.name = Перехрестя
|
||||||
block.router.name = Маршрутизатор
|
block.router.name = Маршрутизатор
|
||||||
block.distributor.name = Розподілювач
|
block.distributor.name = Розподілювач
|
||||||
@@ -1056,18 +1097,26 @@ block.container.name = Сховище
|
|||||||
block.launch-pad.name = Стартовий майданчик
|
block.launch-pad.name = Стартовий майданчик
|
||||||
block.launch-pad-large.name = Великий стартовий майданчик
|
block.launch-pad-large.name = Великий стартовий майданчик
|
||||||
block.segment.name = Сегмент
|
block.segment.name = Сегмент
|
||||||
|
block.command-center.name = Командний центр
|
||||||
block.ground-factory.name = Наземний завод
|
block.ground-factory.name = Наземний завод
|
||||||
block.air-factory.name = Повітряний завод
|
block.air-factory.name = Повітряний завод
|
||||||
block.naval-factory.name = Морський завод
|
block.naval-factory.name = Морський завод
|
||||||
block.additive-reconstructor.name = Додавальний реконструктор
|
block.additive-reconstructor.name = Додавальний реконструктор
|
||||||
block.multiplicative-reconstructor.name = Примножувальний реконструктор
|
block.multiplicative-reconstructor.name = Примножувальний реконструктор
|
||||||
block.exponential-reconstructor.name = Експоненційний реконструктор
|
block.exponential-reconstructor.name = Експоненційний реконструктор
|
||||||
block.tetrative-reconstructor.name = Тетративний реконструктор
|
block.tetrative-reconstructor.name = Тетративний реконструктор
|
||||||
block.payload-conveyor.name = Вантажний конвеєр
|
block.payload-conveyor.name = Вантажний конвеєр
|
||||||
block.payload-router.name = Розвантажувальний маршрутизатор
|
block.payload-router.name = Розвантажувальний маршрутизатор
|
||||||
block.disassembler.name = Розбирач
|
block.disassembler.name = Розбирач
|
||||||
block.silicon-crucible.name = Кремнієвий тигель
|
block.silicon-crucible.name = Кремнієвий тигель
|
||||||
block.large-overdrive-projector.name = Великий прискорювач
|
block.large-overdrive-projector.name = Великий прискорювач
|
||||||
|
block.switch.name = Перемикач
|
||||||
|
block.micro-processor.name = Мікропроцесор
|
||||||
|
block.logic-processor.name = Логічний процесор
|
||||||
|
block.hyper-processor.name = Гіперпроцесор
|
||||||
|
block.logic-display.name = Логічний дисплей
|
||||||
|
block.large-logic-display.name = Великий логічний дисплей
|
||||||
|
block.memory-cell.name = Комірка пам’яті
|
||||||
team.blue.name = Синя
|
team.blue.name = Синя
|
||||||
team.crux.name = Червона
|
team.crux.name = Червона
|
||||||
team.sharded.name = Помаранчева
|
team.sharded.name = Помаранчева
|
||||||
@@ -1077,39 +1126,39 @@ team.green.name = Зелена
|
|||||||
team.purple.name = Фіолетова
|
team.purple.name = Фіолетова
|
||||||
|
|
||||||
tutorial.next = [lightgray]<Натисніть для продовження>
|
tutorial.next = [lightgray]<Натисніть для продовження>
|
||||||
tutorial.intro = Ви розпочали[scarlet] навчання по Mindustry.[]\nВикористовуйте[accent] [[WASD][] для руху.\n[accent]Прокручуйте миш[] для приближення і віддалення.\nРозпочніть з [accent]видобування міді[]. Наблизьтесь до мідної жили біля вашого ядра, а потім натисніть на неї, щоб розпочати видобуток.\n\n[accent]{0}/{1} міді
|
tutorial.intro = Ви розпочали[scarlet] навчання з Mindustry.[]\nВикористовуйте[accent] [[WASD][] для руху.\n[accent]Прокручуйте миш[] для приближення і віддалення.\nРозпочніть з [accent]видобування міді[]. Наблизьтесь до мідної жили біля вашого ядра, а потім натисніть на неї, щоби розпочати видобуток.\n\n[accent]{0}/{1} міді
|
||||||
tutorial.intro.mobile = Ви розпочали[scarlet] навчання по Mindustry.[]\nПроведіть по екрану для руху.\n[accent] Зведіть або розведіть 2 пальця[] для приближення і віддалення відповідно.\nРозпочніть з [accent]видобування міді[]. Наблизьтесь до мідної жили біля вашого ядра, а потім натисніть на неї, щоб розпочати видобуток.\n\n[accent]{0}/{1} міді
|
tutorial.intro.mobile = Ви розпочали[scarlet] навчання з Mindustry.[]\nПроведіть по екрану для руху.\n[accent] Зведіть або розведіть 2 пальця[] для приближення і віддалення відповідно.\nРозпочніть з [accent]видобування міді[]. Наблизьтесь до мідної жили біля вашого ядра, а потім натисніть на неї, щоби розпочати видобуток.\n\n[accent]{0}/{1} міді
|
||||||
tutorial.drill = Добування вручну не є ефективним.\n[accent]Бури[] можуть видобувати автоматично.\nНатисніть на вкладку із зображенням свердла праворуч знизу.\n\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\nВи також можете вибрати бур, натиснувши [accent][[2][], а потім швидко натиснувши [accent][[1][], незалежно від відкритої вкладки.\n[accent]Натисніть ПКМ[], щоб зупинити будування.
|
tutorial.drill = Добування вручну не є ефективним.\n[accent]Бури[] можуть видобувати автоматично.\nНатисніть на вкладку із зображенням свердла праворуч знизу.\n\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\nВи також можете вибрати бур, натиснувши [accent][[2][], а потім швидко натиснувши [accent][[1][], незалежно від розгорнутої вкладки.\n[accent]Натисніть ПКМ[], щоби зупинити будування.
|
||||||
tutorial.drill.mobile = Добування вручну не є ефективним.\n[accent]Бури[] можуть видобувати автоматично.\nНатисніть на вкладку із зображенням свердла праворуч знизу.\nВиберіть[accent] механічний бур[].\nРозмістіть його на мідній жилі натисканням, потім натисніть на [accent]галочку[] нижче, щоб підтвердити розміщення.\nНатисніть [accent]кнопку X[], щоб скасувати розміщення.
|
tutorial.drill.mobile = Добування вручну не є ефективним.\n[accent]Бури[] можуть видобувати автоматично.\nНатисніть на вкладку із зображенням свердла праворуч знизу.\nВиберіть[accent] механічний бур[].\nРозмістіть його на мідній жилі натисканням, потім натисніть на [accent]галочку[] нижче, щоби підтвердити розміщення.\nНатисніть [accent]кнопку X[], щоби скасувати розміщення.
|
||||||
tutorial.blockinfo = Кожний блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисніть на кнопку «?», коли ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура негайно.[]
|
tutorial.blockinfo = Кожний блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисніть на кнопку «?», коли ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура негайно.[]
|
||||||
tutorial.conveyor = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nПобудуйте лінію конвеєрів від бура до ядра.\n[accent]Утримуйте миш для розміщення у лінію.[]\nУтримуйте[accent] CTRL[] під час вибору лінії для розміщення по діагоналі.\nПрокручуйте, щоб обертати блоки до їх установлення.\n[accent]Розмістіть 2 конвеєри у лінію, а потім доставте предмет в ядро.
|
tutorial.conveyor = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nПобудуйте лінію конвеєрів від бура до ядра.\n[accent]Утримуйте миш для розміщення в лінію.[]\nУтримуйте[accent] CTRL[] під час вибору лінії для розміщення по діагоналі.\nПрокручуйте, щоб обертати блоки до їх установлення.\n[accent]Розмістіть 2 конвеєри в лінію, а потім доставте предмет у ядро.
|
||||||
tutorial.conveyor.mobile = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nПобудуйте лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви обрали.\n\n[accent]Розмістіть 2 конвеєри у лінію, а потім доставте предмет в ядро.
|
tutorial.conveyor.mobile = [accent]Конвеєри[] використовуються для транспортування предметів до ядра.\nПобудуйте лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви обрали.\n\n[accent]Розмістіть 2 конвеєри в лінію, а потім доставте предмет у ядро.
|
||||||
tutorial.turret = Щойно предмет потрапить до ядра, він може бути використаний у будівництві.\nМайте на увазі, не всі предмети придатні для будівництва.\nПредмети що не використовуються у будівництві, такі як[accent] вугілля[] чи[accent] брухт[], не можуть потрапити до ядра.\nОборонні споруди повинні бути побудовані для відбиття[lightgray] противників[].\nПобудуйте[accent] башту «Подвійна»[] біля вашої бази.
|
tutorial.turret = Щойно предмет потрапить до ядра, він може бути використаний у будівництві.\nМайте на увазі, не всі предмети придатні для будівництва.\nПредмети що не використовуються в будівництві, такі як[accent] вугілля[] чи[accent] брухт[], не можуть потрапити до ядра.\nОборонні споруди мають бути побудовані для відбиття[lightgray] противників[].\nПобудуйте[accent] башту «Подвійна»[] біля вашої бази.
|
||||||
tutorial.drillturret = «Подвійна» потребує [accent]мідні боєприпаси[] для стрільби.\nРозмістіть бур біля башти.\nПроведіть конвеєри до башти, щоб заповнити її боєприпасами.\n\n [accent]Доставлено боєприпасів: 0/1
|
tutorial.drillturret = «Подвійна» потребує [accent]мідні боєприпаси[] для стрільби.\nРозмістіть бур біля башти.\nПроведіть конвеєри до башти, щоби заповнити її боєприпасами.\n\n [accent]Доставлено боєприпасів: 0/1
|
||||||
tutorial.pause = Під час гри ви можете[accent] поставити на паузу.[]\nВи можете зробити чергу на будування під час паузи.\n\n [accent]Натисніть пробіл для паузи.
|
tutorial.pause = Під час гри ви можете[accent] поставити на паузу.[]\nВи можете зробити чергу на будування під час паузи.\n\n [accent]Натисніть пробіл для паузи.
|
||||||
tutorial.pause.mobile = Під час гри ви можете[accent] поставити на паузу.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисніть кнопку вгорі ліворуч для паузи.
|
tutorial.pause.mobile = Під час гри ви можете[accent] поставити на паузу.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисніть кнопку вгорі ліворуч для паузи.
|
||||||
tutorial.unpause = Призупиніть гру, натиснувши на пробіл.
|
tutorial.unpause = Призупиніть гру, натиснувши на пробіл.
|
||||||
tutorial.unpause.mobile = Тепер натисніть туди ще раз, щоб зняти паузу.
|
tutorial.unpause.mobile = Тепер натисніть туди ще раз, щоби зняти паузу.
|
||||||
tutorial.breaking = Блоки часто треба знищувати.\n[accent]Утримуючи ПКМ[] ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з брухту ліворуч від вашого ядра використовуючи видалення у зоні.
|
tutorial.breaking = Блоки часто треба знищувати.\n[accent]Утримуючи ПКМ[] ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з брухту ліворуч від вашого ядра використовуючи видалення в зоні.
|
||||||
tutorial.breaking.mobile = Блоки часто треба знищувати.\n[accent]Виберіть режим руйнування[], потім натисніть на блок, щоб зламати його.\nЗнищте область, утримуючи палець протягом декількох секунд [] і потягнувши в потрібному напрямку.\nНатисніть кнопку галочки, щоб підтвердити руйнування.\n\n[accent]Необхідно знищити всі стіни з брухту ліворуч від вашого ядра використовуючи видалення у зоні.
|
tutorial.breaking.mobile = Блоки часто треба знищувати.\n[accent]Виберіть режим руйнування[], потім натисніть на блок, щоби зламати його.\nВидаліть ділянку, утримуючи палець упродовж декількох секунд [] і потягнувши в потрібному напрямку.\nНатисніть кнопку галочки, щоби підтвердити руйнування.\n\n[accent]Необхідно знищити всі стіни з брухту ліворуч від вашого ядра використовуючи видалення в зоні.
|
||||||
tutorial.withdraw = У деяких ситуаціях потрібно брати предмети безпосередньо з блоків.\nЩоб зробити це, [accent]натисніть на блок[] з предметами, і потім [accent]натисніть на предмет[] в інвентарі.\nМожна вилучити кілька предметів [accent]натискаючи та утримуючи[].\n\n [accent]Вилучіть трохи міді з ядра.[]
|
tutorial.withdraw = У деяких ситуаціях потрібно брати предмети безпосередньо з блоків.\nЩоб зробити це, [accent]натисніть на блок[] з предметами, і потім [accent]натисніть на предмет[] в інвентарі.\nМожна вилучити кілька предметів [accent]натискаючи та утримуючи[].\n\n [accent]Вилучіть трохи міді з ядра.[]
|
||||||
tutorial.deposit = Покладіть предмети в блок, перетягнувши з вашого корабля в потрібний блок.\n\n[accent]Покладіть мідь назад у ядро.[]
|
tutorial.deposit = Покладіть предмети в блок, перетягнувши з вашого корабля в потрібний блок.\n\n[accent]Покладіть мідь назад у ядро.[]
|
||||||
tutorial.waves = [lightgray]Противник[] з’явився.\n\nЗахистіть ядро від двох хвиль.[accent] Натисніть ЛКМ[], щоб стріляти.\nПобудуйте більше башт і бурів. Добудьте більше міді.
|
tutorial.waves = [lightgray]Противник[] з’явився.\n\nЗахистіть ядро від двох хвиль.[accent] Натисніть ЛКМ[], щоби стріляти.\nПобудуйте більше башт і бурів. Добудьте більше міді.
|
||||||
tutorial.waves.mobile = [lightgray]Противник[] з’явився.\n\nЗахистіть ядро від двох хвиль. Ваш корабель буде автоматично атакувати противників.\nПобудуйте більше башт і бурів. Добудьте більше міді.
|
tutorial.waves.mobile = [lightgray]Противник[] з’явився.\n\nЗахистіть ядро від двох хвиль. Ваш корабель буде автоматично атакувати противників.\nПобудуйте більше башт і бурів. Добудьте більше міді.
|
||||||
tutorial.launch = Як тільки ви досягнете певної хвилі, ви зможете[accent] запустити ядро[], залишивши свою базу позаду, та [accent]отримати всі ресурси у вашому ядрі.[]\nЦі отримані ресурси можуть бути використані для дослідження нових технологій.\n\n[accent]Натисніть кнопку запуску.
|
tutorial.launch = Як тільки ви досягнете певної хвилі, ви зможете[accent] запустити ядро[], залишивши свою базу позаду, та [accent]отримати всі ресурси у вашому ядрі.[]\nЦі отримані ресурси можуть бути використані для дослідження нових технологій.\n\n[accent]Натисніть кнопку запуску.
|
||||||
|
|
||||||
item.copper.description = Початковий будівельний матеріал. Широко використовується у всіх типах блоків.
|
item.copper.description = Початковий будівельний матеріал. Широко використовується у всіх типах блоків.
|
||||||
item.lead.description = Основний початковий матеріал. Широко застосовується в електроніці та у транспортуванні рідин.
|
item.lead.description = Основний початковий матеріал. Широко застосовується в електроніці та в транспортуванні рідин.
|
||||||
item.metaglass.description = Дуже жорсткий склад скла. Широко застосовується для розподілу та зберігання рідини.
|
item.metaglass.description = Дуже жорсткий склад скла. Широко застосовується для розподілу та зберігання рідини.
|
||||||
item.graphite.description = Мінералізований вуглець, що використовується для боєприпасів та як електричний компонент.
|
item.graphite.description = Мінералізований вуглець, що використовується для боєприпасів та як електричний компонент.
|
||||||
item.sand.description = Поширений матеріал, який широко використовується при виплавці, як при сплавленні, так і в якості відходів.
|
item.sand.description = Поширений матеріал, який широко використовується у виплавці, як під час сплавлення, так і в якості відходів.
|
||||||
item.coal.description = Скам’янілі рослинні речовини, що утворилися задовго до посіву. Широко використовується для виробництва пального та ресурсів.
|
item.coal.description = Скам’янілі рослинні речовини, що утворилися задовго до посіву. Широко використовується для виробництва пального та ресурсів.
|
||||||
item.titanium.description = Рідкісний надлегкий метал, який широко використовується для транспортування рідини, бурів і літаків.
|
item.titanium.description = Рідкісний надлегкий метал, який широко використовується для транспортування рідини, бурів і літаків.
|
||||||
item.thorium.description = Щільний радіоактивний метал, що використовується в якості конструкційної опори та ядерного палива.
|
item.thorium.description = Щільний радіоактивний метал, що використовується в якості конструкційної опори та ядерного палива.
|
||||||
item.scrap.description = Залишки старих споруд та підрозділів. Містить мікроелементи багатьох різних металів.
|
item.scrap.description = Залишки старих споруд та підрозділів. Містить мікроелементи багатьох різних металів.
|
||||||
item.silicon.description = Надзвичайно корисний напівпровідник. Має застосування в сонячних батареях, складній електроніці та боєприпасах для башт.
|
item.silicon.description = Надзвичайно корисний напівпровідник. Має застосування в сонячних батареях, складній електроніці та боєприпасах для башт.
|
||||||
item.plastanium.description = Легкий пластичний матеріал, що використовується в сучасних літальних апаратах та у фрагментованих боєприпасах.
|
item.plastanium.description = Легкий пластичний матеріал, що використовується в сучасних літальних апаратах та у фрагментованих боєприпасах.
|
||||||
item.phase-fabric.description = Майже невагома речовина, що застосовується в передовій електроніці та у технології самовідновлення.
|
item.phase-fabric.description = Майже невагома речовина, що застосовується в передовій електроніці та в технології самовідновлення.
|
||||||
item.surge-alloy.description = Удосконалений сплав з унікальними електричними властивостями.
|
item.surge-alloy.description = Удосконалений сплав з унікальними електричними властивостями.
|
||||||
item.spore-pod.description = Струмок синтетичних спор, синтезований з атмосферних концентрацій для промислових цілей. Використовується для перетворення на нафту, вибухівку та паливо.
|
item.spore-pod.description = Струмок синтетичних спор, синтезований з атмосферних концентрацій для промислових цілей. Використовується для перетворення на нафту, вибухівку та паливо.
|
||||||
item.blast-compound.description = Нестабільна сполука, яка використовується в бомбах і вибухівках. Синтезується зі спорових стручків та інших летких речовин. Використовувати як паливо не рекомендується.
|
item.blast-compound.description = Нестабільна сполука, яка використовується в бомбах і вибухівках. Синтезується зі спорових стручків та інших летких речовин. Використовувати як паливо не рекомендується.
|
||||||
@@ -1117,24 +1166,24 @@ item.pyratite.description = Надзвичайно легкозаймиста р
|
|||||||
liquid.water.description = Найкорисніша рідина. Зазвичай використовується для охолодження машин та перероблювання відходів.
|
liquid.water.description = Найкорисніша рідина. Зазвичай використовується для охолодження машин та перероблювання відходів.
|
||||||
liquid.slag.description = Різні види розплавленого металу змішуються між собою. Може бути відокремлений від складових корисних копалин або розпорошений на ворожі частини як зброя.
|
liquid.slag.description = Різні види розплавленого металу змішуються між собою. Може бути відокремлений від складових корисних копалин або розпорошений на ворожі частини як зброя.
|
||||||
liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена у вугілля в якості палива або використана як куля.
|
liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена у вугілля в якості палива або використана як куля.
|
||||||
liquid.cryofluid.description = Інертна рідина, що створена з води та титану. Володіє надзвичайно високою пропускною спроможністю. Широко використовується в якості рідини, що охолоджує.
|
liquid.cryofluid.description = Інертна рідина, що створена з води та титану. Має здатність надзвичайно високою пропускною спроможністю. Широко використовується в якості рідини, що охолоджує.
|
||||||
|
|
||||||
block.message.description = Зберігає повідомлення. Використовується для комунікації між союзниками.
|
block.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 = Змішує пісок із чистим вугіллям. Виробляє кремній.
|
||||||
block.kiln.description = Виплавляє пісок та свинець у сполуку, відому як метаскло. Для запуску потрібна невелика кількість енергії.
|
block.kiln.description = Виплавляє пісок та свинець у сполуку, відому як метаскло. Для запуску потрібна невелика кількість енергії.
|
||||||
block.plastanium-compressor.description = Виробляє пластаній з нафти та титану.
|
block.plastanium-compressor.description = Виробляє пластаній із нафти та титану.
|
||||||
block.phase-weaver.description = Синтезує фазову тканину з радіоактивного торію та піску. Для роботи потрібна велика кількість енергії.
|
block.phase-weaver.description = Синтезує фазову тканину з радіоактивного торію та піску. Для роботи потрібна велика кількість енергії.
|
||||||
block.alloy-smelter.description = Поєднує титан, свинець, кремній і мідь для отримання кінетичного сплаву.
|
block.alloy-smelter.description = Поєднує титан, свинець, кремній і мідь для отримання кінетичного сплаву.
|
||||||
block.cryofluidmixer.description = Змішує воду і дрібний порошок титану в кріогенну рідину. Основне використання у торієвому реактору.
|
block.cryofluidmixer.description = Змішує воду і дрібний порошок титану в кріогенну рідину. Основне використання в торієвому реактору.
|
||||||
block.blast-mixer.description = Подрібнює і змішує скупчення спор з піротитом для отримання вибухової суміші.
|
block.blast-mixer.description = Подрібнює і змішує скупчення спор із піротитом для отримання вибухової суміші.
|
||||||
block.pyratite-mixer.description = Змішує вугілля, свинець та пісок у легкозаймистий піротит.
|
block.pyratite-mixer.description = Змішує вугілля, свинець та пісок у легкозаймистий піротит.
|
||||||
block.melter.description = Розплавляє брухт у шлак для подальшого перероблювання, або використання у баштах «Хвиля».
|
block.melter.description = Розплавляє брухт у шлак для подальшого перероблювання, або використання в баштах «Хвиля».
|
||||||
block.separator.description = Відокремлює шлак на його мінеральні компоненти. Виводить охолоджені матеріали.
|
block.separator.description = Відокремлює шлак на його мінеральні компоненти. Виводить охолоджені матеріали.
|
||||||
block.spore-press.description = Стискає спорові стручки під сильним тиском для синтезу нафти.
|
block.spore-press.description = Стискає спорові стручки під сильним тиском для синтезу нафти.
|
||||||
block.pulverizer.description = Подрібнює брухт у дрібний пісок.
|
block.pulverizer.description = Подрібнює брухт у дрібний пісок.
|
||||||
block.coal-centrifuge.description = Нафта перетворюється у шматки вугілля.
|
block.coal-centrifuge.description = Нафта перетворюється в шматки вугілля.
|
||||||
block.incinerator.description = Випаровує будь-який зайвий предмет або рідину, які він отримує.
|
block.incinerator.description = Випаровує будь-який зайвий предмет або рідину, які він отримує.
|
||||||
block.power-void.description = Знищує будь-яку енергію, до якої він під’єднаний. Тільки пісочниця.
|
block.power-void.description = Знищує будь-яку енергію, до якої він під’єднаний. Тільки пісочниця.
|
||||||
block.power-source.description = Постійно створює енергію. Тільки пісочниця.
|
block.power-source.description = Постійно створює енергію. Тільки пісочниця.
|
||||||
@@ -1142,30 +1191,30 @@ block.item-source.description = Постійно створює предмети
|
|||||||
block.item-void.description = Знищує будь-які предмети. Тільки пісочниця.
|
block.item-void.description = Знищує будь-які предмети. Тільки пісочниця.
|
||||||
block.liquid-source.description = Постійно створює рідини. Тільки пісочниця.
|
block.liquid-source.description = Постійно створює рідини. Тільки пісочниця.
|
||||||
block.liquid-void.description = Видаляє будь-які рідини. Тільки пісочниця.
|
block.liquid-void.description = Видаляє будь-які рідини. Тільки пісочниця.
|
||||||
block.copper-wall.description = Дешевий захисний блок.\nКорисний для захисту ядра та башт у перші кілька хвиль.
|
block.copper-wall.description = Дешевий оборонний блок.\nКорисний для оборони ядра та башт у перші кілька хвиль.
|
||||||
block.copper-wall-large.description = Дешевий захисний блок.\nКорисний для захисту ядра та башт у перші кілька хвиль.\nЗаймає декілька плиток.
|
block.copper-wall-large.description = Дешевий оборонний блок.\nКорисний для оборони ядра та башт у перші кілька хвиль.\nЗаймає декілька плиток.
|
||||||
block.titanium-wall.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від противників.
|
block.titanium-wall.description = Порівняно сильний оборонний блок.\nЗабезпечує помірний оборони від противників.
|
||||||
block.titanium-wall-large.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від противників.\nЗаймає декілька плиток.
|
block.titanium-wall-large.description = Порівняно сильний оборонний блок.\nЗабезпечує помірний оборони від противників.\nЗаймає декілька плиток.
|
||||||
block.plastanium-wall.description = Особливий тип стіни, який поглинає електричні дуги й блокує автоматичні з’єднання енергетичних вузлів.
|
block.plastanium-wall.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з’єднання енергетичних вузлів.
|
||||||
block.plastanium-wall-large.description = Особливий тип стіни, який поглинає електричні дуги й блокує автоматичні з’єднання енергетичних вузлів.\nЗаймає декілька плиток.
|
block.plastanium-wall-large.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з’єднання енергетичних вузлів.\nЗаймає декілька плиток.
|
||||||
block.thorium-wall.description = Сильний захисний блок.\nГідний захист від противників.
|
block.thorium-wall.description = Сильний оборонний блок.\nГарна оборона від противників.
|
||||||
block.thorium-wall-large.description = Сильний захисний блок.\nГідний захист від противників.\nЗаймає декілька плиток.
|
block.thorium-wall-large.description = Сильний оборонний блок.\nГарна оборона від противників.\nЗаймає декілька плиток.
|
||||||
block.phase-wall.description = Стіна має покриття спеціальним складом, що відбиває світло і який базується на фазовій тканині. Відхиляє більшість куль при ударі.
|
block.phase-wall.description = Стіна має покриття спеціальним складом, що відбиває світло і який базується на фазовій тканині. Здебільшого відбиває кулі у разі удару.
|
||||||
block.phase-wall-large.description = Стіна має покриття спеціальним складом, що відбиває світло і який базується на фазовій тканині. Відхиляє більшість куль при ударі.\nЗаймає декілька плиток.
|
block.phase-wall-large.description = Стіна має покриття спеціальним складом, що відбиває світло і який базується на фазовій тканині. Здебільшого відбиває кулі у разі удару.\nЗаймає декілька плиток.
|
||||||
block.surge-wall.description = Надзвичайно міцний захисний блок.\nЗбільшує заряд при контакті з кулями, вивільняючи його випадковим чином.
|
block.surge-wall.description = Надзвичайно міцний оборонний блок.\nЗбільшує заряд, якщо контактуватиме з кулями, вивільняючи його випадковим чином.
|
||||||
block.surge-wall-large.description = Надзвичайно міцний захисний блок.\nЗбільшує заряд при контакті з кулями, вивільняючи його випадковим чином.\nЗаймає декілька плиток.
|
block.surge-wall-large.description = Надзвичайно міцний оборонний блок.\nЗбільшує заряд, якщо контактуватиме з кулями, вивільняючи його випадковим чином.\nЗаймає декілька плиток.
|
||||||
block.door.description = Невеликі двері. Можна відкрити або закрити, натиснувши.
|
block.door.description = Невеликі двері. Можна відчинити або зачинити, натиснувши на них.
|
||||||
block.door-large.description = Великі двері. Можна відкрити та закрити, натиснувши.\nЗаймає декілька плиток.
|
block.door-large.description = Великі двері. Можна відчинити та зачинити, натиснувши на них.\nЗаймає декілька плиток.
|
||||||
block.mender.description = Періодично ремонтує блоки у його радіусі дії. Захищає башти та стіни.\nЗа бажанням, можна використати кремній для підвищення дальності та ефективності.
|
block.mender.description = Періодично ремонтує блоки в його радіусі дії. Боронить башти та стіни.\nЗа бажанням, можна використати кремній для підвищення дальності та ефективності.
|
||||||
block.mend-projector.description = Покращена версія «Регенератора». Періодично ремонтує блоки у його радіусі дії.\nЗа бажанням, можна використати фазову тканину для підвищення дальності та ефективності.
|
block.mend-projector.description = Покращена версія «Регенератора». Періодично ремонтує блоки в його радіусі дії.\nЗа бажанням, можна використати фазову тканину для підвищення дальності та ефективності.
|
||||||
block.overdrive-projector.description = Збільшує швидкість найближчих будівель.\nЗа бажанням, можна використати фазову тканину для підвищення дальності та ефективності.
|
block.overdrive-projector.description = Збільшує швидкість найближчих будівель.\nЗа бажанням, можна використати фазову тканину для підвищення дальності та ефективності.
|
||||||
block.force-projector.description = Створює навколо себе шестикутне силове поле, захищаючи будівлі та блоки всередині від пошкоджень.\nПерегрівається, якщо завдано занадто великої шкоди. За бажанням, можна використати теплоносій для запобігання перегріву. Для збільшення розміру щита можна використовувати фазову тканину.
|
block.force-projector.description = Створює навколо себе шестикутне силове поле, боронячи будівлі та блоки всередині від пошкоджень.\nПерегрівається, якщо завдано занадто великої шкоди. За бажанням, можна використати теплоносій для запобігання перегріву. Для збільшення розміру щита можна використовувати фазову тканину.
|
||||||
block.shock-mine.description = Наносить шкоду противникам, коли вони наступають на міну. Майже невидима для противника.
|
block.shock-mine.description = Наносить шкоду противникам, коли вони наступають на міну. Майже невидима для противника.
|
||||||
block.conveyor.description = Базовий транспортний блок. Переміщує елементи вперед і автоматично перетворює їх у блоки. Можна обертати.
|
block.conveyor.description = Базовий транспортний блок. Переміщує елементи вперед і автоматично перетворює їх у блоки. Можна обертати.
|
||||||
block.titanium-conveyor.description = Покращений блок транспорту елементів. Переміщує предмети швидше, ніж звичайні конвеєри.
|
block.titanium-conveyor.description = Покращений блок транспорту елементів. Переміщує предмети швидше, ніж звичайні конвеєри.
|
||||||
block.plastanium-conveyor.description = Переміщує предмети партіями.\nПриймає елементи на задній частині та вивантажує їх у трьох напрямках спереду.
|
block.plastanium-conveyor.description = Переміщує предмети партіями.\nПриймає елементи на задній частині та вивантажує їх у трьох напрямках спереду.\nПотребує кілька точок завантаження та розвантаження для максимальної пропускної здатності.
|
||||||
block.junction.description = Діє як міст для двох перехресних конвеєрних стрічок. Корисно в ситуаціях, коли два різних конвеєри перевозять різні матеріали в різні місця.
|
block.junction.description = Діє як міст для двох перехресних конвеєрних стрічок. Корисно в ситуаціях, коли два різних конвеєри перевозять різні матеріали в різні місця.
|
||||||
block.bridge-conveyor.description = Покращений блок транспорту елементів. Дозволяє транспортувати предмети до 3-ох плиток з будь-якої місцевості чи будівлі.
|
block.bridge-conveyor.description = Покращений блок транспорту елементів. Дає змогу транспортувати предмети до 3-ох плиток із будь-якої місцевості чи будівлі.
|
||||||
block.phase-conveyor.description = Покращений блок транспорту елементів. Використовує енергію для телепортування елементів на під’єднаний фазовий конвеєр через кілька плиток.
|
block.phase-conveyor.description = Покращений блок транспорту елементів. Використовує енергію для телепортування елементів на під’єднаний фазовий конвеєр через кілька плиток.
|
||||||
block.sorter.description = Сортує предмети. Якщо елемент відповідає вибраному, його можна передати. В іншому випадку елемент виводиться зліва та/чи справа.
|
block.sorter.description = Сортує предмети. Якщо елемент відповідає вибраному, його можна передати. В іншому випадку елемент виводиться зліва та/чи справа.
|
||||||
block.inverted-sorter.description = Обробляє елементи, як звичайний сортувальник, але виводить обрані елементи на сторони.
|
block.inverted-sorter.description = Обробляє елементи, як звичайний сортувальник, але виводить обрані елементи на сторони.
|
||||||
@@ -1174,35 +1223,35 @@ block.distributor.description = Поліпшений маршрутизатор.
|
|||||||
block.overflow-gate.description = Вивантажує лише вліво та/або вправо, якщо передній шлях заблокований.
|
block.overflow-gate.description = Вивантажує лише вліво та/або вправо, якщо передній шлях заблокований.
|
||||||
block.underflow-gate.description = Повна протилежність надмірному затвору. Виводить предмет прямо, якщо лівий та/або правий шлях заблоковано.
|
block.underflow-gate.description = Повна протилежність надмірному затвору. Виводить предмет прямо, якщо лівий та/або правий шлях заблоковано.
|
||||||
block.mass-driver.description = Найкращий блок для транспортування предметів. Збирає кілька предметів, а потім вистрілює їх до іншої електромагнітної катапульти на велику відстань. Для роботи потребує енергія.
|
block.mass-driver.description = Найкращий блок для транспортування предметів. Збирає кілька предметів, а потім вистрілює їх до іншої електромагнітної катапульти на велику відстань. Для роботи потребує енергія.
|
||||||
block.mechanical-pump.description = Дешевий насос з повільним виходом, але не потребує енергоспоживання.
|
block.mechanical-pump.description = Дешевий насос із повільним виходом, але не потребує енергоспоживання.
|
||||||
block.rotary-pump.description = Удосконалений насос. Насоси більше викачують, але потребують енергію.
|
block.rotary-pump.description = Удосконалений насос. Насоси більше викачують, але потребують енергію.
|
||||||
block.thermal-pump.description = Найкращий насос.
|
block.thermal-pump.description = Найкращий насос.
|
||||||
block.conduit.description = Основний блок транспортування рідини. Пересуває рідини вперед. Застосовується спільно з насосами та іншими трубопроводами.
|
block.conduit.description = Основний блок транспортування рідини. Пересуває рідини вперед. Застосовується спільно з насосами та іншими трубопроводами.
|
||||||
block.pulse-conduit.description = Удосконалений блок транспортування рідини. Швидше транспортує і більше зберігає рідини, ніж стандартні трубопроводи.
|
block.pulse-conduit.description = Удосконалений блок транспортування рідини. Швидше транспортує й більше зберігає рідини, ніж стандартні трубопроводи.
|
||||||
block.plated-conduit.description = Переміщує рідини з тією ж швидкістю, що й імпульсні трубопроводи, але має більше міцності. Не приймає рідин з боків окрім інших трубопроводів.\nПротікає менше.
|
block.plated-conduit.description = Переміщує рідини з тією ж швидкістю, що й імпульсні трубопроводи, але має більше міцності. Не приймає рідин із боків окрім інших трубопроводів.\nПротікає менше.
|
||||||
block.liquid-router.description = Приймає рідини з одного напрямку та виводить їх до трьох інших напрямків порівну. Також можна зберігати певну кількість рідини. Корисно для розщеплення рідин від одного джерела до кількох мішеней.
|
block.liquid-router.description = Приймає рідини з одного напрямку та виводить їх до трьох інших напрямків порівну. Також можна зберігати певну кількість рідини. Корисно для розщеплення рідин від одного джерела до кількох мішеней.
|
||||||
block.liquid-tank.description = Зберігає велику кількість рідини. Використовуйте для створення буферів у ситуаціях з непостійним попитом на матеріали або як гарантію охолодження життєво важливих блоків.
|
block.liquid-tank.description = Зберігає велику кількість рідини. Використовуйте для створення буферів у ситуаціях із непостійним попитом на матеріали або як гарантію охолодження життєво важливих блоків.
|
||||||
block.liquid-junction.description = Діє як міст для двох каналів, що перетинаються. Корисно в ситуаціях, коли два різні трубопроводи транспортують різні рідини в різні місця.
|
block.liquid-junction.description = Діє як міст для двох каналів, що перетинаються. Корисно в ситуаціях, коли два різні трубопроводи транспортують різні рідини в різні місця.
|
||||||
block.bridge-conduit.description = Удосконалений блок транспортування рідини. Дозволяє транспортувати рідину до 3 плиток будь-якої місцевості чи будівлі.
|
block.bridge-conduit.description = Удосконалений блок транспортування рідини. Надає можливість транспортувати рідину до 3 плиток будь-якої місцевості чи будівлі.
|
||||||
block.phase-conduit.description = Удосконалений блок транспортування рідини. Використовує енергію для транспортування рідин до приєднаного фазового каналу через декілька плиток.
|
block.phase-conduit.description = Удосконалений блок транспортування рідини. Використовує енергію для транспортування рідин до приєднаного фазового каналу через декілька плиток.
|
||||||
block.power-node.description = Передає живлення на приєднані вузли. Вузол буде отримувати живлення від будь-яких сусідніх блоків або подавати живлення до них.
|
block.power-node.description = Передає живлення на приєднані вузли. Вузол буде отримувати живлення від будь-яких сусідніх блоків або подавати живлення до них.
|
||||||
block.power-node-large.description = Поліпшений вузол живлення з більшим радіусом дії.
|
block.power-node-large.description = Поліпшений вузол живлення з більшим радіусом дії.
|
||||||
block.surge-tower.description = Вузол живлення з меншою кількістю доступних з’єднань і з найбільшим радіусом дії.
|
block.surge-tower.description = Вузол живлення з меншою кількістю доступних з’єднань і з найбільшим радіусом дії.
|
||||||
block.diode.description = Живлення акумулятора може протікати через цей блок лише в одному напрямку, але лише в тому випадку, якщо інша сторона має менше енергії.
|
block.diode.description = Живлення акумулятора може протікати через цей блок лише в одному напрямку, але лише в тому випадку, якщо інша сторона має менше енергії.
|
||||||
block.battery.description = Зберігає енергію як буфер в часи надлишкової енергії. Виводить енергію у періоди дефіциту.
|
block.battery.description = Зберігає енергію як буфер у часи надлишкової енергії. Виводить енергію в періоди дефіциту.
|
||||||
block.battery-large.description = Зберігає набагато більше енергії, ніж звичайний акумулятор.
|
block.battery-large.description = Зберігає набагато більше енергії, ніж звичайний акумулятор.
|
||||||
block.combustion-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали, такі як вугілля.
|
block.combustion-generator.description = Виробляє енергію, спалюючи легкозаймисті матеріали, такі як вугілля.
|
||||||
block.thermal-generator.description = Генерує енергію при розміщенні в спекотних місцях.
|
block.thermal-generator.description = Генерує енергію у разі розміщення в спекотних місцях.
|
||||||
block.steam-generator.description = Удосконалений генератор згоряння. Більш ефективний, але потребує додаткової води для отримання пари.
|
block.steam-generator.description = Удосконалений генератор згоряння. Більш ефективний, але потребує додаткової води для отримання пари.
|
||||||
block.differential-generator.description = Удосконалений генератор згоряння. Використовує різницю температур між кріогенною рідиною і піротитом, що горить.
|
block.differential-generator.description = Удосконалений генератор згоряння. Використовує різницю температур між кріогенною рідиною й піротитом, що горить.
|
||||||
block.rtg-generator.description = Простий і надійний генератор. Використовує тепло радіоактивних сполук, які розкладаються, для отримання енергії з повільною швидкістю.
|
block.rtg-generator.description = Простий і надійний генератор. Використовує тепло радіоактивних сполук, які розкладаються, для отримання енергії з повільною швидкістю.
|
||||||
block.solar-panel.description = Забезпечує невелику кількість енергії від сонця.
|
block.solar-panel.description = Забезпечує невелику кількість енергії від сонця.
|
||||||
block.solar-panel-large.description = Значно ефективніша версія стандартної сонячної панелі.
|
block.solar-panel-large.description = Значно ефективніша ніж стандартна сонячна панель.
|
||||||
block.thorium-reactor.description = Виробляє значну кількість енергії з торію. Вимагає постійного охолодження. Сильно вибухне, якщо подаватиметься недостатня кількість теплоносія. Вихідна потужність залежить від заповненості, базова потужність генерується на повній місткості.
|
block.thorium-reactor.description = Виробляє значну кількість енергії з торію. Вимагає постійного охолодження. Сильно вибухне, якщо подаватиметься недостатня кількість теплоносія. Вихідна потужність залежить від заповненості, базова потужність генерується на повній місткості.
|
||||||
block.impact-reactor.description = Удосконалений генератор, здатний створювати величезну кількість енергії при максимальній ефективності. Для запуску процесу потрібно значні обсяги енергії.
|
block.impact-reactor.description = Удосконалений генератор, здатний створювати величезну кількість енергії за максимальною ефективності. Для запуску процесу потрібно значні обсяги енергії.
|
||||||
block.mechanical-drill.description = Недорогий бур. Якщо розмістити на доречних плитках, то виводитиме предмети постійно, але повільно. Придатний лише для базових ресурсів.
|
block.mechanical-drill.description = Недорогий бур. Якщо розмістити на доречних плитках, то виводитиме предмети постійно, але повільно. Придатний лише для базових ресурсів.
|
||||||
block.pneumatic-drill.description = Поліпшений бур, здатний добувати титан. Видобуває швидше, ніж механічний бур.
|
block.pneumatic-drill.description = Поліпшений бур, здатний видобувати титан. Видобуває швидше, ніж механічний бур.
|
||||||
block.laser-drill.description = Дозволяє виконувати буріння ще швидше за допомогою лазерної технології, але вимагає енергії. Придатний до видобутку торію.
|
block.laser-drill.description = Дає змогу виконувати буріння ще швидше за допомогою лазерної технології, але вимагає енергії. Придатний до видобутку торію.
|
||||||
block.blast-drill.description = Найкращий бур. Потрібна велика кількість енергії.
|
block.blast-drill.description = Найкращий бур. Потрібна велика кількість енергії.
|
||||||
block.water-extractor.description = Видобуває підземні води. Використовується в місцях, де немає поверхневої води.
|
block.water-extractor.description = Видобуває підземні води. Використовується в місцях, де немає поверхневої води.
|
||||||
block.cultivator.description = Культивує невеликі концентрації спор в атмосфері на готові до промисловості стручки.
|
block.cultivator.description = Культивує невеликі концентрації спор в атмосфері на готові до промисловості стручки.
|
||||||
@@ -1213,15 +1262,15 @@ block.core-nucleus.description = Третя й остання версія ка
|
|||||||
block.vault.description = Зберігає велику кількість предметів кожного типу. Блок розвантажувача може використовуватися для отримання предметів зі сховища.
|
block.vault.description = Зберігає велику кількість предметів кожного типу. Блок розвантажувача може використовуватися для отримання предметів зі сховища.
|
||||||
block.container.description = Зберігає малу кількість предметів кожного типу. Блок розвантажувача може використовуватися для отримання предметів зі сховища.
|
block.container.description = Зберігає малу кількість предметів кожного типу. Блок розвантажувача може використовуватися для отримання предметів зі сховища.
|
||||||
block.unloader.description = Вивантажує предмети з блока, який не переміщує предмети, на конвеєр або безпосередньо в сусідній блок. Тип предмета для завантаження можна змінити, натиснувши на блок.
|
block.unloader.description = Вивантажує предмети з блока, який не переміщує предмети, на конвеєр або безпосередньо в сусідній блок. Тип предмета для завантаження можна змінити, натиснувши на блок.
|
||||||
block.launch-pad.description = Запускає партії предметів без необхідності запуску ядра. Стартовий майданчик дозволяє вам запускати ресурси кожні n секунд без необхідності завершувати гру. Просто подайте у нього ресурси та забезпечте енергією.
|
block.launch-pad.description = Запускає партії предметів без необхідності запуску ядра. Стартовий майданчик надає можливість вам запускати ресурси кожні n секунд без необхідності завершувати гру. Просто подайте в нього ресурси та забезпечте енергією.
|
||||||
block.launch-pad-large.description = Поліпшена версія стартового майданчика. Зберігає більше предметів. Запускається частіше.
|
block.launch-pad-large.description = Поліпшена версія стартового майданчика. Зберігає більше предметів. Запускається частіше.
|
||||||
block.duo.description = Мала і дешева башта. Корисна проти наземних одиниць.
|
block.duo.description = Мала й дешева башта. Корисна проти наземних одиниць.
|
||||||
block.scatter.description = Основна протиповітряна башта. Вистрілює грудочки свинцю, брухту чи метаскла у противників.
|
block.scatter.description = Основна протиповітряна башта. Вистрілює грудочки свинцю, брухту чи метаскла в противників.
|
||||||
block.scorch.description = Підпалює будь-яких наземних противників поблизу. Високоефективна на близькій відстані.
|
block.scorch.description = Підпалює будь-яких наземних противників поблизу. Високоефективна на близькій відстані.
|
||||||
block.hail.description = Невелика артилерійська башта з далеким радіусом дії.
|
block.hail.description = Невелика артилерійська башта з далеким радіусом дії.
|
||||||
block.wave.description = Башта середнього розміру. Випускає потоками рідини в противників. Автоматично гасить пожежі при постачанні води.
|
block.wave.description = Башта середнього розміру. Випускає потоками рідини в противників. Автоматично гасить пожежі при постачанні води.
|
||||||
block.lancer.description = Лазерна башта середнього розміру, яка атакує наземних противників. Заряджає і вистрілює потужні пучки енергії.
|
block.lancer.description = Лазерна башта середнього розміру, яка атакує наземних противників. Заряджає і вистрілює потужні пучки енергії.
|
||||||
block.arc.description = Невелика електрична башта з малим радіусом дії. Стріляє дугами електрики у противників.
|
block.arc.description = Невелика електрична башта з малим радіусом дії. Стріляє дугами електрики в противників.
|
||||||
block.swarmer.description = Ракетна башта середнього розміру. Атакує як повітряних, так і наземних противників. Запускає ракети, які летять у противників самостійно.
|
block.swarmer.description = Ракетна башта середнього розміру. Атакує як повітряних, так і наземних противників. Запускає ракети, які летять у противників самостійно.
|
||||||
block.salvo.description = Більш велика, вдосконалена версія башти «Подвійна». Вистрілює швидкий залп куль у противника.
|
block.salvo.description = Більш велика, вдосконалена версія башти «Подвійна». Вистрілює швидкий залп куль у противника.
|
||||||
block.fuse.description = Велика енергетична башта з малим радіусом дії. Стріляє трьома пронизливими променями на найближчих противників.
|
block.fuse.description = Велика енергетична башта з малим радіусом дії. Стріляє трьома пронизливими променями на найближчих противників.
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 811 B After Width: | Height: | Size: 805 B |
Binary file not shown.
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 185 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 186 KiB |
@@ -60,6 +60,8 @@ public class Vars implements Loadable{
|
|||||||
public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers.json";
|
public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers.json";
|
||||||
/** URL to the JSON file containing all the BE servers. Only queried in BE. */
|
/** URL to the JSON file containing all the BE servers. Only queried in BE. */
|
||||||
public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json";
|
public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json";
|
||||||
|
/** URL to the JSON file containing all the BE servers. Only queried in the V6 alpha (will be removed once it's out). */
|
||||||
|
public static final String serverJsonV6URL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_v6.json";
|
||||||
/** URL of the github issue report template.*/
|
/** URL of the github issue report template.*/
|
||||||
public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?template=bug_report.md";
|
public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?template=bug_report.md";
|
||||||
/** list of built-in servers.*/
|
/** list of built-in servers.*/
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class BlockIndexer{
|
|||||||
/** Maps each team ID to a quarant. A quadrant is a grid of bits, where each bit is set if and only if there is a block of that team in that quadrant. */
|
/** Maps each team ID to a quarant. A quadrant is a grid of bits, where each bit is set if and only if there is a block of that team in that quadrant. */
|
||||||
private GridBits[] structQuadrants;
|
private GridBits[] structQuadrants;
|
||||||
/** Stores all damaged tile entities by team. */
|
/** Stores all damaged tile entities by team. */
|
||||||
private BuildingArray[] damagedTiles = new BuildingArray[Team.all.length];
|
private ObjectSet<Building>[] damagedTiles = new ObjectSet[Team.all.length];
|
||||||
/** All ores available on this map. */
|
/** All ores available on this map. */
|
||||||
private ObjectSet<Item> allOres = new ObjectSet<>();
|
private ObjectSet<Item> allOres = new ObjectSet<>();
|
||||||
/** Stores teams that are present here as tiles. */
|
/** Stores teams that are present here as tiles. */
|
||||||
@@ -70,7 +70,7 @@ public class BlockIndexer{
|
|||||||
Events.on(WorldLoadEvent.class, event -> {
|
Events.on(WorldLoadEvent.class, event -> {
|
||||||
scanOres.clear();
|
scanOres.clear();
|
||||||
scanOres.addAll(Item.getAllOres());
|
scanOres.addAll(Item.getAllOres());
|
||||||
damagedTiles = new BuildingArray[Team.all.length];
|
damagedTiles = new ObjectSet[Team.all.length];
|
||||||
flagMap = new TileArray[Team.all.length][BlockFlag.all.length];
|
flagMap = new TileArray[Team.all.length][BlockFlag.all.length];
|
||||||
unitCaps = new int[Team.all.length];
|
unitCaps = new int[Team.all.length];
|
||||||
activeTeams = new Seq<>(Team.class);
|
activeTeams = new Seq<>(Team.class);
|
||||||
@@ -139,14 +139,14 @@ public class BlockIndexer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Returns all damaged tiles by team. */
|
/** Returns all damaged tiles by team. */
|
||||||
public BuildingArray getDamaged(Team team){
|
public ObjectSet<Building> getDamaged(Team team){
|
||||||
returnArray.clear();
|
breturnArray.clear();
|
||||||
|
|
||||||
if(damagedTiles[team.id] == null){
|
if(damagedTiles[team.id] == null){
|
||||||
damagedTiles[team.id] = new BuildingArray();
|
damagedTiles[team.id] = new ObjectSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildingArray set = damagedTiles[team.id];
|
ObjectSet<Building> set = damagedTiles[team.id];
|
||||||
for(Building build : set){
|
for(Building build : set){
|
||||||
if((!build.isValid() || build.team != team || !build.damaged()) || build.block instanceof ConstructBlock){
|
if((!build.isValid() || build.team != team || !build.damaged()) || build.block instanceof ConstructBlock){
|
||||||
breturnArray.add(build);
|
breturnArray.add(build);
|
||||||
@@ -214,7 +214,7 @@ public class BlockIndexer{
|
|||||||
|
|
||||||
public void notifyTileDamaged(Building entity){
|
public void notifyTileDamaged(Building entity){
|
||||||
if(damagedTiles[entity.team.id] == null){
|
if(damagedTiles[entity.team.id] == null){
|
||||||
damagedTiles[entity.team.id] = new BuildingArray();
|
damagedTiles[entity.team.id] = new ObjectSet<Building>();
|
||||||
}
|
}
|
||||||
|
|
||||||
damagedTiles[entity.team.id].add(entity);
|
damagedTiles[entity.team.id].add(entity);
|
||||||
@@ -476,35 +476,4 @@ public class BlockIndexer{
|
|||||||
return tiles.iterator();
|
return tiles.iterator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO copy-pasted code, generics would be nice here
|
|
||||||
public static class BuildingArray implements Iterable<Building>{
|
|
||||||
private Seq<Building> tiles = new Seq<>(false, 16);
|
|
||||||
private IntSet contained = new IntSet();
|
|
||||||
|
|
||||||
public void add(Building tile){
|
|
||||||
if(contained.add(tile.pos())){
|
|
||||||
tiles.add(tile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void remove(Building tile){
|
|
||||||
if(contained.remove(tile.pos())){
|
|
||||||
tiles.remove(tile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int size(){
|
|
||||||
return tiles.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Building first(){
|
|
||||||
return tiles.first();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Iterator<Building> iterator(){
|
|
||||||
return tiles.iterator();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class BuilderAI extends AIController{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//find new request
|
//find new request
|
||||||
if(!unit.team().data().blocks.isEmpty() && following == null){
|
if(!unit.team().data().blocks.isEmpty() && following == null && timer.get(timerTarget3, 60 * 2f)){
|
||||||
Queue<BlockPlan> blocks = unit.team().data().blocks;
|
Queue<BlockPlan> blocks = unit.team().data().blocks;
|
||||||
BlockPlan block = blocks.first();
|
BlockPlan block = blocks.first();
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package mindustry.ai.types;
|
package mindustry.ai.types;
|
||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.util.*;
|
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
@@ -59,7 +58,7 @@ public class FlyingAI extends AIController{
|
|||||||
vec.setAngle(Mathf.slerpDelta(unit.vel().angle(), vec.angle(), 0.6f));
|
vec.setAngle(Mathf.slerpDelta(unit.vel().angle(), vec.angle(), 0.6f));
|
||||||
}
|
}
|
||||||
|
|
||||||
vec.setLength(unit.type().speed * Time.delta);
|
vec.setLength(unit.type().speed);
|
||||||
|
|
||||||
unit.moveAt(vec);
|
unit.moveAt(vec);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ public class RepairAI extends AIController{
|
|||||||
boolean shoot = false;
|
boolean shoot = false;
|
||||||
|
|
||||||
if(target != null){
|
if(target != null){
|
||||||
if(!target.within(unit, unit.type().range)){
|
if(!target.within(unit, unit.type().range * 0.8f)){
|
||||||
moveTo(target, unit.type().range * 0.9f);
|
moveTo(target, unit.type().range * 0.8f);
|
||||||
}else{
|
}else{
|
||||||
unit.aim(target);
|
unit.aim(target);
|
||||||
shoot = true;
|
shoot = true;
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
duneWall = new StaticWall("dune-wall"){{
|
duneWall = new StaticWall("dune-wall"){{
|
||||||
variants = 2;
|
variants = 2;
|
||||||
basalt.asFloor().wall = this;
|
basalt.asFloor().wall = darksandWater.asFloor().wall = darksandTaintedWater.asFloor().wall = this;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
sandWall = new StaticWall("sand-wall"){{
|
sandWall = new StaticWall("sand-wall"){{
|
||||||
@@ -1011,7 +1011,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
mechanicalPump = new Pump("mechanical-pump"){{
|
mechanicalPump = new Pump("mechanical-pump"){{
|
||||||
requirements(Category.liquid, with(Items.copper, 15, Items.metaglass, 10));
|
requirements(Category.liquid, with(Items.copper, 15, Items.metaglass, 10));
|
||||||
pumpAmount = 0.1f;
|
pumpAmount = 0.11f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
rotaryPump = new Pump("rotary-pump"){{
|
rotaryPump = new Pump("rotary-pump"){{
|
||||||
@@ -1136,7 +1136,7 @@ public class Blocks implements ContentList{
|
|||||||
requirements(Category.power, with(Items.copper, 35, Items.graphite, 25, Items.lead, 40, Items.silicon, 30));
|
requirements(Category.power, with(Items.copper, 35, Items.graphite, 25, Items.lead, 40, Items.silicon, 30));
|
||||||
powerProduction = 5.5f;
|
powerProduction = 5.5f;
|
||||||
itemDuration = 90f;
|
itemDuration = 90f;
|
||||||
consumes.liquid(Liquids.water, 0.06f);
|
consumes.liquid(Liquids.water, 0.07f);
|
||||||
hasLiquids = true;
|
hasLiquids = true;
|
||||||
size = 2;
|
size = 2;
|
||||||
}};
|
}};
|
||||||
@@ -1269,7 +1269,7 @@ public class Blocks implements ContentList{
|
|||||||
hasItems = true;
|
hasItems = true;
|
||||||
|
|
||||||
consumes.power(0.80f);
|
consumes.power(0.80f);
|
||||||
consumes.liquid(Liquids.water, 0.18f);
|
consumes.liquid(Liquids.water, 0.2f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
oilExtractor = new Fracker("oil-extractor"){{
|
oilExtractor = new Fracker("oil-extractor"){{
|
||||||
@@ -1645,7 +1645,7 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
spectre = new ItemTurret("spectre"){{
|
spectre = new ItemTurret("spectre"){{
|
||||||
requirements(Category.turret, with(Items.copper, 350, Items.graphite, 300, Items.surgealloy, 250, Items.plastanium, 175, Items.thorium, 250));
|
requirements(Category.turret, with(Items.copper, 900, Items.graphite, 300, Items.surgealloy, 250, Items.plastanium, 175, Items.thorium, 250));
|
||||||
ammo(
|
ammo(
|
||||||
Items.graphite, Bullets.standardDenseBig,
|
Items.graphite, Bullets.standardDenseBig,
|
||||||
Items.pyratite, Bullets.standardIncendiaryBig,
|
Items.pyratite, Bullets.standardIncendiaryBig,
|
||||||
@@ -1671,7 +1671,7 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
meltdown = new LaserTurret("meltdown"){{
|
meltdown = new LaserTurret("meltdown"){{
|
||||||
requirements(Category.turret, with(Items.copper, 250, Items.lead, 350, Items.graphite, 300, Items.surgealloy, 325, Items.silicon, 325));
|
requirements(Category.turret, with(Items.copper, 1200, Items.lead, 350, Items.graphite, 300, Items.surgealloy, 325, Items.silicon, 325));
|
||||||
shootEffect = Fx.shootBigSmoke2;
|
shootEffect = Fx.shootBigSmoke2;
|
||||||
shootCone = 40f;
|
shootCone = 40f;
|
||||||
recoilAmount = 4f;
|
recoilAmount = 4f;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class UnitTypes implements ContentList{
|
|||||||
//air + building + mining
|
//air + building + mining
|
||||||
public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType alpha, beta, gamma;
|
public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType alpha, beta, gamma;
|
||||||
|
|
||||||
//water
|
//water + commander
|
||||||
public static @EntityDef({Unitc.class, WaterMovec.class, Commanderc.class}) UnitType risso, minke, bryde;
|
public static @EntityDef({Unitc.class, WaterMovec.class, Commanderc.class}) UnitType risso, minke, bryde;
|
||||||
|
|
||||||
//special block unit type
|
//special block unit type
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import arc.graphics.*;
|
|||||||
import arc.graphics.Texture.*;
|
import arc.graphics.Texture.*;
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
@@ -170,8 +169,8 @@ public class Weathers implements ContentList{
|
|||||||
|
|
||||||
sandstorm = new Weather("sandstorm"){
|
sandstorm = new Weather("sandstorm"){
|
||||||
TextureRegion region;
|
TextureRegion region;
|
||||||
float yspeed = 0.3f, xspeed = 6f, size = 140f, padding = size, invDensity = 1500f;
|
float size = 140f, padding = size, invDensity = 1500f, baseSpeed = 6.1f;
|
||||||
Vec2 force = new Vec2(0.45f, 0.01f);
|
float force = 0.45f;
|
||||||
Color color = Color.valueOf("f7cba4");
|
Color color = Color.valueOf("f7cba4");
|
||||||
Texture noise;
|
Texture noise;
|
||||||
|
|
||||||
@@ -194,22 +193,26 @@ public class Weathers implements ContentList{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(WeatherState state){
|
public void update(WeatherState state){
|
||||||
|
float speed = force * state.intensity;
|
||||||
|
float windx = state.windVector.x * speed, windy = state.windVector.y * speed;
|
||||||
|
|
||||||
for(Unit unit : Groups.unit){
|
for(Unit unit : Groups.unit){
|
||||||
unit.impulse(force.x * state.intensity(), force.y * state.intensity());
|
unit.impulse(windx, windy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawOver(WeatherState state){
|
public void drawOver(WeatherState state){
|
||||||
Draw.tint(color);
|
Draw.tint(color);
|
||||||
|
float speed = baseSpeed * state.intensity;
|
||||||
|
float windx = state.windVector.x * speed, windy = state.windVector.y * speed;
|
||||||
|
|
||||||
float scale = 1f / 2000f;
|
float scale = 1f / 2000f;
|
||||||
float scroll = Time.time() * scale;
|
float scroll = Time.time() * scale;
|
||||||
Tmp.tr1.texture = noise;
|
Tmp.tr1.texture = noise;
|
||||||
Core.camera.bounds(Tmp.r1);
|
Core.camera.bounds(Tmp.r1);
|
||||||
Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale);
|
Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale);
|
||||||
Tmp.tr1.scroll(-xspeed * scroll, -yspeed * scroll);
|
Tmp.tr1.scroll(-windx * scroll, windy * scroll);
|
||||||
Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height);
|
Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height);
|
||||||
|
|
||||||
rand.setSeed(0);
|
rand.setSeed(0);
|
||||||
@@ -224,8 +227,8 @@ public class Weathers implements ContentList{
|
|||||||
float scl = rand.random(0.5f, 1f);
|
float scl = rand.random(0.5f, 1f);
|
||||||
float scl2 = rand.random(0.5f, 1f);
|
float scl2 = rand.random(0.5f, 1f);
|
||||||
float sscl = rand.random(0.5f, 1f);
|
float sscl = rand.random(0.5f, 1f);
|
||||||
float x = (rand.random(0f, world.unitWidth()) + Time.time() * xspeed * scl2);
|
float x = (rand.random(0f, world.unitWidth()) + Time.time() * windx * scl2);
|
||||||
float y = (rand.random(0f, world.unitHeight()) - Time.time() * yspeed * scl);
|
float y = (rand.random(0f, world.unitHeight()) + Time.time() * windy * scl);
|
||||||
float alpha = rand.random(0.2f);
|
float alpha = rand.random(0.2f);
|
||||||
|
|
||||||
x += Mathf.sin(y, rand.random(30f, 80f), rand.random(1f, 7f));
|
x += Mathf.sin(y, rand.random(30f, 80f), rand.random(1f, 7f));
|
||||||
@@ -247,14 +250,13 @@ public class Weathers implements ContentList{
|
|||||||
|
|
||||||
sporestorm = new Weather("sporestorm"){
|
sporestorm = new Weather("sporestorm"){
|
||||||
TextureRegion region;
|
TextureRegion region;
|
||||||
float yspeed = 1f, xspeed = 4f, size = 5f, padding = size, invDensity = 2000f;
|
float size = 5f, padding = size, invDensity = 2000f, baseSpeed = 4.3f, force = 0.28f;
|
||||||
Color color = Color.valueOf("7457ce");
|
Color color = Color.valueOf("7457ce");
|
||||||
Vec2 force = new Vec2(0.25f, 0.01f);
|
|
||||||
Texture noise;
|
Texture noise;
|
||||||
|
|
||||||
{
|
{
|
||||||
attrs.set(Attribute.spores, 0.5f);
|
attrs.set(Attribute.spores, 1f);
|
||||||
attrs.set(Attribute.light, -0.1f);
|
attrs.set(Attribute.light, -0.15f);
|
||||||
status = StatusEffects.sporeSlowed;
|
status = StatusEffects.sporeSlowed;
|
||||||
statusGround = false;
|
statusGround = false;
|
||||||
}
|
}
|
||||||
@@ -269,9 +271,11 @@ public class Weathers implements ContentList{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(WeatherState state){
|
public void update(WeatherState state){
|
||||||
|
float speed = force * state.intensity;
|
||||||
|
float windx = state.windVector.x * speed, windy = state.windVector.y * speed;
|
||||||
|
|
||||||
for(Unit unit : Groups.unit){
|
for(Unit unit : Groups.unit){
|
||||||
unit.impulse(force.x * state.intensity(), force.y * state.intensity());
|
unit.impulse(windx, windy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,12 +289,15 @@ public class Weathers implements ContentList{
|
|||||||
Draw.alpha(state.opacity * 0.8f);
|
Draw.alpha(state.opacity * 0.8f);
|
||||||
Draw.tint(color);
|
Draw.tint(color);
|
||||||
|
|
||||||
|
float speed = baseSpeed * state.intensity;
|
||||||
|
float windx = state.windVector.x * speed, windy = state.windVector.y * speed;
|
||||||
|
|
||||||
float scale = 1f / 2000f;
|
float scale = 1f / 2000f;
|
||||||
float scroll = Time.time() * scale;
|
float scroll = Time.time() * scale;
|
||||||
Tmp.tr1.texture = noise;
|
Tmp.tr1.texture = noise;
|
||||||
Core.camera.bounds(Tmp.r1);
|
Core.camera.bounds(Tmp.r1);
|
||||||
Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale);
|
Tmp.tr1.set(Tmp.r1.x*scale, Tmp.r1.y*scale, (Tmp.r1.x + Tmp.r1.width)*scale, (Tmp.r1.y + Tmp.r1.height)*scale);
|
||||||
Tmp.tr1.scroll(-xspeed * scroll, -yspeed * scroll);
|
Tmp.tr1.scroll(-windx * scroll, windy * scroll);
|
||||||
Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height);
|
Draw.rect(Tmp.tr1, Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height);
|
||||||
|
|
||||||
rand.setSeed(0);
|
rand.setSeed(0);
|
||||||
@@ -306,8 +313,8 @@ public class Weathers implements ContentList{
|
|||||||
float scl = rand.random(0.5f, 1f);
|
float scl = rand.random(0.5f, 1f);
|
||||||
float scl2 = rand.random(0.5f, 1f);
|
float scl2 = rand.random(0.5f, 1f);
|
||||||
float sscl = rand.random(0.5f, 1f);
|
float sscl = rand.random(0.5f, 1f);
|
||||||
float x = (rand.random(0f, world.unitWidth()) + Time.time() * xspeed * scl2);
|
float x = (rand.random(0f, world.unitWidth()) + Time.time() * windx * scl2);
|
||||||
float y = (rand.random(0f, world.unitHeight()) - Time.time() * yspeed * scl);
|
float y = (rand.random(0f, world.unitHeight()) + Time.time() * windy * scl);
|
||||||
float alpha = rand.random(0.1f, 0.8f);
|
float alpha = rand.random(0.1f, 0.8f);
|
||||||
|
|
||||||
x += Mathf.sin(y, rand.random(30f, 80f), rand.random(1f, 7f));
|
x += Mathf.sin(y, rand.random(30f, 80f), rand.random(1f, 7f));
|
||||||
|
|||||||
@@ -329,6 +329,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void playTutorial(){
|
public void playTutorial(){
|
||||||
|
ui.showInfo("There is no tutorial yet.");
|
||||||
//TODO implement
|
//TODO implement
|
||||||
//ui.showInfo("death");
|
//ui.showInfo("death");
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -245,7 +245,8 @@ public class Logic implements ApplicationListener{
|
|||||||
if(entry.cooldown < 0 && !entry.weather.isActive()){
|
if(entry.cooldown < 0 && !entry.weather.isActive()){
|
||||||
float duration = Mathf.random(entry.minDuration, entry.maxDuration);
|
float duration = Mathf.random(entry.minDuration, entry.maxDuration);
|
||||||
entry.cooldown = duration + Mathf.random(entry.minFrequency, entry.maxFrequency);
|
entry.cooldown = duration + Mathf.random(entry.minFrequency, entry.maxFrequency);
|
||||||
Call.createWeather(entry.weather, entry.intensity, duration);
|
Tmp.v1.setToRandomDirection();
|
||||||
|
Call.createWeather(entry.weather, entry.intensity, duration, Tmp.v1.x, Tmp.v1.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -338,6 +338,8 @@ public class NetClient implements ApplicationListener{
|
|||||||
@Remote(variants = Variant.both)
|
@Remote(variants = Variant.both)
|
||||||
public static void setRules(Rules rules){
|
public static void setRules(Rules rules){
|
||||||
state.rules = rules;
|
state.rules = rules;
|
||||||
|
//campaign is not valid in multiplayer
|
||||||
|
state.rules.sector = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(variants = Variant.both)
|
@Remote(variants = Variant.both)
|
||||||
@@ -547,6 +549,10 @@ public class NetClient implements ApplicationListener{
|
|||||||
quiet = true;
|
quiet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearRemovedEntity(int id){
|
||||||
|
removed.remove(id);
|
||||||
|
}
|
||||||
|
|
||||||
public void addRemovedEntity(int id){
|
public void addRemovedEntity(int id){
|
||||||
removed.add(id);
|
removed.add(id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -593,38 +593,38 @@ public class NetServer implements ApplicationListener{
|
|||||||
if(player.isBuilder()){
|
if(player.isBuilder()){
|
||||||
player.builder().clearBuilding();
|
player.builder().clearBuilding();
|
||||||
player.builder().updateBuilding(building);
|
player.builder().updateBuilding(building);
|
||||||
|
|
||||||
|
if(requests != null){
|
||||||
|
for(BuildPlan req : requests){
|
||||||
|
if(req == null) continue;
|
||||||
|
Tile tile = world.tile(req.x, req.y);
|
||||||
|
if(tile == null || (!req.breaking && req.block == null)) continue;
|
||||||
|
//auto-skip done requests
|
||||||
|
if(req.breaking && tile.block() == Blocks.air){
|
||||||
|
continue;
|
||||||
|
}else if(!req.breaking && tile.block() == req.block && (!req.block.rotate || (tile.build != null && tile.build.rotation == req.rotation))){
|
||||||
|
continue;
|
||||||
|
}else if(con.rejectedRequests.contains(r -> r.breaking == req.breaking && r.x == req.x && r.y == req.y)){ //check if request was recently rejected, and skip it if so
|
||||||
|
continue;
|
||||||
|
}else if(!netServer.admins.allowAction(player, req.breaking ? ActionType.breakBlock : ActionType.placeBlock, tile, action -> { //make sure request is allowed by the server
|
||||||
|
action.block = req.block;
|
||||||
|
action.rotation = req.rotation;
|
||||||
|
action.config = req.config;
|
||||||
|
})){
|
||||||
|
//force the player to remove this request if that's not the case
|
||||||
|
Call.removeQueueBlock(player.con, req.x, req.y, req.breaking);
|
||||||
|
con.rejectedRequests.add(req);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
player.builder().plans().addLast(req);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(player.isMiner()){
|
if(player.isMiner()){
|
||||||
player.miner().mineTile(mining);
|
player.miner().mineTile(mining);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(requests != null){
|
|
||||||
for(BuildPlan req : requests){
|
|
||||||
if(req == null) continue;
|
|
||||||
Tile tile = world.tile(req.x, req.y);
|
|
||||||
if(tile == null || (!req.breaking && req.block == null)) continue;
|
|
||||||
//auto-skip done requests
|
|
||||||
if(req.breaking && tile.block() == Blocks.air){
|
|
||||||
continue;
|
|
||||||
}else if(!req.breaking && tile.block() == req.block && (!req.block.rotate || (tile.build != null && tile.build.rotation == req.rotation))){
|
|
||||||
continue;
|
|
||||||
}else if(con.rejectedRequests.contains(r -> r.breaking == req.breaking && r.x == req.x && r.y == req.y)){ //check if request was recently rejected, and skip it if so
|
|
||||||
continue;
|
|
||||||
}else if(!netServer.admins.allowAction(player, req.breaking ? ActionType.breakBlock : ActionType.placeBlock, tile, action -> { //make sure request is allowed by the server
|
|
||||||
action.block = req.block;
|
|
||||||
action.rotation = req.rotation;
|
|
||||||
action.config = req.config;
|
|
||||||
})){
|
|
||||||
//force the player to remove this request if that's not the case
|
|
||||||
Call.removeQueueBlock(player.con, req.x, req.y, req.breaking);
|
|
||||||
con.rejectedRequests.add(req);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
player.builder().plans().addLast(req);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
con.rejectedRequests.clear();
|
con.rejectedRequests.clear();
|
||||||
|
|
||||||
if(!player.dead()){
|
if(!player.dead()){
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import arc.func.*;
|
|||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
|
import arc.struct.ObjectIntMap.*;
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.noise.*;
|
import arc.util.noise.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.core.GameState.*;
|
import mindustry.core.GameState.*;
|
||||||
|
import mindustry.ctype.*;
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.game.Teams.*;
|
import mindustry.game.Teams.*;
|
||||||
@@ -19,7 +21,6 @@ import mindustry.maps.*;
|
|||||||
import mindustry.maps.filters.*;
|
import mindustry.maps.filters.*;
|
||||||
import mindustry.maps.filters.GenerateFilter.*;
|
import mindustry.maps.filters.GenerateFilter.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.type.Sector.*;
|
|
||||||
import mindustry.type.Weather.*;
|
import mindustry.type.Weather.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.environment.*;
|
import mindustry.world.blocks.environment.*;
|
||||||
@@ -33,11 +34,17 @@ public class World{
|
|||||||
public @NonNull Tiles tiles = new Tiles(0, 0);
|
public @NonNull Tiles tiles = new Tiles(0, 0);
|
||||||
|
|
||||||
private boolean generating, invalidMap;
|
private boolean generating, invalidMap;
|
||||||
|
private ObjectMap<Map, Runnable> customMapLoaders = new ObjectMap<>();
|
||||||
|
|
||||||
public World(){
|
public World(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Adds a custom handler function for loading a custom map - usually a generated one. */
|
||||||
|
public void addMapLoader(Map map, Runnable loader){
|
||||||
|
customMapLoaders.put(map, loader);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isInvalidMap(){
|
public boolean isInvalidMap(){
|
||||||
return invalidMap;
|
return invalidMap;
|
||||||
}
|
}
|
||||||
@@ -255,9 +262,71 @@ public class World{
|
|||||||
|
|
||||||
state.rules.weather.clear();
|
state.rules.weather.clear();
|
||||||
|
|
||||||
if(sector.is(SectorAttribute.rainy)) state.rules.weather.add(new WeatherEntry(Weathers.rain));
|
//apply weather based on terrain
|
||||||
if(sector.is(SectorAttribute.snowy)) state.rules.weather.add(new WeatherEntry(Weathers.snow));
|
ObjectIntMap<Block> floorc = new ObjectIntMap<>();
|
||||||
if(sector.is(SectorAttribute.desert)) state.rules.weather.add(new WeatherEntry(Weathers.sandstorm));
|
ObjectSet<UnlockableContent> content = new ObjectSet<>();
|
||||||
|
|
||||||
|
float waterFloors = 0, totalFloors = 0;
|
||||||
|
|
||||||
|
for(Tile tile : world.tiles){
|
||||||
|
if(world.getDarkness(tile.x, tile.y) >= 3){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Liquid liquid = tile.floor().liquidDrop;
|
||||||
|
if(tile.floor().itemDrop != null) content.add(tile.floor().itemDrop);
|
||||||
|
if(tile.overlay().itemDrop != null) content.add(tile.overlay().itemDrop);
|
||||||
|
if(liquid != null) content.add(liquid);
|
||||||
|
|
||||||
|
if(!tile.block().isStatic()){
|
||||||
|
totalFloors ++;
|
||||||
|
if(liquid == Liquids.water){
|
||||||
|
waterFloors += tile.floor().isDeep() ? 1f : 0.7f;
|
||||||
|
}
|
||||||
|
floorc.increment(tile.floor());
|
||||||
|
if(tile.overlay() != Blocks.air){
|
||||||
|
floorc.increment(tile.overlay());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//sort counts in descending order
|
||||||
|
Seq<Entry<Block>> entries = floorc.entries().toArray();
|
||||||
|
entries.sort(e -> -e.value);
|
||||||
|
//remove all blocks occuring < 30 times - unimportant
|
||||||
|
entries.removeAll(e -> e.value < 30);
|
||||||
|
|
||||||
|
Block[] floors = new Block[entries.size];
|
||||||
|
int[] floorCounts = new int[entries.size];
|
||||||
|
for(int i = 0; i < entries.size; i++){
|
||||||
|
floorCounts[i] = entries.get(i).value;
|
||||||
|
floors[i] = entries.get(i).key;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO bad code
|
||||||
|
boolean hasSnow = floors[0].name.contains("ice") || floors[0].name.contains("snow");
|
||||||
|
boolean hasRain = !hasSnow && floors[0].name.contains("water");
|
||||||
|
boolean hasDesert = !hasSnow && !hasRain && floors[0].name.contains("sand");
|
||||||
|
boolean hasSpores = floors[0].name.contains("spore") || floors[0].name.contains("moss") || floors[0].name.contains("tainted");
|
||||||
|
|
||||||
|
if(hasSnow){
|
||||||
|
state.rules.weather.add(new WeatherEntry(Weathers.snow));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasRain){
|
||||||
|
state.rules.weather.add(new WeatherEntry(Weathers.rain));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasDesert){
|
||||||
|
state.rules.weather.add(new WeatherEntry(Weathers.sandstorm));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasSpores){
|
||||||
|
state.rules.weather.add(new WeatherEntry(Weathers.sporestorm));
|
||||||
|
}
|
||||||
|
|
||||||
|
state.secinfo.resources = content.asArray();
|
||||||
|
state.secinfo.resources.sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,6 +339,12 @@ public class World{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void loadMap(Map map, Rules checkRules){
|
public void loadMap(Map map, Rules checkRules){
|
||||||
|
//load using custom loader if possible
|
||||||
|
if(customMapLoaders.containsKey(map)){
|
||||||
|
customMapLoaders.get(map).run();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try{
|
try{
|
||||||
SaveIO.load(map.file, new FilterContext(map));
|
SaveIO.load(map.file, new FilterContext(map));
|
||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class EditorTile extends Tile{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setFloor(@NonNull Floor type){
|
public void setFloor(@NonNull Floor type){
|
||||||
if(state.isGame()){
|
if(skip()){
|
||||||
super.setFloor(type);
|
super.setFloor(type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -41,20 +41,25 @@ public class EditorTile extends Tile{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setBlock(Block type, Team team, int rotation){
|
public void setBlock(Block type, Team team, int rotation){
|
||||||
if(state.isGame()){
|
if(skip()){
|
||||||
super.setBlock(type, team, rotation);
|
super.setBlock(type, team, rotation);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
op(OpType.block, block.id);
|
//if(this.block == type && (build == null || build.rotation == rotation)){
|
||||||
|
// ui.editor.editor.renderer().updatePoint(x, y);
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
|
||||||
if(rotation != 0) op(OpType.rotation, (byte)rotation);
|
if(rotation != 0) op(OpType.rotation, (byte)rotation);
|
||||||
if(team() != Team.derelict) op(OpType.team, (byte)team().id);
|
if(team() != Team.derelict) op(OpType.team, (byte)team().id);
|
||||||
|
op(OpType.block, block.id);
|
||||||
super.setBlock(type, team, rotation);
|
super.setBlock(type, team, rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTeam(Team team){
|
public void setTeam(Team team){
|
||||||
if(state.isGame()){
|
if(skip()){
|
||||||
super.setTeam(team);
|
super.setTeam(team);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -66,7 +71,7 @@ public class EditorTile extends Tile{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOverlay(Block overlay){
|
public void setOverlay(Block overlay){
|
||||||
if(state.isGame()){
|
if(skip()){
|
||||||
super.setOverlay(overlay);
|
super.setOverlay(overlay);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -79,7 +84,7 @@ public class EditorTile extends Tile{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void fireChanged(){
|
protected void fireChanged(){
|
||||||
if(state.isGame()){
|
if(skip()){
|
||||||
super.fireChanged();
|
super.fireChanged();
|
||||||
}else{
|
}else{
|
||||||
ui.editor.editor.renderer().updatePoint(x, y);
|
ui.editor.editor.renderer().updatePoint(x, y);
|
||||||
@@ -88,14 +93,14 @@ public class EditorTile extends Tile{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void recache(){
|
public void recache(){
|
||||||
if(state.isGame()){
|
if(skip()){
|
||||||
super.recache();
|
super.recache();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void changeEntity(Team team, Prov<Building> entityprov, int rotation){
|
protected void changeEntity(Team team, Prov<Building> entityprov, int rotation){
|
||||||
if(state.isGame()){
|
if(skip()){
|
||||||
super.changeEntity(team, entityprov, rotation);
|
super.changeEntity(team, entityprov, rotation);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -116,6 +121,10 @@ public class EditorTile extends Tile{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean skip(){
|
||||||
|
return state.isGame() || ui.editor.editor.isLoading();
|
||||||
|
}
|
||||||
|
|
||||||
private void op(OpType type, short value){
|
private void op(OpType type, short value){
|
||||||
ui.editor.editor.addTileOp(TileOp.get(x, y, (byte)type.ordinal(), value));
|
ui.editor.editor.addTileOp(TileOp.get(x, y, (byte)type.ordinal(), value));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ public class MapEditor{
|
|||||||
public Block drawBlock = Blocks.stone;
|
public Block drawBlock = Blocks.stone;
|
||||||
public Team drawTeam = Team.sharded;
|
public Team drawTeam = Team.sharded;
|
||||||
|
|
||||||
|
public boolean isLoading(){
|
||||||
|
return loading;
|
||||||
|
}
|
||||||
|
|
||||||
public StringMap getTags(){
|
public StringMap getTags(){
|
||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
@@ -52,7 +56,7 @@ public class MapEditor{
|
|||||||
if(map.file.parent().parent().name().equals("1127400") && steam){
|
if(map.file.parent().parent().name().equals("1127400") && steam){
|
||||||
tags.put("steamid", map.file.parent().name());
|
tags.put("steamid", map.file.parent().name());
|
||||||
}
|
}
|
||||||
MapIO.loadMap(map, context);
|
load(() -> MapIO.loadMap(map, context));
|
||||||
renderer.resize(width(), height());
|
renderer.resize(width(), height());
|
||||||
loading = false;
|
loading = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -275,6 +275,8 @@ public class MapGenerateDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
}).grow().left().pad(6).top();
|
}).grow().left().pad(6).top();
|
||||||
}).width(280f).pad(3).top().left().fillY();
|
}).width(280f).pad(3).top().left().fillY();
|
||||||
|
|
||||||
|
|
||||||
if(++i % cols == 0){
|
if(++i % cols == 0){
|
||||||
filterTable.row();
|
filterTable.row();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ public class MapRenderer implements Disposable{
|
|||||||
wx * tilesize + wall.offset + (tilesize - width) / 2f,
|
wx * tilesize + wall.offset + (tilesize - width) / 2f,
|
||||||
wy * tilesize + wall.offset + (tilesize - height) / 2f,
|
wy * tilesize + wall.offset + (tilesize - height) / 2f,
|
||||||
width, height,
|
width, height,
|
||||||
tile.build == null || !wall.rotate ? 0 : tile.build.rotdeg() - 90);
|
tile.build == null || !wall.rotate ? 0 : tile.build.rotdeg());
|
||||||
}else{
|
}else{
|
||||||
region = floor.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, floor.editorVariantRegions().length - 1)];
|
region = floor.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, floor.editorVariantRegions().length - 1)];
|
||||||
|
|
||||||
|
|||||||
@@ -255,7 +255,13 @@ public class MapView extends Element implements GestureListener{
|
|||||||
Draw.color(Color.gray);
|
Draw.color(Color.gray);
|
||||||
image.setBounds(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight);
|
image.setBounds(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight);
|
||||||
image.draw();
|
image.draw();
|
||||||
Draw.color();
|
|
||||||
|
Lines.stroke(3f);
|
||||||
|
Draw.color(Pal.accent);
|
||||||
|
Lines.line(centerx - sclwidth/2f, centery, centerx + sclwidth/2f, centery);
|
||||||
|
Lines.line(centerx, centery - sclheight/2f, centerx, centery + sclheight/2f);
|
||||||
|
|
||||||
|
Draw.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import static mindustry.Vars.*;
|
|||||||
|
|
||||||
public class EntityCollisions{
|
public class EntityCollisions{
|
||||||
//range for tile collision scanning
|
//range for tile collision scanning
|
||||||
private static final int r = 2;
|
private static final int r = 1;
|
||||||
//move in 1-unit chunks
|
//move in 1-unit chunks
|
||||||
private static final float seg = 1f;
|
private static final float seg = 1f;
|
||||||
|
|
||||||
|
|||||||
@@ -39,10 +39,15 @@ public class SapBulletType extends BulletType{
|
|||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, 15f * b.fout(), lightColor, 0.6f);
|
Drawf.light(b.team, b.x, b.y, Tmp.v1.x, Tmp.v1.y, 15f * b.fout(), lightColor, 0.6f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawLight(Bullet b){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float range(){
|
public float range(){
|
||||||
return length;
|
return length;
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ abstract class HitboxComp implements Posc, QuadTreeObject{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void hitboxTile(Rect rect){
|
public void hitboxTile(Rect rect){
|
||||||
float size = hitSize * 0.66f;
|
//tile hitboxes are never bigger than a tile, otherwise units get stuck
|
||||||
|
float size = Math.min(hitSize * 0.66f, 7.9f);
|
||||||
rect.setCentered(x, y, size, size);
|
rect.setCentered(x, y, size, size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,11 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
|
|||||||
boolean tryDropPayload(Payload payload){
|
boolean tryDropPayload(Payload payload){
|
||||||
Tile on = tileOn();
|
Tile on = tileOn();
|
||||||
|
|
||||||
|
//clear removed state of unit so it can be synced
|
||||||
|
if(Vars.net.client() && payload instanceof UnitPayload){
|
||||||
|
Vars.netClient.clearRemovedEntity(((UnitPayload)payload).unit.id);
|
||||||
|
}
|
||||||
|
|
||||||
//drop off payload on an acceptor if possible
|
//drop off payload on an acceptor if possible
|
||||||
if(on != null && on.build != null && on.build.acceptPayload(on.build, payload)){
|
if(on != null && on.build != null && on.build.acceptPayload(on.build, payload)){
|
||||||
Fx.unitDrop.at(on.build);
|
Fx.unitDrop.at(on.build);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public class AIController implements UnitController{
|
|||||||
protected static final Vec2 vec = new Vec2();
|
protected static final Vec2 vec = new Vec2();
|
||||||
protected static final int timerTarget = 0;
|
protected static final int timerTarget = 0;
|
||||||
protected static final int timerTarget2 = 1;
|
protected static final int timerTarget2 = 1;
|
||||||
|
protected static final int timerTarget3 = 2;
|
||||||
|
|
||||||
protected Unit unit;
|
protected Unit unit;
|
||||||
protected Interval timer = new Interval(4);
|
protected Interval timer = new Interval(4);
|
||||||
@@ -151,7 +152,7 @@ public class AIController implements UnitController{
|
|||||||
vec.rotate((circleLength - vec.len()) / circleLength * 180f);
|
vec.rotate((circleLength - vec.len()) / circleLength * 180f);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec.setLength(speed * Time.delta);
|
vec.setLength(speed);
|
||||||
|
|
||||||
unit.moveAt(vec);
|
unit.moveAt(vec);
|
||||||
}
|
}
|
||||||
@@ -163,7 +164,7 @@ public class AIController implements UnitController{
|
|||||||
|
|
||||||
float length = circleLength <= 0.001f ? 1f : Mathf.clamp((unit.dst(target) - circleLength) / 100f, -1f, 1f);
|
float length = circleLength <= 0.001f ? 1f : Mathf.clamp((unit.dst(target) - circleLength) / 100f, -1f, 1f);
|
||||||
|
|
||||||
vec.setLength(unit.type().speed * Time.delta * length);
|
vec.setLength(unit.type().speed * length);
|
||||||
if(length < -0.5f){
|
if(length < -0.5f){
|
||||||
vec.rotate(180f);
|
vec.rotate(180f);
|
||||||
}else if(length < 0){
|
}else if(length < 0){
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package mindustry.game;
|
|||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
|
import arc.util.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
|
import mindustry.ctype.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||||
@@ -32,6 +33,8 @@ public class SectorInfo{
|
|||||||
public boolean hasCore = true;
|
public boolean hasCore = true;
|
||||||
/** Sector that was launched from. */
|
/** Sector that was launched from. */
|
||||||
public @Nullable Sector origin;
|
public @Nullable Sector origin;
|
||||||
|
/** Resources known to occur at this sector. */
|
||||||
|
public Seq<UnlockableContent> resources = new Seq<>();
|
||||||
/** Time spent at this sector. Do not use unless you know what you're doing. */
|
/** Time spent at this sector. Do not use unless you know what you're doing. */
|
||||||
public transient float internalTimeSpent;
|
public transient float internalTimeSpent;
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class Stats{
|
|||||||
|
|
||||||
//weigh used fractions
|
//weigh used fractions
|
||||||
float frac = 0f;
|
float frac = 0f;
|
||||||
Seq<Item> obtainable = Seq.select(zone.data.resources, i -> i instanceof Item).as();
|
Seq<Item> obtainable = zone.save == null ? new Seq<>() : zone.save.meta.secinfo.resources.select(i -> i instanceof Item).as();
|
||||||
for(Item item : obtainable){
|
for(Item item : obtainable){
|
||||||
frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size;
|
frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public enum CacheLayer{
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
normal(5),
|
normal(5),
|
||||||
walls;
|
walls(3);
|
||||||
|
|
||||||
public static final CacheLayer[] all = values();
|
public static final CacheLayer[] all = values();
|
||||||
/** Capacity multiplier. */
|
/** Capacity multiplier. */
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ public class FloorRenderer implements Disposable{
|
|||||||
int chunksx = Mathf.ceil((float)(world.width()) / chunksize),
|
int chunksx = Mathf.ceil((float)(world.width()) / chunksize),
|
||||||
chunksy = Mathf.ceil((float)(world.height()) / chunksize);
|
chunksy = Mathf.ceil((float)(world.height()) / chunksize);
|
||||||
cache = new Chunk[chunksx][chunksy];
|
cache = new Chunk[chunksx][chunksy];
|
||||||
cbatch = new MultiCacheBatch(chunksize * chunksize * 6);
|
cbatch = new MultiCacheBatch(chunksize * chunksize * 7);
|
||||||
|
|
||||||
Time.mark();
|
Time.mark();
|
||||||
|
|
||||||
|
|||||||
@@ -96,24 +96,24 @@ public class IndexedRenderer implements Disposable{
|
|||||||
vertices[idx++] = v2;
|
vertices[idx++] = v2;
|
||||||
|
|
||||||
//tri2
|
//tri2
|
||||||
vertices[idx++] = x;
|
|
||||||
vertices[idx++] = y;
|
|
||||||
vertices[idx++] = color;
|
|
||||||
vertices[idx++] = u;
|
|
||||||
vertices[idx++] = v;
|
|
||||||
|
|
||||||
vertices[idx++] = fx2;
|
|
||||||
vertices[idx++] = y;
|
|
||||||
vertices[idx++] = color;
|
|
||||||
vertices[idx++] = u2;
|
|
||||||
vertices[idx++] = v;
|
|
||||||
|
|
||||||
vertices[idx++] = fx2;
|
vertices[idx++] = fx2;
|
||||||
vertices[idx++] = fy2;
|
vertices[idx++] = fy2;
|
||||||
vertices[idx++] = color;
|
vertices[idx++] = color;
|
||||||
vertices[idx++] = u2;
|
vertices[idx++] = u2;
|
||||||
vertices[idx++] = v2;
|
vertices[idx++] = v2;
|
||||||
|
|
||||||
|
vertices[idx++] = fx2;
|
||||||
|
vertices[idx++] = y;
|
||||||
|
vertices[idx++] = color;
|
||||||
|
vertices[idx++] = u2;
|
||||||
|
vertices[idx++] = v;
|
||||||
|
|
||||||
|
vertices[idx++] = x;
|
||||||
|
vertices[idx++] = y;
|
||||||
|
vertices[idx++] = color;
|
||||||
|
vertices[idx++] = u;
|
||||||
|
vertices[idx++] = v;
|
||||||
|
|
||||||
mesh.updateVertices(index * vsize * 6, vertices);
|
mesh.updateVertices(index * vsize * 6, vertices);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,6 +155,19 @@ public class IndexedRenderer implements Disposable{
|
|||||||
vertices[idx++] = u;
|
vertices[idx++] = u;
|
||||||
vertices[idx++] = v;
|
vertices[idx++] = v;
|
||||||
|
|
||||||
|
vertices[idx++] = x2;
|
||||||
|
vertices[idx++] = y2;
|
||||||
|
vertices[idx++] = color;
|
||||||
|
vertices[idx++] = u;
|
||||||
|
vertices[idx++] = v2;
|
||||||
|
|
||||||
|
vertices[idx++] = x3;
|
||||||
|
vertices[idx++] = y3;
|
||||||
|
vertices[idx++] = color;
|
||||||
|
vertices[idx++] = u2;
|
||||||
|
vertices[idx++] = v2;
|
||||||
|
|
||||||
|
//tri2
|
||||||
vertices[idx++] = x3;
|
vertices[idx++] = x3;
|
||||||
vertices[idx++] = y3;
|
vertices[idx++] = y3;
|
||||||
vertices[idx++] = color;
|
vertices[idx++] = color;
|
||||||
@@ -164,28 +177,15 @@ public class IndexedRenderer implements Disposable{
|
|||||||
vertices[idx++] = x4;
|
vertices[idx++] = x4;
|
||||||
vertices[idx++] = y4;
|
vertices[idx++] = y4;
|
||||||
vertices[idx++] = color;
|
vertices[idx++] = color;
|
||||||
vertices[idx++] = u;
|
vertices[idx++] = u2;
|
||||||
vertices[idx++] = v2;
|
vertices[idx++] = v;
|
||||||
|
|
||||||
//tri2
|
|
||||||
vertices[idx++] = x1;
|
vertices[idx++] = x1;
|
||||||
vertices[idx++] = y1;
|
vertices[idx++] = y1;
|
||||||
vertices[idx++] = color;
|
vertices[idx++] = color;
|
||||||
vertices[idx++] = u;
|
vertices[idx++] = u;
|
||||||
vertices[idx++] = v;
|
vertices[idx++] = v;
|
||||||
|
|
||||||
vertices[idx++] = x2;
|
|
||||||
vertices[idx++] = y2;
|
|
||||||
vertices[idx++] = color;
|
|
||||||
vertices[idx++] = u2;
|
|
||||||
vertices[idx++] = v;
|
|
||||||
|
|
||||||
vertices[idx++] = x3;
|
|
||||||
vertices[idx++] = y3;
|
|
||||||
vertices[idx++] = color;
|
|
||||||
vertices[idx++] = u2;
|
|
||||||
vertices[idx++] = v2;
|
|
||||||
|
|
||||||
mesh.updateVertices(index * vsize * 6, vertices);
|
mesh.updateVertices(index * vsize * 6, vertices);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
|
|
||||||
@Remote(targets = Loc.both, forward = true, called = Loc.server)
|
@Remote(targets = Loc.both, forward = true, called = Loc.server)
|
||||||
public static void transferInventory(Player player, Building tile){
|
public static void transferInventory(Player player, Building tile){
|
||||||
if(player == null || tile == null || !player.within(tile, buildingRange)) return;
|
if(player == null || tile == null || !player.within(tile, buildingRange) || tile.items == null) return;
|
||||||
|
|
||||||
if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, tile) ||
|
if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, tile) ||
|
||||||
!netServer.admins.allowAction(player, ActionType.depositItem, tile.tile, action -> {
|
!netServer.admins.allowAction(player, ActionType.depositItem, tile.tile, action -> {
|
||||||
|
|||||||
@@ -100,6 +100,20 @@ public class JsonIO{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
json.setSerializer(Liquid.class, new Serializer<Liquid>(){
|
||||||
|
@Override
|
||||||
|
public void write(Json json, Liquid object, Class knownType){
|
||||||
|
json.writeValue(object.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Liquid read(Json json, JsonValue jsonData, Class type){
|
||||||
|
if(jsonData.asString() == null) return Liquids.water;
|
||||||
|
Liquid i = Vars.content.getByName(ContentType.liquid, jsonData.asString());
|
||||||
|
return i == null ? Liquids.water : i;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
json.setSerializer(Item.class, new Serializer<Item>(){
|
json.setSerializer(Item.class, new Serializer<Item>(){
|
||||||
@Override
|
@Override
|
||||||
public void write(Json json, Item object, Class knownType){
|
public void write(Json json, Item object, Class knownType){
|
||||||
@@ -165,6 +179,21 @@ public class JsonIO{
|
|||||||
return new ItemStack(json.getSerializer(Item.class).read(json, jsonData.get("item"), Item.class), jsonData.getInt("amount"));
|
return new ItemStack(json.getSerializer(Item.class).read(json, jsonData.get("item"), Item.class), jsonData.getInt("amount"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
json.setSerializer(UnlockableContent.class, new Serializer<UnlockableContent>(){
|
||||||
|
@Override
|
||||||
|
public void write(Json json, UnlockableContent object, Class knownType){
|
||||||
|
json.writeValue(object.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UnlockableContent read(Json json, JsonValue jsonData, Class type){
|
||||||
|
String str = jsonData.asString();
|
||||||
|
Item item = Vars.content.getByName(ContentType.item, str);
|
||||||
|
Liquid liquid = Vars.content.getByName(ContentType.liquid, str);
|
||||||
|
return item != null ? item : liquid;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static class CustomJson extends Json{
|
static class CustomJson extends Json{
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public class SaveIO{
|
|||||||
try{
|
try{
|
||||||
return getMeta(getStream(file));
|
return getMeta(getStream(file));
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
return getMeta(getBackupStream(file));
|
return getMeta(getBackupStream(file));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ public enum LogicOp{
|
|||||||
greaterThan(">", (a, b) -> a > b ? 1 : 0),
|
greaterThan(">", (a, b) -> a > b ? 1 : 0),
|
||||||
greaterThanEq(">=", (a, b) -> a >= b ? 1 : 0),
|
greaterThanEq(">=", (a, b) -> a >= b ? 1 : 0),
|
||||||
pow("^", Math::pow),
|
pow("^", Math::pow),
|
||||||
shl(">>", (a, b) -> (long)a >> (long)b),
|
shl("<<", (a, b) -> (long)a << (long)b),
|
||||||
shr("<<", (a, b) -> (long)a << (long)b),
|
shr(">>", (a, b) -> (long)a >> (long)b),
|
||||||
or("or", (a, b) -> (long)a | (long)b),
|
or("or", (a, b) -> (long)a | (long)b),
|
||||||
and("and", (a, b) -> (long)a & (long)b),
|
and("and", (a, b) -> (long)a & (long)b),
|
||||||
xor("xor", (a, b) -> (long)a ^ (long)b),
|
xor("xor", (a, b) -> (long)a ^ (long)b),
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public class Map implements Comparable<Map>, Publishable{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String tag(String name){
|
public String tag(String name){
|
||||||
return tags.containsKey(name) && !tags.get(name).trim().isEmpty() ? tags.get(name) : Core.bundle.get("unknown");
|
return tags.containsKey(name) && !tags.get(name).trim().isEmpty() ? tags.get(name) : Core.bundle.get("unknown", "unknown");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasTag(String name){
|
public boolean hasTag(String name){
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ public class Maps{
|
|||||||
|
|
||||||
/** @return the next map to shuffle to. May be null, in which case the server should be stopped. */
|
/** @return the next map to shuffle to. May be null, in which case the server should be stopped. */
|
||||||
public @Nullable Map getNextMap(Gamemode mode, @Nullable Map previous){
|
public @Nullable Map getNextMap(Gamemode mode, @Nullable Map previous){
|
||||||
|
if(shuffler != null) return shuffler.next(mode, previous);
|
||||||
return shuffleMode.next(mode, previous);
|
return shuffleMode.next(mode, previous);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ import mindustry.world.blocks.environment.*;
|
|||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public abstract class FilterOption{
|
public abstract class FilterOption{
|
||||||
public static final Boolf<Block> floorsOnly = b -> (b instanceof Floor && !(b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full));
|
public static final Boolf<Block> floorsOnly = b -> (b instanceof Floor && !(b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full));
|
||||||
public static final Boolf<Block> wallsOnly = b -> (!b.synthetic() && !(b instanceof Floor)) && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full));
|
public static final Boolf<Block> wallsOnly = b -> (!b.synthetic() && !(b instanceof Floor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full)) && b.inEditor;
|
||||||
public static final Boolf<Block> floorsOptional = b -> b == Blocks.air || ((b instanceof Floor && !(b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full)));
|
public static final Boolf<Block> floorsOptional = b -> b == Blocks.air || ((b instanceof Floor && !(b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full)));
|
||||||
public static final Boolf<Block> wallsOptional = b -> b == Blocks.air || ((!b.synthetic() && !(b instanceof Floor)) && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full)));
|
public static final Boolf<Block> wallsOptional = b -> b == Blocks.air || ((!b.synthetic() && !(b instanceof Floor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full)));
|
||||||
public static final Boolf<Block> wallsOresOptional = b -> b == Blocks.air || (((!b.synthetic() && !(b instanceof Floor)) || (b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full)));
|
public static final Boolf<Block> wallsOresOptional = b -> b == Blocks.air || (((!b.synthetic() && !(b instanceof Floor)) || (b instanceof OverlayFloor)) && !headless && Core.atlas.isFound(b.icon(Cicon.full))) && b.inEditor;
|
||||||
public static final Boolf<Block> oresOnly = b -> b instanceof OverlayFloor && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full));
|
public static final Boolf<Block> oresOnly = b -> b instanceof OverlayFloor && !headless && Core.atlas.isFound(b.icon(mindustry.ui.Cicon.full));
|
||||||
public static final Boolf<Block> anyOptional = b -> floorsOnly.get(b) || wallsOnly.get(b) || oresOnly.get(b) || b == Blocks.air;
|
public static final Boolf<Block> anyOptional = b -> (floorsOnly.get(b) || wallsOnly.get(b) || oresOnly.get(b) || b == Blocks.air) && b.inEditor;
|
||||||
|
|
||||||
public abstract void build(Table table);
|
public abstract void build(Table table);
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package mindustry.maps.generators;
|
|||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.ctype.*;
|
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.io.*;
|
import mindustry.io.*;
|
||||||
import mindustry.maps.*;
|
import mindustry.maps.*;
|
||||||
@@ -29,12 +28,13 @@ public class FileMapGenerator implements WorldGenerator{
|
|||||||
world.setGenerating(true);
|
world.setGenerating(true);
|
||||||
|
|
||||||
tiles = world.tiles;
|
tiles = world.tiles;
|
||||||
|
Item[] items = {Items.blastCompound, Items.pyratite, Items.copper, Items.thorium, Items.copper, Items.lead};
|
||||||
|
|
||||||
for(Tile tile : tiles){
|
for(Tile tile : tiles){
|
||||||
if(tile.block() instanceof StorageBlock && !(tile.block() instanceof CoreBlock) && state.hasSector()){
|
if(tile.block() instanceof StorageBlock && !(tile.block() instanceof CoreBlock) && state.hasSector()){
|
||||||
for(Content content : state.getSector().data.resources){
|
for(Item content : items){
|
||||||
if(content instanceof Item && Mathf.chance(0.3)){
|
if(Mathf.chance(0.2)){
|
||||||
tile.build.items.add((Item)content, Math.min(Mathf.random(500), tile.block().itemCapacity));
|
tile.build.items.add(content, Math.min(Mathf.random(500), tile.block().itemCapacity));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import arc.util.noise.*;
|
|||||||
import mindustry.graphics.g3d.*;
|
import mindustry.graphics.g3d.*;
|
||||||
import mindustry.graphics.g3d.PlanetGrid.*;
|
import mindustry.graphics.g3d.PlanetGrid.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.type.Sector.*;
|
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|
||||||
public abstract class PlanetGenerator extends BasicGenerator implements HexMesher{
|
public abstract class PlanetGenerator extends BasicGenerator implements HexMesher{
|
||||||
@@ -24,7 +23,7 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
|
|||||||
|
|
||||||
if(noise < 0.15){
|
if(noise < 0.15){
|
||||||
for(Ptile other : tile.tiles){
|
for(Ptile other : tile.tiles){
|
||||||
if(sector.planet.getSector(other).is(SectorAttribute.base)){
|
if(sector.planet.getSector(other).generateEnemyBase){
|
||||||
any = false;
|
any = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -32,7 +31,7 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(any){
|
if(any){
|
||||||
sector.data.attributes |= (1 << SectorAttribute.base.ordinal());
|
sector.generateEnemyBase = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -600,9 +600,14 @@ public class Mods implements Loadable{
|
|||||||
zip = zip.list()[0];
|
zip = zip.list()[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
Fi metaf = zip.child("mod.json").exists() ? zip.child("mod.json") : zip.child("mod.hjson").exists() ? zip.child("mod.hjson") : zip.child("plugin.json");
|
Fi metaf =
|
||||||
|
zip.child("mod.json").exists() ? zip.child("mod.json") :
|
||||||
|
zip.child("mod.hjson").exists() ? zip.child("mod.hjson") :
|
||||||
|
zip.child("plugin.json").exists() ? zip.child("plugin.json") :
|
||||||
|
zip.child("plugin.hjson");
|
||||||
|
|
||||||
if(!metaf.exists()){
|
if(!metaf.exists()){
|
||||||
Log.warn("Mod @ doesn't have a 'mod.json'/'mod.hjson'/'plugin.json' file, skipping.", sourceFile);
|
Log.warn("Mod @ doesn't have a '[mod/plugin].[h]json' file, skipping.", sourceFile);
|
||||||
throw new IllegalArgumentException("Invalid file: No mod.json found.");
|
throw new IllegalArgumentException("Invalid file: No mod.json found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -646,7 +651,9 @@ public class Mods implements Loadable{
|
|||||||
meta.hidden = true;
|
meta.hidden = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.info("Loaded mod '@' in @", meta.name, Time.elapsed());
|
if(!headless){
|
||||||
|
Log.info("Loaded mod '@' in @ms", meta.name, Time.elapsed());
|
||||||
|
}
|
||||||
return new LoadedMod(sourceFile, zip, mainMod, meta);
|
return new LoadedMod(sourceFile, zip, mainMod, meta);
|
||||||
|
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ public class NetworkIO{
|
|||||||
try(DataInputStream stream = new DataInputStream(is)){
|
try(DataInputStream stream = new DataInputStream(is)){
|
||||||
Time.clear();
|
Time.clear();
|
||||||
state.rules = JsonIO.read(Rules.class, stream.readUTF());
|
state.rules = JsonIO.read(Rules.class, stream.readUTF());
|
||||||
|
//campaign is not valid in multiplayer
|
||||||
|
state.rules.sector = null;
|
||||||
state.map = new Map(SaveIO.getSaveWriter().readStringMap(stream));
|
state.map = new Map(SaveIO.getSaveWriter().readStringMap(stream));
|
||||||
|
|
||||||
state.wave = stream.readInt();
|
state.wave = stream.readInt();
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package mindustry.type;
|
package mindustry.type;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.files.*;
|
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
@@ -10,15 +9,12 @@ import arc.scene.ui.layout.*;
|
|||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.io.*;
|
|
||||||
import arc.util.noise.*;
|
import arc.util.noise.*;
|
||||||
import mindustry.*;
|
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.graphics.g3d.*;
|
import mindustry.graphics.g3d.*;
|
||||||
import mindustry.graphics.g3d.PlanetGrid.*;
|
import mindustry.graphics.g3d.PlanetGrid.*;
|
||||||
import mindustry.maps.generators.*;
|
import mindustry.maps.generators.*;
|
||||||
import mindustry.type.Sector.*;
|
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -83,25 +79,10 @@ public class Planet extends UnlockableContent{
|
|||||||
|
|
||||||
sectors = new Seq<>(grid.tiles.length);
|
sectors = new Seq<>(grid.tiles.length);
|
||||||
for(int i = 0; i < grid.tiles.length; i++){
|
for(int i = 0; i < grid.tiles.length; i++){
|
||||||
sectors.add(new Sector(this, grid.tiles[i], new SectorData()));
|
sectors.add(new Sector(this, grid.tiles[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
sectorApproxRadius = sectors.first().tile.v.dst(sectors.first().tile.corners[0].v);
|
sectorApproxRadius = sectors.first().tile.v.dst(sectors.first().tile.corners[0].v);
|
||||||
|
|
||||||
//read data for sectors
|
|
||||||
Fi data = Vars.tree.get("planets/" + name + ".dat");
|
|
||||||
if(data.exists()){
|
|
||||||
try{
|
|
||||||
try(Reads read = data.reads()){
|
|
||||||
short dsize = read.s();
|
|
||||||
for(int i = 0; i < dsize; i++){
|
|
||||||
sectors.get(i).data.read(read);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch(Throwable t){
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}else{
|
}else{
|
||||||
sectors = new Seq<>();
|
sectors = new Seq<>();
|
||||||
}
|
}
|
||||||
@@ -196,7 +177,7 @@ public class Planet extends UnlockableContent{
|
|||||||
for(Sector sector : sectors){
|
for(Sector sector : sectors){
|
||||||
float sum = 1f;
|
float sum = 1f;
|
||||||
for(Sector other : sector.inRange(2)){
|
for(Sector other : sector.inRange(2)){
|
||||||
if(other.is(SectorAttribute.base)){
|
if(other.generateEnemyBase){
|
||||||
sum += 1f;
|
sum += 1f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,9 @@ import arc.struct.ObjectIntMap.*;
|
|||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.ArcAnnotate.*;
|
import arc.util.ArcAnnotate.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.io.*;
|
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
import mindustry.ctype.*;
|
|
||||||
import mindustry.game.Saves.*;
|
import mindustry.game.Saves.*;
|
||||||
import mindustry.graphics.g3d.PlanetGrid.*;
|
import mindustry.graphics.g3d.PlanetGrid.*;
|
||||||
import mindustry.world.*;
|
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -27,24 +24,22 @@ public class Sector{
|
|||||||
public final Ptile tile;
|
public final Ptile tile;
|
||||||
public final int id;
|
public final int id;
|
||||||
|
|
||||||
public final SectorData data;
|
|
||||||
|
|
||||||
public @Nullable SaveSlot save;
|
public @Nullable SaveSlot save;
|
||||||
public @Nullable SectorPreset preset;
|
public @Nullable SectorPreset preset;
|
||||||
|
|
||||||
/** Number 0-1 indicating the difficulty based on nearby bases. */
|
/** Number 0-1 indicating the difficulty based on nearby bases. */
|
||||||
public float baseCoverage;
|
public float baseCoverage;
|
||||||
|
public boolean generateEnemyBase;
|
||||||
|
|
||||||
//TODO implement a dynamic launch period
|
//TODO implement a dynamic launch period
|
||||||
public int launchPeriod = 10;
|
public int launchPeriod = 10;
|
||||||
|
|
||||||
public Sector(Planet planet, Ptile tile, SectorData data){
|
public Sector(Planet planet, Ptile tile){
|
||||||
this.planet = planet;
|
this.planet = planet;
|
||||||
this.tile = tile;
|
this.tile = tile;
|
||||||
this.plane = new Plane();
|
this.plane = new Plane();
|
||||||
this.rect = makeRect();
|
this.rect = makeRect();
|
||||||
this.id = tile.id;
|
this.id = tile.id;
|
||||||
this.data = data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Seq<Sector> inRange(int range){
|
public Seq<Sector> inRange(int range){
|
||||||
@@ -100,7 +95,7 @@ public class Sector{
|
|||||||
|
|
||||||
/** @return whether the enemy has a generated base here. */
|
/** @return whether the enemy has a generated base here. */
|
||||||
public boolean hasEnemyBase(){
|
public boolean hasEnemyBase(){
|
||||||
return is(SectorAttribute.base) && (save == null || save.meta.rules.waves);
|
return generateEnemyBase && (save == null || save.meta.rules.waves);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBeingPlayed(){
|
public boolean isBeingPlayed(){
|
||||||
@@ -311,10 +306,6 @@ public class Sector{
|
|||||||
return new SectorRect(radius, center, planeTop, planeRight, angle);
|
return new SectorRect(radius, center, planeTop, planeRight, angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean is(SectorAttribute attribute){
|
|
||||||
return (data.attributes & (1 << attribute.ordinal())) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class SectorRect{
|
public static class SectorRect{
|
||||||
public final Vec3 center, top, right;
|
public final Vec3 center, top, right;
|
||||||
public final Vec3 result = new Vec3();
|
public final Vec3 result = new Vec3();
|
||||||
@@ -335,64 +326,4 @@ public class Sector{
|
|||||||
return result.set(center).add(right, nx).add(top, ny);
|
return result.set(center).add(right, nx).add(top, ny);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Cached data about a sector. */
|
|
||||||
public static class SectorData{
|
|
||||||
public UnlockableContent[] resources = {};
|
|
||||||
public int spawnX, spawnY;
|
|
||||||
|
|
||||||
public Block[] floors = {};
|
|
||||||
public int[] floorCounts = {};
|
|
||||||
public int attributes;
|
|
||||||
|
|
||||||
public void write(Writes write){
|
|
||||||
write.s(resources.length);
|
|
||||||
for(Content resource : resources){
|
|
||||||
write.b(resource.getContentType().ordinal());
|
|
||||||
write.s(resource.id);
|
|
||||||
}
|
|
||||||
write.s(spawnX);
|
|
||||||
write.s(spawnY);
|
|
||||||
write.s(floors.length);
|
|
||||||
for(int i = 0; i < floors.length; i++){
|
|
||||||
write.s(floors[i].id);
|
|
||||||
write.i(floorCounts[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
write.i(attributes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void read(Reads read){
|
|
||||||
resources = new UnlockableContent[read.s()];
|
|
||||||
for(int i = 0; i < resources.length; i++){
|
|
||||||
resources[i] = Vars.content.getByID(ContentType.all[read.b()], read.s());
|
|
||||||
}
|
|
||||||
spawnX = read.s();
|
|
||||||
spawnY = read.s();
|
|
||||||
floors = new Block[read.s()];
|
|
||||||
floorCounts = new int[floors.length];
|
|
||||||
for(int i = 0; i < floors.length; i++){
|
|
||||||
floors[i] = Vars.content.block(read.s());
|
|
||||||
floorCounts[i] = read.i();
|
|
||||||
}
|
|
||||||
attributes = read.i();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum SectorAttribute{
|
|
||||||
/** Requires naval technology to land on, e.g. mostly water */
|
|
||||||
naval,
|
|
||||||
/** Has rain. */
|
|
||||||
rainy,
|
|
||||||
/** Has snow. */
|
|
||||||
snowy,
|
|
||||||
/** Has sandstorms. */
|
|
||||||
desert,
|
|
||||||
/** Has an enemy base. */
|
|
||||||
base,
|
|
||||||
/** Has spore weather. */
|
|
||||||
spores,
|
|
||||||
/** Path from core to spawns requires traversing water. */
|
|
||||||
navalPath
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import arc.func.*;
|
|||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
|
import arc.scene.ui.layout.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
@@ -14,7 +15,7 @@ import mindustry.world.blocks.*;
|
|||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public abstract class Weather extends MappableContent{
|
public abstract class Weather extends UnlockableContent{
|
||||||
/** Default duration of this weather event in ticks. */
|
/** Default duration of this weather event in ticks. */
|
||||||
public float duration = 9f * Time.toMinutes;
|
public float duration = 9f * Time.toMinutes;
|
||||||
public Attributes attrs = new Attributes();
|
public Attributes attrs = new Attributes();
|
||||||
@@ -89,14 +90,24 @@ public abstract class Weather extends MappableContent{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayInfo(Table table){
|
||||||
|
//do not
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isHidden(){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ContentType getContentType(){
|
public ContentType getContentType(){
|
||||||
return ContentType.weather;
|
return ContentType.weather;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Remote(called = Loc.server)
|
@Remote(called = Loc.server)
|
||||||
public static void createWeather(Weather weather, float intensity, float duration){
|
public static void createWeather(Weather weather, float intensity, float duration, float windX, float windY){
|
||||||
weather.create(intensity, duration);
|
weather.create(intensity, duration).windVector.set(windX, windY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class WeatherEntry{
|
public static class WeatherEntry{
|
||||||
@@ -104,7 +115,7 @@ public abstract class Weather extends MappableContent{
|
|||||||
public Weather weather;
|
public Weather weather;
|
||||||
/** Minimum and maximum spacing between weather events. Does not include the time of the event itself. */
|
/** Minimum and maximum spacing between weather events. Does not include the time of the event itself. */
|
||||||
public float minFrequency, maxFrequency, minDuration, maxDuration;
|
public float minFrequency, maxFrequency, minDuration, maxDuration;
|
||||||
/** Cooldown time before the next weather event takes place. */
|
/** Cooldown time before the next weather event takes place This is *state*, not configuration. */
|
||||||
public float cooldown;
|
public float cooldown;
|
||||||
/** Intensity of the weather produced. */
|
/** Intensity of the weather produced. */
|
||||||
public float intensity = 1f;
|
public float intensity = 1f;
|
||||||
@@ -132,12 +143,12 @@ public abstract class Weather extends MappableContent{
|
|||||||
|
|
||||||
@EntityDef(value = {WeatherStatec.class}, pooled = true, isFinal = false)
|
@EntityDef(value = {WeatherStatec.class}, pooled = true, isFinal = false)
|
||||||
@Component(base = true)
|
@Component(base = true)
|
||||||
abstract static class WeatherStateComp implements Drawc{
|
abstract static class WeatherStateComp implements Drawc, Syncc{
|
||||||
private static final float fadeTime = 60 * 4;
|
private static final float fadeTime = 60 * 4;
|
||||||
|
|
||||||
Weather weather;
|
Weather weather;
|
||||||
float intensity = 1f, opacity = 0f, life, effectTimer;
|
float intensity = 1f, opacity = 0f, life, effectTimer;
|
||||||
Vec2 windVector = new Vec2();
|
Vec2 windVector = new Vec2().setToRandomDirection();
|
||||||
|
|
||||||
void init(Weather weather){
|
void init(Weather weather){
|
||||||
this.weather = weather;
|
this.weather = weather;
|
||||||
@@ -146,7 +157,7 @@ public abstract class Weather extends MappableContent{
|
|||||||
@Override
|
@Override
|
||||||
public void update(){
|
public void update(){
|
||||||
if(life < fadeTime){
|
if(life < fadeTime){
|
||||||
opacity = life / fadeTime;
|
opacity = Math.min(life / fadeTime, opacity);
|
||||||
}else{
|
}else{
|
||||||
opacity = Mathf.lerpDelta(opacity, 1f, 0.004f);
|
opacity = Mathf.lerpDelta(opacity, 1f, 0.004f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,9 @@ public class Fonts{
|
|||||||
|
|
||||||
/** Called from a static context for use in the loading screen.*/
|
/** Called from a static context for use in the loading screen.*/
|
||||||
public static void loadDefaultFont(){
|
public static void loadDefaultFont(){
|
||||||
UI.packer = new PixmapPacker(2048, 2048, Format.rgba8888, 2, true);
|
int max = Gl.getInt(Gl.maxTextureSize);
|
||||||
|
|
||||||
|
UI.packer = new PixmapPacker(max >= 4096 ? 4096 : 2048, 2048, Format.rgba8888, 2, true);
|
||||||
FileHandleResolver resolver = new InternalFileHandleResolver();
|
FileHandleResolver resolver = new InternalFileHandleResolver();
|
||||||
Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
|
Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
|
||||||
Core.assets.setLoader(Font.class, null, new FreetypeFontLoader(resolver){
|
Core.assets.setLoader(Font.class, null, new FreetypeFontLoader(resolver){
|
||||||
|
|||||||
@@ -3,19 +3,24 @@ package mindustry.ui.dialogs;
|
|||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
|
import arc.math.*;
|
||||||
import arc.scene.style.*;
|
import arc.scene.style.*;
|
||||||
import arc.scene.ui.*;
|
import arc.scene.ui.*;
|
||||||
|
import arc.scene.ui.ImageButton.*;
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
|
import mindustry.ctype.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
|
import mindustry.type.Weather.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|
||||||
|
import static arc.util.Time.*;
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class CustomRulesDialog extends BaseDialog{
|
public class CustomRulesDialog extends BaseDialog{
|
||||||
@@ -176,8 +181,9 @@ public class CustomRulesDialog extends BaseDialog{
|
|||||||
}}).grow();
|
}}).grow();
|
||||||
}).margin(4).size(50f).padRight(10);
|
}).margin(4).size(50f).padRight(10);
|
||||||
b.add("@rules.ambientlight");
|
b.add("@rules.ambientlight");
|
||||||
}, () -> ui.picker.show(rules.ambientLight, rules.ambientLight::set)).left().width(250f);
|
}, () -> ui.picker.show(rules.ambientLight, rules.ambientLight::set)).left().width(250f).row();
|
||||||
main.row();
|
|
||||||
|
main.button("@rules.weather", this::weatherDialog).width(250f).left().row();
|
||||||
|
|
||||||
//TODO add weather patterns
|
//TODO add weather patterns
|
||||||
}
|
}
|
||||||
@@ -214,4 +220,120 @@ public class CustomRulesDialog extends BaseDialog{
|
|||||||
main.image().color(Pal.accent).height(3f).padRight(100f).padBottom(20);
|
main.image().color(Pal.accent).height(3f).padRight(100f).padBottom(20);
|
||||||
main.row();
|
main.row();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Cell<TextField> field(Table table, float value, Floatc setter){
|
||||||
|
return table.field(Strings.autoFixed(value, 2), v -> setter.get(Strings.parseFloat(v)))
|
||||||
|
.valid(Strings::canParsePositiveFloat)
|
||||||
|
.size(90f, 40f).pad(2f).addInputDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
void weatherDialog(){
|
||||||
|
BaseDialog dialog = new BaseDialog("@rules.weather");
|
||||||
|
Runnable[] rebuild = {null};
|
||||||
|
|
||||||
|
dialog.cont.pane(base -> {
|
||||||
|
|
||||||
|
rebuild[0] = () -> {
|
||||||
|
base.clearChildren();
|
||||||
|
int cols = Math.max(1, Core.graphics.getWidth() / 460);
|
||||||
|
int idx = 0;
|
||||||
|
|
||||||
|
for(WeatherEntry entry : rules.weather){
|
||||||
|
base.top();
|
||||||
|
//main container
|
||||||
|
base.table(Tex.pane, c -> {
|
||||||
|
c.margin(0);
|
||||||
|
|
||||||
|
//icons to perform actions
|
||||||
|
c.table(Tex.whiteui, t -> {
|
||||||
|
t.setColor(Pal.gray);
|
||||||
|
|
||||||
|
t.top().left();
|
||||||
|
t.add(entry.weather.localizedName).left().padLeft(6);
|
||||||
|
|
||||||
|
t.add().growX();
|
||||||
|
|
||||||
|
ImageButtonStyle style = Styles.geni;
|
||||||
|
t.defaults().size(42f);
|
||||||
|
|
||||||
|
t.button(Icon.cancel, style, () -> {
|
||||||
|
rules.weather.remove(entry);
|
||||||
|
rebuild[0].run();
|
||||||
|
});
|
||||||
|
}).growX();
|
||||||
|
|
||||||
|
c.row();
|
||||||
|
|
||||||
|
//all the options
|
||||||
|
c.table(f -> {
|
||||||
|
f.marginLeft(4);
|
||||||
|
f.left().top();
|
||||||
|
|
||||||
|
f.defaults().padRight(4).left();
|
||||||
|
|
||||||
|
f.add("@rules.weather.duration");
|
||||||
|
field(f, entry.minDuration / toMinutes, v -> entry.minDuration = v * toMinutes);
|
||||||
|
f.add("@waves.to");
|
||||||
|
field(f, entry.maxDuration / toMinutes, v -> entry.maxDuration = v * toMinutes);
|
||||||
|
f.add("@unit.minutes");
|
||||||
|
|
||||||
|
f.row();
|
||||||
|
|
||||||
|
f.add("@rules.weather.frequency");
|
||||||
|
field(f, entry.minFrequency / toMinutes, v -> entry.minFrequency = v * toMinutes);
|
||||||
|
f.add("@waves.to");
|
||||||
|
field(f, entry.maxFrequency / toMinutes, v -> entry.maxFrequency = v * toMinutes);
|
||||||
|
f.add("@unit.minutes");
|
||||||
|
|
||||||
|
//intensity can't currently be customized
|
||||||
|
|
||||||
|
}).grow().left().pad(6).top();
|
||||||
|
}).width(410f).pad(3).top().left().fillY();
|
||||||
|
|
||||||
|
if(++idx % cols == 0){
|
||||||
|
base.row();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
rebuild[0].run();
|
||||||
|
}).grow();
|
||||||
|
|
||||||
|
dialog.addCloseButton();
|
||||||
|
|
||||||
|
dialog.buttons.button("@add", Icon.add, () -> {
|
||||||
|
BaseDialog addd = new BaseDialog("@add");
|
||||||
|
addd.cont.pane(t -> {
|
||||||
|
t.background(Tex.button);
|
||||||
|
int i = 0;
|
||||||
|
for(Weather weather : content.<Weather>getBy(ContentType.weather)){
|
||||||
|
|
||||||
|
t.button(weather.localizedName, Styles.cleart, () -> {
|
||||||
|
rules.weather.add(new WeatherEntry(weather));
|
||||||
|
rebuild[0].run();
|
||||||
|
|
||||||
|
addd.hide();
|
||||||
|
}).size(140f, 50f);
|
||||||
|
if(++i % 2 == 0) t.row();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
addd.addCloseButton();
|
||||||
|
addd.show();
|
||||||
|
}).width(170f);
|
||||||
|
|
||||||
|
//reset cooldown to random number
|
||||||
|
dialog.hidden(() -> {
|
||||||
|
float sum = 0;
|
||||||
|
Seq<WeatherEntry> sh = rules.weather.copy();
|
||||||
|
sh.shuffle();
|
||||||
|
|
||||||
|
for(WeatherEntry w : sh){
|
||||||
|
//add the previous cooldowns to the sum so weather events are staggered and don't happen all at once.
|
||||||
|
w.cooldown = sum + Mathf.random(w.minFrequency, w.maxFrequency);
|
||||||
|
sum += w.cooldown;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -427,7 +427,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//get servers
|
//get servers
|
||||||
Core.net.httpGet(becontrol.active() ? serverJsonBeURL : serverJsonURL, result -> {
|
Core.net.httpGet(becontrol.active() ? serverJsonBeURL : serverJsonV6URL, result -> {
|
||||||
try{
|
try{
|
||||||
Jval val = Jval.read(result.getResultAsString());
|
Jval val = Jval.read(result.getResultAsString());
|
||||||
Core.app.post(() -> {
|
Core.app.post(() -> {
|
||||||
|
|||||||
@@ -321,16 +321,25 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
stable.row();
|
stable.row();
|
||||||
}
|
}
|
||||||
|
|
||||||
stable.add("@sectors.resources").row();
|
if(sector.save != null){
|
||||||
stable.table(t -> {
|
stable.add("@sectors.resources").row();
|
||||||
t.left();
|
stable.table(t -> {
|
||||||
int idx = 0;
|
|
||||||
int max = 5;
|
if(sector.save != null && sector.save.meta.secinfo != null && sector.save.meta.secinfo.resources.any()){
|
||||||
for(UnlockableContent c : sector.data.resources){
|
t.left();
|
||||||
t.image(c.icon(Cicon.small)).padRight(3);
|
int idx = 0;
|
||||||
if(++idx % max == 0) t.row();
|
int max = 5;
|
||||||
}
|
for(UnlockableContent c : sector.save.meta.secinfo.resources){
|
||||||
}).fillX().row();
|
t.image(c.icon(Cicon.small)).padRight(3);
|
||||||
|
if(++idx % max == 0) t.row();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
t.add("@unknown").color(Color.lightGray);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}).fillX().row();
|
||||||
|
}
|
||||||
|
|
||||||
//production
|
//production
|
||||||
if(sector.hasBase() && sector.save.meta.hasProduction){
|
if(sector.hasBase() && sector.save.meta.hasProduction){
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class ChatFragment extends Table{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return net.active();
|
return net.active() && ui.hudfrag.shown();
|
||||||
});
|
});
|
||||||
|
|
||||||
update(() -> {
|
update(() -> {
|
||||||
|
|||||||
@@ -76,6 +76,19 @@ public class HudFragment extends Fragment{
|
|||||||
t.table(Styles.black5, top -> top.add("@paused").style(Styles.outlineLabel).pad(8f)).growX();
|
t.table(Styles.black5, top -> top.add("@paused").style(Styles.outlineLabel).pad(8f)).growX();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//minimap + position
|
||||||
|
parent.fill(t -> {
|
||||||
|
t.visible(() -> Core.settings.getBool("minimap") && !state.rules.tutorial && shown);
|
||||||
|
//minimap
|
||||||
|
t.add(new Minimap());
|
||||||
|
t.row();
|
||||||
|
//position
|
||||||
|
t.label(() -> player.tileX() + "," + player.tileY())
|
||||||
|
.visible(() -> Core.settings.getBool("position") && !state.rules.tutorial)
|
||||||
|
.touchable(Touchable.disabled);
|
||||||
|
t.top().right();
|
||||||
|
});
|
||||||
|
|
||||||
//TODO tear this all down
|
//TODO tear this all down
|
||||||
//menu at top left
|
//menu at top left
|
||||||
parent.fill(cont -> {
|
parent.fill(cont -> {
|
||||||
@@ -212,18 +225,6 @@ public class HudFragment extends Fragment{
|
|||||||
}).top().left();
|
}).top().left();
|
||||||
});
|
});
|
||||||
|
|
||||||
parent.fill(t -> {
|
|
||||||
t.visible(() -> Core.settings.getBool("minimap") && !state.rules.tutorial && shown);
|
|
||||||
//minimap
|
|
||||||
t.add(new Minimap());
|
|
||||||
t.row();
|
|
||||||
//position
|
|
||||||
t.label(() -> player.tileX() + "," + player.tileY())
|
|
||||||
.visible(() -> Core.settings.getBool("position") && !state.rules.tutorial)
|
|
||||||
.touchable(Touchable.disabled);
|
|
||||||
t.top().right();
|
|
||||||
});
|
|
||||||
|
|
||||||
//core items
|
//core items
|
||||||
parent.fill(t -> {
|
parent.fill(t -> {
|
||||||
t.top().add(coreItems);
|
t.top().add(coreItems);
|
||||||
|
|||||||
@@ -70,10 +70,10 @@ public class ForceProjector extends Block{
|
|||||||
|
|
||||||
Draw.color(Pal.gray);
|
Draw.color(Pal.gray);
|
||||||
Lines.stroke(3f);
|
Lines.stroke(3f);
|
||||||
Lines.poly(x * tilesize, y * tilesize, 6, radius);
|
Lines.poly(x * tilesize + offset, y * tilesize + offset, 6, radius);
|
||||||
Draw.color(player.team().color);
|
Draw.color(player.team().color);
|
||||||
Lines.stroke(1f);
|
Lines.stroke(1f);
|
||||||
Lines.poly(x * tilesize, y * tilesize, 6, radius);
|
Lines.poly(x * tilesize + offset, y * tilesize + offset, 6, radius);
|
||||||
Draw.color();
|
Draw.color();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ public class ExtendingItemBridge extends ItemBridge{
|
|||||||
|
|
||||||
int i = tile.absoluteRelativeTo(other.x, other.y);
|
int i = tile.absoluteRelativeTo(other.x, other.y);
|
||||||
|
|
||||||
float ex = other.worldx() - x - Geometry.d4[i].x * tilesize / 2f,
|
float ex = other.worldx() - x - Geometry.d4(i).x * tilesize / 2f,
|
||||||
ey = other.worldy() - y - Geometry.d4[i].y * tilesize / 2f;
|
ey = other.worldy() - y - Geometry.d4(i).y * tilesize / 2f;
|
||||||
|
|
||||||
float uptime = state.isEditor() ? 1f : this.uptime;
|
float uptime = state.isEditor() ? 1f : this.uptime;
|
||||||
|
|
||||||
@@ -42,15 +42,15 @@ public class ExtendingItemBridge extends ItemBridge{
|
|||||||
|
|
||||||
Lines.stroke(8f);
|
Lines.stroke(8f);
|
||||||
Lines.line(bridgeRegion,
|
Lines.line(bridgeRegion,
|
||||||
x + Geometry.d4[i].x * tilesize / 2f,
|
x + Geometry.d4(i).x * tilesize / 2f,
|
||||||
y + Geometry.d4[i].y * tilesize / 2f,
|
y + Geometry.d4(i).y * tilesize / 2f,
|
||||||
x + ex,
|
x + ex,
|
||||||
y + ey, false);
|
y + ey, false);
|
||||||
|
|
||||||
Draw.rect(endRegion, x, y, i * 90 + 90);
|
Draw.rect(endRegion, x, y, i * 90 + 90);
|
||||||
Draw.rect(endRegion,
|
Draw.rect(endRegion,
|
||||||
x + ex + Geometry.d4[i].x * tilesize / 2f,
|
x + ex + Geometry.d4(i).x * tilesize / 2f,
|
||||||
y + ey + Geometry.d4[i].y * tilesize / 2f, i * 90 + 270);
|
y + ey + Geometry.d4(i).y * tilesize / 2f, i * 90 + 270);
|
||||||
|
|
||||||
int dist = Math.max(Math.abs(other.x - tile.x), Math.abs(other.y - tile.y));
|
int dist = Math.max(Math.abs(other.x - tile.x), Math.abs(other.y - tile.y));
|
||||||
|
|
||||||
@@ -61,8 +61,8 @@ public class ExtendingItemBridge extends ItemBridge{
|
|||||||
for(int a = 0; a < arrows; a++){
|
for(int a = 0; a < arrows; a++){
|
||||||
Draw.alpha(Mathf.absin(a / (float)arrows - time / 100f, 0.1f, 1f) * uptime * opacity);
|
Draw.alpha(Mathf.absin(a / (float)arrows - time / 100f, 0.1f, 1f) * uptime * opacity);
|
||||||
Draw.rect(arrowRegion,
|
Draw.rect(arrowRegion,
|
||||||
x + Geometry.d4[i].x * (tilesize / 2f + a * 6f + 2) * uptime,
|
x + Geometry.d4(i).x * (tilesize / 2f + a * 6f + 2) * uptime,
|
||||||
y + Geometry.d4[i].y * (tilesize / 2f + a * 6f + 2) * uptime,
|
y + Geometry.d4(i).y * (tilesize / 2f + a * 6f + 2) * uptime,
|
||||||
i * 90f);
|
i * 90f);
|
||||||
}
|
}
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class ItemBridge extends Block{
|
|||||||
|
|
||||||
Lines.stroke(8f);
|
Lines.stroke(8f);
|
||||||
|
|
||||||
Tmp.v1.set(otherReq.drawx(), otherReq.drawx()).sub(req.drawx(), req.drawy()).setLength(-tilesize/2f);
|
Tmp.v1.set(otherReq.drawx(), otherReq.drawy()).sub(req.drawx(), req.drawy()).setLength(tilesize/2f);
|
||||||
|
|
||||||
Lines.line(
|
Lines.line(
|
||||||
bridgeRegion,
|
bridgeRegion,
|
||||||
@@ -99,7 +99,7 @@ public class ItemBridge extends Block{
|
|||||||
float h = (link.y == y ? tilesize : Math.abs(link.y - y) * tilesize - tilesize);
|
float h = (link.y == y ? tilesize : Math.abs(link.y - y) * tilesize - tilesize);
|
||||||
Lines.rect((x + link.x) / 2f * tilesize - w / 2f, (y + link.y) / 2f * tilesize - h / 2f, w, h);
|
Lines.rect((x + link.x) / 2f * tilesize - w / 2f, (y + link.y) / 2f * tilesize - h / 2f, w, h);
|
||||||
|
|
||||||
Draw.rect("bridge-arrow", link.x * tilesize + Geometry.d4[rot].x * tilesize, link.y * tilesize + Geometry.d4[rot].y * tilesize, link.absoluteRelativeTo(x, y) * 90);
|
Draw.rect("bridge-arrow", link.x * tilesize + Geometry.d4(rot).x * tilesize, link.y * tilesize + Geometry.d4(rot).y * tilesize, link.absoluteRelativeTo(x, y) * 90);
|
||||||
}
|
}
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
@@ -303,7 +303,7 @@ public class ItemBridge extends Block{
|
|||||||
|
|
||||||
Lines.stroke(8f);
|
Lines.stroke(8f);
|
||||||
|
|
||||||
Tmp.v1.set(x, y).sub(other.worldx(), other.worldy()).setLength(-tilesize/2f);
|
Tmp.v1.set(x, y).sub(other.worldx(), other.worldy()).setLength(tilesize/2f).scl(-1f);
|
||||||
|
|
||||||
Lines.line(bridgeRegion,
|
Lines.line(bridgeRegion,
|
||||||
x + Tmp.v1.x,
|
x + Tmp.v1.x,
|
||||||
@@ -321,8 +321,8 @@ public class ItemBridge extends Block{
|
|||||||
for(int a = 0; a < arrows; a++){
|
for(int a = 0; a < arrows; a++){
|
||||||
Draw.alpha(Mathf.absin(a / (float)arrows - time / 100f, 0.1f, 1f) * uptime * opacity);
|
Draw.alpha(Mathf.absin(a / (float)arrows - time / 100f, 0.1f, 1f) * uptime * opacity);
|
||||||
Draw.rect(arrowRegion,
|
Draw.rect(arrowRegion,
|
||||||
x + Geometry.d4[i].x * (tilesize / 2f + a * 4f + time % 4f),
|
x + Geometry.d4(i).x * (tilesize / 2f + a * 4f + time % 4f),
|
||||||
y + Geometry.d4[i].y * (tilesize / 2f + a * 4f + time % 4f), i * 90f);
|
y + Geometry.d4(i).y * (tilesize / 2f + a * 4f + time % 4f), i * 90f);
|
||||||
}
|
}
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public class StackConveyor extends Block implements Autotiler{
|
|||||||
|
|
||||||
Tile from = world.tile(link);
|
Tile from = world.tile(link);
|
||||||
|
|
||||||
if(link == -1 || from == null) return;
|
if(link == -1 || from == null || lastItem == null) return;
|
||||||
|
|
||||||
int fromRot = from.build == null ? rotation : from.build.rotation;
|
int fromRot = from.build == null ? rotation : from.build.rotation;
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ public class StackConveyor extends Block implements Autotiler{
|
|||||||
//item
|
//item
|
||||||
float size = itemSize * Mathf.lerp(Math.min((float)items.total() / itemCapacity, 1), 1f, 0.4f);
|
float size = itemSize * Mathf.lerp(Math.min((float)items.total() / itemCapacity, 1), 1f, 0.4f);
|
||||||
Drawf.shadow(Tmp.v1.x, Tmp.v1.y, size * 1.2f);
|
Drawf.shadow(Tmp.v1.x, Tmp.v1.y, size * 1.2f);
|
||||||
Draw.rect(items.first().icon(Cicon.medium), Tmp.v1.x, Tmp.v1.y, size, size, 0);
|
Draw.rect(lastItem.icon(Cicon.medium), Tmp.v1.x, Tmp.v1.y, size, size, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import mindustry.graphics.*;
|
|||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|
||||||
public class Cliff extends Block{
|
public class Cliff extends Block{
|
||||||
|
public float size = 11f;
|
||||||
|
|
||||||
public Cliff(String name){
|
public Cliff(String name){
|
||||||
super(name);
|
super(name);
|
||||||
@@ -18,11 +19,12 @@ public class Cliff extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawBase(Tile tile){
|
public void drawBase(Tile tile){
|
||||||
|
|
||||||
int r = tile.data;
|
int r = tile.data;
|
||||||
for(int i = 0; i < 8; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
if((r & (1 << i)) != 0){
|
if((r & (1 << i)) != 0){
|
||||||
Draw.color(Tmp.c1.set(tile.floor().mapColor).mul(1.3f + (i >= 4 ? -0.4f : 0.3f)));
|
Draw.color(Tmp.c1.set(tile.floor().mapColor).mul(1.3f + (i >= 4 ? -0.4f : 0.3f)));
|
||||||
Draw.rect(region, tile.worldx(), tile.worldy(), 11f, 11f, i * 45f);
|
Draw.rect(region, tile.worldx(), tile.worldy(), size, size, i * 45f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ public class Reconstructor extends UnitBlock{
|
|||||||
if(moveInPayload()){
|
if(moveInPayload()){
|
||||||
if(consValid()){
|
if(consValid()){
|
||||||
valid = true;
|
valid = true;
|
||||||
progress += edelta();
|
progress += edelta() * state.rules.unitBuildSpeedMultiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
//upgrade the unit
|
//upgrade the unit
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public enum StatUnit{
|
|||||||
powerUnits,
|
powerUnits,
|
||||||
degrees,
|
degrees,
|
||||||
seconds,
|
seconds,
|
||||||
|
minutes,
|
||||||
perSecond,
|
perSecond,
|
||||||
perMinute,
|
perMinute,
|
||||||
timesSpeed(false),
|
timesSpeed(false),
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ project.ext.assetsDir = new File("../core/assets")
|
|||||||
|
|
||||||
def enableTemplates = true
|
def enableTemplates = true
|
||||||
def JDK_DIR = "$System.env.JDK_DIR"
|
def JDK_DIR = "$System.env.JDK_DIR"
|
||||||
def ICON_DIR = new File("core/assets/icons/icon.icns")
|
def ICON_DIR = new File("$rootDir/core/assets/icons/icon.icns")
|
||||||
def spriteHashFile = new File(project.rootDir, "build/spritehash")
|
def spriteHashFile = new File(project.rootDir, "build/spritehash")
|
||||||
|
|
||||||
def hashDirectory = {
|
def hashDirectory = {
|
||||||
@@ -127,13 +127,13 @@ PackrConfig.Platform.values().each{ platform ->
|
|||||||
verbose = true
|
verbose = true
|
||||||
bundleIdentifier = getPackage() + ".mac"
|
bundleIdentifier = getPackage() + ".mac"
|
||||||
iconResource = ICON_DIR
|
iconResource = ICON_DIR
|
||||||
outDir = file("build/packr/output")
|
outDir = file("$rootDir/desktop/build/packr/output")
|
||||||
mainClass = project.ext.mainClassName
|
mainClass = project.ext.mainClassName
|
||||||
classpath = ["desktop/build/packr/desktop.jar"]
|
classpath = ["$rootDir/desktop/build/packr/desktop.jar".toString()]
|
||||||
removePlatformLibs = ["desktop/build/packr/desktop.jar"]
|
removePlatformLibs = ["$rootDir/desktop/build/packr/desktop.jar".toString()]
|
||||||
|
|
||||||
vmArgs = []
|
vmArgs = []
|
||||||
minimizeJre = "desktop/packr_minimize.json"
|
minimizeJre = "$rootDir/desktop/packr_minimize.json".toString()
|
||||||
jdk = JDK_DIR + "jdk-${platform.toString().toLowerCase()}.zip"
|
jdk = JDK_DIR + "jdk-${platform.toString().toLowerCase()}.zip"
|
||||||
|
|
||||||
if(platform == PackrConfig.Platform.MacOS){
|
if(platform == PackrConfig.Platform.MacOS){
|
||||||
|
|||||||
10
fastlane/metadata/android/en-US/changelogs/29659.txt
Normal file
10
fastlane/metadata/android/en-US/changelogs/29659.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
This is the first alpha release of 6.0, a massive campaign and content update.
|
||||||
|
While this build has been tested in multiplayer, it still may have numerous issues. As usual, report problems on Github.
|
||||||
|
|
||||||
|
There are too many changes to list here, but the important bits include:
|
||||||
|
|
||||||
|
- A new unit production system, with incremental upgrades
|
||||||
|
- Direct unit and turret control
|
||||||
|
- Renamed and re-sprited units
|
||||||
|
- New blocks and units
|
||||||
|
- Naval and insect-like units
|
||||||
@@ -14,11 +14,11 @@
|
|||||||
"NEW_ACHIEVEMENT_20_5_NAME" "무한의 배달부"
|
"NEW_ACHIEVEMENT_20_5_NAME" "무한의 배달부"
|
||||||
"NEW_ACHIEVEMENT_20_5_DESC" "자원을 총 1,000,000개 출격시키세요."
|
"NEW_ACHIEVEMENT_20_5_DESC" "자원을 총 1,000,000개 출격시키세요."
|
||||||
"NEW_ACHIEVEMENT_20_6_NAME" "정복자"
|
"NEW_ACHIEVEMENT_20_6_NAME" "정복자"
|
||||||
"NEW_ACHIEVEMENT_20_6_DESC" "캠페인의 미션:적 코어 파괴인 지역에서 10번 승리하세요."
|
"NEW_ACHIEVEMENT_20_6_DESC" "적 코어 파괴인 지역에서 10번 승리하세요."
|
||||||
"NEW_ACHIEVEMENT_20_7_NAME" "챔피언"
|
"NEW_ACHIEVEMENT_20_7_NAME" "챔피언"
|
||||||
"NEW_ACHIEVEMENT_20_7_DESC" "멀티플레이어 PvP 매치에서 10번 승리하세요."
|
"NEW_ACHIEVEMENT_20_7_DESC" "멀티플레이어 PvP 매치에서 10번 승리하세요."
|
||||||
"NEW_ACHIEVEMENT_20_8_NAME" "진격!"
|
"NEW_ACHIEVEMENT_20_8_NAME" "진격!"
|
||||||
"NEW_ACHIEVEMENT_20_8_DESC" "캠페인의 미션:적 코어 파괴인 지역에서 5단계 이상일 때 적의 코어를 파괴하세요."
|
"NEW_ACHIEVEMENT_20_8_DESC" "적 코어 파괴인 지역에서 5단계 이하일 때 적의 코어를 파괴하세요."
|
||||||
"NEW_ACHIEVEMENT_20_9_NAME" "하늘에서 코어의 비가 쏟아진다!"
|
"NEW_ACHIEVEMENT_20_9_NAME" "하늘에서 코어의 비가 쏟아진다!"
|
||||||
"NEW_ACHIEVEMENT_20_9_DESC" "캠페인 지역에 30번 도전하세요."
|
"NEW_ACHIEVEMENT_20_9_DESC" "캠페인 지역에 30번 도전하세요."
|
||||||
"NEW_ACHIEVEMENT_20_10_NAME" "끈질긴"
|
"NEW_ACHIEVEMENT_20_10_NAME" "끈질긴"
|
||||||
@@ -36,9 +36,9 @@
|
|||||||
"NEW_ACHIEVEMENT_20_17_NAME" "한 중대한 실수"
|
"NEW_ACHIEVEMENT_20_17_NAME" "한 중대한 실수"
|
||||||
"NEW_ACHIEVEMENT_20_17_DESC" "분배기를 연구하세요."
|
"NEW_ACHIEVEMENT_20_17_DESC" "분배기를 연구하세요."
|
||||||
"NEW_ACHIEVEMENT_20_18_NAME" "창조"
|
"NEW_ACHIEVEMENT_20_18_NAME" "창조"
|
||||||
"NEW_ACHIEVEMENT_20_18_DESC" "블럭 10,000를 설치하세요."
|
"NEW_ACHIEVEMENT_20_18_DESC" "블록 10,000를 설치하세요."
|
||||||
"NEW_ACHIEVEMENT_20_19_NAME" "잿더미"
|
"NEW_ACHIEVEMENT_20_19_NAME" "잿더미"
|
||||||
"NEW_ACHIEVEMENT_20_19_DESC" "적 블럭을 1,000개 파괴하세요."
|
"NEW_ACHIEVEMENT_20_19_DESC" "적 블록을 1,000개 파괴하세요."
|
||||||
"NEW_ACHIEVEMENT_20_20_NAME" "폭발은 예술이다!"
|
"NEW_ACHIEVEMENT_20_20_NAME" "폭발은 예술이다!"
|
||||||
"NEW_ACHIEVEMENT_20_20_DESC" "토륨 원자로를 폭발시키세요."
|
"NEW_ACHIEVEMENT_20_20_DESC" "토륨 원자로를 폭발시키세요."
|
||||||
"NEW_ACHIEVEMENT_20_21_NAME" "맵퍼"
|
"NEW_ACHIEVEMENT_20_21_NAME" "맵퍼"
|
||||||
@@ -88,11 +88,11 @@
|
|||||||
"NEW_ACHIEVEMENT_21_14_NAME" "출격!"
|
"NEW_ACHIEVEMENT_21_14_NAME" "출격!"
|
||||||
"NEW_ACHIEVEMENT_21_14_DESC" "발사대를 사용하세요."
|
"NEW_ACHIEVEMENT_21_14_DESC" "발사대를 사용하세요."
|
||||||
"NEW_ACHIEVEMENT_21_15_NAME" "성급한"
|
"NEW_ACHIEVEMENT_21_15_NAME" "성급한"
|
||||||
"NEW_ACHIEVEMENT_21_15_DESC" "2단계 이상을 스킵하고, 당신의 코어를 적에게 파괴당하세요."
|
"NEW_ACHIEVEMENT_21_15_DESC" "2번 이상의 출격 기회를 스킵하고, 당신의 코어를 적에게 파괴당하세요."
|
||||||
"NEW_ACHIEVEMENT_21_16_NAME" "2단"
|
"NEW_ACHIEVEMENT_21_16_NAME" "2단"
|
||||||
"NEW_ACHIEVEMENT_21_16_DESC" "분배기를 2개 붙여서 건설하세요."
|
"NEW_ACHIEVEMENT_21_16_DESC" "분배기를 2개 붙여서 건설하세요."
|
||||||
"NEW_ACHIEVEMENT_21_17_NAME" "고독한 수호자"
|
"NEW_ACHIEVEMENT_21_17_NAME" "고독한 수호자"
|
||||||
"NEW_ACHIEVEMENT_21_17_DESC" "캠페인 지역에서 10단계 이상을 아무 블럭도 설치하지 않고 생존하세요."
|
"NEW_ACHIEVEMENT_21_17_DESC" "캠페인 지역에서 10단계 이상을 아무 블록도 설치하지 않고 생존하세요."
|
||||||
"NEW_ACHIEVEMENT_21_18_NAME" "인화성"
|
"NEW_ACHIEVEMENT_21_18_NAME" "인화성"
|
||||||
"NEW_ACHIEVEMENT_21_18_DESC" "포탑에 파이라타이트를 사용하세요."
|
"NEW_ACHIEVEMENT_21_18_DESC" "포탑에 파이라타이트를 사용하세요."
|
||||||
"NEW_ACHIEVEMENT_21_19_NAME" "효율성"
|
"NEW_ACHIEVEMENT_21_19_NAME" "효율성"
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
"NEW_ACHIEVEMENT_21_4_NAME" "Стая"
|
"NEW_ACHIEVEMENT_21_4_NAME" "Стая"
|
||||||
"NEW_ACHIEVEMENT_21_4_DESC" "Имейте одновременно 10 активных дронов «Фантом»."
|
"NEW_ACHIEVEMENT_21_4_DESC" "Имейте одновременно 10 активных дронов «Фантом»."
|
||||||
"NEW_ACHIEVEMENT_21_5_NAME" "Взрывная армия"
|
"NEW_ACHIEVEMENT_21_5_NAME" "Взрывная армия"
|
||||||
"NEW_ACHIEVEMENT_21_5_DESC" "Имейте одновременно 50 активных гусеничных ботов «Камикадзе»."
|
"NEW_ACHIEVEMENT_21_5_DESC" "Имейте одновременно 50 активных ботов «Ползун»."
|
||||||
"NEW_ACHIEVEMENT_21_6_NAME" "Легионы"
|
"NEW_ACHIEVEMENT_21_6_NAME" "Легионы"
|
||||||
"NEW_ACHIEVEMENT_21_6_DESC" "Постройте в целом 1000 единиц."
|
"NEW_ACHIEVEMENT_21_6_DESC" "Постройте в целом 1000 единиц."
|
||||||
"NEW_ACHIEVEMENT_21_7_NAME" "Super"
|
"NEW_ACHIEVEMENT_21_7_NAME" "Super"
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.daemon=true
|
org.gradle.daemon=true
|
||||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||||
archash=557aa4c1d08c9260992a6ce108ac609272ee0eee
|
archash=51747eb9d90decdb53b6f4fd5d7043b9f9a219a7
|
||||||
|
|||||||
@@ -5,15 +5,6 @@
|
|||||||
{
|
{
|
||||||
"address": "nydustry.nydus.app:6060"
|
"address": "nydustry.nydus.app:6060"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"address": "mindustry.pl:6000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "routerchain.ddns.net"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"address": "mindustry.pl:6666"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"address": "md.surrealment.com"
|
"address": "md.surrealment.com"
|
||||||
}
|
}
|
||||||
|
|||||||
14
servers_v6.json
Normal file
14
servers_v6.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"address": "mindustry.pl:6000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "mindustry.pl:6666"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "routerchain.ddns.net"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"address": "pandorum.su:8000"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -409,16 +409,6 @@ task genSprites(dependsOn: classes, type: JavaExec){
|
|||||||
workingDir = genFolder
|
workingDir = genFolder
|
||||||
}
|
}
|
||||||
|
|
||||||
task genSectorData(dependsOn: classes, type: JavaExec){
|
|
||||||
main = "mindustry.tools.SectorDataGenerator"
|
|
||||||
classpath = sourceSets.main.runtimeClasspath
|
|
||||||
standardInput = System.in
|
|
||||||
workingDir = "../core/assets/"
|
|
||||||
}
|
|
||||||
|
|
||||||
task updateCache(dependsOn: [genSectorData]){
|
|
||||||
}
|
|
||||||
|
|
||||||
task updateBundles(dependsOn: classes, type: JavaExec){
|
task updateBundles(dependsOn: classes, type: JavaExec){
|
||||||
file(genFolder).mkdirs()
|
file(genFolder).mkdirs()
|
||||||
|
|
||||||
|
|||||||
@@ -232,18 +232,22 @@ public class Generators{
|
|||||||
|
|
||||||
boolean hasEmpty = false;
|
boolean hasEmpty = false;
|
||||||
Color average = new Color();
|
Color average = new Color();
|
||||||
|
float asum = 0f;
|
||||||
for(int x = 0; x < image.width; x++){
|
for(int x = 0; x < image.width; x++){
|
||||||
for(int y = 0; y < image.height; y++){
|
for(int y = 0; y < image.height; y++){
|
||||||
Color color = image.getColor(x, y);
|
Color color = image.getColor(x, y);
|
||||||
average.r += color.r;
|
average.r += color.r*color.a;
|
||||||
average.g += color.g;
|
average.g += color.g*color.a;
|
||||||
average.b += color.b;
|
average.b += color.b*color.a;
|
||||||
|
asum += color.a;
|
||||||
if(color.a < 0.9f){
|
if(color.a < 0.9f){
|
||||||
hasEmpty = true;
|
hasEmpty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
average.mul(1f / (image.width * image.height));
|
|
||||||
|
average.mul(1f / asum);
|
||||||
|
|
||||||
if(block instanceof Floor){
|
if(block instanceof Floor){
|
||||||
average.mul(0.8f);
|
average.mul(0.8f);
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -1,228 +0,0 @@
|
|||||||
package mindustry.tools;
|
|
||||||
|
|
||||||
import arc.*;
|
|
||||||
import arc.backend.headless.mock.*;
|
|
||||||
import arc.files.*;
|
|
||||||
import arc.math.geom.*;
|
|
||||||
import arc.mock.*;
|
|
||||||
import arc.struct.*;
|
|
||||||
import arc.struct.ObjectIntMap.*;
|
|
||||||
import arc.util.*;
|
|
||||||
import arc.util.io.*;
|
|
||||||
import mindustry.*;
|
|
||||||
import mindustry.content.*;
|
|
||||||
import mindustry.core.*;
|
|
||||||
import mindustry.ctype.*;
|
|
||||||
import mindustry.game.*;
|
|
||||||
import mindustry.net.Net;
|
|
||||||
import mindustry.type.*;
|
|
||||||
import mindustry.type.Sector.*;
|
|
||||||
import mindustry.world.*;
|
|
||||||
import mindustry.world.blocks.storage.*;
|
|
||||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
|
||||||
|
|
||||||
public class SectorDataGenerator{
|
|
||||||
|
|
||||||
public static void main(String[] args){
|
|
||||||
ArcNativesLoader.load();
|
|
||||||
Core.files = new MockFiles();
|
|
||||||
Core.app = new MockApplication();
|
|
||||||
Core.settings = new MockSettings();
|
|
||||||
Core.graphics = new MockGraphics();
|
|
||||||
|
|
||||||
headless = true;
|
|
||||||
net = new Net(null);
|
|
||||||
tree = new FileTree();
|
|
||||||
Vars.init();
|
|
||||||
content.createBaseContent();
|
|
||||||
|
|
||||||
logic = new Logic();
|
|
||||||
netServer = new NetServer();
|
|
||||||
world = new World();
|
|
||||||
|
|
||||||
content.init();
|
|
||||||
|
|
||||||
for(Planet planet : content.<Planet>getBy(ContentType.planet)){
|
|
||||||
int[] count = {0};
|
|
||||||
if(planet.grid == null) continue;
|
|
||||||
|
|
||||||
Fi fi = Fi.get("planets").child(planet.name + ".dat");
|
|
||||||
|
|
||||||
Seq<SectorData> list = planet.sectors.map(sector -> {
|
|
||||||
SectorData data = new SectorData();
|
|
||||||
|
|
||||||
ObjectIntMap<Block> floors = new ObjectIntMap<>();
|
|
||||||
ObjectSet<Content> content = new ObjectSet<>();
|
|
||||||
|
|
||||||
logic.reset();
|
|
||||||
world.loadSector(sector);
|
|
||||||
float waterFloors = 0, totalFloors = 0;
|
|
||||||
state.rules.sector = sector;
|
|
||||||
|
|
||||||
for(Tile tile : world.tiles){
|
|
||||||
if(world.getDarkness(tile.x, tile.y) >= 3){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Liquid liquid = tile.floor().liquidDrop;
|
|
||||||
if(tile.floor().itemDrop != null) content.add(tile.floor().itemDrop);
|
|
||||||
if(tile.overlay().itemDrop != null) content.add(tile.overlay().itemDrop);
|
|
||||||
if(liquid != null) content.add(liquid);
|
|
||||||
|
|
||||||
if(!tile.block().isStatic()){
|
|
||||||
totalFloors ++;
|
|
||||||
if(liquid == Liquids.water){
|
|
||||||
waterFloors += tile.floor().isDeep() ? 1f : 0.7f;
|
|
||||||
}
|
|
||||||
floors.increment(tile.floor());
|
|
||||||
if(tile.overlay() != Blocks.air){
|
|
||||||
floors.increment(tile.overlay());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CoreBuild entity = Team.sharded.core();
|
|
||||||
int cx = entity.tileX(), cy = entity.tileY();
|
|
||||||
|
|
||||||
boolean path = pathfind(true);
|
|
||||||
boolean groundPath = pathfind(false);
|
|
||||||
|
|
||||||
if(!path){
|
|
||||||
Log.err("Sector &ly@&lr has no core path!", sector.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!groundPath){
|
|
||||||
Log.debug("&lbSector &ly@&lb is naval-only", sector.id);
|
|
||||||
|
|
||||||
data.attributes |= (1 << SectorAttribute.navalPath.ordinal());
|
|
||||||
}
|
|
||||||
|
|
||||||
int nearTiles = 0;
|
|
||||||
int waterCheckRad = 5;
|
|
||||||
|
|
||||||
//check for water presence
|
|
||||||
for(int rx = -waterCheckRad; rx <= waterCheckRad; rx++){
|
|
||||||
for(int ry = -waterCheckRad; ry <= waterCheckRad; ry++){
|
|
||||||
Tile tile = world.tile(cx + rx, cy + ry);
|
|
||||||
if(tile == null || tile.floor().liquidDrop != null){
|
|
||||||
nearTiles ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(waterFloors / totalFloors >= 0.6f){
|
|
||||||
Log.debug("Sector @ has @/@ water -> naval", sector.id, waterFloors, totalFloors);
|
|
||||||
}
|
|
||||||
|
|
||||||
//naval sector guaranteed
|
|
||||||
if(nearTiles > 4){
|
|
||||||
Log.debug("Sector @ has @ water tiles at @ @ -> naval", sector.id, nearTiles, cx, cy);
|
|
||||||
waterFloors = totalFloors;
|
|
||||||
}
|
|
||||||
|
|
||||||
//sort counts in descending order
|
|
||||||
Seq<Entry<Block>> entries = floors.entries().toArray();
|
|
||||||
entries.sort(e -> -e.value);
|
|
||||||
//remove all blocks occuring < 30 times - unimportant
|
|
||||||
entries.removeAll(e -> e.value < 30);
|
|
||||||
|
|
||||||
data.floors = new Block[entries.size];
|
|
||||||
data.floorCounts = new int[entries.size];
|
|
||||||
for(int i = 0; i < entries.size; i++){
|
|
||||||
data.floorCounts[i] = entries.get(i).value;
|
|
||||||
data.floors[i] = entries.get(i).key;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO bad code
|
|
||||||
boolean hasSnow = data.floors[0].name.contains("ice") || data.floors[0].name.contains("snow");
|
|
||||||
boolean hasRain = !hasSnow && data.floors[0].name.contains("water");
|
|
||||||
boolean hasDesert = !hasSnow && !hasRain && data.floors[0].name.contains("sand");
|
|
||||||
boolean hasSpores = data.floors[0].name.contains("spore") || data.floors[0].name.contains("moss") || data.floors[0].name.contains("tainted");
|
|
||||||
|
|
||||||
if(hasSnow){
|
|
||||||
data.attributes |= (1 << SectorAttribute.snowy.ordinal());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(hasRain){
|
|
||||||
data.attributes |= (1 << SectorAttribute.rainy.ordinal());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(hasDesert){
|
|
||||||
data.attributes |= (1 << SectorAttribute.desert.ordinal());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(hasSpores){
|
|
||||||
data.attributes |= (1 << SectorAttribute.spores.ordinal());
|
|
||||||
}
|
|
||||||
|
|
||||||
data.resources = content.asArray().sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id))).toArray(UnlockableContent.class);
|
|
||||||
|
|
||||||
//50% water -> naval attribute
|
|
||||||
if(waterFloors / totalFloors >= 0.6f){
|
|
||||||
data.attributes |= (1 << SectorAttribute.naval.ordinal());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(count[0]++ % 10 == 0){
|
|
||||||
Log.info("&ly[ &lg@% &ly] Done with sector &lm@/@ ", (int)((float)count[0] / planet.sectors.size * 100), count[0], planet.sectors.size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
});
|
|
||||||
|
|
||||||
//write data
|
|
||||||
try(Writes write = fi.writes()){
|
|
||||||
write.s(list.size);
|
|
||||||
list.each(s -> s.write(write));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean pathfind(boolean allowWater){
|
|
||||||
CoreBuild entity = Team.sharded.core();
|
|
||||||
|
|
||||||
IntSet enemies = new IntSet();
|
|
||||||
world.tiles.eachTile(t -> {
|
|
||||||
if((t.team() == Team.crux && t.block() instanceof CoreBlock) || t.overlay() == Blocks.spawn){
|
|
||||||
enemies.add(t.pos());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
GridBits used = new GridBits(world.width(), world.height());
|
|
||||||
|
|
||||||
IntQueue queue = new IntQueue();
|
|
||||||
queue.addFirst(entity.pos());
|
|
||||||
boolean any = false;
|
|
||||||
|
|
||||||
outer:
|
|
||||||
while(!queue.isEmpty()){
|
|
||||||
int pos = queue.removeFirst();
|
|
||||||
int x = Point2.x(pos), y = Point2.y(pos);
|
|
||||||
used.set(x, y);
|
|
||||||
|
|
||||||
for(Point2 p : Geometry.d4){
|
|
||||||
int nx = p.x + x, ny = p.y + y;
|
|
||||||
|
|
||||||
if(world.tiles.in(nx, ny) && !used.get(nx, ny)){
|
|
||||||
Tile tile = world.tile(nx, ny);
|
|
||||||
|
|
||||||
//skip full solids
|
|
||||||
if((tile.block().isStatic() && tile.solid()) || (!allowWater && tile.floor().isLiquid)) continue;
|
|
||||||
|
|
||||||
int newpos = Point2.pack(nx, ny);
|
|
||||||
|
|
||||||
used.set(nx, ny);
|
|
||||||
queue.addLast(newpos);
|
|
||||||
|
|
||||||
if(enemies.contains(newpos)){
|
|
||||||
any = true;
|
|
||||||
break outer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return any;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user