From 348744086d3708810d929f4f1d000f8688fb02a7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 17 Nov 2018 18:30:13 -0500 Subject: [PATCH 01/52] Broken BlocksFragment --- .../src/io/anuke/mindustry/type/Category.java | 17 +- .../ui/fragments/BlockInventoryFragment.java | 4 +- .../ui/fragments/BlocksFragment.java | 332 +----------------- 3 files changed, 24 insertions(+), 329 deletions(-) diff --git a/core/src/io/anuke/mindustry/type/Category.java b/core/src/io/anuke/mindustry/type/Category.java index 6d75054b2f..94debf4839 100644 --- a/core/src/io/anuke/mindustry/type/Category.java +++ b/core/src/io/anuke/mindustry/type/Category.java @@ -1,5 +1,20 @@ package io.anuke.mindustry.type; public enum Category{ - weapon, production, distribution, liquid, power, defense, crafting, units + /**Offensive turrets.*/ + turret, + /**Blocks that produce raw resources, such as drills.*/ + production, + /**Blocks that move items around.*/ + distribution, + /**Blocks that move liquids around.*/ + liquid, + /**Blocks that generate or transport power.*/ + power, + /**Walls and other defensive structures.*/ + defense, + /**Blocks that craft things.*/ + crafting, + /**Blocks that create units.*/ + units } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java index 6faed6e1ba..e193b04ed2 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockInventoryFragment.java @@ -180,7 +180,9 @@ public class BlockInventoryFragment extends Fragment{ private String round(float f){ f = (int) f; - if(f >= 1000){ + if(f >= 1000000){ + return Strings.toFixed(f / 1000000f, 1) + "[gray]mil[]"; + }else if(f >= 1000){ return Strings.toFixed(f / 1000, 1) + "k"; }else{ return (int) f + ""; diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index 50c63e4596..e023059cfe 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -1,349 +1,27 @@ package io.anuke.mindustry.ui.fragments; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Interpolation; -import com.badlogic.gdx.utils.Array; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.game.EventType.WorldLoadEvent; -import io.anuke.mindustry.input.InputHandler; import io.anuke.mindustry.type.Category; -import io.anuke.mindustry.type.ItemStack; -import io.anuke.mindustry.type.Recipe; -import io.anuke.ucore.core.Core; -import io.anuke.ucore.core.Events; -import io.anuke.ucore.core.Graphics; -import io.anuke.ucore.scene.Element; import io.anuke.ucore.scene.Group; -import io.anuke.ucore.scene.actions.Actions; -import io.anuke.ucore.scene.event.ClickListener; -import io.anuke.ucore.scene.event.InputEvent; -import io.anuke.ucore.scene.event.Touchable; -import io.anuke.ucore.scene.ui.*; -import io.anuke.ucore.scene.ui.layout.Stack; -import io.anuke.ucore.scene.ui.layout.Table; -import io.anuke.ucore.util.Mathf; -import io.anuke.ucore.util.Strings; - -import static io.anuke.mindustry.Vars.*; public class BlocksFragment extends Fragment{ - //number of block icon rows - private static final int rows = 4; - //number of category button rows - private static final int secrows = 4; - //size of each block icon - private static final float size = 48; - //maximum recipe rows - private static final int maxrow = 3; - /** Table containing description that is shown on top.*/ - private Table descTable; - /** Main table containing the whole menu.*/ - private Table mainTable; - /** Table for all section buttons and blocks.*/ - private Table selectTable; - /** Whether the whole thing is shown or hidden by the popup button.*/ - private boolean shown = true; - /** Recipe currently hovering over.*/ - private Recipe hoverRecipe; - /** Last category selected.*/ - private Category lastCategory; - /** Last block pane scroll Y position.*/ - private float lastScroll; - /** Temporary recipe array for storage*/ - private Array recipes = new Array<>(); + @Override public void build(Group parent){ - InputHandler input = control.input(0); + parent.fill(frame -> { + frame.bottom().left(); + for(int i = 0; i < Category.values().length; i++){ - parent.fill(container -> { - container.bottom().right().visible(() -> !state.is(State.menu)); - - mainTable = container.table(main -> { - - //add top description table - descTable = new Table("button"); - descTable.visible(() -> (hoverRecipe != null || input.recipe != null) && shown); //make sure it's visible when necessary - descTable.update(() -> { - if(state.is(State.menu)){ - descTable.clear(); - control.input(0).recipe = null; - } - // note: This is required because there is no direct connection between input.recipe and the description ui. - // If input.recipe gets set to null, a proper cleanup of the ui elements is required. - boolean anyRecipeShown = input.recipe != null || hoverRecipe != null; - boolean descriptionTableClean = descTable.getChildren().size == 0; - boolean cleanupRequired = (!anyRecipeShown && !descriptionTableClean); - if(cleanupRequired){ - descTable.clear(); - } - }); - - float w = 246f; - - main.add(descTable).width(w); - - main.row(); - - //now add the block selection menu - selectTable = main.table("pane", select -> {}) - .margin(10f).marginLeft(0f).marginRight(0f).marginTop(-5) - .touchable(Touchable.enabled).right().bottom().width(w).get(); - - }).bottom().right().get(); + } }); - - Events.on(WorldLoadEvent.class, event -> rebuild()); - - rebuild(); } /**Rebuilds the whole placement menu, attempting to preserve previous state.*/ void rebuild(){ - selectTable.clear(); - InputHandler input = control.input(0); - Stack stack = new Stack(); - ButtonGroup group = new ButtonGroup<>(); - Table catTable = selectTable; - - int cati = 0; - int checkedi = 0; - int rowsUsed = 0; - - //add categories - for(Category cat : Category.values()){ - //get recipes out by category - Recipe.getUnlockedByCategory(cat, recipes); - - //empty section, nothing to see here - if(recipes.size == 0){ - continue; - } - - //table where actual recipes go - Table recipeTable = new Table(); - recipeTable.margin(4).top().left().marginRight(15); - - //add a new row here when needed - if(cati % secrows == 0){ - catTable = new Table(); - selectTable.row(); - selectTable.add(catTable).colspan(secrows).padTop(-5).growX(); - } - - //add category button - ImageButton catb = catTable.addImageButton("icon-" + cat.name(), "toggle", 40, () -> { - if(!recipeTable.isVisible() && input.recipe != null){ - input.recipe = null; - } - lastCategory = cat; - stack.act(Gdx.graphics.getDeltaTime()); - stack.act(Gdx.graphics.getDeltaTime()); - }).growX().height(54).group(group) - .name("sectionbutton" + cat.name()).get(); - - if(lastCategory == cat || lastCategory == null){ - checkedi = cati; - lastCategory = cat; - } - - //scrollpane for recipes - ScrollPane pane = new ScrollPane(recipeTable, "clear-black"); - pane.setOverscroll(false, false); - pane.visible(catb::isChecked); - pane.setScrollYForce(lastScroll); - pane.update(() -> { - Element e = Core.scene.hit(Graphics.mouse().x, Graphics.mouse().y, true); - if(e != null && e.isDescendantOf(pane)){ - Core.scene.setScrollFocus(pane); - }else if(Core.scene.getScrollFocus() == pane){ - Core.scene.setScrollFocus(null); - } - - if(lastCategory == cat){ - lastScroll = pane.getVisualScrollY(); - } - }); - stack.add(pane); - - int i = 0; - - //add actual recipes - for(Recipe r : recipes){ - if((r.mode != null && r.mode != state.mode) || !r.visibility.shown()) continue; - - ImageButton image = new ImageButton(new TextureRegion(), "select"); - - TextureRegion[] regions = r.result.getCompactIcon(); - Stack istack = new Stack(); - for(TextureRegion region : regions){ - Image u = new Image(region); - u.update(() -> u.setColor(istack.getColor())); - istack.add(u); - } - - image.getImageCell().setActor(istack).size(size); - image.addChild(istack); - image.setTouchable(Touchable.enabled); - image.getImage().remove(); - - image.addListener(new ClickListener(){ - @Override - public void enter(InputEvent event, float x, float y, int pointer, Element fromActor){ - super.enter(event, x, y, pointer, fromActor); - if(hoverRecipe != r){ - hoverRecipe = r; - updateRecipe(r); - } - } - - @Override - public void exit(InputEvent event, float x, float y, int pointer, Element toActor){ - super.exit(event, x, y, pointer, toActor); - hoverRecipe = null; - updateRecipe(input.recipe); - } - }); - - image.clicked(() -> { - // note: input.recipe only gets set here during a click. - // during a hover only the visual description will be updated. - InputHandler handler = mobile ? input : control.input(0); - - boolean nothingSelectedYet = handler.recipe == null; - boolean selectedSomethingElse = !nothingSelectedYet && handler.recipe != r; - boolean shouldMakeSelection = nothingSelectedYet || selectedSomethingElse; - if(shouldMakeSelection){ - handler.recipe = r; - hoverRecipe = r; - updateRecipe(r); - }else{ - handler.recipe = null; - hoverRecipe = null; - updateRecipe(null); - } - }); - - recipeTable.add(image).size(size + 8); - - image.update(() -> { - image.setChecked(r == control.input(0).recipe); - TileEntity entity = players[0].getClosestCore(); - - if(entity == null) return; - - if(!state.mode.infiniteResources){ - for(ItemStack s : r.requirements){ - if(!entity.items.has(s.item, Mathf.ceil(s.amount))){ - istack.setColor(Color.GRAY); - return; - } - } - } - istack.setColor(Color.WHITE); - }); - - if(i % rows == rows - 1){ - rowsUsed = Math.max((i + 1) / rows, rowsUsed); - recipeTable.row(); - } - - i++; - } - - cati++; - } - - if(group.getButtons().size > 0){ - group.getButtons().get(checkedi).setChecked(true); - } - - selectTable.row(); - selectTable.add(stack).growX().left().top().colspan(Category.values().length).padBottom(-5).height((size + 12) * Math.min(rowsUsed, 3)); } void toggle(float t, Interpolation ip){ - if(shown){ - shown = false; - mainTable.actions(Actions.translateBy(0, mainTable.getTranslation().y + (-mainTable.getHeight() - descTable.getHeight()), t, ip)); - }else{ - shown = true; - mainTable.actions(Actions.translateBy(0, -mainTable.getTranslation().y, t, ip)); - } - } - private void updateRecipe(Recipe recipe){ - if(recipe == null){ - descTable.clear(); - return; - } - - descTable.clear(); - descTable.setTouchable(Touchable.enabled); - - descTable.defaults().left(); - descTable.left(); - descTable.margin(12); - - Table header = new Table(); - - descTable.add(header).left(); - - descTable.row(); - - TextureRegion[] regions = recipe.result.getCompactIcon(); - - Stack istack = new Stack(); - - for(TextureRegion region : regions) istack.add(new Image(region)); - - header.add(istack).size(8 * 5).padTop(4); - Label nameLabel = new Label(recipe.result.formalName); - nameLabel.setWrap(true); - header.add(nameLabel).padLeft(2).width(120f); - - header.addButton("?", () -> ui.content.show(recipe)).expandX().padLeft(3).top().right().size(40f, 44f).padTop(-2); - - descTable.add().pad(2); - - Table requirements = new Table(); - - descTable.row(); - - descTable.left(); - descTable.add(requirements); - - for(ItemStack stack : recipe.requirements){ - requirements.addImage(stack.item.region).size(8 * 3); - Label reqlabel = new Label(() -> { - TileEntity core = players[0].getClosestCore(); - if(core == null || state.mode.infiniteResources) return "*/*"; - - int amount = core.items.get(stack.item); - String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]"); - - return color + format(amount) + "[white]/" + stack.amount; - }); - - requirements.add(reqlabel).left(); - requirements.row(); - } - - descTable.row(); - } - - String format(int number){ - if(number >= 1000000){ - return Strings.toFixed(number / 1000000f, 1) + "[gray]mil[]"; - }else if(number >= 10000){ - return number / 1000 + "[gray]k[]"; - }else if(number >= 1000){ - return Strings.toFixed(number / 1000f, 1) + "[gray]k[]"; - }else{ - return number + ""; - } } } \ No newline at end of file From ff62f075d0b9313b97488dcfb7b10096795f36e0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 18 Nov 2018 00:07:25 -0500 Subject: [PATCH 02/52] New place menu --- .../ui/icons-category/icon-crafting.png | Bin 0 -> 231 bytes .../ui/icons-category/icon-defense.png | Bin 0 -> 273 bytes .../ui/icons-category/icon-distribution.png | Bin 0 -> 204 bytes .../sprites/ui/icons-category/icon-liquid.png | Bin 0 -> 266 bytes .../sprites/ui/icons-category/icon-power.png | Bin 0 -> 231 bytes .../ui/icons-category/icon-production.png | Bin 0 -> 246 bytes .../sprites/ui/icons-category/icon-turret.png | Bin 0 -> 246 bytes .../sprites/ui/icons-category/icon-units.png | Bin 0 -> 238 bytes .../sprites/ui/icons/icon-crafting.png | Bin 109 -> 0 bytes .../sprites/ui/icons/icon-defense.png | Bin 104 -> 0 bytes .../sprites/ui/icons/icon-distribution.png | Bin 97 -> 0 bytes .../sprites/ui/icons/icon-liquid.png | Bin 110 -> 0 bytes .../sprites/ui/icons/icon-power.png | Bin 98 -> 0 bytes .../sprites/ui/icons/icon-production.png | Bin 97 -> 0 bytes .../sprites/ui/icons/icon-units.png | Bin 125 -> 0 bytes .../sprites/ui/icons/icon-weapon.png | Bin 116 -> 0 bytes core/assets/sprites/sprites.atlas | 1776 ++++++++--------- core/assets/sprites/sprites.png | Bin 102670 -> 104348 bytes core/assets/ui/uiskin.json | 8 +- .../io/anuke/mindustry/content/Recipes.java | 24 +- core/src/io/anuke/mindustry/core/UI.java | 13 + .../src/io/anuke/mindustry/ui/ImageStack.java | 14 + .../ui/fragments/BlocksFragment.java | 170 +- .../mindustry/ui/fragments/HudFragment.java | 6 - 24 files changed, 1090 insertions(+), 921 deletions(-) create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-crafting.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-defense.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-distribution.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-liquid.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-power.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-production.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-turret.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-units.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-crafting.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-defense.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-distribution.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-liquid.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-power.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-production.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-units.png delete mode 100644 core/assets-raw/sprites/ui/icons/icon-weapon.png create mode 100644 core/src/io/anuke/mindustry/ui/ImageStack.java diff --git a/core/assets-raw/sprites/ui/icons-category/icon-crafting.png b/core/assets-raw/sprites/ui/icons-category/icon-crafting.png new file mode 100644 index 0000000000000000000000000000000000000000..80447efca8af3d36037fe22c7371e4431ff0ea15 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPdw-AFmf50Qb8$h8FPZ!4!i_=FZ@8)Yz;BkGg`d42) zy*@NN_RHy4hY~!ZS$y6w`M!8Kh5h>9BOV+KI-kFk?R_?pVS}u=5Sy}OiT-+~T?(oV zu7cSDuX$`bqS78UM4mJ?s(AP8>|wE6@<9tuFX+wZ`N!^2sCz45HG{^_@Qv3Wu)SF& VQ^9#@>3g9444$rjF6*2UngEAgPul#$G zI??qN2d7_cj=iL-+g&(GO(QiegZpXFM>bA|ZC@Y1-S|^&_6B)%v8iX$eAOfv-XH%t zd43O5wbvrIN7F*{iUn?c={Uk_#k4n3@CxUNrA_${q(8lnFVNe%`%uK$gO9d8 z6L_8F3C}r>wRdkZdiF2pcP~D$x&5vZpT`|d-$tRcHp|=uw)CZ~s$`Umh}Y$7SGoyw ODTAl0pUXO@geCw}q-6&H literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/icons-category/icon-distribution.png b/core/assets-raw/sprites/ui/icons-category/icon-distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..18233d41c049328e83099558df60e4553bb44711 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({wOb}<~-rO71=6yYrJ zh%9Dc;1&j9Muu5)B!GhKC7!;n?2ovG7)1D&be6mT3PpOlIEGl9PQJ6@H3PG1LuX@S z+~bX?y^gE3Z^SAVPH#m^kQA2W4Hsy0_h`19264{ ssy4n0iP4kcJ#x_@B>@PQm{>D2?BR+0pK|w*BhV5CPgg&ebxsLQ0O@N%UH||9 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/icons-category/icon-liquid.png b/core/assets-raw/sprites/ui/icons-category/icon-liquid.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4142213b4a361e0bf52c8cf7141afccf80d719 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE({wOb}<~-rO71=6yYrJ zh%9Dc;1&j9Muu5)B!GhKC7!;n?2ovG7-aMmEZ^+|3QhNPaSX9Iy>zl6-w_2Kmg_J6 zxw@VWU)ahP_e^AYw+x?k-zFheHs0OS7G7ez_kx+h(skeNh~FwZ&ucFF*7=}Tb9u*{ zNB0;RiYzP~gDy3SHHTl|-^QfJzMCU@s@Z`v57r+zv#D&QzNudB9NP_Xi&fb&Z8s!M zh{zHS{C#D!7FWf}2d}mWI~>!wQU6e}MW-Qq&3}e#EcbR=Fx0#XSvw*9ohQ(V44$rj JF6*2UngGmIULODe literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/icons-category/icon-power.png b/core/assets-raw/sprites/ui/icons-category/icon-power.png new file mode 100644 index 0000000000000000000000000000000000000000..5df68ce22be484cd3acdb235f9242f1191366bfa GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPdw-Ae_^yN(s-+@9Uo-U3d7N?I+Hsoti;Bl?z{a#e` zZPlhzO6seb%>tF53bXB=AaIX+O8m`l%*vt+39)I<*2Jy8;pVfG!{Y;Ev@eT}=?+zc zi0lpO3m(jRP@DT!^o0B4E#En}9LZKv&8&SadugJ~3w=w5$;}6Ne1ipo+sqB(=B|v8 VZ&+r~CkeEl!PC{xWt~$(695p&OlbfB literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/icons-category/icon-production.png b/core/assets-raw/sprites/ui/icons-category/icon-production.png new file mode 100644 index 0000000000000000000000000000000000000000..073558273218d137b455fb6ae07d3fb0fa55c584 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPdw-AG}v|b3qLZDEyr;B5V#p%64r}-Kbc(hOdJ3TqQ zK6G8tME%+9@{I={DRu4@m{gj%yRG!LAro6e>b!UREh-rql1@EuYLc15JumW*Ld3~Q zkG3ue_qr+3ut|BE?FVdQ&MBb@08D96AOHXW literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/icons/icon-crafting.png b/core/assets-raw/sprites/ui/icons/icon-crafting.png deleted file mode 100644 index 2a20c39b0b455792743d044a7183d7b354867fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4nRvQ5hE&{2{!y*a!`P;3G(9=B z*f4>3h03hE&{2{!y*a!`P;3G(9=B z**2vN;{mA3>dDkYD;X-;f4X?VIghE&{2{!y*a(f4nR>c7hE&{2{!y*a!`P;3G(9=B z*f4X?nUihE&{2PFP_5gP(f4X?VIghE&{2{!y*a(R6cJF{|Tf%9#g>Y|IP-tQwzOBQHz`>S6G7^>bP0l+XkK*1sLs diff --git a/core/assets-raw/sprites/ui/icons/icon-units.png b/core/assets-raw/sprites/ui/icons/icon-units.png deleted file mode 100644 index 5a7846974ddda57d5da569255fea354360ccc162..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4xp=xbhE&{2{!y*a!`P;3G(9=B z*f4S$n!ThE&{2{!y*a!`P;3G(9=B z*YkUAS OhQZU-&t;ucLK6TZH6vI6 diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index e1afd2f5a9..a0df922c42 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -6,434 +6,441 @@ filter: Nearest,Nearest repeat: none force-projector-top rotate: false - xy: 217, 208 + xy: 165, 206 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 555, 355 + xy: 753, 377 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 573, 355 + xy: 753, 359 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 407, 366 + xy: 224, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 407, 356 + xy: 224, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 457, 371 + xy: 943, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 427, 331 + xy: 949, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 437, 341 + xy: 953, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 447, 351 + xy: 953, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 457, 361 + xy: 953, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 467, 371 + xy: 360, 322 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 427, 321 + xy: 370, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 437, 331 + xy: 965, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 447, 341 + xy: 977, 373 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 457, 351 + xy: 987, 373 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 467, 361 + xy: 422, 298 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 427, 311 + xy: 195, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 437, 321 + xy: 195, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 447, 331 + xy: 205, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 457, 341 + xy: 195, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 467, 351 + xy: 205, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 427, 301 + xy: 215, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 437, 311 + xy: 195, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 447, 321 + xy: 205, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 737, 285 + xy: 424, 158 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 747, 295 + xy: 434, 158 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 757, 305 + xy: 444, 158 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 767, 315 + xy: 454, 159 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 787, 325 + xy: 414, 146 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 747, 285 + xy: 424, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 757, 295 + xy: 434, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 767, 305 + xy: 444, 148 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 777, 315 + xy: 454, 149 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 797, 325 + xy: 424, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 757, 285 + xy: 434, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 767, 295 + xy: 444, 138 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 777, 305 + xy: 454, 139 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 787, 315 + xy: 501, 350 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 767, 285 + xy: 498, 340 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 777, 295 + xy: 498, 330 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 787, 305 + xy: 498, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 797, 315 + xy: 508, 340 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 777, 285 + xy: 508, 330 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mass-driver-turret rotate: false - xy: 168, 46 + xy: 168, 98 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 687, 325 + xy: 433, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 647, 285 + xy: 424, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 657, 295 + xy: 424, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 +warp-gate + rotate: false + xy: 280, 302 + size: 24, 24 + orig: 24, 24 + offset: 0, 0 + index: -1 warp-gate-top rotate: false - xy: 289, 308 + xy: 291, 276 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill rotate: false - xy: 79, 1 + xy: 53, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-rim rotate: false - xy: 860, 453 + xy: 79, 1 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-rotator rotate: false - xy: 886, 453 + xy: 860, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-top rotate: false - xy: 912, 453 + xy: 886, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 laser-drill rotate: false - xy: 663, 409 + xy: 735, 395 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laser-drill-rotator rotate: false - xy: 645, 373 + xy: 753, 413 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laser-drill-top rotate: false - xy: 663, 391 + xy: 717, 359 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill rotate: false - xy: 663, 373 + xy: 735, 377 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 519, 355 + xy: 753, 395 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 537, 355 + xy: 735, 359 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 oil-extractor rotate: false - xy: 160, 20 + xy: 168, 72 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-liquid rotate: false - xy: 254, 310 + xy: 168, 46 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-rotator rotate: false - xy: 265, 268 + xy: 160, 20 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-top rotate: false - xy: 273, 242 + xy: 254, 310 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -468,672 +475,672 @@ plasma-drill-top index: -1 pneumatic-drill rotate: false - xy: 681, 391 + xy: 807, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 681, 373 + xy: 789, 379 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 681, 355 + xy: 807, 397 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor rotate: false - xy: 771, 395 + xy: 960, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 771, 377 + xy: 978, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 771, 359 + xy: 996, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 789, 415 + xy: 861, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blackrock1 rotate: false - xy: 212, 95 + xy: 361, 360 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-blackrock rotate: false - xy: 212, 95 + xy: 361, 360 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackrockshadow1 rotate: false - xy: 212, 85 + xy: 233, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone1 rotate: false - xy: 212, 75 + xy: 865, 335 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-blackstone rotate: false - xy: 212, 75 + xy: 865, 335 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone2 rotate: false - xy: 212, 65 + xy: 865, 325 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone3 rotate: false - xy: 212, 55 + xy: 1015, 404 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstoneedge rotate: false - xy: 271, 170 + xy: 470, 335 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 coal1 rotate: false - xy: 417, 366 + xy: 224, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal2 rotate: false - xy: 407, 346 + xy: 224, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal3 rotate: false - xy: 417, 356 + xy: 224, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper1 rotate: false - xy: 457, 331 + xy: 215, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper2 rotate: false - xy: 467, 341 + xy: 195, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper3 rotate: false - xy: 437, 301 + xy: 205, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt2 rotate: false - xy: 457, 301 + xy: 225, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt3 rotate: false - xy: 467, 311 + xy: 225, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirtedge rotate: false - xy: 377, 388 + xy: 809, 331 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 generic-cliff-edge rotate: false - xy: 457, 291 + xy: 334, 318 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge rotate: false - xy: 457, 291 + xy: 334, 318 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-1 rotate: false - xy: 467, 291 + xy: 344, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-1 rotate: false - xy: 467, 291 + xy: 344, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-2 rotate: false - xy: 427, 281 + xy: 324, 306 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-2 rotate: false - xy: 427, 281 + xy: 324, 306 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-side rotate: false - xy: 437, 281 + xy: 334, 308 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-side rotate: false - xy: 437, 281 + xy: 334, 308 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge rotate: false - xy: 467, 281 + xy: 975, 363 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-1 rotate: false - xy: 477, 359 + xy: 985, 363 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-2 rotate: false - xy: 487, 359 + xy: 432, 298 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-side rotate: false - xy: 477, 349 + xy: 963, 315 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass2 rotate: false - xy: 447, 281 + xy: 344, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass3 rotate: false - xy: 457, 281 + xy: 354, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassedge rotate: false - xy: 699, 345 + xy: 875, 325 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 ice2 rotate: false - xy: 487, 349 + xy: 344, 300 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice3 rotate: false - xy: 477, 329 + xy: 354, 302 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iceedge rotate: false - xy: 727, 345 + xy: 895, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 icerock2 rotate: false - xy: 487, 339 + xy: 324, 296 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow1 rotate: false - xy: 477, 319 + xy: 364, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow1 rotate: false - xy: 477, 319 + xy: 364, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow2 rotate: false - xy: 477, 309 + xy: 364, 300 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow2 rotate: false - xy: 477, 309 + xy: 364, 300 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lavaedge rotate: false - xy: 769, 345 + xy: 895, 361 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 lead1 rotate: false - xy: 497, 280 + xy: 329, 256 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead2 rotate: false - xy: 507, 290 + xy: 329, 246 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead3 rotate: false - xy: 507, 280 + xy: 329, 236 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor2 rotate: false - xy: 537, 335 + xy: 339, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor3 rotate: false - xy: 537, 325 + xy: 339, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor4 rotate: false - xy: 517, 305 + xy: 339, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor5 rotate: false - xy: 527, 315 + xy: 347, 280 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor6 rotate: false - xy: 547, 345 + xy: 349, 270 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalflooredge rotate: false - xy: 797, 349 + xy: 909, 377 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 rock2 rotate: false - xy: 687, 285 + xy: 354, 180 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand2 rotate: false - xy: 697, 325 + xy: 374, 180 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand3 rotate: false - xy: 707, 335 + xy: 384, 180 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandedge rotate: false - xy: 823, 373 + xy: 923, 391 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shrubshadow rotate: false - xy: 717, 315 + xy: 449, 259 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow2 rotate: false - xy: 737, 335 + xy: 449, 249 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow3 rotate: false - xy: 737, 325 + xy: 449, 239 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowedge rotate: false - xy: 811, 355 + xy: 909, 363 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 spaceedge rotate: false - xy: 825, 359 + xy: 923, 377 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 stone-cliff-edge rotate: false - xy: 757, 325 + xy: 414, 176 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-1 rotate: false - xy: 717, 285 + xy: 424, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-2 rotate: false - xy: 727, 295 + xy: 434, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-side rotate: false - xy: 737, 305 + xy: 444, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone2 rotate: false - xy: 737, 315 + xy: 394, 172 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone3 rotate: false - xy: 757, 335 + xy: 404, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneedge rotate: false - xy: 811, 341 + xy: 951, 405 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 taredge rotate: false - xy: 839, 345 + xy: 937, 377 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 thorium1 rotate: false - xy: 737, 295 + xy: 424, 168 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 747, 305 + xy: 434, 168 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 757, 315 + xy: 444, 168 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 777, 335 + xy: 454, 169 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 787, 335 + xy: 404, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 777, 325 + xy: 414, 156 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge rotate: false - xy: 797, 305 + xy: 518, 345 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-1 rotate: false - xy: 787, 285 + xy: 518, 335 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-2 rotate: false - xy: 797, 295 + xy: 528, 345 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-side rotate: false - xy: 797, 285 + xy: 518, 325 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 wateredge rotate: false - xy: 853, 387 + xy: 965, 391 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 block-border rotate: false - xy: 190, 188 + xy: 274, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-elevation rotate: false - xy: 200, 188 + xy: 284, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 200, 188 + xy: 284, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-middle rotate: false - xy: 397, 308 + xy: 214, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 397, 308 + xy: 214, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-slope rotate: false - xy: 397, 298 + xy: 214, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 border rotate: false - xy: 397, 288 + xy: 214, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 427, 361 + xy: 933, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-1 rotate: false - xy: 447, 311 + xy: 215, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-2 rotate: false - xy: 501, 396 + xy: 762, 431 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cross-3 rotate: false - xy: 165, 206 + xy: 116, 46 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -1154,70 +1161,70 @@ nuclearreactor-shadow index: -1 place-arrow rotate: false - xy: 667, 305 + xy: 434, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ripples rotate: false - xy: 1011, 381 + xy: 398, 314 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 rubble-1-0 rotate: false - xy: 699, 395 + xy: 789, 361 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 717, 413 + xy: 807, 379 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 699, 377 + xy: 825, 397 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 717, 395 + xy: 807, 361 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-3-0 rotate: false - xy: 155, 178 + xy: 247, 216 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rubble-3-1 rotate: false - xy: 155, 178 + xy: 247, 216 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shadow-1 rotate: false - xy: 866, 367 + xy: 410, 318 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-2 rotate: false - xy: 299, 248 + xy: 299, 216 size: 18, 18 orig: 18, 18 offset: 0, 0 @@ -1252,21 +1259,21 @@ shadow-6 index: -1 shadow-corner rotate: false - xy: 854, 363 + xy: 410, 306 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-round-1 rotate: false - xy: 853, 351 + xy: 422, 308 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-round-2 rotate: false - xy: 299, 228 + xy: 315, 366 size: 18, 18 orig: 18, 18 offset: 0, 0 @@ -1287,259 +1294,259 @@ shadow-round-4 index: -1 shadow-rounded-2 rotate: false - xy: 299, 208 + xy: 315, 346 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 shadow-shock-mine rotate: false - xy: 697, 295 + xy: 449, 279 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 345, 276 + xy: 214, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 345, 276 + xy: 214, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 407, 376 + xy: 214, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 417, 376 + xy: 214, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 407, 316 + xy: 929, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 417, 326 + xy: 939, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 407, 306 + xy: 903, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 417, 316 + xy: 903, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 407, 296 + xy: 913, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 417, 306 + xy: 913, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 417, 296 + xy: 923, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 427, 371 + xy: 923, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 437, 371 + xy: 933, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 427, 351 + xy: 903, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 437, 361 + xy: 913, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 447, 371 + xy: 923, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 427, 341 + xy: 933, 323 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 437, 351 + xy: 943, 343 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 447, 361 + xy: 943, 333 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 527, 325 + xy: 339, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 517, 315 + xy: 339, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 537, 345 + xy: 339, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-tank-bottom rotate: false - xy: 152, 124 + xy: 142, 46 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-liquid rotate: false - xy: 168, 98 + xy: 134, 20 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-top rotate: false - xy: 168, 72 + xy: 152, 124 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 667, 315 + xy: 439, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 687, 345 + xy: 439, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 687, 335 + xy: 439, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 677, 315 + xy: 434, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 657, 285 + xy: 443, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 667, 295 + xy: 444, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 677, 305 + xy: 444, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 687, 315 + xy: 995, 363 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 667, 285 + xy: 1005, 368 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 677, 295 + xy: 1015, 364 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1560,28 +1567,28 @@ block-icon-alpha-mech-pad index: -1 battery rotate: false - xy: 212, 105 + xy: 351, 360 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-battery rotate: false - xy: 212, 105 + xy: 351, 360 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 battery-large rotate: false - xy: 53, 1 + xy: 213, 268 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-battery-large rotate: false - xy: 53, 1 + xy: 213, 268 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -1644,14 +1651,14 @@ fusion-reactor-top index: -1 rtg-generator-top rotate: false - xy: 697, 335 + xy: 364, 180 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium-reactor-center rotate: false - xy: 158, 152 + xy: 273, 216 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -1665,18 +1672,11 @@ thorium-reactor-lights index: -1 turbine-generator-top rotate: false - xy: 753, 377 + xy: 906, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -alloy-fuser - rotate: false - xy: 213, 268 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 alloy-smelter rotate: false xy: 90, 28 @@ -1735,224 +1735,224 @@ biomattercompressor index: -1 biomattercompressor-frame0 rotate: false - xy: 319, 250 + xy: 306, 308 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame1 rotate: false - xy: 319, 232 + xy: 326, 328 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame2 rotate: false - xy: 319, 214 + xy: 321, 436 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-liquid rotate: false - xy: 315, 368 + xy: 321, 418 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-top rotate: false - xy: 315, 350 + xy: 321, 400 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blast-mixer rotate: false - xy: 315, 332 + xy: 339, 438 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-blast-mixer rotate: false - xy: 315, 332 + xy: 339, 438 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 centrifuge-liquid rotate: false - xy: 483, 387 + xy: 726, 431 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-bottom rotate: false - xy: 501, 378 + xy: 780, 433 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-liquid rotate: false - xy: 483, 369 + xy: 798, 433 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-top rotate: false - xy: 501, 360 + xy: 816, 433 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator rotate: false - xy: 528, 427 + xy: 834, 433 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 546, 427 + xy: 519, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 564, 427 + xy: 519, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 lavasmelter rotate: false - xy: 507, 300 + xy: 329, 266 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oilrefinery rotate: false - xy: 537, 315 + xy: 349, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-weaver rotate: false - xy: 627, 355 + xy: 771, 377 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 645, 355 + xy: 771, 359 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 663, 355 + xy: 789, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 681, 409 + xy: 789, 397 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 687, 305 + xy: 1005, 358 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 677, 285 + xy: 1015, 354 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 727, 325 + xy: 447, 289 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 core-open rotate: false - xy: 116, 46 + xy: 116, 98 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-top rotate: false - xy: 139, 204 + xy: 116, 72 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sortedunloader rotate: false - xy: 747, 335 + xy: 454, 189 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1 rotate: false - xy: 201, 198 + xy: 254, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1-top rotate: false - xy: 211, 198 + xy: 264, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-2 rotate: false - xy: 315, 314 + xy: 357, 438 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-2-top rotate: false - xy: 319, 196 + xy: 339, 420 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-3 rotate: false - xy: 938, 453 + xy: 912, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-3-top rotate: false - xy: 964, 453 + xy: 938, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -1980,35 +1980,35 @@ arc index: -1 arc-heat rotate: false - xy: 212, 115 + xy: 491, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cyclone rotate: false - xy: 191, 208 + xy: 139, 204 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 duo rotate: false - xy: 447, 291 + xy: 324, 316 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 fuse rotate: false - xy: 142, 46 + xy: 142, 98 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hail rotate: false - xy: 477, 339 + xy: 334, 298 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2022,14 +2022,14 @@ hail-heat index: -1 lancer rotate: false - xy: 627, 373 + xy: 699, 359 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 645, 391 + xy: 717, 377 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -2050,63 +2050,63 @@ meltdown-heat index: -1 ripple rotate: false - xy: 247, 216 + xy: 265, 268 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ripple-heat rotate: false - xy: 273, 216 + xy: 273, 242 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salvo rotate: false - xy: 735, 413 + xy: 825, 379 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-heat rotate: false - xy: 699, 359 + xy: 825, 361 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 717, 377 + xy: 843, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 735, 395 + xy: 843, 397 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 scatter rotate: false - xy: 697, 305 + xy: 434, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scorch rotate: false - xy: 707, 315 + xy: 444, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scorch-shoot rotate: false - xy: 727, 335 + xy: 442, 299 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2120,119 +2120,119 @@ spectre index: -1 swarmer rotate: false - xy: 735, 377 + xy: 852, 433 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave rotate: false - xy: 789, 397 + xy: 861, 397 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 807, 415 + xy: 861, 379 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory-top rotate: false - xy: 582, 427 + xy: 537, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory-top-open rotate: false - xy: 600, 427 + xy: 519, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-factory rotate: false - xy: 108, 20 + xy: 191, 208 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-top rotate: false - xy: 142, 98 + xy: 217, 208 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-top rotate: false - xy: 142, 98 + xy: 217, 208 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-top rotate: false - xy: 142, 98 + xy: 217, 208 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-top-open rotate: false - xy: 142, 72 + xy: 108, 20 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-top-open rotate: false - xy: 142, 72 + xy: 108, 20 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-top-open rotate: false - xy: 142, 72 + xy: 108, 20 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory rotate: false - xy: 134, 20 + xy: 142, 72 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phantom-factory-top rotate: false - xy: 591, 355 + xy: 771, 413 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phantom-factory-top-open rotate: false - xy: 609, 355 + xy: 771, 395 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 reconstructor-open rotate: false - xy: 699, 413 + xy: 825, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 repair-point-turret rotate: false - xy: 687, 295 + xy: 344, 178 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2260,63 +2260,63 @@ revenant-factory-top-open index: -1 spirit-factory-top rotate: false - xy: 753, 413 + xy: 843, 379 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 spirit-factory-top-open rotate: false - xy: 717, 359 + xy: 843, 361 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-factory rotate: false - xy: 289, 334 + xy: 280, 328 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 wraith-factory-top rotate: false - xy: 789, 379 + xy: 861, 361 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wraith-factory-top-open rotate: false - xy: 807, 397 + xy: 879, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 deflector-wall rotate: false - xy: 467, 321 + xy: 225, 34 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deflector-wall-large rotate: false - xy: 618, 427 + xy: 537, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 636, 427 + xy: 555, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-open rotate: false - xy: 437, 291 + xy: 963, 325 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2351,7 +2351,7 @@ bullet index: -1 bullet-back rotate: false - xy: 307, 181 + xy: 427, 334 size: 13, 13 orig: 13, 13 offset: 0, 0 @@ -2372,42 +2372,42 @@ clear index: -1 command-attack rotate: false - xy: 407, 336 + xy: 224, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-idle rotate: false - xy: 417, 346 + xy: 224, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-patrol rotate: false - xy: 407, 326 + xy: 909, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-retreat rotate: false - xy: 417, 336 + xy: 919, 353 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 enemyarrow rotate: false - xy: 853, 331 + xy: 164, 177 size: 8, 7 orig: 8, 7 offset: 0, 0 index: -1 error rotate: false - xy: 391, 388 + xy: 823, 331 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -2428,35 +2428,35 @@ laser-end index: -1 laserfull rotate: false - xy: 293, 288 + xy: 299, 256 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 minelaser rotate: false - xy: 851, 373 + xy: 363, 346 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 minelaser-end rotate: false - xy: 291, 268 + xy: 299, 236 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 missile rotate: false - xy: 853, 340 + xy: 1014, 441 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 missile-back rotate: false - xy: 866, 356 + xy: 1014, 430 size: 9, 9 orig: 9, 9 offset: 0, 0 @@ -2470,455 +2470,455 @@ scorch1 index: -1 scorch2 rotate: false - xy: 186, 19 + xy: 155, 177 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch3 rotate: false - xy: 181, 179 + xy: 158, 150 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch4 rotate: false - xy: 280, 354 + xy: 186, 19 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch5 rotate: false - xy: 280, 327 + xy: 280, 354 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 shell rotate: false - xy: 865, 345 + xy: 434, 309 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shell-back rotate: false - xy: 864, 334 + xy: 243, 189 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shot rotate: false - xy: 707, 305 + xy: 449, 269 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 transfer rotate: false - xy: 204, 314 + xy: 366, 346 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 transfer-arrow rotate: false - xy: 787, 295 + xy: 508, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 transfer-end rotate: false - xy: 311, 268 + xy: 306, 326 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 blackstone-cliff-edge rotate: false - xy: 213, 45 + xy: 1015, 394 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-1 rotate: false - xy: 213, 35 + xy: 1015, 384 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-2 rotate: false - xy: 213, 25 + xy: 1015, 374 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-side rotate: false - xy: 191, 198 + xy: 233, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-arc rotate: false - xy: 210, 188 + xy: 294, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-biomattercompressor rotate: false - xy: 315, 296 + xy: 375, 438 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-blast-drill rotate: false - xy: 990, 453 + xy: 964, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-bridge-conduit rotate: false - xy: 347, 376 + xy: 304, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 347, 376 + xy: 304, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-bridge-conveyor rotate: false - xy: 347, 366 + xy: 314, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 347, 366 + xy: 314, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-centrifuge rotate: false - xy: 184, 161 + xy: 357, 420 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 centrifuge rotate: false - xy: 184, 161 + xy: 357, 420 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-combustion-generator rotate: false - xy: 347, 356 + xy: 165, 196 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 347, 356 + xy: 165, 196 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-command-center rotate: false - xy: 184, 143 + xy: 339, 402 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 command-center rotate: false - xy: 184, 143 + xy: 339, 402 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-conduit rotate: false - xy: 347, 346 + xy: 175, 196 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-container rotate: false - xy: 178, 125 + xy: 393, 438 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 container rotate: false - xy: 178, 125 + xy: 393, 438 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-conveyor rotate: false - xy: 347, 336 + xy: 164, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 347, 336 + xy: 164, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-copper-wall rotate: false - xy: 347, 326 + xy: 174, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 347, 326 + xy: 174, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-copper-wall-large rotate: false - xy: 196, 125 + xy: 375, 420 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 copper-wall-large rotate: false - xy: 196, 125 + xy: 375, 420 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-core rotate: false - xy: 239, 268 + xy: 990, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core rotate: false - xy: 239, 268 + xy: 990, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-cryofluidmixer rotate: false - xy: 194, 107 + xy: 357, 402 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-cultivator rotate: false - xy: 194, 89 + xy: 393, 420 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-cyclone rotate: false - xy: 247, 242 + xy: 239, 268 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-dagger-factory rotate: false - xy: 194, 71 + xy: 375, 402 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dart-ship-pad rotate: false - xy: 194, 53 + xy: 393, 402 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dart-ship-pad rotate: false - xy: 194, 53 + xy: 393, 402 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-deepwater rotate: false - xy: 347, 316 + xy: 174, 176 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater rotate: false - xy: 347, 316 + xy: 174, 176 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-delta-mech-pad rotate: false - xy: 195, 35 + xy: 411, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 delta-mech-pad rotate: false - xy: 195, 35 + xy: 411, 422 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dense-alloy-wall rotate: false - xy: 347, 306 + xy: 184, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dense-alloy-wall rotate: false - xy: 347, 306 + xy: 184, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-dense-alloy-wall-large rotate: false - xy: 195, 17 + xy: 411, 404 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dense-alloy-wall-large rotate: false - xy: 195, 17 + xy: 411, 404 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dirt rotate: false - xy: 347, 296 + xy: 194, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt1 rotate: false - xy: 347, 296 + xy: 194, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-distributor rotate: false - xy: 321, 436 + xy: 429, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 distributor rotate: false - xy: 321, 436 + xy: 429, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-door rotate: false - xy: 357, 378 + xy: 204, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 door rotate: false - xy: 357, 378 + xy: 204, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-door-large rotate: false - xy: 321, 418 + xy: 429, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-large rotate: false - xy: 321, 418 + xy: 429, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-duo rotate: false - xy: 357, 368 + xy: 214, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-force-projector rotate: false - xy: 295, 386 + xy: 247, 242 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 force-projector rotate: false - xy: 295, 386 + xy: 247, 242 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fortress-factory rotate: false - xy: 87, 202 + xy: 295, 386 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fuse rotate: false - xy: 77, 176 + xy: 87, 202 size: 24, 24 orig: 24, 24 offset: 0, 0 @@ -2932,245 +2932,245 @@ block-icon-fusion-reactor index: -1 block-icon-ghoul-factory rotate: false - xy: 80, 150 + xy: 77, 176 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-glaive-ship-pad rotate: false - xy: 103, 176 + xy: 80, 150 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 glaive-ship-pad rotate: false - xy: 103, 176 + xy: 80, 150 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-grass rotate: false - xy: 367, 378 + xy: 184, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass1 rotate: false - xy: 367, 378 + xy: 184, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-hail rotate: false - xy: 357, 358 + xy: 194, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-ice rotate: false - xy: 367, 368 + xy: 204, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice1 rotate: false - xy: 367, 368 + xy: 204, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-icerock rotate: false - xy: 377, 378 + xy: 214, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerock1 rotate: false - xy: 377, 378 + xy: 214, 174 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-incinerator rotate: false - xy: 357, 348 + xy: 167, 166 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 incinerator rotate: false - xy: 357, 348 + xy: 167, 166 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemsource rotate: false - xy: 367, 358 + xy: 167, 156 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemsource rotate: false - xy: 367, 358 + xy: 167, 156 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemvoid rotate: false - xy: 377, 368 + xy: 177, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemvoid rotate: false - xy: 377, 368 + xy: 177, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-javelin-ship-pad rotate: false - xy: 321, 400 + xy: 447, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 javelin-ship-pad rotate: false - xy: 321, 400 + xy: 447, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-junction rotate: false - xy: 387, 378 + xy: 187, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 junction rotate: false - xy: 387, 378 + xy: 187, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-lancer rotate: false - xy: 339, 438 + xy: 447, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-laser-drill rotate: false - xy: 357, 438 + xy: 465, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-lava rotate: false - xy: 357, 338 + xy: 197, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava rotate: false - xy: 357, 338 + xy: 197, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-junction rotate: false - xy: 367, 348 + xy: 207, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 367, 348 + xy: 207, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-router rotate: false - xy: 377, 358 + xy: 177, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-tank rotate: false - xy: 113, 202 + xy: 103, 176 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-liquidsource rotate: false - xy: 387, 368 + xy: 187, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidsource rotate: false - xy: 387, 368 + xy: 187, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-mass-driver rotate: false - xy: 106, 150 + xy: 113, 202 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mass-driver rotate: false - xy: 106, 150 + xy: 113, 202 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-mechanical-drill rotate: false - xy: 339, 420 + xy: 465, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-mechanical-pump rotate: false - xy: 357, 328 + xy: 197, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 357, 328 + xy: 197, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3184,161 +3184,161 @@ block-icon-meltdown index: -1 block-icon-melter rotate: false - xy: 367, 338 + xy: 207, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 melter rotate: false - xy: 367, 338 + xy: 207, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-mend-projector rotate: false - xy: 375, 438 + xy: 429, 399 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mend-projector rotate: false - xy: 375, 438 + xy: 429, 399 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-metalfloor rotate: false - xy: 377, 348 + xy: 217, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor1 rotate: false - xy: 377, 348 + xy: 217, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-oil-extractor rotate: false - xy: 100, 124 + xy: 106, 150 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-omega-mech-pad rotate: false - xy: 90, 98 + xy: 100, 124 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 omega-mech-pad rotate: false - xy: 90, 98 + xy: 100, 124 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-overdrive-projector rotate: false - xy: 339, 402 + xy: 447, 399 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 339, 402 + xy: 447, 399 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-overflow-gate rotate: false - xy: 387, 358 + xy: 217, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 387, 358 + xy: 217, 154 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phantom-factory rotate: false - xy: 357, 420 + xy: 465, 399 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-phase-conduit rotate: false - xy: 357, 318 + xy: 178, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 357, 318 + xy: 178, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-conveyor rotate: false - xy: 367, 328 + xy: 178, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 367, 328 + xy: 178, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-wall rotate: false - xy: 377, 338 + xy: 178, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 377, 338 + xy: 178, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-wall-large rotate: false - xy: 393, 438 + xy: 411, 386 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 393, 438 + xy: 411, 386 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-phase-weaver rotate: false - xy: 357, 402 + xy: 429, 381 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -3352,161 +3352,161 @@ block-icon-plasma-drill index: -1 block-icon-plastanium-compressor rotate: false - xy: 375, 420 + xy: 447, 381 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 375, 420 + xy: 447, 381 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-pneumatic-drill rotate: false - xy: 375, 402 + xy: 465, 381 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-power-node rotate: false - xy: 387, 348 + xy: 188, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 power-node rotate: false - xy: 387, 348 + xy: 188, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-power-node-large rotate: false - xy: 393, 420 + xy: 483, 423 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 393, 420 + xy: 483, 423 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-powerinfinite rotate: false - xy: 357, 308 + xy: 198, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powerinfinite rotate: false - xy: 357, 308 + xy: 198, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-powervoid rotate: false - xy: 367, 318 + xy: 188, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powervoid rotate: false - xy: 367, 318 + xy: 188, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulse-conduit rotate: false - xy: 377, 328 + xy: 188, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulverizer rotate: false - xy: 387, 338 + xy: 208, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pyratite-mixer rotate: false - xy: 393, 402 + xy: 483, 405 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 393, 402 + xy: 483, 405 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-reconstructor rotate: false - xy: 411, 422 + xy: 483, 387 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory rotate: false - xy: 411, 422 + xy: 483, 387 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phantom-factory rotate: false - xy: 411, 422 + xy: 483, 387 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 reconstructor rotate: false - xy: 411, 422 + xy: 483, 387 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 spirit-factory rotate: false - xy: 411, 422 + xy: 483, 387 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wraith-factory rotate: false - xy: 411, 422 + xy: 483, 387 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-repair-point rotate: false - xy: 357, 298 + xy: 198, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 repair-point rotate: false - xy: 357, 298 + xy: 198, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3520,259 +3520,259 @@ block-icon-revenant-factory index: -1 block-icon-ripple rotate: false - xy: 90, 72 + xy: 90, 98 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-rock rotate: false - xy: 367, 308 + xy: 198, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rock1 rotate: false - xy: 367, 308 + xy: 198, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rotary-pump rotate: false - xy: 411, 404 + xy: 501, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 411, 404 + xy: 501, 414 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-router rotate: false - xy: 377, 318 + xy: 194, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 router rotate: false - xy: 377, 318 + xy: 194, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rtg-generator rotate: false - xy: 429, 435 + xy: 501, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 429, 435 + xy: 501, 396 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-salvo rotate: false - xy: 429, 417 + xy: 501, 378 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-sand rotate: false - xy: 387, 328 + xy: 208, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand1 rotate: false - xy: 387, 328 + xy: 208, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-scorch rotate: false - xy: 367, 298 + xy: 194, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-separator rotate: false - xy: 377, 308 + xy: 208, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator rotate: false - xy: 377, 308 + xy: 208, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shock-mine rotate: false - xy: 387, 318 + xy: 204, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shock-mine rotate: false - xy: 387, 318 + xy: 204, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shrub rotate: false - xy: 377, 298 + xy: 194, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shrub rotate: false - xy: 377, 298 + xy: 194, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-silicon-smelter rotate: false - xy: 447, 435 + xy: 483, 369 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 447, 435 + xy: 483, 369 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-smelter rotate: false - xy: 387, 308 + xy: 204, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 smelter rotate: false - xy: 387, 308 + xy: 204, 104 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-snow rotate: false - xy: 387, 298 + xy: 194, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow1 rotate: false - xy: 387, 298 + xy: 194, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solar-panel rotate: false - xy: 347, 286 + xy: 204, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 347, 286 + xy: 204, 94 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solar-panel-large rotate: false - xy: 90, 46 + xy: 90, 72 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-large rotate: false - xy: 90, 46 + xy: 90, 72 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-solidifer rotate: false - xy: 357, 288 + xy: 194, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solidifer rotate: false - xy: 357, 288 + xy: 194, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-sorter rotate: false - xy: 367, 288 + xy: 204, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sorter rotate: false - xy: 367, 288 + xy: 204, 84 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-space rotate: false - xy: 377, 288 + xy: 194, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space rotate: false - xy: 377, 288 + xy: 194, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-spawn rotate: false - xy: 387, 288 + xy: 204, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 spawn rotate: false - xy: 387, 288 + xy: 204, 74 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3786,1456 +3786,1442 @@ block-icon-spectre index: -1 block-icon-spirit-factory rotate: false - xy: 447, 417 + xy: 501, 360 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-stone rotate: false - xy: 397, 378 + xy: 194, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone1 rotate: false - xy: 397, 378 + xy: 194, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-surge-wall rotate: false - xy: 397, 368 + xy: 204, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 397, 368 + xy: 204, 64 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-surge-wall-large rotate: false - xy: 465, 435 + xy: 528, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 465, 435 + xy: 528, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-swarmer rotate: false - xy: 465, 417 + xy: 546, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-tar rotate: false - xy: 397, 358 + xy: 204, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar rotate: false - xy: 397, 358 + xy: 204, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-tau-mech-pad rotate: false - xy: 429, 399 + xy: 564, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 tau-mech-pad rotate: false - xy: 429, 399 + xy: 564, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thermal-generator rotate: false - xy: 447, 399 + xy: 582, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 447, 399 + xy: 582, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thermal-pump rotate: false - xy: 465, 399 + xy: 600, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 465, 399 + xy: 600, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thorium-reactor rotate: false - xy: 129, 176 + xy: 90, 46 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor rotate: false - xy: 129, 176 + xy: 90, 46 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-thorium-wall rotate: false - xy: 397, 348 + xy: 218, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 397, 348 + xy: 218, 144 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-thorium-wall-large rotate: false - xy: 411, 386 + xy: 618, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 411, 386 + xy: 618, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-titan-factory rotate: false - xy: 132, 150 + xy: 129, 176 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-titanium-conveyor rotate: false - xy: 397, 338 + xy: 218, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 397, 338 + xy: 218, 134 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-trident-ship-pad rotate: false - xy: 429, 381 + xy: 636, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 trident-ship-pad rotate: false - xy: 429, 381 + xy: 636, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-turbine-generator rotate: false - xy: 447, 381 + xy: 654, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 turbine-generator rotate: false - xy: 447, 381 + xy: 654, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-unloader rotate: false - xy: 397, 328 + xy: 218, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unloader rotate: false - xy: 397, 328 + xy: 218, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-vault rotate: false - xy: 126, 124 + xy: 132, 150 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 vault rotate: false - xy: 126, 124 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -block-icon-warp-gate - rotate: false - xy: 116, 98 - size: 24, 24 - orig: 24, 24 - offset: 0, 0 - index: -1 -warp-gate - rotate: false - xy: 116, 98 + xy: 132, 150 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-water rotate: false - xy: 397, 318 + xy: 214, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water rotate: false - xy: 397, 318 + xy: 214, 114 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-water-extractor rotate: false - xy: 465, 381 + xy: 672, 427 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-wave rotate: false - xy: 483, 423 + xy: 690, 431 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-wraith-factory rotate: false - xy: 483, 405 + xy: 708, 431 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 deepwater-cliff-edge rotate: false - xy: 457, 321 + xy: 205, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-1 rotate: false - xy: 467, 331 + xy: 215, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-2 rotate: false - xy: 447, 301 + xy: 215, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-side rotate: false - xy: 457, 311 + xy: 225, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge rotate: false - xy: 467, 301 + xy: 225, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-1 rotate: false - xy: 407, 286 + xy: 959, 355 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-2 rotate: false - xy: 417, 286 + xy: 963, 345 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-side rotate: false - xy: 427, 291 + xy: 963, 335 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge rotate: false - xy: 507, 320 + xy: 319, 236 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-1 rotate: false - xy: 497, 300 + xy: 319, 226 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-2 rotate: false - xy: 507, 310 + xy: 319, 216 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-side rotate: false - xy: 497, 290 + xy: 327, 276 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-cryofluid rotate: false - xy: 517, 335 + xy: 329, 216 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-lava rotate: false - xy: 517, 325 + xy: 323, 206 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-oil rotate: false - xy: 527, 345 + xy: 333, 206 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-water rotate: false - xy: 527, 335 + xy: 337, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mech-icon-alpha-mech rotate: false - xy: 783, 345 + xy: 909, 405 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-dart-ship rotate: false - xy: 825, 387 + xy: 909, 391 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-delta-mech rotate: false - xy: 839, 387 + xy: 923, 405 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-omega-mech rotate: false - xy: 243, 200 + xy: 427, 365 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-tau-mech rotate: false - xy: 259, 200 + xy: 443, 365 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-trident-ship rotate: false - xy: 275, 200 + xy: 459, 365 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 trident-ship rotate: false - xy: 275, 200 + xy: 459, 365 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 metalfloor-cliff-edge rotate: false - xy: 547, 335 + xy: 349, 260 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-1 rotate: false - xy: 547, 325 + xy: 349, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-2 rotate: false - xy: 517, 295 + xy: 349, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-side rotate: false - xy: 527, 305 + xy: 349, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone1 rotate: false - xy: 557, 345 + xy: 357, 280 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone2 rotate: false - xy: 557, 335 + xy: 367, 280 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone3 rotate: false - xy: 557, 325 + xy: 359, 270 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass1 rotate: false - xy: 517, 285 + xy: 359, 260 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass2 rotate: false - xy: 527, 295 + xy: 359, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass3 rotate: false - xy: 537, 305 + xy: 359, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice1 rotate: false - xy: 547, 315 + xy: 359, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice2 rotate: false - xy: 567, 345 + xy: 359, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice3 rotate: false - xy: 567, 335 + xy: 369, 270 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand1 rotate: false - xy: 567, 325 + xy: 369, 260 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand2 rotate: false - xy: 527, 285 + xy: 369, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand3 rotate: false - xy: 537, 295 + xy: 369, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow1 rotate: false - xy: 547, 305 + xy: 369, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow2 rotate: false - xy: 557, 315 + xy: 369, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow3 rotate: false - xy: 577, 345 + xy: 377, 280 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone1 rotate: false - xy: 577, 335 + xy: 379, 270 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone2 rotate: false - xy: 577, 325 + xy: 379, 260 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone3 rotate: false - xy: 537, 285 + xy: 379, 250 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone1 rotate: false - xy: 547, 295 + xy: 379, 240 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone2 rotate: false - xy: 557, 305 + xy: 379, 230 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone3 rotate: false - xy: 567, 315 + xy: 379, 220 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass1 rotate: false - xy: 587, 345 + xy: 387, 282 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass2 rotate: false - xy: 587, 335 + xy: 389, 272 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass3 rotate: false - xy: 587, 325 + xy: 389, 262 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice1 rotate: false - xy: 547, 285 + xy: 389, 252 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice2 rotate: false - xy: 557, 295 + xy: 389, 242 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice3 rotate: false - xy: 567, 305 + xy: 389, 232 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand1 rotate: false - xy: 577, 315 + xy: 389, 222 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand2 rotate: false - xy: 597, 345 + xy: 397, 284 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand3 rotate: false - xy: 597, 335 + xy: 399, 274 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow1 rotate: false - xy: 597, 325 + xy: 399, 264 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow2 rotate: false - xy: 557, 285 + xy: 399, 254 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow3 rotate: false - xy: 567, 295 + xy: 399, 244 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone1 rotate: false - xy: 577, 305 + xy: 399, 234 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone2 rotate: false - xy: 587, 315 + xy: 399, 224 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone3 rotate: false - xy: 607, 345 + xy: 324, 196 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone1 rotate: false - xy: 607, 335 + xy: 334, 196 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone2 rotate: false - xy: 607, 325 + xy: 324, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone3 rotate: false - xy: 567, 285 + xy: 334, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass1 rotate: false - xy: 577, 295 + xy: 404, 296 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass2 rotate: false - xy: 587, 305 + xy: 407, 286 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass3 rotate: false - xy: 597, 315 + xy: 409, 276 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice1 rotate: false - xy: 617, 345 + xy: 409, 266 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice2 rotate: false - xy: 617, 335 + xy: 409, 256 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice3 rotate: false - xy: 617, 325 + xy: 409, 246 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand1 rotate: false - xy: 577, 285 + xy: 409, 236 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand2 rotate: false - xy: 587, 295 + xy: 409, 226 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand3 rotate: false - xy: 597, 305 + xy: 343, 208 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow1 rotate: false - xy: 607, 315 + xy: 353, 210 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow2 rotate: false - xy: 627, 345 + xy: 363, 210 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow3 rotate: false - xy: 627, 335 + xy: 373, 210 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone1 rotate: false - xy: 627, 325 + xy: 344, 198 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone2 rotate: false - xy: 587, 285 + xy: 344, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone3 rotate: false - xy: 597, 295 + xy: 354, 200 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone1 rotate: false - xy: 607, 305 + xy: 354, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone2 rotate: false - xy: 617, 315 + xy: 364, 200 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone3 rotate: false - xy: 637, 345 + xy: 364, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass1 rotate: false - xy: 637, 335 + xy: 374, 200 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass2 rotate: false - xy: 637, 325 + xy: 374, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass3 rotate: false - xy: 597, 285 + xy: 383, 210 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice1 rotate: false - xy: 607, 295 + xy: 384, 200 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice2 rotate: false - xy: 617, 305 + xy: 384, 190 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice3 rotate: false - xy: 627, 315 + xy: 393, 212 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand1 rotate: false - xy: 647, 345 + xy: 394, 202 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand2 rotate: false - xy: 647, 335 + xy: 394, 192 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand3 rotate: false - xy: 647, 325 + xy: 403, 214 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow1 rotate: false - xy: 607, 285 + xy: 404, 204 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow2 rotate: false - xy: 617, 295 + xy: 404, 194 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow3 rotate: false - xy: 627, 305 + xy: 413, 216 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone1 rotate: false - xy: 637, 315 + xy: 414, 206 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone2 rotate: false - xy: 657, 345 + xy: 414, 196 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone3 rotate: false - xy: 657, 335 + xy: 417, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone1 rotate: false - xy: 657, 325 + xy: 427, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone2 rotate: false - xy: 617, 285 + xy: 419, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone3 rotate: false - xy: 627, 295 + xy: 419, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass1 rotate: false - xy: 637, 305 + xy: 419, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass2 rotate: false - xy: 647, 315 + xy: 419, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass3 rotate: false - xy: 667, 345 + xy: 419, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice1 rotate: false - xy: 667, 335 + xy: 419, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice2 rotate: false - xy: 667, 325 + xy: 429, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice3 rotate: false - xy: 627, 285 + xy: 429, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand1 rotate: false - xy: 637, 295 + xy: 429, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand2 rotate: false - xy: 647, 305 + xy: 429, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand3 rotate: false - xy: 657, 315 + xy: 429, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow1 rotate: false - xy: 677, 345 + xy: 429, 228 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow2 rotate: false - xy: 677, 335 + xy: 423, 218 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow3 rotate: false - xy: 677, 325 + xy: 437, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone1 rotate: false - xy: 637, 285 + xy: 439, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone2 rotate: false - xy: 647, 295 + xy: 439, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone3 rotate: false - xy: 657, 305 + xy: 439, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge rotate: false - xy: 707, 325 + xy: 394, 182 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-1 rotate: false - xy: 697, 315 + xy: 404, 184 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-2 rotate: false - xy: 717, 335 + xy: 414, 186 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-side rotate: false - xy: 717, 325 + xy: 424, 188 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge rotate: false - xy: 697, 285 + xy: 449, 229 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-1 rotate: false - xy: 707, 295 + xy: 453, 219 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-2 rotate: false - xy: 717, 305 + xy: 454, 209 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-side rotate: false - xy: 727, 315 + xy: 454, 199 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge rotate: false - xy: 747, 325 + xy: 354, 170 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-1 rotate: false - xy: 707, 285 + xy: 364, 170 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-2 rotate: false - xy: 717, 295 + xy: 374, 170 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-side rotate: false - xy: 727, 305 + xy: 384, 170 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge rotate: false - xy: 747, 315 + xy: 454, 179 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge-1 rotate: false - xy: 767, 335 + xy: 394, 162 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge-2 rotate: false - xy: 767, 325 + xy: 404, 164 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-side rotate: false - xy: 727, 285 + xy: 414, 166 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unit-icon-dagger rotate: false - xy: 825, 331 + xy: 937, 363 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-fortress rotate: false - xy: 753, 359 + xy: 924, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-icon-titan rotate: false - xy: 771, 413 + xy: 942, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-icon-wraith rotate: false - xy: 839, 331 + xy: 951, 377 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 wraith rotate: false - xy: 839, 331 + xy: 951, 377 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 item-biomatter rotate: false - xy: 487, 319 + xy: 384, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 487, 309 + xy: 384, 302 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-coal rotate: false - xy: 477, 289 + xy: 394, 304 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-copper rotate: false - xy: 487, 299 + xy: 354, 292 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-dense-alloy rotate: false - xy: 487, 289 + xy: 344, 290 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead rotate: false - xy: 477, 279 + xy: 334, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 487, 279 + xy: 364, 290 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 497, 350 + xy: 374, 290 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 507, 350 + xy: 384, 292 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-sand rotate: false - xy: 497, 340 + xy: 394, 294 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 497, 330 + xy: 324, 286 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-stone rotate: false - xy: 507, 340 + xy: 317, 276 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 497, 320 + xy: 319, 266 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 507, 330 + xy: 319, 256 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 497, 310 + xy: 319, 246 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon rotate: false - xy: 517, 345 + xy: 329, 226 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 alpha-mech rotate: false - xy: 321, 386 + xy: 335, 346 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 alpha-mech-base rotate: false - xy: 322, 182 + xy: 349, 346 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 alpha-mech-leg rotate: false - xy: 243, 170 + xy: 442, 335 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech rotate: false - xy: 333, 302 + xy: 205, 194 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech-base rotate: false - xy: 349, 388 + xy: 219, 194 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech-leg rotate: false - xy: 363, 388 + xy: 795, 331 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 omega-mech rotate: false - xy: 227, 192 + xy: 411, 354 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-armor rotate: false - xy: 243, 184 + xy: 427, 349 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-base rotate: false - xy: 259, 184 + xy: 443, 349 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-leg rotate: false - xy: 275, 184 + xy: 459, 349 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 tau-mech rotate: false - xy: 291, 176 + xy: 399, 338 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 tau-mech-base rotate: false - xy: 797, 335 + xy: 951, 391 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 tau-mech-leg rotate: false - xy: 811, 327 + xy: 965, 405 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dart-ship rotate: false - xy: 333, 316 + xy: 191, 194 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -5256,21 +5242,21 @@ mech-icon-glaive-ship index: -1 javelin-ship rotate: false - xy: 741, 345 + xy: 895, 389 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-javelin-ship rotate: false - xy: 741, 345 + xy: 895, 389 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 javelin-ship-shield rotate: false - xy: 755, 345 + xy: 895, 375 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -5331,7 +5317,7 @@ button-over index: -1 button-select rotate: false - xy: 116, 72 + xy: 126, 124 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -5393,9 +5379,65 @@ empty-sector orig: 32, 32 offset: 0, 0 index: -1 +icon-crafting + rotate: false + xy: 609, 409 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-defense + rotate: false + xy: 591, 373 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-distribution + rotate: false + xy: 609, 391 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-liquid + rotate: false + xy: 663, 391 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-power + rotate: false + xy: 627, 355 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-production + rotate: false + xy: 645, 355 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-turret + rotate: false + xy: 699, 395 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-units + rotate: false + xy: 699, 377 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 controller-cursor rotate: false - xy: 501, 414 + xy: 744, 431 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -5409,259 +5451,238 @@ icon-about index: -1 icon-add rotate: false - xy: 195, 1 + xy: 411, 440 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin rotate: false - xy: 211, 1 + xy: 879, 401 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin-small rotate: false - xy: 313, 288 + xy: 291, 268 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 icon-areaDelete rotate: false - xy: 1012, 440 + xy: 399, 390 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow rotate: false - xy: 708, 431 + xy: 555, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-16 rotate: false - xy: 708, 431 + xy: 555, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-down rotate: false - xy: 307, 196 + xy: 399, 378 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 811, 369 + xy: 399, 366 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 854, 375 + xy: 387, 358 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 825, 319 + xy: 399, 354 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-back rotate: false - xy: 726, 431 + xy: 573, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-ban rotate: false - xy: 411, 440 + xy: 897, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-break rotate: false - xy: 744, 431 + xy: 591, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cancel rotate: false - xy: 762, 431 + xy: 573, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-chat rotate: false - xy: 837, 319 + xy: 387, 346 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-check rotate: false - xy: 780, 433 + xy: 591, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-crafting - rotate: false - xy: 867, 391 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 icon-cursor rotate: false - xy: 879, 393 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -icon-defense - rotate: false - xy: 891, 393 + xy: 415, 342 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-dev-builds rotate: false - xy: 825, 417 + xy: 879, 385 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-discord rotate: false - xy: 789, 363 + xy: 913, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 -icon-distribution - rotate: false - xy: 903, 393 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 icon-donate rotate: false - xy: 807, 381 + xy: 879, 369 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-dots rotate: false - xy: 825, 401 + xy: 929, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-editor rotate: false - xy: 841, 417 + xy: 945, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-egg rotate: false - xy: 841, 401 + xy: 961, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-elevation rotate: false - xy: 798, 433 + xy: 627, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-eraser rotate: false - xy: 816, 433 + xy: 609, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-exit rotate: false - xy: 852, 435 + xy: 977, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-file rotate: false - xy: 834, 433 + xy: 627, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-image rotate: false - xy: 519, 409 + xy: 645, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-text rotate: false - xy: 868, 437 + xy: 993, 419 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-fill rotate: false - xy: 519, 391 + xy: 627, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-floppy rotate: false - xy: 884, 437 + xy: 1009, 414 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-floppy-16 rotate: false - xy: 537, 409 + xy: 645, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-folder rotate: false - xy: 900, 437 + xy: 879, 353 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 916, 437 + xy: 344, 330 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -5675,168 +5696,161 @@ icon-generated index: -1 icon-github rotate: false - xy: 932, 437 + xy: 243, 200 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 948, 437 + xy: 259, 200 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-grid rotate: false - xy: 519, 373 + xy: 663, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-hold rotate: false - xy: 915, 393 + xy: 415, 330 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 927, 393 + xy: 979, 407 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-home rotate: false - xy: 964, 437 + xy: 275, 200 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-host rotate: false - xy: 980, 437 + xy: 291, 200 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-info rotate: false - xy: 939, 393 + xy: 951, 365 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 996, 437 + xy: 307, 200 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-item rotate: false - xy: 951, 393 + xy: 965, 379 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 487, 329 + xy: 374, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-line rotate: false - xy: 537, 391 + xy: 645, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-link rotate: false - xy: 857, 419 + xy: 699, 343 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 -icon-liquid - rotate: false - xy: 963, 393 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 icon-load rotate: false - xy: 857, 403 + xy: 715, 343 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-load-image rotate: false - xy: 555, 409 + xy: 663, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-load-map rotate: false - xy: 537, 373 + xy: 519, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-loading rotate: false - xy: 555, 391 + xy: 537, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-locked rotate: false - xy: 573, 409 + xy: 555, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-logic rotate: false - xy: 975, 393 + xy: 979, 395 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-map rotate: false - xy: 873, 421 + xy: 731, 343 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 987, 393 + xy: 991, 407 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu-large rotate: false - xy: 555, 373 + xy: 573, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-missing rotate: false - xy: 999, 393 + xy: 991, 395 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -5850,301 +5864,273 @@ icon-mission-background index: -1 icon-mission-battle rotate: false - xy: 1011, 393 + xy: 1003, 402 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-defense rotate: false - xy: 849, 319 + xy: 1003, 390 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-done rotate: false - xy: 867, 379 + xy: 374, 342 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-none rotate: false - xy: 879, 381 + xy: 374, 330 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-nullitem rotate: false - xy: 477, 299 + xy: 374, 300 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 891, 381 + xy: 386, 334 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pencil rotate: false - xy: 573, 391 + xy: 591, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pencil-small rotate: false - xy: 873, 405 + xy: 747, 343 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-pick rotate: false - xy: 591, 409 + xy: 609, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-play rotate: false - xy: 903, 381 + xy: 979, 383 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 889, 421 + xy: 763, 343 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-players rotate: false - xy: 915, 381 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -icon-power - rotate: false - xy: 927, 381 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -icon-production - rotate: false - xy: 939, 381 + xy: 991, 383 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 889, 405 + xy: 779, 343 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-redo rotate: false - xy: 573, 373 + xy: 663, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-refresh rotate: false - xy: 905, 421 + xy: 795, 345 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 905, 405 + xy: 811, 345 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-resize rotate: false - xy: 591, 391 + xy: 681, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-rotate rotate: false - xy: 921, 421 + xy: 827, 345 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 921, 405 + xy: 843, 345 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 937, 421 + xy: 859, 345 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 937, 405 + xy: 335, 384 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save rotate: false - xy: 953, 421 + xy: 335, 368 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save-image rotate: false - xy: 609, 409 + xy: 681, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-save-map rotate: false - xy: 591, 373 + xy: 681, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-settings rotate: false - xy: 951, 381 + xy: 1003, 378 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-terrain rotate: false - xy: 609, 391 + xy: 681, 355 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tools rotate: false - xy: 953, 405 + xy: 351, 386 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-touch rotate: false - xy: 963, 381 + xy: 386, 322 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 975, 381 + xy: 398, 326 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 969, 421 + xy: 351, 370 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-trash-16 rotate: false - xy: 627, 409 + xy: 699, 413 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-trello rotate: false - xy: 969, 405 + xy: 367, 386 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 985, 421 + xy: 367, 370 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-undo rotate: false - xy: 609, 373 + xy: 717, 413 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 -icon-units - rotate: false - xy: 987, 381 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 icon-unlocked rotate: false - xy: 627, 391 + xy: 717, 395 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocks rotate: false - xy: 985, 405 + xy: 383, 386 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 -icon-weapon - rotate: false - xy: 999, 381 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 icon-wiki rotate: false - xy: 1001, 421 + xy: 383, 370 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-zoom rotate: false - xy: 645, 409 + xy: 735, 413 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-zoom-small rotate: false - xy: 1001, 405 + xy: 411, 370 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -6323,7 +6309,7 @@ textfield-over index: -1 white rotate: false - xy: 290, 449 + xy: 1009, 430 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -6346,63 +6332,63 @@ window-empty index: -1 alpha-drone rotate: false - xy: 279, 294 + xy: 321, 386 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-alpha-drone rotate: false - xy: 279, 294 + xy: 321, 386 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger rotate: false - xy: 333, 358 + xy: 360, 332 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 333, 344 + xy: 484, 339 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger-leg rotate: false - xy: 333, 330 + xy: 484, 325 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 fortress rotate: false - xy: 654, 427 + xy: 537, 373 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 672, 427 + xy: 555, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-base rotate: false - xy: 672, 427 + xy: 555, 391 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-leg rotate: false - xy: 690, 431 + xy: 573, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -6423,21 +6409,21 @@ unit-icon-ghoul index: -1 phantom rotate: false - xy: 291, 192 + xy: 475, 353 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 unit-icon-phantom rotate: false - xy: 291, 192 + xy: 475, 353 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 power-cell rotate: false - xy: 227, 176 + xy: 371, 354 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -6458,98 +6444,98 @@ unit-icon-revenant index: -1 spirit rotate: false - xy: 839, 359 + xy: 937, 391 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-spirit rotate: false - xy: 839, 359 + xy: 937, 391 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 titan rotate: false - xy: 753, 395 + xy: 870, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 735, 359 + xy: 888, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 artillery-equip rotate: false - xy: 257, 170 + xy: 456, 335 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blaster-equip rotate: false - xy: 307, 167 + xy: 875, 339 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 bomber-equip rotate: false - xy: 335, 386 + xy: 889, 339 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 missiles-equip rotate: false - xy: 335, 386 + xy: 889, 339 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 chain-blaster-equip rotate: false - xy: 333, 372 + xy: 427, 320 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 flakgun-equip rotate: false - xy: 333, 288 + xy: 837, 331 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 flamethrower-equip rotate: false - xy: 331, 274 + xy: 851, 331 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 heal-blaster-equip rotate: false - xy: 713, 345 + xy: 889, 325 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 837, 373 + xy: 937, 405 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 swarmer-equip rotate: false - xy: 825, 345 + xy: 923, 363 size: 12, 12 orig: 12, 12 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 53901c92d1d6eb898bb5a164b97b583ec2ba7e74..268e6df1446b34b0797a20a8ee48c1c81bea1a00 100644 GIT binary patch literal 104348 zcmYgYc_5VQ+kW2H42H5Vk*%^Mp@n3hQr4s_X(2jomh4;Bc~#OTQc=j#LQ+E|OBhos zqL3xB&7dryk)0Vc-=mZ7cjk}NaXRy?_j29WeLXJk+iSLxPnr(^u+qYOmn{G|_^&A7 z<%WOAe3mN(00S1gcG#co7_A8Pb!rRBFMHzOPqMvjd2-_Ovv>JUC-rZrcP7SmIq8#6 z*IoZ!lk{|-sFJPXZrile=eF`>WIvfOL;kywda1@N|8U+wPugb-Yj&kot-zT$a{0> z#{x^b=u8&5ZO24d5^3LRhqny%!Goa&8F}sv2T-_E_`!_$aR5j35d&5oUsE^S1_#6M z$CUj0cko0qlX)=>}znEj8wozw3O;D4CtpQ#&E%Xr?B_2~GX z`Cs}`^1BJxm2Nfbl{A-oy(zO_MeJrK-BmMZKmL9}YW2*!#Q%3_1rT-@G>Q;;Dmxj{ zXRZ|2d9@YYq5oV_5W~&cxtlmJEOGjqOp4CuTfAW2X=+fBIkkD_v>QKY8|*JzV9am4 zDgus&X!MO|tOHJ!YM~V~!8d@17SLv$5RY56`E3ikc1PfekBfn4=6Urx4WjG4(soG( z*ZWeEc8JFh+!kzmKJ)vuz}P3XzsteEC1DV}@6~K%f2z(8`>x~tI85bJtZf3WraXAP z3kdXj>7KT^`c{-n@cMW)eS^-7IJNI(Mmou0dmzjH4Xty(dTaJBP~-WE-e5ok#E5JJile7{LX&(>@A*CURIKsSUA>H|N;^=}^Ps|TFKCaSjSSZFts4`K z6%=yp2@kJ)e`s63N1pZj3OPsmY(;vvAo&`3CZK)rAEeRYF1b@G36yK@04H|7rRZ(D zsQ|VJE$=_^i}RZC0C(wJrPJbI zqh`cGZt_S_O{e*gwk=EsMFz80-IW_3I{)n5ZAmui)m9g9qS#&e z)6@D;m-l=Gfd!G7m*NDVAw@_KVs8yDu-UF`2DZPg)ZksVIvl1Extk_1meosBK>}}5 zYh&sz)rk%?*Dnf60uk1apOp#^z%JYgJZ6X|N+TcQt~WAAKSUn}<2H*@Oe15Xizby4 zz=tdyygh?7mI6jpa%~SL& zo;){c4+K~&yLjHSfmORQK#iC_s<4J-vV0f{fSd&Ac^nH=fxwHUuLC7HCI`UK6;s@J zD=8k-JQMw&X#=b2Gea2Q;$PXm{3@=_KT zt}wIubNJXj*FAE#y$|4&Ml7yy+CtP^d5HPO!_Gg=FmlJQyxCo{sR#T5h<0U;pR%+A zHdut=M-LWX>5x7UW>P7w%N{ZuA}Q7S2x8ce5Xm!gkTK(+1pVc;uX+kWrrb{5<~&k?IM5vqjbg7)v@O?;Sm z(CYi+no5i4!$b5NuePpP9$g5yp$DZAq1u?Amu1)i2ap2ebrlV-T)m&9~h!;i8C zZ4#T6_-~kYM-)VeR|(&IDv#>+sDKFC`496ihiej<0ZBaHf1u8vQNu;VKLu|&)b@t9 z4psQyEQ=?ls5@&ek}Ub=V`>pvD@j#g@wKHANGg1$qx8o49Oc4dNmF%)okSvqC+sA+ z0U}ymbofsYgf;*JN9N}L`B15Zae(CJ4RZeqTEH_5sVDE1Kf- z^_n%@>rsDU*j_(aD+td{J8a}9rk=9-_Um(%xej@4wj*Ri#oo$QNT&Y8q&YSk2%1-I zD$~PWo^>e-%?#ZWEQZAJVY&}4ng*~-&*}k}-)(kii2x)Tk%T-?hf-geR@`#>GCLNp%QI$l_EW^g&Cy0H zl>|9-6KQGb@<*m3I09DtMDIz4ew8XHk#ao;YKD3CIhWlP(c_q{#qdD#@0k<9*#pR> zo8W62TdUXjv_LrZ_F^Voegl{q4{^>CW6u4$VBG(;nt^KUNMeMkEIY92eWW@uD= z_Fge4jTA82hlc_-y7m~0i?Ab+s3Xj%u<@EI-N_N>_toRiD|UdPw(iCj(^qvVFjs0t z;w)9c+`%MZAcEy^bp_4(+C`)m|2Aqn?GekVjZwelH5x1TcUv%K+7f{CYm3aIo2fkm zqJ*_TPe5j!MyfwIDHdGXIb2_Fa=F*#O8hH%S~DJy1}4HA*KN8Y4m?vk(yW1(F#U+S z!oYTqgB6$ek|wtn9;@OG>mSKz$mQyfeJBAA;+N+^gw}(IW3*y*Z>=4j^^t{x^xy57 z&KfePLNkTITbjLo2&liWJ{(vwQpz$2q)85qoq}i&|IpNE)8!JGH^w*B|Cf`An^9u(^TBZRF=& z4$l}ECt%GvHmM4w*`cfP+_Sa>Z2i-b`5%wOz=rjyVJQL?3WxALbVNpN+e=(iXdE zyS0y>Iw_WDIQiYq0u$>s=4*@l?DhRf;&|4 zhfbEJ6pspsfFEa2H=V`iR{P3LJ~-kzUhF?(^8vyw%6Nt;cz6R8fyOm1=MNPJ;EQ0ZV6hQ_$Y4euB4Tq+O9fPZZQM|2bK5?pfDBD^j8Wu84w( z*K;!+*+prSw=F^8v%@>9lj1XDS64U2+}k?z$enBG(;Y?=tPDS?g+^=3AKGZyOOb2?`xDCxjAITruU9>V+rz-YeS8VO|yB%MWUS|twG?R80b!G zJaeQ%)eI;RZ zjwIWGw9f4xuc6y3PMzsR>9Mi7y-h}}H-EPP;Tx=n9A})58M{9rCIY(adQ`#vNi>cW zbxi^|S)f!UDmH z@I+%%943dSzHdgSC|^1y?{-A|NXvbqa@hLgq71AlmQ7$OvTZkyT`?ao3XJ@qBbJ$f zPj_CulK@gK2}R`WL3Q;x`i)qAVIU^LHo*}SagELkkIt@U^!KtY?4%8PY323T4Vl|n zcDC`c4;{cL<9*?pkll{V&>>Q=7$&tc;Wj9A`yBWJk2x>bEHG@NI1D%ZFpFhjRX(4M zgJBtLW87EO6_%Ao*9r#@XRUc}J<#}s$Qljc)@C=++-**^tGNgrm7?8*lW zc04~dwg6M9*5W#EKFlZ`4|qrd%x|TfF9jqyLcw$Q4Y3?^Fz!GSSUAjEvu!yZ5-sL_ zJ>%Na?c5eM6EO8WKJw}J>B}||=U}Q^)6Kd0mh>3-1}!89SlUq^Dr02tIX~o^c&2mr zw8`-GaUTL!ep_@Ze4{D&l;Z3lfn>&VG9HIxQ;|mz*RiB;%NxWfn!sq`OMI}Eg+g)c zfaD97OUe&$@=3J1j8k3bH&o$-6w%DCd=J$ebCZ|%{G4l}1YTd=!i$wl`!eY-_8?>phN zV??@ukPgcw`R7yG5gc%jwtFXrmG^ODKitp~*QUphc|h_fX7b@C0|*-$am%Yl_9-I? zE$x~QkGUR36cF2N?)H=Nd3Y-2c+QwA*lz<`S2Z4qSRp^6XJ#V-x<-Bai}u<@=*NMA zBu?F3?tSEwU_MQ6JfQWul)3f;9^ty^QZ=;z9G0)JY-~bcHy>7lWhjCOW+D!g9Sw~# zPG(Rpp~9eiz%W^@Jcls;-iT7BL~MO)3UNp@3_q!`ZctZb!93G^TCPEA<^Bx_b?^is zLDo6J4i*#+KF<9A%K$@pDABQt7bI)Bb(Y3&D<1pJJ?GC8s>}JHUUu1qzm8Y#M#1cy zUEyM5Uds!HN_LUV*(&?y9yR+mHly&&=|9Q#h0FE9>Iq$^y7_Nb3*zULfWIQuPBLB1 z613Ce3hyhZA@`+w3NCXy7^K`t`AW%9WHlK3$^1WXdn5@mSl?ByYV1MQKLh4`>~1Ac z0u!wHpio0^`cdR*^BET8d9HI!Fs316NBxH1ovbJgnFJFcdTXjj?!_WAv6zU=66W9p@HK63fo#0u<(`_FgHYXC9wX%VYh0y^=p1sPX!`$ z-bE<~`$G<9dfyjtFrk%QAJ#zVJGBS-4|DG$x%5#?AV~Sn9v8N|i6hoeEw2Ov>vsah z7}h>Qf+FZ!;P-uYC#vTVrQb>&h`g;72HzgdZYjczTU`FA%^0}F*v^ZYo!_PoYSbwZj#Tug(_Ij(ZV_pN^c3&?2eo*y>@Hy@Dy{vYvG_q+u#EwED2w}%e9V@ z0g=caS6wCQCE;~$wJnDnBc-US0Y^--5#sVeC;(VomW0k*7=py>E5!jTpoRX`?J;SH z4>^pAsez^oB=XPjq<4H^@pa(vID?tSCj^wcwk{M!(v*-wKu>XbHS~l4*pcc^6w$wV z3BX`uiMYCCX`Ij{wmlbdb#Az!xY|jCDrZWrBE2m{JPuVBZ|u$Rd{^_iM-}L`)GZ=h z+}rDvkO(`l^C7F#5c3;&;-gaDowxDb;eN*HDOF`cT~ovS);;?9`^mts=5E-?eN7tS2(+h8^~ zSp5wpnt~FvLX*`gLS?f8GqCMQLeeiWNGHv%loBR@R=37338Y~5&AO?dp82Wcj3<#Q zns#23{LAqVrlp-r3657BkjEMNIy@1ogoP|Cfdy%tB?lPlWxir7c^vYi!0ld*<&GuCZf`(NPO< zxV+@v8HD%sJ!kO;t0zo&#e==7g9 ziUSGNe!okfI&eKEFVga#fX3On^tUdBLNjx0ko81RVv75Z zW$naMSJGH}HxTx%MO@Q;q8tL^g}@_Tju05eQH$BV`dY_lY@axP-Q~G$bkqCd(9{TH zh2{MV0VOd2v+Y8jGBAyIGCh7V-%1-#v|6etK8azrF&y?LJkf^BcN#Tc2fpi5vq*mu z%aKUQ&HqVx&4>&}ESqtSt)uyk%Gje7 zoW(4HtL;`Q3Zo43C0;lMb_o7_ASZVY+|kb6A_8(Qu594vlw0F~{A&ODPM=iQ4KOQf z&@Q2+9T}&jsJ5{jO38}MP@9t}r~(Wm!fQ>z+5eH?D4yEdm&6cAoTgQv#CU;mb;9Eu zfp-Lqd_QSAyiSDej1rA2)f$;^E01p5A4>`+yx)%OyCMv9x_r;)+VW$B4vWB+Ul0fM#g> zPUU9^0g4b z)G;JeiD*05CPIxWR|k8oWsW2*RRV6puG-Tt2j7~BWCDb^p-V-)6i1b3y^*i^oXCf5 zRT;p~UVePI{Xd1*&4V9|8&R28IfBiLBlZ{gx<7Wk@#dn zND)Le>h;{Z1e^~899ir}?-x*Qb8lUP2=#+iIvqtU;5vbaw1Knv8vN<_iZhx4HUvmzRBtQ}G`dwh0X_u8z zutMSQIA~@(0V~mEhv`xixTEzV@*j87MSv0k61+s0u@L9^kT{&LHGiW>WBkC zm`{IX#HY*6Drt-(K?OEqz)yr4Qf`=%={0E7@s&a|hXj*rrChok)etQ?R+zJ=)-Jyd4KvFJU^uG$f^i_4>Ep{vVs+J_LZ*B7ndW!>d^ zIih`aiKn>5ixf%wICzEC+SLcvpt(yy1bEl~v> zhy3E*&v>s(uch`HPX)Y8mTs{UxM;ryr8=xd_sZQ7Enku8GhEqU9seI*9TG%=tBy36 z$L$>OinYY>SEUs{&8Q+&Mk-g>VAf3tY$i&x=expEz|e+{;&q46GhSm42VKs-zrebF zU0`9Pl0EWR*(QC(|J-kVGHA3O5=nZ@F9HlyGV0_y8u3AN!nx8Po5@sLZF-Fv3zdljHBL_a+CuiC)G|I1T;o_YBKz7+iGm&9G zN_2B`yJQ)|S;1j_I&Ea)!k$R}Z1nfYFu*GWNYjoa@eMFb7OI^oQzXhXZ}14HS0Ai6 zPM><5-O%G^=@W2!WIHn`W@BB*kM=Wma4pB$XANF>&9Ob~7K%JmZBERktL*(WM`o*B zO0!3)fn)M>#={jyDo4eDamBpVRI@|KE|eP7YP<_XEHr0q>*ZW^Vcnl6{9T0*AOwBZ zZWD5pMikyO1ikO!i-Amzk&f}N52=g>HNq@8(xUofXk_#^f!88aLG8uGrE(Ypf=~zZ#mO#F7d{&jl1+&;tIS=eqw(d}BV_@?u(!b0*iV zL_qNRfu?AeWHm9^ztX+P7;zvZ9#C&Ac5Yhh{%}W@opMA&Rj)BQ8RVN%9p?{$@}U0Y zOI*fnkMc>;>5CnbL%xn~gUoaqDUc@0vVLA5LKrV?h^*g(Pl)_?eh7Bxny-hmQ^Rh7 zOJz+iHRhNQLJuQOTuz6{?3zVd5+ApEExecTl4^sU&=P7R{scg}wnHRg}G}dr* zSf}_EE+HHH4~P-r$4cfW-BZDbY2fQTJR6i7zZ%kZU`jloEFVd}Kx!Kg3s=0LdB-Y* z^Y9qQ;*HY+s%WjfUXfL%i23kg8WP~O3a~*E@>s?TGmLBi**_`#_#`9D4D5r&l>oc# zXt?^fEcySqKCF6fwfOGEn{C)F2qGUDdwc6MCgX68Ff@K?n_O^imhKy<9+}-Rc;h5m z+J_@%nM}eGpv&!iVMB5YZXZ9Q&VLa2(nFqsgls~l>?mv%rZWWp=?^4_at<>m|m^i2o zB9Nmxjgtg0EJzpOEdunu%yh9@lXuuPG-2FlDKI}00>R0geMn=0x0-sT=N&t+k=4^Z z5K{5#RWmP;o$9}myl}IR%n?}#T0RIExp9~o`tCq&0Jrmd%~tro9UfDgv#pqz!uX@Y=>NUxc5buwpL2VM||F`as-)EFF~bLmtc=gG5v# zZc`~CQ*G3RJ%790%U_OtW;9^LD+?u_<7l@ziCRG0%gp9Jq44M1@E5tb{0GqGNkTS8Nl{D2^L<7p9}0tW@EmHAAAulx^?#C{rUdZ+(W4_mbs$rawMbxQ z5I#&D_A6Xx@d^FVY&xAAj`L$XO+phvV}8~_#I-V`Q58TmV1Or**#YCpQQ$CY?gKRb zt^@-^j|_p+I;80rB+r6}+Oiy7z9h2&rN18*zqeGh>-bCc7^2cK=71LZ+62r&Px3lC zV}k>+k=lF;H^&5p#QzR;Yd5&{auezrHfoM(F>m59?@f=b8W?Te?6DgF9!2a#qxU=+ z9tymk#?OK#I3UOjnFhSW_mftS=L4BlVI@!mxM# zOh0$>Co31Mk-4UV+o_IGdLm|o!tgWP0elORb=d}koDR?YnB{ANLj*(A@bZo>XMrMH z-~aZ7?2Jiq4qu$vPM&WYZY?IA zx#CkdQ`F6~J`lH)Duz7{6a*5$WuYng8t#}hZ3v`3nB^rJ7GU+i%m z3U0e}?!!P)+N`)^Q@6{8;j>Zc^(HFrha#;S=Y!^EyKTaZWqGdeZ?5WeoBF02+RB;= z?kLE=cc8^&96mC>x2J{q47G z7+7MoF!*uY&(VDE*1+<~smc?S%`;q&KMcd|*bzAK!d)u{#06 zaF)7oLi?x9JHU5y?8Z7X%Vy(%R+kiTg*U-#?Q-yd!Q~xFeCujE9Rlg-LZuLCqJ7mx zo8C;Dn<_R}aYV?RU#6}+x&M}Q(pvP{nNh_kL)(Q}d*_#TPt_m2J-aaJ)*EOsL1s=j$MAN3^rMxq=gakv-|aX^0ru`eoZ8aZKs|@6#Sk z&8mW|UgJ1iK@RNn1Q0kf3Hghow7Y%dX{P7}gLuuM9C45>AonTnOry>*Nb;Omojf9A ztJ585cV?LGV^jrAYGkHjt`}Q#O#|c|VVR2uaw= zhrM5(nFwy#fVre9D<$A$4I&47$~pJU!O-}p&a*BZKjtG05xzrs>Kd^L95seta?i?= z$bALi&gOsv9>{o4IAixK*ic>18c`CSW_b1|b?e4o76o0neb9tzz3W5)`HN&Us?ZM^ zH}b+{q!fWVJHPGk)VD0bu2%8-x}z@4j<(0K{8)K*m|q?WNB|HT}5?jqWE zE%&E^r3R=~M<^4w^KS*#NBKyCh4O`;l|j>8qXEv-HX>jqz&r^5&*^W~N(3xK)1gt5 zmU36JPq(YiGkJK0?F9RvNPGNCB}|sBTQjnMRcCQ=Dwc07xp;S#uJ4pvy**+Ss}4%$ z46c5?_hA34{QYf%URQkb&qRJO@P;wr5RPbOW|odCST66wWFL8VI0_({0||o;!7dg! z>_U_V#Yd1+oP*SCUdz?Q2MjmBj!fXCV0Cpje#|abe|X}{M^m(%GqX|P*WEMwttOqC z7&~G~-;7@Va|g#B@`DUmm9fp{g7D2U-@fgks0vHUj}$U-yB_e&rFDUQR`QEdBeb}Y z$%=XX;z9fR)0{@t7s>3a|C6~5ok9vK`W41T4R%q;3$P=s3dKZfY>{#2Ne(0`<86K- znY8n2?>q@~eVa6JcEXi^F*C@ZBFI(53cJQPakoF#ACKLV0P1S;jlIS;XbBD&Gm2&w z^$MGhhf5Dthz3j=33|KDElxgrZ3f1ANG%2jaMZrros$RL*T(=lZ9c0?@IO^pA{vf} zZv=g>7fx4^_8!*_Z`YT<87OzGt^E*BD{MMYQ`A3BK83-`oauUZhc&R!yrPyXt1!>OUtk4{1=9qk=1p` zk62r5a(X!#G+1y}0 zAUhDrQ2DhP_W7(**dIMxdTA1?W|)1U?6v-LX(rjfaBxc+{vy zT^p?&`PKUlkNjO7Y)JFW*gB?xOyLv^;%`2y99@Mc3iYNGtTg4+^}m29a4 zeh7LITw_TzG2Xj;3Ccf3oha4 zFLJiN;|1%GDPG{-xE>OWQD1&eWvE z{VBuOf5#s8eD^Tu1{k-tieA2Wh}IgPK?bLLGhTsA$h;8dGE1U)fEh7tX9`$QB&H~1 zvD<7KQX!pf6v&4q0fHSoq{g1tG2cBZ?VSXH^JzKVl%*+pnffUz3R|E)`KAb8eU(0ze3Cd*SXC_1X_V*yh>s*p=?O@y`DS;GdJ z0Gs?F_-kvRDEsB@Rin;%xVh`oykNt5uxYJI_z$Dtg;?)jDvpb%}NaW=yB@8yLF8ibVVtHt45pB`%qbtIiE32q977=*lL5;hhI&lf0$9GBSRj%H!; zzK3gxmoH~LhOpuBB;g3D$KOA|1jWrofrorJ{YHQA|17?U?x zU??93gYPa*IUHDTnFG}$Xic!=P_nc+C$68YE zPYr87+%=Lk0~-d4i6 zxKV(kflwcjc$giEDWEjx9qGJ5*P2Hg0w+{jrdix7s1?f8+ zc=jkaAo$BCrG}=$CnmYcNO?%38)FOBuj2D=3-)(qjdeKUKhvj?@t?yBbkl1i$=Bj= z)N6NN)@(+pQtU_+i)C09`KOYH%abi`57eh4kMlNp^gqZB2AW42}QS(!!hW*nQ zX^o>NZ61jL!D~-4rCv(xqH!gyF!+#Y_}U6Hsx%Q2+1!_)CbMOQ}t4f$jlyPD_S3a(cc3@=PvowQyHwq*B| zt~#Rk$%Y)N^YV|#;4726XA&#D-w?olX@|R?qUS|%ugNjHQZrb7d|2F$EXPMyRk}{Q zePek}*o8fX?DN=J#knpOF#Ngn<{Dr-Q7P}P<=}zrD|>qRgZ1OgLoZMLXuT%&(!KY- z_`A4yh5!F9svth768At-o_fkyTbi=faxS@{`qgVxGiccXpgIcn zYZm8vRa*{)@N|dv=L~BaFT`fgZG%mWtbi^nVc*&7cZp?Y*RSG$W7iAcEwq3PCOR*!^P{SLVXwH+xCBq{AOJ2vAH{h7OCaew<~4KNz03M63Fon&n_)t zal*t*q)R?`xFVPpp`(8{%8QBc0Vr>P`ZlfJN--qleTh`|&ecr!{h4ZHzYI!Kmm`k2 zjWx&*;7kPg03xKja<=E#5*~$8DJ8^ht|mz9thwjKt5uW=`?WqdRgnq(1m&xa*FSGN zd16#LiB3+5mPtluw6eF`oqVl5X4qI*P% zi%dQ*bba-NInbDw-LY&C@C8pUC^%0_~kj%qu=eP-<}Mu)YP~ulF(B9M&-;|K5Dj?*?8>o$s>)cahSkD@SW+)Scx1c z0+)`+QjN&T1gu4b-gjNk4svL$GP=@ypU3{s=Mwob@jRRT-LJRKnf%S1kVzXxUFkaP z{4_d8-Z-M>5Gx`6y!yyc*0a?$ubQIs zii*7-ot#$x-r2xBp=G*lh*`gT^#RTMi=C3EcV5AthnlNdwPfe}-}vR<%P+GJFbBXp zVrJbo1w)NLMIo`b30mjYNBRq%P@Fy}-}c*OfvcqceQOnt_(sIldQtE2en}0GvaQ(e zc)*b}1+JHG?e1z;I?a@*&fT0 zL8#FO_yPGLRR33()h`XL47rEgr%$$u2hGm1(w(~JNX&_$Pd=$HT7!=8L_|7`@#FAi=_28lX`lMPTH+gnJb#uc1fCPz+hE&LD=JK7JfP!&q7zEJz#%Wxhft1N{_3o@7)loAhIeFAsm96?1|p^a z19Ju2%N>2@;#4VKG@I}=UI2AY@EuJFPqrcV{(p}JNs#v?vBt%60DXZIwPrUU#Bdk@nHf|>fAtHf zqvn;sZ~V8iraDM~81BWwpuxBdW%56GBFTxn;9p=pc;J&5BplZwec9mF6CMB)FENl& z@WX%FaDV!+msP~tB9pV^00P>j~>5;Y}Qfhs_REPJ9KM@)mlyy0O~!4zc` zKU9LqkC>cKa8*R?p>s+N_wPb|EsOzdNEh({C{lpq)7=Bxx~rgGdbC1R6oFREHe?0#+5MntRP%%f(MB8y5XNbVWEOw0DD@$QH)v(*Kkl+D|=~-0gDptKw}?d}XiBTJt%#{1OaLXeJMY zr>b110{69fesBBN*A#$}7&t(OHJEZP59a*(L8S(B`wdXx02H5}9fodI9IZ%a8foTU z=c@iB9z~1lX)7%4Hpd?JAJ!>OPK$ViMI!QDF=is4L_&>*N3eSNn4W{+;iE{5!(lTnnwGqI`_ zaq*!KDMq(}uLYKH{NzJo2p{IyP^@b#PyXk5s!9)3sFgd2LM5E{iy<*!eZ4=$bPyk9 zbReqM%TS5P502o70Aug`@mlb4Se1{t>42j4pjt98_xNykr`Vk+?my?4DNn#w`>@G6 z^ebQv@*ex!L%g=W&CGq&K)@u^-Dab<3BjWVsDigQyA{gzs(1W*{8Ku}rZeAH5ehG_ zWcC$(Yb||Puf_fJ$szHs?;7p`5wbg&f#N{?lWCKZi%J9!cTGiq<>&=@w_5JFUzoB)9~Otg%KRW3nVlr^G22uui~XP z?K4*l(~Uh3ac>$ffu0u1oW2DX%NL$h=Iz2gy%U0!fT6e*89^N_m%g2LYbiH#KhxT; zMP4A-iAosletBT=!oainpf^wkNN$hi!?Z-8Ke$T$Sr5im0;37;F7xUqzEMhCqE*CSzVsJYvHN~03_ujc%a2QEAAa=_i3csM()4isVF!%mX zu{vdjC`9MCpJY1qc1gMgz0^09><%%uKou*l!xx2NPLIL9ss;D1xzKlGvFKN0b>aQNax<<_XRJ?-i^M4KWNZbt7dW*KOLR14|LibEob+y zS-;*70?ovwry>U@V`fVJU_n@&s;~Y|GLJmgBEB8|(8laz`nS@c(5ncN4AN;84>X;k z4RS-X7?Zy(#Cw7lt|PjOvJutq7wZps_#%y0@kG;Dk^rlVpIG$U4SOn-DK+gQjZoKQ ztmg9n4PQchGmXyPY09@Jh51m|`^`d~*o*QEn-wK95B^qwIAQ_dT}g_8Oz1B!0=+Zi z08}LO25YkeWCuln%H9l^t>tE1E`i3n@!`_BnUTIW&y4uu(kLGPX_s2@QC-%EgX}1G z{DchaATxA&8zrR%PlOFv<#DTKW4Vd^cf>+ks~Q&Hs)S-EsrNr~?uw0?#6$H>R`s#J zrix=v4%foh7>REy)qF2PY3n${16`$p>@<_Uzz2??C2}FZpYQGSCxB8Bjr?`PFWUy; z`{qlaz?k7EaV=gPKvs6s`@#NM(G@M#_)Dm?&Mb58UrU*rYyJH#d*KRb448LD z6~0?m8hsTQ@YnvP(?+ADeB#)7@EnEgXT!Spy$5T5{gl^fTH~Ewk!D8nUZR$rG$6bXOL?K}~;Bx5i^Piy~th1B$c6x3}53bxm z-R1IDFZ?c#B8*bglUZ!{Ivj?vv&9}AIw17dh;1ht)Rg__ z7?UVbXP)2rLAt!?THqvt6_;M@hO!b(mM4->*g>S*l0xlxVD8)S2=GQ)Qy7+zi+Lq< z=}7b&9ci33*x@4%oM;R6zONVA7t=x)U*Iym(HiDdD`)gJ=i1NJuBPZvCDN@9zB7(B zc_15AOaAx}7JFunu@xfvKvGKDc7&0;C64_x(jpc>S)bB zKpTtaq0H>&g@qdw73d&Si{5ogKPQ|f&!-}`5`LRGRZEUj$d%14dO+i_w`=n|QlRXyJm-^G4E z=EAq3?8bctyXMBa^Bz-oF2BPQ;p=-Tv+)LDU@?K^@UM`mP(2{v^jUQ&$->W&=83QX z2iio?*4J3-ic^l#=1=Qi>krkhHkOS9F!;t8%*0Oj=c;HUg-VzJon`#e@HrvV3Y@4S zRfhe1^}T#IQTZ|EhR}faCME(khXuOMcxB zIQ_9XyHNTco&ahsDJ9iLG}|4p2z!uTxFS;>37jiVN>%fKK=v5JJqfXYV{FHVxW+dY zq~bcPCWpOQwonb>{{4Jc5@ziAb)y}Hxe>s`*b84uarxtjd)~_?2c+kfuAsN<)@&YK zaI8rJGqkl@$R8QjIg+3#^5dT+h9IJ<&v^~ak(}2U{CLVRUTsxbHvb$N*fd#^EjH9- z$L+*u)6t{%9l!VPhcwdISfYCyG=4^>e*(%;B$zI_CLtKU1+YPQL8BR-sJst|`OB=7 zFPeD*mB4-D@)m&RC$GVEc9o03(osWEL=dvc)Ar<1^C0KNy@_CrV^jaRQXBNbh0~4) z<5CA1iIC1$$T9{M6N`>%Xr@)Bk0#rFL65*Trs2_`>VO){O> zu6x~Qa$Ao|b!mNdv*^InDE$Lq&!Mw-KR6o2YyPQcpj5gD%)L{AT_pIcOuqe${?dFN z{(gt_wtO`UUKoJYk%*l;X3DZvp!!O`>t{gScvRbM(&E8nSfP`)uFMQzyh%F=Y-pPm z_!gaJ3NQ7n1v|sw0boZJ!Ft~z_^6@=Ds`N9cYdw3zCB{J>3wvh$C$WX#F3(WC)SoA z!|QS`vx*=4=ZxC!I-GvsWt*zQ(i)6-Fldzga!>Cyai7%4W=E&%MSj-KENSbbQ+$*^ z^aut@Ql^()bv<1YPLKbFRlWw3ujrQNue0!BmtlqtPz)M`r9m*YwE~%PBI&bW$#N~7 z(-1T_{yR;8z7dSN=Eq*%e$Bcdgq^*0b84goRNyI-J&X=KZ!!| zFKndFrPL}tlS^p1Y;=MgW}EOzpIO~4aMtE1LS3RUTzxcohMAw>doK87lz_#PSp87- zwzD|@4t5c{+zga^bXEC&#Y)J2B+MVijc*ogyZ7-Xuq^@wX5vFH@E9LU>-B_FVVtMa zw5Zl8_VKxyKV=9kQuwjo{VH}46ED3Cu4#%2o2z6{3=55Z)s{0tPn6{mG8uD?H@IhR zvmt1DazPbHEjFj4nM#$_qSO<%% z;KCW9eY;G|2RS8U@RRzQ^&04>yrU0k{f5o-HCrmj2?s2TkeHEu-*;wy zkKXV5ys*sjT6+F0)eb(*iS zWG+~|Z}u+=4`K%>ugB^ala~%Tpr^P2EX2G%*KgOx+z4n4J&<3q?-Au5nhO%H3v{PD zN+ZjLe|SS*1)}X=bK$qaxhCH1jbK7Bd#g~^dLEM&oe=q!SEtS8o(&x2XG+fJYz}ha zET_y`nV&OQko>OX{={dw)3+Yg<*wyXYn_BOC73zG#xtmHK-#3(_P>vsj1F-ok|?HP zBMMu#d@IL~9b~L0?ug~;bA_p2A^HtWnbwR;AsdLuNu}oVrQ>y3M!x9-6?!!N35WmC zAb9amIXHh_W}QrRYj%DSs&9=Xyv@&eoay%^;2%G|t|=KnN>ZdO--3BJjOZ4O#-9s3 z*MBL+5~*xgtO*_1JjdjW^%q_kd3-I|wUqnCi_T_3Sxe{qW1zJ9+D)KiR-^MnBF;SPFbM)HTqn};Pwrhh9#0|9zjpENBRX9?v@VPzuhD;;Gd14B8WiYEKN(z8)}}YH_)L(4 zNK`K#KYn)?>GO9x>@O?+>*~A(AC5?wOLW>1*)8yL1VIVuYVVl*NQ$(`yK40PM~e%2 zSR#8`bS78lLB_)18;vgZ@YnY`>w6yC8TWQvo~+M1C1xs1iQ;CSTQ4L%Vp=dyKcn&y zQDvWTWW=|3GuQI3!&u3;lsmRZd?v}z{n8(fS3WF>kgFW@{tI}QcHL4ISI1a3Tg-Bh zS(fL1=6TQ8HOG0JEqOwiVnIv%_Y}tSnG?}$-?R;^K1G(znc7W+UC=Z38QgDBf3jJ1 zrcN5D6wObGx1SB@f0m~>7^K`Mg%3B>-P?U_XB20h|hsn5b*ohYXqqdH+=$*MwM9*dAipwQ~dY+x$Lj z>slm!8@K()i|-{MUPWUalKa(W?cP8|40}_|amh+1bO%h>U{O}V*)c~c`FAEtc$|K` zw9@%#+>zgyb^7LJX32^bUFrq)+Zx=yw8~f`8c2xA4HEU!vIX_cdjwC3#VZU4`?Sff z`?EmkTOcqoA#Hno^P~Pj;i+I7o*|^h^IJhV-7*Mf>@vg%HPrm-5I#hE`$C*=-2 z+0&Y2{(!`!M5EKy~WCS^|}jqQ9G= zDb6%-P6qk1`QFd^uwN0TC>P#o1lwc}NvC;)$YmU=Ch`1mI;k> zzYTl^uk{{$y5|+CyeDfT3QEf@5KZe6?Yem8^tg_tVw|UaH<}N*%>Lg0^UZ0l#hK2K zgXgZY9WnC~4;ddMNidISKd~D>nMe8m^ZFX1hS=%HCyLjOr>Ay*lOX$@DJJn1>pL>= z9yK!a{$FpihJ$3H#pOE|uiwh#VzjoK>2TpK^5OlzPD-4;RHa^H|D-egQ3{Fi>Bss+ z;YYO1IY*T<__yeUen`F%*j?K^(fu+>w5NGW&)a)4Z*i*Gv_;)pRH(>nL%5Xc*M*Mx zteW)gLwT2n3i_3#ws|Ma>h!eEKa6~2nR~Zu*!Gb&mt*_%c9*h`JG*ADiO8Nwf5JqQ z!&Q+>s?$%KzD)4q+3zTcl@kO*9!~m~ks9@D+TX(77>D!Lt|!GxxmBtL`PWyxifNz! zvCNWXySRf3?j3_uE98DjxAUKxojBHmnM-*UNY1Z>#WI}^vRl~3DbX96FZS;lk4EFeNXv5X@ zU9*8z^XVgAs4T<~tn4 zd)HX&e!9E0xjS{$Ys(n1WscE`@H01E{rRvvHWKdDdg?FPc3lZ$P||;dJ7kz_ifSIS z`g|8R514tAL2dhWuDeC7QQbCmrB_Y);4>+M;DG9o{#P33D|cCE20Wh)9Ujm-^;aq9 z+xJwLu7UinEwh=&OLsxXK0Mn3kmlcO1NA*G=4)@3iQ3VKkk)pRC6zK+o7iI;%z3O| zl^xU^TiE_XODRe1I^6otiz22&I@Fd1B6hde+cgh5gOxB9B-`uBu`OzNOhJ|#D+2j` z2P+{BSGUr~`L8uGiZ9$b{)o8s!v4&QhXh9PiD5A?SVmrP!C=kIIR|W+%30dsLH7@6 zc+TPvW7Mz=OHJ-s!!O?&eT{S929o{i^xoFX;|MeK6qKwdjm#!ReB#HS6@!ljAj==r zhcYNNYnW~X&JCiX(r3r_dG2rZj<(VcHBL*ni$iLIXF}(syX)_}{7dF(Liscj8^e~~ zg^)l&oHPfOoNM3EZVD;hfcOzRL(z;#7742I{tBT?%_3)f^&3;q>?dc4 z-?w^bAc9qMVgAj^%*D;^-A;MiJ{UJ)6s3iVlbyvHMeUyZ>_#OHSnV=SQoOkVyehP~ zHF9}GWK2rAg`R#EF?oDVSGaRAv?0U6?8x}1G9}`%4~KBSfZ@JpBlOX$6XIq09frU1 z&mv2K$K$o1d;E*f&D)QMWR;vmE;-5PeTpo^wj$5B@Ko(x9D@#9b*Gw067|SnR?pkq z>`+a%$e-Z8G#luYfb%0rdloMTwrzf)M-;DdE+I|G_mX3Xc{=8R0Gx*RXkLOm23h&P zhgU%H3h_KYWiGyL``S2eys$X8ZK7f?Ujsk?A+h=av<97p(sK%_eW*unGI;uAix_JE zX5JU4F7c5c>{o!U$kZo0Z${KMeeZVZ{%xn>wc~m2Fbt>06fo{i$kb}Ozk7hD+OH!A zHm2WQ4+ZUcF7uK0+f5@Wi*4Ux)xKY%WjMZCm-D_{S(exE!Wg|6H}JP z%vN;Xa>#c4u*T@0a7#jiM%&5Fpu|^Omk4L)J!!f&=5lIp{%e~P8TBPI$5LnQk_4w>#4Y$Amf3|4ZY>)9w0ffaj@g}s z>PTsQ&!t*;+uVx>!xxV78~$^U3FrWHYhr@8K|hTz!JR!;Z5Q-K2@t=w+a<0G_^3pqeYa;|^tfBDAM>4%8c|{#kgZ;f1V#l4me+QxfqsWt#wMoaxsQM^mR;Wu_>jEeOokY%pO(lnRi*;tJU5C&6M=g|oR|jXhpO{= z!Z|q)bbSXN=p0DwQpqS`^VETjAu!J>dH3q z?4q{Pb|P!%wFA$P0OJpj#>39q)UNH9mB31`XLFiwT^HvDv(sPQE+B+@c(!KUK2Pzx z)u%O-(4;x3aiYEwRFH4u5z%k1H_W0gfWtAw@2i=Ucn09UHs`@H+ zT_DxDw(E_tD-Gr9Ecd6gO|QNP!{p6jfq+`1RxgL}XvrbtT+v?D^Q>et+%BYoZImqDl5d{NACA8sPD0#-E~ zS=>RQ9(~Y(ym9HllMa!DOd~>hP+tnNQeEKGQ5G#U+^EC8Rilw{{En2!mgNkYG2~t} z;gc2K&93ldZXx(4wnn?!>gxQI*aBL^KUZ9(*%>=2hVRdLMdEcOlw+K)JT{+YuqdI0 zMBUsoY8DW{oLzoxFNv|;tH?!)XD$(D_Ee6HEYUIBIpjZ!hSj2vxF%soYG2bhtjeml{YfkQ@K0$VB#C#??mvv^I9A+BnVebFl4u}AGKe(CQM|l79+6Txx@DJ z^dwL1X#rIHtwD)lN7u|ve8iNi)`DxIkY>Z37vUSuUHjN!D*qXylkT8;`Wj6q_gAEi z*ln~|Qc@nvC0nuD9x2Lo&>AbL^zU*N+W8aWp7A=r-LYn4^gnjVNZ%qP@Z_~c!@bwV7sTuWr{ zry(KSt8jMx3$MnG0dRN;taHT*?nkd)@mJqO8~yesaYD->Ia+7o{7kf`L046rgpC#* zLD^55>9dv2$w+gmJ0*RVADI5TVjm(_eGC<2c@Q2r@#BgQ2WYFO{C5Z_MCbMK5%45z zCTzxdq~YoEj$Wny~MLSp)lm; zV`Lfdz0~XZtH+fM_vSI6b;7n4f^!k~aOHJ~rS znI$FUC^8$J%AP6*#oZI#JlW_<<+@I<1or9(1l> z9vASZ;6v+i7V{oXn7_Q^?$D6(3b8`ne*oRq@&43>se7~rlrgelO_Wqz^ChNP`C($i z{Hw0Nw{tNpoJGFf|NiMK#b)5av>@~*>Yhwq0w@1qn~eHr2DT1OA?@6 zB!)3^+mYVkHX(f(R$Oy2XoL4ve!O%(Cq`ioaV6{AWg^*WnRoR<`=l33?8^3yhTOii zNj6lF!}Di@@Z!Z=pp7oFKM7EvOM-)JIL4mGC4oNh0csf*h&R_RzM|pC`eEbTcp<$4_ zyK}X-i=_|iYpVFeKK^YVH71Q;n06wBcXRk(cBnF)`m(x>9Ix`$F$C zE?j2H%OOR0@TXU#`1RFuLkf%An0tw?B$sKp?hZ)0@*xcplHfXTlmZ*c0o5Fl2sKR0MxMxrzk$lsiN-t1-|8eB5}f0Uc6H0V zrCy7SM>ONrS&sr22zJ43r!REUnW)+edL*-*v(?j!LhZLXf3W+qQE%mXvu`IODW;na zJbK!)M&#>@PgRH2{gq7La+Lm7SVT0<7bW@|8N$qBdpK*b5`Nqp)Jv(AAThpax|@Cu zoIP)g_=>+GM(FZj?Js+4kHn+ku~LP(GUZb)4Jjfwhv^|x4wVKvL%*L}+L_9$Z^eZ5 zoc0hNjFC9EkRR33FSOJ?SVAI}m+|CB#yW>OeLKBpR_P00M7wRyta17BrZqoxN4(LG zjIOa3vlo54ucauAbk|2c4sxyUN&JxdB_i`d0~fpJvSNz?7sLL7%9((?m2fkcz5mh< zzwZtXo*kY|^Iga2z>AJKvmZf4>z8`C4JdL|MlC)h%VfQD==r{|<38WkJ#rrkBNNKP zSL@sg6I`_;{c+Ef3v9pMzm}atifSKBq!nioGxg6hG`~?ZxLMX*Xe@!u7YDL-Urfak z;tAxXsHS;{8p(|qV`6>EA)K?n{9Au@pR^BLtoqPiZ9sqAZ7;F}M=$+C#Aamzt9twJ zXjqHR5ru~>13_j=MPK=3u z8!<)&@WzK4;|cy%-e_7Ih-S?qi0F;r9RVC?A-7doH9BQte<(6}i)Y2JYzVr3M>4P( zy`9k=In#Cef_Cro&|&%h#vyFB*>}{=a=gxjD>FzW?*i>ljb=VgvY(6o(0)v;aP|&ejt_s>`zI2iRy@QO zyk}WDp9$&T(odRs zzgHv}r6OJ{E;7;*9R#FvzLR~};b$4iK14(}vVHbW_3q6i>TmZ4TAotZXlJW-npx*4 zr@PYo-9nLZ>HOd_Y$}SD-{*A`YniB#U=PY6Ck(F)$4btB944q}hc84RxniK< zkMFPakm~i^_FQ5{#`Xe@9D$Z0n@=?;G>>dq!T~7_5Ay}aHc<1qfbRQg;JFV9tkY<; zy6c^tJ&)H-8~)mfZO44>`#n{y+ci+ieKF7&!uCTPW&Sl~y(0Fk{3}VN^WFp!KnA!` zmvzg#kf^L=V)s;6R~Pb?>g8f|#)&y*NII6R)c@eHBgg$Pj5I;T4 z&p|>z)H2>f<`KWT!)SWl4xt=rcD`zYbXj-s=yzG_(&j~Y72;r8LEfd8YZB{_tNSbT zr14S-my3nx(>;BRQ;>m4%;VBMw+pYSp4@b3N`Ln{#yR1JdTfY~5su~0}$P(=`qK~EdZt_aWrd`-MXlx@8@stGeaT$NuT)68wo036 zVu$^zXT7_;*>!IT65_2O4tyn~=Z~Y1U;{nWGsei}vc%v(B%v0m_DVT}N8mRCYWYtj z8t$#F3D|;AfUHW{;r8d84r7Kfp|9k5aJ5mj-G9iRf40N{(3@Wn>Ah#ET<6YNSbt%@ zj3ZJsUR~2uG~Id=MUb)G$a}kF>NPFeqCf(1Ex2 zCFhEHA<*_Au;M{_&TKf|&CRAx&pJO?N725ZT3i5RJl|PP&(azjJQ|Pxl=+tZaDn9Svk0!#L z+fd$`7+%V`-6d4if=nYlW)KQDr4=&h?(o#-DYu2CWa4Q71w>BPSd(qU+h_`>pIs!m z#7ui>WA$t4NFhHO9Mtpf-~o(W1bI0IdCYu%{BDK>ZqG&ST3B*<$wGU{%QG1o*|jxK zhu^W=nVb5(HV?MY^iD~^Kj{K#RGxsm&(}5n;ZJj>B*IAn?N#&#zp3**>ce%nz9=Hm zIL2Xc%O+=Dy_nHU*XMdC(^vD3`CWv8en({`XNg6@KNAZ-+Z>qZk%7IfJMnbTcjNg=id7QzsGf!wB);BdcB*D zMslGZ$gjs`h`n%c55Z4H*Xk%%Yqu`p`r6Ttq?!17VnWZ!(9EY1y2AzW_NzFWic8M6 zn<%sU3Xn}jWlc@UkgqjJ@~QN(x1%ZRr%uhH{jgUVl!Er-A+89IClStA+XvqE=J=%cbE1YiDQIQyO84-r?S*+ z@vlCc_{wD<-AF?wfa1oWNI)}z&|9Go?*p<=Y7kf1N0=cokn7!(5n9{(t3BPn`*hwB z9D8ax^dkSrtQQ4iv~C)*Q(>x}nU?(AbK7rIOZ)We`G(%1(YL*Ee!Bb0KKPw@@>Tx2 zn4t=ufEV7>7LUC2`=Ggb;mzsQ{8tI2We3Fr`I5;`mfg7SwQoSLUh+&5JvlM%0LTKfmaU+Q+xTlrRhSJdKY@zx@nvXc{yF``*lPV5=?x(di- z|B0ab@6N4jrFdv08O?a3Wy zDpr%`j`F+wDoSSMn_EyD)NqZ88g(vP6k;mK7Y=a*_G90q^qpK+UOy?3@#`f}pC3v& zyyYGNxIlY1vffIISu_H?iw=OMos|U1?Sc0sz+1hhN=>_}xVaG+0(W>mm@aw%nIu-L z)2ml#!us%7j==)*^o+?s422}+o_YwQR&}(F)J9y43KEw43xlsW=P#`Tbl*)Cc@3x z$hEi#I7);F3X^`S!GqVS#qvNcf&dEefjqjk=PZX-yhbvm;y{>^#NPI!UT3Ca5NFkV z>FxGEhlDf|TP5RE@N9*H7T`{tQ88!EW&yw$6Jf;K%(mcNx48&;m6Y%@U(Gc$p3*K0 zo6Gas&+pxXR~0_#?FRgJ)pCKhdnYTx_ibvgY47>lFkqFlmUp|^e9c42m2otgwLq?) zNxBHKz?y&d&g|{bMX(24VcAUVvfrx3)`r|5da8pc6woIa9D`AHF2Jd3^AQZMn+_pX zPjQ^K0D}!;5S8zLn&i#PQX3W%KZRk(Xv#Ipt4H&x;IPj8KKIBr?*-BFdAnDkMSSSP zW@lkE!Hopy4!Ze>T~p|%s%Y`)*5eZWK`i0VH{Fln1h{n=qSP0;0Kb(fL}(OLm))8B z^f~4UxS%`+f=$aAE7847A=Xk++QJ(EcU=f?zpxKPDSISpMT-PajB^@`6*`H#0WV*+ z8-pz&jDGE3jXDNl%{i>H5Mu*ffTFIh0xyKSHw^OIKV9cEW^rcq!%GfMV4iM3dgtTT zR4)nMywrxssagMk-$|VN=q5En?WA%@uW{zfP_^>AwD_sWwcESfw>fkN^YNEgwjXQq zFl&{`c)F}xeKc#CEVsj26c_>qI&MD!m?SWwHexZrhP0KHlJ9) zeh`P`KYRa>XzeG0!FWs!vc<(u`zAiv2&(oAP43>klez8B2c49E-T^qp_T0=)M_&V# zSDNA7R*=R89qr@a*%jQ^3i(d#1L})iz>4dv$)aSE$o#HU7pwTM&D#@-5XHXY{*ei~ zgA^o(OiA4E#_$8$4qgD?Ki@f?6dQO6ORt`F?Oi;3v_(@ZEdzJI3Re7%72;7{6ahF^ za{k~-5N##Z5+U=ktQR3Kh-r9d1w)>i|+n~~P4 z={@QL`1IQ7gbODY;epzM@JtP7!EAY{+{-Zn9LFC4s}B(#ulj2H(EuxQdiIDLh)xqq&HAgdj>+p!11N zlX#KUebpE_A;o^n-edV^PrD(ahT^idxhaq=colAxuja_h>IsmS6$PEYx?T=>&z$tF{%HU{>+B4nTCJi{t9FiLC zC`AB{zYLtXe|ZOK_aO4jI=M($YjMbYKJ)fc`^N0$C#S%rxJFte(w1+U$MFp251y;-(*ciYLn12Zi2T4lk`+4v$RBAx2s0 zChFD{{v%J_SNwM`LjsVcp*C`#Fyzg4zh2bx^{`P~`p(weQK#XqAe1lUZh*#LNhN%( zAL-G6iq}(oV0cw~dMiQjZ;kcqefJPwV=hkgyWAK7sMe*0@}gqTlwO4`JJEyCgwx8a zes?j&4jQmtUG)u^qY(&#am{-_QTT8899eYy(ZQB8cI33by}Y_RpNtELm!BNd)#gYO zM$Q6yp0CkGpu+1RO3GARe*Jib_{gMck7gf!GT})Ta79`V;PboS_zv01OYAf$OP017~VEQ)?@9*@(t5ilm3rK?`ugZn0Y7=mrc)*wGRC-zN zX8XuzqjX)st>DyePkjgoBUUdweb>DTZQhG#0c`exThD`Vm1H+N0=#TKr}RoM!Gzavgf&wy1!(6}*g@9MmVqfK^iHQ=hZ$DnwxUoY};e$A%Cgy1O_POR$ znzO%BkiypqckV9NPs_T^g}0SMhp+WPhTC< z#Kb9PtpZpy;lt9A<_CkK*2YFj@y!YX*~pm203200sw5XPa6CNRe0;dFHPe68e4DqU zyAx0~Ifc?V5iIvy8sMXrb#Bw(tlPPRfL|x#qe8=mliwn-aLU!R!i{u3M?$WmlY=Gv zw_HMdu@@LeWQPmvq<|&Y>ddwi#p$KoAQMw3QB|@6%GHqVx-gu@DBJZDKi?CptAZzXiILHf(5UVFb0OkDfX-&Xp49fSu1zcIZj2qafTNo6ExK3?Dhft#WC<`00)tjV zqh@>jE^a(n#y}D+pd67^c|$cSNLo$}0~+IdEh&l!!dUVqNEeQBSeMx-i2se@T%>In z?w%uCdQ^*5!SBKcEF5l-fw30sWM^yDV=h3WV_e!mn4o@jcAXa8$LMLKVVU>+hdHxn zFKR^G($^k!nJHmUX2hZOkV^U`P!u$+r5d;pg$kRh35!HLb&C02mP~?MFGGqGNRA&P z6!thceRz1Gt=oyyKWu;g9?1Xi2MSnDmC?97tX8RZ8D}aX(t}_ey3Wo29_ZywgGo`z zrmd2*7Ody|jmue6+b_sT5v^kvckjFwt}@9koM>yaJ9)hS(<^&$ya=Kv7M{-?= zHj)xP;j`bdC+niItt!1%LNtCD(ZV`D$q=gwJ$tDJiEjWGAv~1!SH^HjLZ-@m$VM2O zyINXmVjdM`ZEpB?%p>!%1=q6EWnaU0foOoV3=r(+4)o;Fx z;b}Z@jqunMc*0$7apL6;#PE=?fPKJ?N~3^Ir|}r`|K(0+#6^rAaS zR>rha?#C>n@04WM>n@&+32Dwh-A=J@h%BQljFb|_X|rRUl7ziL?M9Axc~ice+*BSI z<^nIzW4xPaY^R07hBX(Is`-1=o&L(@!3*PaP9>rDs9LDgsv(irSN3yew>1%QHs!M) zXB!cJJ}gnc`1)|D+RXYrxAsbgO36CZMAEl=+Ns4+?+UzZZscti(Q~R?Xe~7=OrSCd zjs6Q71C$Y7y+YsBdIcwm9xWsA((di*u&Mw#c95*r6FCe^mIh+(tQvmDt;-n9YZo2< z-6$80Ip?xZL$d%-OPlh}zE@EPF7im28{P^(Qmu7t8Cq`MJfk7_@NA_dji2prCd%M}k$~?# z)~g{i?4Q%{r+t?@)BjEXcJ<;gGykoa+$X7qkZGeE^YNCN+~>nrI}vg_&)LlBe1BZ? z!bWO!1G-10)Kt6WZlrAY?;o~)U&_*a7G~}@vvQQ|9tTa!c-QEMgg+Kg<)AL$RLSKi zCwyVsbFb!V^dBK>^?tLqf=4LzpufGWNX!Sw=$^iKS&vs9pwJl|6zZfU=fHV(ZaQJ) zc-;wS-;d||f2{aUin_F)ut7YkV(9Zv8oz6l-R6mJ3(ZpS^8%Rb;CuqWQfEI9^6pQ| zjU|K1DaNtosHO4{BKFQ645!f8*~-r)s3)XjIcw|8esZRaD5s=|zxzNkPe0l1(VJCC zQnaPMFXb>l>U&5SZp#qy%Hv`Wx--+C-5C9$-5$bhO;J!EOp`b@lF}p_rol<$gJ(WT z#qhYn^U*Jh{eW%0jw}!T zDMD1sLdkT|a128golmM0Nfe1-@oK{+knH4!2Yf20em;I*vbZcfQI(u7j2n|q+*SPPu({Cx7e=R3=ZDGqXyCEX!d$d-f50J;@(^xTe#IzF++6cQp)2`% zDsR-4!TRvX!o*O(wQ4IQ- zGx%EZ?E@|(TbuQnJtMI=J#34d&QEjx;sTToLz{zjs5Xk&UH}b_a^VQU-rAvkE3jIF zc*^MS!U}vc&-8A4fZUOGsfO&)AJ9F^@1YMK$NMoy0h=;f{}zbfxPX3AzA!#P6NVl= z66PJZ8WA~ARL<$5rLQ2!hnWTOeySg=SqMqq%=y!or-&~ttQ2HFL2WSpg9OL4@G9am z$TQK24bYgD%=VBub7wXws;u`y@~i}q)250O-cok&WnM|Ni`+1jdxBO{LhIjuScynZ z6QQDF*~a`NL#v*oau!>Hi0HJHfShu4e=u)9?InbDpo@IJ^}kgac8|syEi<2mK579P@72m_gQ&~z!?$Y)c)+EXz6ms zlsVtrfT5~jFPbhM)I9K3fs3+{_3NvqcPLF$y6LEph{jPKLvUs9Br|$msaFXus`FTu zeoTsfr+nc1_UO$DI`&M`SFZy*`~sctUjL$nRiY~>`p2o}W!4U~xtPXuxcXw+^iI75WPE2GN!MOk<>p>aP1e7>9}O}(#Y8$5hgPdK+% zGF`qF(IlV8((IZPML~j)BxjeOAB_BJGd)TSS4sEUC2<;1W)CqSVz<0!$=crh0Po4%5O>XDuscRt3_xZvLvH3xH(Jl( z{Mb*6oPEn^wB1B7o1>|K_aupBg-&3CEjeN2%GD6~otNjL_TO>?9P5)0%BcZr1Kczc zZfq(wQ~#Y~0#aqpA6#uu?6LJ5L_gwWYyh%31B0-_>i)$*Whf{jLH%LT%fsE1^CV1u zkWLiQiAZ7_L#^M4>4R5m$HIuP>)!(19BPMvfgIv3evDusOB$&fnwJ{h4CR8L7EOA# z;w1MB01o?h86K|Z7>R-TV6g|Uq}W1^BHz+Si{TI;Go)GO0ZMAG5M)a5Na18h648=S z2HV3P=(3;cBvo^cAx~vqmRx*8nyRc^`1CCr?*mgylq`PY+^~J0|{BO;3 z?-FL2-)jj`La>*YvAx^EHeOX%IJD)wNf`12BcKzFs!`{0Pb+LJPY901Vn>H)kGY_} zp~0Bf@kCvLQ+Y#H5C*H#K;#?^NRuKM;w(^jy0W9O8tAN*@bR{Pci6C#0?GB>W z+?f|TFO;vceqi9^`V|~!M%rTH;M=)}H@X`-Us6_`xCA*zz`Khs1z%*~6vLGg<7FjA zeZ$_?wIl=kM5ls%QaegPG9hOjw!pEX=@6$Zdt}h}kugS9YW>A^T7&Zr+2OLBT6y?vbA5WB))9*iZh*ZSSa9Gj zuRDE_2lX$cV^CS|bcV3)RC!dr8h&>534|@L#&=8sYudenJE1AmZKkY_9jJwb8yAX_ z1#xZokmq?iH^Cbttr8iuy%)vH&1;Z?Yb2)_~+yY1gTqe%X@?UUyM+t%&65veT` z%#e!ksJ9xU=#CKKbZ!`FstMJKIN`85G@@1vqDK)Dl~=u*0Jg*KuMYNgr&LZ0e5L7k zs|_Cf>+!T*q%8`J#Z0G>klZ#=a@B%Scdqq%5^38}Y{qXDRH%%lX_G&VIndZDdWkVD)r~K+eYHYmSruQ&<0~B*aHbhiM|kGar>d zDW?&D0tp7-HxRaZyYpY!zWykFe98}Dsg6XwV;LFXBVBK!6$t1G=!=INhJ)Mw8cix| zLl`fK^niwvsKDk4@t}ol#MxPq>%y$Esry+T!_`5rEbl(3B zD=4Wrjzk~D7^Yn6Gg^1zzt6m-0wvdWZNgIw_vPtg#0rVLztLT7EwsQh9Irah4CybF zfV>Eb|Iq33qI4vs(rMTN%LGqmMF8Gudx;@x);O`<9Iu z730k`1o~_lOLKsP9V0TH#DevG!d7`6#O)gxkR^b(bX8c~-5}MI${1V~f)R!qNwAej zMSf=>D*DlifQNAqlpI$PUlsDGCi;tjM-$g$U^q?vFTBQxo5}#PAb4N4R~jGwLSXnN zVfa}J=foL{h@R`f>OB6az1g9_kMButr0tDyo2S92xZo)7$Oss*1_nsW&pjg><0M=Ev_KrVEC z?jBW#jN7hpEG?!m9v_K(7Zdhfi&u2Gf{5?Ri-j+DX_kC=&4MpbT{#PXM-$4kX`!Eu zF_&J78b@!C?o7Va zo``Fcp7l!uYrJ%^a4p%chKQpRrRd7}pMBN?nQkrd^`{|DxH#p%`1PSBfaclK`d!oqgbil%;A@c4w%E+rP00x>5xb+Wkn06S zmS@bcp@IkmW0bKX;vO8G&Qj&1`iG+9`Gpjan7-`%;gHxN%4v_CO&EOn&O4H%K7<*p zKd_neO|W8>&;Hrms;qGtkUS<#ok!r^)5w!~ZD_6nMSiIm7DrJ4&1n@x=1aKFeg!@`ywLTkD)#OnoWYPj_G@X zkfnj45!%7+!(_PNeqE|xPoG)V#!Hr`<{(ess9aDLEjsVOtK zzoCkg8MD52;c}H|vlQ{C;48&)RY%kbIk!+5cQF#j2>!C;j>2%>%axQ8 z+pO6TB0@ApMak6!N%a#iR40lqOsdIo5Ti`vYf+H@a=$f^Z4Wd6|C;-lmP$keD$fei z@2wQ>!6Yl1y%+;S&nKBG(-@Bn-UHaK{lnUsbI_=|IN^VX${Ujw6`)oO*TP`NxhZGi z#NIm;R4)pxVCuaRwb#kf6NlhC818j{1q8cI2;8DL5YX-!)5IBL!HQuGos~9Y!S_F5OY4|98f;AH!qWe}7|VSOe>V z>9-wmkP`xqaYfThb7G4OL{tnK&W{@rK9Wir5dEb;-V#sjYX=9-5n(ebSc1S|zeA;y&pE72(q+v=11> z(gX)=qQ3nvY!SN@g~b7x?|7bEMU5ZwLbj)t-8B_l9g-#-8hfO`9H_?FnbB1p=A-Fs zgLbnnCI+^mu+<6};ai=ECUKdKT(H*wMEA8Ltj<>0{5~NHyI+AJ$3Aq=s~A9;FF2-7 zcc0^^eWdf;;~EJmymF~w(O8mN!{a+7ef-_grvLl2cU==QeM8d=wzz0^KY3Wu`#{((GP(a2NZO(dZC9K=+>0rk^&b*LGuPA@B$ z!?O@bI*v#BPHyMLz*YbM!?9a#L7}$u1KneXRhCYyqX@oV3#*rb^W`5S^D9e&X*2mA z(|1sFqWXys%$2T6(bxgfO(6HeJ^qSMyXCu)`At%F4*G5pd@;*Z++0j`jM2CPVtq|6 zqG4$8KB|GR#c$WRLv5~sdI-r>4&00n44^E#+hwqD>w0gy=r@bMMk@NXcp0k+VaVt7 z2oUyT|DP(LwiT$W(AGlTrP$gaXmpCHIL-Dn<=%<70C1gvrwX97!KgJ9SpJ$_ILn-Q zVa3PGz;FS=Gt>ZZYtN7{7cF|t^*isn5#%_!%14+#V2+cP+bShnNa0#!NuZ*nB#pp+!YuE;{QB{3`V_?_)j*C`@D5}fWiZhH^QJ0WFvE{3;$T- z!ieF9_bU|8wH5zuCUp1z^Yu`!r+=+}M!-JZ|$RmXoBAO4ZDrwTWcF*P50H zAznw)SrF9d%LxT(czLX(^@=SQj@`Y2R0~iZODnE9I$lGk$aY@{Rr{ZBg<;fHrZgK8 zHlj@%*Y-yDDDFyIR@~$ieY}PM->N%_u;%o00h{sNXNC}=!&$hzIhq#|#1x=>Jnb8sRZgTFMFC%geh<=lmn14gE?g0#6Ln$$toxgVSUJ#*S(PI)^&==-)ZjHOnn8^9f;R+YMQnx2bn&TOZ%#a!aL6M`H^J}1@niDLoFKZAn#Ye?I$rg{?LjqBJ;am^ptmM{XZ~l+5GmnR|egFPB z3&yUr*fJwUO7=uyrc^3KE0QIHAQ7TKyl9-V~_9FW-Qj~Qh46{9_ zy1(Dw?|J@u{<~lIAJtsfb)M&Od_M2vbDsU5UCSbvDokWVz%Qo@0f)%T$>iQK=xAUM z-|^`Wgk7U854fYTV3*he5hp6|8GjU0WXfZXYYi`;lc!h&hC~^Hf{h#XZj2FcL*g(q zeq<{jSiT3=K8EKsVf}p+!5H+xB0(6~=mV#2a+vUPaH#guu1G6kx1PCw;6^x#(vD_i5SURvpL~dXTx$Gs*ClW&BHgTKIIsCWcEI*1O z38r$ou7F|#?s8k16(CsPifk@>^%oeIJcHIax(ARByYN8prwai0v0*+`JB?Dp@*RLh zBH4hJx)S9gloo2sOZDjG2eA_B56=Or7R z0m&I90gGVxcYAIXE%gUhzi8X}Xl*yrHaXbyV~K|}IatCLY?cZ5pGCC|ly8T{Im>Q6 zgfGG^dc5zz6V&V1<=2PY#;(D#M62W>{I;5E_Za8kZ_v@8T8I|9Lj<#%yG{oxF;ghg z)2U@om~VwRt_R{_hh&8J+V&AZ=9+rHAonILVYDroYltxkM}7Ns1=b!qqiszn_`Z@> zd_t>V;(@9t4UiUjsN;`AnU_u*Rer4EMT}Sd5sah z7KdE|*MqAR?avIR#*TItv3!Z-fdP&yN7kZyR#0Lf$YWlFmWv-T`UbCdF(rq$#5Z~7{!TOK`=jp750}rV9Pa=6n&`( zotLm)!y!Rx7dFuqmAKr7?~wghsN55MX@kvh_p?oahMAflEZhN}h`}~Nt6*SY0uVg- zffReG)mELGY?pr%MT(GK^e)WqWfOq81!VvcYrIZSyV5_vum;F_bdL)=*bKmXV$#+q zZi7vvGb&L%xBvM2!NqyrjOH?B{;acP8N*#%EILRPDHQ>3lB6p@uYtu~wqsTN=cB!_ zc0IVnSkiuz_BA)%`@-$RKU2t$M>&r}#H*)Y;VSU4vjdlvF6^OOU;J2RID>Kgz&d#2 zQcx^}dhE{(o*>Obam#%JYkbK&(uX{Lh>_sK2GvXK^sLaO%4|CdN6mXc$IaV2F#5xk z_2l?g97Ne@P0#pJ7|V;yxKG>ZB#tq(?je0gT^ zb&qKGv@=~6yq&RI1SCNJUKo}t6tQKq_P>6?sZA|}4TDF9U6nhUUDeBs_tt;u%p`Q) zcilBBH|s$SUI#7#fJ6sy-rXx+UiAWbf#8N0>LAO9lI`2kVl$G?ox?E73T^m?DIAv{ zVf|*Y%McRS7AOf}8;OmjgZOkZKT1v9zB{TUvh8>OP}Fl^&-v$jd!AY50U=3^El`OI zAAeE_FD#|MBBu(&@(ON#Ss`RBcsYZ&;BkW-SrZ6KqX>1cjsGihpPKGtUA%?{Qu8C6 zeSYP!Z@q+UKZ}x=%NY^fr9R4{{pE@M_a;-OIbnsF!r)Py9||-vr37HLXt~+>`GrDq6+qJrmcuOci}ck+BGEBI8YPjgSbJV9ACQ1=GTOp6 zm`BC-EsnDCrH~dSYCvDi`WJP%kN~I`I0>@)X#(I}-NN!co0BasWbQ0th%HYl<9BOo zr$JidN8q|3lZ;#V9g7@>$JN3cZM2wJzp8phMD9L#=zTzeblqeH;`AFqbh%5)#}pS7 zD0mep4G8mQawzb?4i2)08YS<-0B7s2HW$`M)?UcOn1F$Z@%QwHFx>|r@s&c{RZi(J zpmvOWd|L^Lko*oEgQiv#d@#OuW(9{Z0D}UBtH#QZkXY?$DCK4DM~l7{9*l1kbP7a~ ztMvvmlXxEe;zNTHmzFC{$*R&gI&9@rsBK~~|L$t1Hlab!pZ6yj>ONywcNhL-$6Gw0 z^kR|#@EpGjsLpg<7$Z1`0-{*x(>U-VT5}pL!$CgAmgEH}$%^~gdR$X+lRHl(9pHbpfX^kU85ZL%Mcom0ypd!2}NysmUl<3$&)Sma zkswtFrT0m6hu;5(r+o(X$J#jsbxXPE;Xr*sKpWkULf$?Q1P#3$gYX&6NEh2&Zj%Pk z%}D0a;qX2mBWi`!5jpg+I;bu74iyKT$aMzBJ5hwF9fc?Rh?H-SftLKSzk*^`FEpT( z=Ab8)JOaymx=YlJhJ>6+e-~LfM2o8p?2n@S$Ltm{iK`g8GZ8>CA{oHOcJJjGldu^v zG_-L1|657zfm@Zf{@ZizlhvKf=SrN%XfVufs!vO*5j(Mm0L!HB>kOcumKuXbd;!(; zjmccH|B(!EfgF1U`=`DxuSJnv2IEGnW^5t*sD6@hk{+^Pt}Y`jLULEy8^fl7Y}wOMp##yQ?bX$wJ^R@OOoM8382qlG^V_tuLq2;duPZ+`;5M z*0cStQERe6mdy8c1xw{U8lpVlJpAZc*Nonz!h)@y<#(JYUfO?L8w{$f1MUBi-Q0?^ zA82u2W!61LA)A;9I_d21WmOQNeGdDCa-}6KAEv--mRt4)CR^#0Uvk=~4R(fJk4yzI z6AFe}YD-K1Bp7)dN?#ipmITT}hz*kvc9uMaG0S~WsvZ=l_l4RYODw#tsA)3#MAmjc zs&{bswTzr(7@7yxXnITEE{MZTcM3y-G*eIq(OMPoi^G`%ozARIvh_(47L<%@tqbdV zqWIr3bCUolCy?C4N$EABPkmI!H4r&y$TU>O-@|~0`mZ}SLCxNK$_7&C3h+#vF9caQ zsL^E#QLsQk5J`;~F9mR);|`zH^u4`yriymph3ahH+BAXQNzHMg0SIX}nO z6klJmKm+=!Mq2OHD`D2fzGyggmIp+oJ7mCscf6^dEwsAzJbhP_y=V5UC`wh zI5tpVjT*P+ZSNAclX7Sh3i`Syb1vCs7-BF`giT(~TaWs&XBI`BMc93W%B365H zKGTg5#4Ue8pT_^5i*WhxV}P5v01BRnP1HVsc$ho|gqEvJ`$)YrB0x+-;oCw%B~tleeNu=g*&sR914^3DkTW)fsu@ zs+t9&>0g{6-_a1PfkuU&%B;GzKv+`$;|Do1j)r)T;xfVT@cp)<&?B_|b zV$fog_R0E~5XXUc2YC(Fsq1v*sXNwXE%P0%Dcc8>AsPhcQg($at^wN+V8d)RmEgXj z4RV+L$pwd{<&(eHQZF`zpLA`#x;JkDq@PzT@t%YnI{qZ*6RZCv%BhjqvU1XW-#Ikl z&EouN04r48czDfTI`A*?vF1m<7DUEXbKUP1KC5{ftx%4K1O2HlNWt< z^3l5IWbOvTU3fSG6MKGKldDx}mOI1?zUjOnUgalFe^JFjc$pI0^Sg?qYn<5`2u?a)r;K)--kUnKERyFooNP08hefxQP3m-cn#OM zJ68`!YD^<*{VdNcm=7Um%ps$YzA5@7CtIt`cLkIuXvkInn(fYG6Hoq~c{-8v1dxU; zcz{TEylk!dvMow(b?Mp@K#JP= z{R(gpjGJy#HsZVmk`$t#!3B{4S4qGi{wObGp5w=vo&lV$<%J}wG=y8O zj7%GjwnYKtD(ZJo@EhVTgKurOgbW^YDjV^hTSZF!5h1SOUrYSyseF;0JYXvXOvi@0 zWYk{q6H>_*apbf7052c9%EH5!@r+6F*afWlsVB|!*Vli_F&gQ7dXoP2mg+lrfpu&} zTQ}2H;3{nV5PcMV&x3j|+63N|mcVqbP~dBLtciUDP?Pz-?Lhki0=#H2$D{24{3(o= zqRJ@4Xc032gwQ~%lG|j*Sql%7;;GC4B~mjst6zMTD3(JSu-l-v9Y&zS`@EPxQK}%Z z1$->enR|RH$XWqvpNcqASx&#hzs{wT5g9g@?knP3!AE4|)=J%0p6<9xgW~5|%1Vj< zQKjuGTkA(Okh}l)zuWvaOuqq6lCTjjkRZ76344sCa%Tnu zB%FGn@^)@~aRE>dV*rdAd!s(zIgNK++VqrLT;Upyz7MD?k*#=X-BR8WX6dqy){4{ONIX36+JtY+MM}4dc$uOMll573yQ^<6a!vm3ok#CY2+6Yt zJ5fV|(DhuUsv3E5RjqAn(C{4~qP&OaXEETkyixY@5*kRm!2&^9@keKc^*(-Tv17f- zP0sTC_yZd*nLTM&2@rM0CF!fYDZ+FZ>#;8OGW$i=a$bstmx#%Iy{2kj*?J=~4tt-!t8Ys?M}^i+f?R{^YB;*AOR6@_LfYBrI*%9FMVWELD!C zhHl`;wdb{kBj+bq+8mdg=f>`TxC`j^-@(>o_(wGyeDBKD1rlMi2gENbc&U$33PPUo z57=tXUXKLn8;Kq&rblX?+~5VL%nG9FzK9-N=UDeeOyYWuQG#syYY&U^k!We!o5=#r z$bQ{B9x6)oJs)7?fehcEiYv?Xx3rE}+M+h~WAZckSfh9^WSUPFqeaoH^GfA?%LjZ~ zEsC}ftbdv1a^<060lI&YHMHXgJR$UVPzumr2$6U*6LKDl@eq)bal1%ZYNoce8{xy9 z&}DwZF!GfKtAkEe!M}R$sxWz(;cXpaG_Qfd%_wsJ=ycs6XwAdjOSSlnAsIf~gw_{V z-rNqS%?$0XdA=Op&ZzCZrRfL~hoj}&e4=Yz3lXF*W<%C;n-Exg-b$hU3)>E2f$Ksz$KT|+TXr;O)(CZ)We@~s4;GsC|M@;n$LzX( zd+Qb0T3F_$wmEnw2gX0!y5BZ4v0LZ6zF&1AYWz58e+Q_qUm~gvQ%#2}Hx0I}YOlO$ z0Wd6NIjw``=*neXKy^|3e_eD2;5IJ#qv%;)HDS=84Dz|-fXV}}A8EGkbTZ+*;gj7x zM(+MJK1zdaJ$=H;iIo#Z{g8XMJj~7G{%d-@ym9Qu1Ql(0>~;VCPd*z=M!it*WqvTe$WTwAWGkXTx!*BG#>`cG8r7@MEYg_Sn}m9_Le5xE zs6nan(3nq;;P-(G?MB9n$5Wh9^ZOo){V^cyJ%SDc0%;!QnwewQXMI*@2U&+ ze?hkVcn?la$rnF(zWiS@T!P*IhYSZ5#Y923a}|(mKP=z2l(*?J0OEPa9$eXI7q&*G zgnL_%@xHwL%b7v16)i~u@5Mk4m#R)$;GTkHCsd#91KEe3JgCxMo$pT+ zb>xt%-A@PsmFX0ZX0C^5t9CtIojXF?Pr8%fVwXl9s53#PIPwXln})>g71K-{%Ft3TxpYY9fK)crDri&%c^j__ycQkQtu1ACQ1iOi1PVM z-`W9)dns|9I6p7$69Wn1^cudEsK4gH=@<;)8H0B!_B2D^xxDT$W@p?>QE=DcTfYV< zl4K>S%dNilb>J!n*;~n8=g-?GDXbY?J5axyx|0&SS!iIa+xhp|NKgUp1_xrN$PfH57`*Q1UHPAxjO$&GD_@$$e>-+bEi14N2>^hcR+Pvf2 zSpVG2`aCtlQpoof@@Cm!dyy$i;wEkFGqtf3O#jSjxgrP7Hi;@Y#MQ{>`JKm!{%OjQ zegeLQpa(>$;6`j>+?uT*tC#$y;6J5bqoary@7%SIm=mxWEjOUN^vJKc=Xj2H5A1IK z|CB>WN_xDm91ckMk~m!UR5DJFCp9eCCORODo6A=7JP_Bx5`C7&lT)V}J$JI3&aRtE zNPUIQuhU)!edXF*YWv7ZM^I${DGdvJ*}`W|$c=Fqy6s}hhC-Sid5UAV9SYiu$7YRB zUIE4~Q>I!d8O>@`3k9`0s0Zwa6K534m-9>zI2x-y#(fdql&}hkVgSc zgCPSLb&w$8g9_3%G_ddarp7dwpOtcK9TiUtG{|ZD%sfBwidS3+9MH=_+8B9k_G_$= zuLRj5hx%~V71H7KTf-4FVVO|`D2$ngtJ$ImJ{&;;;PqCutr9HlY6VdFcVg)ZQT>rJ zS?^dB=^d-YOK*`ibHo;ot69pD>iK~V0fE)*V)OM;S2NW^qxkQ&B;>`jNgUAeUUu=Vzf63d@Ej`MxCmOTW?W3dp~0qZ}YO1@`PN$%GA|gg3lwsXBGVp@UU| zhB@q!CmJ#DLvITJD18i#-c^Qr-#z&ICkwo`L2S~LqJ(OYB&U68GXz5?Aq2EVYT~pM zDDsD1V0H(*m@^^G zMe!(zC<{OKmVNx>Chyu9Y1gA5aT|Zn;y1R-aDMm_)$!Jz^-jQ70-l)_*CoJpITBoS zV-!~#A2=c-0K%F;_3~Ky*olAJe?t`F&{5lTuXM(^sx9p+#Ioswl(6USl0tHiF>Ary zv&W!e`QdIbe0TidsuKpuSqEgj}|%3QcF36xYV-i`=cBpUOQ4geCox+%0FTpiY| zGz_@hJ!lB1?_p>joOPMKcD~jK)W4DiXle9OHo^qqE#oFXs zGo|8vc#zC!=PlJ#s|b^Y`Vg|vKwbC+&fm0&083!rJmp*QxywdD@6vkYx%<-N)-L8^ zul)h|9E^0YP3o(ZHs@3UMBpk6s$hmPmMpFe%^DdTOJlX*ZF*xO`&kk*IsJ3<3_$ww z-Qzvld;8n1OSBm`Rn;5v3${UI| zu(y3CY+7lOwM_I|QNAC{9K>RaK9tN>i4vI$eDsz2%oLsKr^T?hzwdQlYzdGq5?7*U zb@1Gs+_q%mgF-`6b1;l@GIElx%{+q1tVELpx1XqK8V!)tugj72B zd~LKOQ1kD^UNDe^YUP=>tCi%w?i6n3rAgk?j`iq;05uxhvg% zbaAj~a!zrC+L32Jd&j6H^icNSkdiMWtC-VOZPY7x@T@HQt6(J1fD!w4(oz>7VanB? zQ5ylRZiokXI_?LE+NxBB1t(lSm27W-A!ZNMJ&KRaXX?1C_?D1^>)ga;&@>5|TV+b? z!TUIzQKzM}fP=DK@usd9`dDl2YMiKNaEnxsP`%df*}Qw`hhaKpep@3Q7QUs9k31c3 zdzX`!aRY~jvmJGdV^wuUV?s`s81GA5c$cr04a?`?mp8kzlxV%lwpZ%Q3hr%1DIC+Q zmd?=St~IgxjN`HjxrLLnqMUDLoJX{aOU=s<_{HcwCB|PzA#VExd^>?;OM=~P6ycx} zV#4xn01V*`dVL2dH>JI&WMbaNe;Uu&hp4-M-Xi|__xR>Uqpu~qF9y!cmwOt%W9|6w z;4c-8(r6ahC=u2ld#O)Cce2gLb@H8R8Jys#41GJxU3-ouzQCQSwG|-(- zK&etVM-_nY%0}+JG<8zs$|Qv|d4)n@RZE~xSy)&PSC)~NOBmr_t$?a2`@9g~6cvX$ z@RNEWrcRE1`_xP#+)Nd~N!n1K^}i?dwIskd^qznjZ%xhsgto<6p4xdE+}WkMp=P3` z#f|m9jLAnN=uXizinQSshbOm#!_5lqw;`5vwNk|Wz!an#1D>TqL-lcun*jSp~?e(XnD@cE;Vsf?ulvMFs$wV~K|f0ct}!_s5`x8Pz(kEEg&~9Cw6ts4%;BWImJo zHrV=5oYXy>2uc}b(bx}{7K4_oN6yXm)5h6vsD;r3{FK7RRIa+dK^&CU+GL*ReE}xQ z!@H{ibdZn@IC~y&IdGD%Z1|Jlx!hqi%GWb(845`m3;*oq@`9<*DI{X~*8x+M03lsN!JLWmUlYhc@0^-dJnY($!$aHjVRRq^)F zLZfHJCs@lHY42~xnEZ!}!s4_j`6A0hwx^*>>CLq=yfiZoXeZY@a&)m`Rv>9T=3z#^ z=(~nbuc@wVuNE$x*qmt^u6qw>^lqVn+t)|8pF!Q)S@6R|LFJ6bSmr(SmMa9PiaBw3 zuyC-Xp&3LxFlef%cfSVtz2DRQ-3!%Q;U=*h`iACwSCgr?7SMLsEenK=N)IC*g;g6O z=u!9-gN^WV!(03szcs$#<0v_Jz^aY2+aAQ`j#>|^8u26RK|AxHr1X{$ifvd(OoaM> zehg?|I*lSh2{C0pjE`&9!4Ztpe{{fKZwFsP;TCg%YB(^b!o74uA(Mva9f}l26`$F& z15nGC>uuzSd!>)ysIwTyg_jm4hda!e-x)_S;0h>cNS&4dQ`VIdPQ29K(UybBfYA({ zrnTt906C=p0t>O+RPsisVsKvTtv)S!Wmn8x3hO znkm?%57zFRUB3^wa9Toh|5FgJYN3g`)n|9vc8y9K$_h>{m!xv{lSqk&I#NS_w!{n9i&yJ`h*^RJ8tf2Fw=IP8RhM$Nl#8{bk@aQ1va9ap~e z+e6L0ExWwmpk+++*+YgC^HQ{w&ywd-Wc+<^?gRRsS2Z9S;r#-e}>zFn%M|!KHX} z#+A96LV)qf^Z_istH&4SllRsLe~4cH>}%U^j!`DEG)x|TZ@f{Z&KMX3`cgPX7XM0k z_h|8&1(~+3=3nN&*Xh?1AQh z&YAs4V%w`zun_I^=R0@?sLj_(c|1aaw&A40-*Odu40+PPSKZ2?jyAnBjo7S)LJ=`l z%#RRC`AZi-fR&eh6LwoS7k3p7NBh>sl|}jpRgW+It|Bhr*M%E&`Gkpy82DjT&IPR> z3K_T2ng7~E@3}3W_1}3BC_KKBhhb)8?P>ZzoBUqrA$+9OR9S$Gmo9*;@Gxz>>H5}1 zi?}pzC==mj=Owu?yFJM|R0joGrgHb8y45!V%W8+vn$Z;hzzdPf_2H5z#PlhkHF&6= z!UEa}B%V@rb-4`(NX;z8G;kD9_mQ>&63r`)Gv-sB@>BQU4K^TXA(W9Iwe*cS^yQHrcoKB3(m}AtWmMc0Gzo!Urr?Dnka&?TdpS;PM02LJFT#!isBd1!z=MC{ z_D?nM?sZz6HN4)V)k1*qZMIp-cq!Dw3GyN#gI>G1R;Wijt7U_yF(me3{sYbu1rmAI zz1q4h|8L>+7-V52Iog7tksn*If!&+QmSlagW1s%e!reWw!PshH7Vwff{{i-2K8BC^ zjd`#g3Ban(53N~?h~VrONAl&IdBH&xru(0m z|H`WCz^QliGUwAWxJy^*ACsep)3$;a+2^B@OJQZ3nD+XT`hpJQl5^BRbu0ik;hsM} zVBjmsfwO5*BOpOtv?Z3fwr3&pO01d>T7up)Dp6gLr>P9Jfw;Ih--%A8N$#EMaAqmY zms1XXBKB{8c@#zJHQ|0yzJ}U~0cT(H+k2pp5yPZ3-!BWU*MQOj_ZTGPy%6SSKx)_y zU9y9H+tMj|*TL`M}w5Ns=raxJ;s6&o;JqY2jQqDz*aEz2rt<`F5IM(o>Av zpjXbHofc{s4yaw4i^^+hVbYAxzY|GEb;AHs&6|(E#v=7q)J` zxo=0M@q(}JtU7;`1horVb<=%hI zcUgjRT8TiCM}xi1%eWS521_^#(VvAo1aN$vq!bwFinupG%l z8Dkj_BMhZVQbL%eKYG7sl{_dfHvGO+bhVMPTrzg)*u_ZlQ+7ZDywp0E5&J2IR0gSfc$ z$1XS30a##pS3lnEGL%B~T0Odi;{F~Prvcc^11_*m3!odnz+fcq&|Girsfg#}qWnpV zZFXe6vf1hqcxm34Bu*`2BG579qDwYm&~`si=1ZLL>pm?0{V-Ql31eBdDAwH1vj1ob zJX|B*coK%{(>@3nk(V$eD;^xC%ezk&3)-J2|HGL@12UIQekC<}tSlf3Qmk1Pv)R7P zO;si|?U^Qwu(+bxgB!wgRf3gLfRu~RVcx}Kc+Y=i3nv-~gab+dG_unwA*3|XaoMU>t6(24QH}fgk~kJ} zSX2Dwbg6;9D52}!l%Yd?D%1?ugAxnH!K*+P; z0tx6fTzj#1X;}(g_jKIIPG97rY`PhNAkr*EMTNFbM{Q2ydH33;&`fX4hf{x&9@e!{qN|K50S=nra@AB9E^Yl2S3vvpXQ+oyeR`Jz>^WNYP2pNM{lchugQAPw!f z=egBT1TcfD!nO}C1i|JfEmJYk<1&kvxN+&D>mt%>>cdrprH?ym5E@wGz+PE|VTHX`0E~fg3eJu@cKIh;-LHSs<;!kBEq}&BVLwbiLfiLnV*bEl`SCkfykAJ! z2*MPf+OPN0&o7L*+?l@d2T&i8FsOE^+w5lfW(e!uG#Zq?U>*4GX@@G+$AHnkx_bB6 z^_9D8ZmjA2DQI#gr_fHE=U5QUN0wF9`SjuvqfE)W!)Kd}=Fbr;xiLEwB1JxJ#DjW# z-DNUZn^YY|9w_&jH?mkfPtztQ*&WHE>3#1si};00U>kKr-MTNy~^zO}k2-j&DRz}?}1LF?!<5B@reGwQw3UFXgzA<2&NQ| zy~48P04j9UI;4CLluJjeU#U{weC+tD0j}_w8B~a#0HjmOFx0I-bC};|_o9~ig@s4& zn{C_2mF1IjnxZZfG01 zwR!ZVOTwF%qYR%0$-PO~7ihJK_v`-bOq+zUch`W!C!yNND3}?nw#g*_f~)>cQ3<}8`S9hqg0yp_S05R(y7Uy75^1xiV^941FrxePE@=sDJ3{(zNsMd$r?)P;2kGU@5;%Srjf&EIyEfkbg z)5xd!qQH6pN>d}OElW_1JBP65&;dfXd&1oB6`0oRy#kF*N8<#(jvBQ`kCyZ3N4j3g zfu5K19lhjJwTRf6@IoWsrKHZ*v6H@pTQGY?Mzwa_7fd0W~=II3){!7Ci3fiK_fDpph;peT4sjv>DxCPpFbdNBnY_R= z%vM)!V2@>M?A7?H!)&9d!f?a&$){c72ALx7(r0bsXE&Dl*>(9<59^jHe|+`vwvAEd z?oXAo>@k1NT%6kE&-K)$^Urk_#gui54*p$&7?d*>R!HoI+beeF0_NVIG>~xS&g}>o zU`ac?`C4>Qk_rQZ2YT#HC8CY-4`frWpIEO}lG%e#+-bfJ(8E9Wey+h7gUx0g@0yRp zAO%gJc5KR4+A!7qLb zF1Oho%292O{z&xkMFUS-a$87jOS#txN z8XcF0dyEFlHcBvFgn;Jqa6M+=U2i!P(19sK`6(musAHck~bwPWk zq|3fc3m!$cHnFUwK+sDN2B^9!!a&C)T+68^=t-)rXz4u=dtyygh&m?>?7{p1iDl?mSfh8{qEhCTBVgBM7J`h(FGh^JLtzVh#*g zS;V--0K&uRP$Ml@Ti&AKc71b-ujq5DZXr>^)+iI_Z)7-DdQqnifdR@84ysVQx-Uq`dTx=uC zPB0CP1sac|3H1vTntDqE<7p|{uBY##NMcBRbd?!oCeOp? zVoz9&iY^tqw_&$?PJLRynUm?YkVoam5h#x;BgO^KjLu?Ea{0s6*s)F466v0>8U4N? zmCJMM%vJ)jqX^}|X06}n@iilKF6_sz2su+wqdCN{6DBZyr~T6@1z`W~9`DC}`?$rb zN~=n_g(9F505ZG-3(y*K-)3(f1;9=eSf4>!SbQXaLDQEa-F{4YW;Bs2P48=nVzEzx zE>hZYJRqn3SirG|bU!v>k5WHWJhc0(v*})iVWpLWJpF5h5F5Z$_B2+GFh{ z%8S~s(xt`c5@9J0D~K6EwO2JI+_hLS?BVoYyYe6}&tI2khD2e_s+8+ZoYX+} zIqv`PnX?`m*@!_@x6^hM{EIEOBalj2jXlZl(&DbEeC1Uuoos6w5ks?3J4o{}KRY?J z*#B-p-zkc>y5HHB$Nt?WD`VgQPf|Rc%zF97x~k>k&ob%7Q(wghUNV~e1nZ>vniC%bOe;^MkNdCEmcKNa zYaTDa`n#bV#x^y_9>5`~pxW;(KVd)Q;~Fq1FZ7euEmaQwqdx<{kslYf3fnaK-LJpm zoZV+t(McJyHxwtZuc&z9o0_j3ByBvYO#qx*vN(n_KgCZv zG*3Q_28;4-(gy)3(YJ5*hFNx{-u2Kp;4fcJ8hRs?b@cIt^}znfYy$d9GAc{}tR3F` zRE-M25D>LU9~suwRv*PnPn$M%@9`N&!*&AEs-0EhQ=34mznwEuyWORC`Rn@| zH->e4B*g4C#)jRYzAtuE%-9ih+z*eJ)=|L$`l!e5>FZ?7h&Fx}4(*3x+l7exkuYdG zAQD3D0w|9(Jp2TexcTvC*80Ad=6V!V{8x1ec(XdF<&BQjl-~#_zD+C+-D%%*RdejO zwEe!?n{XTDcEnt`kW~@#&wL>Kb9~k#cQb(6r3D?!l97EqFCA5PIR$FBeIL#lx2wQ0 zLZ-;Sm4bdf758O*lN5)=c9GKTh`i!SvJWkVuaqccmZ>wnsonw)&yioIXwz@${7FJ! ztl1XZv|;BC04&!QEquxm0G+I7d!!&nDkfVNIN=TR53M-L%o2bkhzP;!HUNlPy{3rBX?m(PeU@!!d`Y_sxAKO8!s4b)tQe71`Kc(?NQ z)s1TF4GxR|Umc=QvmblaTt{5qdC*&;v-*B%c@ooj0-CN=?$*>X&1 z4HQ8^#2Lozf7mxUo(qX&&mM`yv|slyFu#I%`&&oy*@#MlOkIz5$xQl}GTSz^pavSr zYR1JZC)~US%7%x^2u?c{bB}2&+X|k{+x337OcYqUET4pzE+~*3#ym%2)~lla$Z6Z3 z{_Mz0fAZ{Etq|fi(fL#@CpQ)l40!=Nca_#0DENM37H!te+R;vM<*19aq>NSB@B{EN zjk_5|+Dfk7d(9Npk%T(;%HiZgRn$(i!%K!u0%OLQwUQv?`N@=B9@;R(V$H1}t~@gk zTB(1|X}GU10}^!BJY*VB)HgQcpq2;RRDxG^fy5BcW9(n=9Y4+aHxDtxinlZ#gdz z(h7$!kVx)Dmt*OtGS(uoUrV^9%7zx*VItr_^uvX~QfE-L73c*1-t@WWVy)fhX0kO3 zDD_?|RfxL*Z0z|(@%Lw;ltZx2nu;BZ7)^a-*xe7zDIW`EbgIe z(z!D``Uro|mCVZ3f#J>+$u4}ck|wuCjBqN2WB1b;b|&yxI+|Zv+Leql&yWQ#g{Xe4 z!?hZ2DQdi)3K=fHg1f_pzIhvSQSj8A4=fvw2%V|S+rc;k#JaQR^=&jzh(H+eG8Txz z<9WXD1TG6?nf$+L^-ve&K7G2wPm%z2N{%c*3c{o1Z(>Zm8-W>1V7sG!%S%SfIHB97Ygx;TILL zW0WaqtM-zojQ<=|A9e-*aw2skj1h+gvsn6IzlwTV+Sm9622tHddtd9f4lbF+$#bks zdU2idthl3kHqecu-oVI9A72xY&(5_rIt zM$F$erMCJzp|SXkm^5f(Gx}{A2NRp%H#a|fM;J}3Uh7)Vp_;!!AqU$TiGEjVO%(=%nyXp zg5*#D9UG2b*DwcT!75(!{n?zK%;9+o&}yN5SK&88#891CN1%q!Q7T#6!j?*Uk>EP# z+|By1V>blFri@>W!}q3vA$+UMhWDB&%697u8*b+ZH{E9}j@D9dYN5^*Ic@4R**)BC z3)&&5P`yHK`LmFIzygU1MZxyYyzn)1Z@6OT6-d=G)UXOz2t8W|4zm~yg{IBPrP-5O z#*vP5+AtxL&T(lzd!k4q^4tSZf4#m-0Z^;h^$Hhs)__$Y3PFYJ- zwCc8+XePS=wZ-c<{4ropAqM>EL`hIvn zky_;a;RMtZIHy;~vCp+^1>3x5!t02gtem1%wcOs3w95V5L&N_+rS8isHOW%azL%RW{WVTXXo-RB}MS#^6ZZTyrjaR+7V8T_|MmI z();IL-jcX<{Y|SsB;a0>^~~8Z&#&$~JqZiA95^ZY6@RAU;@1lP)jn}`s4V|w6B_I% z!2d>`U$}7PhZ|$hEW8^-99VU6E1j4HMfcG3S)3O85+|lq<%-Q-?X$DBF2DWo5f<0b zSImK$-`Dq@!y9!JzK2SS;B~F&d!o@G%%=Uv=z)eeUX@Vn`}(Nj^u6t^kL0g zC`VUou4fheS@7zh&CiMyfi~|WRpHeKfCXAj#|Fngr5t-^1I<*w%=?esAP>LKMRNGg zR%`A0LQ(IIWcB!(;&EHOVdxLHRmOm{h@;$kS+FE5F}ZR)8SdT%CFdY)GM4$UTYvOo zLio0;9Q|t$y;sag#{eS*_>#Yz&Us?8BlXdP!uv}$6Z0M)yHzGVPHe%^T!`mc>hbu9 zx2FnGpC$`qT+iPyL1{gFs|w+@#Kl3&^w1+oGPG(qfnDFdyp%K@ z_^v0$1?bd24v&tP(RB{rIj8GLce%x4yx$=%cFZ!-VFf;k>HO1j&M*LKwQSgo-Bu=7 z#+L7dBfoaM?L6qCUzQ@mPVR#bSn&CK(bf|YTF!@SN>IotOEIpFb(7lih&BvXikc{+u0KN$gbt@LjOwo6?m%7wMgq^tE<%J8yg}%|=C6+b zr91-Se!Wp%@2i4I*{hgg4ePBI3Y&YRqCR;=-@Ksy^9D-OOMvWFsX7bu>*zrhavwZ_ zGC#E%&g>N3hmFLegMeBh1SOw>EWB`9FboI-NY<{Qy33XR801wD^TCn^IhVdmbt9mz zMRWre1i*GIIF-L43RqwOo$UxwM?xpdcs05)ccitp9u_U;#5Ygxysof;N5(6Yk?U!F z?~n5A!nf|Op(OgjP5Bf>!v%8nb#ey=SSK4^KL{>4X#176eB9!*1|qxaU+)wKTd;@s z7G#mW972(PaAls!nJ~#x&UO`B0#3+}a+&S*Cro$^pHvv{>a?on+q4yRV_W@Y?+Q&t zG$8rHmX_OVi6+5d(7TrfRzCFr@a}?CRN3613JEHifeGLnaLs{l6mhfnX=mqfygFbKO^l_(GX)o`pJ29@rk*8o*V|#mt#xF>S%N+JbuHtF9}@-4XWsm9jaXuR z8~}m&2~LZ)z+h$IJ6KRrQSpChdhd9u-~WI7I>VmXWWR`%Q8LOplp=)e$f#_xvz=p0 ziArXfiR`lX$w+0V?97tA$HC!zuil^E@89Z1=RB|H^%(ax!CP9~+&|>~JPFkf+iU+r zMK~kY(pu;D{$d3VOD#9G5HNA)+7?ZV(!ZpNpo)a*`=#4e_JHxt)Y4NX1jao$W0``< z7G$YjZ_{1$hB7@qW=@bgNa6oxI;o_gSS4v+nJE9G*MfG07@eel9sz#$R*9}T;wnhB z)$U{V;$%q7oqZB?LXL$%Ha{kr#_+B>;2$Jq%A9hivXc)k{|@?zZ5%yz}p2b<($2bY{VqHO875eG;-Z{DVUU}^XD z*;Rm>xo~_3`LC^cE`W)&C*|HuMpvEz(~du~d%%H5Gh2hA$#uZ^ioNd1|O3^l6s#va%xt>;822wj?VZc)-kGU7V#!_4}OA zZ)s-eFyLSNse$6^+_xT86-r3OJ-IJgNrBN4M~QX^!@bteTL?@NEv~!j_a8LK_yBwH z2Vboz&*oA(GMX+qo6>`6GPRC0Qo&O?0oR-p=?9axDqP8GZtQx<{z8BwopkjP*@@zb z2mlpoG9yWLq>96KO~T_86gwy!F7eh zua+gJaNr74gEA!J3*dh5GCeu~SJRbNr zpYU}{9=9F2hB#MLFWMHb^q8jhG+Mq3s6X=YZ7P&-yjjRJc8W4IVWd4N;cFU=))^|Q zd(jWN9%w$&V0)~iffPU>BTR+fG8w%nxUDIsDQx6p)Y&yR!F&T#Cu+NahDvFyDf+PIoysC12%gqmD6N;j)3v9GLa@697D&sjkZk4 zKEhuR(M_G3dvW&^z;vh()d6N$6PXAvs8J`#fPJLdO#{l8fDAPtT!r$)(iwJ61n%U7 zH^AX-h>}D9>PO(d z>@EbKqPH5)<-NiyzkFZUluhYHTgqqOCESIkWMA*F7rV2OP#+K+p;Du9<9mfwrvocL zU5x6TM*?VxP}v~P0*SBqPtsX%waN#k8>WskuV+gW7e7OG)Nc`rdz%bhlpssD1PLR7 zHa0}5g3eOiHAJGFjOTJ(E(7kDz?kY*hnmVV|9MF;J%v549J(e-&Y_0nB}u}KoOK-n zjJ#|+lhm^?=!}?>ZnO&O8pi> zL-1bDk#g*zg~YG{BIAZWxlNKiDaVeKi|kV$Rhsn8-~{je@k(YcmeSa6 zIx{=mu+KXrO^`Uq#_#R%Y91HAd2{#M{PFe7$5%q#=YkBnTeuc3kajHTZB984xeXdq zKPSk#$abGZvo(T3dPvI;mT3fsa5}51uI4I9dx=p;;Z%+XRi1QkQ(q~*sylb0-_426 zZKB3OL)$@LdYO>CKP*5`wy00Mi=VcaEXGq_PBdU<0+WZ9GX1>UA8n#5rJALG-)_T# zd1;&)3~Iypfe5Q>aBCYR*_N5X)JL4F!u3;L<-jv?dpH=bG6H6hQZpYl7QADu?rfP) zNtyszO-;w8DA0VwwrME_#hjFHp3eOgJX0S_oJzfS@+9SQ?=oTroO<2b6B_}PXDB!$ zKWHI41(`YLk<^?j_U%b;RFl)Fqdj`TH3ay<2C{Nk9@e{W zlMRqZ$=yrO4|{TS838mKE7_`d;=!wszQrot0Viy`cimWC7zyoOpy=La5-Y3JRv zQ6Odh`t|E^ur=p1R@Ov^YUsUkO(H^Z*f`H(k0&JeClW|3x9{%{W-8}sw`Qh0dx;-W zln3>$nB8PNl1bgQ`UZ)-)*}YG&f&Jon}*-wv(&LivsKizR^cL0T8JJd^{a_u0Fa>p zv3~s~OyEJ&b4l|$&4vd)u2cEds|qf!n-q?3m(}|}f?V0=D{_L$5~NbqmE7t4sAVYf z7bMl{Y}QN*8~Vyld}QS z5s~>kp=g!Ef%r;I&G-xLVNrJgOrw_Ci+KJ2m4SX0Xb=|20ON#EKne{cHXHc&gkcmb z>tT7&!&#*?%Fs0b7}Q{i%|i~tNTBWRE{F+{kN~eu&d*5Bcxl-*J^K& zr7ByN_}TpCG4G!u!w;;zX}Tj{vNUm8Hy^09nT3W4}*ktiJh$<>B*0nDezLl?*I zQUmSqT?84B|LSuVTj3d8!=>m~?l9LGKl~X1xF|^ubIfCm$gDhz^wN7Bi#4(ji7p>p z1c^;QFR7lsdjkPR<$O8uH;oY>n*n-tM;xu4F0A>qKca{=8@&vcj~-TfFd~C(GUe}= z+4k4J-A=qyz3J0Yq*rTa#&!s)zk%+Hemb1%eLg-uLxD-};s4XgEO8KpA6=akY&0PA zx=D%Qiul5WoZhMX2$NTM#sC=E^;PaCpM{;w2^mmt4Qs4ptS!HxddsQzG!(u)$BQY^ zm!bxyPA0ir%bzambiPLb{iMTb|IVXnfWdQf|)pgOpOf8w_BWQ!9Up>+^1zRpljt+o}Xo z=Nh>yC1N(((8?-}0kg#qashspj4_&tMf~K$%+nTcZthCe%ek+Xs|zo|l6ceh1-xNB zLWaG0+7b6`0I*Bvo*)FzRX5oW+y%Hr9~Bhti$~P?n&>$ARF2mZg>a7jpGByw&tx;z z34e)$REF{olJDcpr>;>l?owf;cE8o>8gF!lI#w-ofoHhVLkie@sMN;#u!tKkfoys^_SI;?Y?9MXlxi?g8cTD`s)#iUu;>ZU)QskCyrl z4%n@n!fj3ELcY7m_mmCJyU@&_ zegCy&GeIqM#(9K1n4B7tl)E(7TC6zIr1r{9=%i2oY-3QNRZ|f(b_I-oIKT9~X*tjP zC2JwtmWAX{OMf^G9M@{3|59bERM|AM(rWkvu~8TPQ01osmCpAyiMh|CD_zg1F7yE1r*MTxWp{JHQ4Q)(a`<3SN;_8 z2$Q2JMO2zy9wO`N;P8Lq=%!5$zI`N_Z~+I(a-WY}m$9)K+0kZ4UBhnef2opecw7Qq zHU?v9LYNtG?YM1r@!`K5`<-*n1(o$$J&xwE$Au^h8t63u(0*cK6`XgoLfV#mJWH3g z2=UwL?L}O(NA5x=1rL@^ZW*RxnJ8`GQP!tY(8vviD73Z%DdhBPA#$zqXM5R3!1NKR z5h-f3eZ(ufaDanj0v`pu)?pwD>geX?cFj5QZjIvPEeb`2fcg^!50jTmr!9n^$~E6z zdYPvQ!0d_Y&Rk%Wt?6G%a8m!^a2I9{f4hg?@e6e9YPE;tZ?7lFX*LGnWeMqYer`taJX9@(R84 zv9Rmx{`16_pJlX~pHM;geUgid>)X?qLya&*n7RW?dosX1EZ4SaItSCU?zyOKv>kl* zdWOO1#-KO(?%;qvEXFWk_GqO-Ucvx?0HvMxw>9w-aWrP!w8X$pJ=ZXWYH|?FCIES% zcuLTGxMQ%ZK6UW8N#roe=58K@KdxEd-@a!g=9$-qlpeo zcegyLExQB_LxY$0V*vjxZ$l)gee*fxW9Ty0?wzII=7ZLX2+JEU`jdwYbioor?+J9S z*oC%DZwb1r8yTIRWWe#S7^Gp|L@rE!vOW%iiQb<`jn9G$ZF)VF@Yf-}XxVsRU+DEW zy+-8;8JO^$y0E)YE+>O7z@9iW9-fjGp#-hX_MaJ#_wivK8*(|ucc3ib*=!3f5)!nh z@0ztD!Lwv-cr;6*`_6mGpX)I`-AXPv=yCI&$_F|G&YRm$7TQKy@lDMC2kEiXzs~9w zN-N00mu6QfaMoVxO=Q&Y6O9v8ddXzv)gH5Q?YK-u10|^i{oR+Dij>kbW7eEQaa_{s zKXucKq%M>*fO1t}zZ}-i|1bC9wXrOKemqrGz5zSX0qM-X- zVkEGBM~W}AGRY*a*e@M+N#3xAmG$jyoH`}vX=pYb0+FI8`hUl5_}Gxvml*LJ<2Sa+ zv&u8~9M8oDq}b@wwTQKxSo5rgAF;sVvn;`*eUA*>p~L;T*nb4687iB9CQ+SC!>p`? z($8v$AE((R?8SZ=V@O}vfuA9|;7w(zO`pK_R;x%C@iz_FBcdYN~4mh>ZPC_?|Atl`ByzH|hVHh~eRIC)VP zl*a&^`fV!-4uJ}l%*7g0#V)HY!E&C?g~NweZW)8=%iC6L)Ygoo7mFd4o(!?Nrg9#h zTC)ll;*vlA>fOxc_4iJZWjuMg^v*Hd)JJ7=2uiINi(j_xxoCpL17-KE@r1C!zmf-tf6WICBmBM<0jB-{I*YPXCdj$n&Qpi> z{k2g504YBN2aHyD!mdgbp&f#}#X53NjrsQq!kK^GRm^elQ5|W&&&>a8n*UZ(B9#viV*eo8}&L_13!-_}i2$s!S_ONcKF+L80aDuLf!gKt_FN zQQ?b1gKM0TPl`q!iJ8nJL<>2Q36CVdifz4ieqnIRiph$KI4tRer3i_Bi^s8 z5HoZ_p$Zlb^o#(bgTmbuxwWPX5|Yr279X?#e-uEI$7q6qTEY#lVm(URxsKerEdnGy7D;MQL^iSo$f(9cE8YV7vX_p!frd^Oe&YeI{K$sXV$v zY=Lj&C)ouQYz3+QnqTbXx(Tx0+jn!MFZM*IJZ)ZpmiAMkmXnor%k)6h-6y!+h^ z0Hmr;U}|sHEgReb03jAkC%HGfY=d3*7wTw?V>}kme6kF9xae%_7ue!S%p${`Eq6_$eEcjH zXpT7Av7<7P#~*()qFk?!AqTy|Qioud1EytFH)&^o%wJe=G4oF;g4BQSADt&*G&Bshpo!@ePvT&;kXis~12?hp;aeahn)*bZnBy=eE%J^|c&TI*K;XCyTA^Cw*d zH<*;(Qx7zjp9eAD_aIRLBLgt^czj6|k}#1^p9rfWc}w)QoEq2+QX&cxJN1mgM)->j zl858yUw_vUvHRZ`a7S$wk$mUqko`-**=j1=GK5sT?@#djT5JLECWPFXic{OfOG%Aq z`|I0>Ow;{7Y?bhq+KsTIRz&;FlpqNrN0oX;&1p*-C4AOqfEt;1Y2j|w@6V}JK z!uk~f{m=kI+Wh6!>yYBVQqebrgr5*#lE_}cK!-Q@pKH-5VKBYwI#xrmnp<5i@r3_F*Dc1fE(XC!ezI~oc z4*i${q+UUdHk+4rb8>ylea@EiUn#dUGNIJtxGD4q>g92dA5U_t0Z}yW{sTJ1bScSK zgA!weNwKHIW6x5N_!5&0GKUpE71MyMVP;C~C4-N5K0U$g=dmKkrp$AbEJm%ld^s{( zIPa0Rk$?w=G&5)&Z~YaD3C4kqWQfcg)wrzMMQVC(T0kO#cFGfXaEP%Q5$QS3421OA z|KyvTGoS^Hrv^F4zOzEJ+N*oJyHAy3_FlNhKYM);HyJgIin?qFLxlg=62Zv}0j@b* zs=z|`@y^*Pw>)U|NUI$5Vsxf$b2@u2wTVHn@5&dl$E4N>y{l8<^hFf?X2D{$i!R{T zb+QWqRPNbLZ=DSq>684cZAbFo2S4`MQ-QAUs$lR)3<+4ckx)wPp2m4*zqoNp`|xMGk^`&%!WI3x?n=}^(u4JxGEu+kbHQ*W#V5@VFWyB z0KjVv+CU~zfoo&{7lXnb9v-HVgM{{;ODT0Hy@7S@Ep7Y-OsMT2-#{sV?xR^W0z9U_ zoYJ!5O6Mx*^6raf2(ViYA~;zGv!p54_>GAj&QFm{ee0L3c**bfoWu-13Fj7Mn^Znd^IM z2t47j4pnIPT}o9#+Z8F(cjJs~*53tK)*9!PdJFqQ(V5vPQtvPC_2TE|`04jMLwO?U z%NbUjo%EV;eNrAaZfVEKhip^;&o82S)+Q~44)yGrc+ISt4y*v>bkYw770K19T5|yY zjr`F%^!|y&X51gT0-s~QWRG;tP8T@vViL5vqcyzLX?3W?Sv`L&4wcZr3AxzV++ zd)HWTl^&dXM*~XX7@`6SEOdDxFS$C$L;uT$c_v&CB|JgBD|24Sq-TCI{OcES{|BSM z-ry7f_x$oGPI}ViiparD+aKi6Vc6%7G@CK!wD96FGNUwHxu2cydqQ#ing8043!KkL436@QbQ-Qvj+M_aL;i%iax8Z65fyOv z#hTLtdiB~aVI+7mZi6g$NBp@`UhQAU(TI56BXaGGj_AaD=|4u5YF8sK0^q7;!mFo9 zH9eW@mW(wa2h&J|MY<+&+=67lkNcTrR7acTS{Jk2=C`7F*#VD#={)<}P6Yl9!o?Qk zMLhgofBP|JAdC9x%mHU=2K->wC`7>NuP5tPfO6lK=kipxB%59=3@GUdHoy1jQzZSY*IvagmjX~+rTSK4RQ zoGoD)ED{n$0XIx=8i(3u44d1cjSj#VsewZ1@KIWlm=K!tEc-h-;3U7}c>EFIe)Nqs zyZaDv$rh9lX0@lddE^j&J5(y=YW6Mrt;KGohvCgIePf8>ux>lKo; z-}Rxv*K;A9(H3ye2xY%kTT%2@YcjMFfgyv%xLxP=RQr`Lad`VLi%(@@LV|R*QT=am z@?X*nhjS=y(FB-$R?7&43~JHc0Td>qB$MHL!2wN!7#jO9G zow_ZchP^dHp@i1{5OzBZBe4}}Mv9?V_R+vkO2@iMmKfwIKc2(Lg9onInOA2o|@Z#TFAQku4gFQ60lzK+knwLd4< zVXIQJs!&{ZeD{c^cjQ+7M z`TFs`PAG_dLUL`A6pbNKJXiL)Q^d8|?YFzYtoy!&)QL65o+OigE;kS=RE{bPwGaT# zw&s+$v#An0d6!Y#ZREwl7YsdG+dqHoqvr>W2nR~gP8?h(5xVSW|4POLiPALIt}9Dp zXKu>`KYE#VTcxD$UD2ukuD7$D_{C}rLJ&5HYoHNBlMPlIo6B=Tj}*@Rya7DipF z!V>b=!wI?o5VXjue}C46kyZc`M&W2H;(9>#_O0T!o{6M}c+vqeB zSIJFhHg2FB_rsV4a40=&L>2+jt$|1}$o+=p2q*8aWNDu7Ew>jkWR z7s6%mqHcld51lvO3+O&OceDZlZ)&ob%;ba(1{Ioa;@~n3?uyXWxA!v5(6E(ofK#4c z2{+ihd_vsryT6Hr{@uIt>26DkfG=o6^~}G;rF~}bJN^@rZ_Ck}Gq;N;gTc<#+1)hD}CoT7G}y7t}r}(*XXV%x2YOO z5CUT?kXEJ3a&Wb=xU|PC(o6W?pIH4kZl?n*i97vrCTO=GFEx-UaQmlX!?wWohYa`_ z*u8fgOlMvfsn;tL|3ivBW;<_IiWeiij-kbf|D2Q1N;j0tcS+(~U;RCLTQ*mB?f7%! zB|q)}T1$QMOf#mZ!E>#D1U-TO)mPAZqbRZ~Nox{N!KyX9q2y;|c27-(NgIujxP03C z1Q?U|3r#q3V(5WO>!jg}ADfCAd3e0mUuK>H7EO=-dv+Y2qH^}h+W!sTJH?Pp5M6f?-~#hetXp< zWKGFhW1c1O)U-0h4P|XU9BjDdw4B~+mNl)WTN5~7QDcv}N)|rSdY<$5;(5;9?+Kn< z{Vhadn4CtWeQpIZtWkQ)tONV|fRs}J-S%i~$Rd%r;?m!x#~1v~N&wEkVm_%UQxQsZ zwEB8Wd?C8&ulY@_VZPhSxSG!1>aV2f3>x|Z?ZOCGyPtCzGt^L)bd!If!qga8r!4wH zO2sT+@dro!S;c$=Sa62W=40Pr1itWRI&+<;R5j@{h05^f`$q#Va8(E*Mj>=59f;U5 zzn4j6-z5kD4rpFeH4L*D+lnEz5W8B?o9nbNgUZXR!q96RhA)hqTx>{3fcl0y`fj-B zlm7!SPbwajjbsfKk7iZ-_!LfN7%eSK8ZAXmN>ttNdq`F>G);!9&a;o6e6;%N&)6-# zsp37Jk)mG@735a+ekqOrn3+>rimRzE+BSLgKG|~JD3G4-X-)Y5=3$Xrt}tH3)qku0 zv%1sXYhl~vOsk)frEAyIrEIS|QG!SyA9E=ZK;g7I{-O(^5xrts{&sNB-{BT$QY`Xm zpal4wINg{oGDw8^wEg*9sNJ)TH^qQohiDInIPsHhzl*=gfq(qEJGQ~%;s+JDG-k}J z-53&J5b8D-Ohn;Qtt8w(nwoZ}1g3j=Dip-SyA2ua`Slged?~$m+#}`T|b<4 zs5ucc?EVnvCh(+B$F8+_{kTlA69<`U0%^5{N`5F|2l^__l3Y5@_*}AS4fE{Kt6W;SownBOAf|s z+;n+}^#Fz-WeQkf1iq5cAmMA=6g$x95gvE_ovDy@M*!Sf>rs5PM>wfknqO2Ov&K6z z<(0?nhpV!1qgFOHSC>}zA330&_tnhdXsYXWy6*MqWIWVCI*4}J>ma|_51Z^v{AlId z54AP5FFfx)72H{=nL&Tnr|iEwXYnjfAdGKiVk59}#@S#N%3&`4>iVxn2-|#g!@_|L z4J_KRECGk>4k<4V7SB0J<*TUiYG8RjXsMb!+dZfc! zB5~_9Z)i3l+3qlp6B_|)>DDTM`Q45dDkPkl64lc0nLgFj_BXHaP?#KtkHcl6+Jti} zXTkMdp(ssK@y|LksZacP+^N1_Y{yr}-A%NL^zK4MK8R5M{|1p5}ax6?+ zc)*SIki>l%@Fv~ho?)WOpF`Wmyc5~nkWo!ue4UFozY8*>#1j4@y2^H6rg%JbwxrW4!~IEA%jR>WnfSz$i(rSn8ttgMq^g1rwk9|;2DyaD&l^$12*Gt& z{>=kGeL9O}6@ll+%udWb>ZFKW-(OVV=)1JAo-(ZOQ0xTFk*JXUjo|ybfV zEP!)LD_pyZoj9hT$UqatvtM)|%VE>%!I_iBSu3+ODpqk3QGgTeI_g1<{!g_vyiwX9r%B&3GUopF*zXb=?K#tePDe+s#lcME_fw+%)haY9x*DhXxlkXvq` zs(ZS-(aY~sWb+2MUUi|Uv)rEHH-$^z{NrN;184gSQGj8_iX2JUCm-escuj@7yYE{o z*YWq0v^|a)NWG%lYuexZ|67Om2@%?BwG!)mg(%Epyg~jgb!+~;Pa85W;mSrD)CF*m zY5Y=}o1Wr4;q!i}hFNkq+-4TdyRzO0j>~$nKXY5;NtP9z0m+iq`_%$r!G6Q*6 z~Z}O|NI~x;UV4^0C_@%A;OAKK8>Z2nVtxbN;ah-=Zr_(BgwTtY!@VUU_PXjtj zDv#tGj+}gR>+5Q+zL{(>+vQ!*iFujoHTL6}LHWgH0i7x@MFNsJGdO4V-hn~K;IN#P zfmPG~?a>e`Y=}Xy$MVO+o%uz>K-Z%*wfjaUE2oR;I$ACbx}|MK2fL@AO&S(D)cMeO z`?VrR`+j(;Ww=i2#k>{y>B;!0$0Q+`#Y~3L(n5-IYSNk}p%XGGl$~Qx7tKXc_1E`! z6^);0f{F*bW!@7l4E!6rY@)N4`q1Fv8zNyp_%aeFF3h~%BpprnGm7ejzpF(O;E(ao z9^Ng%3jusO8q{WW9-SkSTPgPEs(6`qrhS}J3_w!u-|;Td<%rL{;p=B`3n!XBUcWo) zdwl5Q^P6Dq)K$&Sq!&hgct3yAn7x#ErT1Kfu;nK^Ip4%TbnY_lM^ojtzKw2iNSwkq z)O2-C#~vCzU1x{SVhE9ZcK=~h&|*oEM=xO9RH?U5aI&g>yJFF@wY2QiHKbHO^|I}A zK{PM#r2T)DJr7+B8uq!%qaNCk0rCO90gL}_(C)-R)n4gc8T6Tp4ZqXu*ckW%&$1CI z;xqKD35VZk((iA^M*;jE=A;*Uv<_!;Hsr$YR8Wv+aKPcg_?}(z;m#OBgl;_9vLA!GI)9|wU{G^@)?JZ=KkK)N;tEYIs=A=+ojCe%eJODWwi!B5d zfuMJ`zmg9n$q;%xz-8uJxTS64Tc%Ks`(1q>(By9$$tR3z?T=3GoJTDvER-4#k-m5Z z3*SHak3siIj$$;^F+`IJDR3nd8GTBDz5UUuM0Rp;sNK})s1Ln?Wgx|JzrSX$=6!PD z@M52m^U!(M1v)STSPCFt(thMqAVpV_$2nEpMK|2j4Q<8!;C*G+CrK@(0vP+@%RifT z9a1Uq0|vuCvrUu-XIuVu^chVZ>&InQ4+Knw7oV6hwG4ejYqOn(*O8jz;C6~-jrl&e zXX-Kg)r*6zQgvDEhfj{)?o>Q0dIPWciGRb}VffMwkYKK1ve3lp`Owuip#IT{T-`{= zkO)CttLTklX=!#LvbkW6l_xC0mT_5%eB zFVSb}5%o1Jat?{jHfe(L{QDtAR#kJe*R7U)H6?6KngBdA5b&k_6Bb7 zz1LMfxE8!OYQL23)~t^uwDHaE)BO)rS*%7&1noJ)bcedZVJdDU=O!e6Y> zzoENosbXK>qYeepAVtRiTr;hjN8Xh<0DOlMJLwFiH4_|6_I2EGyqVO&=@fv6oBfS; z0t(2Vq4z$8%$n{Dl|&+_0qq}xHp&L>#yLYakkf+UZ?;XPQpiVi#GeEMjPS?N8{eOP zq(C!vv`~PUoNu4MtV(vkOZqdHHgeZo2ou)8r81-g^g(oq-CIIbwvh#DveY|=dM z^}KtXLS2=Y95mwKiK(9tx80Y>;DEG#$TYF$UvT?XpGOMW>|kG7E^Cosc)n~7;X*5l zGQHv5L-|r(%aNP2E%RN#ZWFjeqMAohe3oy_YCJba)rk{-9`IN8t1*Yfz_*kgk`Y#N zpTIVPq^Pf}Snd@}$@cnMaZGBl=yKKUIj$f$$^P9hV(^uF&rr`LSk8fbi$JtJa?EmK zBC#MhLY=tJSy7Xf*X0ZjD@x)Lp&|0u`S53zq?hc#ni9}^`i~%jtwc{8DFOSOur7$a zj9B;^=`%gw#q^-VquFcBIPo|sOXbb4&VZ43Qp%OlS4AdQ>>UVyog_aqI zB%C0@JJ;u~)qOBmTAbmx5ROpyi5WB@ZazlDX@Vk3@H$I|3@BqNzXPx`sH+m$^8D+4 zit1N~wMbCLgoQjf8g&2vdhG|j4c8PwVmyKG0yK|^q3RjOv<==oINQh^dBymi=c(QI zHYl^wKrKoL7r?XR4EQ^7`Lm2!Vf&QKpxo{{c5x=UYQWat8o@E*6B8L*5gWdbS&^oB;J)4JGnA6k*fS%irKr3yE?IFC>6+r(UXMyl zT#p(cof{&EBMf_~!QQz}P1Oq3H)DKPWE27Q*U zK}tJ5b$q_-O*!wXn~K+Xn$69PK|-7PIR+5(4gBBTRx)Kjf&v;8z?+Ai;8-Tk$j>_x z$EzTHGL>?`&KFkRGZXZ-R~8DIp8qGLaW~nshckX|@e`v5;HM6JIn6!<+dTXYmXv4r zp=I@%?-URnaI`asJ_YcyRG?Tnm|tLe`%YCmcFadYcyEi91OXB>+PyxX4VoZqi?6RM zmAbz~gKz4@aM#!Jvif%;RqQuO8n%Xu$EViIX6DM;%&v?P4jc)#}OmXI;zGoTl;-C-_v^oDWA+{+iy{Wht zxHZ5h4|8zQY6 zN4jg4(5nX(2;BR@I|Fo=KQO>2e)ezf!UMz7#FlvkzD##r3(%Cz2e*S<>}n6Ys!|i=nmj5fgbvrKp0F@BWSbLoW`5mYPM+- zuYw}gIhZ0{^!=~oLl~WBM-8oBclL_Km`w;4dF0EAU0`fBOB$-J;1}0l`}=7#Nk-ev zfLTON;VQ23BJNV@R0p>wXdh1!H)l(y11n>}qR+Ef+Zy#Y2Co&@_SERlSbdBcn+rdY zv81p>_D@Uh{Au9{m&3hi$4-9!KZd0)6NW-Jbb=8NfS)p8{Ri*+$Nu1oD=Tv_!=IqR z_u>*^a(x!Nq+piM;u5BncRJ-}v&bo~LaK^@a491wr*jEvL_^b`q5ZT!0n-A&_A;V& zAvuY{lnJwlO?d%~nLyTNA86%+50#*E-t=R&TmN_t+yxiCTCVy0umlphTp_6OfX!x*z3nEcUFJ`RLcZj){W%08@;k>haTnvb;KBdMR zkjq!&)rXrq8ZJB@AHJERd{YzY^!jle^*01`+P1)n8Y5FGc3u&JISX?%W)OueZW6}o zp%!ON$?%=GGa4p&!G^MyyGdsFd%EqpK4e#IGn$GC;8`QyB0zO%v5G5ct871ZZ=VFI zno}pMDl9OUPWssYUyu}bn2OK7|!e(#v z^&(Ck2_k^#THX}>lmr!xWi`#APKa-{tmSno_3tB1G*xt~uTO<$CuAOecM^dO5&voi zR5Vzu3HaaSHNN6+l`)t2*!u>UJ|Ffm>aNDud!!v*(xnQz0EbHPcNV9ODKQm)PJm6F zQ`<>*OLWv@>8{E6OM{ZBu-!d&8J!TXvw5Pad*D^Y)MCI$QrNQun`IWE4w>&wdV>qo z#;S#{eS~$&?@_zv{M-MVI9@s6 z({FFoN&9l6#td$)ogWy_3I6ARbN%jP2tds3ZZvqBNBStV3&|@kjBw%JueN*xFtYN6 z8JwcjgNdXe5AKfQ&=p5oHV9c?O^H}3NjQ}^Q3Nzmh;h0NHJcHF?WVUOiz}RH2=Fg~ zCrJ202jA-0SR?geYzTLd>o*!)=O;Z7qI6r&b{j}_tfiMantyo$r-xghrf$@ z(&&4N3!7d78&GJ;I(!_VGc$f6RC9JO^C?V zs7Ipg8+2X$zV`-;3LS&rzUvt;QjxQiOX$jO&Nee&UcLBS-!c8pT z(QEf%CO)6UzWu6yoiJy0a?^g6bi9r&lXd%bZe9pEpy`QBMBqkycs>`3rc`8SZ6`hYH9lp7zgt6u%ZM%lcbIZlQnw@;;D*uS zziJi^Zjsq-L$|(@A8R~~m*gN}5}}U}c<>4JuUIhx7V+Y9{3qw=5!3;FpZ9AVHw?xc z*sxbB(vpaMXoMdnP>W0tRAAvKxpC|M32;jY!X-t{b`ROFd<=|d-sbg>+0LOgGTyBnY>z$Rn#UJW&i-lNc~un0yf4D|SwXf~FX2Z#3P2R_rpKx+BjdeE z$8Ab*wxJK=F5Gm`NIh+>0^ ziDM>eYo%lgK7ZPFEKKIW6yzhoU;y;!@N55J(r|jWEx>ZwbM+p%1a|Io-w^q~@#vsE zMV#Klde-Hyg*CE7ZqNb%QOyn5lyD?@MZHE;ezvmXnrUXnp|#uCbM*? zu>R_-XF|#5Dnl1K6_HS8;}~AZqo{1PF@GWQkR{`H zDH{|IMWC#WpdQQ}0ZduRt|`@?j6+3l64j;M?TGEqeg3mSZ|BSE(lmBDo3s{o$%9YH z&g`mrtz`L9mOKp4VB(A<)d1_RSVEA?FE0(!`adBOB#~|^@^FKcj22cjfP$gU-L$j1 zaUHwxc7+v87gn%Ly|P(Lnqay8w@nRq)cN=}b+gEh@XbU&;Xt>|FAc0fzK?$%Xw=>9 z`bgBJ0x_GU>Rn;LFZ?j=;7{0y%ko>qxw|*YXvVLYcThDyGk#gVE6xSAmQVdJ%MLbI z#-smvGbH}0d1>wAvwo4f?FBpT7Cq$=bji4D-$h)f1cKppkf}F)@mmV2-IGuB3YGN$ zFS@tWYX@xj*xpjGLNNgXabDj&TVr{|Q!8}fk;{R%YvXJF(we%z741Hbnx{%^*PPJc zK`H#CAqCOH{z2B7*G>35APonTiGA>%%oMl45zU zt<}BZdAhOyO3Y9c!^2yLfeiaj`OGi`EQc1 z{fwG?Ab(z&LigCRkKm$m`2NcNp19lasMfHu9>uLmJ*}GHtVcWze|%^e{f8&(=EYgw zG6Kzw^y)!I9Q2xn(FCeR%(Iy!mB+&FTs!? z5N$>A?~;CS0nw%X$-3niOLxXg0_$*~LbuSm{A6$s9f9aeqgZ|&-I5K$A za`laZ&T7i|+o3+^SN7RFD;n$MyGzX-OI5)%m8wU-pFEWG3LdKe&Gd!P;2E|KFI{Oj z3xmKt9yug#J9%>GCneN?mc6;0Nytpm&*VCb6@BC8O!W&1UGrt}2;AA4XV4Rh^NMBm zNPa8n5wuT_Mc|70@yi*r3ft>`WK;i}lb|BiP@l+7jfla-7ux*1g-n6S)`t)X zPfp`}IBsat?RBJR^GZ{qlu{N|Es{Y^VQx^uQO;qYcu=JMd_F_aK81yQDx z*(E}iRe6^hQLYN{vcCI&bp9VpR~Z#m*S7ZzL#Kd*D4~QX2qLA_h(#&g4bsvg%?zRl z7Kliv(vs3W0)o;g4N}tG&CIuXzW0x;IiE$TT*q$*k@RuH%F~y>PUt`hjW^mcQH+KQ9m@rAVaRXgI}S|u z+^UwVD(W&WlvmNS@nP?_G3tTB$ZEyof8r1aJn#{K3&;KgDX;y$Z_-rGroMdY5yC$h zaBcesmnNw+F5bBWY-7d@NNCIwVNg*J7XFOfXPXEJE*7)>s>sMfDj+TEm5Vo`l@a|W zK+bt8Lgpid5#S&ZfnBPljZ-GSJZ?(f(ZvQl-IE|;k|lA+>0`P-}(guMXC3q47Vp4 zglH8~8UH%va8GRhje}lM!sw6WSyJ3MeHSyQRe2OAXy;WV{|?O!*Jn8ftlAMUCi!P1 zO1L###R&!~tpyOl1@9!Rs;bI>6r6c?P>u#G)My5xC>V~G`5CixpQ|m2a(W0(Xae!A z_b?W<50C%3NAU{WZCod!Kx|S>!wd!4H@NkrF~0pCs9#;L*{$)?sNMelYPf&ZpNpwi zx!SX3DU~)!mj)3sho+*dn8Q_RzcJ#%(zgMp0FzQ7W1IGJy6BvhrN+RsxtQr5_2x}X z;X9MLBs$Jj-}NTnvL)VDpYg4{*RC*!tm)ZW?OqNkyBAt!chHg^6#_{xCIee-_eLVABKa9RINsyrA>qyV>co@hC~8JI?b2jzJM@TIgCLlbh)Uawe_ zdEr&pG5jM*N^xF!DSi3G`y=`0QgZc4ya;}4rK7l&#E9G+BGu4?Cn~8bNEA|h{B$*n)p zBJQ$&Y*fD!X!?!J@y}%R{8EML>p83*0s%uctlSTx1s)#9=MS`SV2ot8yUlhcf`a-| zZY%yb>9U-5cU*=7$t9VgEBIol2tQh@mn$RX@DqkX6jUQbfK0ID3czOF3MC|v6cWKP zA2Ac}pGa}3@rhG@RgD@GnaY*=`%7K%ChjeFK}5Gpg*>6%$-ei&G!K4mmB#q52l7N`1bokFaoPaTSs2Fm9@F)bW1B72o2ai z(kpcN#B`)~jkSRJRNMLv0|yB77|GPw58Ewb5PaliulM2Wz9*S6l(oNrw^rD_ZL!i* z2|(T#~V0K3$P*&d7~cjc~?qXB7qHVmUrCq9bB6oxfnSjD-v>Dvf@TPG0r`1hWqs03P_$UAU5YsWz$PCnMaR}UR9>X+! zrrHbiM9*EnclW2(-cviidTq6GsU8IiX_YDT;MPA@Y@0OG3@4$mBVU7Y1L)+q$OGey zd{!Y^hkXUqE=_`yGsy6(q;UH^KG32B;O{mD|Aw}&)YCaj*F>)1ea*4K(4c(lA#Ly~ zVY@hRpILt6cPrx73A@0Q>9@NWGFst|n#_*Y%#Q7?e{bWvv#iBE=JyHtiM3X)c=7M; zcLVOK6j?bQOOiNa2RWU=i!+Sp-6GPPp42$~is1S0eJuz>-029FTxfXNueBOQAbzjZ z+0>@h-aDH78pj(ffMNH1X zZ{01)a1BaWuAu9nx%)+=xgjF02DRngNydj2;&V8GBA| zj?Q7{(XA?KFu!N4tINzLOEh04a@yaO4g0Kw>Nd|1tmw?t=gOLPHhM#TxvIzr{Bh)* zaP?l?7B5ZlPc^6yNFV-PtHigrv|x}$Epp;KR(6llpYGT)>8O7NPSCZpzhO;fTQUVW zFOBG}4HKkyC)YYW+zjl6rMFH0(JGL-=7Q!s^v|;(=38lX-Lt$44*PX)CG1#)Kao7N z@+N)qJeH!hgbw(ehsc{av>8rm=0r|R#XU-W$**$zbtWmBgn3_$wFSV-hOC(2JD}M9V)69G?c|x)ryCs?1N@j?+AUZTe@go zcrDL#7`+V3n-_6`M6iNLxhqE{R)i;*g8f=t_MX8=fRXLln{8TlUrYD=Gm#*hYN8>N zBy~P4W`RCXgB6z)HDvGFNR=t+kV`Y6Pf}P&2Uc%tn}Z3_U0*^F3uwBrchxsP2e#iB zB47{#FF`K0VSs9nSoS4caz^- z#>()z7!t5QyWiqqxLY4lfw@(If52}|O`h^D1fK;1roQayT3pzJr9-C!5IN`#-|r$u z95Mg}_#W}gehg1b?H@#8eCd`Z*Qdd)*2N;Wd(nfoc6zQ z5(zJAiWzWmQ?AvVx*qp8neSQg4Dsbpf|~qrG^P5zYk%@5ltoEpbB+QO$_1?2oRj^1 z|D~wvYBLu|B%cgDF$-TU zA>lx_Wzq&y3PcK+_|@+t_Smj=QHpT7g}H*ltW0IWq0)P`pqu(l*d}mF}ZdX#tu&WDFrTfiP=x<-A6FPBhB`g1<!0yL|lHXOI zTfuMFh^;~AmJeOMkiyoyj6b4^>TAfS&4Ym`gV81C>_9L0q~{F?(|rt=n^;WAZ>qY0 zfIu=6NoS|yM4U)&qYc}(ab+rBfUIbT;kogn0jHZxYorjB=F->a{7}PUHjs0n{OUyk z!!iL^r|RnJcL0Pb~8lr+%+Cpvm`BNBc}f+ZC2 zNeeU~2n>(37o z1C^xf5pU$=!7l;-r}VhCXdwrw{R$c6+)<;aGi#Vpz&7Y2Np(7nhq1`pD_3*XO zc@?$v`B&o$w@BB#H6;Wj-Lg>NCp`(o*ga(EKfgUosx*~s&~KA;IJRefxkjR~_HPv7 z4uyG;|GK9p;dp>T;DfDWbNF2gblf^^8IRkbij$&NQEHb$VsA0y*!{J8g)}yY2S>r< zetVr`^6tQejFZ)=n0p}iGMFDdVte^HIi4J-*h;1tA%GXXUJmejceIHFHJC3y=lb5U zjOsX4d*+0C2!>OX@NTFU70f;Y_N2Eh=f1|=hHf1`Qd%tp@_ViG?f&!nXB3QH;fg~pB3K2Hn zn|401pKv%P#|$x?7(evf$IH2L(0>>}gCK!Dw{4_2b2tQOdHo@Dm2df>%0#fgJ*;j$ zg70XK^(}7fZvhyl*UbRlnG!u^Q$>;y^*;P7WpR7WVdU9r*h^`D%)EE8YnT3yHuZ*E zgF1_sOyn*vo}qJ;UAK?*mCJ2}FA!)F(1Qt#u7J*}y+IX$W{-YM3&ID^R$boflh&pb z(RKMrsRX5w#K`%R!_{A}$C7(~OApwZ`dxdQe3Xq;ev$qu;wbiQnWBe#E2mUvj!@iK z44LztAdf^xN(QH8#tFv}&k7e9wvGs~-k56hS&<4mF=~<{2AbBZ#2W>9sjjNa&=LX~ z$%MlIyTee~60CZuTA4HTivzWc zN6uPttL1hz<}Pq7>SO3?*9S;W&6_D3gnjsuSzmAL()#??F2nZ_npU%@f5@Ia){uuh z7@P$+L5j7Uavl=<*+|fs)Josj`|AZHjthsTLZq}o+L;${QoqfHr451E3CSyx^qhqk zUR|rkGMP9|PPwbvHQvQkB-P(1ql=CaaBSJ3w-x3=MD}ZfLU&!EvpXNYEa0nm&#RE3 zuF?N5T|ji{z;pblW$=Dje8#!CeDI;b@lR6pX^L0{`=Ls%gAN%2TDJf)Q0wgat1IF>}yEwQI3HicE4MKf^)pS1Uxu` z<>1AnD*811r8{^P-f&2|qBIN{V!lcVfjy}e;%<@?9f61cv*pp`m_*CfhSsS?qbQ>% z)5RYdUt=nm7S9=I{~7&cKe=USSyb=2X5zSit_;SGyh%xk12{W68(6K{m|GzPeqJ5@ z66q29L+d5LuFY-B%8@t&zN4jjcBp$XrN6k8Hu2OY+C~f=^X2ATU*LJ$QY14gZjRpNeObX~Od{$%_h3^|?_;cQf~e1pcF z-lG2GFunnRb9*E#QvW{Zn0jd@>|{onCuFmLpGG8f`48gWd}qx0t)YY`)dt-#KFy|b zey+Qd>FL8#2#R8|OGk=(wq6?;Qg zL1|l%3^oOeXuM;W6T6<0>9kwsVYZ^I(-O3PN9cSQ0v)$+Lx=Wo9*dNq=z@H@i4;&n#ChY(?%3Zfel#yn0!72fgX8Io%7WX1hjefBz(0Tc<;Elz0m;yZzvq+*CnM!{3HT6I=q{Y=GK zmoGZ~)Dbr3s$n%`!50`{U|>s(#3H!ywVY4};}$PzuXHguq8gX3eF>7ow>TSjMDL;( zqi5rse1v!ho|1zKJ=ixLhZ25xJklTgZ9#czysR_oQ!)p`4~&6+8(az&H=QXFgMV)7 zmI|7DWCh&zzR6yd?L@d<7L=NUR5@P&vnq{)CWNV`X>zFO(65NhVnA&`Mu!1Y*QREX zD)oS6y+#r?R}p*?Bu|;Et$U(ovkrt$c3@-`6&gCKKh4E5&Rh-C?wxCkA5XF16>AR` z8jaq8WQ1OQN8DGUCRvPlbP6`+YY;D@{kOtrxy+`J{7{B1_POl?Ws2N-wpv}Jt@lQ{ z=Hh6)bGiwiO+kG+4g1aPtD?BQ;-kTN?VJ7PUVI1&UM$Tg^?HI8d@ zQ=f3=g^$$UKv@lQ4JhfbH#tj$)i1UVEhdlw+W=sn1X9}FM%Nr?7JiRD_+hyNTXPm4 zs_if9J@Qh6C7y&|DCm#=)fHE^MRj%aXVHxm!K z)ONm3CCPf%cKBUXeOV@-#%z>jb=-t`#Tmv~d#J9Iq99+%wZq$c_)a>KDz zx`R}fu0YUVmKmft+!r$W!X&t)!|U4hLvHvl4N&<-lI|hC{!u65Hws~<_G~}BT*McQ zk^{5V(aK?7)ui0KiHHJmmz>t7dM%iT;Hqq%wBaI`RCsja4A|Rw3#hd zM%*W7s5K|UTjwCsHV^9k-D^)n*Aj>`MoD=qg2pb`0bFFU`S{lYT_|NGN*y0N$u{`5 z!))KtS^ob48~3yW*NK7p`zy3?DM*O^4?}E)GwjjO>CT6xp%>3L%$(h&riXYVAZwHI zyz=pDeL?Kv_e|DTfLHa+Ss97a^%kFY7**saEe-?DoB0^584fbsUdNDPgNb6A+<6J@W50-~;R$J7?`BN`fpj_EHF?+3X6Q6tZ(`CY9^XCxxx!G*C#qr27o+^r9e zm4CUsApz^GY#HSXTdKshzqWv&piN`O$D>wxaiyi)n{0Tm?UrGDfq8tB14EhB*`^bH zlHYXn;ftGVTlg;&ygO}bn4wbS7^OH)Ces;981H1q1_EO~V z1!I4Y8}alPQFmY8OvKBvD`cd4WY~u|-5ca)XKt*(8`pa>q?8r`&Tq#-FH4C1$_v-m z&yDbGrA?_Vm1Zsnn{8kF*!aYUn=o1;XOJ!+T(@FC1nRZr#_9#xEjMnewhc{am}s{S zVL=L3-_{vn)SFw;%Ll9I4vz12EY2ZF`S%ttpI#TJ!vokWNG!F3cs8xvv6??r*IEsr zPI;17ygiD_0gM1w4sblG*j_#eXijj5@A5bbF4gstEExg7@pyB~-u-&1cYxVTAPTWM z5Cb)eBCj!r{u*SE;`&8|D`GU$XGMSKCZkil@m{|bG?YnO0plx(^O7!{(MM(J6lisj za@l-wll7`GiSX;!Zz_c-6ts}`k4eC?tOZ4pVr245e^2O#%JMu%+gAiVf6B=tP_3vT zVPbp{fmHxN9fQCU2LEyzKwOyC18bAVDBs+6)xujwxs$}uTl=~V5gM4P>7-!`GO)XW zq^x7Uv)7;9UX$6ZO#aVOe-nYbz>Qy#fX=eqJk=L=cMwQq{o@bcx1TKw@yJc(j|p0u zJc{{6od7k{))a!cJ@JFTL&N(ZvR;TWJ!5&xZmH*WJ}=Jr==O3W;T}vjyARCV|3;JK z92-?pX~7ruqMIsY`--?pfhZ~NI|B?*#i<`VfWkZ*)dn%|hBRy0BcXu)S#RYwlAKG) ziD{SjvmI=;Z=6dWpaV7suDdW-r)DN_nN}7Sr-NdB=7Af%yj8eAcS`@8h;W{ zqAx9RG7L|KhC2eh*@SZ^&|&4#?<~n88Bp&;g8S0mHbUdQY;yhO3zJXlX-;?E(_SrM8>&}CMV=Gwa> z{e~1=+mc2~N=~`P`jI4bx#%K+%NqDagmwA|K*in{^G&&5M4+sv&W=cBp~jsIP3qH@ zWcq<+Q0xrXlW#Zu<)1aY$hOBne`&uH>?HQZ?#mT=uzb@ErVAjEX)&wy*$%Jbu75RV zbu(<51W%=M9ZYL<6w~SK=36FGznn#5^^PS9uC&nt693?^gf!dv2hhvUt8Q=)K0wkB z)U_D2!D~hWT=i#Q8wLtRS3V>UsBVfMUP4X0hd*g&mBgAx^)n8&%twjpFojoRpulus zb~vkr0|`tfiQy4<5VQyy;}-iq=Iv}8u$t&5gRhiPPluaiJIGy*D%~rU^KO-QRJYr7 zZaA9*PGY?bq+VCoBrHVp5xz^4%;yMCod1Uw09ak_@@7T=#>4vK8KJ(pWK2GF)EO#; zcVvEo%W?z5Q#3Q}pGKiB?R{cZ-8?In+}P(Eiv1bEHkNWeU}@-Rk;2#VK! z->q|$A_crGoS^|#qjjeSlf?xUxg9vT02)f%ymxa92G9I9*^oWS_34s*Us1{>_FTsy ze_?n~9@@qa)O`_Hk|hS`k!Bi-hGe*4f4NM6Yhx-YQ1L2B`6P{i#Yr=l%`c#dX8YrQ zBG5Ab?Y^%uC2)GZ`%|IwRO@XPKXk>1gnvmTfN8^M`Y6N={lZ`e6z+6TfQ!2O=1NFg z<&uSuC^eCD8J5aOuS_Ji($R3oTgq!b>(;?$w%)NW5s)tWY(lMXP{6*F9fsqcutbP& z+#tS+Dyc8OU+P~dqG|OeVNWRY=<%>jFRW0Yn1`p@&yAbmKFMwXWSdPtViJY})d&5J ztd#xCKr_#)06T<_m$qLh^q@@JPIFL4PE;>psX5#!##wc4z) z$_nFJPrD!=!pghFpr!cU4(LNjt{+I3^}~ER?CTIO^_PhYy;eXjJIO>x{U z$0!uA5XP-V59FI_@|j3o?W}`dGwsYhXB~;XXIZ8zu?2*>O6SBX@5xW2dkaBQU0=O5 zpJl)NLz9(W{66dKL%x!gq4f-(lcpo96Cu<3)N#H5Jddupt)Z)VvACY>VGsY>p6kwH z{Nnc25r${W`|KVYE6Sk(&c^-^YF(zZJtkfPg8Am`Bh*csAWGw6A)CXds$}fpWi(oxrduiOj zmviSlLNt5%4tsis+;!bvf^NbC2BP1v-&DfxG(N!4PTMe4TZ30^{75?ghd`?E*^McF z3YdzwmGKznI&*UEuxmgF4$_(bJL)DzNE*&tpB&r+OJ?zql^XNk`+K*&ekL`AZH3as z>?D{-N$Jt6Da*!XA$s21fE;wQ+S4G@;7*WopHxwtjI*zD?#2bXW)kzW(8KM=NMHn5 zbpuk0;3@iJ2r)=XJ{OwHlczfh}P`L$^gu-=>< z)dVGR!F?+_j#p{DVSaR8b?=may!PMxdy7NwAd^>km?vYfJ%wd~p?xpDL(X8{m~~*v z$<8nm>eUU{>Jv`{$bE$M9=$33f%licH1@#Y!CtJmQ&3sduaQ#R1J^JT_zT)eN#K*# zx1cv2({c1=BGUeo`$m}c)q8vwNFn;ni-Yrbdg3^O3VhDB;D2bO(YRBB01ChQxSpfv z4l>f*CceA#@gWkrU0~3I-y;|<={xcH*3)T?d~WQqba4|FDw#f=7WthnSW7Z=2Q{5~ z&3)RVzTQI-Cv`=~VR9t2r;{2YdcQi47=**4K^Os8I9TWfShlw?yXzoDKAD#4CJN^Q;)rljDiN>VDkySuL0Ld=z{W5O3PAnpV3(CB z;?i>#>46vwV(W&&$cC87SILT*WPV4PxJXSRV&wQhNs`sSYfGwoANnWpJb*56huo{@ zcNv4GMz(N(iOO6kY<92;pFh!Y)fX9Y72xT4J2zCUqAv!pn{+g>_~>5r&o90=Wd|?^c!7BcfmH*vi8GzLpKjI{Yt4ys)<2W`b`1UN^QP`P+rRI+rMT^MF;Q8gS!9( z-v}#wUwx=41eReFyUI-fT||!$TW+6u9l(IXeP>$!NCLQfRLj#5z|i~l0E{jJF2bZ! z95MiaZZ!a(7Dcd8^JgnrToBwSOh8;%bFIIg7=>G2kAEK5B3e*h5m#qBpAApfZ z2S}D)&_6Bu>I1=l=dNlh#N7=c1n@Z){eJCl+Z6-|*;gIRJ;>aOq-9Eewf+}ZIaX*@ zjwirTo99v};s-bOD4(P42Bk@sr(-7_Rurgd{rcUIHNRLt=0vbughIKDR)pu5RKMd#R zva<(rp7I7iOIBAx(__f&#c`CmTq$5vD@KQF3FI*mfp z0!G3-qPzcF_cZnAt~*2fT=({&in2i1Qe+|ESAjOihVzjTFWJPO3N_NAFq3nlv6hY7 zW&6JW;FR8>b8&rnr~Eb91O6OU9k}(rp2d@ZIz{l`VhI2eWc?7q_E8}wf=cidh>6cI zmHQ4r-{XT}HQ!sIezODF^`mwgfjct0DS3#=Dr}*Eop@?J&;5-_Vn&H@;<)M6lQLEf z=y2D!kxhw4!El2}>yS^>z{pq*d8!AdL#lmzQEw;33^fzX<9)M-aj@*Chuew4$mXAW zJ8a#^%OEd`&DS1oiQIes+NzG0eMFS)J=C7F?`7# z>52~))`Hm`V0w(jwZNpHxsrJf=`H3{bRm6)9{0jw+bd&~Ok@1*O>!uiS8&D83xZID zD;qJWQd!6qzXTMvnq3%wG^5Jx*m*LJircQMjPdVZVE((lg$zOT(Dos4X0f=~3Jkwd zV^s0&O;kvnqP~7o@ptu<>X5FI6Mt}<39+h~cxlP^a_`4X0K(h8PCd%CWH+#V`39D? ztg?fNKRK}|x=COl2$d0>SkaU#=Ro&wCo`ktFFmp)?9y^JmoH}Xfy9H%)mb>bUWrxbZwi&ch}!%lS$VH~YW!TDdC>^BFE@mmk<{ zraKtWkNd@UKoyW%QP;b@4=|{0u4Vd%rQsa1OXXras_V(r`{4JuZ(-mmHP?p*o6Qij zVLX0~U?Q3v05#0QaiWy(E*AUFtJONe71bW9`G(E(qmkU`z{co4se<`qE;{+gM1uK% z^G&*psb3gT@|hZy-xKQUX3G0CQD1+Qz8tZE32+u1~tE{1FS}moHv1KU;*MSuuD_-qoHieS>?mjRG|7*w5oJ|E&cY z0WRxOa5w=#^NT$GUznUuvfm~-g`Z4gSSkvJ8wS=DcIEUz%kKp36GpsUewa9vC1<)5 z!+A8Oo#~&67Crioj8{*Zn@ibV*jZ%vHyYss?`Jn3jnP4v(SilHp2^lX>OG>}wfp$O zZlaW_ZZTU}4k^jXYiM&zx4?E#WhG6Zly=)5-Jd4=)q87ye8-qjU_II(oZEKsTy~{vVN}r!GhIs!pgpK zre%u9a^FB7)V%gquf@8*fLFnNs2yIKtM6z+|* ze!AK>+YxVRt~z?$_W#T9pasVQ5!=U;p{9Cj;G*8z)(2nFo_}VFDy4%5rmvW4vEro8 zf@zpGLpq?Y#F{1$1V8NV$JnR(&p{bCHe$ZTih*hZ1~Mb6d}7y|0y8T74HN378-%>+ zT?&x0Bk-%*sbZ;%JUogN`}(=S9O=qoAZf|<^|XPFt)L{p=#u&h_%wI#q1%#O1K-hs zqxeb$j3|PJrw)Uq~OQt z;PZ}TrhAdiw-2WJ-!o$m8vpiPBqp0G=(;5DKmY_z7sQf#c5ll4 zp8Gt&5rX-1a9b6u=E3;fqz5%~E`yM&d>$nVIJH+M6r~@slWWb#2edq8J6X*p1!PAs zW_htb*?%{-tZs(vZO!|mGz7S~`mVqqV1xDtp!Yp7ezj*CZ&TI$rt?F1=69P2*=T1k zC?D`Lt(qH4&LSKTjz4ZWr~Z>4x2!9D~Z9qg1r~vRG;#?n0ROH zE`RY^PyN1O^V}*sj2yWyZo*r9&Pt(JT=QbrKxcvwitc~6ZdzH_u4?x)n3x<*)mkzR z4W3h^SDP?(ezUnu`{68fS5YaSB8V4d_t&va4t7Oh(&U_fNdQoRK6QP}N4V377|y!z z$8zu{{G&A_9omkNF?a~D!4@op-?0S9lp0CHCm#c_Q9Cc}+0DEJvgQ%ZUjx!UZAZ4Y zY4#bshdHBBO8&0awFx0VDTn=ouk2n_NPw$I6S$|-su6uwd`1k)+-)g{ZY`Qr|e za4(VzH2;hTpsE@62TePf^^qZjjiqF{APA$@v&M$x{6x0gMF#@j=EA?Kt9Sv=Wx1-8 zpmhmvz=^`)?QW7k@t8|bK&>B*xNVyWEV}k{3=f!ME)eRJ+KMCqEpf`PlZrR>j z5@Qkt`{OPIe;BYp&)WWQ;@9A0QxqUrzp?0{Kl*F_3A^#LY`KJxOskF=$qv)bw}Ot= zal54z&H+aOF$2LXgK(riOS69Wh26!GsEKwhhQGTe2bDNkeTP_gsPRxyX^`vGFZ9Y& zV%2&eOH?Xw6L>wBqd|Ciqv2!g4h3`#(a*t^V^47g9Z5?yh|B{DVA+T)443;0EDvjVA^X zOTuBSvqa?QMei)+vgRHAyUh=yI&ym-7!E|Sd+h(DTpTPK(ShRnm$jm8&Lgn*LVCj# zhNf!4(ztg2D5zz?U@M~#kw!;6U;J~_Ny0lfKfeN=|2$nQGoL5>UUUtC?uA=RVNmt# zkKNB4J6#RX4a9-jzscF-krAg%D#VhyA7eJ0X*sx754!4s{%nWGLk`0*^lbcAeFH0Y0ICeoibrSal1UE&}v9)K8?tY{@l^ zhwdY1_u{_IP%C-GY_CwZ;MSZvT6eBPZnX`TR;~GJ{1rW|!TL$)K3ZQh_IY*`98lvo zYb1Z1DMkT(wq`5M?9^cYAkd?*;|#PPApTu#CqXSk@rc8E@%4|L3t zT7})QvWj}~B-0s>pYx`^C(@5g3)@Xq!#XwMEB-P$V;sg&uKI^h+(*I|tF|;&ymOVE z4Z@C2CP;UnN=H^wqGP=p+N3QM&Y{;OF(VV|1HVmt?_ySM?mu+Td0Fezaj3WM4o%p< z_E$W6KW#k64m`S};F1iTCxeAT#t&c{5fXe0!3;W2r+pk29w)D5hI&4E zz#m45dnEioHT`mHbnF-zeGV}&`WmYSILS|}u8QBv+X_U=s|3_sbNjiu_HAV#IUr+9 z(pNoC@TJ1$^$7kRLDOJ=8*xFEX^O#Gvs9**9?S88H4N;aYncP5wL~yGQ+MtWi&*LU z+R0AwoO-(y<=Y4eG!c-L-w6yC_Y$uh zaQm)ms_YsCCE(~F?z<{53t;y4w&slvvZ*_6I&G)zFz35JvoHQx`|J7n$$Fu~o?Ty= zSx~-m7!2z_n51R9eGIYd5)EICM@UmoTYf$S$6Yf&xv;QO>WetR-LMCk1cSw#(iLyI z1B`%v6MT1?+ys6IEcbD`G_d0W^dMXw!2fmj^TdF3!M|&v&Ttg*=ipsq(&R8419;Yl z-l)sKrGp6Pj#L1gZ3l{9o4$Y4%J_8UlQemSSJTPEnSD5bzpR5>0!nx$yyA~M`1Tq@ z4KhqfPZ3aPdFkeM1>WCnEJQ6Gpw zq5Y1vSh+`K#Ae1_w&W1ZKt=nSW}#4k4b1&u$9QtCp8@TTrstD6AnOH!e_{CKB(yuu z%cT~sT~IY2bi z>a*el0q1Uoi~I6d64(yyJ!J;;&&mFTA=|KiDD)^AfOm!ul|zD0(l`Apgs3S~CeJ-Z zKT+a_+VNXV1x@<+I3$2>V3AdFP6S{;35Q}9;-cv_GI(-DwGn7oZj_@sF7&rq*){~|))lE@gy81!G*GjG-9`gEoAFX_XvyJf!CI<#0R8FDk2e2<0_ z^4a1zfXj>{CkE2xbZ5Md%hmd6cLkBasKSNoPjTb+=;R(f-Jt<)?}S+D)Zn{+uADqn zZ>NdU$K-Q`1j1mLbk{Ebt7h9$vNnrJv-h z7}!!ef8nZllsBpRcV~lFE&4TnrExcX(?!VrO*w^kD$iQjhEf6$bcN^PR+PaVO)q-1 zVLJVYYub4r-o;J+n`u3gn(d2n!RlOgakJp z$ff&zjcsSWp`;FQ?v(0xQUx3vPoQa)l;*tJwIoKGvq&x7z5FJBqIiOpnto1q`?fWpYd8g17w}LD zqpgycTzUTuA(XHimNOk?>IgGsKf`=sB_fdfBFg^UX70Dj)-7)Awb&xN1UY8Hd1QAT z)W(X2KZD)fO}?=A;c(yDe zc0+(`G4|9TWiR9^fDd^}TN&M@MPl?z&ZaBQV;*RN4tj9B#`^{hG1?g<>^vC2EPrGo ztVIxE=MXz2D*<7T;}W3_GT$--g zKgVHwjj)!d^uza~*CTHgx3)Bu)pyyiJ+_;q-}5%d%qvQt^SejP*prO?sZ2*lcjor( z@aRoC#92mSttQU8i@dVyte-B+i~6X*pw^xyuh9NjsjmxS`TE8E0o#@tHUYl6d50ZO z*H#xy_f+=q0lPli4`9$RF*t*4>R+=VKu0Joyn%wRAHem*tKTI~J)x`W3m_n5s;J`P()xrFquA0alv_O4;U`2HdJubDKGw)?vs5)AjRDN~sY z5Mw@0`p^+jAZu>M6yxRBHs`lA(jv8`ffbAqyDzFIVZGd&u~qzJ$0zsXuLWIleAPTJ zNx`3(zrm9ps&@+GRu#!YyV)S76oP@X*bM@GNo2%{-AqH;3Ibrw8;AV2NmA}dZ)NZR z6f=g3d}56Vfz>?b17^K_{lXG{@7R&rf<%J`QTbkAy**I^yDyR2r?O}rAm;u&#xUy_ zgIWx~&G^XUk+<3aqVEc1Ku*W!7%CtL(W;Me&X~iqlo3ay92kYUO#T5y|9FRjn4WQY z@bt8g+2V~L67mk;po@+c#4RLuZf@MB^Fgjpn=^tJ%|Dc2YRB>Y{{W8{s>&o60WJ-* zT?>0U)-5&A8oa`7?mT2b3%);v9LNg1YjPt|g|;AtI%KP)W{S`k{|f#Nb5T9B-*^5& zJj!mWuD#v=Qh`0dS{?=rUBsKSBC%&I^A%rAymerTYl{+6fpl)UsZ*!^-iMS60UNSG z19O6dHhwp^UpnqTQ@q(c$?$P}@AvIH3_$~hZ?Bok?i=0Md;Y# z@FMe3&`(p$A?vU4gE=Z?s_4H@`#EpS=6>fq?uqan;Cgl5f(BYbn9OM?-%B1#-f(J) zXhJXVB}!Fu;U~qASbj^L_)yDy3Cjl^c4Qm@CNxsJhVKffO1FzYW_-tnGVsR6{%MYX zBXmp7HHcj#tt-KG_NMjV`iEZ*F+&M{3s%YYJ45RQs|~ zAFWcQ1dTgv*sjBohKw{+_Na1G6!!-xdu;wuAGzJdgoFy0O1l$AXr9J1fRxCG|B8lA zC9y5$He=u1Qt47IfQicFT(}RII>$VLM{k-x!^igzkCOPue11K<2hExJ)%k_o*sv#< z23zwNa0YpI5FJ5m5!2YaFfdUoHh+v0|HErMHXZ@Hsj)01bcQHUnlXMy0tu3Jn#=ye zA@;ODC+oHaItjHN7kZnAHA`&x zB+=REI4G6Q`A|I#fZ;$=cD)d>ut`JNue^~j9E(KB<9b9As{2QF-(`?XCacjWt086o z%~QM!x2_P%kz=m&*$%B-4spKV{Ql+5Z60`VhJJEzQnhAr(fQal`m!XK z=WCAJd2Q&w@WEjb83G`DRZ0S0+fGA(EvaLM4~1pMG!w!0Rlt^{`_KCGD~t^-X_Yi6J-|qPjQfTJvh%4^FW+1k9v}tbmR;O+>C^Y5D?iMYO}Xx$Ywrx?yB+l} z3)X~b9*=Nhg#hQ2$Yvuj_|E|a!axE>PW%i3lduJ?wr2mdGWRoEB+aLmxrb&F9HMwu zCwsNeM}5CF&mgk3_8cH?GBwSW+oT5$58b)XT`zWSi3VP)+>d3cEip64gVF|mwX)n@ zv{&Z++j;P*9|*6)_#!-3V0|DQTbxfH+WBNS_#s_BfHuFsWCx8+WhxA#B^;gWf4ne$ zLgb!Lb^DY?hO8SVg|u#gkNrac%S1$hT<*zCYNGDuz+r2GV%7hd$B{Mriun4`>w%h-2y)?I_ z2L|*h0=uiq$I5hQd-kdNdlSjy5}!Y8J5QvfLK1k9+$;!bWaRSU`;qby_qBr)8sK-# zK)B2sEYN+ITJxKF)&~~ua)B+(*BO->gLIPmWZh>gA6naZ3OrW>1SekG%6LQLR~8-t62I%V#~NumJx*6`vDXIMwiP(f7 zIoC&wZ$QS-0nVt;aAo(Mr;p6mMGzubMh31>0}`rQ{>qzc<>LX4q%a*^|KE%BSE1a? z-rwY?85yYoZ>>1Qkql-X<|#*P0hV2=`QXctG`aAG=4DWrI0q}W2FvPdgn^pG4g2Ob z$T3Qmhf{@+89w!Wf|R*S#^Z0sHrP)J9>YU|b*~-%1EjM^vtrR>$+-U8WbpQ$=LXn4 z82R9$S^ur6KAcXN5@fjsb{XU0QPM^UCJrZ6l7W>Wnz5c4S9S)75@E$dHs2$FZ8E<7 zwpD96OM6KX=m<%DVLeiRzvRaLLOE&x+rbSP34NqM z+d&_J>*0IkJenf6TLiHTC^eq>zoNc7p2|1=`?`;VV`Pu0jG~lP5i$=_NlGe_os6={ z9_J334N)Xz6rq94?5%-}a6}xNvW`6t=RB9+_xC){KfPYnE1m1Q?{i(B&-?Qpx;*dH zE@pojjzXu)^<=BMC9!Dp=G9++TA_#-hi?+mchDhP6QB))&6_u=)g@)$kFwi)tywCy zM`~bwEm7|zT`rNp_ILqlM8;3A0?mEn@C_-IiNId;yE-u$k3?K_h^R1 zCK!1I;G3i)=N}M1oiMf(m^s!^a4nYTAXRl4hd06vAEIh&0o6aJoB>{M!{I#}sQtmW zBf}E414#vQK`CZHf*MawEPM3A@^4Ddl3IPRF6-i-C-pW5!N%D=gR}vOZ;s9-mypM~ zE`Ov4ClvBdk#5I~9nrtiz^!`f?k`_0e;Mr;@EXoxp@c84cNN5rKOH?y$@Y(PNSTts zpnbPuK-v}dg!VJw^A?CRUP2KFx z91vrmyn%KXyx`u3iP?-Ox#Q}dc)JqF0on=pHzB73@}b1f6$aRgL!*F<53gvKYaqu8 zo_?ez0v1fr0c8s5FH(1dO|A8n%Du22otS}9UdKbw%o#1-H~%@M;edvT>rj7z(g|PZ znVF+!xJKH|Vmq6@h^hl@Sh*0T=%wXRA^Yi2cJL)frr_7Y-7ys`!Fm#UJygD%>5!x= zDSnQ$9;XwQADcI2aGS532#-*>-Adn~l*@BTzMkj(O@{nvfREfPEvKah{-{06hF*F5 zRWS89Ad$q`#xpfl^-Gi&`gs{zjbc=#%OL3(vNc|>DCG~$q&4nqy%1XGSV_B{{*+nZ zuC5gfkxSUbndDThL%O*vVN>r{;R?KME0DJ>P@~wkOxwT!B5llTh$meb!8?7{0S0%= zYP=H}KlX%zAc;$e8QnI&}A6y~YXHHM&&I%{K>a{;ViT`ZOSPW#Lz; zQ&~lhMrHGk<#C($0_FGK=fn`?ya#*iCg0DrR^Kd)xqk9-@xz!cg4!BC7K90WJq%(` z(fKg|196rH z&YxDZH?cZu*2!0&t!jAZn9R*P=PvtAQau7<1BEL|x4HN)rd;r`vfd=r2 zmIHAs?Y4W@SqJ(79+4wIX#FBtrqIe;nCJ_If8q?RpI#q8P$=co2j9%8(om@;hL+D{ zeWztCWU>JHtr6vmVv*MLoZyTjBj|{`W+Z(%Dq+JIQ~k1Is%5jJdVQL-Gw&m^lGCTy zD%g_lT3eWTc!Ig}hvYyBoNzOpx$yn@=E*xS$>)EYU5^(}VvHc(um7rhT+CmcopjDVzVCg#7j>0q@K*anF)FhB}z@P3*p0niq}9g zwaJUTwX-6-;&-f(1qclvcf0RDDG~BcKb06sOVk2Z2UawnhVHKU8*8A6+djVg?TrACfOWhg&ktnGaK+ywcMb`nIez)9n5G!+Us{fpE+9>^w=cBiodz|Ik zN|)E2p|3`mzF>$HD42Rh)y9Rm%tJ4p5tkh#K>YmEwma&ukY+>^_R8{rN_f#u?yQqs zA9@a-BCrR^gX3=G$VRcnOZP<+xO;P-Tys%^%wqe}%Q?2xk57O|NgpgiKpGyTHHGrt zfi2*9w+5S$;i@9mtu0(zOvL4)^5#2lQrf3If7vllQ;U|79whMOQ$1*^qxEwOYGM<* z=l+&gS(KJueM%GdGJV;9_3z1i%D**-L77$z_!3hnjc_Ixe`5x(FqP-)K0UuKbr-DpHfWw%8FsS`XxBVh`tBglHXSE3<|!GUkn`; zx>%uJ^h7?mQS81tz%w&;;6wHRrywiG6F@`@?b~|00rw399*y_^844U62)z4}A}`99 zd$_UA#Ad`d`P9mr#tcuhUXnE!gtNohtbXq_AO?R9H zWSod|loDeyIUl&)@0gdQIOO|Qbky1i&Qh{8EmyE0^m}Yk2#BOXDn&zMaP=sO0kN_y zx`jHLH3hOfR3 zjW|;0W9qr;gMgvbolC8#TsYi8XfazWnT{qh>EHS*cn&=R4qsc@4xgE0D6_zgINb_ z)}}}b538p{(C9!m1h$(;5rH-&P3#~XCjE(H4tOy_GA!l)w)Oe%Nwf991P*X8{3e6H zs$J?nmwmgSfuAb4fC29r0Zlyw4f%a7xaM8daX$;ziw||}Y1YCL&E$aKuD?NWS0q_M z{%wL`Ga)Yun=*3{3;GI(6)^c&uTk=|8>g#V41L` zG`Pl_F4y4rsY$rx?VFV70MjPek+hOhQcaG5NDh&bTprr)uE+8MY$G|qH48z{2@Tv| zQ8@wqAI4mY*N6DsIV0ux{0MEVk$E`|irPvcYPn&Tyb_!>&`4;P8 zZ8!d{bM&FuBiUZaAd}dWR*QYSxhP<-7zQPD_!|U{_2jPKJE`%j8t2u3LS~Sa{K^;y zsI3PllRmJfK?VBZMjNhL=&qwNA{ql0+1d2j|2=zz5s>(&8E9V+_Y zj(oJJ_$>b0@+|21b`?2<f&?s~TDWDoAKQlv}#?VvIFd2-L2pLnYd03!(yX#qa3X8k5G0736r_pBF}>UJvv#@*Q_ajmOb zXzMq({wRqaEZH?YKgROMe_*h8Ny*R{ZP^jl_gMF7!u+hV(>$n(UwMn)dom*rzTbVp zrUyKZGJ?LGtUY&USuC!KazSQ$4{fQN+samXfL7KmqpMBFN1U54A{+<9lad>z40H*H zpCd&<3`UHxjow(Wa|q_@NQvySOq_&dyH`_Lf|+o*%*vN*0j=!q58=6K4aoxG0T%^Z zQuhHX3F5Om#M|&|cUpxXh>Sfw^UU!y(5e#MJjn(u{3f2m=%q{d$Q&T`#2%+mZc%cg zk#3w8kbkxlc;H+wa$ z7v5|CjHiDyEMkzZ6Nv@r*j3=>cx=8jgTM&_<$?&db8mlu&}EqA`0kY9CF!UeUJrQF zGQE0D3ykeK2h)XcwgF;ifZKbYqxfV-^fD7(`os~lb-k>g&YKopGc)@z_`hyC4%5t((uMQ-xxLz1!%O0?w@xD+#8-7o%kFy%o_6!9C`^MYeQSE$&MR_8XK?uSk#8{_TvLQ#60YF^Bk!6F zqD46&8e$FnKyBjHbd8q)ooLmzV*4EBMY(q!7T{EAj@r^NI}Yr(fAMLPq3{L-cU8BKw`lxaig?zTK7hN9c^Rw%X~#{gHU~B4 zyDmS%U`(U%EWjZ$QZuw&F0ePXnV0fK7E`iAe7B>cu9bs~w1;8~Tj@uY&{iPT$;t*QE1LHqJ39t{2?A?T}aFTA2s^9J~5ybTA{ zElNWT2Q=7sl}DBo4vt|i+Lxc=m6<_dc$8HLmunbVrp9#;Mgh;+f*_>!x@WE;QMyK) z^Zf01#YcxyYtamLIBv2UfF{vE0=`Y{hgnbQHoW>cbPYy6UYfsB`sZ`m;?7Uw3q3QQ z8I%$6csoF^>kV#0(XM(_lm3F9s_T7T;Gszvd*8 z_W2TJf8r5MJvKHzu38cWpsDI54YR)szgBKeChPmfrg7rZ!qv5eU#{bp4%|Ni##L{A zamYD6()ep1z2a4)BtfKS!zUVKO6d`0e3WgC55m0dBSj zeQZT!5pcUi3dXI|9Og_qC9vOMB;w#D^K`6w(uVn0&N#YS;-U1rU^rHr?an_>IB0mr zj7-~y0l<{KXc9CpErO^B11pwAR3PYE!DE@75{e9z1iW~r&!zR5)vD+u0;2z!+>rjP zNgPjM4AQ!g>aPWQ0woLF)>mOOQ&vp*lNcjGP~B}@%;c7N!1?f*J8a;N2CT;4v(*;v zPyo!$V+(g>Ur|%#}GXAcNIKth0ozY=T&w-@*y@b2>cY=Umsn9eMldaV+}~X zo1>QBoA|`g>aCGrr+rzuN_My5#DFLHABHI|LL3}7<9gOA-fkip>q5LwKLYTud9}ee zd{W^8F$Xd*`ouM1*J-1ed@fWn-RjVdI0FPdg4`3=x2vydUIsjeAMZY~#3q6WnD$k| zE1Iw((}VB=X0(Q(N=81aJiwTX!JiJjRAm14@?A4~R41=D*m)>>hYw4ThUiJ{ZC+aL z&ZmJd;#hERR_Q$i6)3@dnVJB)SKIpokY$gyP{PG`mgzz7?BKO-I`GE5cRS^F%TZ1Q zU*t^(q{j$Z$t5&-QGv6Y%AAM|-eJVlQl0^GTkC^ekavIpW#uIC|Qyh)l z7XlOifg;xzg;{~}em1!I7cqT*#n3?fC1Kw$>`Wj`3~4+DWY!5J4xlU-MVW`hthK3r zl}YwujU&WY+8{L$=tRv|Qa-?u6%6>m89@E^C+HnA$^J=o+RE}+D25^UejwL_)@#k&ednUJZSwC>z3g3d{j|?$3+T4Eya_n#0 zq{d2d{DwAjMCCw2*w-ea2!_5g(7U)nlU&2prEeuJV3sQZbU! zIPB%nOoPv$Z5kWyoFqS4KcybRkprj8928YEuKzxMJ54(t+ZBxjCe6?mPrDj#wfmIK zRo)q^?SgK^up)iA(GK5PB`C53#E*ntTLs0F7|@z)Uhxuouo)_ejIYlRI;w9B)7dMS zP16P4xwZc;G@R}oD^UQoq5v0w1rFP0hIpu{q%QrYse)Rr8rg8xj)_WUJOK_9ARj#3 z%dV$wUz{dg>lgBpZ*s}bAE!TSm1Q;qE`|SciEXp{e3CuwXBD#a{Rdf-7ER^ud|%il zAh7nr$Hp>HTawRSZ7IKTabxz>%>2cRDvv*{JD*YsE*P2}DmeI=f4=JI=h6}>g$3v8 zuI?Jks5(dE@EMp^%R=dRd?;q*#G=jc*U_z66QY#EeGrQ!cWAReKNG#VnC2PhSw5L- zAMdGlyE(6I@h#~hYi`5y4^#)Ep`Fy-AG6lEWqIU({{Oy2vGA_;OZ}WA)dKN-8mIR0 zD2=sxw&sr}g!!j_tL~hSpBA;(tv;d7x-XtCb^Cr{iuN`t$T?|_#sp&% zH&aU8xeq6wa_p6Fqe9b!c)Pj&V(0&^`{G<$8G>hJoIVPMRSJd6A05Kh&JI;o@=0*jBgqd_q69yC0$*n_0Gkd=;i zVd0xNPdIdf=`!K^}TdA3O zEYKxEkU99?1aWBK<-I&_wZ`n&tPl%m@VqyzO!e@vrdse4D<||OZ%0r*Od1qy^tJ&J zF{a`ArVow&e_!@A-M&RGml4|+-tzb45b0~+lhDw^kfZo%U5!oiMSyVpjImj2OsG5u zO_cZ`1uizjF?2?|{altH=Xmk47YklT2N+T`exSy(4b&-({d>neZvBGxZDe+KWS|Lq0gh|)l8K~5jn_l(*LKeuR2yO^-JgRJO$GwC*7M#Ax9y8VuV zDI&YkEP?T`@=9xQBOUkDwU_wNUyy)=-8WM1iw0;A$>>u>;US1lHh**s$zJ+RLhjyraZ7+lM z9X3)rng$W@L;FQA=-u78&e~FCaG+0ZsgDiLP#AP~H!g&i=Q&T20p~x8%HnA@nfF0qK768VbX{;dkldkZc?ooI48Uh($sSBCUcHV1 zFE`~}<4-qZR2Vpn46?9HO6kwC58v<^zSbYT!@09bEji$?8> zrk${9PAdGVOw6KwNeFAb8TWA^gmdy7-A|`kVVkEPSfSHR#d|!tm3Dk=^!H3xW|tjyO#o69XqpJ|C?h? zjMiX*NI0yC3{dTO8fOfjkr!+^43?!{4_My3 zPNN-s{C9MOyJu=Y!R36-Y5u;R6uth164HM~h0&rVGi0^G7B5=}bco^!{{i6f(l}ilWpIgCA#y>F7>lrSrb>Z4b|Nd_qEOj?I)orQP316k&bh1B zrJ;)57XkU^72cVqbp-(cNqp0KtEH_^YwwyCx3X9NQ%Z{h&gAXWc>&-VA`uhIu} zGO!@SBc>?zu!442>ExY*pV)slPbn2K^9q7|=|as%v9UPm>Qw3k@xhG-a+Qn@9m=sN zdmYJE0uG!@)oqLz2s7QR>wOMuAu-4>z#DbW{0$loQl(Gj{#)4Zx4(KS!vNATIg~4C zeI?G56Nwh`1Yesc_ZyoU1s6#Dg)Otb|L#D8#Y9v(>q-s7|G;7Tqcu)|{MzQR^CCke zNP|_B`j;B7UsVjPbRezPm5UO+NKHb}woe){BcYvM>KPHLoPEVE`Q_8OuQspMK&T<` zz2z6Xp`5gH)^ku93Vg~)dQeM&aab@H+LON9>dz@VES$onA*lX9@DS%BdqOnrLilcE zK(AdWfEhz3+dkr0@(bOy0};_?3Jk9wI@U)r ztEfNTnP<{(03TA1$$xM1L23&mZMdP-Te~!oF_R8!InvhJ;=6c& zsy{OttgJ)nF<^{?W)7nmmSI;xLBNwkjMfX1&=tr{ylI>y+qRmLJZW;vvngxG*DQ+x zY}hYS)hG63+Q2c9uLnfhYQ4-ATmptrFRg9u8Azrqg|lcS&~e6Pa`6uGb?m0mauR*J z`~Gwb_6M4{ukPJaY0Y66&Z8Mm>5Pv`4G*fgDyWqHu{Dx0)&6>BPe5SXqsh4*mPh0B zd5Fy(z_W8PQGKjmvRQnzh6~{D15WIj5zC{C!U#UcNB~%ISI#kjEm612zZB4Z)u=L}(yaI`!n9Y}7*(4S& z;Jl-H=s~2rD0@kX>lbCV5U(zU+{$CGF~Dntlz##D0bX|>$~R;o1Lsln6y3C|(euNc zL*D)4M?G61oU`sBI`MhiM7pI6+)$3pqSG7v=kfbT(y!J+$u)sWHZ@^Rz{3Izq~746 zZsq4J#2Z(6hGBe!?8XNK9R2$`!Rj*ipWLv(do%@*_8|NGXlev-;J_afpQZyD;|CP_Y}*kARMJoFE%h&Wei_Z^s*n zjM9OGwiJ7B3&lL$j*7#|MIA^h6TGllnIb>2m_vZj;YrY6JgkFOOY-1>Z49^?1&9MnkLz2_-gG$@IN@NIJ45e6y$>61!MV?=Eg12C8h1 zDco_Y8TY>gFGh?60+L%)Qm-&^($p2o$Rxl#3v<@sZ)pE#gB} zl_UGra}7jJgzDX%D= zhjx9(qM6UssmBR^YKVJDX;fN#Ui`$@8C5^@+&Se4OXE&wkVjok+sBTu3ufPbVeh{* zt$rqpE~HKZyyj2y<>IgqnZpe;f7-j-!UhM>1RR_}gku|fb!6Zesj>H6 zC3~kw_`@#%joVXtZ>E_8$h3;rCGmpu2KQMm-7(TRCVI53p7N~q*N@9fFq#>lBOcO; zXvwR*Uujs{etAL6FbsO$a@Z{b`GEs7l5KjVk)TM2O4`ewNVNQ1JG{5etG{z*~7MR%CZ7Cc{gU0Ui48^PhPoyWVar zsAA!^2H~(?|mV}e6(OH9p2iKyfC*O0GEO&Vf z9RlB64Yf{hrTm<{djIb+Ip|l!&KS$psVf8wH}SgTda<>|2mFyRU(koGhA7hgL*`TP z7}yWwMGtLf!kpTc$eoP1$MRxt=|T4=?%lP4@ssKG+LRPSP3Tkeg8|%};Q-%W|5m31 z$BSoO7W@$Wl_=~oMDI>+Owog~y33p(&Bbo{XjV21#H`3n#~ua8X~ko`kemGDIr5N0 zB%0gTme?61vnCBdnqq`GWB6;`qieJg{5h%nJp4jq_ z>699+SsU#Rzk)n`L{Ko#ttwf~)c-eCXntkpS-av7KhAatj7&fzm+CjFF+bn_;GMi& zn|;GTMbL?I11qt-#n5QO=N@h1RF4Trl|GK5xQ(1=f!~H zW4q6GUtU!a#3-@Il?`Z}i;XT5ScTT5hOd-^Eg!2s#L=*GeBn<9AW& zIqKpkeBgDp4>$nZYkL%7?eaX5rcwDhE6x@KFaTo_ zxD;M)>L5fZLG3{*B=xF0&i#sDcKBQD{7(HtG6YCEJaFSo?88HQ;bZ-06RN6yOP(DJ z>yoq41d9Q?e}(0n5pW3+_!KhQ;VFdR%b;`Ea}xwrkZeQ10jn$Py1LgKL*(Ch`2R4xSJ5H|u0=SUEEeISUHWusvSm2kjuzdjXrOfRU2J3T^uGM+UWwo2n58$Okr`w*(i9SKs^*-4)Y3`Dj-k0iWEu1R(2UjGqmZx2>voH)+U%{GjS*`5lvW!`#YN zdT}qrU)4Xy=1YL#kt=ECLlNb>$3sc`4KBX-LagfPbm=Ll;MB~NzIK8N-6`<)AA;Tk z19w|GQ2lw`kN{ay?4YBb(>E9#H4)`s7X-0!px%QC6Xp+K2_s~whpR0aJitjCWPmY& z@E+`X1)}O^@p zJIn(*DC@1CueM(Obwn_%KF)rxA~Vu41S@RS66fTnOI>hOp^4|Asxg3q@(BKklH4da z(lLGT3c5iiwIryiP8J|56H1ykl;3U)84Vc_>JPHT; zvG7CI`n*e;1Z0@huqP!DTh%_RF}Lt?Ze%en_Z3#*hU*s10CsD7j?nE6;M$PkC6JGx z-te$w1QO$-`ytIARveI>!~hin;mqd;V99MPgkJPRo{{ex-kK_mriH{Ym8>eMR?3Bl zUWDT@wfbyLC3M$Wr0CHzpLfT=aP+AgN#`8f*MvZ%hzK+7(ggT6D&!Jlz8>W&TfmwI zXN+=7{pAM%(BLzjhW|10lV!F^qY31L=T)lZc3|dBT~hgh3J`p8*uL4E<{NzAjFN9s;zH)UkaSgKNAX zl>_8oiloV4fDw+PUuk^@%6!ouQUg#sl)ITsdF3U63NbI|Db>!nBS^TdM%!^qeP;fwGNcy7O|MLHpp!`6`xiyg(2)P+iyl)cIv z5HYddZ6i|norOe1>d{vkThyfk9+9W7bZq`))592Hz|GW3=*C^|oR8*7LY4B$;%S1R zhUH>j*{q|MJRNWgvR{JzARQ1ht|js!K$UV^c?y0rp{@X(3Nhq0K?!J za2?l2HAKAOcXBv@T_YycUd?f89YnIHanH4?_@*FVwX`CeC}% zZtwu5AUED@Si8h??rmgs_1BkPDx~Ex&&NS#Yne0u0)pfM?Ter_?M;)QpeLthyz8b^ zG3Y1&%=&ELc(d6DHY+_$q*gr3MdP0j-nBSeaA^j7i$Atmp=CI7z%)-6O4$hNX;pN-sD&;kZm!vgs}z?$S8>mo@Xh#!9<4FF zARcZ5+5%_ZotrGbWG*u3-XQXL;AZ7_B)9Yk~4fh`$d#QEu!ix z0h=-|S>3iIui~8m3WoOg%FJL4z!JI%{lSTyS_td2f zdf%Nr5!jqfjmPGT?X~hZA)o6MX4~aMm;8jWu|Md*wZOYt@pcQuMveBRJf^#;7qz4{fHDWko7tI89lBf8*TNwS+H`*Tpb=j`|C`)1`Qt+ZRuc^Y z_$9xqS?%l?(B(H}Ent`$yZrg@zcP5ca)IodZ0IFCsFbmS%1F~<1ndk#zP=}8qw#;M zgQ6&i{q6w!j|~n5wJnKd(Hh|P_hs7 Qj)0Oeol9qOwX8z^4_6^M@c;k- literal 102670 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%0A?JCB!3zG7=R>Ca1j?h>d<8R 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%0AxI#?b_^0eWb>KKYgw<`6(-wCkx`F4(mYbpL>sR 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%0D^-1rT2fk6#*W@<4TVP#jW&aGT9yw(PBLC>=Xl) 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 1000000){ + return Strings.toFixed(number / 1000000f, 1) + "[gray]mil[]"; + }else if(number >= 10000){ + return number / 1000 + "[gray]k[]"; + }else if(number >= 1000){ + return Strings.toFixed(number / 1000f, 1) + "[gray]k[]"; + }else{ + return number + ""; + } + } } diff --git a/core/src/io/anuke/mindustry/ui/ImageStack.java b/core/src/io/anuke/mindustry/ui/ImageStack.java new file mode 100644 index 0000000000..2ca0063e48 --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/ImageStack.java @@ -0,0 +1,14 @@ +package io.anuke.mindustry.ui; + +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import io.anuke.ucore.scene.ui.Image; +import io.anuke.ucore.scene.ui.layout.Stack; + +public class ImageStack extends Stack{ + + public ImageStack(TextureRegion... regions){ + for(TextureRegion region : regions){ + add(new Image(region)); + } + } +} diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index e023059cfe..9900cc18ec 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -1,21 +1,183 @@ package io.anuke.mindustry.ui.fragments; import com.badlogic.gdx.math.Interpolation; +import io.anuke.mindustry.core.GameState.State; +import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.graphics.Palette; +import io.anuke.mindustry.input.InputHandler; import io.anuke.mindustry.type.Category; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.mindustry.type.Recipe; +import io.anuke.mindustry.ui.ImageStack; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.OreBlock; +import io.anuke.ucore.core.Graphics; import io.anuke.ucore.scene.Group; +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.*; public class BlocksFragment extends Fragment{ + final int rowWidth = 3; + + Category currentCategory = Category.turret; + Block hovered; + Block lastDisplay; + Tile hoverTile; + Table blockTable; @Override public void build(Group parent){ - parent.fill(frame -> { - frame.bottom().left(); - for(int i = 0; i < Category.values().length; i++){ + InputHandler input = control.input(0); - } + parent.fill(frame -> { + //rebuilds the top table with the selected recipe + + //rebuilds the category table with the correct recipes + Runnable rebuildCategory = () -> { + blockTable.clear(); + blockTable.top().margin(5); + + //blockTable.add(currentCategory.name()).colspan(rowWidth).growX(); //TODO localize + + int index = 0; + + ButtonGroup group = new ButtonGroup<>(); + group.setMinCheckCount(0); + + for(Recipe recipe : content.recipes()){ + if(recipe.category != currentCategory) continue; + + if(index++ % rowWidth == 0){ + blockTable.row(); + } + + ImageButton button = blockTable.addImageButton("blank", "select", 8*4, + () -> input.recipe = input.recipe == recipe ? null : recipe) + .size(50f).group(group).update(b -> b.setChecked(input.recipe == recipe)).get(); + + button.replaceImage(new ImageStack(recipe.result.getCompactIcon())); + + button.hovered(() -> hovered = recipe.result); + + button.exited(() -> { + if(hovered == recipe.result){ + hovered = null; + } + }); + } + }; + + frame.bottom().left().visible(() -> !state.is(State.menu)); + + frame.table("clear", top -> { + top.add(new Table()).growX().update(topTable -> { + if((tileDisplayBlock() == null && lastDisplay == getSelected()) || + (tileDisplayBlock() != null && lastDisplay == tileDisplayBlock())) return; + + topTable.clear(); + topTable.top().left().margin(5); + + lastDisplay = getSelected(); + + if(lastDisplay != null){ //show selected recipe + topTable.table(header -> { + header.left(); + header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4); + header.labelWrap(lastDisplay.formalName).left().width(150f).padLeft(5); + }).growX().left(); + topTable.row(); + //add requirement table + topTable.table(req -> { + req.top().left(); + + for(ItemStack stack : Recipe.getByResult(lastDisplay).requirements){ + req.table(line -> { + line.left(); + line.addImage(stack.item.region).size(8*2); + line.add(stack.item.localizedName()).padLeft(2).left().get().setFontScale(0.5f); + line.labelWrap(() -> { + TileEntity core = players[0].getClosestCore(); + if(core == null || state.mode.infiniteResources) return "*/*"; + + int amount = core.items.get(stack.item); + String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]"); + + return color + ui.formatAmount(amount) + "[white]/" + stack.amount; + }).padLeft(5).get().setFontScale(0.5f); + }).left(); + req.row(); + } + }).growX().left().margin(3); + + }else if(tileDisplayBlock() != null){ //show selected tile + lastDisplay = tileDisplayBlock(); + topTable.add(new ImageStack(lastDisplay.getDisplayIcon(hoverTile))).size(8*4); + topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(150f).padLeft(5); + } + }); + top.row(); + top.addImage("blank").growX().color(Palette.accent).height(3f); + }).colspan(2).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null); + frame.row(); + frame.table(categories -> { + categories.defaults().size(45f); + + ButtonGroup group = new ButtonGroup<>(); + + for(Category cat : Category.values()){ + categories.addImageButton("icon-" + cat.name(), "clear-toggle", 16*2, () -> { + currentCategory = cat; + rebuildCategory.run(); + }).group(group); + + categories.row(); + } + }); + + frame.table("clear", blocks -> blockTable = blocks).fillY().bottom(); + + rebuildCategory.run(); }); } + /**Returns the currently displayed block in the top box.*/ + Block getSelected(){ + Block toDisplay = null; + + //setup hovering tile + if(!ui.hasMouse()){ + Tile tile = world.tileWorld(Graphics.mouseWorld().x, Graphics.mouseWorld().y); + if(tile != null){ + hoverTile = tile.target(); + }else{ + hoverTile = null; + } + }else{ + hoverTile = null; + } + + //block currently selected + if(control.input(0).recipe != null){ + toDisplay = control.input(0).recipe.result; + } + + //block hovered on in build menu + if(hovered != null){ + toDisplay = hovered; + } + + return toDisplay; + } + + /**Returns the block currently being hovered over in the world.*/ + Block tileDisplayBlock(){ + return hoverTile == null ? null : hoverTile.block().synthetic() ? hoverTile.block() : hoverTile.floor() instanceof OreBlock ? hoverTile.floor() : null; + } + /**Rebuilds the whole placement menu, attempting to preserve previous state.*/ void rebuild(){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 3da203e15a..b3692c6b22 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -199,12 +199,6 @@ public class HudFragment extends Fragment{ t.add("$text.saveload"); }); - //tapped block indicator - parent.fill(t -> { - t.bottom().visible(() -> !state.is(State.menu)); - t.add(new SelectionTable()); - }); - blockfrag.build(Core.scene.getRoot()); } From 0efaa1155375a1133849585c39a19c61697190fa Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 18 Nov 2018 14:10:02 -0500 Subject: [PATCH 03/52] 2 new categories, less space used --- .../sprites/ui/icons-category/icon-effect.png | Bin 0 -> 268 bytes .../ui/icons-category/icon-upgrade.png | Bin 0 -> 252 bytes .../assets-raw/sprites/ui/text-sides-down.png | Bin 560 -> 0 bytes .../assets-raw/sprites/ui/text-sides-over.png | Bin 551 -> 0 bytes core/assets-raw/sprites/ui/text-sides.png | Bin 557 -> 0 bytes core/assets/sprites/sprites.atlas | 1887 ++++++++--------- core/assets/sprites/sprites.png | Bin 104348 -> 100178 bytes core/assets/ui/uiskin.json | 3 +- .../io/anuke/mindustry/content/Recipes.java | 38 +- .../src/io/anuke/mindustry/type/Category.java | 6 +- .../io/anuke/mindustry/ui/SelectionTable.java | 52 - .../mindustry/ui/fragments/HudFragment.java | 3 +- ...ksFragment.java => PlacementFragment.java} | 37 +- 13 files changed, 986 insertions(+), 1040 deletions(-) create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-effect.png create mode 100644 core/assets-raw/sprites/ui/icons-category/icon-upgrade.png delete mode 100644 core/assets-raw/sprites/ui/text-sides-down.png delete mode 100644 core/assets-raw/sprites/ui/text-sides-over.png delete mode 100644 core/assets-raw/sprites/ui/text-sides.png delete mode 100644 core/src/io/anuke/mindustry/ui/SelectionTable.java rename core/src/io/anuke/mindustry/ui/fragments/{BlocksFragment.java => PlacementFragment.java} (86%) diff --git a/core/assets-raw/sprites/ui/icons-category/icon-effect.png b/core/assets-raw/sprites/ui/icons-category/icon-effect.png new file mode 100644 index 0000000000000000000000000000000000000000..5da7498a1fa53018fb4c4e435a74fb971b5b3cb3 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPdw~&yPez%jB5Kw5Qr;B5V#p$KN-h8bJJaeSp9qlp= z-x_`M#^kTLQxvv!?DOL|7uL+4CEYcBSILo6~bWYSk^}~X- z#(G7&)<(#6>1SEG76=wh)MOIg+x$Qyd4s>MXF<+=t9NsEx@LU#-QT=yMp0Lm#_Gq% z-Y{D3-LNQD`HO6w?7@I56MqRG+^|7?f&ToJLNej*@%ujW_qA$HPdNHxG0>3=p00i_ I>zopr0OJv0K>z>% literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/icons-category/icon-upgrade.png b/core/assets-raw/sprites/ui/icons-category/icon-upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..6f054ad8d0aa1414b6f30cfbbf742d9e43578f4b GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPdw-6scQ{{wrM}b0}o-U3d7N?g^w&pvaz~el3#rLG7 zccG`FrWI`}aTIN-KiTB+VX~<3u6OL#r3?o$eOK#$ToQHpC&Rk~s$80k2Y*hmebgw? z$y{hBl2_^U$I&nQ$j=EoA9xnBX|}CkQ#-Y5pL5Fuwg6?uFOwcbnP?x4y7NHNXy_vl*FQkQg|epPMK{j~T=z*riPpCNb+EaT(l<{n_Aheg034G%aEtOiUb@%Idj z1cXO}fZ=&vh6cgn0R}zj``eQl46Z=|_W+}{AII_IQDDw~r_VM%7HwO-AC1wBi3Ws6 z;{hfG4T9zK_2L3X0)fNe(PV)^+ErkrF|)u(V{%{+5EK|qgK|9ciJ%DsgJ4+&hW{!& z8X9ovT3ZQL%T5#+v zb|_dW@7AWb1en$3s%jZUN%NkPqGcev8ff21@Opu%DDTzVj?(2ytG%B3TzRba07HNA zsI3ARJ{PT&Az&y72pCCIz3m7=6FF9&lb49MG<;Q|{iIV0zoyXecI~tiZ9{X_?rlAz z6(1fCOXC411&ajD>Cr##EMSl(3yhUC4KChR0gOlEiJzp4!a}zlG_NUGw0{I2?bSf$ yH3FLJYCms$3SJE?=e4b^t*x!Ct*x!?q3s*|3*z*WqrZOu0000DFsdd diff --git a/core/assets-raw/sprites/ui/text-sides-over.png b/core/assets-raw/sprites/ui/text-sides-over.png deleted file mode 100644 index 110491b4d4c55957827a5e8b71b477ef6783d931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)C7;&;gi*|3yVAvW)%w5*w-9`AHGgpv9#`? zUW-<%)oMMn)^$B}8yNemp+4!E85hm*Um6o1CdPlYuHmFo?8Mi@f4;x|G;iT8&-wS< zw4F@{M1JmFBd=_hj~Q3hXWb9Q&jKd$cx$WIH3f|Y3k!_(Wj$a#j}EvFECMF8@OK8r z0)p`{z@(t@VA=OQoY4ECA8#*VFto=DI0Fpo-?r_$jRJFxyV}{O=aPN1_meR?V}gKS zJl-0g>sbPg2MY^~1%ifw@nnJVytBYqb7q0D=G4G=KuBPa2La2UU?WU}n=*RT@R5V6^09fkF4THs~lrGNlY13TDcC z^|qrlT~(z~Z_(IO(r6jTW&`w@1uqLsMR~8@cEEI{pAnhJ7!MOa%Qp&(1x)#`y^s8AAoCi*d)C=; pYwOXxKtJQi0eF3?dJi{uU&+Y&K002ovPDHLkV1hXZ__+W8 diff --git a/core/assets-raw/sprites/ui/text-sides.png b/core/assets-raw/sprites/ui/text-sides.png deleted file mode 100644 index 30e3c430314d310ffdd2bb6e2b82ac538e810a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P)NklaMJDL`PSHpkB9$yd%87m z;VsYpci*(_O$S7N?p-6VY?hB1SJh|T55>;{Ch~Y|tJgIJjRgw}jP+$bU_6fwxDG4= zCbRHo2F3z{@i4%opz&b&e0dBf^uFl(>q8g}?ePN60E7D1b^UImz#QX_w)g3|WZ&%l zWQ_KhARrizx5oQ=mO$gd!UAJ~pkZJxygg8+TXRiq4<*>qKvMo}pkEjd|W(EY6qI?9kt zDMN>Xnetw}?I=xGRcX{)H1?DTRpdD9l%lUCG`b(1c1HWW zXGQmpzGD<09goNpRgp9-2%6C!?jm43PZpSH(GXm^uL2mx!^F?>jlyC9Q~qo3J--^r vyhiYzb#@#ZpHsdXXti3cR;$%&weCSz_WJ@e*v6WH00000NkvXXu0mjflp+G8 diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index a0df922c42..45914d987f 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -6,5257 +6,5257 @@ filter: Nearest,Nearest repeat: none force-projector-top rotate: false - xy: 165, 206 + xy: 724, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mend-projector-top rotate: false - xy: 753, 377 + xy: 261, 166 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 overdrive-projector-top rotate: false - xy: 753, 359 + xy: 243, 152 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 bridge-conveyor-bridge rotate: false - xy: 224, 114 + xy: 583, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-end rotate: false - xy: 224, 104 + xy: 593, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-1 rotate: false - xy: 943, 323 + xy: 793, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-2 rotate: false - xy: 949, 353 + xy: 803, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-3 rotate: false - xy: 953, 343 + xy: 813, 391 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-0 rotate: false - xy: 953, 333 + xy: 823, 391 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-1 rotate: false - xy: 953, 323 + xy: 833, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-2 rotate: false - xy: 360, 322 + xy: 843, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-1-3 rotate: false - xy: 370, 320 + xy: 853, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-0 rotate: false - xy: 965, 369 + xy: 863, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-1 rotate: false - xy: 977, 373 + xy: 873, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-2 rotate: false - xy: 987, 373 + xy: 883, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-2-3 rotate: false - xy: 422, 298 + xy: 893, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-0 rotate: false - xy: 195, 44 + xy: 903, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-1 rotate: false - xy: 195, 34 + xy: 913, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-2 rotate: false - xy: 205, 44 + xy: 923, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-3-3 rotate: false - xy: 195, 24 + xy: 933, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-0 rotate: false - xy: 205, 34 + xy: 943, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-1 rotate: false - xy: 215, 44 + xy: 953, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-2 rotate: false - xy: 195, 14 + xy: 963, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-4-3 rotate: false - xy: 205, 24 + xy: 973, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-1 rotate: false - xy: 424, 158 + xy: 711, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-2 rotate: false - xy: 434, 158 + xy: 711, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-3 rotate: false - xy: 444, 158 + xy: 721, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-0 rotate: false - xy: 454, 159 + xy: 721, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-1 rotate: false - xy: 414, 146 + xy: 731, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-2 rotate: false - xy: 424, 148 + xy: 731, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-1-3 rotate: false - xy: 434, 148 + xy: 741, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-0 rotate: false - xy: 444, 148 + xy: 741, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-1 rotate: false - xy: 454, 149 + xy: 751, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-2 rotate: false - xy: 424, 138 + xy: 751, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-2-3 rotate: false - xy: 434, 138 + xy: 761, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-0 rotate: false - xy: 444, 138 + xy: 761, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-1 rotate: false - xy: 454, 139 + xy: 771, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-2 rotate: false - xy: 501, 350 + xy: 771, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-3-3 rotate: false - xy: 498, 340 + xy: 781, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-0 rotate: false - xy: 498, 330 + xy: 781, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-1 rotate: false - xy: 498, 320 + xy: 791, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-2 rotate: false - xy: 508, 340 + xy: 791, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-4-3 rotate: false - xy: 508, 330 + xy: 801, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mass-driver-turret rotate: false - xy: 168, 98 + xy: 958, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conveyor-arrow rotate: false - xy: 433, 218 + xy: 1003, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-bridge rotate: false - xy: 424, 208 + xy: 1013, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor-end rotate: false - xy: 424, 198 + xy: 441, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 warp-gate rotate: false - xy: 280, 302 + xy: 584, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 warp-gate-top rotate: false - xy: 291, 276 + xy: 610, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill rotate: false - xy: 53, 1 + xy: 204, 283 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-rim rotate: false - xy: 79, 1 + xy: 233, 346 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-rotator rotate: false - xy: 860, 453 + xy: 30, 80 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blast-drill-top rotate: false - xy: 886, 453 + xy: 285, 402 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 laser-drill rotate: false - xy: 735, 395 + xy: 205, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laser-drill-rotator rotate: false - xy: 753, 413 + xy: 205, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laser-drill-top rotate: false - xy: 717, 359 + xy: 261, 184 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill rotate: false - xy: 735, 377 + xy: 243, 170 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill-rotator rotate: false - xy: 753, 395 + xy: 225, 165 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mechanical-drill-top rotate: false - xy: 735, 359 + xy: 223, 147 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 oil-extractor rotate: false - xy: 168, 72 + xy: 984, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-liquid rotate: false - xy: 168, 46 + xy: 350, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-rotator rotate: false - xy: 160, 20 + xy: 376, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 oil-extractor-top rotate: false - xy: 254, 310 + xy: 402, 425 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 plasma-drill rotate: false - xy: 153, 232 + xy: 25, 46 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plasma-drill-rim rotate: false - xy: 213, 294 + xy: 59, 46 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plasma-drill-rotator rotate: false - xy: 56, 95 + xy: 27, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 plasma-drill-top rotate: false - xy: 56, 61 + xy: 61, 12 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 pneumatic-drill rotate: false - xy: 807, 415 + xy: 225, 77 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pneumatic-drill-rotator rotate: false - xy: 789, 379 + xy: 259, 112 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pneumatic-drill-top rotate: false - xy: 807, 397 + xy: 243, 82 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor rotate: false - xy: 960, 435 + xy: 315, 206 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-liquid rotate: false - xy: 978, 435 + xy: 297, 170 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-rotator rotate: false - xy: 996, 435 + xy: 315, 188 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 water-extractor-top rotate: false - xy: 861, 415 + xy: 297, 152 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blackrock1 rotate: false - xy: 361, 360 + xy: 214, 55 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-blackrock rotate: false - xy: 361, 360 + xy: 214, 55 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackrockshadow1 rotate: false - xy: 233, 198 + xy: 217, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone1 rotate: false - xy: 865, 335 + xy: 217, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-blackstone rotate: false - xy: 865, 335 + xy: 217, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone2 rotate: false - xy: 865, 325 + xy: 227, 49 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone3 rotate: false - xy: 1015, 404 + xy: 227, 39 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstoneedge rotate: false - xy: 470, 335 + xy: 283, 98 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 coal1 rotate: false - xy: 224, 94 + xy: 593, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal2 rotate: false - xy: 224, 84 + xy: 603, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal3 rotate: false - xy: 224, 74 + xy: 603, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper1 rotate: false - xy: 215, 34 + xy: 983, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper2 rotate: false - xy: 195, 4 + xy: 993, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper3 rotate: false - xy: 205, 14 + xy: 1003, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt2 rotate: false - xy: 225, 24 + xy: 317, 30 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt3 rotate: false - xy: 225, 14 + xy: 287, 20 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirtedge rotate: false - xy: 809, 331 + xy: 966, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 generic-cliff-edge rotate: false - xy: 334, 318 + xy: 337, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge rotate: false - xy: 334, 318 + xy: 337, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-1 rotate: false - xy: 344, 320 + xy: 347, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-1 rotate: false - xy: 344, 320 + xy: 347, 14 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-edge-2 rotate: false - xy: 324, 306 + xy: 357, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-edge-2 rotate: false - xy: 324, 306 + xy: 357, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 generic-cliff-side rotate: false - xy: 334, 308 + xy: 357, 8 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice-cliff-side rotate: false - xy: 334, 308 + xy: 357, 8 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge rotate: false - xy: 975, 363 + xy: 351, 376 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-1 rotate: false - xy: 985, 363 + xy: 351, 366 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-edge-2 rotate: false - xy: 432, 298 + xy: 351, 356 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass-cliff-side rotate: false - xy: 963, 315 + xy: 361, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass2 rotate: false - xy: 344, 310 + xy: 219, 19 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass3 rotate: false - xy: 354, 312 + xy: 219, 9 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassedge rotate: false - xy: 875, 325 + xy: 95, 2 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 ice2 rotate: false - xy: 344, 300 + xy: 361, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice3 rotate: false - xy: 354, 302 + xy: 381, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iceedge rotate: false - xy: 895, 403 + xy: 345, 118 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 icerock2 rotate: false - xy: 324, 296 + xy: 371, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow1 rotate: false - xy: 364, 310 + xy: 361, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow1 rotate: false - xy: 364, 310 + xy: 361, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow2 rotate: false - xy: 364, 300 + xy: 391, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow2 rotate: false - xy: 364, 300 + xy: 391, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lavaedge rotate: false - xy: 895, 361 + xy: 345, 76 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 lead1 rotate: false - xy: 329, 256 + xy: 352, 296 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead2 rotate: false - xy: 329, 246 + xy: 352, 286 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead3 rotate: false - xy: 329, 236 + xy: 362, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor2 rotate: false - xy: 339, 238 + xy: 362, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor3 rotate: false - xy: 339, 228 + xy: 402, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor4 rotate: false - xy: 339, 218 + xy: 392, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor5 rotate: false - xy: 347, 280 + xy: 382, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor6 rotate: false - xy: 349, 270 + xy: 372, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalflooredge rotate: false - xy: 909, 377 + xy: 109, 2 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 rock2 rotate: false - xy: 354, 180 + xy: 501, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand2 rotate: false - xy: 374, 180 + xy: 511, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand3 rotate: false - xy: 384, 180 + xy: 511, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandedge rotate: false - xy: 923, 391 + xy: 117, 49 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shrubshadow rotate: false - xy: 449, 259 + xy: 571, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow2 rotate: false - xy: 449, 249 + xy: 571, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow3 rotate: false - xy: 449, 239 + xy: 581, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowedge rotate: false - xy: 909, 363 + xy: 145, 49 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 spaceedge rotate: false - xy: 923, 377 + xy: 159, 49 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 stone-cliff-edge rotate: false - xy: 414, 176 + xy: 641, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-1 rotate: false - xy: 424, 178 + xy: 641, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-2 rotate: false - xy: 434, 178 + xy: 651, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-side rotate: false - xy: 444, 178 + xy: 651, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone2 rotate: false - xy: 394, 172 + xy: 631, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone3 rotate: false - xy: 404, 174 + xy: 631, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneedge rotate: false - xy: 951, 405 + xy: 113, 35 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 taredge rotate: false - xy: 937, 377 + xy: 127, 35 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 thorium1 rotate: false - xy: 424, 168 + xy: 681, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 434, 168 + xy: 681, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 444, 168 + xy: 691, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 454, 169 + xy: 691, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 404, 154 + xy: 701, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 414, 156 + xy: 701, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge rotate: false - xy: 518, 345 + xy: 442, 349 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-1 rotate: false - xy: 518, 335 + xy: 442, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-2 rotate: false - xy: 528, 345 + xy: 452, 349 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-side rotate: false - xy: 518, 325 + xy: 442, 329 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 wateredge rotate: false - xy: 965, 391 + xy: 155, 21 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 block-border rotate: false - xy: 274, 190 + xy: 237, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-elevation rotate: false - xy: 284, 190 + xy: 247, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator-top rotate: false - xy: 284, 190 + xy: 247, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-middle rotate: false - xy: 214, 104 + xy: 553, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 214, 104 + xy: 553, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-slope rotate: false - xy: 214, 94 + xy: 563, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 border rotate: false - xy: 214, 84 + xy: 563, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 933, 343 + xy: 713, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-1 rotate: false - xy: 215, 24 + xy: 1013, 393 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-2 rotate: false - xy: 762, 431 + xy: 924, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cross-3 rotate: false - xy: 116, 46 + xy: 672, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 cross-4 rotate: false - xy: 652, 479 + xy: 644, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 nuclearreactor-shadow rotate: false - xy: 776, 451 + xy: 66, 199 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 place-arrow rotate: false - xy: 434, 208 + xy: 441, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ripples rotate: false - xy: 398, 314 + xy: 195, 17 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 rubble-1-0 rotate: false - xy: 789, 361 + xy: 243, 64 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 807, 379 + xy: 261, 82 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 825, 397 + xy: 261, 64 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 807, 361 + xy: 243, 46 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-3-0 rotate: false - xy: 247, 216 + xy: 480, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 rubble-3-1 rotate: false - xy: 247, 216 + xy: 480, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 shadow-1 rotate: false - xy: 410, 318 + xy: 195, 5 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-2 rotate: false - xy: 299, 216 + xy: 716, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 shadow-3 rotate: false - xy: 804, 451 + xy: 112, 135 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 shadow-4 rotate: false - xy: 290, 454 + xy: 334, 477 size: 34, 34 orig: 34, 34 offset: 0, 0 index: -1 shadow-5 rotate: false - xy: 143, 266 + xy: 290, 469 size: 42, 42 orig: 42, 42 offset: 0, 0 index: -1 shadow-6 rotate: false - xy: 1, 165 + xy: 204, 414 size: 50, 50 orig: 50, 50 offset: 0, 0 index: -1 shadow-corner rotate: false - xy: 410, 306 + xy: 207, 17 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-round-1 rotate: false - xy: 422, 308 + xy: 207, 5 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 shadow-round-2 rotate: false - xy: 315, 366 + xy: 736, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 shadow-round-3 rotate: false - xy: 832, 451 + xy: 141, 165 size: 26, 26 orig: 26, 26 offset: 0, 0 index: -1 shadow-round-4 rotate: false - xy: 87, 228 + xy: 370, 477 size: 34, 34 orig: 34, 34 offset: 0, 0 index: -1 shadow-rounded-2 rotate: false - xy: 315, 346 + xy: 756, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 shadow-shock-mine rotate: false - xy: 449, 279 + xy: 561, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-arrow rotate: false - xy: 214, 74 + xy: 573, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor-arrow rotate: false - xy: 214, 74 + xy: 573, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-bridge rotate: false - xy: 214, 64 + xy: 573, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit-end rotate: false - xy: 214, 54 + xy: 583, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 929, 353 + xy: 633, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-0 rotate: false - xy: 939, 353 + xy: 643, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-1 rotate: false - xy: 903, 343 + xy: 653, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-2 rotate: false - xy: 903, 333 + xy: 663, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-3 rotate: false - xy: 913, 343 + xy: 673, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-4 rotate: false - xy: 913, 333 + xy: 683, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-5 rotate: false - xy: 923, 343 + xy: 693, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom-6 rotate: false - xy: 923, 333 + xy: 703, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-0 rotate: false - xy: 933, 333 + xy: 723, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-1 rotate: false - xy: 903, 323 + xy: 733, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-2 rotate: false - xy: 913, 323 + xy: 743, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-3 rotate: false - xy: 923, 323 + xy: 753, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-4 rotate: false - xy: 933, 323 + xy: 763, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-5 rotate: false - xy: 943, 343 + xy: 773, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top-6 rotate: false - xy: 943, 333 + xy: 783, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-bottom rotate: false - xy: 339, 268 + xy: 392, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-liquid rotate: false - xy: 339, 258 + xy: 382, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-router-top rotate: false - xy: 339, 248 + xy: 372, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-tank-bottom rotate: false - xy: 142, 46 + xy: 880, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-liquid rotate: false - xy: 134, 20 + xy: 906, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 liquid-tank-top rotate: false - xy: 152, 124 + xy: 932, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phase-conduit-arrow rotate: false - xy: 439, 248 + xy: 973, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-bridge rotate: false - xy: 439, 238 + xy: 983, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit-end rotate: false - xy: 439, 228 + xy: 993, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-0 rotate: false - xy: 434, 198 + xy: 451, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-1 rotate: false - xy: 443, 218 + xy: 451, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-2 rotate: false - xy: 444, 208 + xy: 461, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-3 rotate: false - xy: 444, 198 + xy: 461, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-4 rotate: false - xy: 995, 363 + xy: 471, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-5 rotate: false - xy: 1005, 368 + xy: 471, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulse-conduit-top-6 rotate: false - xy: 1015, 364 + xy: 481, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 alpha-mech-pad rotate: false - xy: 123, 1 + xy: 814, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-alpha-mech-pad rotate: false - xy: 123, 1 + xy: 814, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 battery rotate: false - xy: 351, 360 + xy: 81, 2 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-battery rotate: false - xy: 351, 360 + xy: 81, 2 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 battery-large rotate: false - xy: 213, 268 + xy: 178, 284 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-battery-large rotate: false - xy: 213, 268 + xy: 178, 284 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fusion-reactor rotate: false - xy: 720, 479 + xy: 712, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-bottom rotate: false - xy: 754, 479 + xy: 746, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-light rotate: false - xy: 788, 479 + xy: 780, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-0 rotate: false - xy: 822, 479 + xy: 814, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-1 rotate: false - xy: 856, 479 + xy: 848, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-2 rotate: false - xy: 890, 479 + xy: 882, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-plasma-3 rotate: false - xy: 924, 479 + xy: 916, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 fusion-reactor-top rotate: false - xy: 958, 479 + xy: 950, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 rtg-generator-top rotate: false - xy: 364, 180 + xy: 501, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium-reactor-center rotate: false - xy: 273, 216 + xy: 506, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor-lights rotate: false - xy: 289, 360 + xy: 532, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 turbine-generator-top rotate: false - xy: 906, 435 + xy: 297, 206 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 alloy-smelter rotate: false - xy: 90, 28 + xy: 332, 433 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-alloy-smelter rotate: false - xy: 90, 28 + xy: 332, 433 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 alloy-smelter-top rotate: false - xy: 105, 1 + xy: 796, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 arc-smelter rotate: false - xy: 141, 1 + xy: 832, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-arc-smelter rotate: false - xy: 141, 1 + xy: 832, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 arc-smelter-top rotate: false - xy: 159, 1 + xy: 850, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 silicon-smelter-top rotate: false - xy: 159, 1 + xy: 850, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor rotate: false - xy: 177, 1 + xy: 868, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame0 rotate: false - xy: 306, 308 + xy: 886, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame1 rotate: false - xy: 326, 328 + xy: 904, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-frame2 rotate: false - xy: 321, 436 + xy: 922, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-liquid rotate: false - xy: 321, 418 + xy: 940, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 biomattercompressor-top rotate: false - xy: 321, 400 + xy: 958, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blast-mixer rotate: false - xy: 339, 438 + xy: 976, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-blast-mixer rotate: false - xy: 339, 438 + xy: 976, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 centrifuge-liquid rotate: false - xy: 726, 431 + xy: 888, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-bottom rotate: false - xy: 780, 433 + xy: 942, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-liquid rotate: false - xy: 798, 433 + xy: 960, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-top rotate: false - xy: 816, 433 + xy: 978, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator rotate: false - xy: 834, 433 + xy: 996, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 519, 409 + xy: 112, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 519, 391 + xy: 117, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 lavasmelter rotate: false - xy: 329, 266 + xy: 352, 306 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oilrefinery rotate: false - xy: 349, 220 + xy: 382, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-weaver rotate: false - xy: 771, 377 + xy: 241, 134 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-weaver-bottom rotate: false - xy: 771, 359 + xy: 259, 130 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-weaver-weave rotate: false - xy: 789, 415 + xy: 241, 116 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 plastanium-compressor-top rotate: false - xy: 789, 397 + xy: 225, 95 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 1005, 358 + xy: 481, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 1015, 354 + xy: 491, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 447, 289 + xy: 551, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 core-open rotate: false - xy: 116, 98 + xy: 620, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core-top rotate: false - xy: 116, 72 + xy: 646, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 sortedunloader rotate: false - xy: 454, 189 + xy: 601, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1 rotate: false - xy: 254, 190 + xy: 267, 36 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-1-top rotate: false - xy: 264, 190 + xy: 277, 36 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-2 rotate: false - xy: 357, 438 + xy: 994, 435 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-2-top rotate: false - xy: 339, 420 + xy: 325, 388 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-3 rotate: false - xy: 912, 453 + xy: 311, 406 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-3-top rotate: false - xy: 938, 453 + xy: 289, 356 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-4 rotate: false - xy: 326, 456 + xy: 406, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-4-top rotate: false - xy: 360, 456 + xy: 440, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 arc rotate: false - xy: 77, 207 + xy: 1010, 454 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 arc-heat rotate: false - xy: 491, 359 + xy: 71, 2 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cyclone rotate: false - xy: 139, 204 + xy: 698, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 duo rotate: false - xy: 324, 316 + xy: 347, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 fuse rotate: false - xy: 142, 98 + xy: 828, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 hail rotate: false - xy: 334, 298 + xy: 371, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 hail-heat rotate: false - xy: 516, 433 + xy: 141, 153 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 lancer rotate: false - xy: 699, 359 + xy: 225, 183 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 717, 377 + xy: 207, 177 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 meltdown rotate: false - xy: 428, 453 + xy: 984, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 meltdown-heat rotate: false - xy: 462, 453 + xy: 56, 80 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 ripple rotate: false - xy: 265, 268 + xy: 428, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ripple-heat rotate: false - xy: 273, 242 + xy: 454, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 salvo rotate: false - xy: 825, 379 + xy: 261, 46 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-heat rotate: false - xy: 825, 361 + xy: 279, 220 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-panel-left rotate: false - xy: 843, 415 + xy: 279, 202 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 salvo-panel-right rotate: false - xy: 843, 397 + xy: 279, 184 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 scatter rotate: false - xy: 434, 188 + xy: 541, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scorch rotate: false - xy: 444, 188 + xy: 541, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 scorch-shoot rotate: false - xy: 442, 299 + xy: 551, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 spectre rotate: false - xy: 652, 445 + xy: 77, 159 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 swarmer rotate: false - xy: 852, 433 + xy: 277, 130 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave rotate: false - xy: 861, 397 + xy: 315, 170 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 861, 379 + xy: 315, 152 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory-top rotate: false - xy: 537, 409 + xy: 130, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory-top-open rotate: false - xy: 519, 373 + xy: 135, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-factory rotate: false - xy: 191, 208 + xy: 750, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-top rotate: false - xy: 217, 208 + xy: 776, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-top rotate: false - xy: 217, 208 + xy: 776, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-top rotate: false - xy: 217, 208 + xy: 776, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 fortress-factory-top-open rotate: false - xy: 108, 20 + xy: 802, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory-top-open rotate: false - xy: 108, 20 + xy: 802, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 titan-factory-top-open rotate: false - xy: 108, 20 + xy: 802, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 ghoul-factory rotate: false - xy: 142, 72 + xy: 854, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 phantom-factory-top rotate: false - xy: 771, 413 + xy: 261, 148 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phantom-factory-top-open rotate: false - xy: 771, 395 + xy: 223, 129 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 reconstructor-open rotate: false - xy: 825, 415 + xy: 225, 59 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 repair-point-turret rotate: false - xy: 344, 178 + xy: 491, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 revenant-factory rotate: false - xy: 56, 27 + xy: 66, 227 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-top rotate: false - xy: 516, 445 + xy: 100, 227 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 revenant-factory-top-open rotate: false - xy: 550, 445 + xy: 134, 227 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 spirit-factory-top rotate: false - xy: 843, 379 + xy: 279, 166 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 spirit-factory-top-open rotate: false - xy: 843, 361 + xy: 279, 148 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-factory rotate: false - xy: 280, 328 + xy: 558, 427 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 wraith-factory-top rotate: false - xy: 861, 361 + xy: 279, 80 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wraith-factory-top-open rotate: false - xy: 879, 417 + xy: 279, 62 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 deflector-wall rotate: false - xy: 225, 34 + xy: 307, 30 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deflector-wall-large rotate: false - xy: 537, 391 + xy: 117, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 555, 409 + xy: 135, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-open rotate: false - xy: 963, 325 + xy: 337, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 beam rotate: false - xy: 1022, 499 + xy: 1018, 499 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 beam-end rotate: false - xy: 496, 467 + xy: 285, 382 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 blank rotate: false - xy: 53, 27 + xy: 256, 417 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 bullet rotate: false - xy: 501, 432 + xy: 82, 114 size: 13, 13 orig: 13, 13 offset: 0, 0 index: -1 bullet-back rotate: false - xy: 427, 334 + xy: 1010, 464 size: 13, 13 orig: 13, 13 offset: 0, 0 index: -1 casing rotate: false - xy: 243, 228 + xy: 329, 146 size: 2, 4 orig: 2, 4 offset: 0, 0 index: -1 clear rotate: false - xy: 428, 487 + xy: 256, 414 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 command-attack rotate: false - xy: 224, 64 + xy: 613, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-idle rotate: false - xy: 224, 54 + xy: 613, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-patrol rotate: false - xy: 909, 353 + xy: 623, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 command-retreat rotate: false - xy: 919, 353 + xy: 623, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 enemyarrow rotate: false - xy: 164, 177 + xy: 327, 15 size: 8, 7 orig: 8, 7 offset: 0, 0 index: -1 error rotate: false - xy: 823, 331 + xy: 980, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 laser rotate: false - xy: 1022, 485 + xy: 111, 56 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 laser-end rotate: false - xy: 80, 130 + xy: 656, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 laserfull rotate: false - xy: 299, 256 + xy: 676, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 minelaser rotate: false - xy: 363, 346 + xy: 114, 56 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 minelaser-end rotate: false - xy: 299, 236 + xy: 696, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 missile rotate: false - xy: 1014, 441 + xy: 27, 1 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 missile-back rotate: false - xy: 1014, 430 + xy: 38, 1 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 scorch1 rotate: false - xy: 1016, 452 + xy: 337, 406 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch2 rotate: false - xy: 155, 177 + xy: 90, 87 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch3 rotate: false - xy: 158, 150 + xy: 162, 200 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch4 rotate: false - xy: 186, 19 + xy: 99, 88 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 scorch5 rotate: false - xy: 280, 354 + xy: 108, 88 size: 7, 25 orig: 7, 25 offset: 0, 0 index: -1 shell rotate: false - xy: 434, 309 + xy: 49, 1 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shell-back rotate: false - xy: 243, 189 + xy: 60, 1 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shot rotate: false - xy: 449, 269 + xy: 561, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 transfer rotate: false - xy: 366, 346 + xy: 187, 49 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 transfer-arrow rotate: false - xy: 508, 320 + xy: 801, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 transfer-end rotate: false - xy: 306, 326 + xy: 776, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 blackstone-cliff-edge rotate: false - xy: 1015, 394 + xy: 227, 29 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-1 rotate: false - xy: 1015, 384 + xy: 237, 36 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-edge-2 rotate: false - xy: 1015, 374 + xy: 247, 36 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blackstone-cliff-side rotate: false - xy: 233, 188 + xy: 257, 36 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-arc rotate: false - xy: 294, 190 + xy: 257, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-biomattercompressor rotate: false - xy: 375, 438 + xy: 346, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-blast-drill rotate: false - xy: 964, 453 + xy: 290, 330 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-bridge-conduit rotate: false - xy: 304, 190 + xy: 267, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conduit rotate: false - xy: 304, 190 + xy: 267, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-bridge-conveyor rotate: false - xy: 314, 190 + xy: 277, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridge-conveyor rotate: false - xy: 314, 190 + xy: 277, 26 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-centrifuge rotate: false - xy: 357, 420 + xy: 364, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 centrifuge rotate: false - xy: 357, 420 + xy: 364, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-combustion-generator rotate: false - xy: 165, 196 + xy: 343, 396 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustion-generator rotate: false - xy: 165, 196 + xy: 343, 396 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-command-center rotate: false - xy: 339, 402 + xy: 382, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 command-center rotate: false - xy: 339, 402 + xy: 382, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-conduit rotate: false - xy: 175, 196 + xy: 353, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-container rotate: false - xy: 393, 438 + xy: 400, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 container rotate: false - xy: 393, 438 + xy: 400, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-conveyor rotate: false - xy: 164, 186 + xy: 363, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor-0-0 rotate: false - xy: 164, 186 + xy: 363, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-copper-wall rotate: false - xy: 174, 186 + xy: 373, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 copper-wall rotate: false - xy: 174, 186 + xy: 373, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-copper-wall-large rotate: false - xy: 375, 420 + xy: 418, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 copper-wall-large rotate: false - xy: 375, 420 + xy: 418, 407 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-core rotate: false - xy: 990, 453 + xy: 290, 304 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 core rotate: false - xy: 990, 453 + xy: 290, 304 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-cryofluidmixer rotate: false - xy: 357, 402 + xy: 436, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-cultivator rotate: false - xy: 393, 420 + xy: 454, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-cyclone rotate: false - xy: 239, 268 + xy: 290, 278 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-dagger-factory rotate: false - xy: 375, 402 + xy: 472, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dart-ship-pad rotate: false - xy: 393, 402 + xy: 490, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dart-ship-pad rotate: false - xy: 393, 402 + xy: 490, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-deepwater rotate: false - xy: 174, 176 + xy: 383, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater rotate: false - xy: 174, 176 + xy: 383, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-delta-mech-pad rotate: false - xy: 411, 422 + xy: 508, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 delta-mech-pad rotate: false - xy: 411, 422 + xy: 508, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dense-alloy-wall rotate: false - xy: 184, 184 + xy: 393, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dense-alloy-wall rotate: false - xy: 184, 184 + xy: 393, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-dense-alloy-wall-large rotate: false - xy: 411, 404 + xy: 526, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dense-alloy-wall-large rotate: false - xy: 411, 404 + xy: 526, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-dirt rotate: false - xy: 194, 184 + xy: 403, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt1 rotate: false - xy: 194, 184 + xy: 403, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-distributor rotate: false - xy: 429, 435 + xy: 544, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 distributor rotate: false - xy: 429, 435 + xy: 544, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-door rotate: false - xy: 204, 184 + xy: 413, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 door rotate: false - xy: 204, 184 + xy: 413, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-door-large rotate: false - xy: 429, 417 + xy: 562, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-large rotate: false - xy: 429, 417 + xy: 562, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-duo rotate: false - xy: 214, 184 + xy: 423, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-force-projector rotate: false - xy: 247, 242 + xy: 315, 356 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 force-projector rotate: false - xy: 247, 242 + xy: 315, 356 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fortress-factory rotate: false - xy: 295, 386 + xy: 316, 330 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fuse rotate: false - xy: 87, 202 + xy: 316, 304 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-fusion-reactor rotate: false - xy: 394, 456 + xy: 474, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-ghoul-factory rotate: false - xy: 77, 176 + xy: 316, 278 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-glaive-ship-pad rotate: false - xy: 80, 150 + xy: 334, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 glaive-ship-pad rotate: false - xy: 80, 150 + xy: 334, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-grass rotate: false - xy: 184, 174 + xy: 343, 386 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass1 rotate: false - xy: 184, 174 + xy: 343, 386 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-hail rotate: false - xy: 194, 174 + xy: 353, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-ice rotate: false - xy: 204, 174 + xy: 363, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice1 rotate: false - xy: 204, 174 + xy: 363, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-icerock rotate: false - xy: 214, 174 + xy: 373, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerock1 rotate: false - xy: 214, 174 + xy: 373, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-incinerator rotate: false - xy: 167, 166 + xy: 383, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 incinerator rotate: false - xy: 167, 166 + xy: 383, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemsource rotate: false - xy: 167, 156 + xy: 393, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemsource rotate: false - xy: 167, 156 + xy: 393, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemvoid rotate: false - xy: 177, 164 + xy: 403, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemvoid rotate: false - xy: 177, 164 + xy: 403, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-javelin-ship-pad rotate: false - xy: 447, 435 + xy: 580, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 javelin-ship-pad rotate: false - xy: 447, 435 + xy: 580, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-junction rotate: false - xy: 187, 164 + xy: 413, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 junction rotate: false - xy: 187, 164 + xy: 413, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-lancer rotate: false - xy: 447, 417 + xy: 598, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-laser-drill rotate: false - xy: 465, 435 + xy: 616, 409 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-lava rotate: false - xy: 197, 164 + xy: 423, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava rotate: false - xy: 197, 164 + xy: 423, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-junction rotate: false - xy: 207, 164 + xy: 341, 376 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-junction rotate: false - xy: 207, 164 + xy: 341, 376 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-router rotate: false - xy: 177, 154 + xy: 341, 366 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquid-tank rotate: false - xy: 103, 176 + xy: 360, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-liquidsource rotate: false - xy: 187, 154 + xy: 341, 356 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidsource rotate: false - xy: 187, 154 + xy: 341, 356 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-mass-driver rotate: false - xy: 113, 202 + xy: 386, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 mass-driver rotate: false - xy: 113, 202 + xy: 386, 451 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-mechanical-drill rotate: false - xy: 465, 417 + xy: 168, 243 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-mechanical-pump rotate: false - xy: 197, 154 + xy: 342, 346 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 197, 154 + xy: 342, 346 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-meltdown rotate: false - xy: 516, 479 + xy: 508, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-melter rotate: false - xy: 207, 154 + xy: 342, 336 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 melter rotate: false - xy: 207, 154 + xy: 342, 336 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-mend-projector rotate: false - xy: 429, 399 + xy: 171, 209 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 mend-projector rotate: false - xy: 429, 399 + xy: 171, 209 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-metalfloor rotate: false - xy: 217, 164 + xy: 342, 326 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor1 rotate: false - xy: 217, 164 + xy: 342, 326 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-oil-extractor rotate: false - xy: 106, 150 + xy: 412, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-omega-mech-pad rotate: false - xy: 100, 124 + xy: 438, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 omega-mech-pad rotate: false - xy: 100, 124 + xy: 438, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-overdrive-projector rotate: false - xy: 447, 399 + xy: 180, 266 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 overdrive-projector rotate: false - xy: 447, 399 + xy: 180, 266 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-overflow-gate rotate: false - xy: 217, 154 + xy: 342, 316 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 overflow-gate rotate: false - xy: 217, 154 + xy: 342, 316 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phantom-factory rotate: false - xy: 465, 399 + xy: 198, 265 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-phase-conduit rotate: false - xy: 178, 144 + xy: 342, 306 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conduit rotate: false - xy: 178, 144 + xy: 342, 306 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-conveyor rotate: false - xy: 178, 134 + xy: 342, 296 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-conveyor rotate: false - xy: 178, 134 + xy: 342, 296 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-wall rotate: false - xy: 178, 124 + xy: 342, 286 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 phase-wall rotate: false - xy: 178, 124 + xy: 342, 286 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-phase-wall-large rotate: false - xy: 411, 386 + xy: 171, 191 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phase-wall-large rotate: false - xy: 411, 386 + xy: 171, 191 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-phase-weaver rotate: false - xy: 429, 381 + xy: 169, 173 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-plasma-drill rotate: false - xy: 550, 479 + xy: 542, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-plastanium-compressor rotate: false - xy: 447, 381 + xy: 230, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 plastanium-compressor rotate: false - xy: 447, 381 + xy: 230, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-pneumatic-drill rotate: false - xy: 465, 381 + xy: 248, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-power-node rotate: false - xy: 188, 144 + xy: 1014, 432 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 power-node rotate: false - xy: 188, 144 + xy: 1014, 432 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-power-node-large rotate: false - xy: 483, 423 + xy: 266, 262 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 power-node-large rotate: false - xy: 483, 423 + xy: 266, 262 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-powerinfinite rotate: false - xy: 198, 144 + xy: 1014, 422 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powerinfinite rotate: false - xy: 198, 144 + xy: 1014, 422 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-powervoid rotate: false - xy: 188, 134 + xy: 433, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powervoid rotate: false - xy: 188, 134 + xy: 433, 397 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulse-conduit rotate: false - xy: 188, 124 + xy: 433, 387 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulverizer rotate: false - xy: 208, 144 + xy: 443, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pyratite-mixer rotate: false - xy: 483, 405 + xy: 284, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pyratite-mixer rotate: false - xy: 483, 405 + xy: 284, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-reconstructor rotate: false - xy: 483, 387 + xy: 302, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 dagger-factory rotate: false - xy: 483, 387 + xy: 302, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 phantom-factory rotate: false - xy: 483, 387 + xy: 302, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 reconstructor rotate: false - xy: 483, 387 + xy: 302, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 spirit-factory rotate: false - xy: 483, 387 + xy: 302, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wraith-factory rotate: false - xy: 483, 387 + xy: 302, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-repair-point rotate: false - xy: 198, 134 + xy: 443, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 repair-point rotate: false - xy: 198, 134 + xy: 443, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-revenant-factory rotate: false - xy: 584, 479 + xy: 576, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-ripple rotate: false - xy: 90, 98 + xy: 464, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-rock rotate: false - xy: 198, 124 + xy: 453, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rock1 rotate: false - xy: 198, 124 + xy: 453, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rotary-pump rotate: false - xy: 501, 414 + xy: 320, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 501, 414 + xy: 320, 260 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-router rotate: false - xy: 194, 114 + xy: 453, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 router rotate: false - xy: 194, 114 + xy: 453, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rtg-generator rotate: false - xy: 501, 396 + xy: 169, 155 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rtg-generator rotate: false - xy: 501, 396 + xy: 169, 155 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-salvo rotate: false - xy: 501, 378 + xy: 636, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-sand rotate: false - xy: 208, 134 + xy: 463, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand1 rotate: false - xy: 208, 134 + xy: 463, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-scorch rotate: false - xy: 194, 104 + xy: 463, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-separator rotate: false - xy: 208, 124 + xy: 473, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator rotate: false - xy: 208, 124 + xy: 473, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shock-mine rotate: false - xy: 204, 114 + xy: 473, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shock-mine rotate: false - xy: 204, 114 + xy: 473, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shrub rotate: false - xy: 194, 94 + xy: 483, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shrub rotate: false - xy: 194, 94 + xy: 483, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-silicon-smelter rotate: false - xy: 483, 369 + xy: 654, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 483, 369 + xy: 654, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-smelter rotate: false - xy: 204, 104 + xy: 483, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 smelter rotate: false - xy: 204, 104 + xy: 483, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-snow rotate: false - xy: 194, 84 + xy: 493, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow1 rotate: false - xy: 194, 84 + xy: 493, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solar-panel rotate: false - xy: 204, 94 + xy: 493, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solar-panel rotate: false - xy: 204, 94 + xy: 493, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solar-panel-large rotate: false - xy: 90, 72 + xy: 490, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 solar-panel-large rotate: false - xy: 90, 72 + xy: 490, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-solidifer rotate: false - xy: 194, 74 + xy: 503, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solidifer rotate: false - xy: 194, 74 + xy: 503, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-sorter rotate: false - xy: 204, 84 + xy: 503, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sorter rotate: false - xy: 204, 84 + xy: 503, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-space rotate: false - xy: 194, 64 + xy: 513, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space rotate: false - xy: 194, 64 + xy: 513, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-spawn rotate: false - xy: 204, 74 + xy: 513, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 spawn rotate: false - xy: 204, 74 + xy: 513, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-spectre rotate: false - xy: 618, 479 + xy: 610, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 block-icon-spirit-factory rotate: false - xy: 501, 360 + xy: 672, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-stone rotate: false - xy: 194, 54 + xy: 523, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone1 rotate: false - xy: 194, 54 + xy: 523, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-surge-wall rotate: false - xy: 204, 64 + xy: 523, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 surge-wall rotate: false - xy: 204, 64 + xy: 523, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-surge-wall-large rotate: false - xy: 528, 427 + xy: 690, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 surge-wall-large rotate: false - xy: 528, 427 + xy: 690, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-swarmer rotate: false - xy: 546, 427 + xy: 708, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-tar rotate: false - xy: 204, 54 + xy: 533, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar rotate: false - xy: 204, 54 + xy: 533, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-tau-mech-pad rotate: false - xy: 564, 427 + xy: 726, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 tau-mech-pad rotate: false - xy: 564, 427 + xy: 726, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thermal-generator rotate: false - xy: 582, 427 + xy: 744, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thermal-generator rotate: false - xy: 582, 427 + xy: 744, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thermal-pump rotate: false - xy: 600, 427 + xy: 762, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 600, 427 + xy: 762, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thorium-reactor rotate: false - xy: 90, 46 + xy: 516, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 thorium-reactor rotate: false - xy: 90, 46 + xy: 516, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-thorium-wall rotate: false - xy: 218, 144 + xy: 533, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium-wall rotate: false - xy: 218, 144 + xy: 533, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-thorium-wall-large rotate: false - xy: 618, 427 + xy: 780, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thorium-wall-large rotate: false - xy: 618, 427 + xy: 780, 415 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-titan-factory rotate: false - xy: 129, 176 + xy: 542, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-titanium-conveyor rotate: false - xy: 218, 134 + xy: 543, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium-conveyor-0-0 rotate: false - xy: 218, 134 + xy: 543, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-trident-ship-pad rotate: false - xy: 636, 427 + xy: 798, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 trident-ship-pad rotate: false - xy: 636, 427 + xy: 798, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-turbine-generator rotate: false - xy: 654, 427 + xy: 816, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 turbine-generator rotate: false - xy: 654, 427 + xy: 816, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-unloader rotate: false - xy: 218, 124 + xy: 543, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unloader rotate: false - xy: 218, 124 + xy: 543, 389 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-vault rotate: false - xy: 132, 150 + xy: 568, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 vault rotate: false - xy: 132, 150 + xy: 568, 453 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 block-icon-water rotate: false - xy: 214, 114 + xy: 553, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water rotate: false - xy: 214, 114 + xy: 553, 399 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-water-extractor rotate: false - xy: 672, 427 + xy: 834, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-wave rotate: false - xy: 690, 431 + xy: 852, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-wraith-factory rotate: false - xy: 708, 431 + xy: 870, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 deepwater-cliff-edge rotate: false - xy: 205, 4 + xy: 357, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-1 rotate: false - xy: 215, 14 + xy: 357, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-edge-2 rotate: false - xy: 215, 4 + xy: 287, 30 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater-cliff-side rotate: false - xy: 225, 44 + xy: 297, 30 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge rotate: false - xy: 225, 4 + xy: 297, 20 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-1 rotate: false - xy: 959, 355 + xy: 307, 20 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-edge-2 rotate: false - xy: 963, 345 + xy: 317, 20 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt-cliff-side rotate: false - xy: 963, 335 + xy: 327, 24 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge rotate: false - xy: 319, 236 + xy: 352, 346 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-1 rotate: false - xy: 319, 226 + xy: 352, 336 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-edge-2 rotate: false - xy: 319, 216 + xy: 352, 326 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava-cliff-side rotate: false - xy: 327, 276 + xy: 352, 316 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-cryofluid rotate: false - xy: 329, 216 + xy: 362, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-lava rotate: false - xy: 323, 206 + xy: 382, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-oil rotate: false - xy: 333, 206 + xy: 372, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon-water rotate: false - xy: 337, 278 + xy: 362, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mech-icon-alpha-mech rotate: false - xy: 909, 405 + xy: 345, 62 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-dart-ship rotate: false - xy: 909, 391 + xy: 345, 48 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-delta-mech rotate: false - xy: 923, 405 + xy: 343, 34 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-omega-mech rotate: false - xy: 427, 365 + xy: 311, 40 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-tau-mech rotate: false - xy: 443, 365 + xy: 329, 130 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-trident-ship rotate: false - xy: 459, 365 + xy: 329, 114 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 trident-ship rotate: false - xy: 459, 365 + xy: 329, 114 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 metalfloor-cliff-edge rotate: false - xy: 349, 260 + xy: 362, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-1 rotate: false - xy: 349, 250 + xy: 412, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-edge-2 rotate: false - xy: 349, 240 + xy: 402, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor-cliff-side rotate: false - xy: 349, 230 + xy: 392, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone1 rotate: false - xy: 357, 280 + xy: 372, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone2 rotate: false - xy: 367, 280 + xy: 362, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-blackstone3 rotate: false - xy: 359, 270 + xy: 422, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass1 rotate: false - xy: 359, 260 + xy: 412, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass2 rotate: false - xy: 359, 250 + xy: 402, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-grass3 rotate: false - xy: 359, 240 + xy: 392, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice1 rotate: false - xy: 359, 230 + xy: 382, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice2 rotate: false - xy: 359, 220 + xy: 372, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-ice3 rotate: false - xy: 369, 270 + xy: 362, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand1 rotate: false - xy: 369, 260 + xy: 422, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand2 rotate: false - xy: 369, 250 + xy: 412, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-sand3 rotate: false - xy: 369, 240 + xy: 402, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow1 rotate: false - xy: 369, 230 + xy: 392, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow2 rotate: false - xy: 369, 220 + xy: 382, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-snow3 rotate: false - xy: 377, 280 + xy: 372, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone1 rotate: false - xy: 379, 270 + xy: 422, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone2 rotate: false - xy: 379, 260 + xy: 412, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-coal-stone3 rotate: false - xy: 379, 250 + xy: 402, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone1 rotate: false - xy: 379, 240 + xy: 392, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone2 rotate: false - xy: 379, 230 + xy: 382, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-blackstone3 rotate: false - xy: 379, 220 + xy: 422, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass1 rotate: false - xy: 387, 282 + xy: 412, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass2 rotate: false - xy: 389, 272 + xy: 402, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-grass3 rotate: false - xy: 389, 262 + xy: 392, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice1 rotate: false - xy: 389, 252 + xy: 422, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice2 rotate: false - xy: 389, 242 + xy: 412, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-ice3 rotate: false - xy: 389, 232 + xy: 402, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand1 rotate: false - xy: 389, 222 + xy: 422, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand2 rotate: false - xy: 397, 284 + xy: 412, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-sand3 rotate: false - xy: 399, 274 + xy: 422, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow1 rotate: false - xy: 399, 264 + xy: 432, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow2 rotate: false - xy: 399, 254 + xy: 432, 337 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-snow3 rotate: false - xy: 399, 244 + xy: 432, 327 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone1 rotate: false - xy: 399, 234 + xy: 432, 317 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone2 rotate: false - xy: 399, 224 + xy: 432, 307 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-copper-stone3 rotate: false - xy: 324, 196 + xy: 432, 297 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone1 rotate: false - xy: 334, 196 + xy: 432, 287 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone2 rotate: false - xy: 324, 186 + xy: 443, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-blackstone3 rotate: false - xy: 334, 186 + xy: 453, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass1 rotate: false - xy: 404, 296 + xy: 463, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass2 rotate: false - xy: 407, 286 + xy: 473, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-grass3 rotate: false - xy: 409, 276 + xy: 483, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice1 rotate: false - xy: 409, 266 + xy: 493, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice2 rotate: false - xy: 409, 256 + xy: 503, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-ice3 rotate: false - xy: 409, 246 + xy: 513, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand1 rotate: false - xy: 409, 236 + xy: 523, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand2 rotate: false - xy: 409, 226 + xy: 533, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-sand3 rotate: false - xy: 343, 208 + xy: 543, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow1 rotate: false - xy: 353, 210 + xy: 553, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow2 rotate: false - xy: 363, 210 + xy: 563, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-snow3 rotate: false - xy: 373, 210 + xy: 573, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone1 rotate: false - xy: 344, 198 + xy: 583, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone2 rotate: false - xy: 344, 188 + xy: 593, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-lead-stone3 rotate: false - xy: 354, 200 + xy: 603, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone1 rotate: false - xy: 354, 190 + xy: 613, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone2 rotate: false - xy: 364, 200 + xy: 623, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-blackstone3 rotate: false - xy: 364, 190 + xy: 633, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass1 rotate: false - xy: 374, 200 + xy: 643, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass2 rotate: false - xy: 374, 190 + xy: 653, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-grass3 rotate: false - xy: 383, 210 + xy: 663, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice1 rotate: false - xy: 384, 200 + xy: 673, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice2 rotate: false - xy: 384, 190 + xy: 683, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-ice3 rotate: false - xy: 393, 212 + xy: 693, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand1 rotate: false - xy: 394, 202 + xy: 703, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand2 rotate: false - xy: 394, 192 + xy: 713, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-sand3 rotate: false - xy: 403, 214 + xy: 723, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow1 rotate: false - xy: 404, 204 + xy: 733, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow2 rotate: false - xy: 404, 194 + xy: 743, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-snow3 rotate: false - xy: 413, 216 + xy: 753, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone1 rotate: false - xy: 414, 206 + xy: 763, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone2 rotate: false - xy: 414, 196 + xy: 773, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-thorium-stone3 rotate: false - xy: 417, 288 + xy: 783, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone1 rotate: false - xy: 427, 288 + xy: 793, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone2 rotate: false - xy: 419, 278 + xy: 803, 379 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-blackstone3 rotate: false - xy: 419, 268 + xy: 813, 381 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass1 rotate: false - xy: 419, 258 + xy: 823, 381 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass2 rotate: false - xy: 419, 248 + xy: 833, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-grass3 rotate: false - xy: 419, 238 + xy: 843, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice1 rotate: false - xy: 419, 228 + xy: 853, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice2 rotate: false - xy: 429, 278 + xy: 863, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-ice3 rotate: false - xy: 429, 268 + xy: 873, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand1 rotate: false - xy: 429, 258 + xy: 883, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand2 rotate: false - xy: 429, 248 + xy: 893, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-sand3 rotate: false - xy: 429, 238 + xy: 903, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow1 rotate: false - xy: 429, 228 + xy: 913, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow2 rotate: false - xy: 423, 218 + xy: 923, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-snow3 rotate: false - xy: 437, 288 + xy: 933, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone1 rotate: false - xy: 439, 278 + xy: 943, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone2 rotate: false - xy: 439, 268 + xy: 953, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ore-titanium-stone3 rotate: false - xy: 439, 258 + xy: 963, 383 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge rotate: false - xy: 394, 182 + xy: 521, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-1 rotate: false - xy: 404, 184 + xy: 521, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-edge-2 rotate: false - xy: 414, 186 + xy: 531, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand-cliff-side rotate: false - xy: 424, 188 + xy: 531, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge rotate: false - xy: 449, 229 + xy: 581, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-1 rotate: false - xy: 453, 219 + xy: 591, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-edge-2 rotate: false - xy: 454, 209 + xy: 591, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow-cliff-side rotate: false - xy: 454, 199 + xy: 601, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge rotate: false - xy: 354, 170 + xy: 611, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-1 rotate: false - xy: 364, 170 + xy: 611, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-edge-2 rotate: false - xy: 374, 170 + xy: 621, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space-cliff-side rotate: false - xy: 384, 170 + xy: 621, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge rotate: false - xy: 454, 179 + xy: 661, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge-1 rotate: false - xy: 394, 162 + xy: 661, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-edge-2 rotate: false - xy: 404, 164 + xy: 671, 369 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 tar-cliff-side rotate: false - xy: 414, 166 + xy: 671, 359 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unit-icon-dagger rotate: false - xy: 937, 363 + xy: 141, 21 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-fortress rotate: false - xy: 924, 435 + xy: 315, 224 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-icon-titan rotate: false - xy: 942, 435 + xy: 297, 188 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 unit-icon-wraith rotate: false - xy: 951, 377 + xy: 155, 35 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 wraith rotate: false - xy: 951, 377 + xy: 155, 35 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 item-biomatter rotate: false - xy: 384, 312 + xy: 401, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 384, 302 + xy: 391, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-coal rotate: false - xy: 394, 304 + xy: 381, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-copper rotate: false - xy: 354, 292 + xy: 411, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-dense-alloy rotate: false - xy: 344, 290 + xy: 401, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead rotate: false - xy: 334, 288 + xy: 391, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-phase-fabric rotate: false - xy: 364, 290 + xy: 421, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-plastanium rotate: false - xy: 374, 290 + xy: 411, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-pyratite rotate: false - xy: 384, 292 + xy: 401, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-sand rotate: false - xy: 394, 294 + xy: 431, 377 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 324, 286 + xy: 421, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-stone rotate: false - xy: 317, 276 + xy: 411, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 319, 266 + xy: 431, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 319, 256 + xy: 421, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 319, 246 + xy: 431, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquid-icon rotate: false - xy: 329, 226 + xy: 372, 347 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 alpha-mech rotate: false - xy: 335, 346 + xy: 166, 261 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 alpha-mech-base rotate: false - xy: 349, 346 + xy: 216, 269 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 alpha-mech-leg rotate: false - xy: 442, 335 + xy: 216, 255 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech rotate: false - xy: 205, 194 + xy: 924, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech-base rotate: false - xy: 219, 194 + xy: 938, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 delta-mech-leg rotate: false - xy: 795, 331 + xy: 952, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 omega-mech rotate: false - xy: 411, 354 + xy: 329, 98 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-armor rotate: false - xy: 427, 349 + xy: 329, 82 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-base rotate: false - xy: 443, 349 + xy: 329, 66 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 omega-mech-leg rotate: false - xy: 459, 349 + xy: 329, 50 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 tau-mech rotate: false - xy: 399, 338 + xy: 810, 401 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 tau-mech-base rotate: false - xy: 951, 391 + xy: 127, 21 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 tau-mech-leg rotate: false - xy: 965, 405 + xy: 141, 35 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dart-ship rotate: false - xy: 191, 194 + xy: 910, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 glaive-ship rotate: false - xy: 247, 294 + xy: 168, 227 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 mech-icon-glaive-ship rotate: false - xy: 247, 294 + xy: 168, 227 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 javelin-ship rotate: false - xy: 895, 389 + xy: 345, 104 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mech-icon-javelin-ship rotate: false - xy: 895, 389 + xy: 345, 104 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 javelin-ship-shield rotate: false - xy: 895, 375 + xy: 345, 90 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -5270,14 +5270,14 @@ circle index: -1 shape-3 rotate: false - xy: 204, 378 + xy: 1, 198 size: 63, 63 orig: 63, 63 offset: 0, 0 index: -1 border rotate: false - xy: 30, 77 + xy: 204, 309 size: 24, 40 split: 5, 5, 5, 10 orig: 24, 40 @@ -5285,7 +5285,7 @@ border index: -1 button rotate: false - xy: 187, 268 + xy: 30, 106 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -5293,7 +5293,7 @@ button index: -1 textarea rotate: false - xy: 187, 268 + xy: 30, 106 size: 24, 40 split: 10, 10, 9, 11 orig: 24, 40 @@ -5301,7 +5301,7 @@ textarea index: -1 button-down rotate: false - xy: 269, 401 + xy: 233, 372 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -5309,7 +5309,7 @@ button-down index: -1 button-over rotate: false - xy: 269, 401 + xy: 233, 372 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -5317,7 +5317,7 @@ button-over index: -1 button-select rotate: false - xy: 126, 124 + xy: 594, 453 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -5325,826 +5325,840 @@ button-select index: -1 check-off rotate: false - xy: 992, 479 + xy: 230, 312 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 check-on rotate: false - xy: 123, 230 + xy: 230, 278 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 check-on-over rotate: false - xy: 187, 234 + xy: 260, 314 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 check-over rotate: false - xy: 217, 234 + xy: 260, 280 size: 28, 32 orig: 28, 32 offset: 0, 0 index: -1 clear rotate: false - xy: 483, 441 + xy: 166, 275 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 cursor rotate: false - xy: 495, 441 + xy: 325, 382 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 discord-banner rotate: false - xy: 204, 443 + xy: 1, 263 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 empty-sector rotate: false - xy: 686, 479 + xy: 678, 479 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 icon-crafting rotate: false - xy: 609, 409 + xy: 153, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-defense rotate: false - xy: 591, 373 + xy: 153, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-distribution rotate: false - xy: 609, 391 + xy: 171, 99 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-effect + rotate: false + xy: 171, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-liquid rotate: false - xy: 663, 391 + xy: 189, 101 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-power rotate: false - xy: 627, 355 + xy: 207, 195 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-production rotate: false - xy: 645, 355 + xy: 218, 237 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-turret rotate: false - xy: 699, 395 + xy: 225, 201 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-units rotate: false - xy: 699, 377 + xy: 243, 206 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +icon-upgrade + rotate: false + xy: 261, 202 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 controller-cursor rotate: false - xy: 744, 431 + xy: 906, 417 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-about rotate: false - xy: 263, 294 + xy: 153, 149 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-add rotate: false - xy: 411, 440 + xy: 153, 133 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin rotate: false - xy: 879, 401 + xy: 148, 117 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-admin-small rotate: false - xy: 291, 268 + xy: 186, 243 size: 6, 6 orig: 6, 6 offset: 0, 0 index: -1 icon-areaDelete rotate: false - xy: 399, 390 + xy: 140, 141 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow rotate: false - xy: 555, 373 + xy: 135, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-16 rotate: false - xy: 555, 373 + xy: 135, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-arrow-down rotate: false - xy: 399, 378 + xy: 272, 250 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 399, 366 + xy: 272, 238 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 387, 358 + xy: 259, 100 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 399, 354 + xy: 271, 100 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-back rotate: false - xy: 573, 391 + xy: 95, 34 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-ban rotate: false - xy: 897, 419 + xy: 164, 117 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-break rotate: false - xy: 591, 409 + xy: 95, 16 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cancel rotate: false - xy: 573, 373 + xy: 169, 137 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-chat rotate: false - xy: 387, 346 + xy: 1012, 442 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-check rotate: false - xy: 591, 391 + xy: 153, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-cursor rotate: false - xy: 415, 342 + xy: 169, 37 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-dev-builds rotate: false - xy: 879, 385 + xy: 184, 227 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-discord rotate: false - xy: 913, 419 + xy: 200, 249 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-donate rotate: false - xy: 879, 369 + xy: 225, 113 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-dots rotate: false - xy: 929, 419 + xy: 243, 100 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-editor rotate: false - xy: 945, 419 + xy: 279, 46 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-egg rotate: false - xy: 961, 419 + xy: 333, 226 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-elevation rotate: false - xy: 627, 409 + xy: 171, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-eraser rotate: false - xy: 609, 373 + xy: 189, 209 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-exit rotate: false - xy: 977, 419 + xy: 333, 210 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-file rotate: false - xy: 627, 391 + xy: 189, 191 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-image rotate: false - xy: 645, 409 + xy: 187, 173 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-text rotate: false - xy: 993, 419 + xy: 333, 194 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-fill rotate: false - xy: 627, 373 + xy: 187, 155 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-floppy rotate: false - xy: 1009, 414 + xy: 333, 178 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-floppy-16 rotate: false - xy: 645, 391 + xy: 187, 137 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-folder rotate: false - xy: 879, 353 + xy: 333, 162 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 344, 330 + xy: 333, 146 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-generated rotate: false - xy: 204, 328 + xy: 1, 148 size: 48, 48 orig: 48, 48 offset: 0, 0 index: -1 icon-github rotate: false - xy: 243, 200 + xy: 634, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 259, 200 + xy: 650, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-grid rotate: false - xy: 663, 409 + xy: 180, 119 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-hold rotate: false - xy: 415, 330 + xy: 169, 25 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 979, 407 + xy: 123, 9 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-home rotate: false - xy: 275, 200 + xy: 666, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-host rotate: false - xy: 291, 200 + xy: 682, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-info rotate: false - xy: 951, 365 + xy: 135, 9 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 307, 200 + xy: 698, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-item rotate: false - xy: 965, 379 + xy: 147, 9 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 374, 310 + xy: 381, 367 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-line rotate: false - xy: 645, 373 + xy: 200, 231 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-link rotate: false - xy: 699, 343 + xy: 714, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-load rotate: false - xy: 715, 343 + xy: 730, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-load-image rotate: false - xy: 663, 373 + xy: 189, 83 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-load-map rotate: false - xy: 519, 355 + xy: 189, 65 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-loading rotate: false - xy: 537, 355 + xy: 198, 119 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-locked rotate: false - xy: 555, 355 + xy: 207, 101 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-logic rotate: false - xy: 979, 395 + xy: 159, 9 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-map rotate: false - xy: 731, 343 + xy: 746, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 991, 407 + xy: 181, 37 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu-large rotate: false - xy: 573, 355 + xy: 207, 83 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-missing rotate: false - xy: 991, 395 + xy: 181, 25 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-background rotate: false - xy: 269, 381 + xy: 636, 433 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 icon-mission-battle rotate: false - xy: 1003, 402 + xy: 171, 13 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-defense rotate: false - xy: 1003, 390 + xy: 171, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-mission-done rotate: false - xy: 374, 342 + xy: 183, 13 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-none rotate: false - xy: 374, 330 + xy: 183, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-nullitem rotate: false - xy: 374, 300 + xy: 371, 357 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 386, 334 + xy: 190, 53 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pencil rotate: false - xy: 591, 355 + xy: 207, 65 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pencil-small rotate: false - xy: 747, 343 + xy: 762, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-pick rotate: false - xy: 609, 355 + xy: 207, 213 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-play rotate: false - xy: 979, 383 + xy: 202, 53 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 763, 343 + xy: 778, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-players rotate: false - xy: 991, 383 + xy: 193, 41 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 779, 343 + xy: 338, 262 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-redo rotate: false - xy: 663, 355 + xy: 236, 242 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-refresh rotate: false - xy: 795, 345 + xy: 338, 246 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 811, 345 + xy: 297, 136 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-resize rotate: false - xy: 681, 409 + xy: 254, 242 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-rotate rotate: false - xy: 827, 345 + xy: 313, 136 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 843, 345 + xy: 295, 120 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 859, 345 + xy: 311, 120 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 335, 384 + xy: 297, 104 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save rotate: false - xy: 335, 368 + xy: 297, 88 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save-image rotate: false - xy: 681, 391 + xy: 284, 242 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-save-map rotate: false - xy: 681, 373 + xy: 302, 242 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-settings rotate: false - xy: 1003, 378 + xy: 193, 29 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-terrain rotate: false - xy: 681, 355 + xy: 320, 242 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tools rotate: false - xy: 351, 386 + xy: 297, 72 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-touch rotate: false - xy: 386, 322 + xy: 205, 41 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 398, 326 + xy: 205, 29 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 351, 370 + xy: 313, 104 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-trash-16 rotate: false - xy: 699, 413 + xy: 225, 219 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-trello rotate: false - xy: 367, 386 + xy: 313, 88 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 367, 370 + xy: 313, 72 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-undo rotate: false - xy: 717, 413 + xy: 243, 224 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocked rotate: false - xy: 717, 395 + xy: 261, 220 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-unlocks rotate: false - xy: 383, 386 + xy: 297, 56 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-wiki rotate: false - xy: 383, 370 + xy: 313, 56 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-zoom rotate: false - xy: 735, 413 + xy: 243, 188 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-zoom-small rotate: false - xy: 411, 370 + xy: 295, 40 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 info-banner rotate: false - xy: 1, 217 + xy: 204, 466 size: 84, 45 orig: 84, 45 offset: 0, 0 index: -1 inventory rotate: false - xy: 54, 129 + xy: 259, 378 size: 24, 40 split: 10, 10, 10, 14 orig: 24, 40 @@ -6152,14 +6166,14 @@ inventory index: -1 logotext rotate: false - xy: 346, 490 + xy: 87, 287 size: 89, 21 orig: 89, 21 offset: 0, 0 index: -1 pane rotate: false - xy: 27, 1 + xy: 280, 428 size: 24, 36 split: 10, 10, 5, 5 orig: 24, 36 @@ -6175,7 +6189,7 @@ pane-button index: -1 scroll rotate: false - xy: 30, 40 + xy: 306, 432 size: 24, 35 split: 10, 10, 6, 5 orig: 24, 35 @@ -6183,7 +6197,7 @@ scroll index: -1 scroll-horizontal rotate: false - xy: 479, 487 + xy: 129, 261 size: 35, 24 split: 6, 5, 10, 10 orig: 35, 24 @@ -6191,7 +6205,7 @@ scroll-horizontal index: -1 scroll-knob-horizontal rotate: false - xy: 437, 487 + xy: 87, 261 size: 40, 24 split: 10, 6, 0, 24 pad: -1, -1, 10, 10 @@ -6200,7 +6214,7 @@ scroll-knob-horizontal index: -1 scroll-knob-vertical rotate: false - xy: 295, 412 + xy: 56, 114 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -6208,7 +6222,7 @@ scroll-knob-vertical index: -1 scroll-knob-vertical-black rotate: false - xy: 254, 336 + xy: 51, 156 size: 24, 40 split: 10, 10, 6, 10 orig: 24, 40 @@ -6216,84 +6230,63 @@ scroll-knob-vertical-black index: -1 sector-edge rotate: false - xy: 584, 445 + xy: 94, 193 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 sector-select rotate: false - xy: 618, 445 + xy: 128, 193 size: 32, 32 orig: 32, 32 offset: 0, 0 index: -1 selection rotate: false - xy: 77, 173 + xy: 230, 348 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 slider rotate: false - xy: 53, 30 + xy: 1020, 454 size: 1, 8 orig: 1, 8 offset: 0, 0 index: -1 slider-knob rotate: false - xy: 53, 171 + xy: 256, 420 size: 22, 44 orig: 22, 44 offset: 0, 0 index: -1 slider-knob-down rotate: false - xy: 30, 119 + xy: 1, 39 size: 22, 44 orig: 22, 44 offset: 0, 0 index: -1 slider-knob-over rotate: false - xy: 30, 119 + xy: 1, 39 size: 22, 44 orig: 22, 44 offset: 0, 0 index: -1 slider-vertical rotate: false - xy: 269, 378 + xy: 290, 466 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 -text-sides - rotate: false - xy: 1, 287 - size: 140, 21 - orig: 140, 21 - offset: 0, 0 - index: -1 -text-sides-down - rotate: false - xy: 204, 490 - size: 140, 21 - orig: 140, 21 - offset: 0, 0 - index: -1 -text-sides-over - rotate: false - xy: 1, 264 - size: 140, 21 - orig: 140, 21 - offset: 0, 0 - index: -1 textfield rotate: false - xy: 746, 449 + xy: 82, 129 size: 28, 28 split: 6, 6, 6, 6 orig: 28, 28 @@ -6301,7 +6294,7 @@ textfield index: -1 textfield-over rotate: false - xy: 716, 449 + xy: 111, 163 size: 28, 28 split: 2, 2, 2, 2 orig: 28, 28 @@ -6309,14 +6302,14 @@ textfield-over index: -1 white rotate: false - xy: 1009, 430 + xy: 25, 80 size: 3, 3 orig: 3, 3 offset: 0, 0 index: -1 window rotate: false - xy: 1, 39 + xy: 1, 85 size: 27, 61 split: 8, 8, 44, 11 orig: 27, 61 @@ -6324,7 +6317,7 @@ window index: -1 window-empty rotate: false - xy: 1, 102 + xy: 204, 351 size: 27, 61 split: 8, 8, 44, 11 orig: 27, 61 @@ -6332,210 +6325,210 @@ window-empty index: -1 alpha-drone rotate: false - xy: 321, 386 + xy: 97, 115 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-alpha-drone rotate: false - xy: 321, 386 + xy: 97, 115 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger rotate: false - xy: 360, 332 + xy: 868, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger-base rotate: false - xy: 484, 339 + xy: 882, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 dagger-leg rotate: false - xy: 484, 325 + xy: 896, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 fortress rotate: false - xy: 537, 373 + xy: 99, 70 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-base rotate: false - xy: 555, 391 + xy: 93, 52 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-base rotate: false - xy: 555, 391 + xy: 93, 52 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 fortress-leg rotate: false - xy: 573, 409 + xy: 117, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 ghoul rotate: false - xy: 496, 447 + xy: 305, 382 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 unit-icon-ghoul rotate: false - xy: 496, 447 + xy: 305, 382 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 phantom rotate: false - xy: 475, 353 + xy: 327, 34 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 unit-icon-phantom rotate: false - xy: 475, 353 + xy: 327, 34 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 power-cell rotate: false - xy: 371, 354 + xy: 794, 399 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 revenant rotate: false - xy: 686, 449 + xy: 259, 348 size: 28, 28 orig: 28, 28 offset: 0, 0 index: -1 unit-icon-revenant rotate: false - xy: 686, 449 + xy: 259, 348 size: 28, 28 orig: 28, 28 offset: 0, 0 index: -1 spirit rotate: false - xy: 937, 391 + xy: 173, 49 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 unit-icon-spirit rotate: false - xy: 937, 391 + xy: 173, 49 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 titan rotate: false - xy: 870, 435 + xy: 277, 112 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titan-leg rotate: false - xy: 888, 435 + xy: 297, 224 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 artillery-equip rotate: false - xy: 456, 335 + xy: 186, 251 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blaster-equip rotate: false - xy: 875, 339 + xy: 826, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 bomber-equip rotate: false - xy: 889, 339 + xy: 840, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 missiles-equip rotate: false - xy: 889, 339 + xy: 840, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 chain-blaster-equip rotate: false - xy: 427, 320 + xy: 854, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 flakgun-equip rotate: false - xy: 837, 331 + xy: 994, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 flamethrower-equip rotate: false - xy: 851, 331 + xy: 1008, 403 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 heal-blaster-equip rotate: false - xy: 889, 325 + xy: 345, 132 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 937, 405 + xy: 131, 49 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 swarmer-equip rotate: false - xy: 923, 363 + xy: 113, 21 size: 12, 12 orig: 12, 12 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 268e6df1446b34b0797a20a8ee48c1c81bea1a00..14160e25816ecd9da8438eaa4744aebf65b2fe28 100644 GIT binary patch literal 100178 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

u4f3GDo3MEh|p7P`K81-CKATVubW*A_)PGf`Cg( zYY&Co$wzoF|E=?qo`kkE=(zgJ80xgv->22F025-Ao?o?&! zu;(pQegC-rthDs4wz((_zuZ|&#AUGx19(Xc2OBr=ar=1Zb}&LN56=DCe~5C6zEV5) zhD_C-ygcdf9D3yJz)5zO7ms+ztd(3rv|Mg>C?3HAvYqU*yo=h8*dOgNAg6^Wf{&&K ztA9L^ObeHTGrW{97SG)&ml$RDao97vYH{G;J*|cz%l8D-`@-j@_d<#x4DKXj)d_Lp z&@1j!J3*6h%(6B-jQ<9;)pH5a3+TI{UJZMbsD2t_9d0^%_OneE1E|gRMu|8vy0IWR zcIw`cZiWUh9@14zZP4^C#G>qcf8G;XuJ-DqLVoTH9N`19Meg?ypaBlo0(NC)6}-ek zCFouz$9^#fW&r#U8E`lVh~2xM9SLskEQEjYKb9(Vg|h<60{AHlc>AD>g_@e0k0mxSzs6J? zY>9tEIc+UQ_*(!ERqU;26t=%cvof1eNZomYO()83&_vT$;{uJqsJ2upz+fL~e+&JxAB#Snd=!f|(VyEiY8634s+ zH|hu6c~MnnppGDTQcoB0tauIxZ59}g%ghrGf3Sc-m72?${96!UTFZ&>=O|+^ZO$Dh z8hRlS7szXbG?<~!@#FF53{~6~xGIjXTx)TS6P(O>(>iXgCmx0WJ^cm-SfJR^RJ%Eb}TBNXZJ2zQfbeA!INqyPuaM$9hA~Y(@>VS-40m4rJ zc&&!0eVM(n&kLF=9pu+vntw5PUq8KZF|N-=C$)x4ba#+_f&50OT^+V4IosmEwU!%9 z1;8a<@8l5lU~k#z8NcbIA1!m!&t7N8B&-J!S1^m=%*F5l|7_U#*7Tsb6nKrAIIxl< zv;9k9U|58TjAS=UpOtKQsy*!a%(5ZV;`5?nt&6E77`RulKlwS}e_QR=5*}j(73zwm zT(fJO@JhPnRzA`ufErdPt`wI+I)Q(W=V@r9v-m-muJ8F13f+!F-y6o*YYb}b;Hv61 zp=ipw?_Kplb#^e>AjV93HxU*$aD{sHn%MHC+G#(>*diqc?Wc>5eR#hUZNo+)?^-ng zdAHRF+1rw4I@>YWvn-pfwY!G-D?UPWBlVI4J4}f!U6jY>OxJdgxN5XilaP2zdKbH7 zQg#c%#bN9VrMmCYYk+s6|T$~jUqf{BY28(vU zE3R=qJ`0%GHkI%>eq!;RVYzC)yS9>Ng`QAa<`^0*CpA2nqddM&%K6`7wh&hgd*NK5N%SA+(}-sNxvF=h|Dg zQ+FB08GQpL$I3M586SuPT9oz~?Sa5^syo;46Z=p_{6=&~*|);0*UzxS3GFs}OdeuU zctyg!UsD60?avd5V^6;OPHJO&Va<3GAe2i4+V(5958w&cAJj||e_euPaMVUh2naqM zY~leVXPM6SZqUOf4j3m``Cz!)-U(+t)tiRWQ|V}=c&=MTaS_*iktBS|8gD?&{vC~K@;}?eqi{W zd}{gaUMPk_)4Kqk1M}oLEKc9_-Y)HRr>)q$pe)mC-R;RPGPahV_b}kMuH`NmFk7C( zj&hdRAiRnYsv>TJk}5l~&yMgdY5EWcMqaXr0ddyd<%*hf zi;q)8mmctdupj{M!^-3Y={FxiHJ*+>XJAd$K)rKC&o!z1Kw@K^pqP#m;lB_h4DG;J z$=tnVjW;)JuDSk0TmnD{OWqL2f!Pwx+&e4f7VvYN{l0u|Fg305tnF8NjZyT|U3Zrm z1)2ilm}$`s%ZoqKOc3&GyZWDRIT6C8JNnmil9GNnV!@XhF~HlovY9iMIT}OkDT+h7 z;61#{<sja}|IZXb8=fQxq-~jp%?=8NYL-fYPQZ zhuY8OU$hag#)`~yc(xBWZE6x>nep#&hNG*ipf9%bTFgp;$qncp5h=EKOm$KW0b8S) zYN9`a0ZXoad6fHo)&9;48jIEoRnzPE_+;^XXzr)Ck`~+Zf4z*sPQVJ8P?Jy5al!(* zR(iW0FS;){^vlg7&HMJlHG16<0Fc`}m-nFf6XajXoy zpq4$t?%jLq#)?2GRR=}IvsZI#Ex_;by2?9mkL^3P%ifRv{a%KXjQ04Hsu){a~Cr-(cRA0lycTc{?@~0Bex288%%rN3+A%@4w$w<^iRqvi#y1X!< zyzD=!%v{=F2QN99^Zyz9iI;ol*7T1iL@_|H_!eN)9`p;CHXD_+-{jHCx0)G{`ICxA zGT4CBi95{S315iGcVM0Ubw#(4z70W7h8OaOX7fArorI4u@F|kCy;+1M`(Q+iXj6H@ z$wgYgnAo{8PShgYT)JO*DfXT{ysDE=tqlPxOge0(_!#<~X{H=y_YkNwIisJB!{t5b zKBzNBBa=imH~>te)x&1(wJTv0(#ZdwOby+p-kYKxTIvG}MDLS}}nHqc`)WP%}DSQfgP}6oj zAF*J6s#edVWSn=*YIg2`+BJsUYKeJWn}r_`N-BBR@CXJrph4*5_@^N_dUU(JQPDm` zcR+mE_f(VOf<~zL^hdEpdDTf+uzvigXkPyCOjeKHj<%w&uZs>L$UAva>v;_z_VfC~S8O3kXkaza0hOX%HCP ziQG0QEq?~^1{m4DD79%HLT+usH936L@(>_j+#EZTa5Roc(0!JB!$0*Q|=*yx4>bQa22@Kz9Hw|r0d4=0@5dp?00V!GtPDTHGM7;V7=3#*a`Et>j zf;on@3T`(}qoZ&vZG+QRo(tdjT!(%Q{#NlRmj_y@6tmb}%e}?Jc%gO3YkNE{mbeXw zYWg_$cy~Kx^G6=P?oQ#O$?f*PrrZx#0m&S*l1uJ~sg! zKo05s4DvRjte|wi)$Ki8r`w$5%-~OC2d6w`bn7&+mODYj*WJnneumqJD$-vItevPJ zxh<5etIuMkzjjbqIKGOrcBQbEce*9gj8O2|&8wM$L&6#fvKpI{Mk~u@yzW=D(7VGW z#WA%nLU1)jxvBNJiLa)s zPB*WH@N>w*>{~#Hr484{xEm-jtMf`U`$P3meigp3&xd{9y7Fo;eWCYvsRpBKWIRCo zxE*`bQ6s7CN~mIdpgN`W=?8krq|ol*srdQN?4a&)@=GZ|*j_JcA0*x86o#?9APClP zqIjQB2ApdPOM*s2<&QvbIWI;K0hY_70clBi-i0rTwNndT7i6$kgvm#i2tA z=XadrDsc36+636uYF=uysI*Lrl!Or;{m5!9U>X2eOKyVY4q-E4Z5783!wmo%w<1Y4 zssQBDh6}D|YUnC1K1-eqC7^%q3{OJ)u~svqtg?$0ahb}>>y5Ib!0 z^8SJ|AZ;#iw}S8U!8b3WnXn&b(s$@(uELxuJnd^mX)Bb3+`D|D9x1MN#5zI^3W(UX zBQZ7EBq;ef9n!62u}RVQZbrcSXAre5)9Oge#zfr@55LSebM{OXTy8c4c)8Rb9S*Q% zA4>i`I1(%U^b_47yTYjM`Qf_PvaKT`>yAE$;7{Pvf18G&6jJ>dkX#7-x+jXmJEj@s zM~@BZa%0>Ku0Pxg_KC44iE%89%TiTPakW~F3gHKK^^t>Rz1bJu*c-0!?qrcYErbDs z(KP7j_Qd)dY+F2eu^-tA*53V7I{=;=a}%aeF0T+S;9&c7N+<5xB-C$Y%xGS}k1ecx zqY8Z$rh?@)v3);=I)~n=<8E)5IxPg;hT{V`H*JP)G7?meL!+Psad)I4<3IB4F!A0OP6gS880+i7gGfe>MbGQYMYWGwfvZQT?ca z@teIzH-M(po}EZuWBG<1P&=rYbX4pkeReYyq{A!fzosNcGY&T}$v13t0=0MSYEErC zqe&k)?l)R!J~wkq+v{f)c5dW{et}(kpr+5jcE6#P%bNa-P3AuR{AG-VOs~<H=+%42)PZtJCl=k@^i@Av@hJ-mBWS+ijL|kf~dubF9mh)~%d}&sf z>A5tpP4}GY@9)GC)p`HCqu^1bgjaSc2|=TY+gW5)PU}4WG~N@CcSjN^@mY1`^=ce3 z%fHAb73d)nz+@{i%zNb^@Yz0r;tngoe$S2l2Hd^N2CAPl>p#r<9hY)Rsoy62mH8~z zD(DR@dR+a~&wwLY-JTDGulOgXy4-HqJXP{wuxufU0=L#!;}7XzUm=2IU_kl8yhMiM z(gYtcK00Li{24ShSUGerR__su)h^Y6b3`L5)0jP?b7X#0s|!~l!wR^t2ipxlIX$Q) z{oE$)qJEL8oaZlj^T7_4pACYEzJX)3X8VIH^prOcPv4j8oJT+K#Z#r3kF??<`zF(~>R#D?C#qynst zec&2)#K3|y@Yzh6-8Dzm4+hc1GrfV{zG6VzpF8cx{EN{aw;um&U#8zWD4@X?5ui+e zt=K=&!&a;qG#)+vmNGJ_IlaF!>m9FnZO5o;RGr5|-`?Or1~saE@K$D2@Kk`^<>JvX z?u)vi8g$5#ohnP67dX6h?oWVrggVhfaW@V;*$7>gut4&;wduyDK9cX!dmq+V2j;GV z$?cckrr+PWtI@`o>^(%UU1sBvCY>}Y`Z`XL-&NUty+K_g`=w3zatL2s;1TBV2H^cT z#H2oBUx76fyFN6U*nX_SwK_5Pq36yQ4Li0j9;>j>`{HMDKHv8mJ+Np(`w1uTusPOn z?rkb5`9lbA*W7GTF6~AA+wraV$L}?kbA)r@yEhc_aXmXIjM)DikgaU<S@lOjk}}kL+*AvzUlb< z71fm}BL$_(?jtsj0pZOR>}({n|1?s4ObYtJe!S=C>6o_Moq9?I>kRP2IPmuCSk)G- zh8*STcS1X6?5BtUMXnYdA?7-~y%{{04J96*@vgOIsN>ua;JefG>dip&9LfU;?9v&+ z;ZaEW_9dcw@7O*lhW=6<3F8&+Z|~@K3E#B3>~Lo)j4-ap5>A>e|kf zmF}Wwi1cLu`66TX-Yb{I=lS<#%w)PuwOk=iyW`&Y;#fzB+D7$?KA-dxMU5_xPPDQ1 zIM7cL;0@Lz?Nh4#M_w+cV9=6D%`5LuM_Q#ZOW;jT{jG?>IR(tx_OEulHQ_x{42fRV z)Q544jh3aKqnT7{dkp;INT+Fs4FTpu-S-0FK;@D6=cf>}O5#twkocBqyl9_1G2L3{ zWD^&OknZPPiQJWuvxgOQjdbU>h5!?uJnJ?+2i1eVIwc&W%wtI=u%BKL87foi@P3km zWciqd-QfKHJcZ=?=LTjMj>8&sDj?VV`Q{u9{(k>Q`sIFwgYvtoyX|0c)EDQjQO`bP z5qwj}q4$s<=4M#$-7AsXQb2i(n}6@*x;}&KH`4RtMGlqb)K`raI}CeRklhwit-UwZ zmLB&nloNoj#U58_DgySv%U%0iV7cen#7AZY&k(nt5X3M4IJhYAo+t|#4(Sr&bogy+vz_b%3$Kec!eX zAZaTEX{bE>cMCI_A6`tj#m+bxwx2oB<1|+a`~%FiMik4Iry%_x`X7~d^-&4Jkov)- zdfOi~v!`~7=KmOuC?@i3$Pc_E*yQF$7fuM++PT2;9g=cu|5n@{RG4a^gP?+3I%)VpoeDagFDnq60OSC1LqFK%Yzq z=vbZ6e6ZX7e^h;USW{W|^|?t1AXQPRLKp>gR1hiBiK3z+ie*HUrZf?dCP>exGf5BO}txyB3_axJ*ov`bQmK{&R3(o z7={2O`C?8m9+Sr>fz(F5@2^d5JfVU*9l4Ne z;q-^gA|cQb{GDemzaeA{<5$v^QP!1)pekJ##mk^x_R6On6GDEb@0R;M!|~VN>7e{e zgBKqc1@0Rg)=0E!+6%3Xf`;mwi~}0fV?Cu&-Zo1gCbHLcZ>)S=bAp|wJLgsJJEuSS zEJxoE(YXsG?`%q9o3I!3?d`d+pY&u`!_QILqn#^@S=^CCPn94ndT4h`zNO)#(-IMc++kwmAq4+j2It@gC^vvUY&2+OXw4wpm>!Ptg= zer2&QCqNbRpC!k?H;AB8c*4DN!_%l1WmfUUpT(;^0uHAMmz=#uEK(FluT&-(U!s>A zL%v+sF6`US9jLZoT^6bu)=`jQ*zUE7)Omj?U#V_0Ne#5-hyNoY?m{R|3e}%B6F}7D z`&t-2CXo1{;ai)og>hQEGN-uN-I+%wzTkRLgX*ylNe+ESvqfJwQ)4eP8OpZ>L}KAg za#eNg5uRkc3$jFbd%seuV}O-G*d1$~%W5$-EveSnONi3H*z3lCZ0E+^}4ih)kO2ZsupiNux&7HKvGqY~Q}-%g&Ol ztR>QNX7LM6gHs!RfmXn^C*sl;K6EO}e|?ojZqVA-jjIhRTG#yjcF4I@SJ1D+bL-{@ z+J?La8DCc-YKAy^gs6JK7ssQr-d}q-`x-=3|NjRfROzBTr~x#VJqo^l*?%XEW`Ror z6fX&$a6F_L0@vm8i%iVF!|>QVE`Th2ef0vy7j`Xlj*3jZ>pfoWJ^1l#bKY6es+czl zg1?vk3l(&;yQQP(Rx=+2Fa+ld^#Uv4T}6Fw#0x<4_dA{xU4d%jQz8)FHkDpqUP~;w z2qT!0({X^9rw>{+CfWY{NW0H+cPvd3J)G+bTXBwIs8|E5!LwB#p8#*#lAkx2>&b53eIV_&ykGIp?YCi;>S z!+#l-^h%BW5&A&n{A{gnbAhY+sHNK7Y(;6q3j3YMJi7P980&?UhWJM96NuXr;4ARB zpy1MUvEr|1xSxo-_#1*Nh zYobA;J<3j(1)pOs{Xj>HTrV3z4A{@waQ#uz`qRJLmrPCRcZ+M+qa*YEm;>g`> zcj~>xENS+3u$7$sK|~S+X!1+7w;a4zTFHl@JL_nZJ88#VUsZLAlEN~>-bQyNo>yj7 zH#XI%`g(mR_wJZpP`5EFq+dK}@ldz8`FcRBWZvRub~t8zs7IHcGz%C1@2-T#vgRHQ zDz~@7LVMdi$L}ntm=i*QgUy*wxV#^Ao?$C~W(AKd-u8JmpCgMi3z>PElK&pyeU_3m zK_#{t3a=5SQgMWM+df%FB5*RB+=U8A)Wr8fIfu5dyoR*gQHff*1PM&v;ah*>gU=44 zMB;toB@!yZ{yMAxk!8XwhE^N+-Lt1RW-EDzvv}TV09zE8`-#Y@Rqn0jZQ8L>dV2!} z&zZMS0Be$cIs#}ev;|Sepqc-I(!aZkE<_lRzY@0wMZMzXLyhDPGE$?YV_?+*7-pC9f>$;e zrZ&!c5RlF!4D^XaS6K0W$()zGk~{-$EZ>vP9S#;L0;Jm8MZ2h`oYv$<7v_(9WnA2m90DK+om15=2p*L0-qp6#w=kY_-S> ziMZIZ%Za72VboG@=or%a^;?V8t)mfiCI~O;*y4mnIc!GV@&GQqz6oV#TyA6hwW>ru zVf`l%=KMNgYzfHZtOnH&njFy~QoG`TJo#vLVAGwcywz0Pr!FWKo@MO3A$LKHaCcf6 z%lE9MNa`^3{8EYN*+pJ_3T*;9{4{z7>P0dNmT5|orJAiMX+l*(ijSW2t-UMe9X%T9 z{F#uhZ?|Y$;M2}3oZR72-4`SCNu@;`+fkGjg+T@<)ZYRBQ_pYVl8voW1YeP8bl zrImd?Mdq4O*ZQXSNEDXrzqyO?%I#1j!=6y)G?N^NTi=AF>yEV?mU!7KA?j|PSM3v@ zpq+3_gpj2mP7QlKXt>-nYys;LY*QVxEqnREO}D=RE&2;SYw(#Ntn=l>ku6w_wZ9I! zkj&f3ohGwEFb<>iq7cu_^A{@4U5L_%{b*HioBpud>WQLVhZ@^GRR4BH6iugvIfNx1 zXOB9eHX_v`IBv{k78t>nVVSXnpX$~8HMW>8vf6q4KV{mV>rj>-Y;isrv}rp>7q;3L zAnUGPZ}}3OJ+Mq9O20|z_i2<*^8@f5?Lb_Wi&GApm)CfPN`AzPlgO&t=+m%^>tL$9+IZ`9c|EVbCR zC}6_fiY-#bf1wQ_7AdU-C$aD>nwDfq&I&wEpz}0WBBf2w;Q@Le&`Ch7*@U;-R{!J_*#4Q=lTj_H=IvC1+CuY4ixoAEL@`2{2;TrC!hO&z@_KD* zWw+!xNe{ZCd=91CG2dPN3pv#>&yZ`>mJUGc8ruNSMPJ7^R0Ad!_JIiNiK>FK;Z7b=z}B;V&gpId(vfGG4QHyYW2 zZxFMJflg3JpBWiba4p8wfM{$shjIqm)F*^IB>4T(eH-$*3VKr&|DHN=cS@_9sRaDH%fOz`oNETSYH0)35*1K~WQCZd*b1z~>l=ZIpR`s!D#EX`Ufmk}Ucu7%o*x#H zRpgWy<=7NB{AE#o#FiKU7z8$@k*|SKA_e7<6@KHf{?ya4zKbZ zI6~i`;2?F5uF+Byr6Q#T_i8oHf#q+_dKc;3pkxwpbJ%B2xuM$$SeR}f^ekpz!*&#O zoxGsjzhPh8aEtAkhVjfR{WXTfFWG9%GwMZ$D3XB~amV2cLrsS!nbLX*IBIX`2iDA( zs1=dm_t1IHRxfqdMN7T{t>6jwaBnZ(D9Lv5@0NsK{jVDMPoTPf!8F&S^L)OEV^Mq& zJ-d*J2(|2$_dBM-Zu2+QRNgpPDyOXAi)P=}(;xJ;>Yt;uk2hC(0sQs8QX8DzyL4Ql}-_$E3T)g zvEt(q9Buu!-#fmphnx5pl6(gC=ca-+O&E0*$u+q|D|Egzxc!NgwZ5feMniIdf=^#U z?+%aDrvY~bg!2<3n&VXV1y>F%Rxgfq?dbn@^W{1O!vY_O5qfrDUsfQf?e{nh0QF^^ zmq-Z|>vgU3F9G|LMzzA*BL%2Jtvkan=5_@YN~3cNwr9Z3j!3m*PpkXoQO!ANW%Ish zocVaf5%MvX`5@a%2rq03G}wnP75WUaSD>5k=)DnV4uNjszZ~oWh72^Q5X*FeMh=qX zZjL;90NhG~4Tff>WmS6=U@-N9xiDq0xtff2M^qV}>7qD)E~@FBAF&{KDP9fl|9tlj z2ul8pQFl8DTljIFkCMPTO*NM_ut4AtI?$Ulyd=j*br}}Erf7{=4~Nq9K{@i9Nc2LNf1n;E8Zx;)-r+G6-Wy8;4neec z0g2+=VZXZW`}KaiK&jfsBf+|M#D7j#1KM}#B&ylrr=ei^KoPm;Zj?;&)1}tjme%(01f2tyBrcmosu0awFjr{+wWW} zo{l>+PW*Zpl?cZ5F_%A8whv5)H|#>8j%h{N=8uaooUe6%A)Q{mXJBHhj?_ppcO9ZO zPXa{7FRoj9pU~>v9pdKdf~N(HI<``3_Jp+uJS-xZbq%fQTw#)iOitOgkSwibJf^v7 zleMvxikq1>GlP8_V0UW|@b0^XvELb359(keM(Q zh~Z6$`hL3br}inXU)#3)NpaXx{<*JBvEO_7eN-RtkpG-F&oO|iSZwmCKuX#7DIbt{(M#EO?MN?+I!%H;6j>v+f|3tGBLBw(+|El5WwdXspwPh)iX187{*9%YiWJ z`vwZUv(A0Y~Au0?>!u}&jdSekrBE4!ZR%RA%SzkgX{g=cc zw6`q%?1w`aIL&VzjYeAYl%4k#+W~2ZOxj(^f%sY4nxi1zsmcMS==iCC(e#x@0HgTT zMA6_qkWeZBu@izYXS=n-&u5QQ&!540>~TO$V z9`I7SNrXbr-X(7-7pM_y+0#!HxM~Clqgk{#0jr%m>bw1$5CN%6c1E1JsPrGAbix)8 zvOQ#d^NOL>)Wl7Gd@1|7jt6-@)52!nLn5igdJ#@ z1N1UU9{1|tE#U2Z#r1Mkm0s}HhK*#i9hlQ5%H}BvLgS(olz(sp>jsOtX(+Tv@ncy> z8|>nhF`JGCA-rtx63zT^BE-57@_)etvP7jNlg#DBwb^+M5=H69Sxu`QkEc}y)c%7l z`1CpFiW#isfeL6xJoB6H+z0hqiDS(#4<>CRHmW$wx+Q@=Lz#7KR#CX5fn+?BS8Txq z{PW=qLspntJ^5-moPD831-6L-n)Y_E-var+g8Ehor8}~?jK_!TVAM(bPYE+4!v9^6 z)dEKR0yYliu(uJlGD85%nm=+C6(?g*i64W|PlX;FJZ?=>iS)Y&Up&e$p?#OkFGl?k zEOZ&Pc2IJNP*awM1I(=zJ!f`gDlB@5PzN!}TTUUYZo!tR;Tj#3B!q9dYhfvYgvYIl z1SMMOJJ}h*|Hjjy+Xy|CSuXstG2FRlKDSyBN-gP8TY|YQ@fWz|W z=(7wxut4WSH=j2Ma5n7wrWzX^aPJ4*Rl`}L_1@zv4F;dL$TZCRcc`?3ur?udsAonxDC zW*6V5#qm=5EG^SA(QXVeMqFfct{c%q_jBpgGQHGTM>RfN44=!an3f+YCMkGSL*1Vd zH~e(pD^$fCaUyPuCXEQb1Waz$|!Vynuq>}kCK%Kx4KKRf}tFFXQx z2*>15sx&4+w%Lrif=|Q>D)i*0dEiH-X0P)3_@bbN+b|JjxjYF~kl26b>Fg)HnO}?B z1iESyFnbeiS_gfS3fg8P6d;_~D371({8S$tfzI=E4q=qcCD!Q?eiSfLUEupPhO+@} z_nkT~;t8zIR#u*v8?EMvJYILgDXi7JDHi7t|XejSi`=gmJU`1)8$XFN>j z-+H~~8xOK#VSqVl>LS-|#AmYj?Qi?kE{RhGP}Y1y<`OIfCCfjP#YP6^uR+W`jjj&uQ_U?&C+6iuiLaH&u2xRM{3P!=;0ks-=sHLF%r!S{0o z$zKt}eCOYto$WZV-nS!!Hu6iJkP3Nnw~(-_DiJ>t`177^2w+;Ng7aRQ`BIr$L&F|3 z-ix`#ha<48$mu$=OMzVk9*q}5 zXaJ216exb`upf6mZFVTJ& z3%Jx0O=_LD1kOaUG?Mbyd%nc|J0r@6YQ0jA0(S?!tJK~le?zt$hC`#bDJOC^bJo0J z;)wzVPj87k^l=kWhM$bQw$anLsi$3#mh!HH1c=dOI>f%xsmUiVl@i-njBl$!jOS2W z7Gw^|Ukj^10yXO(si#2x<@X(sWm*4H*3{oY=(gVSQ|$)|dwLbEd7?%h*R&y9#s)gG zNBIc>ae?tQr&+~Il`3 z?!1cb=BGvSWL4=UOq!=8Y}D7+9cn9Z`2#wp?<5`E5(=LC&5m7i46|GC;)t#f)$*-M zR4~tv>h$ne6m0ie7dcSZziUN6z|vFx#|7Unr^NPk?8@0z5bOJPD*3=Y`Ms+G`leHK zU;5s`QIU$(s!ic`S5m^#)VhdV`6l?5c>nn|_K-s~S>^U-eQ1_Uqlk zQ{D*K#{+cUD1jGz6DcS-!bSY>1Kv&*R%%1P65B_X++m?sqaZGP%|%f%3OEK7T+H88 zIy|Q%|7T$9@*5516_Iazs`rJ9`m3S@VXYne(P8p(SOQ-6w_(GnA>~cWU9ZZVKTz4j zy^c4vm`7ss?%yq4Vzl#C?=P6W9U*tZL{Gu6su+r8L#%dWv9wOFE$eo1`*0K)9p*8{ zkg(hh3kl=wPb?TXJh`zSg4DSM4UrNH!SF@WxL7JPvb%OC{=tGA4ieFSriY*O`Aq(I z#A*@{KF>{hrV6py)f3^_iP`;+zUy#T2!c(ilOdwMPbKF=%fm;;$sEX^JmAPe7n<9=OQ%%s3IE?jwfjqb5&Wt6vs`cr;+4Z{x zjLUu;EqkJhB)0dWJ?MjYb>7 z;Fp+Rf!;)aH=J+tvfnA!Z{sgjQG?Q=^vt9U7b?wKl*EpK;coL% z@Zhjc!Z_3dT^V`t_>e-_OFK^HLU z*mBR~U!ZFFzGd%2PMl>RLXFgD=r?Ogbp*&q*A5z`0Wu_LB3gAOzN4#-Nl(&~4d`GQ z$wOJ>)H*9JB@|rlS-Smz51eRpwR3qBZLk67bue#dxo(BrLmcRFtM{MgDuEjKzq(Ww zSP(*<%k9^3wA|eY)MV%%m*0GxATHbP2X;vkK&@1OWj#D=abwc4B zjWkCsnFR>H&z0+oPA#K!|DO67Dq-p4@BrQ-^zosi{>50DbNky}vsIPDlkSyVBL1rE z1L3>FG80-N@1&paJ>9HhpAQjwjEj1U+bHqO(5w$s|8kJ&LYf4d@&7*4WGCqv7cvex zuZYH>p;mF-QO%rDvUoesF~Xw5Fopz~GMVp62>YQa@e?TKCA=?mWl^9R>_ZkXqXosl z_`{EG{U7yhVreiZGw)_tQ;;s@Ds@*HZ@{yv@w&_Q?J=U3GPCP0D6{4Bby{zj{a2hG zDWfsLKa4E=D^RRkJ_PE&QmC8IraypHgF3@Y10OBhV2m&KQzX#-%QVsL;}1~o8!Sl? zS3KT1KAO|_daKnHyrS)24y{}D{`}EuacZu%Okcx+!Ydp<_^4;3k)!Xj7oKHLLGSpTdws6>cyTZBwbxe7U3?Q$TFLn0fRfrxItP7{&G(2(O%N@-K%H3MpH7C%eXLnJ)a$T zr{X|ZWCVX)@1XCGl@Bn_JuS4k)lCB>vYXeRYOM0u7_k;u})Vw zC{8uBt|lT#6lwKO6l>Gtj`U;8f8sFNW6VQ7I2YQn6PvZZbb}7&Z-kPu zMCz5KztANB<9_e>w=&>P@nRRgf`I>1rpKAoI}WScGzK+?EM3Upwb}&O^XY7N4^~bi zH*yEH6ye$Svf&739r_i@7@(-{%M0{!HL~!ZsO7^YM)86!;|tNf6%ZY(p5xq7^|?^w`>xJKV^^yOeubo%L@J z0LMlek8t7;>g0S1;6MesXjXh52ww-^ zaIS64jtXB&ewi%{qYyqXdlno3*An(ZcfHBQS>{ezy0CzNfKN20T}nVl6@FNYY-A)pud};DU0YE2zWNo9 z^V)LZ&H`nZni|?rVy-=o$f5B%elZ4zmm116w5Qo_o1xzH_hk}% zFZ8!+qt4H8IR1AJeKG_RjCnPFs;6l5@WaVt0+)~F-dE;~t}+s8HGt~Zfjz@txTUC_ zdqofM0TP)mDFZ1tZs!=Hkr5mbjTQyhO<;JTJkAIk6_w<0$3}hy?!)<^IXN!W*}+-r z7^N54(I)$vq~WUXw;4?(y^NHht(REh54oZ-uz*`j(5lM zYz8PpZXAkxw4*2~y^iyCWn{Cz`C6-vvIhG^=uZysOf366LcbnpR3@!Qm6D!J$l>qQ z`jCHDY^gNgl#H_W+7R(ACaJk>vZ(*8y)^5tD8b2Lu^mL-;ej%#j6^Y1qJzC!Ls)T= z56lY?vcO7y0gEk~_NzxvYo`K)K2{IMpWrgEyv+uC!9i#0L3<^O=UX6j!1>z#~y+8wv1j=l(op;-Bt+#F=3eIUb zTy`PnaoZNpttxeR7$1KpWDrSFoPi#^VDvs`zddn)A2;)+$pp?MaL+ zphM>G_i<(TSf<;o^SLl?Zp$a{-VoL4*VGGPi5h%y)iV?R^sssARk4d>l`=p5^9$&E z_FLjmCOFKzSH1t1*XlGGNz%YY=>)N4(`w{O!xLCN8-XdgNWA}qWHmMLRUXO)D>)1u zo^9C7c~d3ZuRbCToc0pHaYIQc+F*S;9j5( zc=7KN^;N#8W)QnvJA^I$;76fKA7YI(@HRLN|2>mn1wWqbXZ${)2D#aJiLL9OuYR%z zg*ON#9!b#sSjADdDNV>k-mymXF=&b-SJ!3^lv3Sykqp`&+w>nW@H_fmSc`0O)p$_) zyyOn2V@`y7LxcD7yBtp?GMg-r)u))(%etu3x#x~IVW{JH?1EYL72vW(;L?u8>xGcF zeMyMQP^cCc>bdc9*_-7=RCmgegzvvkw4`?anPMSy^C)Ztw=8jv7}`InXL6icz>NSd zG+(sb_dho+1j5=!)e&6Aw@{*4!*D+BKm$XS16ji%M+tPZ?6Zc$hE29yso%IpI^_s1 z#naL;8jhi}E|rfzZK;e>n{<)(s94eW`V>WcMe$!m^<}Zd?pggmY(Ehu#Rs!48OS4@ z>_V-82|r7(z?6>p(rxl06ca&V5)h10$-_mL*XppA@psp_O(YSB|IkV7-}wG)k^raX zGv(blG#3Y+Udzi`YV3J^I%ivaM!c@a=Dgaad9j3hZvG)^A$jgs)xmvBab@ng-qLWo zav$qq9-lR$RPYH(e%%uyVy{&p20g+NkdO(X^rnvd3{e4}VqHbu#Zks5%O@)q+B%ln zt}=nIGQ~wZxy%SV-yXyLK~Fm*W^yFd?eqUdl;+WW=n~ z7ioX;&NHmGb7jT(fhcE{7xQZ_L|y*$@!505nsT=@&mXyE%=7mvn(2G=ZF|Cd@9Ed@ zvri7)Ue~baUW{EdBbpZ4ySV8utp=mbf9_#EY`Y`oVEtm-Vn0RY-~(33nQV7ux52Na z&VEL(92c8@bROEkUTTP@-W53U&+^>2uMNdBszcvinmiTGi+EpuN3C=%=kr77^hUE?-bqbNNr;FlI-z>l(TgfDqSL+cK31S z_&|ivv$O9QM)i#OXx^rN5ACO%sL6Vd@xc7dGa_x?9*X&01v$&Y88}IA-!AAc9=voU z=WKmZ8FiVRYGXDqncXnFWp=4&GKlgFpzt{*zVmFhwq{{?aV{Yi>L7eCxA$Cziufp}jQ3dDqw(iq24;0<|TIWZj?sG|_bkm*&GcsmBUmh%}6aC5GwkX3=VJe&Ej|MA&J=h3lof`Xe z+lB(|YuCaiG?cn_jDa@r$D+=(`yT8502_AqHqLW!?MQR*lhT>qd%^6dp-7>QcTc|9 z<8mg6h;uIr?ReKhIHLl2@xUp_Nim#NJefVxqG#WW(5qK{9N2|YP74~1J(IvK*hE=w z3A>In-C0^K+0M)gb)}Ezg5*95w{(vczT7xHqFPUKY3bgbkW*w~na6}y^R9Iwpo&cS zOvr7;_}6Pdb%_)XSw4TTh^G#SYsr5bc(bCtjz|{xRoBC_Y zAj|SRP!+$=L6~Zh;M`pIhTDJk{Nj6V7} znFLc_2~95(R%Th*T;c7Btx zPp8o$qr>X0dz4srhFLnZt=&5&@A%%<4$}J>Cu*GGR&S@N#yp_Jz9WE||G1z$cLzfv zhnvfObQcYUMvdT@NW#R0NX+t z0cqN1c0n&6&(&t}Wf&<=oM1KzeVCEkg-z})+Z~_057KL{U(8W%cWzlrN{>aQ?-=hG zKo0S4%2&IVR;6pYQl>vcVO~NYpM5+vtVwx>_c`k@s+nmAbCx9T6v(HBr#qhN&EL~g zvg`_%)jyO=g`)J2;Y9_6BIX&_kOmTVJCCfES%n{2ixiZ?4wKP~pHtn!V~hx?TlID^ zxB499r%kb5J-OrLF`g%dZmNG|4VQh2rJaMZiud2FC|y{W7Tx6SJkl_#AsWWmg~PCR z`_8%ki>xFKTMV(Z>RRpYPglNioXKqks9`30s`8zjEf-q!a#2f5*hQf$n)Go=vMM4K zW6KiQQz`Nvg0JOF=c%Ca5y$@I4N04T%*j#X8ISWDshKzg!v=$cBDs+NprPd#kXX*{ zGXUn&k!|YHFad)EQ;YS>6iG^#~|G@_&7sY^30qtNHe=bDrSur2BR5aTz zxtvW+(O5pbI$>R&1W5k9<>@3KX&x&?4G7SQrQK~9y^4;f98SK)7b=NLN-Znt zfmvVyNAO1YBon3d40EV50bL&oCywYY5t=$C+ldB)KmC}TwX0c_#}Mg6KhsJK4rzGP#{ugYu>xmG|Ea*9>H$rj=7_|jT>U~OP{m3?X?wzDL*k3$5kS48S1v*6qio1}D(BDF5WWRemYx}T5Wte7tH=bdif6v0QHn4WdKTT7anzAMR-6p7uvmyW{%%Sq~+SJS&UUdXBoQk;!85lz_+#|%mL$t z26JmsPo>`A2$ujMS3B|f^S>=(X%DMt7Hi=jH8#pEzxFk1;G4UyGse`pdR>Bf(id!? zzM>zN)rNCC>BFCImR9FmMXuhn#j9ve6R}{T|knxucDb67PFI;0iy__9T}~8bsK`>!6@AiG;4(AR7`o8jVq* zZ#^{jlJRoZo`)h^<__~?XItmO1au?=haZZr-R~ObdlHeSrBCeaURSMVT$d)!v+8C2-F zM}PI#8+@YRq+mEzt;MV3*je8P$CV3p1mcLzv6Q6}d~;mSmH+d1Q5uNdVw@w>s{ zQVy9aVPbcBE*L^0EWyoSC1`k*w%+0h zjt8C=f=Y^K`|R_+1byNzNm3(qoXstL$dC!ss-~J4f#1&%I?H+X|A_(A^}{hQ+Ww#~ zjR)OK>lNob@dyKAN%XW{#(;yb@8`^{%k9cpb6xkI##>5o4$RV&W-sVL7ey8WMxP|< z&1TQ&(~%B`5B_~QxiCe1R^>QTdG6D0Lc`JsZHu7~{lM%Gt48-D4aMzr286}>>SfRv z&?s@#c>`fxRnp7oX0%7#0x%Cmp}DVAm*Hjp67)tc#q&=O46hMkWG;MRrI5oO976L9 zy4ZCc>)<eW~B_yMx<{gWPkV8C#1 zJs)6~w^Bwgt6^EPP^Q)pfcU$;EcXbapLCeHZ2O6~w$Jiv85p~!ZAkPPO9uL-mUMxX zQ{$0`feG;T5aj5b%Y;<3P@AqRr3$*ow&LW%US*D;cP#2_WeXjab4l*5-76 zy!nux0kBZ?KT;C64ZQ95S_5^bEmAgBJAe)EKP7Uf$2D|1Dq3!J1`XzrR*49L>74Z$XfEy9E|KkCF1UJ zL_$=QvQMxQXBn}yQ$+OnQj1MqasB;(&>Jo7I~~{xlMEd!SKEqRnse>oiZ>BRr7Bv#Tdi{2 zChU|~Am3}fw3et8RaJ|Ec zVR|(0a&F;%XDZXMmll zPNdrNZRgpPOrj*ox7%JfG-@(fc73(whW?8%g}O+@SMwOxFMb0K`}?FOp9)N~A#WDp zN%`Kz8#{muedoGGGsEOX_(_SbJcBE44R(qSpRNH>^ovw^?X+K&h}Q8)%*-orXB=o2 z&-Y}Bb8(tvT6Wwj=G27^#96XUq#zNWg&w>Fsm8i-j+vkn8u2-(=Yi+HOw|{L=HQ();{^V%ILj-i*seF9CsNt zPOF%4=?%3t^?H7wWfzaHGApd4s+f~YGC8cwtcfOrYX<{I_pFP5lpmdT*V$`yVrh6*qs-Q!Ir6O;GD5PjwDH83AUarzJERf>oxoAL>Xy{V z!3FO=c=89VlbcMna07d4PXOg-`Z#SXg(0Mweu$_dqYG&)M0mT^S<9X$!RZ}wz zj^4sVu#C?&Bd_wU8Ml41Tee+FZ5W-}*P%6VO?I}17CN%;Xuxd8zKhzDOTCV>e-DP8 z_*fS5+(mg&(cQs-amBv zz-vQRFHAqkXvOL5Ba(g=3r7Nr??&+Po1Ux*LZJzJPp6;XR&^$$nTiX%_B*tnNHyiM zD#0=N$2+zWqY&Ethua#kgOX7e*OJQr{Nv7(VEFs;{O(Y#%0I;lSIg_U>mT~wx@OBQ z0q+T~I-8_!4hSk}JS39eO<&TPxT>BaV51L&mHuFh(tN!{@#ix8y-dz z-b^J3wvod9(Cv%br?*#ds7oT%O*AfY>z%XWREzhi&Tw8AyZJN1-QE^ES?-O%oEGEl z6dMg3zmGm0)tagOXU(v~!iOyaV%z)6EPpURfCJB8gkO7Q6yY_iJHpd#iD*ft{;%Qe z-q&BN7Hfs5v*i5}jfMLjOH&{ z>$Z({sByRiggv^ar!_~m5>33WAYA;2LTyk--YUqez(l`+#=5r$m8@KteAmZGmd=SO zlbNC4Vs}3(n5?2HG`6Ol;zaqFW%f>J14^({IMI`#>HFivEu{tfju`3XE^*P+LXQ|B z{c~iLimiM|g8B#TpMmBdPE3}QIbWK>LfDJ_2BnCSvo3*;3%T)I3iG4yI_`4p`R4gX zA8`^WO5hBllXUwAO)0 zg`xvY_JEG>{9C?DJw2Oi4JE#8)k|5Z_?b|+tqJ>CB=7JscVaILAQ27p)&LY@TNz`i z(^(OA&ursYE5Pcme*Y77GBma@ex z%Q%G#C0|7ecY!4s_NiiLjCk3@M-YR@_$Zt^y-G0S;d6AvVQ%F8>gBuG!}CV5OTd|P zV%aVxZ_#^X(&2y0g3eNqTq<7yOmen#`b2+j=jauYmZza;NjBf0CaQ;*Rg!(Jtvvi2mbkjKkjbD z)}6FFDm^zYc6On`#b23G85Y0&P9SHNrgyh9pkkc+8ligC_!PQ%Wfz>yoy_qJ{j$k} zE4(e+JKmKgY^|URSk8Yj*;KIum$O0M`W4)$ma;1qv+B8kHl=A*^LVRUtV&NjKnXJh z55N$*h2Zw}s9Z&%UVZV{+^zp=_h}gq=^%ltFEBu#WvTcK5joqvF@F!DwJRMjrdy_H z<#Er)+$~Cn_FX*yW4O0sR(0T_nRq;K+Xu@NWPF8hU#lZO_J^Pv`{y%RYLDg0KU^%A z>kgS^OXPhQ0==Cnos5woj={?`>qP842ATm7ib z-j%Uj9@-F+Fr3%OBeYw+#)cX`CAdJn~q%p2D@C#8ITT#xR$jNyYII-NJ1 zl%+=cF%7xUtF*w$GnXzi78~d4ECaeYpMgve5Tica1-<)7@o*mGy*Ra{|DNxPk7bI* z6W89bS|*Ye1D@MKz-y+}M&)0eeuwbx@>fq_Q&|Wa@5CyXX+*%>Ea~9oCP9%7wYqVi zx5JSqmwBn|Bbtow2M*F8lG!3{wOJXz{$qHUUSO6yoLa{`&9{)Rt6=w|fgV5s{*w0e z7gJx>4bk;i5U_LFfg319+Kv+4YFEXm+lq(0id~aO!4bY@QRe0cn9xXLD(efN^SAah z*jk9X;n5Ihl0t12pAYw=z?i-6=~;@Dyz0(XqU_|ktzAX%^w_qj^|jkQO(`uc zsLkV=eZ2;x-X*~QA4y)@-Md!kV#0wdThJbDuZ{?D&~vW&DulQDj&9n?d9v}at|&dy zV0N8aUk8RBM`uRHHhBb5UhZT@FgBH~$&n4kw|kwEI+NyUkLGUcmVw>K%?~>r$DZBTIcr&HV_vn5cpk_uPMCN?Houkl zLG&zYS*h&2OePUpw!;+VakWF|#V9DT_^fm+jkqiWv4=CC=DrIFYK#%k7goP5IxlQx z53Yjv!$&H2Vy}dG&(lMKbp_k|71;g?!|L&$a=QLtmb+h3j?}xivu;y`;1|^$hsRQO zebTi-mcj{F0=A~`B2yno~NS&Rddtc5%ne2`d zVM3rGG7kYthqG)qX~zR!&#+cl=D)J+DssI_jYnd016XW^;g|^v-i<1X)~D=M9u7+F1%>5 zNYJZDSvyuVO*t^-{a4HK0xWD&M!w<+I);v4Vusq1WR4Hn!l&}J_j;;<7^ckpF>1nV zf$RC+n1>}(=Pd@D?R_sAot#RSxwkE-Nvj6BVuwtHb4$YCIv_o6A7~l-VgcJx5aC37r<&|qnLWy8A)}O208rcGYvEl*}P8!oTL%DGW+aO z;FHT^;CYV}x?z9)O@ob?JH8x?;PmPgvRr+Zq3Y`g7sr0uu%bFwHqXgn>{v3lnnSkrQ;c~6NF3E zn*;NI}{1x8tdzIxg zQvT6+u zjVTChPzQ*}$0$nFZlF!S`%k=_*~qGWiG)sRgSCD&?AG)$G8kuUT=pQvO& zp1IqP+ZfZCnvA(VSec{y=4dS8OzM~XlkevnRd?-kO~6vDC^kBzE&V!B@>sdez#!_D z936e}Vz9%WnmN<2?{5B+bzfthl|~z;j|y{jas9nt(XhRM^N`D$T(- zFrPdZXx`CWZeVoZ>et`!-TOme(R3@d;MMoT?*k;PGyzl8*XqhhnJijge3QtqL(+Ub zgWPNPWbji;t)xR<^{wUD1{a0I0yC!F@~ZOa=2`CHqP{&#HQ!Z^Q+5m}P>?CkD=0s0 zEXUm$H#bqbaxqbUmod@%FRkbN7mum>gxXhEG{x$}n$p=V2TBuP%-OT1W}Pr!yzkCD z-#$WK7?Ru-O}-oLFKZhYr+lNCe-0Vs8e+X7qIv!HFiUodsyU7mozjryRdWm|x$| zTxy74oeMEk`T<#c!TPx`TB$>ub{@I0%A##Y9L~pot*LM^QuF4%QM=)82e8nLcy&!O z=tS98aW``DgEl zpvtOlzwwv!30)$(c)ma5ZBDTBJamFR?x?B4t&EfDxQ5V%=#M#gjl#prx#Qt*ZYXO% zd}>UPW4CCQ1~kcayhgEzZ5`7l%5Xn#_og}2J442#dHPEC?Dek?3Q0;hm2I~tac+;Q z{E6QJ$3f~BH)`osMX)7u?<(HjJ|_g4mz*#gytdn!CT*3?F-E;I{t^9!kzO&hMB~9N zMcTJiRG()0bF@r5?a8&iW)3aB5N00`-feM~Zxe^&{3*YYU7js6aQ@4eo5B^RuHZGV z`3hX&O(g-Lp&S#0u@k0Z(SU!DpN-zEcl6aH#6D=IYC z$vQ&A9+=d~L)(Sz5j&UmqUJ{vSJJuRE=x*ZecMm}K>p19uQ(pAy`Q_*Q;RLJmR`bB z`_C38u&iP=)SbTjrxN`ZeET#rMjqpt7R-Bl#=4#9e-~dSw8k%<$;!f{ctD04#xS2D zCYq~=icrCF_bp@mo+%wXZnCxi@GkiNdbyNVp{OyT_goaeTD!6WLNXU&m&u) zrbq!j<10^wpGW>H=5na8+Z5};AR_{S0?+!zI^uR%r&Xu0BsMcKNk48cSXk;@=-Qx5 zlFxqnLv5@7wDm3Zljpyd71p8KgOSPGf@I}a;0%c1<%subUQ^mLeZn(-d#I)7()A-j z4gW{tGVOP!iN)q#x4AiUxc}rUC^-8dQrur{>3ZvZdJ1Ih*j}rO9e- zHE*>P{d?3xV)O3X@6^tcC!1wr7OPTC)(^Zeh8L^1=h zmV7IFGJSZ0mmgV!dsnr$N7-5p;a`#VSG*={5*Mh=;VSMbzD%+gtNU{N*@da8gTAi9 z0*2>z!h^_LsZ;e^uCvM8%F(3ke7=78n#K4Dtl{oIRR8HZ654^O z=9;veJlVb1aq=v7^&2fU?#d)|PnFL3GuZmIMv*K0?+>%*#~Lz9^XE>wpUijP(NC@v zkOHYe{Y1$UwG?1^VYwBMn6t{?{ev<*^1!Es6ovo6W>0m;6pNf zwKH#s5I=>DWf}1mOS}vX{5v>`)jd)|fZ-i7KqdQYYeY=pmjX!h10li>u!PACB+s>6Kp zYVJV4a5{wWVwc?ut(~%iRr>k=B`tpEXrC=G@`N z0hW17`QTGlhtr6C>9?hihdzGk<=s0PgqZ-^?1i8K`<*r zRqAsE>^$hNo1Xh&(SJl1XEKZmVHFKLt#cu@;whzWQX!>4^fLAn>4UT^7nxsX_o*YT zvjZs`vkl}OS$}0eeKlRMB9Z&BdN?PopDU-YM}nus-V`BfKVmVL5t!%H=PdMKi$BX= zg_a{lp7uv+Qqc4ld}`h%>X(r-V~nFRsZM-&!@Iv%B%JH`;;PoQT#lWsipIh$7mB7# zMu+LRUfx}j!)|K<1}*G6`D{?d$naBo0hB?vsmPu#`fiLA&Cd|cd};wdT2 zi+Xx)Wh-1~6nP;37-{!WnsJy_H0YSHcO+v)=}<<8pS)kL@^~9x;HPs>`o%Z?R54WQ z6W{V!+gf}atV2Z-uHn-QY+!r_PnH7c`ganeD~Rd)nw1{){^t+HVCYOA6Q~9fG+2O3 zaliYd8c1^k#SI>qpi93UFiyWsD!f=0SE{1*VTwffO!Z02XQk+=ll5F`us-u)-$NbZ z0z6k74X^p0zi>~a;dsg{0UJIe%9{qoj~u=*h5Q8ZRT-L zUq%#8wPM`)W9@td`h;he32c9?#dwi!$LH(beaX8au0rlZ1NEJPBNjX33sG^Jw#u%> zhjcq>3w1|_)Zcjs8RAN5VLCJ2tsKb#WBMj-WX6}|sH*pTZE z{>z4o63=ar>M6U;E+NCX6;7YoR#J*UYk4C4W(B+)l{1SwOS5tExhYaa@VDsr>0Qi#^+syZW2HAbW1Pn_6E0LiBjJfHC97?7 z?T4YEYZz&##5}J(HONj|$8JNZN~Yw}d9!Fv~g= zxN2J68P`c1e(~_r%7F~Nj%01d(q?Gjw!Ud+kxK3SzOxt4&Wu~uNXP$uM|c}y|NfY} zDvOEPx0T);1$WFi9{;ywOZo!9QE?C5=ia$|k$M$YJM-*hPEbrHyz46p+vj?-_-`MB zYW0qmnlgT>JqhxM5w*IZtp$z3B=Vo1Be#u-Y&3&Pm&p;l*N`|0@cHSt%s0d>yfH7- z=7<0&BPB*45RVwq&?e}x`}qx`OlsPGtz(b)Z!-kwxs2=(7k%vle0r4SL{XEypl0H=>{O8EAH;&Se=Lc$o&5ov7QxjV7L0wfV;XtQK{j5Htg| zs~d^}=H?a2Cgs3qia@cFvNKLqo3PQPTNN zX3ju=?XF&#mfW^~CBbVFpnJ9^9f7^~ll*_`7ECU{Qu|K5nMENmKW~pYNxQb-KYB%0 zs`4bz1Bu5z&c-fSVrMD45XjcyEr)XvHGe+%CW0;BJW@PAGqB0Y{*9isp6kgB!sr@Qg2KPX#x z@8Gm{h5mAirX~)j9%=q}-Pu6KrHqaY7ysex{X52p1nW+NvlEYa-Yt>V`fuOxbZ^d` z!Yv1!Ldh4GMtw&JJ*f3l`Xz2cTg}6Lxg{+NX~sIDZ%M(to-fe7dVSZLalc~bFYbkQ zQ9@9)&g4?q4-#tl!rKiwN}n<3e6!VF{$aiPq{mu%NHY%%*L{gM?uPGbg`HDZ%M|m> z8TS~GPONs^dyYsl{tVqTAmA)cTDe+Q4oD))GJpCh4)}5JrO--53=|5xr{H(nd=Nbx z=$Eu{*Z}QOow^*Q9BQ^nH~7c!@A$B*WwPdICp3~oxJt|Ey&!h`>iZeH7LxP7d%TLZ zD6FW-C-HNZ<*%^q=~(fEAeFV=Ic47a8orx~{VU=Bo`A>NS$OpA;q00mkB+a;gn&gS z!4-f0-&>65E&s?Rt&Q+6&&dde>*T>V?PQIl0McuK_u`a|0tv9#P<9R^_&-TI2!?G! zgg@w-!4p$YpU5&mA!wJ@dgP)2FE9Q8iDfnOQ74RFEl_8xaiZGqV0&kBkHXDX7Cn=3 zPw1&baDba=t5dnvf~r-vrhZ*Ab!Wr(kVU^k6iXhjYh_gt<<{@E= zet0e|%-5Am2Y%Rmed?0gWw4=k7J;sZI`+LHyZ`&kzji?sb_wJlcjZhn8QAwyjg!xo zp+mR=5WLxX7|Q>*o0R+UuZ!d#(|8E`Y@=kQZqSyEwS!{{MGky*u66yYVFjss*SL{t z-0R;ZKdSL|{5t+7my4_PKN4zBuHMv;Op6}b`+QeJi)u$&>aJq*g1qS^^?_LCebc5= z9@(9h*I6@?W|<+G{T)~HJ@3}ssBte>#5;$S1XDHVD+X9H5oJrCj3^!q&rLgCNDyEm z4DFsXtHd15lxd9gw+x6GS~CIOOZ@mA#pm)eD+6;CYu68B-(S_6xt2X*J-TF+BNw_r zDeh)DZQ7Z$^n0%&+*_shIiuDs^Z{mM2=o7*n^CN~XCrGCRyqgG;t;=0o@Fch2w3dWh&b=AF(h7Y!Fmc!&${F`&I=>JS9+$_Ecp-O#)!Ax5aXP)iBGL{B+2@Z*zr#6~YZx%MEU2?<{SU zpr+G(u2rdGLUVt+SAPm3Z!hNOA6xBZFO$|j7~_~Fak55YpE*`XB0!g^&)QzzpEp<7 ztxo-aT_pq~en7tq{zzpK*JPw?_J)yv1&e(P5wmBz>Sa!i=qf*{#2nfyh`Jt-xblGt zdH-0Q+V*|tKf?ep!wb+ zzS!G;R|cK#?)<29ac`l|&@6a?DHr$Sjoi(3!CUhXcq&>IxRi@}*8X<~U9WhP7$@2K zE_^Aj?A}Ox5OJt5GYUssOb?gz~^SdaGf>{n3=mL9m@UA}j-$AT%TJEiZ!%dN z%?k6@QL*QE@4v@a*HMtmq3m7PAN$O_E4p>lqrH~g&v@Oe)rp-T!E;p>U;J_Hq>JP8 z+$_8N9b?oRZlXBfimskQqG~nExT>6Dz;3q^Qy$Sl-lbzh?se+4?ZUZJB zb!x}GYUfXO%!sEom|WM!RqU5%!Uc1Gq+RKo;8uD5HIZ36?Q_Y&KOsx#3KUfpannW` zp1_QRaN|G-F)%sQs75)E=D4u763 zK5w!b@Ekbo?KFL-+Lqj)SxjiCiMH*(Hska$e2KW<^<&`S8XmVWIH*?m$YEPe@^Sra z(ecK_woe?5^`!tLM_kW&V((q5f0ybUmBd{(-hdn6Ew%TUd_pN!%n&PF3n*Q=Jo`f7 z>h}_?V-OXO0$ltBz!wf{9pu-x)8?(>*ki@A?``T9I^4|!QBzVbM&x7yzr-3Js5@3G z>N={2#Z_}iU2N^PoH4-e5`OYbj{RKgb9^5JDtsVDbWhIlrt|iZ1u1d*7bM_e=9jvh zI7VZ3ZyOk-W@ThtW2Zd&e4Zwwzt{5*Vp8(C!R0B>KRsWxP*C3BZSzp_8m-5m+a`0O z{~s&Q!!NPX`1@8|$vix21sRW@pb(!u`T06SNx)z4=fkN*`2q&Kq-ux&I~9<3 zJTF)K=ACKp;iVaCT>W3g1l|`zTd}iTVA7A!$(Fgvx4kTbu49$PG}U;&Qs!(scMfs| z!jqT}*T-{D?oxyC{l;3{65$#~3Sbv7#3GbSrjhFuIZ>ZKK64Z&&MF z)^O=Pb}>t{-aoXh-}l6W+cQf)c9j2}*uBFcodV6+t>x+~GG)Kby<}?7J4CBwjhp4} zmT&yJH|V>;fbk@p9@)zL>pznoK2=PAGRgVMlHrW9+nldeXU&$FGNI{#({5vI^wj1T zkMRK32_M?z=ZErD`$z0cCqDMxgz+pWa~~-Rw-&EXlma;4E^>*LP8qSgEo2$GW{b3d zPL(}LQ{H*C-VOS3Dgak2q!k_Lm1iWl^z*EBAIW$u2!^xPs3oyd?<_UFFQwdh#@AU5 z%9PaTPfMIfd`?7WIP>p*ONsq9YYHkjfsenUILqIG&~uJVe-{c5N2#%uTalX76Db{6 zLJr+#6h$b_Spct^Hh@dCXc0t9n83OK0=Mu+?aMI>EazGqf237CKfmtjuS$U1*$ni>;GK~PtIIEIuP#=xoC6U6&^FeJgRU}a5fCAL{wR3g5b#E)ibE3$ zUKd_ma5WwH$%WVW)^QH@SY2=Y#%xc}#@o(D@qdB}{~+$Dg2+rVf9O{}GCC}n9`t&1 z>$cin^SVk-j{aWW>M##C2h7Jk&Yn1Ne`!)RQ@P%gk>-@|Zh#C$135ZyxR>k#a{z{SV%vZBmYBZG(9q_qw*UrK?!?`4n>GqQlnr_M9 zB7<57&bP$;87gy^ZeunTHhGusv9bc|ix`X= zXP77lh4&Bgh6~x2g%?QJe*UZ6)!_}lLJY*ore8ewC#7u>!Cm_0SRx=7LSSpP^gKT6 z>iql8Mm0^BP*g0-S$RmnPKPdR!VkoVoI`9k4GCBksotQ#qCgMHpmWT^=a!yTUnU*qe;_A2ZK)DaX_ArDy0@j?@kJ z)^*xE?GooS!Fo^U2{h46PpUjta@r)H2*}oUj%Pk$2Ut|Ck0=79> z9|SN{pCfQ=?qjF0NN(%Rn_UwwZK61hW4YP`y~zDnxqdr8PN8tlX2ipRwEX<;Z7;hN z{mPs*%Z76RM-(q}rjIW}SN$L%u;F+Yb~l$C(N6_1l-`(_T*K^ZI$NvXU4!h5Ne_ZA?g{)ey zr?z1Lq$h$YK8(kz4@cEH$+1hf(7ckcKbV7M9Clpl6;K6eRwVWx4dz%T7}{-_Qz0ZM z;ay9$p9Pu9G{AKl$1V9zPYLp@tSZ=jHB)wzcW@;1f!g~z zmFftzwI3ZU;!WEkXyy?SvUGg7gOJ!nLc=9}HR7jdoM9X6c$I5fM}-o>PdE+~JShNA zoBsf&-jp@x5w)31Xry^}QMI^G#EdS%nM-bh?-ZB4bEl4VN^Q>J$%ko-(XF`jy7$rP z<|A2}T4lHWUm!qwUzP%E9kO88E4;LN(5bRa;ij*&6;dG}(N*CkxXOT~*+Mq+ zV>yu#e;(Ir4@M3JRdfCbu~=K?#~zRY&QXI!G8sAtMMkji3HAXap&fTN`XKBTfQ0(_{vIcG?ieGrX1DBz0Ehskif z0P917J=S?8(p^*OgC+xLeJpK=h=p6b`&Y9eI$Kt`$G?^xG4dqF)@tzx#D0yF8i9pg zn*<1K@BlbuCIwyR0a~>c6a--?Ka${>YlZxp6@XSM6i##(-zTS@Mglm_-6w1_6Jegk zcxmJntn`D4E~ncuh*@~Dp;a$~X1x@Er5V#QUStr;12?O%qD`< zP%B-6;^Uj<^Rg6B|$BbMtVC^|X1ovrF&b)+~jfcPfH!xjH=Hm)uy@RRk1jzRL0QO- zn+2kqOot_wv(r;khoeJC5E;7cYsNo&vn;a;M9HDAmuW6pX@NCsI6x$oS?b(PS0xJPtsC--1^_fA+-lb_6zi_QTpc{uG6hq0ZIZ z?Se1GBT@DWn^AqO*E2lXL;Z^;BHsC~s~SBH7aW*baJ1Usyj#<`jZP3*i6wjE`tm$- zCJHgjizPvrvIF~D+Dh-@??1grBL8%>C`(1s2UVlbj!q(|4Zk08XxBnMkwhYV`pv9S zNX%NoE1;WLeY%3aXXLPCq4GLA`s1j${XCC4POfGnwCLpDIOK+RXsy)&uA*HD&|eTh(+7pljJrWLHgZ)=_-bl5zJvLG2@_U^P`U1I7MpxVpg|RwTwkL6hIw?V>n^mqP-N|vo6Ep3Q6te#!k=W^~1ONo9~@5qv(k>20+)umoF_GmKxbNYzys+VKLyT{7P zlXAo-hRllFql9lq6&Do=r4Kx+8fuz<@Vaf!;<^9yVAHXJKy6j$Gusi<72l?_c^1D1 zKiZ7AS^=ynRbDrmqn#nm0*wmcKnAT>`HqWZ>(u#v!N9{n${?8**!`LG?jq1=hjd?PYZ z*aI!3=aWt{h)|Hqc|mgB>!tWV-j)|v_EIIeHN`AjXCTpShE?bs1Fs%b5T1^1-M6I! zen-7<#wJ_g%ZEbGAQMKH4+?U|s}=Egg_*`#Hq}3%-_1AW=8%hQTyZ$O^OtHcne@67wFDDJVjKym*-Bc&L4f4@Av7ypcX6qSVT>4l7S(?6Yry)___=33 zxz1s>XVSNX>Wut0ajES7kwZ<>wnrwD6VzgsJUmNE9ec;!C$l>iia9o%(Hc4@tFw*Q z+hPL6h2n1A|5U<95usP06d6&Zes}D|CnzVJ;7x%j^ScaY?T-6Dz3Lr3{78=Nz~rG> zRe2HEn@9R_5`0iD1jqHMOE9g3!bwIUaGn}9>&Zww5F+t(X_J_I!9(l`4ctpRh{_vwr?NqO~84)R_6r#}ku{m@p0^fT`~eb7Em z(S4bpP39@{+Y?kFl!8Kr>Tz+aCy$z#I*jO+2cBQQ@F*AfLS__7iWDIdp8bv#>^tAo z+H!ewROXDpL8G(iIap8doPp~UCC^Q3WFQwQ@H`Dn`OxGbM$F`lV2eflWNS{f;rZqB zr0S*iXH5$l%M5TItrv_bz3>bA{K`yh^BY_E=QlRIOtn3u;(zrqeKxE0Gfq(PE^#+H zQ{v-wD(=^u@Z{1>G&lX0POQ36p~qH@T9xT%bG3mAs^p@B%W@OkU zN=`6fIZnZN+!M%o+D`uV6B_MdP1`Uut~1GszOvhY`>0>iup^<-zJ4l<1x0{2eo6aq zlFzMQ)07BjydPrFz3PAocpfBOxCU_6edTkoB_1$=?ob*L&8K?U0h-cZgk9@2GHzYp zz!Q5;cAS5Z@!`<}Dl@-ck}`2n74fQ*K6(B8DY>9} z_arae>!RZ$w+Y`H0Q-VRowd5jiV3y&1Q-~ZEd95O42-IKMjr4{EOTrfo9x$x^Et0o zM`)?C9^$V3`Bt3oaxEU`0fQJV8HtO#|5a>bynuJ2|08tSH#p;%pbz~jQ@y~0?xg~P7Wmf4b&;n1LSY~js3GP1D}92B;@MF6b9&3XygOC#?K@q_OCK=!|0JT}iE0xcj?kNBV7Z9;dfq=XA!LOos ze=@G0-Nz~xmfeEL6p!kYx0~4O`?pmA9YR75?d+Vt_RC)kHXlP35NHPK#MUa zQ*+T5%vYCw_SNvq?BHzhhTAE#!Dvv#J);Y1U~PULP^LkbsfkdTT9?Rd{yc z)1I8mz83SrBg$RFQkr6!wqBxO0i@kOvh4@pnbZHWNs1ab64D=haTyd+TI0w2A>>r_bk5dLfqY%wx^xSs3$i-H~KE_ zB&6;!XUp#GVIFTjOA1)KKC*zM@M-d32CvVbFl{tQ_-x60stNv42D)owvk3IG1Zn?o z;`FDcmy4?5ZQH~*mSu4llS|odS>5Y%ABq2N-j-2pQ27VZl%Zs4iY)hm~ z0_vo3;JgMYY+OkZ9VuQt%LrcL+n1-+1VDff%`Rmz=`}kbX4&tAC`sA zu-WEjwa%NjH`X-;>?MnDWQ-6XQlh#ao}Kr}x(+z}X1BeB5={`1)=~A_-_s{gHfmX(M^;u7CJjx#HlJ!7rK{AE|B_B$Cjhq7?C2)0Fc`pH_0 zTK#uXR&$e)?sqPJindBI*xB+RJ#xnN1#2o|tM zif{OfBG5*SZx>Bl>+DlPgIgC>f1c3y$qqj4cX)@%+A!T-em}fugbc@XQ2B0Np7b>| z#%tyZ->EAyv9ZdIKQ_ew@V~fWr&B(#;aWH~JH)HP?K(Yt{$vIXU^0mqRLoQBE1M$t zW>jwNH;(?WEJ~ptc+aZAxxqt@)J;;n%Z|j>*IzC+Y56r+uhw3$119%us!YXlQxLC8 z`)pG@Hl9y)%GfSMnO1ikjwZ>E<;pE*Wl1{-=E8Cs^7BKG*nyaEgWc^S^*0@P(6|;; zKS7S-JjespaYII;J22B6f)EhGx!D+(ahqVA6UApWTFK{W!`dZ_o5r{XwEwV3<6 znGsD$2kRUc`0Y5D5f*^wkAx{V4S3iWo&t&0uIwy*rRcgW(pD$0w)dH5XBH}-dR4vGlB#i-vkz&B+4&davJOoIIbV}Gi*BFV3uw^Xt9jVZ!>X2q-5 zU3HVD6gdMezgQ{EB!yttt}B2|6@eQzO|WlbykvR833@Fk0jTT$WK`RC|J)zP*}d6HS~+lqO(kAmM%f_`2zZ zC)Onwb!u5(FKOI(n!2y4B;lRmrsQSvUrPxuFJ(Dvinm1g^?Xv%y17VEU?64H!sEAL z@ZFm4Q7L#P_taYH6L1qpYuxK3t)hI~m5i-%r-R zp0jyOLYA@h!KeA=6v4cOd-4$b~_EC)TbMA(HA*FNoT*o9KlmA1`o&{T`O6O)(Tu1MR z)1e*f>GNa$?=BlT4Y{{#2~AfxxJ}$`)t#1@s8WSvY4P^2akn(cE+T}s2Z>k)+<=3|Z zO2q4-{pH%#8u46KF2Im#TxkM8TCjT(Ok&ut{RVRw_BWE;2B6tkTd5CQ?86BZnJfLK zGr(bGqzsNS5g>tgfKr_cM7(%&s0FEgg8)qAGOt!x{@p#-DXK!F^*U84yrd^sl^YcK zq$5G1#wzFqJ^Ko=twdd9YK@)GbTLi9!OlQiuTmYcdyI0J`bv(&IAG!cVZF)LBkQ zMazQJi4T{pj`$kM_;u@VE+A5wF85@Qp%AXgC{^UW8jk@#*B5u>;3i$sIN2tCfj{%j z8c`03)DccX4HjXP5plaA0vhpRr#{mb{e(hlDN)t46D8w!7$tLz80DHIubYuaMgz=u-WkeohiLLbN9lDi*st{m0~Ij4&SHT)LGArgJWY6!lvg*8b4 zY`!PqHAJM?vt3m!=^R-0x7%;SNSf?8ghLpYuLH=}#dhOQN%z+@r{GMK--a1I~L|Nh2U!r|RDwpV0gL z8iVu)sRP&QC`tVxQJomgNs#M2;?4&}lWB7lAm*Y`4{Rm!d3^RV;M|s^yYbQj61ZMY zi2qYODn&V}NwuI>sy%#+Zv}Tn_Izn4J0_q}rwj@At3ufgy zS^Vww6-$mzZtAujercU2S10f{lJJ4hl_cmTx;3y#9GpM6{Nh$Ak1-zKeB2dyCKtR9 zB?qEgTl43h>K)%#d2w--z(;|7tkkKxfS+TxBmosm5n+vLa<#kr&a*Pj*8S@i&lfh- z@X0NukJ7^DGA2lsL5_xeU9s*bHl>L`53h%vYr`ne{CQunH#Bs*V<1cS2MR0ePP9X( z58Oduo8m`nZSJK!)(kc3DIB~J8`STi^nx_%3Yz?rHt+QPWTD(Z7f1^QWt+d809rx& zWtjaX!yDQ;>CRlyBv?k`dyCW9aw+NpQs7PxBG)tB*Q)cL9de3F_n3(H$xzsrU@?qBIBMRuyvNyp$1n3S9J@UWi8a@ z_KOQuuS;>EQtcO&GzWZo?aJto2Cso{EVrCrI%_Z`Sicp_h*~ry0MPp@dr3JVsJx>L z^sc<3_8n2(FH!77aD2Vwr8?`aCIC`NkR_K2w#^a^02gT9Jzj)kk&eQu8iRFuHeaow z#6F%24XQi z26rD8tZg4yTXd#b8dRSZ{*}@BQoW(+@+Jl{av;r$Ry2FKm9*@*%-9_Nn7X`TNHzJVw=s{1lO3#C;ItdrQ!L_oPF=F>O?$6M znf|U`?&Xp9^p-q?Hy1S14vO!|Z~pz5H9<`46`cC{aVx)cOTj+{ql`2Rb9j+yYGdg5zvf3(GOe zII}zrqsAhxyhrn<_f-k0eXel523npsP8TjIHe5=&tFJl{O6@I;I&)`8h*Y%)^)QhU zTaE;Jq+mx$%I&$$wGSrCQV4AK?S73;jYjJKI5{GjlWfq}>Khf-L1_v~W>CB5XXXZ690`~1nojzD*9HGSqX={@cT;Vdm zO)Lcs-7Rd z)ItJcDZxJG)##(bJpcy@DSm!Gb@vs1TQ!dswhh;B8s@sFpx*|5O;7I9m?I&wMV+6%G(@RNkFZ>^<~>m(p@YN6x~v6a>?m^u-h- z%r}}?qYpFprS_bE*8XT=#7323)z9sl%qaJsNW1M$N zZ6`tLASspu*Pp1-_aP62`!T!$-Y}MjEYgtjcy3%yAYiGGhY6(CVzfp~@h}S&0+1(u zy4)aRufgPKCYi@XmE3hrFn!h^W~gEC_zD0T_jEd0n4m#Uv(G(2iIrEcZacNfYG7!($hS zKTS#Qo(WA zICrTutWsuHLcJBD>^LejTiH1_W$$rtewV(V$K&@`{n4Xz-}iOBUa#ltIm~-&(YLXS zEe4F_*blRf<{L4K&}FuUGM;cWkmiBn77LP|qp!3>j#PE5My_KuesV|U245rR~S?IsXq zfwnifB_w{JPz{o&R8h#y7Iw?c#L1W57OgH@r3?UPh+}T^O-%@+Tc9Wk4ZhwN+4w*W zAW2+c>c2YSD>Nqrq_;^V3ut^H%HT9_2`foaqNCj#_vP|M{0AXqHbvPgl?4+r( zJ_%V7@DAuH(YR_dSu=5}b6-RY$+Ct?Y^^RlX}{+DkRm*AQo9+!Oh)PUgDWT*E1LLE z_mDFXGEDW|>AuVGJ3t%|HZjmTxusC9^^^cu*vgR~X8|`;rLF(h7b+ym!5}IOSnxZn zy3;18y({{J#sUaR8>Il0va5SSymRvyJ1Tl)%$Ws+hsLl-tm#PdQ*pT=|6YALb9WBJ z`Fa5Soum_|YE0N&nFvv7tQX9$7L$lV@tu>S%XQN}JCukmcCY;nRZw!zlBIt5LbSs& zQ>0~ccrpP4IA17V3HGDpzt~R^IqG+D_kGLrvK2es zF0FE_$&{d1x2kfNuQK8cl~TXQYfWs~9EBg$-U1CT1TKHRv44QL z{yU%;s^v|wJ%Dg}+W?SXV92V~aZ(HjR-#uN)l|fUn4k^4kQrwav@06&D};DJ4;~Ub zPyh}sYcX)|03!76MM9rcc4;)wuuT7;epj~m$@MkLr0TK$BhXKd5$)B9BXtH!O?htC zuD{rCruVuQk1hp01B9Kq79rt;KY?RcO&0D4X*RgKQpES^Lh}#6x#eAfI-RBL z>@NyGK`3aX2SbpQ{Zd1CqzdYl`CeCA7kk(dKe@||q&AH=_-dk&wPb2?Dg>PVEeXE? zf|HX|*drJX?+^;qrSt5r`}+Jn4anIn4n;8Oii42IeWpkeQ5il{=%M8V{KWp+jPovE zpl{oc#@7VB;s8=xev4EQEdD-Z3BcoMh67Sq5J3};URcAShBy$+;d6`#ER*Z?nw%rs zZ0&BGG`R(r|DHSM+)B%Np3X&6|LAFz>ItIfZ*Z2EQ({EgOle%okJmSE(}!r61C{F2?-dTO&4*7>)L|Z%I~B%U2NF-lU%}A@E-$e&Ch^d zJL2kv52emDs40&mak;*8`jAlTB(=-c^ghMJmus^J zYsxu!OCR!`goMZ<;Le|H;?(y7Us`uSf4e#kxb{M^1uqU1tVVl1cx^8HnAA-?w@zvn zIclG`eD>B$+9wpSKK0s0^Qxo-;Mw)8+9^_$+6}0x`Jf#*RXzUfumSquW8!XN)G{4l zTZEb~)@xg9e#Zd$$cZ;QX5Tkul^@ip`(Uw_JbPkx8#lm_{XOb~Nz>=k=(j$z2lJij zpOA*+#??Q%C%vn7_x)tQZYR~7n&X=;%W{`<#o~%~YP{|5Z_G8DkROFW?bD*!1UxU@ z-b)!x-{WZ zGIBDf1w#;*2=CfiIpf4j@#M76qDT!q)W9yWf;T*%G8W2W%us@GC%{CEDFpk312dv94!gHj(lEFW51hN_MfTZ^9XvQ^VI|eXznG?!cZFO|+ z#^t=`o?iOwsi@F*vG{#|RKqXr++JsT|1+Q)bAL{MCNZH1cc=1Zf7~A(ISPAI>0F(7 ziJ#IO{4wTl8YGg>;5u$nqPX8|a*N**w?%`>WNtbQ(tWl=2^#08dRFk^z4-m9xCqH0soW163f4gU^FHLoi+VZupK#smbGaOoEqGN5hk!+*>U+ zN$Ew+Svj|Ks8LJ8>yq;1_hqLVH!vwJpDkR1-z9^^#9sBDU*xYJn!;Z6ldH>Vd&xdenA714* zj55zlmAyf-%w_*L>Wxs~%7lXu*fS>WYl0gfo;Yk_R=C@vMV%>}N)Y=j5P+#S2Pp$) zWgGp@yXUTExclsSO3taW}2V`{7V{XC#$;zl0|KZlzSdIm40kF7LBSCO`?{6!@sUZ^@=CdK{ z`J8>c<3YcHdD(NBzFTtjR~v~9>xa927Ts=rh;pkminP)Hni7QGh`&#twKIKXZv6O@ z7?$uPSw3DtgNGk_a&3j?bSamHM_M7hy{^5fDpx}!Kysi7AmQH?cE*)xwsc_X(mg5FYtu{ZYBpNjKcQ~w{LJO7~cqL_t9L% zLT@-ueg8IedMyW**60ZM$PNyBya1MHkbn1nFb3>aWh^wPHt-%ONApJO#Y-0xx+LE(j9bO5|Q@ zn7fDeUrC5RpVh+>6g(s_)mhB>{Hy)mmN}RISQ$rcR4SUe@krWjcP<&*UY1jZIf`o^ zy_&E+iq}O&>8>R@3PapxLulbk&tTL*+yDc`%(h0?HBp=IIlGOy_NK*U^$`(6rXcxm zA4^z0tQ8&Ke-6aT@2md?M((j%KR-9;1e%Q<8!zd62a@VWt_JOx{Uo3-Ch|uzD66#DY=jn0cuH`P>%bjmpvu*#ZSG}f%> zOss89y9U||adyF{9+OreKMF!hIGA^mghS;=!Fa+N_bk~QXwtF&v~pqi$4hnW$@@^q zAiMlIec(`^&j*7OxLfWAWbV&@>%9NGoNXqwzF(|q*Afqxd~}lf@vF!)uR15rc{Tc| zh~h8X)GBf3sSH4s|}9CaKFO@=Ysv!P2CvO|iMf`4rmRzq{-=~U8!?Be-2ZN6Q@|4yP zBVnLVog@mN2V?-Ae=(}xHVopnD0K#Kezn#Ab`1pZ{}EEz7=ZRhHM_d$HWdv*^i&@c zdp&(xodG^QqvA4KzO-sE?K7*axosz?Sw0{QLAGfov0EL3IUf0WP&)HbS+xkA7gUo3*Qg zzu2d`UvJ?xs53?(^$R^4LSxjUtDU#?9?m}GtC@}FUQnp2K*8)(CZm0`PHMNiQ@GlL zZuS;1ENFI2FFiRG9USl7N35F05QPNOo%?0IBl*0kWgEonQzC~+dN*;PUq$RiZ>+6~ z)8BjH(=J=#tP1{yN$QivadzP??I{v1r+!e^gpJE@Z`@fmr*yWF#+dDGmS>jZp*ee` z4Ff0(n;ea@)xe?!91Lkuvo7_^+g0`<|% zotwn0Fw3V5WIq(}SB&rYPyHD6@xvc{<5zMagUTy)I6BxoY@RkWxj?I2=i2B^uDa*( zdp>MT4^n(9Y?}|Agh^5Z%2C)P7tDH-|EF}0izz)4ND!_36GgiI!KYyFKu)bZL3j(71#G%BuC#(4|#xF}2{kEM+65 z;HO^sJvfs+3JCQy>GP3tTM01q8t^e?XZ5Zj)ovvyx#*gjM*Q+(QSJ8k$X(0U-oa_n zwwI@fAuH_$h<={8VC13{yL!kKT>R@tr4V;-)DIW8 z(y1;n)Y$wt-`|O~J#&srN{LI15MxMUfSu!1xFWKx@jMKv=n8I}^RAZXYQB|z9Rmh_ z=wI56kr>#UWJ=E`-yvLr{{Bz*^k;N4rd8S+sQ*k}^}TEaWg)3>h=Hi?bI{oOKf#07 zZwvxMs;k1}iGPf}s8O^Z{J^k!{_yU2bGAn_Jwa)whl)mS){x{l2whKq{l=H81GU>T z@rok5I_GlugGC5U{N)Egj}W&_;c7rZIFaq3vZUS+^%0TcZo^u$r_w>&*xdT&rzYOd zBwWTzv}O4co~>GwH(k*CgL1b|OkOhPb?TP8T(cG!YJ4f(XcsX465Gch9L!;>3bnh+ zEj%E){@AZWljF?pzhpOxcqviNff3F*`d7F<6e-BW)W_|J|C?xZK+FbQo!UlnTw>dI zZa-MU4&`ob?=1QGN4ozq^rgo1$1Lt_JR$uKWJ4{@ia1IyPoHb)zPNT_G67HG@})j= zR8fJj-OUcA+7-=2jjLX_&|lu`EJrV*plJ~%nFl|v7+PzWN`$Gn< z!*VgeeoQ`0TeDo-)PHAqJbS2jG$@^DQ2y$AYrJJQ#Aq3h=O)LgX0>#gI8gH3v#(M*rfvNg8tvT@F(>e+@k<|`pn}skH39)u z8m;O&WV)(%QETVEyg%^7`4?g|RY!*|+Sbq#;*{e!HJ$mR5XU{0D;-n!*rdz_gA;(h zG6sxDm0xgIs`KuNuS)cg-gzwXw}dC~sIXT#hbH(gW=Dffb#dVJ1OhT?%i`_H*2!Vt zKi|x19hctqOEr#bQn?r2;P>NF-anpfFd$f3S^{9p3q((mvU?5_>Gc+0-H^<)!yRi7 zZrft*cQ7;NvKh3aqZRrc*={Y(!8I?)uO+*>sXQSu1M?9fe*4%wKj;n%+a?)bNN0J_ z{N(c`k@_W5`J6W=;)y)0aUY{>7H#UDj|e{qiJ}TWOwklJee%n3fgDQgaHc(AK<)t; zO&(Rt&aZNIdLIV{u$c7Dy=b4dK@nC0p*YztcHymN@CV2)r(OI}^ga8Pl+Oi@=+}ev z;O6*WS52NBIsYMMaCXGrN^~m|5~Lth*s4vfkspq=u1q=x3=ck`v7tcG^6L}qDy{Up z+NVbBYjt9Ho=Cr`Ie)CaI|kujr;je&E!vr?upc{i1tU6uK~$x7{fuZgML@@A`^4+7 zV4ZqQ;sVi=W`UrmQV(ZX#t9a1o=T7?7Q-yd9y~AQjJOU6i9>ge;ZPc$iq9Mis{E|){Fjs#90lQWn}x4_P47pF=R)w4l9%3^gH@Z?`VBq;wdEjNm2JpiekS`xO zjt0Sa!Yc-`O|SP{{VF24({Pyd{;lLkg_!h4vLiGMqiq-v?$GwEC-oNKnfP|}oej#4 zM!m+)`Yx2h(#NpeU75PLeW~B;d->^Fy(pHul!0X+N=Hik9Yonta3JFe`yLmiy+_~Z zR(Z$p^QX+qqSFr>riczb`*-zcdn*p6+?09vCc3rJu1}fUj-rZQD+&+$`yl4?q_|Yq zA!@ep{>g2Dh0v6$rnh)qoW5t!c3jJj_R^Prhuc-d?L{RO|8*a3oM1mluT9&uwXCWe zrj#D*Yu#8p_j+EI4uq@RB{H8*;|S6vLtR_C{sp2ZsTkFNXQUmrw2e}0wnw>I__o;=zRrnTCp zb@j0MEujDb97;ieOb71gkjCb;T^AJ2ZIiGda4nGA*AXRvhIEMz44w^mmC<0E%F3vK z2Awyx6XkA_C-!sjfH9w}`^>ldWk|0=c;Fm-aN{1mt<6ysVk$f9wKQhrKat=v1T)u8 z4`h$*T;1RrtCBdc^ot8e7-?p$Ijv?9k4WRE+$$%o`Aqc|s)q9=YtTYncxz}# z-RT!(VWl@#dxHGht@K|C9w)`ZdF@_tfy>83SZ*dO$-(FWxGojY%Ie)!8@;uUCWr!t z-(8qN8w5%w55WWF+iG4SJBJ~4E*@5vXM+;w3+B%#?_o4HXtowrU+`X8`D|ccEsRq-CM^l!f85X`) z;IsGst{3h=ZgBD?LL?ZXvOsvy7#8J=3nu__3{Em@u973;Dm`^|Q-HiUT6b7)ANA)s zvub1cFKq43wws`XN7;Mem+2t=cClk;EyinM zs2VarXS6~>QdZ=L<@UYPK)D8?fza{874r|Yj>~BsKhbl;+nT4(zH+|0bgn96&?PKH zSiM9~h+~XT#J*FFn`UOl|AJurO8&e!syrvP3A+-NC;KZAHzjY`?z$4*9`GD4k`|BF zh+SykDgH++oudTHxK|Z~#2ol3QRgblgKGMau|B%Qc2*26A@p#p@L|E*fxOyK$+&e} ziwkjU6>q3^8`$WpiuHe&yV2M3cpYWw(E=W_Z&U#>csN8yDUKlzoyfsR%= zql?Hu6JuD%u&{UoJR_o;!l`3)n2|6F{RLj?cMQ9vx}vdBJ4)h1!6d9 zwvb%^CD_RQ>O;6;5Z&xWTwd%0WIr`$-3FWZ3&oP2Ani2~_jC3}3%o^ITkAP!Jv_x1 ziey^-FOn9JeKMJ7QM-dPh zF^sax%NR3;K?lh4j6?yNka z=Bh{xdx+u`=TcjcA@2AELA*8G?3DSM6LMSOp7tyfQK|H16Ag|!-_Ga_PT7d6TaBTX zaMRSDns7kzN1rek4X2pWt9=Q24v$2*EKU}#_ChopO)wv}!XVvtL8gxb8rPxC=y$1exg_J_s40l11~&8$;eh#R|n>;P!hj zLpYf1ZSi6ZgiEPOcI6sdBSr13J};lS(cZ*4OU2ZUnj?7`i=RTOm6(BP5nq@~^&8pF zyR~qgT;ra}&r|(1<7K-Nde491;%8^4hm#^}eyg=hFRzKdercB`G?-R9_RRCkYHXK@ z5$pc|Vc3ddp(iq~>*e2er>V^NdHpGQ+{PC&VlzqbEuJtR)BB_ewvPG;L5EvBE8~%)s=KDYv=m|5V=A7 z9$BPx1m--nXL!vG93R(oY}|?x*%v#n-bbH~3L){TKMPBMtC*vlkG9nybwmU)&M#jJ ztv!|9x~mLj8^*AOV*}B*cUyS=HZM~j4X!MTS;e^jc=N0gzS1jW*9C^!<>@)uRZADvh`K3JW-PinB*ieD*t+U7+wxSZp~X>HVu&)tyYIEjh^myp;gJ z-w!?r9(}Z}gmHJ88mwT!KO{-b$mw#*6?*vY?^efEh$ZxBDq67kwC zlB?LM6P+^F@}PgFY6V2w!GxrfBZCuk4hcJE(8;QPS`z~*Dnd^N9&-AK2Xn1^gl~ie zMeR6%1BwKs$9_ayX?l}7AH%hbMsc>@Y`}sBt=@Rj7r&HSqaL>%TZ$&d>i6)G|j0bS3WoEmG%vdy>Cp#yTN4Kh%m|i??DE69Fg3lXS zr_qukfRt8^z3crPtW9eh;%;j#x3=a%Wwke!g+pAUBb)XaieC025V}u*614*BpJ9GA zw56_?MqXG2QJ_RyWQ8k>xXE~CbC=UosPaausu+~3BXppCd3|zpblA+G7VVQ0#R?2( zB;-=RkKb3cIirIbgot31sAc$x|*t-4s;FD&Mon- ztl0V)NQiL{`BT7BA4UAAcc3xL>HE;$XF^m0m#N7P zCrtUy3_Z4j3|iHx2I+)F9H7$uhyYwU`=)aM4;cZnDmG0|Z>)rHk~(eRDf#WL`taNn9v(n&H#RMn zPur1F)Kj>J?f+T+ReKeQ`xuo)4%z!jsjT= zDqKKv7K)CK%=6S`uotHqh7CJwK7kfp(6ahcxQ|KYf=#Skpf(Qu(%2WIAU0_5ql}A;Tb^ ziy+P{lV^$Yxp<-a{^}`(|1v?XhLS7>%AW~l&_%%^0R3ql$GHVf$mO<&*-7RPe_-iv z(Sb5*z%X)Dp`7BS&^*vtC}f6yTdpDohP-#rZW}X_>-5tzC*{a}6Cbq3Ie*=8#Q+rg z{sCtiydFVX42odj4@&UB%vJ9pu_V%i+q*_v(5EeWgoTl8D(F_L?-y$SvFLZ1r!_Qi zpjN#*NPrw~`0zKE0Nm;=oJPkh{Cvr71oBKd39Q&?V)SViUSeIOD3Z(sb|>Xivuwjk z(V+JhJs|Ch?$AVGUzNS(foYFBa2o4+t2#E{RGe)L zu0L*BIERuXxAu+@BqsfA-6d5p)5Krc+QJemSN(8)5*pkaDcQ=wFG?Ys&`@M`Io~65 zX-w&{>tBPRsE^z4MDOkc1nJA?verVWO227;l!n$yQqMmpvq;;WLp?C{Nh47ioeK70 zp&2>UZ%G3}TLR~H`*`Rc1FC?V1_6D-VpOfB?&fB;%Sp@q2q`=G(8$*Z%#ETzApoYN zaCjFMLqo!O5`g{qZ!xa0>=f<)UwAl0pxZhDjry%#>CX1?W?5L&3jZm##anxACjKQC zfln@57wd4NUD3rzh;yoHdePj9laOqAdiM{@!zkXD%y3k^_Yzdl9|sjpkZkeE7K*o< zQ3Tz1qp|WvsF{LSMK>DQZ2Y)=Ocaj>t6cioVyG9;pr%R!1^D1@z7B=VuHOS-M+_j& zUNqXsvJD*yN>KwqiAyLeXydg|R5*R49{XlL+=CkeWZKnU4iKpMVh7GJ(e5(?hckfh z`CGS*ps>Q-rH*PXo49W?q_1?)=0;Nu_<{?n*nS<;4rRAEfvEi zto07BLl6E{k=VIi2)zNI1?Rg^OsSvKGpqtD+Mjm}2jT}M5W+0f-K)o67#gKEhQ`teim?)W!&KElKZJKf*lPq{f*cnNfrQFX>2|PWH@`stk zg`6}2bXwAhT3UuQbwbwc8umpU&& z4E^VzZWQQaGgf=eV8DoC6alu1d%GCupCkkfr(*MXz|f*~>h7y6sJ)|eyR&r{YD@qE zy(w^D1P%EiS# zRs?8y({e-Xfy0lv_tp}6tl#~6es&0<5aT$xKX{~Fa&!NKn-0QXdC-8iL!tc^aROYB zd~S%2cj6>NAXpc8jB$Vf*4q~uk;(a>|4p(0z+Mf9iVq^443td>hR9k_t?65(nkqRg zK{WGjE}0OOLIJ56#j<_Fe;g=^<^8vBpZjh&B8Z54(PM+nD=2i&9<4lumlt zAX8-vi5}mzn*@)cO+-Mh0KlT2=(D{EMysO1P=6o_XeH$>Geu9s&70if{5|+F;DsZJ z&rwUOX9*jyQxDg!SufW>2cr-=bUY`Wv(NAGnJrH&I8Z%z?oi}f9Q$G(9k6HIVHwWb zM{B!_F3*{ffFy&9+ip4p9%#2^;B`lzkF0h9TuixvQttKT0Mro`K`gnl#FPP*FMnqG zh7;Jlqtkk~K*PZx7S*KsZ(2mJ-`ik6&Pb#0|joGqDz7-P$t5f=TS(B2nc{4y%N(M0J();SPChy z!ACxZA!C>maBE5Y5JWC6Mfr@rrhJ;Y$DjhpUr{fn%w94!U508Cm8>MUGwX)Qgp=)1 zz)++{?B6wsUERGu#11`&z|to1q-SCUC=sJxixGjLPaAOhj3F@!sqJnKSKk$d0U zufTWCm%Fg|Qx?ig<|}%I_j31b?u+iFz*was_q}tcnA3&nTyn)$tBBMM$XQ)$4?Gyv zKcY3IR$?}=zQ=X-71#{vyHot_F{XLpYr9ipiu$M1d|zt))b!Ua3uHxLb#%=L(h_JM zP%;h$L@FClw(TN${5UP1JzLHNi)G?I5Fh?DfM2v;g#o6lm|S2moMP!7j#mSObwUfB zmhAM_O?IcOYYyV@GJSgmw65hD)4yHb^Oxuhac;uF`uO(#ZmG{Ca)f?JakaA~zT4K$ zh88e7(kjkEtZ@vRYdy5hN}V>mOO#z7rUU9DRKp((coP*9P#**SR^0Y~t}Qg*TEqFF zaC|jw0Vsy`{PlxXQyW z>p4ioDw_4_0i-Mak%4#A!yhY&-?bBL%<{%RdQtpY0tBv0F3G3vk%yN)=WVn?VCxa- zgV9IN0y#9ec~5#ce)!IA?&kOPX>6rCKO4%1H3#GHm^@k+CDCR+lhN*G6LwX@=OSXZ zMr@ojn>ZLnOKrBkO|JJoN6vl%cy_X!to6M=9bZ0xNz8S;LQv-1fyBmNa-AhIx#jP_ zlfFKmIm=Xi^MNDJfV~0p%qzOU6ip`eaq5D59aC7^hFK08Pa|!r!%YZ-37Tz`+HR89 z&cwvDL=W^;n=aI%08F$Lcl{DvrJMrDuUrnG5^u(H0hj6P+W$Vso~yG@bEaw z-w!l$d1*p7rAu#H__^~0A$3D&vbC8TjkJ1tYcLa01O%l2{!~cY%X}fM%@^;enIcUo zRalb*{{UTrb*fzG{9k#1s0g)>b-YiSRW8*ixB2BO?sCDmP=+luD^?{V8x^1yuW|4V z1E%+NUts)~w1ZiuNvwqurVo~mW;pgviR9nzlYDEhzfn7ALY_iz0yJ2i3boOMyrxl;1UMnyYq?}bN;>XKI58c?&!d}_JNA2RZH ziFoqHW3j(q#7_l=L5YN^LO`QNPnAckO3K#KyO;l+#N&wlOON$FFx3+SRebDwc&f|K zNeuNGLla)}8_)=KD0Nz`(oUzBY2C(}jXG_9SI~tj^hM|)>YKh)`E>XCSbs*^xhnQc z#*ax}kGF3QBiGkbSsw7K@`HTa`RTRU^GCO)vb3o?H{wGI1e|}#KABsGWqYPSJSubc zXi$jLbR`RW^*d9uXW2T}maW%#HL<3&?08=D-6Ht*oy*LiSdegr=}&C?*y`1O_6v;o z!UqqBM9+LZ+ko`jum6Sv#~yYQbO9M5%FCkU~UEv-nn~2#`#)rIXY@*PYU3KGxkrVrpcHA`F-O z+Iu@*$=6R5#5R9;Hbl8I#W*uak_`OfL#e*pt@CSXs{(_3o6cqG?HbophmGM;)3vUK z%x7(suCl{cgQa&!p9YFtNTN-q)Qw>R7!D6z$2Pl3N-1XdQN5ML z{UQD*f_IWAY*0}JH(M}DB}jFCW~2gz{5_VvJR$Oys@)vt1woW5sLA}@&^f8}eRsWb zT{DC4-=U$~^Q8me53Kpy=ae2?tagL+ex-3{=*sls&%lAv8LnlSW?zA%jaGUz#Laoy zyb@&ACzl1Cl)BcJmFIV_9+KMbWT6IYN6mZRIz~~vlk+rBGGlS2PnGWy6PiFB42_lG1$BCVw@nwEh=cV)UNAEbEk(-5z!$bd<(bnjd zaEoqg%e4QQDerNWM!s_zpR~j00!S~co$Igeh)4~*kd@3q`aYZfIdpu#?nB-8A2XXb zck<&QvuTr5;`BN&bjC!+0q?XmcKZIdM*qd^=`AldUiRoo9A}MR0(C0oBr~PI`HEz4-}0AU89B zDaV=#otSTaLn~=GFjNb<>5KDdpvc1rQ{7U`#-wS!KaTB}qpkm-F%}Oj*_LEmo8{3` zZ$fFDPm!-OyeWa`*vFIjgL2(wydO-~MlTQOdxWj8gi%>8Q5N$Z4+nJgd>SjzoFiSf zJ^bKYwmwJ;nC5Ym69p3cn^w0%AVsD7tKNb$WOdR|bLk3Iz6tx#uqyl+bqS=9mKG~A zG)^D1O1o|=J=0GU)mR>oUij&D)@7C&5qxmN)P+w zd~37-=M$r#^!uc5f{UrDXeYG|N0eLhBgV3Pwo9R}bn3sU57*#?N}=d+wbWL<5n*Bc zKi2*5Hzxtcq5p8n9~$P3|shXo8#_s#?iRH4wmo7j zUzy8NL#vd~M(hVW;eYs_JOLn)E1({-8a=pk6_vanJkMc?Xz3&yOvO91j|xawr#Zrw zMn&XconB~UCI+ZfR|Jnj4eLUfG1LHQrEqa7`^_IcQeZI}cVv{P-Wd_o{VHcdv-g#S z!KVo{YnFOfL2BLK>5+9OnJW37TLDG!v9=U57YyL{4d>?(oV+7J5z>JZe%MAaTwki` zkB$hN?xq$Lygtp+al4xrT&9sWi28TtpRJ4h@VqX%U9f-ByQnk5+Ole2muLTY_`5pT zhRXfpR}{cW1bQOZh6}=Gv}-=BZhe_Iq?c!X{X>QZ){`C(Xx*+d>7IQ)Eb9*6IGbS< zLf*5Crxlu~mKQ5R=Rao+<016G*!B690b^R@U#(4A@twJ9p9>c%DI}AZdfx906$iJJFJS>32@CfSli{5+^4{NqR;R`elSrkKxqiK8zDN$~eJ*yQ{%iRbdzs zKgRQ%LqG>5@pr$z66ZZdi#A8!`bXc?$RGYtt;6hQ|Ne5D{jwI|n>sgGe&fQOR4ro5 zpTgGTK_u;<51&a3PptiDRb|%;JzCfSC)Us@zJ`{MLKNNO0YQ?5EFt$fQf!>@eg=M}iu zJMN^fPHnyfi1+|;#J;?U2*oLbE<3NXLl!iw0kTqVhXJhWr;S=<9=9%~sHPg2PgU$k z0s2Ml^H7SO3u7QpX7K>>+qd$lBf;GQ$0O)~Y&zY!5vv#@kE?}~8-VO-SDD^CXQx_c zS~~Vb1uQ&X7B8*Z_)*vo$TP=%e#cUCr#FalO^3W&M5PKc{V`lyu&U-%St9#E95do}Nz%^2}SbvT-G9lle2na{s!GQ=` zpurltVlpjo8HK2z-#Q&{#Q>QMrjLueBG2lh;yk}~r&;Oi|F_l_t$x9GB{f3MiBfa_ z44E3gFXTs{7I5JETpT$=?aG)8{~Bh#7VIyKz8b9EaV#t1nsK)s7I@LgGJ^9{hWASj zWPO_!S*vg=Re7=F+U;Qp@cP@v0GyaxI0zm5Jz);#=sbIZ%mL6gX+5*Ug=lgDSFUam zi`<vZGADpu;j=a*L-JWzb6f-*N-Yr5Dx~!?Q^l-*#T`GJR1Hd9Af3g7JkK%>{ zJ^GE}`w?vvf(4S`@-er&Jm50dJ0sn}4zlrKBu3oyhV9PBpk&DYM))FZM{^$^VVcpwHbrt<5? zVCZ{R@7#mMQa-F2@y0&Jb$w`I_^c*UE92cp-8l24*{N#EmSA6>Jmu%Ftv|70c$0l4 zA+4<|)BQ>mjn9gw`TAp17zXsl$wm9JaUR#7oZHfXi`92kT#8S#*#HpO3A@C*V;~Qo z*;yko6w(Kff)7bh#IRx+8Od!7$ci0i-Q&sbLRTYMD}L@vyGLO_`5!hjK)uaTxIHF2 zH=v~$(Vy;!j>Y;4pj|0ED6m~@vu&-Z{D!9Yd&i>3ID@twG`DYP87xGs)CHpN15nWt zU+`}HuV=Cdq6;Iw(=s+c79MV!7Ew8Q_yxIz^EIS+vj#)-djXR?!) zOMA9#-e$VrU8J|;q}eQ35Vdth7R?4qa98bj8D^bK{Rj?!xC_rKm( z=)l=4Kgv)D;nkNrwvacLB2}Ta*gL$O*sk9}{%_BIH4VI38?(Li%}sowWT9@nRUk>C zj2H$Gi;WyS5_{?rrAI_YO{PU!CZF{$P!41N{QbBIi9QeC7BN!sSvI`2?iH}I%%3`7 zp;0|w9JIvBI0!7S5UeBt5=e((Br*Ii;y<3RW1)nSov`(ePVqoVG zhQv(Z93ayP?MfZ)L`~3vlFB@#YtTcfXDPsMLtmxzN4dy#d)STd3fp8=Gt`p-d+AwM*gF>#d&);&m+%qtF(R*;h6fAZgeayyVS9J)(#>noEn{8zRZ{xdD zx+^K<)%^9L2#>BMCp!>b91;x3e?_K3ffl>YVW6;HYAmqXO1JmPe|tmPpuO9OL*$8U zx|N_}&>=}F*Cs9@vnqxGEEM7Xy8H+w#hIcQ*VbEiLr<)BrWSK@dkhp5L&_?iaO9i# zE*E^-_!pQo88BpwhC4jo{hL~hWD-QteQi44rqqZ!9@-HO(aOJ@F_J3G^#D|g8hkqE zw%EoPaNLU!O2rOGi9^uc{vLWe2nW(Ool$8S8(!}{cZV8PG8TuQ^MF}%glwRfEo(yQ8EjWJg z-rC59I>Q0!ma8XAMVdq~>{CSiOARnI^dFxyW7=bq4Q*q65Usl|SlQluxvHsMX7|ER zc3rxsVQDqGLiae(U}E361#$k~NRY*4gbkfHX`7 zr;R53oSYb3&An5K1zY^UYdB8_QQs?jZI|`sl+~~cPHJ+Fc9w8 zW#`QgSV&De!u4 zgRC>tj5>Pw>-(Qq`gsL?A8?~y8snUVe^`ZizpM;`K~C`4&0TEz(j=P@aJ}D;eCi7~ zlWuo4rCNR6(`sgI=JHJJydBd>6&)ZG-o{ zo7897a^>BhqQPZY-gX~8Wt`nl8CCf+0}ikQ^(Xc}G05&67+vYcQ=|O={$s$y;I#g! zJfjbXWdfeSBJLSw-+li6(sVzMQfuC%x<6=B&p;|o=20Hk@9(hGFSJ^;Z#h2w^A9ocOt z>-AG``2yic7@|$FV+2FsZjCMmi&vZ2{YM&+v(W zimGqZ2B9!k^}QqmG;WV>%zs3iv0C?SY*cag826Ydx4ymB>r%|;V|sR0Pk1XjiDTRS zHl*B@Ii5kg-UWU}XtgQW;%s-8{RF_C{Y0V`F#nDrBnsl8{|p^SWFY)T5fVo1(V*KT zX(Tvf2R_j0W7*-xAdQ4VrbhBgx6he@gNnMje0NqaL0^Ddj0g{!7ZAR|wGkRwRQQi@ zr6&aiqU7SL4I!Z!9tZlCRoLOdRRunFKA<&d-~?r}CHAhQStt0*k#?pNumv&_5&$_7 zgRjMa?A^i%unriWxRzk*<7U)Q zf0WpssKM8|?dZE8P6GF;)f&lN1qh+jAW|e*DaHVFfiWA>bB!d08!E7Z5@|f)cMP~F zvMUARZ?)IBkC;7KgsnjS7~(Phq((0ZYtHotqOn(AC!NC{fY$k;;Ap-MGm2p0$%;zj zK)$Bsbjv_8wlo08@dRbS``b6~TYHGIJsY?Y6+*1Q0N)che3x0;nMS&Q{q)pcKm8X) zHqhR(SRY)kEM6EnCG%AH6UnpG?weu@L2M|~d?zih+QG&s687Z!b97Sm0Zhu}N zEh)b!Dmwda7k)|2TXYHr4POQhDCMI<2esINyWRCv2IP})B8ISxjW%iIM>xo^G~Yoc z%1-MsJV66{gM_XJ>~L?g-M9L|w)3ukYcA}?m89;fvKARlpH4na30RJJwCE$I$<>FQ z80A9yeErufkXJ~)OoTwsv+1n{ccpmK4%aH|$6uBML#q3LOxac~8-S~BI|~sM;7|-> z6Tb0SoVy=C*Sq=)g>ra8u%hAHyg%6`wXiqdJ5}tvZ6GT{#_$(hB`uH-yZ6^hfj`Pf zu$A_a1u21!uJle28R6H(&Hw_Y>lnZl4eUEhO>6`pTT+KlJt=6VJngMK#sI#e$_Ajd zcllZ{<`gVpz8~g8Hr@>aWQ;Dl5g)ZH0n9bQRIw$u?&3FBnUn&j4#p41umrA&^o>B- zi`rPG;1P;MylC~XPkE$iNSdHlQ4 zt)4H3Up^r*0k*t^yXbrjFjVq!ZDV^N{HW3;b#0H~q4soPa>SlbkX=jrYTWWxwS{lW zam`lZ>Ed);AsieObx56)RW~030hOT_H?8&8i)LXdxW1(=HP zg(AYBEGa~bEkr^LvhOpZ1z9RtldY1nW*PffQ(2?PF8jXkjCpV0e!utg`oqWa&pgj_ zo^zjbUDvrzxxVl*ljjsAD^Hs`05lCo;htTMO6eL$iX!ZF(Yfxo&RoSMsOTN~LKF1Z z@Z0vf=Br`NuKe>a=TU&Bi3v=KzIAn67TZl>RUP!2DJDcw7Adx1===N7lZUD1hZdkjM{`6inEj{C=x(`s~pfDcOqR!qkZ9G>UAW@D#d#vWm^?`coHWt zRY#kmtPynJ{vV9c-g{jPBYN`wegoeI0|$$Xd;d*wvJjC>U!wYSgn{Lz={SKK$NDS%y|fAjNT`{0^rU1rcHW3Sp9ah?&!ssr1~AwDgwrcbWT zwt^f5r^Ua2ncO(rbxtY9^_@v+_IneQ8wzk-pD$Clgy)t{Z-o2Y6~3-d^)Szvl}~>W zqkVHg?imevF}3lHJ2~}^yrVzIf)34a?G8s-B8wO^l4yXzunI_ogv9PNZ1^%lKb?HX zd;C{-66?<$X&Pc^+h*=utEN2#+TM2cEck-tAOCgcVP|u+P9V94OzWN47ugUXcO*;r zrQ~1r74LpC}!%Gw+fNVS0WcfdP8SZBoawKc%#G zZoin03bCB?`(~VO+F|y-`PR z6*t@>gO0qY@@}GVRo+v<@4<@>IC`8D%UQME9e;y#l0})vQjwl!;Wj{|rKLHvR;S^m zG={#BIgnMgV2G#JX<^;oIQLqh$CV69B1AIw6TI|N65Q7U^dxa}g01zHa7#UAXuF=& z{^B(jEGh%MpV?O`7d?iJ8ckuJ%hfpgILZ3=XTcg(RM;cr6oE)oAHjeatyF>LuAjAI zmo4_DtWW;s3F! zVWa&^?1b@a{zpy+i5mRUfQTWs=n5ttT4X0Gb5C_Mq)|N+tBcGNDl6|Ertldl@z2eb z!keQA>ng!{ast4)yyuO!1v{+3ce9o-t>`~L+773IIB~Y#+)Nk2vn@i3p9ZM%$lmgf zUbAiTpCstsW#KU5Uw$Jxt-`hZ;92ledI!RY4c$KCSh`jkYgg@j&_KcF$GZI##N9un zYv0@nU?u@@hlur#pcge#z+Oy1 zWx=#*R)l4dF1NYj`-wh9Wq#EMO=a3{eqMZ5jt_LTs4Gek^HUp@$io0fe#`hQb=OU<^I{oU3+h;whM|Dcr_vh>ShMYEAmP_v*6->njsdUP~MoxI~dDd{?ux90QvDzzPeN3 zTvgP|;`xAD_5QS{U;7WSEHoFbHLF_Udtbc-x4H-at_j&VD(I-hfdA5U;=gol1Bl~k z8MP067X$VC1Smg$neyJgwYQT*sB3;xk^7t867@W6xHK$n|L#Y2PZw_7>uQ)2O3k#!2z~1G1dvB`R zz|KK*i0St1TUL3jzdY(I!T>-?u%>D3C{Imm~IfcdMkSVWO40pMNx5Sg8 zt{`w{YGLtz!vRCR^BrM+0)DD|1Vh(n3SqZTr|8(-lZ`hOa`-62F@5V(`F)=Z8S8#> z8~EGLpt9T<1_bK=;&G96R?HoBvu37& z4qX}(?U<#tl^}its*b3wqINatWz>0g=@1Ovxk)zizouhfQB zTlqYTs`DLH7D;gnUK--B+iTDD*h2)!;p?`Q1Nd(3LXip@1M(cA@r1h~Zfo&!S18dEXZ2SG-6>=yQ4PcVuXIQtiIe(>a zN_N3y<#%Rn+2r*4=GD#JFu$js3G5HjoCkKthR^xc7HSzo(NVu4*FT$+>bWXK3i@+cm| z0s}%2!LX>O&VIgiFZJQ{*oL)x{c2cTKxE!g=`k`WBiccf!5*8u;P_3M)@nde&X5bh6i`RcN3=;AVPO?+EmH`Yo>H_?dN5 z^weHh?EU;esgA>gq1}~MM{bHqbX82zHPWC&Yu*h#&G-Iu;sd1kbapNs#VbjJa0p`M zjflt^{z$WNDMTpI8t={OVPQ4K6~=N6nCCW2-Z5+jxchLZ*W0*k6^asN&y;4CXvb#i zuuDQibe6_~z+&yDQo+A`r_P@Pk^1-I!)s+q7ZTdVKD_E`Iy7XF)4^6pnAslfF86Ct zPLF=4uVF-9C~RZDL@-__XzbmFrf)O#9xNPrN9uFV|&$hBh+j+HGnqhy;W}Z`;}s+ z7K?@QHY1VRlhTFE!S33bYeyM01pqF^Hj8sGN-ag3o0^o;5`Xy8;!4V~8;r+pcd%uR zT@Z-&PMJ_x_4~Q=US-J<32queYG>SFp(g)oX3Uo$DmD;YTVy!}KF&}jMq;Ns2Wk`; z^HH01Tkl_u+KQk6{6A@+;3N58)=T*J%@{f1XphIAQWJHR?oOly67(YTGdoQQ=HFJ{Tz9OGfFmF1N2A#u>Y}NR_;>2bB zyNXwv3vke?im1p*flewUI^r)}Gy)(~zlzzQ^A=(Y#Ys_X`qsr+F(&ijre`t&j+by< z;S1AEzcXE|ar$|Ilw}qtCampeF2u!joX>R?L80ubkE};eA!6`xkrkiU#7xH&V|AuJ z-*9QPWpDouXLUAkHl7T}LRd+*29f(LZ};=c~YKg{%}M9?@kL93D2z0LL~Y zxBH_51Tn~sie;Cgt#JoGJ+UVPcTyf zwHjXvlTNJ5mtmfmPw#MCWInYT*=YxfTop_WqgbXONLgP`PdmbQh!Sr#^R<8kiMbTo z{nua5W66vYEb7qZI2w{e_cD@pgAzQOXZsiYNm{91o&aaMB(Pmkkd;H2>BSE#p#k(N z{C&Q<6#>ehx@E#0f(e7XU7rXVu=|mzyx zU-|;C3ByxOD%~}%MIJ{horAi^M~?*hDTS?hiF{KgZC2%$0T`UK9o?%srKE5TIS~(g zpKPmKz7wkD?CRl(ED(8emgy>@+xc2DUHviiID91yj$O~8kaWcq>41?2y41r+l|C~v zC0La(Qj8&^^m(WGLnGN1t5CX{|1OxZM&VGl+NmJ5_-P69e zf$CC$8@WuC9sUi1MChJ!vdAB0S)7ZELmivEpY0uTjZgw}3@I?C7~10Osh#*+%%vh-klYO4m-D#>`Ew zv()T0%MAYN(=blD%ZH}nV#dv_PIYu|R6-lkc%6|gWn#NF169X&_09M}I2pF70;_FY z{qeAKQ6{anPlH6@xC^m$EHUC^-7`WcCsEo$i0>&a?c_P$c$zAb9~?bgD{dr+B9d=N zK)Z)AbQOlEpdP+)X?FweWkT+?xFzIwHTSN|ifh`glwr`KhX8xrX(!!_famh1`-s1M z;zOs9;QIXTWwoKuAi>e^+~zR)q>8sxje}29V5Z&_w@0y|XqP_~zc%Cl9(3WEKl@xq zdh09z@Sg{O;@VV37QWhNny>BlK0qeCHzN%1g=p6t3=ejsIqUY>x5yq*aRi9t1dZcK z$JT1E?~QAazfU>_86tb$+A0F9Tlw{%D~}F`xf}TEqaQ$KV!3uF%*SjNllbQ+y;Z`* z_fRJv*8~%%2STT$Q`k6{rInL!P3TpEO22prlwI&>?qWOeq)zE6FnWn=J`~_>y%5UN~x;_`5dH1}zxq#L?Q+sPK^6ZbC zkq3!KbxR!`jVep=QD$6O62Asg+eCCzgf1p80NeovjnlAwW#R|ssql`VL8|2rM6VbT zHa04Wq3(?utkeo5sDoRwWqt+8hp6o8=q=0I9{I%x>I+66v^*{mmSuF+kV{5#zG?q> zK)Yi!p-0D^08bhVO^`j#dx^BiHvQXd=!rDIoMN+9Gb4lsJu2XMCg(6Y z2~ibdtiG?Lcv?Ht;W1d_fnf$05GT<<`^qRM1L6t-goRAJj`)T!SEy7AhQq5dTax|I znd#{06IPB~z0vJFC~!Y@_X#nPl;hICPvEU}N$oZM^VKq~*H{WwzF5(a2um+Tj{f5E zYq5tmsO>$*9JFnJ`PyRsMFgZ*B!Fo3eni0Qe+8n^z=R$I$;ClDg#!#7sfaPD@pJiR z2XIGzx53%=XXX=++%?|4u$C_657A@hfP8q2upZmCo{2S+#t%jSQD{2E54ffGAiJgV zd+&hlqeFeCe1rU-nu4?ZKrui7 z;yZkXkkv#Hk3V~K`v54gO?6VR4LQN{@+WlQ{D052e5RN;Vj|t0G|W+1`KcB-CjD4E(H;KRT{k*^U~_L~00i_^w_+ z5Iv#Iprt4ySnTFmMiNi{E81?1?hV@1`GAkZg>)bp25Zzu14$^I!$ZxM$ujgq^h!-746aZki?$x~P4Gf@J0|S-z0z)z_P{~g9 zf_g><^Vh?KNa$BK-y4O_?GuLn4pp&Cxndx4h8j(C^-B1l1S4Q?zKr369~b!lby?}3 zjGlw_gq=_Cn=5Tm=rd^W$=;EU0|;XxgW$#bE&PihTOORwZsqxQF)!BS&5dg)E+jBw zI+_$};G#8ZaT5i+J|KQ&AM4RP^2-)n0J-k$suzI82SldP?uHZ?>HrTm@bR>{aGxiy z%TC0PamO~+$Nd9#a1D*{WwBFqxL;xbfsff|(EL8%E?dBN|2caw`Tc)qJS>5Xj_(n? zrniQqiI53)^9cn*h3OLo_Q`-qhZM%>O8p(o87BNe;2t~dr!rPRAGSSlXZ#2Ql=&vg zK1|&o1pJ&+8PBlQWk%?)fL2qLSKGR+4d^-_4^}yDtz+qcZv=S_0k=QCyZ*rcwCz)x zdT{{?lspPwk0Yt3hFx)i+8%>netK-bjV78zS_^L=G^`qaL|K*R0E8~~rhI8wO&_8)$8 z4J!g{MlltSosYA#E_T+1+~f_+(}q#XguGfnV^h-8dt0C<8bK7GEYh7G3j2U0Iuwvp zVU0ttQA2*PLl`8VfcBC9o$q?UoUc2Aat({FO1$XRUa{J)#h1#*c)-UumbI1G2``v& zu%%IgJPVuP!fv+J>1@La< z^`#10f3aL55;U*9otKwB6+ibpNYTRl!2zkg$H@; zZbRIAP4klSjm-sp&?ef}<&l>vMTgEMKC2lXj10=TyBL0ELRXYKM0%MR``Cr!GnCTo zSE!?CY(A=>J0gPDDV@|e1)CE_AevtRGn?=pHG8RV2=`H#l=anilOg2N{Sm~=s zuK>=MMbX*wnUb!Q@CxxTQ_-G*5NQSd{U;L+^+Yj8$7zyYYSn}Nb(<0aUK_|UpL^IqM z5Zy&B#*aqJ3E#N)b>F?}F~EtPf#an&p)?w90QPMVEZK{hLktCg`4>L(Q^A`tplWL( zDanw8RvI+JKL0*OgJ^d|bv@{H$+VzvyFILQ)cqm{fMZwuzjGX-ly0Ur_73JGhdU=S z4(5&8Itq$_C(Kps0gF2n&O1@u<%3>3avo0h7a`|@`8?7u4#JY-%)V2(yG&|d0`taWZ?k^&#w_KPXOM#Rvexm(o>fegn`;O%IR zD@>!ucHbBVDV=kDAJfPFKGp+6;05N-OQN&>#6;1{3!9kNIG>hQby(5!TYkYY-y`ry ziw&F0i{e~MF$9~X96B)==xdwQ5V7q2*F|;bK5B9?wqz|DW*$W}IC%NnM4lP~41I#x z7YzMeBkIo6lT)N0vuAf>TyAtG8>C#BDeRwV+&bdXdnKw)-#-tg-WIJY^3l>mU|3F9H zZ8v{G{&Tttl zr1JMpT-)hGYOBk#7Fzv1#`K6kZVPfUBR{&C?<^-A?SI`r@C9Gin0{x9pZZ<@1R7gS z6y6T)sqD4B7Y%S3`<4E3=IM!_ezQ3(F43blR`DG7F>uwJ47kebIsGf+d>+ex$mp>g zVpNpIbd=5MiE^nL`D5{1MWyA&6NwF@etjy#W}i9jkP2C8$11u2QG%)7gQ@3+?k#}z z$}k8I>GZgBT10_bLJZg>ILT1H&YZJDIId7uh~IAE+4Q%c|Ouc+gek@iQAw9YZ# zt-3G%rMh*AJH?o8cNdj|5Uasj4gU@oa1E*nq^$3ZosRX@wA+cCb)1A+B{ZrJ%eW`J z-HZR8`91FJ*^BJ!-Jw*SoBIzZ3U2(#iBPs9mfd|hGYbKRYXHpF1s@96=G&ajZtgVj)-oHg@cLdbP*Qw(A9YTr;U~quqM&VP>yv{EYYG zsa@g5hl!=H?K^*=?F;%O-a3y;sn2^prtItMNl{#o1bC)>dQJr*&?7->2 zJR<6UMAc@#kLst51QZm!oOP--VNb~iA_qd{mb1wyDFE0v@fK!hEB)u0gLN{;&z|Ts z`=OFVhpw`I^VyU~GdhUyVq{3@OwZ)=qVTnC`rj{Z?l!0p<<*MrrInuDiJrdnV}1bz zQdS2N9Go}OY`^?h*m zV^;&@23MIt-GIbR6tRu+60)jEmKpC}UZM0DmpiH=6(j&Xz6%NVls?>Ow=S`Q#vbrX N^Ro7(Y!&lI{{vw-HhusA literal 104348 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 Qj)0Oeol9qOwX8z^4_6^M@c;k- diff --git a/core/assets/ui/uiskin.json b/core/assets/ui/uiskin.json index 0b1efbc29e..88cc6975df 100644 --- a/core/assets/ui/uiskin.json +++ b/core/assets/ui/uiskin.json @@ -14,12 +14,11 @@ TintedDrawable: { 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}}, none: {name: white, color: {r: 0, g: 0, b: 0, a: 0}}, - clear-over: {name: white, color: { hex: "#ffd37f82" } }, + clear-over: {name: white, color: { hex: "#ffffff82" } }, clear-down: {name: white, color: { hex: "#ffd37fff" } } }, ButtonStyle: { default: {down: button-down, up: button }, - menu: {up: text-sides, over: text-sides-over, down: text-sides-down}, toggle: {checked: button-down, down: button-down, up: button } }, TextButtonStyle: { diff --git a/core/src/io/anuke/mindustry/content/Recipes.java b/core/src/io/anuke/mindustry/content/Recipes.java index ba60a95e92..2028daebd0 100644 --- a/core/src/io/anuke/mindustry/content/Recipes.java +++ b/core/src/io/anuke/mindustry/content/Recipes.java @@ -43,12 +43,15 @@ public class Recipes implements ContentList{ new Recipe(defense, DefenseBlocks.surgeWallLarge, new ItemStack(Items.surgealloy, 12 * 4)); //projectors - new Recipe(defense, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 50), new ItemStack(Items.silicon, 180)); - new Recipe(defense, DefenseBlocks.overdriveProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); - new Recipe(defense, DefenseBlocks.forceProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); + new Recipe(effect, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 50), new ItemStack(Items.silicon, 180)); + new Recipe(effect, DefenseBlocks.overdriveProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); + new Recipe(effect, DefenseBlocks.forceProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); - //extra blocks - new Recipe(defense, DefenseBlocks.shockMine, new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 25)) + new Recipe(effect, StorageBlocks.unloader, new ItemStack(Items.densealloy, 50), new ItemStack(Items.silicon, 60)); + new Recipe(effect, StorageBlocks.container, new ItemStack(Items.densealloy, 200)); + new Recipe(effect, StorageBlocks.vault, new ItemStack(Items.densealloy, 500), new ItemStack(Items.thorium, 250)); + + new Recipe(effect, DefenseBlocks.shockMine, new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 25)) .setDependencies(Items.blastCompound); //TURRETS @@ -70,11 +73,11 @@ public class Recipes implements ContentList{ new Recipe(distribution, DistributionBlocks.titaniumconveyor, new ItemStack(Items.copper, 2), new ItemStack(Items.titanium, 1)); new Recipe(distribution, DistributionBlocks.phaseConveyor, new ItemStack(Items.phasefabric, 10), new ItemStack(Items.silicon, 15), new ItemStack(Items.lead, 20), new ItemStack(Items.densealloy, 20)); - //starter lead transportation + //starter transport new Recipe(distribution, DistributionBlocks.junction, new ItemStack(Items.copper, 2)).setAlwaysUnlocked(true); new Recipe(distribution, DistributionBlocks.router, new ItemStack(Items.copper, 6)).setAlwaysUnlocked(true); - //advanced densealloy transporation + //advanced densealloy transporat new Recipe(distribution, DistributionBlocks.distributor, new ItemStack(Items.densealloy, 8), new ItemStack(Items.copper, 8)); new Recipe(distribution, DistributionBlocks.sorter, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 4)); new Recipe(distribution, DistributionBlocks.overflowGate, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 8)); @@ -131,9 +134,6 @@ public class Recipes implements ContentList{ new Recipe(power, PowerBlocks.thoriumReactor, new ItemStack(Items.lead, 600), new ItemStack(Items.silicon, 400), new ItemStack(Items.densealloy, 300), new ItemStack(Items.thorium, 300)); new Recipe(power, PowerBlocks.rtgGenerator, new ItemStack(Items.lead, 200), new ItemStack(Items.silicon, 150), new ItemStack(Items.phasefabric, 50), new ItemStack(Items.plastanium, 150), new ItemStack(Items.thorium, 100)); - new Recipe(distribution, StorageBlocks.unloader, new ItemStack(Items.densealloy, 50), new ItemStack(Items.silicon, 60)); - new Recipe(distribution, StorageBlocks.container, new ItemStack(Items.densealloy, 200)); - new Recipe(distribution, StorageBlocks.vault, new ItemStack(Items.densealloy, 500), new ItemStack(Items.thorium, 250)); //core disabled due to being broken /*new Recipe(distribution, StorageBlocks.core, new ItemStack(Items.copper, 2000), new ItemStack(Items.densealloy, 1500), @@ -153,16 +153,16 @@ public class Recipes implements ContentList{ //UNITS - //bodies - new Recipe(units, UpgradeBlocks.dartPad, new ItemStack(Items.lead, 150), new ItemStack(Items.copper, 150), new ItemStack(Items.silicon, 200), new ItemStack(Items.titanium, 240)).setVisible(RecipeVisibility.desktopOnly); - new Recipe(units, UpgradeBlocks.tridentPad, new ItemStack(Items.lead, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250), new ItemStack(Items.titanium, 300), new ItemStack(Items.plastanium, 200)); - new Recipe(units, UpgradeBlocks.javelinPad, new ItemStack(Items.lead, 350), new ItemStack(Items.silicon, 450), new ItemStack(Items.titanium, 500), new ItemStack(Items.plastanium, 400), new ItemStack(Items.phasefabric, 200)); - new Recipe(units, UpgradeBlocks.glaivePad, new ItemStack(Items.lead, 450), new ItemStack(Items.silicon, 650), new ItemStack(Items.titanium, 700), new ItemStack(Items.plastanium, 600), new ItemStack(Items.surgealloy, 200)); + //upgrades + new Recipe(upgrade, UpgradeBlocks.dartPad, new ItemStack(Items.lead, 150), new ItemStack(Items.copper, 150), new ItemStack(Items.silicon, 200), new ItemStack(Items.titanium, 240)).setVisible(RecipeVisibility.desktopOnly); + new Recipe(upgrade, UpgradeBlocks.tridentPad, new ItemStack(Items.lead, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250), new ItemStack(Items.titanium, 300), new ItemStack(Items.plastanium, 200)); + new Recipe(upgrade, UpgradeBlocks.javelinPad, new ItemStack(Items.lead, 350), new ItemStack(Items.silicon, 450), new ItemStack(Items.titanium, 500), new ItemStack(Items.plastanium, 400), new ItemStack(Items.phasefabric, 200)); + new Recipe(upgrade, UpgradeBlocks.glaivePad, new ItemStack(Items.lead, 450), new ItemStack(Items.silicon, 650), new ItemStack(Items.titanium, 700), new ItemStack(Items.plastanium, 600), new ItemStack(Items.surgealloy, 200)); - new Recipe(units, UpgradeBlocks.alphaPad, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 100), new ItemStack(Items.copper, 150)).setVisible(RecipeVisibility.mobileOnly); - new Recipe(units, UpgradeBlocks.tauPad, new ItemStack(Items.lead, 250), new ItemStack(Items.densealloy, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250)); - new Recipe(units, UpgradeBlocks.deltaPad, new ItemStack(Items.lead, 350), new ItemStack(Items.densealloy, 350), new ItemStack(Items.copper, 400), new ItemStack(Items.silicon, 450), new ItemStack(Items.thorium, 300)); - new Recipe(units, UpgradeBlocks.omegaPad, new ItemStack(Items.lead, 450), new ItemStack(Items.densealloy, 550), new ItemStack(Items.silicon, 650), new ItemStack(Items.thorium, 600), new ItemStack(Items.surgealloy, 240)); + new Recipe(upgrade, UpgradeBlocks.alphaPad, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 100), new ItemStack(Items.copper, 150)).setVisible(RecipeVisibility.mobileOnly); + new Recipe(upgrade, UpgradeBlocks.tauPad, new ItemStack(Items.lead, 250), new ItemStack(Items.densealloy, 250), new ItemStack(Items.copper, 250), new ItemStack(Items.silicon, 250)); + new Recipe(upgrade, UpgradeBlocks.deltaPad, new ItemStack(Items.lead, 350), new ItemStack(Items.densealloy, 350), new ItemStack(Items.copper, 400), new ItemStack(Items.silicon, 450), new ItemStack(Items.thorium, 300)); + new Recipe(upgrade, UpgradeBlocks.omegaPad, new ItemStack(Items.lead, 450), new ItemStack(Items.densealloy, 550), new ItemStack(Items.silicon, 650), new ItemStack(Items.thorium, 600), new ItemStack(Items.surgealloy, 240)); //actual unit related stuff new Recipe(units, UnitBlocks.spiritFactory, new ItemStack(Items.copper, 70), new ItemStack(Items.lead, 110), new ItemStack(Items.silicon, 130)); diff --git a/core/src/io/anuke/mindustry/type/Category.java b/core/src/io/anuke/mindustry/type/Category.java index 94debf4839..6e5f7a621a 100644 --- a/core/src/io/anuke/mindustry/type/Category.java +++ b/core/src/io/anuke/mindustry/type/Category.java @@ -16,5 +16,9 @@ public enum Category{ /**Blocks that craft things.*/ crafting, /**Blocks that create units.*/ - units + units, + /**Things that upgrade the player such as mech pads.*/ + upgrade, + /**Things for storage or passive effects.*/ + effect } diff --git a/core/src/io/anuke/mindustry/ui/SelectionTable.java b/core/src/io/anuke/mindustry/ui/SelectionTable.java deleted file mode 100644 index d779720f46..0000000000 --- a/core/src/io/anuke/mindustry/ui/SelectionTable.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.anuke.mindustry.ui; - -import com.badlogic.gdx.graphics.g2d.TextureRegion; -import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.OreBlock; -import io.anuke.ucore.core.Graphics; -import io.anuke.ucore.graphics.Draw; -import io.anuke.ucore.scene.style.TextureRegionDrawable; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.layout.Table; -import io.anuke.ucore.util.Mathf; - -import static io.anuke.mindustry.Vars.world; - -public class SelectionTable extends Table{ - Tile lastTile; - - public SelectionTable(){ - super("clear"); - - margin(5f); - - update(() -> { - Block result; - Tile tile = world.tileWorld(Graphics.mouseWorld().x, Graphics.mouseWorld().y); - if(tile != null){ - tile = tile.target(); - result = tile.block().synthetic() ? tile.block() : tile.floor() instanceof OreBlock ? tile.floor() : null; - }else{ - result = null; - } - - if(result != null){ - lastTile = tile; - } - - getTranslation().y = Mathf.lerp(getTranslation().y, result == null ? -getHeight() : 0f, 0.2f); - }); - - Image image = new Image(new TextureRegionDrawable(new TextureRegion(Draw.region("clear")))); - image.update(() -> - ((TextureRegionDrawable)image.getDrawable()).setRegion(lastTile == null ? Draw.getBlankRegion() : - lastTile.block().getDisplayIcon(lastTile))); - - add(image).size(8*5).padRight(4); - label(() -> lastTile == null ? "" : lastTile.block().getDisplayName(lastTile)); - - pack(); - getTranslation().y = - getHeight(); - } -} diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index b3692c6b22..e83062d97e 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -16,7 +16,6 @@ import io.anuke.mindustry.net.Packets.AdminAction; import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.ui.IntFormat; import io.anuke.mindustry.ui.Minimap; -import io.anuke.mindustry.ui.SelectionTable; import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.ucore.core.*; import io.anuke.ucore.graphics.Hue; @@ -33,7 +32,7 @@ import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.*; public class HudFragment extends Fragment{ - public final BlocksFragment blockfrag = new BlocksFragment(); + public final PlacementFragment blockfrag = new PlacementFragment(); private ImageButton menu, flip; private Stack wavetable; diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java similarity index 86% rename from core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java rename to core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 9900cc18ec..18ca4d6ddd 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.ui.fragments; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Interpolation; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.TileEntity; @@ -14,14 +15,15 @@ import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.OreBlock; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.scene.Group; +import io.anuke.ucore.scene.event.Touchable; 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.*; -public class BlocksFragment extends Fragment{ - final int rowWidth = 3; +public class PlacementFragment extends Fragment{ + final int rowWidth = 4; Category currentCategory = Category.turret; Block hovered; @@ -34,7 +36,6 @@ public class BlocksFragment extends Fragment{ InputHandler input = control.input(0); parent.fill(frame -> { - //rebuilds the top table with the selected recipe //rebuilds the category table with the correct recipes Runnable rebuildCategory = () -> { @@ -61,13 +62,14 @@ public class BlocksFragment extends Fragment{ button.replaceImage(new ImageStack(recipe.result.getCompactIcon())); - button.hovered(() -> hovered = recipe.result); - - button.exited(() -> { - if(hovered == recipe.result){ - hovered = null; - } - }); + if(!mobile){ + button.hovered(() -> hovered = recipe.result); + button.exited(() -> { + if(hovered == recipe.result){ + hovered = null; + } + }); + } } }; @@ -98,7 +100,7 @@ public class BlocksFragment extends Fragment{ req.table(line -> { line.left(); line.addImage(stack.item.region).size(8*2); - line.add(stack.item.localizedName()).padLeft(2).left().get().setFontScale(0.5f); + line.add(stack.item.localizedName()).color(Color.LIGHT_GRAY).padLeft(2).left(); line.labelWrap(() -> { TileEntity core = players[0].getClosestCore(); if(core == null || state.mode.infiniteResources) return "*/*"; @@ -107,7 +109,7 @@ public class BlocksFragment extends Fragment{ String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]"); return color + ui.formatAmount(amount) + "[white]/" + stack.amount; - }).padLeft(5).get().setFontScale(0.5f); + }).padLeft(5); }).left(); req.row(); } @@ -121,10 +123,10 @@ public class BlocksFragment extends Fragment{ }); top.row(); top.addImage("blank").growX().color(Palette.accent).height(3f); - }).colspan(2).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null); + }).colspan(3).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null).touchable(Touchable.enabled); frame.row(); frame.table(categories -> { - categories.defaults().size(45f); + categories.defaults().size(48f); ButtonGroup group = new ButtonGroup<>(); @@ -134,11 +136,12 @@ public class BlocksFragment extends Fragment{ rebuildCategory.run(); }).group(group); - categories.row(); + if(cat.ordinal() %2 == 1) categories.row(); } - }); + }).touchable(Touchable.enabled); + frame.addImage("blank").width(3f).fillY().color(Palette.accent); - frame.table("clear", blocks -> blockTable = blocks).fillY().bottom(); + frame.table("clear", blocks -> blockTable = blocks).fillY().bottom().touchable(Touchable.enabled); rebuildCategory.run(); }); From d8624985167a997f4e30dfc893603065432b73aa Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 18 Nov 2018 15:17:19 -0500 Subject: [PATCH 04/52] Replaced tooltips with names --- core/assets/bundles/bundle.properties | 2 +- .../io/anuke/mindustry/ui/ItemDisplay.java | 18 ++++++++++ core/src/io/anuke/mindustry/ui/ItemImage.java | 10 +++--- .../io/anuke/mindustry/ui/LiquidDisplay.java | 14 ++++++++ .../mindustry/ui/dialogs/UnlocksDialog.java | 7 ++-- .../ui/fragments/PlacementFragment.java | 2 +- .../world/blocks/production/Drill.java | 8 ++--- .../anuke/mindustry/world/meta/StatValue.java | 35 ------------------- .../world/meta/values/ItemFilterValue.java | 11 +++--- .../world/meta/values/ItemListValue.java | 15 ++------ .../world/meta/values/ItemValue.java | 8 ++--- .../world/meta/values/LiquidFilterValue.java | 12 +++---- .../world/meta/values/LiquidValue.java | 7 ++-- 13 files changed, 63 insertions(+), 86 deletions(-) create mode 100644 core/src/io/anuke/mindustry/ui/ItemDisplay.java create mode 100644 core/src/io/anuke/mindustry/ui/LiquidDisplay.java diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 0dc46e60d8..62f0b8777f 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -497,7 +497,7 @@ text.mech.ability = [LIGHT_GRAY]Ability\: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity\: {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosity\: {0} text.liquid.temperature = [LIGHT_GRAY]Temperature\: {0} -block.constructing = {0}\n[LIGHT_GRAY](Constructing) +block.constructing = {0} [LIGHT_GRAY](Constructing) block.spawn.name = Enemy Spawn block.core.name = Core block.metalfloor.name = Metal Floor diff --git a/core/src/io/anuke/mindustry/ui/ItemDisplay.java b/core/src/io/anuke/mindustry/ui/ItemDisplay.java new file mode 100644 index 0000000000..4530d606f0 --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/ItemDisplay.java @@ -0,0 +1,18 @@ +package io.anuke.mindustry.ui; + +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.type.ItemStack; +import io.anuke.ucore.scene.ui.layout.Table; + +/**An item image with text.*/ +public class ItemDisplay extends Table{ + + public ItemDisplay(Item item){ + this(item, 0); + } + + public ItemDisplay(Item item, int amount){ + add(new ItemImage(new ItemStack(item, amount))).size(8*3); + add(item.localizedName()).padLeft(4); + } +} diff --git a/core/src/io/anuke/mindustry/ui/ItemImage.java b/core/src/io/anuke/mindustry/ui/ItemImage.java index 709c2903c2..130916cb26 100644 --- a/core/src/io/anuke/mindustry/ui/ItemImage.java +++ b/core/src/io/anuke/mindustry/ui/ItemImage.java @@ -18,10 +18,12 @@ public class ItemImage extends Stack{ } public ItemImage(ItemStack stack){ - Table t = new Table().left().bottom(); - t.add(stack.amount + ""); - add(new Image(stack.item.region)); - add(t); + + if(stack.amount != 0){ + Table t = new Table().left().bottom(); + t.add(stack.amount + ""); + add(t); + } } } diff --git a/core/src/io/anuke/mindustry/ui/LiquidDisplay.java b/core/src/io/anuke/mindustry/ui/LiquidDisplay.java new file mode 100644 index 0000000000..f639dfe1c5 --- /dev/null +++ b/core/src/io/anuke/mindustry/ui/LiquidDisplay.java @@ -0,0 +1,14 @@ +package io.anuke.mindustry.ui; + +import io.anuke.mindustry.type.Liquid; +import io.anuke.ucore.scene.ui.Image; +import io.anuke.ucore.scene.ui.layout.Table; + +/**An ItemDisplay, but for liquids.*/ +public class LiquidDisplay extends Table{ + + public LiquidDisplay(Liquid liquid){ + add(new Image(liquid.getContentIcon())).size(8*3); + add(liquid.localizedName()).padLeft(3); + } +} diff --git a/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java index 4d9411c4df..8b46947740 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/UnlocksDialog.java @@ -6,10 +6,10 @@ import io.anuke.mindustry.game.Content; import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.type.ContentType; -import io.anuke.mindustry.world.meta.StatValue; import io.anuke.ucore.scene.event.HandCursorListener; import io.anuke.ucore.scene.ui.Image; import io.anuke.ucore.scene.ui.ScrollPane; +import io.anuke.ucore.scene.ui.Tooltip; import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.utils.UIUtils; @@ -65,7 +65,10 @@ public class UnlocksDialog extends FloatingDialog{ if(control.unlocks.isUnlocked(unlock)){ image.clicked(() -> Vars.ui.content.show(unlock)); - StatValue.addToolTip(image, unlock); + image.addListener(new Tooltip<>(new Table("clear"){{ + add(unlock.localizedName()); + margin(4); + }})); } if((++count) % maxWidth == 0){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 18ca4d6ddd..5e0287463a 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -89,7 +89,7 @@ public class PlacementFragment extends Fragment{ topTable.table(header -> { header.left(); header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4); - header.labelWrap(lastDisplay.formalName).left().width(150f).padLeft(5); + header.labelWrap(lastDisplay.formalName).left().width(200f).padLeft(5); }).growX().left(); topTable.row(); //add requirement table diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java index f0232c5cf3..212a71168b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Drill.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Drill.java @@ -16,14 +16,11 @@ import io.anuke.mindustry.world.consumers.ConsumeLiquid; import io.anuke.mindustry.world.meta.BlockGroup; import io.anuke.mindustry.world.meta.BlockStat; import io.anuke.mindustry.world.meta.StatUnit; -import io.anuke.mindustry.world.meta.StatValue; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.content; @@ -135,8 +132,9 @@ public class Drill extends Block{ for(int i = 0; i < list.size; i++){ Item item = list.get(i); - Cell imageCell = table.addImage(item.name + "1").size(8 * 3).padRight(2).padLeft(2).padTop(3).padBottom(3); - StatValue.addToolTip(imageCell.getElement(), item); + + table.addImage(item.name + "1").size(8 * 3).padRight(2).padLeft(2).padTop(3).padBottom(3); + table.add(item.localizedName()); if(i != list.size - 1){ table.add("/"); } diff --git a/core/src/io/anuke/mindustry/world/meta/StatValue.java b/core/src/io/anuke/mindustry/world/meta/StatValue.java index ef3e51acef..93726003ae 100644 --- a/core/src/io/anuke/mindustry/world/meta/StatValue.java +++ b/core/src/io/anuke/mindustry/world/meta/StatValue.java @@ -1,10 +1,5 @@ package io.anuke.mindustry.world.meta; -import io.anuke.mindustry.game.UnlockableContent; -import io.anuke.ucore.scene.Element; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.Tooltip; -import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Table; /** @@ -16,34 +11,4 @@ public interface StatValue{ * For example, a stat that is just text would add label to the table. */ void display(Table table); - - /** - * This method adds an icon image together with a tool tip which contains the name of the item. - * @param table the table to add the image cell to. - * @param item The item which provides the tool tip content. - * @return the image cell which was created. The cell is not yet sized or padded. - */ - static Cell addImageWithToolTip(Table table, UnlockableContent item){ - - // Create a table cell with a new image as provided by the item - Cell imageCell = table.addImage(item.getContentIcon()); - - // Retrieve the image and add a tool tip with the item's name - addToolTip(imageCell.getElement(), item); - - // Return the table cell for further processing (sizing, padding, ...) - return imageCell; - } - - /** - * Adds a tool tip containing the item's localized name to the given element. - * @param element The element to assign the tool tip to. - * @param item The item which provides the tool tip content. - */ - static void addToolTip(Element element, UnlockableContent item){ - element.addListener(new Tooltip<>(new Table("clear"){{ - add(item.localizedName()); - margin(4); - }})); - } } diff --git a/core/src/io/anuke/mindustry/world/meta/values/ItemFilterValue.java b/core/src/io/anuke/mindustry/world/meta/values/ItemFilterValue.java index 669f5baa2c..0f917dda71 100644 --- a/core/src/io/anuke/mindustry/world/meta/values/ItemFilterValue.java +++ b/core/src/io/anuke/mindustry/world/meta/values/ItemFilterValue.java @@ -2,12 +2,12 @@ package io.anuke.mindustry.world.meta.values; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.ui.ItemDisplay; import io.anuke.mindustry.world.meta.StatValue; import io.anuke.ucore.function.Predicate; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Table; -import static io.anuke.mindustry.Vars.*; + +import static io.anuke.mindustry.Vars.content; public class ItemFilterValue implements StatValue{ private final Predicate filter; @@ -27,10 +27,7 @@ public class ItemFilterValue implements StatValue{ for(int i = 0; i < list.size; i++){ Item item = list.get(i); - Cell imageCell = table.addImage(item.region); - imageCell.size(8 * 3).padRight(2).padLeft(2); - - StatValue.addToolTip(imageCell.getElement(), item); + table.add(new ItemDisplay(item)).padRight(5); if(i != list.size - 1){ table.add("/"); diff --git a/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java b/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java index 7cb237296f..22e37ea7bd 100644 --- a/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java +++ b/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java @@ -3,11 +3,8 @@ package io.anuke.mindustry.world.meta.values; import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; -import io.anuke.mindustry.ui.ItemImage; +import io.anuke.mindustry.ui.ItemDisplay; import io.anuke.mindustry.world.meta.ContentStatValue; -import io.anuke.mindustry.world.meta.StatValue; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Table; public class ItemListValue implements ContentStatValue{ @@ -41,17 +38,11 @@ public class ItemListValue implements ContentStatValue{ public void display(Table table){ if(items != null){ for(Item item : items){ - Cell imageCell = table.addImage(item.region); - imageCell.size(8 * 3).padRight(5); - - StatValue.addToolTip(imageCell.getElement(), item); + table.add(new ItemDisplay(item)); } }else{ for(ItemStack stack : stacks){ - ItemImage image = new ItemImage(stack); - table.add(image).size(8 * 3).padRight(5); - - StatValue.addToolTip(image, stack.item); + new ItemDisplay(stack.item, stack.amount); } } } diff --git a/core/src/io/anuke/mindustry/world/meta/values/ItemValue.java b/core/src/io/anuke/mindustry/world/meta/values/ItemValue.java index 269c537dc5..2b54142976 100644 --- a/core/src/io/anuke/mindustry/world/meta/values/ItemValue.java +++ b/core/src/io/anuke/mindustry/world/meta/values/ItemValue.java @@ -3,9 +3,8 @@ package io.anuke.mindustry.world.meta.values; import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemStack; -import io.anuke.mindustry.ui.ItemImage; +import io.anuke.mindustry.ui.ItemDisplay; import io.anuke.mindustry.world.meta.ContentStatValue; -import io.anuke.mindustry.world.meta.StatValue; import io.anuke.ucore.scene.ui.layout.Table; public class ItemValue implements ContentStatValue{ @@ -22,9 +21,6 @@ public class ItemValue implements ContentStatValue{ @Override public void display(Table table){ - //TODO better implementation, quantity support - ItemImage image = new ItemImage(item); - table.add(image).size(8 * 3); - StatValue.addToolTip(image, item.item); + table.add(new ItemDisplay(item.item, item.amount)); } } diff --git a/core/src/io/anuke/mindustry/world/meta/values/LiquidFilterValue.java b/core/src/io/anuke/mindustry/world/meta/values/LiquidFilterValue.java index 9dc6a6bd0b..7c5d638be9 100644 --- a/core/src/io/anuke/mindustry/world/meta/values/LiquidFilterValue.java +++ b/core/src/io/anuke/mindustry/world/meta/values/LiquidFilterValue.java @@ -2,13 +2,12 @@ package io.anuke.mindustry.world.meta.values; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.type.Liquid; +import io.anuke.mindustry.ui.LiquidDisplay; import io.anuke.mindustry.world.meta.StatValue; import io.anuke.ucore.function.Predicate; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.Tooltip; -import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Table; -import static io.anuke.mindustry.Vars.*; + +import static io.anuke.mindustry.Vars.content; public class LiquidFilterValue implements StatValue{ private final Predicate filter; @@ -26,10 +25,7 @@ public class LiquidFilterValue implements StatValue{ } for(int i = 0; i < list.size; i++){ - Liquid item = list.get(i); - - Cell imageCell = StatValue.addImageWithToolTip(table, item); - imageCell.size(8 * 3).padRight(2).padLeft(2).padTop(2).padBottom(2); + table.add(new LiquidDisplay(list.get(i))).padRight(5); if(i != list.size - 1){ table.add("/"); diff --git a/core/src/io/anuke/mindustry/world/meta/values/LiquidValue.java b/core/src/io/anuke/mindustry/world/meta/values/LiquidValue.java index d4d6734511..0dcc6c03c7 100644 --- a/core/src/io/anuke/mindustry/world/meta/values/LiquidValue.java +++ b/core/src/io/anuke/mindustry/world/meta/values/LiquidValue.java @@ -2,10 +2,8 @@ package io.anuke.mindustry.world.meta.values; import io.anuke.mindustry.game.UnlockableContent; import io.anuke.mindustry.type.Liquid; +import io.anuke.mindustry.ui.LiquidDisplay; import io.anuke.mindustry.world.meta.ContentStatValue; -import io.anuke.mindustry.world.meta.StatValue; -import io.anuke.ucore.scene.ui.Image; -import io.anuke.ucore.scene.ui.layout.Cell; import io.anuke.ucore.scene.ui.layout.Table; public class LiquidValue implements ContentStatValue{ @@ -22,7 +20,6 @@ public class LiquidValue implements ContentStatValue{ @Override public void display(Table table){ - Cell imageCell = StatValue.addImageWithToolTip(table, liquid); - imageCell.size(8 * 3); + table.add(new LiquidDisplay(liquid)); } } From ab79ccb02b27f24073a017044d13fdb16dfa5e4f Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 18 Nov 2018 20:04:15 -0500 Subject: [PATCH 05/52] Implemented unlocks for placement --- core/assets/bundles/bundle.properties | 3 +- core/src/io/anuke/mindustry/core/Control.java | 9 --- core/src/io/anuke/mindustry/game/Unlocks.java | 69 ++++--------------- .../io/anuke/mindustry/graphics/Palette.java | 1 + .../mindustry/ui/fragments/HudFragment.java | 1 - .../ui/fragments/PlacementFragment.java | 62 ++++++++++++----- .../anuke/mindustry/world/meta/StatValue.java | 2 +- 7 files changed, 64 insertions(+), 83 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 62f0b8777f..dc174745a5 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -290,6 +290,7 @@ text.no = No text.info.title = Info text.error.title = [crimson]An error has occured text.error.crashtitle = An error has occured +text.blocks.unknown=[LIGHT_GRAY]??? text.blocks.blockinfo = Block Info text.blocks.powercapacity = Power Capacity text.blocks.powershot = Power/Shot @@ -408,8 +409,6 @@ mode.waves.name = waves mode.waves.description = the normal mode. limited resources and automatic incoming waves. mode.sandbox.name = sandbox mode.sandbox.description = infinite resources and no timer for waves. -mode.custom.warning = [scarlet]UNLOCKS IN CUSTOM GAMES OR SERVERS ARE NOT SAVED.[]\n\nPlay in sectors to unlock things. -mode.custom.warning.read = Just to make sure you've read it\:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES\!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.freebuild.name = freebuild mode.freebuild.description = limited resources and no timer for waves. mode.pvp.name = PvP diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 450773f1d3..075c7e1688 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -111,15 +111,6 @@ public class Control extends Module{ } state.set(State.playing); - - if(world.getSector() == null && !Settings.getBool("custom-warning-for-real-1", false)){ - threads.runGraphics(() -> ui.showInfo("$mode.custom.warning", () -> - ui.showInfo("$mode.custom.warning.read", () -> { - Settings.putBool("custom-warning-for-real-1", true); - Settings.save(); - }))); - - } }); Events.on(WorldLoadGraphicsEvent.class, event -> { diff --git a/core/src/io/anuke/mindustry/game/Unlocks.java b/core/src/io/anuke/mindustry/game/Unlocks.java index e2bbd5984b..bb2e384f68 100644 --- a/core/src/io/anuke/mindustry/game/Unlocks.java +++ b/core/src/io/anuke/mindustry/game/Unlocks.java @@ -4,16 +4,12 @@ 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.core.GameState.State; -import io.anuke.mindustry.net.Net; import io.anuke.mindustry.type.ContentType; import io.anuke.ucore.core.Settings; -import static io.anuke.mindustry.Vars.*; - /**Stores player unlocks. Clientside only.*/ public class Unlocks{ - private ObjectMap sets = new ObjectMap<>(); + ContentUnlockSet set = new ContentUnlockSet(); static{ Settings.setSerializer(ContentType.class, (stream, t) -> stream.writeInt(t.ordinal()), stream -> ContentType.values()[stream.readInt()]); @@ -21,7 +17,7 @@ public class Unlocks{ /** Returns whether or not this piece of content is unlocked yet.*/ public boolean isUnlocked(UnlockableContent content){ - return rootSet().isUnlocked(content) || currentSet().isUnlocked(content); + return set.isUnlocked(content); } /** @@ -32,77 +28,42 @@ public class Unlocks{ * @return whether or not this content was newly unlocked. */ public boolean unlockContent(UnlockableContent content){ - return !rootSet().isUnlocked(content) && currentSet().unlockContent(content); + return !set.isUnlocked(content) && currentSet().unlockContent(content); } private ContentUnlockSet currentSet(){ - //client connected to server: always return the IP-specific set - if(Net.client()){ - return getSet(Net.getLastIP()); - }else if((world.getSector() != null || state.mode.infiniteResources) || state.is(State.menu)){ //sector-sandbox have shared set - return rootSet(); - }else{ //per-mode set - return getSet(state.mode.name()); - } - } - - private ContentUnlockSet rootSet(){ - return getSet("root"); - } - - private ContentUnlockSet getSet(String name){ - if(!sets.containsKey(name)){ - sets.put(name, new ContentUnlockSet()); - } - return sets.get(name); + return set; } /** Returns whether unlockables have changed since the last save.*/ public boolean isDirty(){ - for(ContentUnlockSet set : sets.values()){ - if(set.isDirty()){ - return true; - } - } - return false; + return set.isDirty(); } /** Clears all unlocked content. Automatically saves.*/ public void reset(){ - sets.clear(); save(); } public void load(){ - sets.clear(); + ObjectMap> outer = Settings.getObject("unlocks", ObjectMap.class, ObjectMap::new); + ContentUnlockSet cset = new ContentUnlockSet(); - ObjectMap>> result = Settings.getObject("content-sets", ObjectMap.class, ObjectMap::new); - - for(Entry>> outer : result.entries()){ - ContentUnlockSet cset = new ContentUnlockSet(); - for (Entry> entry : outer.value.entries()){ - ObjectSet set = new ObjectSet<>(); - set.addAll(entry.value); - cset.getUnlocked().put(entry.key, set); - } - sets.put(outer.key, cset); + for (Entry> entry : outer.entries()){ + ObjectSet set = new ObjectSet<>(); + set.addAll(entry.value); + cset.getUnlocked().put(entry.key, set); } } public void save(){ - ObjectMap>> output = new ObjectMap<>(); + ObjectMap> write = new ObjectMap<>(); - for(Entry centry : sets.entries()){ - ObjectMap> write = new ObjectMap<>(); - - for(Entry> entry : centry.value.getUnlocked().entries()){ - write.put(entry.key, entry.value.iterator().toArray()); - } - - output.put(centry.key, write); + for(Entry> entry : set.getUnlocked().entries()){ + write.put(entry.key, entry.value.iterator().toArray()); } - Settings.putObject("content-sets", output); + Settings.putObject("unlocks", write); Settings.save(); } diff --git a/core/src/io/anuke/mindustry/graphics/Palette.java b/core/src/io/anuke/mindustry/graphics/Palette.java index 645df794e6..437a36034c 100644 --- a/core/src/io/anuke/mindustry/graphics/Palette.java +++ b/core/src/io/anuke/mindustry/graphics/Palette.java @@ -29,6 +29,7 @@ public class Palette{ lightishGray = Color.valueOf("a2a2a2"), darkishGray = new Color(0.3f, 0.3f, 0.3f, 1f), + darkerGray = new Color(0.2f, 0.2f, 0.2f, 1f), boostTo = Color.valueOf("ffad4d"), boostFrom = Color.valueOf("ff7f57"), diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index e83062d97e..0aa55b3a29 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -224,7 +224,6 @@ public class HudFragment extends Fragment{ /**Show unlock notification for a new recipe.*/ public void showUnlock(Recipe recipe){ - blockfrag.rebuild(); //if there's currently no unlock notification... if(lastUnlockTable == null){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 5e0287463a..b122286e8b 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.ui.fragments; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Interpolation; +import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.graphics.Palette; @@ -17,14 +18,17 @@ import io.anuke.ucore.core.Graphics; import io.anuke.ucore.scene.Group; import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.ButtonGroup; +import io.anuke.ucore.scene.ui.Image; import io.anuke.ucore.scene.ui.ImageButton; import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.util.Bundles; import static io.anuke.mindustry.Vars.*; public class PlacementFragment extends Fragment{ final int rowWidth = 4; + Array returned = new Array<>(); Category currentCategory = Category.turret; Block hovered; Block lastDisplay; @@ -33,34 +37,50 @@ public class PlacementFragment extends Fragment{ @Override public void build(Group parent){ - InputHandler input = control.input(0); - parent.fill(frame -> { + frame.clear(); + InputHandler input = control.input(0); //rebuilds the category table with the correct recipes Runnable rebuildCategory = () -> { blockTable.clear(); blockTable.top().margin(5); - //blockTable.add(currentCategory.name()).colspan(rowWidth).growX(); //TODO localize - int index = 0; ButtonGroup group = new ButtonGroup<>(); group.setMinCheckCount(0); - for(Recipe recipe : content.recipes()){ - if(recipe.category != currentCategory) continue; + for(Recipe recipe : recipes(currentCategory)){ if(index++ % rowWidth == 0){ blockTable.row(); } - ImageButton button = blockTable.addImageButton("blank", "select", 8*4, - () -> input.recipe = input.recipe == recipe ? null : recipe) - .size(50f).group(group).update(b -> b.setChecked(input.recipe == recipe)).get(); + boolean[] unlocked = {false}; - button.replaceImage(new ImageStack(recipe.result.getCompactIcon())); + ImageButton button = blockTable.addImageButton("icon-locked", "select", 8*4, () -> { + if(control.unlocks.isUnlocked(recipe)){ + input.recipe = input.recipe == recipe ? null : recipe; + } + }).size(50f).group(group).get(); + + button.update(() -> { //color unplacable things gray + boolean ulock = control.unlocks.isUnlocked(recipe); + TileEntity core = players[0].getClosestCore(); + Color color = core != null && core.items.has(recipe.requirements) ? Color.WHITE : ulock ? Color.GRAY : Color.WHITE; + button.forEach(elem -> elem.setColor(color)); + button.setChecked(input.recipe == recipe); + + if(ulock == unlocked[0]) return; + unlocked[0] = ulock; + + if(!ulock){ + button.replaceImage(new Image("icon-locked")); + }else{ + button.replaceImage(new ImageStack(recipe.result.getCompactIcon())); + } + }); if(!mobile){ button.hovered(() -> hovered = recipe.result); @@ -71,6 +91,8 @@ public class PlacementFragment extends Fragment{ }); } } + + blockTable.act(0f); }; frame.bottom().left().visible(() -> !state.is(State.menu)); @@ -78,7 +100,7 @@ public class PlacementFragment extends Fragment{ frame.table("clear", top -> { top.add(new Table()).growX().update(topTable -> { if((tileDisplayBlock() == null && lastDisplay == getSelected()) || - (tileDisplayBlock() != null && lastDisplay == tileDisplayBlock())) return; + (tileDisplayBlock() != null && lastDisplay == tileDisplayBlock())) return; topTable.clear(); topTable.top().left().margin(5); @@ -89,7 +111,9 @@ public class PlacementFragment extends Fragment{ topTable.table(header -> { header.left(); header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4); - header.labelWrap(lastDisplay.formalName).left().width(200f).padLeft(5); + header.labelWrap(() -> + !control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay)) ? Bundles.get("text.blocks.unknown") : lastDisplay.formalName) + .left().width(200f).padLeft(5); }).growX().left(); topTable.row(); //add requirement table @@ -118,7 +142,7 @@ public class PlacementFragment extends Fragment{ }else if(tileDisplayBlock() != null){ //show selected tile lastDisplay = tileDisplayBlock(); topTable.add(new ImageStack(lastDisplay.getDisplayIcon(hoverTile))).size(8*4); - topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(150f).padLeft(5); + topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(200f).padLeft(5); } }); top.row(); @@ -131,6 +155,8 @@ public class PlacementFragment extends Fragment{ ButtonGroup group = new ButtonGroup<>(); for(Category cat : Category.values()){ + if(recipes(cat).isEmpty()) continue; + categories.addImageButton("icon-" + cat.name(), "clear-toggle", 16*2, () -> { currentCategory = cat; rebuildCategory.run(); @@ -181,9 +207,13 @@ public class PlacementFragment extends Fragment{ return hoverTile == null ? null : hoverTile.block().synthetic() ? hoverTile.block() : hoverTile.floor() instanceof OreBlock ? hoverTile.floor() : null; } - /**Rebuilds the whole placement menu, attempting to preserve previous state.*/ - void rebuild(){ - + Array recipes(Category cat){ + returned.clear(); + for(Recipe recipe : content.recipes()){ + if(recipe.category != cat || recipe.isHidden()) continue; + returned.add(recipe); + } + return returned; } void toggle(float t, Interpolation ip){ diff --git a/core/src/io/anuke/mindustry/world/meta/StatValue.java b/core/src/io/anuke/mindustry/world/meta/StatValue.java index 93726003ae..df53cc2947 100644 --- a/core/src/io/anuke/mindustry/world/meta/StatValue.java +++ b/core/src/io/anuke/mindustry/world/meta/StatValue.java @@ -8,7 +8,7 @@ import io.anuke.ucore.scene.ui.layout.Table; public interface StatValue{ /** * This method should provide all elements necessary to display this stat to the specified table. - * For example, a stat that is just text would add label to the table. + * For example, a stat that is just text would add a label to the table. */ void display(Table table); } From 19ac8bd9b23a380b55f828a75855ac2718726167 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 18 Nov 2018 20:50:12 -0500 Subject: [PATCH 06/52] Info menu --- core/assets/ui/uiskin.json | 6 ++++-- .../io/anuke/mindustry/ui/fragments/PlacementFragment.java | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core/assets/ui/uiskin.json b/core/assets/ui/uiskin.json index 88cc6975df..f49fc606a3 100644 --- a/core/assets/ui/uiskin.json +++ b/core/assets/ui/uiskin.json @@ -14,8 +14,9 @@ TintedDrawable: { 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}}, none: {name: white, color: {r: 0, g: 0, b: 0, a: 0}}, - clear-over: {name: white, color: { hex: "#ffffff82" } }, - clear-down: {name: white, color: { hex: "#ffd37fff" } } + clear-over: {name: white, color: { hex: "#ffffff82" }}, + clear-alpha: {name: white, color: { hex: "#ffd37fff" }}, + clear-down: {name: white, color: { hex: "#ffd37fff" }} }, ButtonStyle: { default: {down: button-down, up: button }, @@ -26,6 +27,7 @@ TextButtonStyle: { 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 }, 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 } }, diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index b122286e8b..8da1b9b1f2 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -114,6 +114,11 @@ public class PlacementFragment extends Fragment{ header.labelWrap(() -> !control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay)) ? Bundles.get("text.blocks.unknown") : lastDisplay.formalName) .left().width(200f).padLeft(5); + header.add().growX(); + if(control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay))){ + header.addButton("?", "clear-partial", () -> ui.content.show(Recipe.getByResult(lastDisplay))) + .size(8 * 5).padTop(-5).padRight(-5).right().grow(); + } }).growX().left(); topTable.row(); //add requirement table From ba01ed0153973eef1e5e8bbd94c02a3cf1c6690e Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 18 Nov 2018 23:19:39 -0500 Subject: [PATCH 07/52] Flipped place menu --- .../mindustry/ui/fragments/PlacementFragment.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 8da1b9b1f2..6b2dc1cb1e 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -38,7 +38,6 @@ public class PlacementFragment extends Fragment{ @Override public void build(Group parent){ parent.fill(frame -> { - frame.clear(); InputHandler input = control.input(0); //rebuilds the category table with the correct recipes @@ -63,7 +62,7 @@ public class PlacementFragment extends Fragment{ if(control.unlocks.isUnlocked(recipe)){ input.recipe = input.recipe == recipe ? null : recipe; } - }).size(50f).group(group).get(); + }).size(46f).group(group).get(); button.update(() -> { //color unplacable things gray boolean ulock = control.unlocks.isUnlocked(recipe); @@ -95,7 +94,7 @@ public class PlacementFragment extends Fragment{ blockTable.act(0f); }; - frame.bottom().left().visible(() -> !state.is(State.menu)); + frame.bottom().right().visible(() -> !state.is(State.menu)); frame.table("clear", top -> { top.add(new Table()).growX().update(topTable -> { @@ -113,7 +112,7 @@ public class PlacementFragment extends Fragment{ header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4); header.labelWrap(() -> !control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay)) ? Bundles.get("text.blocks.unknown") : lastDisplay.formalName) - .left().width(200f).padLeft(5); + .left().width(190f).padLeft(5); header.add().growX(); if(control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay))){ header.addButton("?", "clear-partial", () -> ui.content.show(Recipe.getByResult(lastDisplay))) @@ -147,13 +146,15 @@ public class PlacementFragment extends Fragment{ }else if(tileDisplayBlock() != null){ //show selected tile lastDisplay = tileDisplayBlock(); topTable.add(new ImageStack(lastDisplay.getDisplayIcon(hoverTile))).size(8*4); - topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(200f).padLeft(5); + 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", blocks -> blockTable = blocks).fillY().bottom().touchable(Touchable.enabled); + frame.addImage("blank").width(3f).fillY().color(Palette.accent); frame.table(categories -> { categories.defaults().size(48f); @@ -170,9 +171,6 @@ public class PlacementFragment extends Fragment{ if(cat.ordinal() %2 == 1) categories.row(); } }).touchable(Touchable.enabled); - frame.addImage("blank").width(3f).fillY().color(Palette.accent); - - frame.table("clear", blocks -> blockTable = blocks).fillY().bottom().touchable(Touchable.enabled); rebuildCategory.run(); }); From 08cf986cae3ce49a0c2d8d6629c31f6d11f37d58 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 10:20:41 -0500 Subject: [PATCH 08/52] Fixed destruction of broken blocks leading to neutral team block --- .../io/anuke/mindustry/world/blocks/BuildBlock.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index f5a1ba14e9..2d23ec889b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -42,7 +42,7 @@ public class BuildBlock extends Block{ super(name); update = true; size = Integer.parseInt(name.charAt(name.length() - 1) + ""); - health = 1; + health = 10; layer = Layer.placement; consumesTap = true; solidifes = true; @@ -118,15 +118,6 @@ public class BuildBlock extends Block{ } } - @Override - public void afterDestroyed(Tile tile, TileEntity e){ - BuildEntity entity = (BuildEntity) e; - - if(entity.previous != null && entity.previous.synthetic()){ - tile.setBlock(entity.previous); - } - } - @Override public void draw(Tile tile){ BuildEntity entity = tile.entity(); From b9fae7fb7d7ef01599bb4be9556908dc56ef4a9f Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 10:47:18 -0500 Subject: [PATCH 09/52] Bundle update --- core/assets/bundles/bundle.properties | 2 -- core/assets/bundles/bundle_de.properties | 2 -- core/assets/bundles/bundle_es.properties | 2 -- core/assets/bundles/bundle_fr.properties | 2 -- core/assets/bundles/bundle_fr_BE.properties | 2 -- core/assets/bundles/bundle_in_ID.properties | 2 -- core/assets/bundles/bundle_it.properties | 2 -- core/assets/bundles/bundle_ja.properties | 2 -- core/assets/bundles/bundle_ko.properties | 2 -- core/assets/bundles/bundle_pl.properties | 2 -- core/assets/bundles/bundle_pt_BR.properties | 2 -- core/assets/bundles/bundle_ru.properties | 5 ++--- core/assets/bundles/bundle_tk.properties | 2 -- core/assets/bundles/bundle_tr.properties | 2 -- core/assets/bundles/bundle_uk_UA.properties | 2 -- core/assets/bundles/bundle_zh_CN.properties | 3 +-- core/assets/bundles/bundle_zh_TW.properties | 2 -- 17 files changed, 3 insertions(+), 35 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 0dc46e60d8..3ad1ec8a22 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io page with PC downloads and web version text.link.google-play.description = Google Play store listing text.link.wiki.description = Official Mindustry wiki text.linkfail = Failed to open link\!\nThe URL has been copied to your clipboard. -text.editor.web = The web version does not support the editor\!\nDownload the game to use it. -text.web.unsupported = The web version does not support this feature\! Download the game to use it. text.gameover = Game Over text.gameover.pvp = The[accent] {0}[] team is victorious\! text.sector.gameover = This sector has been lost. Re-deploy? diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index 9c853977a2..3678908918 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io Seite mit Downloads und der Web-Version text.link.google-play.description = Google Play Store Seite text.link.wiki.description = Offizelles Mindustry Wiki text.linkfail = Fehler beim Öffnen des Links!\nDie URL wurde in die Zwischenablage kopiert. -text.editor.web = Die Web-Version unterstützt den Editor nicht!\nLade das Spiel herunter um ihn zu benutzen. -text.web.unsupported = Die Web-Version unterstützt dieses Feature nicht! Lade das Spiel herunter um es zu benutzen. text.gameover = Der Kern wurde zerstört. text.gameover.pvp = Das[accent] {0}[] Team ist siegreich! text.sector.gameover = Du hast diesen Sektor verloren. Erneuter Einsatz? diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index d668090bdf..d745f83d96 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io es la página donde podes descargar las text.link.google-play.description = Ficha en la Google Play Store text.link.wiki.description = Wiki oficial de Mindustry text.linkfail = ¡Error al abrir el enlace!\nLa URL ha sido copiada a su portapapeles. -text.editor.web = ¡La versión web no es compatible con el editor!\nDescarga el juego para usarlo. -text.web.unsupported = ¡La versión web no soporta esta característica! Descarga el juego para poder usarla. text.gameover = Tu núcleo ha sido destruido. text.gameover.pvp = ¡El equipo[accent] {0}[] ha ganado! text.sector.gameover = Este sector ha sido perdido. ¿Re-desplegar? diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 855775dccb..ae82c370fd 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = page itch.io avec le lien du téléchargement po text.link.google-play.description = listing par le store google play text.link.wiki.description = wiki officiel de mindustry . text.linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copié avec succès. -text.editor.web = La version web ne possède pas l'éditeur !\nTéléchargez le jeu pour l'avoir. -text.web.unsupported = La version web ne supporte pas cette fonction ! Téléchargez le jeu pour l'utiliser. text.gameover = Partie terminée. text.gameover.pvp = L'équipe [accent] {0}[] a gagnée ! text.sector.gameover = Ce secteur a été perdu. Réessayer? diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index 538b3aefe4..d35b767406 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = Page web itch.io avec les versions ordinateurs t text.link.google-play.description = Page Google Play Store du jeu text.link.wiki.description = Wiki officiel de Mindustry text.linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier. -text.editor.web = La version web ne prend pas en charge l'éditeur !\nTéléchargez le jeu pour l'utiliser. -text.web.unsupported = La version web ne prend pas en charge cette fonctionnalité ! Téléchargez le jeu pour l'utiliser. text.gameover = Le base a été détruit. text.gameover.pvp = L'équipe[accent] {0}[] a gagnée ! text.sector.gameover = Ce secteur a été perdu. Réessayer ? diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index f62937a494..fe9cf095c1 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io page with PC downloads and web version text.link.google-play.description = Google Play store listing text.link.wiki.description = official Mindustry wiki text.linkfail = Failed to open link!\nThe URL has been copied to your cliboard. -text.editor.web = The web version does not support the editor!\nDownload the game to use it. -text.web.unsupported = The web version does not support this feature! Download the game to use it. text.gameover = Intinya hancur. text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = This sector has been lost. Re-deploy? diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index b91fe81ef4..1001b8369c 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = pagina di itch.io con download per PC e versione text.link.google-play.description = Elenco di Google Play Store text.link.wiki.description = wiki ufficiale di Mindustry text.linkfail = Impossibile aprire il link! L'URL è stato copiato nella tua bacheca. -text.editor.web = La versione web non supporta l'editor! Scarica il gioco per usarlo. -text.web.unsupported = La vcersione web non supporta questa funzione! Sacrica il gioco per utilizzarla. text.gameover = Il nucleo è stato distrutto. text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = Hai perso questo settore. Attaccare di nuovo? diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 0af4f3b0f6..109bd62369 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = itch.ioでPC版のダウンロードやweb版を text.link.google-play.description = Google Playのストアページ text.link.wiki.description = 公式 Mindustry Wiki text.linkfail = リンクを開くのに失敗しました!\nURLをクリップボードにコピーしました。 -text.editor.web = Web版はエディターをサポートしていません!\nゲームをダウンロードして、使用してください。 -text.web.unsupported = Web版はこの機能をサポートしてません! ゲームをダウンロードして、使用してください。 text.gameover = ゲームオーバー text.gameover.pvp = [accent] {0}[] チームの勝利! text.sector.gameover = この区域は敗北しました。 再配備しますか? diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 54e56c5368..ed528065ac 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는 text.link.google-play.description = Google Play 스토어 정보 text.link.wiki.description = 공식 Mindustry 위키 (영어) text.linkfail = 링크를 여는데 실패했습니다! URL이 기기의 클립보드에 복사되었습니다. -text.editor.web = HTML5 버전은 에디터 기능을 지원하지 않습니다! 게임을 다운로드 한 뒤에 사용 해 주세요. -text.web.unsupported = HTML5 버전은 이 기능을 지원하지 않습니다! 게임을 다운로드 한 뒤에 사용 해 주세요. text.gameover = 코어가 터졌습니다. 게임 오버! text.gameover.pvp = [accent]{0}[] 팀이 승리했습니다! text.sector.gameover = 이 구역을 공략하는데 실패했습니다. 포기 하시겠습니까? diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 251d4b4f07..fe40ac1fe6 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania text.link.google-play.description = Google Play store listing text.link.wiki.description = Oficjana Wiki Mindustry text.linkfail = Nie udało się otworzyć linku!\nURL został skopiowany. -text.editor.web = Wersja przeglądarkowa nie wspomaga edytora map!\nPobierz grę aby użyć edytora. -text.web.unsupported = Wersja przeglądarkowa nie wspomaga tej fukcji!\nPobierz grę aby użyć tej funkcji. text.gameover = Rdzeń został zniszczony. text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = This sector has been lost. Re-deploy? diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index b1be2af279..0550933b49 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = Pagina da Itch.io com os Downloads text.link.google-play.description = Google Play store listing text.link.wiki.description = Wiki oficial do Mindustry text.linkfail = Falha ao abrir o link\nO Url foi copiado -text.editor.web = A versão web não suporta o editor!\nBaixe o jogo para usar. -text.web.unsupported = A versão web não suporta este recurso! Baixe o jogo para usar. text.gameover = O núcleo foi destruído. text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = Esse setor foi perdido! Soltar Novamente? diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index ebe7bf00c3..478dc8dbbf 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io страница с загрузкой text.link.google-play.description = Скачать для Android c Google play text.link.wiki.description = Официальная вики Mindustry(англ.) text.linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена. -text.editor.web = Веб-версия не поддерживает редактор!\nЗагрузите игру, чтобы использовать его. -text.web.unsupported = Веб-версия не поддерживает эту функцию! Загрузите игру, чтобы использовать её. text.gameover = Игра окончена text.gameover.pvp = [accent] {0}[] команда победила! text.sector.gameover = Этот сектор потерян. Высадится повторно? @@ -267,6 +265,7 @@ text.error.invalidaddress = Некорректный адрес. text.error.timedout = Время ожидания истекло!\nУбедитесь, что хост настроен для перенаправления портов и адрес корректный! text.error.mismatch = Ошибка пакета:\nвозможное несоответствие версии клиента/сервера. \nУбедитесь, что у вас и у создателя сервера установлена последняя версия Mindustry\\! text.error.alreadyconnected = Вы уже подключены. +text.error.mapnotfound = Map file not found! text.error.any = Неизвестная сетевая ошибка. text.settings.language = Язык text.settings.reset = Сбросить по умолчанию @@ -624,6 +623,7 @@ block.rtg-generator.name = Радиоизотопный термоэлектри block.spectre.name = Призрак block.meltdown.name = Катастрофа block.container.name = Склад +block.core.description = Самое главное здание в игре. team.blue.name = Синяя team.red.name = Красная team.orange.name = Оранжевая @@ -668,7 +668,6 @@ tutorial.daggerfactory = Постройте[accent] завод по произв tutorial.router = Заводы нуждаются в ресурсах для работы.\nСоздайте маршрутизатор для разделения ресурсов конвейера. tutorial.dagger = Соедините силовой узел с заводом.\nПосле выполнения требований будет создан мех. \n\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 = Стена с показателем прочности "ниже среднего". diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index 9bee717114..a93ca6ec6e 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = Bilgisayar ve Site versiyonunun bulundugu Site text.link.google-play.description = Google Play magaza sayfasi text.link.wiki.description = Orjinal Mindustry Bilgilendirme Sayfasi text.linkfail = Link Acilamadi!\nLink sizin icin kopyalandi. -text.editor.web = The web version does not support the editor!\nDownload the game to use it. -text.web.unsupported = Site versiyonu bunu desteklemiyor! Bilgisayar versiyonunu indirmeniz gerek. text.gameover = Cekirdegin yok edildi. text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = Sektor kaybedildi. Geri gitmek ister misin? diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 0a26b33e6d..f48c389c47 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = PC yüklemeleri ve web sürümü ile itch.io say text.link.google-play.description = Google Play mağaza sayfası text.link.wiki.description = Resmi Mindustry Wikipedi'si text.linkfail = Bağlantı açılamadı! URL, yazı tahtanıza kopyalandı. -text.editor.web = Web sürümü editörü desteklemiyor! Editörü kullanmak için oyunu indirin. -text.web.unsupported = The web version does not support this feature! Download the game to use it. text.gameover = Çekirdek yok edildi. text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = This sector has been lost. Re-deploy? diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index b119182495..71b077368b 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = Itch.io сторінка з веб-версіє text.link.google-play.description = Скачати з Google Play для Android text.link.wiki.description = Офіційна Mindustry вікі (англ.) text.linkfail = Не вдалося відкрити посилання!\nURL-адреса скопійовано у ваш буфер обміну. -text.editor.web = Веб-версія не підтримує редактора! \nЗавантажте гру, щоб використовувати його. -text.web.unsupported = Веб-версія не підтримує цю функцію! Завантажте гру, щоб використовувати її. text.gameover = Гру закінчено text.gameover.pvp = [accent] {0}[] команда перемогла! text.sector.gameover = Цей сектор було втрачено. Повторно висадитися? diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 1a539ca3fc..a024f004fc 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = PC版下载和网页版(itch.io) text.link.google-play.description = 从谷歌商店获取安卓版 text.link.wiki.description = 官方 Mindustry 维基 text.linkfail = 打开链接失败!\nURL 已经复制到剪贴板。 -text.editor.web = 网页版不支持地图编辑器!\n下载以使用编辑器。 -text.web.unsupported = 网页版不支持此功能,请下载以使用此功能。 text.gameover = 你的核心被摧毁了! text.gameover.pvp = accent] {0}[] 队获胜! text.sector.gameover = 这个区域失守了,要重新部署吗? @@ -495,6 +493,7 @@ 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.core.name = 核心 block.metalfloor.name = 金属地板 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 2fbc722f89..16a87728f9 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -9,8 +9,6 @@ text.link.itch.io.description = itch.io 電腦版下載與網頁版 text.link.google-play.description = Google Play 商店頁面 text.link.wiki.description = 官方 Mindustry 維基 text.linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。 -text.editor.web = 線上版本不支援地圖編輯器!\n請下載遊戲以使用這項功能。 -text.web.unsupported = 線上版本不支援此功能!請下載遊戲以使用這項功能。 text.gameover = 核心已被摧毀。 text.gameover.pvp = [accent]{0}[]隊得到勝利! text.sector.gameover = 這個區域失守了,重新部署? From c75cdc6d285829accc9a0af8d66aa221d8e58bb1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 12:27:42 -0500 Subject: [PATCH 10/52] Placement toggle support --- .../ui/fragments/PlacementFragment.java | 237 +++++++++--------- 1 file changed, 123 insertions(+), 114 deletions(-) diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 6b2dc1cb1e..d424b0c999 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -16,6 +16,7 @@ import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.OreBlock; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.scene.Group; +import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.ButtonGroup; import io.anuke.ucore.scene.ui.Image; @@ -30,149 +31,151 @@ public class PlacementFragment extends Fragment{ Array returned = new Array<>(); Category currentCategory = Category.turret; - Block hovered; - Block lastDisplay; + Block hovered, lastDisplay; Tile hoverTile; - Table blockTable; + Table blockTable, toggler; + boolean shown = true; @Override public void build(Group parent){ - parent.fill(frame -> { - InputHandler input = control.input(0); + parent.fill(full -> { + toggler = full; + full.bottom().right().visible(() -> !state.is(State.menu)); - //rebuilds the category table with the correct recipes - Runnable rebuildCategory = () -> { - blockTable.clear(); - blockTable.top().margin(5); + full.table(frame -> { + InputHandler input = control.input(0); + //rebuilds the category table with the correct recipes + Runnable rebuildCategory = () -> { + blockTable.clear(); + blockTable.top().margin(5); - int index = 0; + int index = 0; - ButtonGroup group = new ButtonGroup<>(); - group.setMinCheckCount(0); + ButtonGroup group = new ButtonGroup<>(); + group.setMinCheckCount(0); - for(Recipe recipe : recipes(currentCategory)){ + for(Recipe recipe : recipes(currentCategory)){ - if(index++ % rowWidth == 0){ - blockTable.row(); - } - - boolean[] unlocked = {false}; - - ImageButton button = blockTable.addImageButton("icon-locked", "select", 8*4, () -> { - if(control.unlocks.isUnlocked(recipe)){ - input.recipe = input.recipe == recipe ? null : recipe; + if(index++ % rowWidth == 0){ + blockTable.row(); } - }).size(46f).group(group).get(); - button.update(() -> { //color unplacable things gray - boolean ulock = control.unlocks.isUnlocked(recipe); - TileEntity core = players[0].getClosestCore(); - Color color = core != null && core.items.has(recipe.requirements) ? Color.WHITE : ulock ? Color.GRAY : Color.WHITE; - button.forEach(elem -> elem.setColor(color)); - button.setChecked(input.recipe == recipe); + boolean[] unlocked = {false}; - if(ulock == unlocked[0]) return; - unlocked[0] = ulock; + ImageButton button = blockTable.addImageButton("icon-locked", "select", 8*4, () -> { + if(control.unlocks.isUnlocked(recipe)){ + input.recipe = input.recipe == recipe ? null : recipe; + } + }).size(46f).group(group).get(); - if(!ulock){ - button.replaceImage(new Image("icon-locked")); - }else{ - button.replaceImage(new ImageStack(recipe.result.getCompactIcon())); - } - }); + button.update(() -> { //color unplacable things gray + boolean ulock = control.unlocks.isUnlocked(recipe); + TileEntity core = players[0].getClosestCore(); + Color color = core != null && core.items.has(recipe.requirements) ? Color.WHITE : ulock ? Color.GRAY : Color.WHITE; + button.forEach(elem -> elem.setColor(color)); + button.setChecked(input.recipe == recipe); - if(!mobile){ - button.hovered(() -> hovered = recipe.result); - button.exited(() -> { - if(hovered == recipe.result){ - hovered = null; + if(ulock == unlocked[0]) return; + unlocked[0] = ulock; + + if(!ulock){ + button.replaceImage(new Image("icon-locked")); + }else{ + button.replaceImage(new ImageStack(recipe.result.getCompactIcon())); } }); + + if(!mobile){ + button.hovered(() -> hovered = recipe.result); + button.exited(() -> { + if(hovered == recipe.result){ + hovered = null; + } + }); + } } - } - blockTable.act(0f); - }; + blockTable.act(0f); + }; - frame.bottom().right().visible(() -> !state.is(State.menu)); + frame.table("clear", top -> { + top.add(new Table()).growX().update(topTable -> { + if((tileDisplayBlock() == null && lastDisplay == getSelected()) || + (tileDisplayBlock() != null && lastDisplay == tileDisplayBlock())) return; - frame.table("clear", top -> { - top.add(new Table()).growX().update(topTable -> { - if((tileDisplayBlock() == null && lastDisplay == getSelected()) || - (tileDisplayBlock() != null && lastDisplay == tileDisplayBlock())) return; + topTable.clear(); + topTable.top().left().margin(5); - topTable.clear(); - topTable.top().left().margin(5); + lastDisplay = getSelected(); - lastDisplay = getSelected(); - - if(lastDisplay != null){ //show selected recipe - topTable.table(header -> { - header.left(); - header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4); - header.labelWrap(() -> + if(lastDisplay != null){ //show selected recipe + topTable.table(header -> { + header.left(); + header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4); + header.labelWrap(() -> !control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay)) ? Bundles.get("text.blocks.unknown") : lastDisplay.formalName) .left().width(190f).padLeft(5); - header.add().growX(); - if(control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay))){ - header.addButton("?", "clear-partial", () -> ui.content.show(Recipe.getByResult(lastDisplay))) - .size(8 * 5).padTop(-5).padRight(-5).right().grow(); - } - }).growX().left(); - topTable.row(); - //add requirement table - topTable.table(req -> { - req.top().left(); + header.add().growX(); + if(control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay))){ + header.addButton("?", "clear-partial", () -> ui.content.show(Recipe.getByResult(lastDisplay))) + .size(8 * 5).padTop(-5).padRight(-5).right().grow(); + } + }).growX().left(); + topTable.row(); + //add requirement table + topTable.table(req -> { + req.top().left(); - for(ItemStack stack : Recipe.getByResult(lastDisplay).requirements){ - req.table(line -> { - line.left(); - line.addImage(stack.item.region).size(8*2); - line.add(stack.item.localizedName()).color(Color.LIGHT_GRAY).padLeft(2).left(); - line.labelWrap(() -> { - TileEntity core = players[0].getClosestCore(); - if(core == null || state.mode.infiniteResources) return "*/*"; + for(ItemStack stack : Recipe.getByResult(lastDisplay).requirements){ + req.table(line -> { + line.left(); + line.addImage(stack.item.region).size(8*2); + line.add(stack.item.localizedName()).color(Color.LIGHT_GRAY).padLeft(2).left(); + line.labelWrap(() -> { + TileEntity core = players[0].getClosestCore(); + if(core == null || state.mode.infiniteResources) return "*/*"; - int amount = core.items.get(stack.item); - String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]"); + int amount = core.items.get(stack.item); + String color = (amount < stack.amount / 2f ? "[red]" : amount < stack.amount ? "[accent]" : "[white]"); - return color + ui.formatAmount(amount) + "[white]/" + stack.amount; - }).padLeft(5); - }).left(); - req.row(); - } - }).growX().left().margin(3); + return color + ui.formatAmount(amount) + "[white]/" + stack.amount; + }).padLeft(5); + }).left(); + req.row(); + } + }).growX().left().margin(3); - }else if(tileDisplayBlock() != null){ //show selected tile - lastDisplay = tileDisplayBlock(); - topTable.add(new ImageStack(lastDisplay.getDisplayIcon(hoverTile))).size(8*4); - topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(190f).padLeft(5); + }else if(tileDisplayBlock() != null){ //show selected tile + lastDisplay = tileDisplayBlock(); + topTable.add(new ImageStack(lastDisplay.getDisplayIcon(hoverTile))).size(8*4); + topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(190f).padLeft(5); + } + }); + top.row(); + top.addImage("blank").growX().color(Palette.accent).height(3f); + }).colspan(3).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null).touchable(Touchable.enabled); + frame.row(); + frame.table("clear", blocks -> blockTable = blocks).fillY().bottom().touchable(Touchable.enabled); + frame.addImage("blank").width(3f).fillY().color(Palette.accent); + frame.table(categories -> { + categories.defaults().size(48f); + + ButtonGroup group = new ButtonGroup<>(); + + for(Category cat : Category.values()){ + if(recipes(cat).isEmpty()) continue; + + categories.addImageButton("icon-" + cat.name(), "clear-toggle", 16*2, () -> { + currentCategory = cat; + rebuildCategory.run(); + }).group(group); + + if(cat.ordinal() %2 == 1) categories.row(); } - }); - 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", blocks -> blockTable = blocks).fillY().bottom().touchable(Touchable.enabled); - frame.addImage("blank").width(3f).fillY().color(Palette.accent); - frame.table(categories -> { - categories.defaults().size(48f); + }).touchable(Touchable.enabled); - ButtonGroup group = new ButtonGroup<>(); - - for(Category cat : Category.values()){ - if(recipes(cat).isEmpty()) continue; - - categories.addImageButton("icon-" + cat.name(), "clear-toggle", 16*2, () -> { - currentCategory = cat; - rebuildCategory.run(); - }).group(group); - - if(cat.ordinal() %2 == 1) categories.row(); - } - }).touchable(Touchable.enabled); - - rebuildCategory.run(); + rebuildCategory.run(); + }); }); } @@ -220,6 +223,12 @@ public class PlacementFragment extends Fragment{ } void toggle(float t, Interpolation ip){ - + if(shown){ + shown = false; + toggler.actions(Actions.translateBy(toggler.getTranslation().x + toggler.getWidth(), 0, t, ip)); + }else{ + shown = true; + toggler.actions(Actions.translateBy(-toggler.getTranslation().x, 0, t, ip)); + } } } \ No newline at end of file From 1ad481598348d08da0f82a19a6d2e27ab0253ea7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 14:20:57 -0500 Subject: [PATCH 11/52] Added all placement controls --- core/assets/ui/uiskin.json | 2 + .../anuke/mindustry/input/InputHandler.java | 4 +- .../io/anuke/mindustry/input/MobileInput.java | 108 +++++++----------- core/src/io/anuke/mindustry/type/Recipe.java | 32 ++---- .../ui/fragments/OverlayFragment.java | 2 +- .../ui/fragments/PlacementFragment.java | 32 +++--- 6 files changed, 67 insertions(+), 113 deletions(-) diff --git a/core/assets/ui/uiskin.json b/core/assets/ui/uiskin.json index f49fc606a3..ab630372a6 100644 --- a/core/assets/ui/uiskin.json +++ b/core/assets/ui/uiskin.json @@ -40,7 +40,9 @@ ImageButtonStyle: { 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}, }, ScrollPaneStyle: { default: {background: border, vScroll: scroll, vScrollKnob: scroll-knob-vertical-black}, diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index 84b1563b22..36722ffe21 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -25,7 +25,7 @@ import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Timers; -import io.anuke.ucore.scene.Group; +import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Angles; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Translator; @@ -145,7 +145,7 @@ public abstract class InputHandler extends InputAdapter{ return false; } - public void buildUI(Group group){ + public void buildUI(Table table){ } diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index 0197d323e0..b0761dfb7e 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -30,8 +30,7 @@ import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.*; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Lines; -import io.anuke.ucore.scene.Group; -import io.anuke.ucore.scene.event.Touchable; +import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.*; @@ -208,78 +207,53 @@ public class MobileInput extends InputHandler implements GestureListener{ //region UI and drawing @Override - public void buildUI(Group group){ + public void buildUI(Table table){ + table.addImage("blank").color(Palette.accent).height(3f).colspan(4).growX(); + table.row(); + table.left().margin(0f).defaults().size(48f); - //Create confirm/cancel table - group.fill(c -> { - c.bottom().left().visible(() -> !state.is(State.menu)); + table.addImageButton("icon-break", "clear-toggle-partial", 16 * 2f, () -> { + mode = mode == breaking ? recipe == null ? none : placing : breaking; + lastRecipe = recipe; + if(mode == breaking){ + showGuide("deconstruction"); + } + }).update(l -> l.setChecked(mode == breaking)); - c.table("pane", act -> { - act.margin(5); - act.defaults().size(60f); + //rotate button + table.addImageButton("icon-arrow", "clear-partial", 16 * 2f, () -> rotation = Mathf.mod(rotation + 1, 4)) + .update(i -> i.getImage().setRotationOrigin(rotation * 90, Align.center)) + .visible(() -> recipe != null && recipe.result.rotate); - //Add a cancel button - act.addImageButton("icon-cancel", 16*2f, () -> { - mode = none; - recipe = null; - }); + //cancel button + table.addImageButton("icon-cancel", "clear-partial", 16 * 2f, () -> { + player.clearBuilding(); + mode = none; + recipe = null; + }).visible(() -> player.isBuilding() || mode != none); - act.row(); + //confirm button + table.addImageButton("icon-check", "clear-partial", 16 * 2f, () -> { + for(PlaceRequest request : selection){ + Tile tile = request.tile(); - //Add an accept button, which places everything. - act.addImageButton("icon-check", 16 * 2f, () -> { - for(PlaceRequest request : selection){ - Tile tile = request.tile(); - - //actually place/break all selected blocks - if(tile != null){ - if(!request.remove){ - rotation = request.rotation; - recipe = request.recipe; - tryPlaceBlock(tile.x, tile.y); - }else{ - tryBreakBlock(tile.x, tile.y); - } - } + //actually place/break all selected blocks + if(tile != null){ + if(!request.remove){ + rotation = request.rotation; + recipe = request.recipe; + tryPlaceBlock(tile.x, tile.y); + }else{ + tryBreakBlock(tile.x, tile.y); } + } + } - //move all current requests to removal array so they fade out - removals.addAll(selection); - selection.clear(); - selecting = false; - }).disabled(i -> selection.size == 0); - - act.row(); - - //Add a rotate button - act.addImageButton("icon-arrow", 16 * 2f, () -> rotation = Mathf.mod(rotation + 1, 4)) - .update(i -> i.getImage().setRotationOrigin(rotation * 90, Align.center)) - .disabled(i -> recipe == null || !recipe.result.rotate); - }).visible(() -> mode != none).touchable(Touchable.enabled); - - c.row(); - - c.table("pane", remove -> { - remove.defaults().size(60f); - - //Add a break button. - remove.addImageButton("icon-break", "toggle", 16 * 2f, () -> { - mode = mode == breaking ? recipe == null ? none : placing : breaking; - lastRecipe = recipe; - if(mode == breaking){ - showGuide("deconstruction"); - } - }).update(l -> l.setChecked(mode == breaking)); - }).margin(5).touchable(Touchable.enabled); - - c.table("pane", cancel -> { - cancel.defaults().size(60f); - - //Add a 'cancel building' button. - cancel.addImageButton("icon-cancel", 16 * 2f, player::clearBuilding); - - }).left().colspan(2).margin(5).touchable(Touchable.enabled).visible(() -> player.getPlaceQueue().size > 0); - }); + //move all current requests to removal array so they fade out + removals.addAll(selection); + selection.clear(); + selecting = false; + }).visible(() -> !selection.isEmpty()); } @Override diff --git a/core/src/io/anuke/mindustry/type/Recipe.java b/core/src/io/anuke/mindustry/type/Recipe.java index eed821961c..2b5d02fb57 100644 --- a/core/src/io/anuke/mindustry/type/Recipe.java +++ b/core/src/io/anuke/mindustry/type/Recipe.java @@ -23,6 +23,7 @@ import static io.anuke.mindustry.Vars.*; public class Recipe extends UnlockableContent{ private static ObjectMap recipeMap = new ObjectMap<>(); + private static Array returnArray = new Array<>(); public final Block result; public final ItemStack[] requirements; @@ -55,34 +56,15 @@ public class Recipe extends UnlockableContent{ recipeMap.put(result, this); } - /** - * Returns unlocked recipes in a category. - * Do not call on the server backend, as unlocking does not exist! - */ - public static void getUnlockedByCategory(Category category, Array arr){ - if(headless){ - throw new RuntimeException("Not implemented on the headless backend!"); - } - - arr.clear(); - for(Recipe r : content.recipes()){ - if(r.category == category && (control.unlocks.isUnlocked(r)) && - !((r.mode != null && r.mode != state.mode) || !r.visibility.shown())){ - arr.add(r); - } - } - } - - /** - * Returns all recipes in a category. - */ - public static void getByCategory(Category category, Array r){ - r.clear(); + /**Returns all non-hidden recipes in a category.*/ + public static Array getByCategory(Category category){ + returnArray.clear(); for(Recipe recipe : content.recipes()){ - if(recipe.category == category){ - r.add(recipe); + if(recipe.category == category && !recipe.isHidden()){ + returnArray.add(recipe); } } + return returnArray; } public static Recipe getByResult(Block block){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java b/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java index fd861518ad..f19ec137a4 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java @@ -31,7 +31,7 @@ public class OverlayFragment extends Fragment{ config.build(group); consume.build(group); - input.buildUI(group); + //input.buildUI(group); } public void remove(){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index d424b0c999..4eb3e6b7f6 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -2,7 +2,6 @@ package io.anuke.mindustry.ui.fragments; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Interpolation; -import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.graphics.Palette; @@ -29,7 +28,6 @@ import static io.anuke.mindustry.Vars.*; public class PlacementFragment extends Fragment{ final int rowWidth = 4; - Array returned = new Array<>(); Category currentCategory = Category.turret; Block hovered, lastDisplay; Tile hoverTile; @@ -44,6 +42,7 @@ public class PlacementFragment extends Fragment{ full.table(frame -> { InputHandler input = control.input(0); + //rebuilds the category table with the correct recipes Runnable rebuildCategory = () -> { blockTable.clear(); @@ -54,7 +53,7 @@ public class PlacementFragment extends Fragment{ ButtonGroup group = new ButtonGroup<>(); group.setMinCheckCount(0); - for(Recipe recipe : recipes(currentCategory)){ + for(Recipe recipe : Recipe.getByCategory(currentCategory)){ if(index++ % rowWidth == 0){ blockTable.row(); @@ -98,6 +97,7 @@ public class PlacementFragment extends Fragment{ blockTable.act(0f); }; + //top table with hover info frame.table("clear", top -> { top.add(new Table()).growX().update(topTable -> { if((tileDisplayBlock() == null && lastDisplay == getSelected()) || @@ -113,12 +113,12 @@ public class PlacementFragment extends Fragment{ header.left(); header.add(new ImageStack(lastDisplay.getCompactIcon())).size(8*4); header.labelWrap(() -> - !control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay)) ? Bundles.get("text.blocks.unknown") : lastDisplay.formalName) - .left().width(190f).padLeft(5); + !control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay)) ? Bundles.get("text.blocks.unknown") : lastDisplay.formalName) + .left().width(190f).padLeft(5); header.add().growX(); if(control.unlocks.isUnlocked(Recipe.getByResult(lastDisplay))){ header.addButton("?", "clear-partial", () -> ui.content.show(Recipe.getByResult(lastDisplay))) - .size(8 * 5).padTop(-5).padRight(-5).right().grow(); + .size(8 * 5).padTop(-5).padRight(-5).right().grow(); } }).growX().left(); topTable.row(); @@ -155,15 +155,19 @@ public class PlacementFragment extends Fragment{ 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", blocks -> blockTable = blocks).fillY().bottom().touchable(Touchable.enabled); + frame.table("clear", blocksSelect -> { + blocksSelect.table(blocks -> blockTable = blocks).grow(); + blocksSelect.row(); + blocksSelect.table(input::buildUI).growX(); + }).fillY().bottom().touchable(Touchable.enabled); frame.addImage("blank").width(3f).fillY().color(Palette.accent); frame.table(categories -> { - categories.defaults().size(48f); + categories.defaults().size(50f); ButtonGroup group = new ButtonGroup<>(); for(Category cat : Category.values()){ - if(recipes(cat).isEmpty()) continue; + if(Recipe.getByCategory(cat).isEmpty()) continue; categories.addImageButton("icon-" + cat.name(), "clear-toggle", 16*2, () -> { currentCategory = cat; @@ -213,15 +217,7 @@ public class PlacementFragment extends Fragment{ return hoverTile == null ? null : hoverTile.block().synthetic() ? hoverTile.block() : hoverTile.floor() instanceof OreBlock ? hoverTile.floor() : null; } - Array recipes(Category cat){ - returned.clear(); - for(Recipe recipe : content.recipes()){ - if(recipe.category != cat || recipe.isHidden()) continue; - returned.add(recipe); - } - return returned; - } - + /**Show or hide the placement menu.*/ void toggle(float t, Interpolation ip){ if(shown){ shown = false; From a9321110406d9a0952dc0e3b25dc939f4f74daa4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 14:38:46 -0500 Subject: [PATCH 12/52] Removed ContentUnlockSet --- build.gradle | 2 +- .../mindustry/game/ContentUnlockSet.java | 51 ----------------- core/src/io/anuke/mindustry/game/Unlocks.java | 55 +++++++++++-------- 3 files changed, 32 insertions(+), 76 deletions(-) delete mode 100644 core/src/io/anuke/mindustry/game/ContentUnlockSet.java diff --git a/build.gradle b/build.gradle index 92579ba541..10d8492d99 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.9' roboVMVersion = '2.3.0' - uCoreVersion = 'c93c55179ec05b44926d59c5878534a3177d804f' + uCoreVersion = 'c9aadd4d0b5848dbc4dbbd0fcd701b11c30c02bb' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/src/io/anuke/mindustry/game/ContentUnlockSet.java b/core/src/io/anuke/mindustry/game/ContentUnlockSet.java deleted file mode 100644 index a779c52509..0000000000 --- a/core/src/io/anuke/mindustry/game/ContentUnlockSet.java +++ /dev/null @@ -1,51 +0,0 @@ -package io.anuke.mindustry.game; - -import com.badlogic.gdx.utils.ObjectMap; -import com.badlogic.gdx.utils.ObjectSet; -import io.anuke.mindustry.game.EventType.UnlockEvent; -import io.anuke.mindustry.type.ContentType; -import io.anuke.ucore.core.Events; - -public class ContentUnlockSet { - private ObjectMap> unlocked = new ObjectMap<>(); - private boolean dirty; - - public boolean isUnlocked(UnlockableContent content){ - if(content.alwaysUnlocked()) return true; - - if(!unlocked.containsKey(content.getContentType())){ - unlocked.put(content.getContentType(), new ObjectSet<>()); - } - - ObjectSet set = unlocked.get(content.getContentType()); - - return set.contains(content.getContentName()); - } - - public boolean unlockContent(UnlockableContent content){ - if(!content.canBeUnlocked() || content.alwaysUnlocked()) return false; - - if(!unlocked.containsKey(content.getContentType())){ - unlocked.put(content.getContentType(), new ObjectSet<>()); - } - - boolean ret = unlocked.get(content.getContentType()).add(content.getContentName()); - - //fire unlock event so other classes can use it - if(ret){ - content.onUnlock(); - Events.fire(new UnlockEvent(content)); - dirty = true; - } - - return ret; - } - - public boolean isDirty() { - return dirty; - } - - public ObjectMap> getUnlocked() { - return unlocked; - } -} diff --git a/core/src/io/anuke/mindustry/game/Unlocks.java b/core/src/io/anuke/mindustry/game/Unlocks.java index bb2e384f68..7b624263b9 100644 --- a/core/src/io/anuke/mindustry/game/Unlocks.java +++ b/core/src/io/anuke/mindustry/game/Unlocks.java @@ -1,15 +1,16 @@ 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; +import io.anuke.ucore.core.Events; import io.anuke.ucore.core.Settings; /**Stores player unlocks. Clientside only.*/ public class Unlocks{ - ContentUnlockSet set = new ContentUnlockSet(); + private ObjectMap> unlocked = new ObjectMap<>(); + private boolean dirty; static{ Settings.setSerializer(ContentType.class, (stream, t) -> stream.writeInt(t.ordinal()), stream -> ContentType.values()[stream.readInt()]); @@ -17,7 +18,15 @@ public class Unlocks{ /** Returns whether or not this piece of content is unlocked yet.*/ public boolean isUnlocked(UnlockableContent content){ - return set.isUnlocked(content); + if(content.alwaysUnlocked()) return true; + + if(!unlocked.containsKey(content.getContentType())){ + unlocked.put(content.getContentType(), new ObjectSet<>()); + } + + ObjectSet set = unlocked.get(content.getContentType()); + + return set.contains(content.getContentName()); } /** @@ -28,16 +37,27 @@ public class Unlocks{ * @return whether or not this content was newly unlocked. */ public boolean unlockContent(UnlockableContent content){ - return !set.isUnlocked(content) && currentSet().unlockContent(content); - } + if(!content.canBeUnlocked() || content.alwaysUnlocked()) return false; - private ContentUnlockSet currentSet(){ - return set; + if(!unlocked.containsKey(content.getContentType())){ + unlocked.put(content.getContentType(), new ObjectSet<>()); + } + + boolean ret = unlocked.get(content.getContentType()).add(content.getContentName()); + + //fire unlock event so other classes can use it + if(ret){ + content.onUnlock(); + Events.fire(new UnlockEvent(content)); + dirty = true; + } + + return ret; } /** Returns whether unlockables have changed since the last save.*/ public boolean isDirty(){ - return set.isDirty(); + return dirty; } /** Clears all unlocked content. Automatically saves.*/ @@ -46,24 +66,11 @@ public class Unlocks{ } public void load(){ - ObjectMap> outer = Settings.getObject("unlocks", ObjectMap.class, ObjectMap::new); - ContentUnlockSet cset = new ContentUnlockSet(); - - for (Entry> entry : outer.entries()){ - ObjectSet set = new ObjectSet<>(); - set.addAll(entry.value); - cset.getUnlocked().put(entry.key, set); - } + unlocked = Settings.getObject("unlockset", ObjectMap.class, ObjectMap::new); } public void save(){ - ObjectMap> write = new ObjectMap<>(); - - for(Entry> entry : set.getUnlocked().entries()){ - write.put(entry.key, entry.value.iterator().toArray()); - } - - Settings.putObject("unlocks", write); + Settings.putObject("unlockset", unlocked); Settings.save(); } From de508ee68f1ec0bf0b0252e6ed41f3034ce41730 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 15:08:18 -0500 Subject: [PATCH 13/52] "Legacy" unlock loading --- core/src/io/anuke/mindustry/game/Unlocks.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/core/src/io/anuke/mindustry/game/Unlocks.java b/core/src/io/anuke/mindustry/game/Unlocks.java index 7b624263b9..ff2853f59b 100644 --- a/core/src/io/anuke/mindustry/game/Unlocks.java +++ b/core/src/io/anuke/mindustry/game/Unlocks.java @@ -1,6 +1,8 @@ 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; @@ -65,8 +67,27 @@ 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(){ From f31f09d77aa045b28a2d0a3f761d4fac245da1d3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 16:40:33 -0500 Subject: [PATCH 14/52] Visual fix --- core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 4eb3e6b7f6..7ac10844df 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -70,7 +70,7 @@ public class PlacementFragment extends Fragment{ button.update(() -> { //color unplacable things gray boolean ulock = control.unlocks.isUnlocked(recipe); TileEntity core = players[0].getClosestCore(); - Color color = core != null && core.items.has(recipe.requirements) ? Color.WHITE : ulock ? Color.GRAY : Color.WHITE; + Color color = core != null && (core.items.has(recipe.requirements) || state.mode.infiniteResources) ? Color.WHITE : ulock ? Color.GRAY : Color.WHITE; button.forEach(elem -> elem.setColor(color)); button.setChecked(input.recipe == recipe); From 3c37047afb2623bee7bc52e44150639acdb7c801 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 17:56:26 -0500 Subject: [PATCH 15/52] Misc bugfixes --- core/src/io/anuke/mindustry/type/Recipe.java | 3 +-- .../ui/fragments/PlacementFragment.java | 25 ++++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/core/src/io/anuke/mindustry/type/Recipe.java b/core/src/io/anuke/mindustry/type/Recipe.java index 2b5d02fb57..daa84726e7 100644 --- a/core/src/io/anuke/mindustry/type/Recipe.java +++ b/core/src/io/anuke/mindustry/type/Recipe.java @@ -60,7 +60,7 @@ public class Recipe extends UnlockableContent{ public static Array getByCategory(Category category){ returnArray.clear(); for(Recipe recipe : content.recipes()){ - if(recipe.category == category && !recipe.isHidden()){ + if(recipe.category == category && recipe.visibility.shown() && (recipe.mode == state.mode || recipe.mode == null)){ returnArray.add(recipe); } } @@ -91,7 +91,6 @@ public class Recipe extends UnlockableContent{ return this; } - @Override public boolean alwaysUnlocked(){ return alwaysUnlocked; diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 7ac10844df..299caf0744 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Interpolation; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.game.EventType.WorldLoadGraphicsEvent; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.input.InputHandler; import io.anuke.mindustry.type.Category; @@ -13,6 +14,7 @@ import io.anuke.mindustry.ui.ImageStack; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.OreBlock; +import io.anuke.ucore.core.Events; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.scene.Group; import io.anuke.ucore.scene.actions.Actions; @@ -34,6 +36,14 @@ public class PlacementFragment extends Fragment{ Table blockTable, toggler; boolean shown = true; + public PlacementFragment(){ + Events.on(WorldLoadGraphicsEvent.class, event -> { + Group group = toggler.getParent(); + toggler.remove(); + build(group); + }); + } + @Override public void build(Group parent){ parent.fill(full -> { @@ -84,16 +94,13 @@ public class PlacementFragment extends Fragment{ } }); - if(!mobile){ - button.hovered(() -> hovered = recipe.result); - button.exited(() -> { - if(hovered == recipe.result){ - hovered = null; - } - }); - } + button.hovered(() -> hovered = recipe.result); + button.exited(() -> { + if(hovered == recipe.result){ + hovered = null; + } + }); } - blockTable.act(0f); }; From 6c744443fb8dc6caeee3c285dcca44f812fdd98f Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 19 Nov 2018 20:52:31 -0500 Subject: [PATCH 16/52] Item list value fix --- .../mindustry/content/blocks/UnitBlocks.java | 16 ++++++++-------- .../mindustry/world/consumers/Consumers.java | 2 +- .../world/meta/values/ItemListValue.java | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java index b7d9809cbb..7f4a40d602 100644 --- a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java @@ -21,7 +21,7 @@ public class UnitBlocks extends BlockList implements ContentList{ produceTime = 5700; size = 2; consumes.power(0.08f); - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30)}); + consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.lead, 30)); }}; phantomFactory = new UnitFactory("phantom-factory"){{ @@ -29,7 +29,7 @@ public class UnitBlocks extends BlockList implements ContentList{ produceTime = 7300; size = 2; consumes.power(0.2f); - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80)}); + consumes.items(new ItemStack(Items.silicon, 70), new ItemStack(Items.lead, 80), new ItemStack(Items.titanium, 80)); }}; wraithFactory = new UnitFactory("wraith-factory"){{ @@ -37,7 +37,7 @@ public class UnitBlocks extends BlockList implements ContentList{ produceTime = 1800; size = 2; consumes.power(0.1f); - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 10), new ItemStack(Items.titanium, 10)}); + consumes.items(new ItemStack(Items.silicon, 10), new ItemStack(Items.titanium, 10)); }}; ghoulFactory = new UnitFactory("ghoul-factory"){{ @@ -46,7 +46,7 @@ public class UnitBlocks extends BlockList implements ContentList{ size = 3; consumes.power(0.2f); shadow = "shadow-round-3"; - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 30), new ItemStack(Items.titanium, 30), new ItemStack(Items.plastanium, 20)}); + consumes.items(new ItemStack(Items.silicon, 30), new ItemStack(Items.titanium, 30), new ItemStack(Items.plastanium, 20)); }}; revenantFactory = new UnitFactory("revenant-factory"){{ @@ -55,7 +55,7 @@ public class UnitBlocks extends BlockList implements ContentList{ size = 4; consumes.power(0.3f); shadow = "shadow-round-4"; - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 80), new ItemStack(Items.titanium, 80), new ItemStack(Items.plastanium, 50)}); + consumes.items(new ItemStack(Items.silicon, 80), new ItemStack(Items.titanium, 80), new ItemStack(Items.plastanium, 50)); }}; daggerFactory = new UnitFactory("dagger-factory"){{ @@ -63,7 +63,7 @@ public class UnitBlocks extends BlockList implements ContentList{ produceTime = 1700; size = 2; consumes.power(0.05f); - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 10)}); + consumes.items(new ItemStack(Items.silicon, 10)); }}; titanFactory = new UnitFactory("titan-factory"){{ @@ -72,7 +72,7 @@ public class UnitBlocks extends BlockList implements ContentList{ size = 3; consumes.power(0.15f); shadow = "shadow-round-3"; - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 20), new ItemStack(Items.thorium, 30)}); + consumes.items(new ItemStack(Items.silicon, 20), new ItemStack(Items.thorium, 30)); }}; fortressFactory = new UnitFactory("fortress-factory"){{ @@ -81,7 +81,7 @@ public class UnitBlocks extends BlockList implements ContentList{ size = 3; consumes.power(0.2f); shadow = "shadow-round-3"; - consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 40), new ItemStack(Items.thorium, 50)}); + consumes.items(new ItemStack(Items.silicon, 40), new ItemStack(Items.thorium, 50)); }}; repairPoint = new RepairPoint("repair-point"){{ diff --git a/core/src/io/anuke/mindustry/world/consumers/Consumers.java b/core/src/io/anuke/mindustry/world/consumers/Consumers.java index cfabf5e7ca..9433de8c54 100644 --- a/core/src/io/anuke/mindustry/world/consumers/Consumers.java +++ b/core/src/io/anuke/mindustry/world/consumers/Consumers.java @@ -52,7 +52,7 @@ public class Consumers{ return i; } - public ConsumeItems items(ItemStack[] items){ + public ConsumeItems items(ItemStack... items){ ConsumeItems i = new ConsumeItems(items); add(i); return i; diff --git a/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java b/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java index 22e37ea7bd..af9ab67af2 100644 --- a/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java +++ b/core/src/io/anuke/mindustry/world/meta/values/ItemListValue.java @@ -38,11 +38,11 @@ public class ItemListValue implements ContentStatValue{ public void display(Table table){ if(items != null){ for(Item item : items){ - table.add(new ItemDisplay(item)); + table.add(new ItemDisplay(item)).padRight(5); } }else{ for(ItemStack stack : stacks){ - new ItemDisplay(stack.item, stack.amount); + table.add(new ItemDisplay(stack.item, stack.amount)).padRight(5); } } } From 6815e56e57e61b67817d20d3ab133d377b2e58a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=82=A4=EC=97=90=EB=A5=B4?= <44261958+Kieaer@users.noreply.github.com> Date: Tue, 20 Nov 2018 12:56:14 +0900 Subject: [PATCH 17/52] Update bundle_ko.properties (#346) --- core/assets/bundles/bundle_ko.properties | 1559 +++++++++++----------- 1 file changed, 779 insertions(+), 780 deletions(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index ed528065ac..402732502c 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -1,780 +1,779 @@ -text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) -text.credits = 제작자 -text.discord = Mindustry Discord 에 참여하세요! -text.link.discord.description = 공식 Mindustry Discord 채팅방 -text.link.github.description = 게임 소스코드 -text.link.dev-builds.description = 개발중인 빌드 -text.link.trello.description = 다음 출시될 기능들을 게시한 공식 Trello 보드 -text.link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트 -text.link.google-play.description = Google Play 스토어 정보 -text.link.wiki.description = 공식 Mindustry 위키 (영어) -text.linkfail = 링크를 여는데 실패했습니다! URL이 기기의 클립보드에 복사되었습니다. -text.gameover = 코어가 터졌습니다. 게임 오버! -text.gameover.pvp = [accent]{0}[] 팀이 승리했습니다! -text.sector.gameover = 이 구역을 공략하는데 실패했습니다. 포기 하시겠습니까? -text.sector.retry = 아니오 -text.highscore = [YELLOW]최고점수 달성! -text.wave.lasted = [accent]{0}[] 까지 버티셨습니다. -text.level.highscore = 최고 점수 : [accent]{0} -text.level.delete.title = 삭제 확인 -text.map.delete = 정말로 "[orange]{0}[]" 맵을 삭제하시겠습니까? -text.level.select = 맵 선택 -text.level.mode = 게임모드 : -text.construction.desktop = PC 에서의 조작 방법이 변경되었습니다.\n블록 선택을 해제하거나 건설을 중지하려면 [accent]스페이스 바[]를 누르세요. -text.construction.title = 블록 배치 안내서 -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 = 다음 세션에서 이 메세지를 표시하지 않습니다 -text.coreattack = < 코어가 공격받고 있습니다! > -text.unlocks = 아이템들 -text.savegame = 게임 저장 -text.loadgame = 게임 불러오기 -text.joingame = 멀티플레이 -text.addplayers = 플레이어 추가/제거 -text.customgame = 커스텀 게임 -text.sectors = 싱글 플레이 -text.sector = 구역 : [LIGHT_GRAY]{0} -text.sector.time = 시간 : [LIGHT_GRAY]{0} -text.sector.deploy = 시작 -text.sector.abandon = 초기화 -text.sector.abandon.confirm = 정말로 이 구역의 모든 진행상활을 초기화 하겠습니까?\n이 작업은 되돌릴 수 없습니다! -text.sector.resume = 계속하기 -text.sector.locked = [scarlet][[완료안됨] -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.complete.body = 구역 {0},{1} 클리어. -text.mission.wave = [accent]{0}/{1}[] 단계동안 생존하세요.남은 시간 {2}\n -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} {1}개 수집 -text.mission.resource = {0} 자원을 수집하세요 :\n[accent]{1}/{2}[] -text.mission.block = {0} 를 만드세요 -text.mission.unit = {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.none = <없음> -text.close = 닫기 -text.quit = 나가기 -text.maps = 맵 -text.continue = 계속하기 -text.nextmission = 다음 임무 -text.maps.none = [LIGHT_GRAY]맵을 찾을 수 없습니다! -text.about.button = 정보 -text.name = 이름 : -text.filename = 파일 이름 : -text.unlocked = 새 블록 잠금 해제됨 -text.unlocked.plural = 잠금 해제 -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.clientOutdated = 오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요! -text.server.kicked.serverOutdated = 오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요! -text.server.kicked.banned = 뭘 하셨는지는 모르겠지만, 이제 영원히 서버에 접속할 수 없습니다. -text.server.kicked.recentKick = 방금 추방처리 되었습니다. 잠시 기다린 후에 접속 해 주세요. -text.server.kicked.nameInUse = 이 닉네임이 이미 서버에서 사용중입니다. -text.server.kicked.nameEmpty = 닉네임에는 반드시 영어 또는 숫자가 있어야 합니다. -text.server.kicked.idInUse = 이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다. -text.server.kicked.customClient = 이 서버는 직접 빌드한 버전을 지원하지 않습니다. 공식 버전을 사용하세요. -text.host.info = [accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 포트를 사용합니다.\n[LIGHY_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 해야 합니다.\n\n[LIGHT_GRAY]참고 : LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요. -text.join.info = 여기서 [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원됩니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속할려면 서버장에게 IP를 요청해야 합니다. -text.hostserver = 서버 열기 -text.hostserver.mobile = 서버\n열기 -text.host = 서버 열기 -text.hosting = [accent]서버 여는중... -text.hosts.refresh = 새로고침 -text.hosts.discovering = LAN 게임 찾기 -text.server.refreshing = 서버 목록 새로고치는중... -text.hosts.none = [lightgray]LAN 게임을 찾을 수 없습니다! -text.host.invalid = [scarlet]서버에 연결할 수 없습니다! -text.trace = 플레이어 정보 보기 -text.trace.playername = 이름 : [accent]{0} -text.trace.ip = IP : [accent]{0} -text.trace.id = 고유 ID : [accent]{0} -text.trace.android = Android 클라이언트 : [accent]{0} -text.trace.modclient = 수정된 클라이언트 : [accent]{0} -text.trace.totalblocksbroken = 총 블록 파괴 개수 : [accent]{0} -text.trace.structureblocksbroken = 구조 블록 파괴 수 : [accent]{0} -text.trace.lastblockbroken = 마지막으로 파괴한 블록 : [accent]{0} -text.trace.totalblocksplaced = 총 설치한 블록 개수 : [accent]{0} -text.trace.lastblockplaced = 마지막으로 설치한 블록 : [accent]{0} -text.invalidid = 잘못된 클라이언트 ID 입니다! 공식 Mindustry Discord 으로 버그 보고서를 제출 해 주세요. -text.server.bans = 차단된 유저 -text.server.bans.none = 차단된 플레이어가 없습니다. -text.server.admins = 관리자 -text.server.admins.none = 관리자가 없습니다! -text.server.add = 서버 추가 -text.server.delete = 이 서버를 삭제 하시겠습니까? -text.server.hostname = 호스트 : {0} -text.server.edit = 서버 수정 -text.server.outdated = [crimson]서버 버전이 낮습니다![] -text.server.outdated.client = [Crimson]클라이언트 버전이 낮습니다![] -text.server.version = [lightgray]서버 버전 : {0} -text.server.custombuild = [yellow]커스텀 서버 -text.confirmban = 이 플레이어를 차단하시겠습니까? -text.confirmkick = 정말로 이 플레이어를 추방시키겠습니까? -text.confirmunban = 이 플레이어를 차단해제 하시겠습니까? -text.confirmadmin = 이 플레이어를 관리자로 만들겠습니까? -text.confirmunadmin = 이 플레이어를 일반 유저로 만들겠습니까? -text.joingame.title = 게임 참가 -text.joingame.ip = IP : -text.disconnect = 서버와 연결이 해제되었습니다. -text.disconnect.data = 맵 데이터를 받아오는데 실패했습니다. -text.connecting = [accent]연결중... -text.connecting.data = [accent]맵 데이터 다운로드중... -text.server.port = 포트 : -text.server.addressinuse = 이 주소는 이미 사용중입니다! -text.server.invalidport = 포트 번호가 잘못되었습니다. -text.server.error = [crimson]{0}[orange]서버를 여는데 오류가 발생했습니다.[] -text.save.old = 이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다. -text.save.new = 새로 저장 -text.save.overwrite = 이 저장 슬롯을 덮어씌우겠습니까? -text.overwrite = 덮어쓰기 -text.save.none = 저장 파일을 찾지 못했습니다! -text.saveload = [accent]저장중... -text.savefail = 게임을 저장하지 못했습니다! -text.save.delete.confirm = 이 저장파일을 삭제 하시겠습니까? -text.save.delete = 삭제 -text.save.export = 저장파일 내보내기 -text.save.import.invalid = [orange]파일이 잘못되었습니다! -text.save.import.fail = [crimson]저장파일을 불러오지 못함 : [orange]{0} -text.save.export.fail = [crimson]저장파일을 내보내지 못함 : [orange]{0} -text.save.import = 저장파일 불러오기 -text.save.newslot = 저장 파일이름 : -text.save.rename = 이름 변경 -text.save.rename.text = 새 이름 : -text.selectslot = 저장슬롯을 선택하십시오. -text.slot = [accent]{0}번째 슬롯 -text.save.corrupted = [orange]세이브 파일이 손상되었거나 잘못된 파일입니다! 만약 게임을 업데이트 했다면 이것은 아마 저장 형식 변경일 것이고, 이것은 버그가 [scarlet]아닙니다[]. -text.sector.corrupted = [orange]저장 파일에서 구역을 발견했으나 불러오지 못했습니다.\n새로 생성되었습니다. -text.empty = <비어있음> -text.on = 켜기 -text.off = 끄기 -text.save.autosave = 자동저장 : {0} -text.save.map = 맵 : {0} -text.save.wave = {0}단계[] -text.save.difficulty = 난이도 : {0} -text.save.date = 마지막 저장날짜 : {0} -text.save.playtime = 플레이시간 : {0} -text.confirm = 확인 -text.delete = 삭제 -text.ok = 확인 -text.open = 열기 -text.cancel = 취소 -text.openlink = 링크 열기 -text.copylink = 링크 복사 -text.back = 뒤로가기 -text.quit.confirm = 정말로 종료하시겠습니까? -text.changelog.title = 변경사항 -text.changelog.loading = 변경사항 가져오는중... -text.changelog.error.android = [orange]게임 변경사항은 가끔 Android 4.4 이하에서 작동하지 않습니다. 이것은 내부 Android 버그 때문입니다. -text.changelog.error.ios = [orange]현재 iOS에서는 변경 사항을 지원하지 않습니다. -text.changelog.error = [scarlet]게임 변경사항을 가져오는 중 오류가 발생했습니다![]\n인터넷 연결을 확인하십시오. -text.changelog.current = [orange][[현재 버전] -text.changelog.latest = [orange][[최신 버전] -text.loading = [accent]불러오는중... -text.saving = [accent]저장중... -text.wave = [orange]{0}단계 -text.wave.waiting = 다음 단계 시작까지 {0}초 -text.waiting = [LIGHT_GRAY]대기중... -text.waiting.players = 다른 플레이어를 기다리는 중.. -text.wave.enemies = [LIGHT_GRAY]{0} 마리 남았음 -text.wave.enemy = [LIGHT_GRAY]{0} 마리 남음 -text.loadimage = 사진 불러오기 -text.saveimage = 사진 저장 -text.unknown = 알 수 없음 -text.custom = 커스텀 -text.builtin = 기본맵 -text.map.delete.confirm = 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! -text.map.random = [accent]랜덤 맵 -text.map.nospawn = 이 맵에 플레이어가 스폰 할 코어가 없습니다! 맵 편집기에서 [ROYAL]파란색[]코어를 맵에 추가하세요. -text.map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [scarlet]빨간팀[] 코어를 추가하세요. -text.map.invalid = 파일이 잘못되었거나 손상되어 맵을 열 수 없습니다. -text.editor.brush = 브러쉬 -text.editor.slope = \\ -text.editor.openin = 편집기 열기 -text.editor.oregen = 광물 무작위 생성 -text.editor.oregen.info = 광물 무작위 생성 : -text.editor.mapinfo = 맵 정보 -text.editor.author = 만든이 : -text.editor.description = 설명 : -text.editor.name = 이름 : -text.editor.teams = 팀 -text.editor.elevation = 지형 높이 -text.editor.errorimageload = [orange]{0}[] 파일을 불러오는데 오류가 발생했습니다. -text.editor.errorimagesave = [orange]{0}[] 파일 저장중 오류가 발생했습니다. -text.editor.generate = 생성 -text.editor.resize = 맵 크기조정 -text.editor.loadmap = 맵 불러오기 -text.editor.savemap = 맵 저장 -text.editor.saved = 저장됨! -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.importfile = 파일 가져오기 -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.unsaved = [scarlet]변경사항을 저장하지 않았습니다![]\n정말로 나가시겠습니까? -text.editor.resizemap = 맵 크기 조정 -text.editor.mapname = 맵 이름 : -text.editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다. -text.editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까? -text.editor.selectmap = 불러올 맵 선택 : -text.width = 넓이 : -text.height = 높이 : -text.menu = 메뉴 -text.play = 플레이 -text.load = 불러오기 -text.save = 저장 -text.fps = {0}FPS -text.tps = {0}TPS -text.ping = ping : {0}ms -text.language.restart = 언어를 변경하려면 게임을 다시시작 해 주세요. -text.settings = 설정 -text.tutorial = 게임 방법 -text.editor = 편집기 -text.mapeditor = 맵 편집기 -text.donate = 기부 -text.connectfail = [crimson]{0}[orange] 서버에 연결하지 못했습니다.[] -text.error.unreachable = 서버에 연결하지 못했습니다. -text.error.invalidaddress = 잘못된 주소입니다. -text.error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하십시오. -text.error.mismatch = 패킷 오류:\n클라이언트/서버 버전이 일치하지 않습니다.\n접속할려는 서버가 최신 버전의 Mindustry 인지 확인하세요! -text.error.alreadyconnected = 이미 접속중입니다. -text.error.mapnotfound = 맵 파일을 찾을 수 없습니다! -text.error.any = 알 수 없는 네트워크 오류. -text.settings.language = 언어 -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.clearsectors = 구역 초기화 -text.settings.clearunlocks = 잠금 해제 초기화 -text.settings.clearall = 모두 초기화 -text.paused = 일시 정지 -text.yes = 예 -text.no = 아니오 -text.info.title = [accent]정보 -text.error.title = [crimson]오류가 발생했습니다. -text.error.crashtitle = 오류가 발생했습니다. -text.blocks.blockinfo = 블록 정보 -text.blocks.powercapacity = 최대 전력 용량 -text.blocks.powershot = 1발당 전력 소모량 -text.blocks.targetsair = 공중공격 가능 -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.inputitemcapacity = 입력 아이템 용량 -text.blocks.outputitemcapacity = 출력 아이템 용량 -text.blocks.itemcapacity = 저장 용량 -text.blocks.basepowergeneration = 기지 전력 생성기 -text.blocks.powertransferspeed = 전력 전송량 -text.blocks.craftspeed = 생산 속도 -text.blocks.inputliquid = 사용되는 액체 -text.blocks.inputliquidaux = 보조 액체 -text.blocks.inputitem = 사용되는 아이템 -text.blocks.inputitems = 사용되는 아이템들 -text.blocks.outputitem = 출력 아이템 -text.blocks.drilltier = 드릴 -text.blocks.drillspeed = 기본 드릴 속도 -text.blocks.liquidoutput = 액체 출력 -text.blocks.liquidoutputspeed = 액체 출력속도 -text.blocks.liquiduse = 액체 사용량 -text.blocks.coolant = 냉각제 -text.blocks.coolantuse = 냉각수 사용 -text.blocks.inputliquidfuel = 연료 액 -text.blocks.liquidfueluse = 액체 연료 사용 -text.blocks.explosive = 이 블록이 터지면 주변 블록과 같이 자폭을 합니다!! -text.blocks.health = 체력 -text.blocks.inaccuracy = 오차각 -text.blocks.shots = 발포 횟수 -text.blocks.reload = 재장전 -text.blocks.inputfuel = 연료 -text.blocks.fuelburntime = 연료 연소 시간 -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.degrees = 도 -text.unit.seconds = 초 -text.unit.items = 아이템 -text.category.general = 일반 -text.category.power = 전력 -text.category.liquids = 액체 -text.category.items = 아이템 -text.category.crafting = 제작 -text.category.shooting = 사격 -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.screenshake.name = 화면 흔들기 -setting.effects.name = 화면 효과 -setting.sensitivity.name = 컨트롤러 감도 -setting.saveinterval.name = 자동저장 간격 -setting.seconds = {0}초 -setting.fullscreen.name = 전체 화면 -setting.multithread.name = 멀티 스레드 -setting.fps.name = FPS 표시 -setting.vsync.name = VSync 활성화 -setting.lasers.name = 파워 레이져 표시 -setting.minimap.name = 미니맵 보기 -setting.musicvol.name = 음악 크기 -setting.mutemusic.name = 음소거 -setting.sfxvol.name = 효과음 크기 -setting.mutesound.name = 소리 끄기 -setting.crashreport.name = 오류 보고서 보내기 -text.keybind.title = 키 바인딩 -category.general.name = 일반 -category.view.name = 보기 -category.multiplayer.name = 멀티플레이 -command.attack = 공격 -command.retreat = 후퇴 -command.patrol = 순찰 -keybind.press = 키를 누르세요... -keybind.press.axis = 축 또는 키를 누르세요... -keybind.move_x.name = 오른쪽/왼쪽 이동 -keybind.move_y.name = 위쪽/아래쪽 이동 -keybind.select.name = 선택 -keybind.break.name = 파괴 -keybind.deselect.name = 선택해제 -keybind.shoot.name = 사격 -keybind.zoom_hold.name = 길게눌러 확대 -keybind.zoom.name = 확대 -keybind.menu.name = 메뉴 -keybind.pause.name = 일시중지 -keybind.dash.name = 달리기 -keybind.chat.name = 채팅 -keybind.player_list.name = 플레이어 목록 -keybind.console.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.zoom_minimap.name = 미니맵 확대 -mode.text.help.title = 도움말 -mode.waves.name = 단계 -mode.waves.description = 이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 단계가 시작됩니다. -mode.sandbox.name = 샌드박스 -mode.sandbox.description = 무한한 자원과 다음단계 시작을 위한 타이머가 없습니다. -mode.custom.warning = [scarlet]서버에서 잠금해제한 블록은 저장되지 않습니다.[]\n\n구역을 플레이 하여 잠금해제하세요. -mode.custom.warning.read = 꼭 읽어보시길 바랍니다 :\n[scarlet]커스텀 게임에서 잠금해제한 블록은 구역 플레이나 다른 모드에서 적용되지 않습니다!\n\n[LIGHT_GRAY](이게 필요하지 않았으면 좋겠는데) -mode.freebuild.name = 자유 건축 -mode.freebuild.description = 제한된 자원과 다음단계 시작을 위한 타이머가 없습니다. -mode.pvp.name = PvP -mode.pvp.description = 몹이 아닌 실제 플레이어와 PvP를 합니다. -content.item.name = 아이템 -content.liquid.name = 액체 -content.unit.name = 유닛 -content.recipe.name = 블록 -content.mech.name = 기체 -item.stone.name = 돌 -item.stone.description = 주로 용암을 사용하여 얻을 수 있는 자원입니다. -item.copper.name = 구리 -item.copper.description = 모든 유형의 블록에서 광범위하게 사용되는 자원입니다. -item.lead.name = 납 -item.lead.description = 쉽게 구할 수 있으며, 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. -item.coal.name = 석탄 -item.coal.description = 쉽게 구할 수 있으며, 주로 제련소 등에서 연료로 사용됩니다. -item.dense-alloy.name = 합금 -item.dense-alloy.description = 납과 구리로 만든 튼튼한 합금.\n고급 수송 블록이나 상위 티어 블록을 건설하는데 사용됩니다. -item.titanium.name = 티타늄 -item.titanium.description = 파이프 재료나 고급 드릴, 비행기/기체 등에서 재료로 사용되는 자원입니다. -item.thorium.name = 토륨 -item.thorium.description = 건물의 재료, 포탑의 탄약 또는 핵연료로 사용되는 방사성 금속입니다. -item.silicon.name = 실리콘 -item.silicon.description = 매우 유용한 반도체로, 태양 전지판과 복잡한 전자 제품에 사용할 수 있습니다. -item.plastanium.name = 플라스터늄 -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 = 이것은 유기농 덤불입니다!\n압축기에 넣어 석유로 바꿀 수 있습니다. -item.sand.name = 모래 -item.sand.description = 합금이나 플럭스 등에서 제련시 광범위하게 사용되는 일반적인 재료입니다. -item.blast-compound.name = 화합물 -item.blast-compound.description = 포탑 및 건설의 재료로 사용되는 휘발성 화합물.\n연료로도 사용할 수 있지만, 별로 추천하지는 않습니다. -item.pyratite.name = 피라테 -item.pyratite.description = 폭발성을 가진 재료로, 주로 포탑의 탄약으로 사용됩니다. -liquid.water.name = 물 -liquid.lava.name = 용암 -liquid.oil.name = 석유 -liquid.cryofluid.name = 냉각수 -mech.alpha-mech.name = 알파 -mech.alpha-mech.weapon = 중무장 소총 -mech.alpha-mech.ability = 드론 소환 -mech.alpha-mech.description = 표준 기체.\n적절한 속도와 공격력을 갖추고 있으며, 공격 능력을 높이기 위해 최대 3대의 드론을 만들 수 있습니다. -mech.delta-mech.name = 델타 -mech.delta-mech.weapon = 전격 생산기 -mech.delta-mech.ability = 충전 -mech.delta-mech.description = 빠르게 이동하는 적을 처치하기 위한 가벼운 기체.\n구조물에는 거의 피해를 주지 않지만, 전격 무기를 사용하여 많은 적군을 매우 빠르게 죽일 수 있습니다. -mech.tau-mech.name = 타우 -mech.tau-mech.weapon = 건물 수리총 -mech.tau-mech.ability = 유닛 치료 -mech.tau-mech.description = 지원형 기체.\n총을 발사하여 건물을 치료하고 회복 능력 사용으로 화재를 진압하거나, 반경 내 아군을 치유시킵니다. -mech.omega-mech.name = 오메가 -mech.omega-mech.weapon = 전방 유도미사일 -mech.omega-mech.ability = 방어모드 -mech.omega-mech.description = 지상 기체 최종판이자 건물 파괴용으로 적합한 부피가 크고 튼튼한 기체. 방어 모드는 최대 90% 의 피해를 줄일 수 있습니다. -mech.dart-ship.name = 다트 -mech.dart-ship.weapon = 소총 -mech.dart-ship.description = 표준 비행선. 빠르고 가볍지만 공격력이 거의 없고 채광 속도가 느립니다. -mech.javelin-ship.name = 자비린 -mech.javelin-ship.description = 치고 빠지는 공격을 위한 비행선. 처음에는 느리지만, 가속도가 붙어 엄청난 속도로 미사일 피해를 입힐 수 있으며, 전격 능력을 사용할 수 있습니다. -mech.javelin-ship.weapon = 유도 미사일 -mech.javelin-ship.ability = 가속 전격 생성기 -mech.trident-ship.name = 삼지창 -mech.trident-ship.description = 대형 공중 폭격기. 당연하게도 엄청 단단합니다. -mech.trident-ship.weapon = 폭탄 저장고 -mech.glaive-ship.name = 글레브 -mech.glaive-ship.description = 크고 잘 무장된 총을 가진 비행선. 방화용 리피터가 장착되어 있으며, 가속도와 최대속도가 높습니다. -mech.glaive-ship.weapon = 방화총 -text.item.explosiveness = [LIGHT_GRAY]폭발력 : {0} -text.item.flammability = [LIGHT_GRAY]인화성 : {0} -text.item.radioactivity = [LIGHT_GRAY]방사능 : {0} -text.item.fluxiness = [LIGHT_GRAY]플럭스 파워 : {0} -text.unit.health = [LIGHT_GRAY]체력 : {0} -text.unit.speed = [LIGHT_GRAY]속도 : {0} -text.mech.weapon = [LIGHT_GRAY]무기 : {0} -text.mech.armor = [LIGHT_GRAY]방어력 : {0} -text.mech.itemcapacity = [LIGHT_GRAY]아이템 수용 용량 : {0} -text.mech.minespeed = [LIGHT_GRAY]채광 속도 : {0} -text.mech.minepower = [LIGHT_GRAY]채광 레벨 : {0} -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.core.name = 코어 -block.metalfloor.name = 철판 -block.deepwater.name = 깊은물 -block.water.name = 물 -block.lava.name = 용암 -block.tar.name = 타르 -block.blackstone.name = 검은돌 -block.stone.name = 돌 -block.dirt.name = 흙 -block.sand.name = 모래 -block.ice.name = 얼음 -block.snow.name = 눈 -block.grass.name = 잔디 -block.shrub.name = 관목 -block.rock.name = 바위 -block.blackrock.name = 검은바위 -block.icerock.name = 얼음바위 -block.copper-wall.name = 구리벽 -block.copper-wall-large.name = 큰 구리벽 -block.dense-alloy-wall.name = 합금 벽 -block.dense-alloy-wall-large.name = 큰 합금 벽 -block.phase-wall.name = 메타벽 -block.phase-wall-large.name = 큰 메타벽 -block.thorium-wall.name = 토륨벽 -block.thorium-wall-large.name = 대형 토륨벽 -block.door.name = 문 -block.door-large.name = 대형문 -block.duo.name = 듀오 -block.scorch.name = 스코치 -block.hail.name = 헤일 -block.lancer.name = 랜서 -block.conveyor.name = 컨베이어 -block.titanium-conveyor.name = 티타늄 컨베이어 -block.junction.name = 교차기 -block.router.name = 분배기 -block.distributor.name = 대형 분배기 -block.sorter.name = 필터 -block.sorter.description = 아이템을 넣어서 필터에 설정된 아이템일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 통과합니다. -block.overflow-gate.name = 오버플로 게이트 -block.overflow-gate.description = 정면으로 가는 자원이 막히면 옆으로 출력하고, 그렇지 않으면 계속 정면으로 출력합니다. -block.smelter.name = 제련소 -block.arc-smelter.name = 대형 제련소 -block.silicon-smelter.name = 실리콘 제련소 -block.phase-weaver.name = 메타 합성기 -block.pulverizer.name = 분쇄기 -block.cryofluidmixer.name = 냉각수 제조기 -block.melter.name = 융해기 -block.incinerator.name = 소각로 -block.biomattercompressor.name = 바이오메터 압축기 -block.separator.name = 셉터 -block.centrifuge.name = 원심 분리기 -block.power-node.name = 전력 송신기 -block.power-node-large.name = 대형 전력 송신기 -block.battery.name = 배터리 -block.battery-large.name = 대형 배터리 -block.combustion-generator.name = 석탄 발전기 -block.turbine-generator.name = 터빈 발전기 -block.mechanical-drill.name = 기계식 드릴 -block.pneumatic-drill.name = 강철 드릴 -block.laser-drill.name = 레이저 드릴 -block.water-extractor.name = 물 추출기 -block.cultivator.name = 온실 -block.alpha-mech-pad.name = 알파 기체 패드 -block.dart-ship-pad.name = 다트 비행선 패드 -block.delta-mech-pad.name = 델타 기체 패드 -block.javelin-ship-pad.name = 자비린 비행선 패드 -block.trident-ship-pad.name = 삼지창 비행선 패드 -block.glaive-ship-pad.name = 글레브 비행선 패드 -block.omega-mech-pad.name = 오메가 기체 패드 -block.tau-mech-pad.name = 타우 기체 패드 -block.conduit.name = 파이프 -block.mechanical-pump.name = 기계식 펌프 -block.itemsource.name = 아이템 소스 -block.itemvoid.name = 히오스 -block.liquidsource.name = 무한 액체공급 장치 -block.powervoid.name = 방전장치 -block.powerinfinite.name = 무한 전력공급 장치 -block.unloader.name = 언로더 -block.vault.name = 창고 -block.wave.name = 파도 -block.swarmer.name = 스웜 -block.salvo.name = 살보 -block.ripple.name = 립플 -block.phase-conveyor.name = 메타 컨베이어 -block.bridge-conveyor.name = 터널 -block.plastanium-compressor.name = 플라스터늄 압축기 -block.pyratite-mixer.name = 피라테 제조기 -block.blast-mixer.name = 화합물 제조기 -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.repair-point.name = 정비소 -block.pulse-conduit.name = 퓨즈 파이프 -block.phase-conduit.name = 메타 파이프 -block.liquid-router.name = 액체 분배기 -block.liquid-tank.name = 물탱크 -block.liquid-junction.name = 액체 교차기 -block.bridge-conduit.name = 다리 파이프 -block.rotary-pump.name = 동력 펌프 -block.thorium-reactor.name = 토륨 원자로 -block.command-center.name = 명령 본부 -block.mass-driver.name = 물질 이동기 -block.blast-drill.name = 고속 발열 드릴 -block.thermal-pump.name = 지열 펌프 -block.thermal-generator.name = 지열 발전기 -block.alloy-smelter.name = 설금 제련소 -block.mend-projector.name = 치료 프로젝터 -block.surge-wall.name = 설금벽 -block.surge-wall-large.name = 큰 설금벽 -block.cyclone.name = 사이클론 -block.fuse.name = 퓨즈 -block.shock-mine.name = 전격 지뢰 -block.overdrive-projector.name = 가속 프로젝터 -block.force-projector.name = 강제 프로젝터 -block.arc.name = 아크 -block.rtg-generator.name = 토륨 발전소 -block.spectre.name = 스펙터 -block.meltdown.name = 멜트다운 -block.container.name = 컨테이너 -block.core.description = 게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다. -team.blue.name = 블루팀 -team.red.name = 레드팀 -team.orange.name = 오렌지팀 -team.none.name = 공기팀 -team.green.name = 그린팀 -team.purple.name = 보라색팀 -unit.alpha-drone.name = 알파 드론 -unit.spirit.name = 스피릿 드론 -unit.spirit.description = 기본 드론 유닛. 기본적으로 코어에서 1개가 스폰됩니다. 자동으로 채광하며 아이템을 수집하고, 블록을 수리합니다. -unit.phantom.name = 팬텀 드론 -unit.phantom.description = 첨단 드론 유닛. 광석을 자동으로 채광하며, 아이템을 수집하고 블록을 수리합니다. 일반 드론보다 훨씬 효과적입니다. -unit.dagger.name = 귀여운 디거 -unit.dagger.description = 밈의 대상으로 지정되어 이름이 바뀐 기본 지상 유닛입니다. -unit.titan.name = 타이탄 -unit.titan.description = 고급 지상 유닛입니다. 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다. -unit.ghoul.name = 구울 폭격기 -unit.ghoul.description = 무거운 지상 폭격기 입니다. 화합물 또는 피라테를 탄약으로 사용합니다. -unit.wraith.name = 유령 전투기 -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\n2단계 동안 코어를 보호하고 더 많은 터렛을 만드세요. -tutorial.lead = 더 많은 광석을 이용할 수 있습니다. [accent]납[]을 찾아 탐색하세요.\n\n아이템을 코어로 전송할려면 플레이어 기체 또는 비행기에서 코어로 드래그 하세요. -tutorial.smelter = 구리와 납은 약한 금속입니다.\n[accent]합금[]은 제련소에서 만들 수 있습니다.\n\n하나 만드세요. -tutorial.densealloy = 이 제련소는 이제 합금을 생산할 것입니다.\n몇개 더 생산하세요.\n필요한 경우 더 만드세요. -tutorial.siliconsmelter = 이제 이코어는 채굴과 수리하기 위한[accent] 스피릿 드론[]을 생성 할 것 입니다.\n\n[accent]실리콘[]을 사용해 다른 유닛을 생성하기 위한 공장을 만들 수 있습니다.\n실리콘 제련기를 제작하세요! -tutorial.silicondrill = 실리콘을 제작하려면[accent] 석탄[] 과[accent] 모래[]가 필요합니다.\n드릴을 먼저 건설해보는건 어떤가요? -tutorial.generator = 이 기술은[LIGHT_YELLOW] 애너지[]가 필요합니다.\n[accent] 석탄 발전기[]를 건설하세요. -tutorial.generatordrill = [accent] 석탄 발전기[]는 연료가 필요합니다.\n[accent] 석탄[]을 드릴로 채굴해서 연료를 체워주세요. -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 = 구리로 만든 벽. -block.copper-wall-large.description = 구리로 만든 큰 벽. -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-large.description = 설금을 재료로 한 큰 벽.\n데미지를 입으면 번개를 일으켜 대상에게 피해를 입힙니다. -block.door.description = 유닛이 지나갈 수 있도록 만든 문. 클릭하면 열고 닫습니다. -block.door-large.description = 유닛이 자나갈 수 있도록 만든 큰 문. 클릭하면 열고 닫습니다. -block.mend-projector.description = 주위 건물을 치료하는 건물입니다. -block.overdrive-projector.description = 범위 내 모든 행동의 속도를 높여주는 보조형 방어 건물입니다. -block.force-projector.description = 보호막을 생성하는 건물.\n기본적으로 전기만 있으면 작동하지만, 메타를 넣어 보호막의 범위를 크게 확장시킬 수 있습니다. -block.shock-mine.description = 적이 이 블록을 지나가면 전격 공격을 하는 함정형 방어 건물입니다. -block.duo.description = 범용성을 가진 터렛.\n지상 및 공중공격을 하며, 초중반에 유용합니다. -block.arc.description = 목표 방향으로 전격 공격을 하는 포탑입니다. -block.hail.description = 장거리 지상 공격을 하는 터렛입니다.\n적이 오기 전에 쓸어버릴 수 있습니다. -block.lancer.description = 중거리 레이져 포탑입니다.\n적을 관통하기 때문에 뭉쳐있는 적들에게 매우 효과적입니다. -block.wave.description = 적이 있는 자리에 액체를 뿌립니다.\n이 포탑을 활용하여 액체를 뿌린 곳에 불을 붙이거나 적을 느리게 할 수 있습니다. -block.salvo.description = 명중률이 높고, 3발씩 끊어 발사하는 포탑입니다. -block.swarmer.description = 4발씩 끊어서 유도체를 발사하는 포탑입니다 -block.ripple.description = 4개의 탄약으로 나눠 발사하여 명중률이 낮지만, 사거리가 매우 긴 포탑입니다. -block.cyclone.description = 낮은 명중률과 높은 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. -block.fuse.description = 단거리에서 범위형 레이저를 발사하는 포탑입니다. -block.spectre.description = 높은 명중률과 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. -block.meltdown.description = 목표를 따라 초대형 레이져를 발사하는 포탑입니다.\n뭉쳐있는 몹에게 매우 효과가 좋습니다. -block.conveyor.description = 느린 속도로 자원을 수송할 수 있는 컨베이어. -block.titanium-conveyor.description = 빠른 속도로 자원을 수송할 수 있는 컨베이어. -block.phase-conveyor.description = 자원을 순간이동 시켜 주는 컨베이어 입니다. -block.junction.description = 컨베이어를 교차시켜 자원을 수송할 때 사용할 수 있는 블록입니다. -block.mass-driver.description = 자원을 받아서 다른 물질 이동기로 전달할 수 있는 블록입니다.\n엄청난 사거리를 가지고 있으며, 주로 컨베이어가 접근할 수 없는 곳에 유용하게 사용됩니다. -block.smelter.description = 합금을 제작할 수 있는 건물입니다. -block.arc-smelter.description = 합금을 제작할 수 있는 건물이지만, 이 건물은 석탄이 필요 없고 좀더 빠른 속도로 합금을 생산해낼 수 있습니다. -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.solidifer.description = 용암을 돌로 만들 수 있는 건물입니다. -block.melter.description = 돌로 용암을 만들 수 있는 건물입니다. -block.incinerator.description = 불필요한 아이템을 소각시켜 줄 수 있는 건물입니다. -block.biomattercompressor.description = 잔디밭에서 바이오메터를 추출할 수 있는 건물입니다. -block.separator.description = 돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다. -block.centrifuge.description = 돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물이지만, 이 건물은 좀 더 다양한 자원을 얻을 수 있게 해 줍니다. -block.power-node.description = 생성된 전기를 다른 건물로 전달하기 위한 전력 노드입니다. -block.power-node-large.description = 생성된 전기를 다른 건물로 전달하기 위한 건물이며, 일반 노드보다 더 많은 전력을 이동시킬 수 있습니다. -block.battery.description = 흔히 아는 충전식 배터리입니다.\n전력 생산건물에서 전력이 떨어질경우, 이 배터리를 전력 노드에 연결하면 이 배터리에 에 있는 전력을 사용하여 전기를 소모하는 건물에 전력을 지속적으로 공급할 수 있습니다. -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 = 토륨을 원료로 하는 토륨 원자로 입니다.\n많은 전력을 생산하지만 엄청난 열을 발생시키기 때문에, 많은 량의 물 또는 냉각수가 있어야 터지지 않고 작동합니다. -block.rtg-generator.description = 냉각은 필요 없지만 토륨 원자로보다 적은량의 전력을 생산하는 방사선 동위원소 열전자 발전기. -block.unloader.description = 해당 창고 및 코어에서 자원을 빼내는데 사용됩니다. -block.container.description = 아이템을 임시로 저장할 수 있는 소형 창고입니다. -block.vault.description = 아이템을 임시로 저장할 수 있는 대형 창고입니다. -block.mechanical-drill.description = 구리로 제작할 수 있는 기본 드릴입니다. -block.pneumatic-drill.description = 돌, 티타늄을 채광할 수 있는 고급 드릴입니다. -block.laser-drill.description = 토륨을 채광할 수 있는 최고급 드릴입니다.\n전력과 물을 공급하여 빠른 속도로 채광할 수 있습니다. -block.blast-drill.description = 최상위 드릴입니다. 엄청난 양의 전력과 물을 소모하는 대신, 매우 빠른 속도로 채광합니다. -block.water-extractor.description = 바닥에서 물을 추출하여 건물에 공급할 수 있는 건물입니다. -block.cultivator.description = 잔디에서 바이오메터를 추출할 수 있는 건물입니다. -block.oil-extractor.description = 기름(타르)을 추출 해 주는 건물입니다. -block.dart-ship-pad.description = 다트 비행선으로 바꿀 수 있는 패드입니다. -block.trident-ship-pad.description = 삼지창 비행선으로 바꿀 수 있는 패드입니다. -block.javelin-ship-pad.description = 자비린 비행선으로 바꿀 수 있는 패드입니다. -block.glaive-ship-pad.description = 글레브 비행선으로 바꿀 수 있는 패드입니다. -block.tau-mech-pad.description = 타우 기체로 바꿀 수 있는 패드 -block.delta-mech-pad.description = 델타 기체로 바꿀 수 있는 패드입니다. -block.omega-mech-pad.description = 오메가 기체로 바꿀 수 있는 패드 -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 = 생산된 유닛들을 제어할 수 있는 건물.\n첫번째 버튼은 적 기지로 공격하며, 두번째는 대기 상태, 세번째는 기지 근처를 돌며 정찰합니다. -block.conduit.description = 일반 파이프. 액체가 지나갈 수 있도록 해 줍니다. -block.pulse-conduit.description = 티타늄으로 만들어 졌으며, 일반 파이프보다 액체 수용량이 높습니다. -block.phase-conduit.description = 물을 먼거리로 순간이동 시켜 주는 장치입니다. -block.liquid-router.description = 물펌프를 다른 방향으로 분배할 수 있게 하는 블럭입니다. -block.liquid-tank.description = 액체 종류를 저장할 수 있는 물탱크 입니다. -block.liquid-junction.description = 물펌프와 다른 물펌프를 서로 교차시키게 할 수 있는 블럭입니다. -block.bridge-conduit.description = 다리와 다리 사이를 연결하여 액체가 지나갈 수 있게 해 줍니다.\n주로 다리 사이에 지나갈 수 없는 장애물이 있을 때 사용합니다. -block.mechanical-pump.description = 구리로 제작할 수 있는 기계식 물펌프입니다. -block.rotary-pump.description = 일반 물 펌프보다 더 빠른 속도로 물을 끌어올릴 수 있는 펌프입니다. -block.thermal-pump.description = 용암 위에서 사용할 수 있는 펌프입니다. -block.router.description = 한 방향에서 아이템을 받은 후 최대 3개의 다른 방향으로 동일하게 출력합니다.\n재료를 한곳에서 여러 대상으로 분할하여 운반하는데 유용합니다. -block.distributor.description = 아이템을 최대 7개의 다른 방향으로 똑같이 분할하는 고급 분배기. -block.bridge-conveyor.description = 고급 자원 수송 블록.\n지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다. -block.alpha-mech-pad.description = 알파 기체로 바꿀 수 있는 패드입니다. -block.itemsource.description = 자원을 선택하면 그 자원이 무한하게 생성되는 블록입니다. -block.liquidsource.description = 무한한 액체를 출력해냅니다. -block.itemvoid.description = 아이템을 시공으로 빠트려 사라지게 만듭니다. -block.powerinfinite.description = 무한한 전력을 공급해주는 블록입니다. -block.powervoid.description = 설정된 아이템을 계속해서 출력하는 블록입니다. -liquid.water.description = 지상 유닛이 이 위를 지나가면 이동속도가 느려지고, 깊은 물에 빠지면 죽습니다. -liquid.lava.description = 지상 유닛이 이 위를 지나가면 이동속도가 매우 느려지고, 지속적으로 데미지를 입습니다. -liquid.oil.description = 일부 조합 블록에서 사용되는 자원입니다. -liquid.cryofluid.description = 포탑 및 토륨 원자로에서 사용되는 자원입니다. 누출시 폭발 및 방화의 위험성이 있습니다. +text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) +text.credits=제작자 +text.discord=Mindustry Discord 에 참여하세요! +text.link.discord.description=공식 Mindustry Discord 채팅방 +text.link.github.description=게임 소스코드 +text.link.dev-builds.description=개발중인 빌드 +text.link.trello.description=다음 출시될 기능들을 게시한 공식 Trello 보드 +text.link.itch.io.description=PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트 +text.link.google-play.description=Google Play 스토어 정보 +text.link.wiki.description=공식 Mindustry 위키 (영어) +text.linkfail=링크를 여는데 실패했습니다! URL이 기기의 클립보드에 복사되었습니다. +text.gameover=코어가 터졌습니다. 게임 오버! +text.gameover.pvp=[accent]{0}[] 팀이 승리했습니다! +text.sector.gameover=이 지역을 공략하는데 실패했습니다. 포기 하시겠습니까? +text.sector.retry=아니오 +text.highscore=[YELLOW]최고점수 달성! +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.construction.desktop=PC 에서의 조작 방법이 변경되었습니다.\n블록 선택을 해제하거나 건설을 중지하려면 [accent]스페이스 바[]를 누르세요. +text.construction.title=블록 배치 안내서 +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=다음 세션에서 이 메세지를 표시하지 않습니다 +text.coreattack=< 코어가 공격받고 있습니다! > +text.unlocks=아이템들 +text.savegame=게임 저장 +text.loadgame=게임 불러오기 +text.joingame=멀티플레이 +text.addplayers=플레이어 추가/제거 +text.customgame=커스텀 게임 +text.sectors=지역 플레이 +text.sector=지역 : [LIGHT_GRAY]{0} +text.sector.time=시간 : [LIGHT_GRAY]{0} +text.sector.deploy=시작 +text.sector.abandon=초기화 +text.sector.abandon.confirm=정말로 이 지역의 모든 진행상황을 초기화 하겠습니까?\n이 작업은 되돌릴 수 없습니다! +text.sector.resume=계속하기 +text.sector.locked=[scarlet][[완료안됨] +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.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.resource.menu={0} {1}개 수집 +text.mission.resource={0} 을(를) 수집하세요\n[accent]{1}/{2} +text.mission.block={0} 를 만드세요 +text.mission.unit={0} 유닛을 만드세요 +text.mission.command=유닛에게 {0} 명령을 보내세요 +text.mission.linknode=전력 노드를 연결하세요 +text.mission.display=[accent]목표 : [LIGHT_GRAY]{0} +text.mission.mech=[accent]{0}[] 기체로 바꾸세요 +text.mission.create=[accent]{0}[] 을(를)설치하세요. +text.none=<없음> +text.close=닫기 +text.quit=나가기 +text.maps=맵 +text.continue=계속하기 +text.nextmission=다음 임무 +text.maps.none=[LIGHT_GRAY]맵을 찾을 수 없습니다! +text.about.button=정보 +text.name=이름 : +text.filename=파일 이름 : +text.unlocked=새 블록 잠금 해제됨 +text.unlocked.plural=잠금 해제 +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.clientOutdated=오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요! +text.server.kicked.serverOutdated=오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요! +text.server.kicked.banned=뭘 하셨는지는 모르겠지만, 이제 영원히 서버에 접속할 수 없습니다. +text.server.kicked.recentKick=방금 추방처리 되었습니다. 잠시 기다린 후에 접속 해 주세요. +text.server.kicked.nameInUse=이 닉네임이 이미 서버에서 사용중입니다. +text.server.kicked.nameEmpty=닉네임에는 반드시 영어 또는 숫자가 있어야 합니다. +text.server.kicked.idInUse=이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다. +text.server.kicked.customClient=이 서버는 직접 빌드한 버전을 지원하지 않습니다. 공식 버전을 사용하세요. +text.host.info=[accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 포트를 사용합니다.\n[LIGHY_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 해야 합니다.\n\n[LIGHT_GRAY]참고 : LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요. +text.join.info=여기서 [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원됩니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속할려면 서버장에게 IP를 요청해야 합니다. +text.hostserver=서버 열기 +text.hostserver.mobile=서버\n열기 +text.host=서버 열기 +text.hosting=[accent]서버 여는중... +text.hosts.refresh=새로고침 +text.hosts.discovering=LAN 게임 찾기 +text.server.refreshing=서버 목록 새로고치는중... +text.hosts.none=[lightgray]LAN 게임을 찾을 수 없습니다! +text.host.invalid=[scarlet]서버에 연결할 수 없습니다! +text.trace=플레이어 정보 보기 +text.trace.playername=이름 : [accent]{0} +text.trace.ip=IP : [accent]{0} +text.trace.id=고유 ID : [accent]{0} +text.trace.android=Android 클라이언트 : [accent]{0} +text.trace.modclient=수정된 클라이언트 : [accent]{0} +text.trace.totalblocksbroken=총 블록 파괴 개수 : [accent]{0} +text.trace.structureblocksbroken=구조 블록 파괴 수 : [accent]{0} +text.trace.lastblockbroken=마지막으로 파괴한 블록 : [accent]{0} +text.trace.totalblocksplaced=총 설치한 블록 개수 : [accent]{0} +text.trace.lastblockplaced=마지막으로 설치한 블록 : [accent]{0} +text.invalidid=잘못된 클라이언트 ID 입니다! 공식 Mindustry Discord 으로 버그 보고서를 제출 해 주세요. +text.server.bans=차단된 유저 +text.server.bans.none=차단된 플레이어가 없습니다. +text.server.admins=관리자 +text.server.admins.none=관리자가 없습니다! +text.server.add=서버 추가 +text.server.delete=이 서버를 삭제 하시겠습니까? +text.server.hostname=호스트 : {0} +text.server.edit=서버 수정 +text.server.outdated=[crimson]서버 버전이 낮습니다![] +text.server.outdated.client=[Crimson]클라이언트 버전이 낮습니다![] +text.server.version=[lightgray]서버 버전 : {0} +text.server.custombuild=[yellow]커스텀 서버 +text.confirmban=이 플레이어를 차단하시겠습니까? +text.confirmkick=정말로 이 플레이어를 추방시키겠습니까? +text.confirmunban=이 플레이어를 차단해제 하시겠습니까? +text.confirmadmin=이 플레이어를 관리자로 만들겠습니까? +text.confirmunadmin=이 플레이어를 일반 유저로 만들겠습니까? +text.joingame.title=게임 참가 +text.joingame.ip=IP : +text.disconnect=서버와 연결이 해제되었습니다. +text.disconnect.data=맵 데이터를 받아오는데 실패했습니다. +text.connecting=[accent]연결중... +text.connecting.data=[accent]맵 데이터 다운로드중... +text.server.port=포트 : +text.server.addressinuse=이 주소는 이미 사용중입니다! +text.server.invalidport=포트 번호가 잘못되었습니다. +text.server.error=[crimson]{0}[accent]서버를 여는데 오류가 발생했습니다.[] +text.save.old=이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다. +text.save.new=새로 저장 +text.save.overwrite=이 저장 슬롯을 덮어씌우겠습니까? +text.overwrite=덮어쓰기 +text.save.none=저장 파일을 찾지 못했습니다! +text.saveload=[accent]저장중... +text.savefail=게임을 저장하지 못했습니다! +text.save.delete.confirm=이 저장파일을 삭제 하시겠습니까? +text.save.delete=삭제 +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.rename=이름 변경 +text.save.rename.text=새 이름 : +text.selectslot=저장슬롯을 선택하십시오. +text.slot=[accent]{0}번째 슬롯 +text.save.corrupted=[accent]세이브 파일이 손상되었거나 잘못된 파일입니다! 만약 게임을 업데이트 했다면 이것은 아마 저장 형식 변경일 것이고, 이것은 버그가 [scarlet]아닙니다[]. +text.sector.corrupted=[accent]저장 파일에서 지역을 발견했으나 불러오지 못했습니다.\n새로 생성되었습니다. +text.empty=<비어있음> +text.on=켜기 +text.off=끄기 +text.save.autosave=자동저장 : {0} +text.save.map=맵 : {0} +text.save.wave={0}단계[] +text.save.difficulty=난이도 : {0} +text.save.date=마지막 저장날짜 : {0} +text.save.playtime=플레이시간 : {0} +text.confirm=확인 +text.delete=삭제 +text.ok=확인 +text.open=열기 +text.cancel=취소 +text.openlink=링크 열기 +text.copylink=링크 복사 +text.back=뒤로가기 +text.quit.confirm=정말로 종료하시겠습니까? +text.changelog.title=변경사항 +text.changelog.loading=변경사항 가져오는중... +text.changelog.error.android=[accent]게임 변경사항은 가끔 Android 4.4 이하에서 작동하지 않습니다. 이것은 내부 Android 버그 때문입니다. +text.changelog.error.ios=[accent]현재 iOS에서는 변경 사항을 지원하지 않습니다. +text.changelog.error=[scarlet]게임 변경사항을 가져오는 중 오류가 발생했습니다![]\n인터넷 연결을 확인하십시오. +text.changelog.current=[accent][[현재 버전] +text.changelog.latest=[accent][[최신 버전] +text.loading=[accent]불러오는중... +text.saving=[accent]저장중... +text.wave=[accent]{0}단계 +text.wave.waiting=남은 시간 : [green]{0}초[] +text.waiting=[LIGHT_GRAY]대기중... +text.waiting.players=다른 플레이어를 기다리는 중.. +text.wave.enemies=[LIGHT_GRAY]{0} 마리 남았음 +text.wave.enemy=[LIGHT_GRAY]{0} 마리 남음 +text.loadimage=사진 불러오기 +text.saveimage=사진 저장 +text.unknown=알 수 없음 +text.custom=커스텀 +text.builtin=기본맵 +text.map.delete.confirm=이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! +text.map.random=[accent]랜덤 맵 +text.map.nospawn=이 맵에 플레이어가 스폰 할 코어가 없습니다! 맵 편집기에서 [ROYAL]파란색[]코어를 맵에 추가하세요. +text.map.nospawn.pvp=이 맵에는 적팀 코어가 없습니다! 에디터에서 [scarlet]빨간팀[] 코어를 추가하세요. +text.map.invalid=파일이 잘못되었거나 손상되어 맵을 열 수 없습니다. +text.editor.brush=브러쉬 +text.editor.slope=\\ +text.editor.openin=편집기 열기 +text.editor.oregen=광물 무작위 생성 +text.editor.oregen.info=광물 무작위 생성 : +text.editor.mapinfo=맵 정보 +text.editor.author=만든이 : +text.editor.description=설명 : +text.editor.name=이름 : +text.editor.teams=팀 +text.editor.elevation=지형 높이 +text.editor.errorimageload=[accent]{0}[] 파일을 불러오는데 오류가 발생했습니다. +text.editor.errorimagesave=[accent]{0}[] 파일 저장중 오류가 발생했습니다. +text.editor.generate=생성 +text.editor.resize=맵 크기조정 +text.editor.loadmap=맵 불러오기 +text.editor.savemap=맵 저장 +text.editor.saved=저장됨! +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.importfile=파일 가져오기 +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.unsaved=[scarlet]변경사항을 저장하지 않았습니다![]\n정말로 나가시겠습니까? +text.editor.resizemap=맵 크기 조정 +text.editor.mapname=맵 이름 : +text.editor.overwrite=[accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다. +text.editor.overwrite.confirm=[scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까? +text.editor.selectmap=불러올 맵 선택 : +text.width=넓이 : +text.height=높이 : +text.menu=메뉴 +text.play=플레이 +text.load=불러오기 +text.save=저장 +text.fps={0}FPS +text.tps={0}TPS +text.ping=ping : {0}ms +text.language.restart=언어를 변경하려면 게임을 다시시작 해 주세요. +text.settings=설정 +text.tutorial=게임 방법 +text.editor=편집기 +text.mapeditor=맵 편집기 +text.donate=기부 +text.connectfail=[crimson]{0}[accent] 서버에 연결하지 못했습니다.[] +text.error.unreachable=서버에 연결하지 못했습니다. +text.error.invalidaddress=잘못된 주소입니다. +text.error.timedout=시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하십시오. +text.error.mismatch=패킷 오류:\n클라이언트/서버 버전이 일치하지 않습니다.\n접속할려는 서버가 최신 버전의 Mindustry 인지 확인하세요! +text.error.alreadyconnected=이미 접속중입니다. +text.error.mapnotfound=맵 파일을 찾을 수 없습니다! +text.error.any=알 수 없는 네트워크 오류. +text.settings.language=언어 +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.clearsectors=지역 초기화 +text.settings.clearunlocks=잠금 해제 초기화 +text.settings.clearall=모두 초기화 +text.paused=일시 정지 +text.yes=예 +text.no=아니오 +text.info.title=[accent]정보 +text.error.title=[crimson]오류가 발생했습니다. +text.error.crashtitle=오류가 발생했습니다. +text.blocks.unknown=[LIGHT_GRAY]??? +text.blocks.blockinfo=블록 정보 +text.blocks.powercapacity=최대 전력 용량 +text.blocks.powershot=1발당 전력 소모량 +text.blocks.targetsair=공중공격 가능 +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.inputitemcapacity=입력 아이템 용량 +text.blocks.outputitemcapacity=출력 아이템 용량 +text.blocks.itemcapacity=저장 용량 +text.blocks.basepowergeneration=기지 전력 생성기 +text.blocks.powertransferspeed=전력 전송량 +text.blocks.craftspeed=생산 속도 +text.blocks.inputliquid=사용되는 액체 +text.blocks.inputliquidaux=보조 액체 +text.blocks.inputitem=사용되는 아이템 +text.blocks.inputitems=사용되는 아이템들 +text.blocks.outputitem=출력 아이템 +text.blocks.drilltier=드릴 +text.blocks.drillspeed=기본 드릴 속도 +text.blocks.liquidoutput=액체 출력 +text.blocks.liquidoutputspeed=액체 출력속도 +text.blocks.liquiduse=액체 사용량 +text.blocks.coolant=냉각제 +text.blocks.coolantuse=냉각수 사용 +text.blocks.inputliquidfuel=연료 액 +text.blocks.liquidfueluse=액체 연료 사용 +text.blocks.explosive=이 블록이 터지면 주변 블록과 같이 자폭을 합니다!! +text.blocks.health=체력 +text.blocks.inaccuracy=오차각 +text.blocks.shots=발포 횟수 +text.blocks.reload=재장전 +text.blocks.inputfuel=연료 +text.blocks.fuelburntime=연료 연소 시간 +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.degrees=도 +text.unit.seconds=초 +text.unit.items=아이템 +text.category.general=일반 +text.category.power=전력 +text.category.liquids=액체 +text.category.items=아이템 +text.category.crafting=제작 +text.category.shooting=사격 +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=[#00ff00]멀[#2efe2e]티[#58fa58]플[#81f781]레[#a9f5a9]이 [#81f781]전[#58fa58]용[] +setting.difficulty.name=난이도 : +setting.screenshake.name=화면 흔들기 강도 +setting.effects.name=화면 효과 +setting.sensitivity.name=컨트롤러 감도 +setting.saveinterval.name=자동저장 간격 +setting.seconds={0}초 +setting.fullscreen.name=전체 화면 +setting.multithread.name=멀티 스레드 +setting.fps.name=FPS 표시 +setting.vsync.name=VSync 활성화 +setting.lasers.name=전력 노드 레이저 표시 +setting.minimap.name=미니맵 보기 +setting.musicvol.name=음악 크기 +setting.mutemusic.name=음소거 +setting.sfxvol.name=효과음 크기 +setting.mutesound.name=소리 끄기 +setting.crashreport.name=오류 보고서 보내기 +text.keybind.title=조작키 설정 +category.general.name=일반 +category.view.name=보기 +category.multiplayer.name=멀티플레이 +command.attack=공격 +command.retreat=후퇴 +command.patrol=순찰 +keybind.press=키를 누르세요... +keybind.press.axis=축 또는 키를 누르세요... +keybind.move_x.name=오른쪽/왼쪽 이동 +keybind.move_y.name=위쪽/아래쪽 이동 +keybind.select.name=선택 +keybind.break.name=파괴 +keybind.deselect.name=선택해제 +keybind.shoot.name=사격 +keybind.zoom_hold.name=길게눌러 확대 +keybind.zoom.name=확대 +keybind.menu.name=메뉴 +keybind.pause.name=일시중지 +keybind.dash.name=달리기 +keybind.chat.name=채팅 +keybind.player_list.name=플레이어 목록 +keybind.console.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.zoom_minimap.name=미니맵 확대 +mode.text.help.title=도움말 +mode.waves.name=단계 +mode.waves.description=이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 단계가 시작됩니다. +mode.sandbox.name=샌드박스 +mode.sandbox.description=무한한 자원과 다음단계 시작을 위한 타이머가 없습니다. +mode.freebuild.name=자유 건축 +mode.freebuild.description=제한된 자원과 다음단계 시작을 위한 타이머가 없습니다. +mode.pvp.name=PvP +mode.pvp.description=몹이 아닌 실제 플레이어와 PvP를 합니다. +content.item.name=아이템 +content.liquid.name=액체 +content.unit.name=유닛 +content.recipe.name=블록 +content.mech.name=기체 +item.stone.name=돌 +item.stone.description=주로 용암을 사용하여 얻을 수 있는 자원입니다. +item.copper.name=구리 +item.copper.description=모든 유형의 블록에서 광범위하게 사용되는 자원입니다. +item.lead.name=납 +item.lead.description=쉽게 구할 수 있으며, 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. +item.coal.name=석탄 +item.coal.description=쉽게 구할 수 있으며, 주로 제련소 등에서 연료로 사용됩니다. +item.dense-alloy.name=고밀도 합금 +item.dense-alloy.description=납과 구리로 만든 튼튼한 고밀도 합금.\n고급 수송 블록이나 상위 티어 블록을 건설하는데 사용됩니다. +item.titanium.name=티타늄 +item.titanium.description=파이프 재료나 고급 드릴, 비행기/기체 등에서 재료로 사용되는 자원입니다. +item.thorium.name=토륨 +item.thorium.description=건물의 재료, 포탑의 탄약 또는 핵연료로 사용되는 방사성 금속입니다. +item.silicon.name=실리콘 +item.silicon.description=매우 유용한 반도체로, 태양 전지판과 복잡한 전자 제품에 사용할 수 있습니다. +item.plastanium.name=플라스터늄 +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=이것은 유기농 덤불입니다!\n압축기에 넣어 석유로 바꿀 수 있습니다. +item.sand.name=모래 +item.sand.description=고밀도 합금이나 플럭스 등에서 제련시 광범위하게 사용되는 일반적인 재료입니다. +item.blast-compound.name=폭발물 +item.blast-compound.description=포탑 및 건설의 재료로 사용되는 휘발성 폭발물.\n연료로도 사용할 수 있지만, 별로 추천하지는 않습니다. +item.pyratite.name=피라테 +item.pyratite.description=폭발성을 가진 재료로, 주로 포탑의 탄약으로 사용됩니다. +liquid.water.name=물 +liquid.lava.name=용암 +liquid.oil.name=석유 +liquid.cryofluid.name=냉각수 +mech.alpha-mech.name=알파 +mech.alpha-mech.weapon=중무장 소총 +mech.alpha-mech.ability=드론 소환 +mech.alpha-mech.description=표준 기체.\n적절한 속도와 공격력을 갖추고 있으며, 공격 능력을 높이기 위해 최대 3대의 드론을 만들 수 있습니다. +mech.delta-mech.name=델타 +mech.delta-mech.weapon=전격 생산기 +mech.delta-mech.ability=충전 +mech.delta-mech.description=빠르게 이동하는 적을 처치하기 위한 가벼운 기체.\n구조물에는 거의 피해를 주지 않지만, 전격 무기를 사용하여 많은 적군을 매우 빠르게 죽일 수 있습니다. +mech.tau-mech.name=타우 +mech.tau-mech.weapon=건물 수리총 +mech.tau-mech.ability=유닛 치료 +mech.tau-mech.description=지원형 기체.\n총을 발사하여 건물을 치료하고 회복 능력 사용으로 화재를 진압하거나, 반경 내 아군을 치유시킵니다. +mech.omega-mech.name=오메가 +mech.omega-mech.weapon=전방 유도미사일 +mech.omega-mech.ability=방어모드 +mech.omega-mech.description=지상 기체 최종판이자 건물 파괴용으로 적합한 부피가 크고 튼튼한 기체. 방어 모드는 최대 90% 의 피해를 줄일 수 있습니다. +mech.dart-ship.name=다트 +mech.dart-ship.weapon=소총 +mech.dart-ship.description=표준 비행선. 빠르고 가볍지만 공격력이 거의 없고 채광 속도가 느립니다. +mech.javelin-ship.name=자비린 +mech.javelin-ship.description=치고 빠지는 공격을 위한 비행선. 처음에는 느리지만, 가속도가 붙어 엄청난 속도로 미사일 피해를 입힐 수 있으며, 전격 능력을 사용할 수 있습니다. +mech.javelin-ship.weapon=유도 미사일 +mech.javelin-ship.ability=가속 전격 생성기 +mech.trident-ship.name=삼지창 +mech.trident-ship.description=대형 공중 폭격기. 당연하게도 엄청 단단합니다. +mech.trident-ship.weapon=폭탄 저장고 +mech.glaive-ship.name=글레브 +mech.glaive-ship.description=크고 잘 무장된 총을 가진 비행선. 방화용 리피터가 장착되어 있으며, 가속도와 최대속도가 높습니다. +mech.glaive-ship.weapon=방화총 +text.item.explosiveness=[LIGHT_GRAY]폭발력 : {0} +text.item.flammability=[LIGHT_GRAY]인화성 : {0} +text.item.radioactivity=[LIGHT_GRAY]방사능 : {0} +text.item.fluxiness=[LIGHT_GRAY]플럭스 파워 : {0} +text.unit.health=[LIGHT_GRAY]체력 : {0} +text.unit.speed=[LIGHT_GRAY]속도 : {0} +text.mech.weapon=[LIGHT_GRAY]무기 : {0} +text.mech.armor=[LIGHT_GRAY]방어력 : {0} +text.mech.itemcapacity=[LIGHT_GRAY]아이템 수용 용량 : {0} +text.mech.minespeed=[LIGHT_GRAY]채광 속도 : {0} +text.mech.minepower=[LIGHT_GRAY]채광 레벨 : {0} +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}[LIGHT_GRAY](만드는중) +block.spawn.name=적 스폰지점 +block.core.name=코어 +block.metalfloor.name=철판 +block.deepwater.name=깊은물 +block.water.name=물 +block.lava.name=용암 +block.tar.name=타르 +block.blackstone.name=검은돌 +block.stone.name=돌 +block.dirt.name=흙 +block.sand.name=모래 +block.ice.name=얼음 +block.snow.name=눈 +block.grass.name=잔디 +block.shrub.name=관목 +block.rock.name=바위 +block.blackrock.name=검은바위 +block.icerock.name=얼음바위 +block.copper-wall.name=구리벽 +block.copper-wall-large.name=큰 구리벽 +block.dense-alloy-wall.name=합금 벽 +block.dense-alloy-wall-large.name=큰 합금 벽 +block.phase-wall.name=메타벽 +block.phase-wall-large.name=큰 메타벽 +block.thorium-wall.name=토륨벽 +block.thorium-wall-large.name=대형 토륨벽 +block.door.name=문 +block.door-large.name=대형문 +block.duo.name=듀오 +block.scorch.name=스코치 +block.hail.name=헤일 +block.lancer.name=랜서 +block.conveyor.name=컨베이어 +block.titanium-conveyor.name=티타늄 컨베이어 +block.junction.name=교차기 +block.router.name=분배기 +block.distributor.name=대형 분배기 +block.sorter.name=필터 +block.sorter.description=아이템을 넣어서 필터에 설정된 아이템일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 통과합니다. +block.overflow-gate.name=오버플로 게이트 +block.overflow-gate.description=정면으로 가는 자원이 막히면 옆으로 출력하고, 그렇지 않으면 계속 정면으로 출력합니다. +block.smelter.name=제련소 +block.arc-smelter.name=대형 제련소 +block.silicon-smelter.name=실리콘 제련소 +block.phase-weaver.name=메타 합성기 +block.pulverizer.name=분쇄기 +block.cryofluidmixer.name=냉각수 제조기 +block.melter.name=융해기 +block.incinerator.name=소각로 +block.biomattercompressor.name=바이오메터 압축기 +block.separator.name=셉터 +block.centrifuge.name=원심 분리기 +block.power-node.name=전력 송신기 +block.power-node-large.name=대형 전력 송신기 +block.battery.name=배터리 +block.battery-large.name=대형 배터리 +block.combustion-generator.name=석탄 발전기 +block.turbine-generator.name=터빈 발전기 +block.mechanical-drill.name=기계식 드릴 +block.pneumatic-drill.name=강철 드릴 +block.laser-drill.name=레이저 드릴 +block.water-extractor.name=물 추출기 +block.cultivator.name=온실 +block.alpha-mech-pad.name=알파 기체 패드 +block.dart-ship-pad.name=다트 비행선 패드 +block.delta-mech-pad.name=델타 기체 패드 +block.javelin-ship-pad.name=자비린 비행선 패드 +block.trident-ship-pad.name=삼지창 비행선 패드 +block.glaive-ship-pad.name=글레브 비행선 패드 +block.omega-mech-pad.name=오메가 기체 패드 +block.tau-mech-pad.name=타우 기체 패드 +block.conduit.name=파이프 +block.mechanical-pump.name=기계식 펌프 +block.itemsource.name=아이템 소스 +block.itemvoid.name=아이템 삭제 장치 +block.liquidsource.name=무한 액체공급 장치 +block.powervoid.name=방전장치 +block.powerinfinite.name=무한 전력공급 장치 +block.unloader.name=언로더 +block.vault.name=창고 +block.wave.name=파도 +block.swarmer.name=스웜 +block.salvo.name=살보 +block.ripple.name=립플 +block.phase-conveyor.name=메타 컨베이어 +block.bridge-conveyor.name=터널 +block.plastanium-compressor.name=플라스터늄 압축기 +block.pyratite-mixer.name=피라테 제조기 +block.blast-mixer.name=폭발물 제조기 +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.repair-point.name=정비소 +block.pulse-conduit.name=퓨즈 파이프 +block.phase-conduit.name=메타 파이프 +block.liquid-router.name=액체 분배기 +block.liquid-tank.name=물탱크 +block.liquid-junction.name=액체 교차기 +block.bridge-conduit.name=다리 파이프 +block.rotary-pump.name=동력 펌프 +block.thorium-reactor.name=토륨 원자로 +block.command-center.name=명령 본부 +block.mass-driver.name=물질 이동기 +block.blast-drill.name=고속 발열 드릴 +block.thermal-pump.name=화력 펌프 +block.thermal-generator.name=열발전기 +block.alloy-smelter.name=설금 제련소 +block.mend-projector.name=수리 프로젝터 +block.surge-wall.name=설금벽 +block.surge-wall-large.name=큰 설금벽 +block.cyclone.name=사이클론 +block.fuse.name=퓨즈 +block.shock-mine.name=전격 지뢰 +block.overdrive-projector.name=오버드라이브 프로젝터 +block.force-projector.name=보호막 프로젝터 +block.arc.name=Arc +block.rtg-generator.name=토륨 발전소 +block.spectre.name=스펙터 +block.meltdown.name=멜트다운 +block.container.name=컨테이너 +team.blue.name=블루팀 +team.red.name=레드팀 +team.orange.name=오렌지팀 +team.none.name=공기팀 +team.green.name=그린팀 +team.purple.name=보라색팀 +unit.alpha-drone.name=알파 드론 +unit.spirit.name=스피릿 드론 +unit.spirit.description=기본 드론 유닛. 기본적으로 코어에서 1개가 스폰됩니다. 자동으로 채광하며 아이템을 수집하고, 블록을 수리합니다. +unit.phantom.name=팬텀 드론 +unit.phantom.description=첨단 드론 유닛. 광석을 자동으로 채광하며, 아이템을 수집하고 블록을 수리합니다. 일반 드론보다 훨씬 효과적입니다. +unit.dagger.name=디거 +unit.dagger.description=기본 지상 유닛입니다. 스웜과 같이 쓰면 유용합니다. +unit.titan.name=타이탄 +unit.titan.description=고급 지상 유닛입니다. 고밀도 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다. +unit.ghoul.name=구울 폭격기 +unit.ghoul.description=무거운 지상 폭격기 입니다. 폭발물 또는 피라테를 탄약으로 사용합니다. +unit.wraith.name=유령 전투기 +unit.wraith.description=코어를 집중적으로 공격하는 방식을 사용하는 전투기 입니다. +unit.fortress.name=포트리스 +unit.fortress.description=중포 지상 유닛. 높은 공격력과 체력을 가지고 있습니다. +unit.revenant.name=레비던트 +unit.revenant.description=대형 레이저를 발사하는 공중 유닛입니다. +tutorial.begin=플레이어의 주요 목표는 [LIGHT_GRAY]적군[]을 제거하는 것입니다.\n\n이 게임은 [accent]구리를 채광[]하는 것으로 시작합니다.\n이것을 하기 위해 플레이어의 중심부 근처에 있는 구리 광맥을 누르세요. +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\n2단계 동안 코어를 보호하고 더 많은 터렛을 만드세요. +tutorial.lead=더 많은 광석을 이용할 수 있습니다. [accent]납[]을 찾아 탐색하세요.\n\n아이템을 코어로 전송할려면 플레이어 기체 또는 비행기에서 코어로 드래그 하세요. +tutorial.smelter=구리와 납은 약한 금속입니다.\n[accent]고밀도 합금[]은 제련소에서 만들 수 있습니다.\n\n하나 만드세요. +tutorial.densealloy=이 제련소는 이제 고밀도 합금을 생산할 것입니다.\n몇개 더 생산하세요.\n필요한 경우 더 만드세요. +tutorial.siliconsmelter=이제 이코어는 채굴과 수리하기 위한[accent] 스피릿 드론[]을 생성 할 것 입니다.\n\n[accent]실리콘[]을 사용해 다른 유닛을 생성하기 위한 공장을 만들 수 있습니다.\n실리콘 제련기를 제작하세요! +tutorial.silicondrill=실리콘을 제작하려면[accent] 석탄[] 과[accent] 모래[]가 필요합니다.\n드릴을 먼저 건설해보는건 어떤가요? +tutorial.generator=이 건물은 [LIGHT_YELLOW]전력[]이 필요합니다.\n[accent] 석탄 발전기[]를 건설하세요. +tutorial.generatordrill=[accent] 석탄 발전기[]는 연료가 필요합니다.\n[accent] 석탄[]을 드릴로 채굴해서 연료를 체워주세요. +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.core.description=게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다. +block.copper-wall.description=구리로 만든 벽. +block.copper-wall-large.description=구리로 만든 큰 벽. +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-large.description=설금을 재료로 한 큰 벽.\n데미지를 입으면 번개를 일으켜 대상에게 피해를 입힙니다. +block.door.description=유닛이 지나갈 수 있도록 만든 문. 클릭하면 열고 닫습니다. +block.door-large.description=유닛이 자나갈 수 있도록 만든 큰 문. 클릭하면 열고 닫습니다. +block.mend-projector.description=주위 건물을 치료하는 건물입니다. +block.overdrive-projector.description=범위 내 모든 행동의 속도를 높여주는 보조형 건물입니다. +block.force-projector.description=보호막을 생성하는 건물.\n기본적으로 전력만 있으면 작동하지만, 메타를 넣어 보호막의 범위를 크게 확장시킬 수 있습니다. +block.shock-mine.description=적이 이 블록을 지나가면 전격 공격을 하는 함정형 방어 건물입니다. +block.duo.description=범용성을 가진 터렛.\n지상 및 공중공격을 하며, 초중반에 유용합니다. +block.arc.description=목표 방향으로 전격 공격을 하는 포탑입니다. +block.hail.description=장거리 지상 공격을 하는 터렛입니다.\n적이 오기 전에 쓸어버릴 수 있습니다. +block.lancer.description=중거리 레이져 포탑입니다.\n적을 관통하기 때문에 뭉쳐있는 적들에게 매우 효과적입니다. +block.wave.description=적이 있는 자리에 액체를 뿌립니다.\n이 포탑을 활용하여 액체를 뿌린 곳에 불을 붙이거나 적을 느리게 할 수 있습니다. +block.salvo.description=명중률이 높고, 3발씩 끊어 발사하는 포탑입니다. +block.swarmer.description=4발씩 끊어서 유도체를 발사하는 포탑입니다 +block.ripple.description=4개의 탄약으로 나눠 발사하여 명중률이 낮지만, 사거리가 매우 긴 포탑입니다. +block.cyclone.description=낮은 명중률과 높은 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. +block.fuse.description=단거리에서 범위형 레이저를 발사하는 포탑입니다. +block.spectre.description=높은 명중률과 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. +block.meltdown.description=목표를 따라 초대형 레이져를 발사하는 포탑입니다.\n뭉쳐있는 몹에게 매우 효과가 좋습니다. +block.conveyor.description=느린 속도로 자원을 수송할 수 있는 컨베이어. +block.titanium-conveyor.description=빠른 속도로 자원을 수송할 수 있는 컨베이어. +block.phase-conveyor.description=자원을 순간이동 시켜 주는 컨베이어 입니다. +block.junction.description=컨베이어를 교차시켜 자원을 수송할 때 사용할 수 있는 블록입니다. +block.mass-driver.description=자원을 받아서 다른 물질 이동기로 전달할 수 있는 블록입니다.\n엄청난 사거리를 가지고 있으며, 주로 컨베이어가 접근할 수 없는 곳에 유용하게 사용됩니다. +block.smelter.description=고밀도 합금을 제작할 수 있는 건물입니다. +block.arc-smelter.description=고밀도 합금을 제작할 수 있는 건물이지만, 이 건물은 석탄이 필요 없고 좀더 빠른 속도로 합금을 생산해낼 수 있습니다. +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.solidifer.description=용암을 돌로 만들 수 있는 건물입니다. +block.melter.description=돌로 용암을 만들 수 있는 건물입니다. +block.incinerator.description=불필요한 아이템을 소각시켜 줄 수 있는 건물입니다. +block.biomattercompressor.description=잔디밭에서 바이오메터를 추출할 수 있는 건물입니다. +block.separator.description=돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다. +block.centrifuge.description=돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물이지만, 이 건물은 좀 더 다양한 자원을 얻을 수 있게 해 줍니다. +block.power-node.description=생성된 전력를 다른 건물로 전달하기 위한 전력 노드입니다. +block.power-node-large.description=생성된 전력를 다른 건물로 전달하기 위한 건물이며, 일반 노드보다 더 많은 전력을 이동시킬 수 있습니다. +block.battery.description=흔히 아는 충전식 배터리입니다.\n전력을 사용하는 건물에 전력이 떨어질경우, 이 배터리를 전력 노드에 연결하면 이 배터리에 저장된 전력을 소모하여 지속적으로 공급할 수 있습니다. +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=토륨을 원료로 하는 토륨 원자로 입니다.\n많은 전력을 생산하지만 엄청난 열을 발생시키기 때문에, 많은 량의 물 또는 냉각수가 있어야 터지지 않고 작동합니다. +block.rtg-generator.description=냉각은 필요 없지만 토륨 원자로보다 적은량의 전력을 생산하는 방사선 동위원소 열전자 발전기. +block.unloader.description=해당 창고 및 코어에서 자원을 빼내는데 사용됩니다. +block.container.description=아이템을 임시로 저장할 수 있는 소형 창고입니다. +block.vault.description=아이템을 임시로 저장할 수 있는 대형 창고입니다. +block.mechanical-drill.description=구리로 제작할 수 있는 기본 드릴입니다. +block.pneumatic-drill.description=돌, 티타늄을 채광할 수 있는 고급 드릴입니다. +block.laser-drill.description=토륨을 채광할 수 있는 최고급 드릴입니다.\n전력과 물을 공급하여 빠른 속도로 채광할 수 있습니다. +block.blast-drill.description=최상위 드릴입니다. 엄청난 양의 전력과 물을 소모하는 대신, 매우 빠른 속도로 채광합니다. +block.water-extractor.description=바닥에서 물을 추출하여 건물에 공급할 수 있는 건물입니다. +block.cultivator.description=잔디에서 바이오메터를 추출할 수 있는 건물입니다. +block.oil-extractor.description=석유를 추출 해 주는 건물입니다. +block.dart-ship-pad.description=다트 비행선으로 바꿀 수 있는 패드입니다. +block.trident-ship-pad.description=삼지창 비행선으로 바꿀 수 있는 패드입니다. +block.javelin-ship-pad.description=자비린 비행선으로 바꿀 수 있는 패드입니다. +block.glaive-ship-pad.description=글레브 비행선으로 바꿀 수 있는 패드입니다. +block.tau-mech-pad.description=타우 기체로 바꿀 수 있는 패드 +block.delta-mech-pad.description=델타 기체로 바꿀 수 있는 패드입니다. +block.omega-mech-pad.description=오메가 기체로 바꿀 수 있는 패드 +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=생산된 유닛들을 제어할 수 있는 건물.\n첫번째 버튼은 적 기지로 공격하며, 두번째는 대기 상태, 세번째는 기지 근처를 돌며 정찰합니다. +block.conduit.description=일반 파이프. 액체가 지나갈 수 있도록 해 줍니다. +block.pulse-conduit.description=티타늄으로 만들어 졌으며, 일반 파이프보다 액체 수용량이 높습니다. +block.phase-conduit.description=물을 먼거리로 순간이동 시켜 주는 장치입니다. +block.liquid-router.description=물펌프를 다른 방향으로 분배할 수 있게 하는 블럭입니다. +block.liquid-tank.description=액체 종류를 저장할 수 있는 물탱크 입니다. +block.liquid-junction.description=물펌프와 다른 물펌프를 서로 교차시키게 할 수 있는 블럭입니다. +block.bridge-conduit.description=다리와 다리 사이를 연결하여 액체가 지나갈 수 있게 해 줍니다.\n주로 다리 사이에 지나갈 수 없는 장애물이 있을 때 사용합니다. +block.mechanical-pump.description=구리로 제작할 수 있는 기계식 물펌프입니다. +block.rotary-pump.description=일반 물 펌프보다 더 빠른 속도로 물을 끌어올릴 수 있는 펌프입니다. +block.thermal-pump.description=기계식 펌프보다 3배 빠른 속도로 액체를 퍼올릴 수 있는 펌프이며, 용암도 퍼올릴 수 있는 유일한 펌프입니다. +block.router.description=한 방향에서 아이템을 받은 후 최대 3개의 다른 방향으로 동일하게 출력합니다.\n재료를 한곳에서 여러 대상으로 분할하여 운반하는데 유용합니다. +block.distributor.description=아이템을 최대 7개의 다른 방향으로 똑같이 분할하는 고급 분배기. +block.bridge-conveyor.description=고급 자원 수송 블록.\n지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다. +block.alpha-mech-pad.description=알파 기체로 바꿀 수 있는 패드입니다. +block.itemsource.description=자원을 선택하면 그 자원이 무한하게 생성되는 블록입니다. +block.liquidsource.description=무한한 액체를 출력해냅니다. +block.itemvoid.description=아이템을 사라지게 만듭니다. +block.powerinfinite.description=무한한 전력을 공급해주는 블록입니다. +block.powervoid.description=설정된 아이템을 계속해서 출력하는 블록입니다. +liquid.water.description=지상 유닛이 이 위를 지나가면 이동속도가 느려지고, 깊은 물에 빠지면 죽습니다. +liquid.lava.description=지상 유닛이 이 위를 지나가면 이동속도가 매우 느려지고, 지속적으로 데미지를 입습니다. +liquid.oil.description=일부 조합 블록에서 사용되는 자원입니다. +liquid.cryofluid.description=포탑 및 토륨 원자로에서 사용되는 자원입니다. From ee3c4a4124285d2bb5fd77b7a29f3186a3cd5287 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 20 Nov 2018 00:26:14 -0500 Subject: [PATCH 18/52] Mass driver buff --- core/src/io/anuke/mindustry/Vars.java | 3 +-- core/src/io/anuke/mindustry/content/Recipes.java | 2 +- .../io/anuke/mindustry/content/blocks/DistributionBlocks.java | 4 ++-- core/src/io/anuke/mindustry/net/Net.java | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index ed21672801..399f5c3090 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -49,8 +49,7 @@ public class Vars{ public static final int maxNameLength = 40; public static final float itemSize = 5f; public static final int tilesize = 8; - public static final int sectorSize = 250; - public static final int mapPadding = 3; + public static final int sectorSize = 256; public static final int invalidSector = Integer.MAX_VALUE; public static Locale[] locales; public static final Color[] playerColors = { diff --git a/core/src/io/anuke/mindustry/content/Recipes.java b/core/src/io/anuke/mindustry/content/Recipes.java index 2028daebd0..f236469ff9 100644 --- a/core/src/io/anuke/mindustry/content/Recipes.java +++ b/core/src/io/anuke/mindustry/content/Recipes.java @@ -82,7 +82,7 @@ public class Recipes implements ContentList{ new Recipe(distribution, DistributionBlocks.sorter, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 4)); new Recipe(distribution, DistributionBlocks.overflowGate, new ItemStack(Items.densealloy, 4), new ItemStack(Items.copper, 8)); new Recipe(distribution, DistributionBlocks.itemBridge, new ItemStack(Items.densealloy, 8), new ItemStack(Items.copper, 8)); - new Recipe(distribution, DistributionBlocks.massDriver, new ItemStack(Items.densealloy, 400), new ItemStack(Items.silicon, 300), new ItemStack(Items.lead, 400), new ItemStack(Items.thorium, 250)); + new Recipe(distribution, DistributionBlocks.massDriver, new ItemStack(Items.densealloy, 250), new ItemStack(Items.silicon, 150), new ItemStack(Items.lead, 250), new ItemStack(Items.thorium, 100)); //CRAFTING diff --git a/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java index 825b7097cb..649bd172eb 100644 --- a/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java @@ -50,8 +50,8 @@ public class DistributionBlocks extends BlockList implements ContentList{ massDriver = new MassDriver("mass-driver"){{ size = 3; - itemCapacity = 80; - range = 340f; + itemCapacity = 60; + range = 440f; }}; } } diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index 14ab812242..0e152cb18e 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -66,7 +66,7 @@ public class Net{ }else if(error.contains("connection refused") || error.contains("route to host") || type.contains("unknownhost")){ error = Bundles.get("text.error.unreachable"); }else if(type.contains("timeout")){ - error = Bundles.get("text.error.timeout"); + error = Bundles.get("text.error.timedout"); }else if(error.equals("alreadyconnected")){ error = Bundles.get("text.error.alreadyconnected"); }else if(!error.isEmpty()){ From 5ced5ce253aa418bf33d32ad6dc51c6f1eee41ef Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 20 Nov 2018 10:00:13 -0500 Subject: [PATCH 19/52] Fixed some bugs/crashes --- .../io/anuke/mindustry/content/blocks/DistributionBlocks.java | 4 ++-- core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java | 2 +- core/src/io/anuke/mindustry/input/MobileInput.java | 2 +- .../io/anuke/mindustry/ui/fragments/PlacementFragment.java | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java index 649bd172eb..df4ab9ea20 100644 --- a/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/DistributionBlocks.java @@ -33,9 +33,9 @@ public class DistributionBlocks extends BlockList implements ContentList{ }}; phaseConveyor = new ItemBridge("phase-conveyor"){{ - range = 11; + range = 12; hasPower = true; - consumes.power(0.05f); + consumes.power(0.03f); }}; sorter = new Sorter("sorter"); diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java index 3129e67c64..af79babcc1 100644 --- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java @@ -236,7 +236,7 @@ public interface BuilderTrait extends Entity{ Tile tile = getMineTile(); TileEntity core = unit.getClosestCore(); - if(core == null || tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance || !unit.inventory.canAcceptItem(tile.floor().drops.item)){ + if(core == null || tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance || tile.floor().drops == null || !unit.inventory.canAcceptItem(tile.floor().drops.item)){ setMineTile(null); }else{ Item item = tile.floor().drops.item; diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index b0761dfb7e..d48b71542b 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -230,7 +230,7 @@ public class MobileInput extends InputHandler implements GestureListener{ player.clearBuilding(); mode = none; recipe = null; - }).visible(() -> player.isBuilding() || mode != none); + }).visible(() -> player.isBuilding() || recipe != null); //confirm button table.addImageButton("icon-check", "clear-partial", 16 * 2f, () -> { diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index 299caf0744..f3923079d8 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -226,6 +226,7 @@ public class PlacementFragment extends Fragment{ /**Show or hide the placement menu.*/ void toggle(float t, Interpolation ip){ + toggler.clearActions(); if(shown){ shown = false; toggler.actions(Actions.translateBy(toggler.getTranslation().x + toggler.getWidth(), 0, t, ip)); From 7c073f76ae3afeb8e571ac83e463e9c2adbaa498 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 20 Nov 2018 19:28:26 -0500 Subject: [PATCH 20/52] Added automatic build incrementing --- build.gradle | 17 ++++++++++++++--- ios/robovm.properties | 3 ++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 10d8492d99..34c50c44d9 100644 --- a/build.gradle +++ b/build.gradle @@ -110,17 +110,28 @@ project(":ios") { include "**/*.java" } - into "ios/src/io/anuke/mindustry/gen" + into "core/src/io/anuke/mindustry/gen" } doFirst{ delete{ - delete "ios/src/io/anuke/mindustry/gen/" + delete "core/src/io/anuke/mindustry/gen/" } } } - //build.dependsOn(copyGen) + task incrementConfig{ + def vfile = file('robovm.properties') + + def props = new Properties() + props.load(new FileInputStream(vfile)) + + props['app.build'] = (props['app.build'].toInteger() + 1)+"" + props.store(vfile.newWriter(), null) + } + + build.dependsOn(incrementConfig) + build.dependsOn(copyGen) dependencies { compile project(":core") diff --git a/ios/robovm.properties b/ios/robovm.properties index 694b9dfa68..c843b667a4 100644 --- a/ios/robovm.properties +++ b/ios/robovm.properties @@ -1,6 +1,7 @@ +#Tue Nov 20 19:26:13 EST 2018 app.version=4.0 app.id=io.anuke.mindustry app.mainclass=io.anuke.mindustry.IOSLauncher app.executable=IOSLauncher -app.build=27 +app.build=30 app.name=Mindustry From 46035e76cc48d080aa23f52a6f23656e4db3fcf0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Nov 2018 09:59:56 -0500 Subject: [PATCH 21/52] Build increment --- ios/robovm.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/robovm.properties b/ios/robovm.properties index c843b667a4..3bc8a2f6b5 100644 --- a/ios/robovm.properties +++ b/ios/robovm.properties @@ -1,7 +1,7 @@ -#Tue Nov 20 19:26:13 EST 2018 +#Tue Nov 20 20:02:17 EST 2018 app.version=4.0 app.id=io.anuke.mindustry app.mainclass=io.anuke.mindustry.IOSLauncher app.executable=IOSLauncher -app.build=30 +app.build=32 app.name=Mindustry From 03ff33acaf011316a35a0d3acff643d1a85180e0 Mon Sep 17 00:00:00 2001 From: VizardAlpha <43859764+VizardAlpha@users.noreply.github.com> Date: Wed, 21 Nov 2018 16:00:19 +0100 Subject: [PATCH 22/52] Updates bundle_fr_BE.properties (#350) --- core/assets/bundles/bundle_fr_BE.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index d35b767406..011bd405ec 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -62,7 +62,7 @@ text.mission.linknode = Reliez le transmetteur énergétique text.mission.display = [accent]Mission:\n[LIGHT_GRAY]{0} text.mission.mech = Changer de mécha[accent] {0}[] text.mission.create = Créez[accent] {0}[] -text.none = +text.none = text.close = Fermer text.quit = Quitter text.maps = Cartes @@ -493,7 +493,7 @@ text.mech.ability = [LIGHT_GRAY]Compétence: {0} text.liquid.heatcapacity = [LIGHT_GRAY]Capacité Thermique {0} text.liquid.viscosity = [LIGHT_GRAY]Viscosité: {0} text.liquid.temperature = [LIGHT_GRAY]Température: {0} -block.constructing = {0}\n[LIGHT_GRAY](Constructing) +block.constructing = {0}\n[LIGHT_GRAY](En construction) block.spawn.name = Générateur d'ennemi block.core.name = Base block.metalfloor.name = Sol en métal From 729f5ed5e4f48cfe7000be9860ad12b5b4643074 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Nov 2018 11:00:50 -0500 Subject: [PATCH 23/52] New version format / Updated bundles / ConnectPacket encoding fix --- build.gradle | 13 +- core/assets/bundles/bundle.properties | 1 - core/assets/bundles/bundle_de.properties | 4 +- core/assets/bundles/bundle_es.properties | 4 +- core/assets/bundles/bundle_fr.properties | 4 +- core/assets/bundles/bundle_fr_BE.properties | 4 +- core/assets/bundles/bundle_in_ID.properties | 4 +- core/assets/bundles/bundle_it.properties | 4 +- core/assets/bundles/bundle_ja.properties | 4 +- core/assets/bundles/bundle_ko.properties | 1557 ++++++++--------- core/assets/bundles/bundle_pl.properties | 4 +- core/assets/bundles/bundle_pt_BR.properties | 4 +- core/assets/bundles/bundle_ru.properties | 4 +- core/assets/bundles/bundle_tk.properties | 4 +- core/assets/bundles/bundle_tr.properties | 4 +- core/assets/bundles/bundle_uk_UA.properties | 4 +- core/assets/bundles/bundle_zh_CN.properties | 4 +- core/assets/bundles/bundle_zh_TW.properties | 4 +- core/src/io/anuke/mindustry/game/Version.java | 6 +- core/src/io/anuke/mindustry/net/Packets.java | 13 +- .../mindustry/ui/fragments/MenuFragment.java | 19 +- ios/build.gradle | 5 - ios/robovm.properties | 7 - 23 files changed, 824 insertions(+), 857 deletions(-) delete mode 100644 ios/robovm.properties diff --git a/build.gradle b/build.gradle index 34c50c44d9..5db17d98cc 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ allprojects { version = 'release' ext { - versionNumber = '4.0' + versionNumber = '4' versionModifier = 'alpha' versionType = 'official' appName = 'Mindustry' @@ -124,9 +124,16 @@ project(":ios") { def vfile = file('robovm.properties') def props = new Properties() - props.load(new FileInputStream(vfile)) + if(vfile.exists()){ + props.load(new FileInputStream(vfile)) + } - props['app.build'] = (props['app.build'].toInteger() + 1)+"" + props['app.id'] = 'io.anuke.mindustry' + props['app.version'] = '4.0' + props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher' + props['app.executable'] = 'IOSLauncher' + props['app.name'] = 'Mindustry' + props['app.build'] = (!props.hasProperty("app.build") ? 40 : props['app.build'].toInteger() + 1)+"" props.store(vfile.newWriter(), null) } diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 5c12a3f2d0..b1604578b9 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -362,7 +362,6 @@ setting.sensitivity.name = Controller Sensitivity setting.saveinterval.name = Autosave Interval setting.seconds = {0} Seconds setting.fullscreen.name = Fullscreen -setting.multithread.name = Multithreading setting.fps.name = Show FPS setting.vsync.name = VSync setting.lasers.name = Show Power Lasers diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index 3678908918..b5a0972fba 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -286,6 +286,7 @@ text.no = Nein text.info.title = [accent]Info text.error.title = [crimson] Ein Fehler ist aufgetreten text.error.crashtitle = Ein Fehler ist aufgetreten! +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Blockinfo: text.blocks.powercapacity = Kapazität text.blocks.powershot = Stromverbrauch/Schuss @@ -359,7 +360,6 @@ setting.sensitivity.name = Controller-Empfindlichkeit setting.saveinterval.name = Autosave Häufigkeit setting.seconds = {0} Sekunden setting.fullscreen.name = Vollbild -setting.multithread.name = Multithreading setting.fps.name = Zeige FPS setting.vsync.name = VSync setting.lasers.name = Zeige Stromlaser @@ -404,8 +404,6 @@ mode.waves.name = Wellen mode.waves.description = Der normale Modus. Begrenzte Ressourcen und automatische Wellen. mode.sandbox.name = Sandkasten mode.sandbox.description = Unendliche Ressourcen und kein Timer für Wellen. -mode.custom.warning = [scarlet]FREISCHALTUNGEN IN BENUTZERDEFINIERTEN SPIELEN ODER SERVERN WERDEN NICHT GESPEICHERT.[]\n\nSpiele in Sektoren, um Dinge freizuschalten. -mode.custom.warning.read = Nur um sicherzugehen, dass du es gelesen hast:\n[scarlet]FREISCHALTUNGEN IN BENUTZERDEFINIERTEN SPIELEN ODER SERVERN WERDEN NICHT GESPEICHERT.[]\n\nSpiele in Sektoren, um Dinge freizuschalten.(Ich wünschte, der Hinweis wäre nicht notwendig, aber anscheinend ist er das)[] mode.freebuild.name = Freier Bau mode.freebuild.description = Begrenzte Ressourcen und kein Timer für Wellen. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index d745f83d96..7d9362b2cd 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -286,6 +286,7 @@ text.no = No text.info.title = [accent]Información text.error.title = [crimson]Un error ha ocurrido. text.error.crashtitle = Un error ha ocurrido. +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Información del Bloque text.blocks.powercapacity = Capacidad de Energía text.blocks.powershot = Energía/Disparo @@ -359,7 +360,6 @@ setting.sensitivity.name = Sensibilidad del Control setting.saveinterval.name = Intervalo del Auto-guardado setting.seconds = {0} Segundos setting.fullscreen.name = Pantalla Completa -setting.multithread.name = Multiproceso setting.fps.name = Mostrar FPS setting.vsync.name = VSync setting.lasers.name = Mostrar Energía de los Láseres @@ -404,8 +404,6 @@ mode.waves.name = hordas mode.waves.description = El modo normal. con recursos limitados y entrada de hordas automática. mode.sandbox.name = sandbox mode.sandbox.description = Recursos ilimitados y sin temporizador para las hordas. -mode.custom.warning = Ten en cuenta que los bloques no pueden usarse en partidas personalizadas hasta que se desbloqueen en sectores.\n\n[LIGHT_GRAY]Si no desbloqueaste ningún bloque, ningno aparecerá. -mode.custom.warning.read = Solo para asegurar que lo has leído:\n[scarlet]¡LOS DESBLOQUEOS EN PARTIDAS PERSONALIZADAS NO ESTÁN DISPONIBLES EN LOS SECTORES U OTROS MODOS DE JUEGO!\n\n[LIGHT_GRAY](Ojalá esto no fuera necesario, pero parece que lo es) mode.freebuild.name = construcción libre mode.freebuild.description = recursos limitados y no hay temporizador para las hordas. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index ae82c370fd..a65e1aa21c 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -286,6 +286,7 @@ text.no = Non text.info.title = Info text.error.title = [crimson]Une erreur s'est produite text.error.crashtitle = Une erreur s'est produite +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Info sur le bloc text.blocks.powercapacity = capacité d'énergie text.blocks.powershot = Énergie/Tir @@ -359,7 +360,6 @@ setting.sensitivity.name = Sensibilité de la manette setting.saveinterval.name = Intervalle des sauvegardes auto setting.seconds = {0} secondes setting.fullscreen.name = Plein écran -setting.multithread.name = Multithreading [scarlet] (instable!) setting.fps.name = Afficher FPS setting.vsync.name = VSync setting.lasers.name = Afficher les rayons des lasers @@ -404,8 +404,6 @@ mode.waves.name = Vagues mode.waves.description = le mode de jeu normal. Ressource limitée et vagues d'ennemis. mode.sandbox.name = bac à sable mode.sandbox.description = Ressources infinies et pas de timer pour les vagues. -mode.custom.warning = Notez que les blocs débloqués en partie personnalisées ne sont pas conservés pour les secteurs.\n\n[LIGHT_GRAY]En mode bac à sable, seul les blocs débloqués en mode secteur peuvent être utilisés. -mode.custom.warning.read = Simplement pour vérifier que vous l'avez lu :\n[scarlet]CE QUI EST DEBLOQUE LORS DES PARITES PERSONNALISEES NE L'EST POUR LES SECTEURS OU LES AUTRES MODES DE JEU!\n\n[LIGHT_GRAY](J'aurais souhaité que ce ne soit pas nécessaire, mais ça a l'air de l'être ) mode.freebuild.name = construction libre mode.freebuild.description = Ressource limitée et pas de timer pour les vagues. mode.pvp.name = JcJ diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index d35b767406..e8f1664d86 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -286,6 +286,7 @@ text.no = Non text.info.title = Info text.error.title = [crimson]Une erreur s'est produite text.error.crashtitle = Une erreur s'est produite +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Info sur le bloc text.blocks.powercapacity = Capacité d'énergie text.blocks.powershot = Énergie/Tir @@ -359,7 +360,6 @@ setting.sensitivity.name = Contôle de la sensibilité setting.saveinterval.name = Intervalle des sauvegardes auto setting.seconds = {0} Secondes setting.fullscreen.name = Plein écran -setting.multithread.name = Multithreading setting.fps.name = Afficher FPS setting.vsync.name = VSync setting.lasers.name = Afficher les rayons des lasers @@ -404,8 +404,6 @@ mode.waves.name = Vagues mode.waves.description = Le mode normal. Ressources limitées et vagues déclenchées automatiquement. mode.sandbox.name = Bac à sable mode.sandbox.description = Ressources infinies et pas de compte à rebours pour les vagues. -mode.custom.warning = Notez que les blocs débloqués en partie personnalisées ne sont pas conservés pour les secteurs.\n\n[LIGHT_GRAY]En mode bac à sable, seul les blocs débloqués en mode secteur peuvent être utilisés. -mode.custom.warning.read = Juste pour vous assurer que vous l'avez lu:\n[scarlet]Les déverrouillages dans les jeux personnalisés ne sont pas transférés aux secteurs ou à d'autres modes!\n\n[LIGHT_GRAY](J'aimerais que ce ne soit pas nécessaire, mais apparemment c'est le cas) mode.freebuild.name = Construction libre mode.freebuild.description = Ressources limitées et pas de compte à rebours pour les vagues. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index fe9cf095c1..87704d767b 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -286,6 +286,7 @@ text.no = No text.info.title = [accent]Info text.error.title = [crimson]Telah terjadi kesalahan text.error.crashtitle = Telah terjadi kesalahan +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Info Blok text.blocks.powercapacity = Kapasitas Tenaga text.blocks.powershot = Tenaga/tembakan @@ -359,7 +360,6 @@ setting.sensitivity.name = Sensitivitas Pengendali setting.saveinterval.name = Waktu Simpan Otomatis setting.seconds = {0} Detik setting.fullscreen.name = Layar Penuh -setting.multithread.name = Multithreading setting.fps.name = Tunjukkan FPS setting.vsync.name = VSync setting.lasers.name = Tampilkan Laser Tenaga @@ -404,8 +404,6 @@ mode.waves.name = gelombang mode.waves.description = the normal mode. limited resources and automatic incoming waves. mode.sandbox.name = sandbox mode.sandbox.description = infinite resources and no timer for waves. -mode.custom.warning = Note that blocks cannot be used in custom games until they are unlocked in sectors.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. -mode.custom.warning.read = Just to make sure you've read it:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.freebuild.name = freebuild mode.freebuild.description = limited resources and no timer for waves. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 1001b8369c..2ed037b43d 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -286,6 +286,7 @@ text.no = No text.info.title = [accent] Info text.error.title = [crimson]Si è verificato un errore text.error.crashtitle = Si è verificato un errore +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = info sul blocco text.blocks.powercapacity = Capacità Energetica text.blocks.powershot = Danno/Colpo @@ -359,7 +360,6 @@ setting.sensitivity.name = Sensibilità del controller setting.saveinterval.name = Intervallo di salvataggio automatico setting.seconds = {0} Secondi setting.fullscreen.name = Schermo Intero -setting.multithread.name = multithreading setting.fps.name = Mostra FPS setting.vsync.name = VSync setting.lasers.name = Mostra Laser Energetici @@ -404,8 +404,6 @@ mode.waves.name = ondate mode.waves.description = modalità normale. risorse limitate e ondate automatiche. mode.sandbox.name = Sandbox mode.sandbox.description = risorse infinite e nessun timer per le ondate. -mode.custom.warning = Note that blocks cannot be used in custom games until they are unlocked in sectors.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. -mode.custom.warning.read = Just to make sure you've read it:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.freebuild.name = freebuild mode.freebuild.description = risorse limitate e nessun timer per le ondate. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 109bd62369..e2308591e7 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -286,6 +286,7 @@ text.no = いいえ text.info.title = 情報 text.error.title = [crimson]エラーが発生しました text.error.crashtitle = エラーが発生しました +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = ブロック情報 text.blocks.powercapacity = 電力容量 text.blocks.powershot = 電力/ショット @@ -359,7 +360,6 @@ setting.sensitivity.name = 操作感度 setting.saveinterval.name = 自動保存間隔 setting.seconds = {0} 秒 setting.fullscreen.name = フルスクリーン -setting.multithread.name = マルチスレッド setting.fps.name = FPSを表示 setting.vsync.name = VSync setting.lasers.name = 電力レーザーを表示 @@ -404,8 +404,6 @@ mode.waves.name = ウェーブ mode.waves.description = ノーマルモードです。限られた資源でウェーブが自動的に始まります。 mode.sandbox.name = サンドボックス mode.sandbox.description = 無限の資源でウェーブを自由に始められます。 -mode.custom.warning = [scarlet]カスタムゲームまたは、サーバ内でのアンロックは保存されません。[]\n\nアンロックするには区域でプレイしてください。 -mode.custom.warning.read = 必ずお読みください:\n[scarlet]カスタムゲーム内でのアンロックは区域やほかのモードには影響しません!\n\n[LIGHT_GRAY](多分必要ないと思いますが) mode.freebuild.name = フリービルド mode.freebuild.description = 限られた資源でウェーブを自由に始められます。 mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 402732502c..fd7bdcd8af 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -1,779 +1,778 @@ -text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) -text.credits=제작자 -text.discord=Mindustry Discord 에 참여하세요! -text.link.discord.description=공식 Mindustry Discord 채팅방 -text.link.github.description=게임 소스코드 -text.link.dev-builds.description=개발중인 빌드 -text.link.trello.description=다음 출시될 기능들을 게시한 공식 Trello 보드 -text.link.itch.io.description=PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트 -text.link.google-play.description=Google Play 스토어 정보 -text.link.wiki.description=공식 Mindustry 위키 (영어) -text.linkfail=링크를 여는데 실패했습니다! URL이 기기의 클립보드에 복사되었습니다. -text.gameover=코어가 터졌습니다. 게임 오버! -text.gameover.pvp=[accent]{0}[] 팀이 승리했습니다! -text.sector.gameover=이 지역을 공략하는데 실패했습니다. 포기 하시겠습니까? -text.sector.retry=아니오 -text.highscore=[YELLOW]최고점수 달성! -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.construction.desktop=PC 에서의 조작 방법이 변경되었습니다.\n블록 선택을 해제하거나 건설을 중지하려면 [accent]스페이스 바[]를 누르세요. -text.construction.title=블록 배치 안내서 -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=다음 세션에서 이 메세지를 표시하지 않습니다 -text.coreattack=< 코어가 공격받고 있습니다! > -text.unlocks=아이템들 -text.savegame=게임 저장 -text.loadgame=게임 불러오기 -text.joingame=멀티플레이 -text.addplayers=플레이어 추가/제거 -text.customgame=커스텀 게임 -text.sectors=지역 플레이 -text.sector=지역 : [LIGHT_GRAY]{0} -text.sector.time=시간 : [LIGHT_GRAY]{0} -text.sector.deploy=시작 -text.sector.abandon=초기화 -text.sector.abandon.confirm=정말로 이 지역의 모든 진행상황을 초기화 하겠습니까?\n이 작업은 되돌릴 수 없습니다! -text.sector.resume=계속하기 -text.sector.locked=[scarlet][[완료안됨] -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.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.resource.menu={0} {1}개 수집 -text.mission.resource={0} 을(를) 수집하세요\n[accent]{1}/{2} -text.mission.block={0} 를 만드세요 -text.mission.unit={0} 유닛을 만드세요 -text.mission.command=유닛에게 {0} 명령을 보내세요 -text.mission.linknode=전력 노드를 연결하세요 -text.mission.display=[accent]목표 : [LIGHT_GRAY]{0} -text.mission.mech=[accent]{0}[] 기체로 바꾸세요 -text.mission.create=[accent]{0}[] 을(를)설치하세요. -text.none=<없음> -text.close=닫기 -text.quit=나가기 -text.maps=맵 -text.continue=계속하기 -text.nextmission=다음 임무 -text.maps.none=[LIGHT_GRAY]맵을 찾을 수 없습니다! -text.about.button=정보 -text.name=이름 : -text.filename=파일 이름 : -text.unlocked=새 블록 잠금 해제됨 -text.unlocked.plural=잠금 해제 -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.clientOutdated=오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요! -text.server.kicked.serverOutdated=오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요! -text.server.kicked.banned=뭘 하셨는지는 모르겠지만, 이제 영원히 서버에 접속할 수 없습니다. -text.server.kicked.recentKick=방금 추방처리 되었습니다. 잠시 기다린 후에 접속 해 주세요. -text.server.kicked.nameInUse=이 닉네임이 이미 서버에서 사용중입니다. -text.server.kicked.nameEmpty=닉네임에는 반드시 영어 또는 숫자가 있어야 합니다. -text.server.kicked.idInUse=이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다. -text.server.kicked.customClient=이 서버는 직접 빌드한 버전을 지원하지 않습니다. 공식 버전을 사용하세요. -text.host.info=[accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 포트를 사용합니다.\n[LIGHY_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 해야 합니다.\n\n[LIGHT_GRAY]참고 : LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요. -text.join.info=여기서 [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원됩니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속할려면 서버장에게 IP를 요청해야 합니다. -text.hostserver=서버 열기 -text.hostserver.mobile=서버\n열기 -text.host=서버 열기 -text.hosting=[accent]서버 여는중... -text.hosts.refresh=새로고침 -text.hosts.discovering=LAN 게임 찾기 -text.server.refreshing=서버 목록 새로고치는중... -text.hosts.none=[lightgray]LAN 게임을 찾을 수 없습니다! -text.host.invalid=[scarlet]서버에 연결할 수 없습니다! -text.trace=플레이어 정보 보기 -text.trace.playername=이름 : [accent]{0} -text.trace.ip=IP : [accent]{0} -text.trace.id=고유 ID : [accent]{0} -text.trace.android=Android 클라이언트 : [accent]{0} -text.trace.modclient=수정된 클라이언트 : [accent]{0} -text.trace.totalblocksbroken=총 블록 파괴 개수 : [accent]{0} -text.trace.structureblocksbroken=구조 블록 파괴 수 : [accent]{0} -text.trace.lastblockbroken=마지막으로 파괴한 블록 : [accent]{0} -text.trace.totalblocksplaced=총 설치한 블록 개수 : [accent]{0} -text.trace.lastblockplaced=마지막으로 설치한 블록 : [accent]{0} -text.invalidid=잘못된 클라이언트 ID 입니다! 공식 Mindustry Discord 으로 버그 보고서를 제출 해 주세요. -text.server.bans=차단된 유저 -text.server.bans.none=차단된 플레이어가 없습니다. -text.server.admins=관리자 -text.server.admins.none=관리자가 없습니다! -text.server.add=서버 추가 -text.server.delete=이 서버를 삭제 하시겠습니까? -text.server.hostname=호스트 : {0} -text.server.edit=서버 수정 -text.server.outdated=[crimson]서버 버전이 낮습니다![] -text.server.outdated.client=[Crimson]클라이언트 버전이 낮습니다![] -text.server.version=[lightgray]서버 버전 : {0} -text.server.custombuild=[yellow]커스텀 서버 -text.confirmban=이 플레이어를 차단하시겠습니까? -text.confirmkick=정말로 이 플레이어를 추방시키겠습니까? -text.confirmunban=이 플레이어를 차단해제 하시겠습니까? -text.confirmadmin=이 플레이어를 관리자로 만들겠습니까? -text.confirmunadmin=이 플레이어를 일반 유저로 만들겠습니까? -text.joingame.title=게임 참가 -text.joingame.ip=IP : -text.disconnect=서버와 연결이 해제되었습니다. -text.disconnect.data=맵 데이터를 받아오는데 실패했습니다. -text.connecting=[accent]연결중... -text.connecting.data=[accent]맵 데이터 다운로드중... -text.server.port=포트 : -text.server.addressinuse=이 주소는 이미 사용중입니다! -text.server.invalidport=포트 번호가 잘못되었습니다. -text.server.error=[crimson]{0}[accent]서버를 여는데 오류가 발생했습니다.[] -text.save.old=이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다. -text.save.new=새로 저장 -text.save.overwrite=이 저장 슬롯을 덮어씌우겠습니까? -text.overwrite=덮어쓰기 -text.save.none=저장 파일을 찾지 못했습니다! -text.saveload=[accent]저장중... -text.savefail=게임을 저장하지 못했습니다! -text.save.delete.confirm=이 저장파일을 삭제 하시겠습니까? -text.save.delete=삭제 -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.rename=이름 변경 -text.save.rename.text=새 이름 : -text.selectslot=저장슬롯을 선택하십시오. -text.slot=[accent]{0}번째 슬롯 -text.save.corrupted=[accent]세이브 파일이 손상되었거나 잘못된 파일입니다! 만약 게임을 업데이트 했다면 이것은 아마 저장 형식 변경일 것이고, 이것은 버그가 [scarlet]아닙니다[]. -text.sector.corrupted=[accent]저장 파일에서 지역을 발견했으나 불러오지 못했습니다.\n새로 생성되었습니다. -text.empty=<비어있음> -text.on=켜기 -text.off=끄기 -text.save.autosave=자동저장 : {0} -text.save.map=맵 : {0} -text.save.wave={0}단계[] -text.save.difficulty=난이도 : {0} -text.save.date=마지막 저장날짜 : {0} -text.save.playtime=플레이시간 : {0} -text.confirm=확인 -text.delete=삭제 -text.ok=확인 -text.open=열기 -text.cancel=취소 -text.openlink=링크 열기 -text.copylink=링크 복사 -text.back=뒤로가기 -text.quit.confirm=정말로 종료하시겠습니까? -text.changelog.title=변경사항 -text.changelog.loading=변경사항 가져오는중... -text.changelog.error.android=[accent]게임 변경사항은 가끔 Android 4.4 이하에서 작동하지 않습니다. 이것은 내부 Android 버그 때문입니다. -text.changelog.error.ios=[accent]현재 iOS에서는 변경 사항을 지원하지 않습니다. -text.changelog.error=[scarlet]게임 변경사항을 가져오는 중 오류가 발생했습니다![]\n인터넷 연결을 확인하십시오. -text.changelog.current=[accent][[현재 버전] -text.changelog.latest=[accent][[최신 버전] -text.loading=[accent]불러오는중... -text.saving=[accent]저장중... -text.wave=[accent]{0}단계 -text.wave.waiting=남은 시간 : [green]{0}초[] -text.waiting=[LIGHT_GRAY]대기중... -text.waiting.players=다른 플레이어를 기다리는 중.. -text.wave.enemies=[LIGHT_GRAY]{0} 마리 남았음 -text.wave.enemy=[LIGHT_GRAY]{0} 마리 남음 -text.loadimage=사진 불러오기 -text.saveimage=사진 저장 -text.unknown=알 수 없음 -text.custom=커스텀 -text.builtin=기본맵 -text.map.delete.confirm=이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! -text.map.random=[accent]랜덤 맵 -text.map.nospawn=이 맵에 플레이어가 스폰 할 코어가 없습니다! 맵 편집기에서 [ROYAL]파란색[]코어를 맵에 추가하세요. -text.map.nospawn.pvp=이 맵에는 적팀 코어가 없습니다! 에디터에서 [scarlet]빨간팀[] 코어를 추가하세요. -text.map.invalid=파일이 잘못되었거나 손상되어 맵을 열 수 없습니다. -text.editor.brush=브러쉬 -text.editor.slope=\\ -text.editor.openin=편집기 열기 -text.editor.oregen=광물 무작위 생성 -text.editor.oregen.info=광물 무작위 생성 : -text.editor.mapinfo=맵 정보 -text.editor.author=만든이 : -text.editor.description=설명 : -text.editor.name=이름 : -text.editor.teams=팀 -text.editor.elevation=지형 높이 -text.editor.errorimageload=[accent]{0}[] 파일을 불러오는데 오류가 발생했습니다. -text.editor.errorimagesave=[accent]{0}[] 파일 저장중 오류가 발생했습니다. -text.editor.generate=생성 -text.editor.resize=맵 크기조정 -text.editor.loadmap=맵 불러오기 -text.editor.savemap=맵 저장 -text.editor.saved=저장됨! -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.importfile=파일 가져오기 -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.unsaved=[scarlet]변경사항을 저장하지 않았습니다![]\n정말로 나가시겠습니까? -text.editor.resizemap=맵 크기 조정 -text.editor.mapname=맵 이름 : -text.editor.overwrite=[accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다. -text.editor.overwrite.confirm=[scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까? -text.editor.selectmap=불러올 맵 선택 : -text.width=넓이 : -text.height=높이 : -text.menu=메뉴 -text.play=플레이 -text.load=불러오기 -text.save=저장 -text.fps={0}FPS -text.tps={0}TPS -text.ping=ping : {0}ms -text.language.restart=언어를 변경하려면 게임을 다시시작 해 주세요. -text.settings=설정 -text.tutorial=게임 방법 -text.editor=편집기 -text.mapeditor=맵 편집기 -text.donate=기부 -text.connectfail=[crimson]{0}[accent] 서버에 연결하지 못했습니다.[] -text.error.unreachable=서버에 연결하지 못했습니다. -text.error.invalidaddress=잘못된 주소입니다. -text.error.timedout=시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하십시오. -text.error.mismatch=패킷 오류:\n클라이언트/서버 버전이 일치하지 않습니다.\n접속할려는 서버가 최신 버전의 Mindustry 인지 확인하세요! -text.error.alreadyconnected=이미 접속중입니다. -text.error.mapnotfound=맵 파일을 찾을 수 없습니다! -text.error.any=알 수 없는 네트워크 오류. -text.settings.language=언어 -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.clearsectors=지역 초기화 -text.settings.clearunlocks=잠금 해제 초기화 -text.settings.clearall=모두 초기화 -text.paused=일시 정지 -text.yes=예 -text.no=아니오 -text.info.title=[accent]정보 -text.error.title=[crimson]오류가 발생했습니다. -text.error.crashtitle=오류가 발생했습니다. -text.blocks.unknown=[LIGHT_GRAY]??? -text.blocks.blockinfo=블록 정보 -text.blocks.powercapacity=최대 전력 용량 -text.blocks.powershot=1발당 전력 소모량 -text.blocks.targetsair=공중공격 가능 -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.inputitemcapacity=입력 아이템 용량 -text.blocks.outputitemcapacity=출력 아이템 용량 -text.blocks.itemcapacity=저장 용량 -text.blocks.basepowergeneration=기지 전력 생성기 -text.blocks.powertransferspeed=전력 전송량 -text.blocks.craftspeed=생산 속도 -text.blocks.inputliquid=사용되는 액체 -text.blocks.inputliquidaux=보조 액체 -text.blocks.inputitem=사용되는 아이템 -text.blocks.inputitems=사용되는 아이템들 -text.blocks.outputitem=출력 아이템 -text.blocks.drilltier=드릴 -text.blocks.drillspeed=기본 드릴 속도 -text.blocks.liquidoutput=액체 출력 -text.blocks.liquidoutputspeed=액체 출력속도 -text.blocks.liquiduse=액체 사용량 -text.blocks.coolant=냉각제 -text.blocks.coolantuse=냉각수 사용 -text.blocks.inputliquidfuel=연료 액 -text.blocks.liquidfueluse=액체 연료 사용 -text.blocks.explosive=이 블록이 터지면 주변 블록과 같이 자폭을 합니다!! -text.blocks.health=체력 -text.blocks.inaccuracy=오차각 -text.blocks.shots=발포 횟수 -text.blocks.reload=재장전 -text.blocks.inputfuel=연료 -text.blocks.fuelburntime=연료 연소 시간 -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.degrees=도 -text.unit.seconds=초 -text.unit.items=아이템 -text.category.general=일반 -text.category.power=전력 -text.category.liquids=액체 -text.category.items=아이템 -text.category.crafting=제작 -text.category.shooting=사격 -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=[#00ff00]멀[#2efe2e]티[#58fa58]플[#81f781]레[#a9f5a9]이 [#81f781]전[#58fa58]용[] -setting.difficulty.name=난이도 : -setting.screenshake.name=화면 흔들기 강도 -setting.effects.name=화면 효과 -setting.sensitivity.name=컨트롤러 감도 -setting.saveinterval.name=자동저장 간격 -setting.seconds={0}초 -setting.fullscreen.name=전체 화면 -setting.multithread.name=멀티 스레드 -setting.fps.name=FPS 표시 -setting.vsync.name=VSync 활성화 -setting.lasers.name=전력 노드 레이저 표시 -setting.minimap.name=미니맵 보기 -setting.musicvol.name=음악 크기 -setting.mutemusic.name=음소거 -setting.sfxvol.name=효과음 크기 -setting.mutesound.name=소리 끄기 -setting.crashreport.name=오류 보고서 보내기 -text.keybind.title=조작키 설정 -category.general.name=일반 -category.view.name=보기 -category.multiplayer.name=멀티플레이 -command.attack=공격 -command.retreat=후퇴 -command.patrol=순찰 -keybind.press=키를 누르세요... -keybind.press.axis=축 또는 키를 누르세요... -keybind.move_x.name=오른쪽/왼쪽 이동 -keybind.move_y.name=위쪽/아래쪽 이동 -keybind.select.name=선택 -keybind.break.name=파괴 -keybind.deselect.name=선택해제 -keybind.shoot.name=사격 -keybind.zoom_hold.name=길게눌러 확대 -keybind.zoom.name=확대 -keybind.menu.name=메뉴 -keybind.pause.name=일시중지 -keybind.dash.name=달리기 -keybind.chat.name=채팅 -keybind.player_list.name=플레이어 목록 -keybind.console.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.zoom_minimap.name=미니맵 확대 -mode.text.help.title=도움말 -mode.waves.name=단계 -mode.waves.description=이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 단계가 시작됩니다. -mode.sandbox.name=샌드박스 -mode.sandbox.description=무한한 자원과 다음단계 시작을 위한 타이머가 없습니다. -mode.freebuild.name=자유 건축 -mode.freebuild.description=제한된 자원과 다음단계 시작을 위한 타이머가 없습니다. -mode.pvp.name=PvP -mode.pvp.description=몹이 아닌 실제 플레이어와 PvP를 합니다. -content.item.name=아이템 -content.liquid.name=액체 -content.unit.name=유닛 -content.recipe.name=블록 -content.mech.name=기체 -item.stone.name=돌 -item.stone.description=주로 용암을 사용하여 얻을 수 있는 자원입니다. -item.copper.name=구리 -item.copper.description=모든 유형의 블록에서 광범위하게 사용되는 자원입니다. -item.lead.name=납 -item.lead.description=쉽게 구할 수 있으며, 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. -item.coal.name=석탄 -item.coal.description=쉽게 구할 수 있으며, 주로 제련소 등에서 연료로 사용됩니다. -item.dense-alloy.name=고밀도 합금 -item.dense-alloy.description=납과 구리로 만든 튼튼한 고밀도 합금.\n고급 수송 블록이나 상위 티어 블록을 건설하는데 사용됩니다. -item.titanium.name=티타늄 -item.titanium.description=파이프 재료나 고급 드릴, 비행기/기체 등에서 재료로 사용되는 자원입니다. -item.thorium.name=토륨 -item.thorium.description=건물의 재료, 포탑의 탄약 또는 핵연료로 사용되는 방사성 금속입니다. -item.silicon.name=실리콘 -item.silicon.description=매우 유용한 반도체로, 태양 전지판과 복잡한 전자 제품에 사용할 수 있습니다. -item.plastanium.name=플라스터늄 -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=이것은 유기농 덤불입니다!\n압축기에 넣어 석유로 바꿀 수 있습니다. -item.sand.name=모래 -item.sand.description=고밀도 합금이나 플럭스 등에서 제련시 광범위하게 사용되는 일반적인 재료입니다. -item.blast-compound.name=폭발물 -item.blast-compound.description=포탑 및 건설의 재료로 사용되는 휘발성 폭발물.\n연료로도 사용할 수 있지만, 별로 추천하지는 않습니다. -item.pyratite.name=피라테 -item.pyratite.description=폭발성을 가진 재료로, 주로 포탑의 탄약으로 사용됩니다. -liquid.water.name=물 -liquid.lava.name=용암 -liquid.oil.name=석유 -liquid.cryofluid.name=냉각수 -mech.alpha-mech.name=알파 -mech.alpha-mech.weapon=중무장 소총 -mech.alpha-mech.ability=드론 소환 -mech.alpha-mech.description=표준 기체.\n적절한 속도와 공격력을 갖추고 있으며, 공격 능력을 높이기 위해 최대 3대의 드론을 만들 수 있습니다. -mech.delta-mech.name=델타 -mech.delta-mech.weapon=전격 생산기 -mech.delta-mech.ability=충전 -mech.delta-mech.description=빠르게 이동하는 적을 처치하기 위한 가벼운 기체.\n구조물에는 거의 피해를 주지 않지만, 전격 무기를 사용하여 많은 적군을 매우 빠르게 죽일 수 있습니다. -mech.tau-mech.name=타우 -mech.tau-mech.weapon=건물 수리총 -mech.tau-mech.ability=유닛 치료 -mech.tau-mech.description=지원형 기체.\n총을 발사하여 건물을 치료하고 회복 능력 사용으로 화재를 진압하거나, 반경 내 아군을 치유시킵니다. -mech.omega-mech.name=오메가 -mech.omega-mech.weapon=전방 유도미사일 -mech.omega-mech.ability=방어모드 -mech.omega-mech.description=지상 기체 최종판이자 건물 파괴용으로 적합한 부피가 크고 튼튼한 기체. 방어 모드는 최대 90% 의 피해를 줄일 수 있습니다. -mech.dart-ship.name=다트 -mech.dart-ship.weapon=소총 -mech.dart-ship.description=표준 비행선. 빠르고 가볍지만 공격력이 거의 없고 채광 속도가 느립니다. -mech.javelin-ship.name=자비린 -mech.javelin-ship.description=치고 빠지는 공격을 위한 비행선. 처음에는 느리지만, 가속도가 붙어 엄청난 속도로 미사일 피해를 입힐 수 있으며, 전격 능력을 사용할 수 있습니다. -mech.javelin-ship.weapon=유도 미사일 -mech.javelin-ship.ability=가속 전격 생성기 -mech.trident-ship.name=삼지창 -mech.trident-ship.description=대형 공중 폭격기. 당연하게도 엄청 단단합니다. -mech.trident-ship.weapon=폭탄 저장고 -mech.glaive-ship.name=글레브 -mech.glaive-ship.description=크고 잘 무장된 총을 가진 비행선. 방화용 리피터가 장착되어 있으며, 가속도와 최대속도가 높습니다. -mech.glaive-ship.weapon=방화총 -text.item.explosiveness=[LIGHT_GRAY]폭발력 : {0} -text.item.flammability=[LIGHT_GRAY]인화성 : {0} -text.item.radioactivity=[LIGHT_GRAY]방사능 : {0} -text.item.fluxiness=[LIGHT_GRAY]플럭스 파워 : {0} -text.unit.health=[LIGHT_GRAY]체력 : {0} -text.unit.speed=[LIGHT_GRAY]속도 : {0} -text.mech.weapon=[LIGHT_GRAY]무기 : {0} -text.mech.armor=[LIGHT_GRAY]방어력 : {0} -text.mech.itemcapacity=[LIGHT_GRAY]아이템 수용 용량 : {0} -text.mech.minespeed=[LIGHT_GRAY]채광 속도 : {0} -text.mech.minepower=[LIGHT_GRAY]채광 레벨 : {0} -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}[LIGHT_GRAY](만드는중) -block.spawn.name=적 스폰지점 -block.core.name=코어 -block.metalfloor.name=철판 -block.deepwater.name=깊은물 -block.water.name=물 -block.lava.name=용암 -block.tar.name=타르 -block.blackstone.name=검은돌 -block.stone.name=돌 -block.dirt.name=흙 -block.sand.name=모래 -block.ice.name=얼음 -block.snow.name=눈 -block.grass.name=잔디 -block.shrub.name=관목 -block.rock.name=바위 -block.blackrock.name=검은바위 -block.icerock.name=얼음바위 -block.copper-wall.name=구리벽 -block.copper-wall-large.name=큰 구리벽 -block.dense-alloy-wall.name=합금 벽 -block.dense-alloy-wall-large.name=큰 합금 벽 -block.phase-wall.name=메타벽 -block.phase-wall-large.name=큰 메타벽 -block.thorium-wall.name=토륨벽 -block.thorium-wall-large.name=대형 토륨벽 -block.door.name=문 -block.door-large.name=대형문 -block.duo.name=듀오 -block.scorch.name=스코치 -block.hail.name=헤일 -block.lancer.name=랜서 -block.conveyor.name=컨베이어 -block.titanium-conveyor.name=티타늄 컨베이어 -block.junction.name=교차기 -block.router.name=분배기 -block.distributor.name=대형 분배기 -block.sorter.name=필터 -block.sorter.description=아이템을 넣어서 필터에 설정된 아이템일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 통과합니다. -block.overflow-gate.name=오버플로 게이트 -block.overflow-gate.description=정면으로 가는 자원이 막히면 옆으로 출력하고, 그렇지 않으면 계속 정면으로 출력합니다. -block.smelter.name=제련소 -block.arc-smelter.name=대형 제련소 -block.silicon-smelter.name=실리콘 제련소 -block.phase-weaver.name=메타 합성기 -block.pulverizer.name=분쇄기 -block.cryofluidmixer.name=냉각수 제조기 -block.melter.name=융해기 -block.incinerator.name=소각로 -block.biomattercompressor.name=바이오메터 압축기 -block.separator.name=셉터 -block.centrifuge.name=원심 분리기 -block.power-node.name=전력 송신기 -block.power-node-large.name=대형 전력 송신기 -block.battery.name=배터리 -block.battery-large.name=대형 배터리 -block.combustion-generator.name=석탄 발전기 -block.turbine-generator.name=터빈 발전기 -block.mechanical-drill.name=기계식 드릴 -block.pneumatic-drill.name=강철 드릴 -block.laser-drill.name=레이저 드릴 -block.water-extractor.name=물 추출기 -block.cultivator.name=온실 -block.alpha-mech-pad.name=알파 기체 패드 -block.dart-ship-pad.name=다트 비행선 패드 -block.delta-mech-pad.name=델타 기체 패드 -block.javelin-ship-pad.name=자비린 비행선 패드 -block.trident-ship-pad.name=삼지창 비행선 패드 -block.glaive-ship-pad.name=글레브 비행선 패드 -block.omega-mech-pad.name=오메가 기체 패드 -block.tau-mech-pad.name=타우 기체 패드 -block.conduit.name=파이프 -block.mechanical-pump.name=기계식 펌프 -block.itemsource.name=아이템 소스 -block.itemvoid.name=아이템 삭제 장치 -block.liquidsource.name=무한 액체공급 장치 -block.powervoid.name=방전장치 -block.powerinfinite.name=무한 전력공급 장치 -block.unloader.name=언로더 -block.vault.name=창고 -block.wave.name=파도 -block.swarmer.name=스웜 -block.salvo.name=살보 -block.ripple.name=립플 -block.phase-conveyor.name=메타 컨베이어 -block.bridge-conveyor.name=터널 -block.plastanium-compressor.name=플라스터늄 압축기 -block.pyratite-mixer.name=피라테 제조기 -block.blast-mixer.name=폭발물 제조기 -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.repair-point.name=정비소 -block.pulse-conduit.name=퓨즈 파이프 -block.phase-conduit.name=메타 파이프 -block.liquid-router.name=액체 분배기 -block.liquid-tank.name=물탱크 -block.liquid-junction.name=액체 교차기 -block.bridge-conduit.name=다리 파이프 -block.rotary-pump.name=동력 펌프 -block.thorium-reactor.name=토륨 원자로 -block.command-center.name=명령 본부 -block.mass-driver.name=물질 이동기 -block.blast-drill.name=고속 발열 드릴 -block.thermal-pump.name=화력 펌프 -block.thermal-generator.name=열발전기 -block.alloy-smelter.name=설금 제련소 -block.mend-projector.name=수리 프로젝터 -block.surge-wall.name=설금벽 -block.surge-wall-large.name=큰 설금벽 -block.cyclone.name=사이클론 -block.fuse.name=퓨즈 -block.shock-mine.name=전격 지뢰 -block.overdrive-projector.name=오버드라이브 프로젝터 -block.force-projector.name=보호막 프로젝터 -block.arc.name=Arc -block.rtg-generator.name=토륨 발전소 -block.spectre.name=스펙터 -block.meltdown.name=멜트다운 -block.container.name=컨테이너 -team.blue.name=블루팀 -team.red.name=레드팀 -team.orange.name=오렌지팀 -team.none.name=공기팀 -team.green.name=그린팀 -team.purple.name=보라색팀 -unit.alpha-drone.name=알파 드론 -unit.spirit.name=스피릿 드론 -unit.spirit.description=기본 드론 유닛. 기본적으로 코어에서 1개가 스폰됩니다. 자동으로 채광하며 아이템을 수집하고, 블록을 수리합니다. -unit.phantom.name=팬텀 드론 -unit.phantom.description=첨단 드론 유닛. 광석을 자동으로 채광하며, 아이템을 수집하고 블록을 수리합니다. 일반 드론보다 훨씬 효과적입니다. -unit.dagger.name=디거 -unit.dagger.description=기본 지상 유닛입니다. 스웜과 같이 쓰면 유용합니다. -unit.titan.name=타이탄 -unit.titan.description=고급 지상 유닛입니다. 고밀도 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다. -unit.ghoul.name=구울 폭격기 -unit.ghoul.description=무거운 지상 폭격기 입니다. 폭발물 또는 피라테를 탄약으로 사용합니다. -unit.wraith.name=유령 전투기 -unit.wraith.description=코어를 집중적으로 공격하는 방식을 사용하는 전투기 입니다. -unit.fortress.name=포트리스 -unit.fortress.description=중포 지상 유닛. 높은 공격력과 체력을 가지고 있습니다. -unit.revenant.name=레비던트 -unit.revenant.description=대형 레이저를 발사하는 공중 유닛입니다. -tutorial.begin=플레이어의 주요 목표는 [LIGHT_GRAY]적군[]을 제거하는 것입니다.\n\n이 게임은 [accent]구리를 채광[]하는 것으로 시작합니다.\n이것을 하기 위해 플레이어의 중심부 근처에 있는 구리 광맥을 누르세요. -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\n2단계 동안 코어를 보호하고 더 많은 터렛을 만드세요. -tutorial.lead=더 많은 광석을 이용할 수 있습니다. [accent]납[]을 찾아 탐색하세요.\n\n아이템을 코어로 전송할려면 플레이어 기체 또는 비행기에서 코어로 드래그 하세요. -tutorial.smelter=구리와 납은 약한 금속입니다.\n[accent]고밀도 합금[]은 제련소에서 만들 수 있습니다.\n\n하나 만드세요. -tutorial.densealloy=이 제련소는 이제 고밀도 합금을 생산할 것입니다.\n몇개 더 생산하세요.\n필요한 경우 더 만드세요. -tutorial.siliconsmelter=이제 이코어는 채굴과 수리하기 위한[accent] 스피릿 드론[]을 생성 할 것 입니다.\n\n[accent]실리콘[]을 사용해 다른 유닛을 생성하기 위한 공장을 만들 수 있습니다.\n실리콘 제련기를 제작하세요! -tutorial.silicondrill=실리콘을 제작하려면[accent] 석탄[] 과[accent] 모래[]가 필요합니다.\n드릴을 먼저 건설해보는건 어떤가요? -tutorial.generator=이 건물은 [LIGHT_YELLOW]전력[]이 필요합니다.\n[accent] 석탄 발전기[]를 건설하세요. -tutorial.generatordrill=[accent] 석탄 발전기[]는 연료가 필요합니다.\n[accent] 석탄[]을 드릴로 채굴해서 연료를 체워주세요. -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.core.description=게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다. -block.copper-wall.description=구리로 만든 벽. -block.copper-wall-large.description=구리로 만든 큰 벽. -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-large.description=설금을 재료로 한 큰 벽.\n데미지를 입으면 번개를 일으켜 대상에게 피해를 입힙니다. -block.door.description=유닛이 지나갈 수 있도록 만든 문. 클릭하면 열고 닫습니다. -block.door-large.description=유닛이 자나갈 수 있도록 만든 큰 문. 클릭하면 열고 닫습니다. -block.mend-projector.description=주위 건물을 치료하는 건물입니다. -block.overdrive-projector.description=범위 내 모든 행동의 속도를 높여주는 보조형 건물입니다. -block.force-projector.description=보호막을 생성하는 건물.\n기본적으로 전력만 있으면 작동하지만, 메타를 넣어 보호막의 범위를 크게 확장시킬 수 있습니다. -block.shock-mine.description=적이 이 블록을 지나가면 전격 공격을 하는 함정형 방어 건물입니다. -block.duo.description=범용성을 가진 터렛.\n지상 및 공중공격을 하며, 초중반에 유용합니다. -block.arc.description=목표 방향으로 전격 공격을 하는 포탑입니다. -block.hail.description=장거리 지상 공격을 하는 터렛입니다.\n적이 오기 전에 쓸어버릴 수 있습니다. -block.lancer.description=중거리 레이져 포탑입니다.\n적을 관통하기 때문에 뭉쳐있는 적들에게 매우 효과적입니다. -block.wave.description=적이 있는 자리에 액체를 뿌립니다.\n이 포탑을 활용하여 액체를 뿌린 곳에 불을 붙이거나 적을 느리게 할 수 있습니다. -block.salvo.description=명중률이 높고, 3발씩 끊어 발사하는 포탑입니다. -block.swarmer.description=4발씩 끊어서 유도체를 발사하는 포탑입니다 -block.ripple.description=4개의 탄약으로 나눠 발사하여 명중률이 낮지만, 사거리가 매우 긴 포탑입니다. -block.cyclone.description=낮은 명중률과 높은 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. -block.fuse.description=단거리에서 범위형 레이저를 발사하는 포탑입니다. -block.spectre.description=높은 명중률과 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. -block.meltdown.description=목표를 따라 초대형 레이져를 발사하는 포탑입니다.\n뭉쳐있는 몹에게 매우 효과가 좋습니다. -block.conveyor.description=느린 속도로 자원을 수송할 수 있는 컨베이어. -block.titanium-conveyor.description=빠른 속도로 자원을 수송할 수 있는 컨베이어. -block.phase-conveyor.description=자원을 순간이동 시켜 주는 컨베이어 입니다. -block.junction.description=컨베이어를 교차시켜 자원을 수송할 때 사용할 수 있는 블록입니다. -block.mass-driver.description=자원을 받아서 다른 물질 이동기로 전달할 수 있는 블록입니다.\n엄청난 사거리를 가지고 있으며, 주로 컨베이어가 접근할 수 없는 곳에 유용하게 사용됩니다. -block.smelter.description=고밀도 합금을 제작할 수 있는 건물입니다. -block.arc-smelter.description=고밀도 합금을 제작할 수 있는 건물이지만, 이 건물은 석탄이 필요 없고 좀더 빠른 속도로 합금을 생산해낼 수 있습니다. -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.solidifer.description=용암을 돌로 만들 수 있는 건물입니다. -block.melter.description=돌로 용암을 만들 수 있는 건물입니다. -block.incinerator.description=불필요한 아이템을 소각시켜 줄 수 있는 건물입니다. -block.biomattercompressor.description=잔디밭에서 바이오메터를 추출할 수 있는 건물입니다. -block.separator.description=돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다. -block.centrifuge.description=돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물이지만, 이 건물은 좀 더 다양한 자원을 얻을 수 있게 해 줍니다. -block.power-node.description=생성된 전력를 다른 건물로 전달하기 위한 전력 노드입니다. -block.power-node-large.description=생성된 전력를 다른 건물로 전달하기 위한 건물이며, 일반 노드보다 더 많은 전력을 이동시킬 수 있습니다. -block.battery.description=흔히 아는 충전식 배터리입니다.\n전력을 사용하는 건물에 전력이 떨어질경우, 이 배터리를 전력 노드에 연결하면 이 배터리에 저장된 전력을 소모하여 지속적으로 공급할 수 있습니다. -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=토륨을 원료로 하는 토륨 원자로 입니다.\n많은 전력을 생산하지만 엄청난 열을 발생시키기 때문에, 많은 량의 물 또는 냉각수가 있어야 터지지 않고 작동합니다. -block.rtg-generator.description=냉각은 필요 없지만 토륨 원자로보다 적은량의 전력을 생산하는 방사선 동위원소 열전자 발전기. -block.unloader.description=해당 창고 및 코어에서 자원을 빼내는데 사용됩니다. -block.container.description=아이템을 임시로 저장할 수 있는 소형 창고입니다. -block.vault.description=아이템을 임시로 저장할 수 있는 대형 창고입니다. -block.mechanical-drill.description=구리로 제작할 수 있는 기본 드릴입니다. -block.pneumatic-drill.description=돌, 티타늄을 채광할 수 있는 고급 드릴입니다. -block.laser-drill.description=토륨을 채광할 수 있는 최고급 드릴입니다.\n전력과 물을 공급하여 빠른 속도로 채광할 수 있습니다. -block.blast-drill.description=최상위 드릴입니다. 엄청난 양의 전력과 물을 소모하는 대신, 매우 빠른 속도로 채광합니다. -block.water-extractor.description=바닥에서 물을 추출하여 건물에 공급할 수 있는 건물입니다. -block.cultivator.description=잔디에서 바이오메터를 추출할 수 있는 건물입니다. -block.oil-extractor.description=석유를 추출 해 주는 건물입니다. -block.dart-ship-pad.description=다트 비행선으로 바꿀 수 있는 패드입니다. -block.trident-ship-pad.description=삼지창 비행선으로 바꿀 수 있는 패드입니다. -block.javelin-ship-pad.description=자비린 비행선으로 바꿀 수 있는 패드입니다. -block.glaive-ship-pad.description=글레브 비행선으로 바꿀 수 있는 패드입니다. -block.tau-mech-pad.description=타우 기체로 바꿀 수 있는 패드 -block.delta-mech-pad.description=델타 기체로 바꿀 수 있는 패드입니다. -block.omega-mech-pad.description=오메가 기체로 바꿀 수 있는 패드 -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=생산된 유닛들을 제어할 수 있는 건물.\n첫번째 버튼은 적 기지로 공격하며, 두번째는 대기 상태, 세번째는 기지 근처를 돌며 정찰합니다. -block.conduit.description=일반 파이프. 액체가 지나갈 수 있도록 해 줍니다. -block.pulse-conduit.description=티타늄으로 만들어 졌으며, 일반 파이프보다 액체 수용량이 높습니다. -block.phase-conduit.description=물을 먼거리로 순간이동 시켜 주는 장치입니다. -block.liquid-router.description=물펌프를 다른 방향으로 분배할 수 있게 하는 블럭입니다. -block.liquid-tank.description=액체 종류를 저장할 수 있는 물탱크 입니다. -block.liquid-junction.description=물펌프와 다른 물펌프를 서로 교차시키게 할 수 있는 블럭입니다. -block.bridge-conduit.description=다리와 다리 사이를 연결하여 액체가 지나갈 수 있게 해 줍니다.\n주로 다리 사이에 지나갈 수 없는 장애물이 있을 때 사용합니다. -block.mechanical-pump.description=구리로 제작할 수 있는 기계식 물펌프입니다. -block.rotary-pump.description=일반 물 펌프보다 더 빠른 속도로 물을 끌어올릴 수 있는 펌프입니다. -block.thermal-pump.description=기계식 펌프보다 3배 빠른 속도로 액체를 퍼올릴 수 있는 펌프이며, 용암도 퍼올릴 수 있는 유일한 펌프입니다. -block.router.description=한 방향에서 아이템을 받은 후 최대 3개의 다른 방향으로 동일하게 출력합니다.\n재료를 한곳에서 여러 대상으로 분할하여 운반하는데 유용합니다. -block.distributor.description=아이템을 최대 7개의 다른 방향으로 똑같이 분할하는 고급 분배기. -block.bridge-conveyor.description=고급 자원 수송 블록.\n지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다. -block.alpha-mech-pad.description=알파 기체로 바꿀 수 있는 패드입니다. -block.itemsource.description=자원을 선택하면 그 자원이 무한하게 생성되는 블록입니다. -block.liquidsource.description=무한한 액체를 출력해냅니다. -block.itemvoid.description=아이템을 사라지게 만듭니다. -block.powerinfinite.description=무한한 전력을 공급해주는 블록입니다. -block.powervoid.description=설정된 아이템을 계속해서 출력하는 블록입니다. -liquid.water.description=지상 유닛이 이 위를 지나가면 이동속도가 느려지고, 깊은 물에 빠지면 죽습니다. -liquid.lava.description=지상 유닛이 이 위를 지나가면 이동속도가 매우 느려지고, 지속적으로 데미지를 입습니다. -liquid.oil.description=일부 조합 블록에서 사용되는 자원입니다. -liquid.cryofluid.description=포탑 및 토륨 원자로에서 사용되는 자원입니다. +text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) +text.credits = 제작자 +text.discord = Mindustry Discord 에 참여하세요! +text.link.discord.description = 공식 Mindustry Discord 채팅방 +text.link.github.description = 게임 소스코드 +text.link.dev-builds.description = 개발중인 빌드 +text.link.trello.description = 다음 출시될 기능들을 게시한 공식 Trello 보드 +text.link.itch.io.description = PC 버전 다운로드와 HTML5 버전이 있는 itch.io 사이트 +text.link.google-play.description = Google Play 스토어 정보 +text.link.wiki.description = 공식 Mindustry 위키 (영어) +text.linkfail = 링크를 여는데 실패했습니다! URL이 기기의 클립보드에 복사되었습니다. +text.gameover = 코어가 터졌습니다. 게임 오버! +text.gameover.pvp = [accent]{0}[] 팀이 승리했습니다! +text.sector.gameover = 이 지역을 공략하는데 실패했습니다. 포기 하시겠습니까? +text.sector.retry = 아니오 +text.highscore = [YELLOW]최고점수 달성! +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.construction.desktop = PC 에서의 조작 방법이 변경되었습니다.\n블록 선택을 해제하거나 건설을 중지하려면 [accent]스페이스 바[]를 누르세요. +text.construction.title = 블록 배치 안내서 +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 = 다음 세션에서 이 메세지를 표시하지 않습니다 +text.coreattack = < 코어가 공격받고 있습니다! > +text.unlocks = 아이템들 +text.savegame = 게임 저장 +text.loadgame = 게임 불러오기 +text.joingame = 멀티플레이 +text.addplayers = 플레이어 추가/제거 +text.customgame = 커스텀 게임 +text.sectors = 지역 플레이 +text.sector = 지역 : [LIGHT_GRAY]{0} +text.sector.time = 시간 : [LIGHT_GRAY]{0} +text.sector.deploy = 시작 +text.sector.abandon = 초기화 +text.sector.abandon.confirm = 정말로 이 지역의 모든 진행상황을 초기화 하겠습니까?\n이 작업은 되돌릴 수 없습니다! +text.sector.resume = 계속하기 +text.sector.locked = [scarlet][[완료안됨] +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.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.resource.menu = {0} {1}개 수집 +text.mission.resource = {0} 을(를) 수집하세요\n[accent]{1}/{2} +text.mission.block = {0} 를 만드세요 +text.mission.unit = {0} 유닛을 만드세요 +text.mission.command = 유닛에게 {0} 명령을 보내세요 +text.mission.linknode = 전력 노드를 연결하세요 +text.mission.display = [accent]목표 : [LIGHT_GRAY]{0} +text.mission.mech = [accent]{0}[] 기체로 바꾸세요 +text.mission.create = [accent]{0}[] 을(를)설치하세요. +text.none = <없음> +text.close = 닫기 +text.quit = 나가기 +text.maps = 맵 +text.continue = 계속하기 +text.nextmission = 다음 임무 +text.maps.none = [LIGHT_GRAY]맵을 찾을 수 없습니다! +text.about.button = 정보 +text.name = 이름 : +text.filename = 파일 이름 : +text.unlocked = 새 블록 잠금 해제됨 +text.unlocked.plural = 잠금 해제 +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.clientOutdated = 오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요! +text.server.kicked.serverOutdated = 오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요! +text.server.kicked.banned = 뭘 하셨는지는 모르겠지만, 이제 영원히 서버에 접속할 수 없습니다. +text.server.kicked.recentKick = 방금 추방처리 되었습니다. 잠시 기다린 후에 접속 해 주세요. +text.server.kicked.nameInUse = 이 닉네임이 이미 서버에서 사용중입니다. +text.server.kicked.nameEmpty = 닉네임에는 반드시 영어 또는 숫자가 있어야 합니다. +text.server.kicked.idInUse = 이미 서버에 접속중입니다! 다중 계정은 허용되지 않습니다. +text.server.kicked.customClient = 이 서버는 직접 빌드한 버전을 지원하지 않습니다. 공식 버전을 사용하세요. +text.host.info = [accent]호스트[] 버튼은 현재 네트워크의 [scarlet]6567[] 포트를 사용합니다.\n[LIGHY_GRAY]같은 Wi-Fi 또는 로컬 네트워크[] 에서 서버 목록을 볼 수 있습니다.\n\n만약 플레이어들이 이 IP를 통해 어디에서나 연결할 수 있게 하고 싶다면, 공유기 설정에서 [accent]포트 포워딩[]을 해야 합니다.\n\n[LIGHT_GRAY]참고 : LAN 게임 연결에 문제가 있는 사람이 있다면, 방화벽 설정에서 Mindustry 가 로컬 네트워크에 액세스하도록 허용했는지 확인 해 주세요. +text.join.info = 여기서 [accent]서버 IP[]를 입력하여 다른 서버에 접속할 수 있습니다.\n또는 [accent]로컬 네트워크(LAN)[] 서버를 검색하여 접속할 수 있습니다.\nLAN 및 WAN 멀티 플레이어 모두 지원됩니다.\n\n[LIGHT_GRAY]참고:여기에서는 자동으로 글로벌 서버를 추가하지 않습니다. IP로 다른 사람의 서버에 접속할려면 서버장에게 IP를 요청해야 합니다. +text.hostserver = 서버 열기 +text.hostserver.mobile = 서버\n열기 +text.host = 서버 열기 +text.hosting = [accent]서버 여는중... +text.hosts.refresh = 새로고침 +text.hosts.discovering = LAN 게임 찾기 +text.server.refreshing = 서버 목록 새로고치는중... +text.hosts.none = [lightgray]LAN 게임을 찾을 수 없습니다! +text.host.invalid = [scarlet]서버에 연결할 수 없습니다! +text.trace = 플레이어 정보 보기 +text.trace.playername = 이름 : [accent]{0} +text.trace.ip = IP : [accent]{0} +text.trace.id = 고유 ID : [accent]{0} +text.trace.android = Android 클라이언트 : [accent]{0} +text.trace.modclient = 수정된 클라이언트 : [accent]{0} +text.trace.totalblocksbroken = 총 블록 파괴 개수 : [accent]{0} +text.trace.structureblocksbroken = 구조 블록 파괴 수 : [accent]{0} +text.trace.lastblockbroken = 마지막으로 파괴한 블록 : [accent]{0} +text.trace.totalblocksplaced = 총 설치한 블록 개수 : [accent]{0} +text.trace.lastblockplaced = 마지막으로 설치한 블록 : [accent]{0} +text.invalidid = 잘못된 클라이언트 ID 입니다! 공식 Mindustry Discord 으로 버그 보고서를 제출 해 주세요. +text.server.bans = 차단된 유저 +text.server.bans.none = 차단된 플레이어가 없습니다. +text.server.admins = 관리자 +text.server.admins.none = 관리자가 없습니다! +text.server.add = 서버 추가 +text.server.delete = 이 서버를 삭제 하시겠습니까? +text.server.hostname = 호스트 : {0} +text.server.edit = 서버 수정 +text.server.outdated = [crimson]서버 버전이 낮습니다![] +text.server.outdated.client = [Crimson]클라이언트 버전이 낮습니다![] +text.server.version = [lightgray]서버 버전 : {0} +text.server.custombuild = [yellow]커스텀 서버 +text.confirmban = 이 플레이어를 차단하시겠습니까? +text.confirmkick = 정말로 이 플레이어를 추방시키겠습니까? +text.confirmunban = 이 플레이어를 차단해제 하시겠습니까? +text.confirmadmin = 이 플레이어를 관리자로 만들겠습니까? +text.confirmunadmin = 이 플레이어를 일반 유저로 만들겠습니까? +text.joingame.title = 게임 참가 +text.joingame.ip = IP : +text.disconnect = 서버와 연결이 해제되었습니다. +text.disconnect.data = 맵 데이터를 받아오는데 실패했습니다. +text.connecting = [accent]연결중... +text.connecting.data = [accent]맵 데이터 다운로드중... +text.server.port = 포트 : +text.server.addressinuse = 이 주소는 이미 사용중입니다! +text.server.invalidport = 포트 번호가 잘못되었습니다. +text.server.error = [crimson]{0}[accent]서버를 여는데 오류가 발생했습니다.[] +text.save.old = 이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다. +text.save.new = 새로 저장 +text.save.overwrite = 이 저장 슬롯을 덮어씌우겠습니까? +text.overwrite = 덮어쓰기 +text.save.none = 저장 파일을 찾지 못했습니다! +text.saveload = [accent]저장중... +text.savefail = 게임을 저장하지 못했습니다! +text.save.delete.confirm = 이 저장파일을 삭제 하시겠습니까? +text.save.delete = 삭제 +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.rename = 이름 변경 +text.save.rename.text = 새 이름 : +text.selectslot = 저장슬롯을 선택하십시오. +text.slot = [accent]{0}번째 슬롯 +text.save.corrupted = [accent]세이브 파일이 손상되었거나 잘못된 파일입니다! 만약 게임을 업데이트 했다면 이것은 아마 저장 형식 변경일 것이고, 이것은 버그가 [scarlet]아닙니다[]. +text.sector.corrupted = [accent]저장 파일에서 지역을 발견했으나 불러오지 못했습니다.\n새로 생성되었습니다. +text.empty = <비어있음> +text.on = 켜기 +text.off = 끄기 +text.save.autosave = 자동저장 : {0} +text.save.map = 맵 : {0} +text.save.wave = {0}단계[] +text.save.difficulty = 난이도 : {0} +text.save.date = 마지막 저장날짜 : {0} +text.save.playtime = 플레이시간 : {0} +text.confirm = 확인 +text.delete = 삭제 +text.ok = 확인 +text.open = 열기 +text.cancel = 취소 +text.openlink = 링크 열기 +text.copylink = 링크 복사 +text.back = 뒤로가기 +text.quit.confirm = 정말로 종료하시겠습니까? +text.changelog.title = 변경사항 +text.changelog.loading = 변경사항 가져오는중... +text.changelog.error.android = [accent]게임 변경사항은 가끔 Android 4.4 이하에서 작동하지 않습니다. 이것은 내부 Android 버그 때문입니다. +text.changelog.error.ios = [accent]현재 iOS에서는 변경 사항을 지원하지 않습니다. +text.changelog.error = [scarlet]게임 변경사항을 가져오는 중 오류가 발생했습니다![]\n인터넷 연결을 확인하십시오. +text.changelog.current = [accent][[현재 버전] +text.changelog.latest = [accent][[최신 버전] +text.loading = [accent]불러오는중... +text.saving = [accent]저장중... +text.wave = [accent]{0}단계 +text.wave.waiting = 남은 시간 : [green]{0}초[] +text.waiting = [LIGHT_GRAY]대기중... +text.waiting.players = 다른 플레이어를 기다리는 중.. +text.wave.enemies = [LIGHT_GRAY]{0} 마리 남았음 +text.wave.enemy = [LIGHT_GRAY]{0} 마리 남음 +text.loadimage = 사진 불러오기 +text.saveimage = 사진 저장 +text.unknown = 알 수 없음 +text.custom = 커스텀 +text.builtin = 기본맵 +text.map.delete.confirm = 이 맵을 삭제하시겠습니까? 이 명령은 취소할 수 없습니다! +text.map.random = [accent]랜덤 맵 +text.map.nospawn = 이 맵에 플레이어가 스폰 할 코어가 없습니다! 맵 편집기에서 [ROYAL]파란색[]코어를 맵에 추가하세요. +text.map.nospawn.pvp = 이 맵에는 적팀 코어가 없습니다! 에디터에서 [scarlet]빨간팀[] 코어를 추가하세요. +text.map.invalid = 파일이 잘못되었거나 손상되어 맵을 열 수 없습니다. +text.editor.brush = 브러쉬 +text.editor.slope = \\ +text.editor.openin = 편집기 열기 +text.editor.oregen = 광물 무작위 생성 +text.editor.oregen.info = 광물 무작위 생성 : +text.editor.mapinfo = 맵 정보 +text.editor.author = 만든이 : +text.editor.description = 설명 : +text.editor.name = 이름 : +text.editor.teams = 팀 +text.editor.elevation = 지형 높이 +text.editor.errorimageload = [accent]{0}[] 파일을 불러오는데 오류가 발생했습니다. +text.editor.errorimagesave = [accent]{0}[] 파일 저장중 오류가 발생했습니다. +text.editor.generate = 생성 +text.editor.resize = 맵 크기조정 +text.editor.loadmap = 맵 불러오기 +text.editor.savemap = 맵 저장 +text.editor.saved = 저장됨! +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.importfile = 파일 가져오기 +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.unsaved = [scarlet]변경사항을 저장하지 않았습니다![]\n정말로 나가시겠습니까? +text.editor.resizemap = 맵 크기 조정 +text.editor.mapname = 맵 이름 : +text.editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다. +text.editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까? +text.editor.selectmap = 불러올 맵 선택 : +text.width = 넓이 : +text.height = 높이 : +text.menu = 메뉴 +text.play = 플레이 +text.load = 불러오기 +text.save = 저장 +text.fps = {0}FPS +text.tps = {0}TPS +text.ping = ping : {0}ms +text.language.restart = 언어를 변경하려면 게임을 다시시작 해 주세요. +text.settings = 설정 +text.tutorial = 게임 방법 +text.editor = 편집기 +text.mapeditor = 맵 편집기 +text.donate = 기부 +text.connectfail = [crimson]{0}[accent] 서버에 연결하지 못했습니다.[] +text.error.unreachable = 서버에 연결하지 못했습니다. +text.error.invalidaddress = 잘못된 주소입니다. +text.error.timedout = 시간 초과!\n서버에 포트 포워딩이 설정되어 있고 주소가 올바른지 확인하십시오. +text.error.mismatch = 패킷 오류:\n클라이언트/서버 버전이 일치하지 않습니다.\n접속할려는 서버가 최신 버전의 Mindustry 인지 확인하세요! +text.error.alreadyconnected = 이미 접속중입니다. +text.error.mapnotfound = 맵 파일을 찾을 수 없습니다! +text.error.any = 알 수 없는 네트워크 오류. +text.settings.language = 언어 +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.clearsectors = 지역 초기화 +text.settings.clearunlocks = 잠금 해제 초기화 +text.settings.clearall = 모두 초기화 +text.paused = 일시 정지 +text.yes = 예 +text.no = 아니오 +text.info.title = [accent]정보 +text.error.title = [crimson]오류가 발생했습니다. +text.error.crashtitle = 오류가 발생했습니다. +text.blocks.unknown = [LIGHT_GRAY]??? +text.blocks.blockinfo = 블록 정보 +text.blocks.powercapacity = 최대 전력 용량 +text.blocks.powershot = 1발당 전력 소모량 +text.blocks.targetsair = 공중공격 가능 +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.inputitemcapacity = 입력 아이템 용량 +text.blocks.outputitemcapacity = 출력 아이템 용량 +text.blocks.itemcapacity = 저장 용량 +text.blocks.basepowergeneration = 기지 전력 생성기 +text.blocks.powertransferspeed = 전력 전송량 +text.blocks.craftspeed = 생산 속도 +text.blocks.inputliquid = 사용되는 액체 +text.blocks.inputliquidaux = 보조 액체 +text.blocks.inputitem = 사용되는 아이템 +text.blocks.inputitems = 사용되는 아이템들 +text.blocks.outputitem = 출력 아이템 +text.blocks.drilltier = 드릴 +text.blocks.drillspeed = 기본 드릴 속도 +text.blocks.liquidoutput = 액체 출력 +text.blocks.liquidoutputspeed = 액체 출력속도 +text.blocks.liquiduse = 액체 사용량 +text.blocks.coolant = 냉각제 +text.blocks.coolantuse = 냉각수 사용 +text.blocks.inputliquidfuel = 연료 액 +text.blocks.liquidfueluse = 액체 연료 사용 +text.blocks.explosive = 이 블록이 터지면 주변 블록과 같이 자폭을 합니다!! +text.blocks.health = 체력 +text.blocks.inaccuracy = 오차각 +text.blocks.shots = 발포 횟수 +text.blocks.reload = 재장전 +text.blocks.inputfuel = 연료 +text.blocks.fuelburntime = 연료 연소 시간 +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.degrees = 도 +text.unit.seconds = 초 +text.unit.items = 아이템 +text.category.general = 일반 +text.category.power = 전력 +text.category.liquids = 액체 +text.category.items = 아이템 +text.category.crafting = 제작 +text.category.shooting = 사격 +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 = [#00ff00]멀[#2efe2e]티[#58fa58]플[#81f781]레[#a9f5a9]이 [#81f781]전[#58fa58]용[] +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.vsync.name = VSync 활성화 +setting.lasers.name = 전력 노드 레이저 표시 +setting.minimap.name = 미니맵 보기 +setting.musicvol.name = 음악 크기 +setting.mutemusic.name = 음소거 +setting.sfxvol.name = 효과음 크기 +setting.mutesound.name = 소리 끄기 +setting.crashreport.name = 오류 보고서 보내기 +text.keybind.title = 조작키 설정 +category.general.name = 일반 +category.view.name = 보기 +category.multiplayer.name = 멀티플레이 +command.attack = 공격 +command.retreat = 후퇴 +command.patrol = 순찰 +keybind.press = 키를 누르세요... +keybind.press.axis = 축 또는 키를 누르세요... +keybind.move_x.name = 오른쪽/왼쪽 이동 +keybind.move_y.name = 위쪽/아래쪽 이동 +keybind.select.name = 선택 +keybind.break.name = 파괴 +keybind.deselect.name = 선택해제 +keybind.shoot.name = 사격 +keybind.zoom_hold.name = 길게눌러 확대 +keybind.zoom.name = 확대 +keybind.menu.name = 메뉴 +keybind.pause.name = 일시중지 +keybind.dash.name = 달리기 +keybind.chat.name = 채팅 +keybind.player_list.name = 플레이어 목록 +keybind.console.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.zoom_minimap.name = 미니맵 확대 +mode.text.help.title = 도움말 +mode.waves.name = 단계 +mode.waves.description = 이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 단계가 시작됩니다. +mode.sandbox.name = 샌드박스 +mode.sandbox.description = 무한한 자원과 다음단계 시작을 위한 타이머가 없습니다. +mode.freebuild.name = 자유 건축 +mode.freebuild.description = 제한된 자원과 다음단계 시작을 위한 타이머가 없습니다. +mode.pvp.name = PvP +mode.pvp.description = 몹이 아닌 실제 플레이어와 PvP를 합니다. +content.item.name = 아이템 +content.liquid.name = 액체 +content.unit.name = 유닛 +content.recipe.name = 블록 +content.mech.name = 기체 +item.stone.name = 돌 +item.stone.description = 주로 용암을 사용하여 얻을 수 있는 자원입니다. +item.copper.name = 구리 +item.copper.description = 모든 유형의 블록에서 광범위하게 사용되는 자원입니다. +item.lead.name = 납 +item.lead.description = 쉽게 구할 수 있으며, 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. +item.coal.name = 석탄 +item.coal.description = 쉽게 구할 수 있으며, 주로 제련소 등에서 연료로 사용됩니다. +item.dense-alloy.name = 고밀도 합금 +item.dense-alloy.description = 납과 구리로 만든 튼튼한 고밀도 합금.\n고급 수송 블록이나 상위 티어 블록을 건설하는데 사용됩니다. +item.titanium.name = 티타늄 +item.titanium.description = 파이프 재료나 고급 드릴, 비행기/기체 등에서 재료로 사용되는 자원입니다. +item.thorium.name = 토륨 +item.thorium.description = 건물의 재료, 포탑의 탄약 또는 핵연료로 사용되는 방사성 금속입니다. +item.silicon.name = 실리콘 +item.silicon.description = 매우 유용한 반도체로, 태양 전지판과 복잡한 전자 제품에 사용할 수 있습니다. +item.plastanium.name = 플라스터늄 +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 = 이것은 유기농 덤불입니다!\n압축기에 넣어 석유로 바꿀 수 있습니다. +item.sand.name = 모래 +item.sand.description = 고밀도 합금이나 플럭스 등에서 제련시 광범위하게 사용되는 일반적인 재료입니다. +item.blast-compound.name = 폭발물 +item.blast-compound.description = 포탑 및 건설의 재료로 사용되는 휘발성 폭발물.\n연료로도 사용할 수 있지만, 별로 추천하지는 않습니다. +item.pyratite.name = 피라테 +item.pyratite.description = 폭발성을 가진 재료로, 주로 포탑의 탄약으로 사용됩니다. +liquid.water.name = 물 +liquid.lava.name = 용암 +liquid.oil.name = 석유 +liquid.cryofluid.name = 냉각수 +mech.alpha-mech.name = 알파 +mech.alpha-mech.weapon = 중무장 소총 +mech.alpha-mech.ability = 드론 소환 +mech.alpha-mech.description = 표준 기체.\n적절한 속도와 공격력을 갖추고 있으며, 공격 능력을 높이기 위해 최대 3대의 드론을 만들 수 있습니다. +mech.delta-mech.name = 델타 +mech.delta-mech.weapon = 전격 생산기 +mech.delta-mech.ability = 충전 +mech.delta-mech.description = 빠르게 이동하는 적을 처치하기 위한 가벼운 기체.\n구조물에는 거의 피해를 주지 않지만, 전격 무기를 사용하여 많은 적군을 매우 빠르게 죽일 수 있습니다. +mech.tau-mech.name = 타우 +mech.tau-mech.weapon = 건물 수리총 +mech.tau-mech.ability = 유닛 치료 +mech.tau-mech.description = 지원형 기체.\n총을 발사하여 건물을 치료하고 회복 능력 사용으로 화재를 진압하거나, 반경 내 아군을 치유시킵니다. +mech.omega-mech.name = 오메가 +mech.omega-mech.weapon = 전방 유도미사일 +mech.omega-mech.ability = 방어모드 +mech.omega-mech.description = 지상 기체 최종판이자 건물 파괴용으로 적합한 부피가 크고 튼튼한 기체. 방어 모드는 최대 90% 의 피해를 줄일 수 있습니다. +mech.dart-ship.name = 다트 +mech.dart-ship.weapon = 소총 +mech.dart-ship.description = 표준 비행선. 빠르고 가볍지만 공격력이 거의 없고 채광 속도가 느립니다. +mech.javelin-ship.name = 자비린 +mech.javelin-ship.description = 치고 빠지는 공격을 위한 비행선. 처음에는 느리지만, 가속도가 붙어 엄청난 속도로 미사일 피해를 입힐 수 있으며, 전격 능력을 사용할 수 있습니다. +mech.javelin-ship.weapon = 유도 미사일 +mech.javelin-ship.ability = 가속 전격 생성기 +mech.trident-ship.name = 삼지창 +mech.trident-ship.description = 대형 공중 폭격기. 당연하게도 엄청 단단합니다. +mech.trident-ship.weapon = 폭탄 저장고 +mech.glaive-ship.name = 글레브 +mech.glaive-ship.description = 크고 잘 무장된 총을 가진 비행선. 방화용 리피터가 장착되어 있으며, 가속도와 최대속도가 높습니다. +mech.glaive-ship.weapon = 방화총 +text.item.explosiveness = [LIGHT_GRAY]폭발력 : {0} +text.item.flammability = [LIGHT_GRAY]인화성 : {0} +text.item.radioactivity = [LIGHT_GRAY]방사능 : {0} +text.item.fluxiness = [LIGHT_GRAY]플럭스 파워 : {0} +text.unit.health = [LIGHT_GRAY]체력 : {0} +text.unit.speed = [LIGHT_GRAY]속도 : {0} +text.mech.weapon = [LIGHT_GRAY]무기 : {0} +text.mech.armor = [LIGHT_GRAY]방어력 : {0} +text.mech.itemcapacity = [LIGHT_GRAY]아이템 수용 용량 : {0} +text.mech.minespeed = [LIGHT_GRAY]채광 속도 : {0} +text.mech.minepower = [LIGHT_GRAY]채광 레벨 : {0} +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}[LIGHT_GRAY](만드는중) +block.spawn.name = 적 스폰지점 +block.core.name = 코어 +block.metalfloor.name = 철판 +block.deepwater.name = 깊은물 +block.water.name = 물 +block.lava.name = 용암 +block.tar.name = 타르 +block.blackstone.name = 검은돌 +block.stone.name = 돌 +block.dirt.name = 흙 +block.sand.name = 모래 +block.ice.name = 얼음 +block.snow.name = 눈 +block.grass.name = 잔디 +block.shrub.name = 관목 +block.rock.name = 바위 +block.blackrock.name = 검은바위 +block.icerock.name = 얼음바위 +block.copper-wall.name = 구리벽 +block.copper-wall-large.name = 큰 구리벽 +block.dense-alloy-wall.name = 합금 벽 +block.dense-alloy-wall-large.name = 큰 합금 벽 +block.phase-wall.name = 메타벽 +block.phase-wall-large.name = 큰 메타벽 +block.thorium-wall.name = 토륨벽 +block.thorium-wall-large.name = 대형 토륨벽 +block.door.name = 문 +block.door-large.name = 대형문 +block.duo.name = 듀오 +block.scorch.name = 스코치 +block.hail.name = 헤일 +block.lancer.name = 랜서 +block.conveyor.name = 컨베이어 +block.titanium-conveyor.name = 티타늄 컨베이어 +block.junction.name = 교차기 +block.router.name = 분배기 +block.distributor.name = 대형 분배기 +block.sorter.name = 필터 +block.sorter.description = 아이템을 넣어서 필터에 설정된 아이템일 경우 바로 앞으로 통과하며, 그렇지 않을 경우 옆으로 통과합니다. +block.overflow-gate.name = 오버플로 게이트 +block.overflow-gate.description = 정면으로 가는 자원이 막히면 옆으로 출력하고, 그렇지 않으면 계속 정면으로 출력합니다. +block.smelter.name = 제련소 +block.arc-smelter.name = 대형 제련소 +block.silicon-smelter.name = 실리콘 제련소 +block.phase-weaver.name = 메타 합성기 +block.pulverizer.name = 분쇄기 +block.cryofluidmixer.name = 냉각수 제조기 +block.melter.name = 융해기 +block.incinerator.name = 소각로 +block.biomattercompressor.name = 바이오메터 압축기 +block.separator.name = 셉터 +block.centrifuge.name = 원심 분리기 +block.power-node.name = 전력 송신기 +block.power-node-large.name = 대형 전력 송신기 +block.battery.name = 배터리 +block.battery-large.name = 대형 배터리 +block.combustion-generator.name = 석탄 발전기 +block.turbine-generator.name = 터빈 발전기 +block.mechanical-drill.name = 기계식 드릴 +block.pneumatic-drill.name = 강철 드릴 +block.laser-drill.name = 레이저 드릴 +block.water-extractor.name = 물 추출기 +block.cultivator.name = 온실 +block.alpha-mech-pad.name = 알파 기체 패드 +block.dart-ship-pad.name = 다트 비행선 패드 +block.delta-mech-pad.name = 델타 기체 패드 +block.javelin-ship-pad.name = 자비린 비행선 패드 +block.trident-ship-pad.name = 삼지창 비행선 패드 +block.glaive-ship-pad.name = 글레브 비행선 패드 +block.omega-mech-pad.name = 오메가 기체 패드 +block.tau-mech-pad.name = 타우 기체 패드 +block.conduit.name = 파이프 +block.mechanical-pump.name = 기계식 펌프 +block.itemsource.name = 아이템 소스 +block.itemvoid.name = 아이템 삭제 장치 +block.liquidsource.name = 무한 액체공급 장치 +block.powervoid.name = 방전장치 +block.powerinfinite.name = 무한 전력공급 장치 +block.unloader.name = 언로더 +block.vault.name = 창고 +block.wave.name = 파도 +block.swarmer.name = 스웜 +block.salvo.name = 살보 +block.ripple.name = 립플 +block.phase-conveyor.name = 메타 컨베이어 +block.bridge-conveyor.name = 터널 +block.plastanium-compressor.name = 플라스터늄 압축기 +block.pyratite-mixer.name = 피라테 제조기 +block.blast-mixer.name = 폭발물 제조기 +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.repair-point.name = 정비소 +block.pulse-conduit.name = 퓨즈 파이프 +block.phase-conduit.name = 메타 파이프 +block.liquid-router.name = 액체 분배기 +block.liquid-tank.name = 물탱크 +block.liquid-junction.name = 액체 교차기 +block.bridge-conduit.name = 다리 파이프 +block.rotary-pump.name = 동력 펌프 +block.thorium-reactor.name = 토륨 원자로 +block.command-center.name = 명령 본부 +block.mass-driver.name = 물질 이동기 +block.blast-drill.name = 고속 발열 드릴 +block.thermal-pump.name = 화력 펌프 +block.thermal-generator.name = 열발전기 +block.alloy-smelter.name = 설금 제련소 +block.mend-projector.name = 수리 프로젝터 +block.surge-wall.name = 설금벽 +block.surge-wall-large.name = 큰 설금벽 +block.cyclone.name = 사이클론 +block.fuse.name = 퓨즈 +block.shock-mine.name = 전격 지뢰 +block.overdrive-projector.name = 오버드라이브 프로젝터 +block.force-projector.name = 보호막 프로젝터 +block.arc.name = Arc +block.rtg-generator.name = 토륨 발전소 +block.spectre.name = 스펙터 +block.meltdown.name = 멜트다운 +block.container.name = 컨테이너 +block.core.description = 게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다. +team.blue.name = 블루팀 +team.red.name = 레드팀 +team.orange.name = 오렌지팀 +team.none.name = 공기팀 +team.green.name = 그린팀 +team.purple.name = 보라색팀 +unit.alpha-drone.name = 알파 드론 +unit.spirit.name = 스피릿 드론 +unit.spirit.description = 기본 드론 유닛. 기본적으로 코어에서 1개가 스폰됩니다. 자동으로 채광하며 아이템을 수집하고, 블록을 수리합니다. +unit.phantom.name = 팬텀 드론 +unit.phantom.description = 첨단 드론 유닛. 광석을 자동으로 채광하며, 아이템을 수집하고 블록을 수리합니다. 일반 드론보다 훨씬 효과적입니다. +unit.dagger.name = 디거 +unit.dagger.description = 기본 지상 유닛입니다. 스웜과 같이 쓰면 유용합니다. +unit.titan.name = 타이탄 +unit.titan.description = 고급 지상 유닛입니다. 고밀도 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다. +unit.ghoul.name = 구울 폭격기 +unit.ghoul.description = 무거운 지상 폭격기 입니다. 폭발물 또는 피라테를 탄약으로 사용합니다. +unit.wraith.name = 유령 전투기 +unit.wraith.description = 코어를 집중적으로 공격하는 방식을 사용하는 전투기 입니다. +unit.fortress.name = 포트리스 +unit.fortress.description = 중포 지상 유닛. 높은 공격력과 체력을 가지고 있습니다. +unit.revenant.name = 레비던트 +unit.revenant.description = 대형 레이저를 발사하는 공중 유닛입니다. +tutorial.begin = 플레이어의 주요 목표는 [LIGHT_GRAY]적군[]을 제거하는 것입니다.\n\n이 게임은 [accent]구리를 채광[]하는 것으로 시작합니다.\n이것을 하기 위해 플레이어의 중심부 근처에 있는 구리 광맥을 누르세요. +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\n2단계 동안 코어를 보호하고 더 많은 터렛을 만드세요. +tutorial.lead = 더 많은 광석을 이용할 수 있습니다. [accent]납[]을 찾아 탐색하세요.\n\n아이템을 코어로 전송할려면 플레이어 기체 또는 비행기에서 코어로 드래그 하세요. +tutorial.smelter = 구리와 납은 약한 금속입니다.\n[accent]고밀도 합금[]은 제련소에서 만들 수 있습니다.\n\n하나 만드세요. +tutorial.densealloy = 이 제련소는 이제 고밀도 합금을 생산할 것입니다.\n몇개 더 생산하세요.\n필요한 경우 더 만드세요. +tutorial.siliconsmelter = 이제 이코어는 채굴과 수리하기 위한[accent] 스피릿 드론[]을 생성 할 것 입니다.\n\n[accent]실리콘[]을 사용해 다른 유닛을 생성하기 위한 공장을 만들 수 있습니다.\n실리콘 제련기를 제작하세요! +tutorial.silicondrill = 실리콘을 제작하려면[accent] 석탄[] 과[accent] 모래[]가 필요합니다.\n드릴을 먼저 건설해보는건 어떤가요? +tutorial.generator = 이 건물은 [LIGHT_YELLOW]전력[]이 필요합니다.\n[accent] 석탄 발전기[]를 건설하세요. +tutorial.generatordrill = [accent] 석탄 발전기[]는 연료가 필요합니다.\n[accent] 석탄[]을 드릴로 채굴해서 연료를 체워주세요. +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 = 구리로 만든 벽. +block.copper-wall-large.description = 구리로 만든 큰 벽. +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-large.description = 설금을 재료로 한 큰 벽.\n데미지를 입으면 번개를 일으켜 대상에게 피해를 입힙니다. +block.door.description = 유닛이 지나갈 수 있도록 만든 문. 클릭하면 열고 닫습니다. +block.door-large.description = 유닛이 자나갈 수 있도록 만든 큰 문. 클릭하면 열고 닫습니다. +block.mend-projector.description = 주위 건물을 치료하는 건물입니다. +block.overdrive-projector.description = 범위 내 모든 행동의 속도를 높여주는 보조형 건물입니다. +block.force-projector.description = 보호막을 생성하는 건물.\n기본적으로 전력만 있으면 작동하지만, 메타를 넣어 보호막의 범위를 크게 확장시킬 수 있습니다. +block.shock-mine.description = 적이 이 블록을 지나가면 전격 공격을 하는 함정형 방어 건물입니다. +block.duo.description = 범용성을 가진 터렛.\n지상 및 공중공격을 하며, 초중반에 유용합니다. +block.arc.description = 목표 방향으로 전격 공격을 하는 포탑입니다. +block.hail.description = 장거리 지상 공격을 하는 터렛입니다.\n적이 오기 전에 쓸어버릴 수 있습니다. +block.lancer.description = 중거리 레이져 포탑입니다.\n적을 관통하기 때문에 뭉쳐있는 적들에게 매우 효과적입니다. +block.wave.description = 적이 있는 자리에 액체를 뿌립니다.\n이 포탑을 활용하여 액체를 뿌린 곳에 불을 붙이거나 적을 느리게 할 수 있습니다. +block.salvo.description = 명중률이 높고, 3발씩 끊어 발사하는 포탑입니다. +block.swarmer.description = 4발씩 끊어서 유도체를 발사하는 포탑입니다 +block.ripple.description = 4개의 탄약으로 나눠 발사하여 명중률이 낮지만, 사거리가 매우 긴 포탑입니다. +block.cyclone.description = 낮은 명중률과 높은 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. +block.fuse.description = 단거리에서 범위형 레이저를 발사하는 포탑입니다. +block.spectre.description = 높은 명중률과 RPM 을 가진 포탑입니다.\n탄약이 남아있는 한 멈추지 않고 계속 연사합니다. +block.meltdown.description = 목표를 따라 초대형 레이져를 발사하는 포탑입니다.\n뭉쳐있는 몹에게 매우 효과가 좋습니다. +block.conveyor.description = 느린 속도로 자원을 수송할 수 있는 컨베이어. +block.titanium-conveyor.description = 빠른 속도로 자원을 수송할 수 있는 컨베이어. +block.phase-conveyor.description = 자원을 순간이동 시켜 주는 컨베이어 입니다. +block.junction.description = 컨베이어를 교차시켜 자원을 수송할 때 사용할 수 있는 블록입니다. +block.mass-driver.description = 자원을 받아서 다른 물질 이동기로 전달할 수 있는 블록입니다.\n엄청난 사거리를 가지고 있으며, 주로 컨베이어가 접근할 수 없는 곳에 유용하게 사용됩니다. +block.smelter.description = 고밀도 합금을 제작할 수 있는 건물입니다. +block.arc-smelter.description = 고밀도 합금을 제작할 수 있는 건물이지만, 이 건물은 석탄이 필요 없고 좀더 빠른 속도로 합금을 생산해낼 수 있습니다. +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.solidifer.description = 용암을 돌로 만들 수 있는 건물입니다. +block.melter.description = 돌로 용암을 만들 수 있는 건물입니다. +block.incinerator.description = 불필요한 아이템을 소각시켜 줄 수 있는 건물입니다. +block.biomattercompressor.description = 잔디밭에서 바이오메터를 추출할 수 있는 건물입니다. +block.separator.description = 돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물입니다. +block.centrifuge.description = 돌을 분해하여 각종 자원으로 재활용 할 수 있게 해 주는 건물이지만, 이 건물은 좀 더 다양한 자원을 얻을 수 있게 해 줍니다. +block.power-node.description = 생성된 전력를 다른 건물로 전달하기 위한 전력 노드입니다. +block.power-node-large.description = 생성된 전력를 다른 건물로 전달하기 위한 건물이며, 일반 노드보다 더 많은 전력을 이동시킬 수 있습니다. +block.battery.description = 흔히 아는 충전식 배터리입니다.\n전력을 사용하는 건물에 전력이 떨어질경우, 이 배터리를 전력 노드에 연결하면 이 배터리에 저장된 전력을 소모하여 지속적으로 공급할 수 있습니다. +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 = 토륨을 원료로 하는 토륨 원자로 입니다.\n많은 전력을 생산하지만 엄청난 열을 발생시키기 때문에, 많은 량의 물 또는 냉각수가 있어야 터지지 않고 작동합니다. +block.rtg-generator.description = 냉각은 필요 없지만 토륨 원자로보다 적은량의 전력을 생산하는 방사선 동위원소 열전자 발전기. +block.unloader.description = 해당 창고 및 코어에서 자원을 빼내는데 사용됩니다. +block.container.description = 아이템을 임시로 저장할 수 있는 소형 창고입니다. +block.vault.description = 아이템을 임시로 저장할 수 있는 대형 창고입니다. +block.mechanical-drill.description = 구리로 제작할 수 있는 기본 드릴입니다. +block.pneumatic-drill.description = 돌, 티타늄을 채광할 수 있는 고급 드릴입니다. +block.laser-drill.description = 토륨을 채광할 수 있는 최고급 드릴입니다.\n전력과 물을 공급하여 빠른 속도로 채광할 수 있습니다. +block.blast-drill.description = 최상위 드릴입니다. 엄청난 양의 전력과 물을 소모하는 대신, 매우 빠른 속도로 채광합니다. +block.water-extractor.description = 바닥에서 물을 추출하여 건물에 공급할 수 있는 건물입니다. +block.cultivator.description = 잔디에서 바이오메터를 추출할 수 있는 건물입니다. +block.oil-extractor.description = 석유를 추출 해 주는 건물입니다. +block.dart-ship-pad.description = 다트 비행선으로 바꿀 수 있는 패드입니다. +block.trident-ship-pad.description = 삼지창 비행선으로 바꿀 수 있는 패드입니다. +block.javelin-ship-pad.description = 자비린 비행선으로 바꿀 수 있는 패드입니다. +block.glaive-ship-pad.description = 글레브 비행선으로 바꿀 수 있는 패드입니다. +block.tau-mech-pad.description = 타우 기체로 바꿀 수 있는 패드 +block.delta-mech-pad.description = 델타 기체로 바꿀 수 있는 패드입니다. +block.omega-mech-pad.description = 오메가 기체로 바꿀 수 있는 패드 +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 = 생산된 유닛들을 제어할 수 있는 건물.\n첫번째 버튼은 적 기지로 공격하며, 두번째는 대기 상태, 세번째는 기지 근처를 돌며 정찰합니다. +block.conduit.description = 일반 파이프. 액체가 지나갈 수 있도록 해 줍니다. +block.pulse-conduit.description = 티타늄으로 만들어 졌으며, 일반 파이프보다 액체 수용량이 높습니다. +block.phase-conduit.description = 물을 먼거리로 순간이동 시켜 주는 장치입니다. +block.liquid-router.description = 물펌프를 다른 방향으로 분배할 수 있게 하는 블럭입니다. +block.liquid-tank.description = 액체 종류를 저장할 수 있는 물탱크 입니다. +block.liquid-junction.description = 물펌프와 다른 물펌프를 서로 교차시키게 할 수 있는 블럭입니다. +block.bridge-conduit.description = 다리와 다리 사이를 연결하여 액체가 지나갈 수 있게 해 줍니다.\n주로 다리 사이에 지나갈 수 없는 장애물이 있을 때 사용합니다. +block.mechanical-pump.description = 구리로 제작할 수 있는 기계식 물펌프입니다. +block.rotary-pump.description = 일반 물 펌프보다 더 빠른 속도로 물을 끌어올릴 수 있는 펌프입니다. +block.thermal-pump.description = 기계식 펌프보다 3배 빠른 속도로 액체를 퍼올릴 수 있는 펌프이며, 용암도 퍼올릴 수 있는 유일한 펌프입니다. +block.router.description = 한 방향에서 아이템을 받은 후 최대 3개의 다른 방향으로 동일하게 출력합니다.\n재료를 한곳에서 여러 대상으로 분할하여 운반하는데 유용합니다. +block.distributor.description = 아이템을 최대 7개의 다른 방향으로 똑같이 분할하는 고급 분배기. +block.bridge-conveyor.description = 고급 자원 수송 블록.\n지형이나 건물을 넘어 최대 3개 타일을 건너뛰고 자원을 운송할 수 있습니다. +block.alpha-mech-pad.description = 알파 기체로 바꿀 수 있는 패드입니다. +block.itemsource.description = 자원을 선택하면 그 자원이 무한하게 생성되는 블록입니다. +block.liquidsource.description = 무한한 액체를 출력해냅니다. +block.itemvoid.description = 아이템을 사라지게 만듭니다. +block.powerinfinite.description = 무한한 전력을 공급해주는 블록입니다. +block.powervoid.description = 설정된 아이템을 계속해서 출력하는 블록입니다. +liquid.water.description = 지상 유닛이 이 위를 지나가면 이동속도가 느려지고, 깊은 물에 빠지면 죽습니다. +liquid.lava.description = 지상 유닛이 이 위를 지나가면 이동속도가 매우 느려지고, 지속적으로 데미지를 입습니다. +liquid.oil.description = 일부 조합 블록에서 사용되는 자원입니다. +liquid.cryofluid.description = 포탑 및 토륨 원자로에서 사용되는 자원입니다. diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index fe40ac1fe6..066ed3dda9 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -286,6 +286,7 @@ text.no = Nie ma mowy! text.info.title = [accent]Informacje text.error.title = [crimson]Wystąpił błąd text.error.crashtitle = Wystąpił błąd +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Informacje o bloku text.blocks.powercapacity = Pojemność mocy text.blocks.powershot = moc / strzał @@ -359,7 +360,6 @@ setting.sensitivity.name = Czułość kontrolera setting.saveinterval.name = Interwał automatycznego zapisywania setting.seconds = Sekundy setting.fullscreen.name = Pełny ekran -setting.multithread.name = Wielowątkowość setting.fps.name = Widoczny licznik FPS setting.vsync.name = Synchronizacja pionowa setting.lasers.name = Pokaż lasery zasilające @@ -404,8 +404,6 @@ mode.waves.name = Fale mode.waves.description = Normalny tryb. Normalne surowce i fale. mode.sandbox.name = sandbox mode.sandbox.description = Nieskończone surowce i fale bez odliczania. Dla przedszkolaków! -mode.custom.warning = Note that blocks cannot be used in custom games until they are unlocked in sectors.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. -mode.custom.warning.read = Just to make sure you've read it:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.freebuild.name = budowanie mode.freebuild.description = Normalne surowce i fale bez odliczania. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 0550933b49..faeec32d48 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -286,6 +286,7 @@ text.no = Não text.info.title = [accent]Informação text.error.title = [crimson]Ocorreu um Erro. text.error.crashtitle = Ocorreu um Erro +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Informação do Bloco text.blocks.powercapacity = Capacidade de Energia text.blocks.powershot = Energia/tiro @@ -359,7 +360,6 @@ setting.sensitivity.name = Sensibilidade do Controle setting.saveinterval.name = Intervalo de autosalvamento setting.seconds = {0} Segundos setting.fullscreen.name = Tela Cheia -setting.multithread.name = Multithreading setting.fps.name = Mostrar FPS setting.vsync.name = VSync setting.lasers.name = Mostrar lasers @@ -404,8 +404,6 @@ mode.waves.name = hordas mode.waves.description = O modo normal. Recursos limitados E os ataques vem automaticamente. mode.sandbox.name = sandbox mode.sandbox.description = Recursos infinitos E sem tempo para Ataques. -mode.custom.warning = Note that blocks cannot be used in custom games until they are unlocked in sectors.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. -mode.custom.warning.read = Just to make sure you've read it:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.freebuild.name = construção \nlivre mode.freebuild.description = recursos limitados e Sem tempo para Ataques. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 478dc8dbbf..55866c439f 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -286,6 +286,7 @@ text.no = Нет text.info.title = Информация text.error.title = [crimson]Произошла ошибка text.error.crashtitle = Произошла ошибка +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Информация о блоке text.blocks.powercapacity = Вместимость энергии text.blocks.powershot = Энергия/выстрел @@ -359,7 +360,6 @@ setting.sensitivity.name = Чувствительность контроллер setting.saveinterval.name = Интервал автосохранения setting.seconds = {0} Секунд setting.fullscreen.name = Полноэкранный режим -setting.multithread.name = Многопоточность (TPS) setting.fps.name = Показывать FPS setting.vsync.name = Верт. синхронизация setting.lasers.name = Показывать энергетические лазеры @@ -404,8 +404,6 @@ mode.waves.name = Волны mode.waves.description = В режиме "волны" ограниченные ресурсы и автоматические наступающие волны. mode.sandbox.name = Песочница mode.sandbox.description = Бесконечные ресурсы и нет таймера для волн, но можно самим вызвать волну. -mode.custom.warning = [scarlet]РАЗБЛОКИРОВАННОЕ В ПОЛЬЗОВАТЕЛЬСКИХ ИГРАХ ИЛИ НА СЕРВЕРАХ НЕ СОХРАНЯЕТСЯ[]\n\nИграйте в секторах для разблокировки чего-либо -mode.custom.warning.read = Внимательно прочитайте это!:\n[scarlet]РАЗБЛОКИРОВАННОЕ В ПОЛЬЗОВАТЕЛЬСКИХ ИГРАХ ИЛИ ДРУГИХ РЕЖИМАХ ИГРЫ НЕ РАСПРОСТРАНЯЕТСЯ НА СЕКТОРА ИЛИ ДРУГИЕ РЕЖИМЫ ИГРЫ!\n\n[LIGHT_GRAY](Я бы хотел, чтобы это не было необходимо, но, по-видимому, это так) mode.freebuild.name = Свободная\nстройка mode.freebuild.description = ограниченные ресурсы и нет таймера для волн. mode.pvp.name = Противо-\nстояние diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index a93ca6ec6e..ec75564ec0 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -286,6 +286,7 @@ text.no = Hayir text.info.title = [accent]Bilgi text.error.title = [crimson]Bir hata olustu text.error.crashtitle = Bir hata olustu +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Yapi bilgisi text.blocks.powercapacity = Guc kapasitesi text.blocks.powershot = Guc/Saldiri hizi @@ -359,7 +360,6 @@ setting.sensitivity.name = Kumanda hassasligi setting.saveinterval.name = Otomatik kaydetme suresi setting.seconds = {0} Saniye setting.fullscreen.name = Tam ekran -setting.multithread.name = Parcaciklar setting.fps.name = FPS'i goster setting.vsync.name = VSync setting.lasers.name = Guc lazerlerini goster @@ -404,8 +404,6 @@ mode.waves.name = Dalgali mode.waves.description = Klasik mod. Dalgalara karsi cekirdegi koru. mode.sandbox.name = Serbest mode.sandbox.description = Sonsuz esyalar ve Dalga suresi yok -mode.custom.warning = Note that blocks cannot be used in custom games until they are unlocked in sectors.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. -mode.custom.warning.read = Just to make sure you've read it:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.freebuild.name = Yapi Yapma mode.freebuild.description = Sinirli esyalar ama dalga suresi yok. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index f48c389c47..ee943e51a8 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -286,6 +286,7 @@ text.no = No text.info.title = [Vurgu] Bilgi text.error.title = [crimson] Bir hata oluştu text.error.crashtitle = Bir hata oluştu +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Blok Bilgisi text.blocks.powercapacity = Güç kapasitesi text.blocks.powershot = Güç / atış @@ -359,7 +360,6 @@ setting.sensitivity.name = Denetleyici hassasiyeti setting.saveinterval.name = Otomatik Kaydetme Aralığı setting.seconds = saniye setting.fullscreen.name = Tam ekran -setting.multithread.name = Çok iş parçacığı setting.fps.name = Saniyede ... Kare göstermek setting.vsync.name = VSync setting.lasers.name = Güç Lazerleri Göster @@ -404,8 +404,6 @@ mode.waves.name = dalgalar mode.waves.description = normal mod. sınırlı kaynaklar ve otomatik gelen dalgalar. mode.sandbox.name = Limitsiz Oynama mode.sandbox.description = sonsuz kaynaklar ve dalgalar için zamanlayıcı yok. -mode.custom.warning = Note that blocks cannot be used in custom games until they are unlocked in sectors.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear. -mode.custom.warning.read = Just to make sure you've read it:\n[scarlet]UNLOCKS IN CUSTOM GAMES DO NOT CARRY OVER TO SECTORS OR OTHER MODES!\n\n[LIGHT_GRAY](I wish this wasn't necessary, but apparently it is) mode.freebuild.name = Özgür Oynama mode.freebuild.description = sınırlı kaynaklar ve dalgalar için zamanlayıcı yok. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 71b077368b..bca4bcfa58 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -286,6 +286,7 @@ text.no = Ні text.info.title = [accent]Інформація text.error.title = [crimson]Виникла помилка text.error.crashtitle = Виникла помилка +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = Інформація про блок text.blocks.powercapacity = Місткість енергії text.blocks.powershot = Енергія/постріл @@ -359,7 +360,6 @@ setting.sensitivity.name = Чутливість контролера setting.saveinterval.name = Інтервал автозбереження setting.seconds = {0} сек. setting.fullscreen.name = Повноекранний режим -setting.multithread.name = Багатопотоковість (TPS) setting.fps.name = Показати FPS setting.vsync.name = Вертикальна синхронізація setting.lasers.name = Показати енергетичні лазери @@ -404,8 +404,6 @@ mode.waves.name = Хвилі mode.waves.description = Нормальний режим. Обмежені ресурси та автоматичні хвилі. mode.sandbox.name = Пісочниця mode.sandbox.description = Нескінченні ресурси і нема таймера для хвиль. -mode.custom.warning = [scarlet]РОЗБЛОКОВАНЕ В КОРИСТУВАЛЬНИЦЬКИХ ІГРАХ АБО НА СЕРВЕРАХ НЕ ЗБЕРІГАЄТЬСЯ.\n\nГрайте у секторах для розблокування. -mode.custom.warning.read = Уважно прочитайте це!:\n[scarlet]РОЗБЛОКОВАНЕ В КОРИСТУВАЛЬНИЦЬКИХ ІГРАХ АБО В ІНШИХ РЕЖИМАХ ГРИ НЕ ПОШИРЮЄТЬСЯ НА СЕКТОРИ ТА ІНШІ РЕЖИМИ ГРИ!\n\n[LIGHT_GRAY](Я б хотів, щоб це не було необхідно, але, мабуть, це так) mode.freebuild.name = Вільний режим mode.freebuild.description = обмежені ресурси і немає таймера для хвиль. mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index a024f004fc..90313f463f 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -286,6 +286,7 @@ text.no = 不 text.info.title = [accent]详情 text.error.title = [crimson]发生了一个错误 text.error.crashtitle = 发生了一个错误 +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = 方块详情 text.blocks.powercapacity = 能量容量 text.blocks.powershot = 能量/发射 @@ -359,7 +360,6 @@ setting.sensitivity.name = 控制器灵敏度 setting.saveinterval.name = 自动保存间隔 setting.seconds = {0} 秒 setting.fullscreen.name = 全屏 -setting.multithread.name = 多线程 setting.fps.name = 显示 FPS setting.vsync.name = 帧同步 setting.lasers.name = 显示能量射线 @@ -404,8 +404,6 @@ mode.waves.name = 普通 mode.waves.description = 普通模式,有限的资源和自动生成敌人。 mode.sandbox.name = 沙盒 mode.sandbox.description = 无限的资源,不会自动生成敌人。 -mode.custom.warning = 请注意,方块在区域内解锁之前,不能用于自定义游戏。\n\n[LIGHT_GRAY]如果您没有解锁任何方块,则不会出现任何方块。 -mode.custom.warning.read = 确保你已经阅读过它:\n[scarlet]自定义游戏的解锁不带至区域或其他模式!\n\n[LIGHT_GRAY](我希望这不是必要的,但显然是必要的) mode.freebuild.name = 自由建造 mode.freebuild.description = 有限的资源,不会自动生成敌人。 mode.pvp.name = PvP diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 16a87728f9..e98bba92a5 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -286,6 +286,7 @@ text.no = 否 text.info.title = [accent]資訊 text.error.title = [crimson]發生錯誤 text.error.crashtitle = 發生錯誤 +text.blocks.unknown = [LIGHT_GRAY]??? text.blocks.blockinfo = 方塊資訊 text.blocks.powercapacity = 蓄電量 text.blocks.powershot = 能源/射擊 @@ -359,7 +360,6 @@ setting.sensitivity.name = 控制器靈敏度 setting.saveinterval.name = 自動存檔間隔 setting.seconds = {0}秒 setting.fullscreen.name = 全螢幕 -setting.multithread.name = 多執行緒 setting.fps.name = 顯示螢幕刷新率 setting.vsync.name = 垂直同步 setting.lasers.name = 顯示雷射光束 @@ -404,8 +404,6 @@ mode.waves.name = 一般 mode.waves.description = 一般模式,有限的資源與自動來襲的波次。 mode.sandbox.name = 沙盒 mode.sandbox.description = 無限的資源,與不倒數計時的波次。 -mode.custom.warning = 請注意,方塊在區域內解鎖之前,不能用於自訂遊戲。\n\n[LIGHT_GRAY]如果您沒有解鎖任何方塊,則不會出現任何方塊。 -mode.custom.warning.read = 確保你已閱讀過它:\n[scarlet]自訂遊戲的解鎖不帶至區域或其他模式!\n\n[LIGHT_GRAY](我希望這不是必要的,但顯然是必要的) mode.freebuild.name = 自由建造 mode.freebuild.description = 有限的資源,與不倒數計時的波次。 mode.pvp.name = 對戰 diff --git a/core/src/io/anuke/mindustry/game/Version.java b/core/src/io/anuke/mindustry/game/Version.java index e0d6ff304e..acc63bcc20 100644 --- a/core/src/io/anuke/mindustry/game/Version.java +++ b/core/src/io/anuke/mindustry/game/Version.java @@ -11,10 +11,10 @@ import java.io.IOException; public class Version{ /**Build type. 'official' for official releases; 'custom' or 'bleeding edge' are also used.*/ public static String type; - /**Number specifying the major version, e.g. '4.0'*/ - public static String number; /**Build modifier, e.g. 'alpha' or 'release'*/ public static String modifier; + /**Number specifying the major version, e.g. '4'*/ + public static int number; /**Build number, e.g. '43'. set to '-1' for custom builds.*/ public static int build = 0; @@ -26,7 +26,7 @@ public class Version{ PropertiesUtils.load(map, file.reader()); type = map.get("type"); - number = map.get("number"); + number = Integer.parseInt(map.get("number")); modifier = map.get("modifier"); build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1; }catch(IOException e){ diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index 037d343a62..1d3ef834e7 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.net; import com.badlogic.gdx.utils.Base64Coder; import io.anuke.mindustry.game.Version; -import io.anuke.ucore.io.IOUtils; +import io.anuke.mindustry.io.TypeIO; import io.anuke.ucore.util.Bundles; import java.nio.ByteBuffer; @@ -65,6 +65,7 @@ public class Packets{ public static class ConnectPacket implements Packet{ public int version; + public String versionType; public String name, uuid, usid; public boolean mobile; public int color; @@ -72,8 +73,9 @@ public class Packets{ @Override public void write(ByteBuffer buffer){ buffer.putInt(Version.build); - IOUtils.writeString(buffer, name); - IOUtils.writeString(buffer, usid); + TypeIO.writeString(buffer, versionType); + TypeIO.writeString(buffer, name); + TypeIO.writeString(buffer, usid); buffer.put(mobile ? (byte) 1 : 0); buffer.putInt(color); buffer.put(Base64Coder.decode(uuid)); @@ -82,8 +84,9 @@ public class Packets{ @Override public void read(ByteBuffer buffer){ version = buffer.getInt(); - name = IOUtils.readString(buffer); - usid = IOUtils.readString(buffer); + versionType = TypeIO.readString(buffer); + name = TypeIO.readString(buffer); + usid = TypeIO.readString(buffer); mobile = buffer.get() == 1; color = buffer.getInt(); byte[] idbytes = new byte[8]; diff --git a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java index b26b728ae0..b50ff4d6db 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java @@ -11,6 +11,7 @@ import io.anuke.mindustry.ui.dialogs.FloatingDialog; import io.anuke.ucore.core.Events; import io.anuke.ucore.scene.Group; import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.util.Strings; import static io.anuke.mindustry.Vars.*; @@ -42,7 +43,7 @@ public class MenuFragment extends Fragment{ } //version info - parent.fill(c -> c.bottom().left().add("Mindustry " + 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}", Version.number, Version.modifier, Version.type, (Version.build == -1 ? "custom build" : "build " + Version.build))) .visible(() -> state.is(State.menu))); } @@ -55,14 +56,14 @@ public class MenuFragment extends Fragment{ container.defaults().size(size).pad(5).padTop(4f); MobileButton - play = new MobileButton("icon-play-2", isize, "$text.play", this::showPlaySelect), - maps = new MobileButton("icon-map", isize, "$text.maps", ui.maps::show), - load = new MobileButton("icon-load", isize, "$text.load", ui.load::show), - join = new MobileButton("icon-add", isize, "$text.joingame", ui.join::show), - editor = new MobileButton("icon-editor", isize, "$text.editor", () -> ui.loadGraphics(ui.editor::show)), - tools = new MobileButton("icon-tools", isize, "$text.settings", ui.settings::show), - unlocks = new MobileButton("icon-unlocks", isize, "$text.unlocks", ui.unlocks::show), - donate = new MobileButton("icon-donate", isize, "$text.donate", Platform.instance::openDonations); + play = new MobileButton("icon-play-2", isize, "$text.play", this::showPlaySelect), + maps = new MobileButton("icon-map", isize, "$text.maps", ui.maps::show), + load = new MobileButton("icon-load", isize, "$text.load", ui.load::show), + join = new MobileButton("icon-add", isize, "$text.joingame", ui.join::show), + editor = new MobileButton("icon-editor", isize, "$text.editor", () -> ui.loadGraphics(ui.editor::show)), + tools = new MobileButton("icon-tools", isize, "$text.settings", ui.settings::show), + unlocks = new MobileButton("icon-unlocks", isize, "$text.unlocks", ui.unlocks::show), + donate = new MobileButton("icon-donate", isize, "$text.donate", Platform.instance::openDonations); if(Gdx.graphics.getWidth() > Gdx.graphics.getHeight()){ container.add(play); diff --git a/ios/build.gradle b/ios/build.gradle index b14d976190..d0bfc1752f 100644 --- a/ios/build.gradle +++ b/ios/build.gradle @@ -14,9 +14,4 @@ createIPA.dependsOn build robovm { archs = "thumbv7:arm64" -} - -eclipse.project { - name = appName + "-ios" - natures 'org.robovm.eclipse.RoboVMNature' } \ No newline at end of file diff --git a/ios/robovm.properties b/ios/robovm.properties deleted file mode 100644 index 3bc8a2f6b5..0000000000 --- a/ios/robovm.properties +++ /dev/null @@ -1,7 +0,0 @@ -#Tue Nov 20 20:02:17 EST 2018 -app.version=4.0 -app.id=io.anuke.mindustry -app.mainclass=io.anuke.mindustry.IOSLauncher -app.executable=IOSLauncher -app.build=32 -app.name=Mindustry From 2842018c2f449c15f2fdb87bf24f7ed57e7665c2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Nov 2018 11:01:16 -0500 Subject: [PATCH 24/52] Ignored robovm.properties --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index cfa73a21a5..20247e61be 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ logs/ /core/assets/locales /ios/src/io/anuke/mindustry/gen/ /core/src/io/anuke/mindustry/gen/ +ios/robovm.properties *.gif version.properties From d498ac89f208b20487a95bbe56fcbae3a5b292f4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Nov 2018 21:13:30 -0500 Subject: [PATCH 25/52] Mining bugfix --- core/src/io/anuke/mindustry/entities/Player.java | 10 ++++++---- .../anuke/mindustry/entities/traits/BuilderTrait.java | 6 +++++- .../io/anuke/mindustry/entities/units/types/Drone.java | 5 +++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 376a8591de..a83bfcc18f 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -19,10 +19,7 @@ import io.anuke.mindustry.graphics.Trail; import io.anuke.mindustry.io.TypeIO; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetConnection; -import io.anuke.mindustry.type.ContentType; -import io.anuke.mindustry.type.ItemStack; -import io.anuke.mindustry.type.Mech; -import io.anuke.mindustry.type.Weapon; +import io.anuke.mindustry.type.*; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.Floor; @@ -192,6 +189,11 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra this.mining = tile; } + @Override + public boolean canMine(Item item){ + return item.hardness <= mech.drillPower; + } + @Override public float getArmor(){ return mech.armor + mech.getExtraArmor(this); diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java index af79babcc1..7b25c12348 100644 --- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java @@ -58,6 +58,9 @@ public interface BuilderTrait extends Entity{ /**Build power, can be any float. 1 = builds recipes in normal time, 0 = doesn't build at all.*/ float getBuildPower(Tile tile); + /**Returns whether or not this builder can mine a specific item type.*/ + boolean canMine(Item item); + /**Whether this type of builder can begin creating new blocks.*/ default boolean canCreateBlocks(){ return true; @@ -236,7 +239,8 @@ public interface BuilderTrait extends Entity{ Tile tile = getMineTile(); TileEntity core = unit.getClosestCore(); - if(core == null || tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance || tile.floor().drops == null || !unit.inventory.canAcceptItem(tile.floor().drops.item)){ + if(core == null || tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance + || tile.floor().drops == null || !unit.inventory.canAcceptItem(tile.floor().drops.item) || !canMine(tile.floor().drops.item)){ setMineTile(null); }else{ Item item = tile.floor().drops.item; diff --git a/core/src/io/anuke/mindustry/entities/units/types/Drone.java b/core/src/io/anuke/mindustry/entities/units/types/Drone.java index 35c254ce2a..4b9ebe820d 100644 --- a/core/src/io/anuke/mindustry/entities/units/types/Drone.java +++ b/core/src/io/anuke/mindustry/entities/units/types/Drone.java @@ -279,6 +279,11 @@ public class Drone extends FlyingUnit implements BuilderTrait{ //no } + @Override + public boolean canMine(Item item){ + return type.toMine.contains(item); + } + @Override public float getBuildPower(Tile tile){ return type.buildPower; From 7795a690ed28317a60596ba2c7251cc4ddea57f6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Nov 2018 21:17:45 -0500 Subject: [PATCH 26/52] Fixed fillitems command --- server/src/io/anuke/mindustry/server/ServerControl.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index e4be13ed40..22c1ab47f1 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -350,14 +350,19 @@ public class ServerControl extends Module{ } }); - handler.register("fillitems", "Fill the core with 2000 items.", arg -> { + handler.register("fillitems", "[team]", "Fill the core with 2000 items.", arg -> { if(!state.is(State.playing)){ err("Not playing. Host first."); return; } try{ - Team team = Team.valueOf(arg[0]); + Team team = arg.length == 0 ? Team.blue : Team.valueOf(arg[0]); + + if(state.teams.get(team).cores.isEmpty()){ + err("That team has no cores."); + return; + } for(Item item : content.items()){ if(item.type == ItemType.material){ From 1bc1f666131bd907dda17a4251f714f62258c1d1 Mon Sep 17 00:00:00 2001 From: VizardAlpha <43859764+VizardAlpha@users.noreply.github.com> Date: Thu, 22 Nov 2018 04:02:28 +0100 Subject: [PATCH 27/52] Updates bundle_fr_BE.properties (#351) I had not seen the last line to translate. --- core/assets/bundles/bundle_fr_BE.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index b653051de2..851ace289e 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -368,7 +368,7 @@ setting.musicvol.name = Volume de la musique setting.mutemusic.name = Couper la musique setting.sfxvol.name = Volume des SFX setting.mutesound.name = Couper les SFX -setting.crashreport.name = Send Anonymous Crash Reports +setting.crashreport.name = Envoyer des rapports d'incident anonymement. text.keybind.title = Paramétrer les touches category.general.name = Général category.view.name = Voir From 9266b55ddfb7280134a3f381fcd9cdd066a7f699 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Nov 2018 23:05:33 -0500 Subject: [PATCH 28/52] Fixed charset issues --- core/src/io/anuke/mindustry/io/TypeIO.java | 27 ++++------------------ 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/core/src/io/anuke/mindustry/io/TypeIO.java b/core/src/io/anuke/mindustry/io/TypeIO.java index 6061472054..a8829cb90a 100644 --- a/core/src/io/anuke/mindustry/io/TypeIO.java +++ b/core/src/io/anuke/mindustry/io/TypeIO.java @@ -27,7 +27,6 @@ import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.nio.ByteBuffer; -import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import static io.anuke.mindustry.Vars.*; @@ -332,12 +331,7 @@ public class TypeIO{ @WriteClass(String.class) public static void writeString(ByteBuffer buffer, String string){ if(string != null){ - Charset charset = Charset.defaultCharset(); - byte[] nameBytes = charset.name().getBytes(StandardCharsets.UTF_8); - buffer.put((byte)nameBytes.length); - buffer.put(nameBytes); - - byte[] bytes = string.getBytes(charset); + byte[] bytes = string.getBytes(StandardCharsets.UTF_8); buffer.putShort((short) bytes.length); buffer.put(bytes); }else{ @@ -349,14 +343,10 @@ public class TypeIO{ public static String readString(ByteBuffer buffer){ byte length = buffer.get(); if(length != -1){ - byte[] cbytes = new byte[length]; - buffer.get(cbytes); - Charset charset = Charset.forName(new String(cbytes, StandardCharsets.UTF_8)); - short slength = buffer.getShort(); byte[] bytes = new byte[slength]; buffer.get(bytes); - return new String(bytes, charset); + return new String(bytes, StandardCharsets.UTF_8); }else{ return null; } @@ -378,12 +368,7 @@ public class TypeIO{ public static void writeStringData(DataOutput buffer, String string) throws IOException{ if(string != null){ - Charset charset = Charset.defaultCharset(); - byte[] nameBytes = charset.name().getBytes(StandardCharsets.UTF_8); - buffer.writeByte((byte)nameBytes.length); - buffer.write(nameBytes); - - byte[] bytes = string.getBytes(charset); + byte[] bytes = string.getBytes(StandardCharsets.UTF_8); buffer.writeShort((short) bytes.length); buffer.write(bytes); }else{ @@ -394,14 +379,10 @@ public class TypeIO{ public static String readStringData(DataInput buffer) throws IOException{ byte length = buffer.readByte(); if(length != -1){ - byte[] cbytes = new byte[length]; - buffer.readFully(cbytes); - Charset charset = Charset.forName(new String(cbytes, StandardCharsets.UTF_8)); - short slength = buffer.readShort(); byte[] bytes = new byte[slength]; buffer.readFully(bytes); - return new String(bytes, charset); + return new String(bytes, StandardCharsets.UTF_8); }else{ return null; } From c5241eaaf657ed4bf73ce23a63d91772681bd284 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Nov 2018 23:12:27 -0500 Subject: [PATCH 29/52] Encoding tests --- core/src/io/anuke/mindustry/io/TypeIO.java | 14 ++++----- tests/src/test/java/IOTests.java | 34 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 tests/src/test/java/IOTests.java diff --git a/core/src/io/anuke/mindustry/io/TypeIO.java b/core/src/io/anuke/mindustry/io/TypeIO.java index a8829cb90a..94b3f0825f 100644 --- a/core/src/io/anuke/mindustry/io/TypeIO.java +++ b/core/src/io/anuke/mindustry/io/TypeIO.java @@ -335,15 +335,14 @@ public class TypeIO{ buffer.putShort((short) bytes.length); buffer.put(bytes); }else{ - buffer.put((byte) -1); + buffer.putShort((short) -1); } } @ReadClass(String.class) public static String readString(ByteBuffer buffer){ - byte length = buffer.get(); - if(length != -1){ - short slength = buffer.getShort(); + short slength = buffer.getShort(); + if(slength != -1){ byte[] bytes = new byte[slength]; buffer.get(bytes); return new String(bytes, StandardCharsets.UTF_8); @@ -372,14 +371,13 @@ public class TypeIO{ buffer.writeShort((short) bytes.length); buffer.write(bytes); }else{ - buffer.writeByte((byte) -1); + buffer.writeShort((short) -1); } } public static String readStringData(DataInput buffer) throws IOException{ - byte length = buffer.readByte(); - if(length != -1){ - short slength = buffer.readShort(); + short slength = buffer.readShort(); + if(slength != -1){ byte[] bytes = new byte[slength]; buffer.readFully(bytes); return new String(bytes, StandardCharsets.UTF_8); diff --git a/tests/src/test/java/IOTests.java b/tests/src/test/java/IOTests.java new file mode 100644 index 0000000000..5357bb515e --- /dev/null +++ b/tests/src/test/java/IOTests.java @@ -0,0 +1,34 @@ +import io.anuke.mindustry.io.TypeIO; +import org.junit.jupiter.api.Test; + +import java.nio.ByteBuffer; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class IOTests{ + + @Test + void writeEnglish(){ + ByteBuffer buffer = ByteBuffer.allocate(500); + TypeIO.writeString(buffer, "asd asd asd asd asdagagasasjakbgeah;jwrej 23424234"); + buffer.position(0); + assertEquals(TypeIO.readString(buffer), "asd asd asd asd asdagagasasjakbgeah;jwrej 23424234"); + } + + @Test + void writeChinese(){ + ByteBuffer buffer = ByteBuffer.allocate(500); + TypeIO.writeString(buffer, "这个服务器可以用自己的语言说话"); + buffer.position(0); + assertEquals(TypeIO.readString(buffer), "这个服务器可以用自己的语言说话"); + } + + @Test + void writeNull(){ + ByteBuffer buffer = ByteBuffer.allocate(500); + TypeIO.writeString(buffer, null); + buffer.position(0); + assertEquals(TypeIO.readString(buffer), null); + } + +} From 5447c71790f1ed6c827ec35eef6fde8cdbeebf57 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 22 Nov 2018 08:39:05 -0500 Subject: [PATCH 30/52] Removed junction item voiding --- .../mindustry/graphics/BlockRenderer.java | 2 +- .../world/blocks/distribution/Junction.java | 73 ++++--------------- 2 files changed, 14 insertions(+), 61 deletions(-) diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java index 2b34127e2a..5b679ccdf4 100644 --- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java @@ -21,7 +21,7 @@ import static io.anuke.ucore.core.Core.camera; public class BlockRenderer{ private final static int initialRequests = 32 * 32; - private final static int expandr = 4; + private final static int expandr = 6; private FloorRenderer floorRenderer; diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java index 9027fb632c..88359454cc 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Junction.java @@ -1,6 +1,5 @@ package io.anuke.mindustry.world.blocks.distribution; -import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.NumberUtils; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.type.Item; @@ -8,10 +7,9 @@ import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.meta.BlockGroup; import io.anuke.ucore.core.Timers; -import io.anuke.ucore.function.Consumer; import io.anuke.ucore.util.Bits; -import static io.anuke.mindustry.Vars.*; +import static io.anuke.mindustry.Vars.content; public class Junction extends Block{ protected float speed = 26; //frames taken to go through this junction @@ -34,8 +32,8 @@ public class Junction extends Block{ public void update(Tile tile){ JunctionEntity entity = tile.entity(); - for(int i = 0; i < 2; i++){ - Buffer buffer = (i == 0 ? entity.bx : entity.by); + for(int i = 0; i < 4; i++){ + Buffer buffer = entity.buffers[i]; if(buffer.index > 0){ if(buffer.index > buffer.items.length) buffer.index = buffer.items.length; @@ -44,17 +42,11 @@ public class Junction extends Block{ if(Timers.time() >= time + speed || Timers.time() < time){ - int val = Bits.getRightInt(l); - - Item item = content.item(Bits.getLeftShort(val)); - int direction = Bits.getRightShort(val); - Tile dest = tile.getNearby(direction); + Item item = content.item(Bits.getRightInt(l)); + Tile dest = tile.getNearby(i); + //skip blocks that don't want the item, keep waiting until they do if(dest == null || !dest.block().acceptItem(item, dest, tile)){ - if(buffer.index > 1 && Bits.getRightShort(Bits.getRightInt(buffer.items[1])) != direction){ - System.arraycopy(buffer.items, 1, buffer.items, 0, buffer.index - 1); - buffer.index--; - } continue; } @@ -69,25 +61,19 @@ public class Junction extends Block{ @Override public void handleItem(Item item, Tile tile, Tile source){ JunctionEntity entity = tile.entity(); - boolean x = tile.x == source.x; - long value = Bits.packLong(NumberUtils.floatToIntBits(Timers.time()), Bits.packInt((short) item.id, source.relativeTo(tile.x, tile.y))); - if(x){ - entity.bx.add(value); - }else{ - entity.by.add(value); - } + long value = Bits.packLong(NumberUtils.floatToIntBits(Timers.time()), item.id); + int relative = source.relativeTo(tile.x, tile.y); + entity.buffers[relative].add(value); } @Override public boolean acceptItem(Item item, Tile tile, Tile source){ JunctionEntity entity = tile.entity(); - boolean x = tile.x == source.x; + int relative = source.relativeTo(tile.x, tile.y); - if(entity == null || entity.bx == null || entity.by == null || (x && entity.bx.full()) || (!x && entity.by.full())) + if(entity == null || relative == -1 || entity.buffers[relative].full()) return false; - int dir = source.relativeTo(tile.x, tile.y); - if(dir == -1) return false; - Tile to = tile.getNearby(dir); + Tile to = tile.getNearby(relative); return to != null && to.block().acceptItem(item, to, tile); } @@ -96,41 +82,8 @@ public class Junction extends Block{ return new JunctionEntity(); } - @Override - public Array getDebugInfo(Tile tile){ - JunctionEntity entity = tile.entity(); - Array arr = super.getDebugInfo(tile); - for(int i = 0; i < 4; i++){ - arr.add("nearby." + i); - arr.add(tile.getNearby(i)); - } - - Consumer write = b -> { - for(int i = 0; i < b.index; i++){ - long l = b.items[i]; - float time = NumberUtils.intBitsToFloat(Bits.getLeftInt(l)); - int val = Bits.getRightInt(l); - Item item = content.item(Bits.getLeftShort(val)); - int direction = Bits.getRightShort(val); - Tile dest = tile.getNearby(direction); - arr.add(" bufferx.item"); - arr.add(time + " | " + item.name + " | " + dest.block() + ":" + dest.floor()); - } - }; - - arr.add("buffer.bx"); - arr.add(entity.bx.index); - write.accept(entity.bx); - arr.add("buffer.by"); - arr.add(entity.bx.index); - write.accept(entity.by); - - return arr; - } - class JunctionEntity extends TileEntity{ - Buffer bx = new Buffer(); - Buffer by = new Buffer(); + Buffer[] buffers = {new Buffer(), new Buffer(), new Buffer(), new Buffer()}; } class Buffer{ From f5959c88298686dff56601762e110109f6dd2a36 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 22 Nov 2018 19:09:51 -0500 Subject: [PATCH 31/52] Optional display section --- core/assets/bundles/bundle.properties | 4 ++- .../anuke/mindustry/world/blocks/Floor.java | 2 +- .../blocks/power/ItemLiquidGenerator.java | 2 -- .../world/blocks/power/TurbineGenerator.java | 1 - .../mindustry/world/consumers/Consume.java | 4 +-- .../world/consumers/ConsumeItem.java | 2 +- .../world/consumers/ConsumeItemFilter.java | 2 +- .../world/consumers/ConsumeItems.java | 2 +- .../world/consumers/ConsumeLiquid.java | 8 +++-- .../world/consumers/ConsumeLiquidFilter.java | 6 ++-- .../anuke/mindustry/world/meta/BlockStat.java | 4 ++- .../mindustry/world/meta/BlockStats.java | 34 +++++-------------- .../mindustry/world/meta/StatCategory.java | 7 ++-- 13 files changed, 34 insertions(+), 44 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index b1604578b9..d89b093948 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -321,7 +321,8 @@ text.blocks.coolant = Coolant text.blocks.coolantuse = Coolant Use text.blocks.inputliquidfuel = Fuel Liquid text.blocks.liquidfueluse = Liquid Fuel Use -text.blocks.explosive = Highly explosive\! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Health text.blocks.inaccuracy = Inaccuracy text.blocks.shots = Shots @@ -346,6 +347,7 @@ text.category.liquids = Liquids text.category.items = Items text.category.crafting = Crafting text.category.shooting = Shooting +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Target setting.fpscap.name = Max FPS setting.fpscap.none = None diff --git a/core/src/io/anuke/mindustry/world/blocks/Floor.java b/core/src/io/anuke/mindustry/world/blocks/Floor.java index fd4d581f2d..8c27abc074 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Floor.java +++ b/core/src/io/anuke/mindustry/world/blocks/Floor.java @@ -181,7 +181,7 @@ public class Floor extends Block{ Floor floor = other.floor(); - if((floor.id <= this.id && !(tile.getElevation() != -1 && other.getElevation() > tile.getElevation())) || (!blends.test(floor) && !tileBlends.test(tile, other)) || (floor.cacheLayer.ordinal() > this.cacheLayer.ordinal() && !sameLayer) || + if(floor.edgeRegions == null || (floor.id <= this.id && !(tile.getElevation() != -1 && other.getElevation() > tile.getElevation())) || (!blends.test(floor) && !tileBlends.test(tile, other)) || (floor.cacheLayer.ordinal() > this.cacheLayer.ordinal() && !sameLayer) || (sameLayer && floor.cacheLayer == this.cacheLayer)) continue; TextureRegion region = floor.edgeRegions[i]; diff --git a/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java index fa1a44c5cf..9aac369832 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/ItemLiquidGenerator.java @@ -5,7 +5,6 @@ import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.consumers.ConsumeLiquidFilter; -import io.anuke.mindustry.world.meta.BlockStat; import io.anuke.ucore.core.Effects; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.util.Mathf; @@ -30,7 +29,6 @@ public abstract class ItemLiquidGenerator extends ItemGenerator{ @Override public void init(){ super.init(); - stats.remove(BlockStat.liquidFuelUse); } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/power/TurbineGenerator.java b/core/src/io/anuke/mindustry/world/blocks/power/TurbineGenerator.java index 7416986d6e..05f8daad7d 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/TurbineGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/TurbineGenerator.java @@ -4,7 +4,6 @@ import io.anuke.mindustry.type.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.consumers.ConsumeLiquid; -//TODO public class TurbineGenerator extends BurnerGenerator{ public TurbineGenerator(String name){ diff --git a/core/src/io/anuke/mindustry/world/consumers/Consume.java b/core/src/io/anuke/mindustry/world/consumers/Consume.java index 8408389933..f4ec4cb01f 100644 --- a/core/src/io/anuke/mindustry/world/consumers/Consume.java +++ b/core/src/io/anuke/mindustry/world/consumers/Consume.java @@ -11,8 +11,8 @@ import io.anuke.ucore.scene.ui.layout.Table; import static io.anuke.mindustry.Vars.mobile; public abstract class Consume{ - private boolean optional; - private boolean update = true; + protected boolean optional; + protected boolean update = true; public Consume optional(boolean optional){ this.optional = optional; diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumeItem.java b/core/src/io/anuke/mindustry/world/consumers/ConsumeItem.java index 863cbc8dc7..9476e43eff 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumeItem.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumeItem.java @@ -53,6 +53,6 @@ public class ConsumeItem extends Consume{ @Override public void display(BlockStats stats){ - stats.add(BlockStat.inputItem, item); + stats.add(optional ? BlockStat.boostItem : BlockStat.inputItem, item); } } diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumeItemFilter.java b/core/src/io/anuke/mindustry/world/consumers/ConsumeItemFilter.java index 69e1077db1..c7c24114a4 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumeItemFilter.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumeItemFilter.java @@ -58,6 +58,6 @@ public class ConsumeItemFilter extends Consume{ @Override public void display(BlockStats stats){ - stats.add(BlockStat.inputItems, new ItemFilterValue(filter)); + stats.add(optional ? BlockStat.boostItem : BlockStat.inputItem, new ItemFilterValue(filter)); } } diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumeItems.java b/core/src/io/anuke/mindustry/world/consumers/ConsumeItems.java index f5a2a8e4b0..b46c984c2d 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumeItems.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumeItems.java @@ -44,6 +44,6 @@ public class ConsumeItems extends Consume{ @Override public void display(BlockStats stats){ - stats.add(BlockStat.inputItems, new ItemListValue(items)); + stats.add(optional ? BlockStat.boostItem : BlockStat.inputItems, new ItemListValue(items)); } } diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java index 0934cf73e5..eacbdb2de8 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java @@ -47,8 +47,12 @@ public class ConsumeLiquid extends Consume{ @Override public void display(BlockStats stats){ - stats.add(BlockStat.liquidUse, use * 60f, StatUnit.liquidSecond); - stats.add(BlockStat.inputLiquid, liquid); + if(!optional){ + stats.add(BlockStat.liquidUse, use * 60f, StatUnit.liquidSecond); + stats.add(BlockStat.inputLiquid, liquid); + }else{ + stats.add(BlockStat.boostLiquid, liquid); + } } float use(Block block, TileEntity entity){ diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java index 19a5395522..80be0c49aa 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java @@ -62,10 +62,12 @@ public class ConsumeLiquidFilter extends Consume{ @Override public void display(BlockStats stats){ - if(isFuel){ + if(optional){ + stats.add(BlockStat.boostLiquid, new LiquidFilterValue(filter)); + }else if(isFuel){ stats.add(BlockStat.inputLiquidFuel, new LiquidFilterValue(filter)); stats.add(BlockStat.liquidFuelUse, 60f * use, StatUnit.liquidSecond); - }else{ + }else { stats.add(BlockStat.inputLiquid, new LiquidFilterValue(filter)); stats.add(BlockStat.liquidUse, 60f * use, StatUnit.liquidSecond); } diff --git a/core/src/io/anuke/mindustry/world/meta/BlockStat.java b/core/src/io/anuke/mindustry/world/meta/BlockStat.java index 5bfd481570..834e8f3ce2 100644 --- a/core/src/io/anuke/mindustry/world/meta/BlockStat.java +++ b/core/src/io/anuke/mindustry/world/meta/BlockStat.java @@ -45,8 +45,10 @@ public enum BlockStat{ shots(StatCategory.shooting), reload(StatCategory.shooting), powerShot(StatCategory.shooting), - targetsAir(StatCategory.shooting),; + targetsAir(StatCategory.shooting), + boostItem(StatCategory.optional), + boostLiquid(StatCategory.optional),; public final StatCategory category; diff --git a/core/src/io/anuke/mindustry/world/meta/BlockStats.java b/core/src/io/anuke/mindustry/world/meta/BlockStats.java index 2e6b3507aa..105222cf7a 100644 --- a/core/src/io/anuke/mindustry/world/meta/BlockStats.java +++ b/core/src/io/anuke/mindustry/world/meta/BlockStats.java @@ -12,9 +12,7 @@ import io.anuke.ucore.util.Log; import java.util.Locale; -/** - * Hold and organizes a list of block stats. - */ +/**Hold and organizes a list of block stats.*/ public class BlockStats{ private static final boolean errorWhenMissing = false; @@ -26,52 +24,37 @@ public class BlockStats{ this.block = block; } - /** - * Adds a single float value with this stat, formatted to 2 decimal places. - */ + /**Adds a single float value with this stat, formatted to 2 decimal places.*/ public void add(BlockStat stat, float value, StatUnit unit){ add(stat, new NumberValue(value, unit)); } - /** - * Adds a single y/n boolean value. - */ + /**Adds a single y/n boolean value.*/ public void add(BlockStat stat, boolean value){ add(stat, new BooleanValue(value)); } - /** - * Adds an item value. - */ + /**Adds an item value.*/ public void add(BlockStat stat, Item item){ add(stat, new ItemValue(new ItemStack(item, 1))); } - /** - * Adds a liquid value. - */ + /**Adds a liquid value.*/ public void add(BlockStat stat, Liquid liquid){ add(stat, new LiquidValue(liquid)); } - - /** - * Adds an item value. - */ + /**Adds an item value.*/ public void add(BlockStat stat, ItemStack item){ add(stat, new ItemValue(item)); } - /** - * Adds a single string value with this stat. - */ + /**Adds a single string value with this stat.*/ public void add(BlockStat stat, String format, Object... args){ add(stat, new StringValue(format, args)); } - /** - * Adds a stat value. - */ + /**Adds a stat value.*/ public void add(BlockStat stat, StatValue value){ if(!Bundles.has("text.blocks." + stat.name().toLowerCase(Locale.ROOT))){ if(!errorWhenMissing){ @@ -102,6 +85,7 @@ public class BlockStats{ dirty = true; } + /**Removes a stat, if it exists.*/ public void remove(BlockStat stat){ if(!map.containsKey(stat.category) || !map.get(stat.category).containsKey(stat)){ throw new RuntimeException("No stat entry found: \"" + stat + "\" in block '" + block.name + "'!"); diff --git a/core/src/io/anuke/mindustry/world/meta/StatCategory.java b/core/src/io/anuke/mindustry/world/meta/StatCategory.java index ce1ef5b6f2..0080d5daf5 100644 --- a/core/src/io/anuke/mindustry/world/meta/StatCategory.java +++ b/core/src/io/anuke/mindustry/world/meta/StatCategory.java @@ -1,13 +1,12 @@ package io.anuke.mindustry.world.meta; -/** - * A specific category for a stat. - */ +/**A specific category for a stat.*/ public enum StatCategory{ general, power, liquids, items, crafting, - shooting + shooting, + optional, } From 24c72650fb15b089012150856a239edcb40e53a4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 22 Nov 2018 19:10:31 -0500 Subject: [PATCH 32/52] Bundles update --- core/assets/bundles/bundle_de.properties | 4 +++- core/assets/bundles/bundle_es.properties | 4 +++- core/assets/bundles/bundle_fr.properties | 4 +++- core/assets/bundles/bundle_fr_BE.properties | 4 +++- core/assets/bundles/bundle_in_ID.properties | 4 +++- core/assets/bundles/bundle_it.properties | 4 +++- core/assets/bundles/bundle_ja.properties | 4 +++- core/assets/bundles/bundle_ko.properties | 4 +++- core/assets/bundles/bundle_pl.properties | 4 +++- core/assets/bundles/bundle_pt_BR.properties | 4 +++- core/assets/bundles/bundle_ru.properties | 4 +++- core/assets/bundles/bundle_tk.properties | 4 +++- core/assets/bundles/bundle_tr.properties | 4 +++- core/assets/bundles/bundle_uk_UA.properties | 4 +++- core/assets/bundles/bundle_zh_CN.properties | 4 +++- core/assets/bundles/bundle_zh_TW.properties | 4 +++- 16 files changed, 48 insertions(+), 16 deletions(-) diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index b5a0972fba..d7840e685c 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Kühlmittel text.blocks.coolantuse = Kühlmittelverbrauch text.blocks.inputliquidfuel = Kraftstoff text.blocks.liquidfueluse = Kraftstoffverbrauch -text.blocks.explosive = Hochexplosiv! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Lebenspunkte text.blocks.inaccuracy = Ungenauigkeit text.blocks.shots = Schüsse @@ -344,6 +345,7 @@ text.category.liquids = Flüssigkeiten text.category.items = Materialien text.category.crafting = Erzeugung text.category.shooting = Schießen +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Zielauswahl setting.fpscap.name = Max FPS setting.fpscap.none = kein diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 7d9362b2cd..5d753f7732 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Refrigerante text.blocks.coolantuse = Uso del Refrigerante text.blocks.inputliquidfuel = Combustible Líquido text.blocks.liquidfueluse = Uso del Combustible Líquido -text.blocks.explosive = ¡Altamente Explosivo! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Vida text.blocks.inaccuracy = Imprecisión text.blocks.shots = Disparos @@ -344,6 +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 setting.autotarget.name = Auto apuntado setting.fpscap.name = Máx FPS setting.fpscap.none = Nada diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index a65e1aa21c..f8351c8f7b 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Liquide de refroidissement text.blocks.coolantuse = Quantité de liquide de refroidissement utilisée text.blocks.inputliquidfuel = Carburant liquide text.blocks.liquidfueluse = Quantité de carburant liquide utilisé -text.blocks.explosive = Hautement explosif! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Santé text.blocks.inaccuracy = Précision text.blocks.shots = Tir @@ -344,6 +345,7 @@ text.category.liquids = Liquides text.category.items = Objets text.category.crafting = Fabrication text.category.shooting = Défense +text.category.optional = Optional Enhancements setting.autotarget.name = Visée automatique setting.fpscap.name = Max FPS setting.fpscap.none = None diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index 851ace289e..ed93ffbf39 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Liquide de refroidissement text.blocks.coolantuse = Quantité de liquide de refroidissement utilisé text.blocks.inputliquidfuel = Carburant liquide text.blocks.liquidfueluse = Quantité de carburant liquide utilisé -text.blocks.explosive = Hautement explosif ! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Santé text.blocks.inaccuracy = Précision text.blocks.shots = Tirs @@ -344,6 +345,7 @@ text.category.liquids = Liquides text.category.items = Objets text.category.crafting = Fabrication text.category.shooting = Défense +text.category.optional = Optional Enhancements setting.autotarget.name = Visée automatique setting.fpscap.name = Max FPS setting.fpscap.none = Vide diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index 87704d767b..387e2f6bf3 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Coolant text.blocks.coolantuse = Coolant Use text.blocks.inputliquidfuel = Fuel Liquid text.blocks.liquidfueluse = Liquid Fuel Use -text.blocks.explosive = Mudah meledak! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Darah text.blocks.inaccuracy = Ketidaktelitian text.blocks.shots = Tembakan @@ -344,6 +345,7 @@ text.category.liquids = Liquids text.category.items = Items text.category.crafting = Crafting text.category.shooting = Shooting +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Target setting.fpscap.name = Max FPS setting.fpscap.none = None diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 2ed037b43d..514ff0569f 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Refrigerante text.blocks.coolantuse = uso refrigerante text.blocks.inputliquidfuel = carburante liquido text.blocks.liquidfueluse = Utilizzo carburante liquido -text.blocks.explosive = Altamente esplosivo! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Salute text.blocks.inaccuracy = Inaccuratezza text.blocks.shots = Colpi @@ -344,6 +345,7 @@ text.category.liquids = Liquidi text.category.items = Oggetti text.category.crafting = Produzione text.category.shooting = Potenza di fuoco +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Target setting.fpscap.name = Limite FPS setting.fpscap.none = Niente diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index e2308591e7..3ab3a1ba2b 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -319,7 +319,8 @@ text.blocks.coolant = 冷却 text.blocks.coolantuse = 冷却使用量 text.blocks.inputliquidfuel = 液体燃料 text.blocks.liquidfueluse = 液体燃料使用量 -text.blocks.explosive = 高い爆発性! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = 耐久値 text.blocks.inaccuracy = 不正確 text.blocks.shots = ショット @@ -344,6 +345,7 @@ text.category.liquids = 液体 text.category.items = アイテム text.category.crafting = 製作速度 text.category.shooting = 攻撃速度 +text.category.optional = Optional Enhancements setting.autotarget.name = 自動ターゲット setting.fpscap.name = 最大FPS setting.fpscap.none = なし diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index fd7bdcd8af..6b031d5de0 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -319,7 +319,8 @@ text.blocks.coolant = 냉각제 text.blocks.coolantuse = 냉각수 사용 text.blocks.inputliquidfuel = 연료 액 text.blocks.liquidfueluse = 액체 연료 사용 -text.blocks.explosive = 이 블록이 터지면 주변 블록과 같이 자폭을 합니다!! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = 체력 text.blocks.inaccuracy = 오차각 text.blocks.shots = 발포 횟수 @@ -344,6 +345,7 @@ text.category.liquids = 액체 text.category.items = 아이템 text.category.crafting = 제작 text.category.shooting = 사격 +text.category.optional = Optional Enhancements setting.autotarget.name = 자동 조준 setting.fpscap.name = 최대 FPS setting.fpscap.none = 없음 diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 066ed3dda9..93a78942b5 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Płyn chłodzący text.blocks.coolantuse = Zużycie płynu chłodzącego text.blocks.inputliquidfuel = Paliwo text.blocks.liquidfueluse = Zużycie paliwa -text.blocks.explosive = Wysoce wybuchowy! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Zdrowie text.blocks.inaccuracy = Niedokładność text.blocks.shots = Strzały @@ -344,6 +345,7 @@ text.category.liquids = Płyny text.category.items = Przedmioty text.category.crafting = Przetwórstwo text.category.shooting = Strzelanie +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Target setting.fpscap.name = Max FPS setting.fpscap.none = None diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index faeec32d48..d663e8f5ac 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Esfriador text.blocks.coolantuse = Uso do esfriador text.blocks.inputliquidfuel = Liquido de combustivel text.blocks.liquidfueluse = Uso do liquido de combustivel -text.blocks.explosive = Altamente Explosivo! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Saúde text.blocks.inaccuracy = Imprecisão text.blocks.shots = Tiros @@ -344,6 +345,7 @@ text.category.liquids = Liquidos text.category.items = Itens text.category.crafting = Construindo text.category.shooting = Atirando +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Target setting.fpscap.name = FPS Maximo setting.fpscap.none = Nenhum diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 55866c439f..7218e4051e 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Охлаждающая жидкость text.blocks.coolantuse = Охлажд. жидкости используется text.blocks.inputliquidfuel = Жидкое топливо text.blocks.liquidfueluse = Жидкого топлива используется -text.blocks.explosive = Взрывоопасно! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Здоровье text.blocks.inaccuracy = Разброс text.blocks.shots = Выстрелы @@ -344,6 +345,7 @@ text.category.liquids = Жидкости text.category.items = Предметы text.category.crafting = Создание text.category.shooting = Cтрельба +text.category.optional = Optional Enhancements setting.autotarget.name = Авто-цель setting.fpscap.name = Макс. FPS setting.fpscap.none = Неограниченный diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index ec75564ec0..e0476393f0 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Sogutma sivisi text.blocks.coolantuse = Sogutma sivi kullanimi text.blocks.inputliquidfuel = Yakit sivisi text.blocks.liquidfueluse = Sivi yakit kullanimi -text.blocks.explosive = Patlayici! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Can text.blocks.inaccuracy = sekme text.blocks.shots = vuruslar @@ -344,6 +345,7 @@ text.category.liquids = sivilar text.category.items = esyalar text.category.crafting = uretim text.category.shooting = sikma +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Target setting.fpscap.name = Max FPS setting.fpscap.none = Yok diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index ee943e51a8..d4e7a788b7 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Coolant text.blocks.coolantuse = Coolant Use text.blocks.inputliquidfuel = Fuel Liquid text.blocks.liquidfueluse = Liquid Fuel Use -text.blocks.explosive = Çok patlayıcı! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Can text.blocks.inaccuracy = yanlışlık text.blocks.shots = atışlar @@ -344,6 +345,7 @@ text.category.liquids = Liquids text.category.items = Items text.category.crafting = Crafting text.category.shooting = Shooting +text.category.optional = Optional Enhancements setting.autotarget.name = Auto-Target setting.fpscap.name = Max FPS setting.fpscap.none = None diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index bca4bcfa58..f5d883551b 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -319,7 +319,8 @@ text.blocks.coolant = Охолоджуюча рідина text.blocks.coolantuse = Охолодж. рідини використовуеться text.blocks.inputliquidfuel = Рідке паливо text.blocks.liquidfueluse = Рідкого палива використовуеться -text.blocks.explosive = Вибухонебезпечний! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = Здоров'я text.blocks.inaccuracy = Розкид text.blocks.shots = Постріли @@ -344,6 +345,7 @@ text.category.liquids = Рідинне text.category.items = Елементи text.category.crafting = Створення text.category.shooting = Стрільба +text.category.optional = Optional Enhancements setting.autotarget.name = Авто-ціль setting.fpscap.name = Макс. FPS setting.fpscap.none = Необмежений diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 90313f463f..cc6dbb00bb 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -319,7 +319,8 @@ text.blocks.coolant = 冷却剂 text.blocks.coolantuse = 冷却剂使用速度 text.blocks.inputliquidfuel = 液体燃料输入 text.blocks.liquidfueluse = 液体燃料使用速度 -text.blocks.explosive = 易爆炸! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = 生命值 text.blocks.inaccuracy = 误差 text.blocks.shots = 发射数 @@ -344,6 +345,7 @@ text.category.liquids = 液体 text.category.items = 物品 text.category.crafting = 制造 text.category.shooting = 发射 +text.category.optional = Optional Enhancements setting.autotarget.name = 自动发射 setting.fpscap.name = 最高 FPS setting.fpscap.none = 无 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index e98bba92a5..f9ccc2ea8c 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -319,7 +319,8 @@ text.blocks.coolant = 冷卻劑 text.blocks.coolantuse = 使用冷卻劑 text.blocks.inputliquidfuel = 輸入液體燃料 text.blocks.liquidfueluse = 使用液體燃料速度 -text.blocks.explosive = 容易爆炸! +text.blocks.boostitem = Boost Item +text.blocks.boostliquid = Boost Liquid text.blocks.health = 耐久度 text.blocks.inaccuracy = 誤差 text.blocks.shots = 射擊數 @@ -344,6 +345,7 @@ text.category.liquids = 液體 text.category.items = 物品 text.category.crafting = 合成 text.category.shooting = 射擊 +text.category.optional = Optional Enhancements setting.autotarget.name = 自動射擊 setting.fpscap.name = 最大螢幕刷新率 setting.fpscap.none = 没有 From 942eed402ab35b467cf884140560aa4e0f4256f6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 22 Nov 2018 23:38:59 -0500 Subject: [PATCH 33/52] uCore update --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5db17d98cc..f54b84eb8c 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.9' roboVMVersion = '2.3.0' - uCoreVersion = 'c9aadd4d0b5848dbc4dbbd0fcd701b11c30c02bb' + uCoreVersion = '09e13f973a0769d971316d1d4f4a1eef3570926f' getVersionString = { String buildVersion = getBuildVersion() From 4f56bf3c3e5c6c2bd6d8f3208aa0a27ae51afa49 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Nov 2018 08:32:56 -0500 Subject: [PATCH 34/52] Consume icon fix / Liquid mixer fix --- .../sprites/ui/icons/icon-liquid-small.png | Bin 0 -> 110 bytes .../sprites/ui/icons/icon-power-small.png | Bin 0 -> 98 bytes core/assets/sprites/sprites.atlas | 908 +++++++++--------- core/assets/sprites/sprites.png | Bin 100178 -> 100476 bytes .../world/blocks/production/LiquidMixer.java | 1 + .../world/consumers/ConsumeLiquid.java | 2 +- .../world/consumers/ConsumeLiquidFilter.java | 2 +- .../world/consumers/ConsumePower.java | 2 +- 8 files changed, 465 insertions(+), 450 deletions(-) create mode 100644 core/assets-raw/sprites/ui/icons/icon-liquid-small.png create mode 100644 core/assets-raw/sprites/ui/icons/icon-power-small.png diff --git a/core/assets-raw/sprites/ui/icons/icon-liquid-small.png b/core/assets-raw/sprites/ui/icons/icon-liquid-small.png new file mode 100644 index 0000000000000000000000000000000000000000..48c93ed9d2b8efc2fe381c718d8114bed0465853 GIT binary patch literal 110 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 )S@xoe$**pBKgvtc17=Y|`q=Bw)`KXe)e3te({ z8ac)HrUVHU-WF(UYe--(aBdoH+&PZJ(=%wP+2(kjI;(5AZ4o}Dl++=|Vm3 z5c0i?+5ODbg~dO-M4JYgeY!?ah+7!?)si;xii_ID1PvZ2{Xti#Qp-mM+EYgZN4;{^LWB zT@YWza@=0f+ht&&mq7Ydncvm>wWvs>5D1v zeHFfAeNtXb+KwQiqvRF?ELZ!wb4>;uKYo1bAwluy*}(_fzdaDLaN*a?`~+7i$1H~f zkamT6YV;5}7XA0BAOOWW_(EI~wH6KcVotDwWwG~@@|^VZOBON?E+#qU%X9O0&Ca7y zrNv>jeyfQQa~gUR(WNRy`5!Uy%{l(ooVisteu{R-R&4ho-R`SaPWHe*7tO_ZRxMRmq68OQFG08lC88ZE9xLh=!E2Xrizz+7bi$?FtfpjQC_VkTf9d{e
EilS=qsh8V1{M4mFkdM9)L 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

twvz+-L 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

u4f3GDo3MEh|p7P`K81-CKATVubW*A_)PGf`Cg( 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 N^Ro7(Y!&lI{{vw-HhusA diff --git a/core/src/io/anuke/mindustry/world/blocks/production/LiquidMixer.java b/core/src/io/anuke/mindustry/world/blocks/production/LiquidMixer.java index 2f7562b82c..01e96fb5c3 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/LiquidMixer.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/LiquidMixer.java @@ -21,6 +21,7 @@ public class LiquidMixer extends LiquidBlock{ hasItems = true; rotate = false; solid = true; + singleLiquid = false; outputsLiquid = true; } diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java index eacbdb2de8..be204b4dc0 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquid.java @@ -32,7 +32,7 @@ public class ConsumeLiquid extends Consume{ @Override public String getIcon(){ - return "icon-liquid"; + return "icon-liquid-small"; } @Override diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java index 80be0c49aa..03750ffa3b 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumeLiquidFilter.java @@ -47,7 +47,7 @@ public class ConsumeLiquidFilter extends Consume{ @Override public String getIcon(){ - return "icon-liquid"; + return "icon-liquid-small"; } @Override diff --git a/core/src/io/anuke/mindustry/world/consumers/ConsumePower.java b/core/src/io/anuke/mindustry/world/consumers/ConsumePower.java index fcbb35995e..d05ba2c4fa 100644 --- a/core/src/io/anuke/mindustry/world/consumers/ConsumePower.java +++ b/core/src/io/anuke/mindustry/world/consumers/ConsumePower.java @@ -21,7 +21,7 @@ public class ConsumePower extends Consume{ @Override public String getIcon(){ - return "icon-power"; + return "icon-power-small"; } @Override From 322d76b713d1b9abbf25786407c5a6c8c7fd4311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=82=A4=EC=97=90=EB=A5=B4?= <44261958+Kieaer@users.noreply.github.com> Date: Fri, 23 Nov 2018 22:41:55 +0900 Subject: [PATCH 35/52] Update bundle_ko.properties (#354) * Update bundle_ko.properties * Update bundle_ko.properties --- core/assets/bundles/bundle_ko.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 6b031d5de0..e72a97601e 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -319,8 +319,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 +345,7 @@ 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 = 없음 @@ -623,7 +623,6 @@ block.rtg-generator.name = 토륨 발전소 block.spectre.name = 스펙터 block.meltdown.name = 멜트다운 block.container.name = 컨테이너 -block.core.description = 게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다. team.blue.name = 블루팀 team.red.name = 레드팀 team.orange.name = 오렌지팀 @@ -668,6 +667,7 @@ tutorial.daggerfactory = 이[accent] 디거 기체 공장[]은\n\n공격하는 tutorial.router = 공장을 작동시키기 위해 자원이 필요합니다.\n컨베이어에 운반되고 있는 자원을 분할할 분배기를 만드세요. tutorial.dagger = 전력 노드를 공장에 연결하세요.\n일단 요구 사항이 충족되면 기체 생산을 시작합니다.\n\n필요에 따라 드릴 및 발전기, 컨베이어를 더 많이 만들 수 있습니다. tutorial.battle = [LIGHT_GRAY]적[]의 코어가 드러났습니다.\n당신의 부대와 디거를 사용하여 파괴하세요. +block.core.description = 게임에서 가장 중요한 건물.\n파괴되면 게임이 끝납니다. block.copper-wall.description = 구리로 만든 벽. block.copper-wall-large.description = 구리로 만든 큰 벽. block.dense-alloy-wall.description = 고밀도 합금으로 만든 벽. 구리벽보다 체력이 높습니다. From 8a0761cad819eae63abbe2c295cc41924cfd57b5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Nov 2018 09:23:42 -0500 Subject: [PATCH 36/52] Bugfixes --- .../content/blocks/LiquidBlocks.java | 4 ++-- .../content/blocks/TurretBlocks.java | 21 +++++-------------- core/src/io/anuke/mindustry/world/Tile.java | 2 +- .../anuke/mindustry/desktop/CrashHandler.java | 1 - .../mindustry/desktop/DesktopPlatform.java | 3 --- 5 files changed, 8 insertions(+), 23 deletions(-) diff --git a/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java b/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java index a9e9f97155..3ca87efef1 100644 --- a/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/LiquidBlocks.java @@ -67,9 +67,9 @@ public class LiquidBlocks extends BlockList implements ContentList{ }}; phaseConduit = new LiquidBridge("phase-conduit"){{ - range = 11; + range = 12; hasPower = true; - consumes.power(0.05f); + consumes.power(0.03f); }}; } } diff --git a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java index bce9e3bb5a..34bad3e84e 100644 --- a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java @@ -32,24 +32,13 @@ public class TurretBlocks extends BlockList implements ContentList{ hail = new ArtilleryTurret("hail"){{ ammoTypes = new AmmoType[]{AmmoTypes.artilleryDense, AmmoTypes.artilleryHoming, AmmoTypes.artilleryIncindiary}; - reload = 70f; + reload = 60f; recoil = 2f; range = 230f; inaccuracy = 1f; shootCone = 10f; health = 120; }}; -/* - scatter = new BurstTurret("scatter"){{ - ammoTypes = new AmmoType[]{AmmoTypes.flakCopper}; - reload = 70f; - recoil = 2f; - shots = 3; - range = 220f; - inaccuracy = 2f; - shootCone = 40f; - health = 120; - }};*/ scorch = new LiquidTurret("scorch"){ protected TextureRegion shootRegion; @@ -117,11 +106,11 @@ public class TurretBlocks extends BlockList implements ContentList{ arc = new PowerTurret("arc"){{ shootType = AmmoTypes.arc; - reload = 55f; + reload = 80f; shootShake = 1f; shootCone = 40f; rotatespeed = 8f; - powerUsed = 7f; + powerUsed = 9f; powerCapacity = 30f; range = 150f; shootEffect = ShootFx.lightningShoot; @@ -132,7 +121,7 @@ public class TurretBlocks extends BlockList implements ContentList{ swarmer = new BurstTurret("swarmer"){{ ammoTypes = new AmmoType[]{AmmoTypes.missileExplosive, AmmoTypes.missileIncindiary, AmmoTypes.missileSurge}; - reload = 60f; + reload = 5f; shots = 4; burstSpacing = 5; inaccuracy = 10f; @@ -156,7 +145,7 @@ public class TurretBlocks extends BlockList implements ContentList{ size = 2; range = 120f; ammoTypes = new AmmoType[]{AmmoTypes.bulletCopper, AmmoTypes.bulletDense, AmmoTypes.bulletPyratite, AmmoTypes.bulletThorium, AmmoTypes.bulletSilicon}; - reload = 40f; + reload = 35f; restitution = 0.03f; ammoEjectBack = 3f; cooldown = 0.03f; diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index b75b89e433..b6b87da8d7 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -241,7 +241,7 @@ public class Tile implements PosTrait, TargetTrait{ if(link == 0){ return (block.destructible || block.breakable || block.update); }else{ - return getLinked() != this && getLinked().breakable(); + return getLinked() != this && getLinked().getLinked() == null && getLinked().breakable(); } } diff --git a/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java b/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java index 4d434e32ee..d3bb8e1976 100644 --- a/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java +++ b/desktop/src/io/anuke/mindustry/desktop/CrashHandler.java @@ -80,7 +80,6 @@ public class CrashHandler{ ex(() -> value.addChild("gamemode", new JsonValue(Vars.state.mode.name()))); ex(() -> value.addChild("state", new JsonValue(Vars.state.getState().name()))); ex(() -> value.addChild("os", new JsonValue(System.getProperty("os.name")))); - ex(() -> value.addChild("multithreading", new JsonValue(Settings.getBool("multithread")))); ex(() -> value.addChild("trace", new JsonValue(parseException(e)))); try{ diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java index 1a353b0656..d4cd5ad4e7 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java @@ -17,8 +17,6 @@ import io.anuke.ucore.util.OS; import io.anuke.ucore.util.Strings; import java.net.NetworkInterface; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Enumeration; import static io.anuke.mindustry.Vars.*; @@ -26,7 +24,6 @@ import static io.anuke.mindustry.Vars.*; public class DesktopPlatform extends Platform{ final static boolean useDiscord = OS.is64Bit; final static String applicationId = "398246104468291591"; - final static DateFormat format = SimpleDateFormat.getDateTimeInstance(); String[] args; public DesktopPlatform(String[] args){ From 30b5dd63e44ff30d91eb8477fa0ba9fba1fe70ee Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Nov 2018 10:21:47 -0500 Subject: [PATCH 37/52] Build tag fix --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c8349974ea..c0f4f1a5e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ jdk: - openjdk8 script: - "./gradlew test" -- "./gradlew desktop:dist" -- "./gradlew server:dist" +- "./gradlew desktop:dist -Pbuildversion=${TRAVIS_TAG:1}" +- "./gradlew server:dist -Pbuildversion=${TRAVIS_TAG:1}" deploy: provider: releases From e5d67405554936157931a04ff07e2334c078c88f Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Nov 2018 12:40:36 -0500 Subject: [PATCH 38/52] Additional tests, inventory fixes --- .../content/blocks/TurretBlocks.java | 2 +- .../content/bullets/TurretBullets.java | 2 +- .../anuke/mindustry/input/InputHandler.java | 2 +- core/src/io/anuke/mindustry/maps/Map.java | 9 +++++ core/src/io/anuke/mindustry/maps/MapMeta.java | 9 +++++ .../io/anuke/mindustry/type/AmmoEntry.java | 4 +-- .../io/anuke/mindustry/world/BaseBlock.java | 2 +- .../world/blocks/production/Smelter.java | 5 --- ios/src/io/anuke/mindustry/IOSLauncher.java | 2 -- tests/src/test/java/ApplicationTests.java | 33 ++++++++++++++++++- 10 files changed, 55 insertions(+), 15 deletions(-) diff --git a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java index 34bad3e84e..7307ae5a6f 100644 --- a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java @@ -106,7 +106,7 @@ public class TurretBlocks extends BlockList implements ContentList{ arc = new PowerTurret("arc"){{ shootType = AmmoTypes.arc; - reload = 80f; + reload = 75f; shootShake = 1f; shootCone = 40f; rotatespeed = 8f; diff --git a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java index ba7cac85b8..addcb75960 100644 --- a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java +++ b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java @@ -304,7 +304,7 @@ public class TurretBullets extends BulletList implements ContentList{ } }; - arc = new BulletType(0.001f, 30){ + arc = new BulletType(0.001f, 26){ { lifetime = 1; despawneffect = Fx.none; diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index 36722ffe21..111b2f9718 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -193,7 +193,7 @@ public abstract class InputHandler extends InputAdapter{ } //call tapped event - if(tile.getTeam() == player.getTeam()){ + if(!consumed && tile.getTeam() == player.getTeam()){ Call.onTileTapped(player, tile); } diff --git a/core/src/io/anuke/mindustry/maps/Map.java b/core/src/io/anuke/mindustry/maps/Map.java index 05e1a03e37..1ad60c0e1d 100644 --- a/core/src/io/anuke/mindustry/maps/Map.java +++ b/core/src/io/anuke/mindustry/maps/Map.java @@ -32,4 +32,13 @@ public class Map{ public String getDisplayName(){ return meta.tags.get("name", name); } + + @Override + public String toString(){ + return "Map{" + + "name='" + name + '\'' + + ", custom=" + custom + + ", meta=" + meta + + '}'; + } } diff --git a/core/src/io/anuke/mindustry/maps/MapMeta.java b/core/src/io/anuke/mindustry/maps/MapMeta.java index 148ad5a099..2f13ee59b9 100644 --- a/core/src/io/anuke/mindustry/maps/MapMeta.java +++ b/core/src/io/anuke/mindustry/maps/MapMeta.java @@ -37,4 +37,13 @@ public class MapMeta{ public boolean hasOreGen(){ return !tags.get("oregen", "0").equals("0"); } + + @Override + public String toString(){ + return "MapMeta{" + + "tags=" + tags + + ", width=" + width + + ", height=" + height + + '}'; + } } diff --git a/core/src/io/anuke/mindustry/type/AmmoEntry.java b/core/src/io/anuke/mindustry/type/AmmoEntry.java index a4e0559df1..d92c7963e5 100644 --- a/core/src/io/anuke/mindustry/type/AmmoEntry.java +++ b/core/src/io/anuke/mindustry/type/AmmoEntry.java @@ -1,8 +1,6 @@ package io.anuke.mindustry.type; -/** - * Used to store ammo amounts in units and turrets. - */ +/**Used to store ammo amounts in turrets.*/ public class AmmoEntry{ public AmmoType type; public int amount; diff --git a/core/src/io/anuke/mindustry/world/BaseBlock.java b/core/src/io/anuke/mindustry/world/BaseBlock.java index 6b3ef027e7..804f12703c 100644 --- a/core/src/io/anuke/mindustry/world/BaseBlock.java +++ b/core/src/io/anuke/mindustry/world/BaseBlock.java @@ -43,7 +43,7 @@ public abstract class BaseBlock extends MappableContent{ /**Returns the amount of items this block can accept.*/ public int acceptStack(Item item, int amount, Tile tile, Unit source){ if(acceptItem(item, tile, tile) && hasItems && (source == null || source.getTeam() == tile.getTeam())){ - return Math.min(getMaximumAccepted(tile, item), amount); + return Math.min(getMaximumAccepted(tile, item) - tile.entity.items.get(item), amount); }else{ return 0; } diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java b/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java index 49042d4180..e0481663f8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Smelter.java @@ -152,11 +152,6 @@ public class Smelter extends Block{ Effects.effect(craftEffect, flameColor, tile.drawx(), tile.drawy()); } - @Override - public int getMaximumAccepted(Tile tile, Item item){ - return itemCapacity; - } - @Override public boolean acceptItem(Item item, Tile tile, Tile source){ boolean isInput = false; diff --git a/ios/src/io/anuke/mindustry/IOSLauncher.java b/ios/src/io/anuke/mindustry/IOSLauncher.java index 5b7c7fbf3e..4938e4457f 100644 --- a/ios/src/io/anuke/mindustry/IOSLauncher.java +++ b/ios/src/io/anuke/mindustry/IOSLauncher.java @@ -31,8 +31,6 @@ public class IOSLauncher extends IOSApplication.Delegate { Net.setClientProvider(new KryoClient()); Net.setServerProvider(new KryoServer()); - Unit.dp.addition -= 0.2f; - if(UIDevice.getCurrentDevice().getUserInterfaceIdiom() == UIUserInterfaceIdiom.Pad){ Unit.dp.addition = 0.5f; } diff --git a/tests/src/test/java/ApplicationTests.java b/tests/src/test/java/ApplicationTests.java index 8c47aabbb4..9845480b31 100644 --- a/tests/src/test/java/ApplicationTests.java +++ b/tests/src/test/java/ApplicationTests.java @@ -4,17 +4,23 @@ import com.badlogic.gdx.backends.headless.HeadlessApplicationConfiguration; import com.badlogic.gdx.math.GridPoint2; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.Items; +import io.anuke.mindustry.content.UnitTypes; import io.anuke.mindustry.content.blocks.Blocks; +import io.anuke.mindustry.content.blocks.CraftingBlocks; +import io.anuke.mindustry.content.blocks.PowerBlocks; import io.anuke.mindustry.content.blocks.StorageBlocks; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.Logic; import io.anuke.mindustry.core.NetServer; import io.anuke.mindustry.core.World; +import io.anuke.mindustry.entities.units.BaseUnit; import io.anuke.mindustry.game.Content; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.io.BundleLoader; import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.maps.Map; +import io.anuke.mindustry.type.Item; +import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Edges; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Timers; @@ -205,7 +211,14 @@ public class ApplicationTests{ } @Test - void edgeTest(){ + void inventoryDeposit(){ + depositTest(CraftingBlocks.smelter, Items.copper); + depositTest(StorageBlocks.vault, Items.copper); + depositTest(PowerBlocks.thoriumReactor, Items.thorium); + } + + @Test + void edges(){ GridPoint2[] edges = Edges.getEdges(1); assertEquals(edges[0], new GridPoint2(1, 0)); assertEquals(edges[1], new GridPoint2(0, 1)); @@ -215,4 +228,22 @@ public class ApplicationTests{ GridPoint2[] edges2 = Edges.getEdges(2); assertEquals(8, edges2.length); } + + void depositTest(Block block, Item item){ + BaseUnit unit = UnitTypes.alphaDrone.create(Team.none); + Tile tile = new Tile(0, 0, Blocks.air.id, block.id); + int capacity = tile.block().itemCapacity; + + int deposited = tile.block().acceptStack(item, capacity - 1, tile, unit); + assertEquals(capacity - 1, deposited); + + tile.block().handleStack(item, capacity - 1, tile, unit); + assertEquals(tile.entity.items.get(item), capacity - 1); + + int overflow = tile.block().acceptStack(item, 10, tile, unit); + assertEquals(1, overflow); + + tile.block().handleStack(item, 1, tile, unit); + assertEquals(capacity, tile.entity.items.get(item)); + } } \ No newline at end of file From 66c29c49e51de015f8e03e520ae0ee59e599fd34 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Nov 2018 13:32:17 -0500 Subject: [PATCH 39/52] Wave spawner moved / Bundle tweaks / Blank name --- core/assets/bundles/bundle.properties | 221 +++++++++--------- .../src/io/anuke/mindustry/ai/Pathfinder.java | 2 +- core/src/io/anuke/mindustry/core/Control.java | 2 +- .../io/anuke/mindustry/core/GameState.java | 10 +- core/src/io/anuke/mindustry/core/Logic.java | 2 +- core/src/io/anuke/mindustry/core/World.java | 2 + .../io/anuke/mindustry/input/MobileInput.java | 15 +- .../anuke/mindustry/io/versions/Save16.java | 4 +- .../mindustry/ui/dialogs/JoinDialog.java | 5 + tests/src/test/java/SectorTests.java | 2 +- 10 files changed, 139 insertions(+), 126 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index d89b093948..da381f256a 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1,6 +1,6 @@ -text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet\!) +text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) text.credits = Credits -text.discord = Join the mindustry discord\! +text.discord = Join the mindustry discord! text.link.discord.description = The official Mindustry discord chatroom text.link.github.description = Game source code text.link.dev-builds.description = Unstable development builds @@ -8,25 +8,25 @@ text.link.trello.description = Official trello board for planned features text.link.itch.io.description = itch.io page with PC downloads and web version text.link.google-play.description = Google Play store listing text.link.wiki.description = Official Mindustry wiki -text.linkfail = Failed to open link\!\nThe URL has been copied to your clipboard. +text.linkfail = Failed to open link!\nThe URL has been copied to your clipboard. text.gameover = Game Over -text.gameover.pvp = The[accent] {0}[] team is victorious\! +text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = This sector has been lost. Re-deploy? text.sector.retry = Retry -text.highscore = [accent]New highscore\! +text.highscore = [accent]New highscore! text.wave.lasted = You lasted until wave [accent]{0}[]. -text.level.highscore = High Score\: [accent]{0} +text.level.highscore = High Score: [accent]{0} text.level.delete.title = Confirm Delete text.map.delete = Are you sure you want to delete the map "[accent]{0}[]"? text.level.select = Level Select -text.level.mode = Gamemode\: +text.level.mode = Gamemode: text.construction.desktop = To deselect a block or stop building, [accent]use space[]. text.construction.title = Block Construction Guide text.construction = You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left. text.deconstruction.title = Block Deconstruction Guide text.deconstruction = You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left. text.showagain = Don't show again next session -text.coreattack = < Core is under attack\! > +text.coreattack = < Core is under attack! > text.unlocks = Unlocks text.savegame = Save Game text.loadgame = Load Game @@ -34,19 +34,19 @@ text.joingame = Join Game text.addplayers = Add/Remove Players text.customgame = Custom Game text.sectors = Sectors -text.sector = Sector\: [LIGHT_GRAY]{0} -text.sector.time = Time\: [LIGHT_GRAY]{0} +text.sector = Sector: [LIGHT_GRAY]{0} +text.sector.time = Time: [LIGHT_GRAY]{0} text.sector.deploy = Deploy text.sector.abandon = Abandon -text.sector.abandon.confirm = Are you sure you want to abandon all progress at this sector?\nThis cannot be undone\! +text.sector.abandon.confirm = Are you sure you want to abandon all progress at this sector?\nThis cannot be undone! text.sector.resume = Resume text.sector.locked = [scarlet][[Incomplete] text.sector.unexplored = [accent][[Unexplored] -text.missions = Missions\:[LIGHT_GRAY] {0} -text.mission = Mission\:[LIGHT_GRAY] {0} -text.mission.main = Main Mission\:[LIGHT_GRAY] {0} +text.missions = Missions:[LIGHT_GRAY] {0} +text.mission = Mission:[LIGHT_GRAY] {0} +text.mission.main = Main Mission:[LIGHT_GRAY] {0} text.mission.info = Mission Info -text.mission.complete = Mission complete\! +text.mission.complete = Mission complete! text.mission.complete.body = Sector {0},{1} has been conquered. text.mission.wave = Survive[accent] {0}/{1} []waves\nWave in {2} text.mission.wave.enemies = Survive[accent] {0}/{1} []waves\n{2} Enemies @@ -54,12 +54,12 @@ text.mission.wave.enemy = Survive[accent] {0}/{1} []waves\n{2} Enemy text.mission.wave.menu = Survive[accent] {0}[] waves text.mission.battle = Destroy enemy core text.mission.resource.menu = Obtain {0} x{1} -text.mission.resource = Obtain {0}\:\n[accent]{1}/{2}[] +text.mission.resource = Obtain {0}:\n[accent]{1}/{2}[] text.mission.block = Create {0} text.mission.unit = Create {0} Unit text.mission.command = Send Command {0} To Units text.mission.linknode = Link Power Node -text.mission.display = [accent]Mission\:\n[LIGHT_GRAY]{0} +text.mission.display = [accent]Mission:\n[LIGHT_GRAY]{0} text.mission.mech = Switch to mech[accent] {0}[] text.mission.create = Create[accent] {0}[] text.none = @@ -68,29 +68,30 @@ text.quit = Quit text.maps = Maps text.continue = Continue text.nextmission = Next Mission -text.maps.none = [LIGHT_GRAY]No maps found\! +text.maps.none = [LIGHT_GRAY]No maps found! text.about.button = About -text.name = Name\: -text.filename = File Name\: -text.unlocked = New Block Unlocked\! -text.unlocked.plural = New Blocks Unlocked\! +text.name = Player Name: +text.noname = Pick a[accent] player name[] before connecting. +text.filename = File Name: +text.unlocked = New Block Unlocked! +text.unlocked.plural = New Blocks Unlocked! text.players = {0} players online text.players.single = {0} player online text.server.closing = [accent]Closing server... -text.server.kicked.kick = You have been kicked from the server\! +text.server.kicked.kick = You have been kicked from the server! text.server.kicked.serverClose = Server closed. text.server.kicked.sectorComplete = Sector completed. text.server.kicked.sectorComplete.text = Your mission is complete.\nThe server will now continue at the next sector. -text.server.kicked.clientOutdated = Outdated client\! Update your game\! -text.server.kicked.serverOutdated = Outdated server\! Ask the host to update\! +text.server.kicked.clientOutdated = Outdated client! Update your game! +text.server.kicked.serverOutdated = Outdated server! Ask the host to update! text.server.kicked.banned = You are banned on this server. text.server.kicked.recentKick = You have been kicked recently.\nWait before connecting again. text.server.kicked.nameInUse = There is someone with that name\nalready on this server. text.server.kicked.nameEmpty = Your chosen name is invalid. -text.server.kicked.idInUse = You are already on this server\! Connecting with two accounts is not permitted. +text.server.kicked.idInUse = You are already on this server! Connecting with two accounts is not permitted. text.server.kicked.customClient = This server does not support custom builds. Download an official version. -text.host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note\: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. -text.join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note\: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP. +text.host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. +text.join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[LIGHT_GRAY]Note: There is no automatic global server list; if you want to connect to someone by IP, you would need to ask the host for their IP. text.hostserver = Host Game text.hostserver.mobile = Host\nGame text.host = Host @@ -98,31 +99,31 @@ text.hosting = [accent]Opening server... text.hosts.refresh = Refresh text.hosts.discovering = Discovering LAN games text.server.refreshing = Refreshing server -text.hosts.none = [lightgray]No local games found\! +text.hosts.none = [lightgray]No local games found! text.host.invalid = [scarlet]Can't connect to host. text.trace = Trace Player -text.trace.playername = Player name\: [accent]{0} -text.trace.ip = IP\: [accent]{0} -text.trace.id = Unique ID\: [accent]{0} -text.trace.android = Android Client\: [accent]{0} -text.trace.modclient = Custom Client\: [accent]{0} -text.trace.totalblocksbroken = Total blocks broken\: [accent]{0} -text.trace.structureblocksbroken = Structure blocks broken\: [accent]{0} -text.trace.lastblockbroken = Last block broken\: [accent]{0} -text.trace.totalblocksplaced = Total blocks placed\: [accent]{0} -text.trace.lastblockplaced = Last block placed\: [accent]{0} -text.invalidid = Invalid client ID\! Submit a bug report. +text.trace.playername = Player name: [accent]{0} +text.trace.ip = IP: [accent]{0} +text.trace.id = Unique ID: [accent]{0} +text.trace.android = Android Client: [accent]{0} +text.trace.modclient = Custom Client: [accent]{0} +text.trace.totalblocksbroken = Total blocks broken: [accent]{0} +text.trace.structureblocksbroken = Structure blocks broken: [accent]{0} +text.trace.lastblockbroken = Last block broken: [accent]{0} +text.trace.totalblocksplaced = Total blocks placed: [accent]{0} +text.trace.lastblockplaced = Last block placed: [accent]{0} +text.invalidid = Invalid client ID! Submit a bug report. text.server.bans = Bans -text.server.bans.none = No banned players found\! +text.server.bans.none = No banned players found! text.server.admins = Admins -text.server.admins.none = No admins found\! +text.server.admins.none = No admins found! text.server.add = Add Server text.server.delete = Are you sure you want to delete this server? -text.server.hostname = Host\: {0} +text.server.hostname = Host: {0} text.server.edit = Edit Server -text.server.outdated = [crimson]Outdated Server\![] -text.server.outdated.client = [crimson]Outdated Client\![] -text.server.version = [lightgray]Version\: {0} {1} +text.server.outdated = [crimson]Outdated Server![] +text.server.outdated.client = [crimson]Outdated Client![] +text.server.version = [lightgray]Version: {0} {1} text.server.custombuild = [yellow]Custom Build text.confirmban = Are you sure you want to ban this player? text.confirmkick = Are you sure you want to kick this player? @@ -130,45 +131,45 @@ text.confirmunban = Are you sure you want to unban this player? text.confirmadmin = Are you sure you want to make this player an admin? text.confirmunadmin = Are you sure you want to remove admin status from this player? text.joingame.title = Join Game -text.joingame.ip = IP\: +text.joingame.ip = IP: text.disconnect = Disconnected. -text.disconnect.data = Failed to load world data\! +text.disconnect.data = Failed to load world data! text.connecting = [accent]Connecting... text.connecting.data = [accent]Loading world data... -text.server.port = Port\: -text.server.addressinuse = Address already in use\! -text.server.invalidport = Invalid port number\! -text.server.error = [crimson]Error hosting server\: [accent]{0} +text.server.port = Port: +text.server.addressinuse = Address already in use! +text.server.invalidport = Invalid port number! +text.server.error = [crimson]Error hosting server: [accent]{0} text.save.old = This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release. text.save.new = New Save text.save.overwrite = Are you sure you want to overwrite\nthis save slot? text.overwrite = Overwrite -text.save.none = No saves found\! +text.save.none = No saves found! text.saveload = [accent]Saving... -text.savefail = Failed to save game\! +text.savefail = Failed to save game! text.save.delete.confirm = Are you sure you want to delete this save? text.save.delete = Delete text.save.export = Export Save -text.save.import.invalid = [accent]This save is invalid\! -text.save.import.fail = [crimson]Failed to import save\: [accent]{0} -text.save.export.fail = [crimson]Failed to export save\: [accent]{0} +text.save.import.invalid = [accent]This save is invalid! +text.save.import.fail = [crimson]Failed to import save: [accent]{0} +text.save.export.fail = [crimson]Failed to export save: [accent]{0} text.save.import = Import Save -text.save.newslot = Save name\: +text.save.newslot = Save name: text.save.rename = Rename -text.save.rename.text = New name\: +text.save.rename.text = New name: text.selectslot = Select a save. text.slot = [accent]Slot {0} -text.save.corrupted = [accent]Save file corrupted or invalid\!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug. +text.save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug. text.sector.corrupted = [accent]A save file for this sector was found, but loading failed.\nA new one has been created. text.empty = text.on = On text.off = Off -text.save.autosave = Autosave\: {0} -text.save.map = Map\: {0} +text.save.autosave = Autosave: {0} +text.save.map = Map: {0} text.save.wave = Wave {0} -text.save.difficulty = Difficulty\: {0} -text.save.date = Last Saved\: {0} -text.save.playtime = Playtime\: {0} +text.save.difficulty = Difficulty: {0} +text.save.date = Last Saved: {0} +text.save.playtime = Playtime: {0} text.confirm = Confirm text.delete = Delete text.ok = OK @@ -180,9 +181,9 @@ text.back = Back text.quit.confirm = Are you sure you want to quit? text.changelog.title = Changelog text.changelog.loading = Getting changelog... -text.changelog.error.android = [accent]Note that the changelog sometimes does not work on Android 4.4 and below\!\nThis is due to an internal Android bug. +text.changelog.error.android = [accent]Note that the changelog sometimes does not work on Android 4.4 and below!\nThis is due to an internal Android bug. text.changelog.error.ios = [accent]The changelog is currently not supported in iOS. -text.changelog.error = [scarlet]Error getting changelog\!\nCheck your internet connection. +text.changelog.error = [scarlet]Error getting changelog!\nCheck your internet connection. text.changelog.current = [yellow][[Current version] text.changelog.latest = [accent][[Latest version] text.loading = [accent]Loading... @@ -198,32 +199,32 @@ text.saveimage = Save Image text.unknown = Unknown text.custom = Custom text.builtin = Built-In -text.map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone\! +text.map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone! text.map.random = [accent]Random Map -text.map.nospawn = This map does not have any cores for the player to spawn in\! Add a[ROYAL] blue[] core to this map in the editor. -text.map.nospawn.pvp = This map does not have any enemy cores for player to spawn into\! Add[SCARLET] red[] cores to this map in the editor. -text.map.invalid = Error loading map\: corrupted or invalid map file. +text.map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor. +text.map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] red[] cores to this map in the editor. +text.map.invalid = Error loading map: corrupted or invalid map file. text.editor.brush = Brush text.editor.slope = \\ text.editor.openin = Open In Editor text.editor.oregen = Ore Generation -text.editor.oregen.info = Ore Generation\: +text.editor.oregen.info = Ore Generation: text.editor.mapinfo = Map Info -text.editor.author = Author\: -text.editor.description = Description\: -text.editor.name = Name\: +text.editor.author = Author: +text.editor.description = Description: +text.editor.name = Name: text.editor.teams = Teams text.editor.elevation = Elevation -text.editor.errorimageload = Error loading file\:\n[accent]{0} -text.editor.errorimagesave = Error saving file\:\n[accent]{0} +text.editor.errorimageload = Error loading file:\n[accent]{0} +text.editor.errorimagesave = Error saving file:\n[accent]{0} text.editor.generate = Generate text.editor.resize = Resize text.editor.loadmap = Load Map text.editor.savemap = Save Map -text.editor.saved = Saved\! -text.editor.save.noname = Your map does not have a name\! Set one in the 'map info' menu. -text.editor.save.overwrite = Your map overwrites a built-in map\! Pick a different name in the 'map info' menu. -text.editor.import.exists = [scarlet]Unable to import\:[] a built-in map named '{0}' already exists\! +text.editor.saved = Saved! +text.editor.save.noname = Your map does not have a name! Set one in the 'map info' menu. +text.editor.save.overwrite = Your map overwrites a built-in map! Pick a different name in the 'map info' menu. +text.editor.import.exists = [scarlet]Unable to import:[] a built-in map named '{0}' already exists! text.editor.import = Import... text.editor.importmap = Import Map text.editor.importmap.description = Import an already existing map @@ -238,21 +239,21 @@ text.editor.exportimage = Export Terrain Image text.editor.exportimage.description = Export a map image file text.editor.loadimage = Import Terrain text.editor.saveimage = Export Terrain -text.editor.unsaved = [scarlet]You have unsaved changes\![]\nAre you sure you want to exit? +text.editor.unsaved = [scarlet]You have unsaved changes![]\nAre you sure you want to exit? text.editor.resizemap = Resize Map -text.editor.mapname = Map Name\: -text.editor.overwrite = [accent]Warning\!\nThis overwrites an existing map. -text.editor.overwrite.confirm = [scarlet]Warning\![] A map with this name already exists. Are you sure you want to overwrite it? -text.editor.selectmap = Select a map to load\: -text.width = Width\: -text.height = Height\: +text.editor.mapname = Map Name: +text.editor.overwrite = [accent]Warning!\nThis overwrites an existing map. +text.editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? +text.editor.selectmap = Select a map to load: +text.width = Width: +text.height = Height: text.menu = Menu text.play = Play text.load = Load text.save = Save -text.fps = FPS\: {0} -text.tps = TPS\: {0} -text.ping = Ping\: {0}ms +text.fps = FPS: {0} +text.tps = TPS: {0} +text.ping = Ping: {0}ms text.language.restart = Please restart your game for the language settings to take effect. text.settings = Settings text.tutorial = Tutorial @@ -260,7 +261,7 @@ text.editor = Editor text.mapeditor = Map Editor text.donate = Donate -text.connectfail = [crimson]Failed to connect to server\:\n\n[accent]{0} +text.connectfail = [crimson]Failed to connect to server:\n\n[accent]{0} text.error.unreachable = Server unreachable.\nIs the address spelled correctly? 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! @@ -277,8 +278,8 @@ text.settings.game = Game text.settings.sound = Sound text.settings.graphics = Graphics text.settings.cleardata = Clear Game Data... -text.settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done cannot be undone\! -text.settings.clearall.confirm = [scarlet]WARNING\![]\nThis will clear all data, including saves, maps, unlocks and keybinds.\nOnce you press 'ok' the game will wipe all data and automatically exit. +text.settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done cannot be undone! +text.settings.clearall.confirm = [scarlet]WARNING![]\nThis will clear all data, including saves, maps, unlocks and keybinds.\nOnce you press 'ok' the game will wipe all data and automatically exit. text.settings.clearsectors = Clear Sectors text.settings.clearunlocks = Clear Unlocks text.settings.clearall = Clear All @@ -357,7 +358,7 @@ setting.difficulty.easy = easy setting.difficulty.normal = normal setting.difficulty.hard = hard setting.difficulty.insane = insane -setting.difficulty.name = Difficulty\: +setting.difficulty.name = Difficulty: setting.screenshake.name = Screen Shake setting.effects.name = Display Effects setting.sensitivity.name = Controller Sensitivity @@ -480,21 +481,21 @@ mech.trident-ship.weapon = Bomb Bay mech.glaive-ship.name = Glaive mech.glaive-ship.description = A large, well-armored gunship. Equipped with an incendiary repeater. Good acceleration and maximum speed. mech.glaive-ship.weapon = Flame Repeater -text.item.explosiveness = [LIGHT_GRAY]Explosiveness\: {0}% -text.item.flammability = [LIGHT_GRAY]Flammability\: {0}% -text.item.radioactivity = [LIGHT_GRAY]Radioactivity\: {0}% -text.item.fluxiness = [LIGHT_GRAY]Flux Power\: {0}% -text.unit.health = [LIGHT_GRAY]Health\: {0} -text.unit.speed = [LIGHT_GRAY]Speed\: {0} -text.mech.weapon = [LIGHT_GRAY]Weapon\: {0} -text.mech.armor = [LIGHT_GRAY]Armor\: {0} -text.mech.itemcapacity = [LIGHT_GRAY]Item Capacity\: {0} -text.mech.minespeed = [LIGHT_GRAY]Mining Speed\: {0} -text.mech.minepower = [LIGHT_GRAY]Mining Power\: {0} -text.mech.ability = [LIGHT_GRAY]Ability\: {0} -text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity\: {0} -text.liquid.viscosity = [LIGHT_GRAY]Viscosity\: {0} -text.liquid.temperature = [LIGHT_GRAY]Temperature\: {0} +text.item.explosiveness = [LIGHT_GRAY]Explosiveness: {0}% +text.item.flammability = [LIGHT_GRAY]Flammability: {0}% +text.item.radioactivity = [LIGHT_GRAY]Radioactivity: {0}% +text.item.fluxiness = [LIGHT_GRAY]Flux Power: {0}% +text.unit.health = [LIGHT_GRAY]Health: {0} +text.unit.speed = [LIGHT_GRAY]Speed: {0} +text.mech.weapon = [LIGHT_GRAY]Weapon: {0} +text.mech.armor = [LIGHT_GRAY]Armor: {0} +text.mech.itemcapacity = [LIGHT_GRAY]Item Capacity: {0} +text.mech.minespeed = [LIGHT_GRAY]Mining Speed: {0} +text.mech.minepower = [LIGHT_GRAY]Mining Power: {0} +text.mech.ability = [LIGHT_GRAY]Ability: {0} +text.liquid.heatcapacity = [LIGHT_GRAY]Heat Capacity: {0} +text.liquid.viscosity = [LIGHT_GRAY]Viscosity: {0} +text.liquid.temperature = [LIGHT_GRAY]Temperature: {0} block.constructing = {0} [LIGHT_GRAY](Constructing) block.spawn.name = Enemy Spawn block.core.name = Core diff --git a/core/src/io/anuke/mindustry/ai/Pathfinder.java b/core/src/io/anuke/mindustry/ai/Pathfinder.java index 7f9c77970c..ccb9fc6fc4 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfinder.java +++ b/core/src/io/anuke/mindustry/ai/Pathfinder.java @@ -182,7 +182,7 @@ public class Pathfinder{ } } - state.spawner.checkAllQuadrants(); + world.spawner.checkAllQuadrants(); } class PathData{ diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 075c7e1688..90b87f56e1 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -89,7 +89,7 @@ public class Control extends Module{ "color-1", Color.rgba8888(playerColors[11]), "color-2", Color.rgba8888(playerColors[13]), "color-3", Color.rgba8888(playerColors[9]), - "name", "player", + "name", "", "lastBuild", 0 ); diff --git a/core/src/io/anuke/mindustry/core/GameState.java b/core/src/io/anuke/mindustry/core/GameState.java index bde128eb91..96a36fad8a 100644 --- a/core/src/io/anuke/mindustry/core/GameState.java +++ b/core/src/io/anuke/mindustry/core/GameState.java @@ -1,6 +1,5 @@ package io.anuke.mindustry.core; -import io.anuke.mindustry.ai.WaveSpawner; import io.anuke.mindustry.game.Difficulty; import io.anuke.mindustry.game.EventType.StateChangeEvent; import io.anuke.mindustry.game.GameMode; @@ -12,14 +11,21 @@ import static io.anuke.mindustry.Vars.unitGroups; import static io.anuke.mindustry.Vars.waveTeam; public class GameState{ + /**Current wave number, can be anything in non-wave modes.*/ public int wave = 1; + /**Wave countdown in ticks.*/ public float wavetime; + /**Whether the game is in game over state.*/ public boolean gameOver = false; + /**The current game mode.*/ public GameMode mode = GameMode.waves; + /**The current difficulty for wave modes.*/ public Difficulty difficulty = Difficulty.normal; - public WaveSpawner spawner = new WaveSpawner(); + /**Team data. Gets reset every new game.*/ public Teams teams = new Teams(); + /**Number of enemies in the game; only used clientside in servers.*/ public int enemies; + /**Current game state.*/ private State state = State.menu; public int enemies(){ diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java index 5063a29b0b..5f7035cb7e 100644 --- a/core/src/io/anuke/mindustry/core/Logic.java +++ b/core/src/io/anuke/mindustry/core/Logic.java @@ -93,7 +93,7 @@ public class Logic extends Module{ } public void runWave(){ - state.spawner.spawnEnemies(); + world.spawner.spawnEnemies(); state.wave++; state.wavetime = wavespace * state.difficulty.timeScaling; diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index 50469edacf..cf72719411 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.ai.BlockIndexer; import io.anuke.mindustry.ai.Pathfinder; +import io.anuke.mindustry.ai.WaveSpawner; import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.game.EventType.TileChangeEvent; @@ -30,6 +31,7 @@ public class World extends Module{ public final WorldGenerator generator = new WorldGenerator(); public final BlockIndexer indexer = new BlockIndexer(); public final Pathfinder pathfinder = new Pathfinder(); + public final WaveSpawner spawner = new WaveSpawner(); private Map currentMap; private Sector currentSector; diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index d48b71542b..20a942da00 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -528,7 +528,7 @@ public class MobileInput extends InputHandler implements GestureListener{ //ignore off-screen taps if(cursor == null || ui.hasMouse(x, y)) return false; - threads.run(() -> checkTargets(worldx, worldy)); + checkTargets(worldx, worldy); //remove if request present if(hasRequest(cursor)){ @@ -548,14 +548,13 @@ public class MobileInput extends InputHandler implements GestureListener{ consumed = true; player.dropCarry(); //drop off unit }else{ - threads.run(() -> { - Unit unit = Units.getClosest(player.getTeam(), Graphics.world(x, y).x, Graphics.world(x, y).y, 4f, u -> !u.isFlying() && u.getMass() <= player.mech.carryWeight); + Unit unit = Units.getClosest(player.getTeam(), Graphics.world(x, y).x, Graphics.world(x, y).y, 4f, u -> !u.isFlying() && u.getMass() <= player.mech.carryWeight); - if(unit != null){ - player.moveTarget = unit; - Effects.effect(Fx.select, unit.getX(), unit.getY()); - } - }); + if(unit != null){ + consumed = true; + player.moveTarget = unit; + Effects.effect(Fx.select, unit.getX(), unit.getY()); + } } } diff --git a/core/src/io/anuke/mindustry/io/versions/Save16.java b/core/src/io/anuke/mindustry/io/versions/Save16.java index 3431873465..3dd485c41f 100644 --- a/core/src/io/anuke/mindustry/io/versions/Save16.java +++ b/core/src/io/anuke/mindustry/io/versions/Save16.java @@ -45,7 +45,7 @@ public class Save16 extends SaveFileVersion{ content.setTemporaryMapper(readContentHeader(stream)); - state.spawner.read(stream); + world.spawner.read(stream); readEntities(stream); @@ -71,7 +71,7 @@ public class Save16 extends SaveFileVersion{ writeContentHeader(stream); - state.spawner.write(stream); //spawnes + world.spawner.write(stream); //spawnes //--ENTITIES-- diff --git a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java index d0ce1a574b..b5b0051ac1 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java @@ -285,6 +285,11 @@ public class JoinDialog extends FloatingDialog{ } void connect(String ip, int port){ + if(Settings.getString("name").trim().isEmpty()){ + ui.showInfo("$text.noname"); + return; + } + ui.loadfrag.show("$text.connecting"); ui.loadfrag.setButton(() -> { diff --git a/tests/src/test/java/SectorTests.java b/tests/src/test/java/SectorTests.java index 3aae6cb305..bb07bc2743 100644 --- a/tests/src/test/java/SectorTests.java +++ b/tests/src/test/java/SectorTests.java @@ -46,7 +46,7 @@ public class SectorTests{ * This is achieved by adding at least one mission which defines a spawn point. */ @Test - void test_sectorHasACore(){ + void sectorHasACore(){ for(SectorPresets.SectorPreset preset : this.presets.getPresets().values()){ assertTrue(spawnPointIsDefined(preset.missions), "Sector at (" + preset.x + "|" + preset.y + ") contains no missions which define a spawn point. Add a battle or wave mission."); } From 1baf3190cd48c7b04f5e3eccc49b029ea72ae384 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Nov 2018 13:35:16 -0500 Subject: [PATCH 40/52] Host dialog name selection --- core/assets/bundles/bundle.properties | 4 ++-- core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index da381f256a..b1aa0d6fb9 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -70,8 +70,8 @@ text.continue = Continue text.nextmission = Next Mission text.maps.none = [LIGHT_GRAY]No maps found! text.about.button = About -text.name = Player Name: -text.noname = Pick a[accent] player name[] before connecting. +text.name = Name: +text.noname = Pick in a[accent] player name[] first. text.filename = File Name: text.unlocked = New Block Unlocked! text.unlocked.plural = New Blocks Unlocked! diff --git a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java index 077cd57de9..06aa5f165f 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java @@ -50,6 +50,11 @@ public class HostDialog extends FloatingDialog{ content().add().width(65f); content().addButton("$text.host", () -> { + if(Settings.getString("name").trim().isEmpty()){ + ui.showInfo("$text.noname"); + return; + } + ui.loadfrag.show("$text.hosting"); Timers.runTask(5f, () -> { try{ From 6f5df6a671aa6d378eda24156e74bb7f9ead0632 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 23 Nov 2018 14:30:58 -0500 Subject: [PATCH 41/52] Added list of contributors to credits --- core/assets/bundles/bundle.properties | 3 +- core/src/io/anuke/mindustry/Vars.java | 1 + .../io/anuke/mindustry/io/Contributors.java | 43 +++++++++++++++++++ .../mindustry/ui/dialogs/AboutDialog.java | 26 ++++++++++- 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 core/src/io/anuke/mindustry/io/Contributors.java diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index b1aa0d6fb9..29103baeea 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1,5 +1,6 @@ -text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) +text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[] text.credits = Credits +text.contributors = Translators and Contributors text.discord = Join the mindustry discord! text.link.discord.description = The official Mindustry discord chatroom text.link.github.description = Game source code diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 399f5c3090..aebb84ee34 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -33,6 +33,7 @@ public class Vars{ public static final String appName = "Mindustry"; public static final String discordURL = "https://discord.gg/mindustry"; public static final String releasesURL = "https://api.github.com/repos/Anuken/Mindustry/releases"; + public static final String contributorsURL = "https://api.github.com/repos/Anuken/Mindustry/contributors"; public static final String crashReportURL = "http://mindustry.us.to/report"; //time between waves in frames (on normal mode) public static final float wavespace = 60 * 60 * 1.5f; diff --git a/core/src/io/anuke/mindustry/io/Contributors.java b/core/src/io/anuke/mindustry/io/Contributors.java new file mode 100644 index 0000000000..f7c6e0f4b1 --- /dev/null +++ b/core/src/io/anuke/mindustry/io/Contributors.java @@ -0,0 +1,43 @@ +package io.anuke.mindustry.io; + +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.JsonReader; +import com.badlogic.gdx.utils.JsonValue; +import io.anuke.mindustry.net.Net; +import io.anuke.ucore.function.Consumer; + +import static io.anuke.mindustry.Vars.contributorsURL; + +public class Contributors{ + + public static void getContributors(Consumer> success, Consumer fail){ + Net.http(contributorsURL, "GET", result -> { + JsonReader reader = new JsonReader(); + JsonValue value = reader.parse(result).child; + Array out = new Array<>(); + + while(value != null){ + String login = value.getString("login"); + out.add(new Contributor(login)); + value = value.next; + } + + success.accept(out); + }, fail); + } + + public static class Contributor{ + public final String login; + + public Contributor(String login){ + this.login = login; + } + + @Override + public String toString(){ + return "Contributor{" + + "login='" + login + '\'' + + '}'; + } + } +} diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java index e4d2324560..3b27bcc252 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AboutDialog.java @@ -2,7 +2,11 @@ package io.anuke.mindustry.ui.dialogs; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectSet; +import io.anuke.mindustry.graphics.Palette; +import io.anuke.mindustry.io.Contributors; +import io.anuke.mindustry.io.Contributors.Contributor; import io.anuke.mindustry.ui.Links; import io.anuke.mindustry.ui.Links.LinkEntry; import io.anuke.ucore.core.Core; @@ -18,11 +22,14 @@ import static io.anuke.mindustry.Vars.ios; import static io.anuke.mindustry.Vars.ui; public class AboutDialog extends FloatingDialog{ + private Array contributors = new Array<>(); private static ObjectSet bannedItems = ObjectSet.with("google-play", "itch.io", "dev-builds", "trello"); public AboutDialog(){ super("$text.about.button"); + Contributors.getContributors(out -> contributors = out, Throwable::printStackTrace); + shown(this::setup); onResize(this::setup); } @@ -94,7 +101,24 @@ public class AboutDialog extends FloatingDialog{ public void showCredits(){ FloatingDialog dialog = new FloatingDialog("$text.credits"); dialog.addCloseButton(); - dialog.content().labelWrap("$text.credits.text").width(400f); + dialog.content().add("$text.credits.text"); + dialog.content().row(); + if(!contributors.isEmpty()){ + dialog.content().addImage("blank").color(Palette.accent).fillX().height(3f).pad(3f); + dialog.content().row(); + dialog.content().add("$text.contributors"); + dialog.content().row(); + dialog.content().pane("clear", new Table(){{ + int i = 0; + left(); + for(Contributor c : contributors){ + add("[lightgray]" + c.login).left().pad(3).padLeft(6).padRight(6); + if(++i % 3 == 0){ + row(); + } + } + }}); + } dialog.show(); } } From 6bfd57097f9aa6bf44fef12d603cb7f8109e40ca Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 24 Nov 2018 08:21:22 -0500 Subject: [PATCH 42/52] Cleanup of TODOs --- android/src/io/anuke/mindustry/DonationsActivity.java | 1 - core/src/io/anuke/mindustry/ai/BlockIndexer.java | 1 - core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java | 1 - core/src/io/anuke/mindustry/editor/MapView.java | 2 -- core/src/io/anuke/mindustry/entities/units/UnitType.java | 1 - core/src/io/anuke/mindustry/maps/TutorialSector.java | 2 +- core/src/io/anuke/mindustry/maps/generation/Generation.java | 1 - core/src/io/anuke/mindustry/type/Mech.java | 1 - core/src/io/anuke/mindustry/world/Block.java | 1 - .../io/anuke/mindustry/world/blocks/distribution/Sorter.java | 2 -- .../io/anuke/mindustry/world/blocks/production/Cultivator.java | 2 +- 11 files changed, 2 insertions(+), 13 deletions(-) diff --git a/android/src/io/anuke/mindustry/DonationsActivity.java b/android/src/io/anuke/mindustry/DonationsActivity.java index 0a868f8ed3..09b6a6b12f 100644 --- a/android/src/io/anuke/mindustry/DonationsActivity.java +++ b/android/src/io/anuke/mindustry/DonationsActivity.java @@ -68,7 +68,6 @@ public class DonationsActivity extends FragmentActivity{ Fragment fragment = fragmentManager.findFragmentByTag("donationsFragment"); if(fragment != null){ fragment.onActivityResult(requestCode, resultCode, data); - //TODO donation event, set settings? } } } diff --git a/core/src/io/anuke/mindustry/ai/BlockIndexer.java b/core/src/io/anuke/mindustry/ai/BlockIndexer.java index 04c5c04cb8..9b0c5f7bac 100644 --- a/core/src/io/anuke/mindustry/ai/BlockIndexer.java +++ b/core/src/io/anuke/mindustry/ai/BlockIndexer.java @@ -21,7 +21,6 @@ import io.anuke.ucore.util.ThreadArray; import static io.anuke.mindustry.Vars.*; //TODO consider using quadtrees for finding specific types of blocks within an area -//TODO maybe use Arrays instead of ObjectSets? /**Class used for indexing special target blocks for AI.*/ @SuppressWarnings("unchecked") diff --git a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java index 7307ae5a6f..9b15b070ce 100644 --- a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java @@ -205,7 +205,6 @@ public class TurretBlocks extends BlockList implements ContentList{ }}; fuse = new ItemTurret("fuse"){{ - //TODO make it use power ammoTypes = new AmmoType[]{AmmoTypes.fuseShotgun}; reload = 50f; shootShake = 4f; diff --git a/core/src/io/anuke/mindustry/editor/MapView.java b/core/src/io/anuke/mindustry/editor/MapView.java index 59894bd016..fca223c3fe 100644 --- a/core/src/io/anuke/mindustry/editor/MapView.java +++ b/core/src/io/anuke/mindustry/editor/MapView.java @@ -175,7 +175,6 @@ public class MapView extends Element implements GestureListener{ public void clearStack(){ stack.clear(); - //TODO clear und obuffer } public OperationStack getStack(){ @@ -292,7 +291,6 @@ public class MapView extends Element implements GestureListener{ } } - //todo is it really math.max? float scaling = zoom * Math.min(width, height) / editor.getMap().width(); Draw.color(Palette.accent); diff --git a/core/src/io/anuke/mindustry/entities/units/UnitType.java b/core/src/io/anuke/mindustry/entities/units/UnitType.java index 5087df0b81..6cae81a48f 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitType.java @@ -19,7 +19,6 @@ import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Log; import io.anuke.ucore.util.Strings; -//TODO merge unit type with mech public class UnitType extends UnlockableContent{ protected final Supplier constructor; diff --git a/core/src/io/anuke/mindustry/maps/TutorialSector.java b/core/src/io/anuke/mindustry/maps/TutorialSector.java index f88dbbabc9..b597cc9ec0 100644 --- a/core/src/io/anuke/mindustry/maps/TutorialSector.java +++ b/core/src/io/anuke/mindustry/maps/TutorialSector.java @@ -30,7 +30,7 @@ public class TutorialSector{ new ItemMission(Items.copper, 100).setMessage("$tutorial.morecopper"), new BlockMission(TurretBlocks.duo).setMessage("$tutorial.turret"), - //TODO fill turret with items mission + / //new BlockMission(ProductionBlocks.mechanicalDrill).setMessage("$tutorial.drillturret"), // Create a wave mission which spawns the core at 60, 60 rather than in the center of the map diff --git a/core/src/io/anuke/mindustry/maps/generation/Generation.java b/core/src/io/anuke/mindustry/maps/generation/Generation.java index 076815e0f9..3929a160ad 100644 --- a/core/src/io/anuke/mindustry/maps/generation/Generation.java +++ b/core/src/io/anuke/mindustry/maps/generation/Generation.java @@ -30,7 +30,6 @@ public class Generation{ return tiles[x][y]; } - //TODO implement Item drillItem(int x, int y, Drill block){ if(block.isMultiblock()){ Item result = null; diff --git a/core/src/io/anuke/mindustry/type/Mech.java b/core/src/io/anuke/mindustry/type/Mech.java index 007435cde1..f075f1c2e1 100644 --- a/core/src/io/anuke/mindustry/type/Mech.java +++ b/core/src/io/anuke/mindustry/type/Mech.java @@ -11,7 +11,6 @@ import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Bundles; -//TODO merge unit type with mech public class Mech extends UnlockableContent{ public final String name; public final String description; diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 093d9b77de..6530d5228a 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -335,7 +335,6 @@ public class Block extends BaseBlock { if(hasItems) stats.add(BlockStat.itemCapacity, itemCapacity, StatUnit.items); } - //TODO make this easier to config. public void setBars(){ if(hasPower) bars.add(new BlockBar(BarType.power, true, tile -> tile.entity.power.amount / powerCapacity)); if(hasLiquids) 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 f9da9999b8..e99769ffd6 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java @@ -45,8 +45,6 @@ public class Sorter extends Block implements SelectionTrait{ public void draw(Tile tile){ super.draw(tile); - //TODO call event for change - SorterEntity entity = tile.entity(); Draw.color(entity.sortItem.color); diff --git a/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java index e2854906dd..69abb7d4c2 100644 --- a/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java +++ b/core/src/io/anuke/mindustry/world/blocks/production/Cultivator.java @@ -42,7 +42,7 @@ public class Cultivator extends Drill{ stats.remove(BlockStat.drillTier); stats.add(BlockStat.drillTier, table -> { table.addImage("grass1").size(8 * 3).padBottom(3).padTop(3); - // TODO: find out localized name and add tool tip + table.add(Blocks.grass.formalName).padLeft(3); }); } From ec80fc9f3f3a4780dd3b6f83f84be3c8e02daab6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 24 Nov 2018 19:39:35 -0500 Subject: [PATCH 43/52] Android build update --- android/AndroidManifest.xml | 2 +- android/build.gradle | 2 +- core/src/io/anuke/mindustry/core/NetServer.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index b0e4475812..8fdb041fc7 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -20,7 +20,7 @@ diff --git a/android/build.gradle b/android/build.gradle index e7790fb299..eecd23ce01 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -93,7 +93,7 @@ android { applicationId "io.anuke.mindustry" minSdkVersion 14 - targetSdkVersion 27 + targetSdkVersion 28 versionCode code versionName versionNameResult } diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 25ee6de9a4..e0fd8df64b 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -120,7 +120,7 @@ public class NetServer extends Module{ return; } - if(packet.version == -1 && Version.build != -1 && !admins.allowsCustomClients()){ + if((packet.version == -1 || !packet.versionType.equals("official")) && Version.build != -1 && !admins.allowsCustomClients()){ kick(id, KickReason.customClient); return; } From c32140241422425f8ccb4e81f27c53215ca34775 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 24 Nov 2018 20:04:20 -0500 Subject: [PATCH 44/52] Various bugfixes --- core/assets/bundles/bundle.properties | 2 +- core/src/io/anuke/mindustry/core/NetClient.java | 2 ++ core/src/io/anuke/mindustry/core/NetServer.java | 2 +- core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java | 1 - core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java | 1 - 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 29103baeea..29a8ff14a0 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -72,7 +72,7 @@ text.nextmission = Next Mission text.maps.none = [LIGHT_GRAY]No maps found! text.about.button = About text.name = Name: -text.noname = Pick in a[accent] player name[] first. +text.noname = Pick a[accent] player name[] first. text.filename = File Name: text.unlocked = New Block Unlocked! text.unlocked.plural = New Blocks Unlocked! diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 99a224da9b..bf124f9be2 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -15,6 +15,7 @@ import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest; import io.anuke.mindustry.entities.traits.SyncTrait; import io.anuke.mindustry.entities.traits.TypeTrait; +import io.anuke.mindustry.game.Version; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.gen.RemoteReadClient; import io.anuke.mindustry.net.Net; @@ -95,6 +96,7 @@ public class NetClient extends Module{ ConnectPacket c = new ConnectPacket(); c.name = player.name; c.mobile = mobile; + c.versionType = Version.type; c.color = Color.rgba8888(player.color); c.usid = getUsid(packet.addressTCP); c.uuid = Platform.instance.getUUID(); diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index e0fd8df64b..b3bd83af65 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -120,7 +120,7 @@ public class NetServer extends Module{ return; } - if((packet.version == -1 || !packet.versionType.equals("official")) && Version.build != -1 && !admins.allowsCustomClients()){ + if(packet.versionType == null || ((packet.version == -1 || !packet.versionType.equals("official")) && Version.build != -1 && !admins.allowsCustomClients())){ kick(id, KickReason.customClient); return; } diff --git a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java index 06aa5f165f..2c9bf76d3b 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/HostDialog.java @@ -28,7 +28,6 @@ public class HostDialog extends FloatingDialog{ content().table(t -> { t.add("$text.name").padRight(10); t.addField(Settings.getString("name"), text -> { - if(text.isEmpty()) return; player.name = text; Settings.put("name", text); Settings.save(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java index b5b0051ac1..d844d18c5d 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java @@ -205,7 +205,6 @@ public class JoinDialog extends FloatingDialog{ content().table(t -> { t.add("$text.name").padRight(10); t.addField(Settings.getString("name"), text -> { - if(text.isEmpty()) return; player.name = text; Settings.put("name", text); Settings.save(); From bb6a7481677773343988779b444f400c58b20cfd Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 25 Nov 2018 10:29:38 -0500 Subject: [PATCH 45/52] Various bugfixes --- core/assets/bundles/bundle.properties | 2 +- .../content/blocks/TurretBlocks.java | 4 ++-- .../io/anuke/mindustry/core/NetServer.java | 5 +++++ .../io/anuke/mindustry/editor/EditorTool.java | 2 ++ .../io/anuke/mindustry/input/MobileInput.java | 2 +- .../maps/generation/WorldGenerator.java | 19 +++++++++++++++++++ core/src/io/anuke/mindustry/net/Net.java | 5 +++-- core/src/io/anuke/mindustry/world/Block.java | 2 +- .../world/blocks/defense/MendProjector.java | 5 ++++- .../blocks/defense/OverdriveProjector.java | 8 ++++++-- 10 files changed, 44 insertions(+), 10 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 29a8ff14a0..cd3cf7d7ed 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -464,7 +464,7 @@ mech.delta-mech.description = A fast, lightly-armored mech made for hit-and-run mech.tau-mech.name = Tau mech.tau-mech.weapon = Restruct Laser mech.tau-mech.ability = Repair Burst -mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can extinguish fires and heal allies in a radius with its repair ability. +mech.tau-mech.description = The support mech. Heals allied blocks by shooting at them. Can heal allies in a radius with its repair ability. mech.omega-mech.name = Omega mech.omega-mech.weapon = Swarm Missiles mech.omega-mech.ability = Armored Configuration diff --git a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java index 9b15b070ce..b6a60d8d1f 100644 --- a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java @@ -106,7 +106,7 @@ public class TurretBlocks extends BlockList implements ContentList{ arc = new PowerTurret("arc"){{ shootType = AmmoTypes.arc; - reload = 75f; + reload = 85f; shootShake = 1f; shootCone = 40f; rotatespeed = 8f; @@ -121,7 +121,7 @@ public class TurretBlocks extends BlockList implements ContentList{ swarmer = new BurstTurret("swarmer"){{ ammoTypes = new AmmoType[]{AmmoTypes.missileExplosive, AmmoTypes.missileIncindiary, AmmoTypes.missileSurge}; - reload = 5f; + reload = 50f; shots = 4; burstSpacing = 5; inaccuracy = 10f; diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index b3bd83af65..052e31bc8f 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -16,6 +16,7 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest; import io.anuke.mindustry.entities.traits.SyncTrait; +import io.anuke.mindustry.game.EventType.WorldLoadEvent; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Version; import io.anuke.mindustry.gen.Call; @@ -24,6 +25,7 @@ import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.Administration.PlayerInfo; import io.anuke.mindustry.net.Packets.*; import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.core.Events; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.EntityGroup; @@ -76,6 +78,9 @@ public class NetServer extends Module{ private DataOutputStream dataStream = new DataOutputStream(syncStream); public NetServer(){ + Events.on(WorldLoadEvent.class, event -> { + connections.clear(); + }); Net.handleServer(Connect.class, (id, connect) -> { if(admins.isIPBanned(connect.addressTCP)){ diff --git a/core/src/io/anuke/mindustry/editor/EditorTool.java b/core/src/io/anuke/mindustry/editor/EditorTool.java index c988beb46b..6eca7e8fd4 100644 --- a/core/src/io/anuke/mindustry/editor/EditorTool.java +++ b/core/src/io/anuke/mindustry/editor/EditorTool.java @@ -17,6 +17,8 @@ import static io.anuke.mindustry.Vars.ui; public enum EditorTool{ pick{ public void touched(MapEditor editor, int x, int y){ + if(!Structs.inBounds(x, y, editor.getMap().width(), editor.getMap().height())) return; + byte bf = editor.getMap().read(x, y, DataPosition.floor); byte bw = editor.getMap().read(x, y, DataPosition.wall); byte link = editor.getMap().read(x, y, DataPosition.link); diff --git a/core/src/io/anuke/mindustry/input/MobileInput.java b/core/src/io/anuke/mindustry/input/MobileInput.java index 20a942da00..ea26deb6b0 100644 --- a/core/src/io/anuke/mindustry/input/MobileInput.java +++ b/core/src/io/anuke/mindustry/input/MobileInput.java @@ -230,7 +230,7 @@ public class MobileInput extends InputHandler implements GestureListener{ player.clearBuilding(); mode = none; recipe = null; - }).visible(() -> player.isBuilding() || recipe != null); + }).visible(() -> player.isBuilding() || recipe != null || mode == breaking); //confirm button table.addImageButton("icon-check", "clear-partial", 16 * 2f, () -> { diff --git a/core/src/io/anuke/mindustry/maps/generation/WorldGenerator.java b/core/src/io/anuke/mindustry/maps/generation/WorldGenerator.java index 45e0c64bcf..db95af39f7 100644 --- a/core/src/io/anuke/mindustry/maps/generation/WorldGenerator.java +++ b/core/src/io/anuke/mindustry/maps/generation/WorldGenerator.java @@ -172,6 +172,25 @@ public class WorldGenerator{ prepareTiles(tiles); + for(int x = 0; x < width; x++){ + for(int y = 0; y < height; y++){ + Tile tile = tiles[x][y]; + + byte elevation = tile.getElevation(); + + for(GridPoint2 point : Geometry.d4){ + if(!Structs.inBounds(x + point.x, y + point.y, width, height)) continue; + if(tiles[x + point.x][y + point.y].getElevation() < elevation){ + + if(sim2.octaveNoise2D(1, 1, 1.0 / 8, x, y) > 0.8){ + tile.setElevation(-1); + } + break; + } + } + } + } + world.setBlock(tiles[spawns.get(0).x][spawns.get(0).y], StorageBlocks.core, Team.blue); if(state.mode.isPvp){ diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index 0e152cb18e..bdf55a0888 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -356,12 +356,13 @@ public class Net{ Gdx.net.sendHttpRequest(req, new HttpResponseListener(){ @Override public void handleHttpResponse(HttpResponse httpResponse){ - listener.accept(httpResponse.getResultAsString()); + String result = httpResponse.getResultAsString(); + Gdx.app.postRunnable(() -> listener.accept(result)); } @Override public void failed(Throwable t){ - failure.accept(t); + Gdx.app.postRunnable(() -> failure.accept(t)); } @Override diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 6530d5228a..96ddfc2b94 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -153,7 +153,7 @@ public class Block extends BaseBlock { TileEntity entity = tile.entity(); for(Tile other : getPowerConnections(tile, tempTiles)){ - if(other.entity.power != null){ + if(other.entity.power != null && other.entity.power.graph != null){ other.entity.power.graph.add(entity.power.graph); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java index 1119cf311f..997c821de9 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/MendProjector.java @@ -95,8 +95,11 @@ public class MendProjector extends Block{ @Override public void drawSelect(Tile tile){ + MendEntity entity = tile.entity(); + float realRange = range + entity.phaseHeat * phaseRangeBoost; + Draw.color(color); - Lines.dashCircle(tile.drawx(), tile.drawy() - 1f, range); + Lines.dashCircle(tile.drawx(), tile.drawy(), realRange); Draw.color(); } diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java index cb340d1e40..615a6fa5a8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/io/anuke/mindustry/world/blocks/defense/OverdriveProjector.java @@ -36,6 +36,7 @@ public class OverdriveProjector extends Block{ protected float speedBoost = 1.5f; protected float speedBoostPhase = 0.75f; protected float useTime = 400f; + protected float phaseRangeBoost = 20f; public OverdriveProjector(String name){ super(name); @@ -66,7 +67,7 @@ public class OverdriveProjector extends Block{ } if(entity.charge >= reload){ - float realRange = range + entity.phaseHeat * 20f; + float realRange = range + entity.phaseHeat * phaseRangeBoost; float realBoost = speedBoost + entity.phaseHeat*speedBoostPhase; Effects.effect(BlockFx.overdriveWave, Hue.mix(color, phase, entity.phaseHeat), tile.drawx(), tile.drawy(), realRange); @@ -97,8 +98,11 @@ public class OverdriveProjector extends Block{ @Override public void drawSelect(Tile tile){ + OverdriveEntity entity = tile.entity(); + float realRange = range + entity.phaseHeat * phaseRangeBoost; + Draw.color(color); - Lines.dashCircle(tile.drawx(), tile.drawy() - 1f, range); + Lines.dashCircle(tile.drawx(), tile.drawy(), realRange); Draw.color(); } From 44897fb3715029fbbf9c3551a8931e4b0f0e9d17 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 25 Nov 2018 13:58:19 -0500 Subject: [PATCH 46/52] Mobile chat fix / Turret balance / UI disable variable --- core/src/io/anuke/mindustry/Vars.java | 1 + .../content/blocks/TurretBlocks.java | 2 +- .../src/io/anuke/mindustry/core/Platform.java | 2 - core/src/io/anuke/mindustry/core/UI.java | 2 + .../mindustry/ui/fragments/ChatFragment.java | 41 +++++++++++++++---- 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index aebb84ee34..ec2026897e 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -73,6 +73,7 @@ public class Vars{ }; //server port public static final int port = 6567; + public static boolean disableUI; public static boolean testMobile; //shorthand for whether or not this is running on android or ios public static boolean mobile; diff --git a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java index b6a60d8d1f..a3a805a557 100644 --- a/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/TurretBlocks.java @@ -110,7 +110,7 @@ public class TurretBlocks extends BlockList implements ContentList{ shootShake = 1f; shootCone = 40f; rotatespeed = 8f; - powerUsed = 9f; + powerUsed = 10f; powerCapacity = 30f; range = 150f; shootEffect = ShootFx.lightningShoot; diff --git a/core/src/io/anuke/mindustry/core/Platform.java b/core/src/io/anuke/mindustry/core/Platform.java index 63695bac48..6c184cca81 100644 --- a/core/src/io/anuke/mindustry/core/Platform.java +++ b/core/src/io/anuke/mindustry/core/Platform.java @@ -10,7 +10,6 @@ import io.anuke.ucore.core.Timers; import io.anuke.ucore.function.Consumer; import io.anuke.ucore.scene.ui.Dialog; import io.anuke.ucore.scene.ui.TextField; -import io.anuke.ucore.util.Log; import java.util.Random; @@ -29,7 +28,6 @@ public abstract class Platform { if(!mobile) return; //this is mobile only, desktop doesn't need dialogs field.tapped(() -> { - Log.info("yappd"); Dialog dialog = new Dialog("", "dialog"); dialog.setFillParent(true); dialog.content().top(); diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 0d7ca96820..27e8fd3569 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -123,6 +123,8 @@ public class UI extends SceneModule{ @Override public void update(){ + if(disableUI) return; + if(Graphics.drawing()) Graphics.end(); act(); diff --git a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java index 4788f98527..3d96883b34 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/ChatFragment.java @@ -1,5 +1,7 @@ package io.anuke.mindustry.ui.fragments; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.BitmapFont; @@ -8,13 +10,13 @@ import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.core.Platform; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.net.Net; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.Group; +import io.anuke.ucore.scene.ui.Dialog; import io.anuke.ucore.scene.ui.Label; import io.anuke.ucore.scene.ui.Label.LabelStyle; import io.anuke.ucore.scene.ui.TextField; @@ -22,8 +24,7 @@ import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.util.Mathf; -import static io.anuke.mindustry.Vars.players; -import static io.anuke.mindustry.Vars.state; +import static io.anuke.mindustry.Vars.*; import static io.anuke.ucore.core.Core.scene; import static io.anuke.ucore.core.Core.skin; @@ -113,9 +114,35 @@ public class ChatFragment extends Table{ chatfield.getStyle().font = skin.getFont("default-font-chat"); chatfield.getStyle().fontColor = Color.WHITE; chatfield.setStyle(chatfield.getStyle()); - Platform.instance.addDialog(chatfield, Vars.maxTextLength); - bottom().left().marginBottom(offsety).marginLeft(offsetx * 2).add(fieldlabel).padBottom(4f); + if(mobile){ + chatfield.tapped(() -> { + Dialog dialog = new Dialog("", "dialog"); + dialog.setFillParent(true); + dialog.content().top(); + dialog.content().defaults().height(65f); + TextField to = dialog.content().addField("", t-> {}).pad(15).width(250f).get(); + to.setMaxLength(maxTextLength); + to.keyDown(Keys.ENTER, () -> dialog.content().find("okb").fireClick()); + dialog.content().addButton("$text.ok", () -> { + chatfield.clearText(); + chatfield.appendText(to.getText()); + chatfield.change(); + dialog.hide(); + Gdx.input.setOnscreenKeyboardVisible(false); + toggle(); + }).width(90f).name("okb"); + + dialog.show(); + Timers.runTask(1f, () -> { + to.setCursorPosition(to.getText().length()); + Core.scene.setKeyboardFocus(to); + Gdx.input.setOnscreenKeyboardVisible(true); + }); + }); + } + + bottom().left().marginBottom(offsety).marginLeft(offsetx * 2).add(fieldlabel).padBottom(6f); add(chatfield).padBottom(offsety).padLeft(offsetx).growX().padRight(offsetx).height(28); @@ -123,10 +150,6 @@ public class ChatFragment extends Table{ marginBottom(105f); marginRight(240f); } - - if(Vars.mobile){ - addImageButton("icon-arrow-right", 14 * 2, this::toggle).size(46f, 51f).visible(() -> chatOpen).pad(2f); - } } @Override From a7f7a09418417436e84e69a26b954ec7334f8127 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 25 Nov 2018 16:34:31 -0500 Subject: [PATCH 47/52] Drone repair cleanup / Percentage-based repair --- .../io/anuke/mindustry/content/UnitTypes.java | 1 + .../io/anuke/mindustry/content/Weapons.java | 12 +++- .../content/bullets/TurretBullets.java | 11 +++- .../mindustry/entities/bullet/Bullet.java | 2 +- .../mindustry/entities/bullet/BulletType.java | 4 ++ .../entities/traits/RepairTrait.java | 19 ------ .../mindustry/entities/units/types/Drone.java | 42 ++------------ .../world/blocks/defense/MendingWall.java | 58 ------------------- 8 files changed, 29 insertions(+), 120 deletions(-) delete mode 100644 core/src/io/anuke/mindustry/entities/traits/RepairTrait.java delete mode 100644 core/src/io/anuke/mindustry/world/blocks/defense/MendingWall.java diff --git a/core/src/io/anuke/mindustry/content/UnitTypes.java b/core/src/io/anuke/mindustry/content/UnitTypes.java index 33b4a7cacf..16f630433c 100644 --- a/core/src/io/anuke/mindustry/content/UnitTypes.java +++ b/core/src/io/anuke/mindustry/content/UnitTypes.java @@ -37,6 +37,7 @@ public class UnitTypes implements ContentList{ }; spirit = new UnitType("spirit", Spirit.class, Spirit::new){{ + weapon = Weapons.healBlasterDrone; isFlying = true; drag = 0.01f; speed = 0.2f; diff --git a/core/src/io/anuke/mindustry/content/Weapons.java b/core/src/io/anuke/mindustry/content/Weapons.java index f37796ba13..6875f4d392 100644 --- a/core/src/io/anuke/mindustry/content/Weapons.java +++ b/core/src/io/anuke/mindustry/content/Weapons.java @@ -7,7 +7,7 @@ import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.Weapon; public class Weapons implements ContentList{ - public static Weapon blaster, blasterSmall, glaiveBlaster, droneBlaster, healBlaster, chainBlaster, shockgun, + public static Weapon blaster, blasterSmall, glaiveBlaster, droneBlaster, healBlaster, healBlasterDrone, chainBlaster, shockgun, sapper, swarmer, bomber, bomberTrident, flakgun, flamethrower, missiles, artillery, laserBurster; @Override @@ -169,6 +169,16 @@ public class Weapons implements ContentList{ ejectEffect = Fx.none; ammo = AmmoTypes.lancerLaser; }}; + + healBlasterDrone = new Weapon("heal-blaster"){{ + length = 1.5f; + reload = 40f; + width = 0.5f; + roundrobin = true; + ejectEffect = Fx.none; + recoil = 2f; + ammo = AmmoTypes.healBlaster; + }}; } @Override diff --git a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java index addcb75960..2b28ec0016 100644 --- a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java +++ b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java @@ -43,7 +43,7 @@ public class TurretBullets extends BulletList implements ContentList{ }; healBullet = new BulletType(5.2f, 13){ - float healAmount = 21f; + float healPercent = 3f; { hiteffect = BulletFx.hitLaser; @@ -51,6 +51,11 @@ public class TurretBullets extends BulletList implements ContentList{ collidesTeam = true; } + @Override + public boolean collides(Bullet b, Tile tile){ + return tile.getTeam() != b.getTeam() || tile.entity.healthf() < 1f; + } + @Override public void draw(Bullet b){ Draw.color(Palette.heal); @@ -67,8 +72,8 @@ public class TurretBullets extends BulletList implements ContentList{ tile = tile.target(); if(tile.getTeam() == b.getTeam() && !(tile.block() instanceof BuildBlock)){ - Effects.effect(BlockFx.healBlock, tile.drawx(), tile.drawy(), tile.block().size); - tile.entity.healBy(healAmount); + Effects.effect(BlockFx.healBlockFull, Palette.heal, tile.drawx(), tile.drawy(), tile.block().size); + tile.entity.healBy(healPercent / 100f * tile.entity.maxHealth()); } } }; diff --git a/core/src/io/anuke/mindustry/entities/bullet/Bullet.java b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java index f3d60b86f6..f918d6ce8b 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/Bullet.java +++ b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java @@ -209,7 +209,7 @@ public class Bullet extends BulletEntity implements TeamTrait, SyncT if(tile == null) return false; tile = tile.target(); - if(tile.entity != null && tile.entity.collide(this) && !tile.entity.isDead() && (type.collidesTeam || tile.getTeam() != team)){ + if(tile.entity != null && tile.entity.collide(this) && type.collides(this, tile) && !tile.entity.isDead() && (type.collidesTeam || tile.getTeam() != team)){ if(tile.getTeam() != team){ tile.entity.collision(this); } diff --git a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java index 916ebbb52c..b6220dd9dd 100644 --- a/core/src/io/anuke/mindustry/entities/bullet/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java @@ -55,6 +55,10 @@ public abstract class BulletType extends Content implements BaseBulletType type.range){ circle(type.range*0.9f); }else{ - TileEntity entity = (TileEntity) target; - entity.healBy(type.healSpeed * entity.tile.block().health / 100f * Timers.delta()); - - if(timer.get(timerRepairEffect, 30)){ - Effects.effect(BlockFx.healBlockFull, Palette.heal, entity.x, entity.y, entity.tile.block().size); - } + getWeapon().update(Drone.this, target.getX(), target.getY()); } } }, @@ -317,16 +306,6 @@ public class Drone extends FlyingUnit implements BuilderTrait{ target = null; } - if(Net.client() && state.is(repair) && target instanceof TileEntity && target.distanceTo(this) < type.range){ - TileEntity entity = (TileEntity) target; - entity.health += type.healSpeed * Timers.delta(); - entity.health = Mathf.clamp(entity.health, 0, entity.tile.block().health); - - if(timer.get(timerRepairEffect, 30)){ - Effects.effect(BlockFx.healBlockFull, Palette.heal, entity.x, entity.y, entity.tile.block().size); - } - } - updateBuilding(this); } @@ -355,19 +334,6 @@ public class Drone extends FlyingUnit implements BuilderTrait{ @Override public void drawOver(){ trail.draw(Palette.lightTrail, 3f); - - TargetTrait entity = target; - - if(entity instanceof TileEntity && state.is(repair) && target.distanceTo(this) < type.range){ - float len = 5f; - Draw.color(Color.BLACK, Color.WHITE, 0.95f + Mathf.absin(Timers.time(), 0.8f, 0.05f)); - Shapes.laser("beam", "beam-end", - x + Angles.trnsx(rotation, len), - y + Angles.trnsy(rotation, len), - entity.getX(), entity.getY()); - Draw.color(); - } - drawBuilding(this); } diff --git a/core/src/io/anuke/mindustry/world/blocks/defense/MendingWall.java b/core/src/io/anuke/mindustry/world/blocks/defense/MendingWall.java deleted file mode 100644 index aabcbcd8ef..0000000000 --- a/core/src/io/anuke/mindustry/world/blocks/defense/MendingWall.java +++ /dev/null @@ -1,58 +0,0 @@ -package io.anuke.mindustry.world.blocks.defense; - -import com.badlogic.gdx.graphics.Color; -import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.entities.bullet.Bullet; -import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.defense.DeflectorWall.DeflectorEntity; -import io.anuke.ucore.core.Graphics; -import io.anuke.ucore.core.Timers; -import io.anuke.ucore.graphics.Draw; -import io.anuke.ucore.util.Mathf; - -import static io.anuke.mindustry.Vars.tilesize; - -public class MendingWall extends Wall{ - protected float regenSpeed = 0.25f; - - public MendingWall(String name){ - super(name); - update = true; - } - - @Override - public void handleBulletHit(TileEntity entity, Bullet bullet){ - super.handleBulletHit(entity, bullet); - ((DeflectorEntity) entity).hit = 1f; - } - - @Override - public void draw(Tile tile){ - super.draw(tile); - - DeflectorEntity entity = tile.entity(); - - if(entity.hit < 0.0001f) return; - - Graphics.setAdditiveBlending(); - - Draw.color(Color.WHITE); - Draw.alpha(entity.hit * 0.5f); - Draw.rect("blank", tile.drawx(), tile.drawy(), tilesize * size, tilesize * size); - Draw.reset(); - - entity.hit = Mathf.clamp(entity.hit - Timers.delta() / DeflectorWall.hitTime); - - Graphics.setNormalBlending(); - } - - @Override - public void update(Tile tile){ - tile.entity.health = Mathf.clamp(tile.entity.health + regenSpeed * Timers.delta(), 0f, health); - } - - @Override - public TileEntity newEntity(){ - return new DeflectorEntity(); - } -} From 54ad9ba243ccec63d0309412a05b3347d6540d92 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 25 Nov 2018 20:43:45 -0500 Subject: [PATCH 48/52] Added fullscreen map screenshot --- build.gradle | 2 +- core/assets/bundles/bundle.properties | 2 + core/assets/shaders/shield.fragment | 3 +- core/src/io/anuke/mindustry/Vars.java | 3 ++ core/src/io/anuke/mindustry/core/Control.java | 4 ++ .../src/io/anuke/mindustry/core/Renderer.java | 47 +++++++++++++++++++ .../anuke/mindustry/graphics/CacheLayer.java | 6 ++- .../io/anuke/mindustry/graphics/Shaders.java | 12 ++--- .../mindustry/input/DefaultKeybinds.java | 1 + 9 files changed, 67 insertions(+), 13 deletions(-) diff --git a/build.gradle b/build.gradle index f54b84eb8c..ac74bf324b 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.9' roboVMVersion = '2.3.0' - uCoreVersion = '09e13f973a0769d971316d1d4f4a1eef3570926f' + uCoreVersion = '7610a9e20ebb0db62256b70f97e1783f5416e71d' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index cd3cf7d7ed..6cae7f175d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -10,6 +10,7 @@ text.link.itch.io.description = itch.io page with PC downloads and web version text.link.google-play.description = Google Play store listing text.link.wiki.description = Official Mindustry wiki text.linkfail = Failed to open link!\nThe URL has been copied to your clipboard. +text.screenshot = Screenshot saved to {0} text.gameover = Game Over text.gameover.pvp = The[accent] {0}[] team is victorious! text.sector.gameover = This sector has been lost. Re-deploy? @@ -384,6 +385,7 @@ command.retreat = Retreat command.patrol = Patrol keybind.press = Press a key... keybind.press.axis = Press an axis or key... +keybind.screenshot.name = Map Screenshot keybind.move_x.name = Move x keybind.move_y.name = Move y keybind.select.name = Select/Shoot diff --git a/core/assets/shaders/shield.fragment b/core/assets/shaders/shield.fragment index e71cb95f37..f771e59dd3 100644 --- a/core/assets/shaders/shield.fragment +++ b/core/assets/shaders/shield.fragment @@ -12,7 +12,6 @@ precision highp int; uniform sampler2D u_texture; uniform vec2 u_texsize; uniform float u_time; -uniform float u_scaling; uniform float u_dp; uniform vec2 u_offset; @@ -28,7 +27,7 @@ void main() { vec2 T = v_texCoord.xy; vec2 coords = (T * u_texsize) + u_offset; - T += vec2(sin(coords.y / 3.0 + u_time / 20.0) / 240.0, sin(coords.x / 3.0 + u_time / 20.0) / 240.0) * u_scaling; + T += vec2(sin(coords.y / 3.0 + u_time / 20.0), sin(coords.x / 3.0 + u_time / 20.0)) / u_texsize; float si = sin(u_time / 20.0) / 8.0; vec4 color = texture2D(u_texture, T); diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index ec2026897e..14636b4abd 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -81,6 +81,8 @@ public class Vars{ public static boolean android; //main data directory public static FileHandle dataDirectory; + //subdirectory for screenshots + public static FileHandle screenshotDirectory; //directory for user-created map data public static FileHandle customMapDirectory; //save file directory @@ -172,6 +174,7 @@ public class Vars{ android = Gdx.app.getType() == ApplicationType.Android; dataDirectory = Settings.getDataDirectory(appName); + screenshotDirectory = dataDirectory.child("screenshots/"); customMapDirectory = dataDirectory.child("maps/"); saveDirectory = dataDirectory.child("saves/"); baseCameraScale = Math.round(Unit.dp.scl(4)); diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 90b87f56e1..0db265aa67 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -373,6 +373,10 @@ public class Control extends Module{ } } + if(Inputs.keyTap("screenshot")){ + renderer.takeMapScreenshot(); + } + }else{ if(!state.isPaused()){ Timers.update(); diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 08b9f9de43..efc8b0a500 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -1,10 +1,16 @@ package io.anuke.mindustry.core; 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.PixmapIO; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.BufferUtils; +import com.badlogic.gdx.utils.ScreenUtils; +import com.badlogic.gdx.utils.TimeUtils; import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; @@ -33,6 +39,7 @@ import io.anuke.ucore.graphics.Lines; import io.anuke.ucore.graphics.Surface; import io.anuke.ucore.modules.RendererModule; import io.anuke.ucore.scene.utils.Cursors; +import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Pooling; import io.anuke.ucore.util.Translator; @@ -378,4 +385,44 @@ public class Renderer extends RendererModule{ targetscale = Mathf.clamp(targetscale, Math.round(s * 2), Math.round(s * 5)); } + public void takeMapScreenshot(){ + float vpW = Core.camera.viewportWidth, vpH = Core.camera.viewportHeight; + int w = world.width()*tilesize, h = world.height()*tilesize; + int pw = pixelSurface.width(), ph = pixelSurface.height(); + showFog = false; + disableUI = true; + pixelSurface.setSize(w, h, true); + Graphics.getEffectSurface().setSize(w, h, true); + Core.camera.viewportWidth = w; + Core.camera.viewportHeight = h; + Core.camera.position.x = w/2f; + Core.camera.position.y = h/2f; + + draw(); + + showFog = true; + disableUI = false; + Core.camera.viewportWidth = vpW; + Core.camera.viewportHeight = vpH; + + pixelSurface.getBuffer().begin(); + byte[] lines = ScreenUtils.getFrameBufferPixels(0, 0, w, h, true); + for(int i = 0; i < lines.length; i+= 4){ + lines[i + 3] = (byte)255; + } + pixelSurface.getBuffer().end(); + + Pixmap fullPixmap = new Pixmap(w, h, Pixmap.Format.RGBA8888); + + BufferUtils.copy(lines, 0, fullPixmap.getPixels(), lines.length); + FileHandle file = screenshotDirectory.child("screenshot-" + TimeUtils.millis() + ".png"); + PixmapIO.writePNG(file, fullPixmap); + fullPixmap.dispose(); + + pixelSurface.setSize(pw, ph, false); + Graphics.getEffectSurface().setSize(pw, ph, false); + + ui.showInfoFade(Bundles.format("text.screenshot", file.toString())); + } + } diff --git a/core/src/io/anuke/mindustry/graphics/CacheLayer.java b/core/src/io/anuke/mindustry/graphics/CacheLayer.java index e83d65df6a..e5afc2fcf5 100644 --- a/core/src/io/anuke/mindustry/graphics/CacheLayer.java +++ b/core/src/io/anuke/mindustry/graphics/CacheLayer.java @@ -65,7 +65,7 @@ public enum CacheLayer{ protected void beginShader(){ //renderer.getBlocks().endFloor(); - renderer.effectSurface.getBuffer().bind(); + renderer.effectSurface.getBuffer().begin(); Graphics.clear(Color.CLEAR); //renderer.getBlocks().beginFloor(); } @@ -73,7 +73,9 @@ public enum CacheLayer{ public void endShader(Shader shader){ renderer.blocks.endFloor(); - renderer.pixelSurface.getBuffer().bind(); + renderer.effectSurface.getBuffer().end(); + + renderer.pixelSurface.getBuffer().begin(); Graphics.shader(shader); Graphics.begin(); diff --git a/core/src/io/anuke/mindustry/graphics/Shaders.java b/core/src/io/anuke/mindustry/graphics/Shaders.java index e3c3a5a656..2bec569e2c 100644 --- a/core/src/io/anuke/mindustry/graphics/Shaders.java +++ b/core/src/io/anuke/mindustry/graphics/Shaders.java @@ -175,17 +175,13 @@ public class Shaders{ @Override public void apply(){ - float scaling = Core.cameraScale / 4f / Core.camera.zoom; - shader.setUniformf("u_dp", Unit.dp.scl(1f)); - //shader.setUniformf("u_color", color); shader.setUniformf("u_time", Timers.time() / Unit.dp.scl(1f)); - shader.setUniformf("u_scaling", scaling); shader.setUniformf("u_offset", Core.camera.position.x - Core.camera.viewportWidth / 2 * Core.camera.zoom, Core.camera.position.y - Core.camera.viewportHeight / 2 * Core.camera.zoom); - shader.setUniformf("u_texsize", Gdx.graphics.getWidth() / Core.cameraScale * Core.camera.zoom, - Gdx.graphics.getHeight() / Core.cameraScale * Core.camera.zoom); + shader.setUniformf("u_texsize", Core.camera.viewportWidth * Core.camera.zoom, + Core.camera.viewportHeight * Core.camera.zoom); } } @@ -200,8 +196,8 @@ public class Shaders{ shader.setUniformf("camerapos", Core.camera.position.x - Core.camera.viewportWidth / 2 * Core.camera.zoom, Core.camera.position.y - Core.camera.viewportHeight / 2 * Core.camera.zoom); - shader.setUniformf("screensize", Gdx.graphics.getWidth() / Core.cameraScale * Core.camera.zoom, - Gdx.graphics.getHeight() / Core.cameraScale * Core.camera.zoom); + shader.setUniformf("screensize", Core.camera.viewportWidth* Core.camera.zoom, + Core.camera.viewportHeight * Core.camera.zoom); shader.setUniformf("time", Timers.time()); } } diff --git a/core/src/io/anuke/mindustry/input/DefaultKeybinds.java b/core/src/io/anuke/mindustry/input/DefaultKeybinds.java index 9db284dc16..8f0117abf9 100644 --- a/core/src/io/anuke/mindustry/input/DefaultKeybinds.java +++ b/core/src/io/anuke/mindustry/input/DefaultKeybinds.java @@ -32,6 +32,7 @@ public class DefaultKeybinds{ "menu", Gdx.app.getType() == ApplicationType.Android ? Input.BACK : Input.ESCAPE, "pause", Input.SPACE, "toggle_menus", Input.C, + "screenshot", Input.P, new Category("multiplayer"), "player_list", Input.TAB, "chat", Input.ENTER, From 51a8144f4924206b066c154bebfc9e056797eddc Mon Sep 17 00:00:00 2001 From: beito Date: Mon, 26 Nov 2018 12:54:46 +0900 Subject: [PATCH 49/52] Update Japanese translations (#357) * Add new japanese translation It translated on commit 66810c8. so it don't apply changes from commit 17e0489. * Update Japanese translation Applies commit 7a51693. and small changes. * Upadte Japanese translations * Update Japanese * Update Japanese * Update Japanese translations Improve and update for new changes * Update Japanese * Update Japanese translations --- core/assets/bundles/bundle_ja.properties | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 3ab3a1ba2b..b9c8600522 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -1,5 +1,6 @@ text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) text.credits = クレジット +text.contributors = 翻訳や協力してくださった方々 text.discord = DiscordのMindustryに参加! text.link.discord.description = Mindustryの公式Discordグループ text.link.github.description = ゲームのソースコード @@ -22,7 +23,7 @@ text.level.select = レベル選択 text.level.mode = ゲームモード: text.construction.desktop = ブロックの選択や建設を止めるには、[accent]スペースを使用してください[]。 text.construction.title = ブロック建設ガイド -text.construction = [accent]ブロック建設モード[]になりました。\n設置するには、機体の近くの設置可能な場所をタップしてください。\nブロックを選択した状態で、チェックボタンを押して確認すると、機体が建設を始めます。\n\n- [accent]ブロックの削除[]は、タップで範囲を選択してください。\n- [accent]範囲の選択[]は、長押しして、範囲のブロックをドラッグしてください。\n- [accent]一列にブロックを設置[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]建設や範囲の選択をキャンセル[]するには、左下の X ボタンを押してください。 +text.construction = [accent]ブロック建設モード[]になりました。\n設置するには、機体の近くの設置可能な場所をタップしてください。\nブロックを選択した状態で、チェックボタンを押して確認すると、機体が建設を始めます。\n\n- [accent]ブロックの撤去[]は、タップして範囲を選択してください。\n- [accent]範囲の選択[]は、長押しして、範囲のブロックをドラッグしてください。\n- [accent]一列にブロックを設置[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]建設や範囲の選択をキャンセル[]するには、左下の X ボタンを押してください。 text.deconstruction.title = ブロック撤去ガイド text.deconstruction = [accent]ブロック撤去モード[]になりました。\n\nブロックを撤去するには、機体の近くのブロックをタップしてください。\nブロックを選択した状態で、チェックボタンを押して確認すると、機体がブロックの撤去を始めます。\n\n- [accent]ブロックの破壊[]は、タップで範囲を選択してください。\n- [accent]範囲を選択してブロックを撤去[]するには、 タップで空いている場所を長押しして、伸ばしたい方向にドラッグしてください\n- [accent]撤去や範囲選択をキャンセル[]するには、左下の X ボタンを押してください。 text.showagain = 次回以降表示しない @@ -71,6 +72,7 @@ text.nextmission = 次のミッションへ text.maps.none = [LIGHT_GRAY]マップが存在しません! text.about.button = About text.name = 名前: +text.noname = 先に[accent]プレイヤー名[]を決めてください。 text.filename = ファイル名: text.unlocked = 新しいブロックをアンロック! text.unlocked.plural = 新しいブロックをアンロック! @@ -302,7 +304,7 @@ text.blocks.powerdamage = 電力/ダメージ text.blocks.inputitemcapacity = 搬入アイテム容量 text.blocks.outputitemcapacity = 搬出アイテム容量 text.blocks.itemcapacity = アイテム容量 -text.blocks.basepowergeneration = 電力発電量 +text.blocks.basepowergeneration = 基本発電量 text.blocks.powertransferspeed = 電力伝送量 text.blocks.craftspeed = 生産速度 text.blocks.inputliquid = 必要な液体 @@ -311,7 +313,7 @@ text.blocks.inputitem = 必要なアイテム text.blocks.inputitems = 必要なアイテム text.blocks.outputitem = 搬出アイテム text.blocks.drilltier = ドリル -text.blocks.drillspeed = 採掘速度 +text.blocks.drillspeed = 基本採掘速度 text.blocks.liquidoutput = 搬出液体 text.blocks.liquidoutputspeed = 液体搬出速度 text.blocks.liquiduse = 液体使用量 @@ -319,8 +321,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 +347,7 @@ 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 = なし @@ -401,7 +403,7 @@ keybind.chat_history_next.name = 次のチャット履歴 keybind.chat_scroll.name = チャットスクロール keybind.drop_unit.name = ドロップユニット keybind.zoom_minimap.name = ミニマップのズーム -mode.text.help.title = モードの説明 +mode.text.help.title = モード説明 mode.waves.name = ウェーブ mode.waves.description = ノーマルモードです。限られた資源でウェーブが自動的に始まります。 mode.sandbox.name = サンドボックス From 70507258ae5af23512c6e7eae6dfb5b488ca25f4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 25 Nov 2018 22:55:13 -0500 Subject: [PATCH 50/52] Cleanup --- build.gradle | 2 +- core/src/io/anuke/mindustry/graphics/CacheLayer.java | 2 +- core/src/io/anuke/mindustry/graphics/Shaders.java | 3 --- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index ac74bf324b..6367e64024 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ allprojects { appName = 'Mindustry' gdxVersion = '1.9.9' roboVMVersion = '2.3.0' - uCoreVersion = '7610a9e20ebb0db62256b70f97e1783f5416e71d' + uCoreVersion = 'f73e538757ac66ff62d7f25d93011142b6abb8df' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/src/io/anuke/mindustry/graphics/CacheLayer.java b/core/src/io/anuke/mindustry/graphics/CacheLayer.java index e5afc2fcf5..4a13487541 100644 --- a/core/src/io/anuke/mindustry/graphics/CacheLayer.java +++ b/core/src/io/anuke/mindustry/graphics/CacheLayer.java @@ -73,7 +73,7 @@ public enum CacheLayer{ public void endShader(Shader shader){ renderer.blocks.endFloor(); - renderer.effectSurface.getBuffer().end(); + //renderer.effectSurface.getBuffer().end(); renderer.pixelSurface.getBuffer().begin(); diff --git a/core/src/io/anuke/mindustry/graphics/Shaders.java b/core/src/io/anuke/mindustry/graphics/Shaders.java index 2bec569e2c..254234f419 100644 --- a/core/src/io/anuke/mindustry/graphics/Shaders.java +++ b/core/src/io/anuke/mindustry/graphics/Shaders.java @@ -157,17 +157,14 @@ public class Shaders{ @Override public void apply(){ - // shader.setUniformf("u_progress", progress); shader.setUniformf("u_color", color); shader.setUniformf("u_uv", region.getU(), region.getV()); shader.setUniformf("u_uv2", region.getU2(), region.getV2()); - //shader.setUniformf("u_time", Timers.time()); shader.setUniformf("u_texsize", region.getTexture().getWidth(), region.getTexture().getHeight()); } } public static class Shield extends Shader{ - //public Color color = new Color(); public Shield(){ super("shield", "default"); From 90198be1cbee605f6bb815f6e127fbde988f1d5f Mon Sep 17 00:00:00 2001 From: VizardAlpha <43859764+VizardAlpha@users.noreply.github.com> Date: Mon, 26 Nov 2018 18:34:01 +0100 Subject: [PATCH 51/52] Updates bundle_fr_BE.properties (#358) * Updates bundle_fr_BE.properties * Updates bundle_fr_BE.properties * Update bundle_fr_BE.properties * Update bundle_fr_BE.properties * Update bundle_fr_BE.properties --- core/assets/bundles/bundle_fr_BE.properties | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index ed93ffbf39..1abdc7f293 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -1,5 +1,6 @@ -text.credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GRAY](In case you can't tell, this text is currently unfinished.\nTranslators, don't edit it yet!) +text.credits.text = Créé par [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[] text.credits = Crédits +text.contributors = Traducteurs et contributeurs text.discord = Rejoignez le discord de Mindustry ! text.link.discord.description = Le discord officiel de Mindustry text.link.github.description = Code source du jeu @@ -9,6 +10,7 @@ text.link.itch.io.description = Page web itch.io avec les versions ordinateurs t text.link.google-play.description = Page Google Play Store du jeu text.link.wiki.description = Wiki officiel de Mindustry text.linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier. +text.screenshot = Capture d'écran enregistrée sur {0} text.gameover = Le base a été détruit. text.gameover.pvp = L'équipe[accent] {0}[] a gagnée ! text.sector.gameover = Ce secteur a été perdu. Réessayer ? @@ -54,7 +56,7 @@ text.mission.wave.enemy = Survivez[accent] {0}/{1} []vagues\n{2} Ennemi text.mission.wave.menu = Survivez[accent] {0} []vagues text.mission.battle = Détruire la base ennemie. text.mission.resource.menu = Obtenez {0} x{1} -text.mission.resource = Obtain {0}:\n[accent]{1}/{2}[] +text.mission.resource = Obtenez {0}:\n[accent]{1}/{2}[] text.mission.block = Créez {0} text.mission.unit = Créez {0} unité text.mission.command = Envoyer une commande à {0} unités @@ -71,6 +73,7 @@ text.nextmission = Prochaine Mission text.maps.none = [LIGHT_GRAY]Aucune carte trouvée! text.about.button = À propos text.name = Nom: +text.noname = Choisissez d'abord [accent]un pseudo[]. text.filename = Nom du fichier: text.unlocked = Nouveau bloc debloqué! text.unlocked.plural = Nouveaux blocs débloqués! @@ -150,8 +153,8 @@ text.save.delete.confirm = Êtes-vous sûr de supprimer cette sauvegarde ? text.save.delete = Supprimer text.save.export = Exporter une\nSauvegarde text.save.import.invalid = [accent]Cette sauvegarde est invalide! -text.save.import.fail = [crimson]L'importation de la sauvegarde\na échoué: [accent]{0} -text.save.export.fail = [crimson]L'exportation de la sauvegarde\na échoué: [accent]{0} +text.save.import.fail = [crimson]L'importation de la sauvegarde\na échouée: [accent]{0} +text.save.export.fail = [crimson]L'exportation de la sauvegarde\na échouée: [accent]{0} text.save.import = Importer une sauvegarde text.save.newslot = Nom de la sauvegarde: text.save.rename = Renommer @@ -319,8 +322,8 @@ text.blocks.coolant = Liquide de refroidissement text.blocks.coolantuse = Quantité de liquide de refroidissement utilisé text.blocks.inputliquidfuel = Carburant liquide text.blocks.liquidfueluse = Quantité de carburant liquide utilisé -text.blocks.boostitem = Boost Item -text.blocks.boostliquid = Boost Liquid +text.blocks.boostitem = Objet boostant la production +text.blocks.boostliquid = Liquide boostant la production text.blocks.health = Santé text.blocks.inaccuracy = Précision text.blocks.shots = Tirs @@ -345,7 +348,7 @@ text.category.liquids = Liquides text.category.items = Objets text.category.crafting = Fabrication text.category.shooting = Défense -text.category.optional = Optional Enhancements +text.category.optional = Améliorations facultatives setting.autotarget.name = Visée automatique setting.fpscap.name = Max FPS setting.fpscap.none = Vide From d03ceb2a23d3ab0b38396527b0d16bc2ea944a76 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 26 Nov 2018 12:40:24 -0500 Subject: [PATCH 52/52] Bugfixes / Sorter item memory --- .../ui/fragments/PlacementFragment.java | 8 ++++++-- .../world/blocks/distribution/Sorter.java | 19 ++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java index f3923079d8..6388b3ee28 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlacementFragment.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.ui.fragments; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Interpolation; +import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.game.EventType.WorldLoadGraphicsEvent; @@ -33,7 +34,7 @@ public class PlacementFragment extends Fragment{ Category currentCategory = Category.turret; Block hovered, lastDisplay; Tile hoverTile; - Table blockTable, toggler; + Table blockTable, toggler, topTable; boolean shown = true; public PlacementFragment(){ @@ -106,6 +107,7 @@ public class PlacementFragment extends Fragment{ //top table with hover info frame.table("clear", top -> { + topTable = top; top.add(new Table()).growX().update(topTable -> { if((tileDisplayBlock() == null && lastDisplay == getSelected()) || (tileDisplayBlock() != null && lastDisplay == tileDisplayBlock())) return; @@ -194,8 +196,10 @@ public class PlacementFragment extends Fragment{ Block getSelected(){ Block toDisplay = null; + Vector2 v = topTable.stageToLocalCoordinates(Graphics.mouse()); + //setup hovering tile - if(!ui.hasMouse()){ + if(!ui.hasMouse() && topTable.hit(v.x, v.y, false) == null){ Tile tile = world.tileWorld(Graphics.mouseWorld().x, Graphics.mouseWorld().y); if(tile != null){ hoverTile = tile.target(); 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 e99769ffd6..c7a5737e54 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Sorter.java @@ -4,7 +4,6 @@ import io.anuke.annotations.Annotations.Loc; import io.anuke.annotations.Annotations.Remote; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; @@ -13,13 +12,17 @@ import io.anuke.mindustry.world.meta.BlockGroup; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.util.Mathf; +import io.anuke.mindustry.gen.Call; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -import static io.anuke.mindustry.Vars.*; + +import static io.anuke.mindustry.Vars.content; +import static io.anuke.mindustry.Vars.threads; public class Sorter extends Block implements SelectionTrait{ + private static Item lastItem; public Sorter(String name){ super(name); @@ -35,6 +38,13 @@ public class Sorter extends Block implements SelectionTrait{ return true; } + @Override + public void playerPlaced(Tile tile){ + if(lastItem != null){ + 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(); @@ -108,7 +118,10 @@ public class Sorter extends Block implements SelectionTrait{ @Override public void buildTable(Tile tile, Table table){ SorterEntity entity = tile.entity(); - buildItemTable(table, () -> entity.sortItem, item -> Call.setSorterItem(null, tile, item)); + buildItemTable(table, () -> entity.sortItem, item -> { + lastItem = item; + Call.setSorterItem(null, tile, item); + }); } @Override