diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 8fdb041fc7..b0e4475812 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -20,7 +20,7 @@ diff --git a/build.gradle b/build.gradle index fcd3f64369..dd4ea3d100 100644 --- a/build.gradle +++ b/build.gradle @@ -8,12 +8,11 @@ buildscript { } dependencies { classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.0' - classpath "com.badlogicgames.gdx:gdx-tools:1.9.8" + classpath "com.badlogicgames.gdx:gdx-tools:1.9.9" } } allprojects { - apply plugin: "eclipse" apply plugin: "idea" version = 'release' @@ -25,7 +24,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.9' roboVMVersion = '2.3.0' - uCoreVersion = 'f73e538757ac66ff62d7f25d93011142b6abb8df' + uCoreVersion = '3dfb820142a0fc583ad19413a24fc5038aa29d89' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/assets-raw/sprites/pack.json b/core/assets-raw/sprites/pack.json index 490bc040eb..abd5ae6584 100644 --- a/core/assets-raw/sprites/pack.json +++ b/core/assets-raw/sprites/pack.json @@ -1,5 +1,6 @@ { duplicatePadding: true, combineSubdirectories: true, - flattenPaths: true + flattenPaths: true, + fast: true } diff --git a/core/assets-raw/sprites/ui/border.9.png b/core/assets-raw/sprites/ui/border.9.png deleted file mode 100644 index 49417e1eca..0000000000 Binary files a/core/assets-raw/sprites/ui/border.9.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/button-down.9.png b/core/assets-raw/sprites/ui/button-down.9.png index 9107880338..de800bf233 100644 Binary files a/core/assets-raw/sprites/ui/button-down.9.png and b/core/assets-raw/sprites/ui/button-down.9.png differ diff --git a/core/assets-raw/sprites/ui/button-edge-1.9.png b/core/assets-raw/sprites/ui/button-edge-1.9.png new file mode 100644 index 0000000000..5833e18f2f Binary files /dev/null and b/core/assets-raw/sprites/ui/button-edge-1.9.png differ diff --git a/core/assets-raw/sprites/ui/button-edge-2.9.png b/core/assets-raw/sprites/ui/button-edge-2.9.png new file mode 100644 index 0000000000..40ef1bad93 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-edge-2.9.png differ diff --git a/core/assets-raw/sprites/ui/button-edge-3.9.png b/core/assets-raw/sprites/ui/button-edge-3.9.png new file mode 100644 index 0000000000..bc63ca5beb Binary files /dev/null and b/core/assets-raw/sprites/ui/button-edge-3.9.png differ diff --git a/core/assets-raw/sprites/ui/button-edge-4.9.png b/core/assets-raw/sprites/ui/button-edge-4.9.png new file mode 100644 index 0000000000..0d1aac1186 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-edge-4.9.png differ diff --git a/core/assets-raw/sprites/ui/button-over.9.png b/core/assets-raw/sprites/ui/button-over.9.png index 9107880338..e274175562 100644 Binary files a/core/assets-raw/sprites/ui/button-over.9.png and b/core/assets-raw/sprites/ui/button-over.9.png differ diff --git a/core/assets-raw/sprites/ui/button-right-down.9.png b/core/assets-raw/sprites/ui/button-right-down.9.png new file mode 100644 index 0000000000..dea5fa0eac Binary files /dev/null and b/core/assets-raw/sprites/ui/button-right-down.9.png differ diff --git a/core/assets-raw/sprites/ui/button-right-over.9.png b/core/assets-raw/sprites/ui/button-right-over.9.png new file mode 100644 index 0000000000..aeb5860006 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-right-over.9.png differ diff --git a/core/assets-raw/sprites/ui/button-right.9.png b/core/assets-raw/sprites/ui/button-right.9.png new file mode 100644 index 0000000000..0cbe0e8288 Binary files /dev/null and b/core/assets-raw/sprites/ui/button-right.9.png differ diff --git a/core/assets-raw/sprites/ui/button.9.png b/core/assets-raw/sprites/ui/button.9.png index d27ab20c12..f982c6939b 100644 Binary files a/core/assets-raw/sprites/ui/button.9.png and b/core/assets-raw/sprites/ui/button.9.png differ diff --git a/core/assets-raw/sprites/ui/icons/icon-copy.png b/core/assets-raw/sprites/ui/icons/icon-copy.png new file mode 100644 index 0000000000..b1a8d0a607 Binary files /dev/null and b/core/assets-raw/sprites/ui/icons/icon-copy.png differ diff --git a/core/assets-raw/sprites/ui/icons/icon-paste.png b/core/assets-raw/sprites/ui/icons/icon-paste.png new file mode 100644 index 0000000000..1ddee0eb9b Binary files /dev/null and b/core/assets-raw/sprites/ui/icons/icon-paste.png differ diff --git a/core/assets-raw/sprites/ui/pane-2.9.png b/core/assets-raw/sprites/ui/pane-2.9.png new file mode 100644 index 0000000000..bf9ca991b5 Binary files /dev/null and b/core/assets-raw/sprites/ui/pane-2.9.png differ diff --git a/core/assets-raw/sprites/ui/pane-button.9.png b/core/assets-raw/sprites/ui/pane-button.9.png deleted file mode 100644 index 4ecdc37357..0000000000 Binary files a/core/assets-raw/sprites/ui/pane-button.9.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/pane.9.png b/core/assets-raw/sprites/ui/pane.9.png index e82766bafc..56c69a8dd8 100644 Binary files a/core/assets-raw/sprites/ui/pane.9.png and b/core/assets-raw/sprites/ui/pane.9.png differ diff --git a/core/assets-raw/sprites/ui/scroll-horizontal.9.png b/core/assets-raw/sprites/ui/scroll-horizontal.9.png index 70fdf066f2..eea4d3f872 100644 Binary files a/core/assets-raw/sprites/ui/scroll-horizontal.9.png and b/core/assets-raw/sprites/ui/scroll-horizontal.9.png differ diff --git a/core/assets-raw/sprites/ui/scroll-knob-horizontal-black.9.png b/core/assets-raw/sprites/ui/scroll-knob-horizontal-black.9.png new file mode 100644 index 0000000000..d6227471aa Binary files /dev/null and b/core/assets-raw/sprites/ui/scroll-knob-horizontal-black.9.png differ diff --git a/core/assets-raw/sprites/ui/scroll-knob-horizontal.9.png b/core/assets-raw/sprites/ui/scroll-knob-horizontal.9.png deleted file mode 100644 index e29eff71ab..0000000000 Binary files a/core/assets-raw/sprites/ui/scroll-knob-horizontal.9.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/scroll-knob-vertical-black.9.png b/core/assets-raw/sprites/ui/scroll-knob-vertical-black.9.png index ed838ff3bf..acd97cdd79 100644 Binary files a/core/assets-raw/sprites/ui/scroll-knob-vertical-black.9.png and b/core/assets-raw/sprites/ui/scroll-knob-vertical-black.9.png differ diff --git a/core/assets-raw/sprites/ui/scroll-knob-vertical.9.png b/core/assets-raw/sprites/ui/scroll-knob-vertical.9.png deleted file mode 100644 index 4c0d362150..0000000000 Binary files a/core/assets-raw/sprites/ui/scroll-knob-vertical.9.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/scroll.9.png b/core/assets-raw/sprites/ui/scroll.9.png index 527d2c29c2..afcdf783b9 100644 Binary files a/core/assets-raw/sprites/ui/scroll.9.png and b/core/assets-raw/sprites/ui/scroll.9.png differ diff --git a/core/assets-raw/sprites/ui/slider-knob-down.png b/core/assets-raw/sprites/ui/slider-knob-down.png index 4be43a4176..efb573acb3 100644 Binary files a/core/assets-raw/sprites/ui/slider-knob-down.png and b/core/assets-raw/sprites/ui/slider-knob-down.png differ diff --git a/core/assets-raw/sprites/ui/slider-knob-over.png b/core/assets-raw/sprites/ui/slider-knob-over.png index 4be43a4176..a8936dca95 100644 Binary files a/core/assets-raw/sprites/ui/slider-knob-over.png and b/core/assets-raw/sprites/ui/slider-knob-over.png differ diff --git a/core/assets-raw/sprites/ui/slider-knob.png b/core/assets-raw/sprites/ui/slider-knob.png index 6346d62c52..700f69c594 100644 Binary files a/core/assets-raw/sprites/ui/slider-knob.png and b/core/assets-raw/sprites/ui/slider-knob.png differ diff --git a/core/assets-raw/sprites/ui/slider.png b/core/assets-raw/sprites/ui/slider.png index 88dcd70693..904b8f2001 100644 Binary files a/core/assets-raw/sprites/ui/slider.png and b/core/assets-raw/sprites/ui/slider.png differ diff --git a/core/assets-raw/sprites/ui/textarea.9.png b/core/assets-raw/sprites/ui/textarea.9.png deleted file mode 100644 index 16f8cb4fe6..0000000000 Binary files a/core/assets-raw/sprites/ui/textarea.9.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/textfield-over.9.png b/core/assets-raw/sprites/ui/textfield-over.9.png deleted file mode 100644 index 3fe1f1ec4f..0000000000 Binary files a/core/assets-raw/sprites/ui/textfield-over.9.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/textfield.9.png b/core/assets-raw/sprites/ui/textfield.9.png deleted file mode 100644 index 742b040dee..0000000000 Binary files a/core/assets-raw/sprites/ui/textfield.9.png and /dev/null differ diff --git a/core/assets-raw/sprites/ui/underline-2.9.png b/core/assets-raw/sprites/ui/underline-2.9.png new file mode 100644 index 0000000000..bd2c4fbf18 Binary files /dev/null and b/core/assets-raw/sprites/ui/underline-2.9.png differ diff --git a/core/assets-raw/sprites/ui/underline.9.png b/core/assets-raw/sprites/ui/underline.9.png new file mode 100644 index 0000000000..2c764bd6b5 Binary files /dev/null and b/core/assets-raw/sprites/ui/underline.9.png differ diff --git a/core/assets-raw/sprites/ui/window.9.png b/core/assets-raw/sprites/ui/window.9.png deleted file mode 100644 index 7bae102db6..0000000000 Binary files a/core/assets-raw/sprites/ui/window.9.png and /dev/null differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 6cae7f175d..55a215f9cc 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -351,6 +351,7 @@ text.category.items = Items text.category.crafting = Crafting text.category.shooting = Shooting text.category.optional = Optional Enhancements +setting.indicators.name = Ally Indicators setting.autotarget.name = Auto-Target setting.fpscap.name = Max FPS setting.fpscap.none = None diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 5d753f7732..cd975d0fb1 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -99,7 +99,7 @@ text.hosts.refresh = Actualizar text.hosts.discovering = Descubrir partidas LAN text.server.refreshing = Actualizando servidor... text.hosts.none = [lightgray]¡No se han encontrado partidas LAN! -text.host.invalid = [scarlet]No se ha podido conectar al anfitrión +text.host.invalid = [scarlet]No se ha podido conectar al anfitrión. text.trace = Rastrear Jugador text.trace.playername = Nombre de jugador: [accent]{0} text.trace.ip = IP: [accent]{0} @@ -176,7 +176,7 @@ text.open = Abrir text.cancel = Cancelar text.openlink = Abrir Enlace text.copylink = Copiar Enlace -text.back = Atras +text.back = Atrás text.quit.confirm = ¿Estás seguro de querer salir de la partida? text.changelog.title = Registro de Parches text.changelog.loading = Consiguiendo el registro de parches... @@ -252,7 +252,7 @@ text.load = Cargar text.save = Guardar text.fps = FPS: {0} text.tps = TPS: {0} -text.ping = Ping: {0}ms +text.ping = Ping: {0} ms text.language.restart = Por favor reinicie el juego para que los cambios del lenguaje surjan efecto. text.settings = Ajustes text.tutorial = Tutorial @@ -277,9 +277,9 @@ text.settings.graphics = Gráficos text.settings.cleardata = Limpiar Datos del Juego... text.settings.clear.confirm = ¿Estas seguro de querer limpiar estos datos?\n¡Esta acción no puede deshacerse! text.settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y keybinds.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente. -text.settings.clearsectors = Limpiar Sectores -text.settings.clearunlocks = Limpiar Desbloqueos -text.settings.clearall = Limpiar Todo +text.settings.clearsectors = Eliminar Sectores +text.settings.clearunlocks = Eliminar Desbloqueos +text.settings.clearall = Eliminar Todo text.paused = Pausado text.yes = Sí text.no = No @@ -311,10 +311,10 @@ text.blocks.inputitem = Objeto de Entrada text.blocks.inputitems = Objetos de Entrada text.blocks.outputitem = Objeto de Salida text.blocks.drilltier = Taladrables -text.blocks.drillspeed = Velocidad de Base del Taladro +text.blocks.drillspeed = Velocidad Base del Taladro text.blocks.liquidoutput = Líquido de Salida text.blocks.liquidoutputspeed = Velocidad de Salida del Líquido -text.blocks.liquiduse = Uso del Líquido +text.blocks.liquiduse = Uso de Líquido text.blocks.coolant = Refrigerante text.blocks.coolantuse = Uso del Refrigerante text.blocks.inputliquidfuel = Combustible Líquido @@ -345,7 +345,7 @@ text.category.liquids = Líquidos text.category.items = Objetos text.category.crafting = Fabricación text.category.shooting = Disparo -text.category.optional = Optional Enhancements +text.category.optional = Mejoras Opcionales setting.autotarget.name = Auto apuntado setting.fpscap.name = Máx FPS setting.fpscap.none = Nada @@ -370,7 +370,7 @@ setting.musicvol.name = Volumen de la Música setting.mutemusic.name = Silenciar Musica setting.sfxvol.name = Volumen de los efectos de sonido setting.mutesound.name = Silenciar Sonido -setting.crashreport.name = Send Anonymous Crash Reports +setting.crashreport.name = Enviar informes de fallos anónimos text.keybind.title = Reasignar Teclas category.general.name = General category.view.name = Visión @@ -412,7 +412,7 @@ mode.pvp.name = PvP mode.pvp.description = Pelea contra otros jugadores localmente. content.item.name = Objetos content.liquid.name = Líquidos -content.unit.name = Units +content.unit.name = Unidades content.recipe.name = Bloques content.mech.name = Mecanoides item.stone.name = Piedra @@ -433,7 +433,7 @@ item.silicon.name = Silicona item.silicon.description = Un semiconductor muy útil, se usa para paneles solares y muchos electrónicos complejos. item.plastanium.name = Plastanio item.plastanium.description = Un material dúctil, ligero usado en aeronaves y proyectiles de fragmentación. -item.phase-fabric.name = Phase Fabric +item.phase-fabric.name = Tejido de fase item.phase-fabric.description = Una sustancia casi sin peso usada en electrónica avanzada y en tecnología autoreparadora. item.surge-alloy.name = Surge Alloy item.surge-alloy.description = Una aleación avanzada con propiedades eléctricas únicas. @@ -493,14 +493,14 @@ text.mech.ability = [LIGHT_GRAY]Hablidad: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0} text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0} -block.constructing = {0}\n[LIGHT_GRAY](Constructing) +block.constructing = {0}\n[LIGHT_GRAY](Construyendo) block.spawn.name = Punto de generación block.core.name = Núcleo block.metalfloor.name = Suelo de Metal block.deepwater.name = Aguas profundas block.water.name = Agua block.lava.name = Lava -block.tar.name = Tar +block.tar.name = Alquitrán block.blackstone.name = Piedra negra block.stone.name = Piedra block.dirt.name = Tierra @@ -516,8 +516,8 @@ block.copper-wall.name = Muro de cobre block.copper-wall-large.name = Muro de cobre grande block.dense-alloy-wall.name = Muro de aleación densa block.dense-alloy-wall-large.name = Muro de aleación densa grande -block.phase-wall.name = Phase Wall -block.phase-wall-large.name = Large Phase Wall +block.phase-wall.name = Muro de Fase grande +block.phase-wall-large.name = Muro de Fase grande block.thorium-wall.name = Pared de Torio block.thorium-wall-large.name = Pared de Torio grande block.door.name = Puerta @@ -532,7 +532,7 @@ block.junction.name = Cruce block.router.name = Enrutador block.distributor.name = Distribuidor block.sorter.name = Clasificador -block.sorter.description = Clasifica objetos. Si un objeto es igual a uno seleccionado, va a pasar. O si no, el objeto saldrá en la izquierda y la derecha. +block.sorter.description = Clasifica objetos. Si un objeto es igual al seleccionado, pasará al frente. Si no, el objeto saldrá por la izquierda y la derecha. block.overflow-gate.name = Compuerta de Desborde block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena. block.smelter.name = Horno de Fundición @@ -562,7 +562,7 @@ block.dart-ship-pad.name = Pad de nave de dardos block.delta-mech-pad.name = Pad de mecanoide Delta block.javelin-ship-pad.name = Pad de nave Jabalina block.trident-ship-pad.name = Pad de nave Tridente -block.glaive-ship-pad.name = Glaive Ship Pad +block.glaive-ship-pad.name = Pad de nave Glaive block.omega-mech-pad.name = Pad de mecanoide Omega block.tau-mech-pad.name = Pad de mecanoide Tau block.conduit.name = Conducto @@ -589,12 +589,12 @@ block.solar-panel-large.name = Panel Solar Grande block.oil-extractor.name = Extractor de Petróleo block.spirit-factory.name = Fábrica de Drones Espíritu block.phantom-factory.name = Fábrica de Drones Fantasmales -block.wraith-factory.name = Wraith Fighter Factory -block.ghoul-factory.name = Ghoul Bomber Factory +block.wraith-factory.name = Fábrica de Wraith Fighter +block.ghoul-factory.name = Fábrica de Ghoul Bomber block.dagger-factory.name = Fábrica de Dagas block.titan-factory.name = Fábrica de Titanes -block.fortress-factory.name = Fortress Mech Factory -block.revenant-factory.name = Revenant Fighter Factory +block.fortress-factory.name = Fábrica de mecanoide Fortress +block.revenant-factory.name = Fábrica de Revenant Fighter block.repair-point.name = Punto de Reparación block.pulse-conduit.name = Conducto de Pulso block.phase-conduit.name = Conducto de Fase @@ -606,18 +606,18 @@ block.rotary-pump.name = Bomba Rotatoria block.thorium-reactor.name = Reactor de Torio block.command-center.name = Centro de Comando block.mass-driver.name = Teletransportador de Masa -block.blast-drill.name = Taladro Gigante +block.blast-drill.name = Taladro de explosión block.thermal-pump.name = Bomba Térmica block.thermal-generator.name = Generador Térmico -block.alloy-smelter.name = Alloy Smtler +block.alloy-smelter.name = Alloy Smelter block.mend-projector.name = Proyector de reparación block.surge-wall.name = Surge Wall block.surge-wall-large.name = Large Surge Wall block.cyclone.name = Ciclón block.fuse.name = Fuse block.shock-mine.name = Shock Mine -block.overdrive-projector.name = Overdrive Projector -block.force-projector.name = Force Projector +block.overdrive-projector.name = Proyector de sobremarcha +block.force-projector.name = Proyector de fuerza block.arc.name = Arc block.rtg-generator.name = Generador RTG block.spectre.name = Espectro @@ -703,7 +703,7 @@ block.junction.description = Actúa como puente para dos transportadores que se block.mass-driver.description = El mejor bloque de transorte. Recoge varios objetos y los dispara a otro conductor de masa en un largo rango. block.smelter.description = Quema carbón para fundir cobre y plomo, produciendo así aleación densa. block.arc-smelter.description = Funde cobre y plomo en aleación densa usando una fuented de energía externa. -block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon. +block.silicon-smelter.description = Reduce arena con coque de alta pureza para producir silicona. block.plastanium-compressor.description = Produce plastanio con aceite y titanio. block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand. block.alloy-smelter.description = Produce "surge alloy" con titanio, plomo, silicona y cobre. @@ -743,12 +743,12 @@ block.trident-ship-pad.description = Deja tu nave actual y transfórmate en una block.javelin-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea fuerte y rápida interceptora con arma eléctrica.\nUsa el pad tocándolo dos veces mientras estás en él. block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él. block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él. -block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it. +block.delta-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide rápido y ligero hecho para ataques de emboscada y retirada.\nUsa el pad tocándolo dos veces mientras estás en él. block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él. block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques. block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu. block.wraith-factory.description = Produce unidades aéreas rápidas e interceptoras. -block.ghoul-factory.description = Produce unidadess bombarderas pesadas. +block.ghoul-factory.description = Produce unidades bombarderas pesadas. block.dagger-factory.description = Produce unidades terrestres básicas. block.titan-factory.description = Produce unidades terrestres avanzadas. block.fortress-factory.description = Produce unidades terrestres de artillería pesada. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 7218e4051e..4d5e3040c6 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -1,5 +1,6 @@ -text.credits.text = Создатель [ROYAL] Anuken. - [SKY]anukendev@gmail.com[][]\n\nЕсть недороботки в переводе?\nПишите в офф. discord-сервер mindustry в канал #русский. \n\n Активные переводчики:\n[GREEN]Prosta4ok_ua[]\n[GREEN]xga[]\n[BLACK]XZimur[]\n Неактивные переводчики:\n[MAGENTA]Krocotavus[]\nReazy\n[RED]Lexa1549[] +text.credits.text = Создатель [ROYAL] Anuken. - [SKY]anukendev@gmail.com[][]\n\nЕсть недороботки в переводе?\nПишите в офф. discord-сервер mindustry в канал #русский.\n\nПереводчики на русский язык:\n[YELLOW]Prosta4ok_ua\n[GREEN]xga\n[BLACK]XZimur text.credits = Авторы +text.contributors = Переводчики и контрибьюторы text.discord = Присоединяйтесь к нашему Discord! text.link.discord.description = Официальный discord-сервер Mindustry text.link.github.description = Исходный код игры @@ -14,7 +15,7 @@ text.gameover.pvp = [accent] {0}[] команда победила! text.sector.gameover = Этот сектор потерян. Высадится повторно? text.sector.retry = Повторить попытку text.highscore = [YELLOW]Новый рекорд! -text.wave.lasted = Вы продержались до волны [accent]{0}[]. +text.wave.lasted = Вы продержались до [accent]{0}[]-ой волны. text.level.highscore = Рекорд: [accent]{0} text.level.delete.title = Подтвердите удаление text.map.delete = Вы действительно хотите удалить карту "[accent]{0}[]"? @@ -30,7 +31,7 @@ text.coreattack = < Ядро находится под атакой! > text.unlocks = Разблокированные text.savegame = Сохранить игру text.loadgame = Загрузить игру -text.joingame = Присоединиться +text.joingame = Присоеди\nниться text.addplayers = Доб/удалить игроков text.customgame = Пользовательская игра text.sectors = Секторы @@ -238,7 +239,7 @@ text.editor.exportimage = Экспортировать изображение л text.editor.exportimage.description = Экспортировать файл с изображением карты text.editor.loadimage = Загрузить \nизображение text.editor.saveimage = Сохранить \nизображение -text.editor.unsaved = [scarlet]У вас есть несохранённые изменения![] \nВы уверены, что хотите выйти? +text.editor.unsaved = [scarlet]У вас есть несохранённые изменения![]\nВы уверены, что хотите выйти? text.editor.resizemap = Изменить размер карты text.editor.mapname = Название карты: text.editor.overwrite = [accent]Внимание! \nЭто перезапишет уже существующую карту. @@ -258,12 +259,12 @@ text.settings = Настройки text.tutorial = Обучение text.editor = Редактор text.mapeditor = Редактор карт -text.donate = Донат +text.donate = Пожертво\nвать text.connectfail = [crimson]Не удалось подключиться к серверу: [accent] {0} text.error.unreachable = Сервер недоступен. text.error.invalidaddress = Некорректный адрес. text.error.timedout = Время ожидания истекло!\nУбедитесь, что хост настроен для перенаправления портов и адрес корректный! -text.error.mismatch = Ошибка пакета:\nвозможное несоответствие версии клиента/сервера. \nУбедитесь, что у вас и у создателя сервера установлена последняя версия Mindustry\\! +text.error.mismatch = Ошибка пакета:\nвозможное несоответствие версии клиента/сервера. \nУбедитесь, что у Вас и у владельца сервера установлена последняя версия Mindustry! text.error.alreadyconnected = Вы уже подключены. text.error.mapnotfound = Map file not found! text.error.any = Неизвестная сетевая ошибка. @@ -319,8 +320,8 @@ text.blocks.coolant = Охлаждающая жидкость text.blocks.coolantuse = Охлажд. жидкости используется text.blocks.inputliquidfuel = Жидкое топливо text.blocks.liquidfueluse = Жидкого топлива используется -text.blocks.boostitem = Boost Item -text.blocks.boostliquid = Boost Liquid +text.blocks.boostitem = Ускоряющий предмет +text.blocks.boostliquid = Ускоряющая жидкость text.blocks.health = Здоровье text.blocks.inaccuracy = Разброс text.blocks.shots = Выстрелы @@ -345,7 +346,7 @@ text.category.liquids = Жидкости text.category.items = Предметы text.category.crafting = Создание text.category.shooting = Cтрельба -text.category.optional = Optional Enhancements +text.category.optional = Дополнительные улучшения setting.autotarget.name = Авто-цель setting.fpscap.name = Макс. FPS setting.fpscap.none = Неограниченный @@ -364,13 +365,13 @@ setting.seconds = {0} Секунд setting.fullscreen.name = Полноэкранный режим setting.fps.name = Показывать FPS setting.vsync.name = Верт. синхронизация -setting.lasers.name = Показывать энергетические лазеры +setting.lasers.name = Показывать энергию лазеров setting.minimap.name = Показать миникарту setting.musicvol.name = Громкость музыки setting.mutemusic.name = Заглушить музыку setting.sfxvol.name = Громкость звуковых эффектов setting.mutesound.name = Заглушить звук -setting.crashreport.name = Отправлять анонимные отчёты о сбоях +setting.crashreport.name = Отправлять анонимные отчёты о вылетах text.keybind.title = Настройка управления category.general.name = Основное category.view.name = Просмотр @@ -380,14 +381,14 @@ command.retreat = Отступить command.patrol = Патрулирование keybind.press = Нажмите клавишу... keybind.press.axis = Нажмите клавишу... -keybind.move_x.name = Движение по x -keybind.move_y.name = Движение по y +keybind.move_x.name = Движение по оси x +keybind.move_y.name = Движение по оси y keybind.select.name = Выбор/Выстрел keybind.break.name = Разрушение keybind.deselect.name = Отмена keybind.shoot.name = Выстрел -keybind.zoom_hold.name = Удержание зума -keybind.zoom.name = Приблизить +keybind.zoom_hold.name = Управление масштабом +keybind.zoom.name = Приблизить/Отдалить keybind.menu.name = Меню keybind.pause.name = Пауза keybind.dash.name = Мчаться @@ -403,10 +404,10 @@ keybind.drop_unit.name = Сбросить юнита keybind.zoom_minimap.name = Увеличить миникарту. mode.text.help.title = Описание режимов mode.waves.name = Волны -mode.waves.description = В режиме "волны" ограниченные ресурсы и автоматические наступающие волны. +mode.waves.description = Обычный режим. В режиме "Волны" надо самим добывать ресурсы и сами волны идут безостановочно. mode.sandbox.name = Песочница mode.sandbox.description = Бесконечные ресурсы и нет таймера для волн, но можно самим вызвать волну. -mode.freebuild.name = Свободная\nстройка +mode.freebuild.name = Cвободная\nстрой mode.freebuild.description = ограниченные ресурсы и нет таймера для волн. mode.pvp.name = Противо-\nстояние mode.pvp.description = боритесь против других игроков. @@ -460,7 +461,7 @@ mech.delta-mech.description = Быстрый, легкобронированны mech.tau-mech.name = Тау mech.tau-mech.weapon = Восстановительный лазер mech.tau-mech.ability = Регенирирующая вспышка -mech.tau-mech.description = Мех поддержки. Исцеляет союзные блоки, стреляя в них. Может потушить пожары и исцелить союзников радиусом с его способностью восстанавления. +mech.tau-mech.description = Мех поддержки. Исцеляет союзные блоки, стреляя в них. Может исцелить союзников радиусом с его способностью восстанавления. mech.omega-mech.name = Омега mech.omega-mech.weapon = Ракетомётный пулемётконфигурация mech.omega-mech.ability = Защитная @@ -493,9 +494,10 @@ text.mech.ability = [LIGHT_GRAY]Способность: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Теплоёмкость: {0} text.liquid.viscosity = [LIGHT_GRAY]Вязкость: {0} text.liquid.temperature = [LIGHT_GRAY]Температура: {0} -block.constructing = {0}\n[LIGHT_GRAY](В процессе) -block.spawn.name = Спаун врагов +block.constructing = {0}[LIGHT_GRAY](В процессе) +block.spawn.name = Точка появления врагов block.core.name = Ядро +block.space.name = Пустота block.metalfloor.name = Мeталичeский пoл block.deepwater.name = Глубоководье block.water.name = Вода @@ -590,7 +592,7 @@ block.oil-extractor.name = Нефтяной экстрактор block.spirit-factory.name = Завод дронов "Призрак" block.phantom-factory.name = Завод дронов "Фантом" block.wraith-factory.name = Завод призрачных истребителей -block.ghoul-factory.name = Завод гулевых бомбардировщиков +block.ghoul-factory.name = Завод бомбардировщиков "Гуль" block.dagger-factory.name = Завод мехов "Разведчик" block.titan-factory.name = Завод мехов "Титан" block.fortress-factory.name = Завод мехов "Крепость" @@ -775,6 +777,6 @@ block.itemvoid.description = Уничтожает любые предметы, block.powerinfinite.description = Бесконечность — не предел. Бесконечно выводит энергию. Доступен только в песочнице. block.powervoid.description = Энергия просто уходит в пустоту. Присутствует только в песочнице. liquid.water.description = Намного лучше чем [BLUE]монооксид дигидрогена[].\n\n Для получения воды используйте помпу(насос) на источнике(блоке) или экстрактор воды.\n\n Эту жидкость можно подвести к бурам для ускорения скорости добычи или к турелям для ускорения стрельбы. -liquid.lava.description = [accent]Горячо...\nВещество расплавленное из горно-каменных пород.\nСлужит как топливо для термального генератора. -liquid.oil.description = Кто-то писал о добавлении золота в игру. Его добавили, правда оно какое-то чёрное...\nСмесь жидких углеводородов, выделяющаяся из природного газа в результате снижения температуры и пластового давления.\nСлужит для пластиниевого компрессора и т.д.. +liquid.lava.description = [accent]Горячо...\nВещество расплавленное из горно-каменных пород. +liquid.oil.description = Кто-то писал о добавлении золота в игру. Его добавили, правда оно какое-то чёрное...\nСмесь жидких углеводородов, выделяющаяся из природного газа в результате снижения температуры и пластового давления. liquid.cryofluid.description = Жидкость с температурой ниже чем -273 градусов по цельсию. Может быть использована для ускорения стрельбы турелей или для охлаждения чего-то. diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index f5d883551b..6bc5700d53 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -1,10 +1,11 @@ -text.credits.text = Створив [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\nПерекладачі:\n[YELLOW]Prosta4ok_ua[]\n[GREEN]xga\n\n[] Є питання по грі або проблеми с перекладом? Іди в офіційний сервер discord Mindustry в канал #український. +text.credits.text = Створив [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\nЄ питання по грі або проблеми с перекладом? Іди в офіційний сервер discord Mindustry в канал #український. text.credits = Автори +text.contributors = Перекладачі та Контриб'ютори text.discord = Приєднуйтесь до нашого Discord! -text.link.discord.description = Офіційний сервер discord Mindustry -text.link.github.description = Вихідний код гри +text.link.discord.description = Офіційний discord-сервер Mindustry +text.link.github.description = Код гри text.link.dev-builds.description = Нестабільні версії -text.link.trello.description = Офіційна дошка trello для запланованих функцій +text.link.trello.description = Офіційна дошка trello(на англ.) для запланованих функцій text.link.itch.io.description = Itch.io сторінка з веб-версією та завантаженням для ПК text.link.google-play.description = Скачати з Google Play для Android text.link.wiki.description = Офіційна Mindustry вікі (англ.) @@ -14,15 +15,15 @@ text.gameover.pvp = [accent] {0}[] команда перемогла! text.sector.gameover = Цей сектор було втрачено. Повторно висадитися? text.sector.retry = Повторити спробу text.highscore = [YELLOW]Новий рекорд! -text.wave.lasted = Ви проіснували до [accent]{0}[]-ої хвилі. +text.wave.lasted = Вы продержались до [accent]{0}[]-ой волны. text.level.highscore = Рекорд: [accent]{0} text.level.delete.title = Підтвердьте видалення text.map.delete = Ви впевнені, що хочете видалити карту "[accent]{0}[]"? text.level.select = Вибір мапи -text.level.mode = Ігровий режим: +text.level.mode = Режим гри: text.construction.desktop = Щоб скасувати вибір блоку або припинити будівництво, [accent] скористайтеся пробілом[]. text.construction.title = Інструкція з будівництва блоків -text.construction = Ви тільки що перешли в [accent]режим будівництва блоків[].\n\nЩоб розпочати розміщення, просто торкніться відповідного розташування поруч із вашим кораблем.\nПісля вибору деяких блоків натисніть прапорець, щоб підтвердити, і ваш корабель почне будувати їх.\n\n- [accent]Вилучіть блоки[] з вашого вибору, торкнувшись їх.\n- [accent]Перемістіть виділення[] утримуючи та перетягнувши будь-який блок у виділенні.\n- [accent]Розташуйте блоки у лінію[], торкнувшись і утримуючи порожнє місце, а потім перетягуючи в потрібному напрямку.\n- [accent]Скасуйте конструкцію або виділення[] натиснувши X внизу ліворуч. +text.construction = Ви тільки що перейшли в режим будівництва[accent] блоків[].\n\nЩоб розпочати розміщення, просто торкніться підходящого місця поруч із вашим кораблем.\nПісля вибору деяких блоків натисніть прапорець, щоб підтвердити, і ваш корабель почне будувати їх.\n\n- [accent]Вилучіть блоки[] з вашого вибору, торкнувшись їх.\n- [accent]Перемістіть виділення[] утримуючи та перетягнувши будь-який блок у виділенні.\n- [accent]Розташуйте блоки у лінію[], торкнувшись і утримуючи порожнє місце, а потім перетягуючи в потрібному напрямку.\n- [accent]Скасуйте розміщення блоків[] натиснувши X внизу ліворуч. text.deconstruction.title = Інструкція з деконструкції блоків text.deconstruction = Ви тільки що перешли в [accent] режим деконструкції блоків[].\n\nЩоб почати руйнувати, просто торкніться блоку поруч із вашим кораблем.\nПісля вибору деяких блоків натисніть прапорець, щоб підтвердити, і ваш корабель почне їх деконструювати.\n\n- [accent]Вилучіть блоки[] з вашого вибору, торкнувшись їх.\n- [accent]Вилучіть блоки в зоні[] , торкнувшись і утримуючи порожнє місце, потім перетягніть у потрібному напрямку.\n- [accent]Скасуйте деконструкцію або виділення[] натиснувши X внизу ліворуч. text.showagain = Не показувати знову до наступного сеансу @@ -30,11 +31,11 @@ text.coreattack = < Ядро під атакою! > text.unlocks = Розблоковане text.savegame = Зберегти гру text.loadgame = Завантажити гру -text.joingame = Приєднатися\nдо гри +text.joingame = Приєднатися text.addplayers = Дод/Видалити гравців -text.customgame = Індивідуальна гра +text.customgame = Користувальницька гра text.sectors = Сектори -text.sector = Сектор: [LIGHT_GRAY]{0} +text.sector = Обраний сектор: [LIGHT_GRAY]{0} text.sector.time = Час: [LIGHT_GRAY]{0} text.sector.deploy = Висадитися text.sector.abandon = Відступити @@ -45,27 +46,27 @@ text.sector.unexplored = [accent][[Недосліджений] text.missions = Місії:[LIGHT_GRAY] {0} text.mission = Місія:[LIGHT_GRAY] {0} text.mission.main = Головна місія:[LIGHT_GRAY] {0} -text.mission.info = Інформація про місії -text.mission.complete = Місія завершена! +text.mission.info = Інформація про місію +text.mission.complete = Місія виконана! text.mission.complete.body = Сектор {0},{1} був завойований. -text.mission.wave = Пережити наступну кількість хвиль:[accent]{0}/{1}[]\nХвиля в {2} -text.mission.wave.enemies = Пережити [accent] {0}/{1} []хвиль\n{2} Ворог. -text.mission.wave.enemy = Пережити[accent] {0}/{1} []хвиль\n{2} Ворог -text.mission.wave.menu = Пережити[accent] {0} []хвиль -text.mission.battle = Знищити базу супротивника. +text.mission.wave = Пережити [accent]{0}/{1}[]\nХвиля через {2} +text.mission.wave.enemies = Пережити [accent] {0}/{1} []хвиль\n{2} ворог. +text.mission.wave.enemy = Пережити[accent] {0}/{1} []хвил.\n{2} Ворог +text.mission.wave.menu = Пережити[accent] {0} [] хвиль +text.mission.battle = Знищте ядро супротивника. text.mission.resource.menu = Добути {0} x{1} -text.mission.resource = Отримано {0} x{1} +text.mission.resource = Добути {0}:\n[accent]{1}/{2}[] text.mission.block = Створити {0} text.mission.unit = Створити {0} бой.од. -text.mission.command = Надіслати команду {0} до боїв. одиниць +text.mission.command = Надіслати команду {0} боїв. одиницям text.mission.linknode = З'єднати силові вузли text.mission.display = [accent]Місія:\n[LIGHT_GRAY]{0} text.mission.mech = Переключитися на мех[accent] {0}[] -text.mission.create = Створити[accent] {0} [] +text.mission.create = Створити[accent] {0}[] text.none = <нічого> text.close = Закрити text.quit = Вийти -text.maps = Карти +text.maps = Мапи text.continue = Продовжити text.nextmission = Наступна місія text.maps.none = [LIGHT_GRAY]Карт не знайдено! @@ -74,27 +75,27 @@ text.name = Нік: text.filename = Ім'я файлу: text.unlocked = Новий блок розблоковано! text.unlocked.plural = Нові блоки розблоковано! -text.players = {0} гравців онлайн -text.players.single = {0} гравець онлайн +text.players = Гравців на сервері: {0} +text.players.single = {0} гравець на сервері text.server.closing = [accent]Закриття серверу... text.server.kicked.kick = Ви були вигнані(кікнуті) з сервера! -text.server.kicked.serverClose = Сервер закритий. -text.server.kicked.sectorComplete = Сектор завойован. -text.server.kicked.sectorComplete.text = Ваша місія завершена. \nСервер продовжить роботу в наступному секторі. +text.server.kicked.serverClose = Сервер закрито. +text.server.kicked.sectorComplete = Сектор завойовано. +text.server.kicked.sectorComplete.text = Ваша місія завершена. \nСервер продовжить роботу і висадить Вас в наступному секторі. text.server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру! -text.server.kicked.serverOutdated = Застарілий сервер! Попросіть хост оновити сервер/гру! +text.server.kicked.serverOutdated = Застарілий сервер! Попросіть адміністратора серверу оновити сервер/гру! text.server.kicked.banned = Ви були заблоковані на цьому сервері. -text.server.kicked.recentKick = Нещодавно вас вигнали(кікнули). \nПочекайте, перш ніж підключитися знову. +text.server.kicked.recentKick = Нещодавно Вас вигнали(кікнули). \nПочекайте трохи перед наступним підключенням. text.server.kicked.nameInUse = На цьому сервері є хтось \nз таким ніком. text.server.kicked.nameEmpty = Ваш нікнейм має містити принаймні один символ або цифру. text.server.kicked.idInUse = Ви вже на цьому сервері! Підключення двох облікових записів не допускається. text.server.kicked.customClient = Цей сервер не підтримує користувальницькі збірки. Завантажте офіційну версію. -text.host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [LIGHT_GRAY] WiFi або локальній мережі [] повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то [accent] переадресація портів [] обов'язкова.\n\n[LIGHT_GRAY] Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. -text.join.info = Тут ви можете ввести [accent]IP серверу[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[LIGHT_GRAY] Примітка. Там немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити хазяїна серверу дати свій ip. +text.host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [LIGHT_GRAY] WiFi або локальній мережі[] повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то [accent] переадресація порту [] обов'язкова.\n\n[LIGHT_GRAY] Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера. +text.join.info = Тут ви можете ввести [accent]IP серверу[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[LIGHT_GRAY] Примітка. Тут немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити створювача серверу дати свій ip. text.hostserver = Запустити сервер -text.hostserver.mobile = Запустити\nСервер +text.hostserver.mobile = Запустити\nсерверу text.host = Сервер -text.hosting = [accent]Открытие сервера ... +text.hosting = [accent]Відкриття серверу... text.hosts.refresh = Оновити text.hosts.discovering = Пошук локальних ігор text.server.refreshing = Оновлення серверу @@ -113,9 +114,9 @@ text.trace.totalblocksplaced = Всього встановлено блоків: text.trace.lastblockplaced = Останній встановлений блок: [accent]{0} text.invalidid = Невірний ідентифікатор клієнта! Надішліть звіт про помилку. text.server.bans = Блокування -text.server.bans.none = Нема заблокованих гравців! +text.server.bans.none = Заблокованих гравців нема! text.server.admins = Адміністратори -text.server.admins.none = Адміністраторів нема! +text.server.admins.none = Адміністраторів нема text.server.add = Додати сервер text.server.delete = Ви впевнені, що хочете видалити цей сервер? text.server.hostname = Хост: {0} @@ -123,10 +124,10 @@ text.server.edit = Редагувати сервер text.server.outdated = [crimson]Застарілий сервер![] text.server.outdated.client = [crimson]Застарілий клієнт![] text.server.version = [lightgray]Версія: {0} -text.server.custombuild = [yellow]Користувацький білд -text.confirmban = Ви впевнені, що хочете заблокувати(забанити) цього гравця? +text.server.custombuild = [yellow]Користувацький збірка +text.confirmban = Ви впевнені, що хочете заблокувати цього гравця? text.confirmkick = Ви впевнені, що хочете викинути(кікнути) цього гравця? -text.confirmunban = Ви впевнені, що хочете розблокувати) цього гравця? +text.confirmunban = Ви впевнені, що хочете розблокувати цього гравця? text.confirmadmin = Ви впевнені, що хочете зробити цього гравця адміністратором? text.confirmunadmin = Ви впевнені, що хочете видалити статус адміністратора з цього гравця? text.joingame.title = Приєднатися до гри @@ -136,10 +137,10 @@ text.disconnect.data = Не вдалося завантажити світові text.connecting = [accent]Підключення... text.connecting.data = [accent]Завантаження даних світу... text.server.port = Порт: -text.server.addressinuse = Адреса вже використовується! +text.server.addressinuse = Ця адреса вже використовується! text.server.invalidport = Недійсний номер порту! -text.server.error = [crimson]Помилка хостингу сервера: [accent]{0} -text.save.old = Це збереження для старої версії гри, і його більше не можна використовувати.\n\n [LIGHT_GRAY]Зберігати зворотну сумісність буде реалізовано у повній версії 4.0. +text.server.error = [crimson]Помилка запуску сервера: [accent]{0} +text.save.old = Це збереження для старої версії гри, і його більше не можна використовувати.\n\n [LIGHT_GRAY]Зворотна сумісність буде реалізовано у повній версії 4.0. text.save.new = Нове збереження text.save.overwrite = Ви впевнені, що хочете перезаписати цей слот для збереження? text.overwrite = Перезаписати @@ -152,24 +153,24 @@ text.save.export = Экспортувати збереження text.save.import.invalid = [accent]Це збереження недійсне! text.save.import.fail = [crimson]Не вдалося імпортувати збереження: [accent]{0} text.save.export.fail = [crimson]Не вдалося экспортувати збереження: [accent]{0} -text.save.import = Імпорт збереження -text.save.newslot = Зберегти ім'я: +text.save.import = Імпортувати збереження +text.save.newslot = Назва збереження: text.save.rename = Перейменувати text.save.rename.text = Нова назва: text.selectslot = Виберіть збереження. text.slot = [accent]Слот {0} -text.save.corrupted = [accent]Збережений файл пошкоджений або недійсний! \nЯкщо ви щойно оновили свою гру, це, мабуть, є зміною формату збереження та [scarlet] не []є помилкою. -text.sector.corrupted = [accent]Знайдено файл збереження для цього сектора, але завантаження не вдалося. \n Буде створено новий. +text.save.corrupted = [accent]Збережений файл пошкоджено або э недійсним! \nЯкщо ви щойно оновили свою гру, це, мабуть, є зміною формату збереження та [scarlet] не[] є помилкою. +text.sector.corrupted = [accent]Файл збереження для цього сектора знайдено, але завантаження не вдалося. \n Буде створено новий файл. text.empty = <порожній> -text.on = Вкл -text.off = Викл +text.on = Включено +text.off = Вимкнено text.save.autosave = Автозбереження: {0} -text.save.map = Карта: {0} +text.save.map = Мапа: {0} text.save.wave = Хвиля {0} -text.save.difficulty = Рівень складності: {0} -text.save.date = Останне збереження: {0} +text.save.difficulty = Складність: {0} +text.save.date = Останнє збереження text.save.playtime = Час гри: {0} -text.confirm = Підтвердити +text.confirm = Підтвердження text.delete = Видалити text.ok = ОК text.open = Відкрити @@ -177,11 +178,11 @@ text.cancel = Скасувати text.openlink = Відкрити посилання text.copylink = Скопіювати посилання text.back = Назад -text.quit.confirm = Ти впевнений що хочеш вийти? +text.quit.confirm = Ви впевнені що хочете вийти? text.changelog.title = Журнал змін text.changelog.loading = Отримання журналу змін... text.changelog.error.android = [accent]Зверніть увагу, що іноді журнал змін не працює на ОС Android 4.4 або на нижчій версії!\nЦе пов'язано з внутрішньою помилкою Android. -text.changelog.error.ios = [accent]Журнал змін наразі не підтримується в iOS. +text.changelog.error.ios = [accent]В настоящее время журнал изменений не поддерживается iOS. text.changelog.error = [scarlet]Помилка отримання журналу змін!\nПеревірте підключення до Інтернету. text.changelog.current = [yellow][[Поточна версія] text.changelog.latest = [accent][[Остання версія] @@ -190,7 +191,7 @@ text.saving = [accent]Збереження... text.wave = [accent]Хвиля {0} text.wave.waiting = Хвиля через {0} text.waiting = Очікування... -text.waiting.players = Очікування гравців ... +text.waiting.players = Очікування гравців text.wave.enemies = [LIGHT_GRAY]{0} ворог. залишилося text.wave.enemy = [LIGHT_GRAY]{0} ворог залишився text.loadimage = Завантажити зображення @@ -199,91 +200,90 @@ text.unknown = Невідомо text.custom = Користувальницька text.builtin = Bбудована text.map.delete.confirm = Ви впевнені, що хочете видалити цю карту? Цю дію не можна скасувати! -text.map.random = [accent]Випадкова карта -text.map.nospawn = Ця карта не має жодного ядра для спавну гравця! Додайте[ROYAL] сине[] ядро в цю карту в редакторі. +text.map.random = [accent]Випадкова мапа +text.map.nospawn = Ця мапа не має жодного ядра для спавну гравця! Додайте[ROYAL] сине[] ядро в цю мапу редакторі. text.map.nospawn.pvp = У цій карти немає ворожих ядер, в яких гравець може з'явитися! Додайте[SCARLET] червоні[] ядра до цієї карті в редакторі. text.map.invalid = Помилка завантаження карти: пошкоджений або невірний файл карти. text.editor.brush = Пензлик -text.editor.slope = \\ +text.editor.slope = text.editor.openin = Відкрити в редакторі text.editor.oregen = Генерація руд text.editor.oregen.info = Генерація руд: -text.editor.mapinfo = Інформація про карту +text.editor.mapinfo = Інформація про мапу text.editor.author = Автор: text.editor.description = Опис: text.editor.name = Назва: text.editor.teams = Команди -text.editor.elevation = Высота височини -text.editor.errorimageload = Помилка завантаження файлу:\n[accent]{0} -text.editor.errorimagesave = Помилка збереження файлу:\n[accent]{0} -text.editor.generate = Генерувати -text.editor.resize = Змінити розмір -text.editor.loadmap = Завантажити карту +text.editor.elevation = Висота +text.editor.errorimageload = Помилка завантаження зображення:[accent] {0} +text.editor.errorimagesave = Помилка збереження зображення:\n[accent]{0} +text.editor.generate = Створити +text.editor.resize = Змінити \nрозмір +text.editor.loadmap = Завантажити мапу text.editor.savemap = Зберегти карту text.editor.saved = Збережено! -text.editor.save.noname = Ваша карта не має назви! Встановіть його в меню "інформація про карту". -text.editor.save.overwrite = Ваша карта перезаписує вбудовану карту! Виберіть інше ім'я в меню "інформація про карту". +text.editor.save.noname = Ваша карта не має назви! Встановіть його в меню «Інформація про карту». +text.editor.save.overwrite = Ваша карта перезаписує вбудовану карту! Виберіть інше ім'я в меню «Інформація про карту». text.editor.import.exists = [scarlet]Неможливо імпортувати: [] вбудована карта з назвою "{0}" вже існує! text.editor.import = Імпорт... text.editor.importmap = Імпортувати карту -text.editor.importmap.description = Імпортуйте вже існуючої карти +text.editor.importmap.description = Імпортувати вже існуючу карту text.editor.importfile = Імпортувати файл -text.editor.importfile.description = Імпортуйте зовнішній файл карти -text.editor.importimage = Імпорт зображення місцевості -text.editor.importimage.description = Імпорт зовнішнього файла зображення карти +text.editor.importfile.description = Імпортувати зовнішній файл карти +text.editor.importimage = Імпорт зовнішнього файла зображення карти +text.editor.importimage.description = Імпорт зображення місцевості text.editor.export = Експорт... text.editor.exportfile = Експорт файлу text.editor.exportfile.description = Експортувати файл карти text.editor.exportimage = Експорт зображення місцевості text.editor.exportimage.description = Експорт файла з зображенням карти -text.editor.loadimage = Імпорт місцевості -text.editor.saveimage = Екпорт місцевості +text.editor.loadimage = Завантажити\nзображення +text.editor.saveimage = Зберегти\nзображення text.editor.unsaved = [scarlet]У вас є незбережені зміни![]\nВи впевнені, що хочете вийти? text.editor.resizemap = Змінити розмір карти -text.editor.mapname = Назва карти: +text.editor.mapname = Название карты: text.editor.overwrite = [accent]Попередження!\nЦе перезаписує існуючу карту. text.editor.overwrite.confirm = [scarlet]Попередження![] Карта з такою назвою вже існує. Ви впевнені, що хочете переписати її? -text.editor.selectmap = Виберіть карту для завантаження: +text.editor.selectmap = Виберіть мапу для завантаження: text.width = Ширина: text.height = Висота: text.menu = Меню text.play = Грати -text.load = Завантаження +text.load = Завантажити text.save = Зберегти text.fps = FPS: {0} text.tps = TPS: {0} text.ping = Пінг: {0} мс -text.language.restart = Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності. +text.language.restart = Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.\nPlease restart your game for the language settings to take effect. text.settings = Налаштування text.tutorial = Навчання text.editor = Редактор -text.mapeditor = Редактор карт -text.donate = Пожертвувати +text.mapeditor = Редактор мап +text.donate = Пожертву\nвання text.connectfail = [crimson]Не вдалося підключитися до сервера: [accent]{0} -text.error.unreachable = Server unreachable. -text.error.invalidaddress = Invalid address. -text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct! -text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry! -text.error.alreadyconnected = Already connected. -text.error.mapnotfound = Map file not found! -text.error.any = Unkown network error. +text.error.unreachable = Сервер не доступний. +text.error.invalidaddress = Некоректна адреса. +text.error.timedout = Час очікувування вийшов.\nПереконайтеся, що адреса коректна і що власник сервера налаштував переадресацію порту! +text.error.mismatch = Ошибка пакету:\nможливе невідповідність версії клієнта / сервера.\nПереконайтеся, що у Вас та у володара сервера встановлена остання версія Mindustry! +text.error.alreadyconnected = Ви вже підключилися. +text.error.any = Невідома мережева помилка text.settings.language = Мова -text.settings.reset = Скинути до стандартних -text.settings.rebind = Змінити -text.settings.controls = Елементи управління +text.settings.reset = Скинути за замовчуванням +text.settings.rebind = Зміна +text.settings.controls = Управління text.settings.game = Гра text.settings.sound = Звук text.settings.graphics = Графіка -text.settings.cleardata = Очистити ігрові дані... -text.settings.clear.confirm = Ви впевнені, що хочете очистити ці дані?\nЩо робиться, не може бути скасовано! -text.settings.clearall.confirm = [scarlet]УВАГА![]\nЦе очистить всі дані, включаючи збереження, карти, розблокування та призначенні клавіші.\nПісля того, як ви натиснете "ОК", гра видалить усі дані та автоматично вийде. +text.settings.cleardata = Очистити дані... +text.settings.clear.confirm = Ви впевнені, що хочете очистити ці дані?\nЦя дія не може бути скасовано! +text.settings.clearall.confirm = [scarlet]УВАГА![]\nЦе очистить всі дані, включаючи збереження, карти, розблокуване та призначенні клавіші.\nПісля того, як ви натиснете ОК, гра видалить усі дані та автоматично вийде. text.settings.clearsectors = Очистити сектори text.settings.clearunlocks = Очистити розблоковане text.settings.clearall = Очистити все text.paused = Пауза text.yes = Так text.no = Ні -text.info.title = [accent]Інформація +text.info.title = Інформація text.error.title = [crimson]Виникла помилка text.error.crashtitle = Виникла помилка text.blocks.unknown = [LIGHT_GRAY]??? @@ -291,14 +291,14 @@ text.blocks.blockinfo = Інформація про блок text.blocks.powercapacity = Місткість енергії text.blocks.powershot = Енергія/постріл text.blocks.targetsair = Атакуе повітряних ворогів? -text.blocks.itemspeed = Переміщення одиниць -text.blocks.shootrange = Діапазон +text.blocks.itemspeed = Швидкість переміщення ресурсів +text.blocks.shootrange = Діапазон дії text.blocks.size = Розмір text.blocks.liquidcapacity = Місткість рідини text.blocks.maxitemssecond = Макс. кількість предметів/секунду text.blocks.powerrange = Діапазон передачі енергії -text.blocks.poweruse = Енергії використовується -text.blocks.powerdamage = Енергія/Урон +text.blocks.poweruse = Енергії використовує +text.blocks.powerdamage = Енергія/урон text.blocks.inputitemcapacity = Ємність вхідних елементів text.blocks.outputitemcapacity = Ємність вихідних елементів text.blocks.itemcapacity = Місткість предметів @@ -314,102 +314,102 @@ text.blocks.drilltier = Видобуває text.blocks.drillspeed = Базова швидкість свердління text.blocks.liquidoutput = Вихідна рідина text.blocks.liquidoutputspeed = Швидкість вихідної рідини -text.blocks.liquiduse = Використовуеться рідина +text.blocks.liquiduse = Використовуеться рідин text.blocks.coolant = Охолоджуюча рідина text.blocks.coolantuse = Охолодж. рідини використовуеться text.blocks.inputliquidfuel = Рідке паливо text.blocks.liquidfueluse = Рідкого палива використовуеться -text.blocks.boostitem = Boost Item -text.blocks.boostliquid = Boost Liquid +text.blocks.boostitem = Прискорюючий предмет +text.blocks.boostliquid = Прискорююча рідина text.blocks.health = Здоров'я text.blocks.inaccuracy = Розкид text.blocks.shots = Постріли -text.blocks.reload = Перезарядка +text.blocks.reload = Постріли/секунду text.blocks.inputfuel = Паливо text.blocks.fuelburntime = Час горіння топлива -text.blocks.inputcapacity = Вміщення вводу -text.blocks.outputcapacity = Вміщення виводу +text.blocks.inputcapacity = Макс. місткість вхідних предметів +text.blocks.outputcapacity = Макс. місткість вихідних предметів text.unit.blocks = блоки text.unit.powersecond = одиниць енергії/секунду text.unit.liquidsecond = рідких одиниць/секунду text.unit.itemssecond = предметів/секунду text.unit.pixelssecond = пікселів/секунду -text.unit.liquidunits = рідин. одиниць -text.unit.powerunits = енерг. одиниць +text.unit.liquidunits = рідинних одиниць +text.unit.powerunits = енергетичних одиниць text.unit.degrees = град. text.unit.seconds = сек. text.unit.items = предм. -text.category.general = Загальне -text.category.power = Енергетичне -text.category.liquids = Рідинне -text.category.items = Елементи +text.category.general = Загальні +text.category.power = Енергетичні +text.category.liquids = Рідини +text.category.items = Предмети text.category.crafting = Створення text.category.shooting = Стрільба -text.category.optional = Optional Enhancements +text.category.optional = Додаткові поліпшення setting.autotarget.name = Авто-ціль setting.fpscap.name = Макс. FPS setting.fpscap.none = Необмежений setting.fpscap.text = {0} FPS setting.difficulty.training = навчання -setting.difficulty.easy = легкий -setting.difficulty.normal = нормальний -setting.difficulty.hard = важкий -setting.difficulty.insane = божевільний -setting.difficulty.name = Рівень складності: +setting.difficulty.easy = легка +setting.difficulty.normal = нормальна +setting.difficulty.hard = важка +setting.difficulty.insane = божевільна +setting.difficulty.name = Складність: setting.screenshake.name = Тряска екрану setting.effects.name = Ефекти setting.sensitivity.name = Чутливість контролера setting.saveinterval.name = Інтервал автозбереження setting.seconds = {0} сек. setting.fullscreen.name = Повноекранний режим -setting.fps.name = Показати FPS +setting.fps.name = Показувати FPS setting.vsync.name = Вертикальна синхронізація -setting.lasers.name = Показати енергетичні лазери +setting.lasers.name = Показувати енергію лазерів setting.minimap.name = Показати мінікарту setting.musicvol.name = Гучність музики setting.mutemusic.name = Заглушити музику setting.sfxvol.name = Гучність звукових ефектів setting.mutesound.name = Заглушити звук -setting.crashreport.name = Send Anonymous Crash Reports +setting.crashreport.name = Надіслати анонімні звіти про аварійне завершення гри text.keybind.title = Налаштування управління category.general.name = Основне category.view.name = Перегляд category.multiplayer.name = Мультиплеєр command.attack = Атакувати command.retreat = Відступити -command.patrol = Патрулювання +command.patrol = Патрулювати keybind.press = Натисніть клавішу... keybind.press.axis = Натисніть клавішу... -keybind.move_x.name = Переміщення по осі x -keybind.move_y.name = Переміщення по осі y -keybind.select.name = Виберіть -keybind.break.name = Зламати +keybind.move_x.name = Рух по осі x +keybind.move_y.name = Рух по осі x +keybind.select.name = ВибратиПостріл +keybind.break.name = Руйнування keybind.deselect.name = Скасувати keybind.shoot.name = Постріл -keybind.zoom_hold.name = Утримувати масштаб -keybind.zoom.name = Збільшити +keybind.zoom_hold.name = Удержание зума +keybind.zoom.name = Приблизить keybind.menu.name = Меню keybind.pause.name = Пауза -keybind.dash.name = Тире +keybind.dash.name = Мчати keybind.chat.name = Чат keybind.player_list.name = Список гравців keybind.console.name = Консоль -keybind.rotate.name = Повертати +keybind.rotate.name = Обертати keybind.toggle_menus.name = Меню перемикання keybind.chat_history_prev.name = Попередня історія чату keybind.chat_history_next.name = Наступна історія чату keybind.chat_scroll.name = Прокрутка чату -keybind.drop_unit.name = Скинути юніта +keybind.drop_unit.name = Скинути бой. од. keybind.zoom_minimap.name = Збільшити мінікарту mode.text.help.title = Опис режимів mode.waves.name = Хвилі -mode.waves.description = Нормальний режим. Обмежені ресурси та автоматичні хвилі. +mode.waves.description = Звичайний режим. В режимі "Хвилі" треба самим добувати ресурси та хвилі йдуть беззупинно. mode.sandbox.name = Пісочниця -mode.sandbox.description = Нескінченні ресурси і нема таймера для хвиль. -mode.freebuild.name = Вільний режим -mode.freebuild.description = обмежені ресурси і немає таймера для хвиль. -mode.pvp.name = PvP -mode.pvp.description = борітесь проти інших гравців тут. +mode.sandbox.description = В режимі "Пісочниця" бескінечні ресурси(але їх все одно можно добувати) та хвилі йдуть за вашим бажанням. +mode.freebuild.name = Вільне\nбудівництво +mode.freebuild.description = В режимі "Пісочниця" треба самим добувати ресурси та хвилі йдуть за вашим бажанням. +mode.pvp.name = PVP +mode.pvp.description = боріться проти інших гравців. content.item.name = Предмети content.liquid.name = Рідини content.unit.name = Бойові одиниці @@ -420,29 +420,29 @@ item.stone.description = Загальна сировина. Використов item.copper.name = Мідь item.copper.description = Корисний структурний матеріал. Широко використовується у всіх типах блоків. item.lead.name = Свинець -item.lead.description = Базовий стартовий матеріал. Широко використовується в електроніки та транспорту рідини. +item.lead.description = Базовий стартовий матеріал. Широко використовується в електроніки та транспорту рідин. item.coal.name = Вугілля item.coal.description = Загальне та легкодоступне паливо. item.dense-alloy.name = Щільний сплав -item.dense-alloy.description = Жорсткий сплав з свинцем та міддю. Використовується в передових транспортних блоках та високорівневих свердлах. +item.dense-alloy.description = Жорсткий сплав вироблений зі свинця та міді. Використовується в передових транспортних блоках та високорівневих свердлах. item.titanium.name = Титан item.titanium.description = Рідкий суперлегкий метал широко використовується в рідкому транспорті, свердлах та літальних апаратах. item.thorium.name = Торій item.thorium.description = Густий, радіоактивний метал, що використовується як структурна підтримка та ядерне паливо. -item.silicon.name = Кремній -item.silicon.description = Надзвичайно корисний напівпровідник з застосуванням в сонячних батареях та багатьох складних електроніках. +item.silicon.name = Кремень +item.silicon.description = Надзвичайно корисний напівпровідник з застосуванням в сонячних батареях та складній електроніці. item.plastanium.name = Пластиній -item.plastanium.description = Легкий, пластичний матеріал, що використовується в сучасних літальних апаратах, та боєприпаси для фрагментації. -item.phase-fabric.name = Phase Fabric -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. -item.surge-alloy.name = Хвилястий сплав -item.surge-alloy.description = An advanced alloy with unique electrical properties. +item.plastanium.description = Легкий, пластичний матеріал, що використовується в сучасних літальних апаратах та у боєприпасах для фрагментації. +item.phase-fabric.name = Фазова тканина +item.phase-fabric.description = Невагоме речовина, що використовується в сучасній електроніці і технології самовідновлення. +item.surge-alloy.name = Високоміцний сплав +item.surge-alloy.description = Передовий сплав з унікальними електричними властивостями. item.biomatter.name = Біоматерія -item.biomatter.description = Скупчення органічної муси; використовується для перетворення в нафту або як основне паливо. +item.biomatter.description = Скупчення органічної муси; використовується для перетворення в нафту або як паливо. item.sand.name = Пісок -item.sand.description = Загальний матеріал, який широко використовується при плавленні, як у процесі плавки, так і в відходах. +item.sand.description = Загальний матеріал, який широко використовується при плавленні, як у процесі плавки, так і у вигляді шлака. item.blast-compound.name = Вибухонебезпечне з'єднання -item.blast-compound.description = Нестійкий склад, що використовується в бомбах та вибухових речовинах. Хоча воно може спалюватися як паливо, та це не рекомендується. +item.blast-compound.description = Нестійке з'єднання, що використовується в бомбах та вибухових речовинах. Хоча воно може спалюватися як паливо, та це не рекомендується. item.pyratite.name = Піротит item.pyratite.description = Вкрай легкозаймиста речовина, що використовується у запальній зброї. liquid.water.name = Вода @@ -450,9 +450,9 @@ liquid.lava.name = Лава liquid.oil.name = Нафта liquid.cryofluid.name = Кріогенна рідина mech.alpha-mech.name = Альфа -mech.alpha-mech.weapon = Кулемет +mech.alpha-mech.weapon = Звичайний кулемет mech.alpha-mech.ability = Виклик дронів -mech.alpha-mech.description = Стандартний мех. Має пристойну швидкість і урон; може створити до 3-х дронів для збільшення можливості перемоги. +mech.alpha-mech.description = Стандартний мех для настільних пристроїв. Має пристойну швидкість і урон; може створити до 3-х дронів для збільшення можливості перемоги. mech.delta-mech.name = Дельта mech.delta-mech.weapon = Генератор дуг mech.delta-mech.ability = Розряд @@ -460,18 +460,18 @@ mech.delta-mech.description = Швидкий, легкоброньований mech.tau-mech.name = Тау mech.tau-mech.weapon = Відновлювальний лазер mech.tau-mech.ability = Відновлювальний спалах -mech.tau-mech.description = Мех підтримки. Зцілює союзницькі блоки, стріляючи в них. Можна гасити пожежі і зцілити союзників у радіусі зі своєю можливостю для ремонту. +mech.tau-mech.description = Мех підтримки. Зцілює союзницькі блоки, стріляючи в них. Може зцілити союзників у радіусі зі своєю здатністю для ремонту. mech.omega-mech.name = Омега mech.omega-mech.weapon = Купа ракет mech.omega-mech.ability = Захисна конфігурація -mech.omega-mech.description = Громіздкий і добре броньований хутро, зроблений для фронтових нападів. Його здатність може блокувати до 90% вхідного шкоди. +mech.omega-mech.description = Громіздкий і добре броньований мех, зроблений для фронтових нападів. Його здатність може блокувати до 90% вхідного урона. mech.dart-ship.name = Дротик mech.dart-ship.weapon = Ретранслятор -mech.dart-ship.description = Стандартний корабель для мобільних пристріях. Досить швидкий і легкий, але має невеликі наступальні можливості і низьку швидкість видобутку. +mech.dart-ship.description = Стандартний корабель на мобільних пристріях. Досить швидкий і легкий, але має невеликі наступальні можливості і низьку швидкість видобутку. mech.javelin-ship.name = Джавелін mech.javelin-ship.description = Ударний корабель, який використовує набіг з відскоком. Спочатку повільний, але пізніше він може прискоритися до великих швидкостей і літати над ворожими заставами, завдаючи великої шкоди своєю. блискавичною здатністю і ракетами. mech.javelin-ship.weapon = Вибухові ракети -mech.javelin-ship.ability = Дуговий генератор +mech.javelin-ship.ability = Генератор дуг mech.trident-ship.name = Тризубець mech.trident-ship.description = Важкий бомбардувальник. Досить добре броньований. mech.trident-ship.weapon = Вантажний відсік з бомбами @@ -493,9 +493,10 @@ text.mech.ability = [LIGHT_GRAY]Здібність: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Теплоємність: {0} text.liquid.viscosity = [LIGHT_GRAY]В'язкість: {0} text.liquid.temperature = [LIGHT_GRAY]Температура: {0} -block.constructing = {0}\n[LIGHT_GRAY](Constructing) -block.spawn.name = Спавн ворога +block.constructing = {0}[LIGHT_GRAY](В процесі) +block.spawn.name = Місце появи ворога block.core.name = Ядро +block.space.name = Пустота block.metalfloor.name = Металічна підлога block.deepwater.name = Глибоководдя block.water.name = Вода @@ -510,7 +511,7 @@ block.snow.name = Сніг block.grass.name = Трава block.shrub.name = Кущ block.rock.name = Кругляк -block.blackrock.name = Чорнийкругляк +block.blackrock.name = Чорний кругляк block.icerock.name = Льодяний кругляк block.copper-wall.name = Мідна стіна block.copper-wall-large.name = Велика мідна стіна @@ -557,9 +558,9 @@ block.pneumatic-drill.name = Пневматичний дриль block.laser-drill.name = Лазерний дриль block.water-extractor.name = Екстрактор води block.cultivator.name = Культиватор -block.alpha-mech-pad.name = Завод мехів "Альфа" +block.alpha-mech-pad.name = Реконстуктор "Альфа" block.dart-ship-pad.name = Завод дротікових літаків -block.delta-mech-pad.name = Завод мехів "Дельта" +block.delta-mech-pad.name = Реконструктор "Дельта" block.javelin-ship-pad.name = Реконструктор "Джавелін" block.trident-ship-pad.name = Реконструктор "Тризуб" block.glaive-ship-pad.name = Реконструктор "Спис" @@ -577,7 +578,7 @@ block.vault.name = Сховище block.wave.name = Хвиля block.swarmer.name = Ройевик block.salvo.name = Залп -block.ripple.name = Хвилястість +block.ripple.name = Рябь block.phase-conveyor.name = Фазовий конвеєр block.bridge-conveyor.name = Мостовий конвеєр block.plastanium-compressor.name = Пластиновий компресор @@ -587,14 +588,14 @@ block.solidifer.name = Затверджувач block.solar-panel.name = Сонячна панель block.solar-panel-large.name = Велика сонячна панель block.oil-extractor.name = Екстрактор нафти -block.spirit-factory.name = Завод дронів "Привид" -block.phantom-factory.name = Завод дронів "Фантом" -block.wraith-factory.name = Завод примарних винищувачів -block.ghoul-factory.name = Завод гулевих бомбардувальників -block.dagger-factory.name = Завод мехів "Розвідник" -block.titan-factory.name = Завод мехів "Титан" -block.fortress-factory.name = Завод мехів "Фортеця" -block.revenant-factory.name = Завод бомбардувальників "Потойбічний вбивця" +block.spirit-factory.name = Завод дронов "Призрак" +block.phantom-factory.name = Завод дронов "Фантом" +block.wraith-factory.name = Завод винищувачів "Примара" +block.ghoul-factory.name = Завод бомбардувальників "Ґуль" +block.dagger-factory.name = Завод мехов "Разведчик" +block.titan-factory.name = Завод мехов "Титан" +block.fortress-factory.name = Завод мехов "Крепость" +block.revenant-factory.name = Завод бомбардировщиков "Потусторонний убийца" block.repair-point.name = Ремонтний пункт block.pulse-conduit.name = Імпульсний водовід block.phase-conduit.name = Фазовий водопровід @@ -620,161 +621,161 @@ block.overdrive-projector.name = Сверхприводний проектор block.force-projector.name = Силовий проектор block.arc.name = Дуга block.rtg-generator.name = Радіоізотопний термоелектричний генератор -block.spectre.name = Spectre -block.meltdown.name = Meltdown +block.spectre.name = Мара +block.meltdown.name = Розтоплення block.container.name = Склад -block.core.description = Найголовніша будівля в грі. team.blue.name = Синя team.red.name = Червона team.orange.name = Помаренчева team.none.name = Сіра team.green.name = Зелена team.purple.name = Фіолетова -unit.alpha-drone.name = Альфа дрон +unit.alpha-drone.name = Альфа unit.spirit.name = Дрон-привид unit.spirit.description = Початковий дрон. З'являється в ядрі за замовчуванням. Автоматично добуває руди та ремонтує блоки. unit.phantom.name = Фантом -unit.phantom.description = Покращений дрон. Автоматично добуває руди та ремонтує блоки.\nЗначно краще дрона-привида. -unit.dagger.name = Кинджал +unit.phantom.description = Покращений дрон. Автоматично добуває руди та ремонтує блоки. +unit.dagger.name = Розвідник unit.dagger.description = Базова наземна бойова одиниця. Корисен у купі. unit.titan.name = Титан -unit.titan.description = Просунута броньована наземна одиниця. Атакуе наземні та повітряні цілі. -unit.ghoul.name = Гулевий бомбардувальник -unit.ghoul.description = Тяжкий ковровий бомбардувальник +unit.titan.description = Улучшенная бронированная наземная боевая единица. Атакует наземные и воздушные цели. +unit.ghoul.name = Бомбардувальний "Ґуль" +unit.ghoul.description = Тяжкий ковровий бомбардувальник. unit.wraith.name = Примарний винищувач -unit.wraith.description = Швидка бойова одиниця. +unit.wraith.description = Швидка бойова одиниця, котрий використовує набіг з відскоком. unit.fortress.name = Фортеця unit.fortress.description = Тяжка артилерійна наземна бойова одиниця. unit.revenant.name = Потойбічний вбивця -unit.revenant.description = Важка лазерна платформа. -tutorial.begin = Ваша місія тут полягає в ліквідації[LIGHT_GRAY] противника[].\\n\\nПочнімо з[accent] видобутку міді[]. Щоб зробити це, торкніться мідної рудної жили біля вашого ядра. -tutorial.drill = Ручна робота не ефективна\\n[accent]Бури []можуть копати автоматично.\\nПоставте один на мідній жилі. -tutorial.conveyor = [accent]Конвейери[] використовуються для транспортування предметів в ядра.\\nЗробіть лінію конвейерів від бурів до ядра. -tutorial.morecopper = Треба більше міді\\n\\nДобудьте вручну або поставте більше бурів -tutorial.turret = Захистні споруди повинні бути побудованими для захисту від [LIGHT_GRAY] ворога[].\\nПобудуйте подвійну турель біля бази. -tutorial.drillturret = Подвійні турелі потребують[accent] мідні патрони []для стрільби.\\nПоставте бури поруч з турелею, щоб знаюдити її видобутою міддю. -tutorial.waves = [LIGHT_GRAY] Супротивник[] прижується.\\n\\nЗахистіть своє ядро від двух хвиль противника. Побудуйте більше турелей. -tutorial.lead = Стало доступно більше руд. Знайдіть і добудьте[accent] свинець[].\\n\\nПеретягніть з вашого меху в ядро для передачі ресурсів. -tutorial.smelter = Свинець і мідь тяжкі метали.\\nНайліпший[accent] щільний сплав[] може бути створеним у плавильному заводі.\\n\\nПобудуйте один завод. +unit.revenant.description = Бойова одиниця з важкою лазерною зброєю. +tutorial.begin = Ваша місія тут полягає в ліквідації[LIGHT_GRAY] противника[].\n\nПочнімо з[accent] видобутку міді[]. Щоб зробити це, торкніться мідної рудної жили біля вашого ядра. +tutorial.drill = Ручна робота не ефективна\n[accent]Бури []можуть копати автоматично.\nПоставте один на мідній жилі. +tutorial.conveyor = [accent]Конвейери[] використовуються для транспортування предметів в ядра.\nЗробіть лінію конвейерів від бурів до ядра. +tutorial.morecopper = Треба більше міді\n\nДобудьте вручну або поставте більше бурів +tutorial.turret = Захистні споруди повинні бути побудованими для захисту від [LIGHT_GRAY] ворога[].\nПобудуйте подвійну турель біля бази. +tutorial.drillturret = Подвійні турелі потребують[accent] мідні патрони []для стрільби.\nПоставте бури поруч з турелею, щоб знаюдити її видобутою міддю. +tutorial.waves = [LIGHT_GRAY] Супротивник[] прижується.\n\nЗахистіть своє ядро від двух хвиль противника. Побудуйте більше турелей. +tutorial.lead = Стало доступно більше руд. Знайдіть і добудьте[accent] свинець[].\n\nПеретягніть з вашого меху в ядро для передачі ресурсів. +tutorial.smelter = Свинець і мідь тяжкі метали.\nНайліпший[accent] щільний сплав[] може бути створеним у плавильному заводі.\n\nПобудуйте один завод. tutorial.densealloy = Плавильний завод тепер буде створювати сплав. -tutorial.siliconsmelter = Ядро зараз створить[accent] дрона привида[] для добування і ремонтування блоків.\\n\\nЗаводи для других одиниць(юнітов) може бути створено за допомогою [accent] кремнія.\\nЗробіть кремнієвий завод. -tutorial.silicondrill = Кремній потребує[accent] вугілляl[] та[accent] пісок[].\\nПочніть зі створення бурів. -tutorial.generator = Ця технологія потребує енергії.\\nЗробіть[accent] генератор внутрішнього згорання[] для цього. -tutorial.generatordrill = Генератор потребує вугілля.\\nПобудуйте бур на вугільній жилі. -tutorial.node = Енергії потребує транспортування\\nСоздайте[accent] силовий вузол[] поруч з вашим генератором згорання, щоб передавати його енергію. -tutorial.nodelink = Енергія може бути передана через контактні енергетичні блоки та генератори, або з'єднані силові вузли.\\n\\nЗ'єднайте живлення, торкнувшись вузла та вибравши генератор і кремнієвий завод. -tutorial.silicon = Кремній почався створюватися. Отримайте трохи.\\n\\nРекомендується вдосконалити виробничу систему. -tutorial.daggerfactory = Побудуйте[accent] завод "Розвідник".[]\\n\\nЦе буде використано для створення мехів атаки. -tutorial.router = Фабрики потребують ресурсів для функціонування.\\nСтворіть маршрутизатор для розподілення ресурсів з конвейера. +tutorial.siliconsmelter = Ядро зараз створить[accent] дрона привида[] для добування і ремонтування блоків.\n\nЗаводи для других одиниць(юнітов) може бути створено за допомогою [accent] кремнія.\nЗробіть кремнієвий завод. +tutorial.silicondrill = Кремній потребує[accent] вугілляl[] та[accent] пісок[].\nПочніть зі створення бурів. +tutorial.generator = Ця технологія потребує енергії.\nЗробіть[accent] генератор внутрішнього згорання[] для цього. +tutorial.generatordrill = Генератор потребує вугілля.\nПобудуйте бур на вугільній жилі. +tutorial.node = Енергії потребує транспортування\nСоздайте[accent] силовий вузол[] поруч з вашим генератором згорання, щоб передавати його енергію. +tutorial.nodelink = Енергія може бути передана через контактні енергетичні блоки та генератори, або з'єднані силові вузли.\n\nЗ'єднайте живлення, торкнувшись вузла та вибравши генератор і кремнієвий завод. +tutorial.silicon = Кремній почався створюватися. Отримайте трохи.\n\nРекомендується вдосконалити виробничу систему. +tutorial.daggerfactory = Побудуйте[accent] завод "Розвідник".[]\n\nЦе буде використано для створення мехів атаки. +tutorial.router = Фабрики потребують ресурсів для функціонування.\nСтворіть маршрутизатор для розподілення ресурсів з конвейера. tutorial.dagger = Зв'яжіть силовий вузол з заводом.\nЯк тільки вимоги будуть виконані, буде створено мех.\n\nЯкщо необхідно, то створіть ще бурів, генераторів та конвейерів -tutorial.battle = [LIGHT_GRAY] Супротивник[] показав своє ядро.\\nЗнищьте його з вашим мехом та бойовою одиницею. -block.copper-wall.description = Стіна з найменшим запасом міцності.\nДуж на початку гри для захисту. -block.copper-wall-large.description = Велика стіна найменшим запасом міцності.\nХороша на початку гри. +tutorial.battle = [LIGHT_GRAY] Супротивник[] показав своє ядро.\nЗнищьте його з вашим мехом та бойовою одиницею. +block.core.description = Найголовніше будівля в грі. +block.copper-wall.description = Дешевий оборонний блок.\nКорисен для захисту ядра і турелей під час перших хвиль. +block.copper-wall-large.description = Велика стіна найменшим запасом міцності.\nКорисна на початку гри. block.dense-alloy-wall.description = Стіна з показником міцності "нижче середнього". block.dense-alloy-wall-large.description = Велика стіна з показником міцності "нижче середнього". block.thorium-wall.description = Стіна з показником міцності "вище середнього". block.thorium-wall-large.description = Велика стіна з показником міцності "вище середнього". block.phase-wall.description = Стіна з середнім показником міцності. block.phase-wall-large.description = Велика стіна з середнім показником міцності. -block.surge-wall.description = Стіна з найбільшим запасом міцності. +block.surge-wall.description = Стіна з найбільшим показником міцності. block.surge-wall-large.description = Велика стіна з найбільшим запасом міцності. -block.door.description = Через ці двері не пройдуть вороги, якщо вона закрита. Щоб відкрити / закрити просто натисніть на неї. -block.door-large.description = Для великих стін потрібні великі двері. Щоб відкрити / закрити просто натисніть на неї. +block.door.description = Двері в прямому сенсі цього слова. Просто натисніть на неї. +block.door-large.description = Для великих стін потрібні великі двері.\nДля відкриття або закриття просто натисніть на неї. block.mend-projector.description = Ремонтує будівлі в невеликому радіусі. Споживає енергію. -block.overdrive-projector.description = Прискорює в невеликому радіусі всі ваші дії. -block.force-projector.description = Створює в невеликому радіусі силове поле, яке захищає від противника. -block.shock-mine.description = Поставте її. Вона б'є електрикою О_О -block.duo.description = Хороша турель початкова турель. Використовуйте стіни для її захисту.\n\n Використовує як снаряди мідь, щільний сплав, кремній і піротит.\n\nМожно підвести воду і криогенну рідина для прискорення стрільби. -block.arc.description = Турель з малим радіусом атаки. Для патронів треба воду або кріогенну рідина. Також потрібна енергія. -block.hail.description = Далекобійна початкова турель.\nВикористовує як снаряди щільний сплав, кремній і піротит.\nДля прискорення стрільби можна підвести воду і криогенну рідину. -block.lancer.description = Турель, яка стріляє лазером на середню відстань.\nВикористовує як снаряди енергію.\nДля прискорення стрільби можна підвести воду, нафту і криогенну рідину. -block.wave.description = Турель з середнім радіусом атаки, яка відштовхує супротивників в сторони. Використовує в якості снарядів воду, нафту, лаву або кріогенну рідину. -block.salvo.description = Турель з середнім радіусом атаки. Використовує в якості снарядів мідь, щільний сплав, торій, кремній і піротит.\nТакож потрібна якась рідина: вода, нафта або кріогенна. -block.swarmer.description = Навіть Керріган в захваті від такого.\nВикористовує в якості снарядів високоміцний сплав, піротит і вибухонебезпечне з'єднання.\nТакож потрібна якась рідина: вода, нафта або кріогенна. -block.ripple.description = Перша турель 3х3.\nВикористовує в якості снарядів щільний сплав, кремній, піротит, вибухонебезпечне з'єднання.\nТакож потрібна якась рідина: вода, нафта або кріогенна. -block.cyclone.description = Турель з великою дальністю. Використовує в якості снарядів пластиній, вибухонебезпечне з'єднання і високоміцний сплав.\nТакож потрібна якась рідина: вода, нафта або кріогенна. -block.fuse.description = Турель з малою дальністю атаки. Використовує в якості снарядів щільний сплав.\nТакож потрібна якась рідина: вода, нафта або кріогенна. -block.spectre.description = Перша турель 4х4 з середнім радіусом атаки. Використовує в якості снарядів щільний сплав, торій і піротит. -block.meltdown.description = Турель з середнім радіусом атаки. Для патронів треба воду або кріогенну рідину. Також потрібна енергія. +block.overdrive-projector.description = Прискорює в невеликому радіусі роботу механізмів. +block.force-projector.description = Створює в невеликому радіусі силове поле, яке захищає від атак супротивника. +block.shock-mine.description = Поставте її на землю. Вона б'ється ЕЛЕКТРИКОЮ О_О +block.duo.description = Маленька і дешева турель.\nДля прискорення стрільби можна підвести воду або кріогенну рідина. +block.arc.description = Турель с малым радиусом атаки.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.hail.description = Далекобійна початкова турель.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.lancer.description = Турель, яка стріляє лазером на середню відстань.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.wave.description = Турель з середнім радіусом атаки, яка відштовхує супротивників в сторони. +block.salvo.description = Турель з середнім радіусом атаки.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.swarmer.description = Середній розмір турелі з великим радіусом атаки, яка стріляє ракетами.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.ripple.description = Велика артилерійська турель, яка одночасно стріляє декільками пострілами. +block.cyclone.description = Велика швидка вогняна турель. \nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.fuse.description = Велика турель, яка стріляє потужними ближніми променями.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.spectre.description = Велика вежа, яка стріляє зразу двома потужніми кулями.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. +block.meltdown.description = Велика турель, яка стріляє могутніми далекобійними променями. block.conveyor.description = Переміщує ресурси з малою швидкістю. -block.titanium-conveyor.description = Конвеєр другого покоління. Збільшена швидкість переміщення предметів і міцність. -block.phase-conveyor.description = Поки гра знаходиться в 2D, цей конвеєр вже в чотиривимірному просторі. Вимагає енергії. +block.titanium-conveyor.description = Конвеєр другого покоління. Збільшена швидкість переміщення предметів і міцність конвеєра. +block.phase-conveyor.description = Поки гра знаходиться в 2D, цей конвеєр вже в чотиривимірному просторі (можливо, це брехня).\nПотрібує енергії і підключається як мостовий конвеєр. block.junction.description = Назва говорить сама за себе. За допомогою нього можна зробити дві конвеєрні стрічки, які проходять через один одного і не змішуються. block.mass-driver.description = При наявності енергії передають ресурси на відстань 100 блоків, стріляючи в один-одного. block.smelter.description = Виробляє щільний сплав з міді і свинцю. Можна підвести пісок для прискорення виробництва. -block.arc-smelter.description = Покращена версія плавильного заводу. Вимагає енергію. Виробляє щільний сплав з вугілля, міді і свинцю.\nМожно підвести пісок для прискорення виробництва. -block.silicon-smelter.description = За допомогою піску, вугілля і енергії виробляє кремній.\n[RED]НЕ СИЛІКОН[] -block.plastanium-compressor.description = Створює пластини з титану і нафти. Вимагає енергії. Для прискорення виробництва можна додати в компресор пісок. -block.phase-weaver.description = Виробляє фазову матерію з торію і піску. Вимагає багато енергії. -block.alloy-smelter.description = Створює високоміцний сплав з титану, кремнію, міді і свинцю. Вимагає енергію. +block.arc-smelter.description = Покращена версія плавильного заводу. Вимагає енергію. Виробляє щільний сплав зміді і свинця.\nМожно підвести пісок для прискорення виробництва. +block.silicon-smelter.description = За допомогою піску, вугілля і енергії виробляє кремній. +block.plastanium-compressor.description = Створює пластинійи з титану і нафти. Вимагає енергії. Для прискорення виробництва можна додати в компресор пісок. +block.phase-weaver.description = Виробляє фазову тканину торію і піску. Вимагає багато енергії. +block.alloy-smelter.description = Створює високоміцний сплав з титану, кременя, міді і свинця. Вимагає енергію. block.pulverizer.description = Подрібнює камінь в пісок. Вимагає енергії. block.pyratite-mixer.description = Створює піротит з вугілля, свинцю і піску. Вимагає енергії. block.blast-mixer.description = Створює вибухонебезпечне з'єднання з нафти і піротіта. Для прискорення виробництва можна додати в мішалку пісок. -block.cryofluidmixer.description = Виробляє криогенну рідина з води і титану. Вимагає енергії. +block.cryofluidmixer.description = Виробляє криогенну рідину з води і титану. Вимагає енергії. block.solidifer.description = Остуджує лаву до каменя. Вимагає енергію. block.melter.description = Переплавляє камінь в лаву. Вимагає енергію. -block.incinerator.description = Спалює сміття за допомогою енергії. -block.biomattercompressor.description = Робить біоматерію з біосміття і енергії. +block.incinerator.description = Якщо є непотрібні ресурси, можна просто їх спалити.\nВимагає енергії. +block.biomattercompressor.description = Виробляє нафту з біоматеріі, біосміття і енергії. block.separator.description = Шукає в камені різні ресурси. Чим цінніше ресурс, тим з меншою ймовірністю він "знайдеться". -block.centrifuge.description = Покращена версія отделителя.\nШукає в камені різні ресурси. Чим цінніше ресурс, тим з меншою ймовірністю він "знайдеться".\nВимагає енергію. -block.power-node.description = Максимум допустимо 4 підключення. Щоб з'єднати з якимось блоком потрібно наступне:\n1. Щоб він знаходився в радіусі дії\n2.Нажать на потрібний блок. -block.power-node-large.description = Силовий вузол другого покоління. Збільшено розмір вузла, кількість максимально допустимих підключень і інше. -block.battery.description = Зберігає енергію, але батарейки DURACELL зберігають в 10 разів більше.(прихована реклама) -block.battery-large.description = Зберігає енергію, але батарейки DURACELL все одно зберігають більше!(прихована реклама) -block.combustion-generator.description = Початкове і дешевийе джерело енергії. Для виробництва енергії використовує нафту, вугілля, піротит, біоматерію і вибухонебезпечне з'єднання. -block.turbine-generator.description = Для виробництва енергії використовує нафту, вугілля, Піроте, біоматерію і вибухонебезпечне з'єднання.\nТакже обов'язково потрібна вода. -block.thermal-generator.description = Гаряче сприймає на ура. -block.solar-panel.description = Зелена енергія -block.solar-panel-large.description = Зелена енергія. Велике і нескінченне джерело енергії. -block.thorium-reactor.description = Найбільше виробляє енергію. Може вибухнути. Потрібно рідина (вода, нафта або кріогенна) і торій. -block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor. -block.unloader.description = Вивантажує з ядра або сховища верхній лівий предмет. -block.container.description = Зберігає ресурси. Спробуй звідти їх дістати :) -block.vault.description = Зберігає предмети як ядро до 2 000. -block.mechanical-drill.description = Найперший доступний бур. Видобуває мідь, свинець, вугілля, пісок.Можна підвести до нього воду для збільшення швидкості свердління. -block.pneumatic-drill.description = Покращена версія механічного бура.\n\nВидобуває теж саме, що і механічний бур. Також може добувати титан і камінь.\n\nМожно підвести до нього[BLUE] воду [] для збільшення швидкості свердління. -block.laser-drill.description = Покращена версія пневматичного бура.\n\nВидобуває теж саме, що і пневматичний бур. Також може добувати торій.\n\nМожно підвести до нього[BLUE] воду[] для збільшення швидкості свердління. -block.blast-drill.description = Найкрутіший бур.\n\nШукає вона теж саме, що і лазерний бур. Свердлить швидше всіх бурів, але вимагає ще більше енергії. N n Можна підвести до нього [BLUE] воду [] для збільшення швидкості свердління. -block.water-extractor.description = Видобуває воду з землі. Вимагає енергію. -block.cultivator.description = Виробляє біоматерію з трави і води. Вимагає енергії. -block.oil-extractor.description = Виробляє нафту з динозаврів (закреслено), грунту (закреслено), води і піску. Вимагає енергії. -block.dart-ship-pad.description = Перетворює вас в дротіковий літак. Реконструктор вимагає енергію.\nПодробиці про дротікових літаків в "розблоковане". -block.trident-ship-pad.description = Перетворює вас в Тризуб. Вимагає енергію. Подробиці про Тризуб в "розблоковане" -block.javelin-ship-pad.description = Перетворює вас в Джавелін. Вимагає енергію. Подробиці про Джавелін в "розблоковане" -block.glaive-ship-pad.description = Перетворює вас в Спис. Вимагає енергію. Подробиці про Спис в "розблоковане" -block.tau-mech-pad.description = Перетворює вас в Тау. Вимагає енергію. N Подробиці про Тау в "розблоковане" -block.delta-mech-pad.description = Перетворює вас в "Дельта". Реконструктор вимагає енергію.\nПодробиці про "Дельта" в "розблоковане". -block.omega-mech-pad.description = Перетворює вас в Омега. Вимагає енергію.Подробиці про Омега в "розблоковане" -block.spirit-factory.description = Виробляє дронів типу "привид" -block.phantom-factory.description = Виробляє дронів типу "фантом" \nПодробиці в "розблоковане" -block.wraith-factory.description = Виробляє примарних винищувачів\nПодробиці в "розблоковане" -block.ghoul-factory.description = Виробляє Гулев бомбардувальників\nПодробиці в "розблоковане" -block.dagger-factory.description = Виробляє "Розвідник\nПодробиці в "розблоковане" -block.titan-factory.description = Виробляє меха типу "Титан".\nПодробиці в "розблоковане". -block.fortress-factory.description = Величезний повільний мех володіє такою-ж величезною гарматою. -block.revenant-factory.description = Виробляє бомбардувальників типу "Потойбічний вбивця"\nПодробиці в "розблоковане" -block.repair-point.description = За допомогою енергії лікує тебе. -block.command-center.description = Дозволяє управляти бойовими одиницями. Або атакувати, або стояти на місці, або застрявати в блоках ... -block.conduit.description = Конвеєр для рідин першого покоління. -block.pulse-conduit.description = "Конвеєр" для рідин другого покоління. -block.phase-conduit.description = Кращий трубопровід, вимагає енергію. Схоже, він з майбутнього. -block.liquid-router.description = Розподіляє рідину на 4 сторони. -block.liquid-tank.description = Зберігає рідину. -block.liquid-junction.description = Назва говорить сама за себе. За допомогою нього можна зробити дві труби, які проходять через один-одного і не змішуються. -block.bridge-conduit.description = Дозволяє проходити над височинами (блоками). Найкраще підключати послідовно і в лінію. -block.mechanical-pump.description = Качає тільки воду. -block.rotary-pump.description = Качає воду і нафту. Вимагає енергії. -block.thermal-pump.description = Дозволяє качати лаву, воду і нафту. -block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets. -block.distributor.description = An advanced router which splits items to up to 7 other directions equally. -block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. -block.alpha-mech-pad.description = Перетворює вас в Альфа. Вимагає енергію.Подробиці про Джавелін в "розблоковане" -block.itemsource.description = З цього блоку можна отримати будь-який предмет. -block.liquidsource.description = З цього блоку можна отримати будь-яку рідину. -block.itemvoid.description = Предмети просто йдуть в порожнечу -block.powerinfinite.description = Ти не повинен це бачити!\n[RED]WARNING[] -block.powervoid.description = Рідини просто йдуть в порожнечу -liquid.water.description = Набагато краще ніж[BLUE] монооксид дігідрогена[].\n\nДля отримання води використовуйте помпу(насос) на джерел(блоці) або екстрактор води.\n\nЦю рідину можна підвести до бурів для прискорення швидкості видобутку або до турелям для прискорення стрільби. -liquid.lava.description = [accent]Гаряче...\nРечовина розплавлене з гірничо-кам'яних пород.\nСлужить як паливо для термального генератора. -liquid.oil.description = Хтось писав про додавання золота в гру. Його додали, правда воно якесь чорне ...\nСуміш рідких вуглеводнів, що виділяється з природного газу в результаті зниження температури і пластового тиску.\nСлугує для пластіенівого компресора і т.д .. -liquid.cryofluid.description = Рідина з температурою нижче ніж -273 градусів за Цельсієм. Може бути використана для прискорення стрільби турелей або для охолодження чогось. +block.centrifuge.description = Шукає в камені різні ресурси. Чим цінніше ресурс, тим з меншою ймовірністю він "знайдеться".\nТребует енергію. +block.power-node.description = Максимум допустимо 4 підключення.\nЩоб з'єднати з якимось блоком потрібно наступне\:\n1. Щоб він знаходився в радіусі дії \n2. Натиснити на потрібний силовий вузол, а потім на інший силовий вузол або блок. +block.power-node-large.description = Силовий вузол другого покоління. Збільшено радіус дії і кількість максимально допустимих підключень. +block.battery.description = Хранит энергию всякий раз, когда есть изобилие, и обеспечивает мощность всякий раз, когда есть недостаток, если есть мощность, але БАТАРЕЙКИ DURACELL ЗБЕРІГАЮТЬ БІЛЬШЕ! (прихована реклама) +block.battery-large.description = Зберігає значно більше енергії, ніж звичайна батарейка... +block.combustion-generator.description = Генерує енергію, спалюючи нафту або легкозаймисті матеріали. +block.turbine-generator.description = Більш ефективний, ніж генератор горіння, але вимагає додаткової води. +block.thermal-generator.description = Генерує велику кількість енергії з лави. +block.solar-panel.description = Забезпечує невелику кількість енергії від сонця. +block.solar-panel-large.description = Забезпечує набагато краще джерело живлення, ніж стандартна панель, але в той же час набагато дорожче її побудувати. +block.thorium-reactor.description = Генерує величезну кількість енергії з високоактивного торію. Потребує постійного охолодження. Вибухне сильно, якщо постачається недостатня кількість рідини. +block.rtg-generator.description = Радіоізотопний термоелектричний генератор, який не потребує охолодження, але забезпечує меншу потужність, ніж торієвий реактор. +block.unloader.description = Вивантажує предмети з контейнера, сховища або ядра на конвеєр або безпосередньо в сусідній блок. Тип вивантажуваного елемента можна змінити, торкнувшись розвантажувача. +block.container.description = Зберігає невелику кількість предметів кожного типу. Сусідні контейнери, склепіння та ядра будуть розглядатися як одиничне сховище. [LIGHT_GRAY]Розвантажувач [] можна використовувати для вилучення елементів з контейнера. +block.vault.description = Зберігає велику кількість предметів кожного типу. Сусідні контейнери, сховища та ядра будуть розглядатися як одиничне сховище. [LIGHT_GRAY]Розвантажувач[] можна використовуватися для отримання елементів із сховища. +block.mechanical-drill.description = Найперший доступний бур.\nВидобуває мідь, свинець, вугілля, пісок. \nМожно підвести до нього[BLUE] воду []для збільшення швидкості свердління. +block.pneumatic-drill.description = Покращена версія механічного бура.\nВидобуває теж саме, що і механічний бур. Також може добувати титан і камінь.\nМожно підвести до нього[BLUE] воду []для збільшення швидкості свердління. +block.laser-drill.description = Покращена версія пневматичного бура.\nДобивает теж саме, що і пневматичний бур. Також може добувати торій.\nМожно підвести до нього[BLUE] воду []для збільшення швидкості свердління. +block.blast-drill.description = Найпотужніший бур.\n\nВидобуває теж саме, що і лазерний бур. Свердлить швидше всіх бурів, але вимагає ще більше енергії.\nМожно підвести до нього[BLUE] воду [] для збільшення швидкості свердління. +block.water-extractor.description = Витягує воду з землі. Використовуйте його, коли поблизу немає озера. +block.cultivator.description = Культивує грунт водою для отримання біоматеріі. +block.oil-extractor.description = Використовує велику кількість енергії для видобутку нафти з піску, динозаврів (закреслено). Використовуйте його, коли поблизу немає прямого джерела нафти. +block.dart-ship-pad.description = Залиште свій поточний судно і перейдіть на основний винищувач.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех. +block.trident-ship-pad.description = Залиште свій поточний корабель і перейдіть в досить добре броньований важкий бомбардувальник.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех. +block.javelin-ship-pad.description = Залиште свій поточний корабель і перейдіть в сильний і швидкий перехоплювач з блискавичним зброєю.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех. +block.glaive-ship-pad.description = Залиште своє існуюче судно і перетворитесь на великий, добре броньований мех.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех. +block.tau-mech-pad.description = Покиньте свій поточний корабель і перетворитеся на мех підтримки, який може зцілювати дружні будівлі і юніти.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех. +block.delta-mech-pad.description = Залиште свій поточний корабель і перейдіть в великий, добре броньований бойовий корабель.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех. +block.omega-mech-pad.description = Залиште свій поточний корабель і перетворіть його в громіздкий і добре броньований мех, зроблений для фронтових нападів.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех. +block.spirit-factory.description = Виробляє легкі дрони, які видобувають руду (мідну і свинцеву) і ремонтує блоки. Один за замовчуванням з'являється з ядра. +block.phantom-factory.description = Виробляє вдосконалені одиниці, які значно ефективніше, ніж дрон-привид. +block.wraith-factory.description = Виробляє швидких і літаючих бойових одиниць. +block.ghoul-factory.description = Виробляє важких килимових бомбардувальників. +block.dagger-factory.description = Виробляє основні наземні бойові одиниці. +block.titan-factory.description = Виробляє просунуті захищені бойові одиниці. +block.fortress-factory.description = Виробляє важкі артилерійські бойові одиниці. +block.revenant-factory.description = Виробляє важкі наземні бойові одиниці. +block.repair-point.description = Постійно лікує найближчий пошкоджений апарат в його зоні дії. +block.command-center.description = Дозволяє змінювати дружню поведінку AI. В даний час, атаки, відступ і патрулювання команди підтримуються. +block.conduit.description = Основний транспортний блок. Працює як конвеєр, але з рідинами. Найкраще використовується з екстракторами, насосами або іншими трубопроводами. +block.pulse-conduit.description = Розширений блок перевезення рідин. Транспортує рідини швидше і зберігає більше, аніж стандартні. +block.phase-conduit.description = Покращений блок перевезення рідин. Використовує енергію для телепорту рідин до підключеного фазового каналу по декілька блоків. +block.liquid-router.description = Приймає рідини з одного напрямку і виведить їх до 3 інших напрямків однаково. Можна також зберігати певну кількість рідини. Корисно для розщеплення рідин від одного джерела на кілька. +block.liquid-tank.description = Зберігає велику кількість рідини. Використовуйте його для створення буферів, коли існує нестійкий попит на матеріали або як захист для охолодження життєво важливих блоків. +block.liquid-junction.description = Діє як міст для двох перехресних трубопроводів. Корисно в ситуаціях з двома різними трубами, що несуть різні рідини в різні місця. +block.bridge-conduit.description = Покращений блок перевезення рідин. Дозволяє транспортувати рідини понад 3 блоки будь-якої місцевості або будівлі. +block.mechanical-pump.description = Дешевий насос з повільною швидкістю, але без споживання енергії. +block.rotary-pump.description = Розширений насос, який подвоює швидкість, використовуючи енергію. +block.thermal-pump.description = Остаточний насос. Тричі швидше, ніж механічний насос і єдиний насос, який здатний отримати лаву. +block.router.description = Приймає елементи з одного напрямку і рівномірно виводить їх до 3 інших напрямків. Корисно для розділення матеріалів від одного джерела на кілька. +block.distributor.description = Розширений маршрутизатор, який рівномірно розбиває елементи на 7 різних напрямків. +block.bridge-conveyor.description = Покращений блок транспортування предметів. Дозволяє транспортувати предмети понад 3 блоки над будь-якої місцевостю або будівлеє. +block.alpha-mech-pad.description = Коли ви отримаєте достатньо енергії, перебудовує ваш корабель у [accent] Альфа[] мех. +block.itemsource.description = Безліченно виводить предмети. Лише пісочниця. +block.liquidsource.description = Безліченно виводить рідини. Лише пісочниця. +block.itemvoid.description = Знищує будь-які предмети, які входять, без використання енергії. Працює тільки в пісочниці. +block.powerinfinite.description = Нескінченність не межа. Безмежно виводить енергію. Лише пісочниця. +block.powervoid.description = Енергія просто йде в порожнечу. Лише пісочниця. +liquid.water.description = Зазвичай використовується для охолодження машин та переробки відходів. +liquid.lava.description = Можна перетворити в[LIGHT_GRAY] камінь[], який використовується для генерації енергії або використовуати як боєприпаси для певних турелей. +liquid.oil.description = Можна спалити, взірвати або використовувати як теплоносій. +liquid.cryofluid.description = Найефективніша рідина для охолодження. Рідина з температурою нижче ніж -273 градусів за Цельсієм. Може бути використана для прискорення стрільби турелей або для охолодження чогось. diff --git a/core/assets/shaders/menu.fragment b/core/assets/shaders/menu.fragment index 77acd0e031..397cf6dbc9 100644 --- a/core/assets/shaders/menu.fragment +++ b/core/assets/shaders/menu.fragment @@ -38,7 +38,7 @@ void main() { else if(m > 0.35) gl_FragColor.rgb = p4; else gl_FragColor.rgb = vec3(0.0); - gl_FragColor.rgb *= 0.75; + gl_FragColor.rgb *= 0.5; gl_FragColor.a = mod(abs(float(coords.x)) + abs(float(coords.y)), 110.0) < 35.0 ? 1.0 : 0.0; } \ No newline at end of file diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index e144699c38..9a52df3e11 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -6,1239 +6,1239 @@ filter: Nearest,Nearest repeat: none force-projector-top rotate: false - xy: 724, 453 + xy: 392, 312 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 261, 166 + xy: 530, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 243, 152 + xy: 512, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 473, 389 + xy: 84, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 483, 399 + xy: 124, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 603, 399 + xy: 124, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 603, 389 + xy: 174, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 613, 399 + xy: 164, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 613, 389 + xy: 154, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 623, 399 + xy: 144, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 623, 389 + xy: 134, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 633, 389 + xy: 184, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 643, 389 + xy: 174, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 653, 389 + xy: 164, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 663, 389 + xy: 154, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 673, 389 + xy: 144, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 683, 389 + xy: 184, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 693, 389 + xy: 174, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 703, 389 + xy: 164, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 713, 389 + xy: 154, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 723, 389 + xy: 184, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 733, 389 + xy: 174, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 743, 389 + xy: 164, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 753, 389 + xy: 184, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 681, 359 + xy: 93, 39 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 691, 369 + xy: 103, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 691, 359 + xy: 113, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 701, 369 + xy: 123, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 701, 359 + xy: 133, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 711, 369 + xy: 143, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 711, 359 + xy: 153, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 721, 369 + xy: 163, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 721, 359 + xy: 173, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 731, 369 + xy: 183, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 731, 359 + xy: 91, 29 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 741, 369 + xy: 91, 19 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 741, 359 + xy: 91, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 751, 369 + xy: 101, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 751, 359 + xy: 101, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 761, 369 + xy: 111, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 761, 359 + xy: 111, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 771, 369 + xy: 121, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 771, 359 + xy: 121, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mass-driver-turret rotate: false - xy: 958, 453 + xy: 778, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 953, 383 + xy: 457, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 963, 383 + xy: 467, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 973, 383 + xy: 467, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 warp-gate rotate: false - xy: 584, 427 + xy: 934, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 warp-gate-top rotate: false - xy: 610, 427 + xy: 960, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill rotate: false - xy: 204, 283 + xy: 39, 17 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-rim rotate: false - xy: 233, 346 + xy: 622, 458 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-rotator rotate: false - xy: 30, 80 + xy: 648, 461 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-top rotate: false - xy: 285, 402 + xy: 288, 372 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 laser-drill rotate: false - xy: 205, 159 + xy: 531, 252 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laser-drill-rotator rotate: false - xy: 205, 141 + xy: 512, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laser-drill-top rotate: false - xy: 261, 184 + xy: 512, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill rotate: false - xy: 243, 170 + xy: 530, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 225, 165 + xy: 512, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 223, 147 + xy: 548, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 oil-extractor rotate: false - xy: 984, 453 + xy: 804, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-liquid rotate: false - xy: 350, 425 + xy: 804, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-rotator rotate: false - xy: 376, 425 + xy: 830, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-top rotate: false - xy: 402, 425 + xy: 830, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 plasma-drill rotate: false - xy: 25, 46 + xy: 269, 398 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plasma-drill-rim rotate: false - xy: 59, 46 + xy: 303, 435 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plasma-drill-rotator rotate: false - xy: 27, 12 + xy: 303, 401 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plasma-drill-top rotate: false - xy: 61, 12 + xy: 254, 364 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill rotate: false - xy: 225, 77 + xy: 566, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 259, 112 + xy: 548, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 243, 82 + xy: 602, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor rotate: false - xy: 315, 206 + xy: 554, 270 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 297, 170 + xy: 549, 252 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 315, 188 + xy: 584, 324 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 297, 152 + xy: 582, 306 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blackrock1 rotate: false - xy: 214, 55 + xy: 672, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-blackrock rotate: false - xy: 214, 55 + xy: 672, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackrockshadow1 rotate: false - xy: 219, 21 + xy: 684, 365 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone1 rotate: false - xy: 219, 11 + xy: 708, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-blackstone rotate: false - xy: 219, 11 + xy: 708, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone2 rotate: false - xy: 219, 1 + xy: 672, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone3 rotate: false - xy: 229, 49 + xy: 1012, 437 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstoneedge rotate: false - xy: 283, 98 + xy: 288, 332 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 coal1 rotate: false - xy: 483, 389 + xy: 114, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal2 rotate: false - xy: 493, 399 + xy: 104, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal3 rotate: false - xy: 493, 389 + xy: 94, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper1 rotate: false - xy: 763, 389 + xy: 174, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper2 rotate: false - xy: 773, 389 + xy: 184, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper3 rotate: false - xy: 783, 389 + xy: 84, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt2 rotate: false - xy: 853, 393 + xy: 154, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt3 rotate: false - xy: 863, 393 + xy: 164, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirtedge rotate: false - xy: 966, 403 + xy: 634, 278 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 generic-cliff-edge rotate: false - xy: 933, 393 + xy: 103, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge rotate: false - xy: 933, 393 + xy: 103, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-1 rotate: false - xy: 943, 393 + xy: 83, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-1 rotate: false - xy: 943, 393 + xy: 83, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-2 rotate: false - xy: 953, 393 + xy: 93, 59 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-2 rotate: false - xy: 953, 393 + xy: 93, 59 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-side rotate: false - xy: 963, 393 + xy: 103, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-side rotate: false - xy: 963, 393 + xy: 103, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge rotate: false - xy: 993, 393 + xy: 103, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-1 rotate: false - xy: 1003, 393 + xy: 113, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-2 rotate: false - xy: 1013, 393 + xy: 123, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-side rotate: false - xy: 357, 38 + xy: 113, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass2 rotate: false - xy: 973, 393 + xy: 113, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass3 rotate: false - xy: 983, 393 + xy: 93, 49 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassedge rotate: false - xy: 95, 2 + xy: 585, 256 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 ice2 rotate: false - xy: 351, 376 + xy: 133, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice3 rotate: false - xy: 351, 366 + xy: 123, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iceedge rotate: false - xy: 345, 118 + xy: 620, 264 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 icerock2 rotate: false - xy: 351, 356 + xy: 133, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow1 rotate: false - xy: 361, 377 + xy: 143, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow1 rotate: false - xy: 361, 377 + xy: 143, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow2 rotate: false - xy: 371, 377 + xy: 133, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow2 rotate: false - xy: 371, 377 + xy: 133, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lavaedge rotate: false - xy: 345, 76 + xy: 585, 242 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 lead1 rotate: false - xy: 352, 346 + xy: 183, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead2 rotate: false - xy: 352, 336 + xy: 1004, 395 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead3 rotate: false - xy: 352, 326 + xy: 1004, 385 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor2 rotate: false - xy: 372, 337 + xy: 694, 365 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor3 rotate: false - xy: 362, 327 + xy: 708, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor4 rotate: false - xy: 392, 347 + xy: 740, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor5 rotate: false - xy: 382, 337 + xy: 682, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor6 rotate: false - xy: 372, 327 + xy: 682, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalflooredge rotate: false - xy: 109, 2 + xy: 641, 250 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 rock2 rotate: false - xy: 471, 359 + xy: 497, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand2 rotate: false - xy: 481, 359 + xy: 517, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand3 rotate: false - xy: 491, 369 + xy: 507, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandedge rotate: false - xy: 117, 49 + xy: 599, 236 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shrubshadow rotate: false - xy: 541, 359 + xy: 557, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow2 rotate: false - xy: 551, 369 + xy: 547, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow3 rotate: false - xy: 551, 359 + xy: 567, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowedge rotate: false - xy: 145, 49 + xy: 627, 236 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 spaceedge rotate: false - xy: 159, 49 + xy: 641, 236 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 stone-cliff-edge rotate: false - xy: 611, 359 + xy: 204, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-1 rotate: false - xy: 621, 369 + xy: 204, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-2 rotate: false - xy: 621, 359 + xy: 204, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-side rotate: false - xy: 631, 369 + xy: 204, 92 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone2 rotate: false - xy: 601, 359 + xy: 205, 142 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone3 rotate: false - xy: 611, 369 + xy: 204, 132 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneedge rotate: false - xy: 113, 35 + xy: 655, 236 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 taredge rotate: false - xy: 127, 35 + xy: 998, 433 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 thorium1 rotate: false - xy: 651, 359 + xy: 203, 72 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 661, 369 + xy: 193, 52 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 661, 359 + xy: 203, 62 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 671, 369 + xy: 203, 52 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 671, 359 + xy: 193, 42 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 681, 369 + xy: 203, 42 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge rotate: false - xy: 781, 359 + xy: 131, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-1 rotate: false - xy: 791, 369 + xy: 141, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-2 rotate: false - xy: 791, 359 + xy: 141, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-side rotate: false - xy: 801, 369 + xy: 151, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 wateredge rotate: false - xy: 155, 21 + xy: 1000, 349 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 block-border rotate: false - xy: 239, 26 + xy: 672, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-elevation rotate: false - xy: 259, 36 + xy: 662, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 259, 36 + xy: 662, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-middle rotate: false - xy: 443, 389 + xy: 104, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 443, 389 + xy: 104, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-slope rotate: false - xy: 453, 399 + xy: 94, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 border rotate: false - xy: 453, 389 + xy: 84, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 563, 399 + xy: 144, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-1 rotate: false - xy: 793, 389 + xy: 94, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-2 rotate: false - xy: 924, 417 + xy: 950, 361 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cross-3 rotate: false - xy: 672, 453 + xy: 340, 312 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cross-4 rotate: false - xy: 644, 479 + xy: 949, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 nuclearreactor-shadow rotate: false - xy: 66, 199 + xy: 499, 416 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 place-arrow rotate: false - xy: 983, 383 + xy: 467, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ripples rotate: false - xy: 207, 17 + xy: 684, 387 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 rubble-1-0 rotate: false - xy: 243, 64 + xy: 528, 306 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 261, 82 + xy: 584, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 261, 64 + xy: 548, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 243, 46 + xy: 566, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-3-0 rotate: false - xy: 480, 427 + xy: 882, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rubble-3-1 rotate: false - xy: 480, 427 + xy: 882, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shadow-1 rotate: false - xy: 207, 5 + xy: 684, 375 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-2 rotate: false - xy: 716, 433 + xy: 418, 316 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 shadow-3 rotate: false - xy: 112, 135 + xy: 39, 71 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 shadow-4 rotate: false - xy: 334, 477 + xy: 53, 204 size: 34, 34 orig: 34, 34 offset: 0, 0 @@ -1252,4011 +1252,4011 @@ shadow-5 index: -1 shadow-6 rotate: false - xy: 204, 414 + xy: 1, 188 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 shadow-corner rotate: false - xy: 217, 43 + xy: 672, 363 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-round-1 rotate: false - xy: 217, 31 + xy: 696, 387 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-round-2 rotate: false - xy: 736, 433 + xy: 438, 390 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 shadow-round-3 rotate: false - xy: 141, 165 + xy: 39, 43 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 shadow-round-4 rotate: false - xy: 370, 477 + xy: 675, 477 size: 34, 34 orig: 34, 34 offset: 0, 0 index: -1 shadow-rounded-2 rotate: false - xy: 756, 433 + xy: 438, 370 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 shadow-shock-mine rotate: false - xy: 531, 359 + xy: 537, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 463, 399 + xy: 114, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 463, 399 + xy: 114, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 463, 389 + xy: 104, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 473, 399 + xy: 94, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 523, 399 + xy: 104, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 523, 389 + xy: 94, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 533, 399 + xy: 144, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 533, 389 + xy: 134, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 543, 399 + xy: 124, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 543, 389 + xy: 114, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 553, 399 + xy: 104, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 553, 389 + xy: 154, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 563, 389 + xy: 134, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 573, 399 + xy: 124, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 573, 389 + xy: 114, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 583, 399 + xy: 164, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 583, 389 + xy: 154, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 593, 399 + xy: 144, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 593, 389 + xy: 134, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 372, 347 + xy: 1014, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 362, 337 + xy: 1014, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 382, 347 + xy: 1014, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-tank-bottom rotate: false - xy: 880, 453 + xy: 726, 401 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-liquid rotate: false - xy: 906, 453 + xy: 752, 411 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-top rotate: false - xy: 932, 453 + xy: 778, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 923, 383 + xy: 457, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 933, 383 + xy: 447, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 943, 383 + xy: 457, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 993, 383 + xy: 477, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 1003, 383 + xy: 477, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 1013, 383 + xy: 487, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 441, 369 + xy: 487, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 441, 359 + xy: 477, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 451, 369 + xy: 497, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 451, 359 + xy: 497, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 alpha-mech-pad rotate: false - xy: 814, 435 + xy: 796, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-alpha-mech-pad rotate: false - xy: 814, 435 + xy: 796, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 battery rotate: false - xy: 81, 2 + xy: 302, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-battery rotate: false - xy: 81, 2 + xy: 302, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 battery-large rotate: false - xy: 178, 284 + xy: 43, 162 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-battery-large rotate: false - xy: 178, 284 + xy: 43, 162 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fusion-reactor rotate: false - xy: 712, 479 + xy: 92, 276 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-bottom rotate: false - xy: 746, 479 + xy: 126, 276 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-light rotate: false - xy: 780, 479 + xy: 160, 276 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-0 rotate: false - xy: 814, 479 + xy: 87, 242 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-1 rotate: false - xy: 848, 479 + xy: 121, 242 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-2 rotate: false - xy: 882, 479 + xy: 155, 242 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-3 rotate: false - xy: 916, 479 + xy: 89, 208 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-top rotate: false - xy: 950, 479 + xy: 123, 208 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 481, 369 + xy: 517, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium-reactor-center rotate: false - xy: 506, 427 + xy: 908, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor-lights rotate: false - xy: 532, 427 + xy: 908, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 turbine-generator-top rotate: false - xy: 297, 206 + xy: 554, 288 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 alloy-smelter rotate: false - xy: 332, 433 + xy: 438, 332 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-alloy-smelter rotate: false - xy: 332, 433 + xy: 438, 332 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 alloy-smelter-top rotate: false - xy: 796, 435 + xy: 778, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 arc-smelter rotate: false - xy: 832, 435 + xy: 814, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-arc-smelter rotate: false - xy: 832, 435 + xy: 814, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 arc-smelter-top rotate: false - xy: 850, 435 + xy: 832, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 850, 435 + xy: 832, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor rotate: false - xy: 868, 435 + xy: 850, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame0 rotate: false - xy: 886, 435 + xy: 438, 314 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame1 rotate: false - xy: 904, 435 + xy: 908, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame2 rotate: false - xy: 922, 435 + xy: 926, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-liquid rotate: false - xy: 940, 435 + xy: 944, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-top rotate: false - xy: 958, 435 + xy: 962, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blast-mixer rotate: false - xy: 976, 435 + xy: 1006, 461 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-blast-mixer rotate: false - xy: 976, 435 + xy: 1006, 461 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 centrifuge-liquid rotate: false - xy: 888, 417 + xy: 968, 379 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-bottom rotate: false - xy: 942, 417 + xy: 968, 361 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-liquid rotate: false - xy: 960, 417 + xy: 986, 363 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-top rotate: false - xy: 978, 417 + xy: 189, 258 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator rotate: false - xy: 996, 417 + xy: 207, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 112, 117 + xy: 225, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 117, 99 + xy: 243, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 lavasmelter rotate: false - xy: 431, 357 + xy: 173, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oilrefinery rotate: false - xy: 372, 317 + xy: 682, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-weaver rotate: false - xy: 241, 134 + xy: 530, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 259, 130 + xy: 548, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 241, 116 + xy: 584, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 225, 95 + xy: 530, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 461, 369 + xy: 487, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 461, 359 + xy: 507, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 531, 369 + xy: 547, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 core-open rotate: false - xy: 620, 453 + xy: 392, 338 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-top rotate: false - xy: 646, 453 + xy: 314, 323 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sortedunloader rotate: false - xy: 581, 369 + xy: 194, 132 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1 rotate: false - xy: 239, 36 + xy: 752, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1-top rotate: false - xy: 249, 36 + xy: 662, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-2 rotate: false - xy: 994, 435 + xy: 458, 392 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-2-top rotate: false - xy: 325, 388 + xy: 458, 374 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-3 rotate: false - xy: 311, 406 + xy: 314, 375 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-3-top rotate: false - xy: 289, 356 + xy: 674, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-4 rotate: false - xy: 406, 479 + xy: 711, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-4-top rotate: false - xy: 440, 479 + xy: 745, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc rotate: false - xy: 1010, 454 + xy: 194, 300 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 arc-heat rotate: false - xy: 71, 2 + xy: 256, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cyclone rotate: false - xy: 698, 453 + xy: 366, 312 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 duo rotate: false - xy: 923, 393 + xy: 83, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 fuse rotate: false - xy: 828, 453 + xy: 726, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hail rotate: false - xy: 357, 28 + xy: 123, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 hail-heat rotate: false - xy: 141, 153 + xy: 242, 339 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 lancer rotate: false - xy: 225, 183 + xy: 495, 252 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 207, 177 + xy: 513, 252 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 meltdown rotate: false - xy: 984, 479 + xy: 157, 208 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-heat rotate: false - xy: 56, 80 + xy: 269, 432 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ripple rotate: false - xy: 428, 427 + xy: 856, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ripple-heat rotate: false - xy: 454, 427 + xy: 856, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salvo rotate: false - xy: 261, 46 + xy: 602, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-heat rotate: false - xy: 279, 220 + xy: 548, 324 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 279, 202 + xy: 546, 306 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 279, 184 + xy: 536, 288 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 scatter rotate: false - xy: 511, 359 + xy: 537, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scorch rotate: false - xy: 521, 369 + xy: 527, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scorch-shoot rotate: false - xy: 521, 359 + xy: 547, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 spectre rotate: false - xy: 77, 159 + xy: 405, 416 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer rotate: false - xy: 277, 130 + xy: 584, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave rotate: false - xy: 315, 170 + xy: 572, 288 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 315, 152 + xy: 602, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory-top rotate: false - xy: 130, 117 + xy: 494, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory-top-open rotate: false - xy: 135, 99 + xy: 494, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-factory rotate: false - xy: 750, 453 + xy: 700, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-top rotate: false - xy: 776, 453 + xy: 700, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-top rotate: false - xy: 776, 453 + xy: 700, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-top rotate: false - xy: 776, 453 + xy: 700, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-top-open rotate: false - xy: 802, 453 + xy: 700, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-top-open rotate: false - xy: 802, 453 + xy: 700, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-top-open rotate: false - xy: 802, 453 + xy: 700, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory rotate: false - xy: 854, 453 + xy: 726, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phantom-factory-top rotate: false - xy: 261, 148 + xy: 512, 324 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phantom-factory-top-open rotate: false - xy: 223, 129 + xy: 566, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 reconstructor-open rotate: false - xy: 225, 59 + xy: 530, 324 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 repair-point-turret rotate: false - xy: 471, 369 + xy: 507, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 revenant-factory rotate: false - xy: 66, 227 + xy: 337, 450 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-top rotate: false - xy: 100, 227 + xy: 337, 416 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-top-open rotate: false - xy: 134, 227 + xy: 371, 450 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spirit-factory-top rotate: false - xy: 279, 166 + xy: 536, 270 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 spirit-factory-top-open rotate: false - xy: 279, 148 + xy: 566, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-factory rotate: false - xy: 558, 427 + xy: 934, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 wraith-factory-top rotate: false - xy: 279, 80 + xy: 572, 270 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wraith-factory-top-open rotate: false - xy: 279, 62 + xy: 567, 252 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 deflector-wall rotate: false - xy: 843, 393 + xy: 144, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deflector-wall-large rotate: false - xy: 117, 81 + xy: 494, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 135, 81 + xy: 494, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-open rotate: false - xy: 913, 393 + xy: 93, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 beam rotate: false - xy: 1018, 499 + xy: 334, 470 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 beam-end rotate: false - xy: 285, 382 + xy: 418, 396 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 blank rotate: false - xy: 256, 417 + xy: 290, 466 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 bullet rotate: false - xy: 82, 114 + xy: 197, 195 size: 13, 13 orig: 13, 13 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 1010, 464 + xy: 197, 180 size: 13, 13 orig: 13, 13 offset: 0, 0 index: -1 casing rotate: false - xy: 329, 146 + xy: 85, 198 size: 2, 4 orig: 2, 4 offset: 0, 0 index: -1 clear rotate: false - xy: 256, 414 + xy: 254, 398 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 command-attack rotate: false - xy: 503, 399 + xy: 84, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-idle rotate: false - xy: 503, 389 + xy: 134, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-patrol rotate: false - xy: 513, 399 + xy: 124, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-retreat rotate: false - xy: 513, 389 + xy: 114, 118 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 enemyarrow rotate: false - xy: 289, 1 + xy: 93, 69 size: 8, 7 orig: 8, 7 offset: 0, 0 index: -1 error rotate: false - xy: 980, 403 + xy: 642, 306 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 laser rotate: false - xy: 111, 56 + xy: 337, 402 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 laser-end rotate: false - xy: 656, 433 + xy: 418, 376 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 laserfull rotate: false - xy: 676, 433 + xy: 418, 356 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 minelaser rotate: false - xy: 114, 56 + xy: 414, 298 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 minelaser-end rotate: false - xy: 696, 433 + xy: 418, 336 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 missile rotate: false - xy: 27, 1 + xy: 868, 416 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 missile-back rotate: false - xy: 38, 1 + xy: 314, 312 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 scorch1 rotate: false - xy: 337, 406 + xy: 702, 338 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch2 rotate: false - xy: 90, 87 + xy: 702, 311 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch3 rotate: false - xy: 162, 200 + xy: 702, 284 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch4 rotate: false - xy: 99, 88 + xy: 699, 238 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch5 rotate: false - xy: 108, 88 + xy: 211, 153 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 shell rotate: false - xy: 49, 1 + xy: 325, 312 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shell-back rotate: false - xy: 60, 1 + xy: 696, 376 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shot rotate: false - xy: 541, 369 + xy: 557, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 transfer rotate: false - xy: 187, 49 + xy: 1020, 447 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 transfer-arrow rotate: false - xy: 781, 369 + xy: 131, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 transfer-end rotate: false - xy: 776, 433 + xy: 438, 350 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 blackstone-cliff-edge rotate: false - xy: 229, 39 + xy: 1012, 427 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-1 rotate: false - xy: 229, 29 + xy: 1012, 417 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-2 rotate: false - xy: 229, 19 + xy: 1012, 407 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-side rotate: false - xy: 229, 9 + xy: 672, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-arc rotate: false - xy: 239, 16 + xy: 672, 313 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-biomattercompressor rotate: false - xy: 346, 407 + xy: 458, 356 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-blast-drill rotate: false - xy: 290, 330 + xy: 254, 338 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-bridge-conduit rotate: false - xy: 249, 26 + xy: 656, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 249, 26 + xy: 656, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-bridge-conveyor rotate: false - xy: 269, 36 + xy: 662, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 269, 36 + xy: 662, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-centrifuge rotate: false - xy: 364, 407 + xy: 476, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 centrifuge rotate: false - xy: 364, 407 + xy: 476, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-combustion-generator rotate: false - xy: 249, 16 + xy: 662, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 249, 16 + xy: 662, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-command-center rotate: false - xy: 382, 407 + xy: 476, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 command-center rotate: false - xy: 382, 407 + xy: 476, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-conduit rotate: false - xy: 259, 26 + xy: 662, 277 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-container rotate: false - xy: 400, 407 + xy: 476, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 container rotate: false - xy: 400, 407 + xy: 476, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-conveyor rotate: false - xy: 279, 36 + xy: 662, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 279, 36 + xy: 662, 267 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-copper-wall rotate: false - xy: 259, 16 + xy: 672, 303 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 259, 16 + xy: 672, 303 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-copper-wall-large rotate: false - xy: 418, 407 + xy: 752, 393 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 copper-wall-large rotate: false - xy: 418, 407 + xy: 752, 393 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-core rotate: false - xy: 290, 304 + xy: 648, 435 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core rotate: false - xy: 290, 304 + xy: 648, 435 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-cryofluidmixer rotate: false - xy: 436, 409 + xy: 194, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-cultivator rotate: false - xy: 454, 409 + xy: 212, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-cyclone rotate: false - xy: 290, 278 + xy: 622, 432 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-dagger-factory rotate: false - xy: 472, 409 + xy: 230, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dart-ship-pad rotate: false - xy: 490, 409 + xy: 770, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dart-ship-pad rotate: false - xy: 490, 409 + xy: 770, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-deepwater rotate: false - xy: 269, 26 + xy: 672, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater rotate: false - xy: 269, 26 + xy: 672, 293 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-delta-mech-pad rotate: false - xy: 508, 409 + xy: 788, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 delta-mech-pad rotate: false - xy: 508, 409 + xy: 788, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dense-alloy-wall rotate: false - xy: 269, 16 + xy: 672, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dense-alloy-wall rotate: false - xy: 269, 16 + xy: 672, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-dense-alloy-wall-large rotate: false - xy: 526, 409 + xy: 806, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dense-alloy-wall-large rotate: false - xy: 526, 409 + xy: 806, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dirt rotate: false - xy: 279, 26 + xy: 672, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt1 rotate: false - xy: 279, 26 + xy: 672, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-distributor rotate: false - xy: 544, 409 + xy: 824, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 distributor rotate: false - xy: 544, 409 + xy: 824, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-door rotate: false - xy: 279, 16 + xy: 672, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 door rotate: false - xy: 279, 16 + xy: 672, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-door-large rotate: false - xy: 562, 409 + xy: 842, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-large rotate: false - xy: 562, 409 + xy: 842, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-duo rotate: false - xy: 239, 6 + xy: 669, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-force-projector rotate: false - xy: 315, 356 + xy: 674, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 force-projector rotate: false - xy: 315, 356 + xy: 674, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fortress-factory rotate: false - xy: 316, 330 + xy: 648, 409 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fuse rotate: false - xy: 316, 304 + xy: 674, 399 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fusion-reactor rotate: false - xy: 474, 479 + xy: 779, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-ghoul-factory rotate: false - xy: 316, 278 + xy: 204, 296 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-glaive-ship-pad rotate: false - xy: 334, 451 + xy: 230, 296 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 glaive-ship-pad rotate: false - xy: 334, 451 + xy: 230, 296 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-grass rotate: false - xy: 249, 6 + xy: 669, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass1 rotate: false - xy: 249, 6 + xy: 669, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-hail rotate: false - xy: 259, 6 + xy: 669, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-ice rotate: false - xy: 269, 6 + xy: 679, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice1 rotate: false - xy: 269, 6 + xy: 679, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-icerock rotate: false - xy: 279, 6 + xy: 679, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerock1 rotate: false - xy: 279, 6 + xy: 679, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-incinerator rotate: false - xy: 289, 30 + xy: 679, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 incinerator rotate: false - xy: 289, 30 + xy: 679, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemsource rotate: false - xy: 299, 30 + xy: 205, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemsource rotate: false - xy: 299, 30 + xy: 205, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemvoid rotate: false - xy: 289, 20 + xy: 215, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemvoid rotate: false - xy: 289, 20 + xy: 215, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-javelin-ship-pad rotate: false - xy: 580, 409 + xy: 248, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 javelin-ship-pad rotate: false - xy: 580, 409 + xy: 248, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-junction rotate: false - xy: 309, 30 + xy: 225, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 junction rotate: false - xy: 309, 30 + xy: 225, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-lancer rotate: false - xy: 598, 409 + xy: 860, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-laser-drill rotate: false - xy: 616, 409 + xy: 878, 398 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-lava rotate: false - xy: 289, 10 + xy: 235, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava rotate: false - xy: 289, 10 + xy: 235, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-junction rotate: false - xy: 299, 20 + xy: 245, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 299, 20 + xy: 245, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-router rotate: false - xy: 299, 10 + xy: 255, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-tank rotate: false - xy: 360, 451 + xy: 340, 390 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-liquidsource rotate: false - xy: 309, 20 + xy: 265, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidsource rotate: false - xy: 309, 20 + xy: 265, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-mass-driver rotate: false - xy: 386, 451 + xy: 366, 390 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mass-driver rotate: false - xy: 386, 451 + xy: 366, 390 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-mechanical-drill rotate: false - xy: 168, 243 + xy: 878, 380 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-mechanical-pump rotate: false - xy: 309, 10 + xy: 275, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 309, 10 + xy: 275, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-meltdown rotate: false - xy: 508, 479 + xy: 813, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-melter rotate: false - xy: 343, 396 + xy: 285, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 melter rotate: false - xy: 343, 396 + xy: 285, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-mend-projector rotate: false - xy: 171, 209 + xy: 532, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mend-projector rotate: false - xy: 171, 209 + xy: 532, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-metalfloor rotate: false - xy: 353, 397 + xy: 295, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor1 rotate: false - xy: 353, 397 + xy: 295, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-oil-extractor rotate: false - xy: 412, 453 + xy: 392, 390 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-omega-mech-pad rotate: false - xy: 438, 453 + xy: 340, 364 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 omega-mech-pad rotate: false - xy: 438, 453 + xy: 340, 364 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-overdrive-projector rotate: false - xy: 180, 266 + xy: 550, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 180, 266 + xy: 550, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-overflow-gate rotate: false - xy: 363, 397 + xy: 305, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 363, 397 + xy: 305, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phantom-factory rotate: false - xy: 198, 265 + xy: 568, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-phase-conduit rotate: false - xy: 373, 397 + xy: 315, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 373, 397 + xy: 315, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-conveyor rotate: false - xy: 383, 397 + xy: 325, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 383, 397 + xy: 325, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-wall rotate: false - xy: 393, 397 + xy: 335, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 393, 397 + xy: 335, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-wall-large rotate: false - xy: 171, 191 + xy: 586, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 171, 191 + xy: 586, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-phase-weaver rotate: false - xy: 169, 173 + xy: 604, 432 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-plasma-drill rotate: false - xy: 542, 479 + xy: 847, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-plastanium-compressor rotate: false - xy: 230, 260 + xy: 527, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 230, 260 + xy: 527, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-pneumatic-drill rotate: false - xy: 248, 260 + xy: 545, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-power-node rotate: false - xy: 403, 397 + xy: 345, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 power-node rotate: false - xy: 403, 397 + xy: 345, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-power-node-large rotate: false - xy: 266, 262 + xy: 563, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 266, 262 + xy: 563, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-powerinfinite rotate: false - xy: 413, 397 + xy: 355, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powerinfinite rotate: false - xy: 413, 397 + xy: 355, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-powervoid rotate: false - xy: 423, 397 + xy: 365, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powervoid rotate: false - xy: 423, 397 + xy: 365, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulse-conduit rotate: false - xy: 343, 386 + xy: 375, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulverizer rotate: false - xy: 353, 387 + xy: 385, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pyratite-mixer rotate: false - xy: 284, 260 + xy: 581, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 284, 260 + xy: 581, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-reconstructor rotate: false - xy: 302, 260 + xy: 599, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory rotate: false - xy: 302, 260 + xy: 599, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phantom-factory rotate: false - xy: 302, 260 + xy: 599, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 reconstructor rotate: false - xy: 302, 260 + xy: 599, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 spirit-factory rotate: false - xy: 302, 260 + xy: 599, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wraith-factory rotate: false - xy: 302, 260 + xy: 599, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-repair-point rotate: false - xy: 363, 387 + xy: 395, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 repair-point rotate: false - xy: 363, 387 + xy: 395, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-revenant-factory rotate: false - xy: 576, 479 + xy: 881, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-ripple rotate: false - xy: 464, 453 + xy: 366, 364 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-rock rotate: false - xy: 373, 387 + xy: 405, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rock1 rotate: false - xy: 373, 387 + xy: 405, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rotary-pump rotate: false - xy: 320, 260 + xy: 617, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 320, 260 + xy: 617, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-router rotate: false - xy: 383, 387 + xy: 415, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 router rotate: false - xy: 383, 387 + xy: 415, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rtg-generator rotate: false - xy: 169, 155 + xy: 980, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 169, 155 + xy: 980, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-salvo rotate: false - xy: 636, 415 + xy: 980, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-sand rotate: false - xy: 393, 387 + xy: 425, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand1 rotate: false - xy: 393, 387 + xy: 425, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-scorch rotate: false - xy: 403, 387 + xy: 435, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-separator rotate: false - xy: 413, 387 + xy: 445, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator rotate: false - xy: 413, 387 + xy: 445, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shock-mine rotate: false - xy: 423, 387 + xy: 455, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shock-mine rotate: false - xy: 423, 387 + xy: 455, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shrub rotate: false - xy: 341, 376 + xy: 465, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shrub rotate: false - xy: 341, 376 + xy: 465, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-silicon-smelter rotate: false - xy: 654, 415 + xy: 962, 397 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 654, 415 + xy: 962, 397 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-smelter rotate: false - xy: 341, 366 + xy: 85, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 smelter rotate: false - xy: 341, 366 + xy: 85, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-snow rotate: false - xy: 341, 356 + xy: 95, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow1 rotate: false - xy: 341, 356 + xy: 95, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solar-panel rotate: false - xy: 342, 346 + xy: 105, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 342, 346 + xy: 105, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solar-panel-large rotate: false - xy: 490, 453 + xy: 392, 364 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-large rotate: false - xy: 490, 453 + xy: 392, 364 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-solidifer rotate: false - xy: 342, 336 + xy: 115, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solidifer rotate: false - xy: 342, 336 + xy: 115, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-sorter rotate: false - xy: 342, 326 + xy: 125, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sorter rotate: false - xy: 342, 326 + xy: 125, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-space rotate: false - xy: 342, 316 + xy: 135, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space rotate: false - xy: 342, 316 + xy: 135, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-spawn rotate: false - xy: 342, 306 + xy: 145, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 spawn rotate: false - xy: 342, 306 + xy: 145, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-spectre rotate: false - xy: 610, 479 + xy: 915, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-spirit-factory rotate: false - xy: 672, 415 + xy: 980, 399 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-stone rotate: false - xy: 342, 296 + xy: 155, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone1 rotate: false - xy: 342, 296 + xy: 155, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-surge-wall rotate: false - xy: 342, 286 + xy: 165, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 342, 286 + xy: 165, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-surge-wall-large rotate: false - xy: 690, 415 + xy: 458, 338 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 690, 415 + xy: 458, 338 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-swarmer rotate: false - xy: 708, 415 + xy: 476, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-tar rotate: false - xy: 1014, 432 + xy: 175, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar rotate: false - xy: 1014, 432 + xy: 175, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-tau-mech-pad rotate: false - xy: 726, 415 + xy: 456, 320 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 tau-mech-pad rotate: false - xy: 726, 415 + xy: 456, 320 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thermal-generator rotate: false - xy: 744, 415 + xy: 896, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 744, 415 + xy: 896, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thermal-pump rotate: false - xy: 762, 415 + xy: 914, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 762, 415 + xy: 914, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thorium-reactor rotate: false - xy: 516, 453 + xy: 314, 349 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor rotate: false - xy: 516, 453 + xy: 314, 349 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-thorium-wall rotate: false - xy: 1014, 422 + xy: 185, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 1014, 422 + xy: 185, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-thorium-wall-large rotate: false - xy: 780, 415 + xy: 932, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 780, 415 + xy: 932, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-titan-factory rotate: false - xy: 542, 453 + xy: 288, 346 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-titanium-conveyor rotate: false - xy: 433, 397 + xy: 84, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 433, 397 + xy: 84, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-trident-ship-pad rotate: false - xy: 798, 417 + xy: 896, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 trident-ship-pad rotate: false - xy: 798, 417 + xy: 896, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-turbine-generator rotate: false - xy: 816, 417 + xy: 914, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 turbine-generator rotate: false - xy: 816, 417 + xy: 914, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-unloader rotate: false - xy: 433, 387 + xy: 94, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unloader rotate: false - xy: 433, 387 + xy: 94, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-vault rotate: false - xy: 568, 453 + xy: 340, 338 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 vault rotate: false - xy: 568, 453 + xy: 340, 338 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-water rotate: false - xy: 443, 399 + xy: 84, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water rotate: false - xy: 443, 399 + xy: 84, 128 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-water-extractor rotate: false - xy: 834, 417 + xy: 932, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-wave rotate: false - xy: 852, 417 + xy: 456, 302 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-wraith-factory rotate: false - xy: 870, 417 + xy: 950, 379 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 deepwater-cliff-edge rotate: false - xy: 803, 389 + xy: 104, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-1 rotate: false - xy: 813, 391 + xy: 114, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-2 rotate: false - xy: 823, 391 + xy: 124, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-side rotate: false - xy: 833, 393 + xy: 134, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge rotate: false - xy: 873, 393 + xy: 174, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-1 rotate: false - xy: 883, 393 + xy: 184, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-2 rotate: false - xy: 893, 393 + xy: 83, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-side rotate: false - xy: 903, 393 + xy: 83, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge rotate: false - xy: 421, 367 + xy: 133, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-1 rotate: false - xy: 411, 357 + xy: 143, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-2 rotate: false - xy: 431, 367 + xy: 153, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-side rotate: false - xy: 421, 357 + xy: 163, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-cryofluid rotate: false - xy: 352, 306 + xy: 1004, 365 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-lava rotate: false - xy: 352, 296 + xy: 1014, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-oil rotate: false - xy: 352, 286 + xy: 1014, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-water rotate: false - xy: 362, 347 + xy: 1014, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mech-icon-alpha-mech rotate: false - xy: 345, 62 + xy: 599, 250 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-dart-ship rotate: false - xy: 345, 48 + xy: 613, 250 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-delta-mech rotate: false - xy: 343, 34 + xy: 627, 250 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-omega-mech rotate: false - xy: 311, 40 + xy: 165, 158 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-tau-mech rotate: false - xy: 329, 130 + xy: 181, 158 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-trident-ship rotate: false - xy: 329, 114 + xy: 68, 140 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 trident-ship rotate: false - xy: 329, 114 + xy: 68, 140 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 metalfloor-cliff-edge rotate: false - xy: 362, 317 + xy: 682, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-1 rotate: false - xy: 402, 347 + xy: 682, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-2 rotate: false - xy: 392, 337 + xy: 682, 313 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-side rotate: false - xy: 382, 327 + xy: 682, 303 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone1 rotate: false - xy: 362, 307 + xy: 682, 283 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone2 rotate: false - xy: 412, 347 + xy: 682, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone3 rotate: false - xy: 402, 337 + xy: 682, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass1 rotate: false - xy: 392, 327 + xy: 692, 355 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass2 rotate: false - xy: 382, 317 + xy: 692, 345 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass3 rotate: false - xy: 372, 307 + xy: 692, 335 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice1 rotate: false - xy: 362, 297 + xy: 692, 325 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice2 rotate: false - xy: 422, 347 + xy: 692, 315 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice3 rotate: false - xy: 412, 337 + xy: 692, 305 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand1 rotate: false - xy: 402, 327 + xy: 692, 295 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand2 rotate: false - xy: 392, 317 + xy: 692, 285 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand3 rotate: false - xy: 382, 307 + xy: 692, 275 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow1 rotate: false - xy: 372, 297 + xy: 692, 265 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow2 rotate: false - xy: 362, 287 + xy: 689, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow3 rotate: false - xy: 422, 337 + xy: 689, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone1 rotate: false - xy: 412, 327 + xy: 689, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone2 rotate: false - xy: 402, 317 + xy: 207, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone3 rotate: false - xy: 392, 307 + xy: 207, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone1 rotate: false - xy: 382, 297 + xy: 207, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone2 rotate: false - xy: 372, 287 + xy: 217, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone3 rotate: false - xy: 422, 327 + xy: 217, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass1 rotate: false - xy: 412, 317 + xy: 227, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass2 rotate: false - xy: 402, 307 + xy: 217, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass3 rotate: false - xy: 392, 297 + xy: 227, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice1 rotate: false - xy: 382, 287 + xy: 237, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice2 rotate: false - xy: 422, 317 + xy: 227, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice3 rotate: false - xy: 412, 307 + xy: 237, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand1 rotate: false - xy: 402, 297 + xy: 247, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand2 rotate: false - xy: 392, 287 + xy: 237, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand3 rotate: false - xy: 422, 307 + xy: 247, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow1 rotate: false - xy: 412, 297 + xy: 257, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow2 rotate: false - xy: 402, 287 + xy: 247, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow3 rotate: false - xy: 422, 297 + xy: 257, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone1 rotate: false - xy: 412, 287 + xy: 267, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone2 rotate: false - xy: 422, 287 + xy: 257, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone3 rotate: false - xy: 432, 347 + xy: 267, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone1 rotate: false - xy: 432, 337 + xy: 277, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone2 rotate: false - xy: 432, 327 + xy: 267, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone3 rotate: false - xy: 432, 317 + xy: 277, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass1 rotate: false - xy: 432, 307 + xy: 287, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass2 rotate: false - xy: 432, 297 + xy: 277, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass3 rotate: false - xy: 432, 287 + xy: 287, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice1 rotate: false - xy: 443, 379 + xy: 297, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice2 rotate: false - xy: 453, 379 + xy: 287, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice3 rotate: false - xy: 463, 379 + xy: 297, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand1 rotate: false - xy: 473, 379 + xy: 307, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand2 rotate: false - xy: 483, 379 + xy: 297, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand3 rotate: false - xy: 493, 379 + xy: 307, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow1 rotate: false - xy: 503, 379 + xy: 317, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow2 rotate: false - xy: 513, 379 + xy: 307, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow3 rotate: false - xy: 523, 379 + xy: 317, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone1 rotate: false - xy: 533, 379 + xy: 327, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone2 rotate: false - xy: 543, 379 + xy: 317, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone3 rotate: false - xy: 553, 379 + xy: 327, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone1 rotate: false - xy: 563, 379 + xy: 337, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone2 rotate: false - xy: 573, 379 + xy: 327, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone3 rotate: false - xy: 583, 379 + xy: 337, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass1 rotate: false - xy: 593, 379 + xy: 347, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass2 rotate: false - xy: 603, 379 + xy: 337, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass3 rotate: false - xy: 613, 379 + xy: 347, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice1 rotate: false - xy: 623, 379 + xy: 357, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice2 rotate: false - xy: 633, 379 + xy: 347, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice3 rotate: false - xy: 643, 379 + xy: 357, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand1 rotate: false - xy: 653, 379 + xy: 367, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand2 rotate: false - xy: 663, 379 + xy: 357, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand3 rotate: false - xy: 673, 379 + xy: 367, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow1 rotate: false - xy: 683, 379 + xy: 377, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow2 rotate: false - xy: 693, 379 + xy: 367, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow3 rotate: false - xy: 703, 379 + xy: 377, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone1 rotate: false - xy: 713, 379 + xy: 387, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone2 rotate: false - xy: 723, 379 + xy: 377, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone3 rotate: false - xy: 733, 379 + xy: 387, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone1 rotate: false - xy: 743, 379 + xy: 397, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone2 rotate: false - xy: 753, 379 + xy: 387, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone3 rotate: false - xy: 763, 379 + xy: 397, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass1 rotate: false - xy: 773, 379 + xy: 407, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass2 rotate: false - xy: 783, 379 + xy: 397, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass3 rotate: false - xy: 793, 379 + xy: 407, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice1 rotate: false - xy: 803, 379 + xy: 417, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice2 rotate: false - xy: 813, 381 + xy: 407, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice3 rotate: false - xy: 823, 381 + xy: 417, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand1 rotate: false - xy: 833, 383 + xy: 427, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand2 rotate: false - xy: 843, 383 + xy: 417, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand3 rotate: false - xy: 853, 383 + xy: 427, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow1 rotate: false - xy: 863, 383 + xy: 437, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow2 rotate: false - xy: 873, 383 + xy: 427, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow3 rotate: false - xy: 883, 383 + xy: 437, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone1 rotate: false - xy: 893, 383 + xy: 447, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone2 rotate: false - xy: 903, 383 + xy: 437, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone3 rotate: false - xy: 913, 383 + xy: 447, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge rotate: false - xy: 491, 359 + xy: 527, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-1 rotate: false - xy: 501, 369 + xy: 527, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-2 rotate: false - xy: 501, 359 + xy: 517, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-side rotate: false - xy: 511, 369 + xy: 537, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge rotate: false - xy: 561, 369 + xy: 567, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-1 rotate: false - xy: 561, 359 + xy: 557, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-2 rotate: false - xy: 571, 369 + xy: 567, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-side rotate: false - xy: 571, 359 + xy: 195, 142 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge rotate: false - xy: 581, 359 + xy: 194, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-1 rotate: false - xy: 591, 369 + xy: 194, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-2 rotate: false - xy: 591, 359 + xy: 194, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-side rotate: false - xy: 601, 369 + xy: 194, 92 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge rotate: false - xy: 631, 359 + xy: 194, 82 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge-1 rotate: false - xy: 641, 369 + xy: 204, 82 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge-2 rotate: false - xy: 641, 359 + xy: 193, 72 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-side rotate: false - xy: 651, 369 + xy: 193, 62 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unit-icon-dagger rotate: false - xy: 141, 21 + xy: 726, 387 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-fortress rotate: false - xy: 315, 224 + xy: 584, 342 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-icon-titan rotate: false - xy: 297, 188 + xy: 602, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-icon-wraith rotate: false - xy: 155, 35 + xy: 986, 349 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 wraith rotate: false - xy: 155, 35 + xy: 986, 349 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 item-biomatter rotate: false - xy: 371, 367 + xy: 143, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 361, 357 + xy: 153, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-coal rotate: false - xy: 391, 377 + xy: 163, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-copper rotate: false - xy: 381, 367 + xy: 153, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-dense-alloy rotate: false - xy: 371, 357 + xy: 163, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead rotate: false - xy: 401, 377 + xy: 173, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 391, 367 + xy: 163, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 381, 357 + xy: 173, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 411, 377 + xy: 183, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-sand rotate: false - xy: 401, 367 + xy: 173, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 391, 357 + xy: 183, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-stone rotate: false - xy: 421, 377 + xy: 183, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 411, 367 + xy: 103, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 401, 357 + xy: 113, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 431, 377 + xy: 123, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon rotate: false - xy: 352, 316 + xy: 1004, 375 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 alpha-mech rotate: false - xy: 166, 261 + xy: 197, 166 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 alpha-mech-base rotate: false - xy: 216, 269 + xy: 197, 152 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 alpha-mech-leg rotate: false - xy: 216, 255 + xy: 274, 324 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech rotate: false - xy: 924, 403 + xy: 628, 306 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech-base rotate: false - xy: 938, 403 + xy: 632, 320 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech-leg rotate: false - xy: 952, 403 + xy: 634, 292 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 omega-mech rotate: false - xy: 329, 98 + xy: 68, 124 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-armor rotate: false - xy: 329, 82 + xy: 68, 108 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-base rotate: false - xy: 329, 66 + xy: 68, 92 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-leg rotate: false - xy: 329, 50 + xy: 67, 76 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 tau-mech rotate: false - xy: 810, 401 + xy: 620, 334 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 tau-mech-base rotate: false - xy: 127, 21 + xy: 998, 419 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 tau-mech-leg rotate: false - xy: 141, 35 + xy: 998, 405 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dart-ship rotate: false - xy: 910, 403 + xy: 620, 278 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 glaive-ship rotate: false - xy: 168, 227 + xy: 1, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-glaive-ship rotate: false - xy: 168, 227 + xy: 1, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 javelin-ship rotate: false - xy: 345, 104 + xy: 634, 264 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-javelin-ship rotate: false - xy: 345, 104 + xy: 634, 264 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 javelin-ship-shield rotate: false - xy: 345, 90 + xy: 648, 264 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -5270,54 +5270,94 @@ circle index: -1 shape-3 rotate: false - xy: 1, 198 + xy: 204, 401 size: 63, 63 orig: 63, 63 offset: 0, 0 index: -1 -border - rotate: false - xy: 204, 309 - size: 24, 40 - split: 5, 5, 5, 10 - orig: 24, 40 - offset: 0, 0 - index: -1 button rotate: false - xy: 30, 106 - size: 24, 40 - split: 10, 10, 6, 10 - orig: 24, 40 - offset: 0, 0 - index: -1 -textarea - rotate: false - xy: 30, 106 - size: 24, 40 - split: 10, 10, 9, 11 - orig: 24, 40 + xy: 486, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 offset: 0, 0 index: -1 button-down rotate: false - xy: 233, 372 - size: 24, 40 - split: 10, 10, 6, 10 - orig: 24, 40 + xy: 204, 322 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-edge-1 + rotate: false + xy: 334, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-edge-2 + rotate: false + xy: 1, 133 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-edge-3 + rotate: false + xy: 372, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-edge-4 + rotate: false + xy: 1, 104 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 offset: 0, 0 index: -1 button-over rotate: false - xy: 233, 372 - size: 24, 40 - split: 10, 10, 6, 10 - orig: 24, 40 + xy: 410, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-right + rotate: false + xy: 1, 46 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-right-down + rotate: false + xy: 1, 75 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 + offset: 0, 0 + index: -1 +button-right-over + rotate: false + xy: 448, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 offset: 0, 0 index: -1 button-select rotate: false - xy: 594, 453 + xy: 366, 338 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -5325,854 +5365,868 @@ button-select index: -1 check-off rotate: false - xy: 230, 312 + xy: 532, 450 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 230, 278 + xy: 562, 450 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 260, 314 + xy: 592, 450 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 260, 280 + xy: 439, 410 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 clear rotate: false - xy: 166, 275 + xy: 950, 397 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 cursor rotate: false - xy: 325, 382 + xy: 998, 399 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 discord-banner rotate: false - xy: 1, 263 + xy: 204, 466 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 empty-sector rotate: false - xy: 678, 479 + xy: 983, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-crafting rotate: false - xy: 153, 81 + xy: 266, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-defense rotate: false - xy: 153, 63 + xy: 279, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-distribution rotate: false - xy: 171, 99 + xy: 284, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-effect rotate: false - xy: 171, 81 + xy: 297, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-liquid rotate: false - xy: 189, 101 + xy: 374, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-power rotate: false - xy: 207, 195 + xy: 459, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-production rotate: false - xy: 218, 237 + xy: 476, 324 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-turret rotate: false - xy: 225, 201 + xy: 510, 306 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-units rotate: false - xy: 243, 206 + xy: 482, 270 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-upgrade rotate: false - xy: 261, 202 + xy: 518, 270 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 controller-cursor rotate: false - xy: 906, 417 + xy: 986, 381 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-about rotate: false - xy: 153, 149 + xy: 53, 188 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-add rotate: false - xy: 153, 133 + xy: 17, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin rotate: false - xy: 148, 117 + xy: 33, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin-small rotate: false - xy: 186, 243 + xy: 1017, 505 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 icon-areaDelete rotate: false - xy: 140, 141 + xy: 302, 334 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow rotate: false - xy: 135, 63 + xy: 125, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-16 rotate: false - xy: 135, 63 + xy: 125, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-down rotate: false - xy: 272, 250 + xy: 302, 322 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 272, 238 + xy: 740, 389 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 259, 100 + xy: 274, 312 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 271, 100 + xy: 635, 420 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-back rotate: false - xy: 95, 34 + xy: 143, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-ban rotate: false - xy: 164, 117 + xy: 49, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-break rotate: false - xy: 95, 16 + xy: 161, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cancel rotate: false - xy: 169, 137 + xy: 179, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-chat rotate: false - xy: 1012, 442 + xy: 636, 408 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-check rotate: false - xy: 153, 99 + xy: 418, 298 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-copy + rotate: false + xy: 436, 296 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cursor rotate: false - xy: 169, 37 + xy: 636, 396 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-dev-builds rotate: false - xy: 184, 227 + xy: 242, 322 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-discord rotate: false - xy: 200, 249 + xy: 189, 242 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-donate rotate: false - xy: 225, 113 + xy: 69, 188 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-dots rotate: false - xy: 243, 100 + xy: 256, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-editor rotate: false - xy: 279, 46 + xy: 602, 326 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-egg rotate: false - xy: 333, 226 + xy: 69, 172 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-elevation rotate: false - xy: 171, 63 + xy: 302, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-eraser rotate: false - xy: 189, 209 + xy: 315, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-exit rotate: false - xy: 333, 210 + xy: 272, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-file rotate: false - xy: 189, 191 + xy: 320, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-image rotate: false - xy: 187, 173 + xy: 333, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-text rotate: false - xy: 333, 194 + xy: 258, 322 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-fill rotate: false - xy: 187, 155 + xy: 338, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-floppy rotate: false - xy: 333, 178 + xy: 288, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-floppy-16 rotate: false - xy: 187, 137 + xy: 351, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-folder rotate: false - xy: 333, 162 + xy: 304, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 333, 146 + xy: 320, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-generated rotate: false - xy: 1, 148 + xy: 204, 351 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-github rotate: false - xy: 634, 399 + xy: 336, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 650, 399 + xy: 352, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-grid rotate: false - xy: 180, 119 + xy: 356, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-hold rotate: false - xy: 169, 25 + xy: 648, 397 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 123, 9 + xy: 636, 384 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-home rotate: false - xy: 666, 399 + xy: 368, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-host rotate: false - xy: 682, 399 + xy: 384, 296 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-info rotate: false - xy: 135, 9 + xy: 660, 397 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 698, 399 + xy: 620, 398 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-item rotate: false - xy: 147, 9 + xy: 648, 385 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 361, 367 + xy: 143, 68 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-line rotate: false - xy: 200, 231 + xy: 369, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-link rotate: false - xy: 714, 399 + xy: 620, 382 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-liquid-small rotate: false - xy: 159, 9 + xy: 636, 372 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-load rotate: false - xy: 730, 399 + xy: 620, 366 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-load-image rotate: false - xy: 189, 83 + xy: 387, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-load-map rotate: false - xy: 189, 65 + xy: 392, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-loading rotate: false - xy: 198, 119 + xy: 410, 280 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-locked rotate: false - xy: 207, 101 + xy: 428, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-logic rotate: false - xy: 181, 37 + xy: 660, 385 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-map rotate: false - xy: 746, 399 + xy: 620, 350 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 181, 25 + xy: 648, 373 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu-large rotate: false - xy: 207, 83 + xy: 446, 278 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-missing rotate: false - xy: 171, 13 + xy: 636, 360 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-background rotate: false - xy: 636, 433 + xy: 986, 459 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 icon-mission-battle rotate: false - xy: 171, 1 + xy: 648, 361 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-defense rotate: false - xy: 183, 13 + xy: 660, 373 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-done rotate: false - xy: 183, 1 + xy: 636, 348 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-none rotate: false - xy: 190, 53 + xy: 648, 349 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-nullitem rotate: false - xy: 381, 377 + xy: 153, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 +icon-paste + rotate: false + xy: 405, 260 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-pause rotate: false - xy: 202, 53 + xy: 660, 361 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pencil rotate: false - xy: 207, 65 + xy: 423, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pencil-small rotate: false - xy: 762, 399 + xy: 191, 226 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-pick rotate: false - xy: 207, 213 + xy: 441, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-play rotate: false - xy: 193, 41 + xy: 636, 336 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 778, 399 + xy: 191, 210 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-players rotate: false - xy: 193, 29 + xy: 648, 337 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-power-small rotate: false - xy: 205, 41 + xy: 660, 349 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 338, 262 + xy: 85, 174 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-redo rotate: false - xy: 236, 242 + xy: 494, 324 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-refresh rotate: false - xy: 338, 246 + xy: 101, 174 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 297, 136 + xy: 117, 174 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-resize rotate: false - xy: 254, 242 + xy: 474, 306 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-rotate rotate: false - xy: 313, 136 + xy: 133, 174 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 295, 120 + xy: 149, 174 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 311, 120 + xy: 165, 174 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 297, 104 + xy: 181, 174 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save rotate: false - xy: 297, 88 + xy: 590, 290 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save-image rotate: false - xy: 284, 242 + xy: 492, 306 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-save-map rotate: false - xy: 302, 242 + xy: 464, 284 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-settings rotate: false - xy: 205, 29 + xy: 660, 337 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-terrain rotate: false - xy: 320, 242 + xy: 482, 288 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tools rotate: false - xy: 297, 72 + xy: 590, 274 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-touch rotate: false - xy: 195, 17 + xy: 672, 387 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 195, 5 + xy: 672, 375 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 313, 104 + xy: 69, 156 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-trash-16 rotate: false - xy: 225, 219 + xy: 500, 288 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-trello rotate: false - xy: 313, 88 + xy: 85, 158 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 313, 72 + xy: 101, 158 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-undo rotate: false - xy: 243, 224 + xy: 518, 288 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocked rotate: false - xy: 261, 220 + xy: 500, 270 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocks rotate: false - xy: 297, 56 + xy: 117, 158 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-wiki rotate: false - xy: 313, 56 + xy: 133, 158 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-zoom rotate: false - xy: 243, 188 + xy: 477, 252 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-zoom-small rotate: false - xy: 295, 40 + xy: 149, 158 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 info-banner rotate: false - xy: 204, 466 + xy: 1, 240 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 inventory rotate: false - xy: 259, 378 + xy: 752, 437 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 @@ -6180,30 +6234,30 @@ inventory index: -1 logotext rotate: false - xy: 87, 287 + xy: 1, 287 size: 89, 21 orig: 89, 21 offset: 0, 0 index: -1 pane rotate: false - xy: 280, 428 - size: 24, 36 - split: 10, 10, 5, 5 - orig: 24, 36 + xy: 524, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 offset: 0, 0 index: -1 -pane-button +pane-2 rotate: false - xy: 1, 1 - size: 24, 36 - split: 10, 10, 5, 5 - orig: 24, 36 + xy: 1, 17 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 offset: 0, 0 index: -1 scroll rotate: false - xy: 306, 432 + xy: 882, 416 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -6211,32 +6265,23 @@ scroll index: -1 scroll-horizontal rotate: false - xy: 129, 261 + xy: 638, 487 size: 35, 24 split: 6, 5, 10, 10 orig: 35, 24 offset: 0, 0 index: -1 -scroll-knob-horizontal +scroll-knob-horizontal-black rotate: false - xy: 87, 261 + xy: 1, 162 size: 40, 24 - split: 10, 6, 0, 24 - pad: -1, -1, 10, 10 + split: 11, 10, 10, 10 orig: 40, 24 offset: 0, 0 index: -1 -scroll-knob-vertical - rotate: false - xy: 56, 114 - size: 24, 40 - split: 10, 10, 6, 10 - orig: 24, 40 - offset: 0, 0 - index: -1 scroll-knob-vertical-black rotate: false - xy: 51, 156 + xy: 65, 1 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -6244,94 +6289,86 @@ scroll-knob-vertical-black index: -1 sector-edge rotate: false - xy: 94, 193 + xy: 371, 416 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sector-select rotate: false - xy: 128, 193 + xy: 405, 450 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 selection rotate: false - xy: 230, 348 + xy: 303, 398 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 slider rotate: false - xy: 1020, 454 + xy: 879, 417 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 256, 420 - size: 22, 44 - orig: 22, 44 + xy: 439, 444 + size: 29, 38 + orig: 29, 38 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 1, 39 - size: 22, 44 - orig: 22, 44 + xy: 470, 444 + size: 29, 38 + orig: 29, 38 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 1, 39 - size: 22, 44 - orig: 22, 44 + xy: 501, 444 + size: 29, 38 + orig: 29, 38 offset: 0, 0 index: -1 slider-vertical rotate: false - xy: 290, 466 + xy: 638, 484 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 -textfield +underline rotate: false - xy: 82, 129 - size: 28, 28 - split: 6, 6, 6, 6 - orig: 28, 28 + xy: 600, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 offset: 0, 0 index: -1 -textfield-over +underline-2 rotate: false - xy: 111, 163 - size: 28, 28 - split: 2, 2, 2, 2 - orig: 28, 28 + xy: 562, 484 + size: 36, 27 + split: 12, 12, 12, 12 + orig: 36, 27 offset: 0, 0 index: -1 white rotate: false - xy: 25, 80 + xy: 87, 282 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 -window - rotate: false - xy: 1, 85 - size: 27, 61 - split: 8, 8, 44, 11 - orig: 27, 61 - offset: 0, 0 - index: -1 window-empty rotate: false - xy: 204, 351 + xy: 39, 99 size: 27, 61 split: 8, 8, 44, 11 orig: 27, 61 @@ -6339,210 +6376,210 @@ window-empty index: -1 alpha-drone rotate: false - xy: 97, 115 + xy: 400, 298 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-alpha-drone rotate: false - xy: 97, 115 + xy: 400, 298 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger rotate: false - xy: 868, 403 + xy: 606, 292 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 882, 403 + xy: 606, 278 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger-leg rotate: false - xy: 896, 403 + xy: 620, 292 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 fortress rotate: false - xy: 99, 70 + xy: 261, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 93, 52 + xy: 89, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-base rotate: false - xy: 93, 52 + xy: 89, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-leg rotate: false - xy: 117, 63 + xy: 107, 190 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 ghoul rotate: false - xy: 305, 382 + xy: 960, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 unit-icon-ghoul rotate: false - xy: 305, 382 + xy: 960, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 phantom rotate: false - xy: 327, 34 + xy: 67, 60 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 unit-icon-phantom rotate: false - xy: 327, 34 + xy: 67, 60 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 power-cell rotate: false - xy: 794, 399 + xy: 67, 44 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 revenant rotate: false - xy: 259, 348 + xy: 469, 414 size: 28, 28 orig: 28, 28 offset: 0, 0 index: -1 unit-icon-revenant rotate: false - xy: 259, 348 + xy: 469, 414 size: 28, 28 orig: 28, 28 offset: 0, 0 index: -1 spirit rotate: false - xy: 173, 49 + xy: 655, 250 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-spirit rotate: false - xy: 173, 49 + xy: 655, 250 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 titan rotate: false - xy: 277, 112 + xy: 566, 324 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 297, 224 + xy: 564, 306 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 artillery-equip rotate: false - xy: 186, 251 + xy: 618, 320 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blaster-equip rotate: false - xy: 826, 403 + xy: 288, 318 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 bomber-equip rotate: false - xy: 840, 403 + xy: 600, 306 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 missiles-equip rotate: false - xy: 840, 403 + xy: 600, 306 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 chain-blaster-equip rotate: false - xy: 854, 403 + xy: 614, 306 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 flakgun-equip rotate: false - xy: 994, 403 + xy: 648, 292 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 flamethrower-equip rotate: false - xy: 1008, 403 + xy: 648, 278 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 heal-blaster-equip rotate: false - xy: 345, 132 + xy: 606, 264 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 131, 49 + xy: 613, 236 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 swarmer-equip rotate: false - xy: 113, 21 + xy: 1006, 447 size: 12, 12 orig: 12, 12 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 205363eea1..83413e6262 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/assets/ui/uiskin.json b/core/assets/ui/uiskin.json index ab630372a6..0cea588242 100644 --- a/core/assets/ui/uiskin.json +++ b/core/assets/ui/uiskin.json @@ -12,51 +12,53 @@ TintedDrawable: { invis: {name: white, color: {r: 0, g: 0, b: 0, a: 0} } loadDim: {name: white, color: {r: 0, g: 0, b: 0, a: 0.8} }, chatfield: {name: white, color: {r: 0, g: 0, b: 0, a: 0.2}}, - clear: {name: white, color: {r: 0.1, g: 0.1, b: 0.1, a: 0.75}}, + dark: {name: white, color: {hex: "#000000ff"}}, none: {name: white, color: {r: 0, g: 0, b: 0, a: 0}}, - clear-over: {name: white, color: { hex: "#ffffff82" }}, - clear-alpha: {name: white, color: { hex: "#ffd37fff" }}, - clear-down: {name: white, color: { hex: "#ffd37fff" }} + flat: {name: white, color: {r: 0.0, g: 0.0, b: 0.0, a: 0.6}}, + flat-over: {name: white, color: { hex: "#ffffff82" }}, + flat-down: {name: white, color: { hex: "#ffd37fff" }} }, ButtonStyle: { default: {down: button-down, up: button }, toggle: {checked: button-down, down: button-down, up: button } }, TextButtonStyle: { - default: {over: button-over, disabled: button, font: default-font, fontColor: white, disabledFontColor: gray, down: button-down, up: button, transition: 0 }, + default: {over: button-over, disabled: button, font: default-font, fontColor: white, disabledFontColor: gray, down: button-down, up: button}, + right: {over: button-right-over, font: default-font, fontColor: white, disabledFontColor: gray, down: button-right-down, up: button-right}, + wave: {font: default-font, fontColor: white, disabledFontColor: gray, up: button-edge-4}, + clear: {over: flat-over, font: default-font, fontColor: white, disabledFontColor: gray, down: pane, up: flat}, discord: {font: default-font, fontColor: white, up: discord-banner}, info: {font: default-font, fontColor: white, up: info-banner}, - clear: {down: clear-down, up: clear, over: clear-over, font: default-font, fontColor: white, disabledFontColor: gray }, - clear-partial: {down: white, up: button-select, over: clear-down, font: default-font, fontColor: white, disabledFontColor: gray }, + clear-partial: {down: white, up: button-select, over: flat-down, font: default-font, fontColor: white, disabledFontColor: gray }, + clear-partial-2: {down: flat-over, up: none, over: flat-over, font: default-font, fontColor: white, disabledFontColor: gray }, empty: {font: default-font}, toggle: {font: default-font, fontColor: white, checked: button-down, down: button-down, up: button, over: button-over, disabled: button, disabledFontColor: gray } }, ImageButtonStyle: { default: {down: button-down, up: button, over: button-over, imageDisabledColor: gray, imageUpColor: white }, + right: {over: button-right-over, down: button-right-down, up: button-right}, empty: { imageDownColor: accent, imageUpColor: white}, emptytoggle: {imageCheckedColor: white, imageDownColor: white, imageUpColor: gray}, static: {up: button }, static-down: {up: button-down }, toggle: {checked: button-down, down: button-down, up: button, imageDisabledColor: gray, imageUpColor: white }, select: {checked: button-select, up: none }, - clear: {down: clear-down, up: clear, over: clear-over}, - clear-partial: {down: clear-down, up: none, over: clear-over}, - clear-toggle: {down: clear-down, checked: clear-down, up: clear, over: clear-over}, - clear-toggle-partial: {down: clear-down, checked: clear-down, up: none, over: clear-over}, + clear: {down: flat-over, up: flat, over: flat-over}, + clear-full: {down: white, up: button-select, over: flat-down}, + clear-partial: {down: flat-down, up: none, over: flat-over}, + clear-toggle: {down: flat-down, checked: flat-down, up: flat, over: flat-over}, + clear-toggle-partial: {down: flat-down, checked: flat-down, up: none, over: flat-over}, }, ScrollPaneStyle: { - default: {background: border, vScroll: scroll, vScrollKnob: scroll-knob-vertical-black}, - horizontal: {background: border, vScroll: scroll, vScrollKnob: scroll-knob-vertical, hScroll: scroll-horizontal, hScrollKnob: scroll-knob-horizontal}, - volume: {background: button, vScroll: scroll, vScrollKnob: scroll-knob-vertical-black}, - clear: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black}, - clear-black: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black} + default: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black}, + horizontal: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black, hScroll: scroll-horizontal, hScrollKnob: scroll-knob-horizontal-black}, }, WindowStyle: { default: {titleFont: default-font, titleFontColor: accent }, dialog: {stageBackground: dialogDim, titleFont: default-font, background: window-empty, titleFontColor: accent } }, KeybindDialogStyle: { - default: {keyColor: accent, keyNameColor: white, controllerColor: lightgray, paneStyle: clear}, + default: {keyColor: accent, keyNameColor: white, controllerColor: lightgray}, }, SliderStyle: { default-horizontal: {background: slider, knob: slider-knob, knobOver: slider-knob-over, knobDown: slider-knob-down}, @@ -67,8 +69,8 @@ LabelStyle: { small: {font: default-font, fontColor: white } }, TextFieldStyle: { - default: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: button, cursor: cursor, messageFont: default-font, messageFontColor: gray } - textarea: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: textarea, cursor: cursor, messageFont: default-font, messageFontColor: gray } + default: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: underline, cursor: cursor, messageFont: default-font, messageFontColor: gray } + textarea: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: underline, cursor: cursor, messageFont: default-font, messageFontColor: gray } }, CheckBoxStyle: { default: {checkboxOn: check-on, checkboxOff: check-off, checkboxOnOver: check-on-over, checkboxOver: check-over, font: default-font, fontColor: white, disabledFontColor: gray } diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/io/anuke/mindustry/ai/Pathfinder.java index ccb9fc6fc4..0de1e8c7cd 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfinder.java +++ b/core/src/io/anuke/mindustry/ai/Pathfinder.java @@ -45,7 +45,7 @@ public class Pathfinder{ } public void update(){ - if(Net.client()) return; + if(Net.client() || paths == null) return; for(Team team : Team.all){ if(state.teams.isActive(team)){ diff --git a/core/src/io/anuke/mindustry/ai/WaveSpawner.java b/core/src/io/anuke/mindustry/ai/WaveSpawner.java index 44c39e1b59..a75eed644d 100644 --- a/core/src/io/anuke/mindustry/ai/WaveSpawner.java +++ b/core/src/io/anuke/mindustry/ai/WaveSpawner.java @@ -10,9 +10,9 @@ import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Waves; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Events; -import io.anuke.ucore.util.Structs; import io.anuke.ucore.util.GridBits; import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Structs; import java.io.DataInput; import java.io.DataOutput; diff --git a/core/src/io/anuke/mindustry/content/AmmoTypes.java b/core/src/io/anuke/mindustry/content/AmmoTypes.java index 6420c70daa..cd96e8344b 100644 --- a/core/src/io/anuke/mindustry/content/AmmoTypes.java +++ b/core/src/io/anuke/mindustry/content/AmmoTypes.java @@ -14,7 +14,7 @@ public class AmmoTypes implements ContentList{ bulletDenseBig, bulletPyratiteBig, bulletThoriumBig, shock, bombExplosive, bombIncendiary, bombOil, shellCarbide, flamerThermite, weaponMissile, weaponMissileSwarm, bulletMech, healBlaster, bulletGlaive, - /*flakCopper, */flakExplosive, flakPlastic, flakSurge, + flakExplosive, flakPlastic, flakSurge, missileExplosive, missileIncindiary, missileSurge, artilleryDense, artilleryPlastic, artilleryHoming, artilleryIncindiary, artilleryExplosive, unitArtillery, basicFlame, lancerLaser, lightning, meltdownLaser, burstLaser, diff --git a/core/src/io/anuke/mindustry/content/UnitTypes.java b/core/src/io/anuke/mindustry/content/UnitTypes.java index 16f630433c..8029f0ac00 100644 --- a/core/src/io/anuke/mindustry/content/UnitTypes.java +++ b/core/src/io/anuke/mindustry/content/UnitTypes.java @@ -43,7 +43,6 @@ public class UnitTypes implements ContentList{ speed = 0.2f; maxVelocity = 0.8f; range = 50f; - healSpeed = 0.22f; health = 60; }}; @@ -115,6 +114,7 @@ public class UnitTypes implements ContentList{ }}; phantom = new UnitType("phantom", Phantom.class, Phantom::new){{ + weapon = Weapons.healBlasterDrone2; isFlying = true; drag = 0.01f; mass = 2f; @@ -125,7 +125,6 @@ public class UnitTypes implements ContentList{ health = 220; buildPower = 0.9f; minePower = 1.1f; - healSpeed = 0.5f; toMine = ObjectSet.with(Items.lead, Items.copper, Items.titanium); }}; } diff --git a/core/src/io/anuke/mindustry/content/Weapons.java b/core/src/io/anuke/mindustry/content/Weapons.java index 6875f4d392..bc77a1e784 100644 --- a/core/src/io/anuke/mindustry/content/Weapons.java +++ b/core/src/io/anuke/mindustry/content/Weapons.java @@ -8,7 +8,7 @@ import io.anuke.mindustry.type.Weapon; public class Weapons implements ContentList{ public static Weapon blaster, blasterSmall, glaiveBlaster, droneBlaster, healBlaster, healBlasterDrone, chainBlaster, shockgun, - sapper, swarmer, bomber, bomberTrident, flakgun, flamethrower, missiles, artillery, laserBurster; + sapper, swarmer, bomber, bomberTrident, flakgun, flamethrower, missiles, artillery, laserBurster, healBlasterDrone2; @Override public void load(){ @@ -179,6 +179,16 @@ public class Weapons implements ContentList{ recoil = 2f; ammo = AmmoTypes.healBlaster; }}; + + healBlasterDrone2 = new Weapon("heal-blaster"){{ + length = 1.5f; + reload = 20f; + width = 0.5f; + roundrobin = true; + ejectEffect = Fx.none; + recoil = 2f; + ammo = AmmoTypes.healBlaster; + }}; } @Override diff --git a/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java b/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java index 6229ee9fb3..86bb512d71 100644 --- a/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/CraftingBlocks.java @@ -135,13 +135,13 @@ public class CraftingBlocks extends BlockList implements ContentList{ melter = new PowerCrafter("melter"){{ health = 200; outputLiquid = Liquids.lava; - outputLiquidAmount = 0.75f; - itemCapacity = 50; + outputLiquidAmount = 1f; + itemCapacity = 20; craftTime = 10f; hasLiquids = hasPower = true; consumes.powerDirect(0.1f); - consumes.item(Items.stone, 2); + consumes.item(Items.stone, 1); }}; separator = new Separator("separator"){{ diff --git a/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java index f1655fb23d..b8643c58b4 100644 --- a/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/DebugBlocks.java @@ -90,8 +90,11 @@ public class DebugBlocks extends BlockList implements ContentList{ @Override public void update(Tile tile){ SorterEntity entity = tile.entity(); + if(entity.sortItem == null) return; + entity.items.set(entity.sortItem, 1); tryDump(tile, entity.sortItem); + entity.items.set(entity.sortItem, 0); } @Override @@ -142,8 +145,8 @@ public class DebugBlocks extends BlockList implements ContentList{ if(!control.unlocks.isUnlocked(items.get(i))) continue; final int f = i; - ImageButton button = cont.addImageButton("liquid-icon-" + items.get(i).name, "toggle", 24, - () -> Call.setLiquidSourceLiquid(null, tile, items.get(f))).size(38, 42).padBottom(-5.1f).group(group).get(); + ImageButton button = cont.addImageButton("liquid-icon-" + items.get(i).name, "clear-toggle", 24, + () -> Call.setLiquidSourceLiquid(null, tile, items.get(f))).size(38).group(group).get(); button.setChecked(entity.source.id == f); if(i % 4 == 3){ diff --git a/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java index dbd70cbeca..5336edede3 100644 --- a/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/PowerBlocks.java @@ -19,8 +19,8 @@ public class PowerBlocks extends BlockList implements ContentList{ }}; thermalGenerator = new LiquidHeatGenerator("thermal-generator"){{ - maxLiquidGenerate = 4f; - powerProduction = 8f; + maxLiquidGenerate = 2f; + powerProduction = 4f; generateEffect = BlockFx.redgeneratespark; size = 2; }}; diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 0db265aa67..465015f230 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -53,7 +53,6 @@ public class Control extends Module{ private Throwable error; public Control(){ - saves = new Saves(); unlocks = new Unlocks(); @@ -373,7 +372,7 @@ public class Control extends Module{ } } - if(Inputs.keyTap("screenshot")){ + if(Inputs.keyTap("screenshot") && !ui.chatfrag.chatOpen()){ renderer.takeMapScreenshot(); } diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 052e31bc8f..0f2028ebea 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -79,7 +79,9 @@ public class NetServer extends Module{ public NetServer(){ Events.on(WorldLoadEvent.class, event -> { - connections.clear(); + if(!headless){ + connections.clear(); + } }); Net.handleServer(Connect.class, (id, connect) -> { @@ -596,14 +598,18 @@ public class NetServer extends Module{ } void sync(){ + try{ //iterate through each player - for(Player player : connections.values()){ + for(int i = 0; i < playerGroup.size(); i ++){ + Player player = playerGroup.all().get(i); + if(player.isLocal) continue; + NetConnection connection = player.con; - if(!connection.isConnected()){ - //player disconnected, ignore them + if(!connection.isConnected() || !connections.containsKey(connection.id)){ + //player disconnected, call d/c event onDisconnect(player); return; } diff --git a/core/src/io/anuke/mindustry/core/Platform.java b/core/src/io/anuke/mindustry/core/Platform.java index 6c184cca81..0064c066c3 100644 --- a/core/src/io/anuke/mindustry/core/Platform.java +++ b/core/src/io/anuke/mindustry/core/Platform.java @@ -32,9 +32,22 @@ public abstract class Platform { dialog.setFillParent(true); dialog.content().top(); dialog.content().defaults().height(65f); + + TextField[] use = {null}; + + dialog.content().addImageButton("icon-copy", "clear", 16*3, () -> use[0].copy()) + .visible(() -> !use[0].getSelection().isEmpty()).width(65f); + + dialog.content().addImageButton("icon-paste", "clear", 16*3, () -> + use[0].paste(Gdx.app.getClipboard().getContents(), false)) + .visible(() -> Gdx.app.getClipboard() != null && Gdx.app.getClipboard().getContents() != null && !Gdx.app.getClipboard().getContents().isEmpty()).width(65f); + TextField to = dialog.content().addField(field.getText(), t-> {}).pad(15).width(250f).get(); to.setMaxLength(maxLength); to.keyDown(Keys.ENTER, () -> dialog.content().find("okb").fireClick()); + + use[0] = to; + dialog.content().addButton("$text.ok", () -> { field.clearText(); field.appendText(to.getText()); diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index cf72719411..742a8f8549 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -30,8 +30,8 @@ public class World extends Module{ public final Sectors sectors = new Sectors(); public final WorldGenerator generator = new WorldGenerator(); public final BlockIndexer indexer = new BlockIndexer(); - public final Pathfinder pathfinder = new Pathfinder(); public final WaveSpawner spawner = new WaveSpawner(); + public final Pathfinder pathfinder = new Pathfinder(); private Map currentMap; private Sector currentSector; diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index b36f02f535..12a75b9496 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; @@ -58,7 +59,9 @@ public class MapEditorDialog extends Dialog implements Disposable{ private ButtonGroup blockgroup; public MapEditorDialog(){ - super("$text.mapeditor", "dialog"); + super("", "dialog"); + + background("dark"); editor = new MapEditor(); view = new MapView(editor); @@ -227,6 +230,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ }); } + @Override + protected void drawBackground(Batch batch, float parentAlpha, float x, float y){ + drawDefaultBackground(batch, parentAlpha, x, y); + } + private void save(){ String name = editor.getTags().get("name", ""); @@ -352,7 +360,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ table(cont -> { cont.left(); - cont.table("button", mid -> { + cont.table(mid -> { mid.top(); Table tools = new Table().top(); @@ -360,7 +368,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ ButtonGroup group = new ButtonGroup<>(); Consumer addTool = tool -> { - ImageButton button = new ImageButton("icon-" + tool.name(), "toggle"); + ImageButton button = new ImageButton("icon-" + tool.name(), "clear-toggle"); button.clicked(() -> view.setTool(tool)); button.resizeImage(16 * 2f); button.update(() -> button.setChecked(view.getTool() == tool)); @@ -368,21 +376,21 @@ public class MapEditorDialog extends Dialog implements Disposable{ if(tool == EditorTool.pencil) button.setChecked(true); - tools.add(button).padBottom(-5.1f); + tools.add(button); }; - tools.defaults().size(size, size + 4f).padBottom(-5.1f); + tools.defaults().size(size, size); - tools.addImageButton("icon-menu-large", 16 * 2f, menu::show); + tools.addImageButton("icon-menu-large", "clear", 16 * 2f, menu::show); - ImageButton grid = tools.addImageButton("icon-grid", "toggle", 16 * 2f, () -> view.setGrid(!view.isGrid())).get(); + ImageButton grid = tools.addImageButton("icon-grid", "clear-toggle", 16 * 2f, () -> view.setGrid(!view.isGrid())).get(); addTool.accept(EditorTool.zoom); tools.row(); - ImageButton undo = tools.addImageButton("icon-undo", 16 * 2f, () -> view.undo()).get(); - ImageButton redo = tools.addImageButton("icon-redo", 16 * 2f, () -> view.redo()).get(); + ImageButton undo = tools.addImageButton("icon-undo", "clear", 16 * 2f, () -> view.undo()).get(); + ImageButton redo = tools.addImageButton("icon-redo", "clear", 16 * 2f, () -> view.redo()).get(); addTool.accept(EditorTool.pick); @@ -404,7 +412,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ addTool.accept(EditorTool.fill); addTool.accept(EditorTool.elevation); - ImageButton rotate = tools.addImageButton("icon-arrow-16", 16 * 2f, () -> editor.setDrawRotation((editor.getDrawRotation() + 1) % 4)).get(); + ImageButton rotate = tools.addImageButton("icon-arrow-16", "clear", 16 * 2f, () -> editor.setDrawRotation((editor.getDrawRotation() + 1) % 4)).get(); rotate.getImage().update(() -> { rotate.getImage().setRotation(editor.getDrawRotation() * 90); rotate.getImage().setOrigin(Align.center); @@ -412,8 +420,8 @@ public class MapEditorDialog extends Dialog implements Disposable{ tools.row(); - tools.table("button", t -> t.add("$text.editor.teams")) - .colspan(3).height(40).width(size * 3f); + tools.table("underline", t -> t.add("$text.editor.teams")) + .colspan(3).height(40).width(size * 3f).padBottom(3); tools.row(); @@ -422,14 +430,14 @@ public class MapEditorDialog extends Dialog implements Disposable{ int i = 0; for(Team team : Team.all){ - ImageButton button = new ImageButton("white", "toggle"); - button.margin(4f, 4f, 10f, 4f); + ImageButton button = new ImageButton("white", "clear-toggle-partial"); + button.margin(4f); button.getImageCell().grow(); button.getStyle().imageUpColor = team.color; button.clicked(() -> editor.setDrawTeam(team)); button.update(() -> button.setChecked(editor.getDrawTeam() == team)); teamgroup.add(button); - tools.add(button).padBottom(-5.1f); + tools.add(button); if(i++ % 3 == 2) tools.row(); } @@ -438,7 +446,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ mid.row(); - mid.table("button", t -> { + mid.table("underline", t -> { Slider slider = new Slider(0, MapEditor.brushSizes.length - 1, 1, false); slider.moved(f -> editor.setBrushSize(MapEditor.brushSizes[(int) (float) f])); @@ -450,28 +458,27 @@ public class MapEditorDialog extends Dialog implements Disposable{ mid.row(); - mid.table("button", t -> t.add("$text.editor.elevation")) + mid.table("underline", t -> t.add("$text.editor.elevation")) .colspan(3).height(40).width(size * 3f); mid.row(); - mid.table("button", t -> { + mid.table("underline", t -> { t.margin(0); - t.addImageButton("icon-arrow-left", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() - 1)) + t.addImageButton("icon-arrow-left", "clear-partial", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() - 1)) .disabled(b -> editor.getDrawElevation() <= -1).size(size); t.label(() -> editor.getDrawElevation() == -1 ? "$text.editor.slope" : (editor.getDrawElevation() + "")) .size(size).get().setAlignment(Align.center, Align.center); - t.addImageButton("icon-arrow-right", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() + 1)) + t.addImageButton("icon-arrow-right", "clear-partial", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() + 1)) .disabled(b -> editor.getDrawElevation() >= 63).size(size); - }).colspan(3).height(size).padTop(-5).width(size * 3f); + }).colspan(3).height(size).width(size * 3f); }).margin(0).left().growY(); - cont.table("button", t -> t.add(view).grow()) - .margin(5).marginBottom(10).grow(); + cont.table(t -> t.add(view).grow()).grow(); cont.table(this::addBlockSelection).right().growY(); @@ -525,7 +532,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ private void addBlockSelection(Table table){ Table content = new Table(); - pane = new ScrollPane(content, "volume"); + pane = new ScrollPane(content); pane.setFadeScrollBars(false); pane.setOverscroll(true, false); ButtonGroup group = new ButtonGroup<>(); @@ -552,7 +559,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ stack.add(new Image(region)); } - ImageButton button = new ImageButton("white", "toggle"); + ImageButton button = new ImageButton("white", "clear-toggle"); button.clicked(() -> editor.setDrawBlock(block)); button.resizeImage(8 * 4f); button.getImageCell().setActor(stack); @@ -560,7 +567,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ button.getImage().remove(); button.update(() -> button.setChecked(editor.getDrawBlock() == block)); group.add(button); - content.add(button).pad(4f).size(53f, 58f); + content.add(button).size(60f); if(i++ % 3 == 2){ content.row(); @@ -569,9 +576,7 @@ public class MapEditorDialog extends Dialog implements Disposable{ group.getButtons().get(2).setChecked(true); - Table extra = new Table("button"); - extra.labelWrap(() -> editor.getDrawBlock().formalName).width(220f).center(); - table.add(extra).growX(); + table.table("underline", extra -> extra.labelWrap(() -> editor.getDrawBlock().formalName).width(220f).center()).growX(); table.row(); table.add(pane).growY().fillX(); } diff --git a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java index 2c44d6befe..c819cd0a3a 100644 --- a/core/src/io/anuke/mindustry/editor/MapLoadDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapLoadDialog.java @@ -4,11 +4,9 @@ import com.badlogic.gdx.utils.Scaling; import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.ui.BorderImage; import io.anuke.mindustry.ui.dialogs.FloatingDialog; -import io.anuke.ucore.core.Core; import io.anuke.ucore.function.Consumer; import io.anuke.ucore.scene.ui.ButtonGroup; import io.anuke.ucore.scene.ui.ScrollPane; -import io.anuke.ucore.scene.ui.ScrollPane.ScrollPaneStyle; import io.anuke.ucore.scene.ui.TextButton; import io.anuke.ucore.scene.ui.layout.Table; @@ -69,7 +67,6 @@ public class MapLoadDialog extends FloatingDialog{ } if(world.maps.all().size == 0){ - pane.setStyle(Core.skin.get("clear", ScrollPaneStyle.class)); table.add("$text.maps.none").center(); }else{ content().add("$text.editor.loadmap"); diff --git a/core/src/io/anuke/mindustry/editor/MapRenderer.java b/core/src/io/anuke/mindustry/editor/MapRenderer.java index b08789e092..bd4b7b8f43 100644 --- a/core/src/io/anuke/mindustry/editor/MapRenderer.java +++ b/core/src/io/anuke/mindustry/editor/MapRenderer.java @@ -74,6 +74,11 @@ public class MapRenderer implements Disposable{ for(int y = 0; y < chunks[0].length; y++){ IndexedRenderer mesh = chunks[x][y]; + if(mesh == null){ + chunks[x][y] = new IndexedRenderer(chunksize * chunksize * 2); + mesh = chunks[x][y]; + } + mesh.getTransformMatrix().setToTranslation(tx, ty, 0).scl(tw / (width * tilesize), th / (height * tilesize), 1f); mesh.setProjectionMatrix(Core.batch.getProjectionMatrix()); diff --git a/core/src/io/anuke/mindustry/editor/MapView.java b/core/src/io/anuke/mindustry/editor/MapView.java index fca223c3fe..baa0edca5c 100644 --- a/core/src/io/anuke/mindustry/editor/MapView.java +++ b/core/src/io/anuke/mindustry/editor/MapView.java @@ -270,8 +270,8 @@ public class MapView extends Element implements GestureListener{ Graphics.beginClip(x, y, width, height); - Draw.color(Color.LIGHT_GRAY); - Lines.stroke(-2f); + Draw.color(Palette.remove); + Lines.stroke(2f); Lines.rect(centerx - sclwidth / 2 - 1, centery - sclheight / 2 - 1, sclwidth + 2, sclheight + 2); editor.renderer().draw(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight); Draw.reset(); diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java index 7b25c12348..4cd9cf0f0f 100644 --- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.entities.traits; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Queue; import io.anuke.mindustry.Vars; @@ -229,7 +230,7 @@ public interface BuilderTrait extends Entity{ } if(!current.initialized){ - Events.fire(new BuildSelectEvent(tile, unit.getTeam(), this, current.breaking)); + Gdx.app.postRunnable(() -> Events.fire(new BuildSelectEvent(tile, unit.getTeam(), this, current.breaking))); current.initialized = true; } } diff --git a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java index b9fe70456b..c36a07bc5a 100644 --- a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java @@ -97,7 +97,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ } public boolean isCommanded(){ - return !isWave && world.indexer.getAllied(team, BlockFlag.comandCenter).size != 0; + return !isWave && world.indexer.getAllied(team, BlockFlag.comandCenter).size != 0 && world.indexer.getAllied(team, BlockFlag.comandCenter).first().entity instanceof CommandCenterEntity; } public UnitCommand getCommand(){ diff --git a/core/src/io/anuke/mindustry/entities/units/UnitType.java b/core/src/io/anuke/mindustry/entities/units/UnitType.java index 6cae81a48f..c18928262b 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitType.java @@ -41,7 +41,7 @@ public class UnitType extends UnlockableContent{ public float carryWeight = 1f; public int itemCapacity = 30; public ObjectSet toMine = ObjectSet.with(Items.lead, Items.copper); - public float buildPower = 0.3f, minePower = 0.7f, healSpeed = 2f; + public float buildPower = 0.3f, minePower = 0.7f; public Weapon weapon = Weapons.blaster; public float weaponOffsetX, weaponOffsetY; public Color trailColor = Color.valueOf("ffa665"); diff --git a/core/src/io/anuke/mindustry/game/Unlocks.java b/core/src/io/anuke/mindustry/game/Unlocks.java index ff2853f59b..7b624263b9 100644 --- a/core/src/io/anuke/mindustry/game/Unlocks.java +++ b/core/src/io/anuke/mindustry/game/Unlocks.java @@ -1,8 +1,6 @@ package io.anuke.mindustry.game; -import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; -import com.badlogic.gdx.utils.ObjectMap.Entry; import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.game.EventType.UnlockEvent; import io.anuke.mindustry.type.ContentType; @@ -67,27 +65,8 @@ public class Unlocks{ save(); } - /**Loads 'legacy' unlocks. Will be removed in final release.*/ - public void tryLoadLegacy(){ - try{ - ObjectMap>> sets = Settings.getObject("content-sets", ObjectMap.class, ObjectMap::new); - for(Entry> entry : sets.get("root").entries()){ - unlocked.put(entry.key, new ObjectSet<>()); - unlocked.get(entry.key).addAll(entry.value); - } - }catch(Throwable t){ - t.printStackTrace(); - } - Settings.prefs().remove("content-sets"); - Settings.save(); - } - public void load(){ unlocked = Settings.getObject("unlockset", ObjectMap.class, ObjectMap::new); - - if(Settings.has("content-sets")){ - tryLoadLegacy(); - } } public void save(){ diff --git a/core/src/io/anuke/mindustry/game/Version.java b/core/src/io/anuke/mindustry/game/Version.java index acc63bcc20..44d4aac4b1 100644 --- a/core/src/io/anuke/mindustry/game/Version.java +++ b/core/src/io/anuke/mindustry/game/Version.java @@ -17,6 +17,8 @@ public class Version{ public static int number; /**Build number, e.g. '43'. set to '-1' for custom builds.*/ public static int build = 0; + /**Revision number. Used for hotfixes. Does not affect server compatibility.*/ + public static int revision = 0; public static void init(){ try{ @@ -28,7 +30,18 @@ public class Version{ type = map.get("type"); number = Integer.parseInt(map.get("number")); modifier = map.get("modifier"); - build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1; + if(map.get("build").contains(".")){ + String[] split = map.get("build").split("\\."); + try{ + build = Integer.parseInt(split[0]); + revision = Integer.parseInt(split[1]); + }catch(Throwable e){ + e.printStackTrace(); + build = -1; + } + }else{ + build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1; + } }catch(IOException e){ throw new RuntimeException(e); } diff --git a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java index 51d65dfbb8..c1ece11c93 100644 --- a/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/OverlayRenderer.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.graphics; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.MathUtils; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.blocks.Blocks; @@ -12,16 +13,21 @@ import io.anuke.mindustry.input.InputHandler; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.meta.BlockBar; +import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Graphics; +import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Fill; import io.anuke.ucore.graphics.Lines; import io.anuke.ucore.util.Mathf; +import io.anuke.ucore.util.Tmp; import static io.anuke.mindustry.Vars.*; public class OverlayRenderer{ + private static final float indicatorLength = 14f; + private static final Rectangle rect = new Rectangle(); private float buildFadeTime; public void drawBottom(){ @@ -45,6 +51,21 @@ public class OverlayRenderer{ public void drawTop(){ + for(Player player : playerGroup.all()){ + if(Settings.getBool("indicators") && player != players[0] && player.getTeam() == players[0].getTeam()){ + if(!rect.setSize(Core.camera.viewportWidth * Core.camera.zoom * 0.9f, Core.camera.viewportHeight * Core.camera.zoom * 0.9f) + .setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x, player.y)){ + + Tmp.v1.set(player.x, player.y).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength); + + Draw.color(player.getTeam().color); + Lines.stroke(2f); + Lines.lineAngle(Core.camera.position.x + Tmp.v1.x, Core.camera.position.y + Tmp.v1.y, Tmp.v1.angle(), 4f); + Draw.reset(); + } + } + } + for(Player player : players){ if(player.isDead()) continue; //dead players don't draw diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index ea26deb6b0..6187b738d9 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -45,6 +45,7 @@ public class MobileInput extends InputHandler implements GestureListener{ //gesture data private Vector2 vector = new Vector2(); + private boolean canPan; private boolean zoomed = false; /** Set of completed guides. */ private ObjectSet guides = new ObjectSet<>(); @@ -241,8 +242,10 @@ public class MobileInput extends InputHandler implements GestureListener{ if(tile != null){ if(!request.remove){ rotation = request.rotation; + Recipe before = recipe; recipe = request.recipe; tryPlaceBlock(tile.x, tile.y); + recipe = before; }else{ tryBreakBlock(tile.x, tile.y); } @@ -650,7 +653,7 @@ public class MobileInput extends InputHandler implements GestureListener{ @Override public boolean pan(float x, float y, float deltaX, float deltaY){ - if(ui.hasMouse()) return false; + if(!canPan) return false; //can't pan in line mode with one finger or while dropping items! if((lineMode && !Gdx.input.isTouched(1)) || droppingItem){ @@ -704,6 +707,7 @@ public class MobileInput extends InputHandler implements GestureListener{ @Override public boolean touchDown(float x, float y, int pointer, int button){ + canPan = !ui.hasMouse(); return false; } diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index bdf55a0888..0e152cb18e 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -356,13 +356,12 @@ public class Net{ Gdx.net.sendHttpRequest(req, new HttpResponseListener(){ @Override public void handleHttpResponse(HttpResponse httpResponse){ - String result = httpResponse.getResultAsString(); - Gdx.app.postRunnable(() -> listener.accept(result)); + listener.accept(httpResponse.getResultAsString()); } @Override public void failed(Throwable t){ - Gdx.app.postRunnable(() -> failure.accept(t)); + failure.accept(t); } @Override diff --git a/core/src/io/anuke/mindustry/net/NetworkIO.java b/core/src/io/anuke/mindustry/net/NetworkIO.java index 6e7687948e..3adc617b51 100644 --- a/core/src/io/anuke/mindustry/net/NetworkIO.java +++ b/core/src/io/anuke/mindustry/net/NetworkIO.java @@ -298,7 +298,7 @@ public class NetworkIO{ int maxlen = 32; String host = (headless ? "Server" : players[0].name); - String map = world.getMap().name; + String map = world.getMap() == null ? "None" : world.getMap().name; host = host.substring(0, Math.min(host.length(), maxlen)); map = map.substring(0, Math.min(map.length(), maxlen)); diff --git a/core/src/io/anuke/mindustry/ui/MenuButton.java b/core/src/io/anuke/mindustry/ui/MenuButton.java index 3f84649a93..7dd3d16cd1 100644 --- a/core/src/io/anuke/mindustry/ui/MenuButton.java +++ b/core/src/io/anuke/mindustry/ui/MenuButton.java @@ -22,7 +22,7 @@ public class MenuButton extends TextButton{ table(t -> { t.addImage(icon).size(14 * 3); - t.update(() -> t.setBackground(getClickListener().isOver() || getClickListener().isVisualPressed() ? "button-over" : "button")); + t.update(() -> t.setBackground(getClickListener().isVisualPressed() ? "button-down" : getClickListener().isOver() ? "button-over" : "button")); }).size(s - 5, s); diff --git a/core/src/io/anuke/mindustry/ui/Minimap.java b/core/src/io/anuke/mindustry/ui/Minimap.java index 3ee65de5e3..69be4be5b4 100644 --- a/core/src/io/anuke/mindustry/ui/Minimap.java +++ b/core/src/io/anuke/mindustry/ui/Minimap.java @@ -16,10 +16,9 @@ import static io.anuke.mindustry.Vars.*; public class Minimap extends Table{ public Minimap(){ - super("button"); + super("pane"); margin(5); - marginBottom(10); TextureRegion r = new TextureRegion(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java index 3b27bcc252..4cfa262779 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java @@ -42,14 +42,14 @@ public class AboutDialog extends FloatingDialog{ float w = UIUtils.portrait() ? 330f : 600f; Table in = new Table(); - ScrollPane pane = new ScrollPane(in, "clear"); + ScrollPane pane = new ScrollPane(in); for(LinkEntry link : Links.getLinks()){ if((ios || OS.isMac) && bannedItems.contains(link.name)){ //because Apple doesn't like me mentioning things continue; } - Table table = new Table("button"); + Table table = new Table("underline-2"); table.margin(0); table.table(img -> { img.addImage("white").height(h - 5).width(40f).color(link.color); @@ -58,7 +58,7 @@ public class AboutDialog extends FloatingDialog{ }).expandY(); table.table(i -> { - i.background("button"); + i.background("button-edge-3"); i.addImage("icon-" + link.name).size(14 * 3f); }).size(h - 5, h); @@ -108,7 +108,7 @@ public class AboutDialog extends FloatingDialog{ dialog.content().row(); dialog.content().add("$text.contributors"); dialog.content().row(); - dialog.content().pane("clear", new Table(){{ + dialog.content().pane(new Table(){{ int i = 0; left(); for(Contributor c : contributors){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java index c2917a0654..31496a5e3a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java @@ -24,7 +24,7 @@ public class AdminsDialog extends FloatingDialog{ Table table = new Table(); - ScrollPane pane = new ScrollPane(table, "clear"); + ScrollPane pane = new ScrollPane(table); pane.setFadeScrollBars(false); if(netServer.admins.getAdmins().size == 0){ @@ -41,17 +41,10 @@ public class AdminsDialog extends FloatingDialog{ ui.showConfirm("$text.confirm", "$text.confirmunadmin", () -> { netServer.admins.unAdminPlayer(info.id); playerGroup.forEach(player -> { - if(player.uuid.equals(info.id)){ + if(player != null && player.uuid != null && player.uuid.equals(info.id)){ player.isAdmin = false; } }); - /* - for(Player player : playerGroup.all()){ - if(player.con != null){ - player.isAdmin = false; - break; - } - }*/ setup(); }); }).size(h).pad(-14f); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java index 9045c6e7cc..1a3d8369d7 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java @@ -25,7 +25,7 @@ public class BansDialog extends FloatingDialog{ Table table = new Table(); - ScrollPane pane = new ScrollPane(table, "clear"); + ScrollPane pane = new ScrollPane(table); pane.setFadeScrollBars(false); if(netServer.admins.getBanned().size == 0){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java index 57c992baea..9d2e094eb1 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ChangelogDialog.java @@ -38,7 +38,7 @@ public class ChangelogDialog extends FloatingDialog{ void setup(){ Table table = new Table(); - ScrollPane pane = new ScrollPane(table, "clear"); + ScrollPane pane = new ScrollPane(table); content().clear(); content().add(pane).grow(); @@ -60,7 +60,7 @@ public class ChangelogDialog extends FloatingDialog{ desc = desc.replace("Android", "Mobile"); - Table in = new Table("clear"); + Table in = new Table("underline"); in.top().left().margin(10); in.add("[accent]" + info.name + "[LIGHT_GRAY] | " + info.date); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java index 5a06b32a73..a9c282b065 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ColorPickDialog.java @@ -25,10 +25,10 @@ public class ColorPickDialog extends Dialog{ for(int i = 0; i < playerColors.length; i++){ Color color = playerColors[i]; - ImageButton button = table.addImageButton("white", "toggle", 34, () -> { + ImageButton button = table.addImageButton("white", "clear-toggle", 34, () -> { cons.accept(color); hide(); - }).size(44, 48).pad(0).padBottom(-5.1f).get(); + }).size(48).get(); button.setChecked(players[0].color.equals(color)); button.getStyle().imageUpColor = color; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/ContentInfoDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/ContentInfoDialog.java index fe791c4030..50a2f4cf78 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/ContentInfoDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/ContentInfoDialog.java @@ -20,7 +20,7 @@ public class ContentInfoDialog extends FloatingDialog{ content.displayInfo(table); - ScrollPane pane = new ScrollPane(table, "clear-black"); + ScrollPane pane = new ScrollPane(table); content().add(pane); show(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java index 220d0fad6f..1a5f218489 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java @@ -23,7 +23,7 @@ import static io.anuke.mindustry.Vars.*; public class CustomGameDialog extends FloatingDialog{ public CustomGameDialog(){ - super("$text.level.select"); + super("$text.customgame"); addCloseButton(); shown(this::setup); @@ -35,7 +35,7 @@ public class CustomGameDialog extends FloatingDialog{ Table maps = new Table(); maps.marginRight(14); - ScrollPane pane = new ScrollPane(maps, "clear-black"); + ScrollPane pane = new ScrollPane(maps); pane.setFadeScrollBars(false); int maxwidth = (Gdx.graphics.getHeight() > Gdx.graphics.getHeight() ? 2 : 4); @@ -52,7 +52,7 @@ public class CustomGameDialog extends FloatingDialog{ if(mode.hidden) continue; modes.addButton("$mode." + mode.name() + ".name", "toggle", () -> state.mode = mode) - .update(b -> b.setChecked(state.mode == mode)).group(group).size(140f, 54f).padBottom(-5); + .update(b -> b.setChecked(state.mode == mode)).group(group).size(140f, 54f); if(i++ % 2 == 1) modes.row(); } selmode.add(modes); @@ -139,7 +139,7 @@ public class CustomGameDialog extends FloatingDialog{ d.setFillParent(false); Table table = new Table(); table.defaults().pad(1f); - ScrollPane pane = new ScrollPane(table, "clear"); + ScrollPane pane = new ScrollPane(table); pane.setFadeScrollBars(false); table.row(); for(GameMode mode : GameMode.values()){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java index 2c9bf76d3b..b896ec75fd 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java @@ -34,13 +34,13 @@ public class HostDialog extends FloatingDialog{ ui.listfrag.rebuild(); }).grow().pad(8).get().setMaxLength(40); - ImageButton button = t.addImageButton("white", 40, () -> { + ImageButton button = t.addImageButton("white", "clear-full", 40, () -> { new ColorPickDialog().show(color -> { player.color.set(color); Settings.putInt("color-0", Color.rgba8888(color)); Settings.save(); }); - }).size(50f, 54f).get(); + }).size(54f).get(); button.update(() -> button.getStyle().imageUpColor = player.color); }).width(w).height(70f).pad(4).colspan(3); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java index d844d18c5d..5e611b762f 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java @@ -100,7 +100,7 @@ public class JoinDialog extends FloatingDialog{ if(!buttons[0].childrenPressed()){ connect(server.ip, server.port); } - }).width(targetWidth()).height(150f).pad(4f).get(); + }).width(targetWidth()).height(155f).pad(4f).get(); button.getLabel().setWrap(true); @@ -156,10 +156,10 @@ public class JoinDialog extends FloatingDialog{ versionString = Bundles.get("text.server.outdated"); }else if(host.version < Version.build && Version.build != -1){ versionString = Bundles.get("text.server.outdated") + "\n" + - Bundles.format("text.server.version", host.version); + Bundles.format("text.server.version", host.version, ""); }else if(host.version > Version.build && Version.build != -1){ versionString = Bundles.get("text.server.outdated.client") + "\n" + - Bundles.format("text.server.version", host.version); + Bundles.format("text.server.version", host.version, ""); }else{ versionString = Bundles.format("text.server.version", host.version, host.versionType); } @@ -194,7 +194,7 @@ public class JoinDialog extends FloatingDialog{ hosts.row(); hosts.add(local).width(w); - ScrollPane pane = new ScrollPane(hosts, "clear"); + ScrollPane pane = new ScrollPane(hosts); pane.setFadeScrollBars(false); pane.setScrollingDisabled(true, false); @@ -210,19 +210,19 @@ public class JoinDialog extends FloatingDialog{ Settings.save(); }).grow().pad(8).get().setMaxLength(maxNameLength); - ImageButton button = t.addImageButton("white", 40, () -> { + ImageButton button = t.addImageButton("white", "clear-full", 40, () -> { new ColorPickDialog().show(color -> { player.color.set(color); Settings.putInt("color-0", Color.rgba8888(color)); Settings.save(); }); - }).size(50f, 54f).get(); + }).size(54f).get(); button.update(() -> button.getStyle().imageUpColor = player.color); }).width(w).height(70f).pad(4); content().row(); content().add(pane).width(w + 38).pad(0); content().row(); - content().addCenteredImageTextButton("$text.server.add", "icon-add", "clear", 14 * 3, () -> { + content().addCenteredImageTextButton("$text.server.add", "icon-add", 14 * 3, () -> { renaming = null; add.show(); }).marginLeft(6).width(w).height(80f).update(button -> { @@ -258,7 +258,7 @@ public class JoinDialog extends FloatingDialog{ local.background("button"); local.add("$text.hosts.none").pad(10f); local.add().growX(); - local.addImageButton("icon-loading", 16 * 2f, this::refreshLocal).pad(-10f).padLeft(0).padTop(-6).size(70f, 74f); + local.addImageButton("icon-loading", 16 * 2f, this::refreshLocal).pad(-12f).padLeft(0).size(70f); }else{ local.background((Drawable) null); } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java index ee4ea6397c..a7a05f4433 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java @@ -24,7 +24,7 @@ public class LanguageDialog extends FloatingDialog{ private void setup(){ Table langs = new Table(); langs.marginRight(24f).marginLeft(24f); - ScrollPane pane = new ScrollPane(langs, "clear"); + ScrollPane pane = new ScrollPane(langs); pane.setFadeScrollBars(false); ButtonGroup group = new ButtonGroup<>(); @@ -38,7 +38,7 @@ public class LanguageDialog extends FloatingDialog{ Log.info("Setting locale: {0}", loc.toString()); ui.showInfo("$text.language.restart"); }); - langs.add(button).group(group).update(t -> t.setChecked(loc.equals(getLocale()))).size(400f, 50f).row(); + langs.add(button).group(group).update(t -> t.setChecked(loc.equals(getLocale()))).size(400f, 50f).pad(2).row(); } content().add(pane); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index 8452cab889..facfcab706 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -45,7 +45,7 @@ public class LoadDialog extends FloatingDialog{ content().clear(); slots = new Table(); - pane = new ScrollPane(slots, "clear-black"); + pane = new ScrollPane(slots); pane.setFadeScrollBars(false); pane.setScrollingDisabled(true, false); @@ -146,7 +146,7 @@ public class LoadDialog extends FloatingDialog{ if(!valids){ slots.row(); - slots.addButton("$text.save.none", "clear", () -> { + slots.addButton("$text.save.none", () -> { }).disabled(true).fillX().margin(20f).minWidth(340f).height(80f).pad(4f); } @@ -154,7 +154,7 @@ public class LoadDialog extends FloatingDialog{ if(ios) return; - slots.addImageTextButton("$text.save.import", "icon-add", "clear", 14 * 3, () -> { + slots.addImageTextButton("$text.save.import", "icon-add", 14 * 3, () -> { Platform.instance.showFileChooser(Bundles.get("text.save.import"), "Mindustry Save", file -> { if(SaveIO.isSaveValid(file)){ try{ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java index 8308424f10..bed08f9954 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/MapsDialog.java @@ -4,8 +4,8 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Scaling; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.Platform; -import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.io.MapIO; +import io.anuke.mindustry.maps.Map; import io.anuke.mindustry.maps.MapMeta; import io.anuke.mindustry.maps.MapTileData; import io.anuke.mindustry.ui.BorderImage; @@ -73,7 +73,7 @@ public class MapsDialog extends FloatingDialog{ Table maps = new Table(); maps.marginRight(24); - ScrollPane pane = new ScrollPane(maps, "clear-black"); + ScrollPane pane = new ScrollPane(maps); pane.setFadeScrollBars(false); int maxwidth = 4; @@ -88,7 +88,7 @@ public class MapsDialog extends FloatingDialog{ TextButton button = maps.addButton("", "clear", () -> showMapInfo(map)).width(mapsize).pad(8).get(); button.clearChildren(); - button.margin(6); + button.margin(9); button.add(map.meta.tags.get("name", map.name)).growX().center().get().setEllipsis(true); button.row(); button.addImage("white").growX().pad(4).color(Color.GRAY); @@ -116,12 +116,12 @@ public class MapsDialog extends FloatingDialog{ table.stack(new Image(map.texture).setScaling(Scaling.fit), new BorderImage(map.texture).setScaling(Scaling.fit)).size(mapsize); - table.table("clear", desc -> { + table.table("flat", desc -> { desc.top(); Table t = new Table(); t.margin(6); - ScrollPane pane = new ScrollPane(t, "clear-black"); + ScrollPane pane = new ScrollPane(t); desc.add(pane).grow(); t.top(); @@ -146,7 +146,7 @@ public class MapsDialog extends FloatingDialog{ table.row(); - table.addImageTextButton("$text.editor.openin", "icon-load-map", "clear", 16 * 2, () -> { + table.addImageTextButton("$text.editor.openin", "icon-load-map", 16 * 2, () -> { try{ Vars.ui.editor.beginEditMap(map.stream.get()); dialog.hide(); @@ -155,15 +155,15 @@ public class MapsDialog extends FloatingDialog{ e.printStackTrace(); ui.showError("$text.error.mapnotfound"); } - }).fillX().height(50f).marginLeft(6); + }).fillX().height(54f).marginLeft(10); - table.addImageTextButton("$text.delete", "icon-trash-16", "clear", 16 * 2, () -> { + table.addImageTextButton("$text.delete", "icon-trash-16", 16 * 2, () -> { ui.showConfirm("$text.confirm", Bundles.format("text.map.delete", map.name), () -> { world.maps.removeMap(map); dialog.hide(); setup(); }); - }).fillX().height(50f).marginLeft(6).disabled(!map.custom).touchable(map.custom ? Touchable.enabled : Touchable.disabled); + }).fillX().height(54f).marginLeft(10).disabled(!map.custom).touchable(map.custom ? Touchable.enabled : Touchable.disabled); dialog.show(); } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index 728e94bae1..fc6b0ad57a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.ui.dialogs; import com.badlogic.gdx.Input.Keys; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.net.Net; +import io.anuke.ucore.scene.style.Drawable; import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Bundles; @@ -29,13 +30,9 @@ public class PausedDialog extends FloatingDialog{ void rebuild(){ missionTable.clear(); - if(world.getSector() != null && !world.getSector().complete){ - missionTable.add("[LIGHT_GRAY]" + Bundles.format("text.mission", "")); - missionTable.row(); - missionTable.table(t -> { - world.getSector().currentMission().display(t); - }); - missionTable.row(); + missionTable.background((Drawable) null); + if(world.getSector() != null){ + missionTable.background("underline"); missionTable.add(Bundles.format("text.sector", world.getSector().x + ", " + world.getSector().y)); } } @@ -47,31 +44,26 @@ public class PausedDialog extends FloatingDialog{ } }); - content().table(t -> missionTable = t).colspan(mobile ? 3 : 1); + content().table(t -> missionTable = t).colspan(mobile ? 3 : 2); content().row(); if(!mobile){ - content().defaults().width(220).height(50); + float dw = 210f; + content().defaults().width(dw).height(50).pad(5f); - content().addButton("$text.back", () -> { - hide(); - }); + content().addButton("$text.back", this::hide).colspan(2).width(dw*2 + 20f); content().row(); content().addButton("$text.unlocks", ui.unlocks::show); - - content().row(); content().addButton("$text.settings", ui.settings::show); content().row(); content().addButton("$text.savegame", save::show).disabled(s -> world.getSector() != null); - - content().row(); content().addButton("$text.loadgame", load::show).disabled(b -> Net.active()); content().row(); - content().addButton("$text.hostserver", ui.host::show).disabled(b -> Net.active()); + content().addButton("$text.hostserver", ui.host::show).disabled(b -> Net.active()).colspan(2).width(dw*2 + 20f); content().row(); @@ -81,7 +73,7 @@ public class PausedDialog extends FloatingDialog{ runExitSave(); hide(); }); - }); + }).colspan(2).width(dw + 10f); }else{ content().defaults().size(120f).pad(5); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java index 05acd4af7a..92ffff5f7a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SaveDialog.java @@ -22,7 +22,7 @@ public class SaveDialog extends LoadDialog{ public void addSetup(){ slots.row(); - slots.addImageTextButton("$text.save.new", "icon-add", "clear", 14 * 3, () -> + slots.addImageTextButton("$text.save.new", "icon-add",14 * 3, () -> ui.showTextInput("$text.save", "$text.save.newslot", "", text -> { ui.loadGraphics("$text.saving", () -> { control.saves.addSave(text); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index a8931f70a7..c088808401 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -95,7 +95,7 @@ public class SettingsMenuDialog extends SettingsDialog{ prefs.clearChildren(); prefs.add(menu); - ScrollPane pane = new ScrollPane(prefs, "clear"); + ScrollPane pane = new ScrollPane(prefs); pane.addCaptureListener(new InputListener(){ @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){ @@ -148,21 +148,21 @@ public class SettingsMenuDialog extends SettingsDialog{ dialog.setFillParent(false); dialog.content().defaults().size(230f, 60f).pad(3); dialog.addCloseButton(); - dialog.content().addButton("$text.settings.clearsectors", "clear", () -> { + dialog.content().addButton("$text.settings.clearsectors", () -> { ui.showConfirm("$text.confirm", "$text.settings.clear.confirm", () -> { world.sectors.clear(); dialog.hide(); }); }); dialog.content().row(); - dialog.content().addButton("$text.settings.clearunlocks", "clear", () -> { + dialog.content().addButton("$text.settings.clearunlocks", () -> { ui.showConfirm("$text.confirm", "$text.settings.clear.confirm", () -> { control.unlocks.reset(); dialog.hide(); }); }); dialog.content().row(); - dialog.content().addButton("$text.settings.clearall", "clear", () -> { + dialog.content().addButton("$text.settings.clearall", () -> { ui.showConfirm("$text.confirm", "$text.settings.clearall.confirm", () -> { Map map = new HashMap<>(); for(String value : Settings.prefs().get().keySet()){ @@ -208,6 +208,7 @@ public class SettingsMenuDialog extends SettingsDialog{ } graphics.checkPref("fps", false); + graphics.checkPref("indicators", true); graphics.checkPref("lasers", true); graphics.checkPref("minimap", !mobile); //minimap is disabled by default on mobile devices } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java index 8b46947740..a1d58ea766 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java @@ -32,7 +32,7 @@ public class UnlocksDialog extends FloatingDialog{ Table table = new Table(); table.margin(20); - ScrollPane pane = new ScrollPane(table, "clear-black"); + ScrollPane pane = new ScrollPane(table); Array[] allContent = content.getContentMap(); @@ -65,9 +65,8 @@ public class UnlocksDialog extends FloatingDialog{ if(control.unlocks.isUnlocked(unlock)){ image.clicked(() -> Vars.ui.content.show(unlock)); - image.addListener(new Tooltip<>(new Table("clear"){{ + image.addListener(new Tooltip<>(new Table("button"){{ add(unlock.localizedName()); - margin(4); }})); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 0aa55b3a29..a0f3694477 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -11,6 +11,7 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.EventType.StateChangeEvent; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Packets.AdminAction; import io.anuke.mindustry.type.Recipe; @@ -23,9 +24,13 @@ import io.anuke.ucore.scene.Element; import io.anuke.ucore.scene.Group; import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.event.Touchable; -import io.anuke.ucore.scene.ui.*; +import io.anuke.ucore.scene.ui.Image; +import io.anuke.ucore.scene.ui.ImageButton; +import io.anuke.ucore.scene.ui.Label; +import io.anuke.ucore.scene.ui.TextButton; import io.anuke.ucore.scene.ui.layout.Stack; import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Mathf; @@ -59,10 +64,10 @@ public class HudFragment extends Fragment{ select.left(); select.defaults().size(dsize).left(); - menu = select.addImageButton("icon-menu", isize, ui.paused::show).get(); - flip = select.addImageButton("icon-arrow-up", isize, this::toggleMenus).get(); + menu = select.addImageButton("icon-menu", "clear", isize, ui.paused::show).get(); + flip = select.addImageButton("icon-arrow-up", "clear", isize, this::toggleMenus).get(); - select.addImageButton("icon-pause", isize, () -> { + select.addImageButton("icon-pause", "clear", isize, () -> { if(Net.active()){ ui.listfrag.toggle(); }else{ @@ -77,7 +82,7 @@ public class HudFragment extends Fragment{ } }).get(); - select.addImageButton("icon-settings", isize, () -> { + select.addImageButton("icon-settings", "clear", isize, () -> { if(Net.active() && mobile){ if(ui.chatfrag.chatOpen()){ ui.chatfrag.hide(); @@ -94,9 +99,13 @@ public class HudFragment extends Fragment{ i.getStyle().imageUp = Core.skin.getDrawable("icon-unlocks"); } }).get(); + + select.addImage("blank").color(Palette.accent).width(6f).fillY(); }); cont.row(); + cont.addImage("blank").height(6f).color(Palette.accent).fillX(); + cont.row(); } cont.update(() -> { @@ -106,7 +115,7 @@ public class HudFragment extends Fragment{ }); Stack stack = new Stack(); - TextButton waves = new TextButton(""); + TextButton waves = new TextButton("", "wave"); Table btable = new Table().margin(0); stack.add(waves); @@ -116,7 +125,7 @@ public class HudFragment extends Fragment{ addWaveTable(waves); addPlayButton(btable); - cont.add(stack).width(dsize * 4); + cont.add(stack).width(dsize * 4 + 6f); cont.row(); @@ -145,12 +154,12 @@ public class HudFragment extends Fragment{ //paused table parent.fill(t -> { t.top().visible(() -> state.is(State.paused) && !Net.active()); - t.table("clear", top -> top.add("$text.paused").pad(6).get().setFontScale(1.5f)); + t.table("button", top -> top.add("$text.paused").pad(6f)); }); parent.fill(t -> { t.visible(() -> netServer.isWaitingForPlayers() && !state.is(State.menu)); - t.table("clear", c -> c.margin(10).add("$text.waiting.players")); + t.table("button", c -> c.add("$text.waiting.players")); }); //'core is under attack' table @@ -188,7 +197,7 @@ public class HudFragment extends Fragment{ return coreAttackOpacity > 0; }); - t.table("clear", top -> top.add("$text.coreattack").pad(6) + t.table("button", top -> top.add("$text.coreattack").pad(2) .update(label -> label.setColor(Hue.mix(Color.ORANGE, Color.SCARLET, Mathf.absin(Timers.time(), 2f, 1f))))); }); @@ -342,7 +351,7 @@ public class HudFragment extends Fragment{ if(shown){ shown = false; blockfrag.toggle(dur, in); - wavetable.actions(Actions.translateBy(0, (wavetable.getHeight() + dsize) - wavetable.getTranslation().y, dur, in)); + wavetable.actions(Actions.translateBy(0, (wavetable.getHeight() + Unit.dp.scl(dsize) + Unit.dp.scl(6)) - wavetable.getTranslation().y, dur, in)); infolabel.actions(Actions.translateBy(0, (wavetable.getHeight()) - wavetable.getTranslation().y, dur, in)); }else{ shown = true; @@ -361,8 +370,6 @@ public class HudFragment extends Fragment{ table.clearChildren(); table.setTouchable(Touchable.enabled); - table.background("button"); - table.labelWrap(() -> world.getSector() == null ? (state.enemies() > 0 && state.mode.disableWaveTimer ? @@ -386,7 +393,7 @@ public class HudFragment extends Fragment{ } private void addPlayButton(Table table){ - table.right().addImageButton("icon-play", 30f, () -> { + table.right().addImageButton("icon-play", "right", 30f, () -> { if(Net.client() && players[0].isAdmin){ Call.onAdminRequest(players[0], AdminAction.wave); }else{ diff --git a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java index b50ff4d6db..7272968b4f 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java @@ -43,7 +43,8 @@ public class MenuFragment extends Fragment{ } //version info - parent.fill(c -> c.bottom().left().add(Strings.formatArgs("Mindustry v{0} {1}-{2} {3}", Version.number, Version.modifier, Version.type, (Version.build == -1 ? "custom build" : "build " + Version.build))) + parent.fill(c -> c.bottom().left().add(Strings.formatArgs("Mindustry v{0} {1}-{2} {3}{4}", Version.number, Version.modifier, Version.type, + (Version.build == -1 ? "custom build" : "build " + Version.build), Version.revision == 0 ? "" : "." + Version.revision)) .visible(() -> state.is(State.menu))); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 6388b3ee28..0ed4a6d9b6 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -106,7 +106,7 @@ public class PlacementFragment extends Fragment{ }; //top table with hover info - frame.table("clear", top -> { + frame.table("button-edge-2", top -> { topTable = top; top.add(new Table()).growX().update(topTable -> { if((tileDisplayBlock() == null && lastDisplay == getSelected()) || @@ -160,16 +160,16 @@ public class PlacementFragment extends Fragment{ topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(190f).padLeft(5); } }); - top.row(); - top.addImage("blank").growX().color(Palette.accent).height(3f); }).colspan(3).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null).touchable(Touchable.enabled); frame.row(); - frame.table("clear", blocksSelect -> { + frame.addImage("blank").color(Palette.accent).colspan(3).height(3*2).growX(); + frame.row(); + frame.table("pane-2", blocksSelect -> { + blocksSelect.margin(4).marginTop(0); blocksSelect.table(blocks -> blockTable = blocks).grow(); blocksSelect.row(); blocksSelect.table(input::buildUI).growX(); }).fillY().bottom().touchable(Touchable.enabled); - frame.addImage("blank").width(3f).fillY().color(Palette.accent); frame.table(categories -> { categories.defaults().size(50f); diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java index 80a96b3ffb..03864af7ca 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java @@ -45,13 +45,13 @@ public class PlayerListFragment extends Fragment{ } }); - cont.table("pane", pane -> { + cont.table("button", pane -> { pane.label(() -> Bundles.format(playerGroup.size() == 1 ? "text.players.single" : "text.players", playerGroup.size())); pane.row(); - pane.pane("clear", content).grow().get().setScrollingDisabled(true, false); + pane.pane(content).grow().get().setScrollingDisabled(true, false); pane.row(); - pane.table("pane", menu -> { + pane.table(menu -> { menu.defaults().growX().height(50f).fillY(); menu.addButton("$text.server.bans", ui.bans::show).disabled(b -> Net.client()); @@ -70,12 +70,14 @@ public class PlayerListFragment extends Fragment{ float h = 74f; + playerGroup.all().sort((p1, p2) -> p1.getTeam().compareTo(p2.getTeam())); + playerGroup.forEach(player -> { NetConnection connection = player.con; if(connection == null && Net.server() && !player.isLocal) return; - Table button = new Table("button"); + Table button = new Table(); button.left(); button.margin(5).marginBottom(10); @@ -102,19 +104,19 @@ public class PlayerListFragment extends Fragment{ if((Net.server() || players[0].isAdmin) && !player.isLocal && (!player.isAdmin || Net.server())){ button.add().growY(); - float bs = (h + 14) / 2f; + float bs = (h) / 2f; button.table(t -> { - t.defaults().size(bs - 1, bs + 3); + t.defaults().size(bs); - t.addImageButton("icon-ban", 14 * 2, - () -> ui.showConfirm("$text.confirm", "$text.confirmban", () -> Call.onAdminRequest(player, AdminAction.ban))).padBottom(-5.1f); - t.addImageButton("icon-cancel", 16 * 2, - () -> ui.showConfirm("$text.confirm", "$text.confirmkick", () -> Call.onAdminRequest(player, AdminAction.kick))).padBottom(-5.1f); + t.addImageButton("icon-ban", "clear-partial", 14 * 2, + () -> ui.showConfirm("$text.confirm", "$text.confirmban", () -> Call.onAdminRequest(player, AdminAction.ban))); + t.addImageButton("icon-cancel", "clear-partial", 16 * 2, + () -> ui.showConfirm("$text.confirm", "$text.confirmkick", () -> Call.onAdminRequest(player, AdminAction.kick))); t.row(); - t.addImageButton("icon-admin", "toggle", 14 * 2, () -> { + t.addImageButton("icon-admin", "clear-toggle", 14 * 2, () -> { if(Net.client()) return; String id = player.uuid; @@ -130,15 +132,15 @@ public class PlayerListFragment extends Fragment{ .touchable(() -> Net.client() ? Touchable.disabled : Touchable.enabled) .checked(player.isAdmin); - t.addImageButton("icon-zoom-small", 14 * 2, () -> ui.showError("Currently unimplemented.")/*Call.onAdminRequest(player, AdminAction.trace)*/); - - }).padRight(12).padTop(-5).padLeft(0).padBottom(-10).size(bs + 10f, bs); - + t.addImageButton("icon-zoom-small", "clear-partial", 14 * 2, () -> ui.showError("Currently unimplemented.")/*Call.onAdminRequest(player, AdminAction.trace)*/); + }).padRight(12).size(bs + 10f, bs); } content.add(button).padBottom(-6).width(350f).maxHeight(h + 14); content.row(); + content.addImage("blank").height(3f).color(state.mode.isPvp ? player.getTeam().color : Palette.accent).growX(); + content.row(); }); content.marginBottom(5); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 4e6caa78d2..4394277321 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -387,10 +387,11 @@ public class Block extends BaseBlock { tempColor.set(Palette.darkFlame); if(hasItems){ + float scaling = inventoryScaling(tile); for(Item item : content.items()){ int amount = tile.entity.items.get(item); - explosiveness += item.explosiveness * amount; - flammability += item.flammability * amount; + explosiveness += item.explosiveness * amount * scaling; + flammability += item.flammability * amount * scaling; if(item.flammability * amount > 0.5){ units++; @@ -416,7 +417,7 @@ public class Block extends BaseBlock { float splash = Mathf.clamp(amount / 4f, 0f, 10f); for(int i = 0; i < Mathf.clamp(amount / 5, 0, 30); i++){ - Timers.run(i / 2, () -> { + Timers.run(i / 2f, () -> { Tile other = world.tile(tile.x + Mathf.range(size / 2), tile.y + Mathf.range(size / 2)); if(other != null){ Puddle.deposit(other, liquid, splash); @@ -432,6 +433,11 @@ public class Block extends BaseBlock { } } + /**Returns scaled # of inventories in this block.*/ + public float inventoryScaling(Tile tile){ + return 1f; + } + /** * Returns the flammability of the tile. Used for fire calculations. * Takes flammability of floor liquid into account. diff --git a/core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java b/core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java index d54b112439..8d31879965 100644 --- a/core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java +++ b/core/src/io/anuke/mindustry/world/blocks/SelectionTrait.java @@ -4,43 +4,32 @@ import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.type.Item; import io.anuke.ucore.function.Consumer; import io.anuke.ucore.function.Supplier; -import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.scene.style.TextureRegionDrawable; import io.anuke.ucore.scene.ui.ButtonGroup; import io.anuke.ucore.scene.ui.ImageButton; import io.anuke.ucore.scene.ui.layout.Table; -import static io.anuke.mindustry.Vars.*; +import static io.anuke.mindustry.Vars.content; +import static io.anuke.mindustry.Vars.control; public interface SelectionTrait{ default void buildItemTable(Table table, Supplier holder, Consumer consumer){ - buildItemTable(table, false, holder, consumer); - } - - default void buildItemTable(Table table, boolean nullItem, Supplier holder, Consumer consumer){ Array items = content.items(); ButtonGroup group = new ButtonGroup<>(); + group.setMinCheckCount(0); Table cont = new Table(); - cont.defaults().size(38, 42).padBottom(-5.1f); + cont.defaults().size(38); int i = 0; - if(nullItem){ - ImageButton button = cont.addImageButton("white", "toggle", 24, () -> consumer.accept(null)).group(group).get(); - button.getStyle().imageUp = new TextureRegionDrawable(Draw.region("icon-nullitem")); - button.setChecked(holder.get() == null); - - i ++; - } - for(Item item : items){ if(!control.unlocks.isUnlocked(item)) continue; - ImageButton button = cont.addImageButton("white", "toggle", 24, () -> consumer.accept(item)) - .group(group).get(); + ImageButton button = cont.addImageButton("white", "clear-toggle", 24, () -> {}).group(group).get(); + button.changed(() -> consumer.accept(button.isChecked() ? item : null)); button.getStyle().imageUp = new TextureRegionDrawable(item.region); button.setChecked(holder.get() == item); diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java index c7a5737e54..a541d53aee 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java @@ -40,15 +40,15 @@ public class Sorter extends Block implements SelectionTrait{ @Override public void playerPlaced(Tile tile){ - if(lastItem != null){ - threads.runDelay(() -> Call.setSorterItem(null, tile, lastItem)); - } + threads.runDelay(() -> Call.setSorterItem(null, tile, lastItem)); } @Remote(targets = Loc.both, called = Loc.both, forward = true) public static void setSorterItem(Player player, Tile tile, Item item){ SorterEntity entity = tile.entity(); - if(entity != null) entity.sortItem = item; + if(entity != null){ + entity.sortItem = item; + } } @Override @@ -56,6 +56,7 @@ public class Sorter extends Block implements SelectionTrait{ super.draw(tile); SorterEntity entity = tile.entity(); + if(entity.sortItem == null) return; Draw.color(entity.sortItem.color); Draw.rect("blank", tile.worldx(), tile.worldy(), 4f, 4f); @@ -130,16 +131,17 @@ public class Sorter extends Block implements SelectionTrait{ } public static class SorterEntity extends TileEntity{ - public Item sortItem = content.item(0); + public Item sortItem; @Override public void writeConfig(DataOutput stream) throws IOException{ - stream.writeByte(sortItem.id); + stream.writeByte(sortItem == null ? -1 : sortItem.id); } @Override public void readConfig(DataInput stream) throws IOException{ - sortItem = content.items().get(stream.readByte()); + byte b = stream.readByte(); + sortItem = b == -1 ? null : content.items().get(b); } } } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java index 42e55a53bf..c30683c935 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -66,7 +66,7 @@ public class PowerNode extends PowerBlock{ @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void unlinkPowerNodes(Player player, Tile tile, Tile other){ - if(tile.entity.power == null) return; + if(tile.entity.power == null || other.entity == null || other.entity.power == null) return; TileEntity entity = tile.entity(); @@ -248,23 +248,10 @@ public class PowerNode extends PowerBlock{ x2 += t2.x; y2 += t2.y; - float space = Vector2.dst(x1, y1, x2, y2); - float scl = 4f, mag = 2f, tscl = 4f, segscl = 3f; + Draw.color(Palette.powerLight, Palette.power, Mathf.absin(Timers.time(), 8f, 1f)); + Lines.stroke(2f); + Lines.line(x1, y1, x2, y2); - int segments = Mathf.ceil(space / segscl); - - Draw.color(Palette.power, Palette.powerLight, Mathf.absin(Timers.time(), 5f, 1f)); - Lines.stroke(1f); - - for(int i = 0; i < segments; i++){ - float f1 = (float)i / segments; - float f2 = (float)(i+1) / segments; - t1.trns(angle1 + 90f, Mathf.lerp(Mathf.sin(tile.entity.id * 124f + Timers.time()/tscl + f1 * space, scl, mag), 0f, Math.abs(f1 - 0.5f)*2f)); - t2.trns(angle1 + 90f, Mathf.lerp(Mathf.sin(tile.entity.id * 124f + Timers.time()/tscl + f2 * space, scl, mag), 0f, Math.abs(f2 - 0.5f)*2f)); - - Lines.line(x1 + (x2 - x1) * f1 + t1.x, y1 + (y2 - y1) * f1 + t1.y, - x1 + (x2 - x1) * f2 + t2.x, y1 + (y2 - y1) * f2 + t2.y); - } } } diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/SortedUnloader.java b/core/src/io/anuke/mindustry/world/blocks/storage/SortedUnloader.java index dd7374536a..222efc9c4b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/SortedUnloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/SortedUnloader.java @@ -65,7 +65,7 @@ public class SortedUnloader extends Unloader implements SelectionTrait{ @Override public void buildTable(Tile tile, Table table){ SortedUnloaderEntity entity = tile.entity(); - buildItemTable(table, true, () -> entity.sortItem, item -> Call.setSortedUnloaderItem(null, tile, item)); + buildItemTable(table, () -> entity.sortItem, item -> Call.setSortedUnloaderItem(null, tile, item)); } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java b/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java index 417a7dd4a0..b6d2c738a9 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/StorageBlock.java @@ -89,6 +89,12 @@ public abstract class StorageBlock extends Block{ } } + @Override + public float inventoryScaling(Tile tile){ + StorageEntity entity = tile.entity(); + return 1f / entity.graph.getTiles().size; + } + @Override public TileEntity newEntity(){ return new StorageEntity(); diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java index f07756b4d2..c42c272985 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/Unloader.java @@ -3,7 +3,6 @@ package io.anuke.mindustry.world.blocks.storage; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.meta.BlockGroup; public abstract class Unloader extends Block{ protected final int timerUnload = timers++; @@ -13,7 +12,6 @@ public abstract class Unloader extends Block{ update = true; solid = true; health = 70; - group = BlockGroup.transportation; hasItems = true; } @@ -24,6 +22,5 @@ public abstract class Unloader extends Block{ } @Override - public void setBars(){ - } + public void setBars(){} } diff --git a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java index f8f540fdb9..f8ca2beb6a 100644 --- a/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java +++ b/core/src/io/anuke/mindustry/world/blocks/units/CommandCenter.java @@ -84,12 +84,12 @@ public class CommandCenter extends Block{ Table buttons = new Table(); for(UnitCommand cmd : UnitCommand.values()){ - buttons.addImageButton("command-" + cmd.name(), "toggle", 8*3, () -> threads.run(() -> Call.onCommandCenterSet(players[0], tile, cmd))).size(40f, 44f) - .checked(entity.command == cmd).group(group); + buttons.addImageButton("command-" + cmd.name(), "clear-toggle", 8*3, () -> threads.run(() -> Call.onCommandCenterSet(players[0], tile, cmd))) + .size(38f).checked(entity.command == cmd).group(group); } table.add(buttons); table.row(); - table.table("button", t -> t.label(() -> entity.command.localized()).center().growX()).growX().padTop(-5); + table.table("pane", t -> t.label(() -> entity.command.localized()).center().growX()).growX(); } @Remote(called = Loc.server, forward = true, targets = Loc.both) diff --git a/core/src/io/anuke/mindustry/world/consumers/Consume.java b/core/src/io/anuke/mindustry/world/consumers/Consume.java index f4ec4cb01f..f8456fc9e9 100644 --- a/core/src/io/anuke/mindustry/world/consumers/Consume.java +++ b/core/src/io/anuke/mindustry/world/consumers/Consume.java @@ -33,7 +33,7 @@ public abstract class Consume{ } public void build(Table table){ - Table t = new Table("clear"); + Table t = new Table("flat"); t.margin(4); buildTooltip(t); diff --git a/kryonet/src/io/anuke/kryonet/KryoServer.java b/kryonet/src/io/anuke/kryonet/KryoServer.java index 45269e42fb..334abab5ab 100644 --- a/kryonet/src/io/anuke/kryonet/KryoServer.java +++ b/kryonet/src/io/anuke/kryonet/KryoServer.java @@ -71,7 +71,6 @@ public class KryoServer implements ServerProvider { @Override public void disconnected (Connection connection) { KryoConnection k = getByKryoID(connection.getID()); - Log.info("&bLost kryonet connection {0}", connection.getID()); if(k == null) return; Disconnect c = new Disconnect(); diff --git a/tests/src/test/java/power/PowerTestFixture.java b/tests/src/test/java/power/PowerTestFixture.java index 1e46d1e287..34d88bd62e 100644 --- a/tests/src/test/java/power/PowerTestFixture.java +++ b/tests/src/test/java/power/PowerTestFixture.java @@ -96,6 +96,10 @@ public class PowerTestFixture{ tile.entity.power = new PowerModule(); tile.entity.power.graph.add(tile); } + + // Assign incredibly high health so the block does not get destroyed on e.g. burning Blast Compound + block.health *= 100.0f; + return tile; }catch(Exception ex){ return null; diff --git a/tools/build.gradle b/tools/build.gradle index 876fa569c8..b7e87d5fb1 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -3,7 +3,6 @@ apply plugin: "java" sourceCompatibility = 1.8 sourceSets.main.java.srcDirs = [ "src/" ] - import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.tools.texturepacker.TexturePacker